diff --git a/src/plugins/e-acsl/Makefile.in b/src/plugins/e-acsl/Makefile.in index 5ff6b5c5d373bc5229120f94a9802d1b616d24b8..a5cb7784ea01987e9d45e20466d54ad6168de37e 100644 --- a/src/plugins/e-acsl/Makefile.in +++ b/src/plugins/e-acsl/Makefile.in @@ -41,6 +41,14 @@ else EACSL_HAS_OCAML312 = yes endif +# Utilities used to create the list of contrib/ files to be included in the +# distribution. In external mode, we can't rely on these variables to be +# set, as we have to build the list before including Makefile.dynamic. +# There is no real alternative to cat and sed anyways, which are both part of +# POSIX, so that the usefulness of the variables is questionable. +CAT?=cat +SED?=sed + ######################### # Plug-in configuration # ######################### @@ -258,7 +266,7 @@ PLUGIN_DISTRIB_EXTERNAL:=\ $(EACSL_LICENSE_FILES) \ $(EACSL_CONTRIB_FILES) -EACSL_DISTRIB_FILES:= $(PLUGIN_DISTRIB_FILES) $(EACSL_OCAML_FILES) +EACSL_DISTRIB_FILES:= $(PLUGIN_DISTRIB_EXTERNAL) $(EACSL_OCAML_FILES) # BE CAREFUL: manually remove all *.ml* files which should not be released! e-acsl-distrib: .depend @@ -355,12 +363,16 @@ install:: $(FRAMAC_DATADIR)/e-acsl/segment_model $(CP) $(E_ACSL_DIR)/share/e-acsl/glibc/* \ $(FRAMAC_DATADIR)/e-acsl/glibc - $(PRINT_INSTALL) E-ACSL manuals - $(MKDIR) $(FRAMAC_DATADIR)/manuals + # manuals are not present in standard distribution. + # Don't fail because of that. + if test -f $(E_ACSL_DIR)/doc/manuals/e-acsl.pdf; then \ + $(PRINT_INSTALL) E-ACSL manuals \ + $(MKDIR) $(FRAMAC_DATADIR)/manuals \ $(CP) $(E_ACSL_DIR)/doc/manuals/e-acsl.pdf \ $(E_ACSL_DIR)/doc/manuals/e-acsl-implementation.pdf \ $(E_ACSL_DIR)/doc/manuals/e-acsl-manual.pdf \ - $(FRAMAC_DATADIR)/manuals + $(FRAMAC_DATADIR)/manuals; \ + fi $(PRINT_INSTALL) E-ACSL libraries $(MKDIR) $(LIBDIR) $(CP) $(EACSL_LIBDIR)/libeacsl-*.a $(LIBDIR) diff --git a/src/plugins/e-acsl/configure.ac b/src/plugins/e-acsl/configure.ac index 12bc78bf3b3ab129e2ffc31e5abd097e7eeaf2ae..d19f497964483467d5c771b7a448d7217ba0116b 100644 --- a/src/plugins/e-acsl/configure.ac +++ b/src/plugins/e-acsl/configure.ac @@ -40,8 +40,29 @@ check_plugin(e_acsl,PLUGIN_RELATIVE_PATH(plugin_file), plugin_require(e_acsl,rtegen) -# restrict the plug-in dependency checking to external plug-in configuration -m4_ifndef([FRAMAC_MAIN_AUTOCONF],[check_plugin_dependencies],[]) +# E-ACSL only works on Linux as of now. Disable it on Mac OS and Windows +AC_CHECK_PROG(UNAME,uname,uname,no) + +if test "$UNAME" = "no"; then + plugin_disable(e_acsl,[Not on a POSIX platform.]) +fi + +HOST_OS=$($UNAME -s) +case $HOST_OS in +Linux | DragonFly | FreeBSD | NetBSD | OpenBSD) +# BSDs haven't really be tested, but it should at least compile fine +;; +*) + plugin_disable(e_acsl,[unsupported system $HOST_OS]) +;; +esac + +# perform additional checks when not compiled +# directly with main Frama-C distribution +m4_ifndef([FRAMAC_MAIN_AUTOCONF], +[ + +check_plugin_dependencies # Check Frama-C version ####################### @@ -74,11 +95,11 @@ use it at your own risk) fi fi;; esac +], +[]) # end of configuration specific to external compilation mode -# OCaml version -############### - -OCAMLVERSION=`ocamlc -v | sed -n -e 's|.*version *\(.*\)$|\1|p' ` +# no need to continue checking other features if E-ACSL is disabled +if test "$ENABLE_E_ACSL" != "no"; then ############################### # C specific stuff for E-ACSL # @@ -142,3 +163,5 @@ AC_MSG_NOTICE([Configure libjemalloc]) (cd plugin_dir/contrib/libjemalloc && ./autogen.sh \ --with-jemalloc-prefix="__e_acsl_native_" \ --with-private-namespace="__e_acsl_hidden_") + +fi diff --git a/src/plugins/e-acsl/contrib/libgmp/AUTHORS b/src/plugins/e-acsl/contrib/libgmp/AUTHORS deleted file mode 100644 index c8ddb90ebcfbafbb3adfdc3ad15fd0ea19d47696..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/AUTHORS +++ /dev/null @@ -1,100 +0,0 @@ -Authors of GNU MP (in chronological order of initial contribution) - -Torbjörn Granlund Main author - -John Amanatides Original version of mpz/pprime_p.c - -Paul Zimmermann mpn/generic/mul_fft.c, now defunct dc_divrem_n.c, - rootrem.c, old mpz/powm.c, old toom3 code. - -Ken Weber Now defunct mpn/generic/bdivmod.c, old mpn/generic/gcd.c - -Bennet Yee Previous versions of mpz/jacobi.c mpz/legendre.c - -Andreas Schwab mpn/m68k/lshift.asm, mpn/m68k/rshift.asm - -Robert Harley Old mpn/generic/mul_n.c, previous versions of files in - mpn/arm - -Linus Nordberg Random number framework, original autoconfery - -Kent Boortz MacOS 9 port, now defunct. - -Kevin Ryde Most x86 assembly, new autoconfery, and countless other - things (please see the GMP manual for complete list) - -Gerardo Ballabio gmpxx.h and C++ istream input - -Pedro Gimeno Mersenne Twister random generator, other random number - revisions - -Jason Moxham Previous versions of mpz/fac_ui.c and gen-fac_ui.c - -Niels Möller gen-jacobitab.c, - mpn/generic/hgcd2.c, hgcd.c, hgcd_step.c, - hgcd_appr.c, hgcd_matrix.c, hgcd_reduce.c, - gcd.c, gcdext.c, matrix22_mul.c, - gcdext_1.c, gcd_subdiv_step.c, gcd_lehmer.c, - gcdext_subdiv_step.c, gcdext_lehmer.c, - jacobi_2.c, jacbase.c, hgcd_jacobi.c, hgcd2_jacobi.c - matrix22_mul1_inverse_vector.c, - toom_interpolate_7pts, mulmod_bnm1.c, dcpi1_bdiv_qr.c, - dcpi1_bdiv_q.c, sbpi1_bdiv_qr.c, sbpi1_bdiv_q.c, - sec_invert.c, - toom_eval_dgr3_pm1.c, toom_eval_dgr3_pm2.c, - toom_eval_pm1.c, toom_eval_pm2.c, toom_eval_pm2exp.c, - divexact.c, mod_1_1.c, div_qr_2.c, - div_qr_2n_pi1.c, div_qr_2u_pi1.c, broot.c, - brootinv.c, - mpn/x86/k7/invert_limb.asm, mod_1_1.asm, - mpn/x86_64/invert_limb.asm, - invert_limb_table.asm, mod_1_1.asm, - div_qr_2n_pi1.asm, div_qr_2u_pi1.asm, - mpn/x86_64/core2/aorsmul_1.asm, - mpz/nextprime.c, divexact.c, gcd.c, gcdext.c, - jacobi.c, combit.c, mini-gmp/mini-gmp.c. - -Marco Bodrato mpn/generic/toom44_mul.c, toom4_sqr.c, toom53_mul.c, - toom62_mul.c, toom43_mul.c, toom52_mul.c, toom54_mul.c, - toom_interpolate_6pts.c, toom_couple_handling.c, - toom63_mul.c, toom_interpolate_8pts.c, - toom6h_mul.c, toom6_sqr.c, toom_interpolate_12pts.c, - toom8h_mul.c, toom8_sqr.c, toom_interpolate_16pts.c, - mulmod_bnm1.c, sqrmod_bnm1.c, nussbaumer_mul.c, - toom_eval_pm2.c, toom_eval_pm2rexp.c, - mullo_n.c, sqrlo.c, invert.c, invertappr.c; - mpz/fac_ui.c, 2fac_ui.c, mfac_uiui.c, oddfac_1.c, - primorial_ui.c, prodlimbs.c, goetgheluck_bin_uiui.c. - -David Harvey mpn/generic/add_err1_n.c, add_err2_n.c, - add_err3_n.c, sub_err1_n.c, sub_err2_n.c, - sub_err3_n.c, mulmid_basecase.c, mulmid_n.c, - toom42_mulmid.c, - mpn/x86_64/mul_basecase.asm, aors_err1_n.asm, - aors_err2_n.asm, aors_err3_n.asm, - mulmid_basecase.asm, - mpn/x86_64/core2/aors_err1_n.asm. - -Martin Boij mpn/generic/perfpow.c - -Marc Glisse gmpxx.h improvements - -David Miller mpn/sparc32/ultrasparct1/{addmul_1,mul_1,submul_1}.asm - mpn/sparc64/ultrasparct3/{mul_1,addmul_1,submul_1}.asm - mpn/sparc64/ultrasparct3/{add_n,sub_n}.asm - mpn/sparc64/ultrasparct3/{popcount,hamdist}.asm - mpn/sparc64/ultrasparct3/cnd_aors_n.asm - mpn/sparc64/{rshift,lshift,lshiftc}.asm - mpn/sparc64/tabselect.asm - -Mark Sofroniou mpn/generic/mul_fft.c type cleanup. - -Ulrich Weigand Changes to support powerpc64le: - configure.ac, mpn/powerpc64/{elf,aix,darwin}.m4, - mpn/powerpc32/{darwin,elf}.m4, - mpn/powerpc64/mode64/{dive_1,divrem_1,divrem_2}.asm, - mpn/powerpc64/mode64/{gcd_1,invert_limb,mode1o}.asm, - mpn/powerpc64/mode64/{mod_1_1,mod_1_4}.asm, - mpn/powerpc64/mode64/p7/gcd_1.asm, - mpn/powerpc64/p6/{lshift,lshiftc,rshift}.asm, - mpn/powerpc64/vmx/popcount.asm. diff --git a/src/plugins/e-acsl/contrib/libgmp/COPYING b/src/plugins/e-acsl/contrib/libgmp/COPYING deleted file mode 100644 index 94a9ed024d3859793618152ea559a168bbcbb5e2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - <program> Copyright (C) <year> <name of author> - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -<http://www.gnu.org/licenses/>. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/src/plugins/e-acsl/contrib/libgmp/COPYING.LESSERv3 b/src/plugins/e-acsl/contrib/libgmp/COPYING.LESSERv3 deleted file mode 100644 index fc8a5de7edf437cdc98a216370faf7c757279bcb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/COPYING.LESSERv3 +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/src/plugins/e-acsl/contrib/libgmp/COPYINGv2 b/src/plugins/e-acsl/contrib/libgmp/COPYINGv2 deleted file mode 100644 index d159169d1050894d3ea3b98e1c965c4058208fe1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/COPYINGv2 +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/src/plugins/e-acsl/contrib/libgmp/COPYINGv3 b/src/plugins/e-acsl/contrib/libgmp/COPYINGv3 deleted file mode 100644 index 2a000655e93f84c8d458d702e13a0f682a45cf45..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/COPYINGv3 +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <https://www.gnu.org/licenses/>. - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - <program> Copyright (C) <year> <name of author> - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -<https://www.gnu.org/licenses/>. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -<https://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/src/plugins/e-acsl/contrib/libgmp/ChangeLog b/src/plugins/e-acsl/contrib/libgmp/ChangeLog deleted file mode 100644 index 879b3106a343385b72393e103b45d29f4e69633b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/ChangeLog +++ /dev/null @@ -1,33966 +0,0 @@ -2015-11-01 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * Version 6.1.0 released. - - * mpz/inits.c [__CHECKER__]: Init limb, not pointer. - * mpz/init.c [__CHECKER__]: Likewise (spotted by Vicente Benjumea). - * tests/mpf/t-pow_ui.c: Use another mpf for the size limit. - -2015-10-30 Torbjörn Granlund <torbjorng@google.com> - - * mpf/pow_ui.c: Add log(e) precision bits. - - * doc/gmp.texi (Floating-point): Rewrite mpf introduction. - -2015-10-29 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * demos/factorize.c: mpz_div_2exp => mpz_tdiv_q_2exp. - * demos/perl/GMP.xs: Likewise. - * tests/mpf/t-pow_ui.c: Use reference value to check the size. - - * mini-gmp/mini-gmp.c: Removed a typo (spotted by Paul Zimmermann). - * doc/gmp.texi (Floating-point): Remove "infinite precision" claim. - - * gmp-h.in: Update version. - -2015-10-28 Torbjörn Granlund <torbjorng@google.com> - - * tests/mpf/t-pow_ui.c: New file. - * tests/mpf/Makefile.am (check_PROGRAMS): Compile it. - - * mpf/pow_ui.c: Rewrite for accuracy and performance. - -2015-10-26 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * configfsf.guess: Updated to version 2015-10-21, for a typo. - - * tests/cxx/t-ops.cc (check_mpq): Compare also with mpz. - (check_mpf): Compare also with mpz and mpq. - -2015-10-25 Torbjörn Granlund <torbjorng@google.com> - - * configure.ac: Avoid passing ambiguous -march=skylake. - -2015-10-21 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * Version 6.1.0-rc1 published. - - * gmp-h.in: Revert version for RC. - -2015-10-20 Torbjörn Granlund <torbjorng@google.com> - - * mpn/x86/pentium4/sse2/popcount.asm: Use LEAL. - * mpn/x86/k7/invert_limb.asm: Likewise. - -2015-10-18 Torbjörn Granlund <torbjorng@google.com> - - * mpn/arm64/gmp-mparam.h: New file. - -2015-10-18 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * Makefile.am (LIBGMP_LT_*, LIBGMPXX_LT_*): Bump version info. - * gmp-h.in: Bump version. - -2015-10-17 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpf/t-cmp_si.c: Initialise a variable (only when error arise) - * mpn/generic/toom43_mul.c: Insert parentheses around & expressions. - * mpn/generic/toom52_mul.c: Likewise. - * tests/mpn/t-minvert.c: Remove an unused var. - * tests/mpz/t-cong_2exp.c: Likewise. - -2015-10-16 Hans Wennborg <hwennborg at google.com> - - * mpn/generic/div_qr_2.c: Insert parentheses around & expressions. - * mpn/generic/toom44_mul.c: Likewise. - * mpn/generic/toom53_mul.c: Likewise. - * mpn/generic/toom62_mul.c: Likewise. - * tests/mpn/t-bdiv.c: Simplify conditional printing of whitespace. - * tests/mpn/t-div.c: Likewise. - -2015-10-15 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * configfsf.sub: Updated to version 2015-08-20, from gnulib. - * configfsf.guess: Updated to version 2015-09-14, from gnulib. - -2015-10-14 Torbjörn Granlund <torbjorng@google.com> - - * demos/pexpr.c (main): Clear out a variable. - - * mpn/generic/sqrlo_basecase.c: Move things before addmul_1 to reduce - register pressure. - - * .hgignore: Add 'compile' and 'test-driver'. - - * mpn/generic/mu_bdiv_qr.c (mpn_mu_bdiv_qr_itch): Simplify, add ASSERT. - * mpn/generic/mu_bdiv_q.c (mpn_mu_bdiv_q_itch): Likewise. - - * tune/tuneup.c (tune_mu_bdiv): Start at measured BDIV_DC_ thresholds. - -2015-10-13 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpf/clears.c, mpf/inits.c, mpq/clears.c, mpq/inits.c, - * mpz/clears.c, mpz/inits.c: Keep on supporting empty list. - -2015-10-13 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__GMPP_DEFINE_BINARY_TYPE_FUNCTION): Allow mixed operations. - (__gmp_cmp_function, __gmp_binary_equal, __gmp_binary_less): - Handle mixed operations. - (__gmp_cmp_function): Move before __gmp_binary_equal. - -2015-10-13 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpf/pow_ui.c: Increased precision of partial results. - -2015-10-12 Torbjörn Granlund <torbjorng@google.com> - - * configure.ac: Reject AVX for NetBSD. - -2015-10-11 Torbjörn Granlund <torbjorng@google.com> - - * configure.ac (fat_path): Add skylake. - -2015-10-10 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gen-fib.c: Correct the name of the program in error message. - * gen-fac.c: Likewise. - - * mpf/get_str.c: Increase precision of base^e computation. - -2015-10-09 Torbjörn Granlund <torbjorng@google.com> - - * config.guess: Recognise cabylake and goldmont and more versions of - skylake and silvermont. - * acinclude.m4 (X86_64_PATTERN): Add cabylake and goldmont. - * config.sub: Corresponding changes. - * configure.ac: Corresponding changes. - * mpn/x86_64/fat/fat.c: Corresponding changes. - -2015-09-12 Torbjörn Granlund <torbjorng@google.com> - - * mpf/clear.c, mpf/clears.c, mpf/inits.c, mpq/clear.c, mpq/clears.c - * mpq/inits.c, mpz/clear.c, mpz/clears.c, mpz/inits.c: - Streamline, use macros. - -2015-09-27 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/cfdiv_r_2exp.c: Use mpn_neg and MPZ_NEWALLOC. - * mpz/cfdiv_q_2exp.c: Use MPZ_REALLOC return value. - -2015-09-12 Torbjörn Granlund <torbjorng@google.com> - - * tests/mpf/t-cmp_si.c (check_data): Set precision reflecting data. - -2015-09-11 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpf/cmp_z.c: New file implementing mpf_cmp_z. - * mpf/Makefile.am (libmpf_la_SOURCES): Add it. - * Makefile.am (MPF_OBJECTS): Add generate object to libs. - * gmp-h.in: Declare new function. - * tests/mpf/t-cmp_si.c: Test also the new function. - * doc/gmp.texi: Document it. - -2015-09-06 Torbjörn Granlund <torbjorng@google.com> - - * Wrap remaining limb allocations in __GMP_ALLOCATE_FUNC_LIMBS. - - * mpn/x86/fat/fat.c (fake_cpuid_table): Add missing commas. - * mpn/x86_64/fat/fat.c: Likewise. - - * mpn/x86/fat/fat.c (fake_cpuid_table): Improve struct type. - * mpn/x86/fat/fat.c: Likewise. - -2015-09-03 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpq/t-cmp_z.c (sizes_test): New function, tests sizes. - -2015-09-03 Torbjörn Granlund <torbjorng@google.com> - - * acinclude.m4 (GMP_C_HIDDEN_ALIAS): New. - * configure.ac (GMP_C_HIDDEN_ALIAS): Invoke. - -2015-09-01 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpq/cmp.c (mpq_cmp_numden): Cast to avoid over/underflow. - * tests/mpn/t-toom22.c (MIN_AN): Use defined value. - * tests/mpz/t-fac_ui.c: Check big factorial modulo a larger prime. - * mpn/generic/bsqrtinv.c: Use sqrlo+mullo_n instead of powlo(,,3,,). - * mpq/div.c: Move a branch out of the normal flow. - -2015-08-31 Torbjörn Granlund <torbjorng@google.com> - - * mpn/x86/fat/fat.c (fake_cpuid_table): Update similarly to - corresponding x86_64 code. - -2015-08-31 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpq/cmp.c (mpq_cmp_z): New function to compare mpq with mpz, - asked by Vincent Delecroix for the SageMath project. - * gmp-h.in: Declare it. - * doc/gmp.texi: Document it. - * tests/mpq/t-cmp_z.c: New file to test mpq_cmp_z (from t-cmp.c). - * tests/mpq/Makefile.am (check_PROGRAMS): Add t-cmp_z. - - * mpn/generic/powlo.c: Use mpn_sqrlo. - -2015-08-29 Torbjörn Granlund <torbjorng@google.com> - - * mpn/x86_64/fat/fat.c (fake_cpuid_table): Add CPU aliases. - -2015-08-25 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * configure.ac (AH_VERBATIM): Add HAVE_NATIVE_mpn_mullo_basecase. - * mpn/generic/sqrlo.c (mpn_sqrlo): Use mullo_basecase when faster. - * mpn/generic/sqrlo_basecase.c: More readable #defines. - - * tune/tuneup.c (tune_sqrlo): New function to tune sqrlo thresholds. - (all): Call it, after multiplication and FFT. - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Add sqrlo{,_basecase}.c . - * gmp-impl.h: Add all SQRLO_*_THRESHOLD* defs, for tuning and default. - * mpn/generic/sqrlo.c: Remove default threshold definitions. - * mpn/generic/sqrlo_basecase.c: Use SQRLO_DC_THRESHOLD_LIMIT. - * mpn/minithres/gmp-mparam.h: New SQRLO_*_THRESHOLDs. - - * tune/tuneup.c (tune_mullo): Set MULLO_MUL_N_THRESHOLD to never - whenever the FFT threshold does not exist. - - * mpf/cmp.c: Remove some branches. - -2015-08-25 Torbjörn Granlund <torbjorng@google.com> - - * mpn/x86_64/x86_64-defs.m4: Output computed numbers in base-10 instead - of base-16 to avoid bugs on Solaris, FreeBSD, and old NetBSD. - -2015-08-23 Torbjörn Granlund <torbjorng@google.com> - - * mpn/x86_64/fat/fat.c (fake_cpuid_table): Add more entries, handle - Broadwell separately. - - * configure.ac (fat_path): Add coreibwl. - -2015-08-18 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/rootrem.c (logbased_root): New function. - (mpn_rootrem_internal): Use it to estimate highest 9 bits of the root. - - * gmp-impl.h (MPQ_PTR_SWAP, MPQ_SRCPTR_SWAP): New macros. - -2015-08-17 Torbjörn Granlund <torbjorng@google.com> - - * acinclude.m4 (X86_64_PATTERN): Add skylake. - * config.guess: Corresponding changes. - * config.sub: Corresponding changes. - * configure.ac: Corresponding changes. - * mpn/x86_64/skylake/gmp-mparam.h: New file. - -2015-08-15 Torbjörn Granlund <torbjorng@google.com> - - * mpn/generic/mullo_basecase.c: Provide alternative code, make default. - -2015-08-04 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/refmpn.c (refmpn_sqrlo): New function. - * tests/tests.h: Define it. - - * mpn/generic/sqrlo.c: New file, new function. - * mpn/generic/sqrlo_basecase.c: New file, new function. - * gmp-impl.h (mpn_sqrlo, mpn_sqrlo_basecase): Declare them. - * configure.ac (gmp_mpn_functions): Add new files. - - * tests/mpn/t-sqrlo.c: New file, new test. - * tests/mpn/Makefile.am (check_PROGRAMS): Add new test. - * tests/devel/try.c: Support mpn_sqrlo and mpn_sqrlo_basecase. - - * tune/common.c (speed_mpn_sqrlo{,_basecase}): New functions. - * tune/speed.c: Support new functions. - * tune/speed.h (SPEED_ROUTINE_MPN_MULLO_BASECASE): Update. - (SPEED_ROUTINE_MPN_SQRLO): New macro. - - * mpn/generic/rootrem.c: Avoid divisions if not needed. - - * tests/mpn/t-broot.c: Test also k=1. - * mpz/aorsmul_i.c: Move branches out of main line. - -2015-07-28 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/sqrtrem.c (mpn_dc_sqrt): Support odd sizes. - -2015-07-16 Torbjörn Granlund <torbjorng@google.com> - - * tune/speed.c: Remove now redundant MPN_FILL. - - * configure.ac (hppa-hpux): Never use O3 optimisation. - -2015-07-09 Torbjörn Granlund <torbjorng@google.com> - - * mpn/ia64/add_n_sub_n.asm: Make it work for HP-UX. - * mpn/ia64/addmul_2.asm: Likewise. - * mpn/ia64/aors_n.asm: Likewise. - * mpn/ia64/aorsorrlshC_n.asm: Likewise. - * mpn/ia64/cnd_aors_n.asm: Likewise. - * mpn/ia64/gcd_1.asm: Likewise. - * mpn/ia64/lshiftc.asm: Likewise. - * mpn/ia64/mod_34lsub1.asm: Likewise. - * mpn/ia64/mul_2.asm: Likewise. - * mpn/ia64/sec_tabselect.asm: Likewise. - * mpn/ia64/sqr_diag_addlsh1.asm: Likewise. - -2015-07-01 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-impl.h (MPN_FILL): New macro, generalise MPN_ZERO. - - * mpn/generic/sqrtrem.c (mpn_dc_sqrt): New function not computing remainder. - (mpn_dc_sqrtrem): Use tdiv_q instead of divrem, use given scratch space. - (mpn_sqrtrem): Use mpn_dc_sqrt for both even and odd sizes. - -2015-06-24 Torbjörn Granlund <torbjorng@google.com> - - * mpn/x86_64/fastsse/com.asm: Disalllow zero size operands. - - * mpn/x86_64/fastsse/copyi.asm: Suppress looping in basecase code. - -2015-06-23 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/sqrtrem.c (mpn_sqrtrem2): Simplify branches. - (mpn_dc_sqrtrem): Don't compute remainder if not needed. - -2015-06-23 Torbjörn Granlund <torbjorng@google.com> - - * gmp-impl.h: Remove K&R stringize support. - * tests/devel/try.c: Likewise. - * tests/t-constants.c: Likewise. - * tests/mpf/t-fits.c: Likewise. - * tests/mpz/t-fits.c: Likewise. - - * configure.ac (AC_C_STRINGIZE): Remove. - -2015-06-15 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/devel/try.c: Support mpn_sqrt (sqrtrem with remainder = NULL). - * mpn/generic/sqrtrem.c: Reorder branches for single limb operands. - -2015-06-15 Torbjörn Granlund <torbjorng@google.com> - - * config.guess: Rewrite code for AVX handling to deal with broken cpuid - states. - -2015-06-11 Torbjörn Granlund <torbjorng@google.com> - - * mpn/x86/k7/gcd_1.asm: Align stack for calls. - * mpn/x86/p6/gcd_1.asm: Amend last change: align for PIC and non-PIC. - -2015-06-10 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/sqrtrem.c: Use sqrtrem1 for single limb operands. - - * tests/mpz/t-root.c: Check also mpz_root return value. - * mpn/generic/rootrem.c: Shorten first and last loop. - - * mpn/generic/toom2_sqr.c: Add some ASSERTs. - * mpn/generic/toom22_mul.c: Likewise. - * tests/mpn/t-toom22.c: stop testing some unsafe (unused) corner cases. - -2015-06-08 Torbjörn Granlund <torbjorng@google.com> - - * mpn/x86/p6/gcd_1.asm: Align stack for calls. - -2015-06-06 Torbjörn Granlund <torbjorng@google.com> - - * config.sub: Recognise any arm*neon CPU. - * configure.ac (powerpc): Add p8 directory for power8 and later. - * mpn/powerpc64/mode64/p8/invert_limb.asm: New file. - -2015-06-01 Torbjörn Granlund <torbjorng@google.com> - - * tune/speed.c (routine): Measure "mpn_sqrt" and "mpn_root", which are - really the corresponding "rem" functions with NULL remainder argument. - - * tune/speed.h (SPEED_ROUTINE_MPN_SQRTROOT_CALL): New. - (SPEED_ROUTINE_MPN_SQRTREM, SPEED_ROUTINE_MPN_ROOTREM): Remove. - - * tune/common.c (speed_mpn_sqrt, speed_mpn_root): New functions. - (speed_mpn_sqrtrem): Use SPEED_ROUTINE_MPN_SQRTROOT_CALL - (speed_mpn_rootrem): Likewise. - -2015-05-30 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpf/cmp_ui.c: Use macros, remove branches, correct nails. - * mpf/cmp_si.c: Likewise. - * mpf/int_p.c: Use a simpler loop to ignore zero limbs. - - * mpf/sqrt_ui.c: Special case for sqrt(1). - * tests/mpf/t-sqrt_ui.c: Test special cases. - - * gmp-h.in: Declare (and inline) mpn_zero_p. - * gmp-impl.h: Remove mpn_zero_p. - * mpn/generic/zero_p: New file to include the function in the library. - * configure.ac (gmp_mpn_functions): Add it. - * doc/gmp.texi: Document it. - - * mpz/combit.c: Call mpn_zero_p only if size is not zero. - * mpz/scan1.c: Likewise. - * tests/mpn/t-brootinv.c: Likewise. - * tests/mpn/t-div.c: Likewise. - * tests/mpn/t-minvert.c: Likewise. - - * mini-gmp/mini-gmp.h: Declare mpn_zero_p. - * mini-gmp/mini-gmp.c: Define mpn_zero_p as a function, not a macro. - -2015-05-28 Niels Möller <nisse@lysator.liu.se> - - * doc/gmp.texi (Low-level Functions): Document mpn_divexact_1 and - mpn_cnd_swap (the latter was forgotten for the 2015-02-08 change). - -2015-05-28 Linus Nordberg <linus@nordberg.se> - - * configure.ac: Remove double quotes in help strings, make some - clarifications. - -2015-05-24 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpq/div.c: Reduce memory use. - * tests/mpq/reuse.c: Test also mpq_FUNCTION (x,x,x). - * mpz/swap.c: Use _SWAP macros. - -2015-05-18 Torbjörn Granlund <torbjorng@google.com> - - * configure.ac (arm): Let compiler decide about arm vs thumb encoding. - -2015-05-18 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-h.in (mpn_neg): Niels' code using mpn_neg. - * gmp-h.in (mpn_com): Unconditionally declare prototype. - -2015-05-17 Torbjörn Granlund <torbjorng@google.com> - - * mpn/arm/v6/sqr_basecase.asm: Rewrite for speed. - -2015-05-16 Torbjörn Granlund <torbjorng@google.com> - - * mpn/arm/v6/addmul_2.asm: Rewrite for speed and size. - -2015-05-15 Torbjörn Granlund <torbjorng@google.com> - - * mpn/arm/v7a/cora7/gmp-mparam.h: New file. - * mpn/arm/v7a/cora8/gmp-mparam.h: New file. - * configure.ac (arm): Point to new directories. - -2015-05-15 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/invertappr.c: Reduce memory usage. - * gmp-impl.h (mpn_invertappr_itch): Update accordingly. - * tune/tuneup.c (tune_invertappr, tune_invert): Update min_size. - - * mpn/generic/mu_div_qr.c: Pass scratch memory to mpn_invertappr. - * mpn/generic/mu_divappr_q.c: Likewise. - -2015-05-12 Felix Janda <felix.janda@posteo.de> - - * mpn/powerpc32/elf.m4 (LEA): Adopt to new ABI. - -2015-05-09 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/invertappr.c: Reduce memory usage. - * gmp-impl.h (mpn_invertappr_itch): Update accordingly. - -2015-05-01 Torbjörn Granlund <torbjorng@google.com> - - * tune/tuneup.c (all): Make GCD tuning last since it is not robust. - -2015-04-27 Torbjörn Granlund <torbjorng@google.com> - - * mpn/x86_64/coreibwl/gmp-mparam.h: New file. - -2015-04-26 Torbjörn Granlund <torbjorng@google.com> - - * mpn/x86_64/coreibwl/mul_basecase.asm: New file. - * mpn/x86_64/coreibwl/sqr_basecase.asm: New file. - -2015-04-26 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tune/common.c (speed_mpn_neg, speed_mpz_2fac_ui): New functions. - (speed_mpn_add_1, speed_mpn_add_1_inplace): New functions. - (speed_mpn_sub_1, speed_mpn_sub_1_inplace): New functions. - * tune/speed.h: Declare them all. - * tune/speed.c (routine): Added mpn_neg, mpn_add_1, mpn_sub_1, - mpn_add_1_inplace, mpn_sub_1_inplace, and mpz_2fac_ui. - -2015-04-25 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/invert.c: Split add in the correction test. - * mpn/generic/invertappr.c: Cleanup of loops and branches. - - * mpn/generic/hgcd_reduce.c: Use TMP_ALLOC_LIMBS_3. - * mpn/generic/powm.c: Use TMP_ALLOC_LIMBS_2. - * mpn/generic/rootrem.c: Likewise. - * mpn/generic/remove.c: Remove redundant #ifdef. - * mpn/generic/perfpow.c: Likewise. - -2015-04-21 Torbjörn Granlund <torbjorng@google.com> - - * printf/sprintffuns.c (gmp_sprintf_final): Remove extra parameters. - - * mpn/arm/v6/popham.asm: Add MULFUNC_PROLOGUE. - * mpn/powerpc64/mode64/rsh1aors_n.asm: Likewise. - * mpn/powerpc64/mode64/p6/aorsmul_1.asm: Likewise. - -2015-04-19 Torbjörn Granlund <torbjorng@google.com> - - * mpn/x86_64/x86_64-defs.m4 (oplist): Fix typo. - (mulx): Simplify. - (adcx, adox): New defines, using helper function adx. - * mpn/x86_64/coreibwl/mul_1.asm: New file. - * mpn/x86_64/coreibwl/addmul_1.asm: New file. - * configure.ac (x86_64): Put coreibwl in appropriate code path. - - * configure.ac (x86_64): Pass more exact Intel CPU options. - -2015-04-13 Torbjörn Granlund <torbjorng@google.com> - - * longlong.h (arm): Rewrite. Support thumb2; use gcc builtins for - count_leading_zeros, use accurate code selection critera. - -2015-04-13 Marc Glisse <marc.glisse@inria.fr> - - * configure.ac (x86_64): Extend noavx to ABI=64. - -2015-04-10 Torbjörn Granlund <torbjorng@google.com> - - * mpn/alpha/ev6/mod_1_4.asm: Use LDGP. - -2015-04-01 Torbjörn Granlund <torbjorng@google.com> - - * configure.ac (sparc): Don't use use -xO4, it miscompiles by design. - -2015-03-24 Torbjörn Granlund <torbjorng@google.com> - - * mpn/generic/mul_fft.c (mpn_fft_best_k): Don't make pointers `static' - just because they point to static (i.e., file-local) data. - -2015-03-15 Torbjörn Granlund <torbjorng@google.com> - - * acinclude.m4 (X86_64_PATTERN): Add CPU code names. - - * config.guess: Add more CPUs, use CPU code names. - * config.sub: Corresponding changes. - * configure.ac: Corresponding changes. - -2015-02-21 Niels Möller <nisse@lysator.liu.se> - - * gmp-h.in (mpn_divexact_1): New public declaration. - * gmp-impl.h: Moved from here. - -2015-02-08 Niels Möller <nisse@lysator.liu.se> - - * doc/gmp.texi (Low-level Functions): Document mpn_cnd_swap. - - * mpn/generic/cnd_swap.c (mpn_cnd_swap): New file, moved function - here. Also changed cnd argument type from int to mp_limb_t. - * mpn/generic/sec_invert.c (mpn_cnd_swap): Old location. - * configure.ac: Added cnd_swap. - * gmp-h.in (mpn_cnd_swap): Added prototype. - -2015-01-19 Torbjörn Granlund <torbjorng@google.com> - - * configure.ac (arm): Provide architecture specific configs in addition - to implementation specific configs. - - * config.guess (arm): Use configfsf.guess's guess as default before - conditionally appending "neon". - -2015-01-08 Torbjörn Granlund <torbjorng@google.com> - - * config.guess: Match POWER8 for AIX. - - * longlong.h: Add many casts inside assembly input operands, this - insures proper zero extension. - -2014-12-27 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__gmp_unary_expr): Use __gmp_resolve_ref. - (__gmp_expr): New specialization for unary expressions with - a builtin argument. - -2014-12-26 Marc Glisse <marc.glisse@inria.fr> - - * gmp-impl.h (tmp_debug_entry_t): Change block to type void*. - -2014-12-22 Torbjörn Granlund <torbjorng@google.com> - - * longlong.h (mips64, mips32): Work around one clang bug. - -2014-12-18 Torbjörn Granlund <torbjorng@google.com> - - * longlong.h (umul_ppmm): Use input temps in more places. - -2014-12-10 Marc Glisse <marc.glisse@inria.fr> - - * tests/cxx/clocale.c (localeconv, nl_langinfo): Match glibc's - prototype in C++. - -2014-12-09 Torbjörn Granlund <torbjorng@google.com> - - * configure.ac (powerpc): Remove hardwired -mpowerpc, causes clang - problems. Optionally pass -m32. - -2014-12-08 Marc Glisse <marc.glisse@inria.fr> - - * config.guess (ultrasparc*-*-*): Update for T4 and T5. - * config.sub (ultrasparc*-*-*): Update for T5. - * configure.ac (ultrasparc*-*-*): Update for T5. - - * longlong.h (sparc64): Define COUNT_LEADING_ZEROS_NEED_CLZ_TAB - with VIS3. - - * tests/misc/t-locale.c (localeconv, nl_langinfo): Match glibc's - prototype in C++. - * tests/mpf/t-get_si.c (check_limbdata): Avoid narrowing conversion - from -1 to unsigned inside {}. - -2014-12-02 Torbjörn Granlund <torbjorng@google.com> - - * config.guess (arm*-*-*): Redirect stderr. - -2014-11-26 Torbjörn Granlund <torbjorng@google.com> - - * configure.ac (arm*-*-*): Optionally pass redundant fpu mode options - in order to placate clang. - - * mpn/arm/neon/lshiftc.asm: Avoid insn form missing from clang. - -2014-11-24 Torbjörn Granlund <torbjorng@google.com> - - * configure.ac (mips*-*-*): Provide ABI synonyms (for clang pretending - to be gcc). - -2014-11-18 Torbjörn Granlund <torbjorng@google.com> - - From Hannes Mehnert: - * config.guess (arm*-*-*): Base guesses on first matching /proc/cpuinfo - line. - -2014-11-17 Torbjörn Granlund <torbjorng@google.com> - - * longlong.h (__longlong_h_C): New macro. - (mpn_umul_ppmm, etc): Use it for C++ support. - -2014-11-15 Torbjörn Granlund <torbjorng@google.com> - - * tests/mpz/reuse.c: Make function vectors 'static'. - - * tests/mpn/logic.c (check_one): Make string variable 'const'. - - * tests/mpz/t-perfpow.c (tests): Make 'static'. - - * tune/tuneup.c (fftmes): Remove an unused variable. - -2014-11-15 Marc Glisse <marc.glisse@inria.fr> - - * tests/amd64check.c (calling_conventions_fenv): Mark as extern "C". - * tests/x86check.c (calling_conventions_fenv): Likewise. - -2014-11-13 Hans Wennborg <hwennborg@google.com> - - * mpn/generic/toom_interpolate_8pts.c: Fix operator precedence in - ASSERT. - -2014-11-13 Torbjörn Granlund <torbjorng@google.com> - - * tune/speed.h: Add casts for C++ compatibility. - (speed_cyclecounter): Mark as extern "C". - (mpn_mod_1_1p_1, mpn_mod_1_1p_2): Correct prototype. - - * tune/tune-gcd-p.c: Add casts for C++ compatibility. - - * tune/tuneup.c: Add casts for C++ compatibility. - (mpn_divrem_1_tune, mpn_mod_1_tune): Mark as extern "C". - (INSERT_FFTTAB): Produce sentinels differently to silence compiler. - -2014-11-12 Torbjörn Granlund <torbjorng@google.com> - - * gen-psqr.c: Add casts for C++ compatibility. - - * tests/misc/t-scanf.c: Include config.h early for HAVE_xxx. - -2014-11-08 Torbjörn Granlund <torbjorng@google.com> - - * mpn/x86/x86-defs.m4 (LEA, LEAL): Make sure to put eip stub code in - text segment. - * mpn/x86/darwin.m4: Likewise. - - * tune/speed.h (i386 speed_cyclecounter): Remove inline asm code, rely - on external version. - -2014-11-06 Torbjörn Granlund <torbjorng@google.com> - - * config.guess: Ignore appended letters such E in POWER8E. - * configure.ac: Supply cflags for power8, power9. - -2014-11-03 Torbjörn Granlund <torbjorng@google.com> - - * mpn/powerpc32/addmul_1.asm: Avoid negative stack pointer references. - * mpn/powerpc32/lshift.asm: Likewise. - * mpn/powerpc32/lshiftc.asm: Likewise. - * mpn/powerpc32/p3-p7/aors_n.asm: Likewise. - * mpn/powerpc32/rshift.asm: Likewise. - * mpn/powerpc32/sec_tabselect.asm: Likewise. - * mpn/powerpc32/submul_1.asm: Likewise. - * mpn/powerpc32/vmx/mod_34lsub1.asm: Likewise. - -2014-10-13 Torbjörn Granlund <torbjorng@google.com> - - * acinclude.m4 (freebsd hacked gcc): Test for crash-prone FreeBSD gcc. - -2014-10-03 Peter Breitenlohner <peb@mppmu.mpg.de> - - * mpn/generic/sec_tabselect.c: Adjust type to silence compiler. - -2014-10-01 Torbjörn Granlund <torbjorng@google.com> - - * All Makefile.am: INCLUDES => AM_CPPFLAGS. - - * configure.ac (arm64): Set gcc_cflags_maybe to enable Neon (for clang - pretending to be gcc). - -2014-09-24 Marc Glisse <marc.glisse@inria.fr> - - * longlong.h (arm64 count_trailing_zeros, count_leading_zeros): Use - gcc's builtins. - (arm64 umul_ppmm): Use macro arguments only once. - -2014-09-22 Marc Glisse <marc.glisse@inria.fr> - - * mpn/arm64/lshift.asm: Avoid negative immediates. - * mpn/arm64/rshift.asm: Likewise. - -2014-09-13 Marc Glisse <marc.glisse@inria.fr> - - * mpn/generic/div_qr_1n_pi1.c: Honor NO_ASM. - * mpn/generic/div_qr_1n_pi2.c: Likewise. - * mpn/generic/div_qr_1u_pi2.c: Likewise. - * mpn/generic/div_qr_2.c: Likewise. - * mpn/generic/mod_1_1.c: Likewise. - * mpn/generic/redc_2.c: Likewise. - -2014-08-31 Torbjörn Granlund <tege@gmplib.org> - - * mpn/arm64/lshift.asm: New file. - * mpn/arm64/rshift.asm: New file. - -2014-09-01 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-impl.h (TMP_ALLOC_LIMBS_3): New macro to allocate 3 blocks. - (mpn_remove): Update declaration with mp_srcptr arguments. - * mpn/generic/remove.c: Use TMP_ALLOC_LIMBS_3. mp_srcptr for args. - - * mpn/generic/perfpow.c (pow_equals): TMP_DECL only where needed. - (perfpow): Use TMP_ALLOC_LIMBS_3. - (mpn_perfect_power_p): Skip useless allocations. Use mpn_remove. - * tests/mpz/t-perfpow.c (check_random): Check more perfect powers. - - * mpn/generic/divis.c: Use TMP_ALLOC_LIMBS_2. Share a count. - -2014-08-30 Torbjörn Granlund <tege@gmplib.org> - - * mpn/arm64/mod_34lsub1.asm: New file. - -2014-08-27 Niels Möller <nisse@lysator.liu.se> - - * mini-gmp/mini-gmp.c (mpz_abs_sub_bit): Do full normalization, - needed if mpz_clrbit clears the most significant one bit. - -2014-08-23 Torbjörn Granlund <tege@gmplib.org> - - * mpn/arm64/bdiv_dbm1c.asm: New file. - - * mpn/arm64/com.asm: New file. - - * mpn/arm64/sec_tabselect.asm: New file. - - * mpn/arm64/popcount.asm: New file. - * mpn/arm64/hamdist.asm: New file. - - * configure.ac: Put generic arm/neon earlier in path. - -2014-08-14 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpq/canonicalize.c: Earlier check for negative denominator. - * mpq/set_d.c: Stricter allocation. - -2014-08-03 Torbjörn Granlund <tege@gmplib.org> - - * mpn/x86_64/bobcat/mul_1.asm: Fix typo in offset affecting DOS64. - -2014-07-28 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/fib2_ui.c: remove #if HAVE_NATIVE_mpn_rsblsh_n. - * mpz/fib2_ui.c: Use tabulated values, when available. - * mpz/fib_ui.c: #if HAVE_NATIVE_mpn_addlsh1_n, use it. - - * mpq/cmp_ui.c: Remove a branch. - * mpq/cmp_si.c: Likewise. - - * mpn/generic/toom_interpolate_7pts.c: Replace an in-place add - with add_n + INCR_U. - - * tests/mpf/t-fits.c: use ui_sub instead of sub_ui+neg. - - * mini-gmp/mini-gmp.c: Remove some useless variables. - -2014-07-27 Torbjörn Granlund <tege@gmplib.org> - - * mpn/x86/k7/gcd_1.asm: Use LEAL. - - * mpn/x86/x86-defs.m4 (LEAL): New. - (LEA): Append to `load_eip' instead of ASM_END, like darwin.m4. - * mpn/x86/darwin.m4 (LEAL): New. - -2014-07-26 Torbjörn Granlund <tege@gmplib.org> - - * mpn/x86/pentium/mode1o.asm: Add Darwin PIC code. - * mpn/x86/pentium/bdiv_q_1.asm: Likewise. - * mpn/x86/pentium/dive_1.asm: Likewise. - * mpn/x86/pentium/popcount.asm: Likewise. - * mpn/x86/pentium/hamdist.asm: Likewise. - * mpn/x86/k6/gcd_1.asm: Likewise. - - * mpn/x86: Append ASM_END to many files. - * tests/x86call.asm: Append ASM_END. - - * mpn/x86/fat/fat_entry.asm (FAT_ENTRY, FAT_INIT): - Support Darwin. - - * mpn/x86/darwin.m4 (ASM_END): New, body from EPILOGUE_cpu. - (EPILOGUE_cpu): Remove. - - * mpn/x86/x86-defs.m4 (LEA): Put `mov_eip_' thunks in ASM_END instead - of EPILOGUE_cpu. - -2014-07-05 Niels Möller <nisse@lysator.liu.se> - - * doc/gmp.texi (Low-level Functions): Document that scratch need - for mpn_sec_add_1 and mpn_sec_sub_1 are at most n limbs. - (Low-level Functions): Document allowed overlap for mpn_addmul_1 - and mpn_submul_1. - -2014-07-02 Torbjörn Granlund <tege@gmplib.org> - - * mpn/x86_64/x86_64-defs.m4: Fix quoting. - - * mpn/x86_64/atom/redc_1.asm: Enforce proper stack allocation. - * mpn/x86_64/bobcat/redc_1.asm: Likewise. - * mpn/x86_64/core2/divrem_1.asm: Likewise. - * mpn/x86_64/core2/gcd_1.asm: Likewise. - * mpn/x86_64/core2/redc_1.asm: Likewise. - * mpn/x86_64/coreihwl/redc_1.asm: Likewise. - * mpn/x86_64/coreinhm/redc_1.asm: Likewise. - * mpn/x86_64/coreisbr/redc_1.asm: Likewise. - * mpn/x86_64/divrem_1.asm: Likewise. - * mpn/x86_64/divrem_2.asm: Likewise. - * mpn/x86_64/gcd_1.asm: Likewise. - * mpn/x86_64/mod_1_1.asm: Likewise. - * mpn/x86_64/mod_1_2.asm: Likewise. - * mpn/x86_64/mod_1_4.asm: Likewise. - -2014-06-30 Torbjörn Granlund <tege@gmplib.org> - - * config.sub: Generalise x86 patterns. - -2014-06-17 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__gmp_gcd_function, __gmp_lcm_function): New classes. - (gcd, lcm): New functions. - * doc/gmp.texi (C++ Interface Integers): Document them. - * tests/cxx/t-ops2.cc (checkz): Test them. - -2014-06-16 Torbjörn Granlund <tege@gmplib.org> - - * mpf/mul.c: Postpone TMP_MARK. - - * mpn/generic/perfpow.c (perfpow): Combine TMP_ALLOCs. - -2014-06-15 Torbjörn Granlund <tege@gmplib.org> - - * tests/refmpn.c (refmpn_mul): Rewrite to avoid O(n) recursion depth. - -2014-06-09 Torbjörn Granlund <tege@gmplib.org> - - * mpn/generic/mullo_n.c: Remove default THRESHOLDs. - * gmp-impl.h: Put MULLO THRESHOLDs here. Improve various THRESHOLD - defaults. - -2014-06-08 Torbjörn Granlund <tege@gmplib.org> - - * gmp-impl.h (TMP_ALLOC): Decrease limit to about half. - - * mpn/generic/toom53_mul.c: Replace many TMP_SALLOC invocations - by a single TMP_ALLOC. - * mpn/generic/toom42_mul.c: Likewise. - - * mpn/generic/sec_sqr.c: Don't unconditionally call mpn_sqr_basecase - since it fails for non-cryptographic sizes for some obsolete CPUs. - - * mpn/generic/sec_powm.c: Remove own squaring code, instead use - mpn_mul_basecase. - - * tests/mpn/logic.c (main): Don't use TMP_SALLOC_LIMBS. - - * mpn/generic/dcpi1_div_q.c: Avoid TMP_SALLOC_LIMBS. - * mpn/generic/dcpi1_div_qr.c: Likewise. - -2014-06-08 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/mul.c: Tighter allocation in Toom{2,3}X branches. - -2014-06-06 Torbjörn Granlund <tege@gmplib.org> - - * mpn/generic/mul.c: Swap some TMP_SALLOC_LIMBS for TMP_ALLOC_LIMBS - and some TMP_ALLOC_LIMBS for TMP_SALLOC_LIMBS. - -2014-05-31 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpf/ui_sub.c: Remove buggy code, use a wrapper to mpf_sub. - * tests/mpf/t-sub.c: More corner cases and strict checking. - * mpf/sub.c: Use more mpn_ primitives and macros. - - * tests/mpf/t-int_p.c: Test numbers with both integer and - fractionary parts. - - * mpf/int_p.c: Delay zero branch and use mpn_zero_p. - * mpf/fits_s.h: No special case for SIZ == 0. - * mpf/fits_u.h: Likewise. - -2014-05-29 Marc Glisse <marc.glisse@inria.fr> - - * gmp-h.in: Include <limits.h>. - (__GMP_UINT_MAX, __GMP_ULONG_MAX, __GMP_USHRT_MAX): Remove. - * gmp-impl.h (ULONG_MAX, UINT_MAX, USHRT_MAX, LONG_MAX, INT_MAX, - SHRT_MAX): Remove unnecessary redefinition. - * tests/t-gmpmax.c: Remove file. - * tests/Makefile.am: Remove t-gmpmax. - -2014-05-22 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpf/t-sub.c (check_data): Test also ui_sub and sub_ui. - -2014-05-20 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gen-fac.c: +1 in the init2 argument before setbit. - * gen-fib.c: Likewise. (Thanks Niels) - * mini-gmp/mini-gmp.c: Likewise. - * rand/randmts.c: Likewise. - - * mpn/generic/invert.c: Remove unused TMP_MARK. - * mpn/generic/invertappr.c: Avoid a branch. - * mpz/millerrabin.c (millerrabin): Consider the rare case n is a power. - -2014-05-15 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/mini-gmp.c: Micro-optimisations. - - * gen-fib.c: Use mpz_setbit. - * gen-psqr.c: Skip even numbers when looking for primes. - - * mpn/generic/invert.c: Avoid a branch. - * mpn/generic/toom2_sqr.c: Avoid a few branches in the odd case. - * mpn/generic/toom22_mul.c: Likewise. - -2014-05-08 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (std::common_type): Remove partial specialization for two - identical expressions. New partial specialization for a single type. - * tests/cxx/t-cxx11.cc: Test it. - -2014-04-14 Niels Möller <nisse@lysator.liu.se> - - * doc/gmp.texi (mpz_invert): Clarify behavior in the zero ring. - -2014-04-04 Marc Glisse <marc.glisse@inria.fr> - - * longlong.h (i386): Add comment about "cc" clobber. - -2014-04-04 Torbjorn Granlund <tege@gmplib.org> - - * acinclude.m4 (X86_64_PATTERN): Generalise patterns to allow "noavx" - suffix. - - * mpn/generic/div_qr_1n_pi1.c: Conditionalise ARM asm on !__thumb__. - -2014-04-03 Marc Glisse <marc.glisse@inria.fr> - - * mpn/arm64/mul_1.asm, mpn/arm64/gcd_1.asm: Use official b.cond syntax. - * mpn/arm64/invert_limb.asm, mpn/arm64/aorsmul_1.asm: Prefix - immediates with #. - -2014-04-03 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Append "noavx" for CPUs which have AVX but where the - kernel does not support it. - * configure.ac: Accept "noavx" cpu name suffixes. Conditionally pass - -mno-avx. - -2014-04-02 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/k8/redc_1.asm: Workaround for Darwin assembler quirk. - -2014-03-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mod_1_1.c: Conditionalise ARM asm on !__thumb__. - -2014-03-31 Marc Glisse <marc.glisse@inria.fr> - - * mpn/arm/dive_1.asm, mpn/arm/invert_limb.asm: Use RODATA. - * acinclude.m4 ([long long reliability tests]): Declare functions. - (GMP_PROG_CC_FOR_BUILD_WORKS, GMP_PROG_EXEEXT_FOR_BUILD, - GMP_C_FOR_BUILD_ANSI, GMP_CHECK_LIBM_FOR_BUILD): Replace exit(0) with - return 0, no declaration needed. - (GMP_CHECK_LIBM_FOR_BUILD): Include <math.h> to declare log. - -2014-03-30 Marc Glisse <marc.glisse@inria.fr> - - * README: Remove mention to Berkeley MP compatibility. - -2014-03-26 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/gcd_1.asm: Provide default for - BMOD_1_TO_MOD_1_THRESHOLD. - -2014-03-24 Torbjorn Granlund <tege@gmplib.org> - - * Version 6.0.0 released. - - * mpn: Update countless gmp-mparam.h files. - -2014-03-22 Torbjorn Granlund <tege@gmplib.org> - - * Makefile.am (LIBGMP_LT_*, LIBGMPXX_LT_*): Bump version info. - * gmp-h.in: Bump version. - -2014-03-17 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac: Remove clipper, i960, ns32k, pyr, a29k, z8000. - * mpn/clipper: Remove directory and all its files. - * mpn/i960: Likewise. - * mpn/ns32k: Likewise. - * mpn/pyr: Likewise. - * mpn/a29k: Likewise. - * mpn/z8000: Likewise. - * mpn/Makefile.am (TARG_DIST): Purge removed directories. - * doc/gmp.texi: Remove special mentions of removed architectures. - -2014-03-12 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/mini-gmp.c (mpz_probab_prime_p): Micro-optimisation. - -2014-03-12 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/bd2/gmp-mparam.h: New file. - * mpn/x86_64/bd2/gmp-mparam.h: New file. - -2014-03-06 Niels Möller <nisse@lysator.liu.se> - - * tests/mpz/t-pprime_p.c (check_composites): New function. - (check_primes): New function. - (main): Call them. Also use TESTS_REPS. - - * mini-gmp/mini-gmp.c (gmp_millerrabin): New internal function. - (mpz_probab_prime_p): New function. - * mini-gmp/mini-gmp.h (mpz_probab_prime_p): Declare it. - * mini-gmp/tests/t-pprime_p.c: New test program. - * mini-gmp/tests/Makefile (CHECK_PROGRAMS): Added t-pprime_p. - -2014-03-03 Niels Möller <nisse@lysator.liu.se> - - * mini-gmp/mini-gmp.c (mpz_congruent_p): New function. - * mini-gmp/mini-gmp.h: Declare it. - * mini-gmp/tests/t-cong.c: New file, based on tests/mpz/t-cong.c. - * mini-gmp/tests/Makefile (CHECK_PROGRAMS): Added t-cong. - - * mini-gmp/tests/testutils.c (dump): New function. Deleted static - functions in other files. - (mpz_set_str_or_abort): Moved function here, from... - * mini-gmp/tests/t-cmp_d.c: ... old location. - - * mini-gmp/tests/t-reuse.c (dump3): Renamed, from ... - (dump): ...old name. - -2014-03-01 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/sec_powm.c (mpn_sec_powm): Clarify comment and - asserts. - -2014-02-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fat/fat.c (fake_cpuid): Handle id 7, make bold claims. - -2014-02-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fat/fat_entry.asm: Zero ecx for the benefit of new BMI2 - feature test. - - * mpn/x86_64/fat/fat.c (__gmpn_cpuvec_init): Run CPUVEC_SETUP_coreihwl - conditionally on BMI2 availability. - - * config.guess: Revert "coreihwl" to "coreisbr" if cpuid indicates that - BMI2 is missing. - (x86 cpuid, 2 variants): Zero ecx for the benefit of new BMI2 feature - test. - -2014-02-21 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/mini-gmp.c (mpn_sqrtrem): New function. - * mini-gmp/mini-gmp.h: Declare it. - * mini-gmp/tests/t-sqrt.c: Test it. - -2014-02-17 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/div_qr_1.c (mpn_div_qr_1): Revert yesterday's fix. - Hopefully no longer needed. - - * mpn/s390_64/gmp-mparam.h (DIV_QR_1_NORM_THRESHOLD): Up to 1. - * mpn/s390_64/z10/gmp-mparam.h (DIV_QR_1_NORM_THRESHOLD): Up to 1. - - * tune/tuneup.c (tune_div_qr_1): Ensure DIV_QR_1_NORM_THRESHOLD, - DIV_QR_1_UNNORM_THRESHOLD >= 1. - -2014-02-16 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/div_qr_1.c: Disallow DIV_QR_1_NORM_THRESHOLD==0. - -2014-02-15 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpn/t-div.c: Fix typo. - -2014-02-15 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * doc/gmp.texi (mpz_roinit_n, MPZ_ROINIT_N): Document that - at least a readable limb is required. - * mini-gmp/mini-gmp.c (mpz_div_qr): init + set = init_set . - -2014-02-14 Niels Möller <nisse@lysator.liu.se> - - * doc/gmp.texi (Low-level Functions): Update docs for - mpn_sec_powm, to specify that left-over exponent bits must be - zero. - -2014-02-11 Niels Möller <nisse@lysator.liu.se> - - * Makefile.am (EXTRA_DIST): Distribute COPYING.LESSERv3, - COPYINGv2, and COPYINGv3. - - * doc/gmp.texi (Low-level Functions): Updated mpn_sec_powm docs. - - * mpn/generic/sec_powm.c (mpn_sec_powm): Replaced exponent limb - count argument by bit count. Don't leak high exponent bits, and - drop the requirement that the most significant exponent limb is - non-zero. - (mpn_sec_powm_itch): Analogous interface change. - * gmp-h.in: Updated prototypes. - * mpz/powm_sec.c (mpz_powm_sec): Update mpn_sec_powm* calls. - * tune/tuneup.c (tune_powm_sec): Likewise. Also deleted code - fiddling with the high exponent bits. - -2014-02-10 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/tests/t-limbs.c: New test for mpz_limbs_*. - * mini-gmp/tests/Makefile (CHECK_PROGRAMS): Add it. - -2014-02-09 Niels Möller <nisse@lysator.liu.se> - - * tune/tuneup.c (tune_powm_sec): Avoid timing of the nonsensical - parameters nbits = 1, winsize = 2. Decrement tabulated values, to - better match the > comparison when the table is used. - - * mpn/generic/sec_powm.c (win_size): Comment why we always get - win_size(eb) <= eb. Make the table const. - (mpn_sec_powm): Deleted handling of winsize > initial ebi. For - now, replaced with an ASSERT_ALWAYS. - -2014-02-08 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/mini-gmp.c (mpz_realloc2, mpz_limbs_read, mpz_limbs_modify - mpz_limbs_write, mpz_limbs_finish, mpz_roinit_n): New functions. - (mpn_perfect_square_p): New function. - * mini-gmp/mini-gmp.h: Declare them. - - * mini-gmp/tests/t-mul.c: Use roinit and limbs_read to test mpn. - * mini-gmp/tests/t-sqrt.c: Test also mpn_perfect_square_p. - -2014-02-08 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/sec_invert.c (mpn_cnd_neg_itch): #if:ed out unused - function. - - * mpn/generic/sec_div.c: Simplified code for the normalized case. - - * tests/mpn/t-div.c (main): Test mpn_sec_div_qr and mpn_sec_div_r - with normalized d. - -2014-02-04 Niels Möller <nisse@lysator.liu.se> - - * doc/gmp.texi (Low-level Functions): Document mpn_sec_add_1 and - mpn_sec_sub_1. - -2014-02-03 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/mini-gmp.c (mpn_rootrem): Allow NULL argument. - - * mini-gmp/mini-gmp.c (mpn_zero): New function. - (mpz_perfect_square_p): New function. - * mini-gmp/mini-gmp.h: Declare them. - - * mini-gmp/tests/t-sqrt.c: Test mpz_perfect_square_p. - * mini-gmp/tests/t-root.c: Test also 1-th root, allow perfect powers. - -2014-01-29 Torbjorn Granlund <tege@gmplib.org> - - * doc/gmp.texi (Floating-point Functions): Revise. - -2014-01-29 Niels Möller <nisse@lysator.liu.se> - - * README: Don't refer to specific COPYING* files, instead refer to - manual for details. - - * COPYING.LIB: Renamed, to... - * COPYING.LESSERv3: ... new name. - * COPYING: Renamed, to... - * COPYINGv3: ... new name. - * COPYINGv2: New file, GPLv2. - - * doc/gmp.texi (Copying): Document dual licensing. - -2014-01-27 Torbjorn Granlund <tege@gmplib.org> - - * Update library files license to use LGPL3+ and GPL2+. - -2014-01-27 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpn/t-aors_1.c: Check sec_aors_1 red zones (not smart). - - * mpn/generic/sec_aors_1.c: Mark the 2nd argument as const. - * gmp-h.in (mpn_sec_add_1, mpn_sec_sub_1): Likewise. - -2014-01-24 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fat/fat.c (fake_cpuid_table): Use proper steamroller and - excavator values. - - * config.guess: Amend last AMD change. - - * mpn/s390_64/lshift.asm: Align loop. - * mpn/s390_64/rshift.asm: Likewise. - * mpn/s390_64/lshiftc.asm: Likewise. - * mpn/s390_64: Add z10 cycle numbers. - -2014-01-23 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * printf/repl-vsnprintf.c: Feed case 'z' in switch (type) with case 'z' - in switch (fchar). - - * mini-gmp/tests/t-aorsmul.c: New file, test for mpz_{add,sub}mul{,_ui} - * mini-gmp/tests/Makefile: Add t-aorsmul. - -2014-01-21 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * acinclude.m4 (GMP_FUNC_VSNPRINTF): Get rid of varargs. - -2014-01-20 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fat/fat.c (__gmpn_cpuvec_init): Fix duplicate entries for - AMD "jaguar". - - * demos/expr: Get rid of varargs code and references. - -2014-01-19 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Add new AMD CPUs (piledriver, steamroller, excavator, - jaguar). - * config.sub: Corresponding updates. - * configure.ac: Likewise. - * acinclude.m4 (X86_64_PATTERN): Likewise. - * mpn/x86_64/fat/fat.c: Likewise. - - * Rename mpn_sec_minvert => mpn_sec_invert, many files affected. - * mpn/generic/sec_invert.c: New name for sec_minvert.c. - - * doc/gmp.texi: Undocument mpz_array_init. - - * acinclude.m4 (GMP_C_STDARG): Comment out. - * configure.ac: Suppress GMP_C_STDARG invocation. - - * Get rid of varargs code and references, many file affected. - - * Use mpq_t in favour of MP_RAT, many mpq files affected. - - * Get rid of BYTES_PER_MP_LIMB, most files affected. - - * mpz/iset.c: Avoid overflow in allocation computation. - * mpz/mul.c: Likewise. - * mpf/init.c: Likewise. - * mpf/init2.c: Likewise. - * mpf/iset.c: Likewise. - * mpf/iset_d.c: Likewise. - * mpf/iset_si.c: Likewise. - * mpf/iset_str.c: Likewise. - * mpf/iset_ui.c: Likewise. - - * mpz/array_init.c: Avoid two overflow scenarios in allocation - computation. - - * mpn/s390_64/z10/gmp-mparam.h: New file. - - * mpz/clears.c: Call __gmp_free_func ourselves instead of via - mpz_clears. - * mpf/clears.c: Analogous change. - * mpq/clears.c: Analogous change. - - * mpz/clear.c: Add cast to avoid overflow of (later ignored) argument. - * mpf/clear.c: Likewise. - -2014-01-19 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/mini-gmp.c (mpn_popcount): New function. - (mpz_popcount): Use it. - (mpz_addmul_ui, mpz_addmul, mpz_submul_ui, mpz_submul): Added. - * mini-gmp/mini-gmp.h: Declare them. - -2014-01-18 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/t-aors_1.c: Test also mpn_sec_add_1 and mpn_sec_sub_1. - - * tests/mpn/t-minvert.c (main): Pass smallest allowed bit_size - argument to mpn_sec_minvert. - -2014-01-18 Marc Glisse <marc.glisse@inria.fr> - - * doc/gmp.texi (C++ Interface Limitations): Warn against C++11 auto. - -2014-01-18 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/t-parity.c: Use 1UL to generate unsigned constants. - * tests/t-constants.c: Disable a non portable (unneeded) check. - -2014-01-18 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/sec_aors_1.c (mpn_sec_add_1, mpn_sec_sub_1): New - file. - - * mpn/generic/sec_minvert.c (mpn_sec_add_1_itch, mpn_sec_add_1): - Deleted static definitions. - (mpn_cnd_swap): Use volatile. - - * configure.ac (gmp_mpn_functions): sec_add_1 and sec_sub_1. - (GMP_MULFUNC_CHOICES): Set up for sec_aors_1. - -2014-01-16 Niels Möller <nisse@lysator.liu.se> - - * tune/common.c (speed_mpn_sec_minvert): New function. - * tune/speed.h: Declare it. - (SPEED_ROUTINE_MPN_SEC_MINVERT): New macro. - * tune/speed.c (routine): Added mpn_sec_minvert. - - * mini-gmp/mini-gmp.c (mp_bits_per_limb): New const value. - * mini-gmp/mini-gmp.h: Declare it. - -2014-01-12 Marc Glisse <marc.glisse@inria.fr> - - * demos/expr/expr.h: Add extern "C" for C++. - -2014-01-11 Torbjorn Granlund <tege@gmplib.org> - - * doc/gmp.texi (Notes for Particular Systems): Add items about old - NetBSD and current FreeBSD m4 problems. Add item about FreeBSD's - broken limits.h. - -2014-01-05 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-impl.h: Declare all _itch functions using ATTRIBUTE_CONST. - -2014-01-05 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac (alpha): Set extra_functions conditionally. - - * gmp-h.in (mpn_sec_minvert): Remove formal parameters. - - * doc/gmp.texi: Improve doc for several functions. - - * mpn/generic/sec_tabselect.c: Declare input arg using 'const'. - * gmp-h.in: Analogous change. - - * gmp-h.in: Declare all itch functions using __GMP_ATTRIBUTE_PURE. - * gmp-impl.h: Likewise. - -2014-01-05 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpn/t-minvert.c: Always compare with mpz_invert results, - add red zone to scratch. - * tests/mpn/t-sizeinbase.c: New test. - * tests/mpn/Makefile.am (check_PROGRAMS): Added t-sizeinbase.c . - * tests/mpn/t-div.c: Use mpn_sec_div_*_itch(). - - * mpn/generic/pow_1.c: Micro-optimisation. - -2014-01-04 Torbjorn Granlund <tege@gmplib.org> - - * acinclude.m4 (GMP_PROG_M4): Avoid hex output, since case varies. - -2014-01-03 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Support newer haswell, broadwell, silvermont. - * mpn/x86_64/fat/fat.c (__gmpn_cpuvec_init): Likewise. - - * acinclude.m4 (GMP_PROG_M4): Check that eval's radix argument work. - - * mpz/invert.c: Rely on gcdext for all operands, removing faulty - special case. - * tests/mpz/t-invert.c: Enforce correct behaviour for |mod| = 1. - -2014-01-02 Niels Möller <nisse@lysator.liu.se> - - * doc/gmp.texi (Low-level Functions): Document mpn_sizeinbase. - - Enable previously unused mpn_sizeinbase function. - * configure.ac (gmp_mpn_functions): Added sizeinbase. - * gmp-h.in (mpn_sizeinbase): New prototype. - -2014-01-02 Marc Glisse <marc.glisse@inria.fr> - - * gmp-impl.h: Always include <limits.h>. - * tests/mpn/t-get_d.c: Remove comment about <limits.h> - - * gmp-h.in (__GMP_USHRT_MAX): Use the promoted type. - * gmp-impl.h (USHRT_HIGHBIT, SHRT_MIN, SHRT_MAX): Likewise. - * tests/t-constants.c: Adapt printf strings. - * tests/t-gmpmax.c: Likewise. - - * tests/mpn/t-hgcd_appr.c (hgcd_appr_valid_p): Add parentheses. - -2014-01-01 Torbjorn Granlund <tege@gmplib.org> - - * doc/gmp.texi (Low-level Functions for cryptography): Update interface - for mpn_sec_div_qr and fix typos in mpn_sec_minvert text. - - * mpn/generic/sec_div.c: Rewrite to make mpn_sec_div_qr return high - quotient limb. - * gmp-h.in (mpn_sec_div_qr): Update declaration. - * tests/mpn/t-div.c: Adapt. - -2013-12-31 Niels Möller <nisse@lysator.liu.se> - - * doc/gmp.texi (Low-level Functions for cryptography): Document - mpn_sec_minvert. - -2013-12-30 Marc Glisse <marc.glisse@inria.fr> - - * doc/gmp.texi (C++ interface internals): Break long line. - -2013-12-30 Torbjorn Granlund <tege@gmplib.org> - - * doc/gmp.texi (Low-level Functions for cryptography): New section. - -2013-12-29 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/Makefile.am (check_PROGRAMS): Added t-minvert. - * tests/mpn/t-minvert.c: New file. - - * configure.ac (gmp_mpn_functions): Added sec_minvert. - * gmp-h.in (mpn_sec_minvert, mpn_sec_minvert_itch): New - declarations. - * mpn/generic/sec_minvert.c (mpn_sec_minvert) - (mpn_sec_minvert_itch): New functions. - (mpn_sec_add_1, mpn_cnd_neg, mpn_cnd_swap, mpn_sec_eq_ui): New - helper functions. - -2013-12-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/sec_powm.c: Fix an ASSERT. - - * gmp-h.in (mpn_sec_mul, mpn_sec_mul_itch): New declarations. - * gmp-h.in (mpn_sec_sqr, mpn_sec_sqr_itch): Likewise. - * mpn/generic/sec_mul.c: New file. - * mpn/generic/sec_sqr.c: New file. - - * gmp-h.in (mpn_sec_powm, mpn_sec_powm_itch): New declarations. - * gmp-h.in (mpn_sec_div_qr, mpn_sec_div_qr_itch): Likewise. - * gmp-h.in (mpn_sec_div_r, mpn_sec_div_r_itch): Likewise. - * gmp-impl: Remove declarations of above functions. - - * configure.ac (gmp_mpn_functions): Add sec_mul and sec_sqr. - -2013-12-26 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * Update many file's encoding to UTF-8. - * doc/tasks.html: Update <meta content> accordingly. - * doc/projects.html: Likewise. - -2013-12-26 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac: Rename mpn_blah_sec to mpn_sec_blah. - * gmp-impl.h: Corresponding changes. - * mpn/asm-defs.m4: Corresponding changes. - * tune/Makefile.am: Corresponding changes. - * tune/common.c: Corresponding changes. - * tune/speed.c: Corresponding changes. - * tune/speed.h: Corresponding changes. - * tune/tuneup.c: Corresponding changes. - * mpz/powm_sec.c: Update calls. - * tests/mpn/t-div.c: Likewise. - - * mpn/generic/sec_powm.c: New name for mpn/generic/powm_sec.c. - * mpn/generic/sec_div.c: New name for mpn/generic/sb_div_sec.c. - * mpn/generic/sec_pi1_div.c: New name for mpn/generic/sbpi1_div_sec.c. - * mpn/generic/sec_tabselect.c: New name for mpn/generic/tabselect.c. - - * mpn/alpha/sec_tabselect.asm: New name for tabselect.asm. - * mpn/arm/neon/sec_tabselect.asm: New name for tabselect.asm. - * mpn/arm/sec_tabselect.asm: New name for tabselect.asm. - * mpn/ia64/sec_tabselect.asm: New name for tabselect.asm - * mpn/powerpc32/sec_tabselect.asm: New name for tabselect.asm - * mpn/powerpc64/sec_tabselect.asm: New name for tabselect.asm - * mpn/sparc64/sec_tabselect.asm: New name for tabselect.asm - * mpn/x86/mmx/sec_tabselect.asm: New name for tabselect.asm - * mpn/x86/sec_tabselect.asm: New name for tabselect.asm - * mpn/x86_64/bd1/sec_tabselect.asm: New name for tabselect.asm - * mpn/x86_64/core2/sec_tabselect.asm: New name for tabselect.asm - * mpn/x86_64/coreinhm/sec_tabselect.asm: New name for tabselect.asm - * mpn/x86_64/coreisbr/sec_tabselect.asm: New name for tabselect.asm - * mpn/x86_64/fastsse/sec_tabselect.asm: New name for tabselect.asm - * mpn/x86_64/k10/sec_tabselect.asm: New name for tabselect.asm - * mpn/x86_64/pentium4/sec_tabselect.asm: New name for tabselect.asm - * mpn/x86_64/sec_tabselect.asm: New name for tabselect.asm - -2013-12-25 Torbjorn Granlund <tege@gmplib.org> - - * mpz/powm_sec.c: Handle 0^e mod m specially. - * mpn/generic/powm_sec.c: ASSERT that the base is non-zero. - -2013-12-23 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/powm_sec.c (redcify): Use passed scratch instead of - locally allocated. - (mpn_powm_sec_itch): Accommodate mpn_sb_div_r_sec's scratch needs. - -2013-12-20 Mark Sofroniou <marks@wolfram.com> - - * mpn/generic/mul_fft.c: Major overhaul of types. - -2013-12-18 Torbjorn Granlund <tege@gmplib.org> - - * doc/gmp.texi (Low-level Functions): Rewrite mpn_set_str docs. - -2013-12-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> - - * mpn/powerpc32/darwin.m4: Allow (and ignore) optional - 'toc' parameter to PROLOGUE_cpu. - * mpn/powerpc32/elf.m4: Likewise. - -2013-12-09 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> - - * configure.ac: Check for ELFv2 ABI on PowerPC. - * mpn/powerpc64/elf.m4: Set assembler ABI version for ELFv2 - and use appropriate PROLOGUE_cpu/EPILOGUE_cpu sequences. - Support optional 'toc' parameter to PROLOGUE_cpu. - * mpn/powerpc64/aix.m4: Allow (and ignore) optional - 'toc' parameter to PROLOGUE_cpu. - * mpn/powerpc64/darwin.m4: Likewise. - - * mpn/powerpc64/mode64/dive_1.asm (mpn_divexact_1): Add 'toc' - parameter to PROLOGUE. - * mpn/powerpc64/mode64/divrem_1.asm (mpn_divrem_1): Likewise. - * mpn/powerpc64/mode64/divrem_2.asm (mpn_divrem_2): Likewise. - * mpn/powerpc64/mode64/gcd_1.asm (mpn_gcd_1): Likewise. - * mpn/powerpc64/mode64/invert_limb.asm (mpn_invert_limb): Likewise. - * mpn/powerpc64/mode64/mod_1_1.asm (mpn_mod_1_1p_cps): Likewise. - * mpn/powerpc64/mode64/mod_1_4.asm (mpn_mod_1s_4p_cps): Likewise. - * mpn/powerpc64/mode64/mode1o.asm (mpn_modexact_1c_odd): Likewise. - * mpn/powerpc64/mode64/p7/gcd_1.asm (mpn_gcd_1): Likewise. - * mpn/powerpc64/p6/lshift.asm (mpn_lshift): Likewise. - * mpn/powerpc64/p6/lshiftc.asm (mpn_lshiftc): Likewise. - * mpn/powerpc64/p6/rshift.asm (mpn_rshift): Likewise. - * mpn/powerpc64/vmx/popcount.asm (mpn_popcount): Likewise. - -2013-12-07 Niels Möller <nisse@lysator.liu.se> - - * configfsf.sub: Updated to version 2013-10-01, from gnulib. - * configfsf.guess: Updated to version 2013-11-29, from gnulib. - -2013-12-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/div_qr_1.c: Make constant args asm inlines become limbs. - * mpn/generic/div_qr_1n_pi1.c: Likewise. - * mpn/generic/div_qr_2.c: Likewise. - * mpn/generic/div_qr_2.c: Likewise. - * mpn/generic/mod_1_1.c: Likewise. - * mpn/generic/mod_1_2.c: Likewise. - * mpn/generic/mod_1_3.c: Likewise. - * mpn/generic/mod_1_4.c: Likewise. - * mpn/generic/mulmid_basecase.c: Likewise. - * mpn/generic/mulmod_bnm1.c: Likewise. - * mpn/generic/sqrmod_bnm1.c: Likewise. - * mpn/sparc64/divrem_1.c: Likewise. - * mpn/sparc64/mod_1_4.c: Likewise. - - * mpn/generic/toom_interpolate_7pts.c (BINVERT_15): Fix typo. - -2013-11-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/dos64.m4 (CALL): Provide to override default. - -2013-11-08 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/x86_64-defs.m4 (CALL): Swap PIC test and macro defn. - - * mpn/generic/div_qr_2.c: Test HAVE_HOST_CPU_FAMILY_x86, not i386. - - * doc/gmp.texi: Update many URLs. - -2013-11-04 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac: Set symbol OPENBSD for x86-openbsd hosts. - * mpn/x86_64/fat/fat_entry.asm (PRETEND_PIC): New name for - PIC_OR_DARWIN. - (PRETEND_PIC): Set also for OPENBSD. - -2013-10-29 Torbjorn Granlund <tege@gmplib.org> - - * printf/doprnt.c (__gmp_doprnt): Use memcpy instead of strcpy. - -2013-10-24 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/div_qr_1u_pi2.c: New file. - * mpn/generic/div_qr_1n_pi2.c: New file. - -2013-10-24 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86_64/div_qr_1n_pi1.asm: Bugfixes, for case n == 1 and - in-place operation. - * mpn/x86_64/k8/div_qr_1n_pi1.asm: Likewise. - - * mpn/generic/div_qr_1n_pi1.c (mpn_div_qr_1n_pi1): Bug fixes, - off-by-one MPN_INCR_U, and support for in-place operation. - -2013-10-24 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/fat/fat.c (fake_cpuid_table): Add Haswell. - -2013-10-23 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/x86_64-defs.m4 (oplist): New define, data from `regnum'. - (regnum): Use x86_lookup, feed oplist. - -2013-10-22 Niels Möller <nisse@lysator.liu.se> - - * tests/devel/try.c: Support mpn_div_qr_1n_pi1. - - * mpn/x86_64/k8/div_qr_1n_pi1.asm: Moved the below k10 file here. - Applied tweak from Torbjörn to get it to run well on k8. - - * mpn/x86_64/k10/div_qr_1n_pi1.asm: New file (renamed above). - Differs from generic x86_64 version by using cmov. - - * mpn/x86_64/div_qr_1n_pi1.asm: Reordered arguments to second mul. - Deleted misleading cycle annotations. - -2013-10-21 Niels Möller <nisse@lysator.liu.se> - - * configure.ac: Add HAVE_NATIVE_mpn_div_qr_1n_pi1 to config.in. - - * mpn/generic/div_qr_1n_pi1.c (mpn_div_qr_1n_pi1): Fix typos - affecting ASSERT. - -2013-10-20 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86_64/div_qr_1n_pi1.asm: New file. - - * tune/div_qr_1_tune.c (__gmpn_div_qr_1n_pi1): Check - div_qr_1n_pi1_method only when !HAVE_NATIVE_mpn_div_qr_1n_pi1. - - * mpn/asm-defs.m4 (define_mpn): Add div_qr_1n_pi1. - - * tune/common.c (speed_mpn_div_qr_1): New function, replacing... - (speed_mpn_div_qr_1n, speed_mpn_div_qr_1u): ... deleted functions - (speed_mpn_div_qr_1n_pi1, speed_mpn_div_qr_1n_pi1_1) - (speed_mpn_div_qr_1n_pi1_2): New functions. - * gmp-impl.h [TUNE_PROGRAM_BUILD]: Declare div_qr_1-related tuning - variables. - * tune/tuneup.c (speed_mpn_div_qr_1_tune, tune_div_qr_1): New - functions. - (div_qr_1n_pi1_method, div_qr_1_norm_threshold) - (div_qr_1_unnorm_threshold): New globals. - * tune/speed.c (routine): Replaced mpn_div_qr_1n and mpn_div_qr_1u - by mpn_div_qr_1, requiring ".r" parameter. Added mpn_div_qr_1n_pi1 - and variants. - * tune/speed.h (SPEED_ROUTINE_MPN_DIV_QR_1): Use the "r" parameter - as divisor. - * tune/div_qr_1n_pi1_2.c: New file. - * tune/div_qr_1n_pi1_1.c: New file. - * tune/div_qr_1_tune.c: New file. - * tune/Makefile.am (libspeed_la_SOURCES): Added div_qr_1n_pi1_1.c, - div_qr_1n_pi1_2.c, and div_qr_1_tune.c. - - * tune/speed.c (routine): Added mpn_div_qr_1n and mpn_div_qr_1u. - * tune/speed.h (SPEED_ROUTINE_MPN_DIV_QR_1): New macro. - (speed_mpn_div_qr_1n, speed_mpn_div_qr_1u): Declare. - * tune/common.c (speed_mpn_div_qr_1n, speed_mpn_div_qr_1u): New - functions. - - * gmp-impl.h (mpn_div_qr_1n_pi1): Declare function. - * gmp-h.in (mpn_div_qr_1): Declare function. - * configure.ac (gmp_mpn_functions): Added div_qr_1 and - div_qr_1n_pi1. - * mpn/generic/div_qr_1.c (mpn_div_qr_1): New file and function. - * mpn/generic/div_qr_1n_pi1.c (mpn_div_qr_1n_pi1): New file and - function. - * tests/mpn/t-div.c (main): Test mpn_div_qr_1. - -2013-10-17 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac (alpha): Pass -mieee via gcc_cflags_maybe. - -2013-10-16 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Let AMD64 cpuid bit override pessimistic cpu guesses. - - * mpn/alpha/unicos.m4 (DATASTART): Accept optional align parameter. - * mpn/alpha/divrem_2.asm: Use provided gp mechanisms. - * mpn/alpha/default.m4 (PROLOGUE): Provide "..ng" post-gp label. - * mpn/alpha/invert_limb.asm: Align table to 8-byte boundary. Make code - work if table is not fully aligned. Properly test for BWX. - -2013-10-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/alpha/default.m4 (DATASTART): Use RODATA instead of DATA; - accept optional align parameter. - * mpn/alpha/invert_limb.asm: Align table. - * mpn/alpha/ev5/diveby3.asm: Likewise. - -2013-10-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/k7/mod_1_1.asm: Use 'subl' form to avoid ambiguity. - * mpn/x86/k7/mod_1_4.asm: Likewise. - - * configure.ac (X86_64_PATTERN): Append "cc" to cclist_64 and - cclist_x32. - -2013-10-08 Torbjorn Granlund <tege@gmplib.org> - Marc Glisse <marc.glisse@inria.fr> - - * tests/mpf/reuse.c (main): Compare addresses instead of names. - Use larger numbers for exponents. - -2013-10-08 Marc Glisse <marc.glisse@inria.fr> - - * doc/mdate-sh, doc/texinfo.tex, install-sh, missing, ylwrap: Remove. - * .bootstrap: Use autoreconf (and in particular automake -a). - - * gmp-h.in: Remove __need_size_t. Include <stddef.h>, not <cstddef>. - - * tests/mpf/reuse.c (main): Use small numbers as exponents. - -2013-10-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/atom/aorsmul_1.asm: Slight tweak. - - * doc/gmp.texi (ABI and ISA): Document x32. - - * mpn/sparc64/ultrasparct3/dive_1.asm: Use our register names. - -2013-09-24 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/atom/redc_1.asm: New file. - -2013-09-23 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/bobcat/redc_1.asm: Make the code for 1 <= n <= 3 work. - -2013-09-22 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreisbr/redc_1.asm: Slightly tweak basecase code. - - * mpn/x86_64/core2/redc_1.asm: New file. - - * mpn/x86_64/bobcat/redc_1.asm: New file. - -2013-09-21 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreinhm/redc_1.asm: New file. - -2013-09-21 Marc Glisse <marc.glisse@inria.fr> - - * tests/mpn/t-mulmid.c: Cast arguments of printf to int to match %d. - * tests/rand/t-urbui.c: Use 1UL for unsigned constant. - * mpn/generic/get_str.c: Avoid temporarily pointing outside an array. - -2013-09-20 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreisbr/redc_1.asm: New file. - - * mpn/x86_64/k8/redc_1.asm: Complete rewrite. - - * mpn/x86_64/coreisbr/mullo_basecase.asm: Postpone pushes, short- - circuit a branch. - * mpn/x86_64/coreihwl/mullo_basecase.asm: Short-circuit a branch. - - * mpn/x86_64/core2/mullo_basecase.asm: New file. - -2013-09-19 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fastsse/copyi-palignr.asm: Allocate more stack under DOS. - -2013-09-18 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/core2/mul_basecase.asm: New file. - * mpn/x86_64/core2/sqr_basecase.asm: New file. - - * mpn/x86_64/coreihwl/mullo_basecase.asm: New file. - * mpn/x86_64/coreisbr/mullo_basecase.asm: New file. - -2013-09-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fastsse/copyi-palignr.asm: Preserve xmm6-xmm8 under DOS. - -2013-09-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/tabselect.asm: Use R8 for bit testing. - - * mpn/x86_64/coreihwl/mul_basecase.asm: Replace mul_1 code. - - * mpn/x86_64/coreisbr/aorsmul_1.asm: Rewrite. - -2013-09-12 Torbjorn Granlund <tege@gmplib.org> - - * mpn/ia64/gcd_1.asm: Use dep for combining table base and low bits. - - * mpn/x86_64/fastsse/com-palignr.asm: Implement temp fix to properly - handle overlap. - -2013-09-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fastsse/copyi-palignr.asm: Rewrite rp != up (mod 16) code - to make it handle any allowed overlap. - -2013-09-09 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/atom/com.asm: New file, grabbing fastsse code. - - * mpn/x86_64/bd1/copyi.asm: New file, grabbing fastsse code. - * mpn/x86_64/bd1/copyd.asm: Likewise. - * mpn/x86_64/bd1/com.asm: Likewise. - - * mpn/x86_64/fastavx/copyi.asm: New file. - * mpn/x86_64/fastavx/copyd.asm: New file. - -2013-09-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreihwl/aorsmul_1.asm: Streamline. - -2013-09-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreihwl/sqr_basecase.asm: Implement larger "corner". - Misc tuning. - -2013-09-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreihwl/redc_1.asm: New file. - - * mpn/x86_64/x86_64-defs.m4 (mulx): Handle negative offsets. - -2013-08-31 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreisbr/sqr_basecase.asm: New file. - - * mpn/x86_64/sqr_diag_addlsh1.asm: New file. - -2013-08-30 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fat/mul_basecase.c: New file. - * mpn/x86_64/fat/sqr_basecase.c: New file. - * mpn/x86_64/fat/mullo_basecase.c: New file. - * mpn/x86_64/fat/redc_1.c: New file. - -2013-08-29 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/k8/mul_basecase.asm: Move top-level basecase file to k8 - subdir. - * mpn/x86_64/k8/sqr_basecase.asm: Likewise. - * mpn/x86_64/k8/redc_1.asm: Likewise. - * mpn/x86_64/k8/mullo_basecase.asm: Likewise. - * mpn/x86_64/k8/mulmid_basecase.asm: Likewise. - - * mpn/ia64/aors_n.asm: Clean up some bundlings. - - * mpn/x86_64/fat/fat.c (__gmpn_cpuvec_init): Support Haswell. - (fake_cpuid_table): Likewise. - - * configure.ac (x86): Remove any mulx paths. Let bwl path = hwl path. - (fat_path): Add coreihwl. - - * mpn/x86_64/coreihwl/aorsmul_1.asm: Move from `mulx' directory, use - mulx() macro. - * mpn/x86_64/coreihwl/mul_1.asm: Likewise. - * mpn/x86_64/coreihwl/mul_2.asm: Likewise. - * mpn/x86_64/coreihwl/mul_basecase.asm: Likewise. - * mpn/x86_64/coreihwl/sqr_basecase.asm: Likewise. - - * mpn/x86_64/x86_64-defs.m4 (mulx): New macro. - (regnum, regnumh, ix): Supporting macros. - -2013-08-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreisbr/divrem_1.asm: New file. - -2013-08-23 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fastsse/com-palignr.asm: New file, closely based on - copyi-palignr.asm. - - * mpn/x86_64/fastsse/copyi.asm Use "test R8(reg)" instead of "bt". - * mpn/x86_64/fastsse/copyd-palignr.asm: Likewise. - * mpn/x86_64/fastsse/copyi-palignr.asm: Likewise. - * mpn/x86_64/fastsse/lshift-movdqu2.asm: Likewise. - * mpn/x86_64/fastsse/lshiftc-movdqu2.asm: Likewise. - * mpn/x86_64/fastsse/rshift-movdqu2.asm: Likewise. - * mpn/x86_64/fastsse/tabselect.asm: Likewise. - - * mpn/sparc64/ultrasparct3/sqr_diag_addlsh1.asm: New file. - - * mpn/alpha/aorslsh2_n.asm: New file. - * mpn/alpha/aorslsh1_n.asm: Rewrite. - * mpn/alpha/ev6/aorslsh1_n.asm: New file. - -2013-08-21 Torbjorn Granlund <tege@gmplib.org> - - * mpn/alpha/sqr_diag_addlsh1.asm: New file. - * mpn/alpha/sqr_diagonal.asm: Remove. - * mpn/alpha/ev6/sqr_diagonal.asm: Remove. - -2013-08-20 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc32/sqr_diag_addlsh1.asm: New file. - * mpn/powerpc32/sqr_diagonal.asm: Remove. - -2013-08-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreihwl/mulx/sqr_basecase.asm: New file. - -2013-08-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreisbr/aors_n.asm: Complete rewrite. - -2013-08-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreihwl/mulx/mul_basecase.asm: New file. - - * mpn/x86_64/bd1/mul_2.asm: New file. - - * mpn/x86_64/coreihwl/gmp-mparam.h: New file. - -2013-08-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreihwl/mulx/mul_2.asm: New file. - * mpn/x86_64/coreihwl/mulx/addmul_2.asm: New file. - - * mpn/x86_64/coreinhm/aorsmul_1.asm: New file. - - * mpn/x86_64/coreisbr/mul_basecase.asm: Save some O(n) and O(1) cycles. - - * mpn/x86_64/coreisbr/mul_2.asm: New file. - -2013-08-02 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreisbr/addmul_2.asm: Complete rewrite. - -2013-08-01 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/bd1/mul_basecase.asm: New file. - - * mpn/x86_64/coreisbr/mul_basecase.asm: New file. - - * mpn/x86_64/coreihwl/aorsmul_1.asm: New file. - -2013-07-31 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/atom/mul_2.asm: New file. - * mpn/x86_64/atom/addmul_2.asm: New file. - * mpn/x86_64/atom/mul_1.asm: New file. - * mpn/x86_64/atom/aorsmul_1.asm: New file. - - * mpn/x86_64/coreihwl/mul_1.asm: New file. - - * configure.ac (x86): Add Haswell-specific path. - - * configure.in (fat_functions): Add cnd_add_n, cnd_sub_n.. - * gmp-impl.h (struct cpuvec_t): Add fields for new fat functions. - * gmp-impl.h: Adjust corresponding declarations. - - * mpn/x86_64/x86_64-defs.m4 (CPUVEC_FUNCS_LIST): Add new fat functions. - * mpn/x86/x86-defs.m4 (CPUVEC_FUNCS_LIST): Likewise. - * mpn/x86_64/fat/fat.c (__gmpn_cpuvec): Likewise. - * mpn/x86/fat/fat.c (__gmpn_cpuvec): Likewise. - -2013-07-30 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreisbr/popcount.asm: New file. - -2013-07-23 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/bobcat/aors_n.asm: New file. - - * mpn/x86_64/pentium4/aorslshC_n.asm: Remove a spurious emms insn. - - * mpn/x86_64/bd1/aorrlsh1_n.asm: New file. - * mpn/x86_64/bd1/sublsh1_n.asm: New file. - -2013-07-22 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/mod_1_1.asm: Handle little-endian mode. - * mpn/powerpc64/mode64/mod_1_4.asm: Likewise. - -2013-07-16 Torbjorn Granlund <tege@gmplib.org> - - * doc/gmp.texi: Declare countless of function arguments as 'const'. - -2013-07-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/core2/aors_n.asm: Rewrite. - - * mpn/generic/sb_div_sec.c: Compute inverse as floor(B^2/(dh+1)), per - Niels' suggestion. - * mpn/generic/sbpi1_div_sec.c: Remove inverse rounding-up code. - -2013-07-14 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/divrem_1.asm: Remove explicit nop after CALL. - * mpn/powerpc64/mode64/divrem_2.asm: Likewise. - * mpn/powerpc64/mode64/mod_1_1.asm: Likewise. - * mpn/powerpc64/mode64/mod_1_4.asm: Likewise. - -2013-07-13 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/atom/cnd_add_n.asm: New file. - * mpn/x86/atom/cnd_sub_n.asm: New file.o - -2013-07-12 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/sbpi1_div_sec.c: Partial rewrite. - -2013-07-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/cnd_aors_n.asm: Tweak for better speed on K8, bobcat, bd1, - NHM, Atom. - -2013-07-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/p7/copyi.asm: Handle n = 0. - * mpn/powerpc64/p7/copyd.asm: Likewise. - -2013-07-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/p7/aormul_2.asm: New file. - - * mpn/powerpc64/darwin.m4 (EXTRA_REGISTER): New define. - * mpn/powerpc64/aix.m4: New define (actually undefine). - * mpn/powerpc64/elf.m4: Likewise. - -2013-07-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/com.asm: Rewrite. - - * mpn/powerpc64/p7/copyi.asm: New file. - * mpn/powerpc64/p7/copyd.asm: New file. - -2013-07-02 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/gcd_1.asm: New file. - * mpn/powerpc64/mode64/p7/gcd_1.asm: New file. - -2013-07-01 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac: Comment out AC_PROG_F77. - - * mpn/powerpc64/mode64/rsh1add_n.asm: Remove. - * mpn/powerpc64/mode64/rsh1sub_n.asm: Remove. - * mpn/powerpc64/mode64/rsh1aors_n.asm: New file, code not based on - removed files. - -2013-06-28 Marc Glisse <marc.glisse@inria.fr> - - * cxx/ismpf.cc: Use GMP_DECIMAL_POINT. - * cxx/osmpf.cc: Likewise. - * tests/cxx/t-locale.cc: Likewise. - -2013-06-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/p7/aorsorrlshC_n.asm: New file. - * mpn/powerpc64/mode64/p7/aorsorrlsh1_n.asm: New file. - * mpn/powerpc64/mode64/p7/aorsorrlsh2_n.asm: New file. - - * mpn/powerpc64/mode64/aorsorrlshC_n.asm: Use alias regname. - -2013-06-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/p7/aors_n.asm: New file. - -2013-06-22 Torbjorn Granlund <tege@gmplib.org> - - * aorslshC_n.asm, aorslsh2_n.asm, aorslsh1_n.asm: Remove. - * aorsorrlshC_n.asm, aorsorrlsh1_n.asm, aorsorrlsh2_n.asm: New files. - -2013-06-19 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/p6/lshift.asm: Rewrite switching-into-loop code. - * mpn/powerpc64/p6/rshift.asm: Likewise. - * mpn/powerpc64/p6/lshiftc.asm: Likewise. - -2013-06-17 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/p6/lshift.asm: Fix typo in label reference. - For 32-bit mode, zero extend `n' argument and split retval. - * mpn/powerpc64/p6/rshift.asm: Likewise. - * mpn/powerpc64/p6/lshiftc.asm: Likewise. - -2013-06-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mu_div_q.c: Remove obsolete comment. - -2013-06-09 Marc Glisse <marc.glisse@inria.fr> - - * mpn/generic/get_d.c (mpn_get_d): Avoid signed overflow. - * mpz/kronzs.c (mpz_kronecker_si): Use ABS_CAST. - -2013-05-31 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mu_div_q.c: Call mpn_mu_divappr_q for entire division, - never just for tail. (This fixes performance issues at the expense of - memory needs.) - -2013-05-26 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac (*sparc*-*-*): Major overhaul. - -2013-05-22 Torbjorn Granlund <tege@gmplib.org> - - * doc/gmp.texi (Reporting Bugs): Ask for configure's output. - - * mpn/ia64/divrem_2.asm: Don't clobber f16-f18. - -2013-05-20 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/udiv.asm: Change spacing to work around binutils bug. - -2013-05-16 Torbjorn Granlund <tege@gmplib.org> - - * Makefile.am (LIBGMP_LT_*, LIBGMPXX_LT_*): Bump version info. - - * tests/misc.c (tests_hardware_getround, tests_hardware_setround): - Avoid assembly dependency unless WANT_ASSEMBLY. - - * configure.ac (WANT_ASSEMBLY): Conditionally define. - -2013-05-14 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac (arm1156): Don't fall back to plain v6 compiler option. - -2013-05-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreisbr/mul_1.asm: Handle n = 1 for DOS64. Streamline. - * mpn/x86_64/coreisbr/aorsmul_1.asm: Streamline. - -2013-05-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreisbr/aorsmul_1.asm: Fix, then enable DOS64 support. - * mpn/x86_64/coreisbr/mul_1.asm: Enable DOS64 support. - - * mpn/x86/p6/mmx/gmp-mparam.h: Set down SQR_TOOM2_THRESHOLD to parent - directory value. - -2013-05-09 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac (--enable-fake-cpuid): New option. - * mpn/x86_64/fat/fat.c (WANT_FAKE_CPUID): Remove defaulting. - * mpn/x86/fat/fat.c (WANT_FAKE_CPUID): Likewise. - - * mpn/x86_64/bd1/mul_1.asm: Fix typo. - -2013-05-07 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fat/fat.c (fake_cpuid): Handle 0x80000001 request. - (fake_cpuid_available): Remove unused function. - - * mpn/generic/mod_1_1.c: Cast constant udiv_rnnd_preinv arguments. - * mpn/generic/mod_1_2.c: Likewise. - * mpn/generic/mod_1_3.c: Likewise. - * mpn/generic/mod_1_4.c: Likewise. - * mpn/generic/divrem_2.c: Likewise. - -2013-05-06 Torbjorn Granlund <tege@gmplib.org> - - * config.guess (power*): Handle all ppc970 variants. - -2013-05-03 David S. Miller <davem@davemloft.net> - - * tune/common.c (speed_mpn_addlsh1_n, speed_mpn_sublsh1_n, - speed_mpn_rsblsh1_n, speed_mpn_addlsh2_n, speed_mpn_sublsh2_n, - speed_mpn_rsblsh2_n): Don't define if these routines are macros. - * tune/speed.c (routine): Likewise don't table if they are macros. - - * mpn/sparc64/ultrasparct3/addmul_1.asm: Add T4 and T3 timings. - * mpn/sparc64/ultrasparct3/aormul_4.asm: Likewise. - * mpn/sparc64/ultrasparct3/aorslsh_n.asm: Likewise. - * mpn/sparc64/ultrasparct3/cnd_aors_n.asm: Likewise. - * mpn/sparc64/ultrasparct3/submul_1.asm: Likewise. - -2013-05-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64/ultrasparct3/aorslsh_n.asm: Invoke INITCY where it has - effect. - - * gmp-impl.h: Amend last change. - * tests/devel/try.c (choice_array): Don't try to table addlsh1_n etc if - a macro. - -2013-05-02 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/copyd.asm: Suppress dead pointer update. - * mpn/arm/copyi.asm: Likewise. - * mpn/arm/neon/logops_n.asm: Likewise. - * mpn/arm/neon/tabselect.asm: Likewise. - * mpn/arm/rshift.asm: Likewise. - * mpn/arm/tabselect.asm: Likewise. - * mpn/arm/v6/dive_1.asm: Likewise - * mpn/arm/v7a/cora15/neon/copyi.asm: Likewise. - - * mpn/arm/v7a/cora15/neon/com.asm: New file. - -2013-05-01 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64/ultrasparct3/aormul_4.asm: New file. - - * configure.ac (GMP_MULFUNC_CHOICES): Support mul_3 + addmul_3 and - mul_4 + addmul_4. - - * mpn/sparc64/ultrasparct3/aormul_2.asm: Optimise lead-in code. - - * mpn/sparc64/ultrasparct3/missing.m4 (addxccc): Allow g2 as input. - (umulxhi): Save and restore o7 to allow it as in/out parameter. - -2013-04-29 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/v7a/cora15/cnd_aors_n.asm: New file, was mis-named. - - * mpn/sparc64/ultrasparct3/addmul_1.asm: Rewrite. - - * mpn/sparc64/ultrasparct3/submul_1.asm: Rewrite. - - * mpn/sparc64/ultrasparct3/cnd_aors_n.asm: New file. - - * gmp-impl.h: Override mpn_addlsh1_n, mpn_addlsh2_n, mpn_sublsh1_n, etc - with mpn_addlsh_n, etc when !HAVE_NATIVE the former but HAVE_NATIVE the - latter. - - * mpn/sparc64/ultrasparct3/aorslsh_n.asm: New file. - - * configure.ac (sparc-*-*): Recognise t5 along with t3 and t4. - Remove sparc64/ultrasparct1 from path_64 for T3, T3, and T5. - -2013-04-27 Mike Frysinger <vapier@gentoo.org> - - * configure.ac (arm*-*-*): Set up path also for plainest CPU variants. - -2013-04-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/v6/popham.asm: New file. - - * mpn/arm/v7a/cora15/cnd-aors_n.asm: New file. - -2013-04-25 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/mod_34lsub1.asm: Clear carry smarter. - - * mpn/arm/v7a/cora15/logops_n.asm: Conditionally suppress conditionally - used code. - - * mpn/arm/v7a/cora15/submul_1.asm: New file. - -2013-04-24 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/v7a/cora15/com.asm: New file. - - * mpn/arm/v7a/cora15/logops_n.asm: New file. - -2013-04-19 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/v7a/cora15/aors_n.asm: New file. - - * mpn/arm/v7a/cora15/addmul_1.asm: Rewrite. - -2013-04-18 Torbjorn Granlund <tege@gmplib.org> - - * mpn/alpha/tabselect.asm: New file. - -2013-04-17 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc32/tabselect.asm: New file. - - * longlong.h (arm64 count_trailing_zeros): New. - - * mpn/arm64/invert_limb.asm: New file. - - * mpn/generic/dive_1.c: Rewrite to use Hensel division also for - size = 1. - - * mpn/generic/mod_1_1.c (add_mssaaaa): Provide VIS3 variant. - - * configure.ac: Remove "missing" from extra_functions_64 for coreibwl. - - * mpn/sparc64/ultrasparct3/mul_1.asm: Decrease loop alignment. - * mpn/sparc64/ultrasparct3/aormul_2.asm: Likewise. - -2013-04-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/alpha/invert_limb.asm: Generate table. - * mpn/powerpc64/mode64/invert_limb.asm: Likewise. - * mpn/s390_64/invert_limb.asm: Likewise. - * mpn/sparc64/ultrasparct3/invert_limb.asm: Likewise. - * mpn/x86_64/invert_limb_table.asm: Likewise. - -2013-04-15 David S. Miller <davem@davemloft.net> - - * mpn/sparc32/sparc-defs.m4 (LEA64): New macro. - * mpn/sparc64/gcd_1.asm: Use it. - * mpn/sparc64/ultrasparct3/dive_1.asm: Likewise. - * mpn/sparc64/ultrasparct3/invert_limb.asm: Likewise. - * mpn/sparc64/ultrasparct3/mode1o.asm: Likewise. - - * mpn/sparc64/gcd_1.asm: Use RODATA, TYPE, and SIZE. - -2013-04-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64/ultrasparct3/invert_limb.asm: Avoid addend for GOT entry, - it is not portable. - - * mpn/sparc64/tabselect.asm: New file. - - * mpn/x86/mmx/tabselect.asm: New file. - * configure.ac (x86): Add x86/mmx to path for relevant CPUs. - - * mpn/sparc64/gcd_1.asm: Use rdpc for PIC. - * mpn/sparc64/ultrasparct3/mode1o.asm: Use rdpc for PIC. - * mpn/sparc64/ultrasparct3/dive_1.asm: Use rdpc for PIC. - * mpn/sparc64/ultrasparct3/invert_limb.asm: Handle PIC, use rdpc. - - * Revert remaining parts of recent sparc LEA changes. - -2013-04-14 David S. Miller <davem@davemloft.net> - - * mpn/sparc32/v9/sqr_diagonal.asm: Revert LEA and INT32 changes. - * mpn/sparc64/gcd_1.asm: Likewise. - -2013-04-13 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/bd1/tabselect.asm: New file. - * mpn/x86_64/coreisbr/tabselect.asm: New file. - * mpn/x86_64/k10/tabselect.asm: New file. - * mpn/x86_64/coreinhm/tabselect.asm: New file. - * mpn/x86_64/core2/tabselect.asm: New file. - * mpn/x86_64/pentium4/tabselect.asm: New file. - - * mpn/x86_64/fastsse/tabselect.asm: New file. - * mpn/arm/neon/tabselect.asm: Rewrite. - * mpn/arm/tabselect.asm: Rewrite. - * mpn/powerpc64/tabselect.asm: Rewrite. - * mpn/x86_64/tabselect.asm: Rewrite. - - * tune/speed.h (SPEED_ROUTINE_MPN_TABSELECT): Implement special code, - making .r argument be table width. - -2013-04-11 David S. Miller <davem@davemloft.net> - - * mpn/sparc32/sparc-defs.m4 (LEA): Remove unused local label. - (LEA_LEAF): Likewise. - -2013-04-11 Niels Möller <nisse@lysator.liu.se> - - * mpn/arm/v6/submul_1.asm: New file, using the corresponding - addmul_1 loop + complement trick. - -2013-04-10 David S. Miller <davem@davemloft.net> - - * acinclude.m4 (GMP_ASM_SPARC_GOTDATA, - GMP_ASM_SPARC_SHARED_THUNKS): New feature tests. - * configure.ac: Call GMP_ASM_SPARC_GOTDATA and - GMP_ASM_SPARC_SHARED_THUNKS on sparc. - * mpn/sparc32/sparc-defs.m4 (LEA, LEA_LEAF, LEA_THUNK): New macros. - * mpn/sparc32/udiv.asm: Convert over to LEA, LEA_LEAF, and LEA_THUNK. - * mpn/sparc32/v8/addmul_1.asm: Likewise. - * mpn/sparc32/v8/mul_1.asm: Likewise. - * mpn/sparc32/v8/supersparc/udiv.asm: Likewise. - * mpn/sparc32/v8/udiv.asm: Likewise. - * mpn/sparc64/gcd_1.asm: Likewise. - * mpn/sparc64/ultrasparct3/dive_1.asm: Likewise. - * mpn/sparc64/ultrasparct3/invert_limb.asm: Likewise. - * mpn/sparc64/ultrasparct3/mode1o.asm: Likewise. - * mpn/sparc32/v9/sqr_diagonal.asm: Likewise and use INT32. - -2013-04-09 Torbjorn Granlund <tege@gmplib.org> - - * longlong.h (sparc64): Test __VIS__ instead of __sparc_vis3. - - * config.guess (sparc*): Invoke set_cc_for_build to get $dummy. - -2013-04-08 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Rework tmp file names, make sure to remove tmp files. - - * mpn/arm/dive_1.asm: Rewrite count-trailing-zeros code, using private - table. - - * mpn/arm: Canonicalise arm assembly to use old style "mov ... lsl" for - shift ops. - -2013-04-07 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64/ultrasparct3/mod_34lsub1.asm: New file. - - * longlong.h (sparc64): Define umul_ppmm, add_ssaaaa, and - count_leading_zeros conditionally under the symbol __sparc_vis3. - - * mpn/arm/dive_1.asm: New file. - * mpn/arm/v6/dive_1.asm: New file. - - * mpn/arm/v6t2/mode1o.asm: Make trivial change to avoid v6t2... - * mpn/arm/v6/mode1o.asm: ...instruction, move file accordingly. - - * mpn/powerpc64/mode64/invert_limb.asm: Put all multiplies low-limb first. - -2013-04-04 David S. Miller <davem@davemloft.net> - - * mpn/sparc64/ultrasparct3/add_n.asm: Rewrite. - * mpn/sparc64/ultrasparct3/sub_n.asm: Rewrite. - - * mpn/sparc64/ultrasparct3/invert_limb.asm: Align table. - -2013-04-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc32/sparc-defs.m4: Provide dummy lzcnt. - - * tests/mpn/logic.c: Seed using RANDS, then use mpz_rrandomb. - - * tests/mpn/t-div.c (random_word): Remove. Let callers invoke urandom. - - * mpn/sparc64/ultrasparct3/mul_1.asm: Rewrite. - - * mpn/sparc64/ultrasparct3/bdiv_dbm1c.asm: New file. - * mpn/sparc64/ultrasparct3/dive_1.asm: New file. - * mpn/sparc64/ultrasparct3/invert_limb.asm: New file. - * mpn/sparc64/ultrasparct3/mod_1_4.asm: New file. - * mpn/sparc64/ultrasparct3/mode1o.asm: New file. - -2013-04-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64/ultrasparct3/aormul_2.asm: Reschedule for better speed. - -2013-04-02 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64/ultrasparct3/missing.m4: Misc tweaks. - (lzcnt): New. - * mpn/sparc64/ultrasparct3/missing.asm (__gmpn_lzcnt): New function. - - * mpn/sparc32/sparc-defs.m4: Put FAKE_T3 stuff here... - * mpn/sparc64/ultrasparct3/aormul_2.asm: ...moved from here. - - * mpn/sparc64/ultrasparc1234/lshift.asm: Remove. - * mpn/sparc64/ultrasparc1234/rshift.asm: Remove. - -2013-04-01 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64/ultrasparct3/missing.m4 (umulxhi): Don't clobber retaddr, - allowing use in functions that does not do save/restore. - - * mpn/sparc64/gcd_1.asm: Tweak for tighter loop. - -2013-03-31 David S. Miller <davem@davemloft.net> - - * mpn/sparc64/lshift.asm: New file. - * mpn/sparc64/rshift.asm: New file. - * mpn/sparc64/lshiftc.asm: New file. - -2013-03-31 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64/ultrasparct1/lshift.asm: Remove. - * mpn/sparc64/ultrasparct1/rshift.asm: Remove. - * mpn/sparc64/ultrasparct1/lshiftc.asm: Remove. - -2013-03-29 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64/ultrasparct3/aormul_2.asm: Always do mulx before umulxhi. - -2013-03-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64/mod_1_4.c (mpn_mod_1s_4p): Make precomputed arg 'const'. - (mpn_mod_1s_4p_cps): Update from generic code. - -2013-03-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/trialdiv.c: Make variables 'const' to match tables. - - * mpn/generic/mod_1_1.c (mpn_mod_1_1p): Make precomputed arg 'const'. - * mpn/generic/mod_1_2.c (mpn_mod_1s_2p): Likewise. - * mpn/generic/mod_1_3.c (mpn_mod_1s_3p): Likewise. - * mpn/generic/mod_1_4.c (mpn_mod_1s_4p): Likewise. - * gmp-impl.h: Update prototypes. - - * mpn/x86_64/mulx/aorsmul_1.asm: New file. - * mpn/x86_64/mulx/addmul_1.asm: Remove. - -2013-03-26 Niels Möller <nisse@lysator.liu.se> - - Make mpn_cnd_add_n and mpn_cnd_sub_n public. - * doc/gmp.texi (Low-level Functions): Document mpn_cnd_add_n and - mpn_cnd_sub_n. - * gmp-h.in (mpn_cnd_add_n, mpn_cnd_sub_n): Moved prototypes - here... - * gmp-impl.h: ... from here. - -2013-03-26 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/pentium4/sse2/cnd_add_n.asm: New file. - * mpn/x86/pentium4/sse2/cnd_sub_n.asm: New file. - * mpn/x86/cnd_aors_n.asm: New file. - -2013-03-25 David S. Miller <davem@davemloft.net> - - * mpn/sparc64/ultrasparct3/hamdist.asm: New file. - * mpn/sparc64/ultrasparct3/popcount.asm: New file. - -2013-03-25 Torbjorn Granlund <tege@gmplib.org> - - * mpn/ia64/aorsorrlshC_n.asm: Generalised from aorslshC_n.asm. - * mpn/ia64/aorsorrlsh1_n.asm: Generalised from aorslsh1_n.asm. - * mpn/ia64/aorsorrlsh2_n.asm: Generalised from aorslsh2_n.asm. - -2013-03-24 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/v7a/cora15/neon/aorsorrlshC_n.asm: New file. - * mpn/arm/v7a/cora15/neon/aorsorrlsh2_n.asm: New file. - * mpn/arm/v7a/cora15/neon/aorsorrlsh1_n.asm: New file. - * mpn/arm/v7a/cora15/neon/rsh1aors_n.asm: New file. - - * configure.ac (GMP_MULFUNC_CHOICES): Support add+sub+rsb lsh files. - - * tests/refmpn.c (refmpn_addlsh_nc, refmpn_sublsh_nc): Remove silly - assert of mp_limb being non-negative. - -2013-03-21 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/neon/lshiftc.asm: New file. - - * mpn/arm/v6/sqr_basecase.asm: Trim 'sqr_diag_addlsh1' loop. - - * gen-trialdivtab.c: Output just raw data, remove actual variables. - * mpn/generic/trialdiv.c: Put variables from gen-trialdivtab.c here, - and make them 'const'. - -2013-03-20 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Rework arm CPU recognition. - * config.sub: Corresponding updates. - * configure.ac: Likewise. - - * mpn/x86_64/mulx/adx/addmul_1.asm: Let FAKE_MULXADX be off by default. - - * mpn/arm/v7a/cora15/neon/copyi.asm: Move from "..". - * mpn/arm/v7a/cora15/neon/copyd.asm: Likewise. - - * config.guess: Tack on "neon" for appropriate arm CPUs. - * configure.ac (arm*-*-*): Recognise neon suffix for a8, a9, and a15. - -2013-03-19 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpf/fits_u.h: Accept numbers truncating to zero before checking the - sign. - * tests/mpf/t-fits.c: Check new edges. - -2013-03-19 Torbjorn Granlund <tege@gmplib.org> - - * tests/arm32check.c: Get printing of clobbered register right. - - * mpn/arm/neon/popcount.asm: New file. - * mpn/arm/neon/hamdist.asm: New file. - - * tests/Makefile.am (EXTRA_libtests_la_SOURCES): Add arm32call.asm and - arm32check.c. - -2013-03-18 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac (arm*-*-*): Define CALLING_CONVENTIONS_OBJS. - - * tests/arm32call.asm: New file. - * tests/arm32check.c: New file. - - * mpn/arm/arm-defs.m4 (LEA): Rewrite to properly handle repeated use. - (EPILOGUE_cpu): Define. - - * mpn/arm/v6/addmul_3.asm: Make code work for PIC. - - * tests/x86call.asm: Modernise asm syntax. - * tests/amd64call.asm: Likewise. - - * mpn/x86/darwin.m4 (m4append): Move definition from here... - * mpn/asm-defs.m4: ...to here. - -2013-03-18 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * doc/gmp.texi (--enable-fat): No quote in concept index. - - * mpf/swap.c: Reduce the number of variables. - -2012-03-17 Marc Glisse <marc.glisse@inria.fr> - - * tests/cxx/t-do-exceptions-work-at-all-with-this-compiler.cc: New file. - * tests/cxx/Makefile.am: Add new file. Reorder the tests. - -2013-03-17 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mul_fft.c: Use TMP_BALLOC*, but combine several areas. - - * mpz/powm_ui.c (mod): Use TMP_BALLOC in mu code. - - * mpn/arm/v6/addmul_3.asm: New file. - - * mpn/arm/v7a/cora15/copyd.asm: Tweak. - - * mpn/arm64/copyi.asm: New file. - * mpn/arm64/copyd.asm: New file. - -2013-03-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/v6/addmul_2.asm: Tweak for better A9 performance. - -2013-03-14 Torbjorn Granlund <tege@gmplib.org> - - * mpn/ia64/cnd_aors_n.asm: New file. - - * mpn/arm64/cnd_aors_n.asm: New file. - - * mpn/arm64/aors_n.asm (ADDSUB): Remove unused definition. - - * mpn/ia64/aors_n.asm: Remove a redundant ASM_START. - - * mpn/arm/cnd_aors_n.asm: Avoid ARM conditional insn execution. - - * mpn/x86_64/missing.asm: Move from mulx/adx since we cannot currently - prune missing.asm from path. - * mpn/x86_64/mulx/adx/missing-call.m4: Likewise. - * mpn/x86_64/mulx/adx/missing-inline.m4: Likewise. - * mpn/x86_64/mulx/adx/addmul_1.asm: Update hardwired path. - -2013-03-13 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/cong_2exp.c: Write loops in a cleaner way. - * mini-gmp/mini-gmp.c: Likewise. - * gmp-impl.h (mpz_zero_p): Likewise. - -2013-03-12 Niels Möller <nisse@lysator.liu.se> - - New names mpn_cnd_add_n and mpn_cnd_sub_n. - * mpn/generic/cnd_add_n.c (mpn_cnd_add_n): Renamed file and - function, from addcnd.c:mpn_addcnd_n. - * mpn/generic/cnd_sub_n.c (mpn_cnd_sub_n): Renamed, from - subcnd.c:mpn_subcnd_n. - * mpn/arm/cnd_aors_n.asm: Renamed file, from aorscnd.asm, and - renamed functions. - * mpn/x86_64/cnd_aors_n.asm: Analogous renaming. - * mpn/powerpc64/mode64/cnd_aors_n.asm: Analogous renaming. - * gmp-impl.h (mpn_cnd_add_n, mpn_cnd_add_n): Updated prototypes - with new names. - * configure.ac: Updated for new names. - * tests/refmpn.c (refmpn_cnd_add_n): Renamed, from refmpn_addcnd_n. - (refmpn_cnd_sub_n): Renamed, from refmpn_subcnd_n. - * tests/tests.h (refmpn_cnd_add_n, refmpn_cnd_sub_n): Updated - prototypes with new names. - * tune/common.c (speed_mpn_cnd_add_n): Renamed, from - speed_mpn_addcnd_n, call mpn_cnd_add_n. - (speed_mpn_cnd_sub_n): Renamed, from speed_mpn_subcnd_n, call - mpn_cnd_sub_n. - * tune/speed.h (speed_mpn_cnd_add_n, speed_mpn_cnd_sub_n): Updated - prototypes with new names. - * tune/speed.c (routine): Updated list with new names. - * tests/devel/try.c: Updated for new mpn_cnd_* names. - * mpn/generic/sbpi1_div_sec.c: Likewise. - * mpn/generic/powm_sec.c: Likewise. - -2013-03-12 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac: Add "missing" to extra_functions_64 for coreibwl. - - * mpn/x86_64/mulx/adx/addmul_1.asm: Simplify. Make FAKE_MULXADX the - default awaiting proper qemu behaviour. - -2013-03-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/aorscnd_n.asm: Read 32 bits for 'n' arguments on DOS64. - - * tests/mpz/t-powm_ui.c: Test larger arguments. General cleanup. - - * mpz/powm_ui.c (mod): Adhere to mpn_mu_div_qr's overlap requirements. - -2013-03-10 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/sbpi1_div_sec.c: Update calls of mpn_addcnd_n and - mpn_subcnd_n. - * mpn/generic/powm_sec.c (MPN_REDC_1_SEC, MPN_REDC_2_SEC) - (mpn_powm_sec): Update calls of mpn_subcnd_n. - - * tests/tests.h (refmpn_addcnd_n, refmpn_subcnd_n): Update - declarations. - * tests/refmpn.c (refmpn_addcnd_n, refmpn_subcnd_n): Similar - reorder of arguments. - * tests/devel/try.c (call): Pass condition first, for - TYPE_ADDCND_N and TYPE_SUBCND_N. - - * tune/common.c (speed_mpn_addcnd_n, speed_mpn_subcnd_n): Update - to pass condition as first argument. - - * gmp-impl.h (mpn_addcnd_n, mpn_subcnd_n): Updated declarations. - - * mpn/generic/addcnd_n.c (mpn_addcnd_n): Reordered arguments, make - condition the first argument. - * mpn/generic/subcnd_n.c (mpn_subcnd_n): Likewise. - * mpn/arm/aorscnd_n.asm: Likewise. - * mpn/x86_64/aorscnd_n.asm: Likewise. - * mpn/powerpc64/mode64/aorscnd_n.asm: Likewise. - -2013-03-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/mulx/adx/missing.asm: Simulate some mulx/adx insns. - * mpn/x86_64/mulx/adx/missing-call.m4: Call variant. - * mpn/x86_64/mulx/adx/missing-inline.m4: Inline variant. - - * mpn/sparc64/ultrasparct3/missing.asm: Simulate some v9-2011 insns. - * mpn/sparc64/ultrasparct3/missing.m4: Inline or invoke missing.asm for - v9-2011 insn. - - * configure.ac: Strip `haswell' from paths for now. - - * mpn/x86_64/mulx/addmul_1.asm: New. - * mpn/x86_64/mulx/mul_1.asm: Rewrite file from `haswell' subdir. - * mpn/x86_64/mulx/adx/addmul_1.asm: Likewise. - * mpn/x86_64/haswell: Remove. - - * mpn/arm/v7a/cora15/mul_1.asm: New file. - * mpn/arm/v7a/cora15/addmul_1.asm: New file. - -2013-03-09 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpz/t-cong_2exp.c: Improve coverage. - -2013-03-09 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64/ultrasparc1234/add_n.asm: Use g5 instead of g4. - * mpn/sparc64/ultrasparc1234/sub_n.asm: Likewise. - - * mpn/sparc64/ultrasparct3/aormul_2.asm: Fix a typo. - -2013-03-07 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/v7a/cora9/gmp-mparam.h: New file. - - * configure.ac (GMP_MULFUNC_CHOICES): Support mul_2 + addmul_2. - - * mpn/sparc64/ultrasparct3/aormul_2.asm: New file. - - * mpn/sparc64/ultrasparct3/submul_1.asm: Optimise out two carry - propagating adds. - -2013-03-06 David Miller <davem@davemloft.net> - - * config.guess: Recognize UltraSparc T4 under Linux. - * configure.ac: Add sparc64/ultrasparct3 to path_64 when T3 or T4. - Append -xarch=v8plusd or -xarch=v9d to command line, as needed. - * mpn/sparc64/ultrasparct3/mul_1.asm: New file. - * mpn/sparc64/ultrasparct3/addmul_1.asm: New file. - * mpn/sparc64/ultrasparct3/submul_1.asm: New file. - * mpn/sparc64/ultrasparct3/add_n.asm: New file. - * mpn/sparc64/ultrasparct3/sub_n.asm: New file. - - * mpn/sparc32/ultrasparct1/mul_1.asm: Unroll main loop one time, add - T2/T3/T4 timings. - * mpn/sparc32/ultrasparct1/addmul_1.asm: Likewise. - * mpn/sparc32/ultrasparct1/submul_1.asm: Likewise. - -2013-03-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/neon/lorrshift.asm: New file. - -2013-03-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/v7a/cora15/copyd.asm: New file. - * mpn/arm/v7a/cora15/copyi.asm: New file. - - * mpn/arm64/logops_n.asm: New file. - * mpn/arm64/gcd_1.asm: New file. - * mpn/arm64/aorsmul_1.asm: New file. - * mpn/arm64/addmul_1.asm: Remove. - * mpn/arm64/aors_n.asm: Complete rewrite. - - * mpn/arm/tabselect.asm: New file. - * mpn/arm/neon/tabselect.asm: New file. - - * mpn/arm/copyi.asm: Software pipeline. - * mpn/arm/copyd.asm: Likewise. - - * config.guess: Rework tmp file handling to resemble configfsf.guess's. - -2013-03-03 Niels Möller <nisse@lysator.liu.se> - - * doc/gmp.texi (Integer Special Functions): Document - mpz_limbs_read, mpz_limbs_write, mpz_limbs_modify, - mpz_limbs_finish, mpz_roinit_n and MPZ_ROINIT_N. - - * mpz/roinit_n.c (mpz_roinit_n): Normalize the input. - -2013-02-27 Niels Möller <nisse@lysator.liu.se> - - * tune/common.c (speed_measure): Increase repetition count if we - get a zero measurement. - -2013-02-27 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/mini-gmp.c (mpz_div_q_2exp): Adjust only if needed. - (mpn_common_scan): New service function to unify scan loops. - (mpz_scan0, mpz_scan1): Simplify by using mpn_common_scan. - (mpz_make_odd): Simplify, assume in-place operation on positive. - (mpn_scan0, mpn_scan1): New functions. - * mini-gmp/mini-gmp.h (mpn_scan0, mpn_scan1): New declarations. - * mini-gmp/tests/t-scan.c: Test also mpn_scan0 and mpn_scan1. - -2013-02-26 Niels Möller <nisse@lysator.liu.se> - - * tests/mpz/t-limbs.c (check_roinit): Test MPZ_ROINIT_N only if - compiler supports c99. - -2013-02-25 Niels Möller <nisse@lysator.liu.se> - - * mini-gmp/tests/t-double.c (testmain): Declare double variables - as volatile, to drop extended precision. - - * mini-gmp/tests/testutils.c (testfree): New function. Use it - everywhere where test programs deallocate storage allocated via - the mini-gmp allocation functions, including uses of mpz_get_str - for various test failure messages. - - * mpz/limbs_finish.c (mpz_limbs_finish): New file and function. - * mpz/limbs_modify.c (mpz_limbs_modify): New file and function. - * mpz/limbs_read.c (mpz_limbs_read): New file and function. - * mpz/limbs_write.c (mpz_limbs_write): New file and function. - * mpz/roinit_n.c (mpz_roinit_n): New file and function. - * gmp-h.in: Declare new functions. - (MPZ_ROINIT_N): New macro. - * mpz/Makefile.am (libmpz_la_SOURCES): Added new files. - * Makefile.am (MPZ_OBJECTS): Added new object files. - - * tests/mpz/t-limbs.c: New testcase. - * tests/mpz/Makefile.am (check_PROGRAMS): Added t-limbs. - -2013-02-22 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac: Fix typo in adx/mulx path stripping code. - * config.sub: Match coreibwl. - -2013-02-20 Niels Möller <nisse@lysator.liu.se> - - * tests/mpq/t-get_d.c (check_random): Rewrote to make test less - dependent on float operations. Fixes problem with m68k-linux and - extended float precision. - -2013-02-20 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/haswell/mulx/adx/addmul_1.asm: New file. - - * configure.ac: Support coreibwl. Use proper name for ADX extension. - * acinclude.m4 (GMP_ASM_X86_ADX): Rename from GMP_ASM_X86_ADOX. - - * tests/tests.h (TESTS_REPS): Keep count >= 1. - -2013-02-19 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/mini-gmp.c: Move asserts to work-around a compiler bug. - (mpz_export): Reorder branches. - (mpz_mul_ui): Avoid temporary allocation (mpn_mul_1 can work in-place). - - * mini-gmp/tests/t-reuse.c: Fix typo causing the same negation - condition to be applied to all operands. (See 2013-02-03, Torbjorn) - -2013-02-17 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmpxx.h (mpq_class, mpf_class) [init_ui, init_si, assign_si]: - Optimise _si using _ui for positive arguments. - (__gmp_hypot_function): Use _mul_ui to square an ui, abs for si. - - * mini-gmp/mini-gmp.c (mpz_mul): Read sizes just once. - (mpn_set_str_other): Remove a redundant variable. - (mpz_abs_add): Use SWAP once, to order sizes. - (mpz_mul_ui): Micro-optimisation. - (mpz_rootrem): Use _init2 before _setbit. - (mpz_set_str): Optimise-out a variable. - (mpz_import): Normalise only if needed. - (mpn_div_qr_1): Speed-up the d=1 case, delaying a branch. - - * rand/randmts.c: Use init2, as size of variables is known in advance. - (mangle_seed): Get a single argument. - - * mpz/remove.c: Delay allocation in the generic case; use swap - instead of set. - * mpn/generic/remove.c: Delay (possibly smaller) allocation. - -2013-02-17 Marc Glisse <marc.glisse@inria.fr> - - * cxx/osdoprnti.cc: Use <stdarg.h> and <string.h> rather than <cstdarg> - and <cstring> (revert 2002-12-21). - - * tests/cxx/Makefile.am: Link with libm. - * tests/cxx/t-ops2.cc: Comment about more tests. Use <math.h> rather - than <cmath> and using namespace. Don't include <iostream>. - - * gmpxx.h (__GMPXX_BITS_TO_LIMBS, __GMPQ_NUM_DBL_LIMBS, - __GMPQ_DEN_DBL_LIMBS, __GMPXX_TMPQ_D): New macros. - (__gmp_binary_plus, __gmp_binary_minus, __gmp_binary_multiplies, - __gmp_binary_divides, __gmp_binary_equal, __gmp_binary_less, - __gmp_cmp_function): Use __GMPXX_TMPQ_D. - * tests/cxx/t-ops2.cc: Test __GMPXX_TMPQ_D on DBL_MIN, DBL_MAX. - - * gmpxx.h (__gmp_binary_multiplies, __gmp_binary_divides): Use - __GMPXX_CONSTANT_TRUE. - -2013-02-16 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h: Include <algorithm>. - -2013-02-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/Makefile.am (TARG_DIST): Add arm64. - - * mpn/x86_64/x86_64-defs.m4 (PROTECT): Emit '.hidden' instead of - '.protected" to please Sun's assembler, but also for semantic reasons. - -2013-02-15 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac (arm64*-*-*): Match this. - - * mpn/arm64/aors_n.asm: New file. - * mpn/arm64/addmul_1.asm: New file. - * mpn/arm64/mul_1.asm: New file. - -2013-02-15 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS, - __GMPXX_DEFINE_ARITHMETIC_ASSIGNMENTS): New macros. - (mpz_class, mpq_class, mpf_class) [init_ui, init_si, init_d, - assign_ui, assign_si, assign_d]: New functions. - (__gmp_expr::__gmp_expr, __gmp_expr::operator=): Replace with macros. - (__GMPXX_CONSTANT_TRUE): New macro. - -2013-02-15 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-impl.h (NEG_CAST, ABS_CAST): Use __GMP_CAST. - * mpz/fits_s.h: Use NEG_CAST. - -2013-02-14 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__gmp_binary_greater): Forward to __gmp_binary_less. - (__gmp_binary_equal): Forward to itself after swapping operands. - -2013-02-14 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mp_dv_tab.c (__gmp_digit_value_tab): Remove a line of unused values. - * mpf/set_str.c: Update offset accordingly. - * mpz/inp_str.c: Likewise. - * mpz/set_str.c: Likewise. - - * gmp-h.in (mpq_cmp_ui): Optimise comparison with 1/1. - * tests/mpq/t-cmp_ui.c: Test special comparisons: 0/1, 1/1. - - * mpz/clrbit.c: Reorganise branches. - * mpz/setbit.c: Likewise. - * mpz/combit.c: Same micro-optimisations as in set/clr. - - * mpz/aors_ui.h: No realloc if size was zero. - * mpz/ior.c: Use macros: MPZ_REALLOC and MPN_INCR_U. - - * gmp-impl.h (NEG_CAST): New macro, used by ABS_CAST. - * mpq/cmp_si.c: Use NEG_CAST. - * mpz/cmp_si.c: Reorganise branches. - -2013-02-13 Torbjorn Granlund <tege@gmplib.org> - - * acinclude.m4 (GMP_ASM_X86_MULX, GMP_ASM_X86_ADOX): New feature tests. - * configure.ac: Use new feature tests. - - * mpn/x86_64/haswell/mulx/mul_1.asm: File moved to cope with older - assemblers. - * configure.ac: Update haswell path to include "mulx". - -2013-02-12 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac: Recognise haswell. - * config.guess: Recognise haswell. - * config.sub: Match haswell. - - * mpn/x86_64/haswell/mul_1.asm: New file, mainly for testing HNI. - -2013-02-12 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-impl.h (MPZ_PROVOKE_REALLOC): Remove unused macro. - * gen-fac.c (gen_consts): Remove obsolete code, use swap instead of set. - * mini-gmp/mini-gmp.c (fac_ui, bin_uiui): Use shorter and faster code. - - * mpn/generic/mulmod_bnm1.c: Reorganise branches. - * mini-gmp/mini-gmp.c: Reduce branches. - - * mpz/bin_ui.c: Avoid a copy when n < 0. - * mpz/mfac_uiui.c: Reduce memory usage. - * mpz/primorial_ui.c: Use MPZ_NEWALLOC. - - * mpz/import.c: Use BITS_TO_LIMBS and MPZ_NEWALLOC. - * mpz/inp_raw.c: Likewise. - * mpz/rrandomb.c: Likewise. - * mpz/urandomb.c: Likewise. - * mpn/generic/random2.c: Likewise. - - * mpn/generic/brootinv.c: Micro-optimisation. - - * mpf/set_str.c: Don't chech base==0 when base is strictly positive. - -2013-02-10 Torbjorn Granlund <tege@gmplib.org> - - * Version 5.1.1 released. - -2013-02-07 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tune/speed.h (SPEED_ROUTINE_MPN_MUL): Use operands from struct s. - * tune/README: Document new parameter syntax mpn_mul.<#> . - -2013-02-06 Niels Möller <nisse@lysator.liu.se> - - * tests/mpz/t-jac.c (check_large_quotients): Rewrote. Now uses a - more efficient method for generating the test inputs. - -2013-02-05 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpn/t-div.c: Limit random dbits to avoid an infinite loop. - -2013-02-03 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/reuse.c: Fix typo causing the same negation condition to be - applied to all operands. Fix condition for when to invoke mpz_remove. - Make different-size random operands. - -2013-02-02 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/remove.c: Correct the sign in case of reuse. - -2013-02-01 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (DIGITS_IN_BASE_PER_LIMB): Add a cast. - (LIMBS_PER_DIGIT_IN_BASE): Likewise. - - * tests/refmpn.c (refmpn_mul): Use toom6h instead of toom44 for the - largest operands. - -2013-01-31 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/toom44_mul.c: Revert last change in favour of a simple - change (thanks Marco!). - * mpn/generic/toom4_sqr.c: Likewise. - -2013-01-30 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/toom44_mul.c (MAYBE_mul_toom44): Take toom6h and toom8h - into account, using new macro MUL_NEXTALG_THRESHOLD. - * mpn/generic/toom4_sqr.c (MAYBE_sqr_toom4): Likewise. - -2013-01-26 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/remove.c: init+set=init_set, cast before shifting. - - * mpz/cmp_si.c: Use ABS_CAST. - -2013-01-26 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpn/logic.c: Set things up to always test library logops, not - gmp-impl.h's inlined variants. Test also mpn_com. - - * tests/mpn/t-mod_1.c: Test also mpn_mod_1s_3p. - - * mpn/generic/mod_1_3.c: Swap some lines to make it similar to mod_4.c. - - * tests/mpz/reuse.c: Fix typo in last change. - -2013-01-23 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/mini-gmp.c (mpz_cmpabs_d, mpz_cmp_d): Simplify. - (mpz_set_str): Behaviour more adherent to the real GMP. - - * mini-gmp/tests/t-str.c: Cast size_t to unsigned long, for printf. - * mini-gmp/tests/t-import.c: Likewise. - * mini-gmp/tests/t-comb.c: Remove an unused var. - * mini-gmp/tests/t-div.c: Remove unused args passed to fprintf. - * mini-gmp/tests/t-double.c: Use float immediates with float vars. - -2013-01-22 Torbjorn Granlund <tege@gmplib.org> - - * Makefile.am (LIBGMP_LT_*, LIBGMPXX_LT_*): Bump version info. - * gmp-h.in: Bump version. - - * tests/mpz/reuse.c: Delete always zero 'failures' and code depending - on it. Replace rotating progress with real measure. - - * Makefile.am (check-mini-gmp): Fix typo in last change. - -2013-01-22 Niels Möller <nisse@lysator.liu.se> - - * mini-gmp/mini-gmp.c (mpz_cmp_d): Simplified, just sort out - signs, then call mpz_cmpabs_d. - - * mini-gmp/tests/testutils.h: Include stdio.h and stdlib.h. - (numberof): New define. - - * mini-gmp/tests/t-cmp_d.c: New file, copied from - tests/mpz/t-cmp_d.c with minor changes. - * mini-gmp/tests/Makefile (CHECK_PROGRAMS): Added t-cmp_d, - - * mini-gmp/mini-gmp.c (mpz_cmpabs_d): New function. - * mini-gmp/mini-gmp.h: Declare it. - -2013-01-21 Niels Möller <nisse@lysator.liu.se> - - * mini-gmp/tests/t-str.c (testmain): Test mpz_out_str, using - the tmpfile function for i/o. - -2013-01-20 Torbjorn Granlund <tege@gmplib.org> - - * Makefile.am (check-mini-gmp): Set also DYLD_LIBRARY_PATH for the - benefit of Darwin. - - * tests/mpn/t-div.c: Test mpn_sb_div_qr_sec and mpn_sb_div_r_sec. - (main): Separate divisor into normalised (dnp) and unnormalised (dup), - pass appropriate variant to each function. - (main): Make negative `test' index value mean divisor bits, for better - small operands coverage. - (main): Put random junk at qp[] instead of zeroing. - - * tests/mpz/t-remove.c: Back out last change which left `divisor_size' - uninitialised; achieve change's aim with a parameter tweak. - -2013-01-20 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/tests/testutils.c (testhalves): New function, test default - memory functions. - * mini-gmp/tests/testutils.h (testhalves): Declare it - * mini-gmp/tests/t-logops.c: Use testhalves. - - * mini-gmp/mini-gmp.c (mpz_init_set_str): New function. - * mini-gmp/mini-gmp.h (mpz_init_set_str): Declare it. - * mini-gmp/tests/t-str.c: Test mpz_init_set_str. - -2013-01-20 Torbjorn Granlund <tege@gmplib.org> - - * tests/memory.c (PTRLIMB): New macro, used for conformant casting. - -2013-01-19 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/tests/t-double.c (testmain): Get the current free - function using mp_get_memory_functions. - * mini-gmp/tests/t-str.c (testmain): Likewise. - - * mini-gmp/tests/testutils.h (tu_free): Remove declaration. - - * mini-gmp/tests/testutils.c (block_check, tu_free): Mark static. - - * tests/mpz/t-set_str.c: Check also failing conditions. - - * tests/mpz/t-remove.c: Test removal of 1. - -2013-01-18 Niels Möller <nisse@lysator.liu.se> - - * mini-gmp/tests/t-str.c (test_small): New function, exercising - parsing of whitespace and base prefixes. - (testmain): Call it. - - * mini-gmp/tests/t-gcd.c (gcdext_valid_p): Fixed memory leak. - - * mini-gmp/tests/t-double.c (testmain): Call tu_free rather than - free, for storage allocated by mpz_get_str. - * mini-gmp/tests/t-str.c (testmain): Likewise. - - * mini-gmp/tests/testutils.c (block_init, block_check): New - functions. - (tu_alloc, tu_realloc, tu_free): New functions. - (main): Use mp_set_memory_functions. - * mini-gmp/tests/testutils.h (tu_free): Declare. - - * mini-gmp/tests/testutils.h: New file, declarations for test - programs. - - * mini-gmp/tests/testutils.c (main): New file, with shared main - function for all the test programs. Also includes mini-gmp.c. - Calls testmain after initialization. All other test programs - updated to define testmain rather than main. - -2013-01-18 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/tests/t-signed.c: Slightly larger coverage. - * mini-gmp/tests/t-double.c: Test also mpz_init_set_d. - -2013-01-18 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/set_str.c (normalization_steps): Eliminate set-but-unused - variable. - - * mini-gmp/tests/t-div.c: Test mpz_divisible_p and mpz_divisible_ui_p. - - * tests/tests.h (TESTS_REPS): Fix printf argument type clashes. - - * mini-gmp/tests/t-div.c: Test also mpz_mod, mpz_mod_ui. Compare - mpz_divisible_p just to ceil, to save time. - - * mini-gmp/mini-gmp.c: Prefix some names with GMP_. - -2013-01-16 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/tests/t-double.c: Test mpz_cmp_d. - * mini-gmp/mini-gmp.c (mpz_cmp_d): Correct multiword comparison. - - * mini-gmp/mini-gmp.c (mpz_set_str): Handle the empty string. - * mini-gmp/tests/t-str.c: Test base <= 0. - -2013-01-15 Niels Möller <nisse@lysator.liu.se> - - * mini-gmp/tests/t-str.c (main): Use x->_mp_d rather than x[0]._mp_d. - * mini-gmp/tests/t-invert.c (main): Likewise. - - * mini-gmp/tests/t-mul.c (main): Test mpn_mul_n and mpn_sqr. - - * mini-gmp/tests/hex-random.h (enum hex_random_op): New value - OP_SQR. - - * mini-gmp/tests/mini-random.c (mini_random_op3): Renamed, from... - (mini_random_op): ... old name. Updated callers. - (mini_random_op2): New function. - - * mini-gmp/tests/hex-random.c (hex_random_op3): Renamed, from... - (hex_random_op): ... old name. Updated callers. - (hex_random_op2): New function. - -2013-01-15 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/tests/t-logops.c: Improve popcount/hamdist testing. - * mini-gmp/tests/t-signed.c: Test more cases. - -2013-01-15 Torbjorn Granlund <tege@gmplib.org> - - From Mike Frysinger: - * configure.ac: Add x32 ABI for x86_64. - -2013-01-14 Niels Möller <nisse@lysator.liu.se> - - * mini-gmp/tests/t-str.c (main): Added tests for mpn_get_str and - mpn_set_str. - -2013-01-14 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * doc/gmp.texi (gmp_version): Remove "was used" repetition. - (Upward compatibility): Mention mpn_bdivmod, GMP 4 -> GMP 5. - -2013-01-13 Marc Glisse <marc.glisse@inria.fr> - - * doc/gmp.texi: Let mpn_sqrtrem reference mpn_perfect_square_p instead - of mpz_perfect_square_p. - -2013-01-11 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/tests/t-comb.c: New test program, testing both - mpz_fac_ui and mpz_bin_uiui. - * mini-gmp/tests/Makefile (CHECK_PROGRAMS): Added t-comb. - - * mini-gmp/mini-gmp.c (mpz_mul_si): Simplify. - (mpz_mul_ui, mpz_mul, mpz_div_qr): Replace init+REALLOC with init2. - - * mini-gmp/mini-gmp.c (NEG_CAST): New macro. - (mpz_mul_si, mpz_set_si, mpz_cmp_si): Use NEG_CAST. - - * mini-gmp/mini-gmp.c (mpz_set_si, mpz_cmp_si): Simplify by using - the _ui variant. - - * mini-gmp/tests/t-root.c: Use mpz_ui_pow_ui, when base fits an ui. - - * mini-gmp/tests/t-mul.c: Test also mpz_mul_si. - * mini-gmp/tests/t-sub.c: Test also mpz_ui_sub. - - * mini-gmp/mini-gmp.c (mpz_fits_slong_p): Correct range. - * mini-gmp/tests/t-signed.c: New test program, for get/set/cmp_si. - * mini-gmp/tests/Makefile (CHECK_PROGRAMS): Added t-signed. - - * mini-gmp/mini-gmp.c (mpz_hamdist): Handle different sizes. - * mini-gmp/tests/t-logops.c: Test also popcount and hamdist. - -2013-01-10 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/export.c: Less restrictive ASSERTs. - * mini-gmp/mini-gmp.c (mpz_export, mpz_import): Likewise. - * mini-gmp/tests/t-import.c: Test also size=0 or count=0. - -2013-01-10 Torbjorn Granlund <tege@gmplib.org> - - * mini-gmp/tests/t-import.c (main): Don't drop off function end. - - * Makefile.am (check-mini-gmp): Set LD_LIBRARY_PATH to allow testing - with dynamic main GMP build. - -2013-01-09 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/mini-gmp.c (mpz_export): Support op=0 countp=NULL. - -2013-01-08 Niels Möller <nisse@lysator.liu.se> - - * mini-gmp/tests/t-import.c: New test program, testing both - mpz_import and mpz_export. - * mini-gmp/tests/Makefile (CHECK_PROGRAMS): Added t-import. - - * mini-gmp/tests/mini-random.c (mini_rrandomb_export): New - function. - * mini-gmp/tests/mini-random.h: Declare it. - * mini-gmp/tests/hex-random.c (hex_rrandomb_export): New function. - * mini-gmp/tests/hex-random.h: Declare it. - - * mini-gmp/mini-gmp.c (mpz_export): Compute accurate word count up - front, to avoid generating any high zero words. - -2013-01-07 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/README: Document base limitation for conversions. - * mini-gmp/mini-gmp.c (mpz_set_str): Remove goto. - (mpz_import, mpz_export): Correctly use order/endianness. - -2013-01-05 Torbjorn Granlund <tege@gmplib.org> - - * longlong.h (aarch64): Make add_ssaaaa and sub_ddmmss actually work. - -2013-01-04 Marco Bodrato <bodrato@mail.dm.unipi.it> - - From shuax: - * mini-gmp/mini-gmp.c (mpz_import): Reset limb after storing it. - -2013-01-04 Torbjorn Granlund <tege@gmplib.org> - - From Marko Lindqvist: - * configure.ac: Use AC_CONFIG_HEADERS instead of the obsolete - AM_CONFIG_HEADER. - -2013-01-02 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpz/bit.c: Wider testing for mpz_combit. - * tests/mpz/logic.c: Check the -2^n case. - - * mpz/ior.c: Fixed an allocation bug in the -2^n case. - -2012-12-31 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/get_d.c: Minor reorg, add vax D code. - - * gmp-impl.h (double_extract): New union type for vax D floats. - - * tests/mpq/t-get_d.c (check_random): Limit exponents on vax. - -2012-12-30 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpz/bit.c (check_clr_extend): Check _set shrink. - -2012-12-29 Torbjorn Granlund <tege@gmplib.org> - - * demos/calc/calc.c: Remove generated file from repo. - * demos/calc/calc.h: Likewise. - * demos/calc/calclex.c: Likewise. - -2012-12-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/get_d.c: Complete rewrite of non-IEEE code. - - * tests/mpq/t-get_d.c (main): Suppress check_random for vax. - -2012-12-25 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/bdiv_q_1.asm: Use LEA for binvert_limb_table. - -2012-12-23 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/t-get_d.c (check_onebit): Decrease vax limit to avoid - overflow in last, unused 'want' value. - - * config.guess: Recognise AMD family 22 as a future bobcat. - -2012-12-21 Torbjorn Granlund <tege@gmplib.org> - - * configure.ac: Rename configure.in. - -2012-12-17 Torbjorn Granlund <tege@gmplib.org> - - * Version 5.1.0 released. - - * configure.in (none-*-*): Allow this again, but print a warning. - -2012-12-17 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/n_pow_ui.c: Fix typos in an ASSERT. - -2012-12-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mu_div_qr.c (mpn_preinv_mu_div_qr): Explicitly use - MPN_COPY_INCR for slightly overlapping copy. - -2012-12-15 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpn/toom-sqr-shared.h: Skip ALLOCs if the test is skipped. - -2012-12-13 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/dos64.m4 (PIC): Move definition early. - (JMPENT): Remove PIC variant. - - * mpn/x86_64/darwin.m4 (JUMPTABSECT): Define to .text, instead of - something sensible. - -2012-12-12 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/x86_64-defs.m4 (JMPENT): New macro. - * mpn/x86_64/dos64.m4: Likewise. - * mpn/x86_64/darwin.m4: Likewise. - * mpn/x86_64/mod_34lsub1.asm: Use JMPENT to properly support PIC. - * mpn/x86_64/mullo_basecase.asm: Likewise. - * mpn/x86_64/sqr_basecase.asm: Likewise. - -2012-12-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/mod_34lsub1.asm: Try different jump table for the benefit - of broken Apple linkers. - -2012-12-09 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Make GMP_NONSTD_ABI ABI specific. - -2012-12-08 Torbjorn Granlund <tege@gmplib.org> - - * Makefile.am (LIBGMP_LT_*, LIBGMPXX_LT_*): Bump version info. - * gmp-h.in: Bump version. - -2012-12-06 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpq/reuse.c: New test (adapted from mpf/reuse.c). - * tests/mpq/Makefile.am (check_PROGRAMS): Add reuse. - - * mpz/abs.c: Use NEWALLOC. - * mpz/neg.c: Likewise. - * mpz/com.c: Reduce branches. - -2012-12-05 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/brootinv.c (mpn_brootinv): Make valgrind happier, at - the cost of a redundant MPN_ZERO. - - * mpz/jacobi.c (mpz_jacobi): Check for asize == 0 or bsize == 0 - before using the low limbs. - -2012-12-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/set_str.c (mpn_dc_set_str): Work around a valgrind issue. - - * mpz/powm_ui.c: Don't assume >= 2 limbs in mod argument. - - * tests/tests.h (TESTS_REPS): Handle float GMP_CHECK_REPFACTOR. - - * longlong.h: Refine cpp test for vax. - * tests/mpn/t-get_d.c: Likewise. - * tests/mpz/t-get_d.c: Likewise. - * tests/mpz/t-cmp_d.c: Likewise. - * tests/mpz/t-get_d.c: Likewise. - * tests/mpq/t-get_d.c: Likewise. - * tests/mpf/t-get_d.c: Likewise. - -2012-11-30 Torbjorn Granlund <tege@gmplib.org> - - * gen-fac.c (gen_consts): Correct printf types. - - * mpn/arm/v7a/cora15/gmp-mparam.h: New file. - - * configure.in (arm*-*-*): New compiler optional "tune". Pass value for - selected processors. Add more specific path components. - -2012-11-29 Torbjorn Granlund <tege@gmplib.org> - - From Andoni Morales Alastruey: - * longlong.h: Conditionalise ARM asm on !__thumb__. - -2012-11-28 Torbjorn Granlund <tege@gmplib.org> - - * config.guess (arm*-*-*): Support specific ARM processors. - * config.sub: Match arm CPUs. - * configure.in (arm*-*-*): Likewise. - - * mpz/powm.c: Move new_b out since it lives on through b. - - * configure.in (arm*-*-*): Pass -marm to deal with compilers defaulting - to thumb code. - -2012-11-26 Torbjorn Granlund <tege@gmplib.org> - - * tests/cxx/t-ops2.cc (checkz): Reduce huge numbers to avoid vax - overflow. - -2012-11-25 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/get_d.c: Reinsert non-IEEE code. - - * mpn/vax/add_n.asm: New file. - * mpn/vax/add_n.s: Remove. - * mpn/vax/addmul_1.asm: New file. - * mpn/vax/addmul_1.s: Remove. - * mpn/vax/lshift.asm: New file. - * mpn/vax/lshift.s: Remove. - * mpn/vax/mul_1.asm: New file. - * mpn/vax/mul_1.s: Remove. - * mpn/vax/rshift.asm: New file. - * mpn/vax/rshift.s: Remove. - * mpn/vax/sub_n.asm: New file. - * mpn/vax/sub_n.s: Remove. - * mpn/vax/submul_1.asm: New file. - * mpn/vax/submul_1.s: Remove. - - * mpn/vax/elf.m4: New file. - * configure.in (vax*-*-*elf*): New case, grabbing vax/elf.m4. - - * tests/mpn/t-get_d.c (check_onebit): Get vax bounds right. - (main): Switch off check_rand for vax. - -2012-11-22 Niels Möller <nisse@lysator.liu.se> - - * mini-gmp/tests/run-tests: Copied latest version from GNU Nettle. - Minor fix to the use of $EMULATOR, and proper copyright notice. - -2012-11-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/powm_sec.c (redcify): Use mpn_sb_div_r_sec. - - * mpn/generic/sb_div_sec.c: New file. - * mpn/generic/sbpi1_div_sec.c: New file. - * configure.in (gmp_mpn_functions): Add new files. - * gmp-impl.h: Declare new functions. - -2012-11-12 Torbjorn Granlund <tege@gmplib.org> - - * longlong.h: Add ARM64 support. - * longlong.h: Add AVR support. - - * mpn/powerpc64/mode64/divrem_1.asm: Tune, simplify. - - * mpq/md_2exp.c: Use MPN_COPY_INCR, not MPN_COPY_DECR. - * tests/mpq/t-md_2exp.c (check_random): New function. - -2012-11-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/remove.c (mpn_bdiv_qr_wrap): Make static. - -2012-11-04 Torbjorn Granlund <tege@gmplib.org> - - * mpz/powm_ui.c: Rewrite. - -2012-11-01 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/brootinv.c (mpn_brootinv): Input size in limbs - rather than bits. Use single-precision iterations for the first - limb. - * mpn/generic/perfpow.c (is_kth_power): Update mpn_brootinv call. - * tests/mpn/t-brootinv.c (main): Likewise. - * tune/speed.h (SPEED_ROUTINE_MPN_BROOTINV): Likewise. - * gmp-impl.h (mpn_brootinv): Updated prototype. - - * mpn/generic/hgcd2.c (mpn_hgcd2): Removed redundant loop exit - tests in the single-precision loop. - - * mpz/combit.c (mpz_combit): Rewrite, optimizing for the common - case. - -2012-10-31 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/Makefile.am (check_PROGRAMS): Added t-brootinv. - * tests/mpn/t-brootinv.c: New file - - * mpn/generic/broot.c (mpn_broot_invm1): Avoid a mullo_n in the - loop, and do powering as a plain mpn_sqr followed by mpn_powlo. - - * tune/speed.c (routine): Added mpn_broot, mpn_broot_invm1, - mpn_brootinv. - - * tune/common.c (speed_mpn_broot, speed_mpn_broot_invm1) - (speed_mpn_brootinv): New functions. - * tune/speed.h (SPEED_ROUTINE_MPN_BROOT) - (SPEED_ROUTINE_MPN_BROOTINV): New macros. - - * mpn/generic/broot.c (mpn_broot_invm1): Made non-static (mainly - for benchmarking). - * gmp-impl.h (mpn_broot_invm1): Declare it. - -2012-10-28 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (gmp_mpn_functions): Add new files. - * gmp-impl.h: Declare new functions. - * mpn/generic/perfpow.c: Overhaul. - (binv_root, binv_sqroot): Remove. - * mpn/generic/brootinv.c: New file, code from overhauled binv_root. - * mpn/generic/bsqrtinv.c: New file, code from overhauled binv_sqroot. - * mpn/generic/bsqrt.c: New file. - - * tests/mpn/t-broot.c: Add a forgotten TMP_MARK. - -2012-10-28 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/broot.c (mpn_broot): New file and function. - * configure.in (gmp_mpn_functions): Add broot. - * gmp-impl.h (mpn_broot): Declare. - * tests/mpn/t-broot.c: New testcase. - * tests/mpn/Makefile.am (check_PROGRAMS): Added t-broot. - -2012-10-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/remove.c: Get remainder allocation right. - -2012-10-25 Torbjorn Granlund <tege@gmplib.org> - - * longlong.h: De-support old POWER asm syntax. - - * tests/mpz/t-remove.c: Run more tests, but use a tad smaller operands. - - * mpn/generic/remove.c (mpn_bdiv_qr_wrap): New function. - (mpn_remove): Call mpn_bdiv_qr_wrap. - * mpz/remove.c: Enable suppressed mpn_remove call. - -2012-10-17 Torbjorn Granlund <tege@gmplib.org> - - * mpz/powm_ui.c (mpz_powm_ui): Deflect to mpz_powm for large exponent. - -2012-09-10 Torbjorn Granlund <tege@gmplib.org> - - * demos/factorize.c: Rewrite no more current form. Implement Lucas - prime proving, and make its use the default. - * demos/primes.h: New file. - -2012-08-24 Torbjorn Granlund <tege@gmplib.org> - - * demos/factorize.c: Overhaul. - -2012-08-06 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * doc/gmp.texi (mpn_neg): Correctly document returned type. - - * gmp-impl.h (_mpz_newalloc, log_n_max): mark with inline (spotted by Niels). - -2012-07-28 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (std::common_type): New partial specializations with builtin - types. - * tests/cxx/t-cxx11.cc: Test it. - -2012-07-21 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc32/vmx/mod_34lsub1.asm: Fix r0 clobbering issue with - "large" code affecting elf+darwin PIC. - -2012-07-21 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__GMPXX_CONSTANT): Disable for g++-3.4. - -2012-06-26 Torbjorn Granlund <tege@gmplib.org> - - * Makefile.am (LIBMP_LT_*): Remove these. - -2012-06-26 Marc Glisse <marc.glisse@inria.fr> - - * Makefile.am (LIBGMP_LT_*, LIBGMPXX_LT_*): Update comment for 5.1.0. - -2012-06-24 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * configure.in (CALLING_CONVENTIONS_OBJS): Disable any use of - assembly code with the --disable-assembly option. - * mpz/oddfac_1.c: Use the ASSERT_CODE macro. - * gen-trialdivtab.c (mpz_log2): Use mpz_sizeinbase (., 2). - - * gmp-impl.h (MPN_SIZEINBASE_16): Replace with MPN_SIZEINBASE_2EXP - from mpz/export.c . - * mpz/export.c (MPN_SIZEINBASE_2EXP): Removed. - * mpn/generic/sizeinbase.c: Use MPN_SIZEINBASE. - - * mpz/nextprime.c: Use MPN_SIZEINBASE_2EXP to count bits. - * mpn/generic/perfpow.c: Likewise. - * mpn/generic/rootrem.c: Likewise. - * mpz/get_d_2exp.c: Likewise. - * mpn/generic/powm_sec.c: Likewise, nailify. - * mpn/generic/powlo.c: Likewise. - * mpn/generic/powm.c: Likewise. - - * mini-gmp/mini-gmp.c (mpz_div_r_2exp, mpz_div_q_2exp): Improve - adjustment condition. - -2012-06-23 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (numeric_limits): Make content public. - * cxx/limits.cc: New file, proper declarations. - * Makefile.am: List new file. - * cxx/Makefile.am: Likewise. - * cxx/t-misc.cc: Add minimal test for numeric_limits. - -2012-06-09 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__gmp_resolve_expr::srcptr_type): New typedef. - (__gmp_temp): Wrapper for mp*_class, the constructor copies the - precision of its second argument for mpf_t. - (__gmp_expr::eval(p, prec)): Remove. - (__gmp_expr::eval(p)): Use __gmp_temp. - (__gmp_set_expr): Never pass prec to eval(). - -2012-06-08 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-impl.h (__GMP_WITHIN_CONFIGURE): Use the same #if as in gmp-h.in. - (MPN_NORMALIZE_NOT_ZERO): Tighter ASSERT. - (MPZ_NEWALLOC): New macro. - * mpq: Use the new macro when possible. - * mpz/bin_uiui.c: Likewise. - * mpz/oddfac_1.c: Likewise. - * mpz/prodlimbs.c: Likewise. - - * mini-gmp/mini-gmp.c (mpz_realloc): remove a branch. - -2012-06-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/aix.m4 (ASM_START): Claim machine type "any". - -2012-06-03 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/gcdext.c (mpn_gcdext): Deleted code for handling - impossible case u1 == 0, Simplified test for unlikely case u0 == 0. - -2012-06-02 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/lshiftc.asm: New file. - -2012-06-01 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/aorslsh1_n.asm: Use cmp/cmn instead of subs/adds in more - places. - - * mpz/get_str.c: Don't strip leading zeros since current mpn_get_str - won't generate any. Misc streamlining. - * mpz/out_str.c: Analogous changes. - - * tests/mpz/io.c: Use a wider range of bases. - - * tests/mpz/t-cong.c (check_random): Rewrite random generation for - exponentially distributed operand sizes. - -2012-06-01 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpq: Use more macros and MPZ_REALLOC return value when possible. - - * gmp-impl.h (LIMBS): Removed, was an alias for PTR. - * mpz/combit.c: Use PTR and CNST_LIMB. - - * tests/mpn/t-bdiv.c: Test also mpn_bdiv_qr. - * mpn/generic/bdiv_qr.c: Add an ASSERT. - - * mpn/generic/remove.c: Add a zero limb to use bdiv_qr... - -2012-05-31 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (mpq_class::mpq_class): Handle mpq_class(0,1). - * tests/cxx/t-constr.cc: Test it. - -2012-05-30 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64 (FUNC_ENTRY): New name for DOS64_ENTRY. - * mpn/x86_64 (FUNC_EXIT): New name for DOS64_EXIT. - -2012-05-29 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/remove.c: Optimise branches. - - * mpn/generic/toom6h_mul.c: less branches in the LIKELY balanced path. - * mpn/generic/toom8h_mul.c: Likewise. - -2012-05-29 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/v5/mod_1_1.asm: New file. - -2012-05-28 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/gcdext.c (compute_v): Simplified carry handling a - bit, reduced stated scratch need from 2n+1 to 2n. Also comment and - ASSERT improvements. - -2012-05-27 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Add new x86 CPUs. - * mpn/x86/fat/fat.c: Likewise. - * mpn/x86_64/fat/fat.c: Likewise. - -2012-05-27 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86_64/fat/fat.c: abort iff longmode-capable-bit is turned off. - - * mpn/generic/toom8h_mul.c: mark UNLIKELY branches. - -2012-05-26 Torbjorn Granlund <tege@gmplib.org> - - * mpz: Use MPZ_REALLOC return value when possible. - -2012-05-25 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/tests/t-div.c: Test all _qr, _q, _r variants. - * mini-gmp/tests/t-lcm.c: Test the _ui variant. - - * mini-gmp/mini-gmp.c (mpz_mod, mpz_mod_ui): New functions. - * mini-gmp/mini-gmp.h (mpz_mod, mpz_mod_ui): Prototypes. - - * mpz/scan1.c: Simplify, and add a shortcut for scan1(z, 0). - -2012-05-24 Torbjorn Granlund <tege@gmplib.org> - - * mpz/n_pow_ui.c: Cast non-limb count_leading_zeros argument. - -2012-05-24 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/remove.c: Support negative divisor. - * tests/mpz/t-remove.c: Test negative divisor. - -2012-05-23 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/reuse.c: Major rewrite. - -2012-05-23 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/sqrt.c: Further simplify. - * mpz/sqrtrem.c: Likewise. - - * Mark failing branches with UNLIKELY. Many files affected. - -2012-05-22 Torbjorn Granlund <tege@gmplib.org> - - * mpz/sqrt.c: Allocate less for overlapping operands, simplify. - * mpz/sqrtrem.c: Likewise. - -2012-05-21 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/toom8_sqr.c: Reduce branches for recursion. - * mpn/generic/toom8h_mul.c: Likewise. - - * tests/mpn/t-toom8h.c: Don't use GMP_NUMB_BITS when not yet defined. - -2012-05-20 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/t-gcd.c: Rewrite. - -2012-05-19 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/t-gcd.c: Generate larger operands for better gcd code - coverage; distribute size exponentially. - -2012-05-17 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpf/pow_ui.c: Simplify. - * tests/mpf/reuse.c (dsi_func): Exercise pow_ui. - - * tests/mpf/t-set_ui.c (check_data): LONG_HIGHBIT -> ULONG_HIGHBIT. - * tests/mpf/t-set.c (check_random): New check, both set and init_set. - - * tests/cxx/t-ops.cc (check_mpq): Check squaring. - * tests/mpq/t-equal.c (check_various): Check different den-size. - - * mpn/generic/mullo_n.c: Disable MAYBE_ if WANT_FAT_BINARY. - * mpz/cmpabs_d.c: Remove an unused branch. - - * tests/mpz/t-get_d_2exp.c (check_zero): New check. - * tests/mpz/t-inp_str.c: A few more cases. - * tests/mpz/t-cmp_d.c: More bases and symbols, a few cases. - - * mpz/rootrem.c: Correctly handle odd roots of negatives. - * tests/mpz/t-root.c: Test it. - -2012-05-16 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpf/t-eq.c (check_random): New function, meat from old main(). - (check_data): New function. - -2012-05-13 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/rsh1aors_n.asm: New file. - * mpn/arm/v5/mod_1_2.asm: New file. - -2012-05-11 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (explicit operator bool): New functions. - * tests/cxx/t-cxx11.cc: Test the above. - -2012-05-10 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-impl.h (__gmpn_cpuvec_initialized): Was __gmpn_cpuvec.initialized - * mpn/x86/fat/fat.c: Use separated _initialized variable. - * mpn/x86_64/fat/fat.c: Likewise. - * tests/mpn/t-fat.c: Likewise. - - * mpn/generic/toom2_sqr.c: Override global __gmpn_cpuvec_initialized. - * mpn/generic/toom22_mul.c: Likewise. - * mpn/generic/toom3_sqr.c: Likewise. - * mpn/generic/toom33_mul.c: Likewise. - -2012-05-09 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/mini-gmp.c: merge mpz_rootrem and mpz_sqrtrem. - - * mpn/generic/sqrtrem.c (invsqrttab): Reduce size removing common byte. - - * mpz/bin_uiui.c (mul3, mul4, mul8): Remove unneeded shifts. - (MAXFACS): Redefine, using the shared (safer) log_n_max. - -2012-05-08 Torbjorn Granlund <tege@gmplib.org> - - * mpn/minithres/gmp-mparam.h (REDC_1_TO_REDC_N_THRESHOLD): Up to 9, for - coherency with ASSERT in mpn/generic/redc_n.c. - -2012-05-07 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/minithres/gmp-mparam.h: Updated TOOM6 and FAC_DSC. - * tests/mpn/toom-sqr-shared.h: Don't test if no range. - - * mpz/oddfac_1.c: Add ASSERTs to warn about small threshold. - * tune/tuneup.c: Update minimal threshold for FAC_DSC. - -2012-05-06 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/v6/sqr_basecase.asm: Simplify n=4 code. - -2012-05-05 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/invert.c: Mark a branch UNLIKELY. - * tune/tuneup.c (tune_fac_u): Update DSC_THRESHOLD minimum. - * gmp-impl.h (FAC_???_THRESHOLD): Update default values. - (ABOVE_THRESHOLD): New definition with __builtin_constant_p. - - * mpn/generic/toom22_mul.c: Disable MAYBE_ if WANT_FAT_BINARY. - * mpn/generic/toom33_mul.c: Likewise. - * mpn/generic/toom2_sqr.c: Likewise. - * mpn/generic/toom3_sqr.c: Likewise. - -2012-05-04 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c: Measure POWM_SEC_TABLE after the REDC thresholds. - -2012-05-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/powm_sec.c: Use redc_2. - (INNERLOOP): Use this mechanism, like plain powm.c. - (WANT_CACHE_SECURITY): Remove, feature now unconditional. - -2012-05-02 Torbjorn Granlund <tege@gmplib.org> - - * mpz/bin_uiui.c: Make use of CNST_LIMB. - -2012-05-02 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/mfac_uiui.c: Support limb != ui. - -2012-05-02 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/logops_n.asm: Work around register clobbering issue. - - * mpn/arm/aorscnd_n.asm: New file. - -2012-05-01 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Put arm dirs in path in proper prio order. - - * mpn/arm/logops_n.asm: New file. - - * mpz/2fac_ui.c: Fix assumed typo. - - * mpn/arm/v6/gmp-mparam.h: New file. - - * mpn/arm/v5/gcd_1.asm: Hack for undefined BMOD_1_TO_MOD_1_THRESHOLD. - * mpn/arm/v6t2/gcd_1.asm: Likewise. - -2012-04-30 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/v6/sqr_basecase.asm: New file. - -2012-04-30 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/comb_tables.c: New file. - * configure.in: Add it. - * gen-fac.c: Define table limits. - * gmp-impl.h: Declare tables. - (log_n_max): New static function. - * mpz/2fac_ui.c: Use shared tables. - * mpz/bin_uiui.c: Likewise. - * mpz/oddfac_1.c: Likewise. - * mpz/primorial_ui.c: Likewise. - - * mpz/mfac_uiui.c: New file. - * Makefile.am: Compile it. - * mpz/Makefile.am (libmpz_la_SOURCES): Add mpz_mfac_uiui.c - * gmp-h.in (mpz_mfac_uiui): Declare. - - * tests/mpz/t-mfac_uiui.c: New file. - * tests/mpz/Makefile.am: Run it. - - * doc/gmp.texi: Document mpz_mfac_uiui, collapsing with other factorial functions. - - * tests/mpz/t-lcm.c: Test zero too. - - * mpz/prodlimbs.c: Simplify threshold (should be tuned, not guessed). - -2012-04-29 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/aors_n.asm: Tune for more stable performance. - - * mpn/arm/aorslsh1_n.asm: New file. - - * mpn/arm/mod_34lsub1.asm: New file. - - * mpn/arm/v6t2/divrem_1.asm: New file. - -2012-04-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/thumb/add_n.asm: New file. - * mpn/thumb/sub_n.asm: New file. - * mpn/thumb/add_n.s: Remove broken code. - * mpn/thumb/sub_n.s: Likewise. - - * mpn/arm/v6/addmul_1.asm: Rewrite for stable speed, smaller size. - * mpn/arm/v6/mul_1.asm: Likewise. - -2012-04-27 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Search arm/v6t2 for arm7. - - * mpn/arm/v5/gcd_1.asm: New file. - * mpn/arm/v6t2/gcd_1.asm: New file. - - * mpn/arm/mode1o.asm: New file. - * mpn/arm/v6t2/mode1o.asm: New file. - - * mpn/arm/arm-defs.m4 (LEA): New define. - * mpn/arm/invert_limb.asm: Use LEA. - -2012-04-26 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/bin_uiui.c (bc_bin_uiui): Nail support. - * tests/cxx/t-ops2.cc: Test 0/3. - * oddfac_1.c: assume n > 26. - * tests/mpz/t-jac.c (mpn_jacobi_n): Enlarge tested sizes. - -2012-04-24 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/v6/addmul_2.asm: New file. - * mpn/arm/v6/mul_2.asm: New file. - -2012-04-23 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/aorsmul_1.asm: Tweak loop control for a 6% speed increase. - -2012-04-22 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Recognise ARM sub-architectures. - - * configfsf.guess: Update to current FSF version. - * configfsf.sub: Likewise. - - * mpn/arm/bdiv_dbm1c.asm: New file. - - * mpn/arm/v6/mul_1.asm: New file. - * mpn/arm/v6/addmul_1.asm: New file. - -2012-04-22 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gen-fac.c: Renamed, was gen-fac_ui.c . - * Makefile.am: Renamed gen-fac.c and fac_table.h . - * gmp-impl.h: #include "fac_table.h". - * mpz/oddfac_1.c: Use generated constant. - * mpz/bin_ui.c: Small optimisations. - - * tune/common.c (speed_mpz_bin_ui): New function. - * tune/speed.h: Declare it. - * tune/speed.c: Use it. - -2012-04-21 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/mul_1.asm: Cleanup. - * mpn/arm/copyi.asm: Cleanup, assume allocate-on-write cache. - * mpn/arm/copyd.asm: Likewise. - - * mpn/arm/add_n.asm: Delete. - * mpn/arm/sub_n.asm: Delete. - * mpn/arm/aors_n.asm: New file, made from old files. - - * mpn/arm/addmul_1.asm: Delete. - * mpn/arm/submul_1.asm: Delete. - * mpn/arm/aorsmul_1.asm: New file, made from old files. - - * mpn/arm/com.asm: New file. - * mpn/arm/lshift.asm: New file. - * mpn/arm/rshift.asm: New file. - -2012-04-20 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpq/io.c: New file. - * tests/mpq/Makefile.am: Run it. - - * mpz/clrbit.c: Simplify along the lines of setbit.c. - -2012-04-20 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/setbit.c: Simplify. - - * gmp-impl.h (LOG2C): Define. - * mpz/fac_ui.c (LOG2C): Remove. - * mpz/2fac_ui.c (LOG2C): Remove. - * mpz/oddfac_1.c (LOG2C): Remove. - * mpn/generic/binvert.c (LOG2C): Remove. - * mpn/generic/invertappr.c (LOG2C): Remove. - - * mpz/bin_uiui.c (mpz_goetgheluck_bin_uiui): Move declarations, - and assume that n and k are not small. - -2012-04-19 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/Makefile.am (check_PROGRAMS): Add t-remove. - - * tests/mpz/t-remove.c: Clear out mpz variables. - - * tests/mpz/t-cong.c (check_random): Use much larger numbers. - (check_data): Check congruences mod 0. - - * tests/mpz/t-divis.c: Test divisibility by zero. - - * tests/mpz/reuse.c: Test mpz_mod. - - * mpz/setbit.c: Remove dead code. Use CNST_LIMB. - * mpz/clrbit.c: Use CNST_LIMB. - -2012-04-19 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * primesieve.c: New file, with functions from mpz/oddfac_1.c . - * mpz/oddfac_1.c (bitwise_primesieve): Re-moved. - * Makefile.am (libgmp_la_SOURCES): Add primesieve.c . - * gmp-impl.h (gmp_primesieve): Declare. - - * mpz/bin_uiui.c (mpz_goetgheluck_bin_uiui): New, factor-based - implementation. - * tests/mpz/t-bin.c: Extend tests, to cover _goetgheluck. - - * mpz/primorial_ui.c: New file. - * mpz/Makefile.am (libmpz_la_SOURCES): Add mpz/primorial_ui.c - * Makefile.am (MPZ_OBJECTS): Add mpz/primorial_ui$U.lo - * gmp-h.in (mpz_primorial_ui): Declare. - * tests/mpz/t-primorial_ui.c: New test for the new function. - * tests/mpz/Makefile.am (check_PROGRAMS): Add t-primorial_ui. - * doc/gmp.texi: Short documentation for the new function. - -2012-04-17 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreisbr/aorsmul_1.asm: Fix some DOS64 issues. - * mpn/x86_64/coreisbr/mul_1.asm: Likewise. - - * mpn/x86_64/fastsse/lshiftc-movdqu2.asm: Adhere to DOS64 register - partitioning rules. - - * mpn/x86_64/fastsse/copyi-palignr.asm: Implement temporary workaround - to overlap issue. - -2012-04-17 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/bin_uiui.c: Support small limbs (fallback on bin_ui). - - * tests/mpn/toom-sqr-shared.h: Use a restricted range. - * tests/mpn/t-toom2-sqr.c: Specify correct range. - * tests/mpn/t-toom3-sqr.c: Likewise. - * tests/mpn/t-toom4-sqr.c: Likewise. - * tests/mpn/t-toom6-sqr.c: Likewise. - * tests/mpn/t-toom8-sqr.c: Likewise, but extended. - * tests/mpn/Makefile.am (check_PROGRAMS): Add t-toom?-sqr tests. - - * mpn/generic/sbpi1_bdiv_q.c: Move ASSERTs, to support qp = np. - -2012-04-17 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/copyd.asm: Rewrite. - * mpn/x86_64/copyi.asm: Rewrite. - -2012-04-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fastsse/lshift-movdqu2.asm: Add DOS entry/exit sequences. - * mpn/x86_64/fastsse/rshift-movdqu2.asm: Likewise. - * mpn/x86_64/fastsse/lshiftc-movdqu2.asm: Likewise. - - * mpn/x86_64/x86_64-defs.m4 (palignr): New macro. - (x86_opcode_regxmm, x86_opcode_regxmm_list): New, made from x86 mmx - counterparts. - (x86_lookup): Copy from x86/x86-defs.m4. - * mpn/x86_64/fastsse/copyd-palignr.asm: Use palignr macro. - * mpn/x86_64/fastsse/copyi-palignr.asm: Likewise. - -2012-04-15 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpz/t-bin.c: Add more tests on small values. - * mpz/bin_uiui.c (mpz_bdiv_bin_uiui): Smaller temporary areas. - -2012-04-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fastsse/copyd-palignr.asm: New file. - * mpn/x86_64/fastsse/copyi-palignr.asm: New file. - * mpn/x86_64/core2/copyd.asm: New file. - * mpn/x86_64/core2/copyi.asm: New file. - * mpn/x86_64/nano/copyd.asm: New file. - * mpn/x86_64/nano/copyi.asm: New file. - * mpn/x86_64/atom/copyd.asm: New file. - * mpn/x86_64/atom/copyi.asm: New file. - -2012-04-13 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/bin_uiui.c: Rewrite (some parts are Torbjorn's). - * gen-fac_ui.c: Generate new constants for bin_uiui. - - * mini-gmp/mini-gmp.h (mpz_fac_ui, mpz_bin_uiui): New definitions. - * mini-gmp/mini-gmp.c (mpz_fac_ui, mpz_bin_uiui): Trivial - implementation. - - * tests/mpz/t-fac_ui.c: Check Wilson's theorem on a big value. - - * mpn/generic/invert.c: Remove support for scratch == NULL. - * tune/speed.h (SPEED_ROUTINE_MPN_MUPI_DIV_QR): Allocate scratch - space for mpn_invert. - - * mpz/mul_i.h: Small clean-up. - - * tests/mpn/toom-sqr-shared.h: New file. - * tests/mpn/t-toom2-sqr.c: New file. - * tests/mpn/t-toom3-sqr.c: New file. - * tests/mpn/t-toom4-sqr.c: New file. - * tests/mpn/t-toom6-sqr.c: New file. - * tests/mpn/t-toom8-sqr.c: New file. - * tests/mpn/Makefile.am (EXTRA_DIST): Add toom-sqr-shared.h . - - * mpn/generic/toom62_mul.c: Use add_n, sub_n, when possible. - -2012-04-12 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fastsse/lshift-movdqu2.asm: New file. - * mpn/x86_64/fastsse/rshift-movdqu2.asm: New file. - * mpn/x86_64/fastsse/lshiftc-movdqu2.asm: New file. - * mpn/x86_64/coreisbr/lshift.asm: New file. - * mpn/x86_64/coreisbr/rshift.asm: New file. - * mpn/x86_64/coreisbr/lshiftc.asm: New file. - * mpn/x86_64/k10/lshift.asm: New file. - * mpn/x86_64/k10/rshift.asm: New file. - * mpn/x86_64/k10/lshiftc.asm: New file. - - * mpn/x86_64/fastsse/lshift.asm: Simplify to very basic form. - -2012-04-11 Niels Möller <nisse@lysator.liu.se> - - * Makefile.am (check-mini-gmp): Pass -I../.. in EXTRA_CFLAGS, to - locate gmp.h. - -2012-04-11 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mini-gmp/mini-gmp.h (mpz_root, mpz_rootrem): define (correctly). - * mini-gmp/mini-gmp.c (mpz_rootrem): Extended code from _root. - (mpz_root): Use mpz_rootrem. - (mpz_mul_ui): Correctly handle negative operands. - - * mini-gmp/tests/Makefile (CHECK_PROGRAMS): add t-root. - * mini-gmp/tests/t-root.c: New file. - * mini-gmp/tests/t-reuse.c: Enable root{,rem} tests. - -2012-04-10 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gen-fac_ui.c (mpz_root): Remove. - * mini-gmp/mini-gmp.c (mpz_root): New, support negative operands. - * mini-gmp/mini-gmp.h (mpz_root): define. - (mpz_out_str): Test also __STDIO_LOADED (for VMS). - * mpz/2fac_ui.c: Cosmetic change. - -2012-04-07 Torbjorn Granlund <tege@gmplib.org> - - * mpn/ia64/gcd_1.asm: Rewrite inner loop to use ctz table. - -2012-04-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/p7/popcount.asm: Properly extend arg n for mode32. - * mpn/powerpc64/p7/hamdist.asm: Likewise. - -2012-04-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/p7/popcount.asm: New file. - * mpn/powerpc64/p7/hamdist.asm: New file. - - * longlong.h (ARM count_leading_zeros): Enable for more arch versions. - - * mpn/x86_64/gcd_1.asm: Make room for DOS64 regparm shadow area. - * mpn/x86_64/core2/gcd_1.asm: Likewise. - -2012-04-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreisbr/aorrlsh_n.asm: Make it actually work for DOS64. - -2012-04-02 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/oddfac_1.c: Initialize size for ASSERT. - -2012-04-02 Torbjorn Granlund <tege@gmplib.org> - - * gmp-h.in (_GMP_H_HAVE_FILE): Test also __STDIO_LOADED (for VMS). - - * gmp-impl.h (doprnt_format_t, etc): Remove bogus __GMP_DECLSPECs. - -2012-03-30 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86_64/sqr_basecase.asm: Speed-up for small cases. - -2012-03-29 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64/gcd_1.asm: New file. - -2012-03-27 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Fix typo in coreisbr recognition. - -2012-03-26 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86_64/gcd_1.asm: Reduce latency. - * mpn/x86_64/mul_basecase.asm: Save one jump. - - * mpz/iset_ui.c: Don't realloc. - -2012-03-20 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mp_clz_tab.c: Add __clz_tab[128]. - * longlong.h (count_trailing_zeros): Use it in pure C variant. - -2012-03-20 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (x86 fat_path): Add many missing directories. - * mpn/x86/fat/fat.c (__gmpn_cpuvec_init): Rewrite. - (fake_cpuid_table): Add many more CPUs. - - * mpn/x86_64/fat/fat.c (__gmpn_cpuvec_init): Minor spacing cleanup. - -2012-03-19 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/x86-defs.m4 (CALL, PIC_WITH_EBX): New macros. - * mpn/x86/darwin.m4: Likewise. - * mpn/x86/k7/gcd_1.asm: Use new macros to support PIC. - * mpn/x86/p6/gcd_1.asm: Likewise. - -2012-03-19 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gen-fac_ui.c: Generate more constants (possible mini-mpz_root). - * mpz/oddfac_1.c: Improve ASSERTs. - (log_n_max): Use precomputed table. - - * longlong.h (_PROTO): Remove. - -2012-03-18 Torbjorn Granlund <tege@gmplib.org> - - * longlong.h (count_trailing_zeros): Write better pure C default - variant. - - * mpn/x86/p6/gcd_1.asm: Remove forgotten x86_64 reference. - - * mpn/x86/p6/gmp-mparam.h: Update, to get BMOD_1_TO_MOD_1_THRESHOLD - defined for fat binaries. - -2012-03-17 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/k7/gcd_1.asm: Rewrite. - * mpn/x86/p6/gcd_1.asm: New file. - - * mpn/x86_64/core2/gcd_1.asm: Conditionally suppress reduction calls. - * mpn/x86_64/gcd_1.asm: Rewrite. - -2012-03-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/gcd_1.c: Parameterise zerotab code. - - * mpn/x86_64/nano/gcd_1.asm: New file, grabbing core2 asm file. - - * mpn/x86_64/core2/gcd_1.asm: Speed up loop code, simplify non-loop - code. - -2012-03-13 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/core2/gcd_1.asm: Add hack to support fat builds. - - * mpn/x86_64/core2/gcd_1.asm: Shorten critical path. - -2012-03-12 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/core2/gcd_1.asm: New file. - * mpn/x86_64/k10/gcd_1.asm: New file, grabbing core2 asm file. - * mpn/x86_64/bd1/gcd_1.asm: Likewise. - - * mpn/x86_64/bobcat/sqr_basecase.asm: New file. - * mpn/x86_64/bobcat/mul_basecase.asm: Minor tuning. - -2012-03-10 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (fat_functions): Add addlsh1_n, addlsh2_n, addmul_2, - mullo_basecase, redc_1, redc_2, sublsh1_n. - - * gmp-impl.h (struct cpuvec_t): Add fields for new fat functions. - * gmp-impl.h: Adjust corresponding declarations. - - * mpn/generic/redc_2.c (mpn_addmul_2): Make static. - - * mpn/x86_64/fat/fat_entry.asm (FAT_INIT): Expand before fat_init to - reduce branch offsets. Pass plain 0,1,3... in %al since we'd else run - out of 8-bit range. - - * mpn/x86_64/fat/fat_entry.asm (fat_init): Scale passed index value. - * mpn/x86/fat/fat_entry.asm (fat_init): Use movzbl for expanding index - value. - - * mpn/x86_64/x86_64-defs.m4 (CPUVEC_FUNCS_LIST): Add new fat functions. - * mpn/x86/x86-defs.m4 (CPUVEC_FUNCS_LIST): Likewise. - * mpn/x86_64/fat/fat.c (__gmpn_cpuvec): Likewise. - * mpn/x86/fat/fat.c (__gmpn_cpuvec): Likewise. - - * mpn/x86_64/fat/redc_2.c: New file. - * mpn/x86/fat/mullo_basecase.c: New file. - * mpn/x86/fat/redc_1.c: New file. - * mpn/x86/fat/redc_2.c: New file. - - * tests/mpn/t-fat.c: Test mullo_basecase. - -2012-03-08 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreisbr/addmul_2.asm: Port to DOS64. - -2012-02-29 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h: Ignore partial C++11 support in g++-4.6. - * tests/cxx/t-cxx11.cc: Likewise. - - * gmpxx.h (operator""): New functions. - * tests/cxx/t-cxx11.cc: Test the above. - * doc/gmp.texi: Document the above. - -2012-03-08 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * acinclude.m4 (GMP_H_ANSI): Remove. - * configure.in: Don't use GMP_H_ANSI. - * gmp-h.in (__GMP_HAVE_PROTOTYPES): Remove. - -2012-03-08 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fat/fat.c (fake_cpuid_table): Recognise "bulldozer". - (__gmpn_cpuvec_init): Overhaul to match configure.in. - - * configure.in: Adjust bulldozer path_64. - -2012-03-07 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (x86_64 fat_path): List recently added AMD directories. - - * mpn/x86_64/bobcat/copyi.asm: New file. - * mpn/x86_64/bobcat/copyd.asm: New file. - - * config.guess: Handle AMD 11h correctly. - - * tune/tuneup.c (tune_redc): Better handle situation where redc_2 is - never faster. - -2012-03-06 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/bobcat/mul_basecase.asm: New file. - -2012-03-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/bobcat/mul_1.asm: New file. - * mpn/x86_64/bobcat/aorsmul_1.asm: New file. - -2012-03-04 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/invert.c: Remove mod 0 branch. - * tests/mpz/t-invert.c: Avoid testing mod 0. - * doc/gmp.texi (mpz_invert): Specify mod 0 is not handled. - - * gmp-h.in (__gmp_signed, __gmp_const): Remove. - (__GMP_HAVE_TOKEN_PASTE, __GMP_HAVE_CONST): Remove. - * gmp-impl.h: Strip __GMP_HAVE_TOKEN_PASTE and __GMP_HAVE_CONST. - * demos/expr/: Strip __gmp_const usage from all files. - - * tests/mpz/t-powm.c (allsizes_seen): Require unsigned*. - -2012-03-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/k8/gmp-mparam.h: New file. - * mpn/x86_64/k10/gmp-mparam.h: New file. - - * mpn/generic/hgcd_step.c (mpn_hgcd_step): Remove unused variables. - * mpn/generic/hgcd_jacobi.c (hgcd_jacobi_step): Likewise. - * mpn/generic/hgcd_reduce.c (hgcd_matrix_apply): Likewise. - * mpn/generic/mu_bdiv_qr.c: Likewise. - * mpz/jacobi.c: Likewise. - * mpz/mod.c: Likewise. - - * mpn/generic/toom42_mul.c: Remove unread variable. - * mpn/generic/set_str.c (mpn_set_str_compute_powtab): Likewise. - * mpn/generic/rootrem.c (mpn_rootrem_internal): Likewise. - * tests/refmpn.c (refmpn_mul): Likewise. - * mpn/generic/hgcd_appr.c (mpn_hgcd_appr): Propagate mask computation - into ASSERT, remove variable. - - * gmp-h.in (__GMP_PROTO): Remove. - * Strip __GMP_PROTO usage from all files. - * Strip prototype parameter names from all files. - -2012-03-01 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * doc/gmp.texi (mpz_invert): Correctly document result range. - * tests/mpz/t-invert.c: Small range correction. - -2012-03-01 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/mullo_basecase.asm: New file. - -2012-02-29 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (std::numeric_limits): New partial specialization. - -2012-02-29 Niels Möller <nisse@lysator.liu.se> - - * mini-gmp/tests/t-reuse.c: New test case, based on - tests/mpz/reuse.c. - - * mini-gmp/mini-gmp.c (mpz_cdiv_r_ui): New function. - (mpz_fdiv_r_ui): New function. - (mpz_tdiv_r_ui): New function. - (mpz_powm_ui): New function. - (mpz_pow_ui): New function. - (mpz_ui_pow_ui): Use mpz_pow_ui. - (mpz_gcdext): Fixed input/output overlap, for the case of one - input being zero. - (mpz_sqrtrem): Fix for the case r NULL, U zero. - - * Makefile.am (check-mini-gmp): Use $(MAKE). - (clean-mini-gmp): New target. - (clean-local, distclean-local): New automake targets. Depend on - clean-mini-gmp. - -2012-02-28 Niels Möller <nisse@lysator.liu.se> - - * Makefile.am (check-mini-gmp): New target, for running the - mini-gmp testsuite. - - * mini-gmp/tests/Makefile (srcdir, MINI_GMP_DIR): New make - variables. These can be overridden when using a separate build - directory. - (EXTRA_CFLAGS): Renamed, was OPTFLAGS. - - * mini-gmp/mini-gmp.c (mpz_abs_add): Don't cache limb pointers - over MPZ_REALLOC, since that breaks in-place operation. Bug - spotted by Torbjörn. - (mpz_and, mpz_ior, mpz_xor): Likewise. - (mpz_cmp): Fixed comparison of negative numbers. - -2012-02-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fastsse/lshiftc.asm: New file. - * mpn/x86_64/fastsse/com.asm: New file. - - * mpn/x86_64/bd1/popcount.asm: New file. - * mpn/x86_64/bd1/hamdist.asm: New file. - - * mpn/x86_64/fastsse/copyi.asm: New file. - * mpn/x86_64/fastsse/copyd.asm: New file. - * mpn/x86_64/fastsse/lshift.asm: New file. - -2012-02-26 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreisbr/addmul_2.asm: New file. - - * tests/devel/try.c (param_init): Don't require addmul_N to handle - overlap. - - * mpn/x86_64/bd1/mul_1.asm: New file. - * mpn/x86_64/bd1/aorsmul_1.asm: New file. - -2012-02-26 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/2fac_ui.c: New file: implements n!!. - * Makefile.am (MPZ_OBJECTS): Add mpz/2fac_ui. - * gmp-h.in: Declare mpz_2fac_ui. - * tests/mpz/t-fac.c: Test mpz_2fac_ui. - * doc/gmp.texi: Document mpz_2fac_ui. - * mpz/Makefile.am (libmpz_la_SOURCES): Add 2fac_ui.c. - - * mpz/oddfac_1.c (mpz_oddfac_1): Use umul_ppmm when size = 2. - -2012-02-26 Niels Möller <nisse@lysator.liu.se> - - * mini-gmp: New subdirectory. For use by GMP bootstrap, and as a - fallback for applications needing bignums but not high - performance. - - * bootstrap.c: New file, replacing dumbmp.c. Uses mini-gmp for the - standard GMP functions, and then defines the few functions - particular for the bootstrap. - * dumbmp.c: Deleted file. A few functions moved to bootstrap.c. - - * gen-bases.c: Include bootstrap.c, not dumbmp.c. - * gen-fac_ui.c: Likewise. - * gen-trialdivtab.c: Likewise. - * gen-fib.c: Include bootstrap.c, not dumbmp.c. Use assert rather - than ASSERT. Deleted casts of xmalloc return value. - * gen-psqr.c: Likewise. - (COLLAPSE_ELEMENT): Use memmove rather than mem_copyi. - - * Makefile.am: Replaced all uses of dumbmp.c by bootstrap.c. - (EXTRA_DIST, dist-hook): Arrange for distribution of the mini-gmp - files. - -2012-02-24 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/invert.c: Use ABSIZ, MPZ_EQUAL_1_P. - * mpz/abs.c: Collapse MPZ_REALLOC(x,.) and PTR(x). - * mpz/aors_ui.h: Likewise. - * mpz/com.c: Likewise. - * mpz/neg.c: Likewise. - - * mpz/invert.c: Reply "no-inverse" when modulus is zero. - * tests/mpz/t-invert.c: Add more checks. - * doc/gmp.texi (mpz_invert): Inverse can not be zero. - -2012-02-24 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpn/logic.c: New file. - * tests/mpn/Makefile.am (check_PROGRAMS): Add logic. - - * tests/mpz/t-invert.c: New file. - * tests/mpz/Makefile.am (check_PROGRAMS): Add t-invert. - -2012-02-24 Marc Glisse <marc.glisse@inria.fr> - - * tests/mpq/t-cmp.c: Move NUM and DEN macros... - * tests/mpq/t-cmp_ui.c: Likewise... - * gmp-impl.h: ... to here. - - * mpq/abs.c: Use NUM, DEN, SIZ, ALLOC, PTR, MPZ_REALLOC. - * mpq/aors.c: Likewise. - * mpq/canonicalize.c: Likewise. - * mpq/clear.c: Likewise. - * mpq/cmp.c: Likewise. - * mpq/cmp_si.c: Likewise. - * mpq/cmp_ui.c: Likewise. - * mpq/div.c: Likewise. - * mpq/equal.c: Likewise. - * mpq/get_d.c: Likewise. - * mpq/get_den.c: Likewise. - * mpq/get_num.c: Likewise. - * mpq/get_str.c: Likewise. - * mpq/init.c: Likewise. - * mpq/inp_str.c: Likewise. - * mpq/inv.c: Likewise. - * mpq/md_2exp.c: Likewise. - * mpq/mul.c: Likewise. - * mpq/neg.c: Likewise. - * mpq/set.c: Likewise. - * mpq/set_d.c: Likewise. - * mpq/set_den.c: Likewise. - * mpq/set_f.c: Likewise. - * mpq/set_num.c: Likewise. - * mpq/set_si.c: Likewise. - * mpq/set_str.c: Likewise. - * mpq/set_ui.c: Likewise. - * mpq/set_z.c: Likewise. - * mpq/swap.c: Likewise. - - * tests/mpq/t-inv.c: New test file. - * tests/mpq/Makefile.am: Add the above. - - * gmpxx.h (__gmp_set_expr): Use mpq_set_z. - - * mpq/md_2exp.c: Collapse MPZ_REALLOC(x,.) and PTR(x). - * mpq/set_d.c: Likewise. - * mpq/set_f.c: Likewise. - -2012-02-24 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86_64/core2/aorsmul_1.asm: Added mpn_addmul_1c and - mpn_submul_1c entry points. - -2012-02-23 Marc Glisse <marc.glisse@inria.fr> - - * mpz/abs.c: Use ALLOC, SIZ, ABSIZ, PTR, MPZ_REALLOC. - * mpz/aors_ui.h: Likewise. - * mpz/array_init.c: Likewise. - * mpz/cdiv_q.c: Likewise. - * mpz/cdiv_qr.c: Likewise. - * mpz/cdiv_r.c: Likewise. - * mpz/clear.c: Likewise. - * mpz/clrbit.c: Likewise. - * mpz/cmp_si.c: Likewise. - * mpz/com.c: Likewise. - * mpz/fdiv_q.c: Likewise. - * mpz/fdiv_qr.c: Likewise. - * mpz/fdiv_r.c: Likewise. - * mpz/get_si.c: Likewise. - * mpz/get_str.c: Likewise. - * mpz/init.c: Likewise. - * mpz/inp_str.c: Likewise. - * mpz/iset.c: Likewise. - * mpz/iset_d.c: Likewise. - * mpz/iset_si.c: Likewise. - * mpz/iset_str.c: Likewise. - * mpz/iset_ui.c: Likewise. - * mpz/mod.c: Likewise. - * mpz/neg.c: Likewise. - * mpz/out_str.c: Likewise. - * mpz/random2.c: Likewise. - * mpz/set_si.c: Likewise. - * mpz/set_str.c: Likewise. - * mpz/set_ui.c: Likewise. - * mpz/setbit.c: Likewise. - * mpz/sqrt.c: Likewise. - * mpz/swap.c: Likewise. - * mpz/tdiv_r_2exp.c: Likewise. - - * tests/cxx/t-ops.cc: Test mpz_abs reallocation. - -2012-02-23 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/core2/rsh1aors_n.asm: Complete rewrite. - * mpn/x86_64/coreisbr/rsh1aors_n.asm: Move old core2 code here. - - * mpn/x86_64/redc_1.asm: Make it work for DOS64 (broken in last edit). - -2012-02-20 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/toom_interpolate_8pts.c: Compute carry iif non-trivial. - - * mpz/gcdext.c: Adapt to relaxed mpn_gcdext's input requirements. - - * mpz/and.c: Use mpn_ logic everywhere. Reduce branches. - * mpz/ior.c: Likewise. - * mpz/xor.c: Likewise. - -2012-02-20 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreisbr/mul_1.asm: New file. - - * mpn/x86_64/coreisbr/aorsmul_1.asm: New file. - - * mpn/x86_64/mod_34lsub1.asm: Avoid ",pt" branch hint since many - assemblers don't support it. - -2012-02-19 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/redc_1.c: Put back mpn_add_n call, return its carry. - Reintroduce previously removed RP argument. - * mpn/x86_64/redc_1.asm: Likewise. - - * mpn/generic/redc_2.c: Remove mpn_sub_n call, return carry from - mpn_add_n call. - - * gmp-impl.h (mpn_redc_1, mpn_redc_2): Now return an mp_limb_t. - - * tune/speed.h (SPEED_ROUTINE_REDC_1): Adopt to pass RP argument. - - * tests/refmpn.c (refmpn_redc_1): Adopt to new redc_1 interface. - - * mpn/generic/powm.c (MPN_REDC_1): Pass rp parameter to mpn_redc_1. - * mpn/generic/powm_sec.c (MPN_REDC_1_SEC): Likewise. - * mpn/generic/powm.c (MPN_REDC_2): New macro, use for mpn_redc_2. - -2012-02-18 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (std::common_type): New partial specialization in C++11. - * tests/cxx/t-cxx11.cc: Test it. - - * gmpxx.h: Don't declare long double functions that are never defined. - - * gmpxx.h (__gmp_binary_expr): Let things happen in place: q=q*q+z*z - becomes tmp=z*z, q=q*q, q+=tmp. - * tests/cxx/t-binary.cc: More variable reuse tests. - -2012-02-17 Marc Glisse <marc.glisse@inria.fr> - - * gmp-h.in (__GMP_WITHIN_GMP): Test with #ifdef instead of #if, for - the benefit of applications using gcc -Wundef. - (__GMP_WITHIN_GMPXX): Likewise. - -2012-02-16 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__gmp_binary_expr): Let things happen in place: e=a*b-c*d - becomes tmp=c*d, e=a*b, e-=tmp. - * tests/cxx/t-binary.cc: More variable reuse tests. - -2012-02-15 Niels Möller <nisse@lysator.liu.se> - - * tune/tuneup.c (mul_toom43_to_toom54_threshold): New global. - (tune_mul): Added tuning of MUL_TOOM43_TO_TOOM54_THRESHOLD. - * tune/speed.h (SPEED_ROUTINE_MPN_TOOM43_FOR_TOOM54_MUL): New macro. - (SPEED_ROUTINE_MPN_TOOM54_FOR_TOOM43_MUL): New macro. - Prototypes for corresponding functions. - * tune/common.c (speed_mpn_toom43_for_toom54_mul): New function. - (speed_mpn_toom54_for_toom43_mul): New function. - - * gmp-impl.h (MPN_TOOM43_MUL_MINSIZE): Corrected constant. - (MPN_TOOM53_MUL_MINSIZE): Likewise. - (MPN_TOOM54_MUL_MINSIZE): New constant. - (mpn_toom54_mul): Added prototype. - (MUL_TOOM43_TO_TOOM54_THRESHOLD): New threshold. Default value and - tuning setup. - -2012-02-14 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/toom54_mul.c: New file, originally contributed by - Marco. - * gmp-impl.h (mpn_toom54_mul_itch): New function. - * configure.in (gmp_mpn_functions): Added toom54_mul. - * tests/mpn/t-toom54.c: New file. - * tests/mpn/Makefile.am (check_PROGRAMS): Added t-toom54. - -2012-02-13 Niels Möller <nisse@lysator.liu.se> - - * configure.in: Display summary of options. - -2012-02-11 Torbjorn Granlund <tege@gmplib.org> - - * tests/tests.h (TESTS_REPS): Print any non-standard repetitions. - -2012-02-11 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * doc/gmp.texi (Factorial): Shortly describe current algorithm. - (Multiplication Algorithms): Add Toom[68]'n'half, (too) shortly. - * gmp-impl.h (ASSERT_ALWAYS): Consider failures UNLIKELY. - -2012-02-10 Niels Möller <nisse@lysator.liu.se> - - * tests/mpz/t-gcd.c (gcdext_valid_p): Enforce slightly stricter - bound for cofactors. - - * mpn/generic/gcdext_lehmer.c (mpn_gcdext_hook): Corrected - handling of unlikely (maybe impossible?) case u1n < un. Related to - the 2012-02-05 bugfix of gcdext_subdiv_step.c in the gmp-5.0 repo. - -2012-02-09 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-impl.h (mpn_toom3*_itch): Support any recursion depth. - * tests/refmpn.c (refmpn_mul): Restore tight allocations. - - * mpz/oddfac_1.c (mpz_oddfac_1): Get ready for n!! - * gmp-impl.h (mpz_oddfac_1): Update signature. - * mpz/fac_ui.c (mpz_fac_ui): Update call to mpz_oddfac_1. - -2012-02-09 Marc Glisse <marc.glisse@inria.fr> - - * gmp-impl.h (ABS_CAST): New macro. - * mpf/cmp_si.c: Use ABS_CAST. - * mpf/get_si.c: Use ABS_CAST. - * mpf/iset_si.c: Use ABS_CAST. - * mpf/set_si.c: Use ABS_CAST. - * mpq/set_si.c: Use ABS_CAST. - * mpz/cmp_si.c: Use ABS_CAST. - * mpz/get_si.c: Use ABS_CAST. - * mpz/iset_si.c: Use ABS_CAST. - * mpz/mul_i.h: Use ABS_CAST. - * mpz/set_si.c: Use ABS_CAST. - -2012-02-08 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc32/divrem_2.asm: Fix off-by-one condition in invert_limb - code. - -2012-02-08 Niels Möller <nisse@lysator.liu.se> - - * doc/gmp.texi (mpz_gcdext): Clarified corner cases in cofactor - canonicalization. - -2012-02-07 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/gcdext.c (mpn_gcdext): Fixed assert, related to the - special case A = (2k+1) G, B = 2 G. Fix copied from gmp-5.0 repo. - -2012-02-06 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd_matrix.c (hgcd_matrix_update_q): Fixed carry - handling bug. Fix copied from gmp-5.0 repo, where the function is - found in hgcd.c. - - * tests/mpz/t-gcd.c (main): Use mpz_rrandomb for test operands, - not mpz_urandomb. Change copied from gmp-5.0 repo. - * tests/mpn/t-hgcd.c (main): Likewise. - -2012-02-04 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/refmpn.c (refmpn_mul): More conservative allocations. - -2012-02-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/bd1/gmp-mparam.h: New file. - - * longlong.h (udiv_qrnnd from sdiv_qrnnd): Declare udiv_w_sdiv. - - * mpn/generic/udiv_w_sdiv.c: Use c89 function header. - -2012-02-03 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/fac_ui.c: mpz_oddfac_1 removed, with many related functions. - * mpz/oddfac_1.c: New file, mpz_oddfac_1 implementation. - * gmp-impl.h: mpz_oddfac_1 declaration. - * Makefile.am (MPZ_OBJECTS): add mpz/oddfac_1$U.lo . - * mpz/Makefile.am (libmpz_la_SOURCES): add oddfac_1.c . - * tune/Makefile.am (fac_ui.c): include mpz/oddfac_1.c . - -2012-02-02 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/toom_interpolate_16pts.c: Correct an unlikely 32-bit bug. - -2012-02-02 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/toom63_mul.c: Allow s+t==n by adjusting an ASSERT. - * mpn/generic/toom_interpolate_8pts.c: Perform final incr iff s+t!=n. - - * tests/mpn/t-toom6h.c (MIN_BN): Make more consistent with ASSERT in - tested function. - -2012-02-01 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpn/t-mul.c: New file. - * tests/mpn/Makefile.am: Compile it. - -2012-02-01 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h: Remove check for g++ older than 2.91. - -2012-02-01 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/mul.c: Added diagram on where toom functions can be - called. - -2012-02-01 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__gmp_unary_expr): Make the constructor explicit. - (__gmp_expr(__gmp_expr&&)): New move constructors. - (__gmp_expr::operator=(__gmp_expr&&)): New move assignments. - (swap): Mark as noexcept. - (__GMPXX_USE_CXX11): New macro. - (__GMPXX_NOEXCEPT): New macro. - * tests/cxx/t-cxx11.cc: New file. - * tests/cxx/Makefile.am: Added t-cxx11. - -2012-01-31 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/powm_sec.c (SQR_BASECASE_LIM): New name for - SQR_BASECASE_MAX. - (SQR_BASECASE_LIM, fat variant): Define to read __gmpn_cpuvec. - (SQR_BASECASE_LIM, native variant): Define to SQR_TOOM2_THRESHOLD - straight, without arithmetic. - (mpn_local_sqr): Use BELOW_THRESHOLD as per Marco's suggestion. - -2012-01-30 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/t-powm.c: Ensure all sizes are seen. - -2012-01-30 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__gmp_binary_expr): Let things happen in place: d=a+b+c - when d != c. - * tests/cxx/t-binary.cc: Test variable reuse: c=a+b+c. - -2012-01-28 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h: Don't compute -LONG_MIN. - - * doc/gmp.texi (gmp_randclass::get_z_bits): Use mp_bitcnt_t. - * gmpxx.h: Replace unsigned long with mp_bitcnt_t. - -2012-01-27 Torbjorn Granlund <tege@gmplib.org> - - * Upgrade to libtool 2.4.2. - -2012-01-26 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpz/t-fac_ui.c: Increase default test cases. - - * mpz/prodlimbs.c: New file, mpz_prodlimbs implementation. - * gmp-impl.h: mpz_prodlimbs declaration. - * Makefile.am (MPZ_OBJECTS): add mpz/prodlimbs$U.lo . - * mpz/Makefile.am (libmpz_la_SOURCES): add prodlimbs.c . - (fac_ui.h): remove target (moved up one directory). - * mpz/fac_ui.c: mpz_prodlimbs removed, micro-optimisations. - -2012-01-25 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c: Remove unused tuneup variables. - -2012-01-20 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/fac_ui.c: Reduce branches in basecases. - -2012-01-18 Marc Glisse <marc.glisse@inria.fr> - - * doc/gmp.texi (mpf_class::mpf_class): Use mp_bitcnt_t. - -2012-01-17 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Add ultrasparc T4 support. - - * demos/isprime.c (main): Run 25 millerrabin tests. - -2012-01-16 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/fac_ui.c (SIEVE_SEED): Define value for small limb size. - (mpz_oddswing_1): Reduce the number of divisions. - (mpz_oddfac_1): Reduce memory usage. - * mpn/minithres/gmp-mparam.h: Correct minimum for FAC_DSC_. - * tune/tuneup.c (tune_fac_ui): Likewise. - -2012-01-15 Niels Möller <nisse@lysator.liu.se> - - * mpz/scan0.c (mpz_scan0): Use ~(mp_bitcnt_t) 0, rather than - ULONG_MAX, when returning "infinity". - * mpz/scan1.c (mpz_scan1): Likewise. - -2012-01-12 Torbjorn Granlund <tege@gmplib.org> - - * tests/t-popc.c: Test longer bit strings. - -2012-01-12 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/divexact.c: Tight realloc, delayed if variables are reused. - * mpz/lcm.c: Smaller temp space, avoid goto. - * gmp-impl.h (popc_limb): avoid double & (for 8-bits limb). - -2012-01-10 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/minithres/gmp-mparam.h: New FAC_ODD_ and FAC_DSC_ thresholds. - * tune/tuneup.c (tune_fac_ui): Correct minimum for FAC_DSC_. - -2012-01-07 Torbjorn Granlund <tege@gmplib.org> - - * mpz/mul_2exp.c: Rewrite. - * mpz/tdiv_q_2exp.c: Rewrite. - -2012-01-05 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gen-fac_ui.c: Remove currently unused constants; add new odd - double factorial table. - * mpz/fac_ui.c (RECURSIVE_PROD_THRESHOLD): Increase default. - (mpz_oddfac_1): New function: a merge of _bc_odd and _dsc_odd. - (mpz_prodlimbs): More in-place computations. - - * tune/tuneup.c (tune_fac_ui): min_is_always for FAC_ODD_. - -2012-01-02 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tune/tuneup.c (tune_fac_ui): Compute FAC_DSC before FAC_ODD. - -2011-12-31 Torbjorn Granlund <tege@gmplib.org> - - * Makefile.am (fac_ui.h): Put file in top-level dir, not in mpz. - -2011-12-31 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tune/Makefile.am (fac_ui.c): New target. - (nodist_tuneup_SOURCES,CLEANFILES): Add fac_ui.c. - * tune/tuneup.c (mpz_fac_ui_tune): Declare prototype. - (fac_odd_threshold,fac_dsc_threshold): New global variables. - (speed_mpz_fac_ui_tune,tune_fac_ui): New functions. - (all): Call tune_fac_ui. - * gmp-impl.h (FAC_ODD_THRESHOLD,FAC_DSC_THRESHOLD): - New thresholds: default values, and setup for tuning. - (FAC_DSC_THRESHOLD_LIMIT): Define (when tuning). - * mpz/fac_ui.c (FAC_ODD_THRESHOLD,FAC_DSC_THRESHOLD): - Default values removed. - -2011-12-30 Torbjorn Granlund <tege@gmplib.org> - - * mpz/hamdist.c: Fix typo in a return statement. - - * mpn/generic/powm_sec.c (SQR_BASECASE_MAX): Set safely from - SQR_TOOM2_THRESHOLD. - -2011-12-17 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/t-perfpow.c: Decrease default # of tests. - -2011-12-16 Torbjorn Granlund <tege@gmplib.org> - - * tests/refmpn.c (AORS_1): Fix typo in variable type. - -2011-12-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/sbpi1_bdiv_q.c: Delay quotient limb stores in order to - allow quotient and dividend to completely overlap. - * mpn/generic/sbpi1_bdiv_qr.c: Likewise. - -2011-12-10 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/fac_ui.c: fac_bc_ui inlined in fac_ui. - -2011-12-08 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/powm_sec.c: Handle fat binaries better. - - * mpz/fac_ui.c (mpz_bc_fac_1): Fix typo in allocation size. - - * mpn/x86/fat/com.c: New file. - - * mpn/x86_64/pentium4/aors_n.asm: Make it actually work for DOS64. - * mpn/x86_64/pentium4/rsh1aors_n.asm: Conditionalise jump on DOS64 - to avoid overhead for standard ABIs. - - * mpn/x86_64/gcd_1.asm: Support DOS64. - -2011-12-07 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Fix typo making HAVE_NATIVE_mpn_X fail for fat - functions. - - * mpn/x86_64/fat/fat.c (__gmpn_cpuvec_init): Add a missing break. - -2011-12-07 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gen-fac_ui.c: Generate two more tables: odd factorial, swing. - - * mpz/fac_ui.c: Rewrite. - -2011-12-06 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd.c (mpn_hgcd): Use hgcd_reduce for first - recursive call. - -2011-12-06 Torbjorn Granlund <tege@gmplib.org> - - * tune/mod_1_1-1.c: Redefine the mpn_ functions, not __gmpn_ (for the - benefit of fat builds). - * tune/mod_1_1-2.c: Likewise. - -2011-12-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/fat/lshiftc.c: New file. - * mpn/x86/fat/mod_1_1.c: New file. - * mpn/x86/fat/mod_1_2.c: New file. - * mpn/x86/fat/mod_1_4.c: New file. - - * mpn/x86/fat/diveby3.c: Remove no longer fat function. - * mpn/x86_64/fat/diveby3.c: Likewise. - - * mpn/x86_64/fat/gcd_1.c: Remove since always provided as asm. - * mpn/x86_64/fat/mode1o.c: Likewise. - - * configure.in (fat_functions): Update to more relevant function set. - Add special handling for mod_1_N_cps functions. - * gmp-impl.h (struct cpuvec_t) : Corresponding changes. Also add - vrious declarations for new functions. - * mpn/x86/x86-defs.m4 (CPUVEC_FUNCS_LIST): Corresponding changes. - * mpn/x86_64/x86_64-defs.m4 (CPUVEC_FUNCS_LIST): Corresponding changes. - * mpn/x86/fat/fat.c (__gmpn_cpuvec): Corresponding changes. - * mpn/x86_64/fat/fat.c (__gmpn_cpuvec): Corresponding changes. - - * mpn/x86_64: Port most remaining x86_64 files to DOS64. - - * mpn/x86_64/coreisbr/aors_n.asm: Add forgotten DOS64_EXIT. - - * mpn/x86_64/x86_64-defs.m4 (LEA): Handle non-PIC code. - * mpn/x86_64/darwin.m4 (LEA): Likewise. - -2011-12-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fat/fat.c (MAKE_FMS): Rewrite to handle modern CPUs. - * mpn/x86/fat/fat.c (MAKE_FMS): Likewise. - - * mpn/x86_64/darwin.m4 (PROTECT): Define to potentially useful value. - -2011-12-02 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/invert_limb_table.asm: Use PROTECT. - * mpn/x86_64/invert_limb.asm: Likewise. - - * mpn/x86_64/darwin.m4 (PROTECT, IFELF): New defines. - * mpn/x86_64/dos64.m4 (PROTECT, IFELF): New defines. - * mpn/x86_64/x86_64-defs.m4 (PROTECT, IFELF): New defines. - -2011-12-01 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fat/fat.c: Copy fake cpuid code from x86/fat/fat.c. - - * mpn/x86_64 (STD64, IFSTD): New names for ELF64, IFELF (since these - denote all standard calling conventions). - - * mpn/x86_64: Add DOS64 ABI support to more files. - - * mpn/x86_64/mod_1_1.asm: Finish DOS64 support. - * mpn/x86_64/mod_1_2.asm: Likewise. - * mpn/x86_64/mod_1_4.asm: Likewise. - - * configure.in: Add GMP_NONSTD_ABI also for fat builds. - - * mpn/x86_64/fat/fat_entry.asm: Rewrite to support DOS64. - - * mpn/x86_64/dos64.m4 (IFDOS, IFSTD): New defines. - * mpn/x86_64/x86_64-defs (IFDOS, IFSTD): New defines. - - * mpn/x86_64/dive_1.asm: Add DOS64 ABI support. - * mpn/x86_64/mode1o.asm: Likewise. - - * mpn/x86_64/mod_34lsub1.asm: Enable for DOS64. - - * mpn/x86_64/invert_limb.asm: Wrap .protected decl. - - * gmp-impl.h (DECL_divexact_1): Fix typo in return type. - - * mpn/x86_64/dos64.m4 (LEA): New define. - (PIC): Define. - -2011-11-29 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64: Add DOS64 ABI support to most files. - -2011-11-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/mul_basecase.asm: Support ABI DOS64. - * mpn/x86_64/sqr_basecase.asm: Support ABI DOS64. - * mpn/x86_64/aorsmul_1.asm: Support ABI DOS64. - * mpn/x86_64/mul_1.asm: Support ABI DOS64. - - * mpn/x86_64/x86_64-defs.m4 (DOS64_ENTRY, DOS64_EXIT): New, empty defs. - - * mpn/x86_64/dos64.m4: New file. - - * mpn/asm-defs.m4 (ABI_SUPPORT): New dummy macro. - - * configure.in (64-bit mingw/cygwin): Define HOST_DOS64,GMP_NONSTD_ABI. - No longer clear out path_64. - (mpn code selection loop): Handle GMP_NONSTD_ABI. - - * mpn/generic/udiv_w_sdiv.c: Use CNST_LIMB for some constants. - -2011-11-25 Torbjorn Granlund <tege@gmplib.org> - - * x86/*: Many new gmp-mparam.h file for 64-bit CPUs in 32-bit mode. - - * configure.in: Overhaul x86/x86_64 support, merging three case - statements into one. - -2011-11-24 Torbjorn Granlund <tege@gmplib.org> - - * doc/gmp.texi (Formatted Output Strings): Clarify rules for mpf_t - precision. - - * mpn/powerpc32/p7/gmp-mparam.h: New file. - - * tune/tuneup.c (tune_mu_div, tune_mu_bdiv): Up min_size to karatsuba's - threshold. - -2011-11-22 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/p6/aorsmul_1.asm: New file. - - * configure.in: Don't fail fat builds under 64-bit DOS. - - * mpn/powerpc64/mode64/aors_n.asm: Align loop for slightly better - power5 performance. - -2011-11-21 Torbjorn Granlund <tege@gmplib.org> - - * gmp-h.in (__GNU_MP_RELEASE): Renamed from typo name. - -2011-11-20 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Split x86 CPUs into more subtypes for more accurate - passing of gcc flags. - - * mpn/powerpc32/p3-p7/aors_n.asm: New file. - - * configure.in: Pass -m32 for powerpc64 with abi=32, using via _maybe - mechanism. - - * configure.in: Support powerpc32/p3-p7 directory for affected CPUs. - -2011-11-17 Torbjorn Granlund <tege@gmplib.org> - - * tune/speed.c (routine): Add mpn_tabselect. - * tune/common.c (speed_mpn_tabselect): New function. - * tune/speed.h (SPEED_ROUTINE_MPN_COPY_CALL): New macro, made from - old SPEED_ROUTINE_MPN_COPY. - (SPEED_ROUTINE_MPN_COPY): Just invoke SPEED_ROUTINE_MPN_COPY_CALL. - (SPEED_ROUTINE_MPN_TABSELECT): New macro. - -2011-11-17 Niels Möller <nisse@lysator.liu.se> - - * tune/tuneup.c (tune_hgcd_appr): Increase stop_since_change. - -2011-11-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc32/tabselect.asm: New file. - - * mpn/powerpc64/mode64/aorscnd_n.asm: New file. - -2011-11-15 Niels Möller <nisse@lysator.liu.se> - - * tune/speed.h (speed_mpn_hgcd_appr_lehmer): New prototype. - (mpn_hgcd_lehmer_itch): Likewise. - (mpn_hgcd_appr_lehmer): Likewise. - (mpn_hgcd_appr_lehmer_itch): Likewise. - (MPN_HGCD_LEHMER_ITCH): Deleted macro. - - * tune/speed.c (routine): Added mpn_hgcd_appr_lehmer. - - * tune/common.c (speed_mpn_hgcd_lehmer): Use mpn_hgcd_lehmer_itch - rather than similarly named macro. - (speed_mpn_hgcd_appr_lehmer): New function. - - * tune/Makefile.am (libspeed_la_SOURCES): Added - hgcd_appr_lehmer.c. - - * tune/hgcd_appr_lehmer.c: New file. - - * tune/tuneup.c (tune_hgcd_appr): Increased min_size to 50; some - machines got small thresholds which appear to be bogus. - -2011-11-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/powm_sec.c (mpn_local_sqr): Remove forgotten TMP_* calls. - (redcify): Likewise. - (mpn_powm_sec): Likewise. - - * mpn/generic/powm_sec.c (mpn_powm_sec): Rework scratch usage - (mpn_powm_sec_itch): Rewrite. - - * mpn/generic/powm_sec.c (mpn_powm_sec): Use mpn_tabselect also in - initialisation. - - * configure.in: Amend 2011-11-03 gcc_cflags change. - - * mpn/powerpc64/tabselect.asm: New file. - * mpn/x86_64/tabselect.asm: New file. - * mpn/x86/tabselect.asm: New file. - * mpn/ia64/tabselect.asm: New file. - - * mpn/asm-defs.m4 (define_mpn): Add tabselect. - - * configure.in (gmp_mpn_functions): Add tabselect. - (HAVE_NATIVE): Add entries for addncd_n, subcnd_n, tabselect. - - * mpn/generic/powm_sec.c: Remove mpn_tabselect implementation. - * mpn/generic/tabselect.c: New file with removed code. - -2011-11-13 Torbjorn Granlund <tege@gmplib.org> - - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Add powm_sec.c. - - * mpn/generic/powm_sec.c (win_size): Use POWM_SEC_TABLE - (POWM_SEC_TABLE): Define default. - - * tune/tuneup.c (tune_powm_sec): New function computing POWM_SEC_TABLE. - (all): Call new function. - - * mpn/generic/powm_sec.c (win_size): Define only when - TUNE_PROGRAM_BUILD is not set. - -2011-11-13 Niels Möller <nisse@lysator.liu.se> - - * tune/tuneup.c (tune_hgcd_appr): Use default min_size. - (tune_hgcd_reduce): Increase max_size and step_factor, to 7000 - and 0.04, respectively. - -2011-11-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/sqr_diag_addlsh1.asm: Remove. - -2011-11-11 Niels Möller <nisse@lysator.liu.se> - - * tune/hgcd_reduce_2.c: New file. - * tune/hgcd_reduce_1.c: New file. - - * tune/tuneup.c (hgcd_appr_threshold): New threshold variable. - (hgcd_reduce_threshold): Likewise. - (tune_hgcd_appr): New function. - (tune_hgcd_reduce): New function. - (all): Call tune_hgcd_appr and tune_hgcd_reduce. - - * tune/speed.h (speed_mpn_hgcd_reduce): Declaration. - (speed_mpn_hgcd_reduce_[12]): Likewise. - (mpn_hgcd_reduce_[12]): Likewise. - (SPEED_ROUTINE_MPN_HGCD_REDUCE_CALL): New macro. - - * tune/speed.c (routine): Added mpn_hgcd_reduce, - mpn_hgcd_reduce_1, and mpn_hgcd_reduce_2. - - * tune/common.c (speed_mpn_hgcd_reduce): New function. - (speed_mpn_hgcd_reduce_[12]): Likewise. - - * tune/Makefile.am (libspeed_la_SOURCES): Added hgcd_reduce_1.c - hgcd_reduce_2.c. - (TUNE_MPN_SRCS_BASIC): Added hgcd_appr.c and hgcd_reduce.c. - - * mpn/generic/hgcd_appr.c (submul, hgcd_matrix_apply): Deleted - functions, earlier copied to hgcd_reduce.c. - (mpn_hgcd_appr): Use hgcd_reduce. - -2011-11-09 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/sqr_basecase.asm: New file. - - * mpn/x86_64/aorscnd_n.asm: New file. - - * tune/speed.c (routine): Add measuring of mpn_addcnd_n, mpn_subcnd_n. - * tune/common.c (speed_mpn_addcnd_n,speed_mpn_subcnd_n): New functions. - * tune/speed.h: Declare them. - - * tests/devel/try.c: Add tests for mpn_addcnd_n and mpn_subcnd_n. - * tests/refmpn.c (refmpn_addcnd_n, refmpn_subcnd_n): New functions. - * tests/tests.h: Declare them. - - * configure.in (gmp_mpn_functions): Add addcnd_n and subcnd_n. - -2011-11-07 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/redc_1.c: Just reduce U operand using Hensel norm, but - not fully canonically; leave add_n and conditional sub_n to caller. - Therefore omit R argument. - - * mpn/generic/redc_1_sec.c: Remove. - - * gmp-impl.h (mpn_redc_1): Update declaration. - (mpn_redc_1_sec): Remove declaration. - - * configure.in (gmp_mpn_functions): Remove redc_1. - - * mpn/x86_64/redc_1.asm: Adopt to new defined functionality/interface. - * tune/speed.h (SPEED_ROUTINE_REDC_1): Likewise. - - * tests/refmpn.c (refmpn_redc_1): Likewise; also call refmpn_addmul_1 - instead of mpn_addmul_1. - - * mpn/generic/powm.c (MPN_REDC_1): New macro, use for mpn_redc_1. - * mpn/generic/powm_sec.c (MPN_REDC_1_SEC): New macro, use for - mpn_redc_1_sec. - -2011-11-03 Torbjorn Granlund <tege@gmplib.org> - - * dumbmp.c (mpz_sub): Abort for non-handled case. - - * mpn/powerpc64/mode64/lshiftc.asm: Move file from here... - * mpn/powerpc64/lshiftc.asm: ...to here, with trivial modifications. - - * configure.in: Pass -m32 in more cases, using _maybe mechanism. - Inherit default gcc_cflags in more places. - - * mpn/powerpc64/mode64/p7/gmp-mparam.h: New file. - -2011-11-02 Torbjorn Granlund <tege@gmplib.org> - - * mpn/s390_64/invert_limb.asm: Slight optimisation. - - * configure.in (s390): Set gcc_32_cflags_maybe. - - * mpn/s390_32/gmp-mparam.h: Put in proper data. - * mpn/s390_32/esame/gmp-mparam.h: New file. - - * mpn/x86_64/bobcat/gmp-mparam.h: New file. - - * mpn/s390_32/lshift.asm: New file. - * mpn/s390_32/rshift.asm: New file. - * mpn/s390_32/lshiftc.asm: New file. - -2011-10-31 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/sqr_diagonal.asm: Move from here... - * mpn/powerpc64/mode32/sqr_diagonal.asm: ...to here. - - * mpn/powerpc64/mode64/sqr_diag_addlsh1.asm: New file. - - * mpn/s390_64/sqr_basecase.asm: Rewrite sqr_diag_addlsh1 code. - * mpn/s390_32/esame/sqr_basecase.asm: Likewise. - -2011-10-29 Torbjorn Granlund <tege@gmplib.org> - - * mpn/s390_64/lshift.asm: Complete rewrite. - * mpn/s390_64/rshift.asm: Likewise. - - * mpn/s390_64/lshiftc.asm: New file. - -2011-10-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/s390_32/esame/aors_n.asm: New file, with rewritten add/sub code. - -2011-10-27 Torbjorn Granlund <tege@gmplib.org> - - From Per Olofsson: - * gmp-impl.h (BSWAP_LIMB): Rename variable to avoid BSWAP_LIMB_FETCH - clash. - - * mpn/s390_32/esame/mul_basecase.asm: New file. - - * mpn/s390_32/esame/sqr_basecase.asm: New file. - - * mpn/s390_32/logops_n.asm: New file. - - * mpn/s390_64/logops_n.asm: Fix rp=up code. Remove a leftover insn. - -2011-10-26 Niels Möller <nisse@lysator.liu.se> - - * gmp-impl.h (mpn_hgcd_reduce, mpn_hgcd_reduce_itch): Added - prototypes. - (HGCD_APPR_THRESHOLD): Set up threshold for tuning. - (HGCD_REDUCE_THRESHOLD): Likewise. - - * configure.in (gmp_mpn_functions): Added hgcd_reduce. - - * mpn/generic/hgcd_reduce.c: New file. - -2011-10-24 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/sqr_basecase.asm: Put intermediate result into R, don't - allocate any stack space. - -2011-10-23 Torbjorn Granlund <tege@gmplib.org> - - * mpn/s390_64/logops_n.asm: Use nc, oc, xc when possible. - - * tune/common.c (speed_mpn_and_n, speed_mpn_andn_n, etc): - Pass correct input args. - - * mpn/s390_64/mod_34lsub1.asm: Use llgfr for zero extensions. - - * mpn/s390_64/mul_basecase.asm: New file. - - * mpn/s390_64/sqr_basecase.asm: New file. - * mpn/s390_64/sqr_diag_addlsh1.asm: Removed, lives on in sqr_basecase. - - * mpn/s390_64/bdiv_dbm1c.asm: Shave off 1 c/l. - - * mpn/s390_64/aorrlsh1_n.asm: New file, developed from aorslsh1_n.asm. - * mpn/s390_64/sublsh1_n.asm: New file. - * mpn/s390_64/aorslsh1_n.asm: Remove file. - -2011-10-22 Torbjorn Granlund <tege@gmplib.org> - - * mpn/s390_64/logops_n.asm: New file. - - * mpn/s390_64/aors_n.asm: New file, with rewritten add/sub code. - -2011-10-20 Torbjorn Granlund <tege@gmplib.org> - - * tune/speed.h (SPEED_ROUTINE_MPN_SQR_DIAL_ADDLSH1_CALL): New macro. - * tune/common.c (speed_mpn_sqr_diag_addlsh1): New function. - * tune/speed.c (routine): Measure mpn_sqr_diag_addlsh1. - - * mpn/s390_64/sqr_diag_addlsh1.asm: Rewrite like s390_32/esame code. - - * mpn/s390_32/esame/sqr_diag_addlsh1.asm: Save just needed registers. - -2011-10-19 Torbjorn Granlund <tege@gmplib.org> - - * mpn/s390_32/esame/add_n.asm: Rewrite, similar to s390_64 code. - * mpn/s390_32/esame/add_n.asm: Likewise. - -2011-10-17 Torbjorn Granlund <tege@gmplib.org> - - * mpn/s390_32/esame/aorslsh1_n.asm: New file. - -2011-10-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/s390_32/esame/sqr_diag_addlsh1.asm: New file. - - * mpn/s390_32/copyi.asm: New file. - * mpn/s390_32/copyd.asm: New file. - - * mpn/s390_64/copyd.asm: Optimise. - - * mpn/s390_64/copyi.asm: Rewrite along the lines of glibc memcpy. - - * mpn/s390_64/aorslsh1_n.asm: New file. - - * mpn/s390_64/mod_34lsub1.asm: New file. - - * mpn/s390_64/sqr_diag_addlsh1.asm: New file. - -2011-10-15 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (s390): Rewrite support to handle known CPUs. - * config.guess: Recognise s390 CPUs. - * config.sub: Match s390 CPUs. - * acinclude.m4 (S390_PATTERN, S390X_PATTERN): New defines. - -2011-10-14 Torbjorn Granlund <tege@gmplib.org> - - From Per Olofsson: - * mpn/generic/popham.c: Add __GMP_NOTHROW to make it match gmp.h. - * mpn/generic/gcd_1.c: Separate declarations and initialisers for the - benefit of C++. - - * configure.in: AC_DEFINE HAVE_HOST_CPU_s390_zarch. - * longlong.h (s390): Use it. - (s390 umul_ppmm): Fix typo in pure C variant. - -2011-10-13 Torbjorn Granlund <tege@gmplib.org> - - * longlong.h (s390): Put back an accidentally deleted #else. - - * configure.in (s390): Unset extra_functions for s390x. - -2011-10-12 Torbjorn Granlund <tege@gmplib.org> - - * mpn/s390_64/lshift.asm: Reduce register usage. - * mpn/s390_64/rshift.asm: Likewise. - - * longlong.h (s390 umul_ppmm): With new-enough gcc, avoid asm. - - From Andreas Krebbel: - * longlong.h (s390 umul_ppmm): Support 32-bit limbs with gcc using - 64-bit registers. - (s390 udiv_qrnnd): Likewise. - -2011-10-11 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (s390x): Pass -mzarch to gcc in 32-bit mode. - - * longlong.h (s390x): Add __CLOBBER_CC for relevant asm patterns. - * mpn/generic/mod_1_1.c (s390x add_mssaaaa): Likewise. - - * mpn/s390_64/copyd.asm: New file. - -2011-10-10 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd_appr.c: Deleted debugging code. - - * tests/mpn/t-hgcd_appr.c (main): Added -v flag. - (hgcd_appr_valid_p): Increased margin of non-minimality for - divide-and-conquer algorithm. Display bit counts only if - -v is used. - - * mpn/generic/hgcd_appr.c (submul): New (static) function. - (hgcd_matrix_apply): New function. - (mpn_hgcd_appr_itch): Account for divide-and-conquer algorithm. - (mpn_hgcd_appr): Implemented divide-and-conquer. - -2011-10-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mod_1_1.c (add_mssaaaa): Add s390x variant. Put arm code - inside __GNUC__. - - * tune/time.c (STCK): Use proper memory constraint. - - From Marco Trudel: - * tests/mpz/t-scan.c (check_ref): Fix loop end bound. - -2011-10-10 Niels Möller <nisse@lysator.liu.se> - - * gmp-impl.h: (HGCD_APPR_THRESHOLD): New threshold. - - * mpn/generic/hgcd_appr.c (mpn_hgcd_appr): Interface change. - Destroy inputs, let caller make working copies if needed. - (mpn_hgcd_appr_itch): Reduced scratch need. - * gmp-impl.h: Updated mpn_hgcd_appr prototype. - * tests/mpn/t-hgcd_appr.c (one_test): Make working copies for - hgcd_appr. - * tune/common.c (speed_mpn_hgcd_appr): Use SPEED_ROUTINE_MPN_HGCD_CALL. - * tune/speed.h (SPEED_ROUTINE_MPN_HGCD_APPR_CALL): Deleted. - -2011-10-09 Torbjorn Granlund <tege@gmplib.org> - - * mpn/s390_64/copyi.asm: New file. - * mpn/s390_64/lshift.asm: New file. - * mpn/s390_64/rshift.asm: New file. - - * mpn/s390_64/add_n.asm: Rewrite using lmg/stmg. - * mpn/s390_64/sub_n.asm: Likewise. - - * mpn/s390_64/invert_limb.asm: Save a callee-saves register less. - - * tune/time.c (getrusage_backwards_p): Properly cast printed values. - - * longlong.h (s390x): Put back UDItype casts to make gcc reloading use - right more for constants. - (s390x count_leading_zeros): Disable until we support z10 specifically. - (s390x add_ssaaaa): Remove algsi/slgsi until we support z10. - -2011-10-09 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd_matrix.c (mpn_hgcd_matrix_adjust): Declare - matrix argument const. - -2011-10-08 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/t-hgcd_appr.c (hgcd_appr_valid_p): Adjusted the - allowed margin of non-minimality for hgcd_appr. - - * mpn/generic/hgcd_appr.c (mpn_hgcd_appr): Fixed handling of - extra_bits, starting at zero, to ensure that we don't produce too - small remainders. Added a final reduction loop when we we - otherwise terminate with extra_bits > 0, to make the returned - remainders closer to minimal. - -2011-10-07 Torbjorn Granlund <tege@gmplib.org> - - * longlong.h (s390): Add 32-bit zarch umul_ppmm and udiv_qrnnd. - (s390): Overhaul 32-bit and 64-bit code. - -2011-10-07 Niels Möller <nisse@lysator.liu.se> - - * tune/speed.h (speed_mpn_hgcd_appr): New prototype. - (SPEED_ROUTINE_MPN_HGCD_APPR_CALL): New macro. - * tune/common.c (speed_mpn_hgcd_appr): New function. - * tune/speed.c (routine): Added mpn_hgcd_appr. - - * tests/mpn/t-hgcd_appr.c: New file. - * tests/mpn/Makefile.am (check_PROGRAMS): Added t-hgcd_appr. - - * configure.in (gmp_mpn_functions): Added hgcd_step and hgcd_appr. - - * gmp-impl.h: Added prototypes for mpn_hgcd_step, - mpn_hgcd_appr_itch and mpn_hgcd_appr. - - * mpn/generic/hgcd_appr.c: New file. - - * mpn/generic/hgcd_step.c: New file, extracted from hgcd.c. - (mpn_hgcd_step): Renamed, from... - * mpn/generic/hgcd.c (hgcd_step): ...old name. Renamed and moved - to hgcd_step.c. - (hgcd_hook): Also moved to hgcd_step.c. - (mpn_hgcd): Updated for hgcd_step renaming. - -2011-10-06 Torbjorn Granlund <tege@gmplib.org> - - * mpn/s390_64/invert_limb.asm: New file. - -2011-10-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/s390_64/submul_1.asm: New file. - * mpn/s390_32/esame/submul_1.asm: New file. - - * mpn/generic/mulmid.c (mpn_mulmid): Move a TMP_DECL to block start. - - * mpn/Makefile.am (TARG_DIST): Add s390_32 and s390_64, remove s390 and - z8000x. - - * doc/gmp.texi (Custom Allocation): Rephrase a paragraph. - - * demos/factorize.c: Run 25 Miller-Rabin tests. - - * mpz/nextprime.c: Run 25 mpz_millerrabin tests (was 10). - -2011-10-03 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Support s390x. - - * longlong.h: Add support for 64-bit s390x. - - * mpn/s390_64: New directory. - * mpn/s390_64/add_n.asm: New file. - * mpn/s390_64/sub_n.asm: New file. - * mpn/s390_64/mul_1.asm: New file. - * mpn/s390_64/addmul_1.asm: New file. - * mpn/s390_64/bdiv_dbm1c.asm: New file. - * mpn/s390_64/gmp-mparam.h: New file, taken from x86_64. - - * mpn/s390_32: Directory renamed from mpn/s390. - * mpn/s390_32/gmp-mparam.h: New file, taken from x86_64. - * mpn/s390_32/esame/add_n.asm: New file. - * mpn/s390_32/esame/sub_n.asm: New file. - * mpn/s390_32/esame/mul_1.asm: New file. - * mpn/s390_32/esame/addmul_1.asm: New file. - * mpn/s390_32/esame/bdiv_dbm1c.asm: New file. - -2011-10-03 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/Makefile.am (check_PROGRAMS): Added t-mulmid. - * tests/mpn/t-mulmid.c: New file. - - mulmid-related assembly for x86_64, from David Harvey: - * mpn/asm-defs.m4 (define_mpn): Added [add,sub]_err[1,2,3]_n and - mulmid_basecase. Also use m4_not_for_expansion on the - corresponding OPERATION_* symbols. - * mpn/x86_64/aors_err1_n.asm: New file. - * mpn/x86_64/aors_err2_n.asm: Likewise. - * mpn/x86_64/aors_err3_n.asm: Likewise. - * mpn/x86_64/mulmid_basecase.asm: Likewise. - * mpn/x86_64/core2/aors_err1_n.asm: Likewise. - * mpn/x86_64/gmp-mparam.h (MULMID_TOOM42_THRESHOLD): New value. - * mpn/x86_64/core2/gmp-mparam.h (MULMID_TOOM42_THRESHOLD): Likewise. - - Tuning of mulmid, from David Harvey: - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Added mulmid.c - mulmid_n.c toom42_mulmid.c. - * tune/speed.h: Prototypes for mulmid-related functions. - (struct speed_params): Increased max number of sources to 5. - (SPEED_ROUTINE_MPN_BINARY_ERR_N_CALL): New macro. - (SPEED_ROUTINE_MPN_BINARY_ERR1_N): Likewise. - (SPEED_ROUTINE_MPN_BINARY_ERR2_N): Likewise. - (SPEED_ROUTINE_MPN_BINARY_ERR3_N): Likewise. - (SPEED_ROUTINE_MPN_MULMID): Likewise. - (SPEED_ROUTINE_MPN_MULMID_N): Likewise. - (SPEED_ROUTINE_MPN_TOOM42_MULMID): Likewise. - * tune/common.c (mpn_[add,sub]_err[1,2,3]_n): New functions. - (speed_mpn_mulmid_basecase): New function. - (speed_mpn_mulmid): New function. - (speed_mpn_mulmid_n): New function. - (speed_mpn_toom42_mulmid): New function. - * tune/speed.c (routine): Added mpn_[add,sub]_err[1,2,3]_n, - mpn_mulmid_basecase, mpn_toom42_mulmid, mpn_mulmid_n, and - mpn_mulmid. - * tune/tuneup.c (mulmid_toom42_threshold): New threshold variable. - (tune_mulmid): New function. - (all): Call tune_mulmid. - - Testing of mulmid, from David Harvey: - * tests/refmpn.c (AORS_ERR1_N): New macro. - (refmpn_add_err1_n, refmpn_sub_err1_n): New functions. - (AORS_ERR2_N): New macro. - (refmpn_add_err2_n, refmpn_sub_err2_n): New functions. - (AORS_ERR3_N): New macro. - (refmpn_add_err3_n, refmpn_sub_err3_n): New functions. - (refmpn_mulmid_basecase): New function. - (refmpn_toom42_mulmid): New function, wrapper for - refmpn_mulmid_basecase. - (refmpn_mulmid_n): Likewise. - (refmpn_mulmid): Likewise. - * tests/tests.h: Prototypes for new functions. - * tests/devel/try.c (NUM_SOURCES): Increased to 5. - (struct try_t): Use NUM_SOURCES and NUM_DESTS constants. - (SIZE_4, SIZE_6, SIZE_DIFF_PLUS_3, SIZE_ODD): New constants. - (OVERLAP_NOT_DST2): New flag. - (param_init): New mulmid-related operation types. - (mpn_toom42_mulmid_fun): New function. - (choice_array): Added mulmid-related entries. - (overlap_array): Extended for larger NUM_SOURCES. - (OVERLAP_COUNT): Handle OVERLAP_NOT_DST2. - (call): Support mulmid-related functions. - (pointer_setup): Handle SIZE_4, SIZE_6, and SIZE_DIFF_PLUS_3. - (SIZE_ITERATION): Handle SIZE_ODD. - (SIZE2_FIRST): Handle SIZE_CEIL_HALF. - (SIZE2_LAST): Likewise. - - Implementation of mulmid, from David Harvey: - * mpn/generic/add_err1_n.c (mpn_add_err1_n): New file and function. - * mpn/generic/add_err2_n.c (mpn_add_err2_n): Likewise. - * mpn/generic/add_err3_n.c (mpn_add_err3_n): Likewise. - * mpn/generic/sub_err1_n.c (mpn_sub_err1_n): Likewise. - * mpn/generic/sub_err2_n.c (mpn_sub_err2_n): Likewise. - * mpn/generic/sub_err3_n.c (mpn_sub_err3_n): Likewise. - * mpn/generic/mulmid_basecase.c (mpn_mulmid_basecase): Likewise. - * mpn/generic/mulmid_n.c (mpn_mulmid_n): Likewise. - * mpn/generic/toom42_mulmid.c (mpn_toom42_mulmid): Likewise. - * configure.in (gmp_mpn_functions): Added mulmid-related - functions. - (GMP_MULFUNC_CHOICES): Handle aors_err1_n, aors_err2_n, and - aors_err3_n. - * gmp-impl.h: Added prototypes for mulmid functions. - (MPN_TOOM42_MULMID_MINSIZE): New constant. - (MULMID_TOOM42_THRESHOLD): New threshold. - (mpn_toom42_mulmid_itch): New macro. - -2011-10-03 Niels Möller <nisse@lysator.liu.se> - - * tune/tune-gcd-p.c (main): Fixed broken loop conditions. - -2011-09-26 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sh/sh2/submul_1.asm: Make this old submul_1 implementation - actually compute intended function. - - * longlong.h (SH): Recognise predefs for all SH processors as defined - by current gcc versions. - -2011-09-25 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sh: Migrate files to '.asm'. - * configure.in: Recognise sh3 and sh4. - -2011-09-21 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (mpz_class::swap): New function. - (mpq_class::swap): Likewise. - (mpf_class::swap): Likewise. - (swap): New function. - * tests/cxx/t-assign.cc: Test the above. - * doc/gmp.texi (swap): Document the above. - -2011-08-21 Marc Glisse <marc.glisse@inria.fr> - - * tests/cxx/t-ops2.cc: check mul-div by 2. - - * gmpxx.h (__GMPXX_CONSTANT): New macro (__builtin_constant_p). - (__gmp_binary_lshift): Move before multiplication. Optimize x << 0. - (__gmp_binary_rshift): Move before division. Optimize x >> 0. - (__gmp_binary_plus): Optimize x + 0. Rewrite rational + integer. - (__gmp_binary_minus): Optimize x - 0 and 0 - x. - Rewrite rational - integer. - (__gmp_binary_multiplies): Optimize x * 2^n. - (__gmp_binary_divides): Optimize x / 2^n. - (__gmp_binary_*): Deduplicate code for symmetric operations. - -2011-08-18 Torbjorn Granlund <tege@gmplib.org> - - * printf/doprntf.c (__gmp_doprnt_mpf): For DOPRNT_CONV_FIXED, ask for - one more digit. - -2011-08-17 Torbjorn Granlund <tege@gmplib.org> - - * mpf/sub.c: Fix typo in copy condition. Delay an allocation. - -2011-08-12 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (LIMBS_PER_DIGIT_IN_BASE): Fix typo. - -2011-08-10 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (DIGITS_IN_BASEGT2_FROM_BITS): New. - (DIGITS_IN_BASE_FROM_BITS): Compute more accurate result. - (MPN_SIZEINBASE): Use DIGITS_IN_BASEGT2_FROM_BITS. - - * tests/rand/t-lc2exp.c (check_bigc): Call abort after reporting error. - -2011-08-09 Torbjorn Granlund <tege@gmplib.org> - - * mpz/out_str.c (mpz_out_str): Reinsert accidentally deleted str_size - adjustment. - - * gmp-impl.h (DIGITS_IN_BASE_FROM_BITS): Simplify, also avoiding - overflow for base 2. - -2011-08-07 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (struct bases): Add log2b and logb2 field, remove - chars_per_limb_exactly field. - (DIGITS_IN_BASE_FROM_BITS): New. - (DIGITS_IN_BASE_PER_LIMB): New. - (LIMBS_PER_DIGIT_IN_BASE): New. - * gen-bases.c: Generate log2b and logb2 fields; do not generate - chars_per_limb_exactly field. - * mpf/get_str.c mpf/out_str.c mpf/set_str.c mpn/generic/get_str.c - mpn/generic/sizeinbase.c mpq/get_str.c mpz/inp_str.c mpz/out_str.c - mpz/set_str.c printf/doprntf.c tune/speed.h tune/tuneup.c: - Use new macros. - -2011-08-04 Torbjorn Granlund <tege@gmplib.org> - - * dumbmp.c (mpz_root): Reinsert accidentally removed line. - -2011-08-03 Torbjorn Granlund <tege@gmplib.org> - - * dumbmp.c (mpz_tdiv_qr): Correctly handle dividend value being equal - to divisor value. - (mpz_root): Create reasonable starting approximation. - (mpz_sqrt): New function. - (mpz_mul_2exp): Add faster block shifting code, disabled for now. - -2011-07-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/arm/invert_limb.asm: Swap around some registers to silence 'as' - warnings. - -2011-07-14 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/dcpi1_bdiv_q.c (mpn_dcpi1_bdiv_q): Get mpn_sub_1 size - argument right. - -2011-07-04 Torbjorn Granlund <tege@gmplib.org> - - * tests/misc/t-locale.c: Disable test for mingw. - - * configure.in (x86_64 *-*-mingw*): Handle also cygwin here; clear out - extra_functions_64. - -2011-07-02 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Don't print newline in x86 cpuid function. - Rewrite x86-64 cpu recognition asm code to work under Windoze. - -2011-06-16 Torbjorn Granlund <tege@gmplib.org> - - * acinclude.m4 (GMP_ASM_RODATA): Fix typo in 2011-04-20 change. - - * configure.in: Surround tr ranges with [] for portability. - -2011-05-25 Niels Möller <nisse@lysator.liu.se> - - * tune/tune-gcd-p.c (search): New function to search for minimum. - (main): Replaced slow linear search. - -2011-05-24 Niels Möller <nisse@lysator.liu.se> - - * tune/Makefile.am (EXTRA_PROGRAMS): Added tune-gcd-p. Also added - related automake variables. - - * mpn/Makefile.am (tune-gcd-p): Deleted target. - - * tune/tune-gcd-p.c: New file, extracted from mpn/generic/gcd.c - and updated. - * mpn/generic/gcd.c: Deleted the corresponding code, including - main function. - -2011-05-23 Niels Möller <nisse@lysator.liu.se> - - * mpz/jacobi.c (mpz_jacobi): Simplified by swapping operands when - needed, to get asize >= bsize. Use the reciprocity law generalized - to work when one operand is even. - -2011-05-22 Niels Möller <nisse@lysator.liu.se> - - * mpz/jacobi.c (mpz_jacobi): Another bugfix for the asize == 1 - case. Sometimes, powers of two in b were taken into account twice. - -2011-05-21 Niels Möller <nisse@lysator.liu.se> - - * mpz/jacobi.c (mpz_jacobi): The handling of asize == 1 was - broken. Rewrote it. - - * tests/mpz/t-jac.c (mpz_nextprime_step): Sanity check that prime - candidate and step has no common factor. - (check_data): Added some test cases related to the asize == 1 case - in mpz_jacobi. - -2011-05-20 Niels Möller <nisse@lysator.liu.se> - - * gmp-impl.h: Jacobi-related prototypes. - - * configure.in (gmp_mpn_functions): Added jacobi_2, jacobi, - hgcd2_jacobi, hgcd_jacobi, and removed jacobi_lehmer. - - * mpz/jacobi.c (STRIP_TWOS): Deleted macro. - (mpz_jacobi): Partially rewritten, to no longer makes the A - operand odd. Use new mpn_jacobi_n. - - * mpn/generic/jacobi_lehmer.c: Deleted file. - - * mpn/generic/jacobi.c (mpn_jacobi_n): New subquadratic jacobi - implementation. Supersedes jacobi_lehmer.c. - - * mpn/generic/hgcd_jacobi.c (mpn_hgcd_jacobi): New file and - function. A copy of mpn_hgcd, using mpn_hgcd2_jacobi, and with calls to - mpn_jacobi_update when appropriate. - - * mpn/generic/jacobi_2.c (mpn_jacobi_2): New file. Extracted from - jacobi_lehmer.c. - * mpn/generic/hgcd2_jacobi.c (mpn_hgcd2_jacobi): Likewise. - - * mpn/generic/hgcd.c (hgcd_hook): Avoid using NULL. - -2011-05-19 Niels Möller <nisse@lysator.liu.se> - - * tune/hgcd_lehmer.c (__gmpn_hgcd_itch): Don't rename symbols for - the functions moved to hgcd_matrix.c. - - * configure.in (gmp_mpn_functions): Added hgcd_matrix. - - * mpn/generic/hgcd.c (hgcd_matrix_update_1): Deleted. Several other - helper functions moved to hgcd_matrix.c, see below. - (hgcd_hook): New function. - (hgcd_step): Simplified, using mpn_gcd_subdiv_step and hgcd_hook. - - * mpn/generic/hgcd_matrix.c: New file. - (mpn_hgcd_matrix_init): Moved here, from hgcd.c. - (mpn_hgcd_matrix_update_q): Likewise. - (mpn_hgcd_matrix_mul_1): Likewise. - (mpn_hgcd_matrix_mul): Likewise. - (mpn_hgcd_matrix_adjust): Likewise. - - * mpn/generic/gcd_subdiv_step.c (mpn_gcd_subdiv_step): New - argument s, for use by hgcd. - * gmp-impl.h (mpn_gcd_subdiv_step): Update declaration. - - * mpn/generic/gcd.c (mpn_gcd): Pass s = 0 to mpn_gcd_subdiv_step. - * mpn/generic/gcdext.c (mpn_gcdext): Likewise. Also added an ASSERT. - * mpn/generic/gcdext_lehmer.c (mpn_gcdext_lehmer_n): Likewise. - (mpn_gcdext_hook): Added some ASSERTs. - * mpn/generic/jacobi_lehmer.c (mpn_jacobi_lehmer): Likewise. - -2011-05-17 Niels Möller <nisse@lysator.liu.se> - - * doc/gmp.texi (mpn_gcd, mpn_gcdext): Document input requirements: - Must have un >= vn > 0, and V normalized. - * mpn/generic/gcdext.c (mpn_gcdext): Added ASSERT for input - normalization. - * mpn/generic/gcd.c (mpn_gcd): Added ASSERTs for input - requirements. - -2011-05-15 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (operator<<): Dedup. - * tests/cxx/t-iostream.cc: Test on compound types. - - * gmpxx.h (__gmp_binary_expr): Let things happen in place: c=(a+b)/2. - -2011-05-10 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__gmp_unary_expr): Let things happen in place: c=-(a+b). - (operator>>): Clean the commenting out. - * tests/cxx/t-iostream.cc: New file. - * tests/cxx/Makefile.am: Added t-iostream. - -2011-05-10 Niels Möller <nisse@lysator.liu.se> - - * doc/gmp.texi (mpz_gcd): Document that gcd(0,0) = 0. - (mpz_gcdext): Document range for cofactors. - -2011-05-09 Niels Möller <nisse@lysator.liu.se> - - * mpz/gcdext.c (mpz_gcdext): Increased sp allocation to bsize+1 limbs. - * doc/gmp.texi (mpn_gcdext): Fixed documentation of allocation - requirements; one extra limb is still needed for S. - -2011-05-09 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/fat/gmp-mparam.h (BMOD_1_TO_MOD_1_THRESHOLD): Define. - * mpn/x86_64/fat/gmp-mparam.h (BMOD_1_TO_MOD_1_THRESHOLD): Define. - -2011-05-08 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h: Replace unsigned long with mp_bitcnt_t in many places. - * doc/gmp.texi: Likewise. - -2011-05-06 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (mpz_class): Make constructor from mp[qf]_class explicit. - (mpq_class): Make constructor from mpf_class explicit. - * doc/gmp.texi: Document the above. - * NEWS: Likewise, and mention the EOF istream fix. - * tests/cxx/t-mix.cc: New file. - * tests/cxx/Makefile.am: Added t-mix. - - * tests/cxx/t-assign.cc: Minor tweak. - * tests/cxx/t-misc.cc: Likewise. - - * gmpxx.h (__gmp_resolve_temp): Remove. - (__gmp_set_expr): Remove some overloads. - (mpq_class): mpz_init_set the numerator and denominator instead of - mpq_init + mpq_set. - (mpz_class): Dedup the string constructors. - (mpq_class): Likewise. - - * tests/cxx/t-ops3.cc: New file. - * tests/cxx/Makefile.am: Added t-ops3. - -2011-05-05 Torbjorn Granlund <tege@gmplib.org> - - * mpz/gcdext.c: Correct sgn computation. - Use MPZ_REALLOC. - -2011-05-05 Marc Glisse <marc.glisse@inria.fr> - - * mpn/x86_64/fat/fat.c: Update for Sandy Bridge. - * config.guess: warning to keep it in sync with fat.c. - -2011-05-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fat/fat_entry.asm (PIC_OR_DARWIN): New symbol. Use it to - work around Darwin problems. - -2011-05-04 Niels Möller <nisse@lysator.liu.se> - - * mpz/gcdext.c (mpz_gcdext): Reduced temporary allocations. Use - mpz_divexact when computing the second cofactor. - -2011-05-03 David Harvey <dmharvey@cims.nyu.edu> - - * configure.in: make invert_limb_table work correctly with - --disable-assembly (from Niels Möller) - -2011-05-02 Marc Glisse <marc.glisse@inria.fr> - - * .bootstrap: libtoolize doesn't need -c. - - * configfsf.guess: Update to version of 2011-02-02. - * configfsf.sub: Update to version of 2011-03-23. - -2011-05-02 Niels Möller <nisse@lysator.liu.se> - - * mpz/gcdext.c (mpz_gcdext): Don't allocate extra limbs at the end - of mpn_gcdext parameters. - - * doc/gmp.texi (mpn_gcdext): Updated doc. - -2011-05-01 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/div_qr_2u_pi1.c (mpn_div_qr_2u_pi1): Fixed ASSERT. - -2011-04-30 Marc Glisse <marc.glisse@inria.fr> - - * gmp-h.in (mpz_cdiv_q_2exp): Use mp_bitcnt_t to match the definition - and the documentation. - (mpz_remove): Likewise. - (mpf_eq): Likewise. - - * ltmain.sh: Remove. - * .bootstrap: Let libtoolize generate ltmain.sh. - - * tests/cxx/t-ops2.cc: Add a couple tests. - * tests/cxx/t-rand.cc: Likewise. - - * doc/gmp.texi (mpf_urandomb): Explicit the fact that it does not - change the precision. - - * gmp-h.in (__GMP_EXTERN_INLINE): Recent g++ uses gnu_inline. - -2011-04-28 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (x86_64): Support bobcat specifically. - (x86): Match bobcat and bulldozer, handle like k10. - -2011-04-28 David Harvey <dmharvey@cims.nyu.edu> - - * README.HG: update autotools version numbers. - -2011-04-27 Torbjorn Granlund <tege@gmplib.org> - - * tune/speed.h (speed_cyclecounter): Always use PIC variant when - compiled with Apple's GCC. - - * mpn/x86/darwin.m4 (LEA): Complete rewrite. - (m4append): New macro. - -2011-04-26 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc32/sparc-defs.m4 (changecom): Don't redefine '!' as it - interferes with expressions. - -2011-04-20 Torbjorn Granlund <tege@gmplib.org> - - * acinclude.m4 (GMP_ASM_RODATA): Make 'foo' larger to avoid clang - problems. - -2011-04-12 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86_64/invert_limb.asm [PIC]: Declare mpn_invert_limb_table - as .protected. - -2011-04-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/k7/invert_limb.asm: Use deflit for Darwin bug workaround. - Undo 2011-03-28 change. - - * mpn/asm-defs.m4 (define_mpn): Use deflit. - -2011-04-10 Niels Möller <nisse@lysator.liu.se> - - * mpn/asm-defs.m4 (define_mpn): Added invert_limb_table. - - * configure.in: Add invert_limb_table to extra_functions_64 on - x86_64. - - * mpn/x86_64/invert_limb.asm: Changed references from approx_tab - mpn_invert_limb_table. - - * mpn/x86_64/invert_limb_table.asm (mpn_invert_limb_table): New - file. Extracted approximation table from invert_limb.asm, renamed - and made global. - -2011-03-30 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86_64/div_qr_2u_pi1.asm: New file. - - * configure.in (gmp_mpn_functions): Add div_qr_2u_pi1. - - * gmp-impl.h (mpn_div_qr_2u_pi1): Declare. - - * mpn/generic/div_qr_2u_pi1.c (mpn_div_qr_2u_pi1): Moved to - separate file, from... - * mpn/generic/div_qr_2.c: ... old location. - - * mpn/generic/div_qr_2n_pi1.c: Renamed file, from... - * mpn/generic/div_qr_2_pi1_norm.c: ...old name. - * mpn/x86_64/div_qr_2n_pi1.asm: Renamed file, from... - * mpn/x86_64/div_qr_2_pi1_norm.asm: ...old name. - - * gmp-impl.h (mpn_div_qr_2n_pi1): Use new name in declaration. - * tune/speed.h (speed_mpn_div_qr_2n): Likewise. - (speed_mpn_div_qr_2u): Likewise. - - * tune/tuneup.c (tune_div_qr_2): Use new name speed_mpn_div_qr_2n. - - * tune/speed.c (routine): Use new names mpn_div_qr_2n and - mpn_div_qr_2u, also on the command line. - - * tune/common.c (speed_mpn_div_qr_2n): Renamed, from... - (speed_mpn_div_qr_2_norm): ... old name. - (speed_mpn_div_qr_2u): Renamed, from... - (speed_mpn_div_qr_2_unnorm): ... old name. - - * mpn/generic/div_qr_2_pi1_norm.c (mpn_div_qr_2n_pi1): Renamed, - from... - (mpn_div_qr_2_pi1_norm): ...old name. - * mpn/x86_64/div_qr_2_pi1_norm.asm: Likewise. - - * mpn/generic/div_qr_2.c (mpn_div_qr_2n_pi2): Renamed, from... - (mpn_div_qr_2_pi2_norm): ... old name. - (mpn_div_qr_2u_pi1): Renamed, from... - (mpn_div_qr_2_pi1_unnorm): ... old name. - (mpn_div_qr_2): Call functions using new names. - - * mpn/asm-defs.m4: Renamed div_qr_2-functions to new names. - -2011-03-29 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86_64/div_qr_2_pi1_norm.asm: Updated to use a separate rp - argument. - - * gmp-impl.h (mpn_div_qr_2_pi1_norm): Updated declaration. - * gmp-h.in (mpn_div_qr_2): Likewise. - - * tests/mpn/t-div.c (main): Adapted to new mpn_div_qr2 interface. - * tune/speed.h (SPEED_ROUTINE_MPN_DIV_QR_2): Likewise. - - * mpn/generic/div_qr_2.c (mpn_div_qr_2_pi2_norm): Added rp - argument. Don't clobber the input dividend. - (mpn_div_qr_2_pi1_unnorm): Likewise. - (mpn_div_qr_2): Likewise. - * mpn/generic/div_qr_2_pi1_norm.c (mpn_div_qr_2_pi1_norm): Likewise. - -2011-03-29 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86/k7/invert_limb.asm: Use mov rather than push and pop. - Earlier load of divisor from stack. - -2011-03-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/k7/invert_limb.asm: Protect movzwl register parameters from - being interpreted as m4 macro parameters. - -2011-03-22 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86_64/div_qr_2_pi1_norm.asm: Copied optimized inner loop - from divrem_2.asm. - - * mpn/x86_64/div_qr_2_pi1_norm.asm: First working, but poorly - optimized, implementation. - - * mpn/asm-defs.m4 (define_mpn): Added div_qr_2_pi[12]_*norm. - - * mpn/generic/div_qr_2_pi1_norm.c (mpn_div_qr_2_pi1_norm): Moved - to separate file, from... - * mpn/generic/div_qr_2.c: ... old location. - - * gmp-impl.h (mpn_div_qr_2_pi1_norm): Declare. - - * configure.in (gmp_mpn_functions): Added div_qr_2_pi1_norm. - -2011-03-22 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (powerpc): Reinsert lost AIX cpu_path 32-bit handling. - Reinsert lost linux/bsd cpu_path handling. - - * mpn/generic/mod_1_1.c: Disable powerpc asm for _LONG_LONG_LIMB. - * mpn/generic/div_qr_2.c: Likewise. - - * mpn/generic/div_qr_2.c: Use asm just for gcc. - Make powerpc add_sssaaaa work for 32-bit case, and use less strict - constraints. - -2011-03-21 Niels Möller <nisse@lysator.liu.se> - - * tune/tuneup.c (div_qr_2_pi2_threshold): New global variable. - (tune_div_qr_2): New function. - (all): Call tune_div_qr_2. - - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Added div_qr_2.c. - - * gmp-impl.h (DIV_QR_2_PI2_THRESHOLD): Setup for tuning. - - New 4/2 division loop, based on Torbjörn's work: - * mpn/generic/div_qr_2.c (add_sssaaaa, add_csaac): New macros. - (udiv_qr_4by2): New macro. - (invert_4by2): New function. - (mpn_div_qr_2_pi2_norm): New function. - (DIV_QR_2_PI2_THRESHOLD): New threshold. - (mpn_div_qr_2_pi1_norm): Renamed, from... - (mpn_div_qr_2_norm): ... old name. - (mpn_div_qr_2_pi1_unnorm): Renamed, from... - (mpn_div_qr_2_unnorm): ... old name. - (mpn_div_qr_2): Use mpn_div_qr_2_pi2_norm for large enough - normalized divisors. - - * gmp-impl.h (udiv_qr_3by2): Avoid a copy. - -2011-03-21 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (hppa): Under linux, treat 64-bit processors as if they - were 32-bit processors. - - * mpn/generic/addcnd_n.c: New file. - * mpn/asm-defs.m4 (define_mpn): Add addcnd_n and subcnd_n. - * configure.in (gmp_mpn_functions): Add addcnd_n. - * gmp-impl.h (mpn_addcnd_n): Declare. - - * mpn/generic/subcnd_n.c: Combine nails and non-nails functions. - - * gmp-impl.h (invert_pi1): Prepend _ to local variables, protect - parameters within () where necessary. - - * mpn/asm-defs.m4 (define_mpn): Add div_qr_2. - * configure.in (gmp_mpn_functions): Reinsert mercurial-bug-removed - line. - -2011-03-20 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (powerpc): Add cpu_path for all three ABIs. - Rename "aix64" to "mode64" for consistency. - -2011-03-16 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__gmp_binary_not_equal): Remove, use !__gmp_binary_equal. - (__gmp_binary_less_equal): Remove, use !__gmp_binary_greater. - (__gmp_binary_greater_equal): Remove, use !__gmp_binary_less. - * tests/cxx/t-ops2.cc: Typo. - -2011-03-20 Niels Möller <nisse@lysator.liu.se> - - * tune/common.c (speed_mpn_div_qr_2_norm): New function. - (speed_mpn_div_qr_2_unnorm): New function. - * tune/speed.c (routine): Recognize above functions. - * tune/speed.h: Declarations for above functions. - (SPEED_ROUTINE_MPN_DIV_QR_2): New macro. - - * tests/mpn/t-div.c (main): Added tests for mpn_divrem_2 and - mpn_div_qr_2. - - * mpn/generic/div_qr_2.c (mpn_div_qr_2): New file and function. - Intended to eventually replace divrem_2. - * configure.in (gmp_mpn_functions): Add div_qr_2. - -2011-03-16 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__gmp_set_expr): Remove broken declarations. - -2011-03-19 Torbjorn Granlund <tege@gmplib.org> - - * mpz/fac_ui.c (mpz_fac_ui): Use MPZ_REALLOC for standard, conditional - reallocation. - -2011-03-19 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/divrem_2.c (mpn_divrem_2): Fixed comment and assert - regarding q and n overlap. - -2011-03-16 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__mpz_set_ui_safe): New inline function. - (__mpz_set_si_safe): Likewise. - (__GMPXX_TMPZ_UI): Use the new function. - (__GMPXX_TMPZ_SI): Likewise. - (__GMPXX_TMPQ_UI): Likewise. - (__GMPXX_TMPQ_SI): Likewise. - * tests/cxx/t-ops2.cc: test converting 0 to stack mpq_t. - -2011-03-15 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h (__GMPXX_TMPQ_UI): New macro. - (__GMPXX_TMPQ_SI): New macro. - (struct __gmp_binary_multiplies): Rewrite, using the new macros. - (struct __gmp_binary_divides): Likewise. - - * gmpxx.h (__GMPZ_ULI_LIMBS): Rewrite. - * tests/cxx/t-ops2.cc: test converting ULONG_MIN to stack mpq_t. - -2011-03-15 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/toom_interpolate_16pts.c: Remove ambiguity. - -2011-03-14 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_mul): Set tuning min size considering print skew. - - * doc/gmp.texi: Make reference to "Formatted I/O" chapters from type - specific I/O sections. - - * mpn/alpha/add_n.asm: Add _nc entry point. - * mpn/alpha/sub_n.asm: Likewise. - * mpn/mips64/add_n.asm: Likewise. - * mpn/mips64/sub_n.asm: Likewise. - * mpn/sparc64/ultrasparc1234/add_n.asm: Likewise. - * mpn/sparc64/ultrasparc1234/sub_n: Likewise. - -2011-03-13 Marc Glisse <marc.glisse@inria.fr> - - * tests/cxx/t-ops2.cc: New file. - * tests/cxx/Makefile.am: Added t-ops2. - -2011-03-13 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/toom32_mul.c (mpn_toom32_mul): Make 'hi' be limb-sized - for better code. - - * gmp-impl.h (MPN_IORD_U): Handle x86_64 as well as x86_32. Generate - no code for incrementing by constant 0. - -2011-03-12 Marc Glisse <marc.glisse@inria.fr> - - * gmpxx.h: Rename __GMPXX_TMP_* to __GMPXX_TMPZ_*. Use in more places. - -2011-03-12 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/rshift.asm: Accept/return values correctly also for - 32-bit ABI. - * mpn/powerpc64/lshift.asm: Likewise. - - * tune/powerpc.asm: Use powerpc syntax, not power syntax. - - * tune/common.c (speed_udiv_qrnnd_preinv1, etc): Remove. - * tune/speed.c (routine): Remove udiv_qrnnd_preinv1, etc. - -2011-03-12 Marc Glisse <marc.glisse@inria.fr> - - * tests/cxx/t-istream.cc: Restrict mpq test in t-istream -s. - - * gmpxx.h: Remove leftover #undefs. - -2011-03-11 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (udiv_qrnnd_preinv1, udiv_qrnnd_preinv2, - udiv_qrnnd_preinv2gen): Remove obsolete macros. - (udiv_qrnnd_preinv): New name for udiv_qrnnd_preinv3. - -2011-03-11 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-impl.h: Declare many mpn_{sub,add}lsh*_n_ip[12] functions/macros. - * mpn/generic/toom_interpolate_5pts.c: Use mpn_sublsh1_n_ip1. - - * tests/devel/try.c: Tests for {add,sub}lsh*_n_ip[12]. - * tests/refmpn.c: New reference for mpn_{add,sub}lsh*_n_ip[12]. - * tests/tests.h: Declarations for reference functions above. - - * tune/common.c: New speed_mpn_{add,sub}lsh*_n_ip[12] functions. - * tune/speed.h: Prototypes for functions above. - * tune/speed.c: Support for mpn_{add,sub}lsh*_n_ip[12]. - - * mpn/x86/k7/sublsh1_n.asm: Replaced generic sublsh1 code with faster _ip1. - * mpn/x86/atom/sublsh1_n.asm: Changed PROLOGUE accordingly. - - * configure.in: Define HAVE_NATIVE_mpn_addlsh*_n*_ip[12]. - * mpn/asm-defs.m4: Declare mpn_addlsh*_n*_ip[12]. - -2011-03-10 Marc Glisse <marc.glisse@inria.fr> - - * tests/cxx/t-istream.cc: Explicit conversion to streampos. - -2011-03-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/atom/sse2/mul_basecase.asm: Suppress wind-down rp updates. - - * Move new aorrlsh_n.asm to new k8 dir. Revert - mpn/x86_64/aorrlsh_n.asm. - * configure.in: Setup path for new k8 directory. - -2011-03-10 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/pentium4/sse2/bdiv_dbm1c.asm: New file, was in atom. - * mpn/x86/atom/sse2/bdiv_dbm1c.asm: Grab file above. - -2011-03-09 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/aorrlsh_n.asm: Complete rewrite. - - * mpn/x86_64/core2/aorrlsh_n.asm: New file, grabbing another asm file. - -2011-03-09 Marc Glisse <marc.glisse@inria.fr> - - * tests/cxx/t-ostream.cc: Use bool instead of int. - * tests/cxx/t-istream.cc: Likewise. - * tests/cxx/t-misc.cc: Likewise. - - * cxx/ismpznw.cc: Don't clear eofbit. - * cxx/ismpq.cc: Likewise. - * cxx/ismpf.cc: Likewise. - * tests/cxx/t-istream.cc: Test accordingly. - -2011-03-09 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/atom/sse2/bdiv_dbm1c.asm: New file. - -2011-03-09 Marc Glisse <marc.glisse@inria.fr> - - * doc/gmp.texi: Remove void return type from constructors. Document - explicit constructors. Document mpf_class::mpf_class(mpf_t). - -2011-03-07 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/atom/sse2/sqr_basecase.asm: Postponed pushes. Cleaned - outer loop exit. - -2011-03-07 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/gcd_1.asm: Workaround Oracle assembler bug. - - * mpn/x86/atom/sse2/mul_basecase.asm: Replace addmul_1 loops. - Tweak outer loop rp updates. - -2011-03-06 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/atom/sse2/sqr_basecase.asm: New file. - -2011-03-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/bdiv_dbm1c.asm: Write proper feed-in code. - -2011-03-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/addmul_2.asm: Rewrite for linear performance. - -2011-03-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mod_1_1.c (add_mssaaaa): Canonicalise layout. Add arm - variant. Enable sparc64 code and powerpc code (the latter for 32-bit - and 64-bit). - - * mpn/generic/sqrtrem.c (mpn_dc_sqrtrem): Use mpn_addlsh1_n. - - * gmp-impl.h (mpn_addlsh_nc, mpn_rsblsh_nc): Declare. - * mpn/asm-defs.m4: Likewise. - - * mpn/x86_64/coreisbr/aorrlsh_n.asm: Disable mpn_rsblsh_n due to - carry-in issues. - * mpn/x86_64/coreinhm/aorrlsh_n.asm: Likewise. - * mpn/x86_64/coreisbr/aorrlsh2_n.asm: Likewise. - -2011-03-03 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/mod_1_1.c (add_mssaaaa): For x86 and x86_64, treat m - as in output operand only. Added sparc32 implementation. Also - added #if:ed out attempts at sparc64 and powerpc64. - - * tune/tuneup.c (tune_mod_1): Record result of MOD_1_1P_METHOD - measurement for use by mpn_mod_1_tune. And omit measurement if - mpn_mod_1_1p is native assembly code. - - * mpn/generic/mod_1.c (mpn_mod_1_1p) [TUNE_PROGRAM_BUILD]: Macro - to check mod_1_1p_method and call the right function. - (mpn_mod_1_1p_cps) [TUNE_PROGRAM_BUILD]: Likewise. - - * gmp-impl.h (MOD_1_1P_METHOD) [TUNE_PROGRAM_BUILD]: Define macro. - (mod_1_1p_method) [TUNE_PROGRAM_BUILD]: Declare variable. - -2011-03-02 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/coreinhm/aorrlsh_n.asm: New file. - * mpn/x86_64/coreisbr/aorrlsh_n.asm: New file. - -2011-03-01 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86_64/mod_1_1.asm (mpn_mod_1_1p_cps): Eliminated a neg and - two mov instructions. - - * mpn/x86/k7/mod_1_1.asm (mpn_mod_1_1p_cps): Simplified - computation, analogous to recent x86_64/mod_1_1.asm changes. - (mpn_mod_1_1p): Corresponding changes. Don't shift b. - - * mpn/sparc64/mod_1_4.c (mpn_mod_1s_4p_cps): Use udiv_rnnd_preinv - rather than udiv_rnd_preinv. - (mpn_mod_1s_4p): Likewise. - -2011-03-01 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/pentium4/sse2/mul_1.asm: Swap entry insns to share more code - between entry points. - * mpn/x86/pentium4/sse2/addmul_1.asm: Likewise. - - * mpz/divegcd.c: Rewrite, as per Marc Glisse's suggestion. Also fix - problem with passing a longlong limb to a _ui function. - - * gmp-impl.h (udiv_qrnnd_preinv3): Cast truth value to mask's type. - (udiv_rnnd_preinv): Likewise. - * mpn/generic/mod_1_1.c (mpn_mod_1_1p): Likewise. - -2011-02-28 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/mod_1_1.c (add_mssaaaa): Typo fix, define - add_mssaaaa, not add_sssaaaa. - - * tune/tuneup.c (tune_mod_1): Measure mpn_mod_1_1_1 and - mpn_mod_1_1_2, to set MOD_1_1P_METHOD. - - * tune/speed.c (routine): Added mpn_mod_1_1_1 and mpn_mod_1_1_2. - - * tune/speed.h: Declare speed_mpn_mod_1_1_1, speed_mpn_mod_1_1_2, - mpn_mod_1_1p_1, mpn_mod_1_1p_2, mpn_mod_1_1p_cps_1, and - mpn_mod_1_1p_cps_2. - - * tune/common.c (speed_mpn_mod_1_1_1): New function. - (speed_mpn_mod_1_1_2): New function. - - * tune/Makefile.am (libspeed_la_SOURCES): Added mod_1_1-1.c - mod_1_1-2.c. - - * tune/mod_1_1-1.c: New file. - * tune/mod_1_1-2.c: New file. - - * mpn/generic/mod_1_1.c: Implemented an algorithm with fewer - multiplications, configured via MOD_1_1P_METHOD. - - * mpn/x86_64/mod_1_1.asm (mpn_mod_1_1p_cps): Simplified - computation of B2modb, use B^2 mod (normalized b). - (mpn_mod_1_1p): Corresponding changes. Don't shift b. - - * mpn/generic/mod_1_1.c (mpn_mod_1_1p_cps): Use udiv_rnnd_preinv rather - than udiv_rnd_preinv. - (mpn_mod_1_1p): Likewise. - * mpn/generic/mod_1_4.c: Analogous changes. - * mpn/generic/mod_1_3.c: Analogous changes. - * mpn/generic/mod_1_2.c: Analogous changes. - * mpn/generic/mod_1.c: Analogous changes. - * mpn/generic/pre_mod_1.c: Analogous changes. - - * gmp-impl.h (udiv_qrnnd_preinv3): Eliminated unpredictable branch - using masking logic. Further optimization of the nl == constant 0 - case, similar to udiv_rnd_preinv. - (udiv_rnnd_preinv): Likewise. - (udiv_rnd_preinv): Deleted, use udiv_rnnd_preinv with nl == 0 - instead. - - * tests/mpn/t-divrem_1.c (check_data): Added testcase to exercise - the nl == constant 0 special case in udiv_qrnnd_preinv3. - -2011-02-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/rootrem.c (mpn_rootrem): Combine two similar scalar - divisions. Misc minor cleanup. - - * mpn/x86/atom/sse2/aorsmul_1.asm: Shorten software pipeline. - - * mpn/x86/atom/mul_basecase.asm: Remove file no longer used. - - * mpn/generic/rootrem.c (mpn_rootrem_internal): Delay O(log(U)) - allocations until they are known to be needed. - -2011-02-27 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/atom/sse2/mul_1.asm: New code. - -2011-02-27 Niels Möller <nisse@lysator.liu.se> - - * gmp-impl.h (udiv_rnnd_preinv): New macro. - -2011-02-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/atom/sse2/mul_basecase.asm: New file. - -2011-02-26 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/atom/sse2/aorsmul_1.asm: Optimise non-loop code. - -2011-02-26 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/aorsmul_1.asm: Add MULFUNC_PROLOGUE. - * mpn/m68k/mc68020/aorsmul_1.asm: Likewise. - -2011-02-25 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/atom/sse2/aorsmul_1.asm: New file. - * mpn/x86/atom/aorsmul_1.asm: File removed. - -2011-02-25 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/atom/sse2/divrem_1.asm: New file (was in x86/atom). - * mpn/x86/atom/sse2/mul_1.asm: Likewise. - * mpn/x86/atom/sse2/popcount.asm: Likewise. - * mpn/x86/atom/divrem_1.asm: ReMoved (in sse2/ now). - * mpn/x86/atom/mul_1.asm: Likewise. - * mpn/x86/atom/popcount.asm: Likewise. - - * configure.in: Set up mmx path for atom. - * mpn/x86/atom/mmx/copyd.asm: New file (was in x86/atom). - * mpn/x86/atom/mmx/copyi.asm: Likewise. - * mpn/x86/atom/mmx/hamdist.asm: Likewise. - * mpn/x86/atom/copyd.asm: ReMoved (in mmx/ now). - * mpn/x86/atom/copyi.asm: Likewise. - * mpn/x86/atom/hamdist.asm: Likewise. - -2011-02-24 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/atom/sse2/mod_1_1.asm: New file. - * mpn/x86/atom/sse2/mod_1_4.asm: New file. - * configure.in: Set up sse2 path for atom. - - * mpn/x86/p6/sse2/mod_1_1.asm: New file. - * mpn/x86/p6/sse2/mod_1_4.asm: Fix typo in MULFUNC_PROLOGUE. - -2011-02-24 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86/k7/mod_1_1.asm (mpn_mod_1_1p): Rewrite using the same - algorithm as the x86_64 version. - -2011-02-23 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/atom/logops_n.asm: New file (same loop as aors_n). - -2011-02-23 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86_64/mod_1_1.asm (mpn_mod_1_1p): Shaved off one - instruction and one register in the inner loop. Rearranged - registers slightly, and no longer needs the callee-save register - %r12. - -2011-02-22 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Export SHLD_SLOW and SHRD_SLOW to config.m4, also - fixing typo in exporting code. - - * mpn/x86_64/nano/gmp-mparam.h (SHLD_SLOW, SHRD_SLOW): Define. - * mpn/x86_64/atom/gmp-mparam.h (SHLD_SLOW, SHRD_SLOW): Define. - -2011-02-22 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86_64/mod_1_1.asm (mpn_mod_1_1p): Rewrite. - -2011-02-22 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/atom/lshiftc.asm: New file (a copy of lshift.asm with a handful of neg added). - -2011-02-21 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/aors_n.asm: Move _nc entry to after main code. Align loop - and _n entry for claimed performance. Normalise mnemonic usage. - - * mpn/x86/atom/aorrlsh1_n.asm: New file (code from rsblsh_1, slightly - slower for addlsh_1 for large operands, but much faster for small). - * mpn/x86/atom/addlsh1_n.asm: Remove. - * mpn/x86/atom/rsblsh1_n.asm: Remove. - -2011-02-20 Marc Glisse <marc.glisse@inria.fr> - - * mpq/aors.c: Rewrite to remove redundant division. - -2011-02-20 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/atom/lshift.asm: New file. - * mpn/x86/atom/rshift.asm: Normalise mnemonic usage. - - * gmp-impl.h (mpn_divexact_by7): Relax inclusion condition. - - * mpz/divegcd.c (mpz_divexact_by5): New conditionally enabled function. - (mpz_divexact_by3): Wrap inside appropriate conditions. - (mpz_divexact_gcd): Rewrite. - - * mpn/x86/bdiv_dbm1c.asm: Save a jump. - -2011-02-20 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/atom/aorslshC_n.asm: New file. - * mpn/x86/atom/sublsh2_n.asm: New file. - - * mpn/x86/atom/aors_n.asm: New code. - * mpn/x86/atom/rshift.asm: Atom64 code adapted to 32-bit. - * mpn/x86/atom/lshift.asm: Likewise. - -2011-02-19 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/atom/rsh1aors_n.asm: New file. - - * mpn/x86_64/atom/lshift.asm: New file. - * mpn/x86_64/atom/rshift.asm: New file. - * mpn/x86_64/atom/lshiftc.asm: New file. - -2011-02-17 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/atom/aorsmul_1.asm: Small improvements for small sizes. - * mpn/x86/atom/aorrlshC_n.asm: Tiny size improvements. - -2011-02-16 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Fix k8/k10 32-bit path setup problem. - -2011-02-16 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/atom/aorsmul_1.asm: Revive an old k7/aorsmul. - -2011-02-14 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-impl.h (mpn_sublsh_n): Declare. - * mpn/asm-defs.m4: Likewise. - - * mpn/x86/atom/aorrlshC_n.asm: New file (was k7). - * mpn/x86/k7/aorrlshC_n.asm: ReMoved. - * mpn/x86/atom/aorrlsh2_n.asm: Grab atom/aorrlshC_n.asm. - * mpn/x86/atom/rsblsh1_n.asm: Grab atom/aorrlshC_n.asm. - -2011-02-13 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/atom/aorrlsh2_n.asm: New file. - -2011-02-12 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/aorrlsh_n.asm: Minor tweaks, update c/l numbers. - - * mpn/x86_64/atom/sublsh1_n.asm: New file. - - * mpn/x86_64/atom/aorrlsh1_n.asm: New file. - -2011-02-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/mod_1_1.asm: Fix Darwin syntax issues. - -2011-02-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/mod_1_4.asm: Tune away a cycle for 970. - -2011-02-11 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/k7/addlsh1_n.asm: Faster core loop (Torbjorn's). - - * configure.in: Add HAVE_NATIVE_{add,sub,rsb}lsh{,1,2}_nc. - * tests/tests.h: refmpn_{add,sub,rsb}lsh{,1,2}_nc prototypes. - * tests/refmpn.c: New refmpn_{add,sub,rsb}lsh{,1,2}_nc. - * tests/devel/try.c: Tests for mpn_{add,sub,rsb}lsh{,1,2}_nc. - - * mpn/x86/k7/aorrlshC_n.asm: New file. - * mpn/x86/atom/aorrlsh2_n.asm: Grab k7/aorrlshC_n.asm. - * mpn/x86/atom/rsblsh1_n.asm: Grab k7/aorrlshC_n.asm. - -2011-02-06 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/k7/addlsh1_n.asm: New file. - * mpn/x86/k7/sublsh1_n.asm: New file. - * mpn/x86/atom/addlsh1_n.asm: Grab k7/addlsh1_n.asm. - * mpn/x86/atom/sublsh1_n.asm: Grab k7/sublsh1_n.asm. - -2011-02-05 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (mpn_addlsh1_nc, mpn_addlsh2_nc, mpn_sublsh1_nc, - mpn_sublsh2_nc, mpn_rsblsh1_nc, mpn_rsblsh2_nc): Declare. - * mpn/asm-defs.m4: Likewise. - - * mpn/x86_64/coreisbr/aorrlshC_n.asm: New file. - * mpn/x86_64/coreisbr/aorrlsh1_n.asm: New file. - * mpn/x86_64/coreisbr/aorrlsh2_n.asm: New file. - - * mpn/x86_64/coreisbr/aors_n.asm: New file, based on old - atom/aors_n.asm. - * mpn/x86_64/atom/aors_n.asm: Grab coreisbr/aors_n.asm. - -2011-02-05 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-impl.h (mpn_toom6_mul_n_itch): Handle threshold == zero. - (mpn_toom8_mul_n_itch): Likewise. - (MPN_TOOM6H_MIN, MPN_TOOM8H_MIN): Define. - * tests/mpn/t-toom6h.c: No tests below MPN_TOOM6H_MIN. - * tests/mpn/t-toom8h.c: No tests below MPN_TOOM8H_MIN. - - * mpz/lucnum_ui.c: Use mpn_addlsh2_n. - -2011-02-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/atom/rsh1aors_n.asm: Add a MULFUNC_PROLOGUE. - * mpn/x86_64/atom/dive_1.asm: Likewise. - * mpn/x86_64/atom/popcount.asm: Likewise. - * mpn/x86_64/core2/popcount.asm: Likewise. - * mpn/x86_64/coreinhm/hamdist.asm: Likewise. - * mpn/x86_64/coreinhm/popcount.asm: Likewise. - * mpn/x86_64/nano/popcount.asm: Likewise. - * mpn/x86_64/pentium4/popcount.asm: Likewise. - -2011-02-04 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/atom/mode1o.asm: New file, grabbing another asm file. - * mpn/x86/atom/mul_1.asm: Claim mul_1c. - -2011-02-02 Niels Möller <nisse@lysator.liu.se> - - * tune/speed.h (SPEED_ROUTINE_MPN_HGCD_CALL): Fixed one - speed_operand_dst call. - -2011-02-01 Torbjorn Granlund <tege@gmplib.org> - - * tune/speed.h (struct speed_params): Allow for 4 dst operands. - * tune/common.c (TOLERANCE): Increase from 0.5% to 1%. - - * tune/speed.h (SPEED_ROUTINE_MPN_HGCD_CALL): New macro, mainly based - on old speed_mpn_hgcd, but with speed_operand_src calls (as suggested - by Niels). - * tune/common.c (speed_mpn_hgcd): Invoke SPEED_ROUTINE_MPN_HGCD_CALL. - (speed_mpn_hgcd_lehmer): Likewise. - - * configure.in: Set up 32-bit x86 paths for new corei* CPU strings. - -2011-01-31 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Recognise new Intel processors. - - * config.guess: Support 'coreinhm' and 'coreisbr'. - * config.sub: Likewise. - * configure.in: Likewise. - -2011-01-30 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Support x86/geode. - * mpn/x86/geode/gmp-mparam.h: New file. - -2011-01-29 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/atom/addlsh1_n.asm: Removed. - * mpn/x86/atom/rsh1add_n.asm: Likewise. - -2011-01-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/alpha/ev6/slot.pl: Add some missing insns. - -2011-01-28 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/atom/copyd.asm: New file, grabbing another asm file. - * mpn/x86/atom/copyi.asm: Likewise. - * mpn/x86/atom/aors_n.asm: Likewise. - * mpn/x86/atom/addlsh1_n.asm: Likewise. - * mpn/x86/atom/aorsmul_1.asm: Likewise. - * mpn/x86/atom/bdiv_q_1.asm: Likewise. - * mpn/x86/atom/dive_1.asm: Likewise. - * mpn/x86/atom/divrem_1.asm: Likewise. - * mpn/x86/atom/hamdist.asm: Likewise. - * mpn/x86/atom/logops_n.asm: Likewise. - * mpn/x86/atom/lshift.asm: Likewise. - * mpn/x86/atom/mod_34lsub1.asm: Likewise. - * mpn/x86/atom/mul_1.asm: Likewise. - * mpn/x86/atom/mul_basecase.asm: Likewise. - * mpn/x86/atom/popcount.asm: Likewise. - * mpn/x86/atom/rsh1add_n.asm: Likewise. - * mpn/x86/atom/rshift.asm: Likewise. - * mpn/x86/atom/sqr_basecase.asm: Likewise. - -2011-01-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/atom/rsh1aors_n.asm: New file, grabbing another asm file. - * mpn/x86_64/atom/popcount.asm: Likewise. - * mpn/x86_64/atom/dive_1.asm: Likewise. - * mpn/x86_64/nano/popcount.asm: Likewise. - -2011-01-26 Torbjorn Granlund <tege@gmplib.org> - - * mpn/alpha/invert_limb.asm: Complete rewrite. - -2011-01-25 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc32/invert_limb.asm: New file. - -2011-01-25 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/pentium4/sse2/bdiv_q_1.asm: New file. - * mpn/x86/k7/bdiv_q_1.asm: New file. - -2011-01-24 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_mul_n, tune_sqr): Loop, re-measuring thresholds - until no tiny ranges remain. - -2011-01-23 Torbjorn Granlund <tege@gmplib.org> - - * mpn/ia64/mul_2.asm: Tweak to 1.5 c/l, less overhead. - - * mpn/ia64/addmul_2.asm: Rewrite, adding mpn_addmul_2s entry point. - -2011-01-22 Torbjorn Granlund <tege@gmplib.org> - - * mpn/ia64/aors_n.asm: Fix some incorrect bundle types. - - * mpn/ia64/sqr_diagonal.asm: Remove. - - * mpn/ia64/sqr_diag_addlsh1.asm: New file. - - * mpn/ia64/ia64-defs.m4: Define some shorter convenience mnemonics. - - * mpn/generic/sqr_basecase.c (MPN_SQR_DIAG_ADDLSH1): New macro, using - new function mpn_sqr_diag_addlsh1 or defining its equivalent. - - * gmp-impl.h (mpn_addmul_2s): Declare. - (mpn_sqr_diag_addlsh1): Declare. - * mpn/asm-defs.m4 (define_mpn): Add addmul_2s and sqr_diag_addlsh1. - - * configure.in: Add HAVE_NATIVEs for mpn_sqr_diag_addlsh1 and - mpn_addmul_2s. - (gmp_mpn_functions_optional): Add sqr_diag_addlsh1. - -2011-01-21 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/devel/try.c: Initial support for mpn_bdiv_q_1. - * mpn/x86/pentium/bdiv_q_1.asm: New file. - * mpn/x86/p6/bdiv_q_1.asm: New file. - -2011-01-20 Torbjorn Granlund <tege@gmplib.org> - - * tune/speed.c (run_gnuplot): Update to current gnuplot syntax. - - * mpn/powerpc64/mode64/aorsmul_1.asm: Trim away 0.5 c/l for submul_1 - for POWER5. - -2011-01-19 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/core2/rsh1aors_n.asm: New file. - -2011-01-18 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/x86/bdiv_q_1.asm: New file (same core alg. as dive_1). - -2011-01-15 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/divexact.c: Avoid COPY if not needed. - -2011-01-14 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (struct cpuvec_t): Add field bmod_1_to_mod_1_threshold. - * configure.in (fat_thresholds): Add BMOD_1_TO_MOD_1_THRESHOLD. - -2011-01-13 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/mul.c: Remove redundant size computation. - -2011-01-08 Torbjorn Granlund <tege@gmplib.org> - - * tests/devel/try.c (types enum): Add TYPE_MUL_5 and TYPE_MUL_6. - (param_init): Support new types. - (choice_array): Support testing of mpn_mul_5 and mpn_mul_6. - (call): Support new routines. - - * tests/refmpn.c (refmpn_mul_5, refmpn_mul_6): New functions. - * tests/tests.h (refmpn_mul_5, refmpn_mul_6): Declare. - Remove parameter names from some other functions. - - * gmp-impl.h (mpn_mul_5, mpn_mul_6): Declare. - * mpn/asm-defs.m4: Likewise, also declare mpn_addmul_5, mpn_addmul_6, - mpn_addmul_7, and mpn_addmul_8. - - * configure.in (gmp_mpn_functions_optional): Add mul_5 and mul_6. - - * tune/speed.c (routine): Add measuring of mpn_mul_5 and mpn_mul_6. - * tune/common.c (speed_mpn_mul_5, speed_mpn_mul_6): New functions. - * tune/speed.h: Declare new functions. - -2011-01-03 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpz/aors.h: Remove #ifdef BERKELEY_MP, and cleanup. - * mpz/cmp.c: Likewise. - * mpz/gcd.c: Likewise. - * mpz/mul.c: Likewise. - * mpz/powm.c: Likewise. - * mpz/set.c: Likewise. - * mpz/sqrtrem.c: Likewise. - * mpz/tdiv_qr.c: Likewise. - -2010-12-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/minithres/gmp-mparam.h: Update with several recent thresholds. - -2010-12-19 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/k7/mod_1_1.asm: Canonicalise cmov forms. - * mpn/x86/k7/mod_1_4.asm: Likewise. - * mpn/x86/pentium4/sse2/mod_1_1.asm: Likewise. - * mpn/x86/pentium4/sse2/mod_1_4.asm: Likewise. - * mpn/x86_64/core2/divrem_1.asm: Likewise. - * mpn/x86_64/divrem_1.asm: Likewise. - * mpn/x86_64/mod_1_1.asm: Likewise. - * mpn/x86_64/mod_1_2.asm: Likewise. - * mpn/x86_64/mod_1_4.asm: Likewise. - - * mpn/x86/k7/gcd_1.asm: Rewrite. Remove slow 'div' loop. Call - mpn_mod_1 for operands with mode than BMOD_1_TO_MOD_1_THRESHOLD limbs. - Misc cleanups. - -2010-12-18 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/gcd_1.asm: Call mpn_mod_1 for operands with mode than - BMOD_1_TO_MOD_1_THRESHOLD limbs. - - * configure.in: Generalise code for putting THRESHOLDs in config.m4. - Add BMOD_1_TO_MOD_1_THRESHOLD to list. - - * mpn/x86_64/core2/divrem_1.asm: Tweak slightly, correct cycle counts. - - * mpn/x86_64/addmul_2.asm: Remove constant index. - * mpn/x86_64/lshiftc.asm: Likewise. - * mpn/x86_64/pentium4/lshift.asm: Likewise. - * mpn/x86_64/pentium4/lshiftc.asm: Likewise. - * mpn/x86_64/pentium4/rshift.asm: Likewise. - -2010-12-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/mod_34lsub1.asm: Complete rewrite. - * mpn/x86_64/pentium4/mod_34lsub1.asm: New file, old - mpn/x86_64/mod_34lsub1.asm. - -2010-12-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/vmx/popcount.asm: Rewrite to use vperm count table. - -2010-12-14 Torbjorn Granlund <tege@gmplib.org> - - * mp-h.in: Remove. - * configure.in: Remove mp-h.in from AC_OUTPUT invocation. - -2010-12-13 Torbjorn Granlund <tege@gmplib.org> - - * mpz/mod.c: Rewrite. - - * mpn/x86_64/corei/popcount.asm: New file. - * mpn/x86_64/corei/hamdist.asm: New file. - - * mpn/x86_64/k10/hamdist.asm: New file. - - * configure.in: Amend last change for lame /bin/sh. - -2010-12-12 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Comment out M4=m4-not-needed. - - * mpn/x86_64/k10/popcount.asm: New file. - * configure.in: Setup special path for k10 and later AMD CPUs. - Remove special x86_64'k8' path, since directory is non-existent. - -2010-12-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc32/ultrasparct1: New directory. - * mpn/sparc32/ultrasparct1/add_n.asm: New file. - * mpn/sparc32/ultrasparct1/sub_n.asm: New file. - * mpn/sparc32/ultrasparct1/mul_1.asm: New file. - * mpn/sparc32/ultrasparct1/addmul_1.asm: New file. - * mpn/sparc32/ultrasparct1/submul_1.asm: New file. - * mpn/sparc32/ultrasparct1/sqr_diagonal.asm: New file. - - * config.guess: Support Ultrasparc T2 and T3. - * config.sub: Likewise. - * configure.in: Likewise. - - * config.guess: Generalise BSD Sparc recognition by allowing any - caps (needed for OpenBSD which spells things innovatively). - -2010-12-01 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Match new AMD processors, allow finer distinctions - among old ones. - * acinclude.m4 (X86_64_PATTERN): Likewise. - * config.sub: Likewise. - * configure.in: Rudimentarily support new AMD processors. - - * configure.in (--enable_assembly): New option. - (target none-*-*): Disable, give error. - -2010-11-29 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/x86-defs.m4 (LEA): Support non-PIC code. - * mpn/x86/darwin.m4 (LEA): Likewise. - - * tests/amd64call.asm: Rewrite for code size, and to match calls and - returns. - - * tests/x86call.asm: Rewrite for code size, to support PIC, and to - match calls and returns. - * tests/x86check.c: Rewrite. - -2010-11-22 Torbjorn Granlund <tege@gmplib.org> - - * mpz/get_str.c: Make all bases either work or return an error. - * mpz/out_str.c: Likewise. - * mpq/get_str.c: Likewise. - * mpf/get_str.c: Likewise. - -2010-11-14 Torbjorn Granlund <tege@gmplib.org> - - * tests/misc/t-printf.c: Add explicit casts for type conversions. - * mpn/generic/toom62_mul.c: Likewise. - -2010-11-13 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/get_d.c: Misc cleanup. Fail with a syntax error for - non-IEEE fp formats. - - * tests/devel/try.c (malloc_region): Add explicit casts for type - conversions. - - * acinclude.m4 (GMP_ASM_RODATA): Make test code snippet C++ compatible. - (GMP_C_DOUBLE_FORMAT): Likewise. - (GMP_FUNC_VSNPRINTF): Likewise. - - * config.guess (x86): Make test C snippet C++ compatible. - -2010-11-12 Torbjorn Granlund <tege@gmplib.org> - - * Makefile.am: Remove mpbsd. - * configure.in: Remove mpbsd. - * doc/configuration: Remove mpbsd mentions. - * doc/gmp.texi: Remove mpbsd docs. - * tests/Makefile.am: Remove mpbsd. - * libmp.sym: Remove. - * mpbsd: Remove directory and files. - * tests/mpbsd: Remove directory and files. - -2010-11-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/atom/aors_n.asm: Don't rely on ZF after 'bt' insn. - Use 64-bit 'test' to support operands of 2^32 limbs and more. - - * rand: New directory, move rand*.c and randmt.h here. - * rand/Makefile.am: New file. - * Makefile.am (SUBDIRS): Add rand. - (RANDOM_OBJECTS): New variable. - (libgmp_la_SOURCES): Remove random objects. - (libgmp_la_DEPENDENCIES): Add RANDOM_OBJECTS. - * configure.in (AC_OUTPUT): Add rand/Makefile. - - * ansi2knr.1: File removed. - * ansi2knr.c: File removed. - -2010-11-10 Torbjorn Granlund <tege@gmplib.org> - - Make it possible to compile GMP with g++: - - * gmp-impl.h: Declare __gmp_digit_value_tab here. - * mpbsd/min.c: ...not here. - * mpbsd/xtom.c: ...nor here. - * mpf/set_str.c: ...nor here. - * mpz/inp_str.c: ...nor here. - * mpz/set_str.c: ...nor here. - - * mpn/generic/toom43_mul.c: Add casts for logical operations on enums. - * mpn/generic/toom44_mul.c: Likewise. - * mpn/generic/toom4_sqr.c: Likewise. - * mpn/generic/toom52_mul.c: Likewise. - * mpn/generic/toom53_mul.c: Likewise. - * mpn/generic/toom62_mul.c: Likewise. - - * mpz/clrbit.c: Clean up typing using MPZ_REALLOC. - * mpz/setbit.c: Likewise. - - * mpz/powm.c: Avoid variable name 'new'. - - * randlc2x.c: Add explicit casts for type conversions. - * tests/misc/t-printf.c: Likewise. - * tests/misc/t-scanf.c: Likewise. - * tests/misc.c: Likewise. - * tests/mpz/convert.c: Likewise. - * tests/refmpn.c: Likewise. - - * tests/tests.h: Unconditionally use <sstream> for now. - - * tests/memory.c: Include "tests.h. - - * mp_get_fns.c: Add a __GMP_NOTHROW for coherency with prototype. - * mp_set_fns.c: Likewise. - * mpf/cmp.c: Likewise. - * mpf/cmp_si.c: Likewise. - * mpf/cmp_ui.c: Likewise. - * mpf/fits_s.h: Likewise. - * mpf/fits_u.h: Likewise. - * mpf/get_dfl_prec.c: Likewise. - * mpf/get_prc.c: Likewise. - * mpf/get_si.c: Likewise. - * mpf/get_ui.c: Likewise. - * mpf/int_p.c: Likewise. - * mpf/set_dfl_prec.c: Likewise. - * mpf/set_prc_raw.c: Likewise. - * mpf/size.c: Likewise. - * mpf/swap.c: Likewise. - * mpq/equal.c: Likewise. - * mpq/swap.c: Likewise. - * mpz/cmp.c: Likewise. - * mpz/cmp_si.c: Likewise. - * mpz/cmp_ui.c: Likewise. - * mpz/cmpabs.c: Likewise. - * mpz/cmpabs_ui.c: Likewise. - * mpz/cong_2exp.c: Likewise. - * mpz/divis_2exp.c: Likewise. - * mpz/fits_s.h: Likewise. - * mpz/get_si.c: Likewise. - * mpz/hamdist.c: Likewise. - * mpz/scan0.c: Likewise. - * mpz/scan1.c: Likewise. - * mpz/sizeinbase.c: Likewise. - * mpz/swap.c: Likewise. - * mpz/tstbit.c: Likewise. - * tal-reent.c: Likewise. - -2010-11-09 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Get rid of K&R support. - * Makefile.am: Likewise. - * mpn/Makefile.am: Likewise. - * doc/configuration: Update docs wrt K&R support. - * doc/gmp.texi: Likewise. - - * configure.in (AC_INIT): Amend bug reporting address with manual - reference. - -2010-11-06 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: If cpuid says we have 32bit-only x86 but - configfsf.guess return x86_64, return the latter. - - * mpn/x86_64/aors_n.asm: Rewrite not to rely on ZF after 'bt' insn. - -2010-10-09 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/trialdiv.c: Update documentation. - -2010-10-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/gcd_1.asm: Use m4_lshift to avoid << operator. - * mpn/x86_64/aorrlshC_n.asm: Likewise. - * mpn/x86_64/pentium4/aorslshC_n.asm: Likewise. - * mpn/x86/k7/gcd_1.asm: Likewise. - -2010-08-20 Niels Möller <nisse@lysator.liu.se> - - Suggested by Ozkan Sezer: - * configure.in: If $M4 is already set in the environment, don't - touch it. Fixed the case that no assembler files are used, and - GMP_PROG_M4 is omitted. - -2010-08-08 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/fat/fat.c: Recognise many more processors. - -2010-06-30 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/divrem_2.asm: Tune. - -2010-06-19 Niels Möller <nisse@lysator.liu.se> - - * tune/speed.h (SPEED_ROUTINE_MPN_MOD_1_1): Pass normalized - divisor to the benchmarked function. - -2010-06-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/mod_1_1.asm (mpn_mod_1_1p_cps): Rewrite. - * mpn/x86_64/mod_1_2.asm (mpn_mod_1s_2p_cps): Rewrite. - * mpn/x86_64/mod_1_4.asm (mpn_mod_1s_4p_cps): Rewrite. - - * gmp-impl.h (udiv_rnd_preinv): Simplify. - - * mpn/x86/k7/mod_1_1.asm: New file. - * mpn/x86/pentium4/sse2/mod_1_1.asm (mpn_mod_1_1p_cps): Rewrite. - * mpn/x86/k7/mod_1_4.asm (mpn_mod_1s_4p_cps): Rewrite. - * mpn/x86/pentium4/sse2/mod_1_4.asm (mpn_mod_1s_4p_cps): Rewrite. - - * mpn/generic/mod_1_1.c (mpn_mod_1_1p_cps): Store results as they are - computed. - * mpn/generic/mod_1_2.c (mpn_mod_1s_2p_cps): Likewise. - * mpn/generic/mod_1_4.c (mpn_mod_1s_4p_cps): Likewise. - - * mpn/x86/k7/invert_limb.asm: Moved from mpn/x86/invert_limb.asm. - -2010-06-15 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/Makefile.am (check_PROGRAMS): Added t-mod_1. - * tests/mpn/t-mod_1.c: New file. - -2010-05-25 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mu_div_qr.c (mpn_preinv_mu_div_qr_itch): Trim out space - for inverse, since that is passed in already. - -2010-05-24 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mu_div_qr.c (mpn_preinv_mu_div_qr_itch): New function. - * gmp-impl.h: Declare it. - * tune/common.c (speed_mpn_mupi_div_qr): Use new itch function. - * tune/speed.h (SPEED_ROUTINE_MPN_MUPI_DIV_QR): Pass parameters right - for new itch function. - - * mpn/powerpc32/lshiftc.asm: New file. - -2010-05-22 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_mod_1): Revert to version of 2010-05-06. - -2010-05-17 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (ia64): Get 32-bit sizeof test right. - - * tune/tuneup.c (tune_mod_1): Undo unintensional change to tuning of - PREINV_MOD_1_TO_MOD_1_THRESHOLD. - -2010-05-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64/mod_1.c: Rewrite. - * mpn/sparc64/sparc64.h (umul_ppmm_s): New macro. - * mpn/sparc64/mod_1_4.c: New file. - - * mpn/generic/divrem_1.c: Minor cleanup. - * mpn/generic/mod_1.c: Likewise. - * mpn/generic/mod_1_1.c: Likewise. - * mpn/generic/mod_1_2.c: Likewise. - * mpn/generic/mod_1_3.c: Likewise. - * mpn/generic/mod_1_4.c: Likewise. - - * configure.in (ia64-hpux): Do sizeof tests for 32-bit and 64-bit ABI. - - * tune/tuneup.c (tune_mod_1): Completely finish MOD_1_N tuning before - tuning MOD_1U_TO_MOD_1_1_THRESHOLD. - -2010-05-14 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/redc_2.c: Use asm code just for GNU C. - -2010-05-13 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64/ultrasparc1234: New directory. Move all code that uses - floating-point into this directory. - * configure.in: Point to ultrasparc1234 for appropriate CPUs. - - * mpn/sparc64/ultrasparct1/add_n.asm: New file. - * mpn/sparc64/ultrasparct1/addlsh2_n.asm: New file. - * mpn/sparc64/ultrasparct1/addmul_1.asm: New file. - * mpn/sparc64/ultrasparct1/lshift.asm: New file. - * mpn/sparc64/ultrasparct1/mul_1.asm: New file. - * mpn/sparc64/ultrasparct1/rsblsh2_n.asm: New file. - * mpn/sparc64/ultrasparct1/rshift.asm: New file. - * mpn/sparc64/ultrasparct1/sublsh1_n.asm: New file. - * mpn/sparc64/ultrasparct1/sublshC_n.asm: New file. - * mpn/sparc64/ultrasparct1/addlsh1_n.asm: New file. - * mpn/sparc64/ultrasparct1/addlshC_n.asm: New file. - * mpn/sparc64/ultrasparct1/lshiftc.asm: New file. - * mpn/sparc64/ultrasparct1/rsblsh1_n.asm: New file. - * mpn/sparc64/ultrasparct1/rsblshC_n.asm: New file. - * mpn/sparc64/ultrasparct1/sub_n.asm: New file. - * mpn/sparc64/ultrasparct1/sublsh2_n.asm: New file. - * mpn/sparc64/ultrasparct1/submul_1.asm: New file. - * mpn/sparc64/ultrasparct1/gmp-mparam.h: New file. - - * configure.in: Give ultrasparct1 and ultrasparct2 special code path. - - * mpn/x86_64/pentium4/gmp-mparam.h: Disable mpn_addlsh_n, mpn_rsblsh_n. - -2010-05-12 Niels Möller <nisse@lysator.liu.se> - - * mpz/jacobi.c (mpz_jacobi): Fixed off-by-one error in use of - scratch space. - - * tune/common.c (speed_mpz_powm_sec): New function. - * tune/speed.h: Declare speed_mpz_powm_sec. - * tune/speed.c (routine): Added speed_mpz_powm_sec. - - * tune/common.c (speed_mpn_addlsh_n, speed_mpn_sublsh_n) - (speed_mpn_rsblsh_n): New functions. - * tune/speed.h: Declare new functions. - * tune/speed.c (routine): Add new functions. - -2010-05-12 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/mod_1_4.asm: Tune for more processors. - - * mpn/x86_64/pentium4/lshiftc.asm: New file. - -2010-05-11 Niels Möller <nisse@lysator.liu.se> - - * mpz/jacobi.c (mpz_jacobi): Deleted old implementation. - Reorganized new implementation, to handle small inputs efficiently. - - * tests/mpz/t-jac.c (check_large_quotients): Reduced test sizes. - (check_data): One more input pair related to a fixed bug. - (main): Enable check_large_quotients. - -2010-05-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/aorrlsh2_n.asm: Fix typo. - -2010-05-09 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/aorrlshC_n.asm: New file based on aorrlsh2_n.asm. - * mpn/x86_64/aorrlsh2_n.asm: Now just include aorrlshC_n.asm. - * mpn/x86_64/core2/aorrlsh1_n.asm: New file, include ../aorrlshC_n.asm. - * mpn/x86_64/core2/aorrlsh2_n.asm: Likewise. - - * mpn/x86_64/core2/sublshC_n.asm: New file based on aorslsh1_n.asm. - * mpn/x86_64/core2/aorslsh1_n.asm: Remove. - * mpn/x86_64/core2/sublsh1_n.asm: Just include sublshC_n.asm. - * mpn/x86_64/core2/sublsh2_n.asm: Likewise. - -2010-05-08 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/atom/gmp-mparam.h: Disable mpn_rsh1add_n, mpn_rsh1sub_n. - - * mpn/x86_64/pentium4/aorslshC_n.asm: New file based on aorslsh1_n.asm. - * mpn/x86_64/pentium4/aorslsh1_n.asm: Now just include aorslshC_n.asm. - * mpn/x86_64/pentium4/aorslsh2_n.asm: New file. - -2010-05-07 Torbjorn Granlund <tege@gmplib.org> - - * mpn/sparc64: Support operands of >= 2^32 limbs. - - * mpn/sparc64/lshiftc.asm: New file. - - * mpn/ia64/divrem_2.asm: Complete rewrite. - -2010-05-06 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (all): Don't call tune_divrem_2. - - * mpn/generic/divrem_2.c: Complete rewrite. - - * tune/tuneup.c (tune_mod_1): Fix typo. - -2010-05-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/mod_1_1.asm (mpn_mod_1_1p): Use macro register names. - (mpn_mod_1_1p_cps): Rewrite. - - * mpn/generic/mod_1_1.c (mpn_mod_1_1p_cps): Micro-optimise. - - * longlong.h: Undo 2009-03-01 change for powerpc64, it gives poor code. - - * mpn/x86/pentium4/sse2/mod_1_1.asm: New file. - - * mpn/powerpc64/mode64/mod_1_1.asm: New file. - - * tune/tuneup.c (tune_mod_1): Use more typical divisor, for the benefit - of machines with early-out multipliers. - -2010-05-04 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_mod_1): Fix typo. - - * mpn/generic/mod_1_1.c: Undo last change. - * mpn/x86_64/mod_1_1.asm: Likewise. - -2010-05-03 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/jacobi_lehmer.c (jacobi_hook): New function. - (mpn_jacobi_subdiv_step): Deleted function. - (mpn_jacobi_lehmer): Use general mpn_gcd_subdiv_step. - - * mpn/generic/gcd_subdiv_step.c (mpn_gcd_subdiv_step): Reorganized - to use a single hook function. - * mpn/generic/gcdext.c (mpn_gcdext): Adapted to new hook - interface. - * mpn/generic/gcdext_lehmer.c (mpn_gcdext_hook): New unified hook - function. - * mpn/generic/gcd.c (gcd_hook): Renamed from gcd_done, and adapted - to new hook interface. - * gmp-impl.h (gcd_subdiv_step_hook): New typedef, now a function - type, not a struct. - (mpn_gcdext_hook): Declare. - -2010-05-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mod_1_1.c: Avoid multiply for 2 limb feed-in. - * mpn/generic/mod_1_2.c: Likewise. - * mpn/generic/mod_1_3.c: Likewise. - * mpn/generic/mod_1_4.c: Likewise. - * mpn/x86_64/mod_1_1.asm: Likewise. - * mpn/x86_64/mod_1_2.asm: Likewise. - * mpn/x86_64/mod_1_4.asm: Likewise. - * mpn/x86/k7/mod_1_4.asm: Likewise. - * mpn/x86/pentium4/sse2/mod_1_4.asm: Likewise. - * mpn/alpha/ev6/mod_1_4.asm: Likewise. - - * tune/tuneup.c (tune_mod_1): Measure MOD_1_1_TO_MOD_1_2_THRESHOLD and - MOD_1_2_TO_MOD_1_4_THRESHOLD before MOD_1U_TO_MOD_1_1_THRESHOLD for - correctness. - - * mpn/powerpc64/sqr_diagonal.asm: Complete rewrite. - - * mpn/powerpc64/mode64/mod_1_4.asm: New file. - -2010-05-02 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Recognise power7. - - * configure.in: Major overhaul of powerpc support. - - * mpn/powerpc64/p6/lshift.asm: New file. - * mpn/powerpc64/p6/lshiftc.asm: Likewise. - * mpn/powerpc64/p6/rshift.asm: Likewise. - -2010-04-30 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (powerpc64): Support CPU specific mode-less subdirs. - - * mpn/powerpc64/aix.m4 (PROLOGUE_cpu): Use "named csect" making - requested alignment actually honoured. - -2010-04-30 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/jacobi_lehmer.c (mpn_jacobi_2): Fixed handling of - the case bl == 1. Fixed missing application of reciprocity. - -2010-04-29 Niels Möller <nisse@lysator.liu.se> - - * configure.in (gmp_mpn_functions): Deleted gcdext_subdiv_step. - - * mpn/generic/gcdext.c (mpn_gcdext): Use new generalized - mpn_gcd_subdiv_step. - - * mpn/generic/gcdext_lehmer.c (gcdext_update): New function. - (gcdext_done): New function. - (gcdext_hook): New const hook struct. - (mpn_gcdext_lehmer_n): Use new generalized mpn_gcd_subdiv_step. - - * mpn/generic/gcd.c (gcd_done): New function. - (gcd_hook): New const hook struct. - (mpn_gcd): Adapted to new mpn_gcd_subdiv_step interface. - - * mpn/generic/gcd_subdiv_step.c (mpn_gcd_subdiv_step): Reorganized - function. Added hook function pointers to the argument list, so - the same function can be used for gcd, gcdext, and jacobi. - - * gmp-impl.h (struct gcd_subdiv_step_hook): New struct. - (mpn_gcdext_subdiv_step): Deleted prototype. - (struct gcdext_ctx): New struct. - (gcdext_hook): Declare const struct. - (mpn_gcd_subdiv_step): Updated prototype. - - * mpn/generic/gcdext_subdiv_step.c: Deleted file. - -2010-04-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/lshift.asm: Rewrite. - * mpn/powerpc64/rshift.asm: Likewise. - * mpn/powerpc64/mode64/lshiftc.asm: New file. - - * mpn/powerpc64/aix.m4: Align functions to 32-byte boundary. - * mpn/powerpc64/darwin.m4: Likewise. - * mpn/powerpc64/elf.m4: Likewise. - -2010-04-28 Niels Möller <nisse@lysator.liu.se> - - * tests/mpz/t-jac.c (check_data): Added some more test cases. - - * mpn/generic/jacobi_lehmer.c (mpn_jacobi_2): Bugfix, count - trailing zeros, not leading. - -2010-04-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/p6/mul_basecase.asm: New file. - -2010-04-23 Niels Möller <nisse@lysator.liu.se> - - * gmp-impl.h (MPN_GCD_LEHMER_N_ITCH): Deleted. - (mpn_gcd_lehmer_n): Deleted declaration. - - * mpn/generic/gcd.c (gcd_2): Moved from gcd_lehmer.c. - (mpn_gcd): Inlined the code from mpn_gcd_lehmer_n. Also use - MPN_GCD_SUBDIV_STEP_ITCH rather than MPN_GCD_LEHMER_N_ITCH. - -2010-04-22 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/bdiv_dbm1c.asm: Swap multiply insns to make them - consecutive, for the benefit of POWER6. - - * mpn/powerpc64/mode64/p6/gmp-mparam.h: New file. - -2010-04-21 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/gcd_lehmer.c: Deleted file. - - * mpn/powerpc64/mode64/divrem_1.asm: Swap multiply insns to make them - consecutive, for the benefit of POWER6. - * mpn/powerpc64/mode64/dive_1.asm: Likewise. - * mpn/powerpc64/mode64/divrem_2.asm: Likewise. - * mpn/powerpc64/mode64/mul_1.asm: Likewise. - * mpn/powerpc64/mode64/aorsmul_1.asm: Likewise. - - * mpn/powerpc64/mode64/aorslshC_n.asm: Swap ldx operands as a temporary - workaround for POWER6 pipeline glitch. - -2010-04-19 Niels Möller <nisse@lysator.liu.se> - - * mpz/jacobi.c (mpz_jacobi): New implementation using - mpn_jacobi_lehmer. Currently #if:ed out. - - * mpn/generic/jacbase.c (mpn_jacobi_base) - [JACOBI_BASE_METHOD < 4]: Support inputs with a >= b. - - * gmp-impl.h (mpn_jacobi_lehmer): Added prototype. - (jacobi_table): Declare. - (mpn_jacobi_init): New inline function. - (mpn_jacobi_finish): Likewise. - (mpn_jacobi_update): Likewise. - - * mpn/generic/jacobi_lehmer.c (mpn_jacobi_lehmer): New file, new - function. - - * configure.in (gmp_mpn_functions): Added jacobi_lehmer. - -2010-04-14 Niels Möller <nisse@lysator.liu.se> - - * configure.in (gmp_mpn_functions): Added - matrix22_mul1_inverse_vector. - * mpn/Makefile.am (nodist_EXTRA_libmpn_la_SOURCES): Added - matrix22_mul1_inverse_vector.c. - - * gmp-impl.h (mpn_matrix22_mul1_inverse_vector): Updated for - rename of mpn_matrix22_mul1_inverse_vector. - * mpn/generic/gcd_lehmer.c (mpn_gcd_lehmer_n): Likewise. - * mpn/generic/gcdext_lehmer.c (mpn_gcdext_lehmer_n): Likewise. - * mpn/generic/hgcd.c (hgcd_step): Likewise. - - * mpn/generic/matrix22_mul1_inverse_vector.c - (mpn_matrix22_mul1_inverse_vector): New file, function moved and - renamed... - * mpn/generic/hgcd2.c (mpn_hgcd_mul_matrix1_inverse_vector): - ...from here. - -2010-04-12 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpn/t-toom6h.c (SIZE_LOG): Define. - * tests/mpn/t-toom8h.c (SIZE_LOG): Likewise. - -2010-04-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/ia64/lorrshift.asm: Rewrite feed-in and wind-down code. - - * mpn/ia64/aorslsh1_n.asm: Adapt to new aorslsh1_n. - * mpn/ia64/aorslsh1_n.asm: Likewise. - - * mpn/ia64/aors_n.asm: Complete rewrite. - * mpn/ia64/aorslsh1_n.asm: Likewise. - - * mpn/ia64/add_n_sub_n.asm: Misc cleanups. Add slotting comments. - - * mpn/ia64/lshiftc.asm: New file. - - * mpn/x86_64/pentium4/gmp-mparam.h: No longer disable rsh1add_n and - rsh1sub_n; instead disable rsblsh1_n, addlsh2_n, rsblsh2_n. - - * mpn/x86/divrem_2.asm: Use "orb" instead of "or" to work around - Solaris assembler bug. - * mpn/x86_64/mpn/x86_64/divrem_2.asm: Likewise. - - * mpn/x86/aors_n.asm: Use operand-less shift-by-1 insn form. - * mpn/x86/pentium/aors_n.asm: Likewise. - * mpn/x86_64/invert_limb.asm: Likewise. - - * mpn/x86_64/pentium4/aors_n.asm: Let non-nc code fall into nc code. - - * mpn/x86_64/pentium4/rsh1aors_n.asm: New file. - -2010-03-25 Torbjorn Granlund <tege@gmplib.org> - - * mpn/ia64/add_n_sub_n.asm: New file. - - * mpn/generic/toom33_mul.c: Fix mpn_add_n_sub_n usage. - * mpn/generic/toom3_sqr.c: Likewise. - * mpn/generic/toom63_mul.c: Likewise. - - * mpn/generic/add_n_sub_n.c: Renamed from addsub_n.c. - -2010-03-23 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/divrem_2.asm: Use mpn_invert_limb instead of div insn. - - * mpn/ia64/aorslshC_n.asm: New file, generalised from last iteration of - aorslsh1_n.asm. - * mpn/ia64/aorslsh1_n.asm: Use aorslshC_n.asm. - * mpn/ia64/aorslsh1_n.asm: New file, use aorslshC_n.asm. - -2010-03-20 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/invert_limb.asm: Rewrite to exploit cancellation - in the Newton iteration. - -2010-03-20 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/toom_interpolate_8pts.c: Use mpn_sublsh2_n. - -2010-03-20 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/aorslshC_n.asm: New file, generalised from - last iteration of aorslsh1_n.asm. - * mpn/powerpc64/mode64/aorslsh1_n.asm: Use aorslshC_n.asm. - * mpn/powerpc64/mode64/aorslsh1_n.asm: New file, use aorslshC_n.asm. - -2010-03-19 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/nano/dive_1.asm: New file. - - * mpn/x86_64/divrem_1.asm: Avoid shld since it is slow on several CPU - types. Unconditionally provide code for normalised and unnormalised - divisors. Cleanup labels. - - * mpn/x86_64/core2/divrem_1.asm: Remove special code for normalised - divisors. Cleanup labels. - - * mpn/generic/toom_interpolate_6pts.c: Call mpn_sublsh2_n and - mpn_sublsh_n with correct args. - - * tests/devel/try.c: Use enum for TYPE_*. - - * tests/devel/try.c: Test mpn_sublsh2_n. - * tests/refmpn.c (refmpn_sublsh2_n): New function. - * tests/tests.h (refmpn_sublsh2_n): Declare. - - * mpn/powerpc64/mode64/aorslsh1_n.asm: New file, with faster - mpn_addlsh1_n and mpn_sublsh1_n. - * mpn/powerpc64/mode64/addlsh1_n.asm: Delete. - * mpn/powerpc64/mode64/sublsh1_n.asm: Delete. - -2010-03-18 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (*-*-aix): Define gcc_32_cflags_maybe, ar_32_flags and - nm_32_flags. - - * mpn/x86/pentium4/sse2/addlsh1_n.asm: Tune for slightly better speed. - Misc cleanups. Add cycle table. - - * mpn/x86_64/copyi.asm: Update cycle table. - * mpn/x86_64/copyd.asm: Likewise. - * mpn/x86_64/rsh1aors_n.asm: Likewise. - * mpn/x86_64/dive_1.asm: Likewise. - - * mpn/x86/pentium4/sse2/add_n.asm: Misc cleanups. Add cycle table. - * mpn/x86/pentium4/sse2/sub_n.asm: Likewise. - -2010-03-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/divrem_1.asm: Use mpn_invert_limb instead of div insn. - * mpn/x86_64/core2/divrem_1.asm: Likewise. - - * tune/speed.c (routine): Add FLAG_R_OPTIONAL for many binops. - -2010-03-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/alpha/ev6/mod_1_4.asm (mpn_mod_1s_4p_cps): Rewrite. - - * mpn/ia64/aors_n.asm: Insert explicitly typed nops to trigger intended - bundling. - * mpn/ia64/aorslsh1_n.asm: Likewise. - * mpn/ia64/dive_1.asm: Likewise. - -2010-03-13 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/pentium4/sse2/submul_1.asm: Rewrite. - - * mpn/powerpc64/mode64/aorsmul_1.asm: New file, faster than old code - for both mpn_addmul_1 and mpn_submul_1. - * mpn/powerpc64/mode64/addmul_1.asm: Remove. - * mpn/powerpc64/mode64/submul_1.asm: Remove. - -2010-03-11 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/gcd_lehmer.c (gcd_2): Use sub_ddmmss. - - * mpn/generic/jacbase.c (mpn_jacobi_base): Reorganized the - JACOBI_BASE_METHOD 4 slightly. Now requires that b > 1. - -2010-03-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/divrem_1.asm: Make fraction code take documented # of - cycles. Annotate code for more CPUs. Misc cleanups. - * mpn/x86_64/core2/divrem_1.asm: Annotate code for more CPUs. - - * mpn/alpha/ev6/mod_1_4.asm: New file. - - * mpn/ia64/mod_34lsub1.asm: New file. - - * doc/gmp.texi (Language Bindings): Update Python site, add Ruby. - -2010-03-10 Niels Möller <nisse@lysator.liu.se> - - * tune/tuneup.c (tune_jacobi_base): Consider mpn_jacobi_base_4. - * tune/speed.c (routine): Added mpn_jacobi_base_4. - * tune/common.c (speed_mpn_jacobi_base_4): New function. - * tune/speed.h (speed_mpn_jacobi_base_4): Declare it. - * tune/Makefile.am (libspeed_la_SOURCES): Added jacbase4.c. - * tune/jacbase4.c: New file. - - * mpn/generic/jacbase.c (mpn_jacobi_base): New function, for - JACOBI_BASE_METHOD 4. - -2010-03-09 Niels Möller <nisse@lysator.liu.se> - - * tests/mpz/t-jac.c (check_large_quotients): Also generate inputs - with large quotients and a large gcd. - -2010-03-09 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpz/t-bin.c (randomwalk): New test-generator function. - -2010-03-07 Torbjorn Granlund <tege@gmplib.org> - - * tune/speed.c (routine): Force r argument for several mod_1 calls. - -2010-03-06 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/divrem_1.asm: Disable SPECIAL_CODE_FOR_NORMALIZED_DIVISOR. - Misc clean up. - - * mpn/x86_64/mod_1_1.asm: New file. - * mpn/x86_64/mod_1_2.asm: New file. - * mpn/x86_64/mod_1_4.asm: Update cycle counts. - - * tests/tests.h (TESTS_REPS): Fix typo. - -2010-03-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/core2/divrem_1.asm: New file. - -2010-02-26 Niels Möller <nisse@lysator.liu.se> - - * tune/speed.c (routine): Added udiv_qrnnd_preinv3. - - * tune/common.c (speed_udiv_qrnnd_preinv3): New function. - * tune/speed.h: Added prototype for it. - -2010-02-26 Niels Möller <nisse@lysator.liu.se> - - * tests/mpz/t-jac.c (check_large_quotients): New test. Currently - disabled, since it's quite slow. - (mpz_nextprime_step): New function. - -2010-02-26 Torbjorn Granlund <tege@gmplib.org> - - * mpn/pa64/aors_n.asm: Fix typo in last change. - -2010-02-25 Niels Möller <nisse@lysator.liu.se> - - * tests/mpz/t-jac.c (ref_jacobi): New reference implementation, - using factorization and legendre symbols computed by powm. - - * tests/devel/try.c (param_init, call): Don't pass negative values - for the second argument to mpz_jacobi and refmpz_jacobi. - - * tests/refmpz.c (refmpz_jacobi): Require that b is odd and positive. - - * tests/devel/try.c (param_init): Support mpz_legendre. - (choice_array): Added mpz_kronecker (apparently forgotten) and - mpz_legendre. - (call): Added TYPE_MPZ_LEGENDRE. - (try_one): Added support for DATA_SRC1_ODD_PRIME. - - * tests/refmpz.c (refmpz_legendre): Rewrote using powm. - -2010-02-25 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Make "corei" default for unrecognised Intel P6 CPUs. - - * tests/mpz/t-perfpow.c (check_random): Use mp_limb_t type for limb - variables. - - * tests/mpn/t-toom6h.c (COUNT): Define. - * tests/mpn/t-toom8h.c (COUNT): Define. - - * tests/mpn/t-div.c: Cast a switch index to placate HP's cc. - * tests/mpn/t-bdiv.c: Likewise. - - * mpn/pa64/aors_n.asm: Fix support of the 2.0n ABI. - -2010-02-24 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpz/t-bin.c (data): Replace (2k,k), tested by twos (). - * tests/mpf/t-inp_str.c (data): Test also "+" in the exponent. - -2010-02-23 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mod_1_3.c: Cast a switch index to placate HP's cc. - - * mpn/generic/sqrtrem.c: Use CNST_LIMB. - -2010-02-20 Niels Möller <nisse@lysator.liu.se> - - * tune/speed.h (mpn_gcd_accel): Deleted prototype. - (mpn_hgcd_lehmer): New prototype. - (MPN_HGCD_LEHMER_ITCH): New macro (previously in gmp-impl.h). - - * tune/Makefile.am (libspeed_la_SOURCES): Added hgcd_lehmer.c. - * tune/hgcd_lehmer.c: New file. - * tune/gcd_accel.c: Deleted obsolete file. - - * gmp-impl.h (MPN_HGCD_LEHMER_ITCH): Deleted macro. - - * mpn/generic/hgcd.c (mpn_hgcd_lehmer): Deleted function, - (mpn_hgcd): Don't call mpn_hgcd_lehmer, instead use inlined loop - around hgcd_step. - (mpn_hgcd_itch): Substitute n for MPN_HGCD_LEHMER_ITCH (n). - -2010-02-19 Niels Möller <nisse@lysator.liu.se> - - * Makefile.am (mpn/jacobitab.h): Added the rules needed to - generate this file. - - * gen-jacobitab.c: New file. - -2010-02-19 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/powm.c: Honour SQR_BASECASE_THRESHOLD in innerloop - expansions. - -2010-02-16 Niels Möller <nisse@lysator.liu.se> - - * tune/time.c (cgt_works_p): Added rudimentary sanity check for - clock_gettime working. - -2010-02-15 Niels Möller <nisse@lysator.liu.se> - - * tune/time.c (speed_time_init): Make use of cycle counter - configurable, via the speed_option_cycles_broken flag. - * tune/common.c (speed_option_cycles_broken): New global variable. - (speed_option_set): Recognize option "cycles-broken". - - * tune/time.c (cycles_works_p): Deleted hack to disable cycle - counter on linux. Needs to be replaced by something more - selective. - -2010-02-11 Niels Möller <nisse@lysator.liu.se> - - * tune/time.c (speed_time_init): Fix speed_time_string when using - clock_gettime. - (cycles_works_p): On linux, don't use the cycle counter. - - * tune/Makefile.am: Add $(TUNE_LIBS) when linking programs. - - * configure.in: Check if -lrt is needed for clock_gettime, and if - so, add that flag to TUNE_LIBS. - -2010-02-07 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_redc): Set min_size and min_is_always when - measuring REDC_1_TO_REDC_2_THRESHOLD. - (tune_mod_1): Set min_size for PREINV_MOD_1_TO_MOD_1_THRESHOLD. - - * mpn/x86_64/aorrlsh_n.asm (cnt): Fix a typo. - * mpn/x86_64/lshsub_n.asm: Likewise. - -2010-02-05 Torbjorn Granlund <tege@gmplib.org> - - * Version 5.0.1 released. - - * mpn/generic/powm.c: Use rp target area for power table computation in - order to use less scratch. - - * mpn/generic/binvert.c (mpn_binvert_itch): Enable more economical - mpn_mulmod_bnm1_itch call. - - * mpn/generic/mu_div_qr.c: Remove always true #if. - * mpn/generic/mu_divappr_q.c: Likewise. - * mpn/generic/mu_bdiv_q.c: Likewise. - * mpn/generic/mu_bdiv_qr.c: Likewise. - -2010-02-01 Torbjorn Granlund <tege@gmplib.org> - - * Makefile.am (LIBGMP_LT_*, LIBGMPXX_LT_*, LIBMP_LT_*): - Bump version info. - - * mpn/powerpc64/mode64/gmp-mparam.h: Remove {MUL,SQR}_FFT_TABLE2. - * mpn/x86/p6/gmp-mparam.h: Likewise. - * mpn/x86/p6/mmx/gmp-mparam.h: Likewise. - * mpn/generic/mul_fft.c: Don't depend on FFT_TABLE2, it was broken. - -2010-01-29 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mul_fft.c (mpn_mul_fft_internal): Remove arguments n, m, - k and rec; add argument sqr. Don't call mpn_mul_fft_decompose here, - instead do that in all callers. - (mpn_mul_fft): Trim allocation when squaring, and use TMP_ALLOC*, not - explicit alloc/free. - (mpn_fft_div_2exp_modF): Avoid a scalar division. - (mpn_fft_mul_modF_K): Replace some multiplies by K with shifting by k. - (mpn_fft_mul_2exp_modF): Make function more symmetrical. - -2010-01-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mu_div_q.c (mpn_mu_div_q_itch): Rewrite. - * mpn/generic/mu_div_qr.c (mpn_mu_div_qr_itch): Re-enable - better mulmod itch estimate. - * mpn/generic/mu_divappr_q.c (mpn_mu_divappr_q_itch): Likewise. - * mpn/generic/mu_bdiv_qr.c (mpn_mu_bdiv_qr_itch): Likewise. - * mpn/generic/mu_bdiv_q.c (mpn_mu_bdiv_q_itch): Likewise. - -2010-01-27 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/mu_div_qr.c (mpn_mu_div_qr_itch): Disabled guessed - estimate, enabled a conservative one. - * mpn/generic/mu_divappr_q.c (mpn_mu_divappr_q_itch): Likewise. - * mpn/generic/mu_bdiv_qr.c (mpn_mu_bdiv_qr_itch): Likewise. - * mpn/generic/mu_bdiv_q.c (mpn_mu_bdiv_q_itch): Likewise. - -2010-01-26 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/mulmod_bnm1.c (mpn_mulmod_bnm1): Partial rewrite to - reduce memory usage. - * mpn/generic/sqrmod_bnm1.c (mpn_sqrmod_bnm1): Likewise. - (mpn_sqrmod_bnm1_next_size): New function. - - * gmp-impl.h (mpn_mulmod_bnm1_itch): Accepts 3 parameters now. - (mpn_sqrmod_bnm1_itch): New inline function. - (mpn_sqrmod_bnm1_next_size): Declaration and mangling. - * mpn/generic/nussbaumer_mul.c: Use the new functions. - - * mpn/generic/invertappr.c (mpn_ni_invertappr): Use new syntax for - mpn_mulmod_bnm1_itch. - * mpn/generic/mu_divappr_q.c (mpn_mu_divappr_q_itch): Likewise. - * mpn/generic/mu_bdiv_qr.c (mpn_mu_bdiv_qr_itch): Likewise. - * mpn/generic/mu_bdiv_q.c (mpn_mu_bdiv_q_itch): Likewise. - * mpn/generic/mu_div_qr.c (mpn_mu_div_qr_itch): Likewise. - * mpn/generic/binvert.c (mpn_binvert_itch): Likewise. - * tune/speed.h (SPEED_ROUTINE_MPN_MULMOD_BNM1_CALL): Likewise. - (SPEED_ROUTINE_MPN_MULMOD_BNM1_ROUNDED): Likewise. - - * tests/mpn/t-sqrmod_bnm1.c, tests/mpn/t-mulmod_bnm1.c: Test - reduced memory usage. - -2010-01-25 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (INSERT_FFTTAB): New macro, like old insertion code but - also inserting a sentinel. - (fftmes): Use INSERT_FFTTAB for inserting new measurements. - Limit k range to best_k - 4 ... best_k + 4. - -2010-01-23 Torbjorn Granlund <tege@gmplib.org> - - * gmp-h.in (__GNU_MP_VERSION_PATCHLEVEL): Bump. - (__GMP_MP_RELEASE): New macro. - - * mpf/div.c: Rewrite to use mpn_div_q. - -2010-01-21 Torbjorn Granlund <tege@gmplib.org> - - * Add FFT_TABLE3 tables for a basic set of machines. - - * configure.in: Use -mtune=nocona for 64-bit pentium4. - - * config.guess: Recognise many more Intel processors. - - * tune/common.c: Whitespace cleanup. - (speed_mpn_matrix22_mul): Rewrite. - -2010-01-21 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/nussbaumer_mul.c (mpn_nussbaumer_mul): Take - advantage of new mpn_mulmod_bnm1 interface, to reduce allocation. - - * tests/mpn/t-mulmod_bnm1.c (ref_mulmod_bnm1, main): Adapted to - mpn_mulmod_bnm1 interface change. - - * mpn/generic/mulmod_bnm1.c (mpn_mulmod_bnm1): Interface change, - in case an + bn < rn, only write an + bn output limbs. New input - requirement, an + bn > rn/2. - * mpn/generic/sqrmod_bnm1.c (mpn_sqrmod_bnm1): Corresponding - changes. - -2010-01-19 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (fftmes): Round up initial n according to initial k. - Limit k to 24 in loop. Remove an obsolete always-true condition. - Remove a redundant trace printout. - -2010-01-18 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (fftmes): New function - (fft): Rewrite. - (mpn_mul_fft_lcm): New function, copied from mpn/generic/mul_fft.c. - (fftfill): New function, code taken from mul_fft.c (mpn_mul_fft). - (cached_measure): New function. - - * gmp-impl.h (struct fft_table_nk): Moved from mul_fft.c. - (MUL_FFT_TABLE3, SQR_FFT_TABLE3): Provide dummy versions for tuneup - builds. - (FFT_TABLE3_SIZE): Increase value for tuneup builds. - - * mpn/generic/mul_fft.c: Handle a new FFT threshold table type ("3"). - Misc cleanups to old table type code. - -2010-01-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/darwin.m4: Fix typo in last change. - -2010-01-15 Torbjorn Granlund <tege@gmplib.org> - - * gmp-h.in (__GMP_EXTERN_INLINE): Remove "extern" for newer Sun C. - - * gmp-impl.h (GMP_LIMB_BYTES): New define. - - * mpn/x86_64/darwin.m4 (LEA): New define. - - * mpn/x86/invert_limb.asm (approx_tab): Use DEF_OBJECT. - Rename and globalise it to work around Mac OS bug. - - With Philip McLaughlin: - * mpn/x86_64/gcd_1.asm (ctz_table): Don't use local prefix, but - use DEF_OBJECT...END_OBJECT. - Keep stack pointer at ABI mandated alignment over call. - -2010-01-12 Torbjorn Granlund <tege@gmplib.org> - - * tune/speed.c (routine): Remove obsolete mpn_dc_tdiv_qr and - mpn_dc_div_qr_n. - * tune/common.c (speed_mpn_dc_tdiv_qr, speed_mpn_dcpi1_div_qr_n): - Remove now unused functions. - * tune/speed.h (SPEED_ROUTINE_MPN_DC_DIVREM_N, - SPEED_ROUTINE_MPN_DC_DIVREM_SB, SPEED_ROUTINE_MPN_DC_TDIV_QR): Remove - now unused macros. - - * mpn/x86_64/fat/fat_entry.asm (mpn_cpuid_available): Remove function. - - * ltmain.sh: Upgrade from 1.5.24 to 2.2.6b. - * ylwrap: New file. - * .bootstrap: Remove explicit versions. - - * doc/gmp.texi (Block-wise Barrett Division): New node. - - * mpn/generic/powm.c: Change some #if to plain 'if' to avoid fat build - problems. - -2010-01-11 Torbjorn Granlund <tege@gmplib.org> - - * tune/speed.h (SPEED_ROUTINE_MPN_PI1_DIV): Accept arguments for size - restrictions. - * tune/common.c (speed_mpn_sbpi1_div_qr, speed_mpn_dcpi1_div_qr, - (speed_mpn_sbpi1_divappr_q, speed_mpn_dcpi1_divappr_q): Pass size - limits for SPEED_ROUTINE_MPN_PI1_DIV. - - * tune/speed.c (routine): Allow .r argument for mpn_sbpi1_divappr_q and - mpn_dcpi1_divappr_q. - -2010-01-08 Torbjorn Granlund <tege@gmplib.org> - - * Version 5.0.0 released. - - * mpn/generic/div_q.c: Handle mpn_*_divappr_q returning high limb - everywhere. - -2010-01-07 Torbjorn Granlund <tege@gmplib.org> - - * Update MUL_FFT_TABLE2 and SQR_FFT_TABLE2 for many machines. - - * mpn/generic/mu_div_q.c: Account for divisor truncation error as well - as mpn_mu_divappr_q's error. - - * mpn/generic/mu_div_q.c: Handle mpn_preinv_mu_divappr_q returning a - high limb. - - * tests/mpn/t-bdiv.c: Move a random call for debugability. - * tests/mpn/t-div.c: Likewise. - - * mpn/generic/mu_divappr_q.c: Rewrite quotient round-up code. - - * mpn/generic/mu_div_qr.c: Handle carry-out from a carry propagation - subtract. - * mpn/generic/mu_divappr_q.c: Likewise. - - * mpn/generic/mu_divappr_q.c - (mpn_preinv_mu_divappr_q, mpn_mu_divappr_q): Declare dividend constant. - * gmp-impl.h: Likewise. - - * perfpow.c (mpn_perfect_power_p): Call mpn_divexact instead of - mpn_bdiv_q (with too little scratch space!). - - From Niels Möller: - * tests/mpn/t-div.c (check_one): Get rid of the poorly managed variable - tn. - - * mpn/minithres/gmp-mparam.h: Add all lately defined thresholds. - - * mpn/generic/div_q.c: Use SB division for small quotients as well as - small divisors. Fix typo in itch call. - -2010-01-06 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/t-div.c (check_one): Checking based on multiplication, - refmpn_mul, rather than refmpn_tdiv_qr. - -2010-01-06 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/toom8h_mul.c: Avoid overflows of mp_size_t. - -2010-01-06 Torbjorn Granlund <tege@gmplib.org> - - * gmp-h.in (__GNU_MP__): Bump. - (__GNU_MP_VERSION,__GNU_MP_VERSION_MINOR,__GNU_MP_VERSION_PATCHLEVEL): - Bump version info. - * mp-h.in (__GNU_MP__): Bump. - * Makefile.am (LIBGMP_LT_*, LIBGMPXX_LT_*, LIBMP_LT_*): - Bump version info. - - * doc/gmp.texi: Rewrite mpn_gcdext text. Remove some out-of-date - text in Algorithms chapter. - - * mpn/generic/div_q.c: Properly handle np=scratch. Fix critical typo - in final adjustment code. Misc cleanups. - - * mpn/generic/rootrem.c: Use mpn_div_q. - * mpz/tdiv_q.c: Likewise. - - * tests/mpn/t-div.c: Test mpn_div_q. - (SIZE_LOG): Up to 17. - - * mpn/generic/div_q.c: New file. - * configure.in (gmp_mpn_functions): Add div_q. - - * mpn/generic/mu_div_q.c: Actually declare dividend constant. - -2010-01-04 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (fft): Separate tuning of modf and full products. - (struct fft_param_t): New field, mul_modf_function. - (tune_fft_sqr): Fix typo. - (tune_fft_mul, tune_fft_sqr): Initialise mul_modf_function field. - * tune/common.c (speed_mpn_fft_mul, speed_mpn_fft_sqr): New functions. - - * tune/speed.h (SPEED_ROUTINE_MPN_MULMOD_BNM1_ROUNDED): Clean up. - - * mpn/generic/mul.c: Simplify rational expression. - - * gmp-impl.h: Cleanup threshold variables; remove obsolete ones and - make all possibly needed definitions for existing ones. - * tune/tuneup.c (tune_mul): Write fractions-compensated values to - threshold variables. - -2010-01-03 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tune/common.c, tune/speed.c, tune/speed.h: Support measuring - mpn_toom43_mul. - - * mpn/generic/toom_interpolate_6pts.c: Small reorganisation. - -2010-01-03 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD): Default to - INV_MULMOD_BNM1_THRESHOLD/2 instead. - - * gmp-impl.h (INV_APPR_THRESHOLD, INV_MULMOD_BNM1_THRESHOLD): Default - here... - * mpn/generic/invert.c, mpn/generic/invertappr.c: ...not here. - - * tests/mpn/t-div.c: Rewrite operand generation code. - -2010-01-02 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD): Default to - INV_MULMOD_BNM1_THRESHOLD. - -2010-01-02 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/dcpi1_div_q.c: Handle divappr approximation problem more - efficiently. - * mpn/generic/mu_div_q.c: Likewise. - - * mpn/generic/invert.c: Remove duplicated code. - -2010-01-01 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD): Default to 0. - - * mpn/generic/mu_div_qr.c: Rewrite to use mpn_mulmod_bnm1. Clean up - scratch usage. Improve itch functions. - * mpn/generic/mu_divappr_q.c: Likewise. - * mpn/generic/mu_bdiv_qr.c: Likewise. - * mpn/generic/mu_div_q.c: Likewise. - - * mpn/generic/dcpi1_bdiv_qr.c: Add parameter ASSERTs. - * mpn/generic/dcpi1_bdiv_q.c: Likewise. - - * tests/mpn/t-bdiv.c: Replace with unit testing code, based on t-div.c. - Increase COUNT to 500. - - * tests/mpn/t-div.c: Avoid generating too small test operands. - Move SB suppression limit downwards. Increase COUNT to 200. - -2009-12-31 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/tdiv_qr.c: Handle numerator/remainder overlap in MU case. - - * tests/tests.h (TESTS_REPS): New macro. - * tests/mpz/dive.c: Use larger operands, decrease default reps, use - TESTS_REPS. - * tests/mpz/convert.c: Likewise. - * tests/mpz/t-sqrtrem.c: Likewise. - * tests/mpz/reuse: Likewise. - * tests/mpz/t-root.c: Likewise. - * tests/mpz/t-tdiv.c: Likewise. - * tests/mpz/t-gcd.c: Likewise. - * tests/mpz/t-powm.c: Likewise. - -2009-12-31 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/toom8_sqr.c (SQR_TOOM8_MAX): Avoid overflow. - * mpn/generic/toom6_sqr.c (SQR_TOOM6_MAX): Likewise. - - * mpn/generic/mulmod_bnm1.c: Don't mention MISUSE any more, - simply consider UNLIKELY any unexpected size. - -2009-12-31 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (speed_mpn_sbordcpi1_div_qr): New function. - (tune_mu_div): Use it. - -2009-12-30 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_mu_bdiv, tune_dc_bdiv, tune_mu_div) - (tune_dc_div): Clear global s.r to make speed functions do 2n/n. - - * tune/speed.c (routine): New entries for mpn_mu_div_qr and - mpn_mupi_div_qr. Allow .r parameter for mpn_sbpi1_div_qr, - mpn_dcpi1_div_qr. - * tune/speed.h (SPEED_ROUTINE_MPN_PI1_DIV, SPEED_ROUTINE_MPN_MU_DIV_QR) - (SPEED_ROUTINE_MPN_MUPI_DIV_QR): Handle .r parameter. - - * tests/mpz/t-tdiv.c: Increase operands size again. - - * mpn/generic/tdiv_qr.c: Attempt to choose between DC and MU cleverer. - - * mpn/generic/tdiv_qr.c: Don't overwrite rp with unnecessary temporary - alloc. - -2009-12-29 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_mu_div): Tune MUPI_DIV_QR_THRESHOLD. - * tune/speed.h (struct speed_params): Allow 3 source operands. - (SPEED_ROUTINE_MPN_MUPI_DIV_QR): New macro. - * tune/common.c (speed_mpn_mupi_div_qr): New function. - - * mpn/generic/tdiv_qr.c: Call mpn_mu_div_qr. - - * tests/mpz/t-tdiv.c: Use larger test operands. - - * mpn/generic/mu_div_qr.c (mpn_mu_div_qr2): Remove code for dn==1. - - * mpz/mul.c: Call mpn_sqr directly. Use PTR,SIZ,ALLOC. - - * tune/tuneup.c (tune_mu_div): Set min_size to 6, DC functions require - this. - - * tests/mpn/t-div.c: Call mu_div functions with operands that generate - a high quotient limb. - - * mpn/generic/mu_div_qr.c: Rewrite to return a high quotient limb, - to let dividend argument be constant, and as a general cleanup. - * mpn/generic/mu_divappr_q.c: Likewise. - * mpn/generic/mu_div_q.c: Likewise. - * gmp-impl.h: Update declarations of changed functions. - - * mpn/generic/invertappr.c (mpn_invertappr): Allocate scratch space - when caller passed NULL. - -2009-12-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/toom_couple_handling.c: Prefix name with mpn_. - * gmp-impl.h: Likewise. - * mpn/generic/toom63_mul.c: Likewise. - * mpn/generic/toom6_sqr.c: Likewise. - * mpn/generic/toom6h_mul.c: Likewise. - * mpn/generic/toom8_sqr.c: Likewise. - * mpn/generic/toom8h_mul.c: Likewise. - - * configure.in (gmp_mpn_functions_optional) Move "com" from here... - (gmp_mpn_functions): ...to here. - * mpn/generic/com.c: New file. - * (mpn_com): New name for mpn_com_n. Make public. - * (mpn_neg): Analogous changes. - - * tune/tuneup.c (tune_mu_div, tune_mu_bdiv): Set step_factor. - - * tune/common.c, tune/speed.c, tune/speed.h: Support measuring - mpn_lshiftc. - - * tests/devel/try.c: Test mpn_lshiftc. - * tests/refmpn.c (refmpn_com): New function. - (refmpn_lshiftc): Likewise. - - * configure.in (gmp_mpn_functions_optional) Move lshiftc from here... - (gmp_mpn_functions): ...to here. - * mpn/generic/lshiftc.c: New file. - * mpn/x86_64/lshiftc.asm: New file. - * mpn/x86_64/core2/lshiftc.asm: New file. - * mpn/generic/mul_fft.c (mpn_lshiftc): Remove. - - * mpn/x86_64/core2/lshift.asm: Tweak for better Core iN performance. - * mpn/x86_64/core2/rshift.asm: Likewise. - -2009-12-27 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/mul.c: Use toom6h and toom8h for almost balanced. - - * mpn/generic/mullo_n.c (mpn_dc_mullo_n): New ratio, to be used in - Toom-8 range. - -2009-12-27 Torbjorn Granlund <tege@gmplib.org> - - * (mpn_sqr): New name for mpn_sqr_n. Many files affected. - - * tune/tuneup.c (tune_mullo): Up step_factor for MULLO_MUL_N_THRESHOLD. - (tune_invertappr, tune_invert, tune_binvert): Let max_size default. - - * tune/tuneup.c (tune_mu_div, tune_mu_bdiv) New functions. - * tune/speed.h (SPEED_ROUTINE_MPN_MU_DIV_Q): New macro. - (SPEED_ROUTINE_MPN_MU_DIV_QR): Likewise. - (SPEED_ROUTINE_MPN_MU_BDIV_Q): Likewise. - (SPEED_ROUTINE_MPN_MU_BDIV_QR): Likewise. - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Add bdiv_q.c and bdiv_qr.c. - * tune/common.c (speed_mpn_mu_div_qr): New function. - (speed_mpn_mu_divappr_q): Likewise. - (speed_mpn_mu_div_q): Likewise. - (speed_mpn_mu_bdiv_q): Likewise. - (speed_mpn_mu_bdiv_qr): Likewise. - - * mpn/*/gmp-mparam.h: Fix incorrect MOD_1U_TO_MOD_1_1_THRESHOLD 0 - values. - - * gmp-impl.h (MODEXACT_1_ODD_THRESHOLD): Remove. - (BMOD_1_TO_MOD_1_THRESHOLD): New parameter, with the reverse meaning of - MODEXACT_1_ODD_THRESHOLD. - (MPN_MOD_OR_MODEXACT_1_ODD): Use BMOD_1_TO_MOD_1_THRESHOLD. - * mpn/generic/divis.c, mpz/{cong.c,cong_ui.c,divis_ui.c}: Likewise. - * tune/tuneup.c (tune_modexact_1_odd): Tune BMOD_1_TO_MOD_1_THRESHOLD; - Do not assume native mpn_modexact_1_odd is faster than mpn_mod_1. - (tuned_speed_mpn_mod_1): Remove variable. - (tune_mod_1): Fix thinkos. Suppress printing of "always" etc. - (all): Measure for divrem_1, mod_1, divexact_1, etc first, since Toom - depends on some of them. - - * mpn/generic/toom22_mul.c (TOOM22_MUL_REC): New name for - TOOM22_MUL_MN_REC. - -2009-12-26 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/t-toom32.c (MIN_AN, MIN_BN, MAX_BN): Relax - requirements a bit. - - * mpn/generic/toom32_mul.c (mpn_toom32_mul): Relax requirement on - input sizes, to support s+t>=n (used to be s+t>=n+2). Keep high - limbs of the evaluated values in scalar variables. - - * mpn/generic/sbpi1_divappr_q.c (mpn_sbpi1_divappr_q): Remove - unused variables. - - * mpn/generic/toom32_mul.c (mpn_toom32_mul): Fixed left-over use - of mpn_addsub_n which should be mpn_add_n_sub_n. - -2009-12-26 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Add new toom files (spotted by Torbjorn). - - * gmp-impl.h (mpn_toom6_sqr_itch): Rename to mpn_toom6_mul_n_itch and redefine. - (mpn_toom8_sqr_itch): Rename to mpn_toom8_mul_n_itch and redefine. - * mpn/generic/mul_n.c: Use renamed _itch macros. - -2009-12-25 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/t-toom32.c (MIN_AN, MIN_BN, MAX_BN): Tightened requirements. - * gmp-impl.h (mpn_toom32_mul_itch): Updated. Less scratch needed - by toom32 itself, and also the pointwise multiplications are - currently mpn_mul_n with no supplied scratch. - * mpn/generic/toom32_mul.c (mpn_toom32_mul): Reorganized - interpolation to use less scratch space. No longer supports the - most extreme size ratios. - -2009-12-25 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_preinv_mod_1): Purge. - (tune_mod_1): Use speed_mpn_mod_1_tune for - PREINV_MOD_1_TO_MOD_1_THRESHOLD - - * mpn/generic/dcpi1_divappr_q.c: Handle 2n/n properly. Don't use full - precision in mpn_sbpi1_divappr_q call. Misc cleanup. - - * tune/tuneup.c (tune_mod_1): Add a check_size for - PREINV_MOD_1_TO_MOD_1_THRESHOLD. - -2009-12-24 Torbjorn Granlund <tege@gmplib.org> - - * tune/mod_1_div.c (MOD_1N_TO_MOD_1_1_THRESHOLD, - (MOD_1U_TO_MOD_1_1_THRESHOLD): Set. - * tune/mod_1_inv.c (MOD_1N_TO_MOD_1_1_THRESHOLD, - (MOD_1U_TO_MOD_1_1_THRESHOLD): Set. - - * gmp-impl.h (USE_PREINV_MOD_1): Remove. - (MPN_MOD_OR_PREINV_MOD_1): Define to choose functions dynamically in - terms of PREINV_MOD_1_TO_MOD_1_THRESHOLD (used to choose statically - using USE_PREINV_MOD_1). - * mpn/generic/perfsqr.c (PERFSQR_MOD_PP): Corresponding updates. - - * tune/tuneup.c (tune_mod_1): Rewrite. - * gmp-impl.h (MOD_1N_TO_MOD_1_1_THRESHOLD): New. - (MOD_1U_TO_MOD_1_1_THRESHOLD): New name for MOD_1_1_THRESHOLD. - (MOD_1_1_TO_MOD_1_2_THRESHOLD): Mew name for MOD_1_2_THRESHOLD. - (MOD_1_2_TO_MOD_1_4_THRESHOLD): New name for MOD_1_4_THRESHOLD. - * mpn/generic/mod_1.c: Corresponding updates. - -2009-12-24 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/mul_n.c: Use also toom6h and toom8h. - * mpn/generic/sqr_n.c: Use also toom6 and toom8. - * gmp-impl.h: Initial support for tuning of Toom-6half and Toom-8half. - * tune/tuneup.c: Tune Toom-6half and Toom-8half thresholds. - -2009-12-24 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mod_1_4.c: Get ASSERT right. - * mpn/generic/mod_1_3.c: Likewise. - * mpn/generic/mod_1_2.c: Likewise. - - * mpn/generic/powm_sec.c: Use SQR_TOOM2_THRESHOLD as limit for a native - mpn_sqr_basecase, not TUNE_SQR_TOOM2_MAX. - -2009-12-23 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tune/common.c, tune/speed.c, tune/speed.h: Support for measuring - mpn_toom8h_mul and mpn_toom8_sqr speed. - - * mpn/generic/toom_eval_pm2exp.c: Fix ASSERTs. - - * mpn/generic/toom8h_mul.c: New file. - * mpn/generic/toom8_sqr.c: New file. - * mpn/generic/toom_interpolate_16pts.c: New file. - * gmp-impl.h: Provide corresponding declarations. - * configure.in (gmp_mpn_functions): List toom_interpolate_16pts, - toom8h_mul, and toom8h_sqr. - * tests/mpn/t-toom8h.c: New test program. - - * mpn/generic/toom6_sqr.c: New file, was part of toom6h_mul. - * mpn/generic/toom6h_mul.c: Removed _sqr. - - * mpn/generic/mulmod_bnm1.c: Nailify CRT. - * mpn/generic/sqrmod_bnm1.c: Likewise. - - * mpn/generic/mullo_n.c: Split dc_mullo_n function; - ALLOC memory at once. - - * mpn/Makefile.am (nodist_EXTRA_libmpn_la_SOURCES): Update. - - * mpn/generic/toom6h_mul.c: Add prefix to toom_interpolate_12pts. - * mpn/generic/toom_interpolate_12pts.c: Likewise. - - * mpn/generic/invertappr.c (mpn_bc_invertappr): Use mpn_divrem_2. - * mpn/generic/invert.c: Faster basecase, use mpn_sbpi1_div_q. - - * mpn/generic/toom_eval_pm2exp.c: Assert support for degree 3. - * mpn/generic/toom6h_mul.c: Avoid obsolete _itch function. - -2009-12-23 Torbjorn Granlund <tege@gmplib.org> - - * tune/common.c, tune/speed.c, tune/speed.h: Support for measuring - mpn_mod_1_1p, mpn_mod_1s_2p, mpn_mod_1s_3p, mpn_mod_1s_4p. - - * tests/mpz/t-powm.c: Test mpz_powm_sec. - - * mpz/powm_sec.c: New file. - * gmp-h.in: Declare it. - * Makefile.am, mpz/Makefile.am: Compile it. - * doc/gmp.texi: Document it. - - * mpn/generic/powm_sec.c (mpn_powm_sec_itch): New function. - (mpn_powm_sec): Use passed scratch, no local allocation. - Allow exp argument = 1. - (win_size): Start loop from 1. - - * mpn/generic/powm.c (win_size): Start loop from 1. - -2009-12-22 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpn/t-div.c: New file. - * tests/mpn/Makefile.am: Compile it. - - * mpn/generic/mu_divappr_q.c: Handle quotient overflow. - - * mpn/generic/mu_div_q.c (mpn_mu_div_q_itch): New function. - -2009-12-22 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/sbpi1_div_q.c: Use udiv_qr_3by2. Intended to change - nothing after preprocessing. - - * mpn/generic/sbpi1_divappr_q.c: For the last call to udiv_qr_3by2, - avoid using memory locations as output parameters, and revert to - explicitly copying n1 and n0 to memory. - - * gmp-impl.h (udiv_qr_3by2): Tweaked to expand to precisely the - same code as was used before the introduction of this macro. - Eliminated some local variables, instead do multiple updates to - the output parameters. - -2009-12-22 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpn/t-toom6h.c (MIN_AN): Set to MUL_TOOM6H_THRESHOLD to avoid - invalid recursive sizes. - - * tests/mpn/t-bdiv.c: Get itch function calls right. - - * mpn/generic/mu_bdiv_q.c (mpn_mu_bdiv_q_itch): Rewrite. - * mpn/generic/mu_bdiv_qr.c (mpn_mu_bdiv_qr_itch): Simplify. - - * mpn/generic/bdiv_qr.c (mpn_bdiv_qr): Simplify, don't allocate. - (mpn_bdiv_qr_itch): Conditionalise on MU_BDIV_QR_THRESHOLD. - -2009-12-18 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/t-bdiv.c: Add red-zones. - -2009-12-21 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/sbpi1_div_q.c: Fix fixup code to work for qn = 0. - - * mpn/generic/dcpi1_divappr_q.c: Handle qn = 1 and qn = 2 for initial - quotient block (code block copied from dcpi1_div_qr.c). - - * mpn/generic/dcpi1_div_qr.c: Rewrite singular case giving q limb of - GMP_NUMB_MAX. Remove an impossible qn = 0 case. - - * mpn/generic/dcpi1_bdiv_q.c: Remove a spurious mpn_sub_1. - - * mpn/generic/mul.c: Put back call to mpn_mul_n. - - * tune/tuneup.c (all): Call tune_mulmod_bnm1 before tuning fft due to - dependency on mulmod_bnm1 from both mul_fft_mul and from mullo_n. - - * mpn/generic/dcpi1_divappr_q.c: ASSERT that dn >= 6 and nn > dn. - * mpn/generic/dcpi1_div_q.c: ASSERT that dn >= 6 and nn-dn >= 3. - * mpn/generic/dcpi1_div_qr.c: ASSERT that dn >= 6 and nn-dn >= 3. - - * mpn/generic/bdiv_q_1.c (mpn_pi1_bdiv_q_1): Renamed from - mpn_bdiv_q_1_pi1. - * All references changed. - - * configure.in: Add --enable-old-fft-full. - * tune/speed.c (routine): Conditionalise mpn_mul_fft_full references on - WANT_OLD_FFT_FULL. - * tune/common.c (speed_mpn_mul_fft_full) - (speed_mpn_mul_fft_full_sqr): Likewise. - * mpn/generic/mul_fft.c (mpn_mul_fft_full): Include iff - WANT_OLD_FFT_FULL. - -2009-12-21 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-impl.h (mpn_toom6h_mul_itch): New inline function. - (MUL_TOOM6H_THRESHOLD): Default value. - (SQR_TOOM6_THRESHOLD): Default value. - * mpn/generic/toom6h_mul.c: Remove definitions moved to gmp-impl.h. - * tune/common.c, tune/speed.c, tune/speed.h: Support for measuring - mpn_toom6h_mul and mpn_toom6_sqr speed. - - * mpn/generic/toom63_mul.c: Remove unused TMP_*. - - * mpn/generic/toom_eval_pm2rexp.c: New file. - * gmp-impl.h: Provide corresponding declaration. - * configure.in (gmp_mpn_functions): List toom_eval_pm2rexp. - * mpn/generic/toom6h_mul.c: Use shared toom_eval_pm2rexp. - - * mpn/generic/toom_couple_handling.c: New file, helper function - for high degree Toom. - * gmp-impl.h: Provide corresponding declaration. - * configure.in (gmp_mpn_functions): List toom_couple_handling. - * mpn/generic/toom6h_mul.c: Use shared toom_couple_handling. - * mpn/generic/toom63_mul.c: Likewise. - - * mpn/generic/toom6h_mul.c: New file. - * mpn/generic/toom_interpolate_12pts.c: New file. - * gmp-impl.h: Provide corresponding declarations. - * configure.in (gmp_mpn_functions): List toom_interpolate_12pts, - toom6h_mul. - * tests/mpn/t-toom6h.c: New test program. - - * tests/mpn/t-mulmod_bnm1.c (ref_mulmod_bnm1): Use ref_mul. - * tests/mpn/t-sqrmod_bnm1.c (ref_sqrmod_bnm1): Likewise. - -2009-12-20 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/mulmod_bnm1.c (mpn_mulmod_bnm1): New CRT. - * mpn/generic/sqrmod_bnm1.c (mpn_sqrmod_bnm1): Likewise. - -2009-12-20 Torbjorn Granlund <tege@gmplib.org> - - * Change all bit counts for bignums to use mp_bitcnt_t. - - * mpn/generic/bdivmod.c: File removed. All references purged. - - * mpn/generic/mul_fft.c (mpn_mul_fft_full): Disable. - - * gmp-impl.h: Define mpn_fft_mul as an alias for mpn_nussbaumer_mul. - * mpn/generic/mul.c: Refer mpn_fft_mul. - * mpn/generic/mul_n.c: Likewise. - * mpn/generic/sqr_n.c: Likewise. - * mpn/generic/mullo_n.c: Likewise. - - * mpn/generic/mul.c: Loop also over mpn_nussbaumer_mul, as suggested by - Marco. Use TMP_SALLOC_LIMBS in more places. Clean up ws allocation. - -2009-12-19 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/toom_interpolate_8pts.c: Nailify. - -2009-12-19 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mul.c: Major rewrite. Use toom43, toom53, toom63. - Call mpn_nussbaumer_mul for largest operands. - - * tune/speed.h (SPEED_ROUTINE_MPN_TOOM32_FOR_TOOM43_MUL): New macro. - (SPEED_ROUTINE_MPN_TOOM43_FOR_TOOM32_MUL): New macro. - (SPEED_ROUTINE_MPN_TOOM32_FOR_TOOM53_MUL): New macro. - (SPEED_ROUTINE_MPN_TOOM53_FOR_TOOM32_MUL): New macro. - (SPEED_ROUTINE_MPN_TOOM42_FOR_TOOM53_MUL): New macro. - (SPEED_ROUTINE_MPN_TOOM53_FOR_TOOM42_MUL): New macro. - * tune/common.c (speed_mpn_toom63_mul): New function. - (speed_mpn_toom32_for_toom43_mul): New function. - (speed_mpn_toom43_for_toom32_mul): New function. - (speed_mpn_toom32_for_toom53_mul): New function. - (speed_mpn_toom53_for_toom32_mul): New function. - (speed_mpn_toom42_for_toom53_mul): New function. - (speed_mpn_toom53_for_toom42_mul): New function. - * tune/tuneup.c (tune_mul_n): New name for old tune_mul. - (tune_sqr_n): New name for old tune_sqr. - (tune_mul): New function, for unbalanced multiplication. - * gmp-impl.h: Provide declarations for corresponding threshold vars. - - * gmp-impl.h (mpn_rsh1add_nc, mpn_rsh1sub_nc): Declare. - * mpn/asm-defs.m4: Likewise. - * configure.in: Add corresponding HAVE_NATIVEs. - * mpn/x86_64/rsh1aors_n.asm: Add _nc entry point. - -2009-12-18 Niels Möller <nisse@lysator.liu.se> - - * mpz/divexact.c: Rewrite to use mpn_divexact. - - * mpn/generic/bdiv_q_1.c (mpn_bdiv_q_1): Deleted some unused - variables. - - * mpn/generic/toom52_mul.c (mpn_toom52_mul) - [HAVE_NATIVE_mpn_add_n_sub_n]: Moved declaration of cy to avoid a - compiler warning. - - * gmp-impl.h (gmp_pi1_t): Eliminated inv21 member. - (invert_pi1): ...and don't store it here. - - * mpn/generic/toom63_mul.c (mpn_toom63_mul): Simplified - calculation of block size n. - * gmp-impl.h (mpn_toom63_mul_itch): Likewise. - - * mpn/generic/toom_eval_pm2exp.c (mpn_toom_eval_pm2exp): Fixed - output asserts. - -2009-12-18 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpn/t-toom63.c: New test program. - -2009-12-18 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/invert.c: Nailify. - * mpn/generic/invertappr.c: Nailify. - * mpn/generic/mulmod_bnm1.c: Nailify. - * mpn/generic/sqrmod_bnm1.c: Nailify. - - * tests/mpn/t-invert.c: New test program. - - * mpn/generic/toom63_mul.c: New file. - * mpn/generic/toom_interpolate_8pts.c: New file. - * gmp-impl.h: Provide corresponding declarations. - * configure.in (gmp_mpn_functions): List toom_interpolate_8pts and - toom63_mul. - -2009-12-17 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mul.c: Move allocation of ws to where it is used. - Identify toom22, 32, 42, in that order (in two places). Use midline - between toom22, 32, 42. - * mpn/generic/toom22_mul.c (TOOM22_MUL_MN_REC): Call also - mpn_toom32_mul. - - * doc/gmp.texi: Update References section. Update Contributors - section. Misc updates. - - * gmp-impl.h: Renew default values for all THRESHOLDs. - -2009-12-17 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/divexact.c (mpn_divexact): Don't require that the - dividend is normalized. Use MPN_DIVREM_OR_PREINV_DIVREM_1. When - shifting, allocate and process only the low qn+1 limbs. Eliminated - code for the impossible case nn < qn. - - * mpn/generic/dcpi1_div_qr.c (mpn_dcpi1_div_qr): Added some input - asserts. - - * mpn/generic/dcpi1_div_qr.c (mpn_dcpi1_div_qr): In the case that - the initial quotient block is a single limb, use 3/2 division, - thereby eliminating the only use of gmp_pi1_t->inv21. - -2009-12-17 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/invert.c: Added some comment. - * mpn/generic/invertappr.c: Slightly better threshold handling. - * gmp-impl.h (INV_NEWTON_THRESHOLD): Default to 200. - - * mpn/generic/nussbaumer_mul.c: New file. - * configure.in (gmp_mpn_functions): Add nussbaumer_mul. - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Add nussbaumer_mul. - * gmp-impl.h (mpn_nussbaumer_mul): Added prototype and name-mangling. - * tune/speed.h (speed_mpn_nussbaumer_mul): Declare function. - * tune/common.c (speed_mpn_nussbaumer_mul): New function. - * tune/speed.c (routine): Add speed_mpn_nussbaumer_mul. - - * mpn/generic/sqrmod_bnm1.c: New file. - * configure.in (gmp_mpn_functions): Add sqrmod_bnm1. - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Add sqrmod_bnm1. - * gmp-impl.h (mpn_sqrmod_bnm1): Added prototype and name-mangling. - (SQRMOD_BNM1_THRESHOLD): support for the new threshold. - * tune/speed.h (speed_mpn_sqrmod_bnm1): Declare function. - * tune/common.c (speed_mpn_sqrmod_bnm1): New function. - * tune/speed.c (routine): Add speed_mpn_sqrmod_bnm1. - * tests/mpn/t-mulmod_bnm1.c: Attribution. - * tests/mpn/t-sqrmod_bnm1.c: New test file. - * tests/mpn/Makefile.am (check_PROGRAMS): Add t-sqrmod_bnm1. - - * tune/tuneup.c: Tune SQRMOD_BNM1_THRESHOLD. - - * mpn/generic/nussbaumer_mul.c (mpn_nussbaumer_mul): Mimic fft_mul, - use squaring if operands coincide. - * tune/speed.h (speed_mpn_nussbaumer_mul_sqr): Declare function. - * tune/common.c (speed_mpn_nussbaumer_mul_sqr): New function. - * tune/speed.c (routine): Add speed_mpn_nussbaumer_mul_sqr. - -2009-12-17 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/bdiv_q.c (mpn_bdiv_q_itch): Rewrite. - -2009-12-16 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpn/t-bdiv.c (bdiv_q_valid_p, bdiv_qr_valid_p): Call refmpn_mul - instead of refmpn_mul_basecase. - * tests/mpn/toom-shared.h: Likewise. - * tests/refmpn.c (refmpn_mullo_n,refmpn_sqr,refmpn_mul_any): Likewise. - - * minithres/gmp-mparam.h: Add new thresholds, trim old values. - - * mpn/generic/powm.c: Use mp_bitcnt_t for bit counts. - Handle REDC_1_TO_REDC_N_THRESHOLD < MUL_TOOM22_THRESHOLD in - non-WANT_REDC_2 INNERLOOP expansion code. - * mpn/generic/powm_sec.c: Use mp_bitcnt_t for bit counts. - -2009-12-16 Niels Möller <nisse@lysator.liu.se> - - * tests/mpz/t-gcd.c (main): Added test case to exercise the - unlikely u0 == u1 case in mpn_gcdext_lehmer_n. - - * mpn/generic/gcdext_lehmer.c (mpn_gcdext_lehmer_n): Get ASSERT - right. - -2009-12-16 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/t-mul.c: Misc cleanups. - (mul_basecase): Remove. - (ref_mpn_mul): Remove. - * tests/refmpn.c (refmpn_mul): New function, mainly from t-mul.c's - ref_mpn_mul. - (refmpn_mullo_n): Add a missing free. - - * tune/speed.c (routine): Measure speed_mpn_{sb,dc}pi1_div_qr, - mpn_{sb,dc}pi1_divappr_q, mpn_{sb,dc}pi1_bdiv_qr, and - mpn_{sb,dc}pi1_bdiv_q. - - * mpn/generic/invertappr.c: New file, meat from invert.c. - * mpn/generic/invert.c: Leave just mpn_invert.c. - * configure.in (gmp_mpn_functions): Add invertappr. - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Add invertappr.c. - * gmp-impl.h (mpn_invert_itch, mpn_invertappr_itch): New macros. - -2009-12-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/gcdext_subdiv_step.c: Get an ASSERT right. - -2009-12-15 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/sbpi1_div_qr.c (mpn_sbpi1_div_qr): A very small step - towards nail support. - -2009-12-15 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-impl.h (mpn_ni_invertappr): Added prototype and name-mangling. - * mpn/generic/mulmod_bnm1.c: Comment representation of class [0]. - -2009-12-14 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/sbpi1_divappr_q.c (mpn_sbpi1_divappr_q): Use - udiv_qr_3by2. - -2009-12-14 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_binvert): Remove BINV_MULMOD_BNM1_THRESHOLD - tuning, it was always zero and caused BINV_NEWTON_THRESHOLD to be - wrong (as pointed out by Marco). - * (BINV_MULMOD_BNM1_THRESHOLD): Clean from other files too. - -2009-12-14 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/invert.c: Improved comments. - (mpn_bc_invertappr): Conditionally re-enable mpn_dcpi1_divappr_q. - -2009-12-14 Niels Möller <nisse@lysator.liu.se> - - * gmp-impl.h (udiv_qr_3by2): Fix typo in argument list. - -2009-12-13 Niels Möller <nisse@lysator.liu.se> - - * gmp-impl.h (udiv_qr_3by2): New macro. - * mpn/generic/sbpi1_div_qr.c (mpn_sbpi1_div_qr): Use udiv_qr_3by2. - -2009-12-13 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/dcpi1_divappr_q.c (mpn_dcpi1_divappr_q): Avoid a buffer - overrun. - - * mpn/generic/mul_fft.c (mpn_mul_fft_full): Handle carry-out from 2nd - mpn_mul_fft, add an ASSERT for the 1st mpn_mul_fft. Replace some - comments on cc's range with ASSERTs. - - * mpn/generic/gcdext.c (compute_v): Normalise tp[] after mpn_mul. - - * mpz/powm.c: Rework buffer handling. - -2009-12-13 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/toom-shared.h (main): Use refmpn_mul_basecase to check - results (slow!). Iteration counts of all toom tests reduced - considerably. - -2009-12-13 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/invert.c (mpn_invertapp): Split in _bc and _ni. - (mpn_bc_invertappr): New function, the basecase. - (mpn_ni_invertapp): New function, Newton iteration. - (mpn_invert): Use mpn_ni_invertapp. - * tune/tuneup.c (tune_invert): Min for INV_APPR_THRESHOLD. - (tune_invertappr): Min for INV_NEWTON_THRESHOLD. - - * tune/speed.h (SPEED_ROUTINE_MPN_NI_INVERTAPPR): New macro. - (speed_mpn_ni_invertappr): Declare function. - * tune/common.c (speed_mpn_ni_invertappr): New function. - * tune/speed.c (routine): Add speed_mpn_ni_invertappr. - - * tune/tuneup.c (tune_invertappr): Use speed_mpn_ni_invertappr to - tune INV_MULMOD_BNM1_THRESHOLD. - -2009-12-12 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mu_bdiv_qr.c (mpn_mu_bdiv_qr_itch): Rewrite. - -2009-12-12 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpn/t-mulmod_bnm1.c (main): Disable B^n+1 stressing test - for odd sizes. - - * mpn/generic/invert.c: Complete rewrite. Uses Newton iterations. - * gmp-impl.h (mpn_invertappr): Added prototype and name-mangling. - (mpn_invertappr_itch): Added prototype and name-mangling. - (INV_APPR_THRESHOLD): Support for a new tunable const. - * tune/speed.h (SPEED_ROUTINE_MPN_INVERTAPPR): New macro. - (speed_mpn_invertappr): Declare function. - * tune/common.c (speed_mpn_invertappr): New function. - * tune/speed.c (routine): Add speed_mpn_invertappr. - * tune/tuneup.c (tune_invertappr): New function: was tune_invert. - (tune_invert): Now tune only INV_APPR_THRESHOLD. - (all): Enable call to tune_invert and tune_invertappr. - -2009-12-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/binvert.c: Use mpn_mulmod_bnm1 instead of FFT wrapping. - Old, evidently broken wrapping code removed. - * tune/tuneup.c (tune_binvert): Tune BINV_MULMOD_BNM1_THRESHOLD. - * gmp-impl.h: Provide declarations for corresponding threshold var. - - * tests/mpn/t-bdiv.c (COUNT): Decrease to keep run time reasonable. - - * tune/tuneup.c (tune_invert): Tune INV_MULMOD_BNM1_THRESHOLD. - * gmp-impl.h: Provide declarations for corresponding threshold var. - - * tests/mpn/t-mulmod_bnm1.c: Avoid a division by zero. - - * configure.in: Set up different paths for different 64-bit sparc - processors. - * mpn/sparc64/ultrasparc34/gmp-mparam.h: New file. - -2009-12-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/*/gmp-mparam.h: Regenerate many of these files. - -2009-12-10 Niels Möller <nisse@lysator.liu.se> - - * gmp-impl.h (mpn_divexact): Removed scratch pointer from - prototype. - * mpn/generic/gcdext.c (divexact): Deleted, moved to... - * mpn/generic/divexact.c (mpn_divexact): New implementation (moved - from gcdext.c). The bidirectional divexact is kept but #if:ed out. - Interface change, since the new code doesn't take a scratch - argument. - - * tests/mpn/t-mulmod_bnm1.c (main): Ensure that an >= bn. Lowered - MIN_N to 1. Various fixes to handle n == 1 properly. - - * mpn/generic/mulmod_bnm1.c (mpn_mulmod_bnm1): Small interface - change, require an >= bn. - - * mpn/generic/mulmod_bnm1.c (mpn_mulmod_bnm1): Fixed non-recursive - case to not write beyond end of result area. - -2009-12-09 Torbjorn Granlund <tege@gmplib.org> - - * tune/speed.h (SPEED_ROUTINE_MPN_MULMOD_BNM1_CALL): New macro, made - from now deleted SPEED_ROUTINE_MPN_MULMOD_BNM1. - * tune/common.c (speed_mpn_bc_mulmod_bnm1): New function. - (speed_mpn_mulmod_bnm1): Use SPEED_ROUTINE_MPN_MULMOD_BNM1_CALL. - * tune/speed.c (routine): Add mpn_bc_mulmod_bnm1. - - * mpn/generic/mulmod_bnm1.c (mpn_mulmod_bnm1_next_size): Rewrite. - - * tune/tuneup.c (tune_mulmod_bnm1): Rewrite. - -2009-12-08 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/mulmod_bnm1.c (mpn_bc_mulmod_bnm1, - mpn_bc_mulmod_bnp1): Added a parameter for scratch area, possibly - same as result area (as suggested by Niels Möller). - (mpn_mulmod_bnm1): Calls changed accordingly. - -2009-12-08 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/gcdext_1.c (mpn_gcdext_1) [GCDEXT_1_USE_BINARY]: Use - table lookup for count_trailing_zeros. Binary algorithm still - disabled by default. - - * mpn/generic/gcdext.c (divexact): Local definition of divexact, - using mpn_bdiv_q. - (compute_v): Use it. - - * tests/mpn/Makefile.am (check_PROGRAMS): Added t-bdiv. - - * tests/mpn/t-bdiv.c: New file. - - * mpn/generic/bdiv_q.c (mpn_bdiv_q): Fixed bad quotient length, - should have qn == nn. - - * mpn/generic/bdiv_qr.c (mpn_bdiv_qr): Pass correct nn length to - the lower-level functions. - -2009-12-08 Torbjorn Granlund <tege@gmplib.org> - - * tune/speed.h (SPEED_ROUTINE_MPN_MULMOD_BNM1_ROUNDED): New define. - * tune/common.c (speed_mpn_mulmod_bnm1_rounded): New function. - * tune/speed.c (routine): Add mpn_mulmod_bnm1_rounded for measuring - mpn_mulmod_bnm1 at recommended sizes. - - * mpn/generic/mulmod_bnm1.c (mpn_mulmod_bnm1_next_size): Rewrite. - (mpn_bc_mulmod_bnm1): Use mpn_add_n instead of mpn_add. - - * tune/speed.c (routine): Add mpn_invert. - - * tune/tuneup.c (tune_invert): New function. - * tune/speed.h (SPEED_ROUTINE_MPN_INVERT): New macro. - * tune/common.c (speed_mpn_invert): New function. - * gmp-impl.h: Provide declarations for corresponding threshold var. - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Add invert.c. - -2009-12-08 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/devel/try.c: Test mpn_addlsh2_n and mpn_{add,sub}lsh_n; - mpn_rsblsh_n now tests all shift values. - * tests/refmpn.c (refmpn_addlsh_n, refmpn_sublsh_n): New functions. - (refmpn_addlsh1_n): Use generic refmpn_addlsh_n. - (refmpn_sublsh1_n): Use generic refmpn_sublsh_n. - (refmpn_addlsh2_n): New function. - * tests/tests.h: Declare new functions. - -2009-12-06 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_mulmod_bnm1): Up min_size to 12. - - * Globally: Rename *mullow* to *mullo*, *MULLOW* to *MULLO*. - - * configure.in: Don't include ev5 directory for ev6* and ev7. Misc - alpha path cleanups. - * mpn/alpha/add_n.asm: Replaced by mpn/alpha/ev5/add_n.asm. - * mpn/alpha/sub_n.asm: Replaced by mpn/alpha/ev5/sub_n.asm. - * mpn/alpha/lshift.asm: Replaced by mpn/alpha/ev5/lshift.asm. - * mpn/alpha/rshift.asm: Replaced by mpn/alpha/ev5/rshift.asm. - * mpn/alpha/com_n.asm: New, moved from mpn/alpha/ev5/rshift.asm. - * mpn/alpha/ev5/diveby3.asm: New, moved from mpn/alpha/diveby3.asm. - - * mpn/powerpc64/mode64/diveby3.asm: Remove, it is slower than - mpn_bdiv_dbm1c on all hardware. - - * mpn/generic/powm_sec.c: Rework logic for mpn_sqr_basecase size limit. - - * gmp-impl.h (mpn_redc_1_sec): Declare. - * configure.in (gmp_mpn_functions): Add redc_1_sec. - -2009-12-06 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/devel/try.c (try_one): DATA_SRC0_HIGHBIT sets the high bit. - -2009-12-05 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/toom_eval_dgr3_pm1.c: Change return value: 0 or ~0. - * mpn/generic/toom_eval_dgr3_pm2.c: Likewise. - * mpn/generic/toom_eval_pm1.c: Likewise. - * mpn/generic/toom_eval_pm2exp.c: Likewise. - * mpn/generic/toom_eval_pm2.c: Rewrite to use mpn_addlsh2_n. - - * mpn/generic/toom_interpolate_5pts.c: Param sa is a flag, not a sign. - - * mpn/generic/toom33_mul.c: Adapt to changes above. - * mpn/generic/toom3_sqr.c: Likewise. - * mpn/generic/toom42_mul.c: Likewise. - * mpn/generic/toom43_mul.c: Reduce branches. - * mpn/generic/toom44_mul.c: Likewise. - * mpn/generic/toom53_mul.c: Likewise. - * mpn/generic/toom62_mul.c: Likewise. - - * mpn/generic/toom52_mul.c: Use toom_eval_ functions. - - * mpn/generic/toom4_sqr.c: Avoid C99 construct. - * mpn/generic/toom_interpolate_7pts.c: Likewise. - -2009-12-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/redc_1_sec.c: New file. - * mpn/generic/powm_sec.c: Use redc_1_sec. Use dummy full subtract - instead of mpn_cmp since the latter leaks to the side channel. - (mpn_local_sqr_n): New function, with associated macros. - (mpn_powm_sec): Use mpn_local_sqr_n. - - * configure.in (HAVE_NATIVE): Add missing functions, then sort. - -2009-12-04 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_dc_div): Up min_size to 6. - (tune_mod_1): Set MOD_1_1_THRESHOLD min_size to 2. - - * tune/speed.h: Negate "binvert"-type inverses, as required. - - * mpn/generic/redc_1.c: Add ASSERTs. - * mpn/generic/redc_2.c: Likewise. - - * mpn/generic/sbpi1_bdiv_q.c: Simplify loops, indexing. - -2009-12-03 Yann Droneaud <yann@droneaud.fr> - - * acinclude.m4 ([long long reliability test 1]): Add a "static" for C99 - inline semantics compatibility. - -2009-12-03 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Move intptr_t test into common AC_CHECK_TYPES. - - * mpn/generic/gcdext.c: Add a TMP_FREE. - -2009-12-03 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/gcdext_1.c (mpn_gcdext_1) [GCDEXT_1_USE_BINARY]: - Added various masking tricks. - - * mpn/generic/gcdext_1.c (mpn_gcdext_1) [GCDEXT_1_USE_BINARY]: - Reimplemented binary gcdext, with proper canonicalization. - - * mpn/generic/gcdext_lehmer.c (mpn_gcdext_lehmer_n): Handle v == 0 - from mpn_gcdext_1. - * mpn/generic/gcdext_1.c (mpn_gcdext_1): Allow inputs with a < b, - assertions fixed accordingly. - -2009-12-03 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c: Tune DC_DIVAPPR_Q_THRESHOLD. Rewrite - DC_DIV_QR_THRESHOLD tuning code. - (tune_dc_div): Rewrite. - * tune/speed.h (SPEED_ROUTINE_MPN_PI1_DIV): New macro. - * tune/common.c (speed_mpn_sbpi1_div_qr, speed_mpn_dcpi1_div_qr, - speed_mpn_sbpi1_divappr_q, speed_mpn_sbpi1_bdiv_qr): New functions. - * gmp-impl.h: Provide declarations for corresponding threshold vars. - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Add dcpi1_divappr_q.c. - - * tune/tuneup.c (tune_binvert): Up max_size. - -2009-12-02 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/devel/try.c: Test mpn_rsblsh2_n and mpn_rsblsh_n. - * tests/refmpn.c (refmpn_rsblsh_n, refmpn_rsblsh2_n): New functions. - (refmpn_rsblsh1_n): Use generic refmpn_rsblsh_n. - * tests/tests.h: Declare new functions. - -2009-12-03 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/gcdext_subdiv_step.c (mpn_gcdext_subdiv_step): - Select the right cofactor in the cases A == B or A == 2B. - - * mpn/generic/gcdext_lehmer.c (mpn_gcdext_lehmer_n): Deleted - handling of ap[0] == 0 and bp[0] == 0; these cases don't happen. - Select the right cofactor in the case ap[0] == bp[0]. - * mpn/generic/gcdext.c (mpn_gcdext): Analogous changes. - -2009-12-02 Niels Möller <nisse@lysator.liu.se> - - * gmp-h.in (mpn_gcdext_1): Updated prototype. - * mpn/generic/gcdext_lehmer.c (mpn_gcdext_lehmer_n): Updated for - signed cofactors from gcdext_1. - * mpn/generic/gcdext_1.c (mpn_gcdext_1): Use Euclid's algorithm, - and return signed cofactors. - -2009-12-02 Torbjorn Granlund <tege@gmplib.org> - - * doc/gmp.texi (Low-level Functions): Document mpn_sqr_n. - - * tune/speed.c (routine): Add mpn_binvert. - - * tune/tuneup.c: Tune BINV_NEWTON_THRESHOLD. - (tune_binvert): New function. - * tune/speed.h (SPEED_ROUTINE_MPN_BINVERT): New macro. - * tune/common.c (speed_mpn_binvert): New function. - * gmp-impl.h: Provide declarations for corresponding threshold var. - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Add binvert.c. - - * tune/tuneup.c: Tune DC_BDIV_QR_THRESHOLD and DC_BDIV_Q_THRESHOLD. - (tune_dc_bdiv): New function. - (tune_dc_div): New name for tune_dc. - * tune/speed.h (SPEED_ROUTINE_MPN_PI1_BDIV_QR, - SPEED_ROUTINE_MPN_PI1_BDIV_Q): New macros. - * tune/common.c (speed_mpn_sbpi1_bdiv_qr, speed_mpn_dcpi1_bdiv_qr, - speed_mpn_sbpi1_bdiv_q, speed_mpn_dcpi1_bdiv_q): New functions. - * gmp-impl.h: Provide declarations for corresponding threshold vars. - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Add dcpi1_bdiv_qr.c and - dcpi1_bdiv_q.c. - -2009-12-01 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/toom53_mul.c: Removed double computation of vinf. - - * mpn/x86_64/aorrlsh_n.asm: Correct return value for rsblsh_n. - * mpn/asm-defs.m4 (define_mpn): Add rsblsh_n. - * gmp-impl.h (mpn_rsblsh_n): Added prototype and name-mangling. - - * mpn/generic/fib2_ui.c: Reduce the amount of temporary storage. - Use mpn_rsblsh_n. - -2009-12-01 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/redc_n.c: Rework temp allocation. - - * mpn/generic/dcpi1_bdiv_qr.c (mpn_dcpi1_bdiv_qr_n_itch): Add pi1 also - to this function. - - * mpn/generic/dcpi1_bdiv_q.c: Get the mpn_sbpi1_bdiv_q call right. - Misc cleanups. - - * tune/speed.c (routine): Fix typo in last change. - Add mpn_redc_2. - - * tune/speed.h (SPEED_ROUTINE_REDC_N): Set min size properly. - -2009-12-01 Niels Möller <nisse@lysator.liu.se> - - * tune/speed.c (routine): Added mpn_toom42_mul and mpn_redc_n. - * tune/speed.h (SPEED_ROUTINE_MPN_TOOM42_MUL): New macro. - (speed_mpn_toom42_mul): Declare function. - * tune/common.c (speed_mpn_toom42_mul): New function. - * gmp-impl.h (MPN_TOOM42_MUL_MINSIZE): New constant. - -2009-11-30 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/fib2_ui.c: Use mpn_rsblsh2_n. - -2009-11-29 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/pentium4/gmp-mparam.h - (HAVE_NATIVE_mpn_addlsh1_n, HAVE_NATIVE_mpn_sublsh1_n): Don't undef. - - * Makefile.am (EXTRA_DIST): Remove macos. - -2009-11-28 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_redc): Set min_size to 16 for redc_n tuning. - - * mpn/x86_64/sqr_basecase.asm (SQR_TOOM2_THRESHOLD_MAX): Avoid quoting - to allow configure.in parse it more easily. Trim from 120 to 80. - -2009-11-28 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/mulmod_bnm1.c: Basecases made simpler, this also corrects - a bug affecting previous version. - -2009-11-28 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Handle atom also in 32-bit mode. - * mpn/x86/atom/gmp-mparam.h: New file. - - * gmp-impl.h (MULMOD_BNM1_THRESHOLD): Default. - - * mpn/generic/redc_n.c: Use mpn_mulmod_bnm1 instead of mpn_mul_n. - - * Use TMP_ALLOC_LIMBS consistently. - * Finish renaming BITS_PER_MP_LIMB to GMP_LIMB_BITS. - - * macos: Remove entire directory. - -2009-11-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/corei/gmp-mparam.h: New file. - * mpn/x86_64/core2/gmp-mparam.h: Now for just core2. - * mpn/powerpc64/mode64/p3/gmp-mparam.h: New file. - * mpn/powerpc64/mode64/p4/gmp-mparam.h: New file. - * mpn/powerpc64/mode64/p5/gmp-mparam.h: New file. - - * config.guess: Return "corei" for core i7 and core i5. - * config.sub: Recognise "corei". - * acinclude.m4 (X86_64_PATTERN): Add corei. - * configure.in (powerpc): Set up more CPU-specific paths. - (x86): Handle corei. - - * mpz/powm.c: Allow input operand overlap also when exponent = 1. - Misc cleanups. - -2009-11-26 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * tests/mpn/t-mulmod_bnm1.c: New test file. - * tests/mpn/Makefile.am (check_PROGRAMS): Add t-mulmod_bnm1. - - * mpn/generic/mullow_n.c: Comments on Mulders' trick implementation. - -2009-11-26 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/powm.c: Make comments reflect current code state. - - * tests/devel/try.c: Make mpn_mullow_n testing actually work. - -2009-11-25 Torbjorn Granlund <tege@gmplib.org> - - * mpz/powm.c: Clean up unused defs. - -2009-11-24 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_redc): Rewrite. - * mpn/generic/powm.c: Use REDC_1_TO_REDC_2_THRESHOLD, - REDC_1_TO_REDC_N_THRESHOLD, and REDC_2_TO_REDC_N_THRESHOLD. - Get rid of previous REDC params, including LOCAL_REDC_N_THRESHOLD. - (WANT_REDC_2): Define. - * gmp-impl.h: Corresponding changes. - -2009-11-23 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/powm.c: Fix typo. - Define LOCAL_REDC_N_THRESHOLD, use in REDC_2_THRESHOLD... - REDC_N_THRESHOLD chain. - -2009-11-22 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_mullow): Set min_size to 1. - - * mpn/generic/powm_sec.c: Use just mpn_mul_basecase and - mpn_sqr_basecase for multiplication and squaring. - - * tune/tuneup.c: Tune REDC_2_THRESHOLD and REDC_N_THRESHOLD. - (tune_redc): New function. - (tune_powm): Remove function. - * tune/speed.h (SPEED_ROUTINE_REDC_2, SPEED_ROUTINE_REDC_N): New. - * tune/common.c (speed_mpn_redc_2, speed_mpn_redc_n): New. - - * mpz/powm.c: Complete rewrite. Use mpn_powm and mpn_powlo. - * mpn/generic/powm.c: Rewrite. - * mpn/generic/redc_n.c: New file. - * configure.in (gmp_mpn_functions): Add redc_n. - * gmp-impl.h (REDC_2_THRESHOLD, REDC_N_THRESHOLD): Default, and define - for tuneup. - -2009-11-21 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/mullow_n.c: Disable Mulders' trick for small operands, - use fft for bigger ones. - * tests/mpn/t-mullo.c: New test file. - -2009-11-22 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_mullow): Rewrite. - -2009-11-21 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * gmp-impl.h: Removed unused macros (CACHED_ABOVE_THRESHOLD and - CACHED_BELOW_THRESHOLD). - - * mpn/generic/mullow_n.c: Use Mulders' trick. - * tune/tuneup.c (tune_mullow): MULLOW_MUL_N_THRESHOLD range of - search depends on FFT tuning; - (all): Anticipate tune_fft_{mul,sqr}. - - * tune/speed.c (routine): Add entry related to mpn_mulmod_bnm1. - -2009-11-19 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/toom_eval_dgr3_pm2.c (mpn_toom_eval_dgr3_pm2) - [HAVE_NATIVE_mpn_add_n_sub_n]: Fixed typo in mpn_add_n_sub_n call - (spotted by Marco Bodrato). - * mpn/generic/toom_eval_pm2.c (mpn_toom_eval_pm2): Likewise. - * mpn/generic/toom_eval_pm2exp.c (mpn_toom_eval_pm2exp): Likewise. - - * mpn/generic/toom_eval_pm2.c (mpn_toom_eval_pm2) [HAVE_NATIVE_mpn_addlsh_n]: - Fixed missing declaration. - - * mpn/asm-defs.m4 (define_mpn): Add addlsh_n. - * gmp-impl.h (mpn_addlsh_n): Added prototype and name-mangling. - -2009-11-19 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/toom_eval_pm2.c (mpn_toom_eval_pm2): New file. - * mpn/generic/toom53_mul.c (mpn_toom53_mul): Use mpn_toom_eval_pm2. - * mpn/generic/toom62_mul.c (mpn_toom62_mul): Likewise. - * configure.in (gmp_mpn_functions): Added toom_eval_dgr3_pm2. - -2009-11-18 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (mpn_and_n, etc): Adapt to now-public logic functions. - - * config.guess: Recognise VIA nano. - * config.sub: Likewise. - * configure.in: Generalise x86_64 support; recognise VIA nano. - -2009-11-16 Torbjorn Granlund <tege@gmplib.org> - - * tune/speed.c (routine): Add measurement of mpn_addlsh2_n, - mpn_sublsh2_n, mpn_rsblsh2_n. - * tune/common.c: Add speed routines for lsh2 functions. - - * mpn/generic/divis.c: Use MU_BDIV_QR_THRESHOLD. - - * configure.in (gmp_mpn_functions_optional): Add *lsh_n functions. - - * mpn/generic/toom_eval_pm2exp.c: Make HAVE_NATIVE_mpn_addlsh_n code - work. - - * mpn/x86_64/aorrlsh2_n.asm: Optimise inner loop. - - * configure.in (gmp_mpn_functions_optional): Remove copyi,copyd, they - are now in gmp_mpn_functions. Analogously move logical functions. - -2009-11-16 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/toom53_mul.c: Use addlsh2 for evaluation (and fix typo). - * mpn/generic/toom_eval_dgr3_pm2.c: Likewise (affects toom44 and 43). - - * mpn/asm-defs.m4: Fix comments for op_lsh2 new functions. - * gmp-impl.h: Likewise. - * tests/mpz/t-fac_ui.c: Fix a comment. - -2009-11-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/aorrlsh2_n.asm: New file. - * configure.in: Add support for addlsh2_n, sublsh2_n, and rsblsh2_n, - including mulfuncs. - * gmp-impl.h (mpn_addlsh2_n, mpn_sublsh2_n, mpn_rsblsh2_n): Declare. - * mpn/asm-defs.m4: Likewise. - - * mpn/generic/copyi.c: New file. - * mpn/generic/copyd.c: Likewise. - * mpn/generic/zero.c: Likewise. - * gmp-h.in: Declare new functions. - * configure.in (gmp_mpn_functions): Add new functions. - -2009-11-15 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/mulmod_bnm1.c (mpn_mulmod_bnm1_next_size): fix typo - - * mpn/generic/toom33_mul.c: Use rsblsh1 for evaluation. - * mpn/generic/toom3_sqr.c: Likewise. - -2009-11-14 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/toom52_mul.c: Use mpn_addlsh1_n. - - * mpn/generic/toom52_mul.c: Toggle the right flag bit in an - HAVE_NATIVE_mpn_add_n_sub_n arm. - - * tests/mpz/t-remove.c: New file. - - * mpn/generic/remove.c: Major overhaul. Add parameter 'cap'. - - * mpn/generic/binvert.c: Fix typo in last change. - - * mpn/generic/bdiv_qr.c: Make it actually work. Also use passed-in - scratch space. - - * mpn/generic/mu_bdiv_qr.c: Reset FFT parameters for each call. - -2009-11-12 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/k7/gcd_1.asm (MASK): Compute from MAXSHIFT. - -2009-11-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/binvert.c: Simplify, fix comments. - - * tests/devel/try.c: Test mpn_invert and mpn_binvert. - - * tests/refmpn.c (refmpn_invert, refmpn_binvert): New functions. - * tests/tests.h: Declare new functions. - -2009-11-10 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Supply compiler options for atom in 32-bit mode. - - * acinclude.m4 (X86_64_PATTERN): New. - * configure.in: Setup and use X86_64_PATTERN. - - * mpn/x86_64/fat/fat.c: New file. - * mpn/x86_64/fat/fat_entry.asm: New file. - * mpn/x86_64/fat: Copy C placeholder files from mpn/x86/fat. - * mpn/x86_64/x86_64-defs.m4 (CPUVEC_FUNCS_LIST): New, copied from - mpn/x86/x86-defs.m4. - * configure.in: Move down x86 fat setup code until after ABI has been - determined; generalise to handle x86_64. - -2009-11-09 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/fat/mod_1.c: New file. - - * acinclude.m4 (GMP_C_FOR_BUILD_ANSI): Avoid poor quoting. - -2009-11-08 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (MPN_LOGOPS_N_INLINE): Rewrite, update interface. Callers - updated. - * mpn/generic/logops_n.c: New file. - * doc/gmp.texi (Low-level Functions): Document logical mpn functions. - -2009-11-07 Torbjorn Granlund <tege@gmplib.org> - - * tune/speed.h (SPEED_ROUTINE_MPN_MULMOD_BNM1): Adapt to new - mpn_mulmod_bnm1 interface. - -2009-11-07 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/mulmod_bnm1.c: New interface, with size - specified for all operands in mpn_mulmod_bnm1. - * gmp-impl.h: Changed mpn_mulmod_bnm1 prototype. - -2009-11-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/k7/gcd_1.asm: Actually use div-reduced value. - Mnemonic cleanup. - - * mpn/x86_64/gcd_1.asm: New file. - -2009-11-03 Torbjorn Granlund <tege@gmplib.org> - - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Add sqr_n.c. - -2009-11-03 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/toom_interpolate_6pts.c: removed an addmul_1 and cleanup. - -2009-11-02 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (gmp_mpn_functions): Remove obsolete functions - dc_divrem_n and sb_divrem_mn. - * gmp-impl.h: Misc cleanup. - (mpn_sb_divrem_mn, mpn_dc_divrem_n): Remove. - (DIV_DC_THRESHOLD): Remove. - * mpn/generic/dc_divrem_n.c: Remove. - * mpn/generic/sb_divrem_mn.c: Remove. - * mpn/generic/tdiv_qr.c: Use DC_DIV_QR_THRESHOLD, not DIV_DC_THRESHOLD. - - * tests/devel/try.c: Replace mpn_sb_divrem_mn by mpn_sbpi1_div_qr. - * tests/refmpn.c (refmpn_sb_div_qr): New name for refmpn_sb_divrem_mn. - - * tune/Makefile.am (libspeed_la_SOURCES): Remove sb_div.c and sb_inv.c. - (TUNE_MPN_SRCS_BASIC): Remove sb_divrem_mn.c. - * tune/common.c (speed_mpn_dcpi1_div_qr_n): New function. - Remove mpn_sb_divrem_mn related functions. - * tune/speed.c (routine): Remove entries related to mpn_dc_divrem and - mpn_sb_divrem. - (routine): New entry for mpn_dc_div_qr_n. - * tune/speed.h (SPEED_ROUTINE_MPN_DC_DIVREM_CALL): Compute inverse - needed by pi1 calls. - (SPEED_ROUTINE_MPN_SB_DIVREM_M3): Remove. - * tune/tuneup.c (tune_sb_preinv): Remove. - (tune_dc): Update to measure DC_DIV_QR_THRESHOLD. - - * mpn/generic/sb_divappr_q.c: Remove. - -2009-11-01 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h: Misc minor cleanups. - -2009-10-31 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (toom itch functions): Simplify, make some into macros. - (MPN_KARA_MUL_N_TSIZE, MPN_KARA_SQR_N_TSIZE): Remove. - * mpn/generic/mul_n.c (mpn_toom3_mul_n, mpn_toom3_sqr_n): Remove. - * mpn/generic/mul_n.c (mpn_sqr_n): Move from here... - * mpn/generic/sqr_n.c: ...to this new file. - * configure.in (gmp_mpn_functions): Add sqr_n. - - * Globally change - MUL_TOOM3_THRESHOLD => MUL_TOOM33_THRESHOLD, - MUL_KARATSUBA_THRESHOLD => MUL_TOOM22_THRESHOLD, - SQR_KARATSUBA_THRESHOLD => SQR_TOOM2_THRESHOLD, - and associated names analogously. - -2009-10-31 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/toom_interpolate_7pts.c: Changed evaluation points, - replacing -1/2 by -2. - * mpn/generic/toom44_mul.c: Updated to use new evaluation points, - and use mpn_toom_eval_dgr3_pm2. - * mpn/generic/toom4_sqr.c (mpn_toom4_sqr): Likewise. - * mpn/generic/toom53_mul.c (mpn_toom53_mul): Updated to use new - evaluation points, and use mpn_toom_eval_pm1 and - mpn_toom_eval_pm2exp. - * mpn/generic/toom62_mul.c (mpn_toom62_mul): Likewise. - - * mpn/generic/toom_eval_pm2exp.c: New file. - * mpn/generic/toom_eval_pm1.c: New file. - - * mpn/generic/toom43_mul.c (mpn_toom43_mul): Use - mpn_toom_eval_dgr3_pm2. - -2009-10-30 Torbjorn Granlund <tege@gmplib.org> - - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Add toom2* and toom3* files. - -2009-10-30 Niels Möller <nisse@lysator.liu.se> - - * configure.in (gmp_mpn_functions): Added toom_eval_dgr3_pm2. - * gmp-impl.h: Added prototype for mpn_toom_eval_dgr3_pm2. - * mpn/generic/toom_eval_dgr3_pm2.c: New file. - -2009-10-29 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/toom43_mul.c (mpn_toom43_mul): Use - mpn_toom_eval_dgr3_pm1. - * mpn/generic/toom42_mul.c (mpn_toom42_mul): Likewise. - -2009-10-29 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mulmod_bnm1.c: Replace some add_1 by INCR. - - * gmp-impl.h (mpn_mulmod_bnm1_itch): New macro. - - * mpn/generic/mulmod_bnm1.c (mpn_mulmod_bnm1): Call mpn_mul_fft. - (mpn_mulmod_bnm1_next_size): Adopt to SS FFT. - - * mpn/generic/mul_fft.c (mpn_mul_fft): Make it return high limb. - (mpn_mul_fft_internal): Likewise. - - * mpn/generic/mulmod_bnm1.c: New file, by Niels Möller. - * configure.in (gmp_mpn_functions): Add mulmod_bnm1. - * gmp-impl.h: Add related declarations. - * tune/tuneup.c: Tune MULMOD_BNM1_THRESHOLD. - * tune/speed.h (SPEED_ROUTINE_MPN_MULMOD_BNM1): New macro. - * tune/common.c (speed_mpn_mulmod_bnm1): New function. - * Makefile.am (TUNE_MPN_SRCS_BASIC): Add mulmod_bnm1.c. - - * gmp-impl.h (mpn_kara_mul_n, mpn_kara_sqr_n): Remove declarations. - * tune/common.c: Remove/rename kara functions. - * tune/speed.h: Likewise. - - * tests/devel/try.c: Clean up usage of %p printf arguments. - - * gmp-impl.h: Update MUL/SQR MINSIZE macros to reflect new function - names and limitations - * tune/tuneup.c: Use updated macro names. - * tune/speed.h: Likewise. - * tests/devel/try.c: Test new mul/sqr functions, remove old tests. - -2009-10-29 Niels Möller <nisse@lysator.liu.se> - - * tune/speed.c: Added support for mpn_toom4_sqr, - - * tune/speed.h (SPEED_ROUTINE_MPN_TOOM4_SQR): New macro. - (SPEED_ROUTINE_MPN_KARA_MUL_N): Deleted. - (SPEED_ROUTINE_MPN_TOOM3_MUL_N): Deleted. - (SPEED_ROUTINE_MPN_TOOM2_SQR): Use mpn_toom2_sqr_itch. - - * gmp-impl.h (mpn_toom3_mul_n, mpn_toom3_sqr_n): Remove - declarations. - (mpn_toom2_sqr_itch): Add margin for recursive calls. - -2009-10-28 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/mul_n.c (mpn_kara_mul_n): Deleted old Karatsuba - implementation. - (mpn_kara_sqr_n): Likewise deleted. - - * mpn/generic/mul_n.c (mpn_sqr_n): Use mpn_toom2_sqr and - mpn_toom3_sqr, not the old implementations. - - * gmp-impl.h (MPN_TOOM3_MUL_N_TSIZE): Deleted, replaced by - mpn_toom33_mul_itch. - (MPN_TOOM3_SQR_N_TSIZE): Deleted, replaced by - mpn_toom3_sqr_itch. - (mpn_toom33_mul_itch): Needs more scratch. - (mpn_toom3_sqr_itch): Likewise. - * tune/speed.h (SPEED_ROUTINE_MPN_TOOM3_MUL_N): Use - mpn_toom33_mul_itch. - (SPEED_ROUTINE_MPN_TOOM3_SQR_N): Use mpn_toom3_sqr_itch. - * mpn/generic/mul_n.c (mpn_mul_n): Use mpn_toom33_mul_itch. - (mpn_sqr_n): Use mpn_toom3_sqr_itch. - - * mpn/generic/toom33_mul.c (mpn_toom33_mul): Avoid TMP_ALLOC. Needs - some more supplied scratch instead. - * mpn/generic/toom3_sqr.c (mpn_toom3_sqr): Likewise. - -2009-10-26 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (invert_pi1): Streamline, as suggested by Niels. - -2009-10-24 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/bdiv_q.c: Update to call new functions. - * mpn/generic/bdiv_qr.c: Likewise. - * mpn/generic/binvert.c: Likewise. - * mpn/generic/divexact.c: Likewise. - * mpn/generic/divis.c: Likewise. - * mpn/generic/perfpow.c: Likewise. - * mpn/generic/tdiv_qr.c: Likewise. - * mpn/generic/dcpi1_bdiv_q.c: New file. - * mpn/generic/dcpi1_bdiv_qr.c: New file. - * mpn/generic/dcpi1_div_q.c: New file. - * mpn/generic/dcpi1_div_qr.c: New file. - * mpn/generic/dcpi1_divappr_q.c: New file. - * mpn/generic/sbpi1_bdiv_q.c: New file. - * mpn/generic/sbpi1_bdiv_qr.c: New file. - * mpn/generic/sbpi1_div_q.c: New file. - * mpn/generic/sbpi1_div_qr.c: New file. - * mpn/generic/sbpi1_divappr_q.c: New file. - * mpn/generic/dc_bdiv_q.c: Removed. - * mpn/generic/dc_bdiv_qr.c: Removed. - * mpn/generic/dc_div_q.c: Removed. - * mpn/generic/dc_div_qr.c: Removed. - * mpn/generic/dc_divappr_q.c: Removed. - * mpn/generic/sb_bdiv_q.c: Removed. - * mpn/generic/sb_bdiv_qr.c: Removed. - * mpn/generic/sb_div_q.c: Removed. - * mpn/generic/sb_div_qr.c: Removed. - - * configure.in (gmp_mpn_functions): Add new division functions, remove - obsolete division functions. - - * gmp-impl.h: Add declarations of new division functions, remove - corresponding obsolete declarations. - (gmp_pi1_t, gmp_pi2_t): New types. - (invert_pi1): New macro for computing 2/1 and 3/2 inverses. - -2009-10-23 Niels Möller <nisse@lysator.liu.se> - - * gmp-impl.h (mpn_toom62_mul_itch): New function. - - * tests/mpn/t-toom53.c: New test program. - * tests/mpn/t-toom62.c: New test program. - -2009-10-23 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/get_d.c: Fix code handling denorms for 64-bit machines. - * tests/mpf/t-get_d.c (test_denorms): New function. - -2009-10-23 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/toom52_mul.c (mpn_toom52_mul): Use supplied scratch - space, not TMP_ALLOC. Interface change, now requires input sizes - such that s + t >= 5. - - * gmp-impl.h (mpn_toom52_mul_itch): New function. - - * tests/mpn/t-toom52.c: New test program. - -2009-10-22 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/sqr_basecase.asm: Tune for speed and a 7% size decrease. - -2009-10-22 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/t-toom44.c: New test program. - * tests/mpn/t-toom33.c: New test program. - - * tests/mpn/toom-shared.h (main): Reorganized input generation. - Users are now supposed to define macros MAX_AN, MIN_BN and MAX_BN. - Updated existing toom test programs. - -2009-10-22 Torbjorn Granlund <tege@gmplib.org> - - * tests/devel/try.c: Fix typos in last change. - -2009-10-21 Torbjorn Granlund <tege@gmplib.org> - - * mpn/asm-defs.m4 (define_mpn): Add mullow_basecase. - - * tests/devel/try.c: Test mpn_mullow_n. - - * tests/refmpn.c (refmpn_mullow_n): New function. - * tests/tests.h: Declare it. - -2009-10-21 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/toom-shared.h (main): Check for writes outside of the - product or scratch area. - - * gmp-impl.h (mpn_toom43_mul_itch): New function. - - * mpn/generic/toom43_mul.c (mpn_toom43_mul): Use supplied scratch - space, not TMP_ALLOC. Interface change, now requires input sizes - such that s + t >= 5. - -2009-10-20 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/toom-shared.h (MIN_BLOCK): New constant, which can be - overridden by users. Needed by t-toom42 and t-toom43. - - * tests/mpn/Makefile.am (check_PROGRAMS): Added t-toom32, - t-toom42 and t-toom43. - * tests/mpn/t-toom43.c: New test program. - * tests/mpn/t-toom42.c: New test program. - * tests/mpn/t-toom32.c: New test program. - - * tests/mpn/Makefile.am (check_PROGRAMS): Added t-toom22. - * tests/mpn/t-toom22.c: New test file. - * tests/mpn/toom-shared.h: New file. Test framework for Toom - functions. - -2009-10-14 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd.c (mpn_hgcd_itch): Thanks to the new - mpn_matrix22_mul_strassen, the scratch need is reduced by 16%. - -2009-10-14 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/matrix22_mul.c (mpn_matrix22_mul_strassen): New - Strassen-like algorithm, to reduce the amount of temporary - storage. - (mpn_matrix22_mul_itch): Updated to reflect the reduced storage - need. - -2009-10-03 Torbjorn Granlund <tege@gmplib.org> - - * Rename mpn_addsub_n to mpn_add_n_sub_n. - -2009-10-01 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/tdiv_qr.c: Call mpn_divrem_1 and mpn_dc_div_qr instead of - old functions. - - * mpn/generic/mul_n.c: Call toom22 and toom33 instead of old functions. - - * mpn/generic/toom42_mul.c (TOOM42_MUL_N_REC): Renamed from - TOOM22_MUL_N_REC. Unconditionally call the generic mpn_mul_n. - * mpn/generic/toom32_mul.c: Analogous changes. - -2009-09-28 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86_64/invert_limb.asm: Rewrite. Exploit cancellation in the - Newton iteration. - -2009-09-27 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86/invert_limb.asm: Reduce register usage. Eliminated $1 - arguments to add, sub and shift. - -2009-09-25 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86/invert_limb.asm: New file. - -2009-09-24 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/toom33_mul.c: Use new toom functions for all recursive - products. - * mpn/generic/toom3_sqr.c: Likewise. - * mpn/generic/toom44_mul.c: Likewise. - * mpn/generic/toom4_sqr.c: Likewise. - - * mpn/generic/add_n.c: Relax operand overlap ASSERTs. - * mpn/generic/sub_n.c: Likewise. - -2009-09-15 Torbjorn Granlund <tege@gmplib.org> - - Suggested by Uwe Mueller: - * printf/doprnt.c: Use "%ld" for exponent printing. - * printf/doprntf.c (__gmp_doprnt_mpf): Make expval "long". - -2009-09-14 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Handle mingw64. - * gmp-impl.h (gmp_intptr_t): Declare. - * tests/amd64check.c (calling_conventions_values): Use CNST_LIMB. - * tests/memory.c: Use gmp_intptr_t; print pointers using C90 "%p". - * tests/misc.c: Use gmp_intptr_t. - * tests/mpq/t-get_str.c: Print pointers using C90 "%p". - -2009-08-12 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mod_1_1.c (mpn_mod_1_1p_cps): Remove silly ASSERT code. - - * mpn/asm-defs.m4 (define_mpn): Remove mod_1s_1p, add mod_1_1p. - - * mpn/arm/invert_limb.asm: Complete rewrite. - - * longlong.h: Document LONGLONG_STANDALONE and NO_ASM. - -2009-08-05 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/dive_ui.c (check_random): Avoid zero divisors. - -2009-07-31 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mod_1_1.c: Tweak to handle any modulus (possibility - pointed out by Per Austrin). - (mpn_mod_1_1p): Renamed from mpn_mod_1s_1p. - (mpn_mod_1_1p_cps): Renamed from mpn_mod_1s_1p_cps. - *mpn/generic/mod_1.c (mpn_mod_1): Reorganise to call mpn_mod_1_1p for - any modulus. - -2009-07-28 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Pass arch for x86 also in 64-bit mode. - -2009-07-26 Torbjorn Granlund <tege@swox.com> - - * config.guess (_cpuid): Recognise more Intel "Core" processors. - -2009-07-13 Torbjorn Granlund <tege@gmplib.org> - - * mpf/eq.c: Rewrite. - - * tests/mpf/t-eq.c: New test. - -2009-07-06 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (__mp_bases): Remove this alias. - - * mpf/get_str.c: Use less overflow prone expression for computing limb - allocation. - * mpz/inp_str.c: Likewise. - * mpf/set_str.c: Likewise. - * mpz/set_str.c: Likewise. - -2009-07-03 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/gcd_1.c (mpn_gcd_1): Use masking tricks to reduce - the number of branches in the loop. - -2009-06-28 Torbjorn Granlund <tege@gmplib.org> - - * demos/factorize.c (factor_using_pollard_rho): Rewrite. - - * mpz/clears.c: New file. - * mpq/clears.c: New file. - * mpf/clears.c: New file. - * gmp-h.in (mpz_clears, mpq_clears, mpf_clears): Declare. - * mpz/Makefile.am: Add clears.c. - * mpq/Makefile.am: Add clears.c. - * mpf/Makefile.am: Add clears.c. - * Makefile.am: Add these also to respective OBJECTS variables. - * doc/gmp.texi: Document inits function and clears functions. - -2009-06-20 Torbjorn Granlund <tege@gmplib.org> - - * mp-h.in (mp_bitcnt_t): Declare here too. - -2009-06-19 Torbjorn Granlund <tege@gmplib.org> - - * mpq/inits.c: New file. - * mpf/inits.c: New file. - * gmp-h.in (mpz_inits, mpq_inits, mpf_inits): Declare . - - * mpn/generic/remove.c: New file. - * configure.in (gmp_mpn_functions): Add remove. - * gmp-impl.h (mpn_remove): Declare. - - * gmp-h.in (mp_bitcnt_t): New basic type. - * mpn/generic/perfpow.c (mp_bitcnt_t): Remove private definition. - - * mpn/generic/bdiv_qr.c: Make it actually work. - - * mpn/x86_64/core2/aorsmul_1.asm: Rewrite to use shorter pipeline and - to need fewer registers. - -2009-06-17 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/rsh1aors_n.asm: New file. - * mpn/x86_64/rsh1add_n.asm: Remove. - * mpn/x86_64/rsh1sub_n.asm: Remove. - - * mpz/inits.c: New file. - - * gen-trialdivtab.c: Wrap limb constants into CNST_LIMB. - - With Martin Boij: - * mpn/generic/perfpow.c (binv_root, binv_sqroot): Change from being - recursive to being iterative. - (mpn_perfect_power_p): Reorganise temp memory usage to avoid a buffer - overrun. Trim allocation of next and prev. Never create oversize - products in the multiplicity binary search. - - * mpn/generic/dc_div_q.c: Add missing TMP_FREE. - -2009-06-16 Torbjorn Granlund <tege@gmplib.org> - - Revert: - * mpn/generic/perfpow.c (perfpow): Test exponents up to ub, inclusive. - -2009-06-16 Martin Boij <mboij@kth.se> - - * mpn/generic/perfpow.c (logs): Use more conservative table. - -2009-06-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/pa64/aors_n.asm: New file. - * mpn/pa64/add_n.asm: Remove. - * mpn/pa64/sub_n.asm: Remove. - - * mpn/generic/perfpow.c (perfpow): Test exponents up to ub, inclusive. - -2009-06-14 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/bdiv_q_1.asm: Optimise away a mov insn. - * mpn/x86_64/dive_1.asm: Likewise. - - * mpn/generic/perfpow.c (binv_root): Use mpn_bdiv_q_1, not - mpn_divexact_itch for 2-adic division. - (all functions): Micro optimise. - - * Makefile.am (libmp_la_SOURCES): Add nextprime.c. - -2009-06-13 Torbjorn Granlund <tege@gmplib.org> - - * gmp-h.in (mpn_perfect_power_p): Declare. - * configure.in (gmp_mpn_functions): Add perfpow. - * mpz/perfpow.c: Now trivial, simply calls mpn_perfect_power_p. - -2009-06-13 Martin Boij <mboij@kth.se> - - * mpn/generic/perfpow.c: New file. - * tests/mpz/t-perfpow.c: Rewrite. - -2009-06-12 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/bdiv_qr.c: New file. - * mpn/generic/bdiv_q.c: New file. - * configure.in (gmp_mpn_functions): Add bdiv_qr and bdiv_q. - * gmp-impl.h: Declare new functions. - - * nextprime.c: New file. - * gmp-impl.h (gmp_primesieve_t, gmp_init_primesieve, gmp_nextprime): - Declare. - * Makefile.am (libgmp_la_SOURCES): Add nextprime.c. - -2009-06-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/trialdiv.c: New file. - * gen-trialdivtab.c: New file. - * configure.in (gmp_mpn_functions): Add trialdiv. - * gmp-impl.h (mpn_trialdiv): Declare - * Makefile.am: Add rules for gen-trialdivtab and trialdiv. - - * longlong.h (arm count_leading_zeros): Define for armv5. - - * gmp-impl.h: Move down toom itch functions to after we've #defined - all THRESHOLDs. - - * dumbmp.c (isprime): Replace with slightly less inefficient code. - (mpz_tdiv_r): New function. - -2009-06-11 Niels Möller <nisse@lysator.liu.se> - - Support for mpn_toom32_mul in speed: - * tune/speed.c (routine): Added mpn_toom32_mul. - * tune/speed.h (SPEED_ROUTINE_MPN_TOOM32_MUL): New macro. - * tune/common.c (speed_mpn_toom32_mul): New function. - - * gmp-impl.h (mpn_toom32_mul_itch): Count scratch space needed - for the calls to mpn_toom22_mul. - (ABOVE_THRESHOLD): Moved this and related macros so it can be used - by mpn_toom32_mul_itch. - (mpn_toom22_mul_itch): Count scratch space for recursive calls. - -2009-06-11 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/k7/mod_1_4.asm: New file, mainly for k7, but perhaps useful - also for k6 and non-sse p6. - -2009-06-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/mod_1_4.asm: Minor size reducing tweaks. - - * mpn/x86/mod_1.asm: Remove obsolete file. - * mpn/x86/k7/mmx/mod_1.asm: Likewise. - * mpn/x86/pentium4/sse2/mod_1.asm: Likewise. - * mpn/x86/p6/mod_1.asm: Likewise. - * mpn/x86/pentium/mod_1.asm: Likewise. - -2009-06-08 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/toom4_sqr.c (mpn_toom4_sqr): Reorganized, to reduce - the need for scratch space, and get rid of TMP_ALLOC. Also use - mpn_toom_eval_dgr3_pm1. - - * mpn/generic/toom_interpolate_6pts.c (mpn_toom_interpolate_6pts): - Stricter ASSERTs based on maximum size of polynomial coefficients. - Improved comments on the signedness of intermediate values. - -2009-06-07 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/toom2_sqr.c: Make it actually work. - - * mpn/generic/toom3_sqr.c: Reduce local scratch space. - -2009-06-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mul_fft.c (FFT_TABLE2_SIZE): Default to 200. - (MUL_FFT_TABLE2_SIZE, SQR_FFT_TABLE2_SIZE): Let these decide - FFT_TABLE2_SIZE if they are defined. - (struct nk): Use bit field. - -2009-06-05 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/toom44_mul.c (mpn_toom44_mult): Use - mpn_toom_eval_dgr3_pm1. - - * mpn/generic/toom_eval_dgr3_pm1.c: New file. - - * mpn/generic/toom_interpolate_7pts.c (mpn_toom_interpolate_7pts): - Minor cleanup, use mpn_add rather than mpn_add_n + MPN_INCR_U. - - * mpn/generic/toom44_mul.c (mpn_toom44_mul): Reorganized, to - reduce the need for scratch space, and get rid of TMP_ALLOC. - -2009-06-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/toom_interpolate_7pts.c: Fall back mpn_divexact_byN to - mpn_bdiv_q_1_pi1, if the latter is NATIVE. - -2009-06-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/bdiv_q_1.asm: New file. - - * configure.in (HAVE_NATIVE): Add recently added functions. - (GMP_MULFUNC_CHOICES): Handle addlsh_n, sublsh_n, rsblsh_n. - - * tune/common.c (speed_mpn_bdiv_q_1, speed_mpn_bdiv_q_1_pi1): - New functions. - * tune/speed.c (routine): Add mpn_bdiv_q_1 and mpn_bdiv_q_1_pi1. - * tune/speed.h (SPEED_ROUTINE_MPN_BDIV_Q_1_PI1): New #define. - (SPEED_ROUTINE_MPN_BDIV_Q_1): Mew #define. - - * configure.in (gmp_mpn_functions): Add bdiv_q_1. - * mpn/generic/bdiv_q_1.c: New file. - * mpn/asm-defs.m4 (define_mpn): Add mpn_bdiv_q_1 and mpn_bdiv_q_1_pi1. - * gmp-impl.h (mpn_bdiv_q_1, mpn_bdiv_q_1_pi1): Declare. - - * mpn/x86_64/lshift.asm: Cleanup. - * mpn/x86_64/rshift.asm: Cleanup. - - * mpn/x86_64/addlsh1_n.asm: Removed. - * mpn/x86_64/aorrlsh1_n.asm: Generalised addlsh1_n.asm to handle - addlsh1_n and rsblsh1_n functionality. - - * tests/refmpn.c (refmpn_rsblsh1_n): New function. - * tests/devel/try.c: Test mpn_rsblsh1_n. - * tests/tests.h: Declare refmpn_rsblsh1_n. - * tune/common.c (speed_mpn_rsblsh1_n): New function. - * tune/speed.c (routine): Add mpn_rsblsh1_n. - * tune/speed.h (mpn_rsblsh1_n): Declare. - - * configure.in (gmp_mpn_functions_optional): Add rsblsh1_n. - (GMP_MULFUNC_CHOICES): Handle rsblsh1_n defined with a mulfunc. - * mpn/asm-defs.m4 (define_mpn): Add rsblsh1_n. - * gmp-impl.h (mpn_rsblsh1_n): Declare. - - * mpn/generic/toom32_mul.c: Consistently use TOOM22_MUL_N_REC. - -2009-06-03 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/toom43_mul.c: New file. - * mpn/generic/toom52_mul.c: New file. - * mpn/generic/toom_interpolate_6pts.c: New file. - -2009-06-03 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (gmp_mpn_functions): Add toom43_mul, toom52_mul, and - toom_interpolate_6pts, but also some previously forgotten functions. - * mpn/Makefile.am (nodist_EXTRA_libmpn_la_SOURCES): Likewise. - * gmp-impl.h: Declare new functions. Sort toom function declarations. - - * gmp-impl.h: Rename toom4_* flags enum to toom7_*. Relevant C files - updated. - - * mpn/generic/toom_interpolate_7pts (divexact_2exp): Remove. - -2009-06-02 Torbjorn Granlund <tege@gmplib.org> - - * demos/factorize.c: Add -q command line option. - -2009-06-02 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/toom_interpolate_7pts.c: Streamline, resulting in speed - improvements. - - * mpn/generic/toom_interpolate_5pts.c: Likewise, but also completely - do away with explicit scratch space. - * gmp-impl.h (mpn_toom_interpolate_5pts): Update prototype. - - * mpn/generic/mul_n.c (mpn_toom3_sqr_n, mpn_toom3_mul_n): - Update toom_interpolate_5pts call without scratch space parameter. - * mpn/generic/toom3_sqr.c: Likewise. - * mpn/generic/toom42_mul.c: Likewise. - * mpn/generic/toom33_mul.c: Likewise. - - * mpn/generic/toom33_mul.c: Reduce local scratch space. - * mpn/generic/toom32_mul.c: Rewrite to not use local scratch space. - -2009-06-02 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/toom22_mul.c (TOOM22_MUL_MN_REC): New macro, use it for - oo point. - -2009-06-01 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mul.c: Loop to avoid excessive recursion in toom33 and - toom44 slicing code. - - * mpz/remove.c: Correctly handle multiplicity that does not fit an int. - - * Makefile.am (dist-hook): Check library version consistency. - - * mpn/generic/mul.c: Rewrite. - -2009-05-29 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/t-divis.c (check_random): Create huge test operands. - - * mpn/generic/toom44_mul.c: Allocate temp space using one TMP_ALLOC - call, not multiple TMP_SALLOC. - * mpn/generic/toom4_sqr.c: Likewise. - - * gmp-impl.h (mpn_toom22_mul_itch): Replace totally wrong code. - - * mpn/generic/mullow_n.c: Relax overlap requirement implied by ASSERT. - - * mpn/generic/divis.c: Rewrite. - - * gmp-impl.h (mpn_mu_bdiv_qr): Now returns mp_limb_t. - (mpn_toom2_sqr_itch): Simplify. - - * mpn/generic/mu_bdiv_qr.c: Implement properly. - -2009-05-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mod_1_1.c: Add proper ASSERT functionality cps function. - * mpn/generic/mod_1_2.c: Likewise. - * mpn/generic/mod_1_3.c: Likewise. - * mpn/generic/mod_1_4.c: Likewise. - - * tune: Add speed measuring of toom22, toom33, and toom44. - - * mpn/generic/toom22_mul.c: Handle potentially unbalanced coefficient - product better. - -2009-05-26 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/t-mul.c (ref_mpn_mul): Use mpn_toom44_mul in FFT range for - better huge-operands performance. - -2009-05-24 Torbjorn Granlund <tege@gmplib.org> - - * acinclude.m4 (GMP_ASM_LSYM_PREFIX): Try "$L" too, before "$". - -2009-05-23 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (mpn_mod_1s_1p,mpn_mod_1s_2p,mpn_mod_1s_3p,mpn_mod_1s_4p): - Declare using __GMP_ATTRIBUTE_PURE. - - * tune/tuneup.c (tune_mod_1): Specify check_size for measuring mod_1_N - functions. - (one): Remove redundant size loop exit condition. - -2009-05-20 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/pentium4/sse2/mod_1_4.asm: New file. - * mpn/x86/p6/sse2/mod_1_4.asm: New file (grabbing pentium4 code). - -2009-05-18 Torbjorn Granlund <tege@gmplib.org> - - * gmp-h.in (__GNU_MP_VERSION_MINOR): Bump to 4. - (__GNU_MP_VERSION_PATCHLEVEL): Set to -1. - - * mpn/x86_64/mod_1_4.asm: New file. - - * mpn/asm-defs.m4: Correct names for mod_1_N functions. - Add defines for corresponding cps functions. - - * mpn/generic/mod_1_2.c: Support any sizes > 1. - * mpn/generic/mod_1_3.c: Likewise. - * mpn/generic/mod_1_4.c: Likewise. - -2009-05-12 Torbjorn Granlund <tege@gmplib.org> - - * Version 4.3.1 released. - -2009-05-11 Torbjorn Granlund <tege@gmplib.org> - - * gmp-h.in (__GNU_MP_VERSION_MINOR): Bump. - - * Makefile.am (LIBGMP_LT_*, LIBGMPXX_LT_*, LIBMP_LT_*): - Bump version info. - -2009-05-09 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz: Add MPZ_CHECK_FORMAT to many tests. - -2009-05-07 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/pentium4/sse2/mul_basecase.asm: Avoid L(ret), "ret" is - defined in x86-defs.m4. - -2009-05-06 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/p6/aors_n.asm: Use L() for labels. - * mpn/x86/pentium4/sse2/addmul_1.asm: Likewise. - * mpn/x86/pentium4/sse2/mul_1.asm: Likewise. - * mpn/x86/pentium4/sse2/mul_basecase.asm: Likewise. - * mpn/x86/pentium4/sse2/sqr_basecase.asm: Likewise. - * mpn/x86_64/lshift.asm: Likewise. - * mpn/x86_64/rshift.asm: Likewise. - - * tests/cxx/t-locale.cc (point_string): Declare as extern "C" to - placate compilers that mangle variable names. - -2009-05-04 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/t-gcd.c: Generate operands that are multiple of each other. - -2009-05-01 Torbjorn Granlund <tege@gmplib.org> - - * gmp-h.in (__GMP_EXTERN_INLINE): Support for more systems. - (gmp_randinit_set): Add missing __GMP_DECLSPEC. - -2009-04-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/neg_n.c: New file. - * configure.in (gmp_mpn_functions): Add neg_n. - * mpn/asm-defs.m4 (define_mpn): Add neg_n. - * mpn/Makefile.am (nodist_EXTRA_libmpn_la_SOURCES): Add neg_n.c. - * gmp-h.in: Handle mpn_neg_n properly. - - * mpn/generic/toom_interpolate_7pts.c (divexact_2exp): Nailify. - - * mpn/generic/gcdext.c: Change some MPN_NORMALIZE to - MPN_NORMALIZE_NOT_ZERO. - * mpn/generic/gcdext_lehmer.c: Likewise. - Add a MPN_NORMALIZE_NOT_ZERO. - - * mpn/generic/binvert.c: Remove own mpn_neg_n. - - * tests/mpz/t-gcd.c: Add some MPZ_CHECK_FORMAT calls. - -2009-04-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/Makefile.am (TARG_DIST): Add minithres. - - * mpn/generic/bdiv_dbm1c.c: Handle nails. - -2009-04-26 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Recognise more POWER processor types. - -2009-04-25 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/pentium4/sse2/popcount.asm: Work around Apple reloc bug. - * mpn/x86/darwin.m4: Define symbol "DARWIN". - -2009-04-19 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/powm.c (mpn_redc_n): Use ASSERT_ALWAYS, not abort(). - * mpn/generic/powm_sec.c: Likewise. - - * mpn/powerpc64/aix.m4 (EXTERN_FUNC): New define. Add dummy variants - for other m4 files. - * mpn/powerpc64/mode64/divrem_1.asm: Use EXTERN_FUNC. - * mpn/powerpc64/mode64/divrem_1.asm: Likewise. - -2009-04-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/x86_64-defs.m4 (JUMPTABSECT): New define. - * mpn/x86_64/darwin.m4: Likewise. - * mpn/x86_64/sqr_basecase.asm: Rework switch code using JUMPTABSECT. - - * tune/common.c (speed_mpn_hgcd, speed_mpn_hgcd_lehmer): - Remove an unused variable. - - * mpn/x86/x86-defs.m4 (LEA): Get SIZE arguments right. - -2009-04-14 Torbjorn Granlund <tege@gmplib.org> - - * Version 4.3.0 released. - - * scanf/doscan.c (__gmp_doscan): Pad 3-operand scanf call with dummy - argument. - * scanf/sscanffuns.c (scan): Disable vsscanf variant for now. - -2009-04-13 Torbjorn Granlund <tege@gmplib.org> - - * scanf/sscanffuns.c (scan): Rewrite to use stdarg. - - * tests/mpz/t-root.c: Rewrite. Add unconditional gcc 4.3.2 tests. - -2009-04-09 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/powm.c: New file. - * mpn/generic/powlo.c: New file. - * mpn/generic/powm_sec.c: New file. - * configure.in (gmp_mpn_functions): List new functions. - -2009-04-08 Torbjorn Granlund <tege@gmplib.org> - - * mpz/urandomm.c: Amend last fix. - -2009-04-06 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Support Sun cc for x86_64. - - * mpz/urandomm.c: Handle operand overlap. - -2009-03-11 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (powerpc): Brave removing -Wa,-mppc64, in the hope that - GCC now passes the proper options. - -2009-03-09 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/divrem_1.asm: Add a nop to save a cycle in unnormalised - case. - -2009-03-05 Torbjorn Granlund <tege@gmplib.org> - - * ia64/gmp-mparam.h, arm/gmp-mparam.h, x86/p6/mmx/gmp-mparam.h, - pa32/hppa2_0/gmp-mparam.h sparc32/v9/gmp-mparam.h: Update. - -2009-03-03 Torbjorn Granlund <tege@gmplib.org> - - * mpn/ia64/bdiv_dbm1c.asm: Accept/return carry. - -2009-03-02 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (64-bit sparc/solaris): Pass -xO3, not -O3 to solaris - system compiler. - -2009-03-01 Torbjorn Granlund <tege@gmplib.org> - - * longlong.h (mips, powerpc): Provide assembly-free umul_ppmm for newer - gcc. - -2009-02-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/redc_2.c: Remove code for testing and timing. Update - to current FSF header. - * mpn/generic/redc_1.c: Update to current FSF header. - -2009-01-21 Torbjorn Granlund <tege@gmplib.org> - - * mpz/powm.c (redc): Remove. - (mpz_powm): Use mpn_redc_1 instead of redc. - - * tests/mpz/t-powm.c: Rewrite reference code. - -2009-01-18 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz: Increase reps for many tests. - - * mpn/generic/rootrem.c (mpn_rootrem_internal): Use MPN_DECR_U instead of - mpn_sub_1 (works around gcc 4.3 bugs and is also faster). - -2009-01-16 Torbjorn Granlund <tege@gmplib.org> - - * tests/tests.h: Declare refmpn_divrem_2. - -2009-01-15 Torbjorn Granlund <tege@gmplib.org> - - * mpz/perfpow.c: Add TMP_FREE before every return statement. - - * mpn/generic/rootrem.c (mpn_rootrem_internal): Add a missing TMP_FREE. - - * configure.in (gcc_cflags, gcc_64_cflags): Revert from -O3 to -O2, - the change was accidental and cause too much miscompilation. - -2009-01-14 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_mod_1): Run MOD_1_x_THRESHOLD tests also when - longlong.h specified UDIV_PREINV_ALWAYS. - - * mpn/generic/mod_1.c (mpn_mod_1): Properly check for normalisation - divisor. - -2009-01-13 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_mod_1): Tune for MOD_1_1_THRESHOLD, - MOD_1_2_THRESHOLD, and MOD_1_4_THRESHOLD. - - * mpn/generic/mod_1.c: Rewrite. - * mpn/generic/mod_1_1.c: New file. - * mpn/generic/mod_1_2.c: New file. - * mpn/generic/mod_1_3.c: New file. - * mpn/generic/mod_1_4.c: New file. - * configure.in (gmp_mpn_functions): Add mod_1_*. - * mpn/asm-defs.m4 (define_mpn): Add mod_1_*. - * mpn/Makefile.am (nodist_EXTRA_libmpn_la_SOURCES): Add mod_1_*.c. - * gmp-impl.h: Declare new mpn_mod_1s_* functions and associated - THRESHOLD macros. - (udiv_rnd_preinv): New macro. - -2009-01-12 Torbjorn Granlund <tege@gmplib.org> - - * tune/tuneup.c (tune_gcd_dc,tune_gcdext_dc): Lower step_factor to 0.1. - -2009-01-08 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/t-nextprime.c: New test file. - * tests/mpz/Makefile.am (check_PROGRAMS): Add t-nextprime. - - From Niels Möller: - * mpz/nextprime.c: Handle large prime gaps by limiting incr. - -2009-01-04 Torbjorn Granlund <tege@gmplib.org> - - * mpz/and.c, mpz/ior.c, mpz/xor.c: Re-read only necessary source - pointers after reallocation. Misc cleanup. - - * gmp-impl.h (MPN_TOOM44_MAX_N): New define, replaces MPN_TOOM3_MAX_N. - - * mpn/x86/fat/diveby3.c: New file. - -2008-12-30 Niels Möller <nisse@lysator.liu.se> - - * doc/gmp.texi (Greatest Common Divisor Algorithms): Updated - section on GCD algorithms. - -2008-12-29 Torbjorn Granlund <tege@gmplib.org> - - * doc/gmp.texi (Multiplication Algorithms): Add descriptions of Toom-4 - and unbalanced multiplication. - (Radix to Binary): Add warning that text is outdated, - (Contributors): Fix typos. - - * mpn/generic/toom*.c: Use coherent MAYBE_ macros for trimming - unreachable recursive functions. - * gmp-impl.h: Update toom itch functions. - - * mpn/x86_64/sqr_basecase.asm: Slightly increase stack allocation, to - placate tuneup. - -2008-12-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/pentium4/aors_n.asm: Tune prologue code. - - * mpn/x86_64/pentium4/aorslsh1_n.asm: New file. - - * mpn/x86_64/darwin.m4: Define symbol "DARWIN". - * mpn/x86_64/invert_limb.asm: Work around darwin quirks. - - * mpn/x86_64/sqr_basecase.asm: Further optimize, support Darwin. - - * mpn/x86_64/invert_limb.asm: New file. - -2008-12-27 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/core2/aorslsh1_n.asm: New file. - -2008-12-26 Torbjorn Granlund <tege@gmplib.org> - - * mpz/perfpow.c: Handle negative arguments properly. - * tests/mpz/t-perfpow.c: New file. - * tests/mpz/Makefile.am (check_PROGRAMS): Add t-perfpow. - -2008-12-23 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/t-mul.c (dump_abort): Improve error message. - - * gcd.c gcd_subdiv_step.c gcdext.c gcdext_subdiv_step.c: - Remove private mpn_zero_p. - - * tune/tuneup.c (tune_mul): Tune for MUL_TOOM44_THRESHOLD. - (tune_sqr): Tune for SQR_TOOM4_THRESHOLD. - - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Add toom44_mul.c and - toom4_sqr.c. - - * configure.in (gmp_mpn_functions): Toom function updates. - - * Rename mpn/mul_toomMN.c to mpn/toomMN_mul.c. Function names changed - accordingly. - - * mpn/toomMN_mul.c: Add scratch parameter. Do recursive multiplies - properly. Misc tuning. Remove CHECK and TIMING code. - - * mpn/toom2_sqr.c, mpn/toom3_sqr.c, mpn/toom4_sqr.c: New files. - - * gmp-impl.h (mpn_toomMN_mul_itch): Several new functions. - (mpn_zero_p): New functions. - Add various TOOM4/TOOM44 related parameters. - Update mpn_toomMN_mul prototypes. - - * mpn/generic/mul_n.c (mpn_mul_n): Call mpn_toom44_mul. Use TMP_BALLOC - instead of malloc. - (mpn_sqr_n): Analogous changes. - - * mpn/generic/mul.c: Update unbalanced toom code to pass scratch space. - -2008-12-21 Torbjorn Granlund <tege@gmplib.org> - - * mpz/nextprime.c: Add TMP_SDECL/MARK/FREE. - -2008-12-20 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/sqrtrem.c (mpn_sqrtrem1): Rewrite, improve interface. - (invsqrttab): New table, remove table approx_tab. - (mpn_sqrtrem2): Optimize, update mpn_sqrtrem1 call. - (mpn_sqrtrem): Update mpn_sqrtrem1 call. - -2008-12-18 Torbjorn Granlund <tege@gmplib.org> - - * mpz/nextprime.c: Run 10 mpz_millerrabin tests (was 5). - Give credit to authors. - - * mpn/x86_64/redc_1.asm: Align stack as mandated by ABI. - - * mpn/x86_64/divrem_2.asm: Add some comments. - - * mpn/x86_64/darwin.m4: New file. - * configure.in: Use x86_64/darwin.m4. - -2008-12-15 Torbjorn Granlund <tege@gmplib.org> - - * doc/projects.html: Remove GCD and division projects, update text on - multiplication. - - * doc/tasks.html: Add a caution about that the file is somewhat - outdated. - -2008-12-14 Torbjorn Granlund <tege@gmplib.org> - - * mpn/alpha/ev6/aorsmul_1.asm: New file (same code for mpn_addmul_1, - much improved for mpn_submul_1). - * mpn/alpha/ev6/addmul_1: File removed. - * mpn/alpha/ev6/submul_1: File removed. - -2008-12-09 Torbjorn Granlund <tege@gmplib.org> - - From David Harvey: - * mpn/x86_64/mul_basecase.asm: Further tweaks for code size and speed. - - * mpn/powerpc64/mode64/divrem_1.asm: Rewrite. - - * mpn/powerpc64/mode64/mul_basecase.asm: New file. - -2008-12-08 Torbjorn Granlund <tege@gmplib.org> - - * mpn/powerpc64/mode64/gmp-mparam.h: New file. - - * gmp-impl.h: Additional cleanups. - (mpn_set_str_compute_powtab): New prototype. - (mpn_powm, mpn_powlo): New prototypes. - - * mpz/pow_ui.c: Handle some small exponents locally. - -2008-12-07 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/set_str.c: Remove prototypes (they are in gmp-impl.h). - - * tune/set_strs.c, tune/set_strb.c: Make prototypes effective by moving - the #define mpn_set_str* before including gmp-impl.h. - - * All files: Change _PROTO => __GMP_PROTO. - - * tune/speed.c (routine): Remove non-working choice mpn_set_str_subquad. - * tune/common.c (speed_mpn_dc_set_str): Remove, it is broken. - - * mpn/generic/toom_interpolate_7pts.c (divexact_2exp): Make this static, - and inline it. - - * gmp-impl.h: Major cleanup. - (Remove formal parameter names. Use __GMP_PROTO consistently. Move - __GMP_PROTO and __MPN use to adjacent lines for declared function. - Fix typos. Remove code inside #if 0.) - - * configure.in (gmp_mpn_functions): Add mul_toom33. Reformat. - -2008-12-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/redc_1.c: New file. - * mpn/generic/redc_2.c: New file. - - * configure.in (gmp_mpn_functions): List redc_1 and redc_2. - (HAVE_NATIVE): Likewise. - - * tune/common.c (speed_mpn_redc_1): Renamed from speed_redc. - * tune/speed.c (routine): Remove "redc", and "mpn_redc_1". - * tune/speed.h (SPEED_ROUTINE_REDC_1): Renamed from SPEED_ROUTINE_REDC. - Updated call. - * tune/tuneup.c (tune_powm): Update redc call. - -2008-12-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/sqr_basecase.asm: Inline a combined diagonal product code - and addlsh1 loop. Misc cleanup. - -2008-12-02 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/sqr_basecase.asm: New file. - -2008-11-30 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/sqr_basecase.c: Fix typo in mpn_addmul_2s variant. - -2008-11-28 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/redc_1.asm: Rewrite. - -2008-11-27 Torbjorn Granlund <tege@gmplib.org> - - * tests/refmpn.c (refmpn_redc_1): New function. - -2008-11-25 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/k7/aorsmul_1.asm: Actually handle mpn_submul_1. - -2008-11-23 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/divrem_1.asm: Rewrite. - - * alpha/divrem_2.asm: New file. - * powerpc32/divrem_2.asm: New file. - * powerpc64/mode64/divrem_2.asm: New file. - * x86/divrem_2.asm: New file. - * x86_64/divrem_2.asm: New file. - * tests/refmpn.c (refmpn_divrem_2): New function. - -2008-11-22 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/k7/mul_1.asm: Rewrite for smaller size and better speed. - * mpn/x86/k7/aorsmul_1.asm: Likewise. - - * acinclude.m4 (GMP_VERSION): Include last component even when zero. - -2008-11-21 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/README: Rewrite. - - * tests/devel/try.c (malloc_region, mprotect_maybe): Add casts for - printf type correctness. - - * gmp-h.in (__GNU_MP_VERSION_MINOR): Bump. - - * Makefile.am (LIBGMP_LT_*, LIBGMPXX_LT_*, LIBMP_LT_*): - Bump version info. - -2008-11-20 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h: Rename modlimb_invert to binvert_limb. - * tune/speed.h: Likewise. - * tune/modlinv.c: Likewise. - * tune/common.c: Likewise. - * tests/t-modlinv.c: Likewise. - * tests/t-constants.c: Likewise. - * mpn/sparc64/mode1o.c: Likewise. - * mpn/alpha/dive_1.c: Likewise. - * mpn/sparc64/dive_1.c: Likewise. - * mpn/generic/mode1o.c: Likewise. - * mpn/generic/dive_1.c: Likewise. - * mpn/generic/bdivmod.c: Likewise. - * mpn/alpha/mode1o.asm: Likewise. - * mpn/asm-defs.m4: Likewise. - * mpn/ia64/mode1o.asm: Likewise. - * mpn/powerpc32/README: Likewise. - * mpn/powerpc32/mode1o.asm: Likewise. - * mpn/powerpc64/mode64/dive_1.asm: Likewise. - * mpn/powerpc64/mode64/mode1o.asm: Likewise. - * mpn/x86/dive_1.asm: Likewise. - * mpn/x86/k6/mmx/dive_1.asm: Likewise. - * mpn/x86/k6/mode1o.asm: Likewise. - * mpn/x86/k7/dive_1.asm: Likewise. - * mpn/x86/k7/mode1o.asm: Likewise. - * mpn/x86/p6/dive_1.asm: Likewise. - * mpn/x86/p6/mode1o.asm: Likewise. - * mpn/x86/pentium/dive_1.asm: Likewise. - * mpn/x86/pentium/mode1o.asm: Likewise. - * mpn/x86/pentium4/sse2/dive_1.asm: Likewise. - * mpn/x86/pentium4/sse2/mode1o.asm: Likewise. - * mpn/x86_64/dive_1.asm: Likewise. - * mpn/x86_64/mode1o.asm: Likewise. - - * mpn/x86_64/aors_n.asm: Replace with slightly faster, more alignment - neutral loop. - -2008-11-18 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Remove gcd_finda related declarations. - * gmp-impl.h (mpn_gcd_finda): Remove declaration. - * mpn/Makefile.am (nodist_EXTRA_libmpn_la_SOURCES): Remove gcd_finda. - * mpn/asm-defs.m4: Remove define_mpn(gcd_finda). - * mpn/x86/k6/gcd_finda.asm: Remove file. - * tests/devel/try.c (param_init): Remove mpn_gcd_finda. - (choice_array): Remove mpn_gcd_finda. - * tests/mpn/t-instrument.c (check): Remove testing of mpn_gcd_finda. - * tests/refmpn.c (refmpn_gcd_finda): Remove. - * tests/tests.h (refmpn_gcd_finda): Remove declaration. - * tune/common.c (speed_mpn_gcd_finda): Remove. - * tune/gcd_finda_gen.c: Remove file. - * tune/speed.h (speed_mpn_gcd_finda): Remove declaration. - * tune/speed.c (routine): Remove mpn_gcd_finda entry. - - * tests/mpz/t-powm.c: Print test number when failing a test. - - * mpn/x86_64/redc_1.asm (CALL): Move from here... - * mpn/x86_64/x86_64-defs.m4: ...to here. - - * gmp-impl.h (mpn_jacobi_base): Remove parameter names. - -2008-11-11 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpf/t-conv.c: Add some specific tests, supplementing the random - tests. - -2008-11-09 Torbjorn Granlund <tege@gmplib.org> - - * mpf/set_str.c: Default 'base' before letting exp_base inherit it. - - * tests/cxx/t-prec.cc: Use the right precision for all float constants. - -2008-11-08 Torbjorn Granlund <tege@gmplib.org> - - * doc/gmp.texi (Float Comparison): Update mpf_eq documentation. - - * mpf/eq.c: Compare the right number of bits. - -2008-11-02 Torbjorn Granlund <tege@gmplib.org> - - Undo, it made testing too slow: - * tests/mpz/t-mul.c: Use slower geometric progression for operand - sizes. - - * mpn/x86/k7/mod_34lsub1.asm: Use movzb for masking low 8 bits. - -2008-10-31 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd2.c (div1): New function (taken from old gcdext - implementation) - (mpn_hgcd2): Use single precision for the second half of the work. - -2008-10-30 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/p6/sse2/gmp-mparam.h: New file. - -2008-10-29 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (x86 fat_path): Add "x86/p6/sse2". - - * mpn/x86/fat/fat.c (__gmpn_cpuvec_init): Recognize sse2 capable p6 - (pentiumm, core2). - - * mpn/x86/p6/sse2/mul_1.asm: New file. - * mpn/x86/p6/sse2/addmul_1.asm: New file. - * mpn/x86/p6/sse2/submul_1.asm: New file. - * mpn/x86/p6/sse2/mul_basecase.asm: New file. - * mpn/x86/p6/sse2/sqr_basecase.asm: New file. - * mpn/x86/p6/sse2/popcount.asm: New file. - - * mpn/x86/fat/fat.c (__gmpn_cpuvec_init): Handle "extended" fields for - model and family. - -2008-10-28 Torbjorn Granlund <tege@gmplib.org> - - From Mickael Gastineau: - * gmp-h.in (gmp_urandomm_ui, gmp_urandomb_ui): Add __GMP_DECLSPEC. - -2008-10-27 Torbjorn Granlund <tege@gmplib.org> - - * gmp-h.in (mpn_gcdext_1): Remove bogus __GMP_ATTRIBUTE_PURE. - -2008-10-27 Niels Möller <nisse@lysator.liu.se> - - * tune/common.c (speed_mpn_hgcd): Call mpn_hgcd_matrix_init once - for each call to mpn_hgcd. - (speed_mpn_hgcd_lehmer): Likewise. - -2008-10-26 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Point to p6/sse2 for pentiumm and core2. - - * gmp-impl.h (mpn_add_nc, mpn_sub_nc): Move these macros to after fat - definitions. - - * tune/common.c, tune/speed.c, tune/speed.h: - Add speed measurement of mpn_bdiv_dbm1c. - -2008-10-24 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/gmp-mparam.h (MUL_FFT_TABLE2, SQR_FFT_TABLE2): Extend. - - * mpz/nextprime.c: Move declarations to function beginning. - -2008-10-23 Niels Möller <nisse@lysator.liu.se> - - * gmp-impl.h (DECL_gcdext_1): Deleted. - -2008-10-22 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/atom/aors_n.asm: New file. - * mpn/x86_64/atom/gmp-mparam.h: New file. - -2008-10-21 Torbjorn Granlund <tege@gmplib.org> - - With Neils Möller: - * mpz/nextprime.c: Rewrite. - - * tests/devel/try.c (main): Use strtol for 's' and 'S' optargs. - - * mpn/x86_64/pentium4/rshift.asm: Misc cleanups. - * mpn/x86_64/pentium4/lshift.asm: Likewise. - - * mpn/x86_64/pentium4/aors_n.asm: Use fewer registers. - - * configure.in: Set up specific path for x86_64/atom. - -2008-10-21 Niels Möller <nisse@lysator.liu.se> - - * mpn/Makefile.am (nodist_EXTRA_libmpn_la_SOURCES): Removed - qstack.c. - * mpn/generic/qstack.c: Deleted obsolete file. - -2008-10-20 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/core2/aorsmul_1.asm: New file. - -2008-10-19 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/aors_n.asm: Remove redundant MULFUNC_PROLOGUE. - - * gmp-impl.h (popc_limb): Remove redundant checks of GMP_LIMB_BITS - inside several of these macros. - -2008-10-17 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/t-mul.c: Use slower geometric progression for operand - sizes. Do every other tests for same size operands. - -2008-10-15 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/mul_basecase.asm: Simplify addressing in epilogue. - - * mpn/mips64/divrem_1.asm: Remove file, it is n32-only, and uses an old - algorithm. - - * config.guess, config.sub, configure.in: Support Intel Atom processor. - -2008-10-10 Torbjorn Granlund <tege@gmplib.org> - - * mpq/mul.c: Fix typo in last change. - -2008-10-09 Torbjorn Granlund <tege@gmplib.org> - - * tests/refmpn.c (refmpn_sb_divrem_mn): Work around a gcc bug. - -2008-10-08 Torbjorn Granlund <tege@gmplib.org> - - * mpq/mul.c: Use TMP_ALLOC. Cleanup. - * mpq/div.c: Likewise. - - * mpn/x86_64/mul_basecase.asm: Use lea directly for loading entry point - addresses. - -2008-10-09 Niels Möller <nisse@lysator.liu.se> - - * mpn/x86/k7/gmp-mparam.h: Updated GCD-related values. - -2008-10-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mul_fft.c (mpn_mul_fft_internal): Do store - mpn_fft_norm_modF return value, if (rec). - -2008-10-04 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/aorsmul_1.asm: Replace with faster code. - * mpn/x86_64/mul_1.asm: Likewise. - * mpn/x86_64/addmul_2.asm: Likewise. - * mpn/x86_64/mul_2.asm: Likewise. - * mpn/x86_64/mul_basecase.asm: Likewise. - -2008-10-02 Torbjorn Granlund <tege@gmplib.org> - - * mpn/minithres/gmp-mparam.h: Update FFT values. - -2008-10-02 Niels Möller <nisse@lysator.liu.se> - - * hgcd.c (mpn_hgcd_matrix_mul): Fixed normalization bug. - -2008-09-24 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Handle --enable-minithres. - * mpn/minithres/gmp-mparam.h: Update all values. - -2008-09-22 Torbjorn Granlund <tege@gmplib.org> - - * tune/speed.c (routine): New entry for mpn_mul. - * tune/speed.h (SPEED_ROUTINE_MPN_MUL): Renamed from - SPEED_ROUTINE_MPN_MUL_BASECASE. - (speed_mpn_mul): Renamed from speed_mpn_mul_basecase. - (SPEED_ROUTINE_MPN_MUL): Allocate our own memory of xp operand. - - * tune/common.c: Corresponding changes. - -2008-09-22 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/gcdext.c (hgcd_mul_matrix_vector): New function, - replaces addmul2_n. Needs less copying. - (mpn_gcdext): Use hgcd_mul_matrix_vector. Updated for interface - change in mpn_gcdext_subdiv_step - - * mpn/generic/hgcd.c (hgcd_matrix_mul_1): Rewritten to use - mpn_hgcd_mul_matrix1_vector. - (hgcd_step): Updated for interface change in - mpn_hgcd_mul_matrix1_inverse_vector. - - * mpn/generic/gcdext_lehmer.c (mpn_gcdext_lehmer_n): Updated for - interface changes in mpn_hgcd_mul_matrix1_vector, - mpn_hgcd_mul_matrix1_inverse_vector and mpn_gcdext_subdiv_step. - - * mpn/generic/gcd_lehmer.c (mpn_gcd_lehmer_n): Updated for - interface change in mpn_hgcd_mul_matrix1_inverse_vector. - - * mpn/generic/gcdext_subdiv_step.c (mpn_gcdext_subdiv_step): Use - separate scratch arguments for the quotient and for the cofactor - update. - - * mpn/generic/hgcd2.c (mpn_hgcd_mul_matrix1_vector): Interface - change. Store first element in rp and leave ap unmodified. No - additional scratch space or copying needed. Callers that require - modification in place still need to copy one of the inputs. - (mpn_hgcd_mul_matrix1_inverse_vector): Likewise. - -2008-09-22 Niels Möller <nisse@lysator.liu.se> <nisse@king.swox.se> - - * mpn/generic/hgcd.c (hgcd_matrix_mul_1): Use mpn_addaddmul_1msb0. - * mpn/generic/hgcd2.c (mpn_hgcd_mul_matrix1_vector): Likewise. - - * mpn/generic/gcd.c: Use libspeed for timing measurements. - - * gmp-impl.h: Declare mpn_addaddmul_1msb0. - * mpn/asm-defs.m4: Added addaddmul_1msb0. - * mpn/x86_64/addaddmul_1msb0.asm: New file. - * configure.in (gmp_mpn_functions_optional): Added - addaddmul_1msb0. - (HAVE_NATIVE): List addaddmul_1msb0. - -2008-09-21 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/get_str.c (GET_STR_DC_THRESHOLD): Remove default. - (GET_STR_PRECOMPUTE_THRESHOLD): Likewise. - Misc code cleanups. - - * gmp-impl.h (mpn_dc_set_str_itch): Allocate GMP_LIMB_BITS more limbs. - - Revert: - * mpn/generic/set_str.c: - (mpn_dc_set_str): Remove impossible case, replace by an ASSERT. - -2008-09-18 Torbjorn Granlund <tege@gmplib.org> - - * mpn/alpha/ev6/gmp-mparam.h (DIVEXACT_BY3_METHOD): Define. - - * mpn/ia64/diveby3.asm: Remove. - * mpn/x86/diveby3.asm: Remove. - * mpn/x86/k6/diveby3.asm: Remove. - * mpn/x86/k7/diveby3.asm: Remove. - * mpn/x86/p6/diveby3.asm: Remove. - * mpn/x86/pentium/diveby3.asm: Remove. - * mpn/x86_64/diveby3.asm: Remove. - * mpn/x86/pentium4/sse2/diveby3.asm: Remove. - - * configure.in (HAVE_NATIVE): List divexact_by3c. - - * gmp-impl.h (mpn_divexact_by3c): Override gmp-h.in's definition. - (DIVEXACT_BY3_METHOD): Don't default to 0 if - HAVE_NATIVE_mpn_divexact_by3c. - -2008-09-18 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/gcd.c (main): Added code for tuning of CHOOSE_P. - - * mpn/generic/hgcd.c (mpn_hgcd_matrix_mul): Assert that inputs are - normalized. - -2008-09-17 Niels Möller <nisse@lysator.liu.se> <nisse@king.swox.se> - - * mpn/generic/gcdext.c (mpn_gcdext): p = n/5 caused a - slowdown for large inputs. As a compromise, use p = n/2 for the - first iteration, and p = n/3 for the rest. Handle the first - iteration specially, since the initial u0 and u1 are trivial. - - * mpn/x86_64/gmp-mparam.h (GCDEXT_DC_THRESHOLD): Reduced threshold - from 409 to 390. - - * mpn/generic/gcdext.c (CHOOSE_P): New macro. Use p = n/5. - (mpn_gcdext): Use CHOOSE_P, and generalized the calculation of - scratch space. - - * tune/tuneup.c (tune_hgcd): Use default step factor. - - * mpn/x86_64/gmp-mparam.h: (GCD_DC_THRESHOLD): Reduced from 493 to - 412. - - * mpn/generic/gcd.c (CHOOSE_P): New macro, to determine the - split when calling hgcd. Use p = 2n/3, as that seems better than - the more obvious split p = n/2. - (mpn_gcd): Use CHOOSE_P, and generalized the calculation of - scratch space. - -2008-09-16 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/toom_interpolate_7pts.c: Use new mpn_divexact_byN - functions. - - * gmp-impl.h (mpn_divexact_by3, mpn_divexact_by5, mpn_divexact_by7, - mpn_divexact_by9, mpn_divexact_by11, mpn_divexact_by13, - mpn_divexact_by15): New macros, defined in terms of mpn_bdiv_dbm1. - - * configure.in (gmp_mpn_functions): List bdiv_dbm1c. - (HAVE_NATIVE): Likewise. - * mpn/asm-defs.m4: Define bdiv_dbm1c. - * gmp-impl.h (mpn_bdiv_dbm1c): Declare. - (mpn_bdiv_dbm1): New macro. - * mpn/generic/bdiv_dbm1c.c: New file. - * mpn/alpha/bdiv_dbm1c.asm: New file. - * mpn/ia64/bdiv_dbm1c.asm: New file. - * mpn/powerpc32/bdiv_dbm1c.asm: New file. - * mpn/powerpc64/mode64/bdiv_dbm1c.asm: New file. - * mpn/x86/bdiv_dbm1c.asm: New file. - * mpn/x86_64/bdiv_dbm1c.asm: New file. - - * mpn/generic/diveby3.c: Add mpn_bdiv_dbm1c based function. - Choose function depending on DIVEXACT_BY3_METHOD. - * gmp-impl.h (DIVEXACT_BY3_METHOD): Provide default. - -2008-09-16 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd.c (mpn_hgcd_addmul2_n): Moved function to - gcdext.c, where it is used. - * mpn/generic/gcdext.c (addmul2_n): Moved and renamed, was - mpn_hgcd_addmul2_n. Made static. Deleted input normalization. - Deleted rn argument. - (mpn_gcdext): Updated calls to addmul2_n, and added assertions. - - * gmp-impl.h (MPN_HGCD_MATRIX_INIT_ITCH): Increased storage by 4 limbs. - (MPN_HGCD_LEHMER_ITCH): Reduced storage by one limb. - (MPN_GCD_SUBDIV_STEP_ITCH): Likewise. - (MPN_GCD_LEHMER_N_ITCH): Likewise. - - * mpn/generic/hgcd.c (mpn_hgcd_matrix_init): Use two extra limbs. - (hgcd_step): Use overlapping arguments to mpn_tdiv_qr. - (mpn_hgcd_matrix_mul): Deleted normalization code. Tighter bounds - for the element size of the product. Needs two extra limbs of - storage for the elements. - (mpn_hgcd_itch): Updated storage calculation. - - * mpn/generic/gcd_subdiv_step.c (mpn_gcd_subdiv_step): Use - overlapping arguments to mpn_tdiv_qr. Use mpn_zero_p. - - * mpn/generic/gcd.c (mpn_gcd): Use mpn_zero_p. - -2008-09-15 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd.c (mpn_hgcd_matrix_init): Updated for deleted - tp pointer. - (hgcd_matrix_update_q): Likewise. - (mpn_hgcd_matrix_mul): Likewise. - (mpn_hgcd_itch): Updated calculation of scratch space. - - * gmp-impl.h (struct hgcd_matrix): Deleted tp pointer. - (MPN_HGCD_MATRIX_INIT_ITCH): Reduced storage. - (mpn_hgcd_step, MPN_HGCD_STEP_ITCH): Deleted declarations. - -2008-09-15 Niels Möller <nisse@lysator.liu.se> <nisse@king.swox.se> - - * mpn/x86_64/gmp-mparam.h (MATRIX22_STRASSEN_THRESHOLD): New - threshold. - - * mpn/generic/hgcd.c (mpn_hgcd_matrix_mul): Use mpn_matrix22_mul. - (mpn_hgcd_itch): Updated calculation of scratch space. Use - count_leading_zeros to get the recursion depth. - - * mpn/generic/gcd.c (mpn_gcd): Fixed calculation of scratch space, - and use mpn_hgcd_itch. - -2008-09-15 Niels Möller <nisse@lysator.liu.se> - - * tune/tuneup.c (tune_matrix22_mul): New function. - (all): Use it. - - * tune/common.c (speed_mpn_matrix22_mul): New function. - - * tune/Makefile.am (TUNE_MPN_SRCS_BASIC): Added matrix22_mul.c. - - * tests/mpn/t-matrix22.c: Use MATRIX22_STRASSEN_THRESHOLD to - select sizes for tests. - - * gmp-impl.h (MATRIX22_STRASSEN_THRESHOLD): New threshold - - * configure.in (gmp_mpn_functions): Added matrix22_mul. - * gmp-impl.h: Added declarations for mpn_matrix22_mul and related - functions. - - * mpn/Makefile.am (nodist_EXTRA_libmpn_la_SOURCES): Added - matrix22_mul.c. - * tests/mpn/Makefile.am (check_PROGRAMS): Added t-matrix22. - - * tests/mpn/t-matrix22.c: New file. - * mpn/generic/matrix22_mul.c: New file. - -2008-09-11 Niels Möller <nisse@king.swox.se> - - * tune/tuneup.c: Updated tuning of gcdext. - - * mpn/x86_64/gmp-mparam.h (GCDEXT_DC_THRESHOLD): Reduced threshold - from 713 to 409. - -2008-09-11 Niels Möller <nisse@lysator.liu.se> - - * gmp-impl.h: Updated for gcdext changes. - (GCDEXT_DC_THRESHOLD): New constant, renamed from - GCDEXT_SCHOENHAGE_THRESHOLD. - - * mpn/generic/gcdext.c (compute_v): Accept non-normalized a and b - as inputs. - (mpn_gcdext): Rewrote and simplified. Now uses the new mpn_hgcd - interface. - - * mpn/generic/hgcd.c (mpn_hgcd_addmul2_n): Renamed from addmul2_n - and made non-static. Changed interface to take non-normalized - inputs, and only two size arguments. - (mpn_hgcd_matrix_mul): Simplified using new mpn_hgcd_addmul2_n. - - * mpn/generic/gcdext_lehmer.c (mpn_gcdext_lehmer_itch): Deleted - function. - (mpn_gcdext_lehmer_n): Renamed from mpn_gcd_lehmer. Now takes - inputs of equal size. Moved the code for the division step to a - separate function... - * mpn/generic/gcdext_subdiv_step.c (mpn_gcdext_subdiv_step): New - file, new function. - - * configure.in (gmp_mpn_functions): Added gcdext_subdiv_step. - -2008-09-10 Torbjorn Granlund <tege@gmplib.org> - - * tests/devel/anymul_1.c: Include <string.h>. - - * gmp-h.in: Unconditionally include <cstdio>. - -2008-09-10 Niels Möller <nisse@lysator.liu.se> - - * tune/common.c: #if:ed out speed_mpn_gcd_binary and - speed_mpn_gcd_accel. - * tune/speed.c (routine): #if:ed out mpn_gcd_binary, mpn_gcd_accel - and find_a. - * tune/Makefile.am (libspeed_la_SOURCES): Removed gcd_bin.c - gcd_accel.c gcd_finda_gen.c. - * tune/tuneup.c: Enable tuning of GCD_DC_THRESHOLD. - - * mpn/generic/gcd.c (mpn_gcd): Rewrote and simplified. Now uses - the new mpn_hgcd interface. - - * */gmp-mparam.h: Renamed GCD_SCHOENHAGE_THRESHOLD to - GCD_DC_THRESHOLD. - - * mpn/generic/gcd_lehmer.c (mpn_gcd_lehmer_n): Renamed (was - mpn_gcd_lehmer). Now takes inputs of equal size. - - * mpn/generic/gcd_lehmer.c (mpn_gcd_lehmer): Reintroduced gcd_2, - to get better performance for small inputs. - - * mpn/generic/hgcd.c: Don't hardcode small HGCD_THRESHOLD. - * mpn/x86_64/gmp-mparam.h (HGCD_THRESHOLD): Reduced from 145 to - 120. - * */gmp-mparam.h: Renamed HGCD_SCHOENHAGE_THRESHOLD to - HGCD_THRESHOLD. - -2008-09-09 Torbjorn Granlund <tege@gmplib.org> - - * doc/gmp.texi: Fix a typo and clarify mpn_gcdext docs. - -2008-09-09 Niels Möller <nisse@lysator.liu.se> - - * tune/common.c (speed_mpn_hgcd, speed_mpn_hgcd_lehmer): Adapted - to new hgcd interface. - - * gmp-impl.h (MPN_HGCD_LEHMER_ITCH): New macro. - - * hgcd.c (mpn_hgcd_lehmer): Renamed function, from hgcd_base. Made - non-static. - - * gcd_lehmer.c (mpn_gcd_lehmer): Use hgcd2 also for n == 2. - - * gcdext_lehmer.c (mpn_gcdext_lehmer): Simplified code for - division step. Added proper book-keeping of swaps, which affect - the sign of the returned cofactor. - - * tests/mpz/t-gcd.c (one_test): Display co-factor when mpn_gcdext - fails. - - * gcd_lehmer.c (mpn_gcd_lehmer): At end of loop, need to handle - the special case n == 1 correctly. - - * gcd_subdiv_step.c (mpn_gcd_subdiv_step): Simplified function. - The special cancellation logic is not needed here. - -2008-09-08 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/invert.c: Add working but slow code. - - * mpn/x86_64/x86_64-defs.m4 (R32, R8): New macros. - - * mpn/ia64/submul_1.asm: Move some labels for broader assembler - compatibility. - - * gmp-impl.h (mpn_mul_3, mpn_mul_4): Declare. - * tests/tests.h (refmpn_mul_3, refmpn_mul_4): Declare. - * tests/try.c (param_init): Set things up for mpn_mul_3 and mpn_mul_4. - (choice_array): Likewise. - (call): Likewise. - * mpn/Makefile.am (nodist_EXTRA_libmpn_la_SOURCES): - Add mul_3.c and mul_4. - * mpn/asm-defs.m4: Define mul_3 and mul_4. - * tests/refmpn.c (refmpn_mul_N): New function. - (refmpn_mul_2): Remove old definition, call refmpn_mul_N. - (refmpn_mul_3, refmpn_mul_4): New functions. - * tune/common.c (speed_mpn_mul_3, speed_mpn_mul_4): New functions. - * tune/speed.h (speed_mpn_mul_3, speed_mpn_mul_4): Declare. - * tune/speed.c (routine): New entries for mpn_mul_2 and mpn_mul_3. - - * ltmain.sh: Update to libtool 1.5.24. - - * mpn/generic/mul_toom22.c: Compute s and t more cleverly. - -2008-09-08 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/t-hgcd.c: Updated tests. Rewrite of hgcd_ref. - - * mpn/generic/gcdext_lehmer.c (mpn_gcdext_lehmer_itch): New function. - (mpn_gcdext_lehmer): Various bugfixes. - - * gcdext.c (mpn_gcdext): Allocate scratch space for gcdext_lehmer. - - * mpn/generic/gcd_lehmer.c (gcd_2): ASSERT that inputs are odd. - (mpn_gcd_lehmer): Added tp argument, for scratch space. Make both - arguments odd before calling gcd_2. - - * mpn/generic/hgcd.c (mpn_hgcd): Allow the trivial case n <= 2, - and return 0 immediately. - - * gmp-impl.h (MPN_EXTRACT_NUMB): New macro. - - * configure.in (gmp_mpn_functions): Added gcdext_lehmer. - -2008-09-05 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/toom_interpolate_7pts.c: Use mpn_divexact_by3c instead of - divexact_odd. - - * doc/texinfo.tex: Update to 2007-06-29.13. - - * doc/gmp.texi: Update GMP site URL. Fix some typos. - - * demos/pexpr.c (main): Allow bases up to 62. - - * gmp-impl.h: Remove formal parameter names from function prototypes. - - * config.guess: Recognize recent AMD and Itanium CPUs. - Default X86 CPU recognition to configfsf.guess' value. - - * configure.in: Handle core2 separately from athlon64. - -2008-09-05 Niels Möller <nisse@lysator.liu.se> - - * */Makefile.in, configure, aclocal.m4, config.in: Removed files - from repository. They're instead generated by automake and - autoconf before distribution. - -2008-08-25 Torbjorn Granlund <tege@gmplib.org> - - * mpf/set_str.c: Allocate mantissa space based on mantissa size, - not on destination variable space. - * mpf/set_str.c: Accept unary plus before exponent. - -2008-08-06 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mul_toom22.c: Add statistics gathering functionality, - triggered by cpp predef STAT. - - From David Harvey: - * mpn/generic/mul_toom22.c: Decrease scratch space usage. - -2008-08-02 Torbjorn Granlund <tege@gmplib.org> - - * tests/misc/t-scanf.c: Avoid negative arguments to _ui functions. - * tests/misc/t-printf.c: Likewise. - - * acinclude.m4 (X86_PATTERN): Add geode. - - * acinclude.m4 (CL_AS_NOEXECSTACK): Avoid -q flag to grep. - -2008-08-01 Torbjorn Granlund <tege@gmplib.org> - - * acinclude.m4 (CL_AS_NOEXECSTACK): New. - * configure.in: Use CL_AS_NOEXECSTACK. - * mpn/Makeasm.am: Use ASM_FLAGS (defined by CL_AS_NOEXECSTACK). - - * gmpxx.h (__GMP_DBL_LIMBS): Use DBL_MAX_EXP instead of - std::numeric_limits<double>::max_exponent for better portability. - -2008-07-29 Torbjorn Granlund <tege@gmplib.org> - - * gmpxx.h (__GMP_DBL_LIMBS): New #define. - (__GMP_ULI_LIMBS): New #define. - (__GMPXX_TMP_UI): New macro. - (__GMPXX_TMP_SI): New macro. - (__GMPXX_TMP_D): New macro. - (struct __gmp_binary_and): Rewrite, using the new macros. - (struct __gmp_binary_ior): Likewise. - (struct __gmp_binary_xor): Likewise. - -2008-07-28 Torbjorn Granlund <tege@gmplib.org> - - * tests/cxx/t-binary.cc: Add some tests for logical operations. - -2008-07-24 Torbjorn Granlund <tege@gmplib.org> - - * gmpxx.h: Use __GMPZ_* instead of __GMPZZ_* for bitwise ops, remove - __GMPZZ_*. - Remove repeated #undefs. - (__gmp_alloc_cstring): Declare freefunc as extern "C". - -2008-07-23 Torbjorn Granlund <tege@gmplib.org> - - * gmp-h.in (__GMP_CC): New define, undocumented for now. - (__GMP_CFLAGS): Likewise. - -2008-07-21 Torbjorn Granlund <tege@gmplib.org> - - * tests/amd64check.c: Fix a printf type clash. - - * mpz/realloc.c: Amend last fix. - - * gmp-h.in: Include <cstdlib> for C++. - * gmp-h.in: Handle new gcc 4.3 inline semantics defaults. - - * configfsf.guess: Update to version of 2008-04-14. - * configfsf.sub: Update to version of 2008-06-16. - - * configure.in: Separate core2 and athlon64 flags handling. - -2008-06-19 Torbjorn Granlund <tege@gmplib.org> - - * config.guess: Recognize pentiumm and AMD geode. - * config.sub: Likewise. - * configure.in: Likewise. - -2008-06-02 Torbjorn Granlund <tege@gmplib.org> - - * configure.in: Disallow odd nails sizes. - * configure.in: Inherit default gcc_cflags/gcc_64_cflags everywhere. - -2008-05-23 Torbjorn Granlund <tege@gmplib.org> - - * mpz/init2.c: Rewrite to avoid internal overflow and to detect mpz_t - overflow. - * mpz/realloc2.c: Likewise. - * mpz/realloc.c: Detect mpz_t overflow. - -2008-05-22 Torbjorn Granlund <tege@gmplib.org> - - * configure.in (sparc): Remove -fast, it causes documented - miscompilation. - - * config.guess: Properly handle the "extended" variants of x86 cpuid. - -2008-05-09 Torbjorn Granlund <tege@gmplib.org> - - * gmp-impl.h (mpn_mul_fft): Now void. - (udiv_qrnnd_preinv3): Special case for constant (nl). - -2008-05-08 Torbjorn Granlund <tege@gmplib.org> - - * mpn/generic/mul_fft.c: Clean up types in TRACE (printf (...)). - (TRACE): Redefine to allow command line control. - (mpn_mul_fft_internal): Now void, remove return value. - (mpn_mul_fft): Likewise. - (MPN_FFT_TABLE2_SIZE): Up size fro 256 to 512. - (mpn_fft_fft): Call mpn_fft_mul_2exp_modF just once instead of twice, - then add/subtract result. Get rid of temp allocation as a result. - Remove some redundant CNST_LIMB. - (mpn_fft_fftinv): Analogous changes. - (mpn_fft_sub_modF): Re-enable, now needed by mpn_fft_fft and - mpn_fft_fftinv. - -2008-03-10 Torbjorn Granlund <tege@gmplib.org> - - * tests/mpz/t-mul.c (main): Let GMP_CHECK_FFT mean largest allowed - power-of-2 of test operands. - -2008-02-28 Torbjorn Granlund <tege@gmplib.org> - - * tests/cxx/t-binary.cc (check_mpz): Expect floor rounding for right - shift. - -2008-02-27 Torbjorn Granlund <tege@gmplib.org> - - * mpz/mul_i.h: Check sml's size (not the signed small_mult). - - * longlong.h (umul_ppmm) [alpha]: Define using __builtin_alpha_umulh - when possible. - - * longlong.h (count_trailing_zeros): Force destination register mode. - - * gmpxx.h (struct __gmp_binary_rshift): Use floor rounding, not - truncation. - - * gmpxx.h (__gmp_binary_and, __gmp_binary_ior, __gmp_binary_xor): - Add variants with unsigned long int argument. - - * config.sub: Recog geode. - * config.guess: Likewise. - * acinclude.m4 (X86_PATTERN): Likewise. - -2008-02-10 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/p6/aors_n.asm: Use Zdisp to work around GNU as bug. - * mpn/x86/x86-defs.m4 (Zdisp): Add more instructions. - -2008-02-08 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86_64/aors_n.asm: New file. - * mpn/x86_64/add_n.asm: Delete. - * mpn/x86_64/sub_n.asm: Delete. - -2008-02-07 Torbjorn Granlund <tege@gmplib.org> - - * mpn/x86/k6/mmx/dive_1.asm: Fix typo in last change. - -2007-12-10 Torbjorn Granlund <tege@swox.com> - - * mpf/set_str.c (mpf_set_str): Write own code for converting the - exponent, avoids strtol base < 36 limitation. - -2007-10-28 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (mpn_dc_get_str_itch): New macro. - (mpn_dc_get_str_powtab_alloc): New macro. - (struct powers): Add field "shift". - - * mpn/generic/get_str.c: Compute powers without low zero limbs; all - functions modified. Correct temporary allocation. Misc cleanups. - - * mpn/generic/set_str.c: Compute powers without low zero limbs; all - functions modified. - (mpn_dc_set_str): Remove impossible case, replace by an ASSERT. - -2007-10-26 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/set_str.c: Remove default thresholds, not in gmp-impl.h. - (mpn_dc_set_str): Insert ASSERT_ALWAYS in a presumably dead code arm. - -2007-10-22 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (mpn_add_nc): Define as inline function, unless NATIVE. - (mpn_sub_nc): Likewise. - -2007-10-17 Torbjorn Granlund <tege@swox.com> - - * tests/misc/t-printf.c: Fix a printf type clash. - * tests/mpq/t-get_str.c: Likewise. - * tests/mpz/t-import.c: Likewise. - - * acinclude.m4: Conditionally disable some tests when compiled by a C++ - compiler. - - * gmp-impl.h (udiv_qrnnd_preinv3): Remove an unused variable. - - * mpn/generic/hgcd.c: Add some WANT_ASSERTs to shut up warnings. - -2007-10-08 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/elf.m4 (LEAL): Define as an alias for LEA. - * mpn/powerpc32/darwin.m4 (LEAL): Likewise. - * mpn/powerpc64/aix.m4: Likewise. - - * mpn/powerpc64/vmx/popcount.asm: Use LEAL. - - * mpn/powerpc64/darwin.m4 (LEAL): New name for LEA, since it is only - usable for local symbols. - (LEA): Replace with code for external references. - - * mpn/powerpc32/vmx/mod_34lsub1.asm: Use LEAL. - -2007-10-07 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/dive_1.asm: Use LEA, remove explicit movl_eip_*. - * mpn/x86/k6/mode1o.asm: Likewise. - * mpn/x86/k6/mmx/dive_1.asm: Likewise. - * mpn/x86/k7/dive_1.asm: Likewise. - * mpn/x86/k7/mode1o.asm: Likewise. - * mpn/x86/p6/dive_1.asm: Likewise. - * mpn/x86/p6/mode1o.asm: Likewise. - * mpn/x86/pentium4/sse2/dive_1.asm: Likewise. - * mpn/x86/pentium4/sse2/mode1o.asm: Likewise. - * mpn/x86/pentium4/sse2/popcount.asm: Likewise. - - * mpn/x86/p6/aors_n.asm: Table cycle counts. - - * mpn/x86/k7/mod_34lsub1.asm: Fix over-optimistic cycle count claims. - - * mpn/x86/x86-defs.m4 (DEF_OBJECT, END_OBJECT): New define's. - - * mpn/x86/darwin.m4 (LEA): Put also movl_eip_XX into EPILOGUE_cpu. - Expect target register to have prepended %. - - * mpn/x86_64/add_n.asm: Use L() for labels. - * mpn/x86_64/addlsh1_n.asm: Likewise. - * mpn/x86_64/addmul_2.asm: Likewise. - * mpn/x86_64/aorrlsh_n.asm: Likewise. - * mpn/x86_64/aorsmul_1.asm: Likewise. - * mpn/x86_64/com_n.asm: Likewise. - * mpn/x86_64/copyd.asm: Likewise. - * mpn/x86_64/copyi.asm: Likewise. - * mpn/x86_64/diveby3.asm: Likewise. - * mpn/x86_64/logops_n.asm: Likewise. - * mpn/x86_64/lshsub_n.asm: Likewise. - * mpn/x86_64/mul_1.asm: Likewise. - * mpn/x86_64/mul_2.asm: Likewise. - * mpn/x86_64/mul_basecase.asm: Likewise. - * mpn/x86_64/popham.asm: Likewise. - * mpn/x86_64/redc_1.asm: Likewise. - * mpn/x86_64/rsh1add_n.asm: Likewise. - * mpn/x86_64/rsh1sub_n.asm: Likewise. - * mpn/x86_64/rshift.asm: Likewise. - * mpn/x86_64/sub_n.asm: Likewise. - * mpn/x86_64/sublsh1_n.asm Likewise. - * mpn/x86_64/pentium4/aors_n.asm: Likewise. - * mpn/x86_64/pentium4/lshift.asm: Likewise. - * mpn/x86_64/pentium4/rshift.asm: Likewise. - - * mpn/x86_64/x86_64-defs.m4: New file, defining LEA, DEF_OBJECT, and - END_OBJECT. - - * mpn/generic/mul.c: Put TMP_DECL as last decl. - -2007-10-06 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/pentium4/sse2/popcount.asm: New file. - -2007-09-26 Torbjorn Granlund <tege@swox.com> - - * mpz/get_str.c: Cast a char index to int to shut up compilers. - - * mpn/generic/dc_div_qr.c: Pass dummy scratch argument to mpn_invert. - * mpn/generic/dc_divappr_q.c: Likewise. - * mpn/generic/mu_div_qr.c: Likewise. - * mpn/generic/mu_divappr_q.c: Likewise. - * mpn/generic/mu_div_q.c: Likewise. - * mpn/generic/divexact.c: Likewise. - - * mpn/generic/invert.c: New file, placeholder for now. - -2007-09-24 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/toom_interpolate_5pts.c: New file, contents from - mpn/generic/mul_n.c - * mpn/generic/mul_n.c (mpn_toom3_interpolate): Function removed. - - * mpn/generic/toom_interpolate_7pts.c: New file. - - * mpn/x86/k7/mmx/popham.asm: Table cycle counts. - - * mpn/x86/k6/README: Update URLs. - - * mpn/powerpc32/README: Update URL's, company names. - - * mpn/generic/get_d.c: Complete rewrite. - - * mpn/generic/mul_toom33.c: New file. - - * mpn/generic/mul_toom22.c: Make orthogonal with other toomXY files. - * mpn/generic/mul_toom32.c: Likewise. - * mpn/generic/mul_toom42.c: Likewise. - - * mpn/alpha/invert_limb.asm: Update cycle counts. Fix a comment typo. - - * mpf/get_str.c: Include stdlib.h, not stdio.h for NULL. - - * doc/gmp.texi: Fix a typo. - - * memory.c (__gmp_default_allocate, __gmp_default_reallocate): - Cast size operands in error fprintf's. - - * longlong.h (sub_ddmmss) [powerpc 64]: Add more variants for constant - args. - - * gmp-impl.h (udiv_qrnnd_preinv3): New define. - * gmp-impl.h (ULONG_PARITY): Exclude masquerading __INTEL_COMPILER from - ia64 asm. - - * gmp-h.in (mpn_neg_n): New function. - -2007-09-18 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (main): Add -v option. - (enum op_t): New tag TIMING. - (mpz_eval_expr): Execute TIMING. - (fns): Add TIMING entry. - - * gmp-impl.h: Add decls and THRESHOLDs for new toom multiplication - functions and division functions. - -2007-09-10 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/addlsh1_n.asm: Use L() for labels. - * mpn/powerpc32/sublsh1_n.asm: Likewise. - -2007-09-09 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/x86-defs.m4 (LEA): New define. - * mpn/x86/darwin.m4: New file, for now just defining LEA. - * configure.in: Pick up x86/darwin.m4. - * mpn/x86/*: Use LEA for PIC references. - - * configure.in: For X86/32, treat core2 like pentium3. - -2007-09-06 Torbjorn Granlund <tege@swox.com> - - * tests/amd64check.c (calling_conventions_values): Put constants, - dynamic values in this array (was in scalars). - (calling_conventions_check): Corresponding changes. - * tests/amd64call.asm: Rewrite to be PIC, smaller, using amd64check.c's - array. - -2007-09-04 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/pentium4/sse2/mul_basecase.asm: Misc cleanups. - * mpn/x86/pentium4/sse2/sqr_basecase.asm: Likewise. - - * mpn/x86_64/mod_34lsub1.asm: Optimize loop, reduce code size. - - * tests/amd64call.asm: Remove bogus no-op moves. - -2007-09-03 Torbjorn Granlund <tege@swox.com> - - From Richard Guenther: - * gmp-h.in (__GMP_EXTERN_INLINE): Declare conditionally on - __GNUC_STDC_INLINE__. - - * tests/cxx/t-locale.cc: #include <cstdlib>, for abort. - - * mpn/x86_64/core2/popcount.asm: New file. - * mpn/x86_64/pentium4/popcount.asm: New file. - - * mpn/x86_64/addmul_2.asm: New file. - * mpn/x86_64/mul_2.asm: New file. - - * mpn/x86_64/aorsmul_1.asm: Use 32-bit mov for zeroing registers - (saves space). - -2007-09-01 Torbjorn Granlund <tege@swox.com> - - * configure.in: Handle athlon64, core2, and pentium4 separately for - 64-bit ABI. - - * config.sub: Recog athlon64, core2, and opteron. - - * config.guess: Do two x86 variants, for 32-bit ABI and 64-bit ABI. - Return "athlon64" and "core2", not x86_64. - -2007-08-31 Torbjorn Granlund <tege@swox.com> - - From Patrick Pelissier: - * gmp-h.in: Don't refer to FILE from C++ unless we've seen FILE. - -2007-08-30 Torbjorn Granlund <tege@swox.com> - - * demos/isprime.c: Include string.h for strcmp. - - * demos/factorize.c (main): Declare to int. - -2007-06-22 Torbjorn Granlund <tege@swox.com> - - * mpn/x86_64/pentium4/lshift.asm: Minor tuning. - * mpn/x86_64/pentium4/rshift.asm: Likewise. - -2007-05-30 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/mode64/aors_n.asm: Add _nc entry points. - -2007-05-22 Torbjorn Granlund <tege@swox.com> - - * tests/memory.c: Cast calls to new mem* calls to avoid unaligned ops. - -2007-05-16 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/convert.c: Tweak operand sizes for best coverage. - - * tests/memory.c: Add red zones around allocations. - -2007-05-15 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/mul_1.asm: Make mul_1c entry point actually work. - - * mpn/generic/set_str.c (mpn_dc_set_str): Avoid calling mpn_add_n when - ln == 0. - - * tests/mpz/convert.c (string_urandomb): New function. - (main): Use it by enabling ifdef'ed out code. - -2007-04-30 Torbjorn Granlund <tege@swox.com> - - * mpn/x86_64/mul_basecase.asm: Complete rewrite. - - * mpn/x86_64/copyi.asm: Use short shift-by-one form. Misc cleanups. - * mpn/x86_64/copyi.asm: Likewise. - * mpn/x86_64/popham.asm: Likewise. - - * mpn/x86_64/aorsmul_1.asm: Cleanup formatting. - -2007-04-25 Torbjorn Granlund <tege@swox.com> - - * mpz/divexact.c: Handle undefined case of |N| < |D| to avoid segfaults. - -2007-02-24 Torbjorn Granlund <tege@swox.com> - - * doc/gmp.texi (Toom 3-Way Multiplication): Fix typo. - (mpz_scan0, mpz_scan1): Fix typos. - (Float Internals): Rewrite paragraph about struct types. - -2007-02-12 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/pentium4/sse2/sqr_basecase.asm: Complete rewrite (except - diagonal code). - -2007-02-05 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_fft.c (mpn_fft_fft): New name for mpn_fft_fft_sqr, - old mpn_fft_fft removed. - (mpn_mul_fft_internal): Call mpn_fft_fft separately for each operand. - (mpn_fft_add_modF): Rewrite to avoid random branches. - (mpn_fft_sub_modF): Likewise. - - * mpn/x86/pentium4/sse2/addmul_1.asm: Complete rewrite. - * mpn/x86/pentium4/sse2/mul_1.asm: Complete rewrite. - * mpn/x86/pentium4/sse2/mul_basecase.asm: Complete rewrite, based on - new addmul and mul code. - -2007-01-31 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/get_str.c (mpn_sb_get_str): Get loop count for frac - development right. - - * mpn/powerpc32/vmx/mod_34lsub1.asm: New file. - - * mpn/powerpc32/aors_n.asm: New file, complete rewrite. - * mpn/powerpc32/add_n.asm: Remove. - * mpn/powerpc32/sub_n.asm: Remove. - -2007-01-25 Torbjorn Granlund <tege@swox.com> - - * mpn/x86_64/core2/aors_n.asm: Add _nc entry points, minor cleanups. - - * mpn/x86_64/core2/lshift.asm: Rewrite. - * mpn/x86_64/core2/rshift.asm: Rewrite. - - * mpn/x86_64/pentium4/lshift.asm: Swap some loop insns for a small - speedup. - * mpn/x86_64/pentium4/rshift.asm: New file, based on lshift.asm. - - * mpn/x86_64/pentium4/gmp-mparam.h: New file. - - * mpn/x86_64/pentium4/aors_n.asm: Complete rewrite of add/subtract - code. - * mpn/x86_64/pentium4/add_n.asm: Remove. - * mpn/x86_64/pentium4/sub_n.asm: Remove. - -2007-01-20 Torbjorn Granlund <tege@swox.com> - - * mpn/x86_64/lshift.asm: Add special case for cnt=1. - -2007-01-19 Torbjorn Granlund <tege@swox.com> - - * mpn/x86_64/aorsmul_1.asm: New file, written from scratch, finally at - 3.0 c/l on K8 (addmul_1 was 3.3; submul_1 was 3.5). - * mpn/x86_64/addmul_1.asm: Remove. - * mpn/x86_64/submul_1.asm: Remove. - -2006-12-29 Torbjorn Granlund <tege@swox.com> - - * randmt.c (__gmp_randclear_mt): Initialize ALLOC field, like in - __gmp_randinit_mt_noseed. - (__gmp_randclear_mt, __gmp_randinit_mt_noseed): Make similar functions - look similar. - (__gmp_randclear_mt): Pass actually allocated size. - - * mpn/Makefile.am (nodist_EXTRA_libmpn_la_SOURCES): Add mul_toom22.c, - mul_toom32.c, mul_toom42.c. - - * configure.in: Recognize athlon64 and core2 as alternatives to x86_64. - Provide special settings for core2. - - * configure.in (gmp_mpn_functions): Add mul_toom22, mul_toom32, - mul_toom42. - - * mpn/generic/mul_toom22.c: New file. - * mpn/generic/mul.c: Use mpn_mul_toom22. Trim cutoff points between - the mpn_mul_toomN2 functions. Handle balanced operands at function - entry. - -2006-12-29 Marco Bodrato <bodrato@mail.dm.unipi.it> - - * mpn/generic/mul_n.c: Rewrite interpolation code. - -2006-12-28 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_toom32.c: New file. - * mpn/generic/mul_toom42.c: New file. - * mpn/generic/mul.c: Use mpn_mul_toom32 and mpn_mul_toom42 for - unbalanced operands. - -2006-12-17 Torbjorn Granlund <tege@swox.com> - - * mpn/x86_64/aorrlsh_n.asm: New file. - * mpn/x86_64/lshsub_n.asm: New file. - - * mpn/x86_64/core2/aors_n.asm: New file. - * mpn/x86_64/core2/lshift.asm: New file. - * mpn/x86_64/core2/rshift.asm: New file. - - * mpn/x86/p6/aors_n.asm: Replace K7 grabbing code with P6 specific - code. - - * mpn/x86/p6/lshsub_n.asm: New file. - -2006-11-23 Torbjorn Granlund <tege@swox.com> - - * tune/speed.h (SPEED_ROUTINE_MPN_MUL_BASECASE): Allocate space for xp - locally, s->xp might be insufficient. - -2006-11-22 Torbjorn Granlund <tege@swox.com> - - * randmt.c (__gmp_randinit_mt_noseed): Initialize ALLOC field of result - param. - -2006-11-06 Torbjorn Granlund <tege@swox.com> - - * tune/set_strp.c: New file. - -2006-11-04 Torbjorn Granlund <tege@swox.com> - - * extract-dbl.c: Rewrite to handle nails better, and for general - optimization. - - * mpz/bin_uiui.c: Simplify. - - * longlong.h (umul_ppmm) [mmix]: New. - - * tune/tuneup.c, tune/common.c, tune/speed.c, tune/speed.h, - tune/set_strb.c, tune/set_strs.c: Add tuning and speed measurements - of separate SET_STR_DC_THRESHOLD and SET_STR_PRECOMPUTE_THRESHOLD. - Add tuning and speed measurement of mpn_addsub_n. - -2006-10-31 Torbjorn Granlund <tege@swox.com> - - * gmpxx.h: Remove ternary stuff, it is hardly an optimization and it - writes to destination before reading all source operands. - -2006-10-25 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/set_str.c: Complete rewrite. - * mpn/generic/get_str.c: Likewise. - - * gmp-impl.h (struct powers, powers_t): New types. - Restructure GET_STR_* and SET_STR_* thresholds. - -2006-09-21 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/rootrem.c: Remove some redundant casts. - -2006-07-12 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev6/nails/addmul_2.asm: Make it run at claimed speed. - * mpn/alpha/ev6/nails/addmul_4.asm: Likewise. - - * mpf/get_str.c: Avoid copying result when not needed. Misc cleanups. - - * tests/amd64call.asm: Use jmp instead of jmpq to placate Solaris. - -2006-06-30 Torbjorn Granlund <tege@swox.com> - - * configure.in (powerpc-*): Remove repeated path component. - -2006-06-15 Torbjorn Granlund <tege@swox.com> - - * configure.in: (ia64-*-linux*): Don't use -O3. - -2006-06-14 Torbjorn Granlund <tege@swox.com> - - * mpq/get_str.c: Fix upper base limit boundary in an ASSERT. - - * tests/refmpn.c (refmpn_sb_divrem_mn): Use ASSERT_CARRY for add-back. - -2006-05-31 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-set_d.c (check_data): Add more data points. - - * mpz/set_d.c: Handle negative return values from __gmp_extract_double. - -2006-05-17 Torbjorn Granlund <tege@swox.com> - - * configure.in: Clear out gcc_cflags_cpu and gcc_cflags_arch for a fat - build. - -2006-05-16 Torbjorn Granlund <tege@swox.com> - - * demos/primes.c (find_primes): Increase mpz_probab_prime_p cnt to 10. - - * mpn/generic/addsub_n.c: Fix criteria form when to call _nc functions. - -2006-05-12 Torbjorn Granlund <tege@swox.com> - - * config.guess: Recognize more ppc processor types. - -2006-05-11 Torbjorn Granlund <tege@swox.com> - - * tune/speed.c (usage): Update URL for gnuplot and quickplot. - -2006-05-10 Torbjorn Granlund <tege@swox.com> - - * configure.in (powerpc-*-*): Pass -maltivec to assembler for - appropriate CPUs. - -2006-05-08 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/aix.m4 (LEA): Remove [RW] attribute. - -2006-05-03 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/vmx/popcount.asm: Conditionally zero extend n. - -2006-04-27 Torbjorn Granlund <tege@swox.com> - - * mpz/divexact.c: Call mpz_tdiv_q for large operands. - - * configure.in (powerpc-*-darwin): Remove -fast, it affects PIC. - -2006-04-26 Torbjorn Granlund <tege@swox.com> - - * config.guess: Try to recognize Ultrasparc T1 (as ultrasparct1). - * config.sub: Handle ultrasparct1. - -2006-04-25 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/gmp-mparam.h: Retune, without separation of GNUC and - non-GNUC data. - -2006-04-20 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/convert.c: Increase operands range. - -2006-04-19 Torbjorn Granlund <tege@swox.com> - - * configure.in: Support powerpc eABI. - * mpn/powerpc32/eabi.m4: New file. - - * configure.in: Support powerpc *bsd. - * mpn/powerpc64/elf.m4: New name for mpn/powerpc64/linux64.m4. - * mpn/powerpc32/elf.m4: New name for mpn/powerpc32/linux.m4. - - * mpn/powerpc64/linux64.m4 (ASM_END): Quote TOC_ENTRY. - -2006-04-18 Torbjorn Granlund <tege@swox.com> - - * configure.in (gmp_mpn_functions_optional): Add lshiftc. - (HAVE_NATIVE): Add lshiftc. - - * mpn/powerpc64/mode64/invert_limb.asm: Use LEA, not LDSYM. - * mpn/powerpc64/mode64/mode1o.asm: Likewise. - * mpn/powerpc64/mode64/dive_1.asm: Likewise. - - * mpn/powerpc64/linux64.m4 (TOC_ENTRY): Define to empty. - * mpn/powerpc64/aix.m4 (TOC_ENTRY): Likewise. - * mpn/powerpc32/aix.m4 (TOC_ENTRY): Likewise. - - * mpn/powerpc32/aix.m4 (EXTERN): New, copied form powerpc64/aix.m4. - * mpn/powerpc32/mode1o.asm: Use EXTERN. - * mpn/powerpc32/linux.m4 (EXTERN): Provide dummy definition. - * mpn/powerpc32/darwin.m4 (EXTERN): Likewise. - -2006-04-13 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_fft.c: Use new thresholds mechanism if MUL_FFT_TABLE2 - is defined. - (mpn_lshiftc): New name for mpn_lshift_com (for consistency with some - stuff already in 4.1.4. - (mpn_fft_mul_2exp_modF): Reorganize initial operand reductions to avoid - divisions. - - * tests/devel/try.c (choice_array): Add mpn_addsub_n[c]. - -2006-04-11 Torbjorn Granlund <tege@swox.com> - - * aclocal.m4: Regenerate with patched libtool. - - * mpn/asm-defs.m4 (ASM_END): Provide (empty) default. - -2006-04-08 Torbjorn Granlund <tege@swox.com> - - * configure.in (gmp_mpn_functions_optional): Add addsub. - - * gmpxx.h: Remove missed MPFR references. - - * gmp-impl.h (LIMBS_PER_DOUBLE): Adjust formula to not be pessimistic. - - * gmp-impl.h (TMP_*, WANT_TMP_DEBUG): Don't expect marker argument; - define TMP_SALLOC and TMP_BALLOC. - - * mpn/minithres/gmp-mparam.h: New file. - - * tests/mpz/t-io_raw.c: Fix printf type/arg mismatches. - * tests/mpz/t-export.c: Likewise. - * tests/mpz/io.c: Likewise. - * tests/t-constants.c: Likewise. - - * mpn/ia64/popcount.asm: Append "cond.dptk" to conditional branches to - placate icc. - * mpn/ia64/hamdist.asm: Likewise. - * mpn/ia64/lorrshift.asm: Likewise. - * mpn/ia64/dive_1.asm: Likewise. - -2006-04-05 Torbjorn Granlund <tege@swox.com> - - * tal-notreent.c (__gmp_tmp_mark): Add "struct" tag for tmp_marker. - (__gmp_tmp_free): Likewise. - - * mpn/generic/mul_fft.c: Optimize many scalar divisions and mod - operations into masks and shifts. - (mpn_fft_mul_modF_K): Fix a spurious ASSERT_NOCARRY. - -2006-03-26 Torbjorn Granlund <tege@swox.com> - - * Version 4.2 released. - - * mpn/powerpc64/aix.m4 (LEA): Renamed from LDSYM. - * mpn/powerpc64/darwin.m4: Likewise. - * mpn/powerpc64/linux64.m4: Likewise. - * mpn/powerpc64/vmx/popcount.asm: Use LEA, not LDSYM. - -2006-03-23 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h: (class gmp_allocated_string): Prefix strlen with std::. - - * gmpxx.h (__GMP_DEFINE_TERNARY_EXPR2): Remove for now. - (struct __gmp_ternary_addmul2): Likewise. - (struct __gmp_ternary_submul2): Likewise. - - * gmpxx.h: #include <cstring>. - (struct __gmp_alloc_cstring): Prefix strlen with std::. - - * mpn/x86/pentium/com_n.asm: Add TEXT and ALIGN. - * mpn/x86/pentium/copyi.asm: Likewise. - * mpn/x86/pentium/copyd.asm: Likewise. - -2006-03-22 Torbjorn Granlund <tege@swox.com> - - * gmp-h.in: Add a "using std::FILE" for C++. - (_GMP_H_HAVE_FILE): Check also _ISO_STDIO_ISO_H. - - * gmpxx.h: Remove mpfr code. - * tests/cxx: Likewise. - - * gmp-impl.h (FORCE_DOUBLE): Rename a tempvar to avoid a clash with - GNU/Linux public include file. - - * configure.in (powerpc64, darwin): New optional, gcc_cflags_subtype. - Grab powerpc32/darwin.m4 for ABI=mode32. - - * configure.in: Use host_cpu whenever just the cpu type is needed. - -2006-03-08 Torbjorn Granlund <tege@swox.com> - - * mpz/get_si.c: Fix a typo. - - * tests/mpq/t-get_d.c (check_random): Improve random generation for - nails. - -2006-02-28 Torbjorn Granlund <tege@swox.com> - - * tests/mpq/t-get_d.c (check_random): New function. - (main): Call check_random. - - * mpq/set_d.c: Make choices based on LIMBS_PER_DOUBLE, not - BITS_PER_MP_LIMB. Make it work for LIMBS_PER_DOUBLE == 4. - Use MPZ_REALLOC. - - * mpz/set_d.c: Make it work for LIMBS_PER_DOUBLE == 4. - - * extract-dbl.c: Make it work for LIMBS_PER_DOUBLE > 3. - -2006-02-27 Torbjorn Granlund <tege@swox.com> - - * mpz/cmp_d.c: Declare `i'. - * mpz/cmpabs_d.c: Likewise. - -2006-02-23 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/vmx/copyd.asm: Set right VRSAVE bits. - * mpn/powerpc32/vmx/copyi.asm: Likewise. - -2006-02-22 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/vmx/logops_n.asm: New file. - - * mpn/powerpc32/diveby3.asm: Rewrite. - -2006-02-21 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/vmx/copyi.asm: New file. - * mpn/powerpc32/vmx/copyd.asm: New file. - -2006-02-17 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev6/nails/aors_n.asm (CYSH): Import proper setting from - deleted mpn_sub_n. - -2006-02-16 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev6/addmul_1.asm: Correct slotting comments. - -2006-02-15 Torbjorn Granlund <tege@swox.com> - - * tests/devel/anymul_1.c: Copy error reporting code from addmul_N.c. - - * tests/devel/addmul_N.c: New file. - * tests/devel/mul_N.c: New file. - - * mpn/alpha/default.m4 (PROLOGUE_cpu): Align functions at 16-byte - boundary. - - * mpn/alpha/ev6/nails/aors_n.asm: New file. - * mpn/alpha/ev6/nails/add_n.asm: Remove. - * mpn/alpha/ev6/nails/sub_n.asm: Remove. - - * mpn/alpha/ev6/nails/addmul_1.asm: Rewrite. - * mpn/alpha/ev6/nails/submul_1.asm: Likewise. - * mpn/alpha/ev6/nails/mul_1.asm: Likewise. - - * mpn/alpha/ev6/nails/addmul_2.asm: Use L() for labels. - * mpn/alpha/ev6/nails/addmul_3.asm: Use L() for labels. - * mpn/alpha/ev6/nails/addmul_4.asm: Use L() for labels. - -2006-02-13 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/diveby3.asm: Trivially reorder loop insns to save - 1 c/l. - - * mpn/x86_64/dive_1.asm: Use movabsq to support large model non-PIC. - - * mpn/x86_64/rsh1add_n.asm: Replace high register with rbx. - * mpn/x86_64/rsh1sub_n.asm: Likewise. - -2006-02-10 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/sqr_diagonal.asm: Software pipeline. - - * mpn/powerpc64/vmx/popcount.asm: Add prefetching. - -2006-02-07 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/mode64/diveby3.asm: Rewrite. - -2006-02-04 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/vmx/popcount.asm: Remove mpn_hamdist partial code. - Move compare for huge n so that it is always executed. - -2006-02-03 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/linux.m4 (LEA): Add support for PIC. - - * configure.in (powerpc): New optional, gcc_cflags_subtype. - - * mpn/x86_64/pentium4/add_n.asm: New file. - * mpn/x86_64/pentium4/sub_n.asm: New file. - * mpn/x86_64/pentium4/lshift.asm: New file. - - * mpn/powerpc64/linux64.m4 (PROLOGUE_cpu): Align function start to - 16-multiple. - * mpn/powerpc64/aix.m4: Likewise. - * mpn/powerpc64/darwin.m4: Likewise. - - * mpn/powerpc64/copyi.asm: Align loop to 16-multiple. - * mpn/powerpc64/copyd.asm: Likewise - - * configure.in (powerpc): Add vmx to relevant paths. - - * mpn/powerpc64/linux64.m4 (DEF_OBJECT): Accept 2nd argument, for - alignment. - * mpn/powerpc64/aix.m4: Likewise. - * mpn/powerpc64/darwin.m4: Likewise. - - * mpn/powerpc32/linux.m4 (DEF_OBJECT, END_OBJECT): New macros, - inherited from powerpc64 versions. - * mpn/powerpc32/aix.m4: Likewise. - * mpn/powerpc32/darwin.m4: Likewise. - - * mpn/powerpc64/vmx/popcount.asm: New file, for ppc32 and ppc64. - * mpn/powerpc32/vmx/popcount.asm: New file, grabbing above file. - -2006-01-22 Torbjorn Granlund <tege@swox.com> - - * configure.in: Generalize OS-dependent patterns for powerpcs. - -2006-01-20 Torbjorn Granlund <tege@swox.com> - - * mpn/x86_64/popham.asm: Optimize. - - * config.guess: Recognize power4 and up under linux-gnu. - * config.sub: Generalize power recognition code. - * acinclude.m4 (POWERPC64_PATTERN): Add 64-bit powerpc processors. - * configure.in: Recognize powerpc processors masquerading as power - processors. - -2006-01-19 Torbjorn Granlund <tege@swox.com> - - * mpn/x86_64/logops_n.asm: Rewrite for more stable speed and smaller - code. - * mpn/x86_64/com_n.asm: Likewise. - -2006-01-18 Torbjorn Granlund <tege@swox.com> - - * mpn/x86_64/addlsh1_n.asm: Rewrite to use indexed addressing. - * mpn/x86_64/sublsh1_n.asm: Likewise. - -2006-01-17 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/diveby3.c: Use GMP standard parameter names. Nailify - alternative code. Use restrict for params. - - * configure.in: Recognize andn_n as not needing nailification. - - * tests/mpq/t-equal.c (check_various): Disable a test that gives common - factors for GMP_NUMB_BITS == 62. - -2006-01-16 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/get_str.c (mpn_sb_get_str): Fix digit count computation, - was inaccurate for nails. - -2006-01-15 Torbjorn Granlund <tege@swox.com> - - * mpn/x86_64/mode1o.asm: Remove unneeded carry register zeroing. - -2006-01-08 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev6/sqr_diagonal.asm: New file. - -2006-01-06 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/mode64/mod_34lsub1.asm: Tune to 1.5 c/l. - - * mpn/generic/mullow_n.c (MUL_BASECASE_ALLOC): New #define. - (mpn_mullow_n): Use it. - - * mpn/powerpc64/mode64/dive_1.asm: Use EXTERN. - * mpn/powerpc64/mode64/mode1o.asm: Likewise. - - * mpn/powerpc64/aix.m4 (EXTERN): Define to import symbol. - (LDSYM): Remove [RW] attribute. - * mpn/powerpc64/linux64.m4 (EXTERN): Dummy definition. - * mpn/powerpc64/darwin.m4 (EXTERN): Likewise. - -2006-01-05 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/mode64/mode1o.asm: New file. - - * mpn/powerpc64/mode64/dive_1.asm: Use L() for labels. Invoke ASM_END. - - * mpn/powerpc64/mode64/invert_limb.asm: Invoke ASM_END. - - * mpn/powerpc64/linux64.m4: Move toc entry generation from direct at - DEF_OBJECT to delayed via LDSYM, define ASM_END to output it. - * mpn/powerpc64/aix.m4: Likewise. - * mpn/powerpc64/darwin.m4: Define a dummy ASM_END. - - * mpn/powerpc64/mode64/addmul_1.asm: Add POWER5 timings. - * mpn/powerpc64/mode64/mul_1.asm: Likewise. - - * mpn/powerpc64/mode64/submul_1.asm: Tweak to save 1.5 c/l for POWER5. - -2006-01-04 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/mode64/dive_1.asm: New file. - - * mpn/powerpc64/mode64/invert_limb.asm: Add missing ASM_START. - - * mpn/powerpc64/mode64/addmul_1.asm: Fix a comment typo. - - * mpn/x86_64/diveby3.asm: Rewrite. - -2006-01-03 Torbjorn Granlund <tege@swox.com> - - * configure.in: Update bugs reporting address. - - * mpn/powerpc64/mode64/diveby3.asm: Trim a cycle off of POWER4 timing. - Misc cleanup. - -2006-01-02 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/linux64.m4 (CALL): New macro. - * mpn/powerpc64/aix.m4: Likewise. - * mpn/powerpc64/darwin.m4: Likewise, also define macro "DARWIN". - -2005-12-28 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/mode64/mod_34lsub1.asm: New file. - -2005-12-26 Torbjorn Granlund <tege@swox.com> - - * mpn/x86_64/mod_34lsub1.asm: New file. - -2005-12-20 Torbjorn Granlund <tege@swox.com> - - * mpn/x86_64/submul_1.asm: Save a push/pop by not using register r12. - Use addq instead of leaq for pointer updates; schedule them. (These - changes shaves one cycle of overhead and 0.25 c/l.) - -2005-12-18 Torbjorn Granlund <tege@swox.com> - - * mpf/ui_div.c: Implement workaround for GCC bug triggered on alpha. - * mpf/set_q.c: Likewise. - -2005-12-16 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/tdiv_qr.c: Remove statement with no effect. - Rename dead variable to `dummy'. - -2005-12-15 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (setup_error_handler): Add a missing ";". - -2005-11-27 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul.c: Crudely call mpn_mul_fft_full before checking - for unbalanced operands. - - * mpn/generic/mul_fft.c: Remove many scalar divisions. - (mpn_mul_fft_lcm): Simplify. - (mpn_mul_fft_decompose): Rewrite to handle arbitrarily unbalanced - operands. - -2005-11-22 Torbjorn Granlund <tege@swox.com> - - * configure.in: Properly recognize all 32-bit Solaris releases. - -2005-11-10 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_fft.c: Inline mpn_fft_mul_2exp_modF, - mpn_fft_add_modF and mpn_fft_normalize. - -2005-11-02 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/reuse.c: Increase operand size, decrease # of reps. - - * mpz/rootrem.c: Adapt to new mpn_rootrem. - * mpz/root.c: Likewise. - - * tests/mpz/reuse.c: Test mpz_rootrem. - - With Paul Zimmermann: - * mpn/generic/rootrem.c: Complete rewrite. - -2005-10-31 Torbjorn Granlund <tege@swox.com> - - * mpz/pprime_p.c (mpz_probab_prime_p): Considerably limit trial - dividing. - - * mpz/perfpow.c (mpz_perfect_power_p): Use mpz_divisible_ui_p instead - of mpz_tdiv_ui. - - * mpz/divegcd.c: Correct probability number for GCD == 1. - - * mpn/x86_64/mul_basecase.asm: Remove an obsolete comment. - - * mpn/x86: Add cycle counts for array of x86 processors. - - * mpn/x86/k7/mod_34lsub1.asm: Remove spurious mentions of ebp. - - * mpn/powerpc32: Add POWER5 timings. - - * mpn/powerpc32/README: Describe global reference variations. - - * mpn/ia64/divrem_2.asm: Add some comments. - - * mpn/ia64/divrem_1.asm: Reformat. - - * mpn/ia64/addmul_2.asm: Correct a comment on slotting. - * mpn/ia64/logops_n.asm: Likewise. - - * mpn/ia64/addmul_1.asm: Remove a redundant preg mutex decl. - - * mpn/generic/dive_1.c: Whitespace cleanup. - - * mpn/alpha/ev6/nails/addmul_1.asm: Correct comments on slotting. - * mpn/alpha/ev6/nails/addmul_2.asm: Likewise. - * mpn/alpha/ev6/nails/addmul_4.asm: Likewise. - - * mpf/out_str.c: List some allocation improvement ideas. - - * doc/gmp.texi: Update many URLs and email addresses. - - * gmp-h.in (_GMP_H_HAVE_FILE): Check also _STDIO_H_INCLUDED. - -2005-10-26 Torbjorn Granlund <tege@swox.com> - - * tune/tuneup.c (tune_mullow): Update param.max_size for each threshold - measurement. - - * configure.in (POWERPC64_PATTERN/*-*-darwin*): Set - SPEED_CYCLECOUNTER_OBJ_mode64 and cyclecounter_size_mode64. - (POWERPC64_PATTERN/*-*-linux*): Likewise. - -2005-10-03 Torbjorn Granlund <tege@swox.com> - - * demos/factorize.c (factor_using_division_2kp): Honor verbose flag. - (factor_using_pollard_rho): Divide out new factor before it's - clobbered. Don't stop factoring after a composite factor was found. - -2005-09-17 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (fns): Add factorial keywords. - -2005-08-16 Torbjorn Granlund <tege@swox.com> - - * tune/Makefile.am (EXTRA_DIST): Change "amd64" => "x86_64". - * mpn/Makefile.am (TARG_DIST): Change "amd64" => "x86_64". - -2005-08-15 Torbjorn Granlund <tege@swox.com> - - * configure.in: Change "amd64" => "x86_64". - -2005-06-13 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/pre_mod_1.c: Canonicalize variable names. - - * mpn/generic/divrem.c: Rate qxn test as UNLIKELY. - - * mpn/generic/gcdext.c (sanity_check_row): Invoke TMP_MARK. - - * tune/tuneup.c (tune_mullow): Fix all max_size fields. - - * gmp-impl.h (SQR_TOOM3_THRESHOLD_LIMIT): New #define. - * tune/tuneup.c (tune_sqr): Use SQR_TOOM3_THRESHOLD_LIMIT. - (sqr_toom3_threshold): Initialize from SQR_TOOM3_THRESHOLD_LIMIT. - - * mpn/generic/mul_n.c (mpn_sqr_n): Use SQR_TOOM3_THRESHOLD_LIMIT. - - * gmp-impl.h (mpn_nand_n, mpn_iorn_n, mpn_nior_n, mpn_xnor_n): - Handle nails. - -2005-06-13 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/gcdext.c (gcdext_schoenhage): Check for the - (unlikely) case that one of the hgcd/euclid steps results in two - remainders of one limb each. Then use gcdext_1. - -2005-06-12 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev6/sub_n.asm: Analogous changes as to add_n.asm last. - -2005-06-11 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev6/add_n.asm: Rewrite inner loop to load later. - Add mpn_add_nc entry. - - * mpn/alpha/ev6/addmul_1.asm: Remove redundant initial loads. - -2005-06-09 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/dive_1.asm: Fix issues with HP-UX. - -2005-06-08 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/diveby3.asm: Update TODO list. - - * mpn/ia64/mode1o.asm: Fix comment typos. - - * mpn/ia64/dive_1.asm: New file. - -2005-06-07 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/mode1o.asm: Add prefetching. - - * mpn/generic/dive_1.c: Use variable h for upper umul_ppmm result. - -2005-06-06 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/hamdist.asm: Complete rewrite. - * mpn/ia64/popcount.asm: Rewrite to use multi-pronged feed-in. - - * mpn/ia64/aors_n.asm: Rewrite feed-in code. - * mpn/ia64/rsh1aors_n.asm: Likewise. - * mpn/ia64/aorslsh1_n.asm: Likewise. - * mpn/ia64/lorrshift.asm: Likewise. - -2005-06-04 Torbjorn Granlund <tege@swox.com> - - * tests/devel/try.c (choice_array): Exclude mpn_preinv_mod_1 unless - USE_PREINV_MOD_1. - (choice_array): Exclude mpn_sqr_basecase if SQR_KARATSUBA_THRESHOLD - is zero. - -2005-06-03 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev6/addmul_1.asm: Prefix all labels with "$". - * mpn/alpha/ev6/mul_1.asm: Likewise. - -2005-06-02 Torbjorn Granlund <tege@swox.com> - - * tests/refmpn.c (refmpn_divmod_1c_workaround): Implement workaround - to gcc 3.4.x bug triggered on powerpc64 with 32-bit ABI. - -2005-06-01 Torbjorn Granlund <tege@swox.com> - - * tests/devel/try.c (main): Fix a typo. - -2005-05-31 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev6/addmul_1.asm: Rewrite for L1 cache, add prefetch. - -2005-05-30 Torbjorn Granlund <tege@swox.com> - - * tests/misc.c (tests_rand_start): Mask random seed to 32 bits. - -2005-05-29 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/mode32/mul_1.asm: Handle BROKEN_LONGLONG_PARAM. - * mpn/powerpc64/mode32/addmul_1.asm: Likewise. - * mpn/powerpc64/mode32/submul_1.asm: Likewise. - - * mpn/powerpc32/mode1o.asm: Rewrite to actually work. - - * mpn/powerpc32/aix.m4 (LEA): New macro. - (ASM_END): New macro. - - * mpn/powerpc32/linux.m4: New file. - * mpn/powerpc32/darwin.m4: New file. - * configure.in: Use linux.m4 and darwin.m4. - (powerpc64-linux-gnu): Add support for mode32. - -2005-05-25 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mullow_n.c: Remove FIXME mentioning fixed flaw. - - * tests/mpz/t-cmp_d.c (check_one): Fix printf fmt string typo. - - * demos/isprime.c: #include stdlib.h. - * tests/rand/t-urbui.c: Likewise. - * tests/rand/t-urmui.c: Likewise. - - * tests/mpz/t-popcount.c (check_random): Remove spurious printf arg. - - * mpn/ia64/lorrshift.asm: Cleanup code layout. - * mpn/ia64/popcount.asm: Likewise. - -2005-05-24 Torbjorn Granlund <tege@swox.com> - - * tests/devel/try.c (param_init) [TYPE_GET_STR]: Set retval field. - (compare): Handle SIZE_GET_STR as SIZE_RETVAL. - - * tests/refmpn.c (refmpn_get_str): Rewrite to make it work. - -2005-05-23 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/add_n.asm: Add mpn_add_nc entry point. - * mpn/amd64/sub_n.asm: Add mpn_sub_nc entry point. - - * longlong.h (many places): Remove lvalue casts. - - * gmp-impl.h (MPF_SIGNIFICANT_DIGITS): Cast prec to avoid overflow - for > 4G digits. - - * mpn/alpha/ev6/add_n.asm: Prefetch using ldl. - * mpn/alpha/ev6/sub_n.asm: Likewise. - - * mpn/alpha/ev6/slot.pl (optable): Recognize negq and ldl. - - * mpn/ia64/aors_n.asm: Prefetch using lfetch. - * mpn/ia64/lorrshift.asm: Likewise. - * mpn/ia64/popcount.asm: Likewise. - * mpn/ia64/diveby3.asm: Likewise. - -2005-05-22 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev67/popcount.asm: Prefetch. - * mpn/alpha/ev67/hamdist.asm: Prefetch. - - * longlong.h (add_ssaaaa) [x86]: Remove lvalue casts. - (sub_ddmmss) [x86]: Likewise. - - * tests/devel/try.c (param_init) [TYPE_MPZ_JACOBI]: Add DATA_SRC1_ODD. - (param_init) [TYPE_MPZ_KRONECKER]: Clear inherited DATA_SRC1_ODD. - (param_init) [TYPE_DIVEXACT_1]: Use symbolic name DIVISOR_LIMB. - -2005-05-21 Torbjorn Granlund <tege@swox.com> - - * tests/devel/try.c (param_init) [TYPE_MPZ_JACOBI]: Initialize divisor - field according to UDIV_NEEDS_NORMALIZATION. - - * mpz/mul_i.h: Remove left-over TMP_XXXX marker arguments. - -2005-05-20 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/pentium4/sse2/addmul_1.asm (mpn_addmul_1c): Put carry in - proper register. - - * mpn/generic/sqr_basecase.c (mpn_sqr_basecase, addmul_2 version): - Avoid accesses out-of-bound in MPN_SQR_DIAGONAL applicate code. - -2005-05-19 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/diveby3.asm: Make it actually work. - - * gmp-impl.h (MULLOW_BASECASE_THRESHOLD_LIMIT): New #define. - * mpn/generic/mullow_n.c: Use fixed stack allocation for the smallest - operands; use TMP_S* allocation for medium operands. - - * gmp-impl.h: Remove nested TUNE_PROGRAM_BUILD test. - -2005-05-18 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_n.c: Make squaring and multiplication code more - similar. Use TMP_S* functions. - - * gmp-impl.h (TMP_DECL, TMP_MARK, TMP_FREE): Get rid of argument. - (TMP_SALLOC): New macro for "small" allocations. - (TMP_BALLOC): New macro for "big" allocations. - (TMP_SDECL, TMP_SMARK, TMP_SFREE): New macros for functions that use - just TMP_SALLOC. - (WANT_TMP_ALLOCA): Make default functions choose alloca or reentrant - functions, depending on size. - - * *.c: Remove TMP_XXXX marker arguments. - - * acinclude.m4 (WANT_TMP): Want tal-reent.lo also for alloca case. - -2005-05-16 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/gmp-mparam.h: Further extend FFT tables. - -2005-05-15 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (udiv_qrnnd_preinv2): Pull an add into add_ssaaaa. - (udiv_qrnnd_preinv2gen): Likewise. - -2005-05-14 Torbjorn Granlund <tege@swox.com> - - * longlong.h (add_ssaaaa) [x86_64]: Restrict allowed immediate - operands. - * (sub_ddmmss) [x86_64]: Likewise. - -2005-05-02 Torbjorn Granlund <tege@swox.com> - - * acinclude.m4 (GMP_HPC_HPPA_2_0): Make gmp_tmp_v1 sed pattern handle - version numbers like B.11.X.32509-32512.GP. - - * mpn/m68k/aors_n.asm: Correct MULFUNC_PROLOGUE. - - * mpn/powerpc64/mode64/aors_n.asm: Add a MULFUNC_PROLOGUE. - - * mpf/inp_str.c: Use plain int for mpf_set_str return value (works - around gcc 4 bug). - - * acinclude.m4 (GMP_ASM_POWERPC_PIC_ALWAYS): Handle darwin's assembly - syntax. - (long long reliability test 1): New GMP_PROG_CC_WORKS_PART test. - (long long reliability test 2): New GMP_PROG_CC_WORKS_PART test. - - * configure.in: Add mode64 support for darwin. Use darwin.m4. - Add cflags_opt flags for mode32 darwin. - - * mpn/powerpc64: Use L() for all asm files. - - * mpn/asm-defs.m4 (PIC_ALWAYS): Define PIC just iff PIC_ALWAYS = "yes". - - * mpn/powerpc64/darwin.m4: New file. - - * mpn/powerpc64/linux64.m4: Remove TOCREF, add LDSYM. - Rework DEF_OBJECT to need just one argument. - * mpn/powerpc64/aix.m4: Likewise. - - * mpn/powerpc64/mode64/invert_limb.asm: Load approx_tab address with - LDSYM. Optimize somewhat. Remove 2nd DEF_OBJECT operand. - -2005-05-01 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/popham.c: Compute final summation differently for 64-bit. - - * tests/mpz/t-popcount.c (check_random): New function. - (main): Call it. - -2005-04-28 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/add_n.asm: Use r9 instead of rbx to save push/pop. - * mpn/amd64/sub_n.asm: Likewise. - -2005-04-09 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/copyi.asm: If HAVE_ABI_mode32, ignore upper 32 bits of - mp_size_t argument. - * mpn/powerpc64/copyd.asm: Likewise. - * mpn/powerpc64/sqr_diagonal.asm: Likewise. - * mpn/powerpc64/lshift.asm: Likewise. - * mpn/powerpc64/rshift.asm: Likewise. - * mpn/powerpc64/logops_n.asm: Likewise. - * mpn/powerpc64/com_n.asm: Likewise. - -2005-04-08 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/rootrem.c: Allocate PP_ALLOC limbs also for qp. - -2005-04-07 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/add_n.asm: Add nc entry point. - * mpn/powerpc32/sub_n.asm: Likewise. - - * mpn/amd64/*.asm: Add Prescott/Nocona cycle/limb numbers. - - * mpn/alpha/add_n.asm: Add correct cycle/limb numbers. - * mpn/alpha/sub_n.asm: Likewise. - * mpn/alpha/ev5/add_n.asm: Likewise. - * mpn/alpha/ev5/sub_n.asm: Likewise. - -2005-03-31 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/k7/gmp-mparam.h: Fix typo in last change. - -2005-03-19 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/gmp-mparam.h: Update. - - * mpn/alpha/gmp-mparam.h: Update. - * mpn/alpha/ev5/gmp-mparam.h: Update. - * mpn/alpha/ev6/gmp-mparam.h: Update. - - * mpn/ia64/gmp-mparam.h: Update. - - * mpn/x86/p6/mmx/gmp-mparam.h: Update. - * mpn/x86/pentium4/sse2/gmp-mparam.h: Update. - * mpn/x86/k7/gmp-mparam.h: Update. - - * tests/mpz/t-gcd.c (main): Honor command line reps argument. - - * tune/speed.h (SPEED_ROUTINE_MPN_GCD_CALL): Simplify and correct code - for generating test operands. - -2005-03-17 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd.c (qstack_adjust): New argument d, saying how much - to adjust the top quotient. - (hgcd_adjust): The quotient can be off by either 1 or 2. - -2005-03-16 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-gcd.c (MAX_SCHOENHAGE_THRESHOLD): Set to largest of - gcd,gcdext thresholds. - -2005-03-15 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/gcdext.c (gcdext_schoenhage): When calling gcdext_lehmer, - reuse all temporary limb storage, including the storage used for the - qstack. - -2005-03-09 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/logops_n.asm: Add MULFUNC_PROLOGUE. - -2005-03-05 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/gmp-mparam.h: Extend MUL_FFT_TABLE and SQR_FFT_TABLE. - * mpn/ia64/gmp-mparam.h: Likewise. - -2005-02-17 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/divrem_1.asm: Add preinv entry point. - -2005-01-13 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (MPN_SIZEINBASE): Count bits in type size_t. - (MPN_SIZEINBASE_16): Likewise. - -2004-12-17 Torbjorn Granlund <tege@swox.com> - - * tune/speed.c (run_gnuplot): Use lines, not linespoints. - Output a reset gnuplot command initially. - -2004-12-04 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/random2.c (gmp_rrandomb): Rework again. - * mpz/rrandomb.c (gmp_rrandomb): Likewise. - - * mpn/amd64/redc_1.asm: Call via PLT when PIC. - -2004-11-29 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/divrem_1.asm: Add preinv entry point. - * mpn/amd64/gmp-mparam.h: Set USE_PREINV_DIVREM_1 to 1. - -2004-11-24 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/diveby3.asm: Use correct prefetch instruction. - -2004-11-19 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/diveby3.asm: Add ",gp" glue in PROLOGUE. - Add r31 dummy operand to `br' instruction. - -2004-11-17 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/mode64/addmul_1.asm: Rewrite. - * mpn/powerpc64/mode64/mul_1.asm: Rewrite. - - * configure.in: Invoke AC_C_RESTRICT. - -2004-11-16 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/diveby3.asm: New file. - -2004-11-13 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/popham.asm: New file. - -2004-11-12 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/add_n.asm: Correct cycle count. - * mpn/amd64/sub_n.asm: Likewise. - - * mpn/amd64/dive_1.asm: Speed divisors with many factors of 2. - -2004-11-11 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/dive_1.asm: New file. - -2004-11-10 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/popham.c: Add comment. - -2004-11-09 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/com_n.asm: New file. - - * mpn/amd64/logops_n.asm: New file. - -2004-11-08 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/com_n.asm: New file. - -2004-11-05 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/diveby3.asm: New file. - - * config.guess: Strip any PPC string in /proc/cpuinfo. - Recognize 970 in that code. - -2004-11-01 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/mul_basecase.asm: New file. - - * mpn/amd64/redc_1.asm: New file. - -2004-10-25 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/mode64/addlsh1_n.asm: Correct cycle counts. - - * mpn/powerpc64/README: Update POWER5/PPC970 pipeline information. - - * mpn/generic/mul_basecase.c (MAX_LEFT): Add comment. - - * doc/gmp.texi: Consistently use "x86" denotation. - (Assembler SIMD Instructions): Mention SSE2 usage. - - * demos/pexpr.c (main): Handle "negative" base in mpz_sizeinbase call. - -2004-10-18 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/mode64/submul_1.asm: Shave 2 cycles/limb with new carry - inversion trick. - -2004-10-16 Torbjorn Granlund <tege@swox.com> - - * configure.in: Support icc under x86. - (ia64-*-linux*): Pass -no-gcc to icc. - -2004-10-15 Torbjorn Granlund <tege@swox.com> - - * longlong.h (ia64 umul_ppmm): Add version for icc. - - * configure.in: Support icc under ia64-*-linux*. - - * acinclude.m4: New "compiler works" test for icc 8.1 bug. - (GMP_PROG_CC_IS_GNU): Don't let Intel's icc fool us it is GCC. - -2004-10-14 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/gcdext.c: Add a few missing TMP_MARK. - -2004-10-14 Torbjorn Granlund <tege@swox.com> - - * acinclude.m4 (GMP_ASM_W32): Try also "data4". - - * mpn/ia64/logops_n.asm: Don't use naked "br", rejected by Intel - assembler. - * mpn/ia64/aors_n.asm: Likewise. - - * mpn/ia64/divrem_2.asm: Add ".prologue". - - * mpn/ia64/hamdist.asm: Put alloc first in bundle, enforced by the - Intel assembler. - - * longlong.h: Exclude masquerading __INTEL_COMPILER from ia64 asm. - * gmp-impl.h: Likewise. - -2004-10-12 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/mul_2.asm: Rewrite function entry code, write new code for - n=2. - * mpn/ia64/addmul_2.asm: Likewise. - - * tests/devel/try.c: Handle mpn_mul_2 like mpn_addmul_2. - - * tune/speed.c (routine): Make R parameter optional for mpn_mul_2. - -2004-10-11 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/addmul_1.asm: Update a comment. - - * tests/devel/aors_n.c: #include tests.h. - * tests/devel/anymul_1.c: Likewise. - * tests/devel/shift.c: Likewise. - * tests/devel/copy.c: Likewise. - - * tests/devel/aors_n.c: Handle also mpn_addlsh1_n, mpn_sublsh1_n, - mpn_rsh1add_n, and mpn_rsh1sub_n. - - * mpn/ia64/submul_1.asm: Add TODO item. - - * mpn/ia64/aors_n.asm: Rewrite function entry code (again). - * mpn/ia64/aorslsh1_n.asm: Likewise. - * mpn/ia64/logops_n.asm: Likewise. - - * mpn/ia64/rsh1aors_n.asm: Tune function entry and feed-in code. - * mpn/ia64/lorrshift.asm: Likewise. Remove several spurious loads. - - * tests/devel/Makefile.am (EXTRA_PROGRAMS): Updates for yesterday's - file removals and additions. - -2004-10-10 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/copyi.asm: Tune function entry code. - * mpn/ia64/copyd.asm: Likewise. - - * mpn/ia64/logops_n.asm: Tune function entry and feed-in code for speed - and size. - * mpn/ia64/aors_n.asm: Likewise. - - * mpn/powerpc64/logops_n.asm: Correct cycles counts. - * mpn/powerpc64/mode64/aors_n.asm: Likewise. - - * tests/devel/copy.c: Handle both MPN_COPY_INCR and MPN_COPY_DECR. - - * tests/devel/logops_n.c: New file, handle all logical operations. - - * tests/devel/anymul_1.c: New file, handle mpn_mul_1, mpn_addmul_1, and - mpn_submul_1 - * tests/devel/mul_1.c: Remove. - * tests/devel/addmul_1.c: Remove. - * tests/devel/submul_1.c: Remove. - - * tests/devel/shift.c: New file, handle mpn_lshift and mpn_rshift. - * tests/devel/lshift.c: Remove. - * tests/devel/rshift.c: Remove. - - * tests/devel/aors_n.c: New file, handle mpn_add_n and mpn_sub_n. - * tests/devel/add_n.c: Remove. - * tests/devel/sub_n.c: Remove. - -2004-10-09 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/linux64.m4: Define DEF_OBJECT, END_OBJECT, and TOCREF. - * mpn/powerpc64/aix.m4: Likewise. - * mpn/powerpc64/mode64/invert_limb.asm: Use DEF_OBJECT, END_OBJECT, and - TOCREF for approx_tab. - - * mpn/amd64/mul_1.asm: Add mpn_mul_1c entry point. - -2004-10-08 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/copyi.asm: New file. - * mpn/powerpc64/copyd.asm: New file. - * gmp-h.in: Remove PPC MPN_COPY variants. - * gmp-impl.h: Likewise. - - * mpn/powerpc64/logops_n.asm: New file. - - * mpn/powerpc64/mode64/invert_limb.asm: New file. - -2004-10-07 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/mode64/aors_n.asm: New file, optimized for POWER4 and - its derivatives. - * mpn/powerpc64/mode64/add_n.asm: Delete. - * mpn/powerpc64/mode64/sub_n.asm: Delete. - - * configfsf.guess: Patch HP-UX code to accommodate HP compiler's new - inability to read from stdin. - - * mpn/powerpc64/mode64/addsub_n.asm: Remove accidentally added file. - -2004-10-02 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/README: Update for new developments, fix typos. - - * mpn/amd64/mul_1.asm: Tweak addressing (3.25 => 3.0 cycles/limb). - - * mpn/amd64/addmul_1.asm: Remove unreachable code block. - -2004-09-30 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/addmul_1.asm: Rewrite, now 3.25 cycles/limb. - - * mpn/ia64/addmul_1.asm: Slightly enhance cross-jumping for code - density. - * mpn/ia64/mul_1.asm: Analogous changes. - -2004-09-29 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (x86 ULONG_PARITY): Work around GCC change of "q" register - flag. - -2004-09-28 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/divrem_1.asm: Add cycle counts to loop. - - * mpn/ia64/divrem_2.asm: New file. - -2004-09-28 Paul Zimmermann <Paul.Zimmermann@loria.fr> - - * mpn/generic/mul_fft.c (mpn_mul_fft): Fix a bug in the choice of the - recursive fft parameters. - -2004-09-20 Torbjorn Granlund <tege@swox.com> - - * tests/misc.c (tests_rand_start): Default to strtoul for re-seeding. - - * tests/mpz/t-mul.c (ref_mpn_mul): Fudge tmp allocation for toom3. - -2004-09-19 Torbjorn Granlund <tege@swox.com> - - * tests/misc.c (tests_rand_start): Shift tv_usec for better seeding. - -2004-09-18 Torbjorn Granlund <tege@swox.com> - - * tests/misc.c (tests_rand_start): Invoke fflush after printing seed. - - * tests/mpz/t-mul.c (main): Check environment for GMP_CHECK_FFT, run - extra FFT tests if set. - (ref_mpn_mul): Use library code for kara and toom, but skewded so that - we never use the same algorithm that we're testing. - (mul_kara): Delete. - (debug_mp): Print just one line of large numbers. - (ref_mpn_mul): Rework usage of tp temporary space. - -2004-09-15 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/mul_2.asm: For HAVE_ABI_32, convert vp. - * mpn/ia64/addmul_2.asm: Likewise. - -2004-09-13 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/invert_limb.asm: Rewrite. - - * mpn/ia64/logops_n.asm: Insert some more stops. - -2004-09-12 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/gmp-mparam.h: Update. - * mpn/amd64/gmp-mparam.h: Update. - - * mpn/ia64/sqr_diagonal.asm: Shave off a few cycles. - -2004-09-11 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/mul_2.asm: New file. - * mpn/ia64/addmul_2.asm: New file. - - * mpn/ia64/addmul_1.asm: Tune a cycle from prologue. - - * mpn/ia64/lorrshift.asm: Insert stops after several branches. - * mpn/ia64/aorslsh1_n.asm: Likewise. - * mpn/ia64/rsh1aors_n.asm: Likewise. - - * mpn/generic/sqr_basecase.c: In variant for HAVE_NATIVE_mpn_addmul_2, - accumulate carry also for when HAVE_NATIVE_mpn_addlsh1_n. - -2004-09-07 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/submul_1.asm: Rewrite. - - * mpn/ia64/addmul_1.asm: Format to placate HP-UX assembler. - * mpn/ia64/mul_1.asm: Likewise. - -2004-09-02 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/mul_1.asm: Optimize feed-in code. - * mpn/ia64/addmul_1.asm: Rewrite feed-in code. - -2004-08-29 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-sizeinbase.c: Disable mpz_fake_bits and check_sample. - -2004-07-16 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/addmul_1.asm: Format to placate HP-UX assembler. - -2004-06-17 Kevin Ryde <kevin@swox.se> - - * doc/gmp.texi: Use @. when sentence ends with a capital, for good - spacing in tex. - (Language Bindings): Add gmp-d, reported by Ben Hinkle. Update SWI - Prolog URL, reported by Jan Wielemaker. - -2004-06-09 Torbjorn Granlund <tege@swox.com> - - * configure.in: Handle --enable-fat. Use that to enable x86 fat - builds, remove magic meaning of i386-*-*. - -2004-06-03 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (memset): Use a local char* pointer, in case parameter is - something else (eg. tune/common.c). Reported by Emmanuel Thomé. - -2004-06-01 Kevin Ryde <kevin@swox.se> - - * config.guess (i?86-*-*): Avoid "Illegal instruction" message which - goes to stdout on 80386 freebsd4.9. - -2004-05-23 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/gcdext.c (gcdext_1_u): New function. - (mpn_gcdext): Use it. - -2004-05-23 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/gcdext.c (gcdext_1_odd): Use masking to avoid jumps. - -2004-05-22 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/pentium4/sse2/addmul_1.asm: Add Prescott cycle numbers. - - * mpn/amd64/divrem_1.asm: Shave a cycle from fraction development code. - - * mpn/powerpc32/lshift.asm: Add more cycle numbers. - * mpn/powerpc32/rshift.asm: Likewise. - - * mpn/ia64/addmul_1.asm: Reformat. - -2004-05-21 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (mpn_mullow_n, mpn_mullow_basecase): Declare. - - * tune/Makefile.am: Compile gcdext.c. - - * gmp-impl.h (GET_STR_THRESHOLD_LIMIT): Lower outrageous value to 150. - (GCDEXT_SCHOENHAGE_THRESHOLD): Set reasonable default. Override when - TUNE_PROGRAM_BUILD. - (GCDEXT_THRESHOLD): Remove. - - * tune/tuneup.c (gcdext_schoenhage_threshold): New variable. - (gcdext_threshold): Remove variable. - (tune_gcd_schoenhage): Lower step_factor to 0.1. - (tune_gcdext_schoenhage): New function, based on tune_gcd_schoenhage. - (tune_gcdext): Remove function. - (all): Corresponding changes. - -2004-05-21 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/gcdext.c: Complete rewrite. Uses fast Lehmer code for - small operands, and Schoenhage code for large operands. - - * tune/speed.h (SPEED_ROUTINE_MPN_GCD_CALL): Ensure first operand is - not smaller than 2nd operand. - -2004-05-17 Kevin Ryde <kevin@swox.se> - - * gmp-h.in (mpz_get_ui): Use #if instead of plain if, and for nails - use ?: same as normal case, to avoid warnings from Borland C++ 6.0. - Reported by delta trinity. - -2004-05-15 Kevin Ryde <kevin@swox.se> - - * tune/time.c (getrusage_backwards_p): New function - (speed_time_init): Use it to exclude broken netbsd1.4.1 getrusage. - * configure.in (m68*-*-netbsd1.4*): Remove code pretending getrusage - doesn't exist. - * tune/README (NetBSD 1.4.1 m68k): Update notes. - - * configure.in (mips*-*-* ABI=n32): Remove gcc_n32_ldflags and - cc_n32_ldflags, libtool knows to put the linker in n32 mode. - -2004-05-15 Torbjorn Granlund <tege@swox.com> - - * config.guess (powerpc*-*-*): Add more processor types to mfpvr code. - * configure.in: Generalize powerpc subtype matching code. - - * mpz/fac_ui.c: Misc cleanups, spelling corrections. - -2004-05-14 Kevin Ryde <kevin@swox.se> - - * mpf/sub.c: When one operand cancels high limbs of the other, strip - high zeros on the balance before truncating to destination precision. - Truncating first loses accuracy and can lead to a result 0 despite - operands being not equal. Reported by John Abbott. - Also, ensure exponent is zero when result is zero, for instance if - operands are exactly equal. - * tests/mpf/t-sub.c (check_data): New function, exercising these. - -2004-05-12 Kevin Ryde <kevin@swox.se> - - * configure.in (AC_PROG_RANLIB): New macro, supposedly required by - automake, though it doesn't complain. - - * demos/expr/Makefile.am (ARFLAGS): Add a default setting, to - workaround an automake bug. - -2004-05-10 Kevin Ryde <kevin@swox.se> - - * */Makefile.in, install-sh, aclocal.m4: Update to automake 1.8.4. - - * doc/gmp.texi (Demonstration Programs): Add a remark about expression - evaluation in the main gmp library. - - * demos/expr/exprfa.c (mpf_expr_a): Correction to mpX_init, use - mpf_init2 to follow requested precision. - * demos/expr/exprza.c, demos/expr/exprqa.c: Use wrappers for mpX_init, - to make parameters match. - - * demos/expr/run-expr.c: Don't use getopt, to avoid needing configury - for optarg declaration. Remove TRY macro, rename foo and bar to var_a - and var_b, for clarity. - * demos/expr/expr-impl.h: Don't use expr-config.h. - * configure.in (demos/expr/expr-config.h): Remove. - * demos/expr/expr-config.in: Remove file. - -2004-05-08 Kevin Ryde <kevin@swox.se> - - * doc/configuration (Configure): Update for current automake not - copying acinclude.m4 into aclocal.m4. - - * configure.in, Makefile.am, doc/gmp.texi, doc/configuration, - tests/cxx/Makefile.am, demos/expr/Makefile.am, demos/expr/README, - demos/expr/expr.c, demos/expr/expr.h, demos/expr/expr-config-h.in, - demos/expr/expr-impl.h, demos/expr/run-expr.c, demos/expr/t-expr.c: - MPFR now published separately, remove various bits. - * mpfr/*, tests/cxx/t-headfr.cc, demos/expr/exprfr.c, - demos/expr/exprfra.c: Remove. - -2004-05-07 Kevin Ryde <kevin@swox.se> - - * tests/cxx/Makefile.am (TESTS_ENVIRONMENT): Amend c++ shared library - path hack, on k62-unknown-dragonfly1.0 /usr/bin/make runs its commands - "set -e", so we need an "|| true" in case there's nothing to copy (for - instance in a static build). - -2004-05-06 Kevin Ryde <kevin@swox.se> - - * mpn/alpha/mode1o.c: Remove, in favour of ... - * mpn/alpha/mode1o.asm: New file. - * mpn/alpha/alpha-defs.m4 (bwx_available_p): New macro. - - * tune/amd64.asm: Save rbx in r10 rather than on the stack. - - * configure.in (x86_64-*-*): Try also "-march=k8 -mno-sse2", in case - we're in ABI=32 on an old OS not supporting xmm regs. - (GMP_GCC_PENTIUM4_SSE2, GMP_OS_X86_XMM): Run these tests under - -march=k8 too, and not under ABI=64. - - * doc/gmp.texi (Converting Integers): For mpz_get_d, note truncation - and overflows. For mpz_get_d_2exp note truncation, note result if - OP==0, and cross reference libc frexp. - (Rational Conversions): For mpq_get_d, note truncation and overflows. - (Converting Floats): For mpf_get_d, note truncation and overflows. - For mpf_get_d_2exp, note truncation, note result if OP==0. - (Assembler Code Organisation): Note nails subdirectories. - Clarification of get_d_2exp OP==0 reported by Sylvain Pion. - -2004-05-05 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mullow_n.c, mpn/generic/mullow_basecase.c: New files - (mainly by Niels Möller). - * configure.in, mpn/Makefile.am: Add them. - - * gmp-impl.h (MULLOW_BASECASE_THRESHOLD, MULLOW_DC_THRESHOLD, - MULLOW_MUL_N_THRESHOLD): Override for TUNE_PROGRAM_BUILD. - - * tune/Makefile.am: Compile mullow_n.c. - * tune/common.c (speed_mpn_mullow_n, speed_mpn_mullow_basecase): - New functions. - * tune/speed.c (routine): Add entries for mpn_mullow_n and - mpn_mullow_basecase. - * tune/speed.h (SPEED_ROUTINE_MPN_MULLOW_N_CALL, - SPEED_ROUTINE_MPN_MULLOW_BASECASE): New #defines. - * tune/tuneup.c (tune_mullow): New function. - - * gmp-impl.h (invert_limb): Compute branch-freely. - -2004-05-02 Kevin Ryde <kevin@swox.se> - - * mpn/amd64/mode1o.asm: Use movabsq to support large model non-PIC. - Use 32-bit insns to save code bytes, and to save a couple of cycles on - the initial setup multiplies. - -2004-05-01 Kevin Ryde <kevin@swox.se> - - * doc/gmp.texi (References): Update gcc online docs url to - gcc.gnu.org. - - * configure.in (mips*-*-irix[6789]*): Correction to m4 quoting of this - pattern. (Believe the mips64*-*-* part also used picks up all current - irix6 tuples anyway.) Reported by Rainer Orth. - -2004-04-30 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_PROG_CC_X86_GOT_EAX_EMITTED, - GMP_ASM_X86_GOT_EAX_OK): New macros. - (GMP_PROG_CC_WORKS): Use them to detect an old gas bug tickled by - recent gcc. Reported by David Newman. - - * doc/gmp.texi (Reentrancy): Note also gmp_randinit_default as an - alternative to gmp_randinit. - -2004-04-29 Torbjorn Granlund <tege@swox.com> - - * configfsf.guess: Update to 2004-03-12. - * configfsf.sub: Likewise. - -2004-04-27 Torbjorn Granlund <tege@swox.com> - - * mpz/rrandomb.c (gmp_rrandomb): Rework to avoid extra limb allocation - and to generate even numbers. - * mpn/generic/random2.c (gmp_rrandomb): Likewise. - -2004-04-25 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (FORCE_DOUBLE): Don't use an asm with a match constraint - on a memory output, apparently not supported and provokes a warning - from gcc 3.4. - -2004-04-24 Kevin Ryde <kevin@swox.se> - - * longlong.h (count_leading_zeros_gcc_clz, - count_trailing_zeros_gcc_ctz): New macros. - (count_leading_zeros, count_trailing_zeros) [x86]: Use them on gcc - 3.4. - - * configure.in (x86-*-* gcc_cflags_cpu): Give a -mtune at the start of - each option list, for use by gcc 3.4 to avoid deprecation warnings - about -mcpu. - - * mpz/aorsmul.c, mpz/aorsmul_i.c, mpz/cfdiv_q_2exp.c, - mpz/cfdiv_r_2exp.c, mpq/aors.c, mpf/ceilfloor.c: Give REGPARM_ATTR() - on function definition too, as demanded by gcc 3.4. - -2004-04-22 Kevin Ryde <kevin@swox.se> - - * tests/rand/t-lc2exp.c (check_bigc1): New test. - - * doc/fdl.texi: Tweak @appendixsubsec -> @appendixsec to match our - preference for this in an @appendix, and because texi2pdf doesn't - support @appendixsubsec directly within an @appendix. - -2004-04-20 Kevin Ryde <kevin@swox.se> - - * doc/texinfo.tex: Update to 2004-04-07.08 from texinfo 4.7. - * doc/gmp.texi, mpfr/mpfr.texi (@copying): Don't put a line break in - @ref within @copying, recent texinfo.tex doesn't like that. - - * demos/perl/GMP.xs (static_functable): Treat cygwin the same as mingw - DLLs. - - * */Makefile.in, install-sh: Update to automake 1.8.3. - * ltmain.sh, aclocal.m4, configure: Update to libtool 1.5.6. - - * gmp-impl.h (LIMB_HIGHBIT_TO_MASK): Use a compile-time constant - expression, rather than a configure test. - * acinclude.m4, configure.in (GMP_C_RIGHT_SHIFT): Remove, no longer - needed. - * tests/t-hightomask.c: New file. - * tests/Makefile.am (check_PROGRAMS): Add it. - - * macos/configure (parse_top_configure): Look for PACKAGE_NAME and - PACKAGE_VERSION now used by autoconf. - (what_objects): Only demand 9 object files, as for instance occurs in - the scanf directory. - (asm files): Transform labels L(foo) -> Lfoo. Take func name from - PROLOGUE to support empty "EPILOGUE()". Recognise and substitute - register name "define()"s. - * macos/Makefile.in (CmnObjs): Add tal-notreent.o. - -2004-04-19 Torbjorn Granlund <tege@swox.com> - - * tune/speed.h (SPEED_ROUTINE_MPN_ROOTREM): New #define. - (speed_mpn_rootrem): Declare. - * tune/common.c (speed_mpn_rootrem): New function. - * tune/speed.c (routine): Add entry for mpn_rootrem. - -2004-04-16 Kevin Ryde <kevin@swox.se> - - * doc/fdl.texi: Update from FSF, just fixing a couple of typos. - - * macos/configure, macos/Makefile.in: Add printf and scanf directories. - - * tests/mpz/t-gcd.c (check_data): New function, exercising K6 - gcd_finda bug. - -2004-04-14 Kevin Ryde <kevin@swox.se> - - * doc/gmp.texi (Reentrancy, Random State Initialization): Note - gmp_randinit use of gmp_errno is not thread safe. Reported by Vincent - Lefèvre. - - * doc/gmp.texi (Random State Initialization): Add index entries for - gmp_errno and constants. - - * mpn/m68k/README: Update _SHORT_LIMB -> __GMP_SHORT_LIMB. - - * configure.in (--enable-mpbsd): Typo Berkley -> Berkeley in help msg. - -2004-04-12 Kevin Ryde <kevin@swox.se> - - * demos/perl/GMP.xs (static_functable): New macro, use it for all - function tables, to support mingw DLL builds. - * demos/perl/INSTALL (NOTES FOR PARTICULAR SYSTEMS): Remove note on - DLLs, should be ok now. - - * demos/perl/sample.pl: Print the module and library versions in use. - - * demos/perl/GMP.pm, Makefile.PL (VERSION): Set to '2.00'. - * demos/perl/GMP.pm (COPYRIGHT): New in the doc section. - - * Makefile.am: Note 4.1.3 libtool versioning info, and REVISION policy. - - * tal-debug.c: Add <stdlib.h> for abort. - -2004-04-07 Torbjorn Granlund <tege@swox.com> - - * tests/refmpf.c (refmpf_add_ulp): Adjust exponent when needed. - - * mpn/generic/random2.c: Rewrite (clone mpz/rrandomb.c). - -2004-04-07 Kevin Ryde <kevin@swox.se> - - * mpn/x86/k6/gcd_finda.asm: Correction jbe -> jb in initial setups. - Zero flag is wrong here, it relects only the high limb of the compare, - leading to n1>=n2 not satisfied and wrong results. cp[1]==0x7FFFFFFF - with cp[0]>=0x80000001 provokes this. - - * doc/gmp.texi (BSD Compatible Functions): Note "pow" name clash under - the pow function description too. - (Language Bindings): Add XEmacs (betas at this stage). Reported by - Jerry James. - - * tests/refmpn.c (refmpn_mod2): Correction to ASSERTs, r==a is allowed. - - * gen-psqr.c (generate_mod): Cast mpz_invert_ui_2exp args, for K&R. - * gen-bases.c, gen-fib.c, gen-psqr.c: For mpz_out_str, use stdout - instead of 0, in case a K&R treats int and FILE* params differently. - -2004-04-04 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (BSWAP_LIMB) [amd64]: New macro. - (FORCE_DOUBLE): Use this for amd64 too. - - * tests/amd64check.c, tests/amd64call.asm: New files, derived in part - from x86check.c and x86call.asm. - * tests/Makefile.am (EXTRA_libtests_la_SOURCES): Add them. - * configure.in (x86_64-*-* ABI=64): Use them. - -2004-04-03 Kevin Ryde <kevin@swox.se> - - * mpn/amd64/mode1o.asm: New file. - * mpn/amd64/amd64-defs.m4 (ASSERT): New macro. - - * mpn/x86/k7/mmx/divrem_1.asm, mpn/x86/pentium4/sse2/divrem_1.asm: Add - note on how "dr" part of algorithm is handled. - - * mpn/x86/k7/dive_1.asm, mpn/x86/k7/mod_34lsub1.asm, - mpn/x86/k7/mode1o.asm: Note Hammer (32-bit mode) speeds. - -2004-03-31 Kevin Ryde <kevin@swox.se> - - * doc/gmp.texi (Language Bindings): Add GOO, MLGMP and Numerix. - - * mpf/mul_2exp.c, mpf/div_2exp.c: Rate u==0 as UNLIKELY. - -2004-03-28 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/divrem_1.asm: Trim a few cycles. - -2004-03-27 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/sublsh1_n.asm: Fix typo. - - * mpn/generic/divrem_1.c: Fix typo. - - * mpn/generic/sqr_basecase.c: Fix typo. - - * mpn/amd64/divrem_1.asm: New file. - -2004-03-20 Kevin Ryde <kevin@swox.se> - - * longlong.h (power, powerpc): Add comments on how we select this code. - - * gmp-h.in (mpz_get_ui): Use ?: instead of mask style, gcc treats the - two identically but ?: is a bit clearer. - - * insert-dbl.c: Remove file, no longer used, scaling is now integrated - in mpn_get_d. - * Makefile.am (libgmp_la_SOURCES): Remove insert-dbl.c. - * gmp-impl.h (__gmp_scale2): Remove prototype. - -2004-03-17 Kevin Ryde <kevin@swox.se> - - * mpn/x86/fat/fat.c (__gmpn_cpuvec_init, fake_cpuid_table): Add x86_64. - - * mpq/get_d.c: Use mpn_tdiv_qr, demand den>0 per canonical form. - -2004-03-16 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/sqr_basecase.c: Add versions using mpn_addmul_2 and - mpn_addmul_2s. - -2004-03-14 Kevin Ryde <kevin@swox.se> - - * mpf/mul_ui.c: Incorporate carry from low limbs, for exactness. - * tests/mpf/t-mul_ui.c: New file. - * tests/mpf/Makefile.am (check_PROGRAMS): Add it. - - * mpf/div.c: Use mpn_tdiv_qr. Use just one TMP_ALLOC. Use full - divisor, since truncating can lose accuracy. - * tests/mpf/t-div.c: New file. - * tests/mpf/Makefile.am (check_PROGRAMS): Add it. - - * tests/mpf/t-set_q.c, tests/mpf/t-ui_div.c (check_various): Amend - bogus 99/4 test. - * tests/mpf/t-ui_div.c (check_rand): Exercise r==v overlap. - - * tests/refmpf.c, tests/tests.h (refmpf_set_overlap): New function. - - * mpf/cmp_si.c [nails]: Correction, cast vval in exp comparisons, for - when vval=-0x800..00 and limb==longlong. - - * mpf/cmp_si.c [nails]: Correction, return usign instead of 1 when - uexp==2 but value bigger than an mp_limb_t. - * tests/mpf/t-cmp_si.c (check_data): Add test cases. - - * tests/trace.c (mpf_trace): Use ABS(mp_trace_base) to allow for - negative bases used for upper case hex in integer traces. - -2004-03-12 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/sb_divrem_mn.c: Correct header comment. - -2004-03-11 Kevin Ryde <kevin@swox.se> - - * aclocal.m4, configure, ltmain.sh: Downgrade to libtool 1.5, version - 1.5.2 doesn't remove .libs/*.a files when rebuilding, which is bad for - development when changing contents or with duplicate named files like - we have. - - Revert this, ie restore AR_FLAGS=cq: - * acinclude.m4 (GMP_PROG_AR): Remove AR_FLAGS=cq, libtool 1.5.2 now - does this itself on detecting duplicate object filenames in piecewise - linking mode. - - * randbui.c, randmui.c [longlong+nails]: Correction to conditionals - for second limb. - - * mpz/aors_ui.h, mpz/cdiv_q_ui.c, mpz/cdiv_qr_ui.c, mpz/cdiv_r_ui.c, - mpz/cdiv_ui.c, mpz/fdiv_q_ui.c, mpz/fdiv_qr_ui.c, mpz/fdiv_r_ui.c, - mpz/fdiv_ui.c, mpz/gcd_ui.c, mpz/iset_ui.c, mpz/lcm_ui.c, - mpz/set_ui.c, mpz/tdiv_q_ui.c, mpz/tdiv_qr_ui.c, mpz/tdiv_r_ui.c, - mpz/tdiv_ui.c, mpz/ui_sub.c, mpf/div_ui.c, mpf/mul_ui.c - [longlong+nails]: Amend #if to avoid warnings about shift amount. - -2004-03-07 Kevin Ryde <kevin@swox.se> - - * mpf/reldiff.c: Use rprec+ysize limbs for d, to ensure accurate - result. Inline mpf_abs(d,d) and mpf_cmp_ui(x,0), and rate the latter - UNLIKELY. - - * mpf/ui_div.c: Use mpn_tdiv_qr. Use just one TMP_ALLOC. Use full - divisor, since truncating can lose accuracy. - * tests/mpf/t-ui_div.c: New file. - * tests/mpf/Makefile.am (check_PROGRAMS): Add it. - - * mpf/set_q.c: Expand TMP_ALLOC_LIMBS_2, to make conditional clearer - and avoid 1 limb alloc when not wanted. - - * gmp-impl.h (WANT_TMP_DEBUG): Define to 0 if not defined. - (TMP_ALLOC_LIMBS_2): Use "if" within macro rather than "#if", for less - preprocessor conditionals. - - * mpf/mul_2exp.c, mpf/div_2exp.c: Add some comments. - - * tests/refmpn.c (refmpn_sb_divrem_mn, refmpn_tdiv_qr): Nailify. - -2004-03-04 Kevin Ryde <kevin@swox.se> - - * gen-psqr.c (print): Add CNST_LIMB in PERFSQR_MOD_TEST, for benefit - of K&R. - * tests/mpn/t-perfsqr.c (PERFSQR_MOD_1): Use CNST_LIMB for K&R. - - * doc/configuration (Configure): Remove mkinstalldirs, no longer used. - - * acinclude.m4 (GMP_PROG_AR): Remove AR_FLAGS=cq, libtool 1.5.2 now - does this itself on detecting duplicate object filenames in piecewise - linking mode. - - * configure.in (hppa2.0*-*-*): Test sizeof(long) == 4 or 8 to verify - ABI=2.0n versus ABI=2.0w. In particular this lets CC=cc_bundled - correctly fall back to ABI=2.0n (we don't automatically add CC=+DD64 - to that compiler, currently). - - * doc/gmp.texi (Reentrancy): Note C++ mpf_class constructors using - global default precision. - (Random State Miscellaneous): Describe gmp_urandomb_ui as giving N - bits. - (C++ Interface Floats): Describe operator= copying the value, not the - precision, and what this can mean about copy constructor versus - default constructor plus assignment. - - * mpf/set_q.c: Use mpn_tdiv_qr rather than mpn_divrem, so no shifting. - Don't truncate the divisor, it can make the result inaccurate. - * tests/mpf/t-set_q.c: New file. - * tests/mpf/Makefile.am (check_PROGRAMS): Add it. - - * mpf/set.c: Use MPN_COPY_INCR, in case r==u and ABSIZ(u) > PREC(r)+1. - No actual bug here, because MPN_COPY has thusfar been an alias for - MPN_COPY_INCR, only an ASSERT failure. - * tests/mpf/t-set.c: New file. - * tests/mpf/Makefile.am (check_PROGRAMS): Add it. - - * mpf/set.c, mpf/iset.c: Do MPN_COPY last, for possible tail call. - - * mpf/set_d.c: Rate d==0 as UNLIKELY. Store size before extract call, - to shorten lifespan of "negative". - - * mpf/init.c, mpf/init2.c, mpf/iset_d.c, mpf/iset_si.c, - mpf/iset_str.c, mpf/iset_ui.c: Store prec before alloc call, for one - less live quantity across that call. - * mpf/init.c, mpf/init2.c, mpf/iset_str.c: Store size and exp before - alloc call, to overlap with other operations. - - * tests/refmpf.c, tests/tests.h (refmpf_fill, refmpf_normalize, - refmpf_validate, refmpf_validate_division): New functions. - - * tests/refmpn.c, tests/tests.h (refmpn_copy_extend, - refmpn_lshift_or_copy_any, refmpn_rshift_or_copy_any): New functions. - - * tal-debug.c: Add <string.h> for strcmp. - - * tests/cxx/t-istream.cc (check_mpz, check_mpq, check_mpf): Use size_t - for loop index, to quieten g++ warning. - -2004-03-02 Kevin Ryde <kevin@swox.se> - - * tests/mpn/t-hgcd.c: Use __GMP_PROTO on prototypes. - -2004-03-01 Torbjorn Granlund <tege@swox.com> - - With Karl Hasselström: - * mpn/generic/dc_divrem_n.c (mpn_dc_div_2_by_1): New function, with - meat from old mpn_dc_divrem_n. Accept scratch parameter. Rewrite to - avoid a recursive call. - (mpn_dc_div_3_by_2): New function, with meat from old - mpn_dc_div_3_halves_by_2. Accept scratch parameter. - (mpn_dc_divrem_n): Now just allocate scratch space and call new - mpn_dc_div_2_by_1. - -2004-02-29 Kevin Ryde <kevin@swox.se> - - * longlong.h (count_leading_zeros) [alpha gcc]: New version, inlining - mpn/alpha/cntlz.asm cmpbge technique. - - * aclocal.m4, configure, install-sh, missing, ltmain.sh, - */Makefile.in: Update to automake 1.8.2 and libtool 1.5.2. - - * doc/gmp.texi (C++ Interface Integers): Note / and % rounding follows - C99 / and %. - (Exact Remainder): Index entries for divisibility testing algorithm. - - * tune/time.c (speed_endtime): Return 0.0 for negative time measured. - Revise usage comments for clarity. - * tune/common.c (speed_measure): Recognise speed_endtime 0.0 for - failed measurement. - - * tests/mpn/t-get_d.c (check_rand): Correction to nhigh_mask setup. - -2004-02-27 Torbjorn Granlund <tege@swox.com> - - * tune/tuneup.c (tune_dc, tune_set_str): Up param.step_factor. - - * tests/mpz/t-gcd.c: Decrease # of tests to 50. - -2004-02-27 Kevin Ryde <kevin@swox.se> - - * tests/devel/try.c: Add a comment that this is not for Cray systems. - - * mpf/set_q.c: Don't support den(q)<0, demand canonical form in the - usual way. - -2004-02-24 Torbjorn Granlund <tege@swox.com> - - From Kevin: - * mpn/generic/mul_fft.c (mpn_fft_add_modF): Loop until normalization - criterion met. - -2004-02-22 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_PROG_CC_WORKS, GMP_OS_X86_XMM, GMP_PROG_CXX_WORKS): - Remove files that might look like compiler output, so our "||" - alternatives are not fooled. - - * acinclude.m4 (GMP_PROG_CC_WORKS): Add test for lshift_com code - mis-compiled by certain IA-64 HP cc at +O3. - - * gmp-impl.h (USE_LEADING_REGPARM): Disable under prof or gprof, for - the benefit of freebsd where .mcount clobbers registers. Spotted by - Torbjorn. - * configure.in (WANT_PROFILING_PROF, WANT_PROFILING_GPROF): New - AC_DEFINEs. - -2004-02-21 Kevin Ryde <kevin@swox.se> - - * configure.in (sparc64-*-*bsd*): Amend -m32 setup for ABI=32, so it's - not used in ABI=64 on the BSD systems. - -2004-02-18 Niels Möller <nisse@lysator.liu.se> - - * tests/mpz/t-gcd.c (gcdext_valid_p): New function. - (ref_mpz_gcd): Deleted function. - (one_test): Rearranged to call mpz_gcdext first, so that the - returned value can be validated. - (main): Don't use ref_mpz_gcd. - -2004-02-18 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (MPN_TOOM3_MAX_N): Move to !WANT_FFT section. - - * tests/mpz/t-mul.c: Exclude special huge operands unless WANT_FFT. - - * mpz/rrandomb.c (gmp_rrandomb): Rewrite. - - * mpn/generic/mul_n.c (mpn_toom3_sqr_n): Remove write-only variable c5. - -2004-02-18 Kevin Ryde <kevin@swox.se> - - * mpf/iset_si.c, mpf/iset_ui.c, mpf/set_si.c, mpf/set_ui.c [nails]: - Always store second limb, to avoid a conditional. - - * tests/mpf/t-get_ui.c: New file. - * tests/mpf/Makefile.am (check_PROGRAMS): Add it. - * tests/mpf/t-get_si.c (check_limbdata): Further tests. - * gmp-impl.h (MP_EXP_T_MAX, MP_EXP_T_MIN): New defines. - - * mpf/get_ui.c, mpf/get_si.c: Remove size==0 test, it's covered by - other conditions. Attempt greater clarity by expressing conditions as - based on available data range. - * mpf/get_si.c [nails]: Correction, don't bail on exp > abs_size, - since may still have second limb above radix point available. - * mpf/get_ui.c: Nailify. - -2004-02-16 Kevin Ryde <kevin@swox.se> - - * mpz/scan0.c, mpz/scan1.c: Use count_trailing_zeros, instead of - count_leading_zeros on limb&-limb. - - * mpf/sqrt.c: Use "/ 2" for exp, avoiding C undefined behaviour on - ">>" of negatives. Correction to comment, exp is rounded upwards. - SIZ(r) always prec now, no need for tsize expression. Store EXP(r) - and SIZ(r) where calculated to reduce variable lifespans. Make tsize - mp_size_t not mp_exp_t, though of course those are currently the same. - - * gmp-h.in (GMP_ERROR_ALLOCATE, GMP_ERROR_BAD_STRING, - GMP_ERROR_UNUSED_ERROR): Remove, never used or documented, and we - don't want to use globals for communicating error information. - - * mpz/gcd_ui.c [nails]: Correction, actually return a value. - - * mpn/generic/addmul_1.c, mpn/generic/submul_1.c [nails==1]: Add code. - -2004-02-15 Kevin Ryde <kevin@swox.se> - - * tests/mpz/t-jac.c (check_data): Remove unnecessary variable - "answer". - -2004-02-14 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/aors_n.asm: Break a group with a RAW conflict. - -2004-02-14 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_C_RIGHT_SHIFT): Note that it's "long"s which we're - concerned about. - - * mpn/generic/mul_n.c: Add some remarks about toom3 high zero - stripping. - - * mpn/generic/scan0.c, mpn/generic/scan1.c: Remove design issue - remarks. What to do about going outside `up' space is a problem, but - anything to address it would be an incompatible change. - -2004-02-12 Torbjorn Granlund <tege@swox.com> - - * tests/mpn/t-hgcd.c: Remove unused variables. - - * mpn/ia64/hamdist.asm: Remove bundling incompatible with HP-UX - assembler. Misc HP-UX changes. - * mpn/ia64/gcd_1.asm: Add some syntax to placid the HP-UX assembler. - -2004-02-11 Kevin Ryde <kevin@swox.se> - - * longlong.h (power, powerpc): Use HAVE_HOST_CPU_FAMILY_power and - HAVE_HOST_CPU_FAMILY_powerpc rather than various cpp defines. - - * gmp-impl.h: Add remarks about limits.h and Cray etc. - - * mpn/ia64/mul_1.asm: Don't put .pred directives on labelled lines, - hpux 11.23 assembler doesn't like that. - * mpn/ia64/README: Add a note on this. - - * dumbmp.c (mpz_mul): Set ALLOC(r) for new data block used. Reported - by Jason Moxham. - - * mpn/pa32/README, mpn/pa64/README (REFERENCES): New sections. - -2004-02-10 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-gcd.c: Decrease # of tests run. - - * mpn/*/gmp-mparam.h: Add HGCD values, update TOOM values. - -2004-02-01 Torbjorn Granlund <tege@swox.com> - - From Kevin: - * config.guess: Recognize AMD's hammer processors, return x86_64. - -2004-01-31 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd.c (mpn_cmp_sum3): Declare static. - -2004-01-25 Niels Möller <nisse@lysator.liu.se> - - * tests/mpn/Makefile.am (check_PROGRAMS): Add t-hgcd. - - * mpn/generic/hgcd.c (hgcd_jebelean): Simplify, use mpn_cmp_sum3. - (mpn_cmp_sum3): New function. - (mpn_diff_smaller_p): Remove. - (hgcd_final, hgcd_jebelean, hgcd_small_1, hgcd_small_2, euclid_step): - Remove tp,talloc arguments. Callers changed. - -2004-01-25 Torbjorn Granlund <tege@swox.com> - - * tune/tuneup.c (all): Reenable calls of tune_gcd_schoenhage and - tune_hgcd. - - * mpn/generic/gcd.c: Reenable Schoenhage code. - - With Niels Möller: - * mpn/generic/hgcd.c: Add const and inline to several functions. - (qstack_push_start qstack_push_end qstack_push_quotient): Remove. - (euclid_step): Insert removed functions here. - (hgcd_adjust): Simplify, don't handle d != 1. - (qstack_adjust): Corresponding changes. - (mpn_hgcd2_lehmer_step): Remove redundant tests for bh against zero. - (hgcd_start_row_p): Tweak. - (hgcd_final): Shorten life of ralloc. - -2004-01-24 Kevin Ryde <kevin@swox.se> - - * tests/mpf/t-sqrt.c (check_rand1): Further diagnostic printouts. - - * mpn/generic/sqrtrem.c (mpn_sqrtrem): Add ASSERT_MPN. - (mpn_dc_sqrtrem): Add casts for K&R. - - * mpf/sqrt_ui.c: Nailify. - - * mpf/set_z.c: Do MPN_COPY last, for possible tail call. - - * doc/gmp.texi (Miscellaneous Float Functions): For mpf_random2, note - exponent is in limbs. - - * mpn/ia64/README: Add remark about concentrating on itanium-2. - -2004-01-22 Kevin Ryde <kevin@swox.se> - - * mpf/sqrt.c: Change tsize calculation to get prec limbs result - always, previously got prec+1 when exp was odd. - * tests/mpf/t-sqrt.c (check_rand1): New function, code from main. - (check_rand2): New function. - - * mpf/sqrt_ui.c: Change rsize calculation to get prec limbs result, - previously got prec+1. - * tests/mpf/t-sqrt_ui.c: New file. - * tests/mpf/Makefile.am (check_PROGRAMS): Add it. - - * tests/refmpf.c, tests/tests.h (refmpf_add_ulp, - refmpf_set_prec_limbs): New functions. - - * mpz/get_d_2exp.c, mpf/get_d_2exp.c: Remove x86+m68k force to double, - mpn_get_d now does this. Remove res==1.0 check for round upwards, - mpn_get_d now rounds towards zero. Move exp store to make mpn_get_d a - tail call. - - * configure.in (x86-*-*): Use ABI=32 rather than ABI=standard. - Use gcc -m32 when available, to force mode on bi-arch amd64 gcc. - * configure.in, acinclude.m4 (x86_64-*-*): Merge into plain x86 setups - as ABI=64. Support ABI=32, using athlon code. Use gcc -mcpu=k8, - -march=k8. - (amd64-*-*): Remove pattern, config.sub only gives x86_64. - * doc/gmp.texi (ABI and ISA): Add x86_64 dual ABIs. - - * mpn/amd64/README: Add reference to ABI spec. - -2004-01-17 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd.c (hgcd_adjust): Backed out mpn_addlsh1_n - change for now. - - * mpn/generic/hgcd.c (hgcd_adjust): Fixed calls of mpn_addlsh1_n. - -2004-01-17 Kevin Ryde <kevin@swox.se> - - * tune/README: Remove open/mpn versions of toom3, no longer exist. - * tune/powerpc64.asm: Remove unused L(again). - * tune/time.c (mftb): Note single mftb possible for powerpc64. - - * mpn/generic/mode1o.c: Use "c<s" to do underflow detection in last - step, for better parallelism. - - * mpn/generic/get_d.c: Preserve comments about hppa fcnv,udw,dbl from - previous mpz_get_d code. - - * tune/freq.c: Add some comments about systems not covered. - - * gmp-h.in (_GMP_H_HAVE_FILE): Add _MSL_STDIO_H for Metrowerks. - Reported by Tomas Zahradnicky. - -2004-01-16 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd.c (mpn_diff_smaller_p): Use MPN_DECR_U. - (hgcd_adjust): Use mpn_addlsh1_n when available. - -2004-01-16 Kevin Ryde <kevin@swox.se> - - * configure.in (powerpc64-*-linux*): Try gcc64. Try -m64 with - "cflags_maybe" to get it used in all probing. Add sizeof-long-8 test - to check the mode is right if -m64 is not applicable. - -2004-01-15 Kevin Ryde <kevin@swox.se> - - * configure.in (--with-readline=detect): Check for readline/readline.h - and readline/history.h. Report result of detection. - -2004-01-14 Niels Möller <nisse@lysator.liu.se> - - * tune/speed.c (routine): Disabled speed_mpn_hgcd_lehmer. - * tune/common.c (speed_mpn_hgcd_lehmer): Disabled function. - - * mpn/generic/hgcd.c (mpn_hgcd_lehmer_itch, mpn_hgcd_lehmer) - (mpn_hgcd_equal): Deleted functions. - - * mpn/generic/gcd.c (hgcd_start_row_p): Deleted function. - (gcd_schoenhage): Deleted assertion code using mpn_hgcd_lehmer. - - * mpn/generic/hgcd.c (hgcd_final): Fixed ASSERT typos. - (mpn_hgcd): To use Lehmer's algorithm, call hgcd_final directly, - not mpn_hgcd_lehmer. - - * mpn/generic/gcd.c (gcd_schoenhage): Updated for changes to - mpn_hgcd and mpn_hgcd_fix. (Schoenhage code is still disabled). - - * gmp-impl.h (mpn_hgcd_fix): Updated prototype. - - * mpn/generic/hgcd.c (mpn_hgcd_fix): Replaced a bunch of arguments - by a pointer const struct hgcd_row *s. Updated callers. - - * mpn/generic/hgcd.c (hgcd_start_row_p): Use const for the input. - Moved function definition before hgcd_jebelean. - (hgcd_jebelean): Interface change, analogous to hgcd2. - (mpn_hgcd_fix): Normalize v. Require that v > 0. - (hgcd_adjust): Fix bug in carry update. - (mpn_hgcd): Reorganized again, to adapt to mpn_hgcd/hgcd_jebelean - now sometimes returning 1. Reintroduced hgcd_adjust. - - * mpn/generic/hgcd.c (hgcd_final): Streamlined logic for the first - hgcd2 call. - - * mpn/generic/hgcd2.c (mpn_hgcd2): Interface change. Return 1 - instead of 2, in the no progress case r0=A, r1=B. - - * mpn/generic/hgcd.c (hgcd_adjust): Changed arguments and return - value. Now takes a struct hgcd_row * and the uv size, and returns - updated uvsize. - (hgcd_final): Special handling of the case hgcd2 returning 1. Now - uses hgcd_adjust, instead of a full Euclid division. - -2004-01-13 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd.c (euclid_step, hgcd_case0): Merged into a - single function euclid_step. - (mpn_hgcd): Reorganized the logic for the second recursive call. - Avoid unnecessary Euclid steps. - - * tests/mpn/t-hgcd.c (hgcd_values): One more test value. - - * tests/mpn/t-hgcd.c (hgcd_values): Added values that trigged the - hgcd_jebelean bug. - - * mpn/generic/hgcd.c (hgcd_jebelean): Fixed off by one error. - (mpn_hgcd): Simplified the logic for the first recursive call. Now - it uses only the correct values from the recursive call, and - doesn't do tricks with hgcd_adjust (hgcd_adjust will probably be - reintroduced later, though). - - * tests/mpn/t-hgcd.c (mpz_mpn_equal, hgcd_ref_equal) - (hgcd_ref_init, hgcd_ref_clear): New functions. - (hgcd_ref): Reference implementation of hgcd, using mpz. - (one_test): Use hgcd_ref. Don't use mpn_hgcd_lehmer. - (main): Skip one_step if both input values are zero. - -2004-01-12 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd.c (hgcd_final): Rewritten, now uses Lehmer - steps instead of a division loop. - (mpn_hgcd_lehmer): Deleted old Lehmer code, instead just - initialize and then call hgcd_final. - - * tests/tests.h: Added refmpn_free_limbs prototype. - * tests/refmpn.c (refmpn_free_limbs): New function. - - * tests/mpn/t-hgcd.c: Try the same kind of random inputs as for - mpz/t-gcd. - -2004-01-11 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd.c (mpn_hgcd_lehmer): Rewritten, after some more - analysis of the size reduction for one Lehmer step. - - * tests/mpn/t-hgcd.c: New file. - -2004-01-11 Torbjorn Granlund <tege@swox.com> - - With Niels Möller: - * mpn/generic/hgcd.c (hgcd_normalize): Fix ASSERTs. - (hgcd_mul): Normalize R[1].uvp[1]. Add some more ASSERTs. - (hgcd_update_uv): Streamline. ASSERT that input and output is - normalized. - -2004-01-11 Kevin Ryde <kevin@swox.se> - - * mpn/alpha/ev6/slot.pl: New file, derived in part from - mpn/x86/k6/cross.pl. - - * mpn/alpha/alpha-defs.m4 (ASSERT): New macro. - - * mpn/asm-defs.m4 (m4_ifdef): New macro, avoiding OSF 4.0 m4 bug. - (m4_assert_defined): Use it. - - * mpn/alpha/default.m4, mpn/alpha/unicos.m4 (LDGP): New macro. - * mpn/alpha/ev67/gcd_1.asm: Use it to re-establish gp after jsr. - - * configure.in, demos/calc/Makefile.am: Use -lcurses or -lncurses with - readline, when available. - - * longlong.h (sub_ddmmss) [generic]: Use al<bl for the borrow rather - than __x>al, since the former can be done without waiting for __x, - helping superscalar chips, in particular alpha ev5 and ev6. - - * longlong.h (sub_ddmmss) [ia64]: New macro. - - * tests/t-sub.c: New file. - * tests/Makefile.am (check_PROGRAMS): Add it. - * tests/refmpn.c, tests/tests.h (refmpn_sub_ddmmss): New function. - -2004-01-09 Kevin Ryde <kevin@swox.se> - - * mpn/x86/p6/mod_34lsub1.asm: New file, derived in part from - mpn/x86/mod_34lsub1.asm. - - * configure.in (IA64_PATTERN): Use -mtune on gcc 3.4. - -2004-01-07 Kevin Ryde <kevin@swox.se> - - * gmp-h.in, mp-h.in (__GMP_SHORT_LIMB): Renamed from _SHORT_LIMB, to - keep in our namespace. (Not actually used anywhere currently.) - Reported by Patrick Pelissier. - - * mp-h.in: Use "! defined (__GMP_WITHIN_CONFIGURE)" in the same style - as gmp-h.in (though mp-h.in is not actually used during configure). - - * mp-h.in (__GMP_DECLSPEC_EXPORT, __GMP_DECLSPEC_IMPORT) [__GNUC__]: - Use __dllexport__ and __dllimport__ to keep out of application - namespace. Same previously done in gmp-h.in. - -2004-01-06 Kevin Ryde <kevin@swox.se> - - * configfsf.sub, configfsf.guess: Update to 2004-01-05. - * configure.in (amd64-*-* | x86_64-*-*): Update comments on what - configfsf.sub does. - -2004-01-04 Kevin Ryde <kevin@swox.se> - - * mpn/alpha/README (REFERENCES): Add tru64 assembly manuals. - (ASSEMBLY RULES): Note what gcc says about !literal! etc. - -2004-01-03 Kevin Ryde <kevin@swox.se> - - * mpn/alpha/ev67/gcd_1.asm: New file. - - * mpn/x86/pentium4/sse2/rsh1add_n.asm: New file, derived in part from - mpn/x86/pentium4/sse2/addlsh1_n.asm. - - * mpn/x86/p6/p3mmx/popham.asm: Note measured speeds. - - * mpn/ia64/hamdist.asm: Correction to inputs vs locals in alloc (makes - no difference to the generated code). Corrections to a couple of - comments. - - * mpn/x86/pentium4/sse2/addlsh1_n.asm (PARAM_CARRY): Remove macro, not - used, no such parameter. - - * mpn/generic/gcd.c: Use <stdio.h> for NULL. - - * doc/gmp.texi (Single Limb Division): Correction to tex expression - for (1/2)x1. And minor wording tweaks elsewhere. - - * gmp-impl.h (mpn_rsh1add_n, mpn_rsh1sub_n): Correction to comments - about how carries returned. - - * longlong.h (umul_ppmm) [generic]: Add comments about squaring - (dropped from tasks list) - -2003-12-31 Kevin Ryde <kevin@swox.se> - - * demos/perl/GMP.xs (scan0, scan1): Return ~0 for not-found. - * demos/perl/GMP.pm: Describe this, remove the note about ULONG_MAX - being the same as ~0 (which is not true in old perl). - * demos/perl/test.pl: Update tests. - * demos/perl/typemap (gmp_UV): New type. - - * demos/perl/test.pl (fits_slong_p): Comment out uv_max test, it won't - necessarily exceed a long. - - * demos/perl/GMP.pm: Add a remark about get_str to the bugs section. - - * mpn/generic/sqrtrem.c, mpz/fac_ui.c, tests/mpf/reuse.c: Add casts - for K&R. - * tests/mpf/t-muldiv.c: Make ulimb, vlimb into ulongs, which is how - they're used, for the benefit of K&R calling. - - * doc/gmp.texi (Square Root Algorithm): Add a summary of the algorithm. - And add further index entries in various places. - - * mpz/lucnum_ui.c, mpz/lucnum2_ui.c: Use mpn_addlsh1_n when available. - - * gmp-impl.h, mpn/generic/mul_n.c (mpn_addlsh1_n, mpn_sublsh1_n, - mpn_rsh1add_n, mpn_rsh1sub_n): Move descriptions to gmp-impl.h with - the prototypes, for ease of locating. - -2003-12-30 Torbjorn Granlund <tege@swox.com> - - * tune/tuneup.c (all): Disable calls of tune_gcd_schoenhage and - tune_hgcd for now. - -2003-12-29 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-gcd.c: Rewrite, based on suggestions by Kevin. - - * mpn/ia64/mul_1.asm: Amend TODO list. - - * mpn/sparc64/README: Remove mpn_Xmul_2, done. - Add blurb about L1 cache conflicts. - - * mpn/generic/gcd.c: Disable Schoenhage code for now. - -2003-12-29 Kevin Ryde <kevin@swox.se> - - * mpn/generic/mul_fft.c, mpz/root.c, mpq/cmp_ui.c: Add casts for K&R. - -2003-12-27 Kevin Ryde <kevin@swox.se> - - * tests/mpz/t-mul.c (mul_kara, mul_basecase): Use __GMP_PROTO. - - * mpn/generic/gcd.c (NHGCD_SWAP4_2, NHGCD_SWAP3_LEFT), - mpn/generic/hgcd.c (HGCD_SWAP4_LEFT, HGCD_SWAP4_RIGHT, HGCD_SWAP4_2, - HGCD_SWAP3_LEFT): Aggregate initializers for automatics is an - ANSI-ism, avoid. - - * Makefile.am (AUTOMAKE_OPTIONS): Restore this, giving no directory on - ansi2knr to avoid a circular build rule. - * configure.in (AM_INIT_AUTOMAKE): Note options also in Makefile.am. - - * configure.in (cflags_maybe): Don't loop adding cflags_maybe if the - user has set CFLAGS. - -2003-12-24 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/gcd.c (gcd_schoenhage_itch): Avoid unary "+". - (mpn_gcd): Allocate scratch space on heap for gcd_schoenhage. - (mpn_gcd): Don't invoke MPN_NORMALIZE on input operands. - -2003-12-23 Kevin Ryde <kevin@swox.se> - - * configure.in (*sparc*-*-*): Test sizeof(long)==4 or 8 for ABIs, to - get the right mode when the user sets the CFLAGS. - (testlist): Introduce "any_<abi>_testlist" to apply to all compilers. - - * demos/perl/typemap (MPZ_ASSUME, MPQ_ASSUME, MPF_ASSUME): Remove - output rules, these are only meant for inputs. - (MPZ_MUTATE): Remove, not used since changes for magic. - - * demos/perl/GMP.xs (mpz_class_hv, mpq_class_hv, mpf_class_hv): New - variables, initialized in BOOT. - * demos/perl/GMP.xs, demos/perl/typemap: Use them and explicit - sv_bless, to save a gv_stashpv for every new object. - -2003-12-22 Kevin Ryde <kevin@swox.se> - - * mpn/alpha/mode1o.c, mpn/alpha/dive_1.c: Moved from ev5/mode1o.c and - ev5/dive_1.c, these are good for ev4, and would like them in a generic - alpha build. - -2003-12-21 Kevin Ryde <kevin@swox.se> - - * doc/gmp.texi (Integer Logic and Bit Fiddling): Say "bitwise" in - mpz_and, mpz_ior and mpz_xor, to avoid any confusion with what C means - by "logical". Reported by Rüdiger Schütz. - - * gmp-h.in (_GMP_H_HAVE_FILE): Note why defined(EOF) is not good. - -2003-12-20 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/hgcd.c (mpn_diff_smaller_p): Use mpn_cmp instead of - mpn_sub_n where possible. Use mp_size_t for relevant variables. - -2003-12-20 Kevin Ryde <kevin@swox.se> - - * tune/speed.h (SPEED_TMP_ALLOC_LIMBS): Correction to last change, - don't want "- 1" on the TMP_ALLOC_LIMBS. - - * demos/expr/expr.h: Test #ifdef MPFR_VERSION_MAJOR for when mpfr.h is - included, not GMP_RNDZ which is now an enum. - - * demos/expr/exprfra.c (e_mpfr_ulong_p): Use mpfr_integer_p and - mpfr_fits_ulong_p. - (e_mpfr_get_ui_fits): Use mpfr_get_ui. - - * mpfr/*: Update to mpfr cvs head 2003-12-20. - - * configure, config.in: Update to autoconf 2.59. - * */Makefile.in, configure, aclocal.m4, ansi2knr.c, install-sh, - doc/mdate-sh: Update to automake 1.8. - - * mkinstalldirs: Remove, not required by automake 1.8. - * doc/gmp.texi (Build Options): HTML is a usual target in automake 1.8. - - * configure.in (AC_PREREQ): Require autoconf 2.59. - (AM_INIT_AUTOMAKE): Require automake 1.8. - (AC_C_INLINE): Use rather than GMP_C_INLINE, now has #ifndef - __cplusplus we want. - (gettimeofday): Use AC_CHECK_FUNCS rather than our workaround code, - autoconf now ok. - - * acinclude.m4 (GMP_C_INLINE): Remove. - (GMP_H_EXTERN_INLINE): Use AC_C_INLINE. - (GMP_PROG_AR): Comment on automake $ARFLAGS. - -2003-12-19 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd.c (mpn_diff_smaller_p): Rewrote function. Tried - to explain how it works. - (slow_diff_smaller_p, wrap_mpn_diff_smaller_p) [WANT_ASSERT]: Use - CPP to wrap assertion checks around all calls to - mpn_diff_smaller_p. - - * mpn/generic/hgcd.c (mpn_addmul2_n_1) [nails]: Fixed carry handling. - - * mpn/generic/hgcd.c (mpn_diff_smaller_p) [nails]: Use - GMP_NUMB_MAX, not MP_LIMB_T_MAX. - (mpn_hgcd_itch): Improved size calculation. - (mpn_hgcd_max_recursion): Moved function from qstack.c. Should to - be recompiled when HGCD_SCHOENHAGE_THRESHOLD is tuned. - - * mpn/generic/qstack.c (mpn_hgcd_max_recursion): ... moved from - here. - -2003-12-19 Torbjorn Granlund <tege@swox.com> - - * tests/mpf/t-get_d.c: Print message before aborting. - - * mpn/generic/hgcd2.c (mpn_hgcd2): Substitute always-zero variable - with 0. Remove bogus comment. - - * mpn/generic/get_d.c: Make ONE_LIMB case actually work for nails. - -2003-12-18 Niels Möller <niels@lysator.liu.se> - - * mpn/generic/hgcd.c (hgcd_update_r): Assert that the output r2 is - smaller than the input r1. - -2003-12-18 Torbjorn Granlund <tege@swox.com> - - * mpz/get_d.c: Don't include longlong.h. - - * tests/mpz/t-mul.c (ref_mpn_mul): Handle un == vn specially, to avoid - a dummy r/w outside of allocated area. - -2003-12-18 Kevin Ryde <kevin@swox.se> - - * mpn/alpha/unicos.m4 (ALIGN): Add comments on what GCC does. - - * configure.in (fat setups), acinclude.m4 (GMP_INIT): Obscure - include() from automake 1.8 aclocal. - * acinclude.m4: Quote names in AC_DEFUN, for automake 1.8 aclocal. - -2003-12-17 Niels Möller <nisse@lysator.liu.se> - - * tune/common.c (speed_mpn_hgcd, speed_mpn_hgcd_lehmer) [nails]: - Enabled code also for GMP_NAIL_BITS > 0. - * tune/speed.c [nails]: Enable speed_mpn_hgcd and - speed_mpn_hgcd_lehmer. - * tune/tuneup.c (tune_hgcd) [nails]: Likewise. - - * mpn/generic/gcd.c [nails]: Use Schönhage's algorithm also for - GMP_NAIL_BITS > 0. - - * mpn/generic/hgcd.c [nails]: Enable the code for GMP_NAIL_BITS > 0. - (MPN_EXTRACT_LIMB) [nails]: Handle nails. - (__gmpn_hgcd_sanity): Allocate temporaries on the heap, not on the - stack. Also check that r[i] >= r[i+1]. - (mpn_hgcd2_lehmer_step) [nails]: Handle nails. - (mpn_hgcd_lehmer): When we temporarily have r3 > r2, avoid - trigging that assert in __gmpn_hgcd_sanity. - (mpn_hgcd): Likewise. - - * mpn/generic/hgcd2.c (div2) [nails]: Alternative nail-aware - version. - (SUB_2): New macro of Kevin's, which reduces do sub_ddmmss in the - non-nail case. - (HGCD2_STEP): Use SUB_2, not sub_ddmmss. Added alternative version - for K&R compilers. - (mpn_hgcd2) [nails]: Use SUB_2, not sub_ddmmss. New nail-aware - code for checking Jebelean's condition. - -2003-12-13 Kevin Ryde <kevin@swox.se> - - * mpq/get_d.c: Amend comments per mpn_get_d change. - (limb2dbl): Remove, no longer used. - - * gmp-impl.h (DIVREM_1_NORM_THRESHOLD etc) [nails]: Correction to - comments, MP_SIZE_T_MAX means preinv never. - - * gmp-impl.h (DIVEXACT_1_THRESHOLD, MODEXACT_1_ODD_THRESHOLD) [nails]: - Remove overrides, divexact_1 and modexact_1 have been nailified. - - * mpz/inp_str.c (mpz_inp_str_nowhite): Use ASSERT_ALWAYS for EOF value - requirement. - - * tests/refmpn.c (refmpn_rsh1add_n, refmpn_rsh1sub_n): Parens around - GMP_NUMB_BITS - 1 with ">>", to quieten gcc -Wall. - * tests/t-constants.c (main), tests/t-count_zeros.c (check_clz), - tests/t-modlinv.c (one), tests/mpz/t-jac.c (try_si_zi), - tests/mpq/t-get_d.c (check_onebit): : Correction to printfs. - * tests/mpn/t-fat.c: Add <string.h> for memcpy. - * tests/mpz/t-scan.c (check_ref): Remove unused variable "isigned". - * tests/mpq/t-get_d.c (check_onebit): Remove unused variable "limit". - * tests/mpf/t-set_si.c, tests/mpf/t-set_ui.c (check_data): Braces for - initializers. - * tests/devel/try.c (mpn_divexact_by3_fun, mpn_modexact_1_odd_fun): - Correction to return values. - - * doc/gmp.texi (Miscellaneous Integer Functions): Note mpz_sizeinbase - can be used to locate the most significant bit. Reword a bit for - clarity. - -2003-12-12 Niels Möller <niels@lysator.liu.se> - - * mpn/generic/hgcd.c (__gmpn_hgcd_sanity): Fixed stack buffer - overrun. - * mpn/generic/hgcd.c: Improved comments. - -2003-12-11 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h: Change asm => __asm__, tabify. - * mpz/get_d_2exp.c: Likewise. - * mpf/get_d_2exp.c: Likewise. - - * tests/cxx/t-ops.cc: #if .. #endif out tests that cause ambiguities. - -2003-12-10 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-gcd.c: Generate operands with sizes as a geometric - progression, to allow for larger operands and less varying timing. - - * tune/tuneup.c (tune_gcd_schoenhage): Set param.step_factor. - (tune_hgcd): Likewise. - -2003-12-10 Kevin Ryde <kevin@swox.se> - - * demos/perl/test.pl: Should be $] for perl version in old perl. - - * configure.in (sparc64-*-*): Single block of gcc configs for all - systems, on unknown systems try both ABI 32 and 64. - - * configure.in (LIBGMP_LDFLAGS, LIBGMPXX_LDFLAGS): New AC_SUBSTs with - options to generate .def files with windows DLLs. - * Makefile.am (libgmp_la_LDFLAGS, libgmpxx_la_LDFLAGS): Use them. - - * mpn/generic/gcd.c: Use ABOVE_THRESHOLD / BELOW_THRESHOLD, to follow - convention and cooperate with tune/tuneup.c. - - * tune/tuneup.c (tune_gcd_schoenhage): Increase max_size to 3000, side - default 1000 is approx the crossover point on athlon. - - * tune/common.c, tune/speed.c, tune/speed.h, tune/speed-ext.c, - tune/tuneup.c (SPEED_TMP_ALLOC_LIMBS): Take variable as parameter - rather than returning a value, avoids alloca in a function call. - * tune/common.c, tune/speed.h (speed_tmp_alloc_adjust): Remove, now - inline in SPEED_TMP_ALLOC_LIMBS, and using ptr-NULL for alignment - extraction. - - * gmpxx.h (__gmp_binary_equal, __gmp_binary_not_equal, - __gmp_binary_less, __gmp_binary_less_equal, __gmp_binary_greater, - __gmp_binary_greater_equal, __gmp_cmp_function): Use mpfr_cmp_si and - mpfr_cmp_d. - * tests/cxx/t-ops.cc: Exercise this. - - * demos/perl/Makefile.PL: Don't install sample.pl and test2.pl. - - * demos/perl/GMP.xs (use_sv): Prefer PV over IV or NV to avoid any - rounding. - * demos/perl/test.pl: Exercise this. - - * demos/perl/GMP/Mpf.pm (overload_string): Corrections to $# usage. - * demos/perl/test.pl: Exercise this. - -2003-12-08 Kevin Ryde <kevin@swox.se> - - * demos/perl/GMP.pm: Correction to canonicalize example. - - * demos/perl/GMP.xs: New type check scheme, support magic scalars, - support UV when available. Remove some unused local variables. - (coerce_long): Check range of double. - (get_d_2exp): Remove stray printf. - - * demos/perl/test.pl: Exercise magic, rearrange to make it clearer - what's being tested. - -2003-12-07 Kevin Ryde <kevin@swox.se> - - * mpn/generic/hgcd.c (mpn_hgcd): Use BELOW_THRESHOLD, to follow the - convention of N<THRESH for the lower algorithm, not <=. Fixes - algorithm selection in tuneup.c. - - * tune/common.c (speed_mpn_hgcd, speed_mpn_hgcd_lehmer): Use intended - align_xp, align_yp. - - * tune/tuneup.c (mul_toom3_threshold): Use MUL_TOOM3_THRESHOLD_LIMIT, - for the benefit of ASSERT in mpn_mul_n. - - * tune/tuneup.c (tune_mul): Correction to toom3 param.min_size, should - use MPN_TOOM3_MUL_N_MINSIZE. - - * tune/speed.c (check_align_option): Correction to printf format. - * tune/freq.c (freq_sysctl_hw_model): Remove unused "i" variable. - - * scanf/doscan.c: Correction to a couple of trace printfs. - Add <stdlib.h> for strtol. - - * tests/misc/t-scanf.c (test_sscanf_eof_ok): New function. - (check_misc): Use it to suppress tests broken by libc. - And should be EOF rather than -1 in various places. - -2003-12-06 Torbjorn Granlund <tege@swox.com> - - * tune/common.c (speed_mpn_hgcd, speed_mpn_hgcd_lehmer): - Move SPEED_TMP_ALLOC_LIMBS invocations out from calls. - - * mpn/generic/get_str.c (mpn_get_str, POW2_P case): - Don't append extra '\0' byte. - -2003-12-05 Niels Möller <niels@lysator.liu.se> - - * tune/common.c (speed_mpn_hgcd_lehmer, speed_mpn_hgcd): - Updated for the renaming hgcd_sanity -> ASSERT_HGCD. - - * mpn/generic/gcd.c (gcd_schoenhage): TMP_DECL must be the final - declaration in the declaration section of a block. - - * tune/speed.h (mpn_gcd_accel): Added prototype. - -2003-12-05 Torbjorn Granlund <tege@swox.com> - - * randmt.c (__gmp_mt_recalc_buffer): Put parens around "&" expressions - inside "!=". - - * mpf/get_str.c: Remove unused variable "fracn". - -2003-12-03 Kevin Ryde <kevin@swox.se> - - * configure.in, Makefile.am (LIBGMP_LDFLAGS, LIBGMPXX_LDFLAGS): New - AC_SUBSTs, use them to create .def files with Windows DLLs. - * doc/gmp.texi (Notes for Particular Systems): Update notes on mingw - DLL with MS C. - - * mpz/export.c: Allow NULL for countp. - * doc/gmp.texi (Integer Import and Export): Describe this. - Suggested by Jack Lloyd. - - * mpn/x86/p6/aors_n.asm: New file, grabbing the K7 code. - Superiority of this reported by Patrick Pelissier. - -2003-11-30 Kevin Ryde <kevin@swox.se> - - * mpn/alpha/ev67/popcount.asm, mpn/alpha/ev67/hamdist.asm: New files. - - * mpn/alpha/ev67: New directory. - * configure.in (alphaev67, alphaev68, alphaev7*): Use it. - - * doc/gmp.texi (GMPrefu, GMPpxrefu): Change back to plain ref and - pxref, remove macros. - (GMPreftopu, GMPpxreftopu): Remove URL parameter, rename to GMPreftop - and GMPpxreftop. - (Debugging): Remove debauch, seems to have disappeared. - (Language Bindings): Corrections to URLs for CLN, Omni F77, Pike. - -2003-11-29 Kevin Ryde <kevin@swox.se> - - * demos/perl/GMP/Mpf.pm (overload_string): Use $OFMT to avoid warnings - about $#. - - * demos/perl/GMP.xs (fits_slong_p): Use LONG_MAX+1 to avoid possible - rounding of 0x7F..FF in a double on 64-bit systems. - - * configure.in (ppc601-*-*): Remove this case, it never matched - anything, the name adopted is powerpc601. - (powerpc601-*-*): Use gcc -mcpu=601, xlc -qarch=601. - - * configure.in: Introduce ${cc}_cflags_maybe, used if they work. - (*sparc*-*-*) [ABI=32]: Add gcc_cflags_maybe=-m32 to force that mode. - - * doc/gmp.texi (Introduction to GMP): Add AMD64 to optimizations list. - (Build Options): Add cpu types alphaev7 and amd64. Update texinfo - html cross reference. - -2003-11-28 Niels Möller <nisse@lysator.liu.se> - - * tune/tuneup.c (tune_hgcd): Disable if GMP_NAIL_BITS > 0. - * tune/speed.c (routine): Likewise. - * tune/common.c (speed_mpn_hgcd, speed_mpn_hgcd_lehmer): Likewise. - - * mpn/generic/gcd.c, mpn/generic/hgcd.c, mpn/generic/hgcd2.c - [GMP_NAIL_BITS]: Disabled new code if we have nails. - - * mpn/generic/gcd.c (MPN_LEQ_P): Copied macro definition (needed - for compilation with --enable-assert). - - * tune/tuneup.c (hgcd_schoenhage_threshold, - gcd_schoenhage_threshold): New variables. - (tune_hgcd, tune_gcd_schoenhage): New functions. - (all): Call tune_hgcd and tune_gcd_schoenhage. - - * tune/common.c (speed_mpn_hgcd, speed_mpn_hgcd_lehmer) - (speed_mpn_gcd_accel): New functions. - * tune/speed.c (routine): Added mpn_hgcd, mpn_hgcd_lehmer and - mpn_gcd _accel. - * tune/speed.h: Added corresponding prototypes. - - * tune/gcd_accel.c: New file. - - * tune/gcd_bin.c (GCD_SCHOENHAGE_THRESHOLD): Set to MP_SIZE_T_MAX. - - * tune/Makefile.am (libspeed_la_SOURCES): Added gcd_accel.c. - (TUNE_MPN_SRCS_BASIC): Added hgcd.c. - - * mpn/x86/k7/gmp-mparam.h (HGCD_SCHOENHAGE_THRESHOLD) - (GCD_SCHOENHAGE_THRESHOLD): Tuned values. - - * mpn/generic/gcd.c (mpn_gcd, gcd_binary_odd): Renamed the - old mpn_gcd function (which implements accelerated binary gcd) to - gcd_binary_odd. - (gcd_binary): New function, with the additional book keeping - needed when using gcd_binary_odd to compute the gcd of non-odd - numbers. - (hgcd_tdiv): New function. - (gcd_lehmer): New function, currently #if:ed out. - (hgcd_start_row_p): New function, duplicated from hgcd.c. - (gcd_schoenhage_itch): New function. - (gcd_schoenhage): New function. - (mpn_gcd): New advertised gcd function, which calls - mpn_gcd_binary_odd or mpn_gcd_schoenhage, depending on the size of - the input. - - * mpn/generic/hgcd.c (mpn_hgcd2_lehmer_step): Renamed function - (was lehmer_step), and made non-static. Updated callers. - - * gmp-impl.h (GCD_LEHMER_THRESHOLD): #if:ed out this macro. - (mpn_hgcd2_lehmer_step): Added prototype. - -2003-11-27 Niels Möller <nisse@lysator.liu.se> - - * tests/mpz/t-gcd.c (gcd_values): Moved definition, so that we - don't need to forward declare the array. - -2003-11-26 Niels Möller <nisse@lysator.liu.se> - - * mpn/generic/hgcd.c (mpn_hgcd2_fix): Deleted duplicate definition - (the function belongs to hgcd2.c). - -2003-11-26 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-gcd.c: Generate random operands up to 32767 bits; - decrease # of test to 1000. - (gcd_values): Remove oversize test case. - -2003-11-26 Niels Möller <niels@lysator.liu.se> - - * gmp-impl.h: Added name mangling for hgcd-related functions. Also - use __GMP_PROTO. - (MPN_LEQ_P, MPN_EXTRACT_LIMB): Moved macros to hgcd.c. - * mpn/generic/hgcd.c, mpn/generic/hgcd2.c, mpn/generic/qstack.c: - Adapted to name changes. - - * tests/mpz/t-gcd.c (main): Added some tests with non-random - input. - -2003-11-25 Niels Möller <nisse@lysator.liu.se> - - * gmp-impl.h (MPN_LEQ_P, MPN_EXTRACT_LIMB): New macros. - (struct qstack, struct hgcd2_row, struct hgcd2, struct hgcd_row) - (struct hgcd): New structs. Also added prototypes for new hgcd, - hgcd2, qstack and gcd functions. - - * configure.in (gmp_mpn_functions): Added hgcd2, hgcd and qstack. - - * mpn/Makefile.am (nodist_EXTRA_libmpn_la_SOURCES): Added hgcd2.c, - hgcd.c and qstack.c. - - * mpn/generic/hgcd.c, mpn/generic/hgcd2.c, mpn/generic/qstack.c: - New files, needed for the sub-quadratic gcd. - -2003-11-25 Kevin Ryde <kevin@swox.se> - - * doc/gmp.texi (Language Bindings): Add Axiom. - -2003-11-22 Kevin Ryde <kevin@swox.se> - - * mpn/alpha/README: More notes on assembler syntax variations. - - * mpn/alpha/alpha-defs.m4, mpn/alpha/unicos.m4 (unop): Should be ldq_u - not bis, and move to alpha-defs.m4 since it can be happily used - everywhere. - - * mpn/alpha/alpha-defs.m4, mpn/alpha/default.m4, mpn/alpha/unicos.m4 - (bigend): Move to alpha-defs.m4 and base it on HAVE_LIMB_BIG_ENDIAN or - HAVE_LIMB_LITTLE_ENDIAN, so as not to hard code system endianness. - - * mpn/alpha/alpha-defs.m4: New file. - * configure.in (alpha*-*-*): Use it. - -2003-11-21 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr-2-0-2-branch 2003-11-21. - - * mpn/alpha/ev5/com_n.asm: Change "not" to "ornot r31", since "not" - isn't recognised by on Cray Unicos. Add missing "gp" to PROLOGUE. - * mpn/alpha/README: Add a note on "not". - -2003-11-19 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/aorslsh1_n.asm: Slightly rework feed-in code, avoiding - spurious reads beyond operand limits. - - * mpn/alpha/ev5/com_n.asm: Add ASM_START/ASM_END. - - * mpn/generic/mul_fft.c (mpn_fft_zero_p): Remove unused function. - (mpn_lshift_com): Make static, nailify properly. - -2003-11-19 Kevin Ryde <kevin@swox.se> - - * mpn/generic/diveby3.c: Use a "q" variable to make it clearer what - the code is doing. - - * mpn/powerpc32/750/lshift.asm, mpn/powerpc32/750/rshift.asm: New - files. - - * mpn/alpha/ev5/com_n.asm: New file. - - * doc/gmp.texi (Assembler Functional Units, Assembler Writing Guide): - New sections by Torbjorn, tweaked by me. - -2003-11-17 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32: Add power4/powerpc970 cycle counts. - Use cmpwi instead of cmpi to placate darwin. - -2003-11-15 Kevin Ryde <kevin@swox.se> - - * config.guess: Add comments on MacOS "machine" command. - - * tests/devel/try.c (main): Use gmp_randinit_default explicitly on - __gmp_rands, since RANDS doesn't allow seeding. - - * doc/gmp.texi (Assigning Integers): Remove notes on possible change - to disallow whitespace, this would be an incompatible change and - really can't be made. - (Toom 3-Way Multiplication): Updates for Paul's new code. - - * mpn/generic/mul_n.c (toom3_interpolate, mpn_toom3_mul_n): Put - if/else braces around whole of #if code, for readability. - - * tests/refmpn.c (refmpn_addlsh1_n, refmpn_sublsh1_n, - refmpn_rsh1add_n, refmpn_rsh1sub_n): Add ASSERTs for operand overlaps - etc. - - * mpfr/*: Update to mpfr-2-0-2-branch 2003-11-15. - -2003-11-14 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/aorslsh1_n.asm: Use Cray-friendly syntax for "br". - -2003-11-13 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/aorslsh1_n.asm: New file. - -2003-11-12 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_PROG_CC_WORKS): Add case provoking AIX power2 - assembler, test code by Torbjorn. - * configure.in (power*-*-*): Add a comment about -mcpu=rios2 fallback. - - * tune/speed.c (main): Use gmp_randinit_default explicitly on - __gmp_rands, since RANDS doesn't allow seeding. - - * mpfr/*: Update to mpfr-2-0-2-branch 2003-11-12. - - * gmp-impl.h, randmt.h (__gmp_randinit_mt_noseed): Move prototype to - gmp-impl.h, for use by RANDS. - - * mpn/Makeasm.am (.s, .S, .asm): Quote $< in test -f, per automake. - (.obj): Use test -f and $(CYGPATH_W) as per automake. - -2003-11-11 Kevin Ryde <kevin@swox.se> - - * configure.in: Make umul and udiv standard-optional objects, rather - than under various extra_functions. - - * mpn/pa32/hppa1_1/pa7100/add_n.asm, - mpn/pa32/hppa1_1/pa7100/addmul_1.asm, - mpn/pa32/hppa1_1/pa7100/lshift.asm, - mpn/pa32/hppa1_1/pa7100/rshift.asm, - mpn/pa32/hppa1_1/pa7100/sub_n.asm, - mpn/pa32/hppa1_1/pa7100/submul_1.asm: Use LDEF for labels. - - * mpf/set_str.c: Don't use memcmp for decimal point testing, just a - loop is enough and avoids any chance of memcmp reading past the end of - the given string. - - * randmts.c, randmt.h: New files. - * Makefile.am (libgmp_la_SOURCES): Add them. - * randmt.c: Move seeding to randmts.c, common defines in randmt.h. - * gmp-impl.h (RANDS): Use __gmp_randinit_mt_noseed. - * tests/misc.c (tests_rand_start): Use gmp_randinit_default - explicitly, not RANDS. - - * mpn/ia64/ia64-defs.m4 (PROLOGUE_cpu): Use 32-byte alignment, for the - benefit of itanium 2. - * mpn/ia64/gcd_1.asm: Remove own .align 32. - - * mpn/ia64/ia64-defs.m4 (ALIGN): New define, using IA64_ALIGN_OK. - * mpn/ia64/hamdist.asm: Use ALIGN instead of .align. - - * acinclude.m4 (GMP_ASM_IA64_ALIGN_OK): New macro. - * configure.in (IA64_PATTERN): Use it. - * mpn/ia64/README: Add notes on gas big endian align problem. - -2003-11-10 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/mul_1.asm: Rewrite. - -2003-11-08 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/aors_n.asm: Align loop to a multiple of 16. Also align - M4_function_n to a multiple of 16, to minimize alignment padding. - Update P6 cycle counts reflecting improvements with new alignment. - -2003-11-07 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (HAVE_HOST_CPU_alpha_CIX): New define. - (ULONG_PARITY, popc_limb): Use it, to pick up ev7 as well as 67 and 68. - * longlong.h (count_leading_zeros, count_trailing_zeros): Ditto. - - * doc/gmp.texi (Notes for Package Builds): Add notes on multi-ABI - system packaging. - (ABI and ISA): Add GNU/Linux ABI=64. - (Binary GCD): Add notes on 1x1 GCD algorithms. - - * mpn/alpha/README: Add some literature references. - - * mpn/ia64/mode1o.asm: Various corrections to initial checkin. - * mpn/ia64/ia64-defs.m4 (ASSERT): Correction to arg quoting. - -2003-11-05 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/linux64.m4: New file. - * configure.in (POWERPC64_PATTERN): Handle *-*-linux*. - Use linux64.m4. - - * mpn/ia64/logops_n.asm: New file. - -2003-11-05 Kevin Ryde <kevin@swox.se> - - * tune/freq.c (freq_sysctl_hw_model): Relax to just look for "%u MHz", - for the benefit of sparc cypress under netbsd 1.6.1. - - * mpfr/*: Update to mpfr-2-0-2-branch 2003-11-05. - - * mpn/alpha/ev5/dive_1.c: New file. - - * configure.in (x86_64-*-*): Accept together with amd64-*-*. - - * tune/speed.c: Check range of -x,-y,-w,-W alignment specifiers. - * tune/speed.h (CACHE_LINE_SIZE): Amend comments. - -2003-11-04 Torbjorn Granlund <tege@swox.com> - - * tune/speed.c: Fix typo in testing HAVE_NATIVE_mpn_modexact_1_odd. - -2003-11-03 Kevin Ryde <kevin@swox.se> - - * mpn/ia64/hamdist.asm: New file. - * mpn/ia64/mode1o.asm: New file. - * mpn/ia64/ia64-defs.m4 (ASSERT): New macro. - - * tests/mpz/t-set_d.c (check_2n_plus_1): New test. - -2003-11-01 Kevin Ryde <kevin@swox.se> - - * mpz/fac_ui.c (BSWAP_ULONG) [limb==2*long]: Remove this case, it - provokes code gen problems on HP cc. - (BSWAP_ULONG) [generic]: Rename __dst variable to avoid conflicts with - BITREV_ULONG. - Fix by Jason Moxham. - - * mpn/powerpc32/mode1o.asm: Use 16-bit i*i for early out, no need to - truncate divisor. Amend stated 750/7400 speeds, and note operands - that give the extremes. - - * mpz/set_d.c: Don't use a special case for d < MP_BASE_AS_DOUBLE, gcc - 3.3 -mpowerpc64 on darwin gets ulonglong->double casts wrong. - - * mpn/generic/diveby3.c: Show a better style carry handling in the - alternative pipelined sample code. - - Revert this, the longlong.h macros need -mpowerpc64: - * acinclude.m4 (GMP_GCC_POWERPC64): New macro. - * configure.in (powerpc64-*-darwin*): Use it to exclude -mpowerpc64 - when bad. - -2003-10-31 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/mode64/submul_1.asm: Move an instruction to save a - cycle on POWER4. - - * mpn/powerpc64/mode64/divrem_1.asm: Fix several syntax problems - revealed on Mac OS X. - - * mpn/powerpc64/mode64/*.asm: Add cycle counts for POWER4. - - * mpn/powerpc64/sqr_diagonal.asm: Rewrite to save a cycle on POWER4. - -2003-10-31 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr-2-0-2-branch 2003-10-31. - - * mpn/powerpc64/README: Add subdirectory organisation notes. - - * tests/mpn/t-get_d.c: Don't use limits.h, LONG_MIN is wrong on gcc - 2.95 with -mcpu=ultrasparc. - - * acinclude.m4 (GMP_GCC_POWERPC64): New macro. - * configure.in (powerpc64-*-darwin*): Use it to exclude -mpowerpc64 - when bad. - - * configure.in (powerpc64-*-darwin*) [ABI=mode32]: Use gcc -mcpu flags. - - * mpn/ia64/divrem_1.asm, mpn/ia64/gcd_1.asm: Use "C" for comments. - * mpn/ia64/README, mpn/ia64/ia64-defs.m4: Note this. - - * mpn/ia64/ia64-defs.m4: Renamed from default.m4, per other defs files. - * configure.in (IA64_PATTERN): Update GMP_INCLUDE_MPN. - - * doc/gmp.texi (Notes for Particular Systems): Remove m68k ABI notes - for -mshort and PalmOS, now works. - (References): Correction, GMP Square Root proof already there, just - wanting URL from RRRR 4475. - -2003-10-29 Kevin Ryde <kevin@swox.se> - - * configure.in (sparc*-*-*): Use gcc -m32 when that option works, to - force 32-bit mode on dual 32/64 configurations like GNU/Linux. - (sparc64-*-linux*): Add support for ABI=64. - - * mpn/generic/pre_divrem_1.c: In fraction part, use CNST_LIMB(0) with - udiv_qrnnd_preinv to avoid warning about shift > type. - - * mpfr/*: Update to mpfr-2-0-2-branch 2003-10-29. - - * tests/cxx/t-istream.cc: Avoid tellg() checks if putback() doesn't - update that, avoids certain g++ 2.96 problems. - - * tests/mpn/t-fat.c: New file. - * tests/mpn/Makefile.am (check_PROGRAMS): Add it. - - * configure.in (CPUVEC_INSTALL, ITERATE_FAT_THRESHOLDS): New macros - for fat.h. - * mpn/x86/fat/fat.c (__gmpn_cpuvec_init): Use CPUVEC_INSTALL instead - of memcpy. Correction to location of "initialized" set. Improve - various comments. - -2003-10-27 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/mul_1.asm: Change addcc => add in a few places. - * mpn/sparc64/addmul_1.asm: Likewise. - - * mpn/sparc32/v9/mul_1.asm: Apply cross-jumping. - * mpn/sparc32/v9/addmul_1.asm: Likewise. - * mpn/sparc32/v9/submul_1.asm: Likewise. - * mpn/sparc32/v9/sqr_diagonal.asm: Likewise. - -2003-10-27 Kevin Ryde <kevin@swox.se> - - * tests/cxx/t-misc.cc: Don't use <climits>, on g++ 2.95.4 (debian 3.0) - -mcpu=ultrasparc LONG_MIN is wrong and kills the compile. - - * tests/cxx/t-istream.cc: Correction to tellg tests, don't assume - streampos is zero based. - - * configure.in (HAVE_HOST_CPU_FAMILY_alpha): New define for config.h. - * mpn/generic/get_d.c: Use it instead of __alpha for alpha workaround, - since Cray cc doesn't define __alpha. - - * mpn/x86/README: Revise PIC coding notes a bit, add gcc visibility - attribute. - -2003-10-25 Kevin Ryde <kevin@swox.se> - - * mpn/ia64/gcd_1.asm: New file. - - * tune/many.pl: Allow for PROLOGUE(fun,...), as used on alpha. - - * doc/gmp.texi (C++ Formatted Input): Describe base indicator handling. - - * tests/cxx/t-istream.cc: New file. - * tests/cxx/Makefile.am: Add it. - - * cxx/ismpznw.cc: New file, integer input without whitespace ... - * cxx/ismpz.cc: ... from here. - * gmp-impl.h (__gmpz_operator_in_nowhite): Add prototype. - * cxx/ismpq.cc: Rewrite using mpz input routines. Change to accept a - separate base indicator on numerator and denominator. Fix base - indicator case where "123/0456" would stop at "123/0". - * Makefile.am, cxx/Makefile.am: Add cxx/ismpznw.cc. - - * tests/mpz/t-set_d.c: New file, derived from tests/mpz/t-set_si.c - * tests/mpz/Makefile.am (check_PROGRAMS): Add it. - - * mpn/m68k/lshift.asm, mpn/m68k/rshift.asm: Support 16-bit int and - stack alignment. - * mpn/m68k/README: Add notes on this. - * configure.in (SIZEOF_UNSIGNED): New define in config.m4. - * mpn/m68k/m68k-defs.m4 (m68k_definsn): Add cmpw, movew. - Reported by Patrick Pelissier. - - * mpn/m68k/t-m68k-defs.pl: Don't use -> with hashes, to avoid - deprecation warnings from perl 5.8. - - * configure.in (viac3-*-*): Use just x86/pentium in $path not x86/p6. - If gcc is to be believed the old C3s don't have cmov. - - * Makefile.am: Amend comments about not building from libtool - convenience libraries. - - * mpn/asm-defs.m4 (PROLOGUE): Use m4_file_seen, for correct filename - in missing EPILOGUE error messages. - (m4_file_seen): Amend comments about where used. - - * Makefile.am (CXX_OBJECTS): Remove $U, C++ files are not subject to - ansi2knr rules. - - * gmp-h.in (mpn_divmod_1): Use __GMP_CAST, to avoid warnings in - applications using g++ -Wold-style-cast. - - * mpn/z8000/README: New file. - -2003-10-22 Kevin Ryde <kevin@swox.se> - - * mpn/generic/get_d.c (CONST_1024, CONST_NEG_1023, - CONST_NEG_1022_SUB_53): Replace ALPHA_WORKAROUND with a non-gcc-ism, - and use on Cray Unicos alpha too, which has the same problem. - - * configure.in (powerpc64-*-darwin*): Make ABI=32 available as the - final fallback, remove mode64 until we know how it will work. - - * doc/gmp.texi (Build Options): Add powerpc970 to available CPUs. - (ABI and ISA): Add mode32 for Darwin. - - * configure.in (gettimeofday): Use an explicit AC_TRY_LINK, to avoid - known autoconf 2.57 problems with gettimeofday in AC_CHECK_FUNCS on - HP-UX. - - * configure.in (powerpc*-*-*): Use ABI=32 instead of ABI=standard for - the default 32-bit ABI. Fixes powerpc64-*-aix* which is documented as - choices "aix64 32" but had "aix64 standard". - - * mpfr/*: Update to mpfr-2-0-2-branch 2003-10-22. - - * doc/gmp.texi (Notes for Particular Systems): Note m68k gcc -mshort - and PalmOS calling conventions not supported. Reported by Patrick - Pelissier. - (References): Add Paul Zimmermann's Inria 4475 paper. - -2003-10-21 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/submul_1.asm: Slightly reschedule loop to accommodate - Itanium 2 getf.sig latency. - -2003-10-21 Kevin Ryde <kevin@swox.se> - - * tests/mpn/t-instrument.c: Add mpn_addlsh1_n, mpn_rsh1add_n, - mpn_rsh1sub_n, mpn_sub_nc, mpn_sublsh1_n. Typo in mpn_preinv_divrem_1 - conditional. - -2003-10-20 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/mode32/add_n.asm: New file. - * mpn/powerpc64/mode32/sub_n.asm: New file. - * mpn/powerpc64/mode32/mul_1.asm: New file. - * mpn/powerpc64/mode32/addmul_1.asm: New file. - * mpn/powerpc64/mode32/submul_1.asm: New file. - -2003-10-19 Torbjorn Granlund <tege@swox.com> - - * longlong.h (AMD64): __x86_64__ => __amd64__. - (64-bit powerpc): Only define carry-dependent macros if - !_LONG_LONG_LIMB. - - * acinclude.m4 (POWERPC64_PATTERN): Add powerpc970-*-*. - - * configure.in (POWERPC64_PATTERN): Handle *-*-darwin*. - (POWERPC64_PATTERN, *-*-aix*): Prepend powerpc64/mode64 to path_aix64. - - * mpn/powerpc64/mode64/mul_1.asm: Change cal => addi. - * mpn/powerpc64/mode64/addmul_1.asm: Likewise. - * mpn/powerpc64/mode64/submul_1.asm: Likewise. - * mpn/powerpc64/sqr_diagonal.asm: Likewise. - - * mpn/powerpc64/mode64/mul_1.asm: Move from "..". - * mpn/powerpc64/mode64/addmul_1.asm: Likewise. - * mpn/powerpc64/mode64/submul_1.asm: Likewise. - * mpn/powerpc64/mode64/divrem_1.asm: Likewise. - * mpn/powerpc64/mode64/rsh1sub_n.asm: Likewise. - * mpn/powerpc64/mode64/add_n.asm: Likewise. - * mpn/powerpc64/mode64/addsub_n.asm: Likewise. - * mpn/powerpc64/mode64/sub_n.asm: Likewise. - * mpn/powerpc64/mode64/addlsh1_n.asm: Likewise. - * mpn/powerpc64/mode64/diveby3.asm: Likewise. - * mpn/powerpc64/mode64/rsh1add_n.asm: Likewise. - * mpn/powerpc64/mode64/sublsh1_n.asm: Likewise. - - * mpn/powerpc64/lshift.asm: Handle mode32 ABI. - * mpn/powerpc64/rshift.asm: Likewise. - * mpn/powerpc64/umul.asm: Likewise. - - * tune/powerpc64.asm: Make it actually work. - -2003-10-19 Kevin Ryde <kevin@swox.se> - - * mpn/generic/get_d.c: Add a workaround for alpha gcc signed constant - comparison bug. - - * gmpxx.h (gmp_randclass gmp_randinit_lc_2exp_size constructor): Throw - std::length_error if size is too big. - * tests/cxx/t-rand.cc (check_randinit): Exercise this. - - * mpn/x86/pentium4/sse2/addlsh1_n.asm: New file, derived in part from - mpn/x86/pentium4/sse2/add_n.asm. - - * doc/gmp.texi (C++ Interface Integers, C++ Interface Rationals, C++ - Interface Floats): Note std::invalid_argument exception for invalid - strings to constructors and operator=. - (C++ Interface Random Numbers): Note std::length_error exception for - size too big in gmp_randinit_lc_2exp_size. - -2003-10-18 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr-2-0-2-branch 2003-10-18. - - * gmpxx.h (mpz_class, mpq_class, mpf_class, mpfr_class constructors - and operator= taking string or char*): Throw std::invalid_argument if - string cannot be converted. - * tests/cxx/t-constr.cc, tests/cxx/t-assign.cc: Exercise this. - - * cxx/ismpz.cc, cxx/ismpq.cc, cxx/ismpf.cc: Use istream std::locale - ctype facet for isspace when available. Only accept space at the - start of the input, same as g++ libstdc++. Use ASSERT_NOCARRY to - check result of mpz_set_str etc. - * cxx/ismpf.cc: Don't accept "@" for exponent indicator. - - * tune/speed.c, tune/speed.h, tune/common.c, tune/Makefile.am: Remove - _open and _mpn variants of mpn_toom3_mul_n, only one style now. - * tune/mul_n_open.c, tune/mul_n_mpn.c: Remove files. - - * gmp-impl.h (LIMB_HIGHBIT_TO_MASK): New macro. - (udiv_qrnnd_preinv2, udiv_qrnnd_preinv2gen): Use it. - - * tests/mpz/t-import.c, tests/mpz/t-export.c: Use octal for character - constants, hex is an ANSI-ism. - - * mpn/alpha/ev5/mode1o.c: Corrections to ASSERTs, as per - mpn/generic/mode1o.c. - - * mpn/generic/diveby3.c: Add commented out alternative code and notes - for taking the multiply off the dependent chain. Amend/clarify some - of the other comments. - - * configure.in (powerpc970-*-*): Use gcc -mcpu=970 when available. - (powerpc7400-*-*): Fallback on gcc -mcpu=750 if -mcpu=7400 not - available. - - * doc/gmp.texi (C++ Formatted Input): Note locale digit grouping not - supported. - (C++ Formatted Input, C++ Formatted Output): Cross reference class - interface on overloading. - - * mpn/m68k/README: Add various ideas from doc/tasks.html. - - * mpn/m88k/README: New file. - -2003-10-16 Torbjorn Granlund <tege@swox.com> - - * config.sub: Recognize powerpc970. - -2003-10-15 Torbjorn Granlund <tege@swox.com> - - * config.guess: Recognize powerpc970 under MacOS. - -2003-10-15 Kevin Ryde <kevin@swox.se> - - * configure.in, acinclude.m4 (GMP_C_RIGHT_SHIFT): New test. - * gmp-impl.h (LIMB_HIGHBIT_TO_MASK): New macro. - (udiv_qrnnd_preinv2, udiv_qrnnd_preinv2gen): Use it. - - * mpn/amd64/amd64-defs.m4: New file, with a non-aligning PROLOGUE. - * configure.in (amd64-*-*): Use it. - * mpn/amd64/addlsh1_n.asm: Add ALIGN(16). - - * mpfr/*: Update to mpfr cvs 2003-10-15. - - * mpn/generic/get_d.c: Rewrite, simplifying and truncating towards - zero unconditionally. - * tests/mpn/t-get_d.c: Add various further tests. - * gmp-impl.h (FORCE_DOUBLE): New macro. - - * gmp-h.in (__mpz_struct): Add comment on __mpz_struct getting into - C++ mangled function names. - - * doc/gmp.texi (Build Options): Update notes for new doc subdir. - (Low-level Functions): Note mpn functions don't check for zero limbs - etc, it's up to an application to strip. - - * doc/configuration (Configure): mdate-sh now in doc subdir, add - generated fat.h. - -2003-10-14 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/lorrshift.asm: Rewrite. - - * mpn/ia64/diveby3.asm: Remove explicit bundling; add branch hints. - -2003-10-13 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/diveby3.asm: New file. - -2003-10-13 Kevin Ryde <kevin@swox.se> - - * mpn/powerpc32/mod_34lsub1.asm: New file. - - * mpn/powerpc32/diveby3.asm, mpn/powerpc64/diveby3.asm: src[] in - second operand of mullw, to allow possible early-out, which the - 0xAA..AB inverse cannot give. This improvement noticed by Torbjorn. - - * acinclude.m4 (GMP_ASM_LSYM_PREFIX): Print to config.log whether - local label is purely temporary or appears in object files, for - development purposes. - - * doc/gmp.texi, doc/fdl.texi, doc/texinfo.tex, doc/mdate-sh: Moved - from top-level. - * doc/Makefile.am: New file. - * configure.in (AC_OUTPUT): Add doc/Makefile. - * Makefile.am (SUBDIRS): Move doc subdirectory from EXTRA_DIST. - (info_TEXINFOS, gmp_TEXINFOS): Moved to doc/Makefile.am. - * mpfr/Makefile.am (mpfr_TEXINFOS): fdl.texi now in doc subdir. - (TEXINFO_TEX): texinfo.tex now in doc subdir. - (AM_MAKEINFOFLAGS): Set -I to doc subdir. - - * mpz/and.c: For positive/positive, use mpn_and_n, rate a realloc as - UNLIKELY. - - * mpn/generic/mul_n.c (mpn_toom3_mul_n, mpn_toom3_sqr_n): Don't test - for high zero limbs. - -2003-10-12 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/diveby3.asm: New file (trivial edits of - powerpc32/diveby3.asm). - - * mpn/powerpc32/diveby3.asm: Update cycle counts with more processors. - * mpn/powerpc32/sqr_diagonal.asm: Likewise. - - * mpn/pa64/add_n.asm: Correct PA8500 cycle counts. - * mpn/pa64/sub_n.asm: Likewise. - - * mpn/m68k/aors_n.asm (INPUT PARAMETERS): Fix typo. - * mpn/m68k/lshift.asm: Likewise. - * mpn/m68k/rshift.asm: Likewise. - - * mpn/m68k/README: Correct an URL; add some STATUS comments. - - * mpn/ia64/aorslsh1_n.asm: Avoid shrp when shl/shr works just as well. - - * mpn/powerpc32/addlsh1_n.asm: New file. - * mpn/powerpc32/sublsh1_n.asm: New file. - -2003-10-12 Kevin Ryde <kevin@swox.se> - - * mpn/sparc64/divrem_1.c, mpn/sparc64/mod_1.c: New files. - * mpn/sparc64/sparc64.h (HALF_ENDIAN_ADJ, count_leading_zeros_32, - invert_half_limb, udiv_qrnnd_half_preinv): New macros. - - * gmp-impl.h (udiv_qrnnd_preinv2): Use a ? : for getting the n1 bit, - so as not to depend on signed right shifts being arithmetic. - - * mpn/powerpc32/diveby3.asm: New file. - - * mpn/generic/divrem_1.c: Use CNST_LIMB(0) to avoid warnings from - udiv_qrnnd_preinv about shift count when int<long. Do the same with - udiv_qrnnd, for consistency. - - * Makefile.am (install-data-hook): Print a warning recommending "make - check" to watch out for compiler bugs. Proposed by Torbjorn. - - * mpn/ia64/README (mpn_lshift, mpn_rshift): Amend prospective itanium2 - speed, 0.75 c/l with shrp plus shl/shr. - - * mpn/ia64/popcount.asm: Add comment on optimality. - -2003-10-11 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/rsh1aors_n.asm: New file. - - * mpn/asm-defs.m4: Handle rsh1aors_n. - - * configure.in (tmp_mulfunc): Handle rsh1aors_n. - -2003-10-11 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium4/sse2/diveby3.asm: Remove non-PIC RODATA memory - access for 0xAAAAAAAB constant. - - * gmp-impl.h (popc_limb, ULONG_PARITY) [ev67, ev68]: Add gcc asm - versions using ctpop. - - * mpn/x86/k6/aorsmul_1.asm: Tweak some comments, remove M4_description - and M4_desc_retval used only in comments. - - * mpn/x86/k6/mul_basecase.asm: Add comment on using mpn_mul_1. - -2003-10-09 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/addlsh1_n.asm: Tweak for 0.25 c/l better loop speed. - * mpn/powerpc64/sublsh1_n.asm: Likewise. - -2003-10-09 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr cvs 2003-10-09. - - * tests/devel/try.c (_SC_PAGESIZE): Define from _SC_PAGE_SIZE on - systems which use that, eg. hpux 9. - -2003-10-07 Kevin Ryde <kevin@swox.se> - - * tune/freq.c (freq_sysctl_hw_model): Correction to last sscanf change. - - * configure.in: Check for psp_iticksperclktick in struct pst_processor. - * tune/freq.c (freq_pstat_getprocessor): Use this. - - * tests/devel/try.c (divisor_array): Add a couple of half-limb values. - - * acinclude.m4 (GMP_PROG_CC_WORKS): Correction to last change, need to - set result "yes" when cross compiling. - -2003-10-06 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_n.c: Use __GMPN_ADD_1/_GMPN_SUB_1 instead of - mpn_add_1 and mpn_sub_1. - - * mpn/pa64/aorslsh1_n.asm: Schedule register save and restore code. - -2003-10-05 Torbjorn Granlund <tege@swox.com> - - * mpn/pa64/mul_1.asm: Misc comment cleanups. - * mpn/pa64/addmul_1.asm: Likewise. - * mpn/pa64/submul_1.asm: Likewise. - - * mpn/pa64/README: Correct cycle counts. - - * mpn/pa64/aorslsh1_n.asm: New file. - -2003-10-04 Kevin Ryde <kevin@swox.se> - - * tune/freq.c (freq_sysctl_hw_model, freq_sunos_sysinfo, - freq_sco_etchw, freq_bsd_dmesg, freq_irix_hinv): Demand matching of - MHz etc at end of sscanf format string. In particular need this for - freq_bsd_dmesg on i486-pc-freebsd4.7 to avoid the 486 cpu being used - for the frequency. - - * tests/misc.c, tests/tests.h (tests_setjmp_sigfpe, - tests_sigfpe_handler, tests_sigfpe_done, tests_sigfpe_target, - tests_dbl_mant_bits): New. - - * configure.in (viac3*-*-*): Add gcc VIA c3 options. - - * mpfr/*: Update to mpfr cvs 2003-10-04. - - * tests/refmpn.c (refmpn_addlsh1_n, refmpn_sublsh1_n, - refmpn_rsh1add_n, refmpn_rsh1sub_n): Add ASSERTs for operand overlaps. - * tests/tests.h (refmpn_addlsh1_n, refmpn_sublsh1_n, refmpn_rsh1add_n, - refmpn_rsh1sub_n): Add prototypes. - - * tests/devel/try.c, tune/many.pl: Add mpn_addlsh1_n, mpn_sublsh1_n, - mpn_rsh1add_n, mpn_rsh1sub_n. - -2003-10-03 Torbjorn Granlund <tege@swox.com> - - * tests/refmpn.c (refmpn_addlsh1_n, refmpn_sublsh1_n, refmpn_rsh1add_n, - refmpn_rsh1sub_n): New functions. - -2003-10-03 Paul Zimmermann <Paul.Zimmermann@loria.fr> - - * mpn/generic/mul_n.c (toom3_interpolate): Use mpn_add_1/mpn_sub_1 - instead of MPN_INCR_/MPN_DECR_U. - -2003-10-02 Torbjorn Granlund <tege@swox.com> - - * configure.in (ia64*-*-hpux*): Fall back to +O1, not +O. - -2003-10-02 Kevin Ryde <kevin@swox.se> - - * configure.in (ia64*-*-hpux*): For cc, let +O optimization level - fallback if +O3 doesn't work. - - * acinclude.m4 (GMP_PROG_CC_WORKS): Add a test of __builtin_alloca - when available, to pick up Itanium HP-UX cc internal errors in +O2. - Provoking code by Torbjorn. - -2003-10-01 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/gmp-mparam.h: Retune. - - * mpn/asm-defs.m4: Handle aorslsh1_n. - - * configure.in (tmp_mulfunc): Handle aorslsh1_n. - - * mpn/ia64/aorslsh1_n.asm: New file. - - * mpn/ia64/aors_n.asm: New file, complete rewrite of mpn_add_n and - mpn_sub_n. - * mpn/ia64/add_n.asm: Replace by aors_n.asm. - * mpn/ia64/sub_n.asm: Replace by aors_n.asm. - -2003-10-01 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_C_DOUBLE_FORMAT): Make bad ARM last byte into a - separate case and consider it non-IEEE, since it looks like this is - due to some sort of restricted or incorrect software floats. - - * demos/calc/Makefile.am: Use automake yacc/lex support, seems fine in - separate objdir now. - - * cxx/dummy.cc: Moved from top-level dummy.cc. - * Makefile.am (libgmpxx_la_SOURCES): Update to cxx/dummy.cc, - correction to comment about this. - -2003-09-30 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c: Correct documentation of -split. - (TIME): Remove cast of result to double. - (main): Change timing variables to int. - (main): #ifdef LIMIT_RESOURCE_USAGE, don't convert numbers of more than - 100000 digits. - -2003-09-28 Torbjorn Granlund <tege@swox.com> - - * mpn/*/*.asm: Clean up spacing, tabify. - - * mpn/alpha/rshift.asm: Table cycle counts. - * mpn/alpha/lshift.asm: Likewise. - * mpn/alpha/ev5/rshift.asm: Likewise. - * mpn/alpha/ev5/lshift.asm: Likewise. - * mpn/alpha/ev6/add_n.asm: Likewise. - * mpn/alpha/ev6/sub_n.asm: Likewise. - - * mpn/ia64/lorrshift.asm: Amend comments about performance. - - * mpn/pa64/mul_1.asm: Fix comment typo. - * mpn/pa64/addmul_1.asm: Likewise. - * mpn/pa64/submul_1.asm: Likewise. - - * mpn/amd64/addlsh1_n.asm: Save/restore carry using two insn to break - recurrency. Add remarks about possible further speedup. - * mpn/amd64/sublsh1_n.asm: Likewise. - - * mpn/amd64/rsh1add_n.asm: Add remarks about possible further speedup. - * mpn/amd64/rsh1sub_n.asm: Likewise. - -2003-09-27 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/README: Update with POWER4/PPC970 pipeline info. - - * mpn/powerpc64/rsh1add_n.asm: New file. - * mpn/powerpc64/rsh1sub_n.asm: New file. - * mpn/powerpc64/rshift.asm: Rewrite. - * mpn/powerpc64/lshift.asm: Rewrite. - -2003-09-26 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/addlsh1_n.asm: New file. - * mpn/powerpc64/sublsh1_n.asm: New file. - -2003-09-25 Torbjorn Granlund <tege@swox.com> - - * tune/common.c (speed_mpn_addlsh1_n, speed_mpn_sublsh1_n, - speed_mpn_rsh1add_n, speed_mpn_rsh1sub_n): Conditionalize on - corresponding HAVE_NATIVE_*. - -2003-09-25 Kevin Ryde <kevin@swox.se> - - * mpz/combit.c: Use GMP_NUMB_BITS not BITS_PER_MP_LIMB. - - * demos/expr/exprfr.c: Allow for mpfr_inf_p, mpfr_nan_p and - mpfr_number_p merely returning non-zero, rather than 1 or 0. - - * demos/expr/exprfr.c, demos/expr/t-expr.c: Add erf, integer_p, zeta. - - * demos/expr/Makefile.am (LDADD): Update comments on $(LIBM). - -2003-09-24 Torbjorn Granlund <tege@swox.com> - - * tune/speed.c (routine): Add entries for mpn_addlsh1_n, mpn_sublsh1_n, - mpn_rsh1add_n, and mpn_rsh1sub_n. - - * tune/speed.h: Declare speed_mpn_addlsh1_n, speed_mpn_sublsh1_n, - speed_mpn_rsh1add_n, and speed_mpn_rsh1sub_n. - - * tune/common.c (speed_mpn_addlsh1_n, speed_mpn_sublsh1_n, - speed_mpn_rsh1add_n, speed_mpn_rsh1sub_n): New functions. - - * gmp-impl.h: Declare mpn_addlsh1_n, mpn_sublsh1_n, mpn_rsh1add_n, and - mpn_rsh1sub_n. - - * mpn/asm-defs.m4: Add define_mpn's for addlsh1_n, sublsh1_n, - rsh1add_n, and rsh1sub_n. - - * mpn/powerpc64/*.asm: Add cycle counts in consistent style. Misc - styling edits. - - * mpn/amd64/gmp-mparam.h: Retune. - - * configure.in: Add #undefs for HAVE_NATIVE_mpn_addlsh1_n, - HAVE_NATIVE_mpn_sublsh1_n, HAVE_NATIVE_mpn_rsh1add_n, - HAVE_NATIVE_mpn_rsh1sub_n. - (gmp_mpn_functions_optional): List addlsh1_n, sublsh1_n, rsh1add_n, - and rsh1sub_n. - - * mpn/amd64/addlsh1_n.asm: New file. - * mpn/amd64/sublsh1_n.asm: New file. - * mpn/amd64/rsh1add_n.asm: New file. - * mpn/amd64/rsh1sub_n.asm: New file. - -2003-09-24 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr cvs 2003-09-24. - - * acinclude.m4 (GMP_C_DOUBLE_FORMAT): Remove conftest* temporary files. - -2003-09-23 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (MUL_TOOM3_THRESHOLD, SQR_TOOM3_THRESHOLD): Now 128. - -2003-09-23 Kevin Ryde <kevin@swox.se> - - * gmp-h.in (gmp_randinit_set): Use __gmp_const rather than const. - -2003-09-22 Torbjorn Granlund <tege@swox.com> - - * tune/mul_n_mpn.c: (__gmpn_sqr_n): New #define. - * tune/mul_n_open.c (__gmpn_sqr_n): New #define. - - * mpn/generic/mul.c (mpn_sqr_n): Move from here... - * mpn/generic/mul_n.c (mpn_sqr_n): ...to here. - (mpn_sqr_n): Allocate workspace for toom3 using TMP_* mechanism except - for very large operands when !WANT_FFT. - - * mpn/generic/mul_n.c: Add a missing ";". Misc comment fixes. - - * mpn/generic/mul.c: Remove spurious #include <stdio.h>. - - * mpn/x86/k7/gmp-mparam.h: Retune. - - * mpn/generic/mul_n.c (mpn_mul_n): Allocate workspace for toom3 using - TMP_* mechanism except for very large operands when !WANT_FFT. - - * gmp-impl.h (MPN_TOOM3_MUL_N_TSIZE, MPN_TOOM3_SQR_N_TSIZE): - Define conditionally on WANT_FFT and HAVE_NATIVE_mpn_sublsh1_n. - (MPN_TOOM3_MAX_N): New #define. - - * mpn/amd64/gmp-mparam.h: Retune. - - * mpn/Makefile.am (TARG_DIST): Add amd64. - - * mpn/generic/sqr_basecase.c: Use mpn_addlsh1_n when available. - - * mpn/generic/mul_n.c: Use proper form for HAVE_NATIVE macros. - -2003-09-22 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr cvs 2003-09-22. - -2003-09-21 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium4/sse2/gmp-mparam.h (USE_PREINV_DIVREM_1, - USE_PREINV_MOD_1): Set to 1 for new asm versions. - - * mpfr/*: Update to mpfr cvs 2003-09-21. - -2003-09-21 Paul Zimmermann <Paul.Zimmermann@loria.fr> - - * mpn/generic/mul_n.c (mpn_toom3_mul_n): Conditionally use - mpn_sublsh1_n, mpn_rsh1add_n and mpn_rsh1sub_n, in addition to - mpn_addlsh1_n. Avoid all copying, at the expense of some additional - workspace. - - * gmp-impl.h (MPN_TOOM3_MUL_N_TSIZE, MPN_TOOM3_SQR_N_TSIZE): Accommodate - latest toom3 code. - -2003-09-19 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium4/sse2/divrem_1.asm, mpn/x86/pentium4/sse2/mod_1.asm: - New files. - -2003-09-16 Kevin Ryde <kevin@swox.se> - - * tune/speed.c (run_one): Don't scale the -1.0 not-available return. - Print "n/a" for times not-available. - -2003-09-13 Paul Zimmermann <Paul.Zimmermann@loria.fr> - - * mpn/generic/mul_n.c (toom3_interpolate): New function. - (mpn_toom3_mul_n, mpn_toom3_sqr_n): Call toom3_interpolate. - -2003-09-12 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_n.c (mpn_toom3_mul_n, mpn_toom3_sqr_n): Remove unused - variables. - (mpn_toom3_mul_n, mpn_toom3_sqr_n): Use offset `+ 1', not `+ 2' in last - MPN_DECR_U calls. - -2003-09-12 Paul Zimmermann <Paul.Zimmermann@loria.fr> - - * mpn/generic/mul_n.c (mpn_toom3_mul_n, mpn_toom3_sqr_n): Rewrite. - -2003-09-12 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (MPN_KARA_MUL_N_TSIZE, MPN_KARA_SQR_N_TSIZE): Reformulate - to use the same form as MPN_TOOM3_MUL_N_TSIZE. - (MPN_TOOM3_MUL_N_TSIZE, MPN_TOOM3_SQR_N_TSIZE): Update for new Toom3 - code requirements. - * mpn/generic/mul_n.c (evaluate3, interpolate3, add2Times): Remove. - (USE_MORE_MPN): Remove. - -2003-08-31 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr cvs 2003-08-31. - -2003-08-30 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr cvs 2003-08-30. - -2003-08-29 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/copyi.asm: New file. - * mpn/amd64/copyd.asm: New file. - * mpn/amd64/README: New file. - -2003-08-28 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/lshift.asm: New file. - * mpn/amd64/rshift.asm: New file. - * mpn/amd64/gmp-mparam.h: Retune. - -2003-08-23 Kevin Ryde <kevin@swox.se> - - * tune/freq.c (freq_getsysinfo): Correction to speed_cycletime value - established. - - * mpz/rootrem.c, gmp-h.in, gmp.texi (mpz_rootrem): Don't return - exactness indication, can get that from testing the remainder. - - * mpn/x86/k7/aors_n.asm, mpn/x86/k7/mmx/copyi.asm: Amend to comments - about loads and stores and what speed should be possible. - -2003-08-22 Torbjorn Granlund <tege@swox.com> - - * mpn/amd64/add_n.asm: New file. - * mpn/amd64/sub_n.asm: New file. - * mpn/amd64/mul_1.asm: New file. - * mpn/amd64/addmul_1.asm: New file. - * mpn/amd64/submul_1.asm: New file. - -2003-08-19 Kevin Ryde <kevin@swox.se> - - * longlong.h (add_ssaaaa, sub_ddmmss) [hppa 64]: Move down into main - __GNUC__ block. Exclude for _LONG_LONG_LIMB (ie. ABI=2.0n) since - these forms are only for ABI=2.0w. - - * longlong.h (count_leading_zeros) [__mcpu32__]: Check __mcpu32__ to - avoid bfffo on GCC 3.4 in CPU32 mode. Reported by Bernardo Innocenti. - - * longlong.h (count_trailing_zeros) [x86_64]: Use "%q0" to force - 64-bit register destination. Pointed out by Torbjorn. - - * mpz/combit.c: Correction to carry handling when extending a - negative, and use __GMPN_ADD_1. Correction to complement limb for a - negative when there's a non-zero low limb. - * tests/mpz/bit.c (check_clr_extend, check_com_negs): Exercise these. - - * demos/perl/GMP.xs, demos/perl/GMP.pm, demos/perl/test.pl: Add - get_d_2exp. - * demos/perl/GMP.xs, demos/perl/GMP.pm, demos/perl/GMP/Rand.pm, - demos/perl/test.pl: Add gmp_urandomb_ui, gmp_urandomm_ui. - (GMP::Rand::randstate): Accept a randstate object to copy. - * demos/perl/GMP.xs, demos/perl/GMP.pm, demos/perl/GMP/Mpz.pm, - demos/perl/test.pl: Add combit, rootrem. - -2003-08-19 Torbjorn Granlund <tege@swox.com> - - * tune/Makefile.am (EXTRA_DIST): Add amd64.asm. - -2003-08-17 Kevin Ryde <kevin@swox.se> - - * gmpxx.h [__MPFR_H]: Include full <iostream> for inlines. - * tests/cxx/t-headfr.cc: New file, exercising this. - * tests/cxx/Makefile.am: Add it. - - * tests/cxx/t-constr.cc: Include config.h for WANT_MPFR. - - * gmpxx.h: Correction to temp variable type in mpf -> mpfr assignment. - Reported by Derrick Bass. - * tests/cxx/t-assign.cc (check_mpfr): Exercise this. - - * configure.in (WANT_MPFR): AC_DEFINE this, for the benefit of - tests/cxx/t-*.cc. (Was always meant to have been defined.) - * tests/cxx/Makefile.am (INCLUDES): Add -I$(top_srcdir)/mpfr. - - * gmpxx.h: __gmp_default_rounding_mode -> __gmpfr_default_rounding_mode - (struct __gmp_hypot_function): Correction to mpfr_hypot addition. - * tests/cxx/t-misc.cc (check_mpfr_hypot): Corrections to mpfr/long - tests. - -2003-08-16 Torbjorn Granlund <tege@swox.com> - - * configure.in (amd64): New. - - * mpn/amd64/gmp-mparam.h: New file. - - * tune/amd64.asm: New file, derived in part from tune/pentium.asm. - -2003-08-15 Kevin Ryde <kevin@swox.se> - - * tune/freq.c (freq_irix_hinv): Reinstate, for the benefit of IRIX 6.2. - (freq_attr_get_invent): Conditionalize on INFO_LBL_DETAIL_INVENT too. - -2003-08-14 Kevin Ryde <kevin@swox.se> - - * mpq/get_d.c: Use mpn_get_d. - * tests/mpq/t-get_d.c (check_onebit): New test. - - * gmp.texi (Notes for Particular Systems): Under x86 cpu types, note - i386 is a fat binary, remove pentium4 recommendation since i386 is now - quite reasonable for p4. - (Notes for Particular Systems): Under Windows DLLs, remove caveat - about --enable-cxx now ok, update .lib creation for new libtool, - remove .exp not needed for MS C. - (Notes for Package Builds): i386 is a fat binary. - (Reentrancy): Remove SCO ctype.h note, don't want to list every system - misfeature, and was quite possibly for non-threading mode anyway. - (Autoconf): Remove notes on gmp 2 detection, too old to want to - encourage anyone to use. - (Karatsuba Multiplication): Correction to threshold increase/decrease - for a and b terms. Reported by Richard Brent and Paul Zimmermann. - Also add various further index entries. - - * tune/freq.c (freq_attr_get_invent): New function. - (freq_irix_hinv): Remove, in favour or freq_attr_get_invent. - * configure.in (AC_CHECK_FUNCS): Add attr_get. - (AC_CHECK_HEADERS): Add invent.h, sys/attributes.h, sys/iograph.h. - -2003-08-03 Kevin Ryde <kevin@swox.se> - - * tune/tuneup.c (tune_mul): Use MUL_KARATSUBA_THRESHOLD_LIMIT. - -2003-08-02 Kevin Ryde <kevin@swox.se> - - * mpn/asm-defs.m4: Tweak some comments, add hpux11 to m4wrap 0xFF - problem systems. - - * configure.in (*-*-sco3.2v5*): Remove lt_cv_archive_cmds_need_lc=no, - since libtool no longer uses it. This was a workaround fixing ctype.h - in SCO 5 shared libraries; not sure if libtool now gets it right on - its own, let's hope so. - - * configure.in, acinclude.m4 (GMP_PROG_HOST_CC): Remove, libtool no - longer demands HOST_CC. - - * configure.in: When C or C++ compiler not found, refer user to - config.log. - - * configure.in (i386-*-*): Turn i386 into a fat binary build. - * mpn/x86/fat/fat.c, mpn/x86/fat/fat_entry.asm, - mpn/x86/fat/gmp-mparam.h, mpn/x86/fat/gcd_1.c, mpn/x86/fat/mode1o.c: - New files. - * gmp-impl.h (struct cpuvec_t) [x86 fat]: New structure. - * longlong.h (COUNT_LEADING_ZEROS_NEED_CLZ_TAB) [x86 fat]: Define. - * mpn/asm-defs.m4 (foreach): New macro. - * mpn/x86/x86-defs.m4 (CPUVEC_FUNCS_LIST): New define. - * mpn/x86/sqr_basecase.asm: New file, primarily as a fallback for fat - binaries. - * mpn/x86/p6/gmp-mparam.h, mpn/x86/p6/mmx/gmp-mparam.h: Add comments - about fat binary SQR_KARATSUBA_THRESHOLD for p6 and p6/mmx. - - * configure.in: Add various supports for fat binaries, via fat_path, - fat_functions and fat_thresholds variables. - * acinclude.m4 (GMP_STRIP_PATH): Mung $fat_path too. - (GMP_FAT_SUFFIX, GMP_REMOVE_FROM_LIST): New macros. - * gmp-impl.h: Add various supports for fat binaries. - (DECL_add_n etc): New macros. - (mpn_mul_basecase etc): Define only if not already defined. - * mpn/asm-defs.m4 (m4_config_gmp_mparam): Mention fat binary. - (MPN): Use m4_unquote, for the benefit of fat binary name expansion. - * doc/configuration: Notes on fat binaries. - * gmp-impl.h (MUL_TOOM3_THRESHOLD_LIMIT): Define always. - (MUL_KARATSUBA_THRESHOLD_LIMIT): New define. - * mpn/generic/mul.c, mpn/generic/mul_n.c: Use these. - * tune/divrem1div.c, tune/divrem1inv.c, tune/mod_1_div.c, - tune/mod_1_inv.c: Define OPERATION_divrem_1 and OPERATION_mod_1, to - tell fat.h what's being done. - - * config.guess (alpha-*-*): Update comments on what configfsf.guess - does and doesn't do for us. - -2003-07-31 Kevin Ryde <kevin@swox.se> - - * config.guess: Remove $dummy.o files everywhere, in case vendor - compilers produce that even when not asked. - - * demos/perl/GMP.xs (class_or_croak): Rename "class" parameter to - avoid C++ keyword. - (coerce_ulong, coerce_long): Move croaks to stop g++ 3.3 complaining - about uninitialized variables. - - * demos/perl/INSTALL: Add notes on building with a DLL. - - * longlong.h (count_trailing_zeros) [x86_64]: Ensure bsfq destination - is a 64-bit register. Diagnosed by Francois G. Dorais. - -2003-07-31 Torbjorn Granlund <tege@swox.com> - - * longlong.h [ppc]: Remove nested test for vxworks. - -2003-07-24 Kevin Ryde <kevin@swox.se> - - * gmpxx.h (struct __gmp_binary_multiplies): Use mpz_mul_si for - mpz*long and long*mpz. - * tests/cxx/t-ops.cc (check_mpz): Exercise mpz*long and mpz*ulong. - - * cxx/ismpf.cc: Use std::locale decimal point when available. Expect - localeconv available always. - * tests/cxx/t-locale.cc: Enable check_input tests. - - * gmpxx.h (struct __gmp_hypot_function): Use mpfr_hypot. - * tests/cxx/t-misc.cc (check_mpfr_hypot): New tests. - - * tests/cxx/t-assign.cc, tests/cxx/t-binary.cc, tests/cxx/t-ops.cc, - tests/cxx/t-prec.cc, tests/cxx/t-ternary.cc, tests/cxx/t-unary.cc: - Include config.h for WANT_MPFR. - - * tests/mpz/bit.c (check_single): Correction to a diagnostic print. - -2003-07-24 Niels Möller <nisse@lysator.liu.se> - - * mpz/combit.c: New file. - * Makefile.am, mpz/Makefile.am: Add it. - * gmp-h.in (mpz_combit): Add prototype. - * tests/mpz/bit.c (check_single): Exercise mpz_combit. - -2003-07-16 Kevin Ryde <kevin@swox.se> - - * mpn/generic/get_d.c: Correction to infinity handling for large exp. - -2003-07-14 Kevin Ryde <kevin@swox.se> - - * mpz/get_d.c, mpz/get_d_2exp.c, mpf/get_d.c, mpf/get_d_2exp.c: Use - mpn_get_d. - - * mpn/generic/get_d.c: New file, based on mpz/get_d.c and insert-dbl.c. - * configure.in, mpn/Makefile.am: Add it. - * gmp-impl.h (mpn_get_d): Add prototype. - - * tests/mpn/t-get_d.c: New file. - * tests/mpn/Makefile.am: Add it. - - * tests/mpz/t-get_d_2exp.c (check_onebit, check_round): Test negatives. - (check_onebit): Add a few more bit sizes. - - * tests/misc.c, tests/tests.h (tests_isinf): New function. - -2003-07-12 Kevin Ryde <kevin@swox.se> - - * configure.in (GMP_PROG_CXX_WORKS): Include $CPPFLAGS, same as - automake does in the actual build. - - * acinclude.m4 (GMP_PROG_CXX_WORKS): In the namespace test, declare - namespace before trying to use. In std iostream test, provoke a - failure from Compaq C++ in pre-standard mode. - -2003-07-08 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_PROG_CC_WORKS): Use separate compiles for various - known problems, and indicate to the user the reason for rejecting. - (GMP_PROG_CXX_WORKS): Ditto, and insist on being able to execute each - compiled program. - -2003-07-05 Kevin Ryde <kevin@swox.se> - - * config.sub: Add comments to our alias transformations. - - * configfsf.sub, configfsf.guess: Update to 2003-07-04. - - * acinclude.m4 (GMP_PROG_CC_WORKS, GMP_PROG_CC_WORKS_LONGLONG): Show - failing program in config.log, per other autoconf tests. - - * configure.in (i786-*-*): Recognise as pentium4, per configfsf.sub. - -2003-06-28 Kevin Ryde <kevin@swox.se> - - * mpz/get_d_2exp.c, mpf/get_d_2exp.c: Avoid res==1.0 when floats round - upwards. - - * tests/mpz/t-get_d_2exp.c: New file. - * tests/mpz/Makefile.am (check_PROGRAMS): Add it. - * tests/mpf/t-get_d_2exp.c: New file. - * tests/mpf/Makefile.am (check_PROGRAMS): Add it. - * tests/x86call.asm, test/tests.h (x86_fldcw, x86_fstcw): New - functions. - * tests/misc.c, tests/tests.h (tests_hardware_getround, - tests_hardware_setround): New functions. - -2003-06-25 Kevin Ryde <kevin@swox.se> - - * mpn/sparc64/dive_1.c: New file. - - * mpn/sparc64/sparc64.h: New file. - * mpn/sparc64/mode1o.c: Remove things now in sparc64.h. - - * mpfr/*: Update to mpfr cvs 2003-06-25. - - * acinclude.m4 (GMP_PROG_CC_WORKS): In last change provoking gnupro - gcc, don't use ANSI style function definition. - -2003-06-22 Kevin Ryde <kevin@swox.se> - - * mpn/pa32/hppa1_1/udiv.asm: Remove .proc, .entry, .exit and .procend, - handled by PROLOGUE and EPILOGUE. Comment out .callinfo, per other - asm files. - - * gmpxx.h (mpz_class __gmp_binary_divides, __gmp_binary_modulus): Fix - long/mpz and long%mpz for dividend==LONG_MIN divisor==-LONG_MIN. - (mpz_class __gmp_binary_modulus): Fix mpz%long for negative dividend. - * tests/cxx/t-ops.cc (check_mpz): Add test cases for these, merging - operator/ and operator% sections for clarity. - -2003-06-21 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr cvs 2003-06-21. - - * acinclude.m4 (GMP_PROG_CC_WORKS): Add code by Torbjorn provoking an - ICE from gcc 2.9-gnupro-99r1 under -O2 -mcpu=ev6. - * configure.in (alpha*-*-* gcc_cflags_cpu): Fallback on -mcpu=ev56 for - this compiler. - - * gmpxx.h (get_d): Remove comments about long double, double is - correct for get_d, a future long double form would be get_ld. - -2003-06-19 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr cvs 2003-06-19. - - * mpn/generic/dive_1.c: Share src[0] fetch among all cases. No need - for separate final umul_ppmm in even case, make it part of the loop. - - * mpz/get_d_2exp.c, mpq/set_si.c, mpq/set_ui.c: Nailify. - - * mpf/iset_si.c: Rewrite using mpf/set_si.c code, in particular this - nailifies it. - * tests/mpf/t-set_si.c: Nailify tests. - - * mpf/iset_ui.c: Nailify, as per mpf/set_ui.c - * tests/mpf/t-set_ui.c: New file. - * tests/mpf/Makefile.am (check_PROGRAMS): Add it. - -2003-06-15 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr cvs 2003-06-15. - - * mpn/x86/k6/mode1o.asm: Remove a bogus ASSERT. - -2003-06-12 Kevin Ryde <kevin@swox.se> - - * configure.in (--enable-assert): Emit WANT_ASSERT to config.m4. - * mpn/powerpc32/powerpc-defs.m4, mpn/x86/x86-defs.m4 (ASSERT): Check - WANT_ASSERT is defined. - - * mpn/sparc32/v9/udiv.asm: Amend heading, this file is for sparc v9. - - * tests/cxx/Makefile.am (TESTS_ENVIRONMENT): In libtool openbsd hack, - discard error messages from cp, for the benefit of --disable-shared or - systems not using names libgmp.so.*. - - * tests/devel/try.c (try_one): When overlapping, copy source data - after filling dst. Previously probably used only DEADVAL in - overlapping cases. - -2003-06-11 Torbjorn Granlund <tege@swox.com> - - * mpf/random2.c: Rewrite. Ignore sign of exp parameter. - -2003-06-10 Kevin Ryde <kevin@swox.se> - - * mpn/sparc64/mode1o.c: New file. - -2003-06-09 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/lshift.asm: Add more cycle counts. - * mpn/powerpc32/rshift.asm: Add more cycle counts. - - * mpn/ia64/addmul_1.asm: Reformat comments for 80 columns. - - * gmp-impl.h (udiv_qrnnd_preinv1): New name for udiv_qrnnd_preinv. - (udiv_qrnnd_preinv2): New name for udiv_qrnnd_preinv2norm. - (udiv_qrnnd_preinv): New #define, making udiv_qrnnd_preinv2 - the default. - * tune/speed.c: Corresponding changes. - * tune/speed.h: Likewise. - * tune/common.c: Likewise. - - * mpf/get_str.c: Simplify `off' computation. - - * longlong.h: Tabify. - -2003-06-09 Kevin Ryde <kevin@swox.se> - - * gmp.texi (ABI and ISA): FreeBSD has sparc64 too, just say "BSD" to - cover all flavours. - * configure.in: Ditto in some comments. - - * mpfr/*: Update to mpfr cvs 2003-06-09. - - * tests/cxx/Makefile.am (LDADD): Add -L$(top_builddir)/$(LIBS), for - the benefit of gcc 3.2 on itanium2-hp-hpux11.22. - - * tune/many.pl (mul_2): Add speed routine settings. - (MAKEFILE): Close when done, for the benefit of development hackery. - -2003-06-08 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr cvs 2003-06-08. - - * mpn/x86/x86-defs.m4 (femms): Remove fallback to emms. - (cmovCC, psadbw): Remove simulated versions. - (cmov_available_p, psadbw_available_p): Remove. - This trickery was only ever for development purposes on machines - without those instructions. Removing it simplifies gmp and in - particular avoids complications for fat binary builds. Development - can be done with a wrapper around "as" if really needed. - - * mpn/x86/divrem_1.asm: Don't use loop_or_decljnz, now K6 has its own - mpn/x86/k6/divrem_1.asm. Amend K6 comments now moved to there. - * mpn/x86/x86-defs.m4 (loop_or_decljnz): Remove, no longer used. - - * mpn/x86/k6/divrem_1.asm: New file, derived from mpn/x86/divrem_1.asm. - - * mpn/x86/k6/pre_mod_1.asm: Remove comments now in mpn/x86/mod_1.asm. - - * mpn/x86/mod_1.asm: Put mpn_mod_1c after mpn_mod_1 for better branch - prediction. Put done_zero at end for less wastage in alignment. Use - decl+jnz unconditionally since in fact it's ok on k6. Amend comments. - -2003-06-07 Kevin Ryde <kevin@swox.se> - - * mpn/generic/mode1o.c: Fix ASSERTs on return value. - - * gmp.texi (Build Options): Add viac3 and viac32 cpu types. - (ABI and ISA): Note on sparcv9 ABI=32 vs ABI=64 speed. More indexing. - - * configfsf.guess, configfsf.sub: Update to 2003-06-06. - * config.guess: Remove $RANDOM hack supporting netbsd 1.4, not needed - by new configfsf.guess. - -2003-06-06 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/submul_1.asm: Add branch over .align block. - -2003-06-05 Torbjorn Granlund <tege@swox.com> - - * longlong.h (add_ssaaaa) [pa64]: Output zero operand as register 0. - Allow more immediate operands. - (sub_ddmmss) [pa64]: Likewise. - (add_ssaaaa) [pa32]: Likewise. - (sub_ddmmss) [pa32]: Likewise. - - * mpn/pa64: Change ".level 2.0W" to ".level 2.0w" to please - picky GNU assembler. - -2003-06-05 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Integer Special Functions): In mpz_array_init, fix type - shown for integer_array and give an example use. - -2003-06-04 Torbjorn Granlund <tege@swox.com> - - * mpf/set_str.c (mpf_set_str): Work around gcc 2 bug triggered on - alpha. - -2003-06-03 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium/README: Add 7 c/l mmx mul_1, tweak wordings. - - * acinclude.m4 (GMP_C_DOUBLE_FORMAT): Use octal char constants in test - program, hex is not supported by K&R. - -2003-06-02 Torbjorn Granlund <tege@swox.com> - - * mpn/mips64/divrem_1.asm: New file. - -2003-06-01 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/lshift.asm: Reformat code. - * mpn/powerpc32/rshift.asm: Reformat code. - -2003-05-30 Kevin Ryde <kevin@swox.se> - - * tests/misc.c (tests_start): Set stdout and stderr to unbuffered, to - avoid any chance of losing output on segv etc. - -2003-05-28 Torbjorn Granlund <tege@swox.com> - - * mpf/get_str.c: Move label `done' to match TMP_MARK and TMP_FREE. - Remove redundant variable prec. - -2003-05-26 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/convert.c: Test bases up to 62. - - * tests/mpf/t-conv.c: Test bases up to 62. - - * demos/pexpr.c: Don't iterate to get accurate timing. - - * mpf/set_str.c (mpn_pow_1_highpart): Cleanup. - - * mp_dv_tab.c: Fix typo. - - * mpf/get_str.c: Rewrite (now sub-quadratic). - -2003-05-22 Kevin Ryde <kevin@swox.se> - - * tests/mpn/t-divrem_1.c: New file. - * tests/mpn/Makefile.am: Add it. - -2003-05-22 Torbjorn Granlund <tege@swox.com> - - * config.sub: Recognize viac3* processors. - -2003-05-20 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/addmul_2.asm: New file. - -2003-05-19 Torbjorn Granlund <tege@swox.com> - - * configure.in: Recognize alphaev7* as alphaev67. - - * config.guess: Recognize viac3* processors. - * configure.in: Set up path for viac3* processors. - * acinclude.m4 (X86_PATTERN): Include viac3* processors. - -2003-05-19 Kevin Ryde <kevin@swox.se> - - * tune/freq.c (freq_pstat_getprocessor): New function. - (freq_all): Use it. - * configure.in (AC_CHECK_HEADERS): Add sys/pstat.h. - (AC_CHECK_FUNCS): Add pstat_getprocessor. - -2003-05-15 Kevin Ryde <kevin@swox.se> - - * mpn/generic/mul_fft.c (mpn_mul_fft_decompose): Remove "inline", - since the code is a bit too big. gcc doesn't actually inline when - alloca (TMP_ALLOC) is used anyway. - -2003-05-13 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Notes for Particular Systems): Libtool directory is .libs - not _libs for mingw dll. Reported by Andreas Fabri. - -2003-05-07 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_PROG_CC_WORKS): Add code to generate sse2/xmm code - from gcc -march=pentium4, to check the assembler supports that. - (GMP_GCC_PENTIUM4_SSE2, GMP_OS_X86_XMM): New macros. - * configure.in (pentium4-*-*): Use them to see if gcc -march=pentium4 - (with sse2) is ok. - -2003-05-06 Kevin Ryde <kevin@swox.se> - - * mpz/com.c: Rate size==0 as UNLIKELY, fix comment to mpn_add_1. - - * tune/freq.c (<sys/sysinfo.h>): Include only when needed for - getsysinfo(), to avoid a problem with this file on AIX 5.1. - -2003-05-03 Torbjorn Granlund <tege@swox.com> - - * mpf/set_str.c: Do not ignore supposedly superfluous digits (in part - reverting last change). - -2003-05-03 Kevin Ryde <kevin@swox.se> - - * gmp.texi: Use @code for files in @cindex entries, it looks nicer - than @file. - - * Makefile.am: Note gmp 4.1.1 and 4.1.2 version info. - - * configure.in, acinclude.m4 (GMP_CRAY_OPTIONS): New macro for Cray - system setups, letting AC_REQUIRE do its job instead of a hard coded - AC_PROG_EGREP. - - * config.guess: Amend fake RANDOM to avoid ". configfsf.guess" which - segfaults on Debian "ash" 0.4.16. - -2003-05-01 Kevin Ryde <kevin@swox.se> - - * configure.in (AC_CHECK_FUNCS): Add getsysinfo. - (AC_CHECK_HEADERS): Add sys/sysinfo.h and machine/hal_sysinfo.h. - * tune/freq.c (freq_getsysinfo): New function. - (freq_all): Use it. - (freq_sysctlbyname_i586_freq, freq_sysctlbyname_tsc_freq, - freq_sysctl_hw_cpufrequency, freq_sysctl_hw_model): Set - speed_cycletime before trying to print it, when verbose. - -2003-04-28 Torbjorn Granlund <tege@swox.com> - - * mpf/set_str.c: Major overhaul. - (mpn_pow_1_highpart): New helper function, meat extracted from - mpf_set_str. - -2003-04-24 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_GCC_ARM_UMODSI): Quote result string against m4. - - * configure, ltmain.sh, aclocal.m4: Update to libtool 1.5. - - * longlong.h (add_ssaaaa) [all]: Remove first "%" commutative in each, - since gcc only supports one per asm. - - * printf/doprnt.c: Add M for mp_limb_t. - * tests/misc/t-printf.c: Exercise this. - - * tests/mpz/t-cmp_d.c: Test infinities. - * tests/mpf/t-cmp_d.c: New file. - * tests/mpf/Makefile.am: Add it. - - * mpz/cmp_d.c, mpz/cmpabs_d.c, mpf/cmp_d.c: NaN invalid, Inf bigger - than any value. - * mpz/set_d.c, mpq/set_d.c, mpf/set_d.c: Nan or Inf invalid. - - * configure.in (AC_CHECK_FUNCS): Add raise. - * invalid.c: New file. - * Makefile.am: Add it. - * gmp-impl.h (__gmp_invalid_operation): Add prototype. - (DOUBLE_NAN_INF_ACTION): New macro. - - * tests/trace.c, tests/tests.h (d_trace): New function. - * tests/misc.c, tests/tests.h (tests_infinity_d): New function. - * tests/misc.c (mpz_erandomb, mpz_errandomb): Use gmp_urandomm_ui. - - * tune/tuneup.c, tune/common.c, tests/devel/try.c: Cast various - mp_size_t values for printf %ld in case mp_size_t==int. Use - gmp_printf for mp_limb_t values. - - * gmp.texi (Nomenclature and Types): Add mp_exp_t, mp_size_t, - gmp_randstate_t. Note ulong for bit counts and size_t for byte - counts. Don't bother with @noindent. - (Debugging): New valgrind is getting MMX/SSE. - (Integer Comparisons): mpz_cmp_d and mpz_cmpabs_d on NaNs and Infs. - (Float Comparison): mpf_cmp_d behaviour on NaNs and Infs. - (Low-level Functions): Note with mpn_hamdist what hamming distance is. - (Formatted Output Strings): Add type M. - (Internals): Remove remarks on ulong bits and size_t bytes. Move int - field remarks to ... - (Integer Internals, Float Internals): ... here. - -2003-04-19 Kevin Ryde <kevin@swox.se> - - * configure.in (*sparc*-*-* ABI=32): Add umul to extra_functions. - - * mpn/x86/p6/mul_basecase.asm: New file. - -2003-04-18 Kevin Ryde <kevin@swox.se> - - * configure.in (m68060-*-*): Fallback to gcc -m68000 when -m68060 not - available, and don't use mpn/m68k/mc68020 asm routines. (Avoids 32x32 - mul and 64/32 div which trap to the kernel on 68060. Advice by - Richard Zidlicky.) - * mpn/m68k/README: Update notes on directory usage. - - * tests/cxx/Makefile.am (TESTS_ENVIRONMENT): Add a hack to let the - test programs run with a shared libgmpxx on openbsd 3.2. - - * gmp.texi (Language Bindings): Add Guile. - -2003-04-12 Kevin Ryde <kevin@swox.se> - - * configure.in (cygwin*, mingw*, pw32*, os2*): Add - -Wl,--export-all-symbols to GMP_LDFLAGS, no longer the default in - latest mingw and libtool. - - * acinclude.m4 (GMP_ASM_COFF_TYPE): New macro. - * configure.in (x86s): Use it. - * mpn/x86/x86-defs.m4 (COFF_TYPE): New macro. - (PROLOGUE_cpu): Use it, for the benefit of mingw DLLs. - - * gmp-impl.h (mpn_copyi, mpn_copyd): Add __GMP_DECLSPEC. - - * gmp.texi (Known Build Problems): Remove windows test program .exe - repeated built, fixed by new libtool. Remove MacOS C++ shared library - creation, fixed by new libtool. - (Notes for Package Builds, Known Build Problems): Remove DESTDIR notes - on libgmpxx, fixed in new libtool. - -2003-04-10 Torbjorn Granlund <tege@swox.com> - - * configure.in: Match turbosparc. - * config.guess: Recognize turbosparc (just for *bsd for now). - -2003-04-09 Kevin Ryde <kevin@swox.se> - - * mpf/mul_ui.c [nails]: Call mpf_mul to handle v > GMP_NUMB_MAX. - - * tests/mpz/t-mul.c (main): Don't try FFT sizes when FFT disabled via - MP_SIZE_T_MAX, eg. for nails. - - * tests/cxx/t-ternary.cc: Split up tests to help compile speed and - memory usage. - - * tests/devel/try.c: Print seed under -R, add -E to reseed, use ulong - for seed not uint. - - * gmp.texi: Add @: after various abbreviations, more index entries. - (leftarrow): New macro, for non-tex. - (Random State Initialization): Remove commented gmp_randinit_lc, not - going to be implemented. - (Random Number Algorithms): New section. - (References): Add Matsumoto and Nishimura on Mersenne Twister, add - Bertot, Magaud and Zimmermann on GMP Square Root. - -2003-04-06 Kevin Ryde <kevin@swox.se> - - * tests/mpz/t-gcd_ui.c: New file. - * tests/mpz/Makefile.am: Add it. - - * mpz/gcd_ui.c: Correction to return value on longlong limb systems, - limb might not fit a ulong. - -2003-04-04 Kevin Ryde <kevin@swox.se> - - * configure, aclocal.m4, ltmain.sh: Update to libtool cvs snapshot - 2003-04-02. - -2003-04-02 Kevin Ryde <kevin@swox.se> - - * configure.in (*-*-cygwin*): No longer force lt_cv_sys_max_cmd_len, - libtool has addressed this now. - (AC_PROVIDE_AC_LIBTOOL_WIN32_DLL): Remove this, libtool _LT_AC_LOCK - no longer needs it. - - * acinclude.m4 (GMP_PROG_AR): Also set ac_cv_prog_AR and - ac_cv_prog_ac_ct_AR when adding flags to AR, so they're not lost by - libtool's call to AC_CHECK_TOOL. - -2003-04-01 Kevin Ryde <kevin@swox.se> - - * configure, aclocal.m4, ltmain.sh: Update to libtool cvs snapshot - 2003-03-31. - - * configure.in (AC_PROG_F77): Add a dummy AC_PROVIDE to stop libtool - running F77 probes. - - * randlc2x.c (gmp_rand_lc_struct): Add comments about what exactly is - in each field. - (randseed_lc): Rename seedp to seedz to avoid confusion with seedp in - the lc function. Suggested by Pedro Gimeno. - (gmp_randinit_lc_2exp): Use __GMP_ALLOCATE_FUNC_TYPE. No need for - "+1" in mpz_init2 of _mp_seed. Don't bother with mpz_init2 for _mp_a. - -2003-03-29 Kevin Ryde <kevin@swox.se> - - * configure.in (m68k-*-*): Use -O2, no longer need to fallback to -O. - * acinclude.m4 (GMP_GCC_M68K_OPTIMIZE): Remove macro. - - * configure.in (AC_CHECK_TYPES): Add notes on why tested. - - * gmp.texi (GMPrefu, GMPpxrefu, GMPreftopu, GMPpxreftopu): New macros, - use them for all external references to get URLs into HTML output. - (Random State Initialization): Add gmp_randinit_set. - (Random State Miscellaneous): New section. - -2003-03-29 Kevin Ryde <kevin@swox.se> - - * randbui.c, randmui.c: New files. - * Makefile.am: Add them. - * gmp-h.in (gmp_urandomb_ui, gmp_urandomm_ui): Add prototypes. - * tests/rand/t-urbui.c, tests/rand/t-urmui.c: New files. - * tests/rand/Makefile.am: Add them. - - * gmp-impl.h (gmp_randstate_srcptr): New typedef. - (gmp_randfnptr_t): Add randiset_fn. - * randiset.c: New file. - * Makefile.am: Add it. - * gmp-h.in (gmp_randinit_set): Add prototype. - * randlc2x.c, randmt.c: Add gmp_randinit_set support. - * tests/rand/t-iset.c: New file. - * tests/rand/Makefile.am: Add it. - - * tests/misc.c, tests/tests.h (call_rand_algs): New function. - -2003-03-27 Kevin Ryde <kevin@swox.se> - - * mpz/bin_uiui.c: Use plain "*" for kacc products rather than - umul_ppmm since high not needed, except for an ASSERT now amended. - -2003-03-26 Kevin Ryde <kevin@swox.se> - - * demos/expr/exprfr.c (cbrt, cmpabs, exp2, gamma, nextabove, - nextbelow, nexttoward): New functions. - * demos/expr/t-expr.c: Exercise these. - - * mpfr/*: Update to mpfr cvs 2003-03-26. - - * gmp-impl.h (MPZ_REALLOC): Use UNLIKELY, to expect no realloc. - - * tune/time.c (cycles_works_p): Scope variables down to relevant part - to avoid warnings about unused. - - * configfsf.guess, configfsf.sub: Update to 2003-02-22. - * config.guess: Fake a $RANDOM variable when running configfsf.guess, - to workaround a problem on m68k NetBSD 1.4.1. - - * mpz/fac_ui.c: Remove unused variable "z1". - - * tune/freq.c (freq_irix_hinv): Allow "Processor 0" line from IRIX 6.5. - -2003-03-24 Torbjorn Granlund <tege@swox.com> - - * randlc2x.c (randget_lc): Remove write-only variable rn. - * mpf/eq.c: Remove write-only variable usign. - * gen-psqr.c (main): Remove write-only variable numb_bits. - -2003-03-17 Torbjorn Granlund <tege@swox.com> - - * Makefile.am (libgmp_la_SOURCES): Add mp_dv_tab.c. - (libmp_la_SOURCES): Add mp_dv_tab.c. - - * mpn/alpha/invert_limb.asm: Add a few comments. - - * mp_dv_tab.c: New file, defining __gmp_digit_value_tab. - - * mpz/set_str.c: Get rid of function digit_value_in_base and use table - __gmp_digit_value_tab instead. - * mpz/inp_str.c: Likewise. - * mpf/set_str.c: Likewise. - * mpbsd/min.c: Likewise. - * mpbsd/xtom.c: Likewise. - - * mpz/set_str.c: Allow bases <= 62. Return error for invalid bases. - * mpz/inp_str.c: Likewise. - * mpf/set_str.c: Likewise. - * mpz/out_str.c: Likewise. - * mpz/get_str.c: Likewise. - * mpf/get_str.c: Likewise. - - * mpz/inp_str.c: Restructure to allocate more string space just - before needed. - * mpbsd/min.c: Likewise. - - * longlong.h (__udiv_qrnnd_c): Remove redundant casts. - (32-bit sparc): Test HAVE_HOST_CPU_supersparc in addition to various - sparc_v8 spellings. - -2003-03-17 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr cvs 2003-03-17. - -2003-03-15 Kevin Ryde <kevin@swox.se> - - * Makefile.am (EXTRA_libgmp_la_SOURCES): Use this for TMP_ALLOC - sources, instead of a libdummy.la. - -2003-03-16 Torbjorn Granlund <tege@swox.com> - - * config.guess: Recognize supersparc and microsparc for *BSD systems. - Generalize some superscalar recognition patterns. - -2003-03-14 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/udiv.asm: New file. - -2003-03-13 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64: Table cycle counts. Update some comments. - - * mpn/powerpc64/divrem_1.asm: New file. - -2003-03-10 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul.c (mpn_mul): Don't blindly expect - MUL_KARATSUBA_THRESHOLD to be a constant. - -2003-03-07 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul.c (mpn_mul): New operand splitting code for - avoiding cache misses when un >> MUL_KARATSUBA_THRESHOLD > vn. - (MUL_BASECASE_MAX_UN): New #define, default to 500 for now. - -2003-03-07 Kevin Ryde <kevin@swox.se> - - * Makefile.am: Put gmp.h and mp.h under $(exec_prefix)/include. - * gmp.texi (Build Options): Add notes on this. - Reported by Vincent Lefèvre. - -2003-03-06 Kevin Ryde <kevin@swox.se> - - * configure.in (alpha*-*-* gcc): Add asm option before testing -mcpu, - for the benefit of gcc 2.9-gnupro-99r1 on alphaev68-dec-osf5.1 which - doesn't otherwise put the assembler in the right mode for -mcpu=ev6. - -2003-03-05 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/powerpc-defs.m4: Set up renaming for v registers. - - * mpz/powm.c (redc): Instead of repeated mpn_incr_u invocations, - accumulate carries and add at the end. - (mpz_powm): Trim tp allocation, now as redc doesn't need carry guard. - -2003-02-25 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/pentium4/copyd.asm: Correct header comment. - - * mpn/arm/addmul_1.asm: Correct cycle counts. - * mpn/arm/submul_1.asm: Likewise. - -2003-02-20 Kevin Ryde <kevin@swox.se> - - * demos/factorize.c (factor_using_pollard_rho): Test k>0 to avoid - infinite loop if k=0 and gcd!=1 reveals a factor. Reported by John - Pongsajapan. - - * gmp.texi, fdl.texi: Update to FDL version 1.2. - -2003-02-18 Torbjorn Granlund <tege@swox.com> - - * mpn/arm/mul_1.asm: Fix typo introduced in last change. - -2003-02-17 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/gmp-mparam.h: Retune. - - * mpn/sparc64/copyi.asm: Add some header comments. - * mpn/sparc64/copyd.asm: Likewise. - - * mpn/arm/mul_1.asm: Put vl operand last for umull/umlal. - Add some header comments. - * mpn/arm/addmul_1.asm: Rewrite. - * mpn/arm/submul_1.asm: Rewrite. - * mpn/arm/gmp-mparam.h: Retune. - -2003-02-16 Torbjorn Granlund <tege@swox.com> - - * mpn/arm/copyi.asm: New file. - * mpn/arm/copyd.asm: New file. - -2003-02-16 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_C_DOUBLE_FORMAT): Tolerate incorrect last data - byte seen on an arm system. - -2003-02-15 Torbjorn Granlund <tege@swox.com> - - * mpn/arm/gmp-mparam.h: Retune. - -2003-02-13 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/750/com_n.asm: Add more cycle counts. - -2003-02-13 Kevin Ryde <kevin@swox.se> - - * configure.in (AC_PREREQ): Bump to 2.57. - - * configure.in, acinclude.m4 (GMP_GCC_WA_OLDAS): New macro, applying - -Wa,-oldas only when necessary. - - * configure.in (powerpc*-*-*): Don't use -Wa,-mppc with gcc, it - overrides options recent gcc adds for -mcpu, making generated code - fail to assemble. - - * tune/tuneup.c (mpn_fft_table): Remove definition, it's in mul_fft.c. - -2003-02-12 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/pentium4/sse2/gmp-mparam.h: Retune. - * mpn/x86/k7/gmp-mparam.h: Retune. - * mpn/x86/k6/gmp-mparam.h: Retune. - * mpn/x86/p6/gmp-mparam.h: Retune. - * mpn/x86/p6/mmx/gmp-mparam.h: Retune. - - * tests/mpz/t-mul.c (main): Rewrite FFT testing code. - -2003-02-10 Torbjorn Granlund <tege@swox.com> - - * config.guess: Recognize "power2" systems. - - * mpn/powerpc64/gmp-mparam.h: Fix indentation. - * mpn/power/gmp-mparam.h: Retune. - * mpn/alpha/ev6/nails/gmp-mparam.h: Retune. - * mpn/sparc64/gmp-mparam.h: Retune. - * mpn/pa64/gmp-mparam.h: Retune. - * mpn/sparc32/v8/supersparc/gmp-mparam.h: Retune. - * mpn/sparc32/v8/gmp-mparam.h: Retune. - * mpn/mips64/gmp-mparam.h: Retune. - * mpn/alpha/ev6/gmp-mparam.h: Retune. - * mpn/powerpc32/gmp-mparam.h: Retune. - * mpn/powerpc32/750/gmp-mparam.h: Retune. - * mpn/alpha/ev5/gmp-mparam.h: Retune. - * mpn/m68k/gmp-mparam.h: Retune. - * mpn/cray/gmp-mparam.h: Set GET_STR_PRECOMPUTE_THRESHOLD. - - * configure.in: Undo this, problem doesn't happen any more: - (mips64*-*-*): Pass just -O1 to cc, to work around compiler bug. - -2003-02-03 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (MPN_NORMALIZE, MPN_NORMALIZE_NOT_ZERO): Add parens - around macro parameters. Reported by Jason Moxham. - -2003-02-01 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Low-level Functions): No overlap permitted by mpn_mul_n. - Reported by Jason Moxham. - (Formatted Input Strings): Correction to strtoul cross reference - formatting. - (BSD Compatible Functions): Add index entry for MINT. - -2003-01-29 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (mpn_mul_fft): Now returns int. - -2003-01-29 Paul Zimmermann <Paul.Zimmermann@loria.fr> - - * mpn/generic/mul_fft.c: Major rewrite. - -2003-01-25 Kevin Ryde <kevin@swox.se> - - * config.guess (powerpc*-*-*): Remove $dummy.core file when mfpvr - fails on NetBSD. - (trap): Remove $dummy.core on abnormal termination too. - - * mpfr/*: Update to mpfr cvs 2003-01-25. - -2003-01-24 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/README: Update cycle counts to match current code. - -2003-01-18 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr cvs 2003-01-18. - -2003-01-17 Torbjorn Granlund <tege@swox.com> - - * gmp.texi: Canonicalize URLs. - -2003-01-15 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Notes for Particular Systems): Add hardware floating point - precision mode. - - * mpfr/*, configure, aclocal.m4, config.in: Update to mpfr cvs - 2003-01-15. - -2003-01-11 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to mpfr cvs 2003-01-11. - -2003-01-09 Kevin Ryde <kevin@swox.se> - - * mpfr/get_str.c: Update to mpfr cvs 2003-01-09. - - * doc/configuration: Various updates. - -2003-01-06 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/copyi.asm: Avoid `nop' mnemonic, unsupported on Cray. - * mpn/alpha/copyd.asm: Likewise. - -2003-01-05 Kevin Ryde <kevin@swox.se> - - * demos/expr/t-expr.c (check_r): Tolerate mpfr_set_str new return - value. - - * configure, aclocal.m4 (*-*-osf4*, *-*-osf5*): Regenerate with - libtool patch to avoid bash printf option problem when building shared - libraries with cxx. - - * configure.in (pentium4-*-*): Use "-march=pentium4 -mno-sse2" since - sse2 causes buggy code from gcc 3.2.1 and is only supported on new - enough kernels. - - * acinclude.m4 (GMP_PROG_NM): Add some notes about failures, per - report by Krzysztof Kozminski. - - * gmp-h.in (mpz_mdivmod_ui, mpz_mmod_ui): Add parens around "r". - - * gmp-h.in (__GMP_CAST): New macro, clean to g++ -Wold-style-cast. - (GMP_NUMB_MASK, mpz_cmp_si, mpq_cmp_si, mpz_odd_p, mpn_divexact_by3, - mpn_divmod): Use it. Reported by Krzysztof Kozminski. - (mpz_odd_p): No need for the outermost cast to "int". - * tests/cxx/t-cast.cc: New file. - * tests/cxx/Makefile.am: Add it. - -2003-01-04 Kevin Ryde <kevin@swox.se> - - * mpfr/set_str.c: Update to mpfr cvs 2003-01-04. - - * demos/expr/exprfra.c (e_mpfr_number): Tolerate recent mpfr_set_str - returning count of characters accepted. - -2003-01-03 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/copyi.asm: New file. - * mpn/alpha/copyd.asm: New file. - -2003-01-03 Kevin Ryde <kevin@swox.se> - - * demos/expr/t-expr.c: Use __gmpfr on some mpfr internals that have - changed. - - * mpfr/*, aclocal.m4, config.in, configure: Update to mpfr cvs - 2003-01-03. - - * gmp.texi (Introduction to GMP): Mention release announcements - mailing list, and put home page and ftp before mailing lists. - -2002-12-28 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_fft.c (mpn_fft_next_size): Simplify. - -2002-12-28 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (M68K_PATTERN): New macro. - (GMP_GCC_M68K_OPTIMIZE): Use it to avoid m6811 and friends. - * configure.in: Ditto. - - * tests/mpz/t-import.c, tests/mpz/t-export.c: Use '\xHH' to avoid - warnings about char overflows. - * acinclude.m4 (GMP_C_DOUBLE_FORMAT): Ditto. - -2002-12-28 Pedro Gimeno <pggimeno@wanadoo.es> - - * randmt.c (randseed_mt, default_state): Fix off-by-one bug on padding. - (randseed_mt): Add ASSERT checking result of mpz_export. - -2002-12-24 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Integer Import and Export): Clarify treatment of signs, - reported by Kent Boortz. - - * randmt.c: Use gmp_uint_least32_t. - (randseed_mt): Add nails to mpz_export in case mt[i] more than 32 bits. - - * gmp-impl.h (gmp_uint_least32_t): New typedef, replacing GMP_UINT32. - * configure.in (AC_CHECK_TYPES): Add uint_least32_t. - (AC_CHECK_SIZEOF): Add unsigned short. - -2002-12-22 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (ULONG_PARITY) [generic C]: Mask result to a single bit. - (ULONG_PARITY) [_CRAY, __ia64]: New macros. - * tests/t-parity.c: New test. - * tests/Makefile.am (check_PROGRAMS): Add it. - - * longlong.h (count_trailing_zeros) [ia64]: New macro. - - * tests/t-count_zeros.c (check_various): Remove unused variable "n". - - * mpn/x86/README: Revise notes on PIC, PLT and GOT. - - * demos/perl/GMP.xs, demos/perl/GMP.pm, demos/perl/test.pl: Add "mt" - to GMP::Rand::randstate. - -2002-12-22 Pedro Gimeno <pggimeno@wanadoo.es> - - * randmt.c (randseed_mt): Fix bug that might cause the generator to - return all zeros with certain seeds. Fix WARM_UP==0 case. - (gmp_randinit_mt): Initialize to a known state by default. - (randget_mt): Remove check for uninitialized buffer: no longer needed. - (recalc_buffer): Use ?: instead of two-element array. - - * tests/rand/t-mt.c: New test. - * tests/rand/Makefile.am (check_PROGRAMS): Add it. - -2002-12-21 Kevin Ryde <kevin@swox.se> - - * cxx/osdoprnti.cc: Use <cstdarg> and <cstring> rather than <stdarg.h> - and <string.h>. No need for <stdio.h>. - - * demos/expr/expr.c, demos/expr/exprfa.c, demos/expr/exprfra.c, - demos/expr/exprza.c: Use mp_get_memory_functions, not - __gmp_allocate_func etc. - * demos/expr/t-expr.c: Don't use gmp-impl.h. - (numberof): New macro. - - * gmp-h.in, gmp-impl.h (__gmp_allocate_func, __gmp_reallocate_func, - __gmp_free_func): Move declarations to gmp-impl.h - - * mp_get_fns.c: New file. - * Makefile.am (libgmp_la_SOURCES, libmp_la_SOURCES): Add it. - * gmp-h.in (mp_get_memory_functions): Add prototype. - * gmp.texi (Custom Allocation): Add mp_get_memory_functions, refer to - "free" not "deallocate" function. - * gmpxx.h (struct __gmp_alloc_cstring): Use mp_get_memory_functions, - not __gmp_free_func. - - * gmp-impl.h [__cplusplus]: Add <cstring> for strlen. - (gmp_allocated_string): Hold length in a field. - * cxx/osdoprnti.cc, cxx/osmpf.cc: Use this. - -2002-12-20 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-perfsqr.c (check_sqrt): Print more variables upon - failure. - - * mpn/generic/rootrem.c: In Newton loop, pad qp with leading zero. - -2002-12-19 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/rootrem.c: Allocate 1.585 (log2(3)) times more space - for pp temporary to allow for worst case overestimate of root. - Add some asserts. - - * tests/mpz/t-root.c: Generalize and speed up. - -2002-12-19 Kevin Ryde <kevin@swox.se> - - * tests/cxx/t-rand.cc (check_randinit): Add gmp_randinit_mt test. - - * gmp-h.in: Don't bother trying to support Compaq C++ in pre-standard - I/O mode. - * gmp.texi (Notes for Particular Systems): Compaq C++ must be used in - "standard" iostream mode. - -2002-12-18 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/mod_34lsub1.asm: Add code for big-endian, using existing - little-endian code only if HAVE_LIMB_LITTLE_ENDIAN is defined. - -2002-12-18 Kevin Ryde <kevin@swox.se> - - * configure.in (HAVE_LIMB_BIG_ENDIAN, HAVE_LIMB_LITTLE_ENDIAN): New - defines in config.m4. - -2002-12-17 Torbjorn Granlund <tege@swox.com> - - * printf/printffuns.c (gmp_fprintf_reps): Make it actually work - for padding > 256. - -2002-12-17 Kevin Ryde <kevin@swox.se> - - * tune/freq.c: Add <string.h> for memcmp. - - * mpz/pprime_p.c: Use MPN_MOD_OR_MODEXACT_1_ODD. - - * gmp.texi (Formatted Output Strings): %a and %A are C99 not glibc. - (Formatted Input Strings): Type "l" is for double too. Hex floats are - accepted for mpf_t. - (Formatted Input Functions): Describe tightened parse rule, clarify - return value a bit. - - * scanf/doscan.c: Add hex floats, tighten matching to follow C99, for - instance "0x" is no longer acceptable to "%Zi". - Rename "invalid" label to avoid "invalid" variable, SunOS cc doesn't - like them the same. - * tests/misc/t-scanf.c: Update tests. - * tests/misc/t-locale.c (check_input): Don't let "0x" appear from fake - decimal point. - - * config.guess (sparc*-*-*): Look at BSD sysctl hw.model to recognise - ultrasparcs. - - * mpfr/tests/dummy.c: New file. - * mpfr/tests/Makefile.am (libfrtests_a_SOURCES): Add it. - -2002-12-14 Kevin Ryde <kevin@swox.se> - - * mpbsd/Makefile.am (nodist_libmpbsd_la_SOURCES): Move these mpz - sources to libmpbsd_la_SOURCES directly, automake 1.7.2 now gets the - ansi2knr setups right for sources in other directories. - - * mpfr/tests/Makefile.am: Add libfrtests.a in preparation for new mpfr. - -2002-12-13 Kevin Ryde <kevin@swox.se> - - * mpfr/Makefile.am (mpfr_TEXINFOS, AM_MAKEINFOFLAGS): Allow for - fdl.texi in recent mpfr. - - * configure.in (AC_PROG_EGREP): Ensure this is run outside the Cray - conditional AC_EGREP_CPP. - - * configure.in (alpha*-*-*): Use gcc -Wa,-oldas if it works, to avoid - problems with new compaq "as" on OSF 5.1. - - * mpn/Makefile.am (EXTRA_DIST): Remove Makeasm.am, automake 1.7.2 does - it automatically. - - * acinclude.m4 (AC_LANG_FUNC_LINK_TRY(C)): Remove this hack, fixed by - autoconf 2.57. - - * configure.in (AC_CONFIG_LIBOBJ_DIR): Set to mpfr, for the benefit of - new mpfr using LIBOBJ. - - * configure.in: (AM_INIT_AUTOMAKE): Use "gnu no-dependencies - $(top_builddir)/ansi2knr". - * */Makefile.am (AUTOMAKE_OPTIONS): Remove, now in configure.in. - - * configure, config.in, INSTALL.autoconf: Update to autoconf 2.57. - * */Makefile.in, configure, aclocal.m4, install-sh, mkinstalldirs: - Update to automake 1.7.2. - - * gmp.texi (Build Options): Add hppa64 to cpu types. - (ABI and ISA): Add gcc to hppa 2.0. - (Debugging): Add maximum debuggability config options. - (Language Bindings): Add Arithmos, reported by Johan Vervloet. - (Formatted Output Strings): 128 bits is about 40 digits, ll is only - for long long not long double. - (Formatted Input Strings): ll is only for long long not long double. - - * mpz/divis.c, mpz/divis_ui.c, mpz/cong.c, mpz/cong_ui.c: Allow d=0, - under the rule n==c mod d iff exists q satisfying n=c+q*d. - * gmp.texi (Integer Division): Describe this. - Suggested by Jason Moxham. - -2002-12-13 Pedro Gimeno <pggimeno@wanadoo.es> - - * randlc2x.c (lc): Remove check for seedn < an, which is now - superfluous. Add ASSERT to ensure it's correct. Add ASSERT to check - precondition of __GMPN_ADD. - (gmp_randinit_lc_2exp): Avoid reallocation by allocating one extra bit - for both seed and a. Simplify seedn < p->_cn case. - - * tests/rand/t-lc2exp.c (check_bigs): Test negative seeds. - -2002-12-12 Torbjorn Granlund <tege@swox.com> - - * mpn/pa32/pa-defs.m4 (PROLOGUE_cpu): Zap spurious argument to `.proc'. - Add empty `.callinfo'. - -2002-12-11 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/pentium4/sse2/addmul_1.asm: Don't reuse `ret' symbol for a - label. - -2002-12-11 Kevin Ryde <kevin@swox.se> - - * configure.in (hppa*-*-*): Don't use gcc -mpa-risc-2-0 in ABI=1.0. - - * mpn/pa32/pa-defs.m4: New file, arranging for .proc/.procend. - * configure.in (hppa*-*-*): Use it. - - * printf/doprnt.c: Comments on "ll" versus "L". - - * tests/mpz/t-div_2exp.c: Reduce tests, especially the random ones. - -2002-12-11 Torbjorn Granlund <tege@swox.com> - - * mpz/get_d.c (limb2dbl): New macro for conversion to `double'. - Define it to something non-trivial for 64-bit hppa. - * mpq/get_d.c: Likewise. - * mpf/get_d.c: Likewise. - - * mpn/x86/pentium4/sse2/addmul_1.asm: Unroll to save one c/l. - -2002-12-09 Kevin Ryde <kevin@swox.se> - - * tune/Makefile.am: Don't use -static under --disable-static, it tends - not to work. - * configure.in (ENABLE_STATIC): New AM_CONDITIONAL. - - * gmp-h.in: Use <iostream> instead of <iosfwd> with Compaq C++ in - pre-standard I/O mode. - - * tests/mpz/t-jac.c, tests/mpz/t-scan.c: Reduce tests. - -2002-12-08 Kevin Ryde <kevin@swox.se> - - * configure.in (*-*-ultrix*): Remove forcible --disable-shared, - believe this was a generic problem with libtool, now gone. - -2002-12-08 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (USE_LEADING_REGPARM): Disable for PIC code generation. - -2002-12-07 Torbjorn Granlund <tege@swox.com> - - * tests/cxx/t-misc.cc (check_mpq): Use 0/1 for canonical 0 in - mpq_cmp_ui calls. - - * configure.in (hppa2.0*-*-*): Pass +O2 instead of +O3 to work around - compiler bug with mpfr/tests/tdiv. - -2002-12-07 Kevin Ryde <kevin@swox.se> - - * configure.in (hppa2.0*-*-* ABI=2.0n): Make -mpa-risc-2-0 optional. - New hppa-level-2.0 test using GMP_HPPA_LEVEL_20 to detect assembler - support for 2.0n. - * acinclude.m4 (GMP_PROG_CC_WORKS): Add code that provokes an error - from gcc -mpa-risc-2-0 if the assembler doesn't know 2.0 instructions. - (GMP_HPPA_LEVEL_20): New macro. - -2002-12-07 Pedro Gimeno <pggimeno@wanadoo.es> - - * gmp-impl.h (gmp_randfnptr_t.randseed_fn) Return void. - (LIMBS_PER_ULONG, MPN_SET_UI): New macros. - (MPZ_FAKE_UI): Rename couple of parameters. - - * randlc2x.c (gmp_rand_lc_struct): _mp_c and _mp_c_limbs replaced - with mpn style _cp and _cn. All callers changed. - (randseed_lc): Fix limbs(seed) > bits_to_limbs(m2exp) case. - Remove return value. - (gmp_randinit_lc_2exp): Attempt to avoid redundant reallocation. - - * randmt.c (mangle_seed): New function by Kevin. - (randseed_mt): Use it instead of mpz_powm, for performance. Remove - return value. Remove commented out code (an inferior alternative to - mpz_export). - - * randsdui.c (gmp_randseed_ui): Use MPZ_FAKE_UI. - - * tests/rand/t-lc2exp.c (check_bigm, check_bigs): New tests. - * tests/rand/t-urndmm.c: Add L to constants in calls, for K&R. - -2002-12-06 Torbjorn Granlund <tege@swox.com> - - * configure.in: Remove -g. - (hppa*-*-*): Pass -Wl,+vnocompatwarnings with +DA2.0. - -2002-12-05 Torbjorn Granlund <tege@swox.com> - - * mpn/pa64/sqr_diagonal.asm: Remove .entry, .proc, .procend. - * mpn/pa64/udiv.asm: Likewise. - -2002-12-05 Kevin Ryde <kevin@swox.se> - - * mpn/pa64/sub_n.asm: Remove space in "sub, db" which gas objects to. - * mpn/pa64/*.asm, tune/hppa2.asm: Use ".level 2.0" for 2.0n, since gas - doesn't like ".level 2.0N". - - * configure.in (hppa*-*-*): Group path and flags choices, for clarity. - (hppa1.0*-*-*): Use gcc -mpa-risc-1-0 when available. - (hppa2.0*-*-*): Ditto -mpa-risc-2-0. - (*-*-hpux*): Exclude ABI=2.0w for hpux[1-9] and hpux10, rather than - the converse of allowing it for hpux1[1-9]; ie. list the bad systems - rather than try to guess the good systems. - (hppa2.0*-*-*) [ABI=2.0n ABI=2.0w]: Add gcc to likely compilers. - (hppa*-*-*) [gcc]: Test sizeof(long) to differentiate a 32-bit or - 64-bit build of the compiler. - (hppa64-*-*): Add this as equivalent to hppa2.0-*-*. - * acinclude.m4 (GMP_C_TEST_SIZEOF): New macro. - - * tests/tests.h (ostringstream::str): Must null-terminate - ostrstream::str() for the string constructor. - -2002-12-04 Torbjorn Granlund <tege@swox.com> - - * mpn/pa32/hppa1_1/udiv.asm: Don't wrap symbol to INT64 in L() stuff. - - * longlong.h (mpn_udiv_qrnnd_r based udiv_qrnnd): Fix typo. - - * mpn/powerpc32/powerpc-defs.m4: Define float registers with `f' - prefix. - -2002-12-04 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Floating-point Functions): Note the mantissa is binary and - decimal fractions cannot be represented exactly. Suggested by Serge - Winitzki. - (Known Build Problems): Note libtool stripping options when linking. - Reported by Vincent Lefevre. - - * acinclude.m4 (GMP_ASM_LABEL_SUFFIX): Don't make an empty result a - failure, that's a valid result. - (GMP_ASM_GLOBL): Establish this from the host cpu type. - (IA64_PATTERN): New macro. - (GMP_PROG_EXEEXT_FOR_BUILD, GMP_C_FOR_BUILD_ANSI, - GMP_CHECK_LIBM_FOR_BUILD): Remove temporary files created. - * configure.in: Use IA64_PATTERN. - -2002-12-03 Torbjorn Granlund <tege@swox.com> - - * tune/hppa.asm: Use config.m4. - * tune/hppa2.asm: Likewise. - * tune/hppa2w.asm: Likewise. - - * mpn/pa64: Use LDEF. - -2002-12-03 Kevin Ryde <kevin@swox.se> - - * INSTALL: Use return rather than exit in the example programs. - Suggested by Richard Dawe. - - * gmp.texi (Build Options): Move non-unix notes to ... - (Notes for Particular Systems): ... here. Mention MS Interix, - reported by Paul Leyland. - (C++ Interface Random Numbers): Add gmp_randinit_mt to examples. - - * acinclude.m4 (GMP_ASM_LABEL_SUFFIX): Must test empty suffix first, - for the benefit of hppa hp-ux. - (GMP_ASM_UNDERSCORE): Grep the output of "nm" instead of trying to - construct an asm file, and in case of failure fallback on no - underscore and a warning. - - * longlong.h (count_leading_zeros, count_trailing_zeros) [ev67, ev68]: - Restrict __asm__ ctlz and cttz to __GNUC__. - - * gen-psqr.c (HAVE_CONST, const): New macros. - - * tests/cxx/t-rand.cc (check_randinit): Add gmp_randinit_mt. - -2002-12-02 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h: Split popc_limb again, combined version gives too many - compiler warnings. - -2002-12-01 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/gcdext.c (div1): Disable unused function. - - * mpz/root.c: Don't include stdlib.h or longlong.h. - * mpz/rootrem.c: Likewise. - - * extract-dbl.c: abort => ASSERT_ALWAYS. - * mpz/set_d.c: Likewise. - * mpn/generic/tdiv_qr.c: Likewise. - - * gen-psqr.c (f_cmp_fraction, f_cmp_divisor): Change parameter to - `const void *', to match qsort spec. - -2002-12-01 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Integer Division): Fix a couple of @math's for tex. - Use @dots in more places. - - * tests/cxx/t-locale.cc: Test non std::locale systems too. - * tests/cxx/clocale.c: New file, reinstating what was localeconv.c, - and subverting nl_langinfo too. - * tests/cxx/Makefile.am (t_locale_SOURCES): Add it. - - * tests/tests.h (ostringstream, istringstream): Provide fakes of these - if <sstream> not available. - * tests/cxx/t-locale.cc, tests/cxx/t-ostream.cc: Remove <sstream>. - * configure.in (AC_CHECK_HEADERS) [C++]: Add <sstream>. - -2002-11-30 Torbjorn Granlund <tege@swox.com> - - * printf/doprnt.c (__gmp_doprnt): Comment out a `break' to shut up - compiler warnings. - - * mpn/ia64/invert_limb.asm: Add `many' hints to return insns. - - * mpn/ia64/divrem_1.asm: Allocate more local registers; put b0 in - one of them. - - * mpn/ia64/popcount.asm: Properly restore register ar.lc. - - * longlong.h (umul_ppmm) [ia64]: Form both product parts in asm. - - * mpz/bin_uiui.c: Cast umul_ppmm operands. - - * scanf/doscan.c (gmpscan): Remove unused label store_get_digits. - - * gmp-impl.h: #undef MIN and MAX before #defining. - - * mpn/ia64/copyi.asm: Add `;' after bundle declarators. - * mpn/ia64/copyd.asm: Likewise. - - * mpn/ia64/divrem_1.asm: Add some syntax to placid the HP-UX assembler. - -2002-11-30 Kevin Ryde <kevin@swox.se> - - * configure.in (AC_CHECK_HEADERS): Add nl_types.h. - * tests/misc/t-locale.c: Use this, for nl_item on netbsd 1.4.1. - -2002-11-29 Torbjorn Granlund <tege@swox.com> - - * tests/devel/addmul_1.c: Provide prototype for mpn_print. - (OPS): Account for function overhead. - * tests/devel/{submul_1.c,mul_1.c,add_n.c,sub_n.c}: Likewise. - - * mpn/ia64/addmul_1.asm: Rewrite. - -2002-11-28 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/sqr_diagonal.asm: Don't allocate any registers. - - * mpn/ia64/submul_1.asm: Adapt to Itanium 2. - - * mpn/ia64/mul_1.asm: Fix typo in HAVE_ABI_32 code. - - * mpn/ia64/add_n.asm: Rewrite. - * mpn/ia64/sub_n.asm: Rewrite. - -2002-11-28 Kevin Ryde <kevin@swox.se> - - * mpn/Makefile.am (nodist_EXTRA_libmpn_la_SOURCES): Use this rather - than libdummy. - * tests/Makefile.am (EXTRA_libtests_la_SOURCES): Use this for - x86call.asm and x86check.c rather than libdummy. - -2002-11-27 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-mul.c: Implement reference Karatsuba multiplication. - Rewrite testing scheme to run fewer really huge tests. - -2002-11-26 Torbjorn Granlund <tege@swox.com> - - * tests: Decrease repetition count for some of the slowest tests. - - * mpn/ia64/divrem_1.asm: New file. - -2002-11-25 Torbjorn Granlund <tege@swox.com> - - * mpfr/tests/tdiv.c: Decrease number of performed tests. - -2002-11-23 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/mul_1.asm: Rewrite. - -2002-11-23 Kevin Ryde <kevin@swox.se> - - * mpn/ia64/README: Add some references. - - * gmp.texi (Build Options): Add itanium and itanium2, mention DocBook - and XML from makeinfo, add texinfo top level cross reference. - (Integer Division): Try to clarify 2exp functions a bit. - (C++ Interface Floats): Giving bad string to constructor is undefined. - (C++ Interface Integers, C++ Interface Rationals): Ditto, and show - default base in prototype, not the description. - - * config.sub, config.guess, configure.in (itanium, itanium2): New cpu - types. - - * tests/misc/t-printf.c, tests/misc/t-scanf.c (check_misc): Suppress - %zd test on glibc prior to 2.1, it's not supported. - -2002-11-22 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/copyi.asm: Optimize for Itanium 2. - * mpn/ia64/copyd.asm: Likewise. - -2002-11-20 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/sqr_diagonal.asm: New file. - - * mpn/ia64/submul_1.asm: Handle vl == 0 specially. - -2002-11-20 Kevin Ryde <kevin@swox.se> - - * tests/cxx/t-locale.cc: Test with locales imbued into stream, use - <sstream>, eliminated some C-isms. istream tests disabled, not yet - locale-ized. - * tests/cxx/Makefile.am (t_locale_SOURCES): Remove localeconv.c. - * tests/cxx/localeconv.c: Remove file. - - * configure.in (AC_CHECK_TYPES) [C++]: Add std::locale. - * printf/doprntf.c: Add decimal point parameter, remove localeconv use. - * gmp-impl.h (__gmp_doprnt_mpf): Update prototype, bump symbol to - __gmp_doprnt_mpf2 to protect old libgmpxx. - * cxx/osmpf.cc: Use this with ostream locale decimal_point facet. - * printf/doprnt.c: Ditto, with GMP_DECIMAL_POINT. - - * gmp-h.in: More comments on __declspec for windows DLLs. - - * mpf/set_str.c, scanf/doscan.c: Cast through "unsigned char" for - decimal point string, same as input chars. - - * configure.in (AC_CHECK_HEADERS): Add langinfo.h. - (AC_CHECK_FUNCS): Add nl_langinfo. - * gmp-impl.h (GMP_DECIMAL_POINT): New macro. - * mpf/out_str.c, mpf/set_str.c, scanf/doscan.c: Use it, and don't - bother with special code for non-locale systems. - * tests/misc/t-locale.c: Subvert nl_langinfo too. - - * configure.in, acinclude.m4 (GMP_ASM_X86_GOT_UNDERSCORE): New macro. - * mpn/x86/x86-defs.m4 (_GLOBAL_OFFSET_TABLE_): New macro, inserting - extra underscore for OpenBSD. - * mpn/x86/README (_GLOBAL_OFFSET_TABLE_): Update notes. - Reported by Christian Weisgerber. - - * tests/cxx/t-rand.cc (check_randinit): New function, collecting up - constructor tests. - - * tests/cxx/t-ostream.cc: Use <sstream> instead of <strstream>, use - compare instead of strcmp. - - * gmpxx.h (__gmp_randinit_lc_2exp_size_t): Return type is int. - -2002-11-18 Kevin Ryde <kevin@swox.se> - - * tune/speed.c (r_string): Use CNST_LIMB with <N>bits, spotted by - Torbjorn. - -2002-11-19 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/mul_1.asm: Remove redundant cmp from prologue code. - Streamline prologue. - * mpn/ia64/addmul_1.asm: Likewise. - * mpn/ia64/submul_1.asm: New file. - * mpn/ia64/submul_1.c: Remove. - -2002-11-17 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/popham.c: New file, using new faster algorithm. - * mpn/generic/popcount.c: Remove. - * mpn/generic/hamdist.c: Remove. - - * mpn/ia64/addmul_1.asm: Don't clobber callee-saves register f16. - * mpn/ia64/mul_1.asm: Likewise. - - * mpn/ia64/addmul_1.asm: Add pred.rel declarations. Resolve RAW - hazards for condition code registers, duplicating code as needed. Add - prediction to all branches. - * mpn/ia64/mul_1.asm: Likewise. - * mpn/ia64/add_n.asm: Likewise. - * mpn/ia64/sub_n.asm: Likewise. - * mpn/ia64/copyi.asm: Likewise. - * mpn/ia64/copyd.asm: Likewise. - - * mpn/generic/random2.c: Add a cast to silence some compilers. - -2002-11-16 Torbjorn Granlund <tege@swox.com> - - * mpz/powm.c: Cap allocation by limiting k to 10 (512 precomputed - values). - -2002-11-16 Kevin Ryde <kevin@swox.se> - - * configure.in, gmp.texi: Remove powerpc64 ABI=32L, doesn't work and - is unlikely to ever do so. - * configure.in: Allow ABI=32 for powerpc64. - Reported by David Edelsohn. - -2002-11-14 Kevin Ryde <kevin@swox.se> - - * mpn/Makefile.am (nodist_libdummy_la_SOURCES): Add addmul_2.c - addmul_3.c addmul_4.c addmul_5.c addmul_6.c addmul_7.c addmul_8.c. - - * gmp-h.in (__GMP_DECLSPEC_EXPORT, __GMP_DECLSPEC_IMPORT) [__GNUC__]: - Use __dllexport__ and __dllimport__ to keep out of application - namespace. - -2002-11-14 Gerardo Ballabio <gerardo.ballabio@unimib.it> - - * gmpxx.h (__gmp_randinit_default_t, __gmp_randinit_lc_2exp_t, - __gmp_randinit_lc_2exp_size_t): Use extern "C" { typedef ... }, for - the benefit of g++ prior to 3.2. - -2002-11-12 Kevin Ryde <kevin@swox.se> - - * gmpxx.h (gmp_randclass constructors): Patch from Roberto Bagnara to - use extern "C" on C function pointer arguments. - -2002-11-09 Kevin Ryde <kevin@swox.se> - - * configure.in, Makefile.am, printf/Makefile.am, - printf/repl-vsnprintf.c: Handle vsnprintf replacement with C - conditionals. - - * acinclude.m4 (AC_LANG_FUNC_LINK_TRY(C)): Workaround troubles recent - HP cc +O3 causes for AC_CHECK_FUNCS. - - * gmp.texi (Notes for Particular Systems): Add Sparc app regs. - (Debugging): Note gcc -fstack options to detect overflow. - (Formatted Output Strings, Formatted Input Strings): Format strings - are not multibyte. - -2002-11-06 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/tdiv_qr.c: Remove a bogus assert. - -2002-11-05 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/tdiv_qr.c: Remove two dead mpn_divrem_2 calls. - -2002-11-04 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_C_INLINE): Don't define "inline" for C++. - - * demos/expr/expr-impl.h (stdarg.h): Test __DECC same as gmp.h. - - * mpbsd/mtox.c, printf/obprintf.c, printf/obvprintf.c, - scanf/vsscanf.c, demos/expr/expr.c, demos/expr/exprf.c, - demos/expr/exprfa.c, demos/expr/exprfr.c, demos/expr/exprq.c, - demos/expr/exprz.c, demos/expr/exprza.c: Add <string.h> for strlen and - memcpy. - -2002-11-02 Kevin Ryde <kevin@swox.se> - - * longlong.h: Test __x86_64__ not __x86_64. Reported by Andreas - Jaeger. - - * mpz/import.c, mpz/export.c: Use char* subtract from NULL to get - pointer alignment, for the benefit of Cray vector systems. - - * cxx/ismpf.cc: Use <clocale>. - * tests/cxx/t-locale.cc: No need to conditionalize <clocale>. - - * scanf/doscan.c: Don't use isascii, rely on C99 ctype.h. - - * gmp.texi (Build Options): Describe CC_FOR_BUILD, cross reference - texinfo manual. - (ABI and ISA): Add powerpc620 and powerpc630 to powerpc64, add NetBSD - and OpenBSD sparc64. - (Notes for Package Builds): Cross reference libtool manual. - (Notes for Particular Systems): Add OpenBSD to non-MMX versions of gas. - (Known Build Problems): Add MacOS X C++ shared libraries. - -2002-10-31 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h, tune/speed.c, tune/speed.h, tune/common.c, tune/many.pl, - tests/devel/try.c, tests/tests.h, tests/refmpn.c (mpn_addmul_5, - mpn_addmul_6, mpn_addmul_7, mpn_addmul_8): Add testing and measuring. - * configure.in (config.in): Add #undefs of HAVE_NATIVE_mpn_addmul_5, - HAVE_NATIVE_mpn_addmul_6, HAVE_NATIVE_mpn_addmul_7, - HAVE_NATIVE_mpn_addmul_8. - (gmp_mpn_functions_optional): Add addmul_5 addmul_6 addmul_7 addmul_8. - - * tests/devel/try.c (ASSERT_CARRY): Remove, now in gmp-impl.h - (try_one): Do dest setups after sources, for benefit of - dst0_from_src1. - -2002-11-01 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/tdiv_qr.c: Avoid quadratic behaviour for - sub-division when numerator is more than twice the size of the - denominator. Simplify loop logic for the same case. Clean up a - few comments. - -2002-10-29 Torbjorn Granlund <tege@swox.com> - - * configure.in (*-cray-unicos*): Pass -hnofastmd again. - -2002-10-25 Torbjorn Granlund <tege@swox.com> - - * tests/tadd.c: Disable test of denorms. - -2002-10-23 Linus Nordberg <linus@swox.se> - - * gmp.texi (Introduction to GMP): Update section about mailing - lists. - -2002-10-23 Kevin Ryde <kevin@swox.se> - - * gmp-h.in (__GMP_ATTRIBUTE_PURE): Suppress this when - __GMP_NO_ATTRIBUTE_CONST_PURE is defined. - * gmp-impl.h (ATTRIBUTE_CONST): Ditto. - * tune/common.c: Use __GMP_NO_ATTRIBUTE_CONST_PURE. - - * tune/speed.h, tune/many.pl: Remove ATTRIBUTEs from prototypes. - * tune/speed.h: Remove various "dummy" variables attempting to keep - "pure" calls live, no longer necessary. They weren't sufficient for - recent MacOS cc anyway. - -2002-10-21 Torbjorn Granlund <tege@swox.com> - - * mpn/cray/ieee/addmul_1.c: Handle overlap as in mul_1.c. - * mpn/cray/ieee/submul_1.c: Likewise. - -2002-10-19 Kevin Ryde <kevin@swox.se> - - * configure.in (sparcv9 etc -*-*bsd*): Add support for NetBSD and - OpenBSD sparc64. Reported by Christian Weisgerber. - (AC_CHECK_HEADERS): Add sys/param.h for sys/sysctl.h on *BSD. - - * demos/calc/calc.y: Change ={ to {, needed for bison 1.50. - - * longlong.h (count_leading_zeros, count_trailing_zeros) [x86_64]: - Should be UDItype. - - * mpz/set_str.c, mpf/set_str.c, mpbsd/xtom.c, scanf/sscanffuns.c: Cast - chars through "unsigned char" to zero extend, required by C99 ctype.h. - -2002-10-18 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-root.c: Test also mpz_rootrem. - - * mpn/generic/rootrem.c: Avoid overflow problem when n is huge. - - * mpz/root.c: Avoid overflow problems in allocation computation; also - simplify it. Misc cleanups. - - * mpz/rootrem.c: New file. - * Makefile.am, mpz/Makefile.am, gmp-h.in: Add them. - -2002-10-17 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (popc_limb): Combine variants. - -2002-10-14 Kevin Ryde <kevin@swox.se> - - * configure.in (AC_CHECK_HEADERS): Add sys/time.h for sys/resource.h - test, needed by SunOS, and next autoconf will insist headers actually - compile. - -2002-10-08 Kevin Ryde <kevin@swox.se> - - * tune/time.c (speed_time_init): Allow for Cray times() apparently - being a cycle counter. - - * dumbmp.c (mpz_get_str): Fix buf size allocation. - - * tests/trace.c, tests/tests.h (mp_limb_trace): New function. - - * tune/speed-ext.c (SPEED_EXTRA_PROTOS): Use __GMP_PROTO. - * tests/devel/try.c (malloc_region): Add a cast for SunOS cc. - - * configure.in (AC_CHECK_FUNCS): Add strerror. - (AC_CHECK_DECLS): Add sys_errlist, sys_nerr. - * tune/time.c, tests/devel/try.c: Use them. - -2002-10-05 Kevin Ryde <kevin@swox.se> - - * configure.in (AC_CHECK_HEADERS): Test float.h, not in SunOS cc. - * printf/repl-vsnprintf.c: Use this. - - * configure.in (*sparc*-*-*): Collect up various options for clarity, - use gcc -mcpu=supersparc and ultrasparc3, use cc -xchip, don't use - -xtarget=native, use cc configs with acc, merge SunOS bundled cc and - SunPRO cc configs. - - * gmp-impl.h (gmp_randfnptr_t): Use __GMP_PROTO. - (MPZ_REALLOC): Cast _mpz_realloc return value to mp_ptr, for the - benefit of SunOS cc which requires pointers of the same type on the - two legs of a ?:. - - * dumbmp.c (mpz_realloc): Add a cast to avoid a warning from SunOS cc. - - * acinclude.m4: Allow for i960 b.out default cc output. - - * gmp.texi (Random State Initialization): Add gmp_randinit_mt. - (Perfect Square Algorithm): Describe new mpn_mod_34lsub1 use. - (Factorial Algorithm): Describe Jason's new code. - (Binomial Coefficients Algorithm): Ideas about improvements - moved to doc/projects.html. - (Contributors): Add Jason Moxham and Pedro Gimeno. - -2002-10-03 Kevin Ryde <kevin@swox.se> - - * gen-psqr.c: New file. - * Makefile.am, mpn/Makefile.am: Use it to generate mpn/perfsqr.h. - * mpn/generic/perfsqr.c: Use generated data, put mod 256 data into - limbs to save space, use mpn_mod_34lsub1 when good. - * tests/mpn/t-perfsqr.c: New file. - * tests/mpn/Makefile.am (check_PROGRAMS): Add it. - * tests/mpz/t-perfsqr.c (check_modulo): New test. - (check_sqrt): New function holding current tests. - - * configure.in (AC_INIT): Modernize to package name and version here - rather than AM_INIT_AUTOMAKE, add bug report email. - (AC_CONFIG_SRCDIR): New macro. - - * gmp-impl.h (ROUND_UP_MULTIPLE): Fix for non-power-of-2 moduli (not - normal in current uses), clarify the comments a bit. - -2002-09-30 Kevin Ryde <kevin@swox.se> - - * mpn/Makeasm.am (.s.lo): Add --tag=CC for the benefit of CCAS!=CC, - same as .S.lo and .asm.lo. - - * Makefile.am (gen-fac_ui, gen-fib, gen-bases): Quote source files in - test -f stuff to avoid Sun make rewriting them. - -2002-09-28 Kevin Ryde <kevin@swox.se> - - * tests/devel/try.c, tune/speed.c: Avoid strings longer than C99 - guarantees. - - * tests/refmpn.c, tests/tests.h (refmpn_zero_extend, refmpn_normalize, - refmpn_sqrtrem): New functions. - * tests/devel/try.c (TYPE_SQRTREM): Use refmpn_sqrtrem. - (compare): Correction to tr->dst_size subscripting. - - * dumbmp.c: Add several new functions, allow for initial n<d in - mpz_tdiv_q (now in mpz_tdiv_qr actually). - - * gen-bases.c (chars_per_limb): Get GMP_NUMB_BITS for base==2, - similarly other powers of 2, which this was in the past. - * tests/refmpn.c (refmpn_chars_per_limb): Ditto. - * tests/mpn/t-mp_bases.c: Test chars_per_limb for power-of-2 bases too. - - * Makefile.am, mpz/Makefile.am: Setups for gen-fac_ui.c generating - mpz/fac_ui.h. - -2002-09-28 Jason Moxham <J.L.Moxham@maths.soton.ac.uk> - - * dumbmp.c (mpz_pow_ui, mpz_addmul_ui, mpz_root): New functions. - * gen-fac_ui.c: New file. - * mpz/fac_ui.c: Rewrite. - -2002-09-26 Kevin Ryde <kevin@swox.se> - - * tests/cxx/localeconv.c: New file, split from t-locale.cc. - * tests/cxx/t-locale.cc: Use it. - * tests/cxx/Makefile.am (t_locale_SOURCES): Add it. - - * tests/cxx/Makefile.am: Updates for Gerardo's new test programs. - -2002-09-26 Gerardo Ballabio <gerardo.ballabio@unimib.it> - - * gmpxx.h (__gmp_cmp_function): Bug fixes in double/mpq and - double/mpfr comparisons. - - * tests/cxx/t-assign.cc, tests/cxx/t-binary.cc, tests/cxx/t-constr.cc, - tests/cxx/t-ternary.cc, tests/cxx/t-unary.cc: Revise and add various - tests, including some for mpfr, some split from t-expr.cc. - * tests/cxx/t-locale.cc: Modernize include files. - * tests/cxx/t-ostream.cc: Modernize include files, use cout rather - than printf for diagnostics. - * tests/cxx/t-misc.cc, tests/cxx/t-rand.cc: New file, split from - t-allfuns.cc. - * tests/cxx/t-ops.cc: New file, some split from t-allfuns.cc. - * tests/cxx/t-prec.cc: New file. - * tests/cxx/t-allfuns.cc, tests/cxx/t-expr.cc: Remove files. - -2002-09-25 Torbjorn Granlund <tege@swox.com> - - * configure.in (*-cray-unicos*): Remove -hscalar0, it causes too much - performance loss. Let's trust Cray to fix their compilers. - -2002-09-24 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/add_n.asm: Rewrite. - * mpn/powerpc32/sub_n.asm: Rewrite. - -2002-09-24 Pedro Gimeno <pggimeno@wanadoo.es> - - * randlc2x.c: Prepare for nails by changing type of _mp_c to mpz_t, - make _mp_seed fixed-size, disallow SIZ(a)==0 to optimize comparisons - for mpn_mul. - * gmp-impl.h (MPZ_FAKE_UI): New macro. - - * randmt.c: Some constants made long for K&R compliance; remove UL at - the end of other constants; use mp_size_t where appropriate; use - mpz_export to split the seed. - - * gmp-impl.h: Remove type cast in RNG_FNPTR and RNG_STATE, to allow - them to be used as lvalues. - * randclr.c, randlc2x.c, randmt.c, randsd.c: All callers changed. - - * mpz/urandomm.c: Replace mpn_cmp with MPN_CMP. - - * tests/rand/gen.c: Get rid of gmp_errno. - -2002-09-24 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Custom Allocation): Keep allocate_function etc out of the - function index by using @deftypevr. - More index entries. - -2002-09-24 Gerardo Ballabio <gerardo.ballabio@unimib.it> - - * gmpxx.h (mpfr_class constructors from strings): Precision was set - incorrectly, fixed. - -2002-09-23 Torbjorn Granlund <tege@swox.com> - - * mpf/urandomb.c: Don't crash for overlarge nbits argument. - Let nbits==0 mean to fill number with random bits. - -2002-09-21 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/mod_34lsub1.asm: Add r31 dummy operand to `br' instruction. - -2002-09-20 Gerardo Ballabio <gerardo.ballabio@unimib.it> - - * gmpxx.h (__gmp_binary_equal, __gmp_binary_not_equal): Fix broken - mpq/double functions. - -2002-09-18 Torbjorn Granlund <tege@swox.com> - - * randmt.c (randget_mt): Fix typo. - -2002-09-18 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (_gmp_rand): Avoid evaluating "state" more than once, for - the benefit places calling it with RANDS. - - * randmt.c (randseed_mt): Use mpz_init for mod and seed1, for safety. - - * tune/tuneup.c (sqr_karatsuba_threshold): Initialize to - TUNE_SQR_KARATSUBA_MAX so mpn_sqr_n works for randmt initialization. - - * gmp.texi (Integer Comparisons): Remove mention of non-existent - mpz_cmpabs_si, reported by Conrad Curry. - - * tune/speed.c, tune/speed.h, tune/common.c: Add gmp_randseed, - gmp_randseed_ui and mpz_urandomb. - -2002-09-18 Pedro Gimeno <pggimeno@wanadoo.es> - - * tests/rand/gen.c: Add mt, remove lc and bbs. - - * Makefile.am (libgmp_la_SOURCES): Add randmt.c, remove randlc.c and - randraw.c. - - * randmt.c: New file. - * gmp-h.in (gmp_randinit_mt): Add prototype. - * randdef.c: Use gmp_randinit_mt. - - * gmp-impl.h (RNG_FNPTR, RNG_STATE): New macros. - (gmp_randfnptr_t): New structure. - (_gmp_rand): Now a macro not a function. - * gmp-h.in (__gmp_randata_lc): Remove, now internal to randlc2x.c. - (__gmp_randstate_struct): Revise comments on field usage. - * randsd.c, randclr.c: Use function pointer scheme. - * randsdui.c: Use gmp_randseed. - * randraw.c: Remove file. - * randlc2x.c: Collect up lc_2exp related code from randsd.c, randclr.c - and randraw.c, use function pointer scheme, integrate seed==0/a==0 - into main case and fix case where bits(a) < m2exp. - - * randlc.c: Remove file, never documented and never worked. - * gmp-h.in (gmp_randinit_lc): Remove prototype. - -2002-09-16 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/mod_34lsub1.asm: New file. - -2002-09-16 Kevin Ryde <kevin@swox.se> - - * configure.in, acinclude.m4 (GMP_C_RESTRICT): Remove this, not - currently used, and #define restrict upsets Microsoft C headers on - win64. Reported by David Librik. - - * configure.in (x86): Add gcc 3.2 -march and -mcpu flags, remove some - unnecessary -march=i486 fallbacks. - - * gmp.texi (Notes for Particular Systems): Note cl /MD is required for - Microsoft C and MINGW to cooperate on I/O. Explained by David Librik. - (Language Bindings): Add linbox. - * gmp.texi (Language Bindings): - -2002-09-12 Kevin Ryde <kevin@swox.se> - - * mpz/aorsmul_i.c: Allow for w==x overlap with nails. Test - BITS_PER_ULONG > GMP_NUMB_BITS rather than GMP_NAIL_BITS != 0. - * tests/mpz/t-aorsmul.c: Test this. - - * tune/common.c: mpn_mod_34lsub1 only exists for GMP_NUMB_BITS%4==0 - * tune/speed.c: Add mpn_mod_34lsub1. - -2002-09-10 Pedro Gimeno <pggimeno@wanadoo.es> - - * rand.c: Remove old disabled BBS code. - * mpf/urandomb.c: Use BITS_TO_LIMBS. - -2002-09-10 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Multiplication Algorithms): FFT is now enabled by default. - -2002-09-10 Pedro Gimeno <pggimeno@wanadoo.es> - - * mpz/urandomm.c: Use mpn level functions, avoid an infinite loop if - _gmp_rand forever returns all "1" bits. - * tests/rand/t-urndmm.c: New file - * tests/rand/Makefile.am (check_PROGRAMS): Add it. - - * gmp-impl.h (BITS_TO_LIMBS): New macro. - * mpz/urandomb.c: Use it, and use MPZ_REALLOC. - -2002-09-08 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_GCC_WA_MCPU): New macro. - * configure.in (alpha*-*-*): Use it to avoid -Wa,-mev67 if gas isn't - new enough to know ev67. Reported by David Bremner. - -2002-07-30 Gerardo Ballabio <gerardo.ballabio@unimib.it> - - * gmpxx.h (__gmpz_value etc): Remove, use mpz_t etc instead. - (__gmp_expr): Reorganise specializations, use __gmp_expr<T,T> not - mpz_class etc. - (mpfr evals): Remove mode parameter, was always - __gmp_default_rounding_mode anyway. - -2002-09-07 Kevin Ryde <kevin@swox.se> - - * gmp-h.in, mp-h.in: Use #ifdef for tests, for the benefit of - applications using gcc -Wundef. - - * longlong.h: Define COUNT_LEADING_ZEROS_NEED_CLZ_TAB for all alphas, - since mpn/alpha/cntlz.asm always goes into libgmp.so, even for ev67 - and ev68 which don't need it. Reported by David Bremner. - - * gmp.texi (Demonstration Programs): New section, expanding on what - was under "Build Options". - (Converting Floats): Don't need \ for _ in @var within @math. - Add and amend various index entries. - - * demos/qcn.c: Add -p prime limit option. - -2002-08-30 Kevin Ryde <kevin@swox.se> - - * mpz/pprime_p.c: Handle small negatives with isprime, in particular - must do so for n==-2. - * tests/mpz/t-pprime_p.c: New file. - * tests/mpz/Makefile.am: Add it. - -2002-08-26 Torbjorn Granlund <tege@swox.com> - - * gmp.texi (Converting Floats): Fix typo in mpf_get_d_2exp docs, - reported by Paul Zimmermann. - -2002-08-26 Kevin Ryde <kevin@swox.se> - - * configure.in: Echo the ABI being tried for the compilers. - (powerpc*-*-*): Use powerpc64/aix.m4 for ABI=aix64 too. - (AC_CHECK_FUNCS): Add strtol, for tests/rand/gen.c. - -2002-08-24 Kevin Ryde <kevin@swox.se> - - * configure.in (HAVE_HOST_CPU_, HAVE_HOST_CPU_FAMILY_, HAVE_NATIVE_): - Setup templates for these using AH_VERBATIM rather than acconfig.h, - preferred by latest autoconf. Prune lists to just things used. - * acconfig.h: Remove file. - - * mpn/powerpc32/mode1o.asm: Forgot ASM_START. - - * tune/time.c (have_cgt_id): Renamed from HAVE_CGT_ID so avoid - confusion with autoconf outputs, and turn it into a "const" variable. - -2002-08-23 Torbjorn Granlund <tege@swox.com> - - * configure.in: Choose powerpc32/aix.m4 or powerpc64/aix.m4 based on - ABI, not configuration triple. - - * mpz/pprime_p.c: Partially undo last change--handle small and - negative numbers in the same test. - -2002-08-22 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (MUL_FFT_THRESHOLD, SQR_FFT_THRESHOLD): Note - mpn/generic/mul_fft.c is not nails-capable, and don't bother setting - other FFT data for nails. - - * configfsf.guess: Update to 2002-08-19. - * configfsf.sub: Update to 2002-08-20. - - * config.guess (powerpc*-*-*): Use a { } construct to suppress SIGILL - message on AIX. - -2002-08-20 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Build Options): Add ia64 under cpu types. - (ABI and ISA): Describe IRIX 6 ABI=o32. - (Notes for Particular Systems): Remove -march=pentiumpro, now ok. - (Known Build Problems): Binutils 2.12 is ok for libgmp.a. - (Emacs): New section. - (Language Bindings): Update MLton URL, reported by Stephen Weeks. - (Prime Testing Algorithm): New section. - Don't put a blank line after @item in @table since it can make a page - break between the heading and the entry. - Misc tweaks elsewhere, in particular more index entries. - - * mpz/millerrabin.c: Need x to be size+1 for change to urandomm. - - * gmp-impl.h: Comments on the use of __GMP_DECLSPEC. - - * tune/time.c (freq_measure_mftb_one): Use struct_timeval, for the - benefit of mingw. - - * tests/refmpn.c, tests/tests.h (ref_addc_limb, ref_subc_limb): - Renamed from add and sub, following gmp-impl.h ADDC_LIMB and SUBC_LIMB. - -2002-08-17 Kevin Ryde <kevin@swox.se> - - * mpn/powerpc32/mode1o.asm: New file. - * configure.in, acinclude.m4 (GMP_ASM_POWERPC_PIC_ALWAYS): New macro. - * mpn/asm-defs.m4: Use it to help setting up PIC. - - * configure.in (AC_PREREQ): Bump to 2.53. - - * mpn/powerpc32/powerpc-defs.m4 (ASSERT): New macro. - (PROLOGUE_cpu): New macro, giving ALIGN(4) not 8. - -2002-08-16 Torbjorn Granlund <tege@swox.com> - - * mpn/m68k/lshift.asm: Fix typo in !scale_available_p code. - * mpn/m68k/rshift.asm: Likewise. - -2002-08-16 Kevin Ryde <kevin@swox.se> - - * configure.in (--enable-profiling=instrument): New option. - * gmp.texi (Profiling): Describe it. - * mpn/x86/x86-defs.m4 (PROLOGUE_cpu, call_instrument, ret_internal): - Add support. - (call_mcount): Share PIC setups with call_instrument. - * mpn/x86/*.asm: Use ret_internal. - * mpn/asm-defs.m4 (m4_unquote): New macro. - * tests/mpn/t-instrument.c: New file. - * tests/mpn/Makefile.am: Add it. - - * mpn/alpha/umul.asm: Add ASM_END. - -2002-08-12 Kevin Ryde <kevin@swox.se> - - * mpz/pprime_p.c: Fake up a local mpz_t to take abs(n), rather than - using mpz_init etc. - - * mpz/millerrabin.c: Use mpz_urandomm for uniform selection of x, - reported by Jason Moxham. Exclude x==n-1, ie. -1 mod n. Use - gmp_randinit_default. - - * mpn/alpha/umul.asm: Use "r" registers, for the benefit of Unicos. - - * tests/devel/try.c: Add mpn_copyi and mpn_copyd. - -2002-08-09 Kevin Ryde <kevin@swox.se> - - * Makefile.am: Remove configure.lineno from DISTCLEANFILES and gmp.tmp - from MOSTLYCLEANFILES, automake does these itself now. - - * */Makefile.in, aclocal.m4, configure, install-sh, missing, - mkinstalldirs: Update to automake 1.6.3. - - * mpn/ia64/README: Some notes on assembler syntax. - - * mpn/ia64/add_n.asm, mpn/ia64/sub_n.asm: Add .body. - * mpn/ia64/add_n.asm, mpn/ia64/addmul_1.asm, mpn/ia64/mul_1.asm, - mpn/ia64/sub_n.asm: Position .save ar.lc just before relevant - instruction. - * mpn/ia64/addmul_1.asm, mpn/ia64/mul_1.asm: Add .save ar.pfs and pr. - * mpn/ia64/copyd.asm, mpn/ia64/copyi.asm: Correction to .body position. - * mpn/ia64/lorrshift.asm: Add .prologue stuff. - - * configure.in (*-*-unicos*): Remove forcible --disable-shared, - libtool gets this right itself now. - -2002-08-07 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium/mmx/hamdist.asm: New file, adapted from - mpn/x86/pentium/mmx/popham.asm. - * mpn/x86/pentium/mmx/popham.asm: Remove file, not faster than plain - mpn/x86/pentium/popcount.asm for the popcount. - - * mpn/alpha/umul.asm: Use PROLOGUE/EPILOGUE, rename it mpn_umul_ppmm. - * configure.in (alpha*-*-*): Add umul to extra_functions. - - * mpz/remove.c: Make src==0 return 0, not do DIVIDE_BY_ZERO. - -2002-08-05 Torbjorn Granlund <tege@swox.com> - - * acconfig.h: Remove spurious undefs for mpn_divrem_newton and - mpn_divrem_classic. - -2002-08-05 Kevin Ryde <kevin@swox.se> - - * tests/refmpn.c, tests/tests.h, tests/misc/t-printf.c, - tests/mpf/t-trunc.c, tests/mpn/t-mp_bases.c, tests/mpn/t-scan.c, - tests/mpq/t-cmp_ui.c, tests/mpz/bit.c, tests/mpz/t-aorsmul.c, - tests/mpz/t-powm_ui.c tests/mpz/t-root.c, tests/mpz/t-scan.c: More - care with long and mp_size_t parameters, for the benefit of K&R. - - * demos/perl/GMP.pm, demos/perl/GMP.xs, demos/perl/GMP/Mpz.pm, - demos/perl/test.pl: Add mpz_import and mpz_export. - * demos/perl/GMP.pm: Remove "preliminary" warning. - - * mpn/lisp/gmpasm-mode.el: Set add-log-current-defun-header-regexp to - pick up m4 defines etc. - - * Makefile.am (libgmpxx_la_DEPENDENCIES): libgmp.la should be here, - not libgmpxx_la_LIBADD, for the benefit of "make -j2". - - * mpn/ia64/*.asm [hpux ABI=32]: Extend 32-bit operands to 64-bits, not - optimal and might not be sufficient, but seems to work. - -2002-08-03 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Profiling): Use a table and expand for clarity. - (Integer Special Functions): New section for mpz_array_init, - _mpz_realloc, mpz_getlimbn and mpz_size, to discourage their use. - - * configure.in (*-*-msdosdjgpp*): Remove forcible --disable-shared, - libtool gets this right itself now. - -2002-07-30 Kevin Ryde <kevin@swox.se> - - * mpn/powerpc32/lshift.asm, mpn/powerpc32/rshift.asm: Lose final mr, - and make final stwu into an stw. - - * gmp.texi (Known Build Problems): An easier workaround for DESTDIR, - using LD_LIBRARY_PATH. - (C++ Interface MPFR): Remove mpfrxx.h. - - * mpfrxx.h: Remove file. - * Makefile.am: Remove mpfrxx.h. - * tests/cxx/Makefile.am: Add Gerardo's new test programs. - -2002-07-30 Gerardo Ballabio <gerardo.ballabio@unimib.it> - - * gmpxx.h: Use mpz_addmul etc for ternary a+b*c etc. Reorganise some - macros for maintainability. Merge mpfrxx.h. - * tests/cxx/t-constr.cc, tests/cxx/t-expr.cc: Various updates. - * tests/cxx/t-assign.cc, tests/cxx/t-binary.cc, - tests/cxx/t-ternary.cc, tests/cxx/t-unary.cc: New files. - -2002-07-27 Kevin Ryde <kevin@swox.se> - - * longlong.h (count_trailing_zeros) [ia64 __GNUC__]: Don't use - __builtin_ffs for now, doesn't seem to work. - - * configure.in: Establish CONFIG_SHELL to avoid a problem with - AC_LIBTOOL_SYS_MAX_CMD_LEN on ia64-*-hpux*. - - * tune/speed.h (SPEED_ROUTINE_MPN_GCD_FINDA): Don't let calls to - mpn_gcd_finda go dead. - - * mpn/generic/tdiv_qr.c: Inline mpn_rshift and MPN_COPY of 2 limbs. - -2002-07-24 Kevin Ryde <kevin@swox.se> - - * demos/primes.c: Use __GMP_PROTO and don't use signed, for the - benefit of K&R. - - * demos/calc/calclex.l: Add <string.h> for strcmp. - - * mpn/ia64/invert_limb.asm: Use .rodata which works on ia64-*-hpux* - and should be standard, rather than worrying about RODATA. - - * gmp.texi (Function Classes): Add cross references. - (Integer Import and Export): Fix return value grouping. - - * mpn/lisp/gmpasm-mode.el (gmpasm-comment-start-regexp): Add // for - ia64. Add notes on what the various styles are for. - - * mpn/ia64/default.m4 (ASM_START): Define to empty, not dnl, so as not - to kill text on the same line. - (EPILOGUE_cpu): Force a newline after "#", so as not to suppress macro - expansion in the rest of the EPILOGUE line. - -2002-07-21 Kevin Ryde <kevin@swox.se> - - * tune/speed.h: Fix some missing _PROTOs. - - * Makefile.am (DISTCLEANFILES): Add configure.lineno. - - * acinclude.m4 (GMP_C_DOUBLE_FORMAT): Define - HAVE_DOUBLE_IEEE_BIG_ENDIAN and HAVE_DOUBLE_IEEE_LITTLE_ENDIAN in - config.m4 too. - * mpn/ia64/invert_limb.asm: Add big-endian data. - - * tests/mpz/t-jac.c (try_si_zi): Correction to "a" parameter type. - -2002-07-20 Kevin Ryde <kevin@swox.se> - - * mpz/bin_ui.c, mpz/jacobi.c, mpz/pprime_p.c, mpn/generic/divis.c: - More care with long and mp_size_t parameters, for the benefit of K&R. - - * gmp-impl.h (invert_limb): Use parens around macro arguments. - (mpn_invert_limb): Give prototype and define unconditionally. - - * gmp-impl.h (CACHED_ABOVE_THRESHOLD, CACHED_BELOW_THRESHOLD): New - macros. - * mpn/generic/sb_divrem_mn.c: Use them to help gcc let preinv code go - dead when not wanted. - -2002-07-17 Kevin Ryde <kevin@swox.se> - - * tests/refmpz.c (refmpz_hamdist): Ensure mp_size_t parameters are - that type, for the benefit of hpux ia64 bundled cc ABI=64. - - * configure.in (ia64*-*-hpux*): Need +DD64 in cc_64_cppflags to get - the right headers for ansi2knr. - - * acinclude.m4 (GMP_TRY_ASSEMBLE, GMP_ASM_UNDERSCORE): Use $CPPFLAGS - with $CCAS and when linking, as done by the makefiles. - (GMP_ASM_X86_MMX, GMP_ASM_X86_SSE2): Show $CPPFLAGS in diagnostics. - - * gmp-impl.h (ieee_double_extract): Setup using HAVE_DOUBLE_IEEE_*. - (GMP_UINT32): New define, 32 bit type for ieee_double_extract. - * configure.in: Add AC_CHECK_SIZEOF unsigned. - * configure.in, acinclude.m4 (GMP_IMPL_H_IEEE_FLOATS): Remove. - (GMP_C_DOUBLE_FORMAT): Instead warn about unknown float here. - - * configure.in, acinclude.m4 (GMP_C_SIZES): Remove. - * acinclude.m4 (GMP_INCLUDE_GMP_H_BITS_PER_MP_LIMB): Remove this - scheme, not required. - * configure.in (unsigned long, mp_limb_t): Run AC_CHECK_SIZEOF for - these unconditionally, check mp_limb_t against gmp-mparam.h values. - * gmp-impl.h (BYTES_PER_MP_LIMB, BITS_PER_MP_LIMB): Define based on - SIZEOF_MP_LIMB_T if not provided by gmp-mparam.h. - (BITS_PER_ULONG): Define here now. - - * gmp.texi (ABI and ISA): Add HP-UX IA-64 choices. - (Random State Initialization): Typo in m2exp described for - gmp_randinit_lc_2exp_size. - (Formatted Output Functions): Clarify gmp_obstack_printf a bit. - (Formatted Input Strings): Typo in %n summary. - - * mpz/inp_raw.c (NTOH_LIMB_FETCH): Use simple generic default, since - endianness detection is now cross-compile friendly. - * mpz/out_raw.c (HTON_LIMB_STORE): Ditto. - - * mpz/fib_ui.c: Nailify. - * mpz/random.c: Nailify. - - * mpfr/acinclude.m4 (MPFR_CONFIGS): Patch by Vincent for an apparent - float rounding gremlin on powerpc. - -2002-07-15 Kevin Ryde <kevin@swox.se> - - * Makefile.am (PRINTF_OBJECTS): Avoid ending in a backslash, hpux ia64 - make doesn't like that. - - * mpn/ia64/*.asm: Add .sptk to unconditional branches, add ";" after - .mib etc, for the benefit of hpux. - - * configure.in (ia64*-*-*): Use ABI=64 on non-HPUX systems, for - consistency. - - * gmp-impl.h (ieee_double_extract): Test __sparc__, used by gcc 3.1. - Reported by nix@esperi.demon.co.uk. - * mpfr/mpfr-math.h (_MPFR_NAN_BYTES etc): Ditto. - -2002-07-13 Kevin Ryde <kevin@swox.se> - - * mpn/powerpc32/rshift.asm: Rewrite, transformed from lshift.asm. - - * tune/tuneup.c (DIVEXACT_1_THRESHOLD, MODEXACT_1_ODD_THRESHOLD): - Always zero for native mpn_divexact_1, mpn_modexact_1_odd. - - * gmp-h.in (__GMP_EXTERN_INLINE): Don't use this during configure, - ie. __GMP_WITHIN_CONFIGURE, to avoid needing dependent routines. - * acinclude.m4 (GMP_H_EXTERN_INLINE): Consequent changes. - - * gmp-impl.h, mpn/asm-defs.m4 (mpn_addmul_2, mpn_addmul_3, - mpn_addmul_4): Add prototypes and defines. - - * gmp.texi (Number Theoretic Functions): Clarify return value. - Reported by Peter Keller. - -2002-07-10 Kevin Ryde <kevin@swox.se> - - * configure.in, acinclude.m4 (GMP_PROG_LEX): Remove this in favour of - AM_PROG_LEX, now ok when lex is missing. - - * longlong.h (count_leading_zeros) [pentiummmx]: Don't use __clz_tab - variant under LONGLONG_STANDALONE. - (count_trailing_zeros) [ia64 __GNUC__]: Use __builtin_ffs. - - * gmp-impl.h (popc_limb): Add an ia64 asm version. - (DItype): Use HAVE_LONG_LONG to choose long long, avoiding _LONGLONG - which is in gcc but means something unrelated in MS Visual C 7.0. - Reported by David Librik. - - * mpz/divexact.c: Add an ASSERT that den divides num. - - * mpn/asm-defs.m4 (LDEF): New macro. - (INT32, INT64): Use it. - * mpn/pa32/*.asm: Use it. - * mpn/pa32/README: Update notes on labels. - - * tests/refmpn.c, tests/tests.h, tests/t-bswap.c (ref_bswap_limb): - Renamed from refmpn_bswap_limb. - * tests/t-bswap.c: Add tests_start/tests_end for randomization. - - * tests/refmpn.c, tests/tests.h (ref_popc_limb): New function. - * tests/t-popc.c: New file. - * tests/Makefile.am: Add it. - - * mpn/ia64/invert_limb.asm: Use RODATA since ".section .rodata" is not - accepted by ia64-*-hpux*. - - * acinclude.m4 (GMP_ASM_BYTE): New macro. - (GMP_ASM_ALIGN_LOG, GMP_ASM_W32): Use it. - (GMP_ASM_LABEL_SUFFIX): Use test compiles, not $host. - (GMP_ASM_GLOBL): Ditto, and add .global for ia64-*-hpux*. - (GMP_ASM_GLOBL_ATTR): Use GMP_ASM_GLOBL result, not $host. - (GMP_ASM_LSYM_PREFIX): Allow any "a-z" nm symbol code, add ".text" to - test program, required by ia64-*-hpux*. - (GMP_ASM_LABEL_SUFFIX): Make LABEL_SUFFIX just the value, not a "$1:", - the former being how it's currently being used in fact. - - * configure.in, acinclude.m4 (GMP_PROG_CC_WORKS_LONGLONG): New macro. - * configure.in (ia64-*-hpux*): Add 32 and 64 bit ABI modes. - -2002-07-06 Kevin Ryde <kevin@swox.se> - - * tests/cxx/t-allfuns.cc: New file. - * tests/cxx/Makefile.am: Add it. - - * mpz/clrbit.c, mpz/setbit.c: Only MPN_NORMALIZE if high limb changes - to zero. Use _mpz_realloc return value. - - * gmp.texi (Build Options, C++ Formatted Output, C++ Formatted Input): - Cross reference to Headers and Libraries for libgmpxx stuff. - (Low-level Functions): mpn_divexact_by3 result based on GMP_NUMB_BITS. - mpn_set_str takes "unsigned char *", reported by Mark Sofroniou. - (C++ Interface General): Describe linking with libgmpxx and libgmp. - -2002-07-01 Kevin Ryde <kevin@swox.se> - - * tune/tuneup.c, gmp-impl.h: Eliminate the array of thresholds in - one(), tune just one at a time and let the callers hand dependencies. - Eliminate the second_start_min hack, handle SQR_KARATSUBA_THRESHOLD - oddities in tune_sqr() instead. - - * mpn/pa64/umul.asm, mpn/pa64/udiv.asm, mpn/asm-defs.m4, acconfig.h, - longlong.h, tune/speed.c, tune/speed.h, tune/common.c, tune/many.pl, - tests/devel/try.c: Introduce mpn_umul_ppmm_r and mpn_udiv_qrnnd_r - rather than having variant parameter order for mpn_umul_ppmm and - mpn_udiv_qrnnd on pa64. - - * gmp-h.in (mpz_export): Remove a spurious parameter name. - * gmp-impl.h (mpn_rootrem): Use __MPN. - -2002-06-29 Kevin Ryde <kevin@swox.se> - - * longlong.h (udiv_qrnnd) [hppa32]: Remove mpn_udiv_qrnnd version, the - general mechanism for that suffices. - - * mpf/inp_str.c: Fix returned count of chars read, reported by Paul - Zimmermann. Also fix a memory leak for invalid input. - * tests/mpf/t-inp_str.c: New file. - * tests/mpf/Makefile.am (check_PROGRAMS): Add it. - - * tests/devel/try.c (mpn_mod_34lsub1): Only exists for - GMP_NUMB_BITS%4==0. - (SIZE2_FIRST): Respect option_firstsize2 for "fraction" case. - - * mpn/generic/diveby3.c: Further nailifications. - * gmp-impl.h (MODLIMB_INVERSE_3): Allow for GMP_NUMB_BITS odd. - (GMP_NUMB_CEIL_MAX_DIV3, GMP_NUMB_CEIL_2MAX_DIV3): New constants. - * tests/t-constants.c: Check them. - - * gmp-h.in (__GMP_CRAY_Pragma): New macro. - (__GMPN_COPY_REST): Use it. - * gmp-impl.h (CRAY_Pragma): Use it. - -2002-06-25 Kevin Ryde <kevin@swox.se> - - * mpz/import.c, mpz/export.c: Cast data pointer through "char *" in - alignment tests, for the benefit of Cray vector systems. - - * configure.in (x86-*-*): Remove -march=pentiumpro check, seems ok - with current code. - * acinclude.m4 (GMP_GCC_MARCH_PENTIUMPRO, GMP_GCC_VERSION_GE): Remove - macros, no longer needed - - * acinclude.m4 (GMP_ASM_RODATA): Remove temporary files. - - * configure.in (GMP_ASM_GLOBL_ATTR): Reposition to avoid duplication - through AC_REQUIRE. - -2002-06-23 Kevin Ryde <kevin@swox.se> - - * tests/mpz/t-fib_ui.c (check_fib_table): Check table values, not just - that they're non-zero. - - * acinclude.m4 (GMP_GCC_ARM_UMODSI): Match bad "gcc --version" output - exactly, rather than parsing it with GMP_GCC_VERSION_GE. - (GMP_ASM_UNDERSCORE): Use GLOBL_ATTR. - - * mpn/pa32/udiv.asm, mpn/pa32/hppa1_1/udiv.asm, mpn/pa64/udiv.asm: - Renamed from udiv_qrnnd.asm, for consistency with other udiv's. - * mpn/pa64/umul.asm: Renamed from umul_ppmm.asm likewise. - * configure.in (hppa*-*-*): Update extra_functions. - (NAILS_SUPPORT): Remove umul_ppmm, udiv_qrnnd, udiv_fp, udiv_nfp from - nails-neutral list, no longer needed. - - * gmp-h.in (__DECC): Add notes on testing this for ANSI-ness. - (__GMP_EXTERN_INLINE): Add static __inline for DEC C. - (mpz_mod_ui): Move up to main section, it's still documented. - -2002-06-22 Kevin Ryde <kevin@swox.se> - - * mpz/jacobi.c, mpz/kronsz.c, mpz/kronuz.c, mpz/kronzs.c, - mpz/kronzu.c: Allow for odd GMP_NUMB_BITS, tweak a few variable setups. - * gmp-impl.h (JACOBI_STRIP_LOW_ZEROS): New macro. - - * mpn/generic/mod_34lsub1.c: Nailify. - * tests/devel/try.c (CNST_34LSUB1): Nailify. - * gmp-impl.h (ADDC_LIMB): New macro. - - * gmpxx.h (mpf_class::get_str): Make exponent mp_exp_t&, default - base=10 and ndigits=0. - (mpz_class::set_str, mpq_class::set_str, mpf_class::set_str): Add - versions accepting "const char *". - * mpfrxx.h (mpfr_class::get_str, mpfr_class::set_str): Ditto, and - uncommenting set_str and operator=. - * gmp.texi (C++ Interface Integers, C++ Interface Rationals) - (C++ Interface Floats): Update. - - * gmp-impl.h (modlimb_invert): Merge the <=64bits and general versions. - (const, signed): Move to near top of file, fixes --enable-alloca=debug - on K&R. - - * gen-fib.c: New file, derived from mainline in mpn/generic/fib2_ui.c. - * dumbmp.c (mpz_init_set_ui): New function. - * Makefile.am, mpn/Makefile.am: Generate fib_table.h, mpn/fib_table.c. - * gmp-impl.h: Use fib_table.h, add __GMP_DECLSPEC to __gmp_fib_table - (for the benefit of tests/mpz/t-fib_ui.c). - * mpn/generic/fib2_ui.c: Remove __gmp_fib_table and generating code. - - * Makefile.am: Add mp.h to BUILT_SOURCES, distclean all BUILT_SOURCES, - use += more. - - * acinclude.m4 (GMP_ASM_M68K_INSTRUCTION, GMP_ASM_M68K_BRANCHES): - Don't let "unknown" get into the cache variables. - (GMP_ASM_TEXT): See what assembles, don't hard-code hpux and aix. - (GMP_PROG_EXEEXT_FOR_BUILD): Add ,ff8 for RISC OS, per autoconf cvs. - (GMP_PROG_CPP_FOR_BUILD): Restructure per AC_PROG_CPP, print correct - result if CPP_FOR_BUILD overrides the cache variable. - (GMP_PROG_CC_FOR_BUILD_WORKS): New macro split from - GMP_PROG_CC_FOR_BUILD. Allow for "conftest" default compiler output. - * configure.in, acinclude.m4 (GMP_PROG_HOST_CC): Reinstate this, - separating HOST_CC establishment from GMP_PROG_CC_FOR_BUILD. - - * configure.in (mpn_objs_in_libgmp): Move mpn/mp_bases.lo ... - * Makefile.am (MPN_OBJECTS): ... to here, add $U, and arrange - MPN_OBJECTS to be common between libgmp and libmp. - -2002-06-20 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_n.c (TOOM3_MUL_REC, TOOM3_SQR_REC): Don't check if - basecase is to be invoked when *_TOOM3_THRESHOLD is more than 3 times - the corresponding *_THRESHOLD. - -2002-06-20 Kevin Ryde <kevin@swox.se> - - * mpn/ia64/submul_1.c: Add missing TMP_DECL, TMP_MARK, TMP_FREE. - Reported by Paul Zimmermann. - - * configure.in, acinclude.m4 (AC_DEFINE): Make templates read "Define - to 1", for clarity as per autoconf. - * acinclude.m4 (GMP_OPTION_ALLOCA): Group WANT_TMP templates. - -2002-06-20 Gerardo Ballabio <gerardo.ballabio@unimib.it> - - * gmpxx.h, mpfrxx.h: Remove mpz_classref, let mpq_class::get_num and - mpq_class::get_den return mpz_class& as per the documentation. - Reported by Roberto Bagnara. - -2002-06-18 Kevin Ryde <kevin@swox.se> - - * tests/rand/t-lc2exp.c: New file. - * tests/rand/Makefile.am: Add it, and use tests/libtests.la. - - * randraw.c (lc): Pad seed==0 case with zero limbs, return same - (m2exp+1)/2 bits as normal, right shift "c" result as normal. - - * configure.in: Don't bother with line numbers in some diagnostics. - (*-*-mingw*): Use -mno-cygwin if it works, suggested by delta trinity. - - * tests/mpz/Makefile.am, tests/mpq/Makefile.am, - tests/misc/Makefile.am, (CLEANFILES): Set to *.tmp for test program - temporaries, to get t-scanf.tmp and reduce future maintenance. - -2002-06-16 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/get_str.c (mpn_dc_get_str): Pass scratch memory area in - new `tmp' parameter. Trim allocation needs by reusing input parameter. - -2002-06-15 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc32/v9/udiv.asm: New file. - -2002-06-15 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_GCC_VERSION_GE): Correction to recognising mingw - gcc 3.1 version number. Reported by Jim Fougeron. - - * configure.in (AC_PROVIDE_AC_LIBTOOL_WIN32_DLL): New define, to make - AC_LIBTOOL_WIN32_DLL work with autoconf 2.53. - - * acinclude.m4 (GMP_C_SIZES): Establish BITS_PER_MP_LIMB as a value, - not an expression, for the benefit of the gen-bases invocation. - - * config.guess (CC_FOR_BUILD): Try c99, same as configfsf.guess. - -2002-06-15 Paul Zimmermann <Paul.Zimmermann@loria.fr> - - * mpfr/set_q.c: Allow for 1 bit numerator or denominator. - -2002-06-14 Kevin Ryde <kevin@swox.se> - - * configure.in (AC_C_BIGENDIAN): Use new style action parameters. - - * randlc2x.c: Allow for a<0, allow for c>=2^m2exp. - * randraw.c (lc): Allow for a==0. - - * mpn/sparc32/udiv.asm: Renamed from udiv_fp.asm. Don't know if float - is the best way for v7, but it's what configure has chosen since gmp 3. - * configure.in (*sparc*-*-* ABI=32): extra_functions="udiv" for all, - in particular sparc32/v8/udiv.asm is faster (on ultrasparc2) than - udiv_fp previously used for v9 chips. - - * gen-bases.c: New file, derived from mpn/mp_bases.c. - * dumbmp.c: New file, mostly by Torbjorn, some by me. - * configure.in, acinclude.m4 (GMP_PROG_CC_FOR_BUILD, - GMP_PROG_CPP_FOR_BUILD, GMP_PROG_EXEEXT_FOR_BUILD, - GMP_C_FOR_BUILD_ANSI, GMP_CHECK_LIBM_FOR_BUILD): New macros. - (GMP_PROG_HOST_CC): Remove, superceded by GMP_PROG_CC_FOR_BUILD. - * Makefile.am: Run gen-bases to create mp_bases.h and mpn/mp_bases.c. - * gmp-impl.h: Use mp_bases.h. - * mpn/mp_bases.c: Remove file. - * mpn/Makefile.am: mp_bases.c now in nodist_libmpn_la_SOURCES. - - * tests/mpz/t-cmp_d.c (check_one_2exp): Use volatile to force to - double, fixes gcc 3.1 with -O4. Reported by Michael Lee. - * configure.in (AC_C_VOLATILE): New macro. - - * tests/misc/t-scanf.c: (fromstring_gmp_fscanf): Add missing va_end. - Don't mix varargs and fixed args functions, not good on x86_64. - Reported by Marcus Meissner. - - * Makefile.am (EXTRA_DIST): Remove mpfr/README, now in mpfr/Makefile.in - - * configure, config.in, INSTALL.autoconf: Update to autoconf 2.53. - * */Makefile.in, install-sh, mdate-sh, missing, aclocal.m4, configure: - Update to automake 1.6.1. - * configfsf.guess, configfsf.sub: Update to 2002-05-29. - -2002-06-12 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_GCC_VERSION_GE): Recognise mingw gcc 3.1 version. - (GMP_PROG_CC_WORKS): Allow for a_out.exe, as per autoconf. - (GMP_GCC_NO_CPP_PRECOMP, GMP_ASM_UNDERSCORE): Ditto, plus a.exe. - -2002-06-09 Torbjorn Granlund <tege@swox.com> - - * randraw.c (lc): Remove broken ASSERT_ALWAYS. - - * mpn/x86: Update gmp-mparam.h files with current measures *_THRESHOLD - values. - * mpn/x86/p6/mmx/gmp-mparam.h: New file. - -2002-06-09 Kevin Ryde <kevin@swox.se> - - * mpn/x86/*/gmp-mparam.h (USE_PREINV_DIVREM_1): Add tuned settings. - - * acconfig.h (HAVE_NATIVE_mpn_preinv_divrem_1): New template. - - * tests/refmpn.c, tests/tests.h (refmpn_chars_per_limb, - refmpn_big_base): New functions. - * tests/mpn/t-mp_bases.c: Use them, and don't test big_base_inverted - unless it's being used. - - * gmp.texi (Notes for Particular Systems): Using Microsoft C with DLLs. - (Known Build Problems): Notes on MacOS and GCC. - (Integer Logic and Bit Fiddling): Use ULONG_MAX for maximum ulong. - (Low-level Functions): mpn_get_str accepts base==256. - (Formatted Output Functions): Note output is not atomic. - (Internals): Note mp_size_t for limb counts. - - * mp-h.in, gmp-h.in (mp_ptr, mp_srcptr, mp_size_t, mp_exp_t): Remove - these types from mp.h, not needed. - - * mpfr/tests/tadd.c, mpfr/tests/tmul.c (check): Apply a hack to the - parameter order to make sparc gcc 2.95.2 happy. - - * doc/configuration: Notes on bootstrapping. - -2002-06-08 Kevin Ryde <kevin@swox.se> - - * mpfr/tests/tsqrt.c, mpfr/tests/tsqrt_ui.c: Suppress tests if sqrt is - not affected by mpfr_set_machine_rnd_mode. - - * mpfr/mul_2si.c: Workaround a mips gcc 2.95.3 bug under -O2 -mabi=n32. - - * configure.in (alphev56): Fix to use ev5 path. - -2002-06-06 Kevin Ryde <kevin@swox.se> - - * gmp-h.in: Use __gmp_const not const, in a number of places. - - * configure.in (sparc): Use ABI=32 instead of ABI=standard on v7 and - v8, for consistency with v9 choices. - (sparc64): Restrict GMP_ASM_SPARC_REGISTER to ABI=64. - (x86): Move MMX $path munging to before printout. - (CCAS): Move upward to support this. - - * gmp-impl.h (modlimb_invert): Merge macros for specific limb sizes, - add a version for arbitrary limb size, use GMP_NUMB_BITS. - (modlimb_invert, MODLIMB_INVERSE_3): Fix comments to say GMP_NUMB_BITS. - - * gmp-h.in (__GMP_LIKELY, __GMP_UNLIKELY): New macros. - (mpz_getlimbn, mpz_perfect_square_p, mpz_popcount): Use them, make the - fetch or mpn call likely, unconditionally calculate the alternative so - as to avoid an "else" clause. - * gmp-impl.h (LIKELY, UNLIKELY): Aliases. - - * configure.in, mpfr/tests/Makefile.am: Add $LIBM to $LIBS for - MPFR_CONFIGS so it detects fesetround, and let it go through to - $MPFR_LIBS. - * mpfr/rnd_mode.c: Use gmp-impl.h to get MPFR_HAVE_FESETROUND. - - * tests/mpz/t-sizeinbase.c: Disable fake bits test, such pointer - setups are bogus and have been seen failing on hppa. - - * tests/misc.c, tests/refmpz.c, tests.tests.h, tests/mpz/t-cong.c: - Rename mpz_flipbit to refmpz_combit and move from misc.c to refmpz.c. - -2002-06-05 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-powm_ui.c Print proper routine name in error message. - -2002-06-03 Kevin Ryde <kevin@swox.se> - - * tune/time.c, tune/freq.c, tune/speed.h: Add powerpc mftb support. - (FREQ_MEASURE_ONE): Move to speed.h, fix tv_sec factor. - (freq_measure): Use for mftb measuring too. - * tune/powerpc.asm, tune/powerpc64.asm: New files. - * configure.in, tune/Makefile.am: Add them. - - * gmp-impl.h (popc_limb): Add versions for Cray and fallback for - arbitrary limb size. - - * mpn/sparc32/sparc-defs.m4: New file. - * configure.in (sparc*-*-*): Use it. - * acinclude.m4 (GMP_ASM_SPARC_REGISTER): New macro. - * configure.in (sparc64): Use it. Also, use -Wc,-m64 for linking. - * mpn/sparc64/add_n.asm, mpn/sparc64/addmul_1.asm, - mpn/sparc64/copyd.asm, mpn/sparc64/copyi.asm, mpn/sparc64/lshift.asm, - mpn/sparc64/mul_1.asm, mpn/sparc64/rshift.asm, - mpn/sparc64/sqr_diagonal.asm, mpn/sparc64/sub_n.asm, - mpn/sparc64/submul_1.asm: Use REGISTER for .register. - -2002-06-01 Kevin Ryde <kevin@swox.se> - - * mpz/powm_ui.c: Fix for result range in certain circumstances. - - * mpn/x86/k6/diveby3.asm: Speedup to 10 c/l, same as divexact_1. - Anomaly pointed out by Alexander Kruppa. - -2002-05-31 Torbjorn Granlund <tege@swox.com> - - * mpz/export.c: Cast pointer via `unsigned long' when checking - alignment to avoid compiler warnings. - -2002-05-29 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (BSWAP_LIMB): Versions for m68k, powerpc, and arbitrary - limb size. - * configure.in, acconfig.h (HAVE_HOST_CPU_FAMILY_m68k): New define. - -2002-05-27 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_basecase.c: Improve MAX_LEFT handling, returning - when possible. Add code for mpn_addmul_5 and mpn_addmul_6. - -2002-05-25 Kevin Ryde <kevin@swox.se> - - * tune/tuneup.c: Misc nailifications, and disable preinv thresholds - with nails. - * tune/speed.h: Use GMP_NUMB_HIGHBIT with mpn_sb_divrem_mn and - mpn_divrem_2. - * mpz/powm.c (redc): Nailify q. - - * tests/mpn/t-scan.c: Reduce the amount of testing, to go faster. - -2002-05-23 Torbjorn Granlund <tege@swox.com> - - * Version 4.1 released. - - * mpn/alpha/ev6/nails/gmp-mparam.h: New file. - - * tests/devel/add_n.c (refmpn_add_n): Nailify. - * tests/devel/sub_n.c (refmpn_sub_n): Nailify. - * tests/devel/addmul_1.c (refmpn_addmul_1): Nailify. - * tests/devel/submul_1.c (refmpn_submul_1): Nailify. - - * mpn/alpha/ev6/nails/add_n.asm: New file. - * mpn/alpha/ev6/nails/sub_n.asm: New file. - * mpn/alpha/ev6/nails/mul_1.asm: New file. - * mpn/alpha/ev6/nails/submul_1.asm: New file. - -2002-05-22 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev6/nails/addmul_1.asm: New file. - - * mpz/inp_str.c (mpz_inp_str_nowhite): Nailify. - - * mpn/generic/mul_basecase.c: Update pointers before conditional - MAX_LEFT break statements. - -2002-05-21 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-gcd.c: Test mpz_gcd_ui. - - * mpz/lcm_ui.c: Nailify. - - * mpz/gcd_ui.c: Nailify. Make it work as documented, allowing - NULL to be passed for result parameter. Fix gcd(0,0) case. - - * mpz/set_str.c: Nailify. - - * randlc2x.c (gmp_randinit_lc_2exp): Nailify. - - From Jakub Jelinek: - * longlong.h (add_ssaaaa,sub_ddmmss) [64-bit sparc]: - Make it actually work. - -2002-05-18 Torbjorn Granlund <tege@swox.com> - - * mpf/ui_div.c: Shut up compiler warning. - - * mpn/generic/mul_basecase.c: Use mpn_addmul_2, mpn_addmul_3, and - mpn_addmul_4, as available. - - * mpn/alpha/ev6/nails/addmul_2.asm: Adjust NAILS_SUPPORT decls. - * mpn/alpha/ev6/nails/addmul_3.asm: Likewise - * mpn/alpha/ev6/nails/addmul_4.asm: Likewise. - - * configure.in (*-cray-unicos*): Back again to -hscalar0. - (gmp_mpn_functions_optional): Add mul_3, mul_4, addmul_2, addmul_3, - and addmul_4. - * acconfig.h: Add #undefs for new optional mpn functions. - -2002-05-18 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Integer Import and Export): Mention Cray unfilled words. - - * mpz/set_d.c, mpq/set_d.c: Use LIMBS_PER_DOUBLE for the output of - __gmp_extract_double. Reported by Henrik Johansson. - -2002-05-17 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev6/nails/addmul_2.asm: New file. - * mpn/alpha/ev6/nails/addmul_3.asm: New file. - * mpn/alpha/ev6/nails/addmul_4.asm: New file. - - * mpn/generic/dump.c: Rewrite and nailify. - -2002-05-16 Kevin Ryde <kevin@swox.se> - - * mpfr/Makefile.am (EXTRA_DIST): Add BUGS file. - -2002-05-15 Torbjorn Granlund <tege@swox.com> - - * configure.in (*-cray-unicos*): Remove -hscalar0, add -hnofastmd - as workaround for compiler bug. - (mips64*-*-*): Pass just -O1 to cc, to work around compiler bug. - -2002-05-14 Torbjorn Granlund <tege@swox.com> - - * configure.in (*-cray-unicos*): Pass -hscalar0 to work around - compiler bug for mpz/import.c. - -2002-05-11 Torbjorn Granlund <tege@swox.com> - - * mpz/import.c: Cast pointer via `unsigned long' when checking - alignment to avoid compiler warnings. - - * mpn/generic/rootrem.c: Adjust allocation of qp temporary area. - -2002-05-09 Kevin Ryde <kevin@swox.se> - - * mpz/import.c: Corrections to size store, special case tests, and - general case ACCUMULATE. - * tests/mpz/t-import.c, tests/mpz/t-export.c: More test data. - -2002-05-09 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/rootrem.c: Use temp space for root, copy value in place - before returning. - * mpz/root.c: Don't allocate extra limb for root value. - * mpz/perfpow.c: Undo last change. - -2002-05-08 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (powerpc BSWAP_LIMB_FETCH): Rename local variable to make - it not clash with caller. - - * mpn/generic/rootrem.c: New file. - * configure.in (gmp_mpn_functions): Add rootrem and pow_1. - * mpn/Makefile.am (nodist_libdummy_la_SOURCES): Add rootrem.c and - pow_1.c - * gmp-impl.h (mpn_rootrem): Add declaration. - * mpz/perfpow.c: Amend allocations for mpn_rootrem requirements. - * mpz/root.c: Rewrite to use mpn_rootrem. - -2002-05-08 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (MUL_KARATSUBA_THRESHOLD etc): Remove forced nail values. - - * mpf/fits_u.h, mpf/fits_s.h, tests/mpf/t-fits.c: Ignore fraction - part, making the code match the documentation. - - * gmpxx.h (struct __gmp_binary_minus): Use mpz_ui_sub. - -2002-05-07 Kevin Ryde <kevin@swox.se> - - * mpn/powerpc32/README: New file. - - * mpz/root.c: Use unsigned long with mpz_sub_ui not mp_limb_t. - - * tune/README: Misc updates including sparc32/v9 smoothness, low res - timebase, and mpn_add_n operand overlaps. - * tune/many.pl: Add udiv.asm support. - - * gmp.texi (Build Options): A couple of --build better as --host. - (Known Build Problems, Notes for Package Builds): Add DESTDIR problem. - (Compatibility with older versions): Compatible with 4.x versions. - (Converting Integers): Remove mpz_get_ui + mpz_tdiv_q_2exp decompose. - (Integer Import and Export): New section. - (Miscellaneous Integer Functions): Clarify mpz_sizeinbase returns 1 - for operand of 0. - (Language Bindings): Add GNU Pascal. - (Low-level Functions): Add GMP_NUMB_MAX. - - * tests/mpz/t-import.c, tests/mpz/t-export.c, tests/mpz/t-get_d.c: - New tests. - * tests/mpz/Makefile.am: Add them. - - * mpz/import.c, mpz/export.c: New files. - * Makefile.am, mpz/Makefile.am, gmp-h.in: Add them. - - * gmp-h.in, gmp-impl.h (GMP_NUMB_MAX): Move to gmp.h. - * gmp-impl.h (CNST_LIMB): Add cast to mp_limb_t to ensure unsigned. - (CRAY_Pragma, MPN_REVERSE, MPN_BSWAP, MPN_BSWAP_REVERSE, - ASSERT_ALWAYS_LIMB, ASSERT_ALWAYS_MPN): New macros. - (MPZ_CHECK_FORMAT): Use ASSERT_ALWAYS_MPN. - -2002-05-07 Torbjorn Granlund <tege@swox.com> - - * mpz/aors_ui.h: Nailify. - - * tests/mpz/t-addsub.c: New file. - * tests/mpz/Makefile.am (check_PROGRAMS): Add t-addsub. - - * mpz/ui_sub.c: New file. - * mpz/Makefile.am (libmpz_la_SOURCES): Add ui_sub.c. - * Makefile.am (MPZ_OBJECTS): Ditto. - * gmp-h.in (mpz_ui_sub): Add declaration. - - * gmp-impl.h (MPZ_REALLOC): Rewrite to allow the use of _mpz_realloc - return value. - - * gmp-h.in (mpn_pow_1): Add declaration. - - * mpn/generic/pow_1.c: Handle exp <= 1. Reverse rp/tp parity scheme - for bn == 1 arm. - - * Rename MP_LIMB_T_HIGHBIT => GMP_LIMB_HIGHBIT. - -2002-05-06 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (main): Don't call mpz_sizeinbase with negative base. - - * randraw.c (lc): Remove an unused variable. - - * mpn/generic/get_str.c: Clarify an algorithm description. - - * tests/mpf/t-trunc.c: Nailify. - * tests/mpf/t-set_si.c: Disable for nails. - - * mpf/cmp_si.c: Nailify. - * mpf/cmp_ui.c: Nailify. - * mpf/div.c: Nailify. - * mpf/div_2exp.c: Nailify. - * mpf/div_ui.c: Nailify. - * mpf/eq.c: Nailify. - * mpf/get_d.c: Nailify. - * mpf/get_d_2exp.c: Nailify. - * mpf/get_si.c: Nailify. - * mpf/get_str.c: Nailify. - * mpf/get_ui.c: Nailify. - * mpf/mul_2exp.c: Nailify. - * mpf/random2.c: Nailify. - * mpf/set_q.c: Nailify. - * mpf/set_si.c: Nailify. - * mpf/set_str.c: Nailify. - * mpf/set_ui.c: Nailify. - * mpf/sub.c: Nailify. - * mpf/ui_div.c: Nailify. - * mpf/ui_sub.c: Nailify. - * mpf/urandomb.c: Nailify. - - * gmp-impl.h (__GMPF_BITS_TO_PREC, __GMPF_PREC_TO_BITS): Nailify. - - * mpz/get_si.c: Misc variable name changes. - - * mpf/fits_u.h: Rewrite - nailify. - * mpf/fits_s.h: Likewise. - - * mpz/mod.c: Disambiguate if-statement with extra {}. - - * mpf/int_p.c: Fix type of size variables. - * mpf/get_ui: Likewise. - * mpf/get_si: Likewise. - * mpq/equal.c: Likewise. - * mpq/get_d.c: Likewise. - * mpz/cmp_d.c: Likewise. - * mpz/cmpabs_d.c: Likewise. - * mpz/divis_2exp.c: Likewise. - * mpz/kronuz.c: Likewise. - * mpz/kronzu.c: Likewise. - * mpz/kronzs.c: Likewise. - * mpz/kronsz.c: Likewise. - * mpz/scan0.c: Likewise. - * mpz/scan1.c: Likewise. - * mpz/tstbit.c: Likewise. - * mpz/cong_2exp.c: Likewise. - * mpz/divis.c: Likewise. - -2002-05-04 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/gcd.c: Additional nailify changes. - -2002-05-04 Kevin Ryde <kevin@swox.se> - - * gmp-h.in (__GNU_MP_VERSION): Set to 4.1. - * Makefile.am (-version-info): Bump for new release. - -2002-04-30 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/divrem_1.c: Additional nailify changes. - * mpn/generic/mod_1.c: Likewise. - - * tests/mpq/t-get_d.c: Print floats with all 16 digits. - - * mpq/get_d.c: Nailify. - - * tests/mpq/t-set_f.c: Disable for nails. - - * mpz/get_d.c: Nailify. - - * gmp-impl.h (LIMBS_PER_DOUBLE, MP_BASE_AS_DOUBLE): Nailify. - - * gmp-h.in (__GMPZ_FITS_UTYPE_P): Cast maxval to before shifting it. - - * extract-dbl.c: Nailify. - -2002-04-29 Torbjorn Granlund <tege@swox.com> - - * mpq/md_2exp.c (mord_2exp): Nailify. - - * mpq/cmp_ui.c: Nailify. - - * mpq/cmp.c (mpq_cmp): Nailify. - - * mpn/generic/gcd.c: Nailify. GNUify code layout. - - * mpn/generic/gcdext.c: Nailify. Misc changes. - - * tests/mpz/t-sqrtrem.c: Let argv[1] mean # of repetitions. - * tests/mpz/t-gcd.c: Likewise. - - * mpz/gcd.c: Nailify. - - * mpn/generic/random.c: Nailify. - - * gmp-impl.h (modlimb_invert): Nailify. - -2002-04-27 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/gcdext.c (div2): Remove qh parameter. - (mpn_gcdext): Streamline double-limb code. - Move GCDEXT_THRESHOLD check to after initial division. - -2002-04-27 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (JACOBI_MOD_OR_MODEXACT_1_ODD): Allow for odd - GMP_NUMB_BITS. - - * tune/time.c (sgi_works_p): Allow for 64-bit counter, and fix - SGI_CYCLECNTR_SIZE handling. - - * demos/expr/exprfr.c: Add nan and inf constants. - * demos/expr/t-expr.c: Exercise them. - -2002-04-26 Torbjorn Granlund <tege@swox.com> - - * mpz/cmp_ui.c: Fix overflow conditions for nails. - - * gmp-h.in (mpz_get_ui): Fix typo from last change. - - * mpz/n_pow_ui.c: Adjust allocation for nails. - (GMP_NUMB_HALFMAX): Renamed from MP_LIMB_T_HALFMAX. - Fix umul_ppmm invocation for for nails. - -2002-04-24 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/gcdext.c: Simplify by using mpn_tdiv_qr instead of - mpn_divmod. - -2002-04-24 Kevin Ryde <kevin@swox.se> - - * configure.in (*-*-cygwin*): Give a sensible default command line - limit, to avoid blowups reported by Jim Fougeron on windows 9x. - (--enable-nails): Make the default 2, since mp_bases has data for that. - - * mpfr/mpfr-math.h (__mpfr_nan): Use a "double" for the bytes, to - avoid a mis-conversion on alpha gcc 3.0.2. - (_MPFR_INFP_BYTES, _MPFR_INFM_BYTES): Should be a zero mantissa. - -2002-04-23 Torbjorn Granlund <tege@swox.com> - - * mpz/dive_ui.c: Fix typo. - - * mpz/fits_s.h: Rewrite. - - * mpz/jacobi.c: Nailify. - * mpz/kronuz.c: Additional nailify changes. - * mpz/kronsz.c: Likewise. - -2002-04-23 Kevin Ryde <kevin@swox.se> - - * demos/expr/Makefile.am (LDADD): Add $(LIBM) for the benefit of mpfr. - - * mpz/divis_ui.c, mpz/cong_ui.c: Nailify. - * mpn/generic/bdivmod.c, mpz/divexact.c, mpz/dive_ui.c: Nailify. - * mpn/generic/sb_divrem_mn.c, mpn/generic/divrem.c, - mpn/generic/divrem_2.c: Nailify ASSERTs. - * mpn/x86/k6/mmx/logops_n.asm, mpn/x86/k6/mmx/com_n.asm: Nailify. - * mpz/inp_raw.c, mpz/out_raw.c: Nailify. - * mpz/kronzu.c, mpz/kronuz.c, mpz/kronzs.c, mpz/kronsz.c: Nailify. - * mpn/generic/divis.c, mpz/cong.c, mpz/cong_2exp.c: Nailify. - * gmp-impl.h (NEG_MOD): Nailify. - - * gmp-impl.h, mpn/mp_bases.c: Add back GMP_NUMB_BITS==30 bases data. - - * mpfr/get_d.c: Patch from Paul to avoid problem with constant folding - in gcc on OSF. - - * mpn/lisp/gmpasm-mode.el: Remove mention of defunct LF macro. - -2002-04-22 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c: Handle "binomial" operator. - - * mpz/cmp_ui.c: Move assignments of `up' out of conditionals. - - * mpn/generic/gcdext.c: Fix fencepost error in STAT code. - - * gmp-impl.h (mpn_com_n): Nailify. - - * tests/mpz/t-cdiv_ui.c: New file. - * tests/mpz/Makefile.am (check_PROGRAMS): Add t-cdiv_ui. - * mpz/cdiv_qr_ui.c: Nailify. - * mpz/cdiv_q_ui.c: Nailify. - * mpz/cdiv_r_ui.c: Nailify. - * mpz/cdiv_ui.c: Nailify. - - * tests/misc/t-printf.c (CHECK_N): Add cast to allow `char' to be an - unsigned type. - * tests/misc/t-scanf.c: Likewise. - - * mpz/mul_i.h: Rework nails code to handle parameter overlap. - - * tests/mpz/t-set_f.c: Disable for nails. - -2002-04-21 Torbjorn Granlund <tege@swox.com> - - * mpz/set_si.c: Add cast to support LONG_LONG_LIMB. - * mpz/iset_si.c: Likewise. - - * mpz/bin_ui.c: Nailify. - * mpz/bin_uiui.c: Nailify. - - * mpz/cmpabs_ui.c: Nailify. - - * tests/mpz/t-aorsmul.c: Nailify. - * mpz/aorsmul_i.c (mpz_addmul_ui, mpz_submul_ui): Nailify better. - -2002-04-20 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-fdiv_ui.c: Check mpz_fdiv_ui. - * tests/mpz/t-tdiv_ui.c: Check mpz_tdiv_ui. - - * mpz/tdiv_ui.c: Rewrite nails code. - * mpz/fdiv_ui.c: Nailify. - - * tests/mpz/t-tdiv_ui.c: Check returned remainders. - * tests/mpz/t-fdiv_ui.c: Merge in recent t-tdiv_ui changes. - - * mpz/tdiv_q_ui.c: Remove spurious TMP_* calls. - - * mpz/fdiv_qr_ui.c: Nailify. - * mpz/fdiv_q_ui.c: Nailify. - * mpz/fdiv_r_ui.c: Nailify. - - * mpz/get_si.c: Misc nailify changes to shut up compiler warnings. - - * mpz/ui_pow_ui.c: Fix typo in last change. - -2002-04-20 Kevin Ryde <kevin@swox.se> - - * tests/misc/t-printf.c, tests/misc/t-scanf.c: Check all %n types. - - * mpn/x86/k7/mmx/divrem_1.asm, mpn/x86/p6/mmx/divrem_1.asm - (mpn_preinv_divrem_1): New entrypoint. - (mpn_divrem_1): Avoid a branch when testing high<divisor. - * mpn/asm-defs.m4: Add define_mpn(preinv_divrem_1). - * configure.in: Allow divrem_1.asm to provide mpn_preinv_divrem_1. - - * gmp-impl.h [nails]: Add #undefs of MUL_KARATSUBA_THRESHOLD etc, to - override CPU gmp-mparam.h. Remove JACOBI_BASE_METHOD override since - it's nails-neutral. - - * tests/mpn/t-mp_bases.c: New file. - * tests/mpn/Makefile.am (check_PROGRAMS): Add it. - * tests/t-constants.c: Move MP_BASES constants checks to it. - - * mpn/mp_bases.c: Fix big_base_inverted values for nails. - * gmp-impl.h (MP_BASES_BIG_BASE_INVERTED_10, - MP_BASES_NORMALIZATION_STEPS_10): Fix nails values. - (MP_BASES_*): Remove GMP_NUMB_BITS == 30 data. - - * mpn/x86/pentium/com_n.asm, mpn/x86/pentium/logops_n.asm: Add - NAILS_SUPPORT indicators. - - * configure.in: Grep for NAILS_SUPPORT in cpu-specific code, and look - in "nails" subdirectories, print path used. - * mpn/asm-defs.m4 (NAILS_SUPPORT): New macro. - - * mpfr/mpfr-test.h: Include config.h, for the benefit of test programs - not using gmp-impl.h. - -2002-04-19 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-scan.c: Nailify. - - * mpz/tdiv_qr_ui.c: Nailify. - * mpz/tdiv_q_ui.c: Nailify. - * mpz/tdiv_r_ui.c: Nailify. - * mpz/tdiv_ui.c: Nailify. - - * mpz/cmp_ui.c: Nailify. - - * mpz/ui_pow_ui.c: Misc nailify changes to shut up compiler warnings. - - * mpz/scan0.c: Nailify. - * mpz/scan1.c: Nailify. - - * tests/mpz/t-sizeinbase.c (mpz_fake_bits): Nailify. - -2002-04-18 Torbjorn Granlund <tege@swox.com> - - * mpz/aorsmul_i.c: Nailify. - - * mpz/cmp_si.c: Nailify (botched). - - * mpz/ui_pow_ui.c: Nailify. - - * gmp-h.in (__GMPZ_FITS_UTYPE_P): Nailify. - - * mpz/fits_s.h: Nailify. - - * tests/mpz/bit.c (check_tstbit): Nailify. - - From Paul Zimmermann: - * mpn/generic/sqrtrem.c: Nailify. - - * mpz/n_pow_ui.c: Nailify. - - * mpz/cfdiv_r_2exp.c: Nailify. - - * randraw.c (lc): Undo: Let mpn_rshift put result in place to avoid - extra MPN_COPY. - -2002-04-17 Torbjorn Granlund <tege@swox.com> - - * mpz/clrbit.c: Add two GMP_NUMB_MASK masks after addition. - - * mpn/generic/random2.c (LOGBITS_PER_BLOCK): Decrease to 4. - - * gmp-impl.h (nail DIV_DC_THRESHOLD): Decrease to 50 to allow fast - division. - - * mpn/generic/random2.c: Nailify. - - * mpz/fac_ui.c: Nailify. - - * mpz/mul_i.h: #if ... #endif code block to shut up gcc warnings. - - * mpn/generic/sqrtrem.c: Adopt to GNU coding standards. - (mpn_dc_sqrtrem): New name for mpn_dq_sqrtrem. - Partial nailification. - - * configure.in: As a temporary hack, clear extra_functions for nails - builds. - - * gmp-h.in (mpz_get_ui): #if ... #endif else code block to shut up gcc - warnings. - -2002-04-17 Kevin Ryde <kevin@swox.se> - - * texinfo.tex: Update to 2002-03-26.08 per texinfo 4.2. - * gmp.texi: Must have @top in @ifnottex (or @contents doesn't come out - in one run). - - * mpn/generic/scan0.c, mpn/generic/scan1.c: Nailify. - - * tests/mpn/t-scan.c: New file. - * tests/mpn/Makefile.am (check_PROGRAMS): Add it. - - * tests/refmpn.c, tests/tests.h (refmpn_tstbit): Use unsigned long for - bit index. - (refmpn_setbit, refmpn_clrbit, refmpn_scan0, refmpn_scan1): New - functions. - - * mpfr/cmp_ui.c (mpfr_cmp_si_2exp): Fix b==0 i!=0 case. - -2002-04-17 Gerardo Ballabio <gerardo.ballabio@unimib.it> - - * gmpxx.h, mpfrxx.h: Remove mpfr_class bool combinations, remove - mpfr_class::get_str2, use mp_rnd_t for rounding modes, use - 8*sizeof(double) for mpfr_t's holding doubles. - -2002-04-17 Torbjorn Granlund <tege@swox.com> - - * mpz/powm.c: Nailify. - * mpz/powm_ui.c: Nailify. - -2002-04-16 Torbjorn Granlund <tege@swox.com> - - * mpz/hamdist.c: Nailify. - * tests/misc.c (urandom): Nailify. - - * mpz/get_si.c: Nailify. - * gmp-h.in (mpz_get_ui): Nailify. Streamline (and probably upset - memory checkers). - - * gmp-impl.h (mp_bases[10] values): Add versions for GMP_NUMB_BITS - being 28, 60, and 63. - * mpn/mp_bases.c: Add tables for GMP_NUMB_BITS being 28, 60, and 63. - - * mpz/iset_si.c: Nailify. - * mpz/iset_ui.c: Nailify - - * tests/mpz/convert.c (main): Print test number in error message. - - * mpn/generic/get_str.c (mpn_sb_get_str): Shift up `frac' into nails - field after bignum division. - -2002-04-16 Kevin Ryde <kevin@swox.se> - - * gmp-h.in, gmp-impl.h (GMP_NAIL_MASK): Move to gmp.h. - - * gmp.texi: Use @documentdescription and @copying, per texinfo 4.2. - (Low-level Functions): Clarify mpn_gcd overlap requirements, rewrite - mpn_set_str description, add nails section. - (C++ Interface General): Remove bool from types that mix with classes. - (Language Bindings): Add STklos, GNU Smalltalk, Regina. - (Binary to Radix, Radix to Binary): Describe new code. - (Assembler Cache Handling): More notes, mostly by Torbjorn. - - * macos/configure (%vars): Remove __GMP from substitutions, per change - to main configure. - - * mpn/generic/dive_1.c: Nailify. - * mpn/generic/mode1o.c: Nailify, remove bogus ASSERT in commented-out - alternate implementation. - * gmp-impl.h (SUBC_LIMB): New macro. - - * tests/devel/try.c (validate_divexact_1): Correction to compare. - (udiv_qrnnd): New testing. - (SHIFT_LIMIT): Nailify. - (-b): New option, remove spurious "H" from getopt string. - - * mpz/clrbit.c: Nailify. - * tests/mpz/t-hamdist.c: Nailify. - * gmp-impl.h (MPN_FIB2_SIZE): Nailify. - (PP): Nailify conditionals. - * tests/mpz/t-fib_ui.c (MPZ_FIB_SIZE_FLOAT): Nailify. - - * configure.in, acinclude.m4: Establish GMP_NAIL_BITS and - GMP_LIMB_BITS for gmp-h.in configure tests. - - * mpfr/*, configure.in: Update to final mpfr 2.0.1. - * mpfr/acinclude.m4 (MPFR_CONFIGS): Use $host, not uname stuff. - * mpfr/tests/tout_str.c: Patch from Paul for denorm fprintf tests. - -2002-04-15 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/divrem_1.c (EXTRACT): Remove. - - * tests/mpz/t-tdiv_ui.c (dump_abort): Accept argument for error string. - - * mpz/rrandomb.c: Nailify. Needs further work. - - * mpn/generic/mod_1.c: Nailify. - - * gmp-impl.h: Set various *_THRESHOLD values to be used for nails to - avoid not yet qualified algorithms. - (MPZ_CHECK_FORMAT): Check that nail part is zero. - - * tests/mpz/t-mul.c (main): Test squaring even for huge operands. - (base_mul): Nailify. - (dump_abort): Accept argument for error string. Print product - difference. - - * mpn/generic/set_str.c: Nailify. - - * gmp-h.in (__GMPN_ADD, __GMPN_SUB): Nailify. - -2002-04-14 Torbjorn Granlund <tege@swox.com> - - * randraw.c (lc): Return non-nonsense return value for seed=0 case. - Check for m2exp being non-zero early; remove all other tests of m2exp. - Remove redundant MPN_ZERO call. - Let mpn_rshift put result in place to avoid extra MPN_COPY. - Remove confusing comment before function `lc' describing BBS algorithm. - Misc simplification and cleanups. - Nailify. Needs further work. - - * mpz/set_si.c: Nailify. - * mpz/set_ui.c: Nailify. - * mpz/mul_i.h: Nailify. - - * tests/mpz/t-mul_i.c: Actually test _ui routines. Add some more test - values. - - * mpn/generic/mul_n.c: Finish nailifying toom3 code. - -2002-04-13 Kevin Ryde <kevin@swox.se> - - * mpfr/*: Update to another new mpfr 2.0.1. - * configure.in, Makefile.am, mpfr/Makefile.am, mpfr/tests/Makefile.am: - Use MPFR_CONFIGS macro, establish separate MPFR_CFLAGS for mpfr build. - - * mpfr/tests/Makefile.am: Correction to convenience rule for libmpfr.a. - -2002-04-11 Kevin Ryde <kevin@swox.se> - - * mpfr/set_q.c: gmp-impl.h before mpfr.h to avoid _PROTO redefine. - - * mpfr/*, configure.in: Update to new mpfr 2.0.1. - - * tests/refmpn.c (refmpn_udiv_qrnnd, refmpn_divmod_1c_workaround): - Fixes for nails. - - * tests/t-constants.c (MODLIMB_INVERSE_3): Nailify tests. - (MP_BASES_BIG_BASE_INVERTED_10, MP_BASES_NORMALIZATION_STEPS_10): Only - check these under USE_PREINV_DIVREM_1. - * tests/t-modlinv.c: Nailify tests. - -2002-04-11 Gerardo Ballabio <gerardo.ballabio@unimib.it> - - * gmpxx.h: Remove bool combinations, remove mpf_class::get_str2, only - need <iosfwd> now. - -2002-04-11 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/diveby3.c: Nailify. - * gmp-impl.h (MODLIMB_INVERSE_3): Nailify. - - * mpn/generic/mul_n.c: Nailify Toom3 code. - -2002-04-10 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (MPN_KARA_MUL_N_MINSIZE, MPN_KARA_SQR_N_MINSIZE): Set to - 3, as needed by nails case. - - * mpn/generic/addmul_1.c, mpn/generic/submul_1.c [nails]: Fix vl - assert, add rp,n and up,n asserts. - - * mpfr/Makefile.am: Add new mpfr-math.h, install mpf2mpfr.h. - -2002-04-10 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/divrem_1.c: Nailify. Update mp_size_t variables to use - `n' suffix instead of `size' suffix. - * mpn/generic/divrem_2.c: Likewise. - * mpn/generic/sb_divrem_mn.c: Nailify. - * mpn/generic/tdiv_qr.c: Nailify. - (SHL): Remove silly macro. - - * mpn/generic/mul_n.c (mpn_kara_mul_n): Replace open-coded increment by - mpn_incr_u call. Handle nails in ws[n] increment. - * mpn/generic/mul_n.c (mpn_kara_sqr_n): Likewise. - - * gmp-h.in (GMP_NUMB_MASK): New #define. - (__GMPN_AORS_1): Add version for nails. - - * gmp-impl.h (GMP_NUMB_MASK): Comment out, now in gmp.h. - (mpn_incr_u): Don't assume `incr' is non-zero. - (mpn_decr_u): Similarly. - -2002-04-09 Kevin Ryde <kevin@swox.se> - - * mpfr/*, configure.in: Update to mpfr 2.0.1. - - * tests/refmpn.c (refmpn_mul_1c, lshift_make): Corrections for nails. - * tssts/refmpn.c, tests/tests.h (refmpn_cmp_allowzero): New function. - - * mpn/generic/mul_1.c [nails]: Fix vl assert, add {up,n} assert. - - * mpn/pa32/hppa1_1/pa7100/addmul_1.asm, - mpn/pa32/hppa1_1/pa7100/submul_1.asm: Rename "size" define, to avoid - ELF .size directive. Reported by LaMont Jones. - - * tests/mpz/t-set_si.c: Add nails support. - -2002-04-05 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h: Replace nail mpn_incr_u, mpn_decr_u with faster versions. - (mp_bases[10] values): Check GMP_NUMB_BITS instead of BITS_PER_MP_LIMB. - Add GMP_NUMB_BITS == 30 version. - (__gmp_doprnt, etc): Remove parameter names. - - * mpn/generic/mul_n.c: Nailify Karatsuba code. - * mpn/generic/get_str.c: Nailify. - * mpn/generic/sqr_basecase.c: Nailify. - * mpn/generic/lshift.c: Nailify. - * mpn/generic/rshift.c: Likewise. - * mpn/generic/add_n.c: Nailify. Revamp non-nail code. - * mpn/generic/sub_n.c: Likewise. - * mpn/generic/mul_1.c: Likewise. - * mpn/generic/addmul_1.c: Likewise. - * mpn/generic/submul_1.c: Likewise. - -2002-04-02 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (BSWAP_LIMB_FETCH, BSWAP_LIMB_STORE) [powerpc]: - Corrections to constraints, and restrict to bigendian. - -2002-03-31 Kevin Ryde <kevin@swox.se> - - * tests/mpz/dive.c: Better diagnostics. - - * tests/devel/try.c (mpn_get_str, mpn_umul_ppmm_r): New tests. - - * tests/misc.c, tests/tests.h (byte_diff_lowest, byte_diff_highest): - New functions. - - * tests/t-bswap.c: New file. - * tests/Makefile.am (check_PROGRAMS): Add it. - - * tests/mpn/t-aors_1.c, tests/mpn/t-iord_u.c: Add nails support. - - * gmp-impl.h (MPN_IORD_U) [x86]: Eliminate unnecessary jiord and iord, - rename "n" to incr per generic versions, restrict to nails==0. - (mpn_incr_u, mpn_decr_u): Add nails support. - (GMP_NAIL_LOWBIT, GMP_NUMB_MAX): New macros. - - * tests/trace.c, tests/tests.h (byte_trace, byte_tracen): New - functions. - * tests/trace.c: Handle NULL operands. - - * tests/refmpn.c, tests/devel/try.c, tune/speed.c: Add preliminary - nail support. - - * tests/refmpn.c, test/tests.h (byte_overlap_p, refmpn_equal_anynail, - refmpn_umul_ppmm_r, refmpn_udiv_qrnnd_r, refmpn_get_str, - refmpn_bswap_limb, refmpn_random, refmpn_random2, refmpn_bswap_limb): - New functions. - - * gmp-impl.h, tests/refmpn.c (ASSERT_LIMB): Renamed from - ASSERT_MP_LIMB_T. - - * mpn/x86/*/*.asm, mpn/powerpc32/*/*.asm, mpn/powerpc64/*/*.asm: Put - speeds after the copyright notice, so as to keep that clear. - -2002-03-29 Kevin Ryde <kevin@swox.se> - - * configure.in (powerpc*-*-aix*): Correction to xlc -qarch selection, - for 32-bit mode. - -2002-03-28 Torbjorn Granlund <tege@swox.com> - - * mpn: Fix spacing in many files. - - * mpn/generic/aorsmul_1.c: Split into addmul_1.c and submul_1.c. - * mpn/generic/aors_n.c: Split into add_n.c and sub_n.c. - - * mpn/pa64/add_n.asm: Trim another 0.125 cycle/limb. Fix a comment. - * mpn/pa64/sub_n.asm: Likewise. - - * mpn/pa64/mul_1.asm: Change comclr, comb to proper forms cmpclr, cmpb. - * mpn/pa64/addmul_1.asm: Likewise. - * mpn/pa64/submul_1.asm: Likewise. - -2002-03-28 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Converting Integers): Fix type of exp in mpz_get_d_2exp, - reported by epl@unimelb.edu.au. - (References): Update Burnikel and Ziegler URL, reported by Keith - Briggs. - - * gmp-h.in, mp-h.in, configure.in, acinclude.m4: Remove __GMP from - AC_SUBSTs, since autoconf says leading "_" in makefile variables is - not portable. - - * demos/expr/run-expr.c: Declare optarg, optind, opterr if necessary. - * configure.in, demos/expr/expr-config-h.in: Configs for this. - -2002-03-27 Torbjorn Granlund <tege@swox.com> - - * mpn/Makefile.am (TARG_DIST): Remove pa64w and hppa, add pa32. - - * configure.in (path_20w): Remove pa64w. - - * mpn/pa64/udiv_qrnnd.asm: Tweak for PA8000 performance comparative to - that on PA8500. - -2002-03-26 Torbjorn Granlund <tege@swox.com> - - * mpn/pa32: New name for mpn/hppa. - * configure.in: Corresponding changes. - - * mpn/pa64/umul_ppmm.asm: New file, generalized for both 2.0N and 2.0W. - * mpn/pa64/umul_ppmm.S: Remove. - - * mpn/pa64/udiv_qrnnd.asm: Generalize for both 2.0N and 2.0W. - * mpn/pa64w/udiv_qrnnd.asm: Remove. - -2002-03-26 Kevin Ryde <kevin@swox.se> - - * mpfr/tests/tdiv.c, mpfr/tests/tui_div.c: Don't depend on nan and inf - handling in "double", for the benefit of alpha. - - * configure (hppa2.0w): Set path to "pa64w pa64". - - * acinclude.m4, configure.in (GMP_C_INLINE): New macro. - * acinclude.m4 (GMP_H_EXTERN_INLINE): Use it, and fix "yes" handling. - -2002-03-25 Torbjorn Granlund <tege@swox.com> - - * mpn/pa64w/add_n.s: Remove. - * mpn/pa64w/sub_n.s: Remove. - * mpn/pa64w/lshift.s: Remove. - * mpn/pa64w/rshift.s: Remove. - * mpn/pa64w/mul_1.S: Remove. - * mpn/pa64w/addmul_1.S: Remove. - * mpn/pa64w/submul_1.S: Remove. - * mpn/pa64w/sqr_diagonal.asm: Remove. - - * mpn/pa64/mul_1.asm: New file with twice faster code; generalized - for both 2.0N and 2.0W. - * mpn/pa64/submul_1.asm: Likewise. - * mpn/pa64/mul_1.S: Remove. - * mpn/pa64/submul_1.S: Remove. - - * mpn/pa64/sqr_diagonal.asm: Generalize for both 2.0N and 2.0W. - - * mpn/pa64/add_n.asm: New file, generalized for both 2.0N and 2.0W. - * mpn/pa64/sub_n.asm: Likewise. - * mpn/pa64/lshift.asm: Likewise. - * mpn/pa64/rshift.asm: Likewise. - * mpn/pa64/add_n.s: Remove. - * mpn/pa64/sub_n.s: Remove. - * mpn/pa64/lshift.s: Remove. - * mpn/pa64/rshift.s: Remove. - -2002-03-24 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (BSWAP_LIMB_FETCH, BSWAP_LIMB_STORE): New macros. - * mpz/inp_raw.c, mpz/out_raw.c: Use them. - * acconfig.h (HAVE_HOST_CPU): Add some powerpc types. - - * mpn/powerpc32/750/com_n.asm: New file. - - * mpfr/tests/tout_str.c: Disable random tests, since they fail on - alphaev56-unknown-freebsd4.1 and do nothing by default. - - * mpfr/tests/tsqrt.c: Don't depend on nan, inf or -0 in "double", for - the benefit of alpha. - * mpfr/sqrt.c: Clear nan flag on -0. - - * demos/factorize.c: Use mpn_random() instead of random(), to avoid - portability problems. - - * demos/isprime.c (print_usage_and_exit): Declare as "void" to avoid - warnings. - - * demos/pexpr.c (setup_error_handler): Corrections to sigstack code. - - * demos/calc/calc.y: Add some `;'s to make bison 1.34 happy. - -2002-03-23 Torbjorn Granlund <tege@swox.com> - - * mpn/pa64/addmul_1.asm: New file with twice faster code; generalized - for both 2.0N and 2.0W. - -2002-03-22 Kevin Ryde <kevin@swox.se> - - * tune/time.c: Add SGI hardware counter measuring method, change some - abort()s into ASSERT_FAIL()s. - - * configure.in (AC_CHECK_HEADERS): Add fcntl.h and sys/syssgi.h. - (AC_CHECK_FUNCS): Add syssgi. - - * configure.in, mpfr/Makefile.am, mpfr/tests/Makefile.am: Use - -mieee-with-inexact or -ieee_with_inexact for mpfr on alpha, so - denorms work. - - * mpfr/isinteger.c: Fix a memory leak. - -2002-03-21 Torbjorn Granlund <tege@swox.com> - - * tune/speed.c (struct choice_t): Make `r' an mp_limb_t. - -2002-03-21 Kevin Ryde <kevin@swox.se> - - * configure.in (HAVE_LIMB_BIG_ENDIAN, HAVE_LIMB_LITTLE_ENDIAN): Use an - AH_VERBATIM and better explanation. - * acinclude.m4 (GMP_C_DOUBLE_FORMAT): Similarly for the HAVE_DOUBLE - constants. - - * gmp.texi (Number Theoretic Functions): Clarify sign of GCD returned - by mpz_gcdext. - - * demos/pexpr.c, demos/pexpr-config-h.in, configure.in: Use an - autoconf test for stack_t. - - * configure.in, gmp-h.in, mp-h.in, macos/configure, tests/mpz/reuse.c, - tests/mpf/reuse.c: Use __GMP_LIBGMP_DLL to enable windows declspec, - don't require _WIN32 (etc), remove __GMP_LIBGMP_SHARED and - __GMP_LIBGMP_STATIC. - - * gmp-impl.h (mp_bases): Add __GMP_DECLSPEC, for the benefit of - tests/t-constants.c. - - * tune/many.pl, tune/speed.h: Remove suffix hack for back.asm. - -2002-03-21 Paul Zimmermann <Paul.Zimmermann@loria.fr> - - * mpfr/sin_cos.c (mpfr_sin_cos): New file. - * mpfr/mpfr.h, mpfr/mpfr.texi, mpfr/Makefile.am: Add it. - * mpfr/tan.c: Fix sign in 2nd and 4th quadrants. - - * mpfr/log10.c: Fix hangs on certain inputs. - -2002-03-20 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (setup_error_handler): Declare `s', the first - sigaltstack parameter, using `stack_t' just on AIX. - -2002-03-19 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/mul_1.asm: Use free caller-saves registers instead - of the callee-saves r30 and r31. - -2002-03-19 Kevin Ryde <kevin@swox.se> - - * tune/freq.c (freq_proc_cpuinfo): Recognise powerpc "clock", where - previously got the wrong result from "bogomips". - - * mpn/powerpc32/add_n.asm, mpn/powerpc32/sub_n.asm: Rewrite, faster on - 750, and smaller too. - * mpn/powerpc32/*.asm: Use L(), add some measured speeds. - - * longlong.h (count_trailing_zeros) [vax]: Add a version using ffs, - but commented out. - -2002-03-17 Kevin Ryde <kevin@swox.se> - - * tune/speed.c, tune/speed.h, tune/common.c, many.pl: Use optional - ".r" to specify operand overlaps for mpn_add_n, mpn_sub_n and logops. - Remove mpn_add_n_inplace and mpn_add_n_self. - * tune/many.pl: Fix MULFUNC_PROLOGUE parsing. - - * gmp.texi (Known Build Problems): Note `make' problem with long - libgmp.la dependencies list. - - * printf/doprnt.c, scanf/doscan.c (%zn): Remove test of non-existent - HAVE_SIZE_T, just use size_t unconditionally. - * printf/doprnt.c (%zd etc): Fix 'z' type parsing. - * tests/misc/t-printf.c, tests/misc/t-scanf.c: More tests. - - * configure.in: Use AC_COPYRIGHT. - Add m4_pattern_allow(GMP_MPARAM_H_SUGGEST). - - * tune/Makefile.am (libdummy.la): Remove this, sqr_basecase.c already - gets an ansi2knr rule from nodist_tuneup_SOURCES. - - * longlong.h (count_leading_zeros) [pentiumpro gcc<3]: Test - HAVE_HOST_CPU_i686 too. - - * mpz/out_raw.c (HTON_LIMB_STORE): Fix a typo in big endian #if. - -2002-03-14 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium/com_n.asm, mpn/x86/pentium/logops_n.asm, - mpn/x86/k6/mmx/com_n.asm: Add nails support. - - * texinfo.tex: Update to 2002-03-01.06 (per texinfo 4.1). - * gmp.texi (@ma): Remove, @math does this now. - - * mpfr/tests/reuse.c: Clear op1 and op2 flags only in their respective - outer loops. - - * configure.in (--enable-cxx): Correction to the default stated in the - help string. - (power*-*-aix*, not powerpc): Use aix.m4, don't run - GMP_ASM_POWERPC_R_REGISTERS or use powerpc-defs.m4. - -2002-03-13 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc32/gmp-mparam.h: New file. - -2002-03-13 Kevin Ryde <kevin@swox.se> - - * demos/expr/exprfr.c: More mpfr functions, corrections to agm, cos, - sin, rename log2 constant to loge2 to make room for log2 function. - * demos/expr/t-expr.c: More tests. - - * mpz/inp_raw.c (NTOH_LIMB_FETCH) [generic 16bit]: Remove spurious "+". - - * mpfr/acos.c: Avoid a memory leak for certain operands. - - * acinclude.m4, configure.in (GMP_C_DOUBLE_FORMAT): New macro. - - * acinclude.m4 (GMP_HPC_HPPA_2_0, GMP_ASM_UNDERSCORE, - GMP_ASM_ALIGN_LOG, GMP_ASM_LSYM_PREFIX, GMP_ASM_W32, GMP_ASM_X86_MMX): - Change ac_objext to OBJEXT, which is the documented variable. - - * config.guess (powerpc*-*-*): Use #ifdef on constants POWER_630 etc - in the AIX test, since old versions don't have them all. - -2002-03-11 Kevin Ryde <kevin@swox.se> - - * configure.in (LIBC211): New AC_DEFINE, for mpfr. - - * configure.in (mips*-*-*): Support ABI=o32 on irix 6, allow gcc 2.7.2 - to fall back on it, but detect it doesn't work with gcc 2.95. Use - single mips-defs.m4 for both mips32 and mips64. - * acinclude.m4 (GMP_GCC_MIPS_O32): New macro. - * mpn/mips32/mips-defs.m4: Renamed from mips.m4. - * mpn/mips64/mips.m4: Remove (was a copy of mips32/mips.m4). - - * mpn/powerpc32/750: New directory. - * configure.in (powerpc740, powerpc750, powerpc7400): Use it. - * mpn/powerpc32/750/gmp-mparam.h: New file. - - * config.sub, gmp.texi (ultrasparc1): Remove this, just use plain - "ultrasparc". - -2002-03-10 Kevin Ryde <kevin@swox.se> - - * mpfr: Update to 20020301, except internal_ceil_exp2.c, - internal_ceil_log2.c, internal_floor_log2.c renamed to i_ceil_exp2.c, - i_ceil_log2.c, i_floor_log2.c to be unique in DOS 8.3. And sqrtrem.c - removed since no longer required. - * mpfr/mpfr.texi: Fix some formatting. - * mpfr/tests/reuse.c: Patch by Paul to fix test4 variable handling. - * mpfr/sinh.c: Patch by Paul to fix err calculation when t==0. - * mpfr/tests/tget_d.c: Disable until portability of rnd_mode.c can be - sorted out. - - * configure.in (powerpc*-*-*): Separate gcc and xlc cpu flags setups - for clarity. - - * longlong.h (count_leading_zeros, count_trailing_zeros) [x86_64]: New - macros. - -2002-03-07 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Build Options): Note all the ultrasparcs accepted. - (Language Bindings): Add Math::BigInt::GMP. - - * config.sub (ultrasparc2i): New cpu type. - * config.guess (sparc-*-*, sparc64-*-*): Add some exact CPU detection. - -2002-03-05 Kevin Ryde <kevin@swox.se> - - * longlong.h (count_leading_zeros, count_trailing_zeros) [alphaev67, - alphaev68]: Use ctlz and cttz insns (as per gcc longlong.h). - (count_leading_zeros) [sparclite]: Fix parameter order (as per gcc - longlong.h). - * acconfig.h (HAVE_HOST_CPU_alphaev68): New define. - - * config.guess [i?86-*-*]: Suppress error messages if compiler not - found or test program won't run. - [rs6000-*-*, powerpc-*-*]: Force code alignment for mfpvr test. - -2002-03-04 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/pow_1.c: New file. - -2002-03-03 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Build Options): Note compiler must be able to fully link, - add alphapca57 and alphaev68, give a clearer example of MPN_PATH - (Debugging): Add notes on valgrind. - (C++ Formatted Output): Clarify mpf showbase handling, in particular - note "00.4" in octal. - - * printf/doprntf.c: Do a showbase on octal float fractions, for - instance "00.4" where previously it gave "0.4". - * tests/cxx/t-ostream.cc: Update. - - * gmp-h.in, mp-h.in (__GMP_DECLSPEC, __GMP_DECLSPEC_XX): Test - __WIN32__ for Borland C, reported by "delta trinity". - - * gmp-h.in, mp-h.in: Use <cstddef> for size_t under C++, suggested by - Hans Aberg some time ago. - * gmp-h.in (<iosfwd>): Move to top of file for clarity. - - * Makefile.am (libgmpxx_la_SOURCES): Use dummy.cc to force C++. - (CXX_OBJECTS): Add osfuns$U.lo. - * dummy.cc: New file. - * cxx/Makefile.am (INCLUDES): Use __GMP_WITHIN_GMPXX. - (libcxx_la_SOURCES): Add osfuns.cc. - * gmp-h.in (__GMP_DECLSPEC_XX): New define, use it on libgmpxx funs. - * gmp-impl.h: Add __GMP_DECLSPEC to libgmp functions used by libgmpxx. - - * longlong.h (COUNT_TRAILING_ZEROS_TIME): Remove, no longer used. - - * gmp-impl.h (MPN_SIZEINBASE, MPN_SIZEINBASE_16): Correction to - __totbits for nails. - - * gmp-impl.h (JACOBI_LS0): Test size before limb, to pacify valgrind. - (JACOBI_0LS): Ditto, and fix parens around arguments. - - * mpn/x86/x86-defs.m4 (call_mcount): Add a counter to make data labels - unique, since simplified L() scheme no longer gives that effect. - (notl_or_xorl_GMP_NUMB_MASK): New macro. - Add m4_assert_numargs in a few places. - - * configure.in (*sparc*): Fix cycle counter setups for ABI=64. - -2002-02-28 Torbjorn Granlund <tege@swox.com> - - * mpn/vax/gmp-mparam.h: New file. - -2002-02-28 Kevin Ryde <kevin@swox.se> - - * gmp-h.in (gmp_errno, gmp_version): Move into extern "C" block, - reported by librik@panix.com. - - * gmp-h.in, mp-h.in (__GMP_DECLSPEC_EXPORT, __GMP_DECLSPEC_IMPORT): - Use __declspec(dllexport) and __declspec(dllimport) on Borland. - * gmp-h.in (_GMP_H_HAVE_FILE): Test __STDIO_H for Borland. - Reported by "delta trinity". - - * gmp-impl.h (va_copy): Fall back on memcpy, not "=". - - * mpn/generic/pre_mod_1.c: Add a comment about obsolescence. - - * tune/time.c (MICROSECONDS_P): Don't trust time differences of 1 - microsecond. - - * tests/cxx/t-ostream.cc: Use "const char *" not just "char *" for - test data strings, avoids warnings on Sun CC. - -2002-02-27 Torbjorn Granlund <tege@swox.com> - - * configure.in: For sparc under solaris2.[7-9], pass -fsimple=1 to - disable some crazy -fast optimizations. - -2002-02-25 Torbjorn Granlund <tege@swox.com> - - * configure.in: For sparc under solaris2.[7-9], pass -fns=no to enable - denorm handling under -fast. - -2002-02-25 Kevin Ryde <kevin@swox.se> - - * configure.in (alpha*-*-*): Rearrange -mcpu selection for gcc, - provide an ev67 -> ev6 fallback. Fix -arch,-tune selection for DEC C. - Allow ~ for space in optional options lists. - - * tune/tuneup.c (tune_preinv_divrem_1): Compare against an assembler - mpn_divrem_1 if it exists, not the generic C mpn_divrem_1_div. - (tune_preinv_mod_1): Ditto with mpn_mod_1. - - * tune/time.c (DIFF_SECS_ROUTINE): Eliminate the unused "type" - parameter, try to make the code a bit clearer. - - * tune/freq.c: Reduce the period measured for cycles versus - gettimeofday, add cycles versus microsecond getrusage. - - * mpz/array_init.c: "i" should be mp_size_t, noticed by E. Khong. - -2002-02-24 Torbjorn Granlund <tege@swox.com> - - * configure.in: For sparc under solaris2.[7-9], pass -fast instead of - other optimization options. - -2002-02-23 Kevin Ryde <kevin@swox.se> - - * mpn/asm-defs.m4 (GMP_NUMB_MASK): New macro. - (PROLOGUE, EPILOGUE): Relax quoting for the benefit of tune/many.pl - when GSYM_PREFIX non-empty. - - * tune/time.c, tune/speed.h (speed_time_init): Include clock tick - period in speed_time_string. - * tune/time.c, configure.in (clock_gettime): New measuring method. - - * tune/many.pl: Add -DHAVE_NATIVE_mpn_foo to C objects, to avoid - conflicts with a macro version in gmp-impl.h, eg. mpn_com_n. - -2002-02-22 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c: Increase RLIMIT_STACK to 4Mibyte. - -2002-02-22 Kevin Ryde <kevin@swox.se> - - * tune/tuneup.c: Don't confuse gcc with mipspro cc in diagnostic. - -2002-02-20 Torbjorn Granlund <tege@swox.com> - - * configure.in (mips*-*-irix[6789]*]): Set `extra_functions_n32', not - `extra_functions'. - - * printf/doprnt.c: Conditionally include inttypes.h. - * printf/repl-vsnprintf.c: Likewise. - * scanf/doscan.c: Likewise. - -2002-02-20 Kevin Ryde <kevin@swox.se> - - * mpn/x86/k7/mmx/com_n.asm: New file. - - * mpz/n_pow_ui.c (SWAP_RP_TP): Use ASSERT_CODE on ralloc and talloc, - to ensure they needn't live past the initial allocs in a normal build. - - * mpn/generic/mod_34lsub1.c: Note this is for internal use. - -2002-02-19 Torbjorn Granlund <tege@swox.com> - - * Clean up *_THRESHOLD names. Many files affected. - - * mpn/mips32: Asm-ify 32-bit mips code. - Move files from `mips2' to `mips32' directory. - * mpn/mips64: Move files from `mips3' to `mips64' directory. - * configure.in: Change `mips2' => `mips32' and `mips3' => `mips64'. - -2002-02-19 Kevin Ryde <kevin@swox.se> - - * acinclude.m4, configure.in (GMP_PROG_LEX): New macro. - - * tune/tuneup.c (one): Start next threshold at a max of previous ones, - in order to get a good starting point for TOOM3_SQR_THRESHOLD if - KARATSUBA_SQR_THRESHOLD is 0 (ie. using mpn_mul_basecase only). - - * configure.in, tune/tuneup.c (GMP_MPARAM_H_SUGGEST): New AC_DEFINE - replacing GMP_MPARAM_H_FILENAME. Suggest a new file in a cpu specific - subdirectory rather than mpn/generic. - - * acinclude.m4 (POWERPC64_PATTERN): New macro. - * configure.in (powerpc*-*-*): Use it. - (powerpc*-*-*): Use umul in 32L and aix64. - (mips*-*-*): Use umul, 32 and 64 bit versions. - -2002-02-18 Torbjorn Granlund <tege@swox.com> - - * longlong.h: Add basic x86-64 support. - -2002-02-17 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c: Support `-X' for upper case hex, make `-x' output - lower case hex. - - * mpn/mips2/umul.s: Make it actually work. - * mpn/mips3/umul.asm: New file. - - * mpn/mips2/gmp-mparam.h: New file. - -2002-02-16 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/get_str.c (mpn_sb_get_str): Round frac upwards after - umul_ppmm calls. - -2002-02-16 Kevin Ryde <kevin@swox.se> - - * config.guess (alpha-*-*): Do alpha exact cpu probes on any system, - and only if configfsf.guess gives a plain "alpha". - - * acinclude.m4 (GMP_PROG_CC_WORKS): Detect a gcc 3.0.3 powerpc64 - linker invocation problem. - -2002-02-15 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/get_str.c (mpn_sb_get_str): For base 10, develop initial - digits using umul_ppmm, then switch to plain multiplication. - - * config.guess: Rewrite Alpha subtype detection code for *bsd systems. - -2002-02-15 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Build Options): Note powerpc exact cpu types. - (Debugging): Advertise DEBUG in memory.c. - - * config.sub, config.guess: Add some powerpc exact cpus. - * configure.in: Add configs for them. - - * memory.c [__NeXT__]: Remove unused #define of "static". - (__gmp_default_allocate, __gmp_default_reallocate): Print size if - allocation fails, don't use perror. - - * gmp-h.in: g++ 3 demands __GMP_NOTHROW is before other attributes. - -2002-02-14 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/mul_1.asm: Fix typo preventing build on T3E systems. - -2002-02-14 Kevin Ryde <kevin@swox.se> - - * tune/tuneup.c (tune_set_str): Increase max_size, for the benefit of - alpha. - - * macos/README: Bug reports to bug-gmp@gnu.org, clarify MacOS X a bit. - - * mpn/generic/gcdext.c [WANT_GCDEXT_ONE_STEP]: Add missing TMP_FREE. - - * tune/speed.c, tune/tuneup.c: Allow for speed_cycletime of 0.0 in - some diagnostic printouts. - * tune/time.c (speed_cycletime): Note can be 0.0. - -2002-02-12 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/mul_1.asm: Add mpn_mul_1c entry. - - * mpn/pa64w/sqr_diagonal.asm: Use L() for labels. - -2002-02-11 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/get_str.c (mpn_sb_get_str): Change declaration of rp to - accommodate tuneup compiles. - -2002-02-11 Kevin Ryde <kevin@swox.se> - - * mpn/alpha/default.m4, mpn/alpha/unicos.m4 (PROLOGUE_cpu): Add - noalign option. - * mpn/alpha/default.m4 (PROLOGUE_cpu): use ALIGN instead of ".align". - - * gmp.texi (Debugging): Notes on Checker. - (Other Multiplication): Move note on float FFTs to here. - (Assembler Floating Point): New text and revisions by Torbjorn, - picture formatting by me. - Simplify tex pictures elsewhere a bit, share heights, eliminate some - gaps at line joins. - -2002-02-11 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/get_str.c (mpn_sb_get_str): Rewrite to generate fraction - limbs and use multiplication for digit development. Trim allocation of - buf. Get rid of code for !USE_MULTILIMB. - -2002-02-10 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/set_str.c (mpn_set_str): Undo this: - Change invocations of mpn_add_1 to instead use mpn_incr_u. - - * tests/mpz/convert.c: Free str only after it is used in error message. - - * mpn/generic/get_str.c (mpn_sb_get_str): Combine tail code for base 10 - and generic bases. - - * mpn/mp_bases.c: Add entries for base 256. Remove __ prefix from - table name. - * gmp-impl.h (__mp_bases): Remove superfluous mp_ part of name, making - it __gmpn_bases instead of __gmpn_mp_bases. - (mp_bases): New #define. - * tune/speed.h (SPEED_ROUTINE_MPN_SET_STR): Allow bases up to 256. - (SPEED_ROUTINE_MPN_GET_STR): Likewise. - -2002-02-09 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/set_str.c (mpn_set_str): Use mpn_mul_1c if available. - Change invocations of mpn_add_1 to instead use mpn_incr_u. - -2002-02-09 Kevin Ryde <kevin@swox.se> - - * mpz/array_init.c, mpz/cfdiv_q_2exp.c, mpz/cfdiv_r_2exp.c, - mpz/cong_2exp.c, mpz/divis_2exp.c, mpz/hamdist.c, mpz/init2.c, - mpz/mul_2exp.c, mpz/realloc2.c, mpz/scan0.c, mpz/scan1.c, - mpz/setbit.c, mpz/tdiv_q_2exp.c, mpz/tdiv_r_2exp.c, mpz/tstbit.c, - mpz/urandomb.c: Use GMP_NUMB_BITS. - - * mpz/iset_str.c [__CHECKER__]: Store a dummy value to the low limb to - stop it appearing uninitialized. - - * gmp-h.in (__GMP_NOTHROW): New macro. - (mp_set_memory_functions, mpz_cmp, mpz_cmp_si, mpz_cmp_ui, mpz_cmpabs, - mpz_cmpabs_ui, mpz_congruent_2exp_p, mpz_divisible_2exp_p, - mpz_fits_sint_p, mpz_fits_slong_p, mpz_fits_sshort_p, mpz_fits_uint_p, - mpz_fits_ulong_p, mpz_fits_ushort_p, mpz_get_si, mpz_get_ui, - mpz_getlimbn, mpz_hamdist, mpz_popcount, mpz_scan0, mpz_scan1, - mpz_size, mpz_sizeinbase, mpz_swap, mpz_tstbit, mpq_equal, mpq_swap, - mpf_cmp, mpf_cmp_si, mpf_cmp_ui, mpf_fits_sint_p, mpf_fits_slong_p, - mpf_fits_sshort_p, mpf_fits_uint_p, mpf_fits_ulong_p, - mpf_fits_ushort_p, mpf_get_default_prec, mpf_get_prec, mpf_get_si, - mpf_get_ui, mpf_integer_p, mpf_set_default_prec, mpf_set_prec_raw, - mpf_size, mpf_swap, mpn_add_1, mpn_cmp, mpn_hamdist, mpn_popcount, - mpn_sub_1): Use it. - - * gmp-impl.h (MPN_SIZEINBASE, MPN_SIZEINBASE_16): New macros from - mpn_sizeinbase, and use GMP_NUMB_BITS. - * mpz/get_str.c, mpz/sizeinbase.c, mpbsd/mout.c, tune/speed.h: Use - MPN_SIZEINBASE. - * mpbsd/mtox.c: Use MPN_SIZEINBASE_16. - - * configure.in, mpn/Makefile.am, gmp-impl.h (mpn_sizeinbase): Remove. - * mpn/generic/sizeinbase.c: Remove file. - - * gmp-impl.h (MPN_GET_STR_SIZE): Remove. - * tests/mpn/t-g_str_size.c: Remove file. - * tests/mpn/Makefile.am: Update. - - * Makefile.am (dist-hook): Don't distribute cvs merge ".#" files. - -2002-02-08 Torbjorn Granlund <tege@swox.com> - - * configure.in: Override extra_functions for all sparcv8 systems, not - just supersparc. - -2002-02-06 Kevin Ryde <kevin@swox.se> - - * tune/tuneup.c (tune_mul, tune_sqr): Disable FFTs until tuned. - * tune/speed.h (SPEED_ROUTINE_MPN_SET_STR): Fix memory clobber in - destination cache priming. - - * printf/doprnt.c: Fix parsing of %s and %p conversions. - * tests/misc/t-printf.c (check_misc): Add some tests. - -2002-02-03 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc32/v8/udiv.asm: New file, from v8/supersparc. - - * mpn/generic/set_str.c: Rename indigits_per_limb => chars_per_limb. - Remove redundant chars_per_limb. Reverse 4 loops in basecase code for - speed. Use MP_BASES_CHARS_PER_LIMB_10. - -2002-02-03 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_PROG_NM): Ensure -B or -p get used when doing a - cross compile with the native nm, helps OSF for instance. - (GMP_ASM_LSYM_PREFIX): Remove ".byte 0" for the benefit of irix 6, - allow "N" from nm for OSF, allow for "t" for other systems, but prefer - no mention of the symbol at all. - - * tune/tuneup.c (print_define_remark): New function. - Turn some "#if"s into plain "if"s. - - * tune/tuneup.c, gmp-impl.h, tune/Makefile.am - (GET_STR_BASECASE_THRESHOLD, GET_STR_PRECOMPUTE_THRESHOLD): Tune these. - * mpn/generic/get_str.c [TUNE_PROGRAM_BUILD]: Cope with non-constant - GET_STR_PRECOMPUTE_THRESHOLD. - -2002-02-02 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/get_str.c (mpn_get_str): Fix typo in a declaration. - -2002-02-02 Kevin Ryde <kevin@swox.se> - - * mpn/generic/set_str.c: Use MP_PTR_SWAP and POW2_P, add __GMP_PROTO - to convert_blocks prototype, disable SET_STR_BLOCK_SIZE sanity check. - - * tune/set_strb.c, tune/set_strs.c: New files. - * tune/speed.h, tune/speed.c, tune/common.c,tune/Makefile.am: Add them. - * tune/tuneup.c: Tune SET_STR_THRESHOLD. - (DEFAULT_MAX_SIZE): Renamed from MAX_SIZE, allow any param.max_size[]. - -2002-02-01 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/convert.c: Increase operand size. Add (yet disabled) code - for testing with random strings. - - * mpn/generic/get_str.c (mpn_get_str): Rewrite to become sub-quadratic. - (mpn_dc_get_str, mpn_sb_get_str): New functions. - -2002-01-31 Kevin Ryde <kevin@swox.se> - - * gmpxx.h (cmp): Renamed from "compare". - - * configure.in (AC_C_BIGENDIAN): Don't abort when cross compiling. - (PROLOGUE): Allow new style optional second parameter when grepping. - - * acinclude.m4 (GMP_HPC_HPPA_2_0, GMP_ASM_UNDERSCORE, - GMP_ASM_ALIGN_LOG, GMP_ASM_LSYM_PREFIX, GMP_ASM_W32, GMP_ASM_X86_MMX): - Use $ac_objext for object filenames. - (GMP_ASM_UNDERSCORE): Use CCAS to assemble. - - * demos/pexpr-config-h.in: New file. - * configure.in: Generate demos/pexpr-config.h. - (AC_CHECK_FUNCS): Add clock, cputime, setrlimit, sigaction, - sigaltstack, sigstack. - * acinclude.m4 (GMP_SUBST_CHECK_FUNCS, GMP_SUBST_CHECK_HEADERS): New - macros. - * demos/pexpr.c: Use pexpr-config.h, not various #ifdefs. - (setup_error_handler): Use signal if sigaction not available, allow - for SIGBUS missing on mingw. - (main): Use time() for random seed if gettimeofday not available. - (cleanup_and_exit): Move SIGFPE out of LIMIT_RESOURCE_USAGE. - -2002-01-30 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/set_str.c: Rewrite to become sub-quadratic. - (convert_blocks): New function. - -2002-01-30 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (GMP_NUMB_MASK, GMP_NAIL_MASK, GMP_NUMB_HIGHBIT, - ASSERT_MPN, ASSERT_MP_LIMB_T): New macros. - - * mpn/generic/fib2_ui.c: Use GMP_NUMB_BITS, simplify the data - generator program, share __gmp_fib_table initializers between bit - sizes, cope with bit sizes other than those specifically setup. - * gmp-impl.h (FIB_TABLE_LIMIT, FIB_TABLE_LUCNUM_LIMIT): Corresponding - rearrangement of conditionals. - * tests/mpz/t-fib_ui.c (check_fib_table): New test. - -2002-01-28 Kevin Ryde <kevin@swox.se> - - * mpz/set_si.c, mpz/iset_si.c: Store to _mp_d[0] unconditionally, use - an expression for _mp_size. - - * mpz/init.c, mpz/init2.c, mpz/iset.c, mpq/init.c [__CHECKER__]: Store - dummy values to low limbs to stop them appearing uninitialized. - -2002-01-26 Kevin Ryde <kevin@swox.se> - - * mpfr/mpfr-test.h (MAX, MIN, ABS): Use instead a patch from Paul and - Vincent. - -2002-01-24 Kevin Ryde <kevin@swox.se> - - * configure.in: Extra quoting to get argument help messages right. - - * gmp.texi (Efficiency): Suggest hex or octal for input and output. - (Formatted Output Strings): Mention "*" for width and precision. - - * mpn/generic/sizeinbase.c: New file, adapted from mpz/sizeinbase.c. - Use POW2_P, use __mp_bases[base].big_base for log2(base). - * configure.in, mpn/Makefile.am: Add it. - * gmp-impl.h: Add prototype. - * mpz/sizeinbase.c, tune/speed.h, mpn/generic/get_str.c, - mpz/get_str.c, mpbsd/mout.c, mpbsd/mtox.c: Use it. - * mpz/get_str.c: Write directly to user buffer, skip at most one - leading zero, eliminate special case for x==0. - * mpbsd/mtox.c: Allocate exact result space at the start, eliminate - special case for x==0. - * mpbsd/mout.c: Only need to skip one high zero with mpn_sizeinbase. - - * configure.in (--enable-nails): New option. - (GMP_NAIL_BITS, GMP_LIMB_BITS, GMP_NUMB_BITS): New defines for gmp.h - and config.m4. - * gmp-h.in: Add templates. - - * mpfr/mpfr-test.h (MAX, MIN, ABS): Use #ifndef to avoid a redefine - error on AIX xlc. - -2002-01-23 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/get_str.c: Correct type of `out_len'. - -2002-01-22 Kevin Ryde <kevin@swox.se> - - * mpn/generic/pre_divrem_1.c: Corrections to some ASSERTs. - - * mpfr/mul_ui.c: Don't call mpn_lshift with 0 shift. - - * mpfr/mpz_set_fr.c: Produce correct mpz_t for f==0. - -2002-01-21 Torbjorn Granlund <tege@swox.com> - - * longlong.h (32-bit powerpc add_ssaaaa): Remove spurious commutative - declaration. - (64-bit powerpc add_ssaaaa): Likewise. - -2002-01-20 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_FUNC_VSNPRINTF): Use %n to better detect sparc - solaris 2.7 problems. - -2002-01-19 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (mpz_eval_expr): Optimize s^rhs for -1 <= s <= 1. - (cleanup_and_exit): Improve error message wording. - -2002-01-19 Kevin Ryde <kevin@swox.se> - - * mpfr/mpfr.h (_PROTO): Use __GMP_PROTO, for compatibility with - gmp-impl.h. - -2002-01-17 Torbjorn Granlund <tege@swox.com> - - * mpfr/mpfr-test.h: Test "__hpux", not "hpux". Mask off mrand48 - return value to 31 bits to work around sloppy mpfr #include practices. - - * mpfr/tests/*.c: Use #include "", not <>, for gmp.h and mpfr.h. - Make sure to #include mpfr-test.h from all files that use random(). - -2002-01-17 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (__GMP_REALLOCATE_FUNC_MAYBE_TYPE): New macro. - * gmp-impl.h, mpz/get_str.c, mpz/out_raw.c, mpq/get_str.c, - mpq/set_str.c, mpf/get_str.c, printf/asprntffuns.c, printf/doprnt.c, - printf/repl-vsnprintf.c, printf/snprntffuns.c, scanf/doscan.c, - mpbsd/mtox.c: Some fixes to compile as C++. - - * mpn/generic/jacbase.c (JACOBI_BASE_METHOD): New tuned parameter, - replacing COUNT_TRAILING_ZEROS_TIME test. Add a third method too. - * tune/speed.c, tune/speed.h, tune/common.c, tune/Makefile.am: Add - measuring of mpn_jacobi_base methods. - * tune/jacbase1.c, tune/jacbase2.c, tune/jacbase3.c: New files. - * tune/tuneup.c (JACOBI_BASE_METHOD): Tune this. - * mpn/x86/*/gmp-mparam.h (COUNT_TRAILING_ZEROS_TIME): Remove macro. - - * gmp-h.in: Use __gmp prefix on variables in inlines. - - * gmp-impl.h (MPN_COPY_INCR, MPN_COPY_DECR): Remove __i, unused. - - * mpn/generic/mul_fft.c: Use HAVE_NATIVE_mpn_addsub_n, not ADDSUB. - Use CNST_LIMB for some constants. - -2002-01-15 Kevin Ryde <kevin@swox.se> - - * tests/mpbsd/Makefile.am: Add a convenience rule for ../libtests.la. - - * printf/Makefile.am: libdummy.la should be in EXTRA_LTLIBRARIES. - - * mpf/out_str.c: Use MPF_SIGNIFICANT_DIGITS, so mpf_out_str and - mpf_get_str give the same for ndigits==0. - - * mpfr/exceptions.c (mpfr_set_emin, mpfr_set_emax): Work around a - powerpc64 gcc 3.0 -O2 bug. - - * tests/memory.c, tests/tests.h (tests_memory_validate): New function. - -2002-01-14 Kevin Ryde <kevin@swox.se> - - * mpn/generic/sb_divrem_mn.c, mpn/generic/divrem_1.c, - mpn/generic/divrem_2.c, mpn/generic/mod_1.c: Don't use UMUL_TIME and - UDIV_TIME, just default to preinv. - * gmp-impl.h (USE_PREINV_DIVREM_1, USE_PREINV_MOD_1): Ditto. - (DIVEXACT_1_THRESHOLD, MODEXACT_1_ODD_THRESHOLD): Don't use UMUL_TIME - and UDIV_TIME, make default thresholds 0. - (UDIV_NORM_PREINV_TIME, UDIV_UNNORM_PREINV_TIME): Remove macros. - * mpn/x86/*/gmp-mparam.h (UMUL_TIME, UDIV_TIME, - UDIV_NORM_PREINV_TIME): Remove macros. - - * gmp.texi (Headers and Libraries): New section, being the header - notes from "GMP Basics" and some new stuff. - (Parameter Conventions): Notes on "const" parameters. - (Formatted Output Strings): Add type N, tweak some wording. - - * tests/refmpn.c (refmpn_divmod_1c): Avoid a bug in i386 gcc 3.0. - -2002-01-12 Kevin Ryde <kevin@swox.se> - - * mpz/root.c: Add <stdlib.h>, for abort(). - - * mpfr/tests/Makefile.am (AUTOMAKE_OPTIONS): Add ansi2knr. - * mpfr/mpfr.h, mpfr/mpfr-tests.h, reuse.c, tadd.c, tadd_ui.c, tagm.c, - tatan.c, tcmp2.c, tcos.c, tdiv.c, tdiv_ui.c, teq.c, texp.c, - tget_str.c, thyperbolic.c, tlog.c, tmul.c, tout_str.c, tpow.c, - trandom.c, tset_z.c, tsin.c, tsqrt.c, tsqrt_ui.c, tsub_ui.c, ttan.c, - tui_div.c: Fixes for K&R. - - * tests/misc/t-scanf.c (check_misc, check_misc): - - * tests/mpz/t-inp_str.c, tests/mpq/t-inp_str.c, tests/misc/t-scanf.c: - Avoid strings in ASSERT, not enjoyed by K&R. - * gmp-impl.h (ASSERT): Note this. - - * tests/tests.h (refmpn_mod_34lsub1): Add __GMP_PROTO. - - * mpbsd/Makefile.am: Avoid an automake problem with ansi2knr and - sources in a different directory. - - * printf/repl-vsnprintf.c: Test HAVE_LONG_DOUBLE for long double. - - * mpn/Makefile.am (nodist_libdummy_la_SOURCES): Add mod_34lsub1.c, - mul_2.c, pre_divrem_1.c. - - * gmp-h.in, gmp-impl.h (mpn_add_nc, mpn_addmul_1c, mpn_addsub_n, - mpn_addsub_nc, mpn_divrem_1c, mpn_dump, mpn_mod_1c, mpn_mul_1c, - mpn_mul_basecase, mpn_sqr_n, mpn_sqr_basecase, mpn_sub_nc, - mpn_submul_1c): Move to gmp-impl.h, since they're undocumented. - - * gmp-impl.h (mpn_reciprocal): Remove, unused. - - * tune/many.pl (cntlz, cnttz): Use new SPEED_ROUTINE_COUNT_ZEROS. - -2002-01-11 Kevin Ryde <kevin@swox.se> - - * mpn/hppa/*.asm, mpn/pa64/*.asm, mpn/pa64w/*.asm: Use L(). - -2002-01-08 Kevin Ryde <kevin@swox.se> - - * mpn/asm-defs.m4 (PROLOGUE, EPILOGUE): New scheme, optional function - name to EPILOGUE, check for missing or wrong function name EPILOGUE. - * mpn/alpha/unicos.m4, mpn/alpha/default.m4, mpn/m68k/m68k-defs.m4, - mpn/mips3/mips.m4, mpn/ia64/default.m4, mpn/powerpc32/aix.m4, - mpn/powerpc64/aix.m4, mpn/x86/x86-defs.m4: Consequent updates, add a - few more asserts. - * mpn/alpha/unicos.m4, mpn/alpha/default.m4, mpn/alpha/cntlz.asm, - mpn/alpha/invert_limb.asm (PROLOGUE_GP): Change to an optional "gp" - parameter on plain PROLOGUE. - - * gmp.texi (Low-level Functions): mpn_get_str doesn't clobber an extra - limb, and doesn't clobber at all for power of 2 bases. - (Language Bindings): Add python gmpy. - - * mpz/get_str.c: Determine realloc size arithmetically. - - * mpbsd/mtox.c: Size memory block returned to actual space needed. - * gmp.texi (BSD Compatible Functions): Describe this. - - * mpz/get_str.c: Don't copy mpn_get_str input for power of 2 bases. - * mpbsd/mtox.c: Ditto, and as a side effect avoid a memory leak from a - missing TMP_FREE. - - * mpz/get_str.c, mpbsd/mout.c: No longer need for +1 limb for - mpn_get_str clobber. - - * gmp-impl.h (MPN_GET_STR_SIZE): New macro. - * mpn/generic/get_str.c, mpz/get_str.c, mpbsd/mout.c, mpbsd/mtox.c, - tune/speed.h: Use it. - * tests/mpn/t-g_str_size.c: New test. - * tests/mpn/Makefile.am: Add it. - - * gmp-impl.h (POW2_P): New macro. - * mpn/generic/get_str.c, tests/misc.c: Use it. - - * printf/doprnt.c: Add "N" for mpn, share some code between N, Q and Z. - * tests/misc/t-printf.c: Add tests. - * gmp-impl.h (ASSERT_CODE): New macro. - - * tests/mpbsd/t-mtox.c: New test. - * tests/mpbsd/Makefile.am: Add it. - (allfuns_LDADD): Don't link against libgmp when testing everything in - libmp can link. - -2002-01-07 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (MPN_COPY_INCR, MPN_COPY_DECR): Rewrite generic versions. - -2002-01-06 Kevin Ryde <kevin@swox.se> - - * mpn/generic/pre_divrem_1.c: Don't support size==0. - * tests/devel/try.c: Update. - - * mpn/generic/get_str.c: Add special case for base==10. - * gmp-impl.h (MP_BASES_CHARS_PER_LIMB_10, MP_BASES_BIG_BASE_10, - MP_BASES_BIG_BASE_INVERTED_10, MP_BASES_NORMALIZATION_STEPS_10): New - constants. - * tests/t-constants.c: Add checks. - * mpn/mp_bases.c [GENERATE_TABLE]: Print defines for gmp-impl.h, print - all standard bits-per-limb by default. - - * demos/pexpr.c, demos/expr/expr.h, demos/expr/expr-impl.h: Use - __GMP_PROTO. - - * gmp-h.in (mpn_divexact_by3c): Remove variables from prototype, to - keep out of application namespace. - -2002-01-04 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h: Move _PROTO declaration to before its first usages. - -2002-01-04 Kevin Ryde <kevin@swox.se> - - * gmp-h.in, mp-h.in, tests/tests.h: Rename _PROTO to __GMP_PROTO, and - don't use #ifndef just define it ourselves. - * gmp-impl.h: Provide _PROTO as an alias for __GMP_PROTO, to avoid big - edits internally, for the moment. - -2002-01-03 Torbjorn Granlund <tege@swox.com> - - * tune/speed.c (usage): Insert "\n\" into a string. - -2001-12-30 Torbjorn Granlund <tege@swox.com> - - * mpn/pa64/udiv_qrnnd.c: Remove file. - * mpn/pa64w/udiv_qrnnd.c: Remove file. - - * gmp-impl.h (MPN_IORD_U): Change formatting (labels in pos 0, insns - indented by tab). - (MPN_INCR_U): Use "addl $1,foo; jc", not "incl foo; jz". - - * gmp-impl.h (udiv_qrnnd_preinv): Use plain subtract, not sub_ddmmss, - in one more case. - -2001-12-30 Kevin Ryde <kevin@swox.se> - - * mpn/generic/get_str.c (udiv_qrnd_unnorm): New macro. - Use "do while" for dig_per_u loop since it's non-zero. - * acconfig.h (HAVE_HOST_CPU_m68k etc): Add templates. - - * mpn/generic/mul_basecase.c, mpz/mul.c, mpz/n_pow_ui.c, - mpn/x86/pentium/mul_2.asm, tests/devel/try.c, tests/tests.h, - tests/refmpn.c, tune/speed.c, tune/speed.h, tune/common.c, - tune/many.pl (mpn_mul_2): New parameter style. - * gmp-impl.h (mpn_mul_2): Add prototype. - * configure.in (gmp_mpn_functions_optional): Add mul_2. - - * longlong.h (__vxworks__): Remove from powerpc tests, not correct, - not on its own at least. - - * tune/speed.c: Add "aas" to specify 0xAA..AA data. - - * tune/tuneup.c (print_define_end): Indicate "never" and "always". - -2001-12-29 Torbjorn Granlund <tege@swox.com> - - * mpq/set_d.c: ANSI-fy. - * mpz/invert.c: Use PTR and SIZ (cosmetic change). - - * mpz/cong.c: Rename `xor' to `sign' to avoid C++ reserved word. - -2001-12-28 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/sqr_diagonal.asm: New file. - -2001-12-28 Kevin Ryde <kevin@swox.se> - - * mpn/generic/get_str.c: Avoid one mpn_divrem_1 by running main loop - only until msize==1. - - * tune/tuneup.c: Break up all() for clarity. - (USE_PREINV_DIVREM_1, USE_PREINV_MOD_1): Compare against plain - division udiv_qrnnd, not the tuned and possibly preinv version. - - * tune/freq.c: Split sysctl and sysctlbyname probes into separate - functions, shorten some identifiers, put descriptions inside - functions, define functions unconditionally and do nothing if - requisites not available. - - * mpz/inp_raw.c: Avoid a gcc 3.0 powerpc64 bug on AIX. - - * acinclude.m4, configure.in (GMP_C_RESTRICT): New macro. - - * mpfr/sin.c: Patch from Paul to fix sign of sin(3pi/2). - - * demos/calc/calc.y: Improve some error messages. - -2001-12-28 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/mul_1.asm: Rename r72 -> r80. - * mpn/sparc64/addmul_1.asm: Likewise. - -2001-12-27 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/tdiv_qr.c: Misc formatting cleanups. - For switch case 2, replace `dn' with its value (2). - -2001-12-25 Torbjorn Granlund <tege@swox.com> - - * tests/devel/mul_1.c: Add FIXED_XLIMB. - * tests/devel/addmul_1.c: Likewise. - * tests/devel/submul_1.c: Likewise. - - * tests/devel/add_n.c: Improve error message. - Accept command line argument for # of tests. - * tests/devel/sub_n.c: Likewise. - - * tests/devel/: Remove CLOCK settings. - - * mpn/sparc32/v9/mul_1.asm: Rewrite. - * mpn/sparc32/v9/addmul_1.asm: Rewrite. - * mpn/sparc32/v9/submul_1.asm: Rewrite. - -2001-12-24 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/mul_1.asm: Get rid of global constant 0.0 (L(noll)). - * mpn/sparc64/addmul_1.asm: Likewise. - -2001-12-23 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/get_str.c: Move final ASSERT to just before zero fill - loop. - -2001-12-22 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/get_str.c: Move ASSERTs out of loops. Split digit - generation code into two loops, saving a test of msize in the loop. - -2001-12-22 Kevin Ryde <kevin@swox.se> - - * mpn/x86/x86-defs.m4, mpn/x86/*/*.asm: Remove L / LF scheme putting - function name in local labels. - - * mpn/generic/get_str.c: Use mpn_preinv_divrem_1, add a couple of - ASSERTs. - - * mpn/generic/pre_divrem_1.c: New file. - * configure.in (gmp_mpn_functions): Add it. - * gmp-impl.h (mpn_preinv_divrem_1): Add prototype. - (USE_PREINV_DIVREM_1, MPN_DIVREM_OR_PREINV_DIVREM_1): New macros. - * tests/devel/try.c, tune/speed.c, tune/speed.h, tune/common.c, - tune/many.pl, tune/Makefile.am (mpn_preinv_divrem_1): Add testing and - measuring. - * tune/tuneup.c: Determine USE_PREINV_DIVREM_1. - * tune/pre_divrem_1.c: New file. - * tests/refmpn.c, tests/tests.h (refmpn_preinv_divrem_1): New function. - - * tests/mpz/t-io_raw.c: New file. - * tests/mpz/Makefile.am (check_PROGRAMS): Add it. - - * mpz/inp_raw.c, mpz/out_raw.c: Rewrite. - * acinclude.m4, configure.in (AC_C_BIGENDIAN): New test. - * gmp-impl.h (BSWAP_LIMB): New macro. - - * acinclude.m4 (GMP_PROG_CC_WORKS): For a native compile, demand - executables will run, per AC_PROG_CC. This detects ABI=64 is unusable - in a native sparc solaris 7 build with the kernel in 32-bit mode. - * gmp.texi (ABI and ISA): Add notes on this, add an example configure - setting an ABI. - - * tune/tuneup.c, configure.in: Print the gmp-mparam.h filename. - * tune/tuneup.c: Print the CPU frequency. - - * tune/time.c, tune/speed.h: Add s390 "stck" method, flatten - conditionals in speed_time_init a bit, use have_* variables to let - some code go dead in speed_starttime and speed_endtime. - - * tune/freq.c (speed_cpu_frequency_irix_hinv): New function. - - * Makefile.am, configure.in: Restore mpfr. - - * configure.in: Add --with-readline, AC_PROG_YACC and AM_PROG_LEX. - * demos/calc/calc.y, demos/calc/calclex.l: Add readline support, add - lucnum function. - * demos/calc/Makefile.am: Add calcread.c, calc-common.h, use $(YACC), - $(LEX) and $(LEXLIB). - * demos/calc/calcread.c, demos/calc/calc-common.h, - demos/calc/calc-config-h.in, demos/calc/README: New files. - - * configure.in: Put demos/expr configs in expr-config.h. - * demos/expr/expr-config-h.in: New file. - * demos/expr/expr-impl.h: Renamed from expr-impl-h.in, get configs - from expr-config.h. - * demos/expr/Makefile.am: Update. - - * demos/expr/exprfr.c: Use mpfr_sin and mpfr_cos, remove some spurious - returns. - -2001-12-20 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/mul_1.asm: Trim an instruction. - * mpn/sparc64/addmul_1.asm: Likewise. - - * mpn/ia64/add_n.asm: Rewrite. - * mpn/ia64/sub_n.asm: Rewrite. - -2001-12-19 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/mul_1.asm: Rewrite. - * mpn/ia64/addmul_1.asm: Rewrite. - * mpn/ia64/submul_1.c: Use TMP_ALLOC_LIMBS. - - * tests/devel/mul_1.c: Improve error message. - Accept command line argument for # of tests. - * tests/devel/addmul_1.c: Likewise. - * tests/devel/submul_1.c: Likewise. - -2001-12-18 Torbjorn Granlund <tege@swox.com> - - * mpn/mips3/mul_1.asm: Add NOPs to save a cycle on R1x000. - -2001-12-18 Kevin Ryde <kevin@swox.se> - - * gmpxx.h (gmp_randclass): Don't allow copy constructors or "=", - implementation by Gerardo. - - * gmp-h.in (operator<<, operator>>): Remove parameter names from - prototypes, to keep out of user namespace. - - * acinclude.m4 (GMP_FUNC_VSNPRINTF): Let the test program work as C++. - -2001-12-16 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/mul_1.asm: Rewrite. - * mpn/sparc64/addmul_1.asm: Rewrite. - * mpn/sparc64/submul_1.asm: Rewrite. - - * mpn/sparc64/addmul1h.asm: Remove. - * mpn/sparc64/submul1h.asm: Remove. - * mpn/sparc64/mul1h.asm: Remove. - -2001-12-15 Kevin Ryde <kevin@swox.se> - - * gmp-h.in (mpn_add, mpn_add_1, mpn_cmp, mpn_sub, mpn_sub_1): Follow - __GMP_INLINE_PROTOTYPES for whether to give prototype with inline. - - * configure.in (i686*-*-*, pentiumpro-*-*, pentium[23]-*-*, - athlon-*-*, pentium4-*-*): Fall back on -march=pentium if - -march=pentiumpro or higher is not good (eg. solaris cmov). - -2001-12-12 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (MPN_ZERO): Rewrite generic version to be similar to - powerpc version. - -2001-12-12 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_PROG_CC_WORKS): Detect cmov problems with gcc - -march=pentiumpro on solaris 2.8. - - * tune/common.c, tune/speed.h: Allow for commas in count_leading_zeros - and count_trailing_zeros macros. - - * demos/expr/Makefile.am: Distribute exprfr.c and exprfra.c. - - * tune/Makefile.am (speed_ext_SOURCES): Should be speed-ext.c. - -2001-12-10 Torbjorn Granlund <tege@swox.com> - - * mpn/s390/addmul_1.asm: New file. - * mpn/s390/submul_1.asm: New file. - * mpn/s390/mul_1.asm: New file. - * mpn/s390/gmp-mparam.h: Update. - -2001-12-07 Kevin Ryde <kevin@swox.se> - - * gmp-h.in, mp-h.in, gmp-impl.h: __GMP_DECLSPEC at start of - prototypes, for the benefit of Microsoft C. - - * gmp.texi (Introduction to GMP): Mention ABI and ISA section. - (Known Build Problems): Recommend GNU sed on solaris 2.6. - (Assigning Integers): Direct feedback to bug-gmp. - (References): Typo Knuth vol 2 is from 1998. - - * gmpxx.h (gmp_randclass): Add initializers for gmp_randinit_default - and gmp_randinit_lc_2exp_size. - gmp.texi (C++ Interface Random Numbers): Describe them. - - * tests/misc/t-locale.c, tests/cxx/t-locale.cc: Ensure mpf_clear is - done when the localconv override doesn't work. Reported by Mike - Jetzer. - - * printf/doprnti.c: Don't showbase on a zero mpq denominator. - * tests/misc/t-printf.c, tests/cxx/t-ostream.c: Add test cases. - -2001-12-04 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Known Build Problems): Update to gmp_randinit_lc_2exp_size - for the sparc solaris 2.7 problem. - (Reentrancy): SCO ctype.h affects all text-based input functions. - (Formatted Output Strings): Correction to the mpf example. - (Single Limb Division): Correction, should be q-1 not q+1. - (Extended GCD): Clarify why single-limb is inferior. - (Raw Output Internals): Clarify size is twos complement, note limb - order means _mp_d doesn't get directly read or written. - (Contributors): Clarify mpz_jacobi. - And a couple of formatting tweaks elsewhere. - - * tests/cxx/t-headers.cc: New file. - * tests/cxx/Makefile.am: Add it. - - * gmpxx.h: Add <strstream>, needed by mpf_class::get_str2. - - * gmp-h.in (mpq_inp_str, mpn_hamdist): Add __GMP_DECLSPEC. - -2001-12-01 Torbjorn Granlund <tege@swox.com> - - * Version 4.0 released. - - * mpfr/README: Replace contents with explanation of why mpfr is gone. - -2001-12-01 Kevin Ryde <kevin@swox.se> - - * Makefile.am, configure.in: Temporarily remove mpfr, just leave a - README. - - * mpn/Makefile.am (EXTRA_DIST): Add Makeasm.am. - -2001-11-30 Gerardo Ballabio <ballabio@sissa.it> - - * tests/cxx/t-constr.cc, tests/cxx/t-expr.cc: New files. - * tests/cxx/Makefile.am (check_PROGRAMS): Add them. - -2001-11-30 Kevin Ryde <kevin@swox.se> - - * mpfr: Update to 2001-11-16. Patch TMP handling of agm.c and sqrt.c, - use plain mpn_sqrtrem in sqrt.c, separate .c files for floor and ceil, - disable an expression style assert in add1.c. - - * mpn/s370: Rename to s390. - * configure.in (s3[6-9]0*-*-*): Update. - * mpn/Makefile.am (TARG_DIST): Add s390. - - * mpz/fits_s.c, mpf/fits_s.c, mpf/fits_u.c: Remove files, unused since - change to .h style. - -2001-11-29 Torbjorn Granlund <tege@swox.com> - - * gmp-h.in: Declare mpz_get_d_2exp and mpf_get_d_2exp. - * Makefile.am: Add mpz/get_d_2exp$U.lo and mpf/get_d_2exp$U.lo. - * mpf/Makefile.am: Add get_d_2exp.c. - * mpz/Makefile.am: Add get_d_2exp.c. - -2001-11-29 Kevin Ryde <kevin@swox.se> - - * mpn/*/gmp-mparam.h: Update measured thresholds. - * mpn/s370/gmp-mparam.h: New file. - - * mpz/millerrabin.c: Mark for internal use only, for now. - * gmp.texi (Number Theoretic Functions): Remove documentation. - -2001-11-28 Torbjorn Granlund <tege@swox.com> - - * mpf/get_d_2exp.c: New file. - * mpz/get_d_2exp.c: New file. - - * mpz/realloc2.c: Fix typo. Make more similar to mpz_realloc. - * mpz/realloc.c: Use __GMP_REALLOCATE_FUNC_LIMBS. - -2001-11-27 Gerardo Ballabio <ballabio@sissa.it> - - * gmpxx.h, mpfrxx.h: Various updates and improvements. - -2001-11-27 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Useful Macros and Constants): Add gmp_version, add @findex - for mp_bits_per_limb. - - * demos/perl/GMP.pm, demos/perl/GMP.xs: Use new style gmp_randinit's. - * demos/perl/test.pl: Update for this, and for mpz_perfect_power_p - handling of 0 and 1. - -2001-11-26 Torbjorn Granlund <tege@swox.com> - - * mpz/realloc.c: Clear variable when decreasing allocation to less than - needed. Misc updates. - -2001-11-25 Kevin Ryde <kevin@swox.se> - - * tests/misc/t-locale.c: Avoid printf in the normal case, since the - replacement localeconv breaks it on SunOS 4. - - * gmp.texi (Build Options, Notes for Package Builds): Note libgmpxx - depends on libgmp from same GMP version. - - * acinclude.m4, configure.in (GMP_FUNC_SSCANF_WRITABLE_INPUT): New - test. - * scanf/sscanf.c, scanf/vsscanf.c: Use it to ensure sscanf input is - writable, if necessary. - - * tests/misc/t-scanf.c: Ensure sscanf arguments are writable, always. - * configure.in (AC_CHECK_DECLS): Remove sscanf, no longer required. - - * configure.in (none-*-*): Fix default CFLAGS setups. - - * doc/configuration: Misc updates. - -2001-11-23 Kevin Ryde <kevin@swox.se> - - * mpz/init2.c, mpz/realloc2.c: New files. - * Makefile.am, mpz/Makefile.am: Add them. - * gmp-h.in: Add prototypes. - * gmp.texi (Efficiency): Mention these instead of _mpz_realloc. - (Initializing Integers): Add documentation, reword other parts. - -2001-11-22 Torbjorn Granlund <tege@swox.com> - - * mpn/cray/ieee/addmul_1.c: Fix logic for more_carries scalar loop. - * mpn/cray/ieee/submul_1.c: Likewise. - -2001-11-20 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Known Build Problems): Note an out of memory on DJGPP. - (Function Classes): Update function counts. - Misc tweaks elsewhere. - - * configure.in (AC_CHECK_DECLS): Add sscanf. - * tests/misc/t-scanf.c: Use it, for the benefit of SunOS 4. - - * tal-debug.c, gmp-impl.h: More checks of TMP_DECL/TMP_MARK/TMP_FREE - consistency. - - * mpfr/Makefile.am (AR): Explicit AR=@AR@ to override automake - default, necessary for powerpc64 ABI=aix64. - -2001-11-18 Torbjorn Granlund <tege@swox.com> - - * mpz/powm.c: Move TMP_MARK to before any TMP_ALLOCs. - -2001-11-18 Kevin Ryde <kevin@swox.se> - - * configure.in (--enable-fft): Make this the default. - * gmp.texi (Build Options): Update. - - * Makefile.am (libmp_la_DEPENDENCIES): Revise mpz objects needed by - new mpz/powm.c. - - * gmp.texi (Random State Initialization): Add gmp_randinit_default and - gmp_randinit_lc_2exp_size, mark gmp_randinit as obsolete. - (Random State Seeding): New section, taken from "Random State - Initialization" and "Random Number Functions". - - * configure.in (AC_CHECK_DECLS): Add fgetc, fscanf, ungetc. - * scanf/fscanffuns.c: Use these, for the benefit of SunOS 4. - - * gmp-impl.h, gmp-h.in (__gmp_default_fp_limb_precision): Move back to - gmp-impl.h now not required for inlined mpf. - - * randlc2s.c (gmp_randinit_lc_2exp_size): New file, the size-based LC - selection from rand.c. - * rand.c (gmp_randinit): Use it. - * randdef.c (gmp_randinit_default): New file. - * gmp-impl.h (RANDS): Use it. - (ASSERT_CARRY): New macro. - * gmp-h.in (gmp_randinit_default, gmp_randinit_lc_2exp_size: Add - prototypes. - * Makefile.am (libgmp_la_SOURCES): Add randdef.c and randlc2s.c. - - * printf/asprntffuns.c: Include config.h before using its defines. - - * gmp-impl.h: Move C++ <string> to top of file to avoid the memset - redefine upsetting configure tests. Remove <iostream> since <iosfwd> - in gmp.h suffices. - -2001-11-16 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Integer Exponentiation): mpz_powm supports negative - exponents. - (Assigning Floats, I/O of Floats, C++ Formatted Output, C++ Formatted - Input): Decimal point follows locale. - (Formatted Output Strings): %n accepts any type. - (Formatted Input Strings): New section. - (Formatted Input Functions): New section. - (C++ Class Interface): Corrections and clarifications suggested by - Gerardo. - - * scanf/doscan.c, scanf/fscanf.c, scanf/fscanffuns.c, scanf/scanf.c, - scanf/sscanf.c, scanf/sscanffuns.c, scanf/vfscanf.c, scanf/vscanf.c, - scanf/vsscanf.c, scanf/Makefile.am, tests/misc/t-scanf.c: New files. - * gmp-h.in, gmp-impl.h, Makefile.am, configure.in: Consequent - additions. - - * tests/misc: New directory. - * tests/misc/Makefile.am: New file. - * tests/misc/t-locale.c: New file. - * tests/misc/t-printf.c: Moved from tests/printf. - * tests/printf: Remove directory. - * configure.in, tests/Makefile.am: Update. - - * tests/cxx/t-locale.cc: New file. - * tests/cxx/Makefile.am: Add it. - - * mpf/set_str.c, cxx/ismpf.cc: Use localeconv for the decimal point. - - * acinclude.m4 (GMP_ASM_X86_MCOUNT): Update to $lt_prog_compiler_pic - for current libtool, recognise non-PIC style mcount in windows DLLs. - - * gmp-impl.h (__gmp_replacement_vsnprintf): Add prototype. - - * gmp-impl.h (__gmp_rands, __gmp_rands_initialized, - modlimb_invert_table): Add __GMP_DECLSPEC for the benefit of test - programs using them from a windows DLL. - * longlong.h (__clz_tab): Ditto. - - * mpn/x86/t-zdisp2.pl: New file. - - * mpn/x86/pentium4/README: New file. - -2001-11-15 Torbjorn Granlund <tege@swox.com> - - * mpz/powm.c (HANDLE_NEGATIVE_EXPONENT): #define to 1. - * tests/mpz/reuse.c (main): Use mpz_invert to avoid undefined mpz_powm - cases. - -2001-11-14 Torbjorn Granlund <tege@swox.com> - - * mpz/powm_ui.c: Rewrite along the lines of mpz/powm.c (except still no - redc). - * mpz/powm.c: Adjust for negative b, after exponentiation done. Add - (still disabled) code for handling negative exponents. Misc cleanups. - -2001-11-14 Kevin Ryde <kevin@swox.se> - - * mpf/out_str.c: Use localeconv for the decimal point. - - * tests/misc.c (tests_rand_end): Use time() if gettimeofday() not - available (eg. on mingw). - -2001-11-11 Kevin Ryde <kevin@swox.se> - - * gmp-h.in: Remove parameter names from prototypes, to keep out of - application namespace. - -2001-11-08 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_GCC_VERSION_GE): Fix sed regexps to work on - Solaris 8. - - * printf/doprnt.c: Support %n of all types, per glibc. - - * gmp-h.in, gmp-impl.h, mpf/abs.c, mpf/neg.c, mpf/get_prc.c, - mpf/get_dfl_prec.c, mpf/set_dfl_prec.c, mpf/set_prc_raw.c, - mpf/set_si.c, mpf/set_ui.c, mpf/size.c: Revert mpf inlining, in order - to leave open the possibility of keeping binary compatibility if mpf - becomes mpfr. - - * mpn/x86/k7/mmx/lshift.asm, mpn/x86/k7/mmx/rshift.asm: Use Zdisp to - force code size for computed jumps. - * mpn/x86/k6/mod_34lsub1.asm, mpn/x86/k6/k62mmx/copyd.asm: Use Zdisp - to force good code alignment. - * mpn/x86/x86-defs.m4 (Zdisp): More instructions. - - * mpn/x86/pentium/sqr_basecase.asm, mpn/x86/k7/mmx/mod_1.asm, - mpn/x86/k7/mmx/popham.asm: Remove some unnecessary "0" address offsets. - - * mpq/set_si.c, mpq/set_ui.c: Set _mp_den._mp_size correctly if den==0. - -2001-11-07 Torbjorn Granlund <tege@swox.com> - - * mpn/hppa/hppa1_1/udiv_qrnnd.asm: Work around gas bug. - - * mpn/asm-defs.m4 (PROLOGUE): Change alignment to 8 (probably a good - idea in general; required for hppa/hppa1_1/udiv_qrnnd.asm). - -2001-11-06 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (MPN_COPY_INCR): Prepend local variable by `__'. - (MPN_COPY_DECR): Likewise. - -2001-11-05 Torbjorn Granlund <tege@swox.com> - - * mpz/powm.c: Call mpn functions, not mpz functions, for computation - mod m. Streamline allocations to use a mixture of stack allocation and - heap allocation. Add currently disabled phi(m) exponent reduction - code. Misc optimizations and cleanups. - -2001-11-05 Kevin Ryde <kevin@swox.se> - - * mpq/inp_str.c: Remove unused variable "ret". - - * mpn/x86/k7/sqr_basecase.asm: Fix a 0(%edi) to use Zdisp, so the - computed jumps hit the right spot on old gas. - - * mpq/canonicalize.c: DIVIDE_BY_ZERO if denominator is zero. - - * mpn/lisp/gmpasm-mode.el (comment-start-skip): Correction to the way - the first \( \) pair is setup. - (gmpasm-font-lock-keywords): Don't fontify the space before a "#" etc. - Misc tweaks to some comments. - -2001-11-03 Torbjorn Granlund <tege@swox.com> - - * tests/refmpn.c (refmpn_overlap_p): Reverse return values. - -2001-11-02 Kevin Ryde <kevin@swox.se> - - * tune/many.pl: Setup CFLAGS_PIC and ASMFLAGS_PIC, since that's no - longer done by configure. - - * mpn/x86/pentium4/mmx/popham.asm: New file. - - * mpn/x86/x86-defs.m4 (psadbw): New macro. - * mpn/x86/k7/mmx/popham.asm: Use it. - - * tests/refmpn.c (refmpn_overlap_p): New function, independent of - MPN_OVERLAP_P. - -2001-10-31 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-powm.c: Print proper error message when finding - discrepancy. - -2001-10-31 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium/mod_34lsub1.asm: New file. - * mpn/x86/k7/mod_34lsub1.asm: New file. - * mpn/x86/mod_34lsub1.asm: New file. - -2001-10-30 Kevin Ryde <kevin@swox.se> - - * tests/printf/t-printf.c (check_misc): Add checks from the glibc docs. - (check_vasprintf, check_vsnprintf): Run these unconditionally. - - * gmp-impl.h (ASSERT_MPQ_CANONICAL): New macro. - * mpq/cmp.c, mpq/cmp_si.c, mpq/cmp_ui.c, mpq/equal.c: Add ASSERTs for - canonical inputs, where correctness depends on it. - - * mpn/lisp/gmpasm-mode.el (comment-start-skip): Add "dnl". - -2001-10-27 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c: Remove some unused variables. - (main): Allocate more buffer space to accommodate minus sign. - -2001-10-27 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h, mpn/asm-defs.m4, configure.in, tune/speed.h, - tune/speed.c, tune/common.c, tune/many.pl, tests/devel/try.c: Add - mpn_mod_34lsub1. - * tests/refmpn.c, tests/tests.h (refmpn_mod_34lsub1): New function. - - * mpn/generic/mod_34lsub1.c: New file. - * mpn/x86/k6/mod_34lsub1.asm: New file. - * mpn/x86/pentium4/sse2/mod_34lsub1.asm: New file. - * mpn/x86/x86-defs.m4 (Zdisp): Add another instruction. - - * gmp-h.in, gmpxx.h: Use <iosfwd> not whole <iostream>. - - * gmp.texi (Known Build Problems): Add note on test programs with - Windows DLLs. - -2001-10-26 Kevin Ryde <kevin@swox.se> - - * tests/mpq/t-get_d.c: Limit the size of "eps" for vax. - - * gmp.texi (maybepagebreak): New macro, use it in a few places. - (Notes for Particular Systems): C++ Windows DLLs are not supported. - (Known Build Problems): Note sparc solaris 2.7 gcc 2.95.2 shared - library problems. - (Autoconf): Tweak version numbers shown. - (Integer Roots): mpz_perfect_square_p and mpz_perfect_power_p consider - 0 and 1 perfect powers, mpz_perfect_power_p accepts negatives. - (Number Theoretic Functions): Add mpz_millerrabin, combined with a - reworded mpz_probab_prime_p. - (Formatted Output Strings): Misc clarifications. - (Formatted Output Functions): gmp_asprintf, gmp_vasprintf, - gmp_snprintf, gmp_vsnprintf always available. - (C++ Formatted Output): Misc rewordings. - (Formatted Input): New chapter. - (C++ Class Interface): New chapter, by Gerardo and me. - (Language Bindings): Update GMP++ now in GMP. - (C++ Interface Internals): New section, by Gerardo and me. - - * printf/repl-vsnprintf.c: New file. - * configure.in, acinclude.m4, Makefile.am, printf/Makefile.am: Use it - if libc vsnprintf missing or bad. - * configure.in (AC_CHECK_FUNCS): Add strnlen. - - * printf/snprntffuns.c, printf/vasprintf.c: Use - __gmp_replacement_vsnprintf if libc vsnprintf not available. - * printf/asprintf.c, printf/snprintf.c, printf/vasprintf.c, - printf/vsnprintf.c: Provide these functions unconditionally. - * acinclude.m4 (GMP_FUNC_VSNPRINTF): Remove warning about omissions - when vsnprintf not available. - -2001-10-24 Kevin Ryde <kevin@swox.se> - - * configure, aclocal.m4: Regenerate with a libtool patch for a stray - quote in AC_LIBTOOL_PROG_LD_SHLIBS under mingw and cygwin. - - * gmp-impl.h (modlimb_invert): More comments. - - * printf/doprnt.c, printf/doprnti.c: Use the precision field to print - leading zeros. - * tests/printf/t-printf.c: Test this. - * cxx/osdoprnti.cc, gmp-impl.h: Ignore precision in operator<<. - - * tune/speed.c, tune/speed.h, tune/common.c: Add mpn_mul_1_inplace. - -2001-10-23 Torbjorn Granlund <tege@swox.com> - - * mpz/pprime_p.c (mpz_millerrabin): Remove function and its descendant. - - * mpz/millerrabin.c: New file with code from pprime.c. - * mpz/Makefile.am: Compile millerrabin.c. - * Makefile.am (MPZ_OBJECTS): Ditto. - * gmp-h.in: Declare mpz_millerrabin. - -2001-10-22 Torbjorn Granlund <tege@swox.com> - - * tests/mpz/t-perfsqr.c: New file. - * tests/mpz/Makefile.am (check_PROGRAMS): Add it. - - * demos/factorize.c (factor): Check for number to factor == 0. - (main): When invoked without arguments, read from stdin. - - * mpz/perfpow.c: Add code to handle negative perfect powers ((-b)^odd). - Treat 0 and 1 as perfect powers. - - * mpn/sparc32/v9/sqr_diagonal.asm: Jump past .align. - -2001-10-21 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/perfsqr.c (sq_res_0x100): Remove bogus final `,'. - (mpn_perfect_square_p): Suppress superfluous `&1' in sq_res_0x100 test. - (mpn_perfect_square_p, O(n) test): Improve comments. Combine remainder - tests for some small primes. Don't share code for different limb - sizes. Use single `if' with many `||' for better code density. - -2001-10-22 Kevin Ryde <kevin@swox.se> - - * demos/perl/GMP.xs (mutate_mpz, tmp_mpf_grow): Make these "static". - - * mpn/x86/pentium/popcount.asm, mpn/x86/pentium/hamdist.asm - (mpn_popcount_table): Use GSYM_PREFIX. - -2001-10-19 Kevin Ryde <kevin@swox.se> - - * mpn/x86/*.asm: Add some measured speeds on various x86s. - - * tests/mpz/reuse.c, tests/mpf/reuse.c: Disable tests when using a - windows DLL, because certain global variable usages won't compile. - - * configure.in (AC_CHECK_FUNCS): Add alarm. - * tests/spinner.c: Conditionalize alarm and SIGALRM availability, for - the benefit of mingw32. - - * acinclude.m4 (GMP_ASM_TYPE, GMP_ASM_SIZE): Suppress .type and .size - on COFF. - - * acinclude.m4 (GMP_PROG_HOST_CC): New macro. - * configure.in: Use it for windows DLL cross-compiles. - * aclocal.m4, configure: Regenerate with libtool patch to hold HOST_CC - in the generated libtool script. - - * aclocal.m4, configure: Regenerate with libtool patch to suppress - warnings when probing command line limit on FreeBSD. - - * demos/qcn.c (M_PI): Define if not already provided, helps mingw32. - -2001-10-17 Kevin Ryde <kevin@swox.se> - - * printf/doprnt.c: Use <stdint.h> for intmax_t. - - * longlong.h: Recognise __sparcv8 for gcc on Solaris. Reported by - Mark Mentovai <mark@mentovai.com>. - - * gmp-impl.h (gmp_allocated_string): No need for inline on member funs. - -2001-10-16 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Debugging): Add mpatrol. - (Integer Comparisons, Comparing Rationals, Float Comparison): Index - entries for sign tests. - (I/O of Floats): Clarify mpf_out_str exponent is in decimal. - (C++ Formatted Output): mpf_t operator<< exponent now in decimal. - (FFT Multiplication): Use an ascii art sigma. - (Contributors): Add Gerardo Ballabio. - - * cxx/osfuns.cc (__gmp_doprnt_params_from_ios): Always give mpf_t - exponent in decimal, irrespective of ios::hex or ios::oct. - * tests/cxx/t-ostream.cc (check_mpf): Update. - - * printf/doprnt.c: Support %lln and %hhn. - - * mpn/x86/pentium4/sse2/submul_1.asm: Use a psubq to negate the - initial carry (helps the submul_1c case), and improve the comments. - -2001-10-11 Kevin Ryde <kevin@swox.se> - - * acinclude.m4, configure.in (GMP_IMPL_H_IEEE_FLOATS): New macro. - - * ltmain.sh: Send some rm errors to /dev/null, helps during compiles - on Solaris 2.7 and HP-UX 10. - - * tal-notreent.c: Renamed from stack-alloc.c. - * Makefile.am, acinclude.m4, gmp-impl.h: Update. - - * gmp-h.in: Don't give both prototypes and inlines, except on gcc. - - * gmp-h.in, gmp-impl.h: Use #includes to get necessary standard - classes, add std:: to prototypes. - * cxx/*.cc, tests/cxx/t-ostream.cc: Add "use namespace std". - * acinclude.m4 (GMP_PROG_CXX_WORKS): Ditto. - - * tests/*/Makefile.in, mpfr/tests/Makefile.in: Regenerate with - automake patch to avoid Ultrix problem with empty $(TESTS). - - * */Makefile.in: Regenerate with automake patch to only rm *_.c in - "make clean" when ansi2knr actually in use, helps DOS 8.3. - - * Makefile.in: Regenerate with automake patch to fix stamp-h - numbering, avoiding an unnecessary config.status run. - -2001-10-09 Torbjorn Granlund <tege@swox.com> - - * mpn/hppa/hppa1_1/udiv_qrnnd.asm: Use L macros for labels. - Quote L reloc operator. - - * gmp-impl.h: Declare class string. - - * mpn/asm-defs.m4 (INT32, INT64): Quote $1 to prevent further - expansion. - - * mpn/alpha/ev6/mul_1.asm: New file. - -2001-10-09 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Introduction to GMP): Add pentium 4 to optimized CPUs. - (Build Options): Note macos directory. - (Notes for Package Builds): GMP 4 series binary compatible with 3. - (Known Build Problems): Remove $* and ansi2knr note, now fixed, except - possibly under --host=none. - (Formatted Output Strings): Remove -1 prec for all digits. - - * mpz/add.c, mpz/sub.c: Don't use mpz path on #include (helps macos). - * mpbsd/Makefile.am (INCLUDES): Add -I$(top_srcdir)/mpz. - - * printf/doprnt.c, tests/printf/t-printf.c: Remove support for %.*Fe - prec -1 meaning all digits. - - * acinclude.m4 (GMP_PROG_AR): Override libtool, use AR_FLAGS="cq". - (GMP_HPC_HPPA_2_0): Print version string to config.log. - - * Makefile.am (AUTOMAKE_OPTIONS): Remove check-news (permission notice - in NEWS file is too big). - (dist-hook): Don't distribute numbered or unnumbered emacs backups. - - * Makefile.am, cxx/Makefile.am: Updates for Gerardo's stuff. - -2001-10-09 Gerardo Ballabio <ballabio@sissa.it> - - * cxx/isfuns.cc: New file. - * gmp-impl.h: Add prototypes. - * cxx/ismpf.cc, cxx/ismpq.cc, cxx/ismpz.cc: New files. - * gmp-h.in: Add prototypes. - * gmpxx.h, mpfrxx.h: New files. - -2001-10-08 Kevin Ryde <kevin@swox.se> - - * configure.in (with_tags): Establish a default based on --enable-cxx. - - * aclocal.m4: Regenerate with libtool patches for sed char range to - help Cray, LTCC quotes and +Z warnings grep to help HP-UX. - - * gmp-impl.h (doprnt_format_t, doprnt_memory_t, doprnt_reps_t, - doprnt_final_t): Use _PROTO. - -2001-10-05 Torbjorn Granlund <tege@swox.com> - - * mpn/asm-defs.m4 (INT32, INT64): Use LABEL_SUFFIX. - - * mpn/hppa: Convert files to `.asm'. - -2001-10-05 Kevin Ryde <kevin@swox.se> - - * mpn/Makeasm.am (.S files): Revert to separate CPP and CCAS, use - cpp-ccas, and only pass CPPFLAGS to CPP, not whole CFLAGS. - * mpn/cpp-ccas: New file. - * mpn/Makefile.am (EXTRA_DIST): Add it. - - * tune/common.c, tune/speed.h: Change SPEED_ROUTINE_MPN_COPY_CALL uses - to SPEED_ROUTINE_MPN_COPY or new SPEED_ROUTINE_MPN_COPY_BYTES. Avoids - macro expansion problems on Cray. - - * configure.in (AC_PROG_CXXCPP): Add this, to make libtool happier. - -2001-10-04 Torbjorn Granlund <tege@swox.com> - - * mpz/rrandomb.c (gmp_rrandomb): Change bit_pos to be 0-based (was - 1-based); shift 2 (was 1) when making bit mask. These two changes - avoid undefined shift counts. - (gmp_rrandomb): Avoid most calls to _gmp_rand by caching random values. - - * mpn/generic/random2.c: Changes for mirroring mpz/rrandomb.c. - -2001-10-04 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Build Options): Add --enable-cxx. - (Notes for Particular Systems): Mention pentium4 performance and SSE2. - (Known Build Problems): Remove vax jsobgtr note, no longer needed. - (Converting Floats): Tweak mpf_get_str description. - (Low-level Functions): Correction to mpn_gcdext destination space - requirements. - (C++ Formatted Output): New section. - (Language Bindings): Add ALP - (Contributors): Add Paul Zimmermann's square root, update my things. - - * acinclude.m4 (GMP_PROG_CC_IS_GNU, GMP_PROG_CXX_WORKS): Send compiler - errors to config.log. - - * mpq/Makefile.am (INCLUDES): Remove -DOPERATION_$*, not needed. - - * mpn/x86/*.asm: Change references to old README.family to just README. - - * mpz/README: Remove file, now adequately covered in the manual. - -2001-10-03 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/pentium4/copyi.asm: New file. - * mpn/x86/pentium4/copyd.asm: New file. - - * gmp-impl.h: Implement separate MPN_COPY_INCR and MPN_COPY_DECR - macros for CRAY systems. - (CRAY _MPN_COPY): Delete. - -2001-10-02 Kevin Ryde <kevin@swox.se> - - * tests/mpz/t-popcount.c (check_data): Use "~ (unsigned long) 0" to - avoid compiler warnings on sco. - - * mpbsd/Makefile.am: Compile mpz files directly, no copying. - Use mpz/add.c and mpz/sub.c rather than mpz/aors.c. - (INCLUDES): Remove -DOPERATION_$*, no longer needed (by mpz). - - * mpz/aors.h: Renamed from mpz/aors.c. - * mpz/add.c, mpz/sub.c: New files, using mpz/aors.h. - * mpz/aors_ui.h: Renamed from mpz/aors_ui.c. - * mpz/add_ui.c, mpz/sub_ui.c: New files, using mpz/aors_ui.h. - * mpz/fits_s.h: Renamed and adapted from mpz/fits_s.c. - * mpz/fits_sshort.c, mpz/fits_sint.c, mpz/fits_slong.c: New files. - * mpz/mul_i.h: Renamed from mpz/mul_siui.c. - * mpz/mul_ui.c, mpz/mul_ui.c: New files, using mpz/mul_i.h. - * mpz/Makefile.am: Consequent updates. - (INCLUDES): Remove -DOPERATION_$*. - - * mpf/fits_s.h: Renamed and adapted from mpf/fits_s.c. - * mpf/fits_sshort.c, mpf/fits_sint.c, mpf/fits_slong.c: New files. - * mpf/fits_u.h: Renamed and adapted from mpf/fits_u.c. - * mpf/fits_ushort.c, mpf/fits_uint.c, mpf/fits_ulong.c: New files. - * mpf/Makefile.am: Consequent updates. - (INCLUDES): Remove -DOPERATION_$*. - - * cxx/osfuns.cc (__gmp_doprnt_params_from_ios): Don't use ios::hex etc - as cases in a switch, they're not constant in g++ 3.0. - - * mpn/Makeasm.am (.s.o, .s.obj, .S.o, .S.obj, .asm.o, .asm.obj): - Locate source file with test -f the same as automake. - (.S): Let CCAS do the preprocessing, and run libtool for .S.lo. - (.asm.lo): Run libtool via m4-ccas to get new style foo.lo right. - (COMPILE_FLAGS): Add $(DEFAULT_INCLUDES), per new automake. - * mpn/m4-ccas: New file. - * mpn/Makefile.am (EXTRA_DIST): Add it. - * mpn/asm-defs.m4: Add m4_not_for_expansion(`DLL_EXPORT'). - * mpn/x86/x86-defs.m4: Undefine PIC if DLL_EXPORT is set. - * configure.in (CFLAGS_PIC, ASMFLAGS_PIC): Remove, no longer needed. - - * acinclude.m4 (GMP_FUNC_VSNPRINTF): Warn what's omitted when - vsnprintf not available. - - * mpn/underscore.h: Remove file, not used since m68k converted to asm. - * mpn/Makefile.am (EXTRA_DIST): Remove it. - - * tests/refmpz.c: Add <stdlib.h>, for free(). - -2001-10-01 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/pentium4/sse2/submul_1.asm: Apply some algebraic - simplifications. - * mpn/x86/pentium4/sse2/addmul_1.asm: Comment. - -2001-10-01 Kevin Ryde <kevin@swox.se> - - * configure.in (--enable-cxx): New option for C++ support. - Add cxx and tests/cxx subdirectories. - * ltmain.sh, aclocal.m4: Update to libtool 2001-09-30. - - * cxx/Makefile.am, cxx/Makefile.in, cxx/osdoprnti.cc, cxx/osfuns.cc, - cxx/osmpf.cc, cxx/osmpq.cc, cxx/osmpz.cc: New files. - * Makefile.am: Add them, in new libgmpxx. - * gmp-h.in, gmp-impl.h: Prototypes and support. - * tests/cxx/Makefile.am, tests/cxx/Makefile.in, - tests/cxx/t-ostream.cc: New files. - - * tune/speed.h (SPEED_ROUTINE_MPN_GCD_CALL, - SPEED_ROUTINE_MPN_GCDEXT_ONE): mpn_gcdext needs size+1 for - destinations. Found by Torbjorn. - - * gmp-h.in (__GNU_MP__, __GNU_MP_VERSION): Bump to 4.0. - * mp-h.in (__GNU_MP__): Ditto. - * gmp.texi, Makefile.am, compat.c: Amend version 3.2 to 4.0. - - * acinclude.m4 (GMP_PROG_CXX_WORKS): New macro. - (GMP_PROG_CC_WORKS): Write "conftest" test program, not a.out. - - * gmp-impl.h (struct gmp_asprintf_t): Moved from printf/vasprintf.c. - (GMP_ASPRINTF_T_INIT): New macro. - (GMP_ASPRINTF_T_NEED): New macro, adapted from vasprintf.c NEED(). - * printf/vasprintf.c: Use these. - - * printf/asprntffuns.c: New file. - * printf/Makefile.am, Makefile.am: Add it. - * printf/asprntffuns.c, printf/vasprintf.c, gmp-impl.h - (__gmp_asprintf_memory, __gmp_asprintf_reps, __gmp_asprintf_final): - Move to asprntffuns.c, rename to __gmp and make global, remove - spurious formal parameters from __gmp_asprintf_final. - - * configure.in (j90-*-*, sv1-*-*): Don't duplicate $path in $add_path. - (*-*-mingw*): Don't assemble with -DPIC (as per cygwin). - - * printf/snprntffuns.c (gmp_snprintf_final): Remove spurious formal - parameters. - - * tune/tuneup.c (POWM_THRESHOLD): Reduce stop_factor to 1.1 to help - Cray vector systems. - - * tests/misc.c (tests_rand_start): Print GMP_CHECK_RANDOMIZE=NN to - facilitate cut and paste when re-running. - * tests/mpz/t-inp_str.c (check_data): Add more diagnostic prints. - -2001-09-30 Kent Boortz <kent@swox.com> - - * macos/configure, macos/Makefile.in, macos/README: Updates for gmp 4. - * gmp-h.in (_GMP_H_HAVE_FILE): Recognise Apple MPW. - -2001-09-30 Torbjorn Granlund <tege@swox.com> - - * mpn/cray/ieee/submul_1.c: Rewrite. Streamline multiplications; - use `majority' logic. - -2001-09-27 Torbjorn Granlund <tege@swox.com> - - * gmp-h.in (__GMPN_AORS_1): Rewrite to work around Cray compiler bug. - -2001-09-26 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/pentium4/sse2/gmp-mparam.h: New file. - -2001-09-26 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium4/sse2/dive_1.asm: New file. - * mpn/x86/pentium4/sse2/submul_1.asm: New file. - * mpn/x86/pentium4/sse2/sqr_basecase.asm: New file. - - * mpn/x86/pentium/copyi.asm: New file, based on past work by Torbjorn. - * mpn/x86/pentium/copyi.asm: New file, ditto. - * mpn/x86/pentium/com_n.asm: Rewrite, ditto. - - * printf/snprntffuns.c (gmp_snprintf_format): Copy va_list in case - vsnprintf trashes it. - * printf/vasprintf.c (gmp_asprintf_format): Ditto. - * gmp-impl.h, doprnt.c (va_copy): Move to gmp-impl.h. - - * tests/mpz/t-cmp_d.c (check_low_z_one): Patch by Torbjorn for vax - limited float range. - -2001-09-23 Torbjorn Granlund <tege@swox.com> - - * mpn/vax/lshift.s: Change `jsob*' to `sob*'. - * mpn/vax/rshift.s: Likewise. - -2001-09-23 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium4/sse2/mul_basecase.asm: Some simple but real code. - - * printf/doprnt.c: Use va_copy for va_list variables, copy function - parameter in case it's call-by-reference. - - * tune/freq.c (speed_cpu_frequency_bsd_dmesg): New function. - (speed_cpu_frequency_table): Use it. - - * tune/many.pl (popcount, hamdist): Fix declared return value. - (sb_divrem_mn): Remove a spurious duplicate entry. - (CLEAN): Add tmp-$objbase.c when using that for .h files. - (macro_speed): Give a default for .h files. - Add ATTRIBUTE_CONST or __GMP_ATTRIBUTE_PURE as appropriate. - - * tune/speed.h (SPEED_ROUTINE_MPN_MOD_CALL, - SPEED_ROUTINE_MPN_PREINV_MOD_1, SPEED_ROUTINE_MPN_POPCOUNT, - SPEED_ROUTINE_MPN_HAMDIST, SPEED_ROUTINE_MPN_GCD_1N, - SPEED_ROUTINE_MPN_GCD_1_CALL, SPEED_ROUTINE_MPZ_JACOBI): Use return - values so gcc 3 won't discard calls to pure or const functions. - (mpn_mod_1_div, mpn_mod_1_inv): Add __GMP_ATTRIBUTE_PURE. - -2001-09-22 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/pentium4/sse2/mul_basecase.asm: New file, placeholder - for real code, hiding the default x86 mul_basecase.asm. - -2001-09-22 Kevin Ryde <kevin@swox.se> - - * configure.in (AC_PREREQ): Bump to 2.52. - (m4_pattern_forbid, m4_pattern_allow): New calls, forbid GMP_. - (AC_CHECK_HEADERS): Remove sys/types.h, already done by autoconf. - * acinclude.m4, configure.in (GMP_GCC_NO_CPP_PRECOMP): New macro. - - * tests/devel/try.c (TYPE_PREINV_MOD_1): Don't run size==0. - (malloc_region): Need fd=-1 for mmap MAP_ANON on BSD. - -2001-09-20 Torbjorn Granlund <tege@swox.com> - - * mpz/cong.c (mpz_congruent_p): Fix one-limb c<d test. - - * longlong.h: Rewrite __i370__ smul_ppmm; enable also for __s390__. - - * configure.in: Add support for IBM 360, 370, 390 families. - -2001-09-20 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium4/sse2/diveby3.asm: New file. - * mpn/x86/pentium4/sse2/mode1o.asm: New file. - -2001-09-16 Kevin Ryde <kevin@swox.se> - - * printf/doprnt.c: '#' means showpoint and showtrailing for %e, %f, %g. - * tests/printf/t-printf.c (check_f): More test cases. - -2001-09-15 Torbjorn Granlund <tege@swox.com> - - * gmp-h.in (__GMPN_AORS_1): Remove param TEST, add OP and CB. - Postpone zeroing of (cout). - (__GMPN_ADD_1, __GMPN_SUB_1): Corresponding changes. - -2001-09-14 Kevin Ryde <kevin@swox.se> - - * ChangeLog: Merge in tests/rand/ChangeLog. - * tests/rand/ChangeLog: Remove file. - - * printf/doprnt.c: Fix handling of a plain format after a GMP one; no - need to protect against negative precision internally. - * tests/printf/t-printf.c (check_misc): More checks. - -2001-09-12 Torbjorn Granlund <tege@swox.com> - - * mpn/cray/ieee/invert_limb.c: Add a PROLOGUE in a comment to have - HAVE_NATIVE_... defined. - -2001-09-11 Kevin Ryde <kevin@swox.se> - - * configure.in, gmp-h.in (__GMP_HAVE_HOST_CPU_FAMILY_power, - __GMP_HAVE_HOST_CPU_FAMILY_powerpc): New AC_SUBSTs. - * gmp-h.in (__GMPN_COPY_INCR): Use them to select the power/powerpc - code, rather than preprocessor defines. - - * acinclude.m4, configure.in (GMP_H_ANSI): New macro. - - * gmp-h.in (__GMP_EXTERN_INLINE): Add a definition for SCO 8 cc. - - * gmp-h.in, version.c (gmp_version): Make the pointer "const" as well - as the string. - - * acinclude.m4, configure.in (GMP_PROG_CC_IS_XLC): Recognise xlc when - invoked under another name (cc, xlc128, etc). - * acinclude.m4 (GMP_PROG_CC_IS_GCC): Print a message when recognised. - -2001-09-11 Torbjorn Granlund <tege@swox.com> - - * gmp-h.in: Let __DECC mean __GMP_HAVE_CONST, etc. - * mp-h.in: Likewise. - -2001-09-10 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/pentium4/mmx/lshift.asm: New file. - * mpn/x86/pentium4/mmx/rshift.asm: New file. - - * tests/mpn/t-iord_u.c (check_incr_data): Work around HP compiler bug. - (check_decr_data): Likewise. - -2001-09-08 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Integer Logic and Bit Fiddling): Update mpz_hamdist - behaviour, clarify mpz_popcount a touch. - (Language Bindings): Add mlton, fix alphabetical order. - (Single Limb Division): Describe 2 or 1/2 limbs at a time style. - - * configure.in (AC_CHECK_FUNCS): Add mmap. - * tests/devel/try.c (malloc_region): Use mmap if available. - - * tests/refmpz.c, tests/tests.h (refmpz_hamdist): New function. - * tests/mpz/t-hamdist.c: New file. - * tests/mpz/Makefile.am: Add it. - - * mpz/hamdist.c: Support neg/neg operands. - - * macos/Makefile.in: Remove dual compile of mpq/aors.c and - mpn/generic/popham.c. - - * gmp-impl.h (popc_limb): New macro, adapted from mpn/generic/popham.c. - For 64-bits reuse 0x33...33 constant. - * mpn/generic/popcount.c, mpn/generic/hamdist.c: Split from popham.c, - use popc_limb macro, remove unused "i", don't bother with "register" - qualifiers. - * mpn/generic/popham.c: Remove file. - - * ltmain.sh, configure, aclocal.m4: Update to libtool 1.4.1, with one - ltdll.c generation patch. - * doc/configuration: Misc updates, note libtool patch used. - - * mpn/x86/pentium4/sse2/mul_1.asm: Use pointer increments not indexed - addressing, to get 4.0 c/l flat. - - * tests/mpq/t-cmp_si.c (check_data): Use ULONG_MAX for denominators. - - * tests/misc.c (mpz_negrandom): Use given rstate, not RANDS. - -2001-09-07 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/pentium4/sse2/addmul_1.asm: New file. - -2001-09-04 Kevin Ryde <kevin@swox.se> - - * tune/freq.c: Define a HAVE for each speed_cpu_frequency routine to - avoid duplicating conditionals. - (speed_cpu_frequency_sco_etchw): New function. - (speed_cpu_frequency_table): Use it. - * tune/README: Mention SCO openunix 8 /etc/hw. - - * mpz/fib_ui.c: Use ?: to avoid a gcc 3 bug on powerpc64. - Store back a carry for limb<long. - - * mpn/x86/k7/mmx/divrem_1.asm, mpn/x86/k7/mmx/mod_1.asm, - mpn/x86/p6/mmx/divrem_1.asm: Fix a couple of comments. - - * config.guess: Give m68020 for 68020 or better, not m68k. - * configfsf.guess: Update to 2001-09-04. - -2001-09-02 Kevin Ryde <kevin@swox.se> - - * configure.in (m68k-*-*): Let m68k mean 68000, not 68020. - * gmp.texi (Notes for Particular Systems): Update. - - * gmp-impl.h (union ieee_double_extract) [m68k]: Use longs, since int - might be only 16 bits. - - * tests/mpq/t-aors.c: New file. - * tests/mpq/Makefile.am: Add it. - - * tests/refmpq.c: New file. - * tests/Makefile.am: Add it. - * tests/tests.h: Add prototypes. - - * mpq/aors.c: Share object code for mpq_add and mpq_sub. - * Makefile.am, mpq/Makefile.am: Single mpq/aors.lo now. - - * tests/devel/try.c (TYPE_SUBMUL_1): Use correct reference routine. - -2001-08-30 Kevin Ryde <kevin@swox.se> - - * mpn/x86/x86-defs.m4 (cmov_available_p): Add pentium4. - - * gmp-h.in: Put #define renamings with prototypes. - Remove commented out #defines of gmp-impl.h things. - (mpn_invert_limb): Remove #define, already in gmp-impl.h. - (mpn_lshiftc, mpn_rshiftc): Remove #defines, unused. - (mpn_addsub_nc): Add prototype to #define. - -2001-08-28 Kevin Ryde <kevin@swox.se> - - * gmp.texi: Switch to GFDL. - (Top): Arrange copyright and conditions to appear here too. For - clarity have all this before the miscellaneous macro definitions. - (Copying): Refer to COPYING.LIB file, mention plain GPL2 in demo - programs. - (Contributors, References): Use @appendix rather than @unnumbered. - (GNU Free Documentation License): New appendix. - (@contents): Move to start of document, use only for tex (not html). - (Debugging): Add leakbug. - (Build Options): Add pentium4. - (I/O of Rationals): Add mpq_inp_str. - - * fdl.texi: New file, with two @appendix directive tweaks. - * Makefile.am (gmp_TEXINFOS): Add it. - - * tests/mpz/io.c: Check mpz_inp_str return against ftell, send error - messages just to stdout. - - * mpz/inp_str.c, gmp-impl.h (__gmpz_inp_str_nowhite): New function, - and share a __gmp_free_func call. - * mpq/inp_str.c: New file. - * Makefile.am, mpq/Makefile.am: Add it. - * tests/mpq/t-inp_str.c: New file. - * tests/mpq/Makefile.am (check_PROGRAMS): Add it. - - * configure.in, acconfig.h (HAVE_HOST_CPU_FAMILY_power, - HAVE_HOST_CPU_FAMILY_powerpc, HAVE_HOST_CPU_FAMILY_x86): AC_DEFINEs - for processor families. - * gmp-impl.h: Use them, rather than cpp defines. - - * demos/Makefile.am (primes_LDADD): Use $(LIBM), for log(). - - * tune/many.pl, tune/Makefile.am: Fix some from clean and distclean. - -2001-08-26 Kevin Ryde <kevin@swox.se> - - * tests/devel/try.c (ARRAY_ITERATION): Make types match on "?:" legs. - (TYPE_MPZ_JACOBI, TYPE_MPZ_KRONECKER): Remove some superseded code. - - * tests/printf/t-printf.c (check_plain): Don't compare "all digits" - precision against plain printf. - - * tune/Makefile.am: Eliminate empty TUNE_MPZ_SRCS. - - * configure, config.in, INSTALL.autoconf: Update to autoconf 2.52. - * */Makefile.in, mdate-sh, missing, aclocal.m4, configure: Update to - automake 1.5. - * configfsf.guess, configfsf.sub: Update to 2001-08-23. - -2001-08-24 Torbjorn Granlund <tege@swox.com> - - * demos/primes.c: Complete rewrite. - -2001-08-24 Kevin Ryde <kevin@swox.se> - - * longlong.h: Test __ppc__ for apple darwin cc, reported by Jon - Becker. Also test __POWERPC__, PPC and __vxworks__. - - * tune/speed.h (speed_cyclecounter) [x86]: Don't clobber ebx in PIC. - -2001-08-22 Kevin Ryde <kevin@swox.se> - - * configure.in (x86 mmx): Correction to mmx path stripping. - -2001-08-17 Kevin Ryde <kevin@swox.se> - - * configure.in, acinclude.m4, Makefile.am, printf/Makefile.am, - tests/printf/Makefile.am, gmp-h.in, gmp-impl.h, gmp.texi: Remove C++ - support, for the time being. - * printf/doprntfx.cc, doprntix.cc, osfuns.cc, osmpf.cc, osmpq.cc, - osmpz.cc, tests/printf/t-ostream.cc: Remove files. - - * printf/doprnt.c, printf/doprntf.c, gmp-impl.h: Use a single - __gmp_doprnt_mpf, rather than a separate ndigits calculation. - * printf/doprnt.c, printf/doprntf.c, gmp-impl.h, gmp.texi, - tests/printf/t-printf.c: Let empty or -1 prec mean all digits for mpf. - * printf/doprnt.c, tests/printf/t-printf.c: Accept h or l in %n; let - negative "*" style width mean left justify. - - * gmp-impl.h, mpf/get_str.c (MPF_SIGNIFICANT_DIGITS): New macro, - extracted from mpf/get_str.c. - - * libmp.sym: New file. - * Makefile.am (libmp_la_LDFLAGS): Use it. - (DISTCLEANFILES): Remove asm-syntax.h, no longer generated. - Remove some comments about "make check". - - * demos/perl/GMP.pm, GMP.xs, GMP/Mpf.pm: Add printf and sprintf, - change get_str to string/exponent for floats, remove separate - mpf_get_str. - * demos/perl/GMP/Mpf.pm (overload_string): Use $# (default "%.g"). - * demos/perl/typemap: Fix some duplicate string entries. - * demos/perl/test.pl: Update tests, split overloaded constants into ... - * demos/perl/test2.pl: ... this new file. - * demos/perl/Makefile.PL (clean): Add test.tmp. - -2001-08-16 Kevin Ryde <kevin@swox.se> - - * printf/snprntffuns.c (gmp_snprintf_format): Correction to bufsize-1 - return value handling. - - * demos/calc/calc.y: Reposition "%{" so copyright notice gets into - generated files. - - * INSTALL: Use gmp_printf. - -2001-08-14 Kevin Ryde <kevin@swox.se> - - * mpz/inp_str.c: Fix return value (was 1 too big). - * tests/mpz/t-inp_str.c: New file. - * tests/mpz/Makefile.am: Add it. - - * mpn/x86/pentium4/sse2/add_n.asm: New file. - * mpn/x86/pentium4/sse2/sub_n.asm: New file. - * mpn/x86/pentium4/sse2/mul_1.asm: New file. - -2001-08-12 Kevin Ryde <kevin@swox.se> - - * printf/sprintffuns.c, printf/doprntf.c: Don't use sprintf return - value (it's a pointer on SunOS 4). - - * acinclude.m4 (GMP_ASM_X86_SSE2, GMP_STRIP_PATH): New macros. - * configure.in: Add pentium4 support. - * mpn/x86/pentium4, mpn/x86/pentium4/mmx, mpn/x86/pentium4/sse2: New - directories. - * mpn/x86/README: Update. - -2001-08-10 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (setup_error_handler): Catch also SIGABRT. - -2001-07-31 Kevin Ryde <kevin@swox.se> - - * tests/refmpn.c (refmpn_mul_1c): Allow low to high overlaps. - - * gmp-h.in, gmp-impl.h (_gmp_rand): Move prototype to gmp-impl.h. - - * tune/Makefile.am (EXTRA_DIST): Add many.pl. - -2001-07-28 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Random Number Functions): Old rand functions no longer use - the C library. - - * configure.in, acinclude.m4 (GMP_FUNC_VSNPRINTF): New macro. - - * mpn/generic/get_str.c: Add an ASSERT for high limb non-zero. - -2001-07-24 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Build Options): Add --enable-cxx. - (Converting Floats): Note mpf_get_str only generates accurately - representable digits. - (Low-level Functions): Note mpn_get_str requires non-zero high limb. - (Formatted Output): New chapter. - (Multiplication Algorithms): Use @quotation with @multitable. - (Toom-Cook 3-Way Multiplication): Ditto. - - * tests/memory.c (tests_free_nosize): New function. - * tests/tests.h (tests_allocate etc): Add prototypes. - - * tests/printf: New directory. - * tests/printf/Makefile.am, t-printf.c, t-ostream.cc: New files. - * configure.in, tests/Makefile.am: Add them. - - * configure.in, acinclude.m4 (GMP_PROG_CXX): New macro. - * configure.in (--enable-cxx): New option. - (AC_CHECK_HEADERS): Add locale.h and sys/types.h, remove unistd.h. - (AC_CHECK_TYPES): Add intmax_t, long double, long long, ptrdiff_t, - quad_t. - (AC_CHECK_FUNCS): Add localeconv, memset, obstack_vprintf, snprintf, - strchr, vsnprintf. - (AC_CHECK_DECLS): Add vfprintf. - - * gmp-h.in, gmp-impl.h: Additions for gmp_printf etc. - - * printf: New directory. - * printf/Makefile.am, asprintf.c, doprnt.c, doprntf.c, doprntfx.cc, - doprnti.c, doprntix.cc, fprintf.c, obprintf.c, obprntffuns.c, - obvprintf.c, osfuns.cc, osmpf.cc, osmpq.cc, osmpz.cc, printf.c, - printffuns.c, snprintf.c, snprntffuns.c, sprintf.c, sprintffuns.c, - vasprintf.c, vfprintf.c, vprintf.c, vsnprintf.c, vsprintf.c: New - files. - * configure.in, Makefile.am: Add them. - - * configure.in (HAVE_INLINE): Remove AC_DEFINE, unused. - (AC_CHECK_TYPES): Don't test for void, assume it always exists. - - * gmp-impl.h (__GMP_REALLOCATE_FUNC_MAYBE): New macro. - * mpz/get_str.c, mpq/get_str.c, mpf/get_str.c: Use it. - - * gmp-impl.h (mpn_fib2_ui): Use __MPN. - (MPN_COPY_DECR): Fix an ASSERT. - (CAST_TO_VOID): Remove macro. - - * gmp-h.in (mpq_out_str): Give #define even without prototype. - (mpz_cmp_d, mpz_cmpabs_d): Corrections to #defines. - - * tests/devel/try.c: Add mpn_add and mpn_sub, don't use CAST_TO_VOID. - -2001-07-23 Torbjorn Granlund <tege@swox.com> - - * config.guess: Recognize pentium4. - * config.sub: Recognize pentium4. - -2001-07-17 Kevin Ryde <kevin@swox.se> - - * gmp-h.in (__GMPN_AORS_1): Remove x86 and gcc versions, leave just - one version. - (__GMPN_ADD, __GMPN_SUB): New macros, rewrite of mpn_add and mpn_sub. - (mpn_add, mpn_sub): Use them. - (__GMPN_COPY_REST): New macro. - - * gmp-h.in, gmp-impl.h, acinclude.m4: Remove __GMP_ASM_L and - __GMP_LSYM_PREFIX, revert to ASM_L in gmp-impl.h and AC_DEFINE of - LSYM_PREFIX. - -2001-07-11 Kevin Ryde <kevin@swox.se> - - * gmp-h.in (__GMPN_ADD_1 etc) [x86]: Don't use this on egcs 2.91. - - * mpz/fits_uint.c, fits_ulong.c, mpz/fits_ushort.c: Split up fits_u.c. - * mpz/fits_u.c: Remove file. - * mpz/Makefile.am, macos/Makefile.in: Update. - - * tests/refmpn.c,tests.h (refmpn_copy): New function. - * tests/devel/try.c (TYPE_ZERO): No return value from call. - (TYPE_MODEXACT_1_ODD, TYPE_MODEXACT_1C_ODD): Share call with - TYPE_MOD_1 and TYPE_MOD_1C. - (MPN_COPY, __GMPN_COPY, __GMPN_COPY_INCR): Add testing. - -2001-07-10 Kevin Ryde <kevin@swox.se> - - * gmp-h.in (__GMPN_COPY): Add form to help gcc on power and powerpc. - * gmp-impl.h (MPN_COPY_INCR, MPN_COPY_DECR, MPN_ZERO): Ditto. - * mpn/powerpc64/copyi.asm, mpn/powerpc64/copyd.asm: Remove files. - - * mpz/tdiv_ui.c: Eliminate some local variables (seems to save code on - i386 gcc 2.95.x), remove a bogus comment about quotient. - - * errno.c, gmp-impl.h (__gmp_exception, __gmp_divide_by_zero, - __gmp_sqrt_of_negative): New functions. - * gmp-impl.h (GMP_ERROR, DIVIDE_BY_ZERO, SQRT_OF_NEGATIVE): Use them. - - * randclr.c, randraw.c: Use ASSERT(0) for unrecognised algorithms. - -2001-07-07 Kevin Ryde <kevin@swox.se> - - * configure.in (powerpc*-*-*): Use -no-cpp-precomp for Darwin. - - * tests/mpbsd/t-itom.c: Renamed from t-misc.c. - * tests/mpbsd/t-misc.c: Remove file. - * tests/mpbsd/Makefile.am: Update. - - * tests/mpf/t-set_si.c,t-cmp_si.c,t-gsprec.c: Split from t-misc.c. - * tests/mpf/t-misc.c: Remove file. - * tests/mpf/Makefile.am: Update. - - * tests/mpz/t-oddeven.c,t-set_si.c,t-cmp_si.c: Split from t-misc.c. - * tests/mpz/t-misc.c: Remove file. - * tests/mpz/Makefile.am: Update. - - * stack-alloc.c: Add some alignment ASSERTs. - - * gmp-impl.h (MPN_NORMALIZE): Add notes on x86 repe/scasl slow. - - * tests/devel/try.c (MPN_ZERO): Add testing. - * tune/speed.c,speed.h,common.c,many.pl (MPN_ZERO): Add measuring. - - * mpn/x86/divrem_1.asm: Update a remark about gcc and "loop". - - * tests/mpq/t-cmp_si.c: New file. - * tests/mpq/Makefile.am: Add it. - - * tests/misc.c,tests.h (mpq_set_str_or_abort): New function. - - * mpq/cmp_si.c: New file. - * Makefile.am, mpq/Makefile.am: Add it. - * gmp-h.in (mpq_cmp_si): Add prototype. - * gmp.texi (Comparing Rationals): Add doco. - - * gmp-h.in (_GMP_H_HAVE_FILE): Add _FILE_DEFINED for microsoft, add - notes on what symbols are for what systems. - -2001-07-06 Torbjorn Granlund <tege@swox.com> - - * longlong.h (ibm032 umul_ppmm): Fix typo. - * longlong.h (sparclite sdiv_qrnnd): Fix typo. - -2001-07-03 Kevin Ryde <kevin@swox.se> - - * mpz/bin_ui.c (DIVIDE): Use MPN_DIVREM_OR_DIVEXACT_1. - * mpz/bin_uiui.c (MULDIV): Ditto, and use local variables for size and - pointer. - - * acinclude.m4 (GMP_INCLUDE_GMP_H): New macro, use it everywhere gmp.h - is wanted at configure time. - * acinclude.m4, configure.in (GMP_H_EXTERN_INLINE, GMP_H_HAVE_FILE): - New macros. - - * gmp-h.in (__GMP_EXTERN_INLINE): Set to "inline" for C++. - (mpn_add, mpn_sub): Use new style __GMP_EXTERN_INLINE. - * gmp-h.in, mp-h.in, gmp-impl.h (_EXTERN_INLINE): Remove, unused. - * mpn/generic/add.c, mpn/generic/sub.c: New files. - * mpn/generic/inlines.c: Remove file. - * configure.in, mpn/Makefile.am: Update. - - * gmp.texi (GMP Basics): Note the need for stdio.h to get FILE - prototypes. - -2001-07-01 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Build Options, Reentrancy): Updates for new - --enable-alloca behaviour. - (Debugging): Describe --enable-alloca=debug. - (Miscellaneous Integer Functions): Note mpz_sizeinbase ignores signs. - (Low-level Functions): Give a formula for mpn_gcdext cofactor. - (Factorial Algorithm): New section. - (Binomial Coefficients Algorithm): New section. - Misc tweaks elsewhere. - - * mpf/set_prc.c: Merge the two truncation conditionals, misc cleanups, - no functional changes. - - * mpn/*/gmp-mparam.h (DIVEXACT_1_THRESHOLD): Add tuned values. - * gmp-impl.h (DIVEXACT_1_THRESHOLD): Make the default 0 when - 2*UMUL_TIME < UDIV_TIME. - - * mpn/x86/p6/dive_1.asm: New file. - - * mpn/x86/dive_1.asm: New file. - * mpn/x86/gmp-mparam.h (DIVEXACT_1_THRESHOLD): Use it always. - - * tests/refmpn.c, tests.h (refmpn_zero): New function. - * tests/devel/try.c: Use it. - - * tests/refmpn.c (refmpn_sb_divrem_mn): Use refmpn_cmp, not mpn_cmp. - - * tests/mpf/t-get_d.c (main): Use || not |. - - * tests/misc.c, tests/t-modlinv.c, tests/mpq/t-get_str.c, - tests/mpf/reuse.c: Add string.h. - -2001-06-29 Kevin Ryde <kevin@swox.se> - - * tune/speed.h (SPEED_ROUTINE_MPN_FIB2_UI, - SPEED_ROUTINE_COUNT_ZEROS_C): Corrections to TMP block handling. - - * gmp-impl.h (MPN_TOOM3_MUL_N_MINSIZE, MPN_TOOM3_SQR_N_MINSIZE): - Corrections to these to account for adding tD into E. - (MPN_INCR_U, MPN_DECR_U) [WANT_ASSERT]: Add size - assertions, since mpn_add_1 and mpn_sub_1 from gmp.h don't get them. - (MPN_DIVREM_OR_DIVEXACT_1): Add an assert of no remainder. - - * assert.c: Add stdlib.h for abort prototype. - * tests/spinner.c, trace.c, t-constants.c, t-count_zeros.c, - t-gmpmax.c, t-modlinv.c: Ditto. - * tests/mpz/t-bin.c, t-cmp.c, t-get_si.c, t-misc.c, t-popcount.c, - t-set_str.c, t-sizeinbase.c: Ditto. - * tests/mpq/t-equal.c, t-get_str.c, t-set_f.c, t-set_str.c: Ditto. - * tests/mpf/t-fits.c, t-get_d.c, t-get_si.c, t-int_p.c, t-misc.c, - t-trunc.c: Ditto. - * tests/mpbsd/allfuns.c, t-misc.c: Ditto. - - * mpn/generic/mul_n.c, mpz/cfdiv_r_2exp.c: Use MPN_INCR_U rather than - mpn_incr_u. - - * tests/devel/try.c (TYPE_SB_DIVREM_MN): More fixes for calling method. - - * mpn/x86/k6/cross.pl: More insn exceptions. - -2001-06-23 Kevin Ryde <kevin@swox.se> - - * gmp-h.in (__GMPN_ADD_1, __GMPN_SUB_1) [i386]: Fix some asm output - constraints. - - * gmp-impl.h (modlimb_invert): Mask after shifting, so mask constant - fits a signed byte. - - * tests/devel/try.c (TYPE_SB_DIVREM_MN): Fix initial fill of quotient - with garbage. - -2001-06-20 Kevin Ryde <kevin@swox.se> - - * config.guess (rs6000-*-aix4* | powerpc-*-aix4*): Suppress error - messages if $CC_FOR_BUILD or program don't work. - - * mpz/sqrt.c,sqrtrem.c: Special case for op==0, to avoid TMP_ALLOC(0). - * tests/refmpf.c (refmpf_add, refmpf_sub): Avoid TMP_ALLOC(0). - - * tests/mpn/t-aors_1.c: New file. - * tests/mpn/Makefile.am: Add it. - - * gmp-h.in (__GMPN_ADD_1, __GMPN_SUB_1): New macros, rewrite of - mpn_add_1 and mpn_sub_1, better code for src==dst and/or n==1, - separate versions for gcc x86, gcc generic, and non-gcc. - (mpn_add_1, mpn_sub_1): Use them. - (mpn_add, mpn_sub): Ditto, to get inlines on all compilers. - (extern "C") [__cplusplus]: Let this encompass the extern inlines too. - * mpn/generic/add_1.c,sub_1.c: New files, force code from gmp.h. - * configure.in, mpn/Makefile.am: Add them. - - * acinclude.m4 (GMP_ASM_LSYM_PREFIX): AC_SUBST __GMP_LSYM_PREFIX - rather than AC_DEFINE LSYM_PREFIX. - * gmp-h.in (__GMP_LSYM_PREFIX): New substitution. - (__GMP_ASM_L): New macro. - * gmp-impl.h (ASM_L): Use it. - - * acinclude.m4, configure.in (GMP_C_ATTRIBUTE_MALLOC): New macro. - * gmp-impl.h: Use it for all the malloc based TMP_ALLOCs. - - * stack-alloc.h: Remove file. - * tal-reent.c: New file. - * Makefile.am: Update. - - * acinclude.m4, configure.in (GMP_OPTION_ALLOCA): New macro, add - malloc-reentrant method, use stack-alloc.c as malloc-notreentrant, - make "reentrant" the default. - * gmp-impl.h (__TMP_ALIGN): Moved from stack-alloc.c, use a union to - determine the value, and demand only 4 bytes align on 32-bit systems. - * gmp-impl.h (WANT_TMP_NOTREENTRANT): Move global parts of - stack-alloc.h to here, allow non power-of-2 __TMP_ALIGN in TMP_ALLOC. - * gmp-impl.h: Extend extern "C" to TMP_ALLOC declarations. - * stack-alloc.c (tmp_stack): Move private parts of stack-alloc.h to - here, use gmp-impl.h. - - * gmp-impl.h (TMP_ALLOC_LIMBS_2): New macro. - * mpz/fib_ui.c, mpz/jacobi.c, mpq/cmp.c, mpn/generic/fib2_ui.c: Use it. - - * mpfr/exp2.c: Patch by Paul to match TMP_MARK and TMP_FREE in loop. - * mpfr/sqrt.c: Scope nested TMP_DECL into nested { } block, patch by - Paul, tweaked by me. - * mpfr/agm.c: Ditto, and add a final TMP_FREE(marker2). - - * gmp-h.in (mpn_cmp): Add __GMP_ATTRIBUTE_PURE. - - * INSTALL: Clarify "make install", tweak formatting a bit. - -2001-06-17 Kevin Ryde <kevin@swox.se> - - * configure.in, Makefile.am, gmp-impl.h: Add a debugging TMP_ALLOC, - selected with --enable-alloca=debug. - * tal-debug.c: New file. - * configure.in, Makefile.am: Compile stack-alloc.c only for - --disable-alloca. - * assert.c (__gmp_assert_header): New function, split from - __gmp_assert_fail. - - * mpz/lcm.c: Don't TMP_MARK and then just return. Remove unnecessary - _mpz_realloc prototype. - - * mpn/generic/mul.c (mpn_sqr_n): Use __gmp_allocate_func for toom3 - temporary workspace. - -2001-06-15 Kevin Ryde <kevin@swox.se> - - * tests/mpz/t-set_f.c: New file. - * tests/mpz/Makefile.am (check_PROGRAMS): Add it. - - * mpz/set_f.c: Share MPN_COPY between pad and trunc cases, do exp<=0 - test earlier, store SIZ(w) earlier. - - * tests/t-count_zeros.c: New file. - * tests/t-gmpmax.c: New file. - * tests/Makefile.am (check_PROGRAMS): Add them. - - * mp_clz_tab.c: Compile the table only if longlong.h says it's needed; - add an internal-use-only comment. - * tune/common.c: Force a __clz_tab for convenience when testing. - - * mpn/x86/pentium/gmp-mparam.h, mpn/x86/pentium/mmx/gmp-mparam.h: Add - COUNT_LEADING_ZEROS_NEED_CLZ_TAB, for mod_1.asm. - - * longlong.h (count_leading_zeros) [pentium]: Decide to go with float - method for p54. - (count_leading_zeros) [alpha]: Add COUNT_LEADING_ZEROS_NEED_CLZ_TAB. - (__clz_tab): Provide a prototype only if it's needed. - - * tests/trace.c (mpz_trace): Don't use = on structures. - (mpn_trace): Set _mp_alloc when creating mpz. - -2001-06-12 Kevin Ryde <kevin@swox.se> - - * mpn/x86/divrem_1.asm: Amend some comments about P5 speed. - - * tune/README: Clarify reconfigure on gmp-mparam.h update. - - * mpn/x86/p6/copyd.asm: New file. - * mpn/x86/p6/README: Update copyd and mod_1. - * mpn/x86/copyd.asm: Amend some comments. - - * gmp-impl.h (__builtin_constant_p): Add dummy for non-gcc. - (mpn_incr_u, mpn_decr_u): Recognise incr==1 at compile time in the - generic code on gcc. - - * gmp-impl.h (ASSERT_ZERO_P, ASSERT_MPN_NONZERO_P): New macros. - * mpn/generic/gcd_1.c, mpn/generic/mul_fft.c: Use them. - * mpz/get_d.c: Add a private mpn_zero_p. - * mpfr/trunc.c: Use own mpn_zero_p. - * tune/speed.h (SPEED_ROUTINE_MPN_GCD_1N): Use refmpn_zero_p. - * gmp-impl.h (mpn_zero_p): Remove, no longer needed. - - * gmp-h.in, gmp-impl.h: Move MPN_CMP to gmp.h as __GMPN_CMP, leave an - MPN_CMP alias in gmp-impl.h. - * gmp-h.in (mpn_cmp): Add an inline version. - * mpn/generic/cmp.c: Use __GMP_FORCE_mpn_cmp to get code from gmp.h. - - * acinclude.m4 (GMP_C_ATTRIBUTE_MODE): New macro. - * configure.in: Call it. - * gmp-impl.h (SItype etc): Use it. - - * randraw.c (lc): Change mpn_mul_basecase->mpn_mul, - mpn_incr_u->MPN_INCR_U, abort->ASSERT_ALWAYS(0). - - * longlong.h (count_leading_zeros) [pentiumpro]: Work around a partial - register stall on gcc < 3. - - * gmp.texi (Introduction to GMP): Add IA-64. - (Notes for Particular Systems): i386 means generic x86. - - * tests/t-modlinv.c: Use tests_start and tests_end. - -2001-06-10 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Number Theoretic Functions): mpz_jacobi only defined for b - odd. Separate the jacobi/legendre/kronecker descriptions. - (Low-level Functions): Document mpn_mul_1 "incr" overlaps. - (Language Bindings): New chapter. - - * mpz/jacobi.c: Don't retaining old behaviour of mpz_jacobi on even b - (it wasn't documented in 3.1.1). - * mpz/jacobi.c, gmp-h.in (mpz_kronecker, mpz_legendre): Remove - separate entrypoints, just #define to mpz_jacobi. - * compat.c (__gmpz_legendre): Add compatibility entrypoint. - - * mpn/generic/mul_1.c: Allow "incr" style overlaps. - * tests/devel/try.c (param_init): Test this. - - * mpf/mul_ui.c: Do size==0 test earlier. - -2001-06-08 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (ULONG_HIGHBIT, UINT_HIGHBIT, USHRT_HIGHBIT): Cast - ULONG_MAX etc to unsigned long etc before attempting to right shift. - - * acinclude.m4 (GMP_ASM_LSYM_PREFIX): Add an AC_DEFINE of LSYM_PREFIX. - * gmp-impl.h (ASM_L): New macro. - (mpn_incr_u, mpn_decr_u, MPN_INCR_U, MPN_DECR_U): Add i386 optimized - versions. - - * mpn/hppa/*.s,S,asm: Use .label so the code works with gas on hppa - GNU/Linux too, reported by LaMont Jones <lamont@smallone.fc.hp.com>. - * mpn/hppa/README: Add some notes on this. - * acinclude.m4 (GMP_ASM_LABEL_SUFFIX): Ditto. - - * mpn/Makefile.am (nodist_libdummy_la_SOURCES): Add dive_1.c, - fib2_ui.c. - - * tests/mpn/t-iord_u.c: New file. - * tests/mpn/Makefile.am (check_PROGRAMS): Add it. - - * configure.in (mips*-*-irix[6789]*): Make ABI=n32 the default, same - as in gmp 3.1. - * gmp.texi (ABI and ISA): Update. - - * gmp.texi (Build Options): Misc tweaks. - (Notes for Particular Systems): Describe windows DLL handling. - (Known Build Problems): DJGPP needs bash 2.04. - (Number Theoretic Functions): mpz_invert returns 0<=r<modulus; add - mpz_fib2_ui, mpz_lucnum_ui, mpz_lucnum2_ui. - (Fibonacci Numbers Algorithm): Update for new formulas used. - (Lucas Numbers Algorithm): New section. - - * tune/speed.c,speed.h,common.c,many.pl: Add mpn_fib2_ui, mpz_fib2_ui, - mpz_lucnum_ui, mpz_lucnum2_ui. - * demos/expr/exprz.c,README: Add lucnum. - * demos/perl/GMP.pm,GMP.xs,GMP/Mpz.pm,test.pl: Add fib2, lucnum, - lucnum2. - - * tests/mpz/t-lucnum_ui.c: New file. - * tests/mpz/Makefile.am (check_PROGRAMS): Add it. - * tests/mpz/t-fib_ui.c: Check mpz_fib2_ui too, updates for new style - MPN_FIB2_SIZE. - - * tune/tuneup.c, tune/Makefile.am, gmp-impl.h, mpn/*/gmp-mparam.h: - Remove FIB_THRESHOLD, no longer required. - - * mpz/fib2_ui.c, mpz/lucnum_ui.c mpz/lucnum2_ui.c: New files. - * Makefile.am, mpz/Makefile.am: Add them. - * gmp-h.in (mpz_fib2_ui, mpz_lucnum_ui, mpz_lucnum2_ui): Add - prototypes. - - * mpn/generic/fib2_ui.c: New file. - * configure.in (gmp_mpn_functions): Add it. - * gmp-impl.h (mpn_fib2_ui, FIB_TABLE, etc): Add these. - * mpz/fib_ui.c: Rewrite. - - * acinclude.m4 (GMP_C_SIZES): Fix _LONG_LONG_LIMB define for mp_limb_t - size test. - (GMP_FUNC_ALLOCA): Add dummy __GMP_BITS_PER_MP_LIMB for gmp-h.in work. - - * configure.in (CPPFLAGS): Remove -D__GMP_WITHIN_GMP, don't want it - everywhere. - * Makefile.am, mpn/Makefile.am, mpz/Makefile.am, mpq/Makefile.am, - mpf/Makefile.am, mpbsd/Makefile.am (INCLUDES): Set -D__GMP_WITHIN_GMP. - - * configure.in (*-*-msdosdjgpp*): Forcibly disable shared libraries, - to make libtests.la work. - - * acconfig.h (_LONG_LONG_LIMB, HAVE_MPFR): Remove dummy defines, no - longer needed. - - * mpz/set_ui.c: Store to _mp_d[0] unconditionally. - -2001-05-27 Kevin Ryde <kevin@swox.se> - - * configure.in, gmp-h.in, mp-h.in: Add support for windows DLLs. - -2001-05-26 Kevin Ryde <kevin@swox.se> - - * gmp.texi (ABI and ISA, Reentrancy): Minor tweaks - (Notes for Package Builds): Note gmp.h is a generated file. - (Notes for Particular Systems): -march=pentiumpro is used for gcc - 2.95.4 and up. - (Assembler Loop Unrolling): Mention non power-of-2 unrolling. - (Internals): New chapter. - * mpf/README: Remove file. - - * demos/expr/README: Miscellaneous rewordings. - - * demos/perl: New directory. - * demos/Makefile.am: Add it. - * demos/perl/INSTALL, Makefile.PL, GMP.pm, GMP.xs, typemap, - GMP/Mpz.pm, GMP/Mpq.pm, GMP/mpf.pm, GMP/Rand.pm, sample.pl, test.pl: - New files. - - * configure, aclocal.m4: Update to autoconf 2.50. - - * configure, aclocal.m4, ltmain.sh: Update to libtool 1.4. - - * configure, aclocal.m4, missing, ansi2knr.c, */Makefile.in: Update to - automake 1.4f. - * Makefile.am: Conditionalize mpfr in $(SUBDIRS) to handle mpfr.info. - * mpfr/Makefile.am (INFO_DEPS): Remove previous mpfr.info handling. - * mpn/Makefile.am (GENERIC_SOURCES): Remove this, just put mp_bases.c - in libmpn_la_SOURCES. - * tests/Makefile.am (tests.h): Move from EXTRA_HEADERS to - libtests_la_SOURCES. - * ltconfig: Remove file, no longer needed. - - * Makefile.am (gmp-impl.h, longlong.h, stack-alloc.h): Move from - EXTRA_DIST to libgmp_la_SOURCES, so they get included in TAGS. - * tests/rand/Makefile.am (gmpstat.h): Move to libstat_la_SOURCES - similarly. - - * config.guess (68k-*-*): Use $SHELL not "sh", tweak some comments. - - * mpfr/mpfr.texi (Introduction to MPFR): Tweak table formatting, note - non-free programs must be able to be re-linked. - -2001-05-20 Kevin Ryde <kevin@swox.se> - - * mpn/powerpc64/addmul_1.asm, mpn/powerpc64/mul_1.asm, - mpn/powerpc64/submul_1.asm: Add carry-in entrypoints. - -2001-05-17 Kevin Ryde <kevin@swox.se> - - * gmp.texi (ge): Fix definition for info. - (Notes for Particular Systems): Mention 68k dragonball and cpu32. - (Efficiency): Add static linking, more about in-place operations, - describe mpq+/-integer using addmul. - (Reporting Bugs): A couple of words about self-contained reports. - (Floating-point Functions): Note exponent limitations of mpf_get_str - and mpf_set_str. - (Initializing Floats): Clarify mpf_get_prec, mpf_set_prec and - mpf_set_prec_raw a bit. - (Float Comparison): Note current mpf_eq deficiencies. - - * gmp-h.in (__GMP_HAVE_CONST, __GMP_HAVE_PROTOTYPES, - __GMP_HAVE_TOKEN_PASTE): Merge GNU ansidecl.h tests for ANSI compilers. - * demos/expr/expr-impl-h.in: Ditto. - - * gmp-impl.h (BITS_PER_MP_LIMB): Define from __GMP_BITS_PER_MP_LIMB if - not already in gmp-mparam.h. - * tests/t-constants.c (BITS_PER_MP_LIMB, __GMP_BITS_PER_MP_LIMB): - Check these are the same. - - * gmp-h.in (mpf_get_default_prec, mpf_get_prec, mpf_set_default_prec, - mpf_set_prec_raw): Provide "extern inline" versions, use __GMPF on the - macros. - * mpf/get_dfl_prc.c, mpf/get_prc.c, mpf/set_dfl_prc.c, - mpf/set_prc_raw.c: Get code from gmp.h using __GMP_FORCE. - - * gmp-h.in, gmp-impl.h (__gmp_default_fp_limb_precision): Move from - gmp-impl.h to gmp-h.in. - (__GMPF_BITS_TO_PREC, __GMPF_PREC_TO_BITS): Ditto, and use __GMPF - prefix and add a couple of casts. - * gmp-h.in (__GMP_MAX): New macro. - * mpf/init2.c mpf/set_prc.c: Update for __GMPF prefix. - - * gmp-h.in (__GMP_BITS_PER_MP_LIMB): New templated define. - * acinclude.m4 (GMP_C_SIZES): Add AC_SUBST __GMP_BITS_PER_MP_LIMB, - remove AC_DEFINE BITS_PER_MP_LIMB. - -2001-05-13 Kevin Ryde <kevin@swox.se> - - * gmp-h.in, gmp.texi, Makefile.am, mpz/Makefile.am, tests/mpz/t-pow.c: - Remove mpz_si_pow_ui, pending full si support. - * mpz/si_pow_ui.c: Remove file. - -2001-05-11 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium/dive_1.asm: New file. - - * mpn/powerpc32/umul.asm: Use r on registers. - * mpn/powerpc64/umul.asm: New file. - * configure.in (powerpc*-*-*): Enable umul in extra_functions. - - * tests/refmpn.c, tests/tests.h (refmpn_umul_ppmm): Use same arguments - as normal mpn_umul_ppmm. - (refmpn_mul_1c): Update. - * tests/devel/try.c, tune/many.pl: Add some umul_ppmm testing support. - - * mpn/x86/k6/mmx/popham.asm, mpn/x86/k7/mmx/popham.asm: Don't support - size==0. - * mpn/x86/pentium/popcount.asm, mpn/x86/pentium/hamdist.asm: Ditto, - and shave a couple of cycles from the PIC entry code. - - * mpz/mul.c: Use mpn_mul_1 for size==1 and mpn_mul_2 (if available) - for size==2, to avoid copying; do vsize==0 test earlier. - - * mpf/sub.c: Test r!=u before calling mpf_set. - * mpf/add.c: Ditto, and share mpf_set between usize==0 and vsize==0. - - * mpn/generic/tdiv_qr.c, mpq/get_d.c, mpf/div.c, mpf/set_q.c, - mpf/set_str.c, mpf/ui_div.c: Test for high bit set, not for - count_leading_zeros zero. - - * acinclude.m4 (GMP_PROG_AR, GMP_PROG_NM): Print a message if extra - flags are added. - - * tests/mpz/t-mul_i.c: New file. - * tests/mpz/Makefile.am: Add it. - - * mpz/mul_siui.c (mpz_mul_si): Fix for -0x80..00 on long long limb. - - * gmp-h.in (mpf_set_si, mpf_set_ui): Revert last change, set exp to 0 - when n==0. - * mpf/ceilfloor.c, mpf/trunc.c: Fix exp to 0 when setting r to 0. - * gmp-impl.h (MPF_CHECK_FORMAT): Check exp==0 when size==0. - -2001-05-07 Kevin Ryde <kevin@swox.se> - - * gmp-h.in (mpf_set_si, mpf_set_ui): Don't bother setting _mp_exp to 0 - when n==0 (use 1 unconditionally). - * tests/mpf/t-misc.c (check_mpf_set_si): Don't demand anything of - _mp_exp when _mp_size is zero. - - * mpn/x86/README: Note gas _GLOBAL_OFFSET_TABLE_ with leal problem. - - * gmp-h.in (mpz_fits_uint_p, mpz_fits_ulong_p, mpz_fits_ushort_p): - Provide these as "extern inline"s. - (__GMP_UINT_MAX, __GMP_ULONG_MAX, __GMP_USHRT_MAX): New macros. - (mpz_popcount): Use __GMP_ULONG_MAX. - * gmp-impl.h (UINT_MAX, ULONG_MAX, USHRT_MAX): Use __GMP_U*_MAX, if - not already defined. - * mpz/fits_u.c: Use the code from gmp.h. - -2001-05-06 Kevin Ryde <kevin@swox.se> - - * mpn/x86/k7/dive_1.asm: New file. - * mpn/x86/k7/gcd_1.asm: New file. - * mpn/asm-defs.m4 (m4_count_trailing_zeros): New macro. - - * gmp-h.in (mpz_get_ui, mpz_getlimbn, mpz_set_q, mpz_perfect_square_p, - mpz_popcount, mpz_size, mpf_set_ui, mpf_set_si, mpf_size): Provide - these as "extern inlines". - Use just one big extern "C" block. - * mpz/getlimbn.c, mpz/get_ui.c, mpz/perfsqr.c, mpz/popcount.c - mpz/set_q.c, mpz/size.c, mpf/set_si.c, mpf/set_ui.c, mpf/size.c: Use - __GMP_FORCE to get code from gmp.h. - -2001-05-03 Kevin Ryde <kevin@swox.se> - - * extract-dbl.c: Add ASSERT d>=0. - - * gmp.texi (Efficiency): Add mpz_addmul etc for mpz+=integer, add - mpz_neg etc in-place. - (Integer Arithmetic): Add mpz_addmul, mpz_submul, mpz_submul_ui. - (Initializing Rationals): Add mpq_set_str. - (Low-level Functions): mpn_set_str requires strsize >= 1. - - * gmp-h.in (__GMP_EXTERN_INLINE, __GMP_ABS): New macros. - (mpz_abs, mpq_abs, mpf_abs, mpz_neg, mpq_neg, mpf_neg): Provide inline - versions. - * mpz/abs.c, mpq/abs.c, mpf/abs.c, mpz/neg.c, mpq/neg.c, mpf/neg.c: - Add suitable __GMP_FORCE to turn off inline versions. - - * tests/mpz/t-aorsmul.c,t-cmp_d.c,t-popcount,t-set_str.c: New files. - * tests/mpz/Makefile.am: Add them. - - * mpz/aorsmul_i.c: New file, rewrite of addmul_ui.c. Add - mpz_submul_ui entrypoint, share more code between some of the - conditionals, use mpn_mul_1c if available. - * mpz/addmul_ui.c: Remove file. - * mpz/aorsmul.c: New file. - * Makefile.am, mpz/Makefile.am: Update. - * gmp-h.in (mpz_addmul, mpz_submul, mpz_submul_ui): Add prototypes. - * gmp-impl.h (mpz_aorsmul_1): Add prototype. - - * tests/mpq/t-set_str.c: New file. - * tests/mpq/Makefile.am: Add it. - - * mpq/set_str.c: New file. - * Makefile.am, mpq/Makefile.am: Add it. - * gmp-h.in (mpq_set_str): Add prototype. - - * mpz/set_str.c: Fix for trailing white space on zero, eg. "0 ". - * mpn/generic/set_str.c: Add ASSERT str_len >= 1. - - * gmp-h.in, gmp-impl.h (mpn_incr_u, mpn_decr_u): Move to gmp-impl.h. - * gmp-impl.h (MPN_INCR_U, MPN_DECR_U): New macros. - -2001-04-30 Kevin Ryde <kevin@swox.se> - - * tests/mpz/t-lcm.c: New file. - * tests/mpz/Makefile.am (check_PROGRAMS): Add it. - - * mpz/lcm.c: Add one limb special case. - - * mpz/lcm_ui.c: New file. - * Makefile.am, mpz/Makefile.am: Add it. - * gmp-h.in (mpz_lcm_ui): Add prototype. - * gmp.texi (Number Theoretic Functions): Add mpz_lcm_ui, document lcm - now always positive. - - * mp-h.in (mp_size_t, mp_exp_t): Fix typedefs to match gmp-h.in. - - * gmp-h.in (mpn_add_1, mpn_add, mpn_sub_1, mpn_sub): Remove K&R - function defines (ansi2knr will handle mpn/inline.c, and just ansi is - enough for gcc extern inline). - - * gmp-h.in (__GMP_HAVE_TOKEN_PASTE): New macro. - (__MPN): Use it. - * gmp-impl.h (CNST_LIMB): Ditto. - - * gmp-h.in, mp-h.in (__gmp_const, __gmp_signed, _PROTO, __MPN): Use - ANSI forms on Microsoft C. - (__GMP_HAVE_CONST): New define. - * gmp-impl.h (const, signed): Use it. - - * demos/expr/expr-impl-h.in (<stdarg.h>): Use this with Microsoft C. - (HAVE_STDARG): New define. - * demos/expr/expr.c,exprz.c,exprq.c,exprf.c,exprfr.c: Use it. - - * acinclude.m4 (GMP_C_STDARG): New macro. - * configure.in: Call it. - * rand.c: Use it. - - * configure.in (AC_PROG_CC_STDC): New test. - -2001-04-25 Kevin Ryde <kevin@swox.se> - - * mpn/x86/k6/mmx/dive_1.asm: New file. - * mpn/x86/x86-defs.m4 (Zdisp): Two more insns. - - * mpn/x86/pentium/mul_2.asm: New file. - * mpn/asm-defs.m4: Add define_mpn(mul_2). - * acconfig.h (HAVE_NATIVE_mpn_divexact_1, mul_2): Add templates. - - * configure.in (ABI): Use AC_ARG_VAR. - - * tests/devel/try.c: Run reference function when validate fails. - - * mpq/get_str.c: Fixes for negative bases. - * tests/mpq/t-get_str.c: Check negative bases. - * tests/misc.c,tests.h (__gmp_allocate_strdup, strtoupper): New - functions. - -2001-04-24 Torbjorn Granlund <tege@swox.com> - - * mpz/lcm.c (mpz_lcm): Make result always positive. - - * gmp-h.in (mpz_inp_binary, mpz_out_binary): Remove declarations. - -2001-04-22 Kevin Ryde <kevin@swox.se> - - * mpn/powerpc64/addsub_n.asm: Use config.m4 not asm-syntax.m4. - - * mpz/cmp_d.c, mpz/cmpabs_d.c: New files. - * Makefile.am, mpz/Makefile.am: Add them. - * mpf/cmp_d.c, mpf/get_dfl_prec.c: New files. - * Makefile.am, mpf/Makefile.am: Add them. - * gmp-h.in (mpz_cmp_d, mpz_cmpabs_d, mpf_cmp_d, mpf_get_default_prec): - Add prototypes. - * gmp.texi: Add documentation. - - * mpf/set_prc.c: Avoid a realloc call if already the right precision. - - * gmp-impl.h (MPF_BITS_TO_PREC, MPF_PREC_TO_BITS): New macros. - * mpf/get_prc.c, init2.c, set_dfl_prec.c, set_prc.c, set_prc_raw.c: - Use them. - -2001-04-20 Kevin Ryde <kevin@swox.se> - - * tests/devel/try.c: Don't test size==0 on mpn_popcount and - mpn_hamdist; add testing for mpn_divexact_1; print some limb values - with mpn_trace not printf. - - * mpz/popcount.c, mpz/hamdist.c: Don't pass size==0 to mpn_popcount - and mpn_hamdist. - * mpn/generic/popham.c: Don't support size==0. - - * config.guess (m68k-*-*): Detect m68010, return m68360 for cpu32, - cleanup the nesting a bit. - - * gmp.texi (Integer Division): Fix mpz_congruent_2exp_p "c" type. - (Integer Division): Add mpz_divexact_ui. - (Number Theoretic Functions): Fix mpz_nextprime return type. - (Exact Remainder): Divisibility tests now implemented. - And more index entries in a few places. - - * tests/mpz/dive_ui.c: New file. - * tests/mpz/Makefile.am (check_PROGRAMS): Add it. - - * mpz/dive_ui.c: New file. - * Makefile.am, mpz/Makefile.am: Add it. - * gmp-h.in (mpz_divexact_ui): Add prototype. - - * tune/many.pl, tune/speed.h: Add special mpn_back_to_back for - development. - - * gmp-impl.h (MPN_DIVREM_OR_DIVEXACT_1): New macro. - * mpz/divexact.c: Use it. - - * gmp-impl.h (DIVEXACT_1_THRESHOLD): New threshold. - * tune/tuneup.c: Tune it. - - * tune/speed.c,speed.h,common.c,many.pl: Add measuring of - mpn_divexact_1, mpn_copyi, mpn_copyd. - - * mpn/generic/dive_1.c: New file. - * configure.in (gmp_mpn_functions): Add it. - * gmp-impl.h (mpn_divexact_1): Add prototype. - * mpn/asm-defs.m4: Add define_mpn(divexact_1). - - * tests/mpn: New directory. - * tests/Makefile.am: Add it. - * tests/mpn/Makefile.am: New file. - * configure.in (AC_OUTPUT): Add it. - * tests/mpn/t-asmtype.c: New file. - - * configure, config.in: Update to autoconf 2.49d. - - * configure.in, gmp-h.in, mp-h.in, demos/expr/expr-impl-h.in: Revert - to generating gmp.h, mp.h and expr-impl.h with AC_OUTPUT and AC_SUBST. - - * configure.in (m68*-*-*): Oops, m683?2 is 68000, m68360 is cpu32. - * mpn/m68k/m68k-defs.m4 (scale_available_p): Ditto. - - * configure.in (underscore, asm_align): Remove these variables, unused. - (GMP_ASM_*): Sort by AC_REQUIREs, to avoid duplication. - * acinclude.m4 (GMP_ASM_UNDERSCORE, GMP_ASM_ALIGN_LOG): Remove support - for actions, no longer needed. - -2001-04-17 Kevin Ryde <kevin@swox.se> - - * config.guess (m68k-*-*): Look for cpu in linux kernel /proc/cpuinfo. - - * acinclude.m4 (GMP_GCC_MARCH_PENTIUMPRO): The -mpentiumpro problem is - fixed in 2.95.4, so test for that. - (GMP_ASM_TYPE): Amend some comments. - - * tune/freq.c (speed_cpu_frequency_sysctl): Avoid having unused - variables on GNU/Linux. - - * mpn/asm-defs.m4 (m4_instruction_wrapper): Fix a quoting problem if - the name of the file is a macro. - -2001-04-15 Kevin Ryde <kevin@swox.se> - - * mpn/powerpc64/*.asm: Add speeds on ppc630. - - * acconfig.h: Add dummy templates for _LONG_LONG_LIMB and HAVE_MPFR. - * configure.in: Ensure config.in is the last AM_CONFIG_HEADER, - which autoheader requires. - - * mpn/x86/pentium/popcount.asm: New file. - * mpn/x86/pentium/hamdist.asm: New file. - - * mpn/asm-defs.m4: (m4_popcount): New macro. - Amend a few comments elsewhere. - - * acinclude.m4 (GMP_ASM_RODATA): If possible, grep compiler output for - the right directive. - - * tune/speed.c: Print clock speed in MHz, not cycle time. - - * configure.in (AC_CHECK_HEADERS): Check for sys/processor.h. - * tune/freq.c (speed_cpu_frequency_processor_info): Require - <sys/processor.h> to exist, to differentiate the different - processor_info on Darwin. - (speed_cpu_frequency_sysctlbyname): Remove hw.model test which is in - speed_cpu_frequency_sysctl. - (speed_cpu_frequency_sysctl): Add hw.cpufrequency for Darwin. - - * gmp-impl.h (MPN_LOGOPS_N_INLINE, mpn_and_n ... mpn_xnor_n): Use a - single expression argument for the different operations, necessary for - the Darwin "smart" preprocessor. - - * mpn/m68k/t-m68k-defs.pl: Allow white space in m4_definsn and - m4_defbranch. - - * tune/many.pl: Change RM_TMP_S to RM_TMP to match mpn/Makeasm.am, - avoid a possibly undefined array in a diagnostic, add more renaming to - hamdist. - -2001-04-13 Kevin Ryde <kevin@swox.se> - - * ltmain.sh, aclocal.m4, configure, config.in: Update to libtool 1.3d. - * configure.in: Change ac_ to lt_ in lt_cv_archive_cmds_need_lc and - lt_cv_proc_cc_pic. - - * config.guess (m68*-*-*): Detect exact cpu with BSD sysctl hw.model, - detect 68000/68010 with trapf, detect 68302 with bfffo. - -2001-04-11 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_ASM_M68K_INSTRUCTION, GMP_ASM_M68K_ADDRESSING, - GMP_ASM_M68K_BRANCHES): New macros. - * configure.in: Use them, remove old 68k configs, use mc68020 udiv and - umul. - - * mpn/m68k/m68k-defs.m4: New file. - * mpn/m68k/t-m68k-defs.pl: New file. - * mpn/m68k/*.asm: New files, converted from .S. Merge add_n and sub_n - to aors_n, ditto mc68020 addmul_1 and submul_1 to aorsmul_1. No - object code changes (except .type and .size now used on NetBSD 1.4). - * mpn/m68k/README: New file. - * mpn/m68k/*.S, */*.S, syntax.h: Remove files. - - * configure.in (m68*-*-netbsd1.4*): Pretend getrusage doesn't exist. - * tune/README: Update. - - * configure.in (powerpc*-*-*): For the benefit of Darwin 1.3, add cc - to cclist, make gcc_cflags -Wa,-mppc optional. - -2001-04-06 Kevin Ryde <kevin@swox.se> - - * mpn/lisp/gmpasm-mode.el (gmpasm-comment-start-regexp): Add | for 68k. - (gmpasm-mode-syntax-table): Add to comments. - - * tests/mpz/reuse.c (dsi_div_func_names): Add names for cdiv_[qr]_2exp. - -2001-04-04 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_M4_M4WRAP_SPURIOUS): Fix test so as to actually - detect the problem, add notes on m68k netbsd 1.4.1. - - * gmp.texi (Compatibility with older versions): Note libmp - compatibility. - -2001-04-03 Kevin Ryde <kevin@swox.se> - - * tests/mpz/reuse.c: Add mpz_cdiv_q_2exp and mpz_cdiv_r_2exp. - - * tests/mpz/t-pow.c: Drag in refmpn.o when testing mpz_pow_ui etc with - refmpn_mul_2. - - * tune/speed.c,speed.h,common.c,many.pl: Add measuring of mpn_com_n - and mpn_mul_2. - * tests/devel/try.c: Add testing of mpn_mul_2, and a - DATA_MULTIPLE_DIVISOR attribute. - - * gmp.texi (Build Options): List more m68k's. - (Build Options): Add cross reference to tex2html. - (Notes for Particular Systems): Add m68k means 68020 or up. - (Rational Conversions): New section, with mpq_get_d, mpq_set_d and - mpq_set_f from Miscellaneous, and new mpq_set_str. - (Applying Integer Functions): Move mpq_get_num, mpq_get_den, - mpq_set_num and mpq_set_den from Misc. - (Miscellaneous Rational Functions): Remove section. - (Custom Allocation): Partial rewrite for various clarifications. - (References): Improve line breaks near URLs. - - * acinclude.m4 (GMP_GCC_M68K_OPTIMIZE): New macro. - * configure.in (m68*-*-*): Use it to run gcc 2.95.x at -O not -O2. - (m680?0-*-*, m683?2-*-*, m68360-*-*): Add optional gcc -m options. - - * tests/mpz/t-cmp.c: New file. - * tests/mpz/t-sizeinbase.c: New file. - * tests/mpz/Makefile.am: Add them. - - * gmp-impl.h (MPN_CMP): New macro. - * mpz/cmp.c,cmpabs.c: Use it, and minor cleanups too. - - * tests/mpq/t-equal.c: New file. - * tests/mpq/t-get_str.c: New file. - * tests/mpq/Makefile.am: Add them. - - * mpq/get_str.c: New file. - * Makefile.am, mpq/Makefile.am: Add it. - * gmp-h.in (mpq_get_str): Add prototype. - - * mpq/equal.c: Rewrite using inline compare loops. - - * tests/refmpn.c,tests.h (refmpn_mul_2): Fix parameter order. - * mpz/n_pow_ui.c: Fix mpn_mul_2 calls parameter order. - -2001-03-29 Kevin Ryde <kevin@swox.se> - - * tests/mpf/t-trunc.c: New file. - * tests/mpf/Makefile.am (check_PROGRAMS): Add it. - * gmp-impl.h (MPF_CHECK_FORMAT): New macro. - - * mpf/trunc.c: New file, rewrite of integer.c, preserve prec+1 in - copy, don't copy if unnecessary. - * mpf/ceilfloor.c: New file likewise, and use common subroutine for - ceil and floor. - * mpf/integer.c: Remove file. - * Makefile.am, mpf/Makefile.am, macos/Makefile.in: Update. - - * acinclude.m4 (GMP_GCC_VERSION_GE): New macro. - (GMP_GCC_MARCH_PENTIUMPRO): Use it, remove CCBASE parameter (don't - bother checking it's gcc). - (GMP_GCC_ARM_UMODSI): New macro. - * configure.in (GMP_GCC_MARCH_PENTIUMPRO): Update parameters. - (arm*-*-*): Use GMP_GCC_ARM_UMODSI. - * gmp.texi (Notes for Particular Systems): Add arm gcc requirements. - -2001-03-28 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Converting Integers): Document mpz_getlimbn using absolute - value and giving zero for N out of range, move to end of section. - - * tests/refmpn.c (refmpn_tdiv_qr): Use refmpn_divmod_1 rather than - refmpn_divrem_1. - * tests/tests.h: Add some prototypes that were missing. - - * mpz/tdiv_q_ui.c: Remove a comment that belonged to mpz_tdiv_r_ui. - -2001-03-26 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/gcdext.c: Handle carry overflow after m*n multiply code - in both arms. Partially combine multiply arms. - -2001-03-24 Kevin Ryde <kevin@swox.se> - - * longlong.h: Add comments to P5 count_leading_zeros. - - * demos/expr/exprz.c,t-expr.c,README: Add congruent_p and divisible_p. - -2001-03-23 Kevin Ryde <kevin@swox.se> - - * gmp.texi (GMPceil, GMPfloor, ge, le): New macros. - (Integer Division, mpn_cmp, mpn_sqrtrem, Algorithms): Use them. - (mpn_bdivmod): Refer to mp_bits_per_limb, not BITS_PER_MP_LIMB, and - improve formatting a bit. - (mpn_lshift, mpn_rshift): Clarify the return values, and use {rp,n} - for the destination. - Miscellaneous minor rewordings in a few places. - - * mpn/arm/arm-defs.m4: New file. - * configure.in (arm*-*-*): Use it. - * mpn/arm/*.asm: Use changecom and registers from arm-defs.m4, use L() - for local labels. - - * mpn/x86/k6/mmx/com_n.asm: Relax code alignment (same speed). - - * gmp-h.in (__GMP_ATTRIBUTE_PURE): Use __pure__ to avoid application - namespace. - - * gmp-impl.h (ABS): Add parens around argument. - -2001-03-20 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_PROG_M4): Use AC_ARG_VAR on $M4. - - * acinclude.m4 (GMP_M4_M4WRAP_SPURIOUS): New macro. - * configure.in: Use it. - * mpn/asm-defs.m4: Ditto. - -2001-03-18 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium/logops_n.asm: New file. - - * mpn/x86/k6/k62mmx/copyd.asm: Rewrite, smaller and simpler, faster on - small sizes, slower on big sizes (about half the time). - * mpn/x86/k6/k62mmx/copyi.asm: Remove file, in favour of generic x86. - * mpn/x86/copyi.asm: Add some comments. - * mpn/x86/k6/README: Update. - - * mpn/x86/k6/gcd_1.asm: New file. - - * gmp-impl.h (NEG_MOD): Fix type of __dnorm. - - * acinclude.m4 (GMP_C_SIZES): Fix use of __GMP_WITHIN_CONFIGURE. - -2001-03-15 Kevin Ryde <kevin@swox.se> - - * gmp.texi (GMPabs): New macro. - (Float Comparison - mpf_reldiff): Use it. - (Integer Comparisons - mpz_cmpabs): Ditto, puts "abs" in info. - (Reentrancy): Update notes on old random functions. - (Karatsuba Multiplication): Better characterize the effect of basecase - speedups on the thresholds, pointed out by Torbjorn. - - * tune/README: Notes on the 1x1 div threshold for mpn_gcd_1. - - * tests/misc.c (mpz_pow2abs_p, mpz_flipbit, mpz_errandomb, - mpz_errandomb_nonzero, mpz_negrandom): New functions. - (mpz_erandomb, mpz_erandomb_nonzero): Use urandom(). - * tests/spinner.c (spinner_wanted, spinner_tick): Make global. - * tests/tests.h: Update prototypes. - - * tests/mpz/t-cong.c, tests/mpz/t-cong_2exp.c: New files. - * tests/mpz/Makefile.am (check_PROGRAMS): Add them. - - * mpz/cong.c, mpz/cong_2exp.c, mpz/cong_ui.c: New files. - * Makefile.am, mpz/Makefile.am: Add them. - * gmp-impl.h (NEG_MOD): New macro. - * gmp-h.in (mpz_congruent_p, mpz_congruent_2exp_p, - mpz_congruent_ui_p): Add prototypes. - * gmp.texi (Integer Division, Efficiency): Add documentation. - - * mpq/aors.c: No need for ABS on denominator sizes. - - * gmp-impl.h (mpn_divisible_p): Use __MPN. - - * gmp-impl.h (LOW_ZEROS_MASK): New macro. - * mpz/divis_ui.c, mpn/generic/divis.c: Use it. - - * mpz/setbit.c: Fix normalization for case of a negative ending up - with a zero high limb. - * tests/mpz/bit.c (check_single): New test for this problem. - - * configure.in (none-*-*): Fix cclist for default ABI=long. - -2001-03-10 Kevin Ryde <kevin@swox.se> - - * mpz/cfdiv_q_2exp.c: Don't scan for non-zero limbs if they don't - matter to the rounding. - - * mpz/get_ui.c: Fetch _mp_d[0] unconditionally, so the code can come - out branch-free. - -2001-03-08 Kevin Ryde <kevin@swox.se> - - * tests/devel/try.c (param_init): Fix reference functions for and_n - and nand_n. - - * tune/speed.c, tests/devel/try.c: Seed RANDS, not srandom etc. - * configure.in (AC_CHECK_FUNCS): Remove srand48 and srandom. - * macos/configure (coptions): Remove random/srandom, now unnecessary. - - * configure.in (gmp.h, mp.h, demos/expr/expr-impl.h): Generate using - AM_CONFIG_HEADER. - (_LONG_LONG_LIMB, HAVE_MPFR): Change to AC_DEFINEs. - * gmp-h.in, mp-h.in, demos/expr/expr-impl-h.in: Change to #undef's. - * acinclude.m4 (GMP_FUNC_ALLOCA, GMP_C_SIZES): Use gmp-h.in, not gmp.h. - * Makefile.am (EXTRA_DIST): Remove gmp-h.in and mp-h.in, now done - automatically. - * acinclude.m4 (GMP_FUNC_ALLOCA), gmp-impl.h: Set and use - __GMP_WITHIN_CONFIGURE rather than GMP_FUNC_ALLOCA_TEST. - - * mpf/random2.c: Use _gmp_rand and RANDS instead of random() for the - exponent, ensures full range of values too. - - * tests/mpz/t-div_2exp.c (check_various): Start with d based on i, but - don't let it go negative. - - * tune/tuneup.c (KARATSUBA_MUL_THRESHOLD): Limit probing to - TOOM3_MUL_THRESHOLD_LIMIT, the size of the workspace in mul_n.c. - Use a -1 with this too, so size<LIMIT not <=. - -2001-03-07 Torbjorn Granlund <tege@swox.com> - - * mpn/cray/cfp/mul_1.c: Don't call mpn_add_n with size 0. - * mpn/cray/cfp/addmul_1.c: Likewise. - * mpn/cray/cfp/submul_1.c: Don't call mpn_sub_n with size 0. - - * tests/mpz/t-div_2exp.c (check_various): Start 2nd d loop from 0 - (avoid problems with Cray compilers). - -2001-03-06 Torbjorn Granlund <tege@swox.com> - - * mpn/cray/ieee/submul_1.c: Don't call mpn_sub_n with size 0. - - * mpn/cray/ieee/mul_basecase.c: New file. - * mpn/cray/ieee/sqr_basecase.c: New file, derived from mul_basecase.c. - -2001-03-06 Kevin Ryde <kevin@swox.se> - - * tests/devel/try.c (pointer_setup): Allow dst_size == SIZE_SIZE2 for - the benefit of mpn_tdiv_qr. - - * tune/tuneup.c (all): Start karatsuba probing at size==4, for the - benefit of cray t90 ieee which has speed oddities at size==2. - - * gmp-impl.h (USE_LEADING_REGPARM): Use __GMP_GNUC_PREREQ. - Use __GMP_ATTRIBUTE_PURE and ATTRIBUTE_CONST in a few places. - - * gmp-h.in (__GMP_GNUC_PREREQ) New macro. - (__GMP_ATTRIBUTE_PURE): New macro, use it in many places. - - * gmp-impl.h, gmp-h.in (mpn_jacobi_base): Move prototype to - gmp-impl.h, use ATTRIBUTE_CONST. - - * tune/speed.h (speed_cyclecounter): Inline asm version for i386. - - * mpz/cfdiv_r_2exp.c (cfdiv_r_2exp): Only reread "up" after second - realloc, first is under w!=u. - -2001-03-05 Torbjorn Granlund <tege@swox.com> - - * mpn/cray/sub_n.c: Rewrite using `majority' logic. - - * mpz/cfdiv_r_2exp.c (cfdiv_r_2exp): Reread `up' after realloc of w. - - * mpn/cray/ieee/mul_1.c: Rewrite. Streamline multiplications; - use `majority' logic. - * mpn/cray/ieee/addmul_1.c: Likewise. - - * mpn/cray/add_n.c: Rewrite using `majority' logic. - -2001-03-04 Torbjorn Granlund <tege@swox.com> - - * longlong.h (CRAY udiv_qrnnd): No longer conditional on CRAYMPP. - (64-bit hppa add_ssaaaa): New. - (64-bit hppa sub_ddmmss): New. - - * mpn/cray/ieee/invert_limb.c: New file. - - * gmp-impl.h (RANDS): Add a `,0' to make it compile on more compilers. - -2001-03-03 Kevin Ryde <kevin@swox.se> - - * mpz/n_pow_ui.c (ULONG_PARITY): Move to gmp-impl.h. - * gmp-impl.h (ULONG_PARITY): i386 part from n_pow_ui.c, new generic - form by Torbjorn. - - * tests/mpz/t-div_2exp.c: New file, rewrite of t-2exp.c. - * tests/mpz/t-2exp.c: Remove file. - * tests/mpz/Makefile.am (check_PROGRAMS): Update. - - * gmp-h.in (mpz_cdiv_q_2exp, mpz_cdiv_q_2exp): Add prototypes. - * gmp.texi (Integer Division): Add mpz_cdiv_q_2exp and mpz_cdiv_q_2exp. - - * mpz/cfdiv_q_2exp.c: New file, partial rewrite of fdiv_q_2exp.c, add - mpz_cdiv_q_2exp entrypoint. - * mpz/cfdiv_r_2exp.c: New file, rewrite of fdiv_r_2exp.c, use all mpn, - add mpz_cdiv_r_2exp entrypoint. - * mpz/fdiv_q_2exp.c, mpz/fdiv_r_2exp.c: Remove files. - * mpz/Makefile.am (libmpz_la_SOURCES): Update. - * Makefile.am (MPZ_OBJECTS): Ditto. - - * gmp-impl.h (USE_LEADING_REGPARM): Use __i386__ same as longlong.h - (REGPARM_2_1, REGPARM_3_1, REGPARM_ATTR): New macros. - * mpz/jacobi.c (jac_or_kron): Use them. - - * configure.in (HAVE_ABI_$ABI): Re-enable this for config.m4, with - dots changed to underscores (necessary for hppa). - - * tests/mpz/t-divis.c, tests/mpz/t-divis_2exp.c: New files. - * tests/mpz/Makefile.am (check_PROGRAMS): Add them. - - * gmp-h.in (mpz_divisible_p, mpz_divisible_ui_p, - mpz_divisible_2exp_p): Add prototypes. - * gmp.texi (Integer Division): Add mpz_divisible_p. - (Efficiency): Add remarks about divisibility testing. - - * mpz/divis.c, mpz/divis_ui.c, mpz/divis_2exp.c: New files. - * mpz/Makefile.am (libmpz_la_SOURCES): Add them. - * Makefile.am (MPZ_OBJECTS): Ditto. - - * mpn/generic/divis.c: New file. - * configure.in (gmp_mpn_functions): Add it. - * mpn/Makefile.am (nodist_libdummy_la_SOURCES): Ditto. - * gmp-impl.h (mpn_divisible_p): Add prototype. - - * urandom.h: Remove file. - * Makefile.am (EXTRA_DIST): Remove it. - - * tests/mpz/convert.c, dive.c, io.c, logic.c, reuse.c, t-2exp.c, - t-fdiv.c, t-fdiv_ui.c, t-gcd.c, t-jac.c, t-mul.c, t-pow.c, - t-powm.c, t-powm_ui.c, t-root.c, t-sqrtrem.c, t-tdiv.c, - t-tdiv_ui.c: Use RANDS, initialized by tests_rand_start. - - * tests/mpz/t-pow.c: New file, being t-pow_ui renamed and with some - further tests added. - * tests/mpz/t-pow_ui.c: Remove file. - * tests/mpz/Makefile.am (check_PROGRAMS): Update. - - * tests/t-modlinv.c: Don't use urandom.h. - * tests/mpz/bit.c, tests/mpz/t-scan.c: Ditto. - * tests/mpq/t-cmp.c, tests/mpq/t-cmp_ui.c, tests/mpq/t-get_d.c: Ditto. - * tests/mpf/reuse.c, t-add.c, t-conv.c, t-dm2exp.c, t-muldiv.c, - t-sqrt.c, t-sub.c: Ditto. - - * tests/misc.c (tests_rand_start, tests_rand_end): New functions. - (tests_start, tests_end): Use them. - (urandom): New function. - * tests/tests.h: Add prototypes. - - * mpz/random.c: Rewrite using mpz_urandomb and RANDS. - * mpn/generic/random.c: Rewrite using _gmp_rand and RANDS. - * mpn/generic/random2.c: Use RANDS not random() etc. - - * gmp-impl.h (__gmp_rands, __gmp_rands_initialized): Add externs. - (gmp_randstate_ptr): New typedef. - (RANDS, RANDS_CLEAR): New macros. - - * rands.c: New file. - * Makefile.am (libgmp_la_SOURCES): Add it. - - * configure.in (mpn_objs_in_libmp): New AC_SUBST. - * Makefile.am (libmp_la_DEPENDENCIES): Use it. - -2001-03-02 Torbjorn Granlund <tege@swox.com> - - * mpn/pa64/udiv_qrnnd.asm: New file. - -2001-03-01 Kevin Ryde <kevin@swox.se> - - * mpbsd/rpow.c: New file. - * mpbsd/Makefile.am (libmpbsd_la_SOURCES): Add it - (nodist_libmpbsd_la_SOURCES): Remove pow_ui.c. - * Makefile.am (MPBSD_OBJECTS): Add rpow.lo, remove pow_ui.lo. - (libmp_la_DEPENDENCIES): Add mpz/n_pow_ui.lo. - - * mpz/ui_pow_ui.c: Rewrite using mpz_n_pow_ui. - * mpz/pow_ui.c: Ditto, and no longer provide rpow for mpbsd. - - * mpz/n_pow_ui.c: New file, rewrite of pow_ui.c and ui_pow_ui.c. Use - less temporary memory, strip factors of 2 from the base, use mpn_mul_2 - if available. - * mpz/si_pow_ui.c: New file. - * mpz/Makefile.am (libmpz_la_SOURCES): Add them. - * Makefile.am (MPZ_OBJECTS): Ditto. - * gmp-impl.h (mpz_n_pow_ui): Add prototype. - * gmp-h.in (mpz_si_pow_ui): Add prototype. - * gmp.texi (Integer Exponentiation): Add mpz_si_pow_ui. - - * acinclude.m4 (GMP_C_SIZES): Add BITS_PER_ULONG. - Correction to mp_limb_t working check. - * configure.in (limb_chosen): New variable. - * tests/t-constants.c (BITS_PER_ULONG): Check this value. - Add some reminders about tests that fail on Cray. - - * tests/refmpn.c (refmpn_mul_2): New function. - * tests/refmpz.c (refmpz_pow_ui): Copied from tests/mpz/t-pow_ui.c - * tests/tests.h: Add prototypes. - - * configure.in (none-*-*): Add ABI=longlong. - * doc/configuration (Long long limb testing): Describe it. - - * gmp.texi (Low-level Functions): Move some commented out remarks ... - * mpn/generic/mul_basecase.c: ... to here. - - * mpn/x86/README: Note "%=" as an alternative to "1:" in __asm__. - - * tests/trace.c (mp_trace_start): Print "bin" for binary. - - * mpn/generic/dump.c: Add a couple of casts to keep gcc quiet. - - * gmp-h.in (mpn_incr_u, mpn_decr_u): Add parens around arguments. - - * mpbsd/mout.c, mpbsd/mtox.c (num_to_text): Remove unused variable. - - * mpfr/set_d.c (mpfr_get_d2): Declare "q" for 64-bit limbs. - -2001-02-28 Torbjorn Granlund <tege@swox.com> - - * mpn/pa64w/udiv_qrnnd.asm: Tune. - -2001-02-27 Torbjorn Granlund <tege@swox.com> - - * mpn/pa64w/udiv_qrnnd.asm: New file. - -2001-02-26 Torbjorn Granlund <tege@swox.com> - - * longlong.h (arm): Optimize sub_ddmmss by testing for constant - operands. - * mpn/arm/invert_limb.asm: New file. - -2001-02-24 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/lshift.c: Rewrite. - * mpn/generic/rshift.c: Rewrite. - - * longlong.h: Use UWtype for external interfaces that expect mp_limb_t. - - * longlong.h (arm): #define invert_limb. - - * mpn/arm: Make labels have local scope. - - * configure.in (arm*-*-*): Set extra_functions. - * longlong.h (arm): #define udiv_qrnnd. - * mpn/arm/udiv.asm: New file. - -2001-02-24 Kevin Ryde <kevin@swox.se> - - * tune/many.pl: Add mpn_count_leading_zeros, mpn_count_trailing_zeros - and mpn_invert_limb. Add count_leading_zeros, count_trailing_zeros - from a .h file. Correction to modexact_1_odd prototype. Support - ansi2knr. - * tune/speed.h, tune/common.c: Consequent changes. - - * demos/expr/*: Make a few more functions available in expressions, - create only libexpr.a, misc minor updates. - - * mpn/Makeasm.am: Add some comments about suffix ordering. - - * tests/refmpn.c (rshift_make, lshift_make): No need to compare - unsigned to zero. - - * mpq/mul.c: Detect and optimize squaring. - -2001-02-23 Torbjorn Granlund <tege@swox.com> - - * mpn/mips3: Convert files to `.asm'. - - * mpn/arm: Convert files to `.asm'. Misc cleanups. - * mpn/arm/submul_1.asm: New file. - -2001-02-21 Kevin Ryde <kevin@swox.se> - - * tune/tuneup.c (all): Only one compiler print should match, no need - for #undef PRINTED_COMPILER. - - * mpfr/mpfr.h (mpfr_sgn): Use mpfr_cmp_ui (patch from Paul). - - * mpz/fib_ui.c: Update some remarks about alternative algorithms. - * gmp.texi (Fibonacci Numbers Algorithm): Ditto. - (Assigning Floats): Clarify mpf_swap swaps the precisions too. - (Low-level Functions): Try to be clearer about negative cofactors. - -2001-02-21 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/copyi.asm: Streamline for small operands. - * mpn/sparc64/add_n.asm: Likewise. - * mpn/sparc64/sub_n.asm: Likewise. - - * mpn/sparc64/copyd.asm: New file. - -2001-02-20 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/lshift.asm: Rewrite. - * mpn/sparc64/rshift.asm: Rewrite. - -2001-02-19 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/add_n.asm: Rewrite using `majority' logic. - * mpn/sparc64/sub_n.asm: Likewise. - - * tune/tuneup.c (all): Recognise DECC and MIPSpro compilers. - - * mpn/pa64/sqr_diagonal.asm: Use PROLOGUE/EPILOGUE. - * mpn/pa642/sqr_diagonal.asm: Likewise. - - * configure.in (HAVE_ABI_$abi): Disable for now. - - * mpn/asm-defs.m4 (PROLOGUE): Use LABEL_SUFFIX. - - * acinclude.m4 (GMP_ASM_ATTR): New check, for hppa oddities. - -2001-02-18 Torbjorn Granlund <tege@swox.com> - - * mpn/hppa/hppa1_1/gmp-mparam.h: New file. - * mpn/hppa/hppa2_0/gmp-mparam.h: New file. - - * mpn/pa64/sqr_diagonal.asm: New file. - * mpn/pa64w/sqr_diagonal.asm: New file. - * mpn/hppa/hppa1_1/sqr_diagonal.asm: New file. - * mpn/hppa/hppa2_0/sqr_diagonal.asm: New file. - - * mpn/sparc32/v9/add_n.asm: Use `fitod' instead of `fxtod' for dummy - FA-pipeline insns. - * mpn/sparc32/v9/sub_n.asm: Likewise. - -2001-02-18 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Known Build Problems): Notes on make, $* and K&R, misc - tweaks elsewhere. - (Low-level Functions): Use {} notation in mpn_sqrtrem. - (Basecase Multiplication): Mention BASECASE_SQR_THRESHOLD. - - * mpfr/isnan.c (mpfr_number_p): Infinity is not a number. - * mpfr/out_str.c: Pass strlen+1 for the block size to free. - * mpfr/get_str.c: Correction for realloc to strlen+1. - - * acinclude.m4 (GMP_C_SIZES): Generate an error if mp_limb_t doesn't - seem to work for some reason. - -2001-02-16 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc32/v9/gmp-mparam.h: Retune. - - * mpn/sparc32/v9/add_n.asm: New file. - * mpn/sparc32/v9/sub_n.asm: New file. - - * mpn/sparc32/v9/mul_1.asm: Tune function entry. - * mpn/sparc32/v9/addmul_1.asm: Likewise. - * mpn/sparc32/v9/submul_1.asm: Likewise. - - * mpn/sparc32/v9/sqr_diagonal.asm: New file. - -2001-02-16 Kevin Ryde <kevin@swox.se> - - * configure.in: Fix flags selection when $CC is a compiler known to us. - - * demos/expr/exprfr.c (e_mpfr_cos, e_mpfr_sin): mpfr_sin_cos now - allows NULL for one parameter. - - * mpfr/*: Update to 20010215. - * mpfr/trunc.c: Use -DOPERATION scheme, and gmp mpn_zero_p. - * mpfr/sqrt.c: Use plain mpn_sqrtrem, not mpn_sqrtrem_new. - * mpfr/sqrtrem.c: Remove file. - * mpfr/Makefile.am (libmpfr_a_SOURCES): Add isnan.c and set_ui.c, - remove sqrtrem.c and srandom.h. - - * configfsf.guess: Update to 2001-02-13. - * configfsf.sub: Update to 2001-02-16. - * config.sub (j90, t90): Remove special handing, configfsf.sub now ok. - - * Makefile.am (MPF_OBJECTS): Add a couple of missing $U's. - - * tune/tuneup.c: Identify compiler used (GCC and Sun C so far). - -2001-02-15 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc32/v9/mul_1.asm: Change `ld' to `lduw' and `st' to `stw'. - * mpn/sparc32/v9/addmul_1.asm: Likewise. - * mpn/sparc32/v9/submul_1.asm: Likewise. - -2001-02-14 Torbjorn Granlund <tege@swox.com> - - * mpn/mips3/mips.m4: New file. - * configure.in (mips*-*-irix[6789]*): Use mips3/mips.m4. - - * mpn/powerpc64/sqr_diagonal.asm: New file. - - * mpn/mips3/sqr_diagonal.asm: New file. - -2001-02-12 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/sqr_diagonal.asm: New file. - - * mpn/generic/sqr_basecase.c: Remove declaration of mpn_sqr_diagonal. - Fix typo in header comment. - -2001-02-12 Kevin Ryde <kevin@swox.se> - - * mpn/generic/mul.c, mpn/generic/mul_n.c, gmp-impl.h: Use - mpn_mul_basecase for squaring below new BASECASE_SQR_THRESHOLD. - * tune/tuneup.c gmp-impl.h: Tune BASECASE_SQR_THRESHOLD. - - * Makefile.am (libgmp.la, libmp.la): Revert change to build from - mpn/libmpn.la etc, go back to explicitly listed objects. - - * configure.in: Recognise sparc64-*-*, not just sparc64-*-linux*. - -2001-02-11 Torbjorn Granlund <tege@swox.com> - - * mpn/asm-defs.m4 (sqr_diagonal): New define_mpn. - - * mpn/alpha/sqr_diagonal.asm: New file. - -2001-02-11 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Low-level Functions): Note mpn_get_str clobbers its input - plus 1 extra limb. - - * mpfr/add.c,agm.c,exp2.c,exp3.c,generic.c,log2.c,pi.c,print_raw.c, - set_d.c,sin_cos.c,sqrtrem.c,sub.c: Apply some tweaks for K&R. - * tests/mpz/reuse.c, tests/mpq/t-md_2exp.c, demos/pexpr.c, - demos/expr/t-expr.c: Ditto. - - * configure.in (HAVE_ABI_$abi): New define in config.m4. - - * gmp-impl.h (mpn_sqr_diagonal): Add prototype and define. - * tune/speed.c,speed.h,common.c,many.pl: Add measuring of - mpn_sqr_diagonal. - - * gmp.texi, acinclude.m4: Mention x86 solaris 2.7 has the reg->reg - movq bug the same as 2.6. - - * mpfr/Makefile.am (EXTRA_DIST): Add mpfr-test.h and mpf2mpfr.h. - - * mpn/x86/README: Merge contents of README.family. - * mpn/x86/README.family: Remove file. - - * mpn/Makefile.am (nodist_libdummy_la_SOURCES): Add mode1o, gcd_finda, - invert_limb, sqr_diagonal; remove mod_1_rs; sort alphabetically. - -2001-02-10 Torbjorn Granlund <tege@swox.com> - - * configure.in (gmp_mpn_functions_optional): List sqr_diagonal. - - * mpn/powerpc32/aix.m4: Use unnamed csects. - * mpn/powerpc64/aix.m4: Likewise. - - * acconfig.h: Add #undef of mpn_sqr_diagonal. - Remove lots of spacing. - - * configure.in (syntax testing section): Match power* instead of - powerpc*. - * mpn/power: Convert files to `.asm'. - Prefix umul_ppmm and sdiv_qrnnd. - Update some comments. - -2001-02-09 Kevin Ryde <kevin@swox.se> - - * acconfig.h: Add HAVE_NATIVE_mpn_modexact_1_odd and - HAVE_NATIVE_mpn_modexact_1c_odd. - - * configure.in (CCAS): Don't override a user selection. - - * mpq/cmp_ui.c: DIVIDE_BY_ZERO if den2==0. - -2001-02-08 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/sqr_basecase.c: Use mpn_sqr_diagonal when appropriate. - -2001-02-07 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Low-level Functions): mpn_preinv_mod_1 now undocumented. - - * mpn/generic/random2.c (myrandom): Use rand() on mingw. - - * mpn/alpha/gmp-mparam.h: Update tuned parameters. - -2001-02-05 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev6/gmp-mparam.h: Retune. - -2001-02-05 Kevin Ryde <kevin@swox.se> - - * Makefile.am (libgmp, libmp): Construct from mpn/libmpn.la etc rather - than explicitly listed objects. - - * urandom.h: Use rand() on mingw. - - * mpn/powerpc64/lshift.asm,addsub_n.asm: Use r1 not 1. - -2001-02-04 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/copyi.asm: New file. - * mpn/ia64/copyd.asm: New file. - -2001-02-04 Kevin Ryde <kevin@swox.se> - - * mpn/alpha/ev5/gmp-mparam.h, mpn/mips3/gmp-mparam.h, - mpn/powerpc32/gmp-mparam.h, mpn/powerpc64/gmp-mparam.h, - mpn/sparc64/gmp-mparam.h, mpn/x86/*/gmp-mparam.h: - Update tuned parameters. - - * mpn/x86/i486: New directory. - * configure.in (i486-*-*): Use it. - * mpn/x86/i486/gmp-mparam.h: New file. - - * mpn/x86/pentium/mode1o.asm: New file. - * mpn/x86/p6/mode1o.asm: New file. - - * tune/many.pl: Use $(ASMFLAGS_PIC) and $(CFLAGS_PIC). - - * gmp.texi (Integer Division): Another rewording of 2exp divisions. - -2001-02-03 Torbjorn Granlund <tege@swox.com> - - * mpn/arm/gmp-mparam.h: Tune. - - * mpn/ia64/popcount.asm: Put a `;;' break at end of main loop. - - * configure.in (arm*-*-*): Set gcc_cflags in order to pass - $fomit_frame_pointer. - - * tests/mpz/t-mul.c (base_mul): Remove an unused variable. - -2001-02-02 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (TIME): New macro. - (main): Use TIME--print timing more accurately. - (setup_error_handler): Increase RLIMIT_DATA to 16 Mibyte. - - * longlong.h (arm): Add __CLOBBER_CC to add_ssaaaa and sub_ddmmss. - -2001-02-02 Kevin Ryde <kevin@swox.se> - - * configure.in: Don't remove gmp-mparam.h and mpn source links under - --no-create since in that case they're not re-created. - - * demos/expr: New directory. - * Makefile.am (SUBDIRS, allprogs): Add it. - * demos/expr/README, Makefile.am, expr.c, exprv.c, exprz.c, exprza.c, - exprq.c, exprqa.c, exprfa.c, exprf.c, exprfr.c, exprfra.c, expr.h, - expr-impl-h.in, run-expr.c, t-expr.c: New files. - * configure.in: Generate demos/expr/Makefile & demos/expr/expr-impl.h. - - * Makefile.am: Remove mpfr from main libgmp. - * mpfr/Makefile.am: Build and install separate libmpfr.a. - * mpfr/*: Update to mpfr 2001. - - * gmp-h.in (__GNU_MP_VERSION_MINOR): Bump to 2. - * Makefile.am (libtool -version-info): Bump appropriately. - * NEWS: Updates. - - * tune/divrem1div.c, tune/divrem1inv.c, tune/divrem2div.c, - tune/divrem2inv.c: Renamed from divrem_1_div.c, divrem_1_inv.c, - divrem_2_div.c, divrem_2_inv.c, to be unique in DOS 8.3 filenames. - * tune/Makefile.am (libspeed_la_SOURCES): Update. - - * mpn/x86/*/README, mpn/x86/README.family: Misc updates. - * tune/README: Misc updates. - * doc/configuration: Misc updates. - - * mpn/x86/pentium/mmx/gmp-mparam.h: Change UDIV_PREINV_TIME to - UDIV_NORM_PREINV_TIME. - - * mpz/pprime_p.c: Use ASSERT_ALWAYS instead of abort. - - * rand.c (__gmp_rand_lc_scheme): Add "const". - (struct __gmp_rand_lc_scheme_struct): Make astr "const char *". - - * demos/calc/calc.y, demos/calc/calclex.l: Add kron function. - - * tests/devel/try.c: Partial rewrite, new scheme of function types, - allow result validation functions, add sqrtrem and jacobi testing. - * tune/many.pl: Corresponding updates. - * tests/devel/Makefile.am: Add a convenience rule for libtests.la. - - * tests/refmpz.c: New file. - * tests/Makefile.am: Add it. - * tests/misc.c (mpz_erandomb, mpz_erandomb_nonzero): New functions. - * tests/tests.h: Add prototypes. - - * mpn/x86/k6/cross.pl: Add a couple more exceptions. - - * gmp.texi: Don't use @nicode{'\0'}, it doesn't come out right in tex. - (Introduction to GMP): Mention Cray vector systems. - (Build Options): Describe --enable-mpfr, refer to its manual. Add - Crays under supported CPUs. - (Debugging): Add notes on source file paths. - (Autoconf): New section. - (Assigning Integers): Note truncation by mpz_set_d, mpz_set_q and - mpz_set_f. - (Converting Integers): Note the size mpz_get_str allocates. - (Floating-point Functions): Rewrite introduction, clarifying some - points about precision handling. - (Converting Floats): Note the size mpf_get_str allocates, and that it - gives an empty string for zero. Add mpf_get_si and mpf_get_ui. - (Float Comparison): Give the formula mpf_reldiff calculates. - (Miscellaneous Float Functions): Add mpf_integer_p and mpf_fits_*_p. - (Random Number Functions): Misc rewordings for clarity. - (Random State Initialization): Ditto. - (Custom Allocation): Remove note on deallocate_function called with 0, - misc rewording and clarifications. - (Exact Remainder): New section. - (Binary GCD): A few words on initial reduction using division. - (Accelerated GCD): Refer to exact remainder section. - (Extended GCD): Extra remarks on single versus double selection. - (Jacobi Symbol): Update for mpz/jacobi.c rewrite and modexact_1_odd. - (Modular Powering Algorithm): Refer to exact remainder section. - (Assembler SIMD Instructions): Update remarks on MMX. - (Contributors): Amend to "Divide and Conquer" division. - (References): Tweak some formatting. Add "Proof of GMP Fast Division - and Square Root Implementations" by Paul Zimmermann. - -2001-01-31 Torbjorn Granlund <tege@swox.com> - - * configure.in: Don't ever pass -mips3; let ABI flags imply ISA. - -2001-01-31 Kevin Ryde <kevin@swox.se> - - * tune/time.c: Remove unnecessary longlong.h. - (speed_endtime): Add some extra diagnostics. - - * tests/mpz/t-fdiv_ui.c, tests/mpz/t-tdiv_ui.c: Use unsigned long for - the divisor, not mp_limb_t. - * tests/mpz/t-jac.c (try_base): Use %llu for long long limb. - * tests/trace.c: Add <string.h> for strlen. - - * tune/freq.c (speed_cpu_frequency_proc_cpuinfo): Ignore "cycle - frequency" of 0, allow "BogoMIPS" as well as "bogomips". - - * macos/Makefile.in: Add mpf/fits_s.c and mpf/fits_u.c objects. - -2001-01-30 Torbjorn Granlund <tege@swox.com> - - * longlong.h: Add add_ssaaaa and sub_ddmmss for 64-bit sparc. - -2001-01-29 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/addmul_1.asm: Prefix registers with an `r'. - * mpn/powerpc64/submul_1.asm: Likewise. - * mpn/powerpc64/mul_1.asm: Likewise. - - * configure.in (alpha*-*-*): Amend last change to handle pca*. - -2001-01-29 Kevin Ryde <kevin@swox.se> - - * tune/speed.h (SPEED_ROUTINE_INVERT_LIMB_CALL): Don't let the - compiler optimize everything away. - - * tune/speed.c, tune/speed.h, tune/common.c, tune/Makefile.am: Measure - operator_div, operator_mod, mpn_divrem_2_div, mpn_divrem_2_inv, - mpn_sb_divrem_m3, mpn_sb_divrem_m3_div, mpn_sb_divrem_m3_inv, - mpn_dc_divrem_sb_div, mpn_dc_divrem_sb_inv. - * tune/divrem_2_div.c, tune/divrem_2_inv.c, tune/sb_div.c, - tune/sb_inv.c: New files. - - * tune/tuneup.c, gmp-impl.h, tune/speed.h, tune/common.c, - tune/Makefile.am: Tune SB_PREINV_THRESHOLD and DIVREM_2_THRESHOLD. - - * mpn/generic/divrem_2.c: Use new DIVREM_2_THRESHOLD. - * mpn/generic/sb_divrem_mn.c: Use new SB_PREINV_THRESHOLD. - - * mpn/x86/p6/mmx/lshift.asm, mpn/x86/p6/mmx/rshift.asm: New files, - just m4 include()ing the P55 code. - * configure.in (pentium[23]-*-*): Remove x86/pentium/mmx from path. - -2001-01-27 Kevin Ryde <kevin@swox.se> - - * configure.in (AC_CHECK_FUNCS): Add srand48. - * tune/speed.c: Use this test. - - * acinclude.m4 (GMP_GCC_MARCH_PENTIUMPRO): Allow "egcs-" prefix on gcc - --version, warn if the format is unrecognised. - (GMP_COMPARE_GE): Guard against empty $1 not only on last arg. - (GMP_INIT, GMP_FINISH, GMP_PROG_M4): Obscure or eliminate literal - "dnl"s since autoconf thinks they indicate faulty macros. - - * mpz/get_str.c, mpf/get_str.c: Make allocated string block exactly - strlen(str)+1 bytes. - * mpz/dump.c, mpf/dump.c, tests/mpz/convert.c: Use this size when - freeing. - * tests/mpf/t-conv.c: Ditto, and ensure x==0 is exercised. - - * tests/mpz/t-fits.c: New file. - * tests/mpz/Makefile.am: Add it. - - * tests/mpf/t-fits.c: New file. - * tests/mpf/t-get_si.c: New file. - * tests/mpf/t-int.c: New file. - * tests/mpf/Makefile.am: Add them. - - * mpf/fits_s.c: New file. - * mpf/fits_u.c: New file. - * mpf/get_si.c: New file. - * mpf/get_ui.c: New file. - * mpf/int_p.c: New file. - * Makefile.am, mpf/Makefile.am: Add them. - * gmp-h.in (mpf_fits_*_p, mpf_get_si, mpf_get_ui, mpf_integer_p): Add - prototypes. - - * tests/memory.c (tests_allocate, tests_reallocate): Guard against - size==0. - - * tests/mpz/*.c, tests/mpq/*.c, tests/mpf/*.c: Uses tests_start and - tests_end. - - * gmp-impl.h (USE_LEADING_REGPARM): Fix conditionals. - -2001-01-23 Kevin Ryde <kevin@swox.se> - - * configure.in, mpn/Makeasm.am (ASMFLAGS_PIC): New substitution, - allowing -DPIC to be suppressed on cygwin. - (CFLAGS_PIC): New substitution, use it and $(CCAS) directly, rather - than $(LIBTOOL), avoiding a problem with FreeBSD 2.2.8. - - * mpn/x86/k6/mode1o.asm, mpn/x86/k7/mode1o.asm: Remove an unnecessary - +[.-L(here)] from _GLOBAL_OFFSET_TABLE_, avoids a segv from gas 1.92.3. - * mpn/x86/README.family: Add notes on the problem. - -2001-01-20 Torbjorn Granlund <tege@swox.com> - - * configure.in (alpha*-*-*): Default `flavour' to ev4. - -2001-01-19 Kevin Ryde <kevin@swox.se> - - * assert.c, gmp-impl.h (__gmp_assert_fail): Change return type to - void, since it's no longer used in expressions. - - * mpn/x86/addsub_n.S: Remove file, since it doesn't work and it upsets - tune/many.pl. - - * mpz/jacobi.c: Rewrite, but still binary algorithm; accept zero and - negative denominators; merge mpz_jacobi and mpz_legendre, add - mpz_kronecker; use mpn directly, add special cases for size==1. - * gmp.texi (Number Theoretic Functions): Update. - * gmp-h.in (mpz_kronecker): Add prototype. - * gmp-impl.h (USE_LEADING_REGPARM): New macro. - * tests/mpz/t-jac.c: Test mpz_kronecker. - * mpz/legendre.c: Remove file. - * Makefile.am, mpz/Makefile.am: Update. - - * longlong.h (alpha count_leading_zeros): Use __attribute__ ((const)) - when possible, add parameter to prototype. - (ia64 udiv_qrnnd): Use for all compilers, not just gcc. - (pentium count_trailing_zeros): Use count_leading_zeros. - - * acinclude.m4 (GMP_C_ATTRIBUTE_CONST, GMP_C_ATTRIBUTE_NORETURN): New - macros. - * configure.in: Use them. - * gmp-impl.h (ATTRIBUTE_CONST, ATTRIBUTE_NORETURN): New macros. - (mpn_invert_limb): Add ATTRIBUTE_CONST. - (__gmp_assert_fail): Add ATTRIBUTE_NORETURN. - -2001-01-18 Kevin Ryde <kevin@swox.se> - - * gmp-h.in, gmp-impl.h (__gmp_allocate_func, __gmp_reallocate_func, - __gmp_free_func): Move prototypes from gmp-impl.h to gmp-h.in, for the - benefit of gmp++.h. - - * gmp-impl.h, tests/misc.c, tests/tests.h: Move MPZ_SET_STR_OR_ABORT - and MPF_SET_STR_OR_ABORT to mpz_set_str_or_abort and - mpf_set_str_or_abort in libtests. - * tests/mpz/convert.c, tests/mpz/t-bin.c, tests/mpz/t-get_si.c, - tests/mpz/t-jac.c, tests/mpz/t-misc.c, tests/mpq/t-md_2exp.c, - tests/mpq/t-set_f.c, tests/mpf/t-conv.c, tests/mpf/t-misc.c: Update. - - * mpn/generic/sqrtrem.c: Use MPN_COPY_INCR (for when rp==NULL). - - * tests/mpz/reuse.c: Only run mpz_divexact_gcd on positive divisors. - -2001-01-18 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (main): Accept -vml option. - (fns): List `hamdist', `pow', `nextprime'. - (mpz_eval_expr): Return -1 for `popc' of negative. - (mpz_eval_expr): Handle `hamdist', `pow', `nextprime'. - -2001-01-15 Kevin Ryde <kevin@swox.se> - - * mpn/alpha/ev5/mode1o.c: New file. - - * tune/freq.c (speed_cpu_frequency_measure): Check cycles_works_p - before running speed_cyclecounter. - * tune/speed.h (cycles_works_p): Add prototype. - -2001-01-13 Torbjorn Granlund <tege@swox.com> - - * tests/rand/t-rand.c (farr): Fix typo. - (zarr): Fix typo. - -2001-01-12 Kevin Ryde <kevin@swox.se> - - * mpz/kronsz.c: Don't depend on right shifting a negative. - - * mpn/x86/gmp-mparam.h: New file. - - * mpn/x86/pentium/mmx/mul_1.asm: New file. - -2001-01-11 Torbjorn Granlund <tege@swox.com> - - * mpz/kronsz.c: Temporary workaround for Cray right shift oddities. - Explicitly compare against zero in tests. - -2001-01-10 Kevin Ryde <kevin@swox.se> - - * mpz/kronzs.c: Don't depend on right shifting a negative. - -2001-01-09 Torbjorn Granlund <tege@swox.com> - - * tests/t-constants.c: Disable some undefined tests. - (CHECK_MAX_S): Remove workaround for gcc 2.95.2 bug recently added. - -2001-01-09 Kevin Ryde <kevin@swox.se> - - * tests/t-constants.c: Add more diagnostics. - (CHECK_MAX_S): Fix for gcc 2.95.2 -mpowerpc64 -maix64. - - * mpn/x86/k6/mode1o.asm: New file. - * mpn/x86/k7/mode1o.asm: New file. - - * mpn/asm-defs.m4 (modexact_1_odd, modexact_1c_odd): New define_mpn's. - (__clz_tab, modlimb_invert_table, PROLOGUE, EPILOGUE): Add asserts for - GSYM_PREFIX. - * mpn/x86/x86-defs.m4 (Zdisp): Add a movzbl. - - * tests/mpz/t-jac.c (check_a_zero): New test. - (check_squares_zi): Fix to use (a^2/b), not (a*b/b); revert last - change avoiding a,b=0, both are fine. - (try_2den): Don't use mpz_kronecker_ui for the expected answer. - (try_*): Call abort rather than exit. - - * mpz/kronzu.c, mpz/kronzs.c: Fix for a=0. - - * tune/tuneup.c (USE_PREINV_MOD_1): Fix to use new DATA_HIGH_LT_R. - -2001-01-08 Torbjorn Granlund <tege@swox.com> - - * urandom.h: Amend 2000-11-21 change to also handle cygwin. - -2001-01-08 Kevin Ryde <kevin@swox.se> - - * tune/many.pl: Updates for move to tests/devel, add modexact_1_odd, - don't assume C files can't have carry-in entrypoints, remove - $(TRY_TESTS_OBJS) now in libtests. - - * tests/devel/try.c, tests/refmpn.c, tests/tests.h: Remove - mpn_mod_1_rshift testing. - - * tune/tuneup.c (fft_step_size): Test for overflow using the actual - mp_size_t, don't use BITS_PER_INT. - - * tune/speed.c (r_string): "r" is a limb, use BITS_PER_MP_LIMB and - change LONG_ONES to LIMB_ONES. - * tune/time.c (M_2POWU): Use INT_MAX rather than BITS_PER_INT. - - * extract-dbl.c (BITS_PER_PART): Use BITS_PER_MP_LIMB not - BITS_PER_LONGINT. - - * mpz/inp_raw.c, mpz/out_raw.c: Add private defines of BITS_PER_CHAR. - * mpz/fac_ui.c, tests/mpz/t-fac_ui.c: Don't use BITS_PER_LONGINT. - * tests/mpz/t-get_si.c: Don't use BITS_PER_LONGINT, do the LONG_MAX - tests with some explicit code. - - * mpn/*/gmp-mparam.h, acinclude.m4, tests/t-constants.c - (BITS_PER_LONGINT, BITS_PER_INT, BITS_PER_SHORTINT, BITS_PER_CHAR): - Remove defines, remove probings, remove tests. - - * tune/tuneup.c (MODEXACT_1_ODD_THRESHOLD): Add tuning. - - * tune/speed.c,speed.h,common.c: Add measuring of mpn_modexact_1_odd, - mpn_gcd_finda, and an "N" form for mpn_gcd_1. - - * tests/mpz/t-jac.c (check_squares_zi): Ensure random a,b != 0. - -2001-01-07 Kevin Ryde <kevin@swox.se> - - * configure.in (gmp_mpn_functions): Add mode1o, remove mod_1_rs. - - * mpn/generic/mod_1_rs.c: Remove file, no longer needed. - * gmp-h.in (mpn_mod_1_rshift): Remove prototype and define. - - * mpq/set_f.c: Use MPN_STRIP_LOW_ZEROS_NOT_ZERO. - - * mpz/kronzu.c, mpz/kronzs.c, mpz/kronuz.c, mpz/kronsz.c: Use - mpn_modexact_1_odd, new style MPN_STRIP_LOW_ZEROS_NOT_ZERO, and new - JACOBI macros. Various rearrangements supporting all this. - - * mpn/generic/gcd_1.c: Use mpn_modexact_1_odd, reduce u%v if u much - bigger than v when size==1, some rearrangements supporting this. - - * gmp-impl.h (JACOBI_*): More macros, add some casts to "int". - (MPN_STRIP_LOW_ZEROS_NOT_ZERO): Add a "low" parameter. - (mpn_modexact_1_odd, mpn_modexact_1c_odd): Add prototype and defines. - (MODEXACT_1_ODD_THRESHOLD): New threshold. - (MPN_MOD_OR_MODEXACT_1_ODD, JACOBI_MOD_OR_MODEXACT_1_ODD): New macros. - - * mpn/generic/mode1o.c: New file. - - * tests/mpz/reuse.c: Add testing of mpz_divexact_gcd. - * tests/mpz/t-fac_ui.c: Use libtests for memory leak checking. - * tests/mpz/t-fib_ui.c: Add a usage comment. - - * tests/mpz/bit.c: Use libtests. - * tests/mpz/t-scan.c: Remove unused subroutines. - * tests/devel/try.c: Use libtests, define PROT_NONE if the system - doesn't. - - * tests/spinner.c, tests/x86check.c: Use tests.h. - * tests/trace.c: Use tests.h, add mpf_trace. - * tests/refmpn.c: Use tests.h, add refmpn_malloc_limbs_aligned, - refmpn_tstbit, refmpn_neg. - - * tune/common.c, tune/speed.h: Update for functions moved to - tests/misc.c. - - * tune/Makefile.am, tests/mpz/Makefile.am, tests/mpq/Makefile.am, - tests/mpf/Makefile.am: Use tests/libtests.la. - - * configure.in (AC_OUTPUT): Update for new directories. - (x86 CALLING_CONVENTIONS_OBJS): Use .lo for libtests.la, allow - ansi2knr on x86check.c. - - * tests/Makefile.am: Establish new libtests.la convenience library, - add mpz, mpq, mpf, mpbsd subdirectories. - * tests/tests.h: New file. - * mpn/tests/ref.h,try.h: Remove files, now in tests.h. - - * tests/mpf/ref.c: Move to tests/refmpf.c, rename functions to refmpf. - * tests/mpf/t-add.c, tests/mpf/t-sub.c: Use libtests. - * tests/mpf/Makefile.am: Update. - - * tests/memory.c: New file. - * tests/misc.c: New file, a few subroutines from the test programs. - - * mpz/tests, mpq/tests, mpf/tests, mpbsd/tests: Move directories to - tests/mpz etc. - * mpz/Makefile.am, mpq/Makefile.am, mpf/Makefile.am, mpbsd/Makefile.am - (SUBDIRS): Remove. - - * tests/devel: New directory. - * mpn/tests/*.c: Move programs to tests/devel. - * mpn/tests/Makefile.am, mpn/tests/README: Move to tests/devel, update. - - * mpn/tests/ref.c: Move to tests/refmpn.c. - * mpn/tests/spinner.c,trace.c,x86call.asm,x86check.c: Move to tests - directory. - - * tests/t-constants.c: Add checks of HIGHBIT, MAX and MIN constants, - simplify ANSI vs K&R stringizing, use correct printf format types, do - all tests before aborting. - -2001-01-05 Torbjorn Granlund <tege@swox.com> - - * mpn/cray/ieee/gmp-mparam.h: Retune. - -2001-01-05 Kevin Ryde <kevin@swox.se> - - * configure.in (mp.h): Only create this under --enable-mpbsd. - - * demos/calc: New subdirectory, move demos/calc* to it. - * demos/calc/Makefile.am: New file, split from demos/Makefile.am. - * demos/Makefile.am: Update. - * configure.in (AC_OUTPUT): Add demos/calc/Makefile. - - * tests/t-constants.c (CALC_BITS_PER_TYPE etc): Use a run-time test - for how many bits work in a give type, don't assume bits==8*sizeof. - -2001-01-04 Kevin Ryde <kevin@swox.se> - - * mpz/fits_s.c, mpz/fits_u.c: New files, split from fits.c, use plain - UINT_MAX etc, not MPZ_FITS_UTYPE_SDT etc. - * mpz/fits.c: Remove file. - * mpz/Makefile.am, macos/Makefile.in: Update. - - * gmp-impl.h (UNSIGNED_TYPE_MAX etc): Remove these generic forms. - (MPZ_FITS_[SU]TYPE_SDT): Remove these. - (UINT_MAX etc): Provide a full set of defaults. - * gmp-h.in (__GMP_MP_SIZE_T_INT): New define. - - * mpz/tests/t-scan.c: New file. - * mpz/tests/Makefile.am (check_PROGRAMS): Add it. - - * mpz/scan0.c, mpz/scan1.c: Rewrite, don't read beyond allocated - memory, support negatives, return ULONG_MAX for no bit found. - * gmp.texi (Integer Logic and Bit Fiddling): Update. - -2001-01-03 Torbjorn Granlund <tege@swox.com> - - * mpz/tests/dive.c: Generate test operands using new random functions. - * mpz/tests/io.c: Likewise. - * mpz/tests/logic.c: Likewise. - * mpz/tests/t-2exp.c: Likewise. - - * stack-alloc.c (__gmp_tmp_alloc): Round `now' to required alignment. - - * stack-alloc.h (__TMP_ALIGN): Append `L'. - - * gmp-impl.h: For Cray, #include limits.h. - (LONG_MIN): New #define. - (ULONG_HIGHBIT): #define in terms of ULONG_MAX. - (LONG_HIGHBIT): #define as LONG_MIN. - (USHRT_MAX): New name for USHORT_MAX. - (SHRT_MAX): New name for SHORT_MAX. - (SHRT_MIN): New #define. - (USHORT_HIGHBIT,SHORT_HIGHBIT): Removed. - - * mpbsd/tests/t-misc.c (check_itom [data]): *SHORT* => *SHRT*; - remove code disabling a test for Cray. - - * tests/t-constants.c (CHECK_CONSTANT): Cast parameters to long. - - * mpn/generic/mul_n.c (mpn_kara_sqr_n): Remove unused variable `t'. - (mpn_kara_mul_n): Likewise. - - * mpz/fac_ui.c (MPZ_SET_1_NZ): Actually use `__z'. - - * mpz/tests/t-jac.c - (main, check_squares_zi): Generate test operands using new random - functions. - - All changes below on this date for enabling `make; make check' - with C++ compilers: - - * mpz/tests/t-pow_ui.c (debug_mp, ref_mpz_pow_ui): Provide prototypes. - - * mpz/tests/t-mul.c (debug_mp, base_mul, ref_mpz_mul): - Provide prototypes. - (dump_abort): Provide prototype and declare properly for C++. - - * mpz/tests/t-jac.c: #include stdlib.h and sys/time.h. - - * mpz/tests/t-fdiv.c - (dump_abort): Provide prototype and declare properly for C++. - (debug_mp): Provide prototype. - * mpz/tests/t-fdiv_ui.c: Likewise. - * mpz/tests/t-gcd.c: Likewise. - * mpz/tests/t-powm.c: Likewise. - * mpz/tests/t-powm_ui.c: Likewise. - * mpz/tests/t-sqrtrem.c: Likewise. - * mpz/tests/t-tdiv_ui.c: Likewise. - * mpz/tests/t-tdiv.c: Likewise. - - * mpz/tests/t-2exp.c: #include stdlib.h and sys/time.h. - Remove #include of longlong.h. - - * mpz/tests/io.c: #include config.h, stdlib.h, sys/time.h, and - conditionally unistd.h. - - * mpz/tests/dive.c: #include stdlib.h and sys/time.h. - (dump_abort): Provide prototype and declare properly for C++. - (debug_mp): Provide prototype. - * mpz/tests/logic.c: Likewise. - - * mpz/tests/convert.c (debug_mp): Provide prototype. - * mpz/tests/t-root.c (debug_mp): Likewise. - - * mpz/tests/bit.c: #include stdlib.h and sys/time.h. - - * mpq/tests/t-get_d.c: #include stdlib.h and sys/time.h. - (dump): Provide prototype and declare properly for C++. - - * mpq/tests/t-cmp_ui.c: #include stdio.h, stdlib.h and sys/time.h. - (ref_mpq_cmp_ui): Declare properly for C++. - - * mpq/tests/t-cmp.c: #include stdlib.h and sys/time.h. - (ref_mpq_cmp): Declare properly for C++. - (dump): Delete unused function. - - * mpf/random2.c (myrandom): New function. - (mpf_random2): Use it. - - * mpn/generic/random2.c: #include stdlib.h (for random/mrand48). - (myrandom): New function. - (mpn_random2): Use it. - - * mpf/tests/t-add.c: #include stdlib.h and sys/time.h. - (oo): Remove unused function. - * mpf/tests/t-conv.c: Likewise. - * mpf/tests/t-sub.c: Likewise. - * mpf/tests/t-dm2exp.c: Likewise. - * mpf/tests/t-muldiv.c: Likewise. - * mpf/tests/t-sqrt.c: Likewise. - - * mpf/tests/reuse.c: #include stdlib.h and sys/time.h. - Use PROTO on some typedefs. - (oo): Remove function. - (dump_abort): Call mpf_dump instead of oo. - - * mpf/set_str.c: #include stdlib.h (for strtol). - - * mpf/random2.c: #include stdlib.h (for random/mrand48). - * mpn/alpha/udiv_arnnd: File deleted. - - * Remove K&R function headers. - -2001-01-02 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul.c: Clean up spacing and indentation. - - * mpn/generic/mul_fft.c (mpn_fft_add_modF): Use mpn_decr_u. - Clean up spacing and indentation. - - * extract-dbl.c: Generalize to handle smaller limb sizes. - -2001-01-01 Torbjorn Granlund <tege@swox.com> - - * mpbsd/mout.c: Output newline after "0". - -2000-12-31 Torbjorn Granlund <tege@swox.com> - - * ltmain.sh: Remove space between `#!' and `$SHELL' when generating - `libtool'. - - * mpbsd/tests/t-misc.c (check_itom): Exclude test for all Cray - vector systems. Correct comment. - -2000-12-31 Kevin Ryde <kevin@swox.se> - - * gmp.texi (ABI and ISA): New enough gcc needed for mips n32 etc, gcc - 2.95 needed for sparc 64-bit ABI, gcc 2.8 needed for -mv8plus. - - * configure.in ([cjt]90,sv1-cray-unicos*): Preserve user specified - MPN_PATH, amend test program indenting. - (none-*-*): Add -DNO_ASM to gcc to disable longlong.h asm macros in - generic C. - - * config.sub (j90, t90): Preserve these, don't let configfsf.sub turn - them into c90. - - * config.guess (m68k-*-nextstep*,m68k-*-openstep*): Don't transform - m68k to m68020, since m68k is already interpreted as 68020. - -2000-12-30 Kevin Ryde <kevin@swox.se> - - * mpq/neg.c: Rewrite, use mpn, avoid denominator copy if unnecessary. - - * mpz/tstbit.c: Rewrite, slightly simplified. - * mpz/tests/bit.c (check_tstbit): New test, and add a couple more - diagnostics elsewhere. - - * configure.in (x86 gcc_cflags_cpu): Add -m486 for gcc 2.7.2. - (ccbase): Only use a known compiler in eval statements (avoids - problems with non-symbol characters). - (ccbase): Use GMP_PROG_CC_IS_GNU to identify gcc installed under a - different name. - (cclist): Use same style $abi as other variables. - - * acinclude.m4 (GMP_PROG_CC_IS_GNU): New macro. - (GMP_GCC_MARCH_PENTIUMPRO): Use $ccbase to identify gcc. - (GMP_ASM_TYPE): Define TYPE to empty, not "dnl", when no .type needed. - (GMP_ASM_SIZE): Ditto for SIZE, which ensures EPILOGUE on the last - line of a file doesn't leave a tab and no newline. - (GMP_ASM_UNDERSCORE): Add a prototype for C++. - - * configure.in (sys/mman.h, mprotect): New tests. - * mpn/tests/try.c: Use them, and HAVE_UNISTD_H too. - - * configure.in (getopt.h): Remove test. - * tune/speed.c, mpn/tests/try.c (getopt.h): Remove include, since - plain getopt() is in <unistd.h>. - - * configure.in, gmp-h.in (mips*-*-irix6*): Set limb_n32=longlong - rather than using _ABIN32. - -2000-12-29 Torbjorn Granlund <tege@swox.com> - - * mpz/tests/reuse.c: Rename dump_abort => dump. - * mpz/tests/reuse.c: Generate operands using gmp_rand*. - * mpz/tests/convert.c: Likewise. - - * configure.in: Detect T90-ieee systems; move Cray path - selection to after AC_PROG_CC. Invoke AC_PROG_CPP. - * mpn/cray/cfp: New directory. Move cfp specific files here. - * mpn/cray/cfp/mulwwc90.s: New file. - * mpn/cray/cfp/mulwwj90.s: New file. - * mpn/cray/mulww.s: Delete. - -2000-12-27 Torbjorn Granlund <tege@swox.com> - - * mpn/cray/ieee/mul_1.c: New file. - * mpn/cray/ieee/addmul_1.c: New file. - * mpn/cray/ieee/submul_1.c: New file. - * mpn/cray/ieee/gmp-mparam.h: New file. - - * mpn/cray/gmp-mparam.h: Disable UMUL_TIME and UDIV_TIME. - - * mpn/cray/hamdist.c: New file. - * mpn/cray/popcount.c: New file. - * mpn/cray/rshift.c: New file. - * mpn/cray/lshift.c: New file. - - * longlong.h: Add count_leading_zeros for _CRAY. - Reorganize _CRAY stuff. - -2000-12-24 Kevin Ryde <kevin@swox.se> - - * configure.in (alpha*-cray-unicos*): Disable SPEED_CYCLECOUNTER_OBJ, - as tune/alpha.asm doesn't suit. - - * mpn/generic/sqrtrem.c, mpz/pow_ui.c, mpz/powm_ui.c, mpf/get_str.c, - mpf/set_str.c: Use mpn_sqr_n when applicable, not mpn_mul_n. - -2000-12-23 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_fft.c: Reformat. - (mpn_fft_neg_modF): Remove. - (mpn_fft_mul_2exp_modF): Inline mpn_fft_neg_modF. - - * mpn/cray/gmp-mparam.h: Retune. - - * configure.in (*-cray-unicos*): Pass `-O3 -htask0'. - (vax*-*-*): Fix typo. - - * mpn/cray/mul_1.c: Use dynamic arrays, get rid of TMP_*. - * mpn/cray/addmul_1.c: Likewise. - * mpn/cray/submul_1.c: Likewise. - * mpn/cray/add_n.c: Likewise. - * mpn/cray/sub_n.c: Likewise. - - * configure.in (default cc_cflags,cc_64_cflags): Remove -g/add -O. - (mips*-*-irix[6789]*]): Remove -g from cc_*_cflags. - -2000-12-22 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_n.c: Delete K&R function headers. - - * mpn/generic/mul_n.c (mpn_kara_mul_n): Clean up type confusion - between mp_limb_t and mp_size_t. - (mpn_kara_sqr_n): Likewise. - - * mpn/generic/mul_n.c (mpn_kara_mul_n): Use mpn_incr_u. - (mpn_kara_sqr_n): Likewise. - - * mpn/generic/mul_n.c (mpn_kara_mul_n): Change handling of `sign' - to work around GCC 2.8.1 MIPS bug. - - * configure.in (implied alpha*-cray-unicos*): Remove -g from cc_cflags. - -2000-12-21 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/invert_limb.asm: Simplify a bit. - Add handling of bigend systems. - * mpn/alpha/unicos.m4: Define `bigend'. - * mpn/alpha/default.m4: Define `bigend' (to expand to nothing). - - * tests/t-constants.c (CHECK_CONSTANT): Print using %lx. - - * mpn/alpha/gmp-mparam.h: Remove sizes for plain C types. - * mpn/alpha/ev5/gmp-mparam.h: Likewise. - * mpn/alpha/ev6/gmp-mparam.h: Likewise. - - * mpn/alpha/unicos.m4: Define LEA. - * mpn/alpha/default.m4: Likewise. - * mpn/alpha/invert_limb.asm: Use LEA for loading symbolic addresses. - * mpn/alpha/cntlz.asm: Likewise. - - * mpn/alpha/cntlz.asm: Don't use `ldbu', use slightly slower - `ldq_u' + `extbl' instead. - - * mpn/alpha/unicos.m4: Define EXTERN. - * mpn/alpha/default.m4: Define EXTERN (to expand to nothing). - * mpn/alpha/cntlz.asm: Declare __clz_tab usign `EXTERN' (for the - benefit of Unicos). - -2000-12-21 Kevin Ryde <kevin@swox.se> - - * mpn/alpha/unicos.m4 (GSYM_PREFIX): Define for the benefit of - __clz_tab. - -2000-12-20 Torbjorn Granlund <tege@swox.com> - - * longlong.h: Add udiv_qrnnd and count_leading_zeros for _CRAYMPP - systems. - -2000-12-19 Torbjorn Granlund <tege@swox.com> - - * configure.in (*sparc*-*-*): Remove -g from cc_cflags and acc_cflags. - - * mpn/generic/sqrtrem.c (mpn_sqrtrem): Separate `limb' values from - `size' values. - - * configure.in (*-cray-unicos*): Add `-Wa,-B' to cc_cflags. - - * demos/pexpr.c (rstate): New variable. - (main): Initialize rstate. - (enum op_t): Add RANDOM. - (fns): Add field for RANDOM. - (mpz_eval_expr): Handle RANDOM. - -2000-12-19 Kevin Ryde <kevin@swox.se> - - * mpn/generic/sqrtrem.c: Rewrite by Paul Zimmermann, based on his - Karatsuba Square Root algorithm. - * gmp.texi (Square Root Algorithm): Update. - - * tune/many.pl: New file. - - * mpn/tests/try.c,ref.[ch] (mpn_preinv_mod_1, mpn_sb_divrem_mn, - mpn_tdiv_qr, mpn_gcd_finda, mpn_kara_mul_n, mpn_kara_sqr_n, - mpn_toom3_mul_n, mpn_toom3_sqr_n): Add testing. - * mpn/tests/ref.c: Cast some "0"s in function calls. - - * mpn/x86/k7/mmx/mod_1.asm: Add preinv_mod_1 entrypoint, remove extra - variable for loop termination. - - * mpn/x86/p6/mmx/mod_1.asm: Remove file, in favour of the following. - * mpn/x86/p6/mod_1.asm: New file. - - * mpn/x86/pentium/mod_1.asm: New file. - -2000-12-18 Torbjorn Granlund <tege@swox.com> - - * configure.in (mips*-*-irix[6789]*): Pass options to compiler using - `-Wc'. - -2000-12-18 Kevin Ryde <kevin@swox.se> - - * mpn/x86/k6/pre_mod_1.asm: New file. - - * tune/tuneup.c (USE_PREINV_MOD_1): Tune this, rearrange mpn_divrem_1 - and mpn_mod_1 handling in support of it. - * tune/Makefile.am: Consequent changes to divrem_1.c and mod_1.c. - - * gmp-impl.h (USE_PREINV_MOD_1, MPN_MOD_OR_PREINV_MOD_1): New macros. - * mpn/generic/perfsqr.c, mpz/pprime_p.c: Use MPN_MOD_OR_PREINV_MOD_1. - - * configure.in: Let an asm mod_1 provide a preinv_mod_1 entrypoint. - - * mpn/alpha/default.m4: Remove some newlines, add some asserts. - (r0 etc, f0 etc): Use defreg and deflit. - (PROLOGUE, PROLOGUE_GP, EPILOGUE): Use GSYM_PREFIX. - * mpn/alpha/unicos.m4: Remove some newlines, add some asserts. - * mpn/alpha/invert_limb.asm: Remove unused second DATASTART parameter. - * mpn/alpha/cntlz.asm: Use mpn_count_leading_zeros and __clz_tab. - - * mpn/asm-defs.m4 (changecom): Comments on portability. - (__clz_tab, modlimb_invert_table): New macros, matching gmp-impl.h. - (count_leading_zeros, count_trailing_zeros): New define_mpn's. - (PROLOGUE etc): Comments on usage, add some asserts. - (OPERATION_[lr]shift): Use m4_not_for_expansion, for the benefit of - lorrshift multifunc. - - * mpn/Makeasm.am (RM_TMP): New variable controlling tmp-*.s - removal, for development purposes. - - * mpz/fac_ui.c: Fix for long long limb by using mpn_mul_1 not - mpz_mul_ui, and note some possible enhancements. - - * mpz/tests/t-fac_ui.c: New test. - * mpz/tests/Makefile.am (check_PROGRAMS): Add it. - * macos/Makefile.in: Ditto, and add t-fib_ui too. - - * mpn/generic/[lr]shift.c: Remove some DEBUG code adequately covered - by new parameter ASSERTs. - - * longlong.h (count_trailing_zeros): Assert x!=0. - - * doc/configuration: Updates for new configure things, add some notes - on test setups. - -2000-12-16 Torbjorn Granlund <tege@swox.com> - - * configure.in (*-*-aix): Pass -qmaxmem=20000 to xlc also for 64-bit - compiles. - * configure.in: Disable shared libs for *-*-ultrix*. - -2000-12-15 Torbjorn Granlund <tege@swox.com> - - * configure.in (powerpc*-*-*): Pass -Wa,-mppc when using gcc. - - * gmp-impl.h (_EXTERN_INLINE): #define different for GCC and other - compilers. - - * gmp-h.in (__gmp_inline): Remove. - * mp-h.in: Likewise. - * mpn/generic/gcd.c: Use `inline' instead of `__gmp_inline'. - - * configure.in (mips*-*-irix[6789]*): Define *_ldflags. - -2000-12-14 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/pre_mod_1.c: Use proper type for udiv_qrnnd - parameter `dummy'. - - * mpn/generic/divrem_1.c: Use explicit `!= 0' in if statement. - * mpn/generic/mod_1.c: Likewise. - -2000-12-14 Kevin Ryde <kevin@swox.se> - - * config.guess (mips-*-irix[6789]*): Transform to mips64. - (m68k-*-nextstep* | m68k-*-openstep*): Transform to m68020. - -2000-12-13 Torbjorn Granlund <tege@swox.com> - - * tests/t-constants.c (main): Conditionalize use of PP_INVERTED. - - * mpn/mp_bases.c: Handle 4-bit limbs. - (main): Add code for generating tables. - - * mpn/generic/popham.c: Handle limb bitsizes of 4, 8, 16. - Suffix all 32-bit constant with `L'. - Use CNST_LIMB for 64-bit constants. - -2000-12-13 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (FIB_THRESHOLD): Defaults for 4,8,16 bits per limb, and - an arbitrary fallback default. - (modlimb_invert): Add efficient code for 8,16 (or 4) bits per limb. - - * configure.in (mips3, mips64): Don't bother with o32 (mips2 32-bit - limb) on IRIX 6. - - * Makefile.am (SUBDIRS): Put "tests" first so tests/t-constants.c is - run first, to pick up any limb size mismatch. - - * tune/tuneup.c (DIVREM_1, MOD_1): Fix result values, were off by 1. - - * mpz/fib_ui.c (table1, table2): Add data for 4,8,16 bits per limb. - -2000-12-12 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (LIMBS_PER_DOUBLE): Define for any limb bitsize. - -2000-12-11 Torbjorn Granlund <tege@swox.com> - - * mpn/mp_bases.c: Add tables for 8-bit and 16-bit limbs. - Round existing `double' values properly. - - * gmp-h.in (__gmp_randstate_struct): Prefix field names with _mp_ - to keep out of user name space. - (__gmp_randata_lc): Likewise. - * randclr.c, randlc.c, randlc2x.c, randraw.c, randsd.c, randsdui.c: - Corresponding changes. - - * gmp-impl.h (PP): #define for machines with BITS_PER_MP_LIMB - of 2, 4, 8, and 16. - (PP_FIRST_OMITTED): New, define for various BITS_PER_MP_LIMB. - (PP_MASK): Remove. - (PP_MAXPRIME): Remove. - - * mpn/generic/perfsqr.c: Generalize PP handling for machines with - limbs of < 32 bits. Allow PP_INVERTED to be undefined. - * mpz/pprime_p.c: Likewise. - -2000-12-10 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_1.c: Declare parameters in C89 style. - -2000-12-10 Kevin Ryde <kevin@swox.se> - - * tune/Makefile.am (speed_LDFLAGS, speed_ext_LDFLAGS, tune_LDFLAGS): - Don't use -all-static, as gcc 2.95.2 on i386 solaris 8 doesn't like - it. - - * configure.in (mips3,mips64): Add ABI=64, name the others ABI=n32 and - ABI=o32. - * mpn/mips3/gmp-mparam.h (BITS_PER_LONGINT): Remove #define and let - configure determine it, since it varies with ABI=64 or ABI=n32. - * gmp.texi (ABI and ISA): Update. - (mpz_mod_ui): Remark that it's identical to mpz_fdiv_r_ui. - (mpn_divexact_by3): Qualify a statement needing mp_bits_per_limb even. - - * mul_fft.c (mpn_fft_mul_modF_K etc): Patch by Paul Zimmermann to fix - results in certain cases of recursing into a further FFT. - -2000-12-09 Torbjorn Granlund <tege@swox.com> - - * mpz/cmpabs.c: Remove unused variable. - * mpz/rrandomb.c: Likewise. - * mpz/xor.c: Likewise. - -2000-12-07 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/gcdext.c: Handle double carry when computing s1. - Merge two code blocks for computing s0 and s1. - -2000-12-07 Kevin Ryde <kevin@swox.se> - - * configure.in (hppa*-*-*): Remove -Aa -D_HPUX_SOURCE from - cc_cflags/cppflags, and instead let AM_C_PROTOTYPES add it, or -Ae, - whichever works. - - * configure.in (*-*-aix[34]*): Disable shared by default, but let - the user override that, if desired. - * gmp.texi (Notes for Particular Systems): Update. - -2000-12-06 Torbjorn Granlund <tege@swox.com> - - * mpq/cmp_ui.c: Streamline. - -2000-12-06 Kevin Ryde <kevin@swox.se> - - * tune/divrem_1_div.c,divrem_1_inv.c,mod_1_div.c,mod_1_inv.c, - gcdext_double.c: New files for measuring. - * tune/Makefile.am (libspeed_la_SOURCES): Add them. - * tune/speed.c,speed.h,common.c: Add measuring of them. - (mpn_preinv_mod_1, mpz_jacobi, mpz_powm_ui): Add measuring. - - * speed.c (getopt_long): Don't use this, just plain getopt. - * configure.in (getopt_long): Remove test. - - * gmp-impl.h (MPN_KARA_MUL_N_TSIZE, MPN_KARA_MUL_N_MINSIZE, - MPN_TOOM3_MUL_N_TSIZE, MPN_TOOM3_MUL_N_MINSIZE): New macros, and - assume toom3 square tsize was meant to be the same as the mul (both - are overestimates). - * tune/tuneup.c, mpn/generic/mul.c, mpn/generic/mul_n.c: Use them. - * mpn/generic/mul_n.c (mpn_toom3_sqr_n): Fix an ASSERT to use - TOOM3_SQR_THRESHOLD not TOOM3_MUL_THRESHOLD, add a few that might - be more realistic size checks. - * tune/speed.h (SPEED_ROUTINE_MPN_MUL_N_TSPACE etc): Use minsize. - - * mpn/generic/divrem_1.c: Partial rewrite, merge fractional part - calculation, skip a divide step in more cases, introduce - DIVREM_1_NORM_THRESHOLD and DIVREM_1_UNNORM_THRESHOLD. - * mpn/generic/mod_1.c: Partial rewrite, skip a divide step in more - cases, introduce MOD_1_NORM_THRESHOLD, MOD_1_UNNORM_THRESHOLD. - * longlong.h (UDIV_PREINV_ALWAYS): New define, set for alpha and ia64. - * tune/tuneup.c (DIVREM_1_NORM_THRESHOLD, DIVREM_1_UNNORM_THRESHOLD, - MOD_1_NORM_THRESHOLD, MOD_1_UNNORM_THRESHOLD): Tune these. - * gmp-impl.h [TUNE_PROGRAM_BUILD]: Support for this. - * tune/Makefile.am (TUNE_MPN_SRCS): Add divrem_1.c and mod_1.c. - - * gmp-impl.h (UDIV_NORM_PREINV_TIME): Renamed from UDIV_PREINV_TIME. - * mpn/generic/perfsqr.c, mpn/generic/sb_divrem_mn.c, - mpn/x86/*/gmp-mparam.h: Ditto. - * gmp-impl.h (UDIV_UNNORM_PREINV_TIME): New define. - - * configure.in (AC_C_INLINE, HAVE_INLINE): New test and define. - * gmp-impl.h (inline): Remove, use config.h. - (_EXTERN_INLINE): Redefine based on HAVE_INLINE. - (mpn_zero_p): Use HAVE_INLINE. - - * acinclude.m4 (GMP_PROG_AR, GMP_PROG_NM): Don't add flags to a user - selected $AR or $NM. - - * tune/tuneup.c (all): Print how long the tuning took. - - * configure.in (AM_C_PROTOTYPES): Use this, not GMP_ANSI2KNR. - * acinclude.m4 (GMP_ANSI2KNR): Remove. - - * Makefile.am (gmp.h, mp.h): In DISTCLEANFILES not CLEANFILES. - - * gmp-h.in (mpn_divmod, mpn_divmod_1, mpn_divexact_by3): Cast some - zeros, for the benefit of K&R if long!=int. - - * mpn/lisp/gmpasm-mode.el (gmpasm-comment-start-regexp): Add "*" for - the benefit of cray. - - * compat.c (mpn_divexact_by3, mpn_divmod_1): Return types should be - mp_limb_t, not int, and need an actual "return". - -2000-12-05 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc32/v8/supersparc/gmp-mparam.h: Retune. - * mpn/alpha/gmp-mparam.h: Tune for 21064. - - * longlong.h: Reformat to avoid newlines within strings. - - * gmp-impl.h (inline): Disable if GCC has defined __STRICT_ANSI__. - - * configure.in: Do a `mkdir tune' before creating tune/sqr_basecase.c. - - * Makefile.am: Treat mp.h analogously to gmp.h. - - configure.in (*-*-aix): Pass -qmaxmem=20000 to xlc. - - * mp-h.in: Renamed from mp.h. - Add #define for _LONG_LONG_LIMB. - Move some other fixes from gmp-h.in. - * mp.h: Removed. - * configure.in: Generate mp.h from mp-h.in like we handle - gmp-h.in/gmp.h. - -2000-12-04 Torbjorn Granlund <tege@swox.com> - - * acinclude.m4: Fix typo testing for bad HP compiler. - -2000-12-03 Torbjorn Granlund <tege@swox.com> - - * mpbsd/tests/t-misc.c (check_itom): Exclude some tests for Cray - CFP systems. - - * longlong.h (CRAYIEEE umul_ppmm): New. - - * mpn/cray/gmp-mparam.h (BITS_PER_SHORTINT): 32 => 64. - (*_THRESHOLD): Tune. - - * configure.in: Disable shared libs for *-*-unicos*. - -2000-12-03 Kevin Ryde <kevin@swox.se> - - * configure.in, tune/Makefile.am: Create tune/sqr_basecase.c during - configure, and use it unconditionally in $(nodist_tuneup_SOURCES). - Fixes a problem with sqr_basecase.lo under --disable-static. - -2000-12-01 Torbjorn Granlund <tege@swox.com> - - * mpf/tests/t-get_d.c (LOW_BOUND,HIGH_BOUND): #define for non-IEEE - Cray systems. - - * gmp-impl.h (union ieee_double_extract): Test for _CRAYIEEE. - -2000-11-30 Torbjorn Granlund <tege@swox.com> - - * mpz/tests/t-mul.c (base_mul): Fix re-evaluation problems in macro - invocations. - (ref_mpz_mul): New name from mpz_refmul. Make static. - (base_mul): New name for _mpn_mul_classic. - -2000-11-30 Kevin Ryde <kevin@swox.se> - - * configure.in: Rewrite of CC/CFLAGS selection scheme, introduce a - notion of ABI, merge compiler and mpn path selection, add flags - selection for AR and NM, let CC without CFLAGS work. - (AC_PROG_CC): Use this, not GMP_SELECT_CC. - * acinclude.m4 (GMP_PROG_CC_WORKS): Don't use AC_TRY_COMPILE, combine - cc/cflags parameter. - (GMP_PROG_CC_FIND, GMP_CHECK_CC_64BIT, GMP_PROG_CC_SELECT): Remove. - * gmp.texi (Installing GMP): Updates for new scheme. - - * configure.in (AC_CANONICAL_HOST): Use this and $host, not $target. - * acinclude.m4, acconfig.h, longlong.h, mpn/x86/x86-defs.m4, - mpn/x86/k7/mmx/popham.asm: Ditto, renaming HAVE_TARGET_CPU to - HAVE_HOST_CPU. - * gmp.texi (Build Options, and elsewhere): Update. - - * acinclude.m4 (GMP_COMPARE_GE): New macro. - (GMP_GCC_MARCH_PENTIUMPRO): Use it, add CC parameter, check for GCC. - (GMP_HPC_HPPA_2_0): New macro, adapted from GMP_CHECK_CC_64BIT. - - * acinclude.m4 (GMP_PROG_AR): New macro, using AC_CHECK_TOOL, adding - GMP flags. - * configure.in: Use it - - * gmp-h.in: Renamed from gmp.h. - (@define_LONG_LONG_LIMB@): Placeholder for instantiation. - (__GNU_MP__): Bump to 3. - * acinclude.m4 (GMP_VERSION): Get version from gmp-h.in. - * configure.in: Create gmp.h from gmp-h.in to set _LONG_LONG_LIMB. - * gmp.texi.h (ABI and ISA): Mention this. - * acconfig.h (_LONG_LONG_LIMB): Remove undef. - * Makefile.am: Distribute gmp-h.in, not gmp.h. - - * configure.in (AC_PROG_CPP, AC_PROG_INSTALL, AC_PROG_LN_S): Remove, - dragged in by other macros. - (gmp_asm_syntax_testing): Renamed from gmp_no_asm_syntax_testing. - (AC_EXEEXT, AC_OBJEXT): Remove, done automatically by libtool. - * configure.in, acinclude.m4: Remove "" from "`foo`", being - unnecessary and not portable. - - * configure.in (GMP_LDFLAGS): New AC_SUBST flags for libtool link. - (powerpc64*-*-aix*): Use for -Wc,-maix to fix shared library creation, - but can't build shared and static at the same time. - * Makefile.am (libgmp_la_LDFLAGS, libmp_la_LDFLAGS): Use - $(GMP_LDFLAGS). - * gmp.texi (Notes for Particular Systems): Update AIX problem - - * configure.in (AC_CONFIG_LINKS): Use where needed, not via gmp_links. - (gmp_srclinks): Build up as needed, not via gmp_links. - - * acinclude.m4 (GMP_INIT): Do CONFIG_TOP_SRCDIR and asm-defs.m4 here. - * configure.in (asm-defs.m4): Consequent changes. - - * acinclude.m4 (GMP_INCLUDE_MPN): Using include_mpn(), replacing - GMP_INCLUDE and GMP_SINCLUDE. - * configure.in (gmp_m4postinc): Remove this scheme, use - GMP_INCLUDE_MPN instead. - - * configure.in (*-*-sco3.2v5*): Force ac_cv_archive_cmds_need_lc=no, - until libtool does this itself. - * gmp.texi (Known Build Problems): Remove SCO -lc problem. - - * configure, INSTALL.autoconf, etc: Update to autoconf 2000-11-29. - * acinclude.m4 (GMP_C_SIZES): Use AC_CHECK_SIZEOF. - * gmp.texi (Known Build Problems): Remove version.c sed/config.h - problem, fixed. - - * ltmain.sh, aclocal.m4: Update to libtool 2000-11-25. - * ltconfig: No longer required, but leave an empty dummy for automake. - * gmp.texi (Known Build Problems): Remove SunOS native ar ranlib - problem, fixed. - - * */Makefile.in, aclocal.m4: Update to automake 2000-11-25. - * mpbsd/tests/Makefile.am, mpfr/tests/Makefile.am (check_PROGRAMS): - Remove dummy, no longer required. - * mpbsd/tests/dummy.c, mpfr/tests/dummy.c: Remove files. - * depcomp: Remove file, no longer required (with no-dependencies). - - * texinfo.tex: Update to 2000-11-09. - * gmp.texi (Build Options): Mention PDF from gmp.texi. - * Makefile.am (MOSTLYCLEANFILES): Add gmp.tmp, from new texinfo.tex. - - * gmp.texi (Build Options): List alphaev56, alphapca56, alphaev67, - hppa2.0n and power among supported CPUs. - -2000-11-30 Torbjorn Granlund <tege@swox.com> - - * mpz/tests/t-mul.c: Increase max operand size from 2^17 bits - to 2^19 bits. Misc cleanups. - -2000-11-26 Kevin Ryde <kevin@swox.se> - - * tune/tuneup.c (FIB_THRESHOLD): Cope better with different speeds of - odd and even sizes. - - * longlong.h (alpha): Use udiv_qrnnd and count_leading_zeros on all - compilers, not just gcc. - - * pre_mod_1.c: Use conditional subtract to always skip a division. - (UMUL_TIME, UDIV_TIME): Remove defaults, now in longlong.h. - -2000-11-22 Torbjorn Granlund <tege@swox.com> - - * mpn/pa64w/gmp-mparam.h: Retune. - * mpn/pa64/gmp-mparam.h: Retune. - * mpn/sparc64/gmp-mparam.h: Retune. - -2000-11-22 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (ABOVE_THRESHOLD, BELOW_THRESHOLD): New macros. - * mpn/generic/gcdext.c: Use them. - - * mpn/generic/gcdext.c [WANT_GCDEXT_ONE_STEP]: Force only one step. - * tune/gcdextos.c, tune/gcdextod.c: New files, one step gcdext, single - and double. - * tune/Makefile.am (libspeed_la_SOURCES): Add them. - (TUNE_MPN_SRCS): Remove gcdext.c. - * tune/speed.h, tune/common.c, tune/speed.c: Add measuring. - * tune/tuneup.c: Use for GCDEXT_THRESHOLD, plus check if double limb - is ever better. Should be more accurate, and hopefully faster. - - * tune/gcdext_single.c: New file, gcdext forced to single limbs. - * tune/Makefile.am: Add it. - * tune/speed.h, tune/common.c, tune/speed.c: Add measuring, and of - invert_limb. - - * tune/speed.h (speed_params r): Use mp_limb_t, not long. - * tune/speed.h, tune/common.c: Don't "switch" on "r". - * tune/speed.c (r_string): Accept limb sized constants. - (choice scale): Add a scale factor (eg. "2.33*mpn_add_n"). - * tune/common.c (SPEED_ROUTINE_UDIV_QRNND_A): Default r to - __mp_bases[10].big_base, being a full limb value. - - * configure.in (alphapca56*-*-*): Use ev5 mpn path. - (am29000*-*-*): Remove this, leave the canonical a29k. - (z8k*-*-*, z8kx*-*-*): Changed from z8000, since z8k is canonical. - (gmp_mpn_functions_optional): Add invert_limb, use for alpha and ia64. - - * configure.in (alloca): Accept yes/no/detect, generate an error if - "yes" but not available. - * gmp.texi (Build Options): Update. - - * acinclude.m4 (GMP_TRY_ASSEMBLE): Make conftest.out available. - (GMP_ASM_ALIGN_FILL_0x90): Use it. - - * acinclude.m4 (GMP_ASM_X86_MMX) [*-*-solaris*]: Check for solaris - 2.6 "as" movq bug. - * gmp.texi (Notes for Particular Systems): Update x86 MMX note. - -2000-11-21 Torbjorn Granlund <tege@swox.com> - - * tune/Makefile.am (EXTRA_DIST): List hppa2w.asm. - - * tune/hppa2.asm: Change level directive to "2.0n". - * tune/hppa2w.asm: New file. - * configure.in [SPEED_CYCLECOUNTER_OBJS switch]: Separate out hppa2.0w. - - * mpn/pa64/gmp-mparam.h (BITS_PER_LONGINT): 64 => 32. - -2000-11-21 Kevin Ryde <kevin@swox.se> - - * urandom.h (random): No prototype if glibc stdlib.h has already - provided it (avoids an int32_t/long conflict). - - * tune/Makefile.am (LDFLAGS): Use -all-static. - (speed-dynamic): Dynamic linked version of speed.c. - * tune/README: Update. - - * mpn/generic/gcd.c (find_a): Use native version if available. - * acconfig.h (HAVE_NATIVE_mpn_gcd_finda): Add #undef. - * gmp-impl.h (mpn_gcd_finda): Add prototype and define. - * mpn/asm-defs.m4 (mpn_gcd_finda): New define_mpn. - * tune/gcd_finda_gen.c: #undef any HAVE_NATIVE_mpn_gcd_finda. - * configure.in (gmp_mpn_functions_optional): Add gcd_finda. - * mpn/x86/k6/gcd_finda.asm: New file. - - * tune/tuneup.c (POWM_THRESHOLD): Slightly bigger size steps. - - * gmp-impl.h (__GMP_IMPL_H__): Protect against multiple inclusion. - * tune/gcd_bin.c, tune/powm_mod.c, tune/powm_redc.c: Use #undef after - gmp-impl.h to force thresholds. - * tune/tuneup.c (print_define, fft): No need for #ifndefs on - thresholds any more. - -2000-11-20 Torbjorn Granlund <tege@swox.com> - - * mpz/tests/t-powm.c: Analogous changes as made 2000-11-12 to t-mul.c. - * mpz/tests/t-powm_ui.c: Likewise. - * mpz/tests/t-pow_ui.c: Likewise. - * mpz/tests/t-root.c: Likewise. - - * configure.in [compiler switch]: Pass "-Aa -D_HPUX_SOURCE" to cc for - all hppa versions. - - * mpn/hppa/hppa1_1/udiv_qrnnd.S: Reference data using PC relative - addressing (was r19 relative addressing). - -2000-11-18 Torbjorn Granlund <tege@swox.com> - - * rand.c: (__gmp_rand_lc_scheme): Convert strings to hexadecimal. - (gmp_randinit): Expect strings in hexadecimal. - -2000-11-18 Kevin Ryde <kevin@swox.se> - - * configfsf.guess, configfsf.sub: Update to 2000-11-16. - * config.guess (alpha*-*-openbsd*): Do exact cpu detection. - -2000-11-14 Torbjorn Granlund <tege@swox.com> - - * mpz/tests/t-fdiv.c: Analogous changes as made 2000-11-12 to t-mul.c. - * mpz/tests/t-tdiv_ui.c: Likewise. - * mpz/tests/t-fdiv_ui.c: Likewise. - * mpz/tests/t-sqrtrem.c: Likewise. - * mpz/tests/t-gcd.c: Likewise. - -2000-11-13 Kevin Ryde <kevin@swox.se> - - * mpn/Makeasm.am: New file, splitting out assembler rules. - * mpn/Makefile.am, tune/Makefile.am: Use it. - - * mpn/Makefile.am (@CPP@): Remove this, automake already gives it. - - * configure.in (AC_CHECK_LIBM): New test, and AC_SUBST it. - * Makefile.am (MPFR_LIBADD_OPTION): Use it. - * demos/Makefile.am (qcn_LDADD): Ditto. - * tune/Makefile.am (libspeed_la_LIBADD): Ditto. - * tests/rand/Makefile.am (libstat_la_LIBADD): Ditto. - - * tune/time.c (timeval_diff_secs): Better calculation. - (read_real_time): New measuring method for AIX power/powerpc. - (speed_endtime): Protect against negative times. - * tune/common.c (speed_measure): Protect against big reps. - * tune/freq.c (speed_cpu_frequency_measure_one): Better timeval diff. - * tune/speed.h (TIMEVAL_DIFF_SEC,USEC): Remove macros. - * configure.in: (sys/systemcfg.h, read_real_time): New tests. - -2000-11-13 Torbjorn Granlund <tege@swox.com> - - * mpz/tests/t-mul.c: Remove #include urandom.h. - * mpz/tests/t-tdiv.c: Likewise. - - * configure.in [SPEED_CYCLECOUNTER_OBJS switch]: - Declare hppa.asm as just 32 bits (cyclecounter_size=1). - -2000-11-12 Torbjorn Granlund <tege@swox.com> - - * mpz/tests/t-mul.c - (main): Generate random numbers using gmp_rand* functions. - (main): Distribute random numbers non-uniformly. - (main): Seed by current time if GMP_CHECK_RANDOMIZE is set. - (_mpn_mul_classic): Streamline. - * mpz/tests/t-tdiv.c: Analogous changes. - - * demos/pexpr.c (HAVE_sigaltstack): Fix typo in testing for _UNICOS. - Also test for __hpux. - -2000-11-11 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev5/gmp-mparam.h: Retune. - - * mpn/alpha/ev6/gmp-mparam.h: Retune. - - * mpn/alpha/ev6/add_n.asm: Misc cleanups. - - * mpn/alpha/ev6/sub_n.asm: New file. - -2000-11-10 Torbjorn Granlund <tege@swox.com> - - * configure.in [path switch] (alphaev6*-*-*): Add alpha/ev5 to path. - - * mpn/alpha/ev6/add_n.asm: New file. - -2000-11-10 Kevin Ryde <kevin@swox.se> - - * mpz/powm.c (redc): Make global under WANT_REDC_GLOBAL. - * tune/powm_mod.c, tune/powm_redc.c: New files. - * tune/Makefile.am (libspeed_la_SOURCES): Add them. - * tune/*: Add measuring of redc, mpz_mod, mpz_powm_mod, mpz_powm_redc. - - * tune/tuneup.c (POWM_THRESHOLD): Determine from redc and mpz_mod. - * tune/Makefile.am (TUNE_MPZ_SRCS): Remove powm. - -2000-11-10 Torbjorn Granlund <tege@swox.com> - - * mpn/mips3/gmp-mparam.h: Retune. - - * configure.in (os_64bit): Rename to check_64bit_compiler. - -2000-11-09 Torbjorn Granlund <tege@swox.com> - - * configure.in [SPEED_CYCLECOUNTER_OBJS switch]: Choose hppa/hppa2 code - depending on $CC64. - -2000-11-09 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium/mul_1.asm: Unroll 2x, saving 1 c/l when in L1. - Add 1c entrypoint. - * mpn/x86/pentium/aorsmul_1.asm: Add 1c entrypoints, shave a couple - of cycles at entry and exit. - - * configure.in (power1,2,2sc): Support these as synonyms for plain - power. - - * acinclude.m4 (GMP_ASM_X86_SHLDL_CL): GMP_DEFINE WANT_SHLDL_CL here. - (GMP_ASM_X86_MMX, GMP_ASM_X86_SHLDL_CL): Add X86 into the names. - * configure.in: Consequent changes. - - * gmp.texi (Notes for Particular Systems): Remarks about power/powerpc. - (Reentrancy): Remarks about simultaneous writing. - (Reporting Bugs): Ask for configfsf.guess. - -2000-11-08 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_FUNC_ALLOCA): New macro. - * configure.in: Use it. - * gmp-impl.h (alloca): Conditionals and setups as per autoconf - (should make alloca available on more non-gcc compilers). - - * acinclude.m4: Misc reformatting, simplify some quoting. - (GMP_ASM_UNDERSCORE, GMP_ASM_X86_MCOUNT): Use $CC $CFLAGS $CPPFLAGS. - (GMP_ASM_UNDERSCORE, GMP_ASM_ALIGN_FILL_0x90, GMP_ASM_RODATA): Put - AC_REQUIREs outside AC_CACHE_CHECK. - (GMP_C_SIZES): Use $srcdir/gmp.h, not -I; use $CPPFLAGS. - (GMP_ASM_UNDERSCORE): Use "gmp_compile" variable, and only rm - conftes1* conftes2*. - (GMP_PROG_NM): New macro, require it in appropriate GMP_ASM_*. - (GMP_TRY_ASSEMBLE): New macro, use it in various GMP_ASM_*. - * configure.in: Use GMP_PROG_NM. - - * mpn/tests/spinner.c (spinner_signal): Use RETSIGTYPE. - (spinner_init): Force output to unbuffered. - - * mpn/x86/README.family: Notes about GOT table and imul, misc updates. - * mpn/x86/k7/diveby3.asm: Change to 3 operands for immediate imul. - * mpn/x86/k6/diveby3.asm: Ditto. - -2000-11-06 Torbjorn Granlund <tege@swox.com> - - * urandom.h: Simplify and make it work properly for 64-bit - machines also in environments without `random'. - -2000-11-04 Torbjorn Granlund <tege@swox.com> - - * configure.in [path switch]: Don't match rs6000-*-*, in - particular don't assume POWER. - - * tune/tuneup.c (fft): Remove usleep calls. - - * config.guess: Don't pass "$@" when it is known to be empty. - - * Makefile.am (EXTRA_DIST): List configfsf.guess and configfsf.sub. - -2000-11-04 Kevin Ryde <kevin@swox.se> - - * configfsf.guess, configfsf.sub: Moved from config.guess and - config.sub. - * config.guess, config.sub: New files, wrappers around around - configfsf versions. - * configfsf.guess: Update to FSF 2000-10-23. - * configfsf.sub: Update to FSF 2000-10-25. - - * acinclude.m4 (GMP_ASM_POWERPC_R_REGISTERS): New macro. - * mpn/powerpc32/powerpc-defs.m4: New file, regmap.m4 r0 etc macros - conditionalized by GMP_ASM_POWERPC_R_REGISTERS. - * mpn/powerpc32/regmap.m4: Remove file. - * configure.in (powerpc*-*-*): Use all this. - - * mpz/divegcd.c: New file, providing mpz_divexact_gcd. - * Makefile.am, mpz/Makefile.am: Add it. - * gmp-impl.h (mpz_divexact_gcd): Add prototype. - * mpq/aors.c,canonicalize.c,div.c,mul.c: Use it. - - * longlong.h [pentium] (count_leading_zeros): New macro. - (__clz_tab): Always provide prototype. - * acconfig.h (HAVE_TARGET_CPU_): Add x86s. - - * tune/speed.[ch],common.c (count_leading_zeros, - count_trailing_zeros, __udiv_qrnnd_c): Add measuring. - - * configure.in (X86_PATTERN): Move from here ... - * acinclude.m4 (X86_PATTERN): ... to here. - (GMP_ASM_RODATA): Use it. - - * configure.in (srandom): New test. - * mpn/tests/try.c: Use it. - * tune/speed.c: Ditto, and conditionalize getrusage and headers. - -2000-11-02 Kevin Ryde <kevin@swox.se> - - * mpn/Makefile.am (nodist_libdummy_la_SOURCES): Add udiv_qrnnd.c - and udiv_w_sdiv.c. - - * mpn/generic/mul_n.c (mpn_kara_sqr_n): Remove a duplicate - subtract at the evaluate stage. - -2000-11-01 Torbjorn Granlund <tege@swox.com> - - * configure.in [compiler switch] (sparc64-*-linux*): Spell - gmp_xoptcflags_gcc properly, and pass same options as for other - sparcv9 configs. - - * tune/speed.h (SPEED_ROUTINE_MPN_GET_STR): Fix type of wsize. - -2000-10-31 Torbjorn Granlund <tege@swox.com> - - * configure.in [compiler switch] (sparc64-*-linux*): Remove -mvis - from gmp_xoptflags_gcc, this might not be an ultrasparc. - Remove -m32 from gmp_cflags_gcc; add -Wa,-xarch=v8plus. - -2000-10-29 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/lorrshift.asm: New file. - - * configure.in: New mulfunc `lorrshift' for lshift and rshift. - -2000-10-29 Kevin Ryde <kevin@swox.se> - - * mpn/generic/mul_n.c (mpn_kara_sqr_n): Delete code performing - superfluous mpn_sub_n calls. - - * configure.in (found_asm, M4): Account for SPEED_CYCLECOUNTER_OBJ, - for the benefit of targets whose only .asm is a cycle counter. - - * tune/tuneup.c (fft): Remove bogus usleep calls. - -2000-10-28 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/invert_limb.asm: Get return value for 0x800...00 right. - - * tune/Makefile.am (EXTRA_DIST): Add ia64.asm. - - * tune/ia64.asm: Fix typo. - - * add_n.asm addmul_1.asm mul_1.asm popcount.asm sub_n.asm: - Preserve ar.lc as required by ABI. - * longlong.h (ia64 udiv_qrnnd): New. - - * configure.in [path switch] (ia64*-*-*): Set extra_functions. - * mpn/ia64/invert_limb.asm: New file. - -2000-10-27 Torbjorn Granlund <tege@swox.com> - - * configure.in [compiler switch]: - Get rid of c89 for all hppa flavours--it is an evil compiler! - - * tune/speed.h (SPEED_ROUTINE_MPN_SET_STR): Fix type of xp. - (SPEED_ROUTINE_MPN_GET_STR): Fix type of wp. - -2000-10-27 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Fibonacci Number Algorithm): New section. - - * mpz/tests/t-fib_ui.c: New file. - * mpz/tests/Makefile.am (check_PROGRAMS): Add it. - - * mpz/fib_ui.c: Rewrite, same formulas but using mpn functions and - some lookup tables, much faster at small to moderate sizes. - * gmp-impl.h (MPZ_FIB_SIZE): New macro. - (FIB_THRESHOLD): Establish default here. - * tune/tuneup.c (FIB_THRESHOLD): Start search after the new table - data. - - * mpn/x86/x86-defs.m4 (mcount_movl_GOT_ebx): Rename from movl_GOT_ebx, - and don't use GSYM_PREFIX with _GLOBAL_OFFSET_TABLE_. - - * tune/freq.c (speed_cpu_frequency_measure): New test comparing - gettimeofday and speed_cyclecounter, should cover many systems. - -2000-10-27 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/gmp-mparam.h: Retune. - -2000-10-26 Torbjorn Granlund <tege@swox.com> - - * longlong.h (ia64): Set UMUL_TIME and UDIV_TIME. - - * mpn/ia64/submul_1.c: Fix typo. - -2000-10-25 Kevin Ryde <kevin@swox.se> - - * tune/freq.c (speed_cpu_frequency_sysctl): New test, supporting - hw.model for BSD flavours. - * configure.in (sysctl, sys/param.h): New tests. - -2000-10-24 Torbjorn Granlund <tege@swox.com> - - * tune/freq.c: Explicitly #include config.h before other include files. - - * mpz/tests/reuse.c (FAIL2): New #define. - (main): Use FAIL2. Now this test properly returns non-zero exit - status when it fails. - - * mpn/powerpc32/gmp-mparam.h: Retune. - * mpn/powerpc64/gmp-mparam.h: Retune. - -2000-10-24 Kevin Ryde <kevin@swox.se> - - * mpn/x86/k6/cross.pl: Support 8 and 16 byte code alignment. - - * mpq/aors.c, mpq/canonicalize.c: Skip two mpz_divexact calls if - gcd gives 1, which should be 60% of the time. - * gmp-impl.h (MPZ_EQUAL_1_P): New macro. - * mpq/mul.c, mpq/div.c: Use it, and a new DIV_OR_SET. - - * tune/tuneup.c (xp_block, yp_block): Initialize these with random - data. Fixes GCD_ACCEL and GCDEXT thresholds, and latest POWM. - -2000-10-23 Torbjorn Granlund <tege@swox.com> - - * configure.in [SPEED_CYCLECOUNTER_OBJS switch]: Add ia64 case. - - * mpn/ia64/gmp-mparam.h: Fill in some parameters. - - * mpn/ia64/submul_1.c: New file. - - * tune/ia64.asm: New file. - - * gmp-impl.h (union ieee_double_extract): Handle ia64. - - * mpn/mp_bases.c: Decrease chars_per_bit_exactly for entry 1 to - work around buggy ia64-linux. - - * longlong.h (ia64 umul_ppmm): Update register flags to match new GCC. - -2000-10-22 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev6/gmp-mparam.h (DC_THRESHOLD): Update. - * mpn/alpha/ev6/submul_1.asm: New file. - -2000-10-22 Kevin Ryde <kevin@swox.se> - - * tune/gcd_bin.c: New file. - * tune/gcd_finda_gen.c: New file. - * tune/Makefile.am (libspeed_la_SOURCES): Add them. - * tune/speed.[ch],common.c (mpn_gcd_binary, find_a): Add measuring. - - * * (__gmp_allocate_func etc): Rename from _mp_allocate_func etc. - (__gmp_default_allocate etc): Rename from _mp_default_allocate etc. - * gmp-impl.h (__GMP_REALLOCATE_FUNC_TYPE, - __GMP_REALLOCATE_FUNC_LIMBS): New macros. - - * gmp-impl.h (DC_THRESHOLD): Establish default here, set to 3*KARA - since that's the measured average. - * mpn/generic/dc_divrem_n.c, mpn/generic/tdiv_qr.c (DC_THRESHOLD): - Remove default. - -2000-10-21 Torbjorn Granlund <tege@swox.com> - - * mpn/Makefile.am (TARG_DIST): Add ia64. - -2000-10-21 Kevin Ryde <kevin@swox.se> - - * *: Change BZ -> DC. - * mpn/generic/dc_divrem_n.c: Renamed from bz_divrem_n.c. - - * doc/multiplication: Remove file, now in the manual. - * doc/assembly_code: Ditto. - * tune/README: Remove some parts now in the manual. - - * gmp.texi (@m etc): Add and use some new macros. - (Integer Division - mpz_[cft]div_*): Merge descriptions, for brevity - and to emphasise similarities. - (Low-Level Functions - mpn_[lr]shift): Specify count as 1 to - mp_bits_per_limb-1. - (Algorithms): New chapter. - (References): Add some papers. - - * mpn/generic/mul_n.c (mpn_toom3_mul_n, mpn_toom3_sqr_n): Remove some - unused variables. - * mpn/generic/mul_fft.c (mpn_fft_best_k): Ditto. - - * tune/freq.c: New file, split from time.c. - * tune/time.c: Rewrite, now more automated. - * configure.in, tune/*: Consequent changes. - -2000-10-20 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/default.m4: New file. - * configure.in [config.m4 switch] (ia64*-*-*): Use ia64/default.m4. - - * mpn/ia64/mul_1.asm: New file. - * mpn/ia64/addmul_1.asm: New file. - * mpn/ia64/add_n.asm: New file. - * mpn/ia64/sub_n.asm: New file. - * mpn/ia64/popcount.asm: New file. - * mpn/ia64/README: New file. - - * mpn/alpha/cntlz.asm: Override `.set noat' from ASM_START. - - * configure.in (HAVE_TARGET_CPU_*): Support hppa1.0, hppa1.1, hppa2.0 - by sed'ing the period into `_'. - - * acconfig.h: Add #undefs for hppa targets. - - * longlong.h (udiv_qrnnd): Fix typo in last change. - - * mpz/tstbit.c: Rewrite (partly to work around GCC 2.95.2 HPPA bug). - - * configure.in [path switch]: - (hppa2.0*-*-*): For non-CC64 case, update path. - - * configure.in [compiler switch]: - (hppa2.0w-*-*): Match with same regexp in both places. - (hppa*-*-*): New case. - (all hppa alternatives): Don't inherit default gmp_cflags_cc, - gmp_cflags_c89. - -2000-10-18 Torbjorn Granlund <tege@swox.com> - - * configure.in (alpha*-*-*): Define gmp_xoptcflags_gcc like for - alpha*-*-osf*. - - * longlong.h (x86 udiv_qrnnd): Change `d' => `dx' to avoid K&R C - stringification. - -2000-10-15 Kevin Ryde <kevin@swox.se> - - * doc/configuration: Updates. - - * demos/calc.y: Remove some comments. - -2000-10-14 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Parameter Conventions, Memory Management): New sections - split from "Variable Conventions". - (Efficiency, Debugging, Profiling): New sections in "GMP Basics". - (Reentrancy): Some rewording, add note on standard I/O. - (Build options): Add --enable-assert and --enable-profiling. - - * configure.in (--enable-profiling): New option. - * acinclude.m4 (GMP_ASM_X86_MCOUNT): New macro, finding how to profile. - * mpn/x86/x86-defs.m4 (PROLOGUE_cpu, call_mcount): Profiling support. - - * acinclude.m4, configure.in (GMP_ASM_*): Rename from GMP_CHECK_ASM_*, - to follow autoconf conventions. - - * configure.in: Run GMP_CHECK_ASM tests only if needed. - * acinclude.m4 (GMP_CHECK_ASM_MMX): Don't use GMP_CHECK_ASM_TEXT. - - * mpn/x86/x86-defs.m4 (ASSERT): Allow no condition, to just emit code. - -2000-10-13 Kevin Ryde <kevin@swox.se> - - * mpq/md_2exp.c: New file. - * mpq/Makefile.am (libmpq_la_SOURCES): Add it. - * Makefile.am (MPQ_OBJECTS): Ditto. - * gmp.h (mpq_mul_2exp, mpq_div_2exp): Add prototypes. - * gmp.texi (Rational Arithmetic): Add documentation. - - * mpq/tests/t-md_2exp.c: New file. - * mpq/tests/Makefile.am (check_PROGRAMS): Add it. - - * mpn/generic/perfsqr.c: Add/amend some comments. - - * gmp.texi (Known Build Problems): Note VERSION problem with old - sed, do some minor rewording. - (Build Options): Add cygwin and djgpp URLs, mention INSTALL.autoconf, - mention HTML. - (Getting the Latest Version of GMP): Move this ... - (Introduction to GMP): ... to here. - (Compatibility with older versions): Just refer to 2.x and 3.x, not - every minor version. - (Initializing Integers): Note restrictions on mpz_array_init'ed - variables. - (Integer Logic and Bit Fiddling): Note bits are numbered from 0. - - * INSTALL.autoconf: New file. - * Makefile.am (EXTRA_DIST): Add it. - - * tune/Makefile.am, tune/tuneup.c, configure.in, gmp-impl.h: New - scheme for recompiled objects used by tune program. Don't use - libgmptune.a, make better use of libtool, work with ansi2knr. - - * tune/speed.h,common.c (SPEED_ROUTINE_MPZ_POWM): Use s->yp and - s->xp_block, make exponent a fixed size. - -2000-10-07 Torbjorn Granlund <tege@swox.com> - - * mpn/mips3/gmp-mparam.h: Retune. - - * mpn/generic/mul_n.c (USE_MORE_MPN): Revert last change. - -2000-10-06 Torbjorn Granlund <tege@swox.com> - - * mpn/mips3/add_n.s: Decrease carry recurrence from 4 to 3 cycles. - * mpn/mips3/sub_n.s: Likewise. - -2000-10-04 Torbjorn Granlund <tege@swox.com> - - * configure.in (sparc64-*-linux*): Set path according to CC64. - -2000-10-04 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_CHECK_ASM_UNDERSCORE): Use LABEL_SUFFIX, not a - hard-coded ":". - - * config.sub: Don't demand "86" in CPU name for SCO. - - * configure.in (supersparc-*-*): Remove -DSUPERSPARC. - * longlong.h: Use HAVE_TARGET_CPU_supersparc. - - * configure.in (HAVE_TARGET_CPU_*): AC_DEFINE from $target_cpu. - * acconfig.h: Add #undefs, but only for targets of interest. - -2000-10-03 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/cntlz.asm: Rewrite. - - * mp_clz_tab.c (__clz_tab): Half table size to 128 entires. - * longlong.h (count_leading_zeros): Demand just 128 entries from - __clz_tab. - - * configure.in (mips-sgi-irix6.*): Pass -mips3 in addition to options - for n32 ABI. - - * longlong.h: Move NO_ASM test around all assembly code. - From gcc: - * longlong.h (count_leading_zeros): Sparclite scan instruction was - being invoked incorrectly. - Replace __mc68332__ with __mcpu32__. - Add ARC support. - -2000-10-02 Torbjorn Granlund <tege@swox.com> - - * mpn/mips3/gmp-mparam.h: Retune for both gcc and cc. - - * mpn/generic/mul_n.c (USE_MORE_MPN): Remove exception for __mips. - (interpolate3): Cast mp_limb_t variables to mp_limb_signed_t - when testing sign bit. - - * mpn/alpha/ev6/gmp-mparam.h: Retune. - * mpn/powerpc32/gmp-mparam.h: Retune. - * mpn/powerpc64/gmp-mparam.h: Retune. - * mpn/x86/pentium/gmp-mparam.h: Retune. - * mpn/x86/pentium/mmx/gmp-mparam.h: Retune. - * mpn/sparc32/v9/gmp-mparam.h: Retune. - * mpn/x86/k6/gmp-mparam.h: Retune. - * mpn/x86/p6/gmp-mparam.h: Retune. - * mpn/x86/k7/gmp-mparam.h: Retune. - * mpn/sparc64/gmp-mparam.h: Retune. - - * mpn/m68k/gmp-mparam.h: New file. - * mpn/alpha/ev5/gmp-mparam.h: New file. - - * gmp-impl.h (default MPN_COPY): Remove final `;'. - - * tune/time.c (speed_endtime): Rewrite. - - * tune/speed.h (SPEED_ROUTINE_MPZ_POWM): Set base to a large value, - not 2. - - * demos/pexpr.c (setup_error_handler): Fix typo. - - * mpz/powm.c (redc): New function, based on old mpz_redc. Don't - multiply here. - (mpz_redc): Remove. - (mpz_powm): Major changes, partially reverting to mpn calls. - Multiply before calling redc. - (mpz_powm): Use TMP_ allocation. - (mpz_powm): Refine calculation of k (width of exponent window). - (mpz_powm): Cast constants to mp_limb_t before left shifting. - - * longlong.h: Use ia64 count_leading_zeros just when __GNUC__. - -2000-09-29 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_C_SIZES): New macro. - * configure.in: Use it. - * acconfig.in (BYTES_PER_MP_LIMB etc): Add #undefs. - * mpn/generic/gmp-mparam.h (BYTES_PER_MP_LIMB etc): Remove #defines. - * gmp.texi (Known Build Problems): Remove 64-bit generic C - gmp-mparam.h problem, now fixed. - - * configure.in: Only run GMP_PROG_M4 if it's actually needed. - -2000-09-27 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c: Clean up code for systems not supporting - sigaltstack. Handle old Linux without sigaltstack. Properly - disable all stuff related to sigaltstack under Unicos. - - * mpn/alpha/ev6/addmul_1.asm: Use explicit offset for all load and - store insns. Helps old gas. - - * longlong.h (count_leading_zeros): Define for ia64. - -2000-09-27 Paul Zimmermann <Paul.Zimmermann@loria.fr> - - * mpn/generic/bz_divrem_n.c: Fix qhl handling, simplify. - -2000-09-27 Kevin Ryde <kevin@swox.se> - - * mpn/Makefile.in (.SUFFIXES): Regenerate with patched automake to - get .s before .c, which is needed to override ansi2knr .c rules. - - * gmp.texi (mpn_sqrtrem): Fix r2p==NULL return value description - to match the code (change by Torbjorn). - (mpn_gcd, mpn_gcdext, mpn_sqrtrem, mpn_tdiv_qr): Note most - significant limbs must be non-zero. - (mpn_gcd, mpn_gcdext, mpn_sqrtrem): Clarify destination size - requirements. - (mpn_gcd_1): Clarify value must be non-zero, not just size. - - * gmp-impl.h (mpn_zero_p): New inline function. - * mpn/generic/inlines.c: Add gmp-impl.h. - * mpf/integer.c, mpz/get_d.c, mpn/generic/mul_fft.c: Use it. - - * mpn/generic/gcd.c: Use MPN_COPY_INCR not MPN_COPY. - * mpf/add_ui.c: Ditto. - * mpf/add.c: Ditto, and fix test to skip copy. - -2000-09-26 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h, longlong.h, mpn/generic/*.c: Add ASSERTs for various - parameter restrictions. - - * gmp-impl.h (UDIV_PREINV_TIME): New macro. - * mpn/generic/sb_divrem_mn.c: Use it. - * mpn/generic/perfsqr.c: Ditto. - * mpn/x86/*/gmp-mparam.h (UDIV_PREINV_TIME): Add values. - - * macos/Makefile.in: Add mpz/tests/t-get_si.c, mpf/tests/t-set_f.c, - and new multi-function mpz and mpq files. - -2000-09-25 Kevin Ryde <kevin@swox.se> - - * randlc.c, randlc2x.c, randsd.c, mpz/urandomb.c, mpz/urandomm.c: - Use mpz_ptr and mpz_srcptr for parameters. - * gmp.h (gmp_randinit_lc, gmp_randinit_lc_2exp, gmp_randseed, - mpz_urandomb, mpz_urandomm): Corresponding change to prototypes. - * randsdui.c: Remove wrong K&R parameters part. - -2000-09-12 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (mpn_tdiv_qr): Move prototype from here ... - * gmp.h (mpn_tdiv_qr): ... to here. - - * gmp.texi (Miscellaneous Rational Functions): Comment-out and - move version 1 compatibility note to "Compatibility" section. - (Rational Number Functions): Ditto for canonicalization note. - -2000-09-10 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium/com_n.asm: New file. - - * gmp.texi (Rational Arithmetic): Add mpq_abs. - (Miscellaneous Rational Functions): Merge and simplify descriptions of - mpq_get_num, mpq_get_den, mpq_set_num, mpq_set_den. - - * mpq/abs.c: New file. - * mpq/Makefile.am (libmpq_la_SOURCES): Add it. - * Makefile.am (MPQ_OBJECTS): Add it. - * gmp.h (mpq_abs): Add prototype. - - * mpq/set_den.c: Don't discard sign when copying, this makes the - code match the manual. - -2000-09-07 Torbjorn Granlund <tege@swox.com> - - * tune/alpha.asm: Rewrite to actually work right. - -2000-09-07 Kevin Ryde <kevin@swox.se> - - * tune/common.c,speed.[ch]: Add measuring of mpn_sqrtrem, - mpn_get_str, mpn_set_str. - * tune/README: Various updates. - -2000-09-06 Torbjorn Granlund <tege@swox.com> - - * mpz/fits.c: Correct type of `data'. - -2000-09-06 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Build Options): Clarify where to find CFLAGS. - (Known Build Problems): Note SCO -lc problem. - - * tune/speed.h (SPEED_ROUTINE_MPN_GCD_CALL): Fix for sizes > 512 limbs. - - * doc/multiplication: Corrections and additions suggested by Paul. - - * tune/modlinv.c: New file with alternate modlimb_inverts. - * tune/Makefile.am, tune/speed.[ch]: Add measuring of them. - * tune/speed.c (FLAG_NODATA): New attribute, use for mpz_bin_uiui, - mpz_fib_ui, mpz_fac_ui. - - * mpn/x86/t-zdisp.sh: New file. - - * tests/t-modlinv.c: New file. - * tests/Makefile.am (check_PROGRAMS): Add it. - - * mpq/tests/t-set_f.c: New file. - * mpq/tests/Makefile.am (check_PROGRAMS): Add it. - - * gmp-impl.h (MPQ_CHECK_FORMAT): New macro. - * mpq/tests/t-get_d.c: Use it. - - * mpq/set_f.c: New file. - * mpq/Makefile.am (libmpq_la_SOURCES): Add it. - * Makefile.am (MPQ_OBJECTS): Ditto. - * gmp.h: Add prototype. - * gmp.texi (Miscellaneous Rational Functions): Document mpq_set_f, - correct return type of mpq_set_d. - -2000-09-03 Kevin Ryde <kevin@swox.se> - - * mpz/aors_ui.c: New file merging add_ui.c and sub_ui.c, no object - code changes. - * mpz/add_ui.c, mpz/sub_ui.c: Remove files. - * mpz/Makefile.am: Update. - - * gmp-impl.h (MPZ_FITS_STYPE_SDT, MPZ_FITS_UTYPE_SDT): New macros. - * mpz/fits.c: New file merging six separate fits*.c. - * mpz/fits_sshort_p.c, fits_sint_p.c, fits_slong_p.c, fits_ushort_p.c, - fits_uint_p.c, fits_ulong_p.c: Remove files - * mpz/Makefile.am: Use new fits.c, change object names from - fits_*_p.lo to fits_*.lo to avoid SunOS 4 native "ar" warnings. - * Makefile.am (MPZ_OBJECTS): Change from fits_*_p.lo to fits_*.lo. - - * acinclude.m4 (GMP_CHECK_ASM_RODATA): New macro, defining RODATA. - * configure.in: Use it. - * mpn/x86/k[67]/mmx/popham.asm: Use it. - - * mpn/x86/*/*.asm: Use "TEXT" not ".text". - -2000-09-02 Kevin Ryde <kevin@swox.se> - - * mpq/aors.c: New file merging add.c and sub.c, no object code changes. - * mpq/add.c, mpq/sub.c: Remove files. - * mpq/Makefile.am: Update. - - * mpz/aors.c: New file merging add.c and sub.c, no object code changes. - * mpz/add.c, mpz/sub.c: Remove files. - * mpz/Makefile.am, mpbsd/Makefile.am: Update. - - * configure.in: Re-apply "PROLOGUE.*" regexp change for the - benefit of alpha PROLOGUE_GP, lost in path search reorganisation. - - * mpn/x86/x86-defs.m4 (jadcl0, cmov_simulate, ASSERT, - movl_text_address): Don't use "1:" style labels. - (Zdisp): Rearrange a bit, switch to all hex. - * mpn/x86/README.family: Note SCO "as" doesn't support "1:" style - local labels, misc rewordings. - -2000-08-29 Torbjorn Granlund <tege@swox.com> - - * demos/primes.c: Include string.h. - - * config.guess (x86 variant recog code): Remove dummy*.o files - generated by some compilers. - -2000-08-28 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_CHECK_ASM_ALIGN_FILL_0x90): Fix Solaris 2.8 - warning message suppression, add notes about SCO. - - * Makefile.am (MPZ_OBJECTS etc): Move some comments. - -2000-08-25 Kevin Ryde <kevin@swox.se> - - * mpz/pprime_p.c (mpz_millerrabin): Fix a TMP_FREE. - - * gmp.texi (Copying): Refer to Lesser not Library GPL. - (GMP and Reentrancy): Note stack-alloc.c is not reentrant, and - that SCO <ctype.h> is potentially not reentrant. - - * acinclude.m4 (GMP_CHECK_ASM_UNDERSCORE): Test by attempting to - link with or without an underscore. - * gmp.texi (Known Build Problems): Remove SunOS 4 native grep - GSYM_PREFIX problem, now fixed. - - * gmp-impl.h (MODLIMB_INVERSE_3): New constant. - * mpn/generic/diveby3.c: Use it instead of own INVERSE_3. - * mpn/generic/mul_n.c: Ditto. - * tests/t-constants.c: Check it, and PP_INVERTED too. - - * acinclude.m4 (GMP_GCC_MARCH_PENTIUMPRO): New macro. - * configure.in [p6 and athlon] (gmp_optcflags_gcc): Use it to - possibly add -march=pentiumpro. - - * gmp-impl.h (MPZ_SET_STR_OR_ABORT, MPF_SET_STR_OR_ABORT): New macros. - * mpz/tests/t-bin.c, mpz/tests/t-get_si.c, mpz/tests/t-jac.c, - mpz/tests/t-misc.c: Use them. - * mpf/tests/t-conv.c, mpf/tests/t-misc.c: Ditto. - * mpz/tests/convert.c: Ditto and amend diagnostics slightly. - * mpz/tests/t-misc.c (check_mpz_set_si): Remove a superfluous init. - * mpz/tests/io.c: Differentiate between I/O and data conversion errors. - - * mpn/generic/aors_n.c: New file merging add_n and sub_n, no - object code changes. - * mpn/generic/add_n.c: Remove file. - * mpn/generic/sub_n.c: Remove file. - - * mpn/generic/aorsmul_1.c: New file merging addmul_1 and submul_1, - no object code changes. - * mpn/generic/addmul_1.c: Remove file. - * mpn/generic/submul_1.c: Remove file. - - * mpn/generic/popham.c: New file merging popcount and hamdist, no - object code changes. - * mpn/generic/popcount.c: Remove file. - * mpn/generic/hamdist.c: Remove file. - -2000-08-24 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (mpn_com_n): Fix typo. - -2000-08-23 Torbjorn Granlund <tege@swox.com> - - * demos/primes.c (main): Don't call mpz_probab_prime_p for numbers - that are known to be prime after sieving. - (main): Declare and initialize max_s_prime_squared. - (MAX_S_PRIME): Increase. - (ST_SIZE): Increase. - -2000-08-23 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (ASSERT_ALWAYS): Change to statement style. - (JACOBI_TWO_U_BIT1): Remove ASSERT. - (MPZ_CHECK_FORMAT): Use ASSERT_ALWAYS as a statement. - -2000-08-21 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (ASSERT): Use do..while for dummy version. - - * mpf/get_str.c: Don't set n_digits from digits_computed_so_far - when the converted operand becomes zero. Misc cleanups. - -2000-08-21 Kevin Ryde <kevin@swox.se> - - * mpz/fdiv_r_2exp.c, mpz/lcm.c, mpz/urandomm.c: Add missing - TMP_MARK/FREE, avoiding memory leak when using stack-alloc.c. - -2000-08-20 Kevin Ryde <kevin@swox.se> - - * mpz/set.c [BERKELEY_MP] (move): Add conditionals to build as - "move" for libmp. - * mpbsd/Makefile.am: Use mpz/set.c, not move.c. - * Makefile.am (MPBSD_OBJECTS): Corresponding change. - * mpbsd/move.c: Remove file. - - * mpn/Makefile.am, mpz/Makefile.am, mpq/Makefile.am, mpf/Makefile.am, - mpbsd/Makefile.am (-DOPERATION_foo): Use "foo" even for ansi2knr - "foo_" objects. Do this with the makefiles to keep the sources - cleaner. - * mpz/mul_siui.c, mpf/integer.c: Revert to plain OPERATION_* forms. - - * mpn/lisp/gmpasm-mode.el (gmpasm-remove-from-list): Renamed from - gmpasm-delete-from-list, because it's non-destructive. - (gmpasm-font-lock-keywords): Add some more keywords. - -2000-08-16 Kevin Ryde <kevin@swox.se> - - * tune/mul_n_mpn.c, tune/mul_n_open.c: New files, being forced - open-coded and mpn #includes of mpn/generic/mul_n.c. - * tune/*: Add measuring of them. - * tune/speed.c: Print command line into *.gnuplot file. - - * mpn/generic/mul_n.c (USE_MORE_MPN): Change to #if not #ifdef for - using the value, add #ifndef for providing the default. - * mpn/sparc64/gmp-mparam.h (USE_MORE_MPN): Add #ifndef. - - * tests/t-constants.c: New file. - * tests/Makefile.am (check_PROGRAMS): Add it. - - * mpz/get_si.c: Use LONG_MAX, not BITS_PER_MP_LIMB, so the result - doesn't depend on limb size when outside the range of a long - (though such results are not actually documented). - * mpz/tests/t-get_si.c: New file. - * mpz/tests/Makefile.am (check_PROGRAMS): Add it. - - * mpn/tests/try.c (call): Cast popcount and hamdist calls, - for the benefit of long long limb. - -2000-08-15 Kevin Ryde <kevin@swox.se> - - * mp.h (mp_set_memory_functions): Add missing #define. - * mpbsd/tests/allfuns.c (mp_set_memory_functions): Verify its - existence. - - * mpf/tests/t-misc.c (check_mpf_getset_prec): New test, verifying - reverted behaviour of mpf_get_prec. - - * mpn/tests/ref.c (refmpn_strip_twos): Use refmpn_copyi, not - MPN_COPY_INCR. - - * mpz/mul_siui.c, mpf/integer.c: Recognise OPERATION_*_ forms - produced under ansi2knr. - - * configure.in (mpn_objects, mpn_objs_in_libgmp): Add $U to .c - objects when ansi2knr in use. - - * mpn/Makefile.am (AUTOMAKE_OPTIONS): Enable ansi2knr. - (libdummy.la): Add this, not built, to create ansi2knr style rules - for all potential .c files. - * mpz/Makefile.am, mpq/Makefile.am, mpf/Makefile.am, mpfr/Makefile.am, - mpbsd/Makefile.am, mpq/tests/Makefile.am, tests/Makefile.am - (AUTOMAKE_OPTIONS): Enable ansi2knr (now everywhere). - * Makefile.am (MPZ_OBJECTS, MPQ_OBJECTS, MPF_OBJECTS, MPFR_OBJECTS, - MPBSD_OBJECTS, libmp_la_DEPENDENCIES): Add $U to all .lo filenames. - -2000-08-03 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev6/addmul_1.asm: Correct number of cycles to 3.5/28. - -2000-08-02 Torbjorn Granlund <tege@swox.com> - - * Version 3.1 released. - - * gmp.texi: Rephrase mpf_urandomb documentation. - - * mpn/alpha/ev6: New directory with ev6/21264 optimized code. - * mpn/alpha/ev6/addmul_1.asm: New file. - * mpn/alpha/ev6/gmp-mparam.h: New file. - -2000-08-02 Kevin Ryde <kevin@swox.se> - - * demos/factorize.c (random): Don't use "inline". - - * mpfr/log.c, mpfr/mul_ui.c, mpfr/round.c, mpfr/set.c, mpfr/set_d.c: - Corrections to K&R parts. - - * Makefile.am (EXTRA_HEADERS): Omit $(MPFR_HEADERS_OPTION). - * mpfr/Makefile.am (EXTRA_DIST): Add mpfr.h. - - * gmp.texi (Known Build Problems): Note problem stripping libgmp.a. - -2000-08-02 Kent Boortz <kent@swox.com> - - * mpfr: Integrated experimental version of mpfr-0.4. - * configure.in: Changes for option --enable-mpfr. - * Makefile.am: Changes for option --enable-mpfr. - -2000-08-01 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/popcount.c: Disable SPARC v9 popc_limb pattern. - * mpn/generic/hamdist.c: Likewise. - -2000-08-01 Kevin Ryde <kevin@swox.se> - - * mpn/tests/try.c (try_init): Account for ALIGNMENTS when sizing - source and dest regions. - -2000-07-31 Torbjorn Granlund <tege@swox.com> - - * mpf/get_str.c: Develop three extra digits, not just one. - -2000-07-31 Kevin Ryde <kevin@swox.se> - - * gmp.texi (References): Add URL for invariant division. - -2000-07-30 Kevin Ryde <kevin@swox.se> - - * tune/time.c (speed_cpu_frequency_proc_cpuinfo): Add support for - alpha linux "cycle frequency". - - * mpn/sparc64/gmp-mparam.h: Re-run tune program for FFT thresholds. - -2000-07-29 Kevin Ryde <kevin@swox.se> - - * gmp.texi (ABI and ISA): Add sparc64-*-linux*. - * configure.in [sparc64-*-linux*] (gmp_cflags64_gcc): Same flags - as under solaris. - - * configure.in (--enable-fft): New option, default "no". - * gmp.texi (Build Options): Describe it. - * mpn/generic/mul.c, mpn/generic/mul_n.c [WANT_FFT]: Use it. - * tune/tuneup.c [WANT_FFT]: By default don't probe FFTs if not enabled. - * NEWS: Multiplication optionally using FFT. - - * tune/README: Notes on FFT and GCD thresholds, other minor updates. - - * Makefile.am: Expunge the macos generated files update stuff. - -2000-07-28 Kevin Ryde <kevin@swox.se> - - * mpn/x86/*/gmp-mparam.h: Add some FFT thresholds. - -2000-07-28 Kent Boortz <kent@swox.se> - - * macos/Asm*, macos/CmnObj, macos/Mp*: Delete directories. - * macos/Makefile: Delete file. - * macos/Makefile.cw: Delete file. - * macos/config.h: Delete file. - * macos/Asm/*.s: Delete files. - * macos/configure: Create target directories. Don't transform - '(C)' to '(;)' in a 'dnl' line comment in .asm file. - * Makefile.am: Delete macos targets. - * macos/README: Reflect that we reverted back to a build - process that require ""macos/configure" to run on MacOS. - This imply that MacPerl is needed for a build in MacOS. - -2000-07-27 Kevin Ryde <kevin@swox.se> - - * mpn/generic/mul_fft.c: New file, by Paul Zimmermann, minor mods - applied. - * configure.in (gmp_mpn_functions): Add it. - * mpn/generic/mul.c, mpn/generic/mul_n.c: Use it. - * doc/multiplication: Describe it (briefly). - - * gmp-impl.h (FFT_MUL_THRESHOLD etc): New thresholds. - (mpn_fft_best_k, mpn_fft_next_size, mpn_mul_fft, mpn_mul_fft_full): - New functions. - (numberof, TMP_ALLOC_TYPE etc, _MP_ALLOCATE_FUNC_TYPE etc, - UNSIGNED_TYPE_MAX etc): New macros. - - * tune/*: Add FFT threshold tuning and speed measuring. - * tune/common.c: Avoid huge macro expansions for umul and udiv. - - * mpz/tests/t-bin.c, mpz/tests/t-jac.c, mpz/tests/t-misc.c, - mpbsd/tests/t-misc.c, mpf/tests/t-misc.c, mpn/tests/try.c, - mpn/tests/spinner.c: Use new gmp-impl.h macros. - - * demos/Makefile.am (BUILT_SOURCES): Don't need calc.c etc under this. - -2000-07-27 Torbjorn Granlund <tege@swox.com> - - * mpn/ia64/gmp-mparam.h: New file. - -2000-07-26 Torbjorn Granlund <tege@swox.com> - - * demos/isprime.c: Handle any number of arguments and print - classification for each. Add `-q' option for old behaviour. - -2000-07-26 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Build Options): Mention djgpp stack size. - (Notes for Package Builds): New section. - (Compatibility with older versions): Update for 3.1, add mpf_get_prec. - - * demos/factorize.c [__GLIBC__]: Don't declare random() under glibc. - - * gmp.h (gmp_version): Add prototype and define. - - * Makefile.am: Keep macos directory generated files up-to-date - during development and on a "make dist". - -2000-07-25 Torbjorn Granlund <tege@swox.com> - - * mpn/hppa/gmp-mparam.h: Update threshold values from new `tune' run. - - * mpn/pa64/gmp-mparam.h: Fill in values from `make tune' run. - * mpn/pa64w/gmp-mparam.h: Likewise. - * mpn/mips3/gmp-mparam.h: Likewise. - - * tune/hppa2.asm: Fix typo in .level directive. - - * configure.in: Add sparc64-*-linux* support (from Jakub Jelinek). - * configure: Regenerate. - - * mpn/sparc64/rshift.asm: Use %g5 instead of volatile stack frame area - for return value (from Jakub Jelinek). - * mpn/sparc64/lshift.asm: Likewise. - - * mpf/get_prc.c: Revert Aug 8, 1996 change. - - * version.c: No longer static. - - * mpn/pa64/gmp-mparam.h: Only #define *_THRESHOLD if not already - defined. - * mpn/pa64w/gmp-mparam.h: Likewise. - * mpn/arm/gmp-mparam.h: Likewise. - * mpn/mips3/gmp-mparam.h: Likewise. - -2000-07-25 Kevin Ryde <kevin@swox.se> - - * INSTALL: It's "info -f ./gmp.info" to be sure of hitting the - gmp.info in the current directory. - - * Makefile.am (libmp_la_DEPENDENCIES): Add mpz/cmp.lo, for last - mpz/powm.c fix. - - * mpn/sparc64/addmul1h.asm, mpn/sparc64/submul1h.asm: Renamed from - addmul_1h.asm, submul_1h.asm to avoid name conflicts on an 8.3 - filesystem. - * mpn/sparc64/addmul_1.asm, mpn/sparc64/submul_1.asm, - mpn/sparc64/mul_1.asm: Update include_mpn()s. - -2000-07-24 Torbjorn Granlund <tege@swox.com> - - * Update header of all files previously under the Library GPL - to instead be under the Lesser GPL. - - * COPYING.LIB: Now Lesser GPL. - * demos/primes.c: Change license to GPL (was Library GPL). - * demos/isprime.c: Change license to GPL (was Library GPL). - - * gmp.h (error code enum): Add GMP_ERROR_BAD_STRING (currently unused). - - * mpz/tests/t-mul.c: Default SIZE to a function of TOOM3_MUL_THRESHOLD. - Improve error messages. Decrease reps. - -2000-07-22 Kevin Ryde <kevin@swox.se> - - * tune/speed.h: Decrease the amount of data used for gcd and powm - measuring, to make the tune go a bit faster. - -2000-07-21 Kent Boortz <kent@swox.se> - - * macos/Asm*, macos/CmnObj, macos/Mp*: Directories no longer created - from configure script, now part of dist. - * macos/Makefile - * macos/Makefile.cw - * macos/config.h - * macos/Asm/*.s - New files and directories that is the output from configure. This way - no Perl installation is required to build on MacOS, just MPW. - * macos/configure: Added prefix '__g' to exported assembler labels. - Changed to handle new m4 syntax instead of the old cpp syntax in asm. - * macos/Makefile.in: Corrected 'clean' target, added 'distclean' - and 'maintainer_clean'. Added "mpn/mp_bases.c" to build. - * macos/README: Reflect the new build process without configure. - Corrected the file structure for Apple MPW installation. - -2000-07-21 Torbjorn Granlund <tege@swox.com> - - * mpf/tests/t-muldiv.c: Relax error limit. Make precision depend - on SIZE. Misc changes. - - * configure: Regenerate. - -2000-07-20 Kent Boortz <kent@swox.com> - - * macos/Makefile.in: Removed hard coded targets, added special - targets found in Makefile.am files. - * macos/configure: Generate targets from top configure script and - Makefile.am files. Made script runnable from Unix for testing. - * macos/README: Notes about search paths for includes, contributed - by Marco Bambini. - * configure.in: Added comment about lines that the "macos/configure" - script depend on. - -2000-07-20 Torbjorn Granlund <tege@swox.com> - - * mpz/powm.c (mpz_powm): After final mpz_redc call, subtract `mod' - from result if it is greater than `mod'. - -2000-07-19 Torbjorn Granlund <tege@swox.com> - - * mpn/hppa/gmp-mparam.h: Fill in values from `make tune' run. - * mpn/alpha/gmp-mparam.h: Likewise. - * mpn/powerpc32/gmp-mparam.h: Likewise. - - * tune/hppa.asm: New file. - * tune/hppa2.asm: New file. - * configure.in (SPEED_CYCLECOUNTER_OBJS): Set for hppa2*-*-* and - hppa*-*-*. - * tune/Makefile.am (EXTRA_DIST): Add hppa.asm and hppa2.asm. - - * tune/speed.h (SPEED_ROUTINE_MPN_BZ_DIVREM_CALL): Declare `marker'; - invoke TMP_FREE. - - * mpn/hppa/hppa1_1/udiv_qrnnd.S: Use "%" instead of "'" for - reloc/symbol delimiter. - -2000-07-16 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/gmp-mparam.h: Update with output from tune utility. - * mpn/powerpc64/copyi.asm: New file. - * mpn/powerpc64/copyd.asm: New file. - -2000-07-16 Kevin Ryde <kevin@swox.se> - - * tune/*: Add measuring for umul_ppmm and udiv_qrnnd. - -2000-07-14 Kevin Ryde <kevin@swox.se> - - * mpn/x86/k6/k62mmx: New directory. - * configure.in (k6[23]*-*-*): Use it. - * mpn/x86/k6/k62mmx/copyi.asm, mpn/x86/k6/k62mmx/copyd.asm: Move from - mmx directory, improve code alignment a bit. - * mpn/x86/k6/k62mmx/lshift.asm, mpn/x86/k6/k62mmx/rshift.asm: Ditto, - and improve addressing modes for pre-CXT cores. - * mpn/x86/x86-defs.m4 (Zdisp): Add an instruction. - * mpn/x86/k6/mmx/lshift.asm, mpn/x86/k6/mmx/rshift.asm: New files, - suiting plain K6. - * mpn/x86/README, mpn/x86/k6/README: Updates. - * mpn/x86/k6/mmx/*.asm: Update some comments. - - * mpn/tests/Makefile.am: Use $(MAKE) in .asm rules, not "m". - * tune/Makefile.am: Use $(EXEEXT) and libtool --config objdir, for - the benefit of djgpp. - - * */Makefile.in: Regenerate with patched automake that adds - $(EXEEXT) to EXTRA_PROGRAMS. - - * mpn/tests/try.c: Add #ifdef to SIGBUS, for the benefit of djgpp. - * config.guess: Recognise pc:*:*:* as an x86, for djgpp. - - * configure: Regenerate with patched autoconf to fix temp file - ".hdr" which is invalid on a DOS 8.3 filesystem, and to fix two - sed substitutes that clobbered a ":" in $srcdir (eg. a DOS drive - spec). - - * mpz/tests/io.c: Use one fp opened "w+", since separately opened - input and output doesn't work on MS-DOS 6.21. - - * tests/rand/Makefile.am (allprogs): Pseudo-target to build everything. - (CLEANFILES): Add EXTRA_PROGRAMS and EXTRA_LTLIBRARIES. - (manual-test, manual-bigtest): Add $(EXEEXT) to dependencies. - - * tests/rand/*/Makefile.in: Regenerate with patched automake that adds - $(EXEEXT) to EXTRA_PROGRAMS. - -2000-07-13 Torbjorn Granlund <tege@swox.com> - - * mpz/tests/t-root.c: Also test mpz_perfect_power_p. - Generate `nth' so that there will be fewer trivial values. - - * mpz/root.c: Reverse return value in tests for detecting root of +1 - and -1. - - * mpz/perfpow.c: Use TMP_ALLOC interface. - -2000-07-12 Torbjorn Granlund <tege@swox.com> - - * mpz/perfpow.c (primes): Make it const. - -2000-07-06 Kevin Ryde <kevin@swox.se> - - * mpn/x86/k6/cross.pl: New file. - - * mpn/x86/*/gmp-mparam.h: Updates to thresholds, conditionalize - all _TIME defines. - * mpn/x86/pentium/mmx/gmp-mparam.h: New file. - * mpn/sparc64/gmp-mparam.h: Update thresholds. - * mpn/sparc32/v9/gmp-mparam.h: Ditto. - -2000-07-04 Kevin Ryde <kevin@swox.se> - - * NEWS: Updates. - * mpn/x86/*/README: Miscellaneous updates. - - * tune/speed-ext.c: New file. - * tune/Makefile.am: Add it. - * tune/README: Updates. - * tune/speed.h (SPEED_ROUTINE_MPN_DIVREM_2): Bug fixes. - - * demos/calc.y,calclex.l: New files. - * demos/calc.c,calc.h,calclex.c: New files, generated from .y and .l. - * demos/Makefile.am: Add them. - - * gmp.h (mpq_swap, mpf_swap): Add prototypes and defines. - -2000-07-01 Kevin Ryde <kevin@swox.se> - - * gmp.texi (ABI and ISA): New section, bringing together ABI notes. - (Build Options): Add MPN_PATH, various updates. - (Build Options): Add note on setting CFLAGS when setting CC. - (Notes for Particular Systems): Add -march=pentiumpro problem. - (Known Build Problems): Note on gmp-mparam.h for 64-bit generic C. - (GMP Variable Conventions): Add some info on user defined functions. - (Reporting Bugs): Minor rewording. - - * configure.in (MPN_PATH): Renamed from mpn_path. - - * gmp-impl.h (ULONG_MAX,ULONG_HIGHBIT,...,SHORT_MAX): New defines. - * mp[zf]/tests/t-misc.c: Use them. - - * mpbsd/tests/t-misc.c: New file. - * mpbsd/tests/Makefile.am: Add it. - - * Makefile.am (LIBGMP_LT_*, LIBMP_LT_*): Bump version info. - * gmp.h (__GNU_MP_VERSION_*): Bump to 3.1. - - * mpf/tests/Makefile.am (AUTOMAKE_OPTIONS): Add ansi2knr. - - * Makefile.am (libmp_la_SOURCES): Add mp_set_fns.c, accidentally - omitted in gmp 3.0.x. - * gmp.texi (Custom Allocation): Note this is available in mpbsd, - and some minor rewording. - -2000-06-30 Torbjorn Granlund <tege@swox.com> - - * demos/factorize.c (random): New function, defined conditionally. - (factor_using_pollard_rho): Use it, not mrand48. - - * mpn/cray/README: New file. - -2000-06-30 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium/aorsmul_1.asm: Add MULFUNC_PROLOGUE. - - * mpz/tests/t-jac.c: Test limbs on mpn_jacobi_base, not just ulongs. - - * gmp-impl.h, mpn/tests/try.c, mpn/tests/spinner.c, tune/speed.c: - Use config.h unconditionally, not under HAVE_CONFIG_H. - - * demos/pexpr.c [__DJGPP__]: Patch by Richard Dawe to not use - setup_error_handler on djgpp. - - * tune/*: Locate data to help direct-mapped caches, add measuring - of mpz_init/clear, mpz_add and mpz_bin_uiui, various cleanups. - * configure.in (AC_CHECK_FUNCS): Add popen. - -2000-06-29 Torbjorn Granlund <tege@swox.com> - - * mpf/mul_2exp.c: Streamline criterion for whether to use mpn_lshift or - mpn_rshift. Increase precision when exp is a multiple of - BITS_PER_MP_LIMB primarily to make exp==0 be a noop. - * mpf/div_2exp.c: Analogous changes. - - * mpf/tests/t-dm2exp.c: Set u randomly in loop. Perform more - mpf_mul_2exp testing. - - * configure.in: Recognize cray vector processors with a broad `*'; - move after alpha* not to match that. - -2000-06-28 Kevin Ryde <kevin@swox.se> - - * mpz/tests/io.c: Use a disk file, not a pipe, switch to ansi2knr - style, switch from MP_INT to mpz_t, add a couple of error checks. - * mpz/tests/Makefile.am (CLEANFILES): Add io.tmp, in case io.c fails. - -2000-06-27 Torbjorn Granlund <tege@swox.com> - - * mpf/tests/t-get_d.c: Be more lax about relative error, to handle Cray - floating point format. - - * mpq/tests/t-get_d.c: Decrease default reps to 1000. - - * mpf/tests/t-conv.c: Correct type of `bexp'. - - * configure.in (cray vector machines): Don't inherit gmp_cflags_cc. - - * tune/Makefile.am (EXTRA_DIST): Delete sparc64.asm. - - * configure.in (cray vector machines): Set extra_functions. - - * mpn/cray/mulww.f: New file with vectorizing cray code. - * mpn/cray/mulww.s: Generated from mulww.f. - * mpn/cray/mul_1.c: New file. - * mpn/cray/addmul_1.c: New file. - * mpn/cray/submul_1.c: New file. - * mpn/cray/add_n.c: New file. - * mpn/cray/sub_n.c: New file. - -2000-06-26 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_CHECK_ASM_ALIGN_FILL_0x90): Fix so it actually - detects solaris 2.6, and also suppress warning on solaris 2.8. - * configure.in (SPEED_CYCLECOUNTER): Remove spurious "athlon" from - sparc case. - - * mpn/lisp/gmpasm-mode.el: Move keymap to the top of the docstring. - -2000-06-21 Kevin Ryde <kevin@swox.se> - - * mpn/generic/mul_n.c (mpn_kara_mul_n, mpn_kara_sqr_n): Use - mp_size_t for n2. - (mpn_toom3_mul_n, mpn_toom3_sqr_n): Use mp_size_t for size - parameters and "l" variables. - * gmp-impl.h (mpn_toom3_mul_n, mpn_toom3_sqr_n): Update prototypes. - - * mpbsd/itom.c, mpbsd/sdiv.c: Add casts for correct handling of - -0x80...00 on systems with sizeof(short)==sizeof(int). - - * mpz/tests/t-misc.c: Move "bin" test from here ... - * mpz/tests/t-bin.c: ... to here, and add a new (2k,k) test too. - * mpz/tests/Makefile.am (check_PROGRAMS): Add t-bin. - - * mpz/bin_ui.c [_LONG_LONG_LIMB]: Use mpn_divrem_1, since kacc is - a limb not a ulong. - * mpz/bin_uiui.c [_LONG_LONG_LIMB]: Ditto, and use mpn_mul_1 too, - since nacc is a limb. - - * mpf/tests/t-misc.c (check_mpf_set_si, check_mpf_cmp_si): - New file, testing mpf_set_si, mpf_init_set_si, and mpf_cmp_si. - * mpf/tests/Makefile.am (check_PROGRAMS): Add it. - - * mpz/tests/t-misc.c (check_mpz_set_si, check_mpz_cmp_si): - New tests, for mpz_set_si, mpz_init_set_si, and mpz_cmp_si. - - * mpz/set_si.c, mpz/iset_si.c, mpz/cmp_si.c [_LONG_LONG_LIMB]: Fix - handling of -0x80..00. - * mpf/set_si.c, mpf/iset_si.c, mpf/cmp_si.c [_LONG_LONG_LIMB]: Ditto. - -2000-06-19 Torbjorn Granlund <tege@swox.com> - - * demos/primes.c: Properly handle arguments `m +n'. - -2000-06-17 Torbjorn Granlund <tege@swox.com> - - * config.sub: Recognize k5 and k6 with common pattern. - - * mpq/tests/t-get_d.c: Also test mpq_set_d. Misc improvements. - - * mpq/set_d.c: Special case 0.0. Don't call mpn_rshift with 0 count. - Allocate correct amount of memory for numerator. Delete spurious - ASSERT_ALWAYS(1). - -2000-06-17 Kevin Ryde <kevin@swox.se> - - * mpz/perfsqr.c: Fix so that zero is considered a perfect square. - (Was wrongly calling mpn_perfect_square_p with size==0.) - -2000-06-16 Kevin Ryde <kevin@swox.se> - - * configure.in: Set k5*-*-* to use basic i386 code until there's - something specific. Add path=x86 as a default for x86s. - - * acinclude.m4 (GMP_CHECK_ASM_ALIGN_LOG): Generate - ALIGN_LOGARITHMIC setting, not a full ALIGN definition. - (GMP_CHECK_ASM_ALIGN_FILL_0x90): New test. - * configure.in [x86-*-*]: Use GMP_CHECK_ASM_ALIGN_FILL_0x90. - * mpn/asm-defs.m4 (ALIGN): New macro. - * mpn/x86/x86-defs.m4 (ALIGN): Remove supplementary definition. - - * tune/*: Plain "unsigned" for speed_cyclecounter. - * configure.in: Use tune/sparcv9.asm for 32 and 64 bit modes. - * tune/sparc64.asm: Remove file. - -2000-06-15 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/k7/mmx/copyi.asm: Use `testb' instead of `test'. - * mpn/x86/k7/mmx/copyd.asm: Likewise. - - * mpn/x86/k7/mmx/lshift.asm: Avoid using `~' (Solaris as problems). - * mpn/x86/k7/mmx/rshift.asm: Likewise. - * mpn/x86/k6/aors_n.asm: Likewise. - * mpn/x86/k7/aors_n.asm: Likewise. - * mpn/x86/k7/mul_basecase.asm: Likewise. - -2000-06-13 Torbjorn Granlund <tege@swox.com> - - * tune/sparcv9.asm: Tune, deleting two instructions. - - * tune/alpha.asm: Update to unified speed_cyclecounter. - -2000-06-11 Kevin Ryde <kevin@swox.se> - - * mpz/tests/reuse.c (FAIL): Add a K&R version. - Use _PROTO on some typedefs. - * mpz/tests/t-misc.c: Add gmp-impl.h for "const". - - * configure.in: Rework mpn multi-function and optional files. - Names standardized, no need for explicit declarations, all picked - up in one $path traversal. - * doc/configuration: Updates. - - * tests/rand/t-rand.c (main): Change "usage" to work with K&R. - -2000-06-10 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium/mmx/popham.asm, mpn/x86/p6/mmx/popham.asm, - mpn/x86/p6/p3mmx/popham.asm, mpn/x86/p6/diveby3.asm: Add - MULFUNC_PROLOGUE for correct HAVE_NATIVE_* matching. - - * mpn/x86/x86-defs.m4 (cmov_bytes_tttn): Use eval() on expressions. - (cmov_available_p): Switch to list CPUs which do have cmov. - * mpn/x86/p6/sqr_basecase.asm, mpn/x86/k6/sqr_basecase.asm, - mpn/x86/k7/sqr_basecase.asm: Use eval() for multiplication. - * mpn/x86/README.family: Various updates. - -2000-06-09 Kevin Ryde <kevin@swox.se> - - * mpbsd/tests/allfuns.c (main): Call exit() instead of doing return. - - * doc/tasks.html, doc/projects.html: Moved from projects directory. - * doc/multiplication: New file. - * Makefile.am (EXTRA_DIST): Remove projects, add doc. - - * Makefile.am (libgmp_la_LIBADD, libmp_la_LIBADD): Remove - unnecessary -lm. - * INSTALL: Remove -lm from instructions. - * demos/Makefile.am (qcn_LDADD): Add -lm. - - * tune/*: Add measuring for mpn_divrem_2 and modlimb_invert, - improve addsub_n. Switch to unified speed_cyclecounter. - * configure.in: Update configs for speed_cyclecounter. - - * gmp-impl.h (MP_LIMB_T_MAX, MP_LIMB_T_HIGHBIT): New macros. - * mpn/generic/diveby3.c, mpn/generic/mul_n.c, mpn/generic/gcd.c, - tune/speed.c, mpn/tests/ref.c: Use them. - - * mpn/tests/spinner.c: Remove setitimer, just alarm is enough. - * configure.in (AC_CHECK_FUNCS): Remove setitimer. - * mpn/tests/x86call.asm: Start with junk in %eax, %ecx, %edx. - * mpn/tests/ref.[ch] (refmpn_addsub_nc): New function. - * mpn/tests/try.c: Add some support for mpn_addsub_nc. - * mpn/tests/Makefile.am (EXTRA_PROGRAMS): Remove addsub_n and - addsub_n_2 which don't currently build. - * mpn/tests/copy.c: Test MPN_COPY_INCR, not __gmpn_copy. - - * tests/rand/Makefile.am (libstat_la_LIBADD): Add -lm, no longer on - libgmp.la. - (findlc_LDADD): Use libstat.la. - (AUTOMAKE_OPTIONS): Use ansi2knr. - -2000-06-08 Torbjorn Granlund <tege@swox.com> - - * configure.in (alpha*-*-osf*): Default `flavour' to ev6 for ev6 and - higher. - (alpha*-*-*): Likewise. - (alpha*-*-osf*: gmp_optcflags_cc): Move -arch/-tune flags from - gmp_xoptcflags_gcc. - - * mpn/Makefile.am (TARG_DIST): Add pa64w. - - * longlong.h: Wrap 64-bit hppa code in #ifndef LONGLONG_STANDALONE. - -2000-06-07 Torbjorn Granlund <tege@swox.com> - - * mpz/remove.c: Fail for `src' being zero. - - * mpz/tests/reuse.c: Test more functions. - (FAIL): New define. - - * mpz/tests/t-powm.c: Loop during operand generation while they - are mathematically ill-defined (used to just skip such tests). - - * mpz/powm.c (mpz_redc): Clean up argument declarations. - - * configure.in (gmp_cflags64_gcc): Don't add bogus -mWHAT option. - (sparcv9-*-solaris2.[7-9]], gmp_cflags64_gcc): - Inherit from previous gmp_cflags64_gcc; pass `-m64 -mptr64'. - (ia64*-*-*): New. - - * mpn/generic/dump.c: Make it work when an mp_limb_t is not `long'. - - * mpf/set_prc.c: MPN_COPY => MPN_COPY_INCR. - -2000-06-06 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_n.c (mpn_toom3_mul_n, mpn_toom3_sqr_n): - Use mpn_incr_u for final carry propagation. - - * mpz/tests/t-gcd.c: Add calls to mpz_gcdext with argument t == NULL. - - * mpz/tests/reuse.c: Major rewrite; test many more functions. - - * mpz/powm_ui.c: When exp is 0, change res assign order in order - to handle argument overlap. - * mpz/powm.c: When exp is 0, change res assign order in order - to handle argument overlap. Handle negative exp and mod arguments. - - * mpz/gcdext.c: Rework code after mpn_gcdext call to handle - argument overlap. - - * mpz/fdiv_qr.c: Read dividend->_mp_size before calling mpz_tdiv_qr - in order to handle argument overlap. - * mpz/cdiv_qr.c: Likewise. - - * mpf/tests/reuse.c: Fix typo that effectively disabled `dis_funcs' - tests. Clean up test for mpf_ui_div. - -2000-06-06 Kevin Ryde <kevin@swox.se> - - * mpn/x86/p6/sqr_basecase.asm: New file. - * mpn/x86/mod_1.asm: Avoid one conditional jump. - * mpn/x86/p6/gmp-mparam.h: Update thresholds, #ifndef UMUL_TIME - and UDIV_TIME, add COUNT_TRAILING_ZEROS_TIME. - - * mp_minv_tab.c: New file. - * Makefile.am (libgmp_la_SOURCES, libmp_la_SOURCES): Add it. - * gmp-impl.h (modlimb_invert): New macro. - * mpz/powm.c: Remove mpz_dmprepare, use modlimb_invert instead. - * mpn/generic/bdivmod.c: Use modlimb_invert instead of a loop. - * mpn/generic/gcd.c: Inline two small mpn_bdivmod calls, use - MPN_COPY_INCR not MPN_COPY in one place. - -2000-06-05 Torbjorn Granlund <tege@swox.com> - - * mpf/tests/reuse.c (dsi_funcs): Add mpf_mul_2exp and mpf_div_2exp. - (main): Clean up test for mpf_div_ui. - - * mpf/mul_2exp.c: Correct criterion for whether to use mpn_lshift or - mpn_rshift. MPN_COPY => MPN_COPY_INCR. Coerce the two assignments to - r->_mp_size. - - * mpf/div_2exp.c: Use mpn_rshift instead of mpn_lshift when overlap - so requires. MPN_COPY => MPN_COPY_INCR. - - * mpf/tests/t-dm2exp.c: Correct type of res_prec. - -2000-06-04 Kevin Ryde <kevin@swox.se> - - * mpz/bin_uiui.c: Fix result for n==0 and n==k. - * mpz/bin_ui.c: Fix result for k>n, add support for n<0. - * gmp.texi (Number Theoretic Functions): Update mpz_bin_ui to - note n<0 is supported. - - * mpz/tests/t-misc.c: New file. - * mpz/tests/Makefile.am (check_PROGRAMS): Add it. - -2000-05-31 Kevin Ryde <kevin@swox.se> - - * tune/speed.* (FLAG_R_OPTIONAL): New option for routines, use on - mpn_gcd_1 and mpn_mul_basecase. - * tune/README: Update. - - * tune/alpha.asm: New file, by Torbjorn. - * tune/Makefile.am (EXTRA_DIST): Add it. - * configure.in (alpha*-*-*): Use it. - -2000-05-31 Linus Nordberg <linus@swox.se> - - * doc/configuration: New file. - -2000-05-30 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_basecase.c: Call mpn_mul_2 and mpn_addmul_2 - if available. Don't include longlong.h. - - * doc/isa_abi_headache: New file. - -2000-05-30 Linus Nordberg <linus@swox.se> - - * configure.in (NM): Use AC_PROG_NM rather than AC_CHECK_TOOL to - find `nm'. (AC_PROG_NM comes with Libtool and is needed to get - the `-B' option (BSD compatible output) included in $NM.) - (AR): Use AC_CHECK_PROG rather than AC_CHECK_TOOL to find `ar'. - (Now that NM isn't a cross compilation tool, don't give the - impression that we know how to cross compile.) - (CCAS): Remove spurious comment. - - * gmp.texi (Notes for Particular Systems): Remove comment about - using GNU `nm' on AIX since system nm now works. - -2000-05-29 Torbjorn Granlund <tege@swox.com> - - * mpn/power/mul_1.s: Remove [PR] from first word in function - descriptor. - * mpn/power/addmul_1.s: Likewise. - * mpn/power/submul_1.s: Likewise. - -2000-05-28 Kevin Ryde <kevin@swox.se> - - * configure.in, tune/*: Change pentium rdtsc cycle scheme to - HAVE_SPEED_CYCLECOUNTER and SPEED_CYCLECOUNTER_OBJS. - * tune/pentium.asm: Renamed and converted from rdtsc.asm. - * tune/sparcv9.asm: New file, by Torbjorn. - * tune/sparc64.asm: New file. - * tune/tuneup.c: Put a limit on gcdext search. - - * gmp.h (mp_set_memory_functions): Add extern "C". - * mp.h (__GNU_MP__): Bump to "3". - * mpz/add.c,mul.c,powm.c,sub.c,sqrtrem.c,tdiv_qr.c [BERKELEY_MP]: - Include mp.h for mpbsd compile. - * mpz/gcd.c: Ditto, and remove _mpz_realloc declaration. - - * gmp.texi (Integer Functions): Flatten @subsections into @sections. - (Floating-point Functions): Ditto. - (Integer Random Numbers): Split from miscellaneous as a sep section. - (Installing GMP): Make nodes for the sections. - Add more "@cindex"s. - (Known Build Problems): Remove SunOS get_d problem, believed fixed. - (Notes for Particular Systems): Remove HPPA note since now PIC. - (References): URL for Jebelean. - -2000-05-27 Torbjorn Granlund <tege@swox.com> - - * mpn/pa64w: New directory, contents based on corresponding mpn/pa64 - files. - * configure.in (hppa2.0w-*-*): New. - * mpz/tests/io.c (_INCLUDE_POSIX_SOURCE): Define when __hpux before - including stdio.h. - * gmp-impl.h: Always define DItype and UDItype. - -2000-05-27 Kevin Ryde <kevin@swox.se> - - * tune/common.c (speed_measure): Correction to array sorting, - better diagnostic when measuring fails. - * tune/time.c: Add microsecond accurate getrusage method. - - * tune/time.c (speed_cpu_frequency_processor_info): New function. - * configure.in (AC_CHECK_FUNCS): Add processor_info. - -2000-05-26 Linus Nordberg <linus@swox.se> - - * gmp.texi (Installing GMP): Shared libraries work for AIX < 4.3 - if using GNU nm. - -2000-05-26 Torbjorn Granlund <tege@swox.com> - - * tune/tuneup.c (SIGNED_TYPE_MAX): Shift `-1' instead of `1' to - avoid signed overflow. - - * demos/pexpr.c (setup_error_handler): Don't call sigaltstack on - Unicos. - -2000-05-25 Torbjorn Granlund <tege@swox.com> - - * insert-dbl.c: Work around GCC 2.8 bug. - * extract-dbl.c: Likewise. - - * config.sub: Allow i586, i686, i786 again. - - * config.guess: Use X86CPU for lots more systems. - -2000-05-25 Linus Nordberg <linus@swox.se> - - * mpbsd/tests/dummy.c (main): Call exit() instead of doing return - (some old SysV machines don't get this correct, I've heard.) - -2000-05-25 Kevin Ryde <kevin@swox.se> - - * mpf/iset_str.c: Initialize _mp_size and _mp_exp to 0, in case no - digits in string, so it's the same as a separate init and set_str. - -2000-05-24 Torbjorn Granlund <tege@swox.com> - - * mpz/tests/reuse.c: Use mpz_random2 instead of mpz_random. - - * mpz/divexact.c: Read pointers after reallocation. - Compare `quot' and `den' instead of `qp' and `dp' in overlap check. - Use MPN_COPY_INCR for copying from `np'. - - (*-*-aix4.[3-9]*): Disable shared libs just for problematic AIX - versions. - * configure.in (*-cray-unicos*): Disable asm syntax checking; set - compiler explicitly. - * configure.in (hppa*-*-*): Remove code disabling shared libs. - -2000-05-24 Linus Nordberg <linus@swox.se> - - * acinclude.m4 (GMP_PROG_CC_WORKS): Don't report progress to user - when doing the AIX specific test to avoid "nested output". - -2000-05-22 Kevin Ryde <kevin@swox.se> - - * mp.h (_PROTO): Copy from gmp.h, use on prototypes. - Add extern "C" too. - * mpbsd/tests/Makefile.am (AUTOMAKE_OPTIONS): Enable ansi2knr. - * mpbsd/tests/allfuns.c: Don't execute mout, just link to it. - (main): ANSI style definition. - - * gmp-impl.h (MP_BASE_AS_DOUBLE): Change the expression to - something that works on SunOS native cc. Seems to fix the - mp*_get_d problems. - - * mpn/tests/ref.c (refmpn_strip_twos): Use MPN_COPY_INCR. - * mpn/tests/Makefile.am: Let .asm.o rules work with absolute $srcdir. - -2000-05-21 Kevin Ryde <kevin@swox.se> - - * mpn/x86/k7/sqr_basecase.asm: Replace file with K7 specific code. - * mpn/x86/k7/README: Update. - * mpn/x86/k7/gmp-mparam.h: Tune thresholds. - (COUNT_TRAILING_ZEROS_TIME): New define. - * mpn/x86/k6/gmp-mparam.h: Ditto. - - * mpn/x86/pentium/mmx/popham.asm: New file (include_mpn of K6 version). - * mpn/x86/p6/diveby3.asm: New file (include_mpn of P5 version). - * mpn/x86/p6/mmx/popham.asm: New file (include_mpn of K6 version). - * mpn/x86/p6/p3mmx/popham.asm: New file (include_mpn of K7 version). - * configure.in (pentium3-*-*): Add p3mmx to $path. - - * gmp.texi (Integer Arithmetic): Clarify mpz_jacobi op2; add - mpz_*_kronecker_*. - (Miscellaneous Integer Functions): Add mpz_odd_p and mpz_even_p. - (Low-level Functions): Put mpn_divmod_1 with mpn_divrem_1 and note - it's now a macro. - (References): Add Henri Cohen. - - * gmp.h (mpn_addmul_1c, mpn_divrem_1c, mpn_mod_1c, mpn_mul_1c, - mpn_submul_1c): Add prototypes. - (mpz_odd_p, mpz_even_p): New macros. - - * mpn/asm-defs.m4 (m4wrap_prepend): New macro. - (m4_error): Use it. - (m4_not_for_expansion): Corrections to OPERATION symbols. - More comments about variations between m4 versions. - * mpn/x86/x86-defs.m4 (PROLOGUE): Use m4wrap_prepend (fixes error - exit under BSD m4, previously m4_error printed the message but the - exit code was 0). - - * gmp.h (mpn_divmod_1): Change to a macro calling mpn_divrem_1. - * mpn/generic/divrem_1.c: Move divmod_1.c code to here, make it - static and call it __gmpn_divmod_1_internal. - * mpn/generic/divmod_1.c: Remove file. - * configure.in (gmp_mpn_functions): Remove divmod_1. - * mpn/asm-defs.m4 (define_mpn): Remove divmod_1 and divmod_1c. - * compat.c (mpn_divmod_1): Add compatibility function. - * tune/*: Remove mpn_divmod_1 measuring (leave just divrem_1). - - * acconfig.h (HAVE_NATIVE_mpn_*): Add some missing carry-in - variants, remove divmod_1. - - * mpn/x86/diveby3.asm: Use imul, update comments. - - * demos/qcn.c: New file. - * demos/Makefile.am (EXTRA_PROGRAMS): Add it. - - * mpz/tests/t-jac.c: New file. - * mpz/tests/Makefile.am (check_PROGRAMS): Add it. Enable ansi2knr. - - * mpz/kronsz.c: New file. - * mpz/kronuz.c: New file. - * mpz/kronzs.c: New file. - * mpz/kronzu.c: New file. - * mpz/Makefile.am (libmpz_la_SOURCES): Add them. - * Makefile.am (MPZ_OBJECTS): Add them. - * gmp-impl.h (JACOBI_*, MPN_STRIP_LOW_ZEROS_NOT_ZERO): New macros. - * gmp.h (mpz_*_kronecker_*): New defines and prototypes. - - * mpn/generic/jacbase.c: New file. - * mpn/generic/mod_1_rs.c: New file. - * configure.in (gmp_mpn_functions): Add them. - * gmp.h (mpn_jacobi_base, mpn_mod_1_rshift): New defines and - prototypes. - * longlong.h (COUNT_TRAILING_ZEROS_TIME): New define. - * mpn/tests/ref.c (refmpn_mod_1_rshift): New function. - * mpn/tests/try.c: Add mpn_mod_1_rshift. - * tune/*: Add measuring for mpn_jacobi_base. - - * acinclude.m4 (GMP_FINISH): Add ifdefs to allow multiple - inclusion of config.m4. - (GMP_PROG_M4): Put "good" message through to config.log. - - * mpz/powm.c: Use a POWM_THRESHOLD for where redc stops. - * tune/*: Add mpz_powm measuring, and tune POWM_THRESHOLD. - * gmp-impl.h [TUNE_PROGRAM_BUILD] (POWM_THRESHOLD): Conditional - redefinition for use when tuning. - - * mpz/powm_ui.c: Use DIVIDE_BY_ZERO. - - * mpz/iset_str.c: Initialize _mp_size to 0, in case no digits in - string; this makes it the same as a separate init and set_str. - -2000-05-20 Kevin Ryde <kevin@swox.se> - - * mpn/asm-defs.m4: Note &,|,^ aren't bitwise in BSD m4 eval(). - * mpn/x86/k6/sqr_basecase.asm: Use "%" not "&" in m4 eval()s. - - * mpn/x86/x86-defs.m4 (Zdisp): Yet more instruction forms. - -2000-05-19 Linus Nordberg <linus@swox.se> - - * acinclude.m4 (GMP_CHECK_CC_64BIT): Don't use shell variable - `ac_compile' for our own compile command string since other - Autoconf macros may depend on it. - -2000-05-19 Kevin Ryde <kevin@swox.se> - - * mpn/generic/mul_n.c (mpn_toom3_mul_n, mpn_toom3_sqr_n): Fix - carry propagation in final coefficient additions. - -2000-05-18 Linus Nordberg <linus@swox.se> - - * configure.in: Set NM before looking for compiler since - GMP_CHECK_CC_64BIT needs it. - - * acinclude.m4 (GMP_CHECK_CC_64BIT): Don't execute on target. - (GMP_PROG_CC_FIND): Before checking if the compiler knows how to - produce 64-bit code, verify that it works at all. The background - is that /usr/ucb/cc on Solaris 7 successfully compiles in 64-bit - mode but fails when doing final link. - (GMP_PROG_CC_WORKS): Report to user what's happening. - -2000-05-17 Linus Nordberg <linus@swox.se> - - * config.guess: Use X86CPU for x86 Cygwin. - -2000-05-16 Kevin Ryde <kevin@swox.se> - - * mpn/x86/p6/mmx/divrem_1.asm: New file. - * mpn/x86/p6/mmx/mod_1.asm: New file. - * mpn/x86/p6/README: Update. - * mpn/x86/divrem_1.asm: Update comments. - * mpn/x86/mod_1.asm: Ditto. - -2000-05-14 Kevin Ryde <kevin@swox.se> - - * tune/speed.h: Run gcd functions on a set of data. - - * mpn/tests/try.c: New file. - * mpn/tests/try.h: New file. - * mpn/tests/spinner.c: New file. - * mpn/tests/trace.c: New file. - * mpn/tests/x86call.asm: New file. - * mpn/tests/x86check.c: New file. - * mpn/tests/ref.c (refmpn_hamdist): Allow size==0. - (refmpn_gcd): New function, and other additions supporting it. - * mpn/tests/ref.h: More prototypes. - * mpn/tests/Makefile.am: Add try program, use ansi2knr. - - * mpn/x86/k7/mmx/popham.asm: New file. - * mpn/x86/k6/mmx/popham.asm: New file. - * mpn/x86/k6/sqr_basecase.asm: Unroll the addmul, for approx 1.3x - speedup above 15 limbs. - * mpn/x86/k7/README: Update. - * mpn/x86/k6/README: Update, and add notes on plain K6 and pre-CXT - K6-2 problems. - * configure.in (k6*-*-*, athlon-*-*): Add popham. - - * mpn/x86/pentium/diveby3.asm: New file. - * mpn/x86/pentium/README: Update. - - * gmp.texi (Installing GMP): Add note on bad OpenBSD 2.6 m4. - (Reporting Bugs): Ask for config.m4 if asm file related. - (I/O of Rationals): New section, add mpq_out_str. - (References): Add url for on-line gcc manuals. - A few node and menu updates. - - * INSTALL: Better command line argument checking for test progs. - Change MP -> GMP. - - * configure.in (WANT_ASSERT, USE_STACK_ALLOC, HAVE_PENTIUM_RDTSC): - Put descriptions here, not in acconfig.h. - (CALLING_CONVENTIONS_OBJS): New AC_SUBST (for mpn/tests/try). - (HAVE_CALLING_CONVENTIONS): New AC_DEFINE. - (AC_CHECK_HEADERS): Add sys/time.h. - (AC_CHECK_FUNCS): Add getpagesize, setitimer. - (KARATSUBA_SQR_THRESHOLD): Strip trailing comments from the - #define when passing through to config.m4. - * acconfig.h (PACKAGE, VERSION, WANT_ASSERT, USE_STACK_ALLOC, - HAVE_PENTIUM_RDTSC): No need for #undefs, autoheader gets them - from configure.in. - - * acinclude.m4 (GMP_PROG_M4): Check for broken OpenBSD 2.6 m4 - eval(), put messages into config.log. - * mpn/asm-defs.m4: Add notes and test for OpenBSD 2.6 m4. - - * mpq/out_str.c: New file. - * mpq/Makefile.am (libmpq_la_SOURCES): Add it. - * Makefile.am (MPQ_OBJECTS): Ditto. - * gmp.h (mpq_out_str): New define and prototype. - -2000-05-12 Kevin Ryde <kevin@swox.se> - - * configure.in (CONFIG_TOP_SRCDIR): Fix to use $srcdir not - $top_srcdir (which doesn't exist). - * acinclude.m4 (GMP_C_ANSI2KNR): Fix setting U=_. - * gmp-impl.h (mpn_com_n, MPN_LOGOPS_N_INLINE): Fix missing "do" - (not currently used, probably no ill effect anyway). - -2000-05-11 Torbjorn Granlund <tege@swox.com> - - * randraw.c (lc): Major overhaul (pending rewrite). - (_gmp_rand): Rewrite. - -2000-05-08 Torbjorn Granlund <tege@swox.com> - - * mpz/tests/convert.c: Call free via _mp_free_func. - * mpf/tests/t-conv.c: Likewise. - - * memory.c: Add code enabled for DEBUG that adds special patterns - around allocated blocks. - -2000-05-05 Linus Nordberg <linus@swox.se> - - * gmp.texi (Miscellaneous Float Functions): Correct parameter list - for mpf_urandomb(). - - * configure.in: Invoke AC_REVISION. - -2000-05-05 Kevin Ryde <kevin@swox.se> - - * gmp.texi: Use @dircategory and @direntry. - (Installing GMP): Clarification for --target, updates on SunOS - problems. - (Integer Arithmetic): Add mpz_mul_si. - (Initializing Rationals): Add mpq_swap. - (Assigning Floats): Add mpf_swap. - (Low-level Functions): Add mpn_divexact_by3c, and details of what - the calculation actually gives. - (Low-level Functions): Note extra space needed by mpn_gcdext, - clarify the details a bit. - - * compat.c: New file, entry points for upward binary compatibility. - (mpn_divexact_by3): Compatibility function. - * Makefile.am (libgmp_la_SOURCES): Add compat.c. - - * mpn/tests/ref.c: Rearrange macros for ansi2knr. - (div1): Renamed from div to avoid library function. - (refmpn_divexact_by3c, refmpn_gcd_1, refmpn_popcount, - refmpn_hamdist): New functions. - * mpn/tests/ref.h: Add extern "C", add new prototypes. - - * gmp.h (gmp_randinit, etc): Add extern "C". - (_mpq_cmp_ui): Fix prototype name from mpq_cmp_ui. - (mpn_divexact_by3): Now a macro calling mpn_divexact_by3c. - (mpn_divexact_by3c): New prototype and define. - - * mpn/x86/diveby3.asm: Change to mpn_divexact_by3c. - * mpn/x86/k6/diveby3.asm: Ditto. - * mpn/generic/diveby3.c: Ditto. - * mpn/asm-defs.m4: Ditto on the define_mpn. - * acconfig.h (HAVE_NATIVE_mpn_divexact_by3c): New define. - - * mpq/swap.c: New file, derived from mpz/swap.c. - * mpf/swap.c: Ditto. - * mpq/Makefile.am: Add swap.c. - * mpf/Makefile.am: Ditto. - * Makefile.am: Add two new "swap.lo"s. - - * mpn/x86/k6/mmx/com_n.asm: Fix an addressing bug (fortunately - this code hasn't been used anywhere yet). - - * mpn/x86/k7/mmx/divrem_1.asm: New file. - * mpn/x86/k7/mmx/mod_1.asm: New file. - * mpn/x86/k7/diveby3.asm: New file. - * mpn/x86/k7/README: Update. - - * mpn/x86/k7/aorsmul_1.asm: Use new cmovCC, no object code change. - * mpn/x86/k7/mul_basecase.asm: Ditto. - * mpn/x86/p6/aorsmul_1.asm: Ditto. - - * mpn/x86/x86-defs.m4 (defframe_empty_if_zero): Eval the argument. - (cmovCC): New macros, replacing individual cmovCC_reg_reg forms. - (Zdisp): Recognise more instructions. - (shldl,etc): Use m4_instruction_wrapper(). - (ASSERT, movl_text_address): New macros. - - * mpn/asm-defs.m4: Add remarks on SunOS /usr/bin/m4 and new - OpenBSD m4. - (m4_assert_numargs_internal_check): Remove a spurious parameter. - (m4_empty_if_zero): Eval the argument. - (m4_assert, m4_assert_numargs_range, m4_config_gmp_mparam, - m4_instruction_wrapper): New macros. - -2000-05-04 Linus Nordberg <linus@swox.se> - - * gmp.texi (Reporting Bugs): Be explicit about output from running - a command. - -2000-05-02 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/bz_divrem_n.c (mpn_bz_divrem_n): Handle non-zero return - from first mpn_bz_div_3_halves_by_2 call. - (mpn_bz_divrem_aux): Likewise. - -2000-04-30 Kevin Ryde <kevin@swox.se> - - * tune/* (GCD_ACCEL_THRESHOLD, GCDEXT_THRESHOLD): Tune these. - - * mpn/generic/gcdext.c (GCDEXT_THRESHOLD): Rename from THRESHOLD, - use with >=, adjust default to 17 accordingly. - Use new *_SWAP macros. - - * mpn/generic/gcd.c (GCD_ACCEL_THRESHOLD): Rename from - ACCEL_THRESHOLD, use with >=, adjust default to 5 accordingly. - Use new *_SWAP macros. - - * mpf/get_str.c, mpf/set_str.c, mpf/sub.c, mpz/add.c, mpz/ior.c, - mpz/and.c, mpz/sub.c, mpz/xor.c, mpz/ui_pow_ui.c, - mpn/generic/mul.c: Use new *_SWAP macros. - - * stack-alloc.h: Add extern "C" around prototypes. - - * gmp-impl.h: (MP_PTR_SWAP, etc): New macros. - (_mp_allocate_func, etc): Use _PROTO. - [TUNE_PROGRAM_BUILD]: More changes in tune program build part. - -2000-04-28 Torbjorn Granlund <tege@swox.com> - - * mpn/pa64/add_n.s: Add `,entry' to export directive. - * mpn/pa64/addmul_1.S, mpn/pa64/lshift.s, mpn/pa64/mul_1.S, - mpn/pa64/rshift.s, mpn/pa64/sub_n.s, mpn/pa64/submul_1.S, - mpn/pa64/umul_ppmm.S: Likewise. - * mpn/hppa/hppa1_1/udiv_qrnnd.S: New name for udiv_qrnnd.s. - Add PIC support. - -2000-04-29 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h [TUNE_PROGRAM_BUILD] (TOOM3_MUL_THRESHOLD_LIMIT): New - define. - * mpn/generic/mul_n.c [TUNE_PROGRAM_BUILD] (mpn_mul_n): Use - TOOM3_MUL_THRESHOLD_LIMIT, not a hard coded 500. - - * memory.c: Use <stdlib.h> for malloc etc, and use _PROTO. - * stack-alloc.c: Don't use C++ reserved word "this". - * urandom.h: Put extern "C" around prototypes. - * mpz/powm.c: Switch a couple of parameters to "const", which they - are, to satisfy g++. - - * randraw.c, stack-alloc.c, mpbsd/mout.c, mpbsd/mtox.c: Add casts to - help g++. - - * stack-alloc.c: Provide dual ANSI/K&R function definitions. - * mpz/addmul_ui.c,get_d.c,inp_str.c,perfpow.c,powm.c,pprime_p.c, - rrandomb.c,set_str.c,ui_pow_ui.c: Ditto. - * mpf/integer.c,set_str.c: Ditto. - * mpbsd/min.c,xtom.c: Ditto. - * mpn/generic/bz_divrem_n.c,dump.c,gcd_1.c,get_str.c,hamdist.c, - popcount.c,random.c,random2.c,set_str.c: Ditto. - - * rand.c: Use <stdio.h> for NULL. - * mpz/gcd_ui.c,gcdext.c,mul.c,perfpow.c,powm_ui.c,root.c,sqrt.c, - sqrtrem.c: Ditto - * mpf/sqrt.c,sqrt_ui.c: Ditto. - * mpn/generic/perfsqr.c,sqrtrem.c: Ditto. - - * gmp-impl.h (NULL, malloc, realloc, free): Don't define/declare. - (extern "C"): Add around function prototypes. - (mpn_kara_mul_n, mpn_kara_sqr_n, mpn_toom3_mul_n, mpn_toom3_sqr_n): - Add prototypes. - [TUNE_PROGRAM_BUILD] (FIB_THRESHOLD): Add necessary redefinitions for - use by tune program. - * mpn/generic/mul_n.c: Remove mpn_toom3_mul_n prototype. - - * acinclude.m4 (GMP_C_ANSI2KNR): New macro. - (GMP_CHECK_ASM_MMX, GMP_CHECK_ASM_SHLDL_CL): Fix to use - $gmp_cv_check_asm_text which is what GMP_CHECK_ASM_TEXT sets. - * configure.in (GMP_C_ANSI2KNR): Use this instead of AM_C_PROTOTYPES, - for reasons described with its definition. - - * demos/Makefile.am (ansi2knr): Use $(top_builddir) nor $(top_srcdir). - - * mpz/fib_ui.c (FIB_THRESHOLD): Rename from FIB_THRES, for consistency. - (FIB_THRESHOLD): Conditionalize so gmp-mparam.h can define a value. - (mpz_fib_bigcase): Use >= FIB_THRESHOLD, same as main mpz_fib_ui. - * tune/tuneup.c,Makefile.am (FIB_THRESHOLD): Tune this. - - * configure.in (*-*-aix* gmp_m4postinc): Fix setting (don't overwrite - a value just stored). - -2000-04-26 Kevin Ryde <kevin@swox.se> - - * mpn/sparc32/udiv_fp.asm: Use mpn_udiv_qrnnd macro. - * mpn/sparc32/udiv_nfp.asm: Ditto. - * mpn/sparc32/v8/supersparc/udiv.asm: Ditto. - * mpn/sparc32/umul.asm: Name the function mpn_umul_ppmm. - * mpn/sparc32/v8/umul.asm: Ditto. - * mpn/powerpc32/umul.asm: Ditto. - - * mpn/x86/syntax.h: Remove file, since now unused. - - * configure.in (x86): Remove -DBROKEN_ALIGN and -DOLD_GAS - previously used by .S files. - (x86 extra_functions): Add udiv and umul. - (GMP_PROG_M4): Use this instead of AC_CHECK_PROG(M4,m4,...) - (HAVE_NATIVE_*): Loosen up the regexp to "PROLOGUE.*" so as to - accept PROLOGUE_GP on alpha. - - * acconfig.h (HAVE_NATIVE_mpn_umul_ppmm, udiv_qrnnd, invert_limb): - New template defines. - * mpn/asm-defs.m4 (mpn_umul_ppmm, mpn_udiv_qrnnd): New define_mpn()s. - * longlong.h (umul_ppmm, udiv_qrnnd): Use a library version if - it's available and an asm macro isn't. - * gmp-impl.h (invert_limb): Ditto. - - * gmp-impl.h (ASSERT_NOREALLOC): Not a good idea, remove it. - - * acinclude.m4 (GMP_PROG_M4): New macro. - -2000-04-25 Linus Nordberg <linus@swox.se> - - * gmp.texi (Random State Initialization): Correct arguments to - `gmp_randinit'. - - * acinclude.m4 (GMP_VERSION): Change `eval' --> `m4_eval'. Fix - from Kevin. - * aclocal.m4: Regenerate. - -2000-04-25 Kevin Ryde <kevin@swox.se> - - * mpn/x86/aors_n.asm: Remove parentheses around an immediate that - Solaris "as" doesn't like, change by Torbjorn. - -2000-04-24 Kevin Ryde <kevin@swox.se> - - * configure.in (AC_CHECK_FUNCS): Add strtoul. - - * mpn/generic/mul_n.c [TUNE_PROGRAM_BUILD] (mpn_mul_n): Bigger - array for karatsuba temporary space for tune program build. - (mpn_toom3_sqr_n) Remove an unused variable. - - * demos/Makefile.am (AUTOMAKE_OPTIONS): Add ansi2knr. - Add "allprogs:" pseudo-target. - * demos/factorize.c, demos/isprime.c: Switch to ANSI functions, - rely on ansi2knr. - - * gmp.texi (Getting the Latest Version of GMP): Add reference to - ftp.gnu.org mirrors list. - * INSTALL: Add arg count check to example programs. - - * mpn/x86/*/*.asm: Convert to FORTRAN ... or rather to - FORTRAN-style "C" commenting to support Solaris "as". - * mpn/x86/x86-defs.m4: Ditto, and add another Zdisp insn. - * mpn/asm-defs.m4 (C): Update comments. - * mpn/x86/README.family: Add a note on commenting, remove - description of .S files. - - * mpn/sparc64/addmul_1.asm, mul_1.asm, submul_1.asm: Use - include_mpn(). - -2000-04-23 Torbjorn Granlund <tege@swox.com> - - * config.sub: Merge with FSF version of April 23. - - * mpn/powerpc32: Use dnl/C instead of `#' for comments. - - * config.guess: Get "model" limit between pentium 2 and pentium3 right. - Get rid of code determining `_' prefix; use double labels instead. - * config.guess: Partially merge with FSF version of April 22. - (Don't bring over NetBSD changes for now.) - -2000-04-23 Kevin Ryde <kevin@swox.se> - - * tune/Makefile.am, tune/README, tune/common.c, tune/rdtsc.asm, - tune/speed.c, tune/speed.h, tune/time.c, tune/tuneup.c: New files. - * tune/Makefile.in: New file, generated from Makefile.am. - - * gmp-impl.h (ASSERT_NOREALLOC,TMP_ALLOC_LIMBS): New macros. - [TUNE_PROGRAM_BUILD] Further mods for tune program builds. - - * mpz/Makefile.am: Add -DOPERATION_$* for new mul_siui.c. - Add rules to build mul_si and mul_ui from a common mul_siui.c. - * mpz/mul_siui.c: New file, derived from and replacing mul_ui.c. - * gmp.h (mpz_mul_si): New prototype and define. - - * mpn/tests/*.c [__i386__] (CLOCK): Don't use floating point in - CLOCK because cpp can't handle floats in #if's (TIMES is derived - from CLOCK by default). - - * mpn/asm-defs.m4 (include_mpn): New macro. - (m4_assert_numargs) Changes to implementation. - - * mpf/Makefile.am: Add -DOPERATION_$* for new integer.c. - Remove explicit rules for floor.o etc. - * mpf/integer.c: Use OPERATION_$* for floor/ceil/trunc. - - * mpn/Makefile.am: Put "tests" in SUBDIRS. - * mpn/tests/Makefile.am: New file providing rules to build test - programs, nothing done in a "make all" or "make check" though. - * mpn/tests/README: New file. - - * acconfig.h (HAVE_PENTIUM_RDTSC): New define. - - * configure.in (x86): Rearrange target cases. - Add mulfunc aors_n and aorsmul_1 for x86 and pentium (now all x86s). - Remove asm-syntax.h generation not needed. - Remove now unused family=x86. - (sparc) Remove unused family=sparc. - (HAVE_PENTIUM_RDTSC) New AC_DEFINE and AM_CONDITIONAL. - (AM_C_PROTOTYPES) New test, supporting ansi2knr. - (AC_CHECK_HEADERS) Add getopt.h, unistd.h and sys/sysctl.h for - tune progs. - (AC_CHECK_FUNCS) Add getopt_long, sysconf and sysctlbyname for - tune progs. - (config.m4 CONFIG_TOP_SRCDIR) Renamed from CONFIG_SRCDIR. - (config.m4 asm-defs.m4) Use CONFIG_TOP_SRCDIR and include(). - (gmp_m4postinc) Use include_mpn(). - (gmp_links) Omit asm-defs.m4/asm.m4 and gmp_m4postinc's. - (MULFUNC_PROLOGUE) Fix regexps so all functions get AC_DEFINE'd. - (PROLOGUE) Ditto (native copyi and copyd were unused in gmp 3). - (KARATSUBA_SQR_THRESHOLD) Copy from gmp-mparam.h into config.m4. - (AC_OUTPUT) Add tune/Makefile, mpn/tests/Makefile. - - * Makefile.am (AUTOMAKE_OPTIONS): Add ansi2knr. - (SUBDIRS): Add tune, reorder directories. - (MPZ_OBJECTS): Add mpz/mul_si.lo. - (libmp_la_SOURCES): Use this for top-level objects, not .lo's. - * ansi2knr.c, ansi2knr.1: New files, provided by automake. - - * mpn/x86/aors_n.asm: Convert add_n.S and sub_n.S to a - multi-function aors_n.asm, no object code change. - * mpn/x86/pentium/aors_n.asm: Ditto. - * mpn/x86/aorsmul_1.asm: Ditto for addmul/submul. - * mpn/x86/pentium/aorsmul_1.asm: Ditto. - - * mpn/x86/lshift.asm, mpn/x86/mul_1.asm, mpn/x86/mul_basecase.asm, - mpn/x86/rshift.asm: Convert from .S, no object code change. - * mpn/x86/pentium/lshift.asm, mpn/x86/pentium/mul_1.asm, - mpn/x86/pentium/mul_basecase.asm, mpn/x86/pentium/rshift.asm: Ditto. - - * gmp.texi (Reporting Bugs): Itemize the list of things to include. - (Miscellaneous Float Functions): Correct typo in mpf_ceil etc - argument types. - Change @ifinfo -> @ifnottex for benefit of makeinfo --html. - Remove unnecessary @iftex's around @tex. - -2000-04-22 Torbjorn Granlund <tege@swox.com> - - * config.guess: Generalize x86 cpu determination code. - Now works on Solaris. - - * mpz/nextprime.c: Rewrite still disabled code. - - * configure.in: Specifically match freebsd[3-9]. - -2000-04-21 Torbjorn Granlund <tege@swox.com> - - * rand.c: Call mpz_clear for otherwise leaking mpz_t. - - * mpz/pprime_p.c (mpz_probab_prime_p): Merge handling of negative - n into code for handling small positive n. Merge variables m and n. - After dividing, simply call mpz_millerrabin. - (isprime): Local variables now use attribute `long'. - (mpz_millerrabin): New static function, based on code from - mpz_probab_prime_p. - (millerrabin): Now simple workhorse for mpz_millerrabin. - -2000-04-19 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h: Fix parenthesis error in test for __APPLE_CC__. - -2000-04-18 Linus Nordberg <linus@swox.se> - - * NEWS: Add info about shared libraries. Remove reference to - gmp_randinit_lc. - -2000-04-17 Torbjorn Granlund <tege@swox.com> - - * Version 3.0 released. - - * mpn/arm/add_n.S: New version from Robert Harley. - * mpn/arm/addmul_1.S: Likewise. - * mpn/arm/mul_1.S: Likewise. - * mpn/arm/sub_n.S: Likewise. - - * gmp.h (__GNU_MP_VERSION_PATCHLEVEL): Now 0. - -2000-04-17 Linus Nordberg <linus@swox.se> - - * configure.in (hppa2.0*-*-*): Pass `+O3' to cc/c89 in 64-bit mode - to avoid compiler bug. - (ns32k*-*-*): Fix typo in path. Change by Kevin. - (alpha*-*-osf*): New case. Pass assembly flags for architecture - to gcc. - (alpha*-*-*): Don't bother searching for cc. - * configure: Regenerate. - - * Makefile.am (EXTRA_DIST): Add `macos', `.gdbinit'. - * Makefile.in: Regenerate. - * mpn/Makefile.am (EXTRA_DIST): Add `m88k', `lisp'. - * mpn/Makefile.in: Regenerate. - -2000-04-16 Kevin Ryde <kevin@swox.se> - - * README: Updates, and don't duplicate the example in INSTALL. - * INSTALL: Minor updates. - * gmp.texi (Installing MP): Minor edits, restore CC/CFLAGS description. - -2000-04-16 Linus Nordberg <linus@swox.se> - - * configure.in (*-*-cygwin*): Select BSD_SYNTAX to avoid - .type/.size in PROLOGUE for ELF_SYNTAX. Override ALIGN definition - from x86/syntax.h. - (gmp_xoptcflags_${CC}): New set of variables, indicating - ``exclusive optional cflags''. - (most sparcs): Use gmp_xoptcflags instead of gmp_optcflags to - ensure that we pass CPU type to older gcc. - (CFLAGS): CFLAGS on the command line was spoiled. - * configure: Regenerate. - -2000-04-16 Linus Nordberg <linus@swox.se> - - * configure.in: Invoke AC_PROG_LIBTOOL directly. - - * acinclude.m4 (GMP_PROG_CC_FIND): Quote source variable when - setting CC64 and CFLAGS64. - (GMP_PROG_CC_SELECT): Cache result. - (GMP_PROG_LIBTOOL): Remove. - - * aclocal.m4: Regenerate. - * configure: Regenerate. - -2000-04-16 Linus Nordberg <linus@swox.se> - - * tests/rand/t-rand.c (main): Add non-ANSI function declaration. - Don't use `const'. - -2000-04-16 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/dump.c: Suppress output of leading zeros. - - * mpz/inp_str.c: Fix memory leakage. - - * mpz/tests/reuse.c (dss_func_division): Add a final 1. - - * longlong.h (alpha count_leading_zeros): Wrap in __MPN. - * mpn/alpha/cntlz.asm: Use __gmpn prefix (by means of __MPN). - - * longlong.h (__umul_ppmm, __udiv_qrnnd): Wrap in __MPN. - * mpn/alpha/udiv_qrnnd.S: Use __gmpn prefix. - * mpn/hppa/udiv_qrnnd.s: Likewise. - * mpn/hppa/hppa1_1/udiv_qrnnd.s: Likewise. - * mpn/pa64/udiv_qrnnd.c: Likewise (by means of __MPN). - * mpn/pa64/umul_ppmm.S: Likewise. - * mpn/sparc32/udiv_fp.asm: Likewise (by means of MPN). - * mpn/sparc32/udiv_nfp.asm: Likewise (by means of MPN). - * mpn/sparc32/v8/supersparc/udiv.asm: Likewise (by means of MPN). - - * mpn/generic/tdiv_qr.c: Work around gcc 2.7.2.3 i386 register handling - bug. - - * mpn/generic/tdiv_qr.c: Use udiv_qrnnd instead of mpn_divrem_1 - when computing appropriate quotient; mpn_divrem_1 writes too - many quotient limbs. - - * mpn/asm-defs.m4: invert_normalized_limb => invert_limb. - * mpn/alpha/invert_limb.asm: mpn_invert_normalized_limb => - mpn_invert_limb. - * gmp.h: Likewise. - * gmp-impl.h (alpha specific): invert_normalized_limb => invert_limb; - wrap with __MPN. - * longlong.h (alpha udiv_qrnnd): Likewise. - -2000-04-16 Kevin Ryde <kevin@swox.se> - - * gmp.h (mp_set_memory_functions,mp_bits_per_limb,gmp_errno): Add - #defines so the library symbols are __gmp_*. - * errno.c: Include gmp.h. - * gmp-impl.h (_mp_allocate_func,etc): Add #defines to __gmp_*. - (__clz_tab): New #define to __MPN(clz_tab). - * stack-alloc.c (__gmp_allocate_func,etc): Change from _mp_*. - - * Makefile.am (libmp_la_DEPENDENCIES): Add some mpz files needed - for new mpz_powm (pow in libmp). - (EXTRA_DIST): Add projects directory. - - * mpn/*: Change __mpn to __gmpn. - * gmp.h (__MPN): Ditto. - * stack_alloc.c,stack-alloc.h: Change __tmp to __gmp_tmp. - - * mpn/generic/sb_divrem_mn.c (mpn_sb_divrem_mn): Avoid gcc 2.7.2.3 - i386 register handling bug (same as previously in mpn_divrem_classic). - - * mpn/generic/divrem.c: Now contains mpn_divrem, which is not an - internal function, so remove warning comment. - - * gmp.texi (Compatibility with Version 2.0.x): Source level only. - -2000-04-16 Linus Nordberg <linus@swox.se> - - * configure.in (hppa1.0*): Prefer c89 to cc. - * configure: Regenerate. - -2000-04-15 Linus Nordberg <linus@swox.se> - - * configure.in: If `mpn_path' is set by user on configure command - line, use that as path. - * configure: Regenerate. - -2000-04-15 Linus Nordberg <linus@swox.se> - - * configure.in (hppa2.0*): Use path "hppa/hppa1_1 hppa" if no - 64-bit compiler was found. - * configure: Regenerate. - -2000-04-15 Linus Nordberg <linus@swox.se> - - * configure.in: Honor `CC' and `CFLAGS' set by user on configure - command line. - * acinclude.m4: (GMP_PROG_CC_SELECT): Set CFLAGS if not set already. - * aclocal.m4: Regenerate. - * configure: Regenerate. - -2000-04-15 Linus Nordberg <linus@swox.se> - - * acinclude.m4 (GMP_PROG_CC_FIND): Remove debug output. Remove - commented out code. - * aclocal.m4: Regenerate. - * configure: Regenerate. - - * configure.in: Make all `-mcpu' options to gcc optional. - * configure: Regenerate. - - * tests/rand/Makefile.am: Don't do anything for target 'all'. - * tests/rand/Makefile.in: Regenerate. - -2000-04-15 Kevin Ryde <kevin@swox.se> - - * README: Small updates. - * NEWS: Add some things about 3.0. - - * mpz/Makefile.am (EXTRA_DIST): Remove dmincl.c. - - * Makefile.am: Use -version-info on libraries, not -release. - - * mpz/tdiv_qr.c: Add mdiv function header #ifdef BERKELEY_MP. - * mpbsd/Makefile.am: Use mpz/tdiv_qr.c, not mdiv.c. - * Makefile.am (MPBSD_OBJECTS): Change mdiv.lo to tdiv_qr.lo. - (libmp_la_DEPENDENCIES): Add mp_clz_tab.lo. - * mpbsd/mdiv.c: Remove file. - - * config/mt-linux,mt-m68k,mt-m88110,mt-ppc,mt-ppc64-aix,mt-pwr, - mt-sprc8-gcc,mt-sprc9-gcc,mt-supspc-gcc,mt-vax,mt-x86, - mpn/config/mt-pa2hpux,mt-sprc9,t-oldgas,t-ppc-aix,t-pwr-aix: - Remove configure fragments not used since change to autoconf. - - * mpn/generic/bz_divrem_n.c,sb_divrem_mn.c: Add comment that - internal functions are changeable and shouldn't be used directly. - -2000-04-15 Linus Nordberg <linus@swox.se> - - * configure.in: Remove debug output. - * configure: Regenerate. - -2000-04-15 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/tdiv_qr.c: Don't use alloca directly. - - * mpz/tdiv_qr.c: Fix typo. - * mpz/tdiv_r.c: Fix typo. - * mpz/tdiv_q.c: Fix typo. - - * configure.in: Disable -march=pentiumpro due to apparent compiler - problems. - - * mpz/powm.c: Replace with new code from Paul Zimmermann. - - * mpz/tdiv_q.c: Remove debug code. - - * mpn/generic/divrem.c: Remove C++ style `//' commented-out code. - * mpn/generic/sb_divrem_mn.c: Likewise. - -2000-04-14 Torbjorn Granlund <tege@swox.com> - - * mpz/cdiv_q.c: Change temp allocation for new requirements of - mpz_tdiv_qr. - * mpz/fdiv_q.c: Likewise. - - * mpn/sparc64/gmp-mparam.h: Set up parameters for TOOM3. - - * mpz/dmincl.c: Delete file. - * mpz/tdiv_qr.c: Rewrite using mpn_tdiv_qr. - * mpz/tdiv_r.c: Likewise. - * mpz/tdiv_q.c: Likewise. - - * mpn/generic/tdiv_qr.c: New file. - * mpn/generic/bz_divrem_n.c: New file. - * mpn/generic/sb_divrem_mn.c: New file. - - * gmp-impl.h (MPZ_REALLOC): New macro. - (mpn_sb_divrem_mn): Declare. - (mpn_bz_divrem_n): Declare. - (mpn_tdiv_qr): Declare. - - * configure.in (gmp_mpn_functions): Delete divrem_newt and divrem_1n; - add tdiv_qr, bz_divrem_n, and sb_divrem_mn. - * mpn/generic/divrem_newt.c: Delete file. - * mpn/generic/divrem_1n.c: Delete file. - - * gmp.h (mpn_divrem_newton): Remove declaration. - (mpn_divrem_classic): Remove declaration. - - * gmp.h (mpn_divrem): Remove function definition. - * mpn/generic/divrem.c: Replace mpn_divrem_classic with a - mpn_divrem wrapper. - -2000-04-14 Kevin Ryde <kevin@swox.se> - - * mpf/dump.c, mpz/dump.c, mpn/generic/dump.c, - mpn/generic/divrem.c, mpn/generic/divrem_1n.c, - mpn/generic/divrem_2.c, mpn/generic/divrem_newt.c, - mpn/generic/mul.c, mpn/generic/mul_basecase.c, - mpn/generic/mul_n.c, mpn/generic/sqr_basecase.c, - mpn/generic/udiv_w_sdiv.c: Add comment that internal functions are - changeable and shouldn't be used directly. - - * mpq/div.c: Use DIVIDE_BY_ZERO (previously didn't get an - exception on zero divisor). - - * mpf/tests/t-get_d.c, mpz/tests/reuse.c: Add K&R function - definitions. - * mpz/tests/t-2exp.c: Don't use ANSI-ism 2ul. - - * gmp.texi (Installing MP): Build problem notes for GSYM_PREFIX - and ranlib on native SunOS. - Particular systems notes about AIX and HPPA shared libraries - disabled. - (MP Basics): Add that undocumented things shouldn't be used. - (Introduction to MP): Add to CPUs listed. - - * acinclude.m4 (GMP_CHECK_ASM_UNDERSCORE): Don't depend on C - having "void". - -2000-04-13 Linus Nordberg <linus@swox.se> - - * mpn/pa64/udiv_qrnnd.c (__udiv_qrnnd64): Add K&R function - definition. - - * configure.in: Disable shared libraries for hppa*. - (mips-sgi-irix6.*): Fix flags for 64-bit gcc. - (hppa2.0*-*-*): Prefer c89 to cc. - * configure: Regenerate. - - * gmp.h (gmp_randalg_t): Remove comma after last element. - - * tests/rand/t-rand.c: Add copyright notice. - -2000-04-13 Kevin Ryde <kevin@swox.se> - - * mpn/generic/mul_n.c, mpn/generic/gcdext.c, mpz/nextprime.c, - mpz/remove.c, mpz/root.c: Add K&R function definitions. - * mpz/rrandomb.c: Fix typo in K&R part. - * stack-alloc.c: Add K&R style function pointer declarations. - - * mpz/root.c: Use SQRT_OF_NEGATIVE on even roots of negatives. - Use DIVIDE_BY_ZERO on a "zero'th" root. - - * configure: Regenerate with autoconf backpatched to fix --srcdir - absolute path wildcards that bash doesn't like, change by Linus. - - * gmp.texi (Integer Arithmetic): Document mpz_nextprime. - (Miscellaneous Integer Functions): Fix mpz_fits_* formatting. - (Installing MP): Comment-out CC and CFLAGS description. - -2000-04-13 Linus Nordberg <linus@swox.se> - - * rand.c (gmp_randinit): Don't combine va_alist with ordinary - arguments for non STDC. - -2000-04-13 Torbjorn Granlund <tege@swox.com> - - * mpz/nextprime.c: Use proper names of new random types and functions. - - * mpz/rrandomb.c: New file. - * mpz/Makefile.am: List it. - * mpz/Makefile.in: Regenerate. - * Makefile.am: Here too. - * Makefile.in: Regenerate. - * gmp.h: Declare mpz_rrandomb. - -2000-04-12 Linus Nordberg <linus@swox.se> - - * Makefile.am, demos/Makefile.am, mpbsd/Makefile.am, - mpbsd/tests/Makefile.am, mpf/Makefile.am, mpf/tests/Makefile.am, - mpn/Makefile.am, mpq/Makefile.am, mpq/tests/Makefile.am, - mpz/Makefile.am, mpz/tests/Makefile.am, tests/Makefile.am, - tests/rand/Makefile.am (AUTOMAKE_OPTIONS): Add 'no-dependencies'. - - * Makefile.in, demos/Makefile.in, mpbsd/Makefile.in, - mpbsd/tests/Makefile.in, mpf/Makefile.in, mpf/tests/Makefile.in, - mpn/Makefile.in, mpq/Makefile.in, mpq/tests/Makefile.in, - mpz/Makefile.in, mpz/tests/Makefile.in, tests/Makefile.in, - tests/rand/Makefile.in: Regenerate. - -2000-04-12 Linus Nordberg <linus@swox.se> - - * randlc.c (gmp_randinit_lc): Disable function. - * gmp.texi (Random State Initialization): Remove gmp_randinit_lc. - - * acinclude.m4 (GMP_CHECK_CC_64BIT): Compiling an empty main - successfully with `-n32' will have to suffice on irix6. - * aclocal.m4: Regenerate. - - * configure.in (sparc): Don't pass -D_LONG_LONG_LIMB to compiler. - (mips-sgi-irix6.*): Use compiler option `-n32' rather than `-64' - for 64-bit `cc'. Add options for gcc. - * configure: Regenerate. - - * mpf/urandomb.c (mpf_urandomb): Add third parameter 'nbits'. If - 'nbits' doesn't make even limbs, shift up result before - normalizing. - - * gmp.h (mpf_urandomb): Add parameter to prototype. - - * mpf/urandom.c: Rename file to ... - * mpf/urandomb.c: ... this. - * Makefile.am (MPF_OBJECTS): Change urandom.lo --> urandomb.lo. - * Makefile.in: Regenerate. - * mpf/Makefile.am (libmpf_la_SOURCES): Change urandom.c --> urandomb.c. - * mpf/Makefile.in: Regenerate. - - * config.in: Regenerate for HAVE_DECL_OPTARG. - - * randraw.c (_gmp_rand): Fix bug with _LONG_LONG_LIMB. - (lc): Change return type. - Use one temporary storage instead of two. - Handle seed of size 0. - Avoid modulus operation in some cases. - Abort if M is not a power of 2. - Fix bug with 64-bit limbs. - Fix bug with small seed, small A and large M. - - * tests/rand/gen.c (main): Include gmp.h. Remove macros MIN, MAX. Add - option '-q'. Don't demand argument N. Change parameters in call - to mpf_urandomb. - - * tests/rand/t-rand.c: New file for testing random number generation. - - * tests/rand/Makefile.am: Run t-rand for 'make check'. - (test, bigtest): Rename to manual-test, manual-bigtest. - * tests/rand/Makefile.in: Regenerate. - -2000-04-12 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h: Include config.h before TMP_ALLOC, so - --disable-alloca works. - - * mpbsd/Makefile.am: Don't recompile top-level sources here. - * Makefile.am (libmp_la_DEPENDENCIES): Put objects here instead, - add errno.lo and stack-alloc.lo. - - * mpn/asm-defs.m4: Add a test and message for the unsuitable SunOS m4. - * gmp.texi (Installing MP): Update note on SunOS m4 failure. - - * acconfig.h: Add copyright notice using @TOP@. - - * stack-alloc.c: Use _mp_allocate_func, not malloc. - * gmp.texi (Installing MP): Note this under --disable-alloca. - - * gmp.texi (Comparison Functions): mpz_cmp_abs => mpz_cmpabs. - (Integer Arithmetic): mpz_prime_p not yet implemented, comment out. - (Float Arithmetic): mpf_pow_ui now implemented, uncomment-out. - (Miscellaneous Float Functions): Add mpf_ceil, mpf_floor, mpf_trunc. - (Low-level Functions): Add mpn_random2, with mpn_random. - - * mpn/m68k/mc68020/udiv.S: Rename from udiv.s. - * mpn/m68k/mc68020/umul.S: Ditto. - - * mpn/alpha/umul.asm: Rename from umul.s, remove .file and - compiler identifiers. - - * mpn/powerpc32/syntax.h: Removed, no longer used. - - * mpn/a29k/udiv.s: Remove .file and compiler identifiers. - * mpn/a29k/umul.s: Ditto. - - * mpn/tests/ref.c: Use WANT_ASSERT. - * mpn/tests/ref.h: Use _PROTO. - - * mpbsd/configure.in: Removed, no longer required. - - * mpf/div.c: Use DIVIDE_BY_ZERO. - * mpf/div_ui.c: Ditto. - * mpf/ui_div.c: Ditto. - * mpq/inv.c: Ditto. - * mpf/sqrt.c: Use SQRT_OF_NEGATIVE. - * mpz/sqrt.c: Ditto. - * mpz/sqrtrem.c: Ditto. - - * gmp-impl.h (GMP_ERROR,SQRT_OF_NEGATIVE): New macros. - (DIVIDE_BY_ZERO): Use GMP_ERROR. - (__mp_bases): #define to __MPN(mp_bases). - -2000-04-11 Linus Nordberg <linus@swox.se> - - * tests/rand/stat.c (main): Initialize `l1runs' at declaration. - -2000-04-11 Kevin Ryde <kevin@swox.se> - - * mpz/fib_ui.c: Add K&R function definitions. - - * mpbsd/tests/Makefile.am (TESTS): Add a dummy test to avoid a - shell problem with an empty "for tst in $(TESTS) ; ...". - * mpbsd/tests/dummy.c: New file. - -2000-04-10 Torbjorn Granlund <tege@swox.com> - - * mpz/bin_uiui.c: Delete several unused variables. - Add copyright notice. - * mpz/bin_ui.c: Add copyright notice. - - * longlong.h: Declare __count_leading_zeros for alpha. - -2000-04-10 Linus Nordberg <linus@swox.se> - - * rand.c (gmp_randinit): Change parameter list to (rstate, alg, ...). - * gmp.h: Change prototype accordingly. - * mpz/pprime_p.c (millerrabin): Change call accordingly. - - * configure.in: Check for `optarg'. - * configure: Regenerate. - - * mpn/Makefile.am: Remove incorrect comment. - * mpn/Makefile.in: Regenerate. - - * gmp.h: Rename most of the random number functions, structs and some - of the struct members. - * rand.c (gmp_randinit): Likewise. - * randclr.c (gmp_randclear): Likewise. - * randlc.c (gmp_randinit_lc): Likewise. - * randlc2x.c (gmp_randinit_lc_2exp): Likewise. - * randraw.c (lc): Likewise. - (_gmp_rand_getraw): Likewise. - * randsd.c (gmp_randseed): Likewise. - * randsdui.c (gmp_randseed_ui): Likewise. - * gmp.texi: Likewise. - - * gmp.texi: Use three hyphens for a dash. - (Low-level Functions): Remove documentation for gmp_rand_getraw. - (Random Number Functions): Add info on where to find documentation - on the random number functions. - - * tests/rand/Makefile.am (test, bigtest): Quote argument to grep. - * tests/rand/Makefile.in: Regenerate. - - * tests/rand/gen.c: Declare optarg, optind, opterr if not already - declared. - (main): Use new names for the random stuff. - (main): Don't use strtoul() if we don't have it. Use strtol() - instead, if we have it. Otherwise, use atoi(). - (main): Use srandom/srandomdev for __FreeBSD__ only. - (main): Use new parameter order to gmp_randinit(). - - * tests/rand/stat.c: Declare optarg, optind, opterr if not already - declared. - -2000-04-10 Torbjorn Granlund <tege@swox.com> - - * mpz/pprime_p.c: Pass 0L for mpz_scan1. mpz_mmod => mpz_mod. - (millerrabin): Use new random interface. - (millerrabin): ... and don't forget to call gmp_randclear. - - * mpz/nextprime.c: New file. - * gmp.h: Declare mpz_nextprime. - * mpz/Makefile.am: List nextprime.c. - * mpz/Makefile.in: Regenerate. - * Makefile.am: List mpz/nextprime.lo. - * Makefile.in: Regenerate. - -2000-04-10 Kevin Ryde <kevin@swox.se> - - * move-if-change, mpz/tests/move-if-change, mpq/tests/move-if-change, - mpf/tests/move-if-change: Remove, no longer used. - - * Makefile.am (SUBDIRS): Add tests, demos, mpbsd. - (libmp.la): New target, conditional on WANT_MPBSD. - (libgmp_la_LIBADD): Add -lm. - (AUTOMAKE_OPTIONS): Add check-news. - (include_HEADERS): Setup to install gmp.h and possibly mp.h. - (DISTCLEANFILES): Add generated files. - (check): Remove explicit target (now uses check-recursive). - - * configure.in: Use AM_CONFIG_HEADER. - Add --enable-mpbsd setting automake conditional WANT_MPBSD. - Output demos/Makefile, mpbsd/Makefile and mpbsd/tests/Makefile. - - * mpz/Makefile.am: Add SUBDIRS=tests, shorten INCLUDES since now - using AM_CONFIG_HEADER. - * mpq/Makefile.am: Ditto. - * mpf/Makefile.am: Ditto, and add DISTCLEANFILES. - * mpn/Makefile.am: Shorten INCLUDES, amend some comments. - * mpz/tests/Makefile.am: Use TESTS and $(top_builddir). - * mpf/tests/Makefile.am: Ditto. - * mpq/tests/Makefile.am: Ditto. - * demos/Makefile.am: New file. - - * mpbsd/Makefile.am: New file, derived from old mpbsd/Makefile.in. - * mpbsd/Makefile.in: Now generated from Makefile.am. - * mpbsd/realloc.c: Removed, use mpz/realloc.c instead. - * mpbsd/tests/Makefile.am: New file. - * mpbsd/tests/Makefile.in: New file, generated from Makefile.am. - * mpbsd/tests/allfuns.c: New file. - - * gmp.texi (Top): Use @ifnottex, to help makeinfo --html. - (Installing MP): Describe --enable-mpbsd and demo programs. - - * tests/rand/statlib.c: mpz_cmp_abs => mpz_cmpabs. - - * tests/rand/Makefile.am (LDADD): Don't need -lm (now in libgmp.la). - (EXTRA_PROGRAMS): Not noinst_PROGRAMS. - (INCLUDES): Shorten to -I$(top_srcdir) now using AM_CONFIG_HEADER. - -2000-04-09 Torbjorn Granlund <tege@swox.com> - - * mpz/urandomm.c: Get type of count right. - Simplify computation of nbits. - -2000-04-08 Torbjorn Granlund <tege@swox.com> - - * mpz/urandomb.c: Fix reallocation condition. - Simplify size computation. - -2000-04-08 Linus Nordberg <linus@swox.se> - - * acinclude.m4 (GMP_CHECK_CC_64BIT): Add special handling for - HPUX. - (GMP_CHECK_ASM_W32): Ditto. - * aclocal.m4: Regenerate. - - * mpn/Makefile.am: Use $(CCAS) for assembling. - (.asm.obj): Add rule. - * mpn/Makefile.in: Regenerate. - - * gmp.texi (Miscellaneous Integer Functions): Fix typos. - - * configure.in: Never pass `-h' to grep. - (mips-sgi-irix6.[2-9]*): Try to find 64-bit compiler. - (hppa1.0*-*-*): New flag for cc. - (hppa2.0*-*-*): Try to find 64-bit compiler. Chose path, set - CCAS. - * configure: Regenerate. - -2000-04-08 Torbjorn Granlund <tege@swox.com> - - * mpz/bin_ui.c: Don't depend on ANSI C features. - * mpz/bin_uiui.c: Likewise. - - * Makefile.am (MPZ_OBJECTS): mpz/cmp_abs* => mpz/cmpabs*. - (MPQ_OBJECTS): Add mpq/set_d.lo. - (MPZ_OBJECTS): Add mpz/fits*.lo. - * Makefile.in: Regenerate. - - * mpz/cmpabs.c: New name for mpz/cmp_abs.c. - * mpz/cmpabs_ui.c: New name for mpz/cmp_abs_ui.c. - * mpz/Makefile.am: Corresponding changes. - * mpz/Makefile.in: Regenerate. - * gmp.h: mpz_cmp_abs* => mpz_cmpabs*. - - * mpz/addmul_ui.c (mpn_neg1): Don't depend on ANSI C features. - - * mpz/invert.c: Use TMP_MARK since we invoke MPZ_TMP_INIT. - - * gmp.h (mpq_set_d): Declare correctly. - (mpz_root): Use _PROTO. - (mpz_remove): Use _PROTO. - (mpf_pow_iu): Use _PROTO. - - * mpn/asm-defs.m4 (MPN_PREFIX): Revert previous change. - * gmp.h (__MPN): Revert previous change. - - * mpz/perfpow.c: De-ANSI-fy. Add copyright notice. - - * mpz/set_d.c: Misc cleanups. - - * mpq/set_d: New file. - * gmp.h: Declare mpq_set_d. - * mpq/Makefile.am: List set_d.c. - * mpq/Makefile.in: Regenerate. - -2000-04-07 Torbjorn Granlund <tege@swox.com> - - * mpz/fits_sint_p.c: New file. - * mpz/fits_slong_p.c: New file. - * mpz/fits_sshort_p.c: New file. - * mpz/fits_uint_p.c: New file. - * mpz/fits_ulong_p.c: New file. - * mpz/fits_ushort_p.c: New file. - * gmp.h: Declare mpz_fits_*. - * mpz/Makefile.am: List fits_* files. - * mpz/Makefile.in: Regenerate. - -2000-04-06 Kevin Ryde <kevin@swox.se> - - * gmp.texi (Installing MP): Add known build problem SunOS 4.1.4 m4 - failure. - - * mpn/x86/pentium/gmp-mparam.h: Tune thresholds. - * mpn/x86/p6/gmp-mparam.h: Ditto. - * mpn/x86/k6/gmp-mparam.h: Tune thresholds, add UMUL_TIME, UDIV_TIME. - * mpn/x86/k7/gmp-mparam.h: Tune thresholds, amend UMUL_TIME. - - * mpn/generic/mul_n.c (mpn_kara_mul_n): Add an ASSERT. - (mpn_kara_sqr_n): Add an ASSERT, use KARATSUBA_SQR_THRESHOLD. - (mpn_toom3_sqr_n): Eliminate second evaluate3. - - * gmp-impl.h (mpn_com_n,MPN_LOGOPS_N_INLINE): Don't allow size==0. - (tune_mul_threshold,tune_sqr_threshold): Conditionalize - declarations on TUNE_PROGRAM_BUILD. - - * mpn/generic/sqr_basecase.c: Add an assert. - -2000-04-05 Torbjorn Granlund <tege@swox.com> - - * gmp.h, mpn/asm-defs.m4: List the same functions for __MPN, but - leave some commented out. - - * gmp-impl.h (MPN_LOGOPS_N_INLINE): Optimize. - (mpn_com_n): Optimize. - - * gmp.h (__MPN): Make it use __gmpn instead of __mpn for consistency. - * mpn/asm-defs.m4 (MPN_PREFIX): Likewise. - - * gmp.h (GMP_ERROR_ALLOCATE): New errcode. - - * gmp-impl.h (MPN_MUL_N_RECURSE): Delete. - (MPN_SQR_RECURSE): Delete. - - * gmp-impl.h (TARGET_REGISTER_STARVED): New define. - - * gmp-impl.h (mpn_kara_sqr_n): Remap with __MPN. - (mpn_toom3_sqr_n): Likewise. - (mpn_kara_mul_n): Likewise. - (mpn_toom3_mul_n): Likewise. - (mpn_reciprocal): Likewise. - - * gmp-impl.h (__gmpn_mul_n): Remove declaration. - (__gmpn_sqr): Likewise. - * gmp.h (mpn_sqr_n): Declare/remap. - * mpn/generic/mul.c (mpn_sqr_n): New name for mpn_sqr. - - * gmp.h (mpn_udiv_w_sdiv): Move __MPN remap from here... - * gmp-impl.h: ...to here. - -2000-04-05 Linus Nordberg <linus@swox.se> - - * gmp.texi (Top): Add `Random Number Functions' to menu. - (Introduction to MP): Fix typo. - (MP Basics): Create menu for all sections. Move `Random Number - Functions' to its own chapter. Add nodes for all sections. - (Function Classes): Mention random generation functions under - miscellaneous. - (Miscellaneous Integer Functions): Update mpz_urandomb, - mpz_urandomm. - (Low-level Functions): Remove mpn_rawrandom. - (Random State Initialization): Update. - - * mpf/urandom.c (mpf_urandomb): Remove SIZE parameter. Normalize - result correctly. - - * gmp.h (mpf_urandomb): Remove SIZE parameter. - - * randraw.c (gmp_rand_getraw): Handle the case where (1) the LC - scheme doesn't generate even limbs and (2) more than one LC - invocation is necessary to produce the requested number of bits. - -2000-04-05 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/mul_n.c (INVERSE_3): New name for THIRD, define for - any BITS_PER_MP_LIMB. - (MP_LIMB_T_MAX): New. - (mpn_divexact3_n): Remove. - (interpolate3): Use mpn_divexact_by3 instead of mpn_divexact3_n. - -2000-04-05 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h (KARATSUBA_MUL_THRESHOLD<2): Remove cpp test. - (tune_mul_threshold,tune_sqr_threshold): Add declarations, used in - development only. - - * mpn/x86/k7/sqr_basecase.asm: New file, only a copy of k6 for now. - -2000-04-04 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (TOOM3_MUL_THRESHOLD): Provide default. - (TOOM3_SQR_THRESHOLD): Provide default. - - * mpn/generic/mul_n.c: Rewrite (mostly by Robert Harley). - * mpn/generic/mul.c: Rewrite (mostly by Robert Harley). - - * configure.in (sparcv9 64-bit OS): Set extra_functions. - -2000-04-04 Linus Nordberg <linus@swox.se> - - * mpn/generic/rawrandom.c: Remove file and replace with randraw.c - on top level. - (mpn_rawrandom): Rename to gmp_rand_getraw. - - * randraw.c: New file; essentially a copy of - mpn/generic/rawrandom.c. - (gmp_rand_getraw): New function (formerly known as mpn_rawrandom). - - * mpz/urandomb.c (mpz_urandomb): Change mpn_rawrandom --> - gmp_rand_getraw. - * mpz/urandomm.c (mpz_urandomb): Ditto. - * mpf/urandom.c (mpf_urandomb): Ditto. - - * gmp.h (gmp_rand_getraw): Add function prototype. - (mpn_rawrandom): Remove function prototype. - - * Makefile.am (libgmp_la_SOURCES): Add randraw.c. - * Makefile.in: Regenerate. - - * configure.in (gmp_mpn_functions): Remove rawrandom. - * configure: Regenerate. - -2000-04-04 Linus Nordberg <linus@swox.se> - - * gmp.h (GMP_ERROR enum): Remove comma after last enumeration - since the AIX compiler (xlc) doesn't like that. - - * randlc.c (gmp_rand_init_lc): Allocate enough space for seed to - hold any upcoming seed. - * randlc2x.c (gmp_rand_init_lc_2exp): Likewise. - - * mpn/generic/rawrandom.c: Remove debugging code. - (mpn_lc): Don't reallocate seed. - - * mpz/urandomm.c (mpz_urandomm): Implement function. - - * mpz/urandomb.c (mpz_urandomb): Fix typo in function definition. - -2000-04-04 Kevin Ryde <kevin@swox.se> - - * make.bat: Removed (no longer works, no longer supported). - * mpn/msdos/asm-syntax.h: Removed (was used only by make.bat). - -2000-04-03 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/brandom.c: New file, replacing random2. - -2000-04-02 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc32/v9/submul_1.asm: Change some carry-form instructions - into their plain counterparts. - - * mpn/sparc64/copyi.asm: Avoid executing ALIGN. - - * mpn/sparc64/mul_1.asm: Handle overlap of rp/sp. - * mpn/sparc64/addmul_1.asm: Likewise. - * mpn/sparc64/submul_1.asm: Likewise. - -2000-04-01 Linus Nordberg <linus@swox.se> - - * gmp.h: Fix function prototypes for randomization functions. - (__gmp_rand_lc_scheme_struct): Replace `m' with `m2exp'. Remove - unused `bits'. - (__gmp_rand_data_lc): Add `m2exp' as another way of representing - the modulus. - (__gmp_rand_state_struct): Remove unused `size'. - - * rand.c (__gmp_rand_scheme): Use better multipliers. Remove test - schemes. Replace `m' with `m2exp'. - (gmp_rand_init): Change parameters and return type. Use `m2exp' - instead of `m'. Set `gmp_errno' on error. Disable BBS algorithm. - - * randlc.c (gmp_rand_init_lc): Don't use malloc(). Change - parameters. - - * randclr.c (gmp_rand_clear): Don't use free(). Disable BBS - algorithm. Set `gmp_errno' on error. - - * randlc2x.c (gmp_rand_init_lc_2exp): New function. - * randsd.c (gmp_rand_seed): New function. - * randsdui.c (gmp_rand_seed_ui): New function. - * randlcui.c: Remove unused file. - - * mpn/generic/rawrandom.c (mpn_rawrandom): Rewrite. - (mpn_lc): New static function. - - * mpz/urandomb.c (mpz_urandomb): Use ABSIZ() instead of SIZ() for - determining size of ROP. - - * mpf/urandom.c (mpf_urandomb): Add third parameter, nbits. (Not - used yet!) - Change parameter order to mpn_rawrandom(). - - * Makefile.am (libgmp_la_SOURCES): Add errno.c, randlc2x.c, - randsd.c, randsdui.c. Remove randui.c. - (MPZ_OBJECTS): Rename urandom.lo --> urandomb.lo. Add urandomm.lo. - * Makefile.in: Regenerate. - - * mpz/Makefile.am (libmpz_la_SOURCES): Change urandom.c --> - urandomb.c. Add urandomm.c. - * mpz/Makefile.in: Regenerate. - - * tests/rand/Makefile.am (noinst_PROGRAMS): Change findcl --> findlc. - Add gen.static. - * tests/rand/Makefile.in: Regenerate. - - * tests/rand/gen.c (main): Add mpz_urandomm. Add command line options - `-C', `-m', extend `-a'. Use *mp*_*rand*() with new parameters. Call - gmp_rand_seed(). - -2000-04-01 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_CHECK_ASM_DATA): Plain .data for hpux. - * configure.in (CCAS): No CFLAGS, they're added when it's used. - (CONFIG_SRCDIR): New define for config.m4. - * mpn/sparc64/addmul_1.asm: Use it for an include(). - * mpn/sparc64/submul_1.asm: Ditto. - * mpn/sparc64/mul_1.asm: Ditto. - -2000-03-31 Linus Nordberg <linus@swox.se> - - * mpz/urandom.c: Rename to... - * mpz/urandomb.c: ...this. - - * mpz/urandomb.c (mpz_urandomb): Change operand order in call to - mpn_rawrandom(). Use ABSIZ() instead of SIZ() when checking size - of ROP. - - * mpz/urandomm.c: New file. - -2000-03-31 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GMP_CHECK_ASM_MMX): Give a warning when mmx code - will be omitted. - -2000-03-30 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/mul_1h.asm: New file. - * mpn/sparc64/addmul_1h.asm: New file. - * mpn/sparc64/submul_1h.asm: New file. - * mpn/sparc64/mul_1.asm: Rewrite. - * mpn/sparc64/addmul_1.asm: Rewrite. - * mpn/sparc64/submul_1.asm: Rewrite. - -2000-03-28 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc32/v9/mul_1.asm: Fix typo in branch prediction. - * mpn/sparc32/v9/addmul_1.asm: Likewise. - * mpn/sparc32/v9/submul_1.asm: Likewise. - -2000-03-25 Kevin Ryde <kevin@swox.se> - - * mpn/lisp/gmpasm-mode.el: Fix some comment detection, use custom, - fontify more keywords, turn into a standalone mode. - - * stamp-vti: New file, generated together with version.texi. - - * acinclude.m4 (GMP_VERSION,GMP_HEADER_GETVAL): New macros. - * configure.in (AM_INIT_AUTOMAKE): Use GMP_VERSION. - -2000-03-24 Kevin Ryde <kevin@swox.se> - - * INSTALL: Updates for new configure system. - - * configure.in: Add gmp_optcflags_gcc for the x86s, setting -mcpu - and -march. - -2000-03-23 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (mpz_eval_expr): Properly initialize rhs/lhs - for ROOT. - -2000-03-23 Kevin Ryde <kevin@swox.se> - - * config.guess (i?86:*:*:*): Use uname -m if detection program fails. - - * mpn/x86/README: Remove remarks on the now implemented MMX shifts. - * mpn/x86/k6/README: Add speed of mpn_divexact_by3, update mpn_mul_1. - - * gmp.texi (Installing MP): Corrections to target CPUs. - - * version.c: Use VERSION from config.h, add copyright comment, - restore "const" somehow lost. - - * configure.in (a29k*-*-*): Fix directory name. - -2000-03-22 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (op_t): Add ROOT. - (fns): Add ROOT. - (mpz_eval_expr): Add ROOT. - - * mpz/root.c: Handle roots of negative numbers. - Fix other border cases. - Fix rare memory leakage. - - * errno.c: New file. - -2000-03-21 Torbjorn Granlund <tege@swox.com> - - * gmp.h (error number enum): New anonymous enum. - (gmp_errno): New. - - * gmp.h (__GNU_MP_VERSION, __GNU_MP_VERSION_MINOR): Bump for GMP 3.0. - -2000-03-20 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/unicos.m4 (FLOAT64): New define. - * mpn/alpha/default.m4 (FLOAT64): New define. - * mpn/alpha/invert_limb.asm (C36): Use FLOAT64. - -2000-03-21 Kevin Ryde <kevin@swox.se> - - * mpn/x86/k6/diveby3.asm: Tiny speedup. - - * acinclude.m4 (GMP_CHECK_ASM_SHLDL_CL): New macro. - * configure.in: Use it, set WANT_SHLDL_CL in config.m4. - * mpn/x86/x86-defs.m4 (shldl,shrdl,shldw,shrdw): New macros, using - WANT_SHLDL_CL. - * mpn/x86/k6/mmx/lshift.asm: Use shldl macro. - * mpn/x86/k7/mmx/lshift.asm: Ditto. - * mpn/x86/pentium/mmx/lshift.asm: Ditto. - * mpn/x86/k6/mmx/rshift.asm: Use shrdl macro. - * mpn/x86/k7/mmx/rshift.asm: Ditto. - * mpn/x86/pentium/mmx/rshift.asm: Ditto. - * mpn/x86/README.family: Add a note about this. - -2000-03-20 Linus Nordberg <linus@swox.se> - - * mpn/generic/rawrandom.c (mpn_rawrandom): Handle seed value of 0 - correctly. - - * configure.in: Fix detection of alpha flavour. - Set compiler options for `sparcv8'. - * configure: Regenerate. - - * rand.c (__gmp_rand_scheme): Clean up some. Use slightly better - multipliers. - - * configure.in (AC_OUTPUT): Add tests/Makefile and - tests/rand/Makefile. - - * acinclude.m4 (AC_CANONICAL_BUILD): Define to - `_AC_CANONICAL_BUILD' to deal with incompatibilities between - Autoconf and Libtool. - (AC_CHECK_TOOL_PREFIX): Likewise. - - * Makefile.am (EXTRA_DIST): Add directory `tests'. - - * mkinstalldirs: Update (Automake 2000-03-17). - * ltconfig: Update (Libtool 2000-03-17). - * ltmain.sh: Ditto. - - * configure: Regenerate with new autoconf/-make/libtool suite. - * aclocal.m4: Ditto. - * config.in: Ditto. - * all Makefile.in's: Ditto. - -2000-03-20 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (main): Don't allow `-N' for base, require `-bN'. - - * mpn/alpha/unicos.m4 (cvttqc): New define. - * mpn/alpha/invert_limb.asm: Use new define for cvttqc. - -2000-03-19 Kevin Ryde <kevin@swox.se> - - * mpn/x86/k6/sqr_basecase.asm: Tiny amendments for 3x3 case. - - * gmp.texi: Use @include version.texi. - Use @email and @uref. - (Installing MP): Rewrite for new configure. - (Low-level Functions): Add mpn_divexact_by3. - - * configure.in (--enable-alloca): New option. - * acconfig.h (USE_STACK_ALLOC): For --disable-alloca. - -2000-03-18 Kent Boortz <kent@swox.com> - - * macos: New directory with macos port files. - -2000-03-17 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (union ieee_double_extract): Check _CRAYMPP. - - * mpn/asm-defs.m4 (invert_normalized_limb): Define. - - * mpn/alpha: Translate `.s' files to `.asm'. - - * configure: Regenerate. - - * mpn/alpha/invert_limb.asm: Replace dash in file name with underscore. - * configure.in: Corresponding change. - - * configure.in: Assign special "path" for alphaev6. - - * mpn/alpha/unicos.m4: New file. - * configure.in (alpha*-cray-unicos*): [This part of the change - commited 2000-03-13 by linus] - * mpn/alpha/default.m4: New file. - * configure.in (alpha*-*-*): Use it. - -2000-03-17 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium/rshift.S: Use plain rcrl (not rcrl $1) for - shift-by-1 case, significant speedup. - * mpn/x86/pentium/README: Add shift-by-1 speed. - -2000-03-16 Torbjorn Granlund <tege@swox.com> - - * config.guess: Handle Cray T3D/E. - -2000-03-15 Kevin Ryde <kevin@swox.se> - - * mpn/generic/diveby3.c: New file. - * mpn/x86/diveby3.asm: New file. - * mpn/x86/k6/diveby3.asm: New file. - * gmp.h (mpn_divexact_by3): Prototype and define. - * mpn/asm-defs.m4: define_mpn(divexact_by3). - * configure.in (gmp_mpn_functions): Add diveby3. - - * mpn/x86/pentium/sqr_basecase.asm: A few better addressing modes. - - * configure.in: Add AC_C_STRINGIZE and AC_CHECK_TYPES((void)). - * gmp-impl.h (ASSERT): Use them. - - * mpn/x86/k7/mmx/lshift.asm: New file. - * mpn/x86/k7/mmx/rshift.asm: Rewrite simple loop and return value - handling, add some pictures. - -2000-03-14 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc32/v8/mul_1.asm: Make PIC actually work. - * mpn/sparc32/v8/addmul_1.asm: Likewise. - - * mpn/sparc32/v8/mul_1.asm: Use m4 ifdef, not cpp #if. - * mpn/sparc32/v8/addmul_1.asm: Likewise. - - * mpn/asm-defs.m4 (C): New define for comments. - * mpn/sparc32: Start comments with `C'. - - * config.guess: Remove `SunOS 6' handling. - Recognize sun4m and sun4d architectures under old SunOS. - -2000-03-14 Linus Nordberg <linus@swox.se> - - * configure.in (gmp_srclinks): Set to list of links created by - configure. - * configure: Regenerate. - - * Makefile.am (libgmp_la_LDFLAGS): Set version info. - (DISTCLEANFILES): Include @gmp_srclinks@. - * Makefile.in: Regenerate. - -2000-03-13 Linus Nordberg <linus@swox.se> - - * configure.in: Remove some changequote's by quoting the strings - containing `[]'. - Add support for `alpha*-cray-unicos*'. - AC_DEFINE `_LONG_LONG_LIMB' instead of passing it in CFLAGS. - Conditionalize the assembler syntax checks. - * configure: Regenerate. - * config.in: Regenerate. - - * acinclude.m4 (GMP_PROG_CCAS): Remove macro. - * aclocal.m4: Regenerate. - -2000-03-13 Kevin Ryde <kevin@swox.se> - - * mpn/x86/p6/README: New file. - - * mpn/x86/k6/mul_1.asm: Rewrite, smaller and slightly faster. - - * mpn/lisp/gmpasm-mode.el: Rewrite assembler comment detection and - handling. - - * configure.in: Separate mmx directories for each x86 flavour. - * configure: Regenerate. - -2000-03-12 Kevin Ryde <kevin@swox.se> - - * mpn/x86/x86-defs.m4 (ALIGN): Supplement definition from - config.m4 so as to pad with nops not zeros on old gas. - - * mpn/x86/k7/mmx/copyd.asm: Use plain emms (femms is just an alias - for emms now). - * mpn/x86/k7/mmx/copyi.asm: Ditto. - * mpn/x86/k7/mmx/rshift.asm: Ditto. - * mpn/x86/x86-defs.m4: Amend comments. - - * mpn/x86/mod_1.asm: Add comments on speeds. - - * mpn/x86/pentium/mmx/lshift.asm: New file. - * mpn/x86/pentium/mmx/rshift.asm: New file. - * mpn/x86/pentium/README: Add speeds of various routines. - -2000-03-10 Linus Nordberg <linus@swox.se> - - * configure.in: Reorganize. - Use AC_CHECK_TOOL to find `ar'. - Add post-includes `regmap.m4' and `aix.m4' for AIX targets. - asm-syntax.h is not needed for PPC or sparc anymore. - (powerpc64-*-aix*): Compiler is always 64-bit. Use `-q64 - -qtune=pwr3' to xlc and `-maix64 -mpowerpc64' to gcc. Pass `-X - 64' to `ar' and `nm'. - (pentiummmx): Use GMP_CHECK_ASM_MMX and avoid MMX assembly path if - assembler is not MMX capable. - (pentium[23]): Likewise. - (athlon): Likewise. - (k6*): Likewise. - * configure: Regenerate. - - * acinclude.m4 (GMP_PROG_CC_WORKS): New macro. - (GMP_PROG_CC_FIND): Use GMP_PROG_CC_WORKS instead of - AC_TRY_COMPILER. Make sure that the *first* working 32-bit - compiler is used if no 64-bit compiler is found. - (GMP_CHECK_ASM_MMX): New macro. - * aclocal.m4: Regenerate. - - * Makefile.in: Regenerate. (CC_TEST removed.) - * mpf/Makefile.in: Likewise. - * mpn/Makefile.in: Likewise. - * mpq/Makefile.in: Likewise. - * mpz/Makefile.in: Likewise. - * mpf/tests/Makefile.in: Likewise. - * mpq/tests/Makefile.in: Likewise. - * mpz/tests/Makefile.in: Likewise. - - * acconfig.h (_LONG_LONG_LIMB): Add. - - * gmp-impl.h: Include config.h only if HAVE_CONFIG_H is defined. - -2000-03-09 Kevin Ryde <kevin@swox.se> - - * mpn/x86/pentium/mul_basecase.S: Small speedup by avoiding an AGI. - - * mpn/x86/k7/mmx/copyd.asm: Tiny speedup by avoiding popl. - * mpn/x86/k7/mmx/copyi.asm: Ditto. - * mpn/x86/k7/mul_basecase.asm: Ditto. - -2000-03-07 Torbjorn Granlund <tege@swox.com> - - * config.guess: Better recognize POWER/PowerPC processor type. - -2000-03-07 Kevin Ryde <kevin@swox.se> - - * mpn/generic/addsub_n.c: Use HAVE_NATIVE_* now in config.h. - - * mpn/asm-defs.m4: Add comments about SysV m4. - (m4_log2): Don't use <<. - (m4_lshift,m4_rshift): New macros. - -2000-03-06 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/regmap.m4: Map cr0 => `0', etc. - -2000-03-06 Kevin Ryde <kevin@swox.se> - - * mpn/tests/ref.c (refmpn_divexact_by3): New function. - * mpn/tests/ref.h: Prototype. - - * acconfig.h (WANT_ASSERT): New define. - * configure.in (--enable-assert): Turn on WANT_ASSERT. - * assert.c: New file. - * Makefile.am: Add to build. - * gmp-impl.h (ASSERT): New macro. - (ASSERT_NOCARRY) Renamed from assert_nocarry. - (MPZ_CHECK_FORMAT): Use ASSERT_ALWAYS. - * mpn/tests/ref.c: Use ASSERT. - * mpf/get_str.c: Use ASSERT_ALWAYS. - * mpf/set_str.c: Remove old assert macro. - - * mpn/x86/x86-defs.m4 (cmovnz_ebx_ecx): New macro. - * mpn/x86/p6/aorsmul_1.asm: Use cmov. - - * mpn/x86/lshift.S: Use %dl with testb, not %edx. No object code - change, testb was still getting generated. - * mpn/x86/rshift.S: Ditto. - -2000-03-03 Torbjorn Granlund <tege@swox.com> - - * longlong.h: Add IA-64 support. - - * mpn/powerpc32: Misc cleanups. - * mpn/powerpc32/aix.m4: New file (mainly by Linus). - * mpn/powerpc64/aix.m4: New file (mainly by Linus). - * mpn/powerpc64: Translate `.S' files to `.asm'. - - * configure.in: Fix tyops. - * configure: Regenerate. - -2000-03-02 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc32/regmap.m4: New file. - * mpn/powerpc32: Translate `.S' files to `.asm'. - * configure.in: Use mpn/powerpc32/regmap.m4 for powerpc targets - except some weird ones. - -2000-03-03 Kevin Ryde <kevin@swox.se> - - * mpn/lisp/gmpasm-mode.el: Suppress postscript comment prefixes in - filladapt. - - * mpn/x86/pentium/sqr_basecase.asm: New file. - * mpn/x86/pentium/gmp-mparam.h (KARATSUBA_SQR_THRESHOLD): Update. - - * configure.in: Add --enable-assert, enable k6 logops functions. - - * mpn/x86/k6/mmx/copyi.asm: Use m4 for divide, not as. - * mpn/x86/k6/mmx/copyd.asm: Ditto. - * mpn/x86/README.family: Add a note on this. - -2000-03-02 Kevin Ryde <kevin@swox.se> - - * mpn/x86/k6/aors_n.asm: Don't use stosl. - * mpn/x86/copyi.asm: Use cld to clear direction flag. - * mpn/x86/divrem_1.asm: Ditto. - * mpn/x86/README.family: Add a note on this. - - * mpn/x86/k6/mmx/copyi.asm: Rewrite. - * mpn/x86/k6/mmx/copyd.asm: New file. - * mpn/x86/k6/README: Update, and small amendments. - - * mpn/x86/x86-defs.m4 (Zdisp): New macro. - * mpn/asm-defs.m4 (m4_stringequal_p): New macro. - - * mpn/x86/p6/aorsmul_1.asm: Use Zdisp to force zero displacements. - * mpn/x86/k6/aorsmul_1.asm: Ditto. - * mpn/x86/k6/mul_1.asm: Ditto. - * mpn/x86/k6/mul_basecase.asm: Ditto. - * mpn/x86/k7/aors_n.asm: Ditto. - * mpn/x86/k7/aorsmul_1.asm: Ditto. - * mpn/x86/k7/mul_1.asm: Ditto. - * mpn/x86/k7/mul_basecase.asm: Ditto. - * mpn/x86/README.family: Add a note on this. - -2000-02-27 Kevin Ryde <kevin@swox.se> - - * mpn/generic/divrem.c (mpn_divrem_classic): Patch to avoid gcc - 2.7.2.3 i386 register handling bug. - - * mpn/x86/k6/aors_n.asm: Rewrite. - * mpn/x86/k6/mmx/lshift.asm: Rewrite. - * mpn/x86/k6/mmx/rshift.asm: Rewrite. - * mpn/x86/k6/README: Update. - - * mpn/x86/k7/mmx/copyd.asm: Support size==0. - * mpn/x86/k7/mmx/copyi.asm: Ditto. - * mpn/x86/k6/mmx/copyi.asm: Ditto. - * gmp-impl.h: Comment size==0 allowed in MPN_COPY_INCR and - MPN_COPY_DECR. - * configure.in: Enable x86 copyi, copyd; add k6 com_n. - -2000-02-25 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (power): Move factorial handing code from `factor' - to `power'. - - * demos/factorize.c (factor_using_pollard_rho): Move resetting of `c' - to before checking for a non-zero gcd. - -2000-02-25 Kevin Ryde <kevin@swox.se> - - * mpn/asm-defs.m4 (MULFUNC_PROLOGUE): New macro by Linus. - * mpn/x86/k6/aors_n.asm: Use MULFUNC_PROLOGUE. - * mpn/x86/k6/aorsmul_1.asm: Ditto. - * mpn/x86/k7/aors_n.asm: Ditto. - * mpn/x86/k7/aorsmul_1.asm: Ditto. - * mpn/x86/p6/aorsmul_1.asm: Ditto. - - * mpn/tests/ref.c (refmpn_copyi,refmpn_copyd): Allow size==0. - - * gmp-impl.h: Move mpn_and_n, mpn_andn_n, mpn_com_n, mpn_ior_n, - mpn_iorn_n, mpn_nand_n, mpn_nior_n, mpn_xor_n and mpn_xorn_n here - from gmp.h. Use HAVE_NATIVE_mpn_* to make these functions or - inlines. - - * gmp-impl.h: Move mpn_copyd, mpn_copyi here from gmp.h. - * gmp-impl.h (MPN_COPY_INCR): Use mpn_copyi if available. - * gmp-impl.h (MPN_COPY_DECR): Use mpn_copyd if available. - - * mpn/x86/k6/mmx/com_n.asm: Moved into mmx subdirectory. - * mpn/x86/k6/mmx/copyi.asm: Ditto. - * mpn/x86/k6/mmx/lshift.asm: Ditto. - * mpn/x86/k6/mmx/rshift.asm: Ditto. - * mpn/x86/k7/mmx/rshift.asm: Ditto. - * mpn/x86/k6/mmx/logops_n.asm: New file. - * configure.in (k6*-*-*): Add logops_n.asm. - * mpn/x86/k6/README: Update. - - * mpn/x86/k7/mmx/copyi.asm: New file. - * mpn/x86/k7/mmx/copyd.asm: New file. - * mpn/x86/k7/README: Update. - -2000-02-24 Kevin Ryde <kevin@swox.se> - - * mpn/x86/x86-defs.m4 (femms): Generate emms if 3dnow not available. - * mpn/x86/x86-defs.m4 (FRAME_popl): New macro. - - * Makefile.am: Add info_TEXINFOS = gmp.texi - - * mpn/x86/divrem_1.asm: Moved from mpn/x86/k6, allow size==0, - conditionalize loop versus decl/jnz. - * mpn/x86/mod_1.asm: Ditto. - * mpn/x86/divmod_1.asm: Removed. - * gmp.texi (mpn_divrem_1,mpn_mod_1): Add that size==0 is allowed. - * mpn/tests/ref.c (refmpn_divrem_1c,etc): Allow size==0. - - * mpn/x86/k6/aors_n.asm: Avoid gas 1.92.3 leal displacement - expression problem. - * mpn/x86/k6/aorsmul_1.asm: Ditto. - * mpn/x86/k6/mul_1.asm: Ditto. - * mpn/x86/k6/mul_basecase.asm: Ditto - * mpn/x86/k7/aors_n.asm: Ditto. - * mpn/x86/k7/aorsmul_1.asm: Ditto. - * mpn/x86/k7/mul_1.asm: Ditto. - * mpn/x86/k7/mul_basecase.asm: Ditto. - * mpn/x86/k7/rshift.asm: Ditto. - * mpn/x86/p6/aorsmul_1.asm: Ditto. - * mpn/x86/README.family: Describe problem. - -2000-02-24 Linus Nordberg <linus@swox.se> - - * acinclude.m4 (GMP_CHECK_ASM_LSYM_PREFIX): Add dummy symbol to - testcase to avoid nm failure. Try nm before piping to grep. - - * acconfig.h: Undef HAVE_NATIVE_func for every mpn function found - in gmp.h. - - * configure.in: Invoke AC_CONFIG_HEADERS. - Don't invoke AM_CONFIG_HEADER; it makes autoconf confused. - Dig out entry points declared in assembly code and AC_DEFINE proper - HAVE_NATIVE_func. - - * mpn/asm-defs.m4 (MULFUNC_PROLOGUE): New macro. - - * mpn/x86/p6/aorsmul_1.asm: Use MULFUNC_PROLOGUE. - * mpn/x86/k6/aors_n.asm: Likewise. - - * Makefile.am (EXTRA_DIST): Add config.in; needed when we don't - use AM_CONFIG_HEADER in configure.in. - - * mpn/Makefile.am (INCLUDES): Add `-I..' for config.h and - gmp-mparam.h. - * mpf/Makefile.am: Likewise. - * mpq/Makefile.am: Likewise. - * mpz/Makefile.am: Likewise. - - * mpf/tests/Makefile.am (INCLUDES): Add `-I../..' for config.h and - gmp-mparam.h. - * mpq/tests/Makefile.am: Likewise. - * mpz/tests/Makefile.am: Likewise. - - * configure: Regenerate. - * aclocal.m4: Regenerate. - * config.in: Regenerate. - * Makefile.in: Regenerate. - * mpf/Makefile.in: Regenerate. - * mpn/Makefile.in: Regenerate. - * mpq/Makefile.in: Regenerate. - * mpz/Makefile.in: Regenerate. - * mpf/tests/Makefile.in: Regenerate. - * mpq/tests/Makefile.in: Regenerate. - * mpz/tests/Makefile.in: Regenerate. - -2000-02-23 Kevin Ryde <kevin@swox.se> - - * mpn/x86/addmul_1.S: Amend comments, this code no longer used by - PentiumPro. - * mpn/x86/submul_1.S: Ditto. - - * mpn/x86/k6/com_n.asm: Rewrite, smaller but same speed. - - * mpn/x86/addmul_1.S: Add PROLOGUE and EPILOGUE to get .type and - .size for ELF. Rename #define size to n to avoid .size. - * mpn/x86/lshift.S: Ditto. - * mpn/x86/mul_1.S: Ditto. - * mpn/x86/mul_basecase.S: Ditto. - * mpn/x86/rshift.S: Ditto. - * mpn/x86/submul_1.S: Ditto. - * mpn/x86/udiv.S: Ditto. - * mpn/x86/umul.S: Ditto. - * mpn/x86/pentium/add_n.S: Ditto. - * mpn/x86/pentium/addmul_1.S: Ditto. - * mpn/x86/pentium/lshift.S: Ditto. - * mpn/x86/pentium/mul_1.S: Ditto. - * mpn/x86/pentium/mul_basecase.S: Ditto. - * mpn/x86/pentium/rshift.S: Ditto. - * mpn/x86/pentium/sub_n.S: Ditto. - * mpn/x86/pentium/submul_1.S: Ditto. - -2000-02-22 Linus Nordberg <linus@swox.se> - - * acinclude.m4 (GMP_INIT): Use temporary file cnfm4p.tmp for - post-defines. - (GMP_FINISH): Ditto. - (GMP_DEFINE): Add third optional argument specifying location in - outfile. - (GMP_DEFINE_RAW): New macro. - * aclocal.m4: Regenerate. - - * configure.in: Add `HAVE_TARGET_CPU_$target_cpu' using - GMP_DEFINE_RAW. - * configure: Regenerate. - - * mpz/tests/Makefile.am: New test t-root. - * mpz/tests/Makefile.in: Regenerate. - -2000-02-22 Torbjorn Granlund <tege@swox.com> - - * mpz/root.c: Complete rewrite; still primitive, but at least correct. - * mpz/tests/t-root.c: New test. - -2000-02-22 Kevin Ryde <kevin@swox.se> - - * mpn/x86/k7/mul_basecase.asm: New file. - * mpn/x86/k7/README: Add mpn_mul_basecase speed. - * mpn/x86/k7/gmp-mparam.h: New file. - - * mpn/x86/x86-defs.m4 (loop_or_decljnz,cmov_bytes): New macros. - * mpn/asm-defs.m4 (m4_ifdef_anyof_p): New macro. - - * mpn/x86/k6/aorsmul_1.asm: New file. - * mpn/x86/k6/addmul_1.S: Removed (was a copy of pentium version). - * mpn/x86/k6/submul_1.S: Removed (was a copy of pentium version). - - * mpn/x86/p6/aorsmul_1.asm: Use OPERATION_addmul_1 and - OPERATION_submul_1. - * mpn/x86/k6/aors_n.asm: Use OPERATION_add_n and OPERATION_sub_n. - * configure.in: Declare multi-function files for k6 and p6. - - * configure.in: Add HAVE_TARGET_CPU_$target_cpu for config.m4. - * mpn/asm-defs.m4 (define_not_for_expansion): New macro. - - * mpn/generic/divrem_1n.c (__gmpn_divrem_1n): New file, split from - mpn/generic/divrem_1.c. - * mpn/generic/divrem_1.c: Ditto. - * configure.in (gmp_mpn_functions): Ditto. - -2000-02-21 Torbjorn Granlund <tege@swox.com> - - * gmp.h: Undo 1996-10-06 NeXT change, it was clearly improperly - written. - -2000-02-21 Linus Nordberg <linus@swox.se> - - * configure.in: Link <src>/mpn/asm-defs.m4 to <build>mpn/asm.m4. - * configure: Regenerate. - -2000-02-21 Linus Nordberg <linus@swox.se> - - * mpn/x86/k7/aorsmul_1.asm: Change OPERATION_ADDMUL --> - OPERATION_addmul_1. Change OPERATION_SUBMUL --> - OPERATION_submul_1. - - * mpn/x86/k7/aors_n.asm: Change OPERATION_ADD --> OPERATION_add_n. - Change OPERATION_SUB --> OPERATION_sub_n. - - * mpn/Makefile.am: Pass -DOPERATION_$* to preprocessors. - * mpn/Makefile.in: Regenerate. - - * configure.in: Symlink mpn/asm-defs.m4 to build-dir/mpn. Link - multi-function files to mpn/<function>.asm and remove function - name from `gmp_mpn_functions'. - * configure: Regenerate. - - * acinclude.m4 (GMP_FINISH): Tell user what we're doing. - * aclocal.m4: Regenerate. - -2000-02-21 Kevin Ryde <kevin@swox.se> - - * gmp-impl.h: Rename __gmpn_mul_basecase to mpn_mul_basecase and - __gmpn_sqr_basecase to mpn_sqr_basecase, remove __gmpn prototypes. - * mpn/x86/mul_basecase.S: Ditto. - * mpn/x86/pentium/mul_basecase.S: Ditto. - - * configure.in (gmp_m4postinc): Use x86-defs.m4 on athlon-*-* too. - -2000-02-20 Kevin Ryde <kevin@swox.se> - - * acinclude.m4 (GSYM_PREFIX): Drop $1, change by Linus. - * mpn/asm-defs.m4 (PROLOGUE,EPILOGUE): Use GSYM_PREFIX as a - string, change by Linus. - * mpn/x86/x86-defs.m4: Use GSYM_PREFIX as a string. - - * mpn/x86/k6/gmp-mparam.h: New file. - * mpn/asm-defs.m4 (m4_warning): New macro. - - * mpn/x86/README: Amendments per new code and directories. - * mpn/x86/README.family: New file. - * mpn/x86/k6/README: New file. - * mpn/x86/k7/README: New file. - - * mpn/generic/mul_n.c: Rename __gmpn_mul_basecase to - mpn_mul_basecase and __gmpn_sqr_basecase to mpn_sqr_basecase. - * mpn/generic/mul_basecase.c: Ditto. - * mpn/generic/sqr_basecase.c: Ditto. - * mpn/generic/mul.c: Ditto. - -2000-02-19 Linus Nordberg <linus@swox.se> - - * configure.in: Don't try to symlink more than one multi-func - file. - * configure: Regenerate. - -2000-02-18 Linus Nordberg <linus@swox.se> - - * acinclude.m4 (GMP_CHECK_ASM_UNDERSCORE): GMP_DEFINE - `GSYM_PREFIX'. Run ACTIONs even when value is found in cache. - (GMP_CHECK_ASM_ALIGN_LOG): GMP_DEFINE `ALIGN'. Run ACTIONs even - when value is found in cache. - * aclocal.m4: Regenerate. - - * configure.in: Don't define GSYM_PREFIX or ALIGN. - Add mechanism for multi-function files. - * configure: Regenerate. - -2000-02-18 Kevin Ryde <kevin@swox.se> - - * configure.in (gmp_m4postinc): Enable x86-defs.m4. - * mpn/x86/k7/mul_1.asm: Fix include. - * mpn/x86/k6/mul_basecase.S: Removed (copy of the pentium version). - * mpn/x86/k6/mul_basecase.asm: New file. - * mpn/x86/k6/sqr_basecase.asm: New file. - * mpn/x86/k6/com_n.asm: New file. - * mpn/x86/k6/copyi.asm: New file. - * gmp.texi (Low-level Functions): Clarify mpn overlaps permitted. - * gmp-impl.h (MPN_OVERLAP_P): New macro. - * gmp-impl.h (assert_nocarry): New macro. - * mpn/tests/ref.c: New file, based in part on other mpn/tests/*.c. - * mpn/tests/ref.h: New file. - -2000-02-17 Linus Nordberg <linus@swox.se> - - * Makefile.am (dist-hook): Don't include any emacs backup files - (*.~*) in dist. - * Makefile.in: Regenerate. - -2000-02-17 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc32/v9/mul_1.asm: Use `rd' to get current PC; get rid of - getpc function. - * mpn/sparc32/v9/addmul_1.asm: Likewise. - * mpn/sparc32/v9/submul_1.asm: Likewise. - -2000-02-17 Kevin Ryde <kevin@swox.se> - - * gmp.h: Add prototypes and defines for mpn_and_n, mpn_andn_n, - mpn_com_n, mpn_copyd, mpn_copyi, mpn_ior_n, mpn_iorn_n, - mpn_mul_basecase, mpn_nand_n, mpn_nior_n, mpn_sqr_basecase, - mpn_xor_n, mpn_xorn_n. - - * mpn/asm-defs.m4: Many additions making up initial version. - * mpn/asm-defs.m4 (L): Use defn(`LSYM_PREFIX'). - * mpn/x86/x86-defs.m4: New file. - * mpn/x86/k6/aors_n.asm: New file. - * mpn/x86/k6/divmod_1.asm: New file. - * mpn/x86/k6/divrem_1.asm: New file. - * mpn/x86/k6/lshift.S: Removed (was a copy of the pentium version). - * mpn/x86/k6/lshift.asm: New file. - * mpn/x86/k6/mod_1.asm: New file. - * mpn/x86/k6/mul_1.S: Removed (was a copy of the pentium version). - * mpn/x86/k6/mul_1.asm: New file. - * mpn/x86/k6/rshift.S: Removed (was a copy of the pentium version). - * mpn/x86/k6/rshift.asm: New file. - * mpn/x86/k7/aors_n.asm: New file. - * mpn/x86/k7/aorsmul_1.asm: New file. - * mpn/x86/k7/mul_1.asm: New file. - * mpn/x86/k7/rshift.asm: New file. - * mpn/x86/p6/aorsmul_1.asm: New file. - * mpn/x86/copyi.asm: New file. - * mpn/x86/copyd.asm: New file. - * mpn/lisp/gmpasm-mode.el: New file. - -2000-02-16 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc32/v9/mul_1.asm: Conditionalize for PIC. - * mpn/sparc32/v9/addmul_1.asm: Likewise. - * mpn/sparc32/v9/submul_1.asm: Likewise. - * mpn/sparc32/v8/supersparc/udiv.asm: Likewise. - * mpn/sparc32/udiv_fp.asm: Likewise. - -2000-02-16 Linus Nordberg <linus@swox.se> - - * configure.in: Add mechanism for including target specific - m4-files in config.m4. - * configure: Regenerate. - - * acinclude.m4 (GMP_PROG_CCAS): Begin assembly lines (except - labels) with a tab character. HP-UX demands it. - (GMP_CHECK_ASM_SIZE): Ditto. - (GMP_CHECK_ASM_LSYM_PREFIX): Ditto. - (GMP_CHECK_ASM_LABEL_SUFFIX): Set to empty string for HP-UX. - (GMP_CHECK_ASM_GLOBL): Change `.xport' --> `.export'. - * aclocal.m4: Regenerate. - -2000-02-16 Linus Nordberg <linus@swox.se> - - * acinclude.m4 (GMP_CHECK_ASM_LSYM_PREFIX): Define LSYM_PREFIX as - the prefix only, no argument. - * aclocal.m4: Regenerate. - * configure: Regenerate. - - * mpn/asm-defs.m4 (L): No argument to LSYM_PREFIX. - -2000-02-15 Linus Nordberg <linus@swox.se> - - * acinclude.m4: Prefix all temporary shell variables with - `gmp_tmp_'. - (GMP_PROG_CC_FIND): Use defaults if no arguments are passed. - Quote use of arguments. - (GMP_PROG_CCAS): New macro. - (GMP_INIT): New macro. - (GMP_FINISH): New macro. - (GMP_INCLUDE): New macro. - (GMP_SINCLUDE): New macro. - (GMP_DEFINE): New macro. - (GMP_CHECK_ASM_LABEL_SUFFIX): New macro. - (GMP_CHECK_ASM_TEXT): New macro. - (GMP_CHECK_ASM_DATA): New macro. - (GMP_CHECK_ASM_GLOBL): New macro. - (GMP_CHECK_ASM_TYPE): New macro. - (GMP_CHECK_ASM_SIZE): New macro. - (GMP_CHECK_ASM_LSYM_PREFIX): New macro. - (GMP_CHECK_ASM_W32): New macro. - * aclocal.m4: Regenerate. - - * configure.in: Find m4 and nm for target. - Use new macros to create config.m4. - Prefix all temporary shell variables with `tmp_'. - Pass `-X 64' to nm for 64-bit PPC target with 64-bit compiler. - * configure: Regenerate. - - * Makefile.am (dist-hook): *Really* remove all CVS dirs in - dist. - * Makefile.in: Regenerate. - - * mpn/Makefile.am: Add target for building .lo and .o from - .asm. - Pass -DPIC to preprocessor (CPP/m4) when building .lo. - Build .o a second time for target .lo, without -DPIC to - preprocessor. - (SUFFIX): Add `.asm'. - (EXTRA_DIST): Add asm-defs.m4. - * mpn/Makefile.in: Regenerate. - - * mpf/Makefile.in: Regenerate. - * mpf/tests/Makefile.in: Regenerate. - * mpq/Makefile.in: Regenerate. - * mpq/tests/Makefile.in: Regenerate. - * mpz/Makefile.in: Regenerate. - * mpz/tests/Makefile.in: Regenerate. - -2000-02-15 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc32/udiv_fp.asm: Change `RODATA' to `DATA'. - * mpn/sparc32/v8/supersparc/udiv.asm: Likewise. - * mpn/sparc32/v9/addmul_1.asm: Likewise. - * mpn/sparc32/v9/submul_1.asm: Likewise. - * mpn/sparc32/v9/mul_1.asm: Likewise. - - * mpn/sparc32/add_n.asm: Rename `size' -> `n'. - * mpn/sparc32/sub_n.asm: Likewise. - - * sparc32: Rename `.s' and `.S' files to `.asm'. - * sparc64: Rename `.s' and `.S' files to `.asm'. - -2000-02-11 Torbjorn Granlund <tege@swox.com> - - * config.sub: Adopt to new config.guess sparc naming conventions. - - * config.guess (sun4u:SunOS:5.*:*): Change `sparc9' to `sparcv9'. - * config.guess (sun4m:SunOS:5.*:*): Change to sun4[md]:SunOS:5.*:* and - change `sparc8' to `sparcv8'. - - * mpn/x86/add_n.S: Use PROLOGUE/EPILOGUE. - * mpn/x86/sub_n.S: Likewise. - - * mpn/x86/syntax.h (PROLOGUE): New name for PROLOG. - * mpn/x86/syntax.h (EPILOGUE): New name for EPILOG. - -2000-02-11 Linus Nordberg <linus@swox.se> - - * configure.in: Better path for 64-bit sparc without 64-bit cc. - Change sparc8 --> sparcv8. - Change sparc9 --> sparcv9. - * configure: Regenerate. - -2000-02-10 Linus Nordberg <linus@swox.se> - - * configure.in: Use Autoconf. - * Makefile.am: New file. - - * AUTHORS: New file. - * COPYING: New file. - * acinclude.m4: New file. - * acconfig.h: New file. - - * configure: Generate. - * Makefile.in: Generate. - * aclocal.m4: Generate. - * config.in: Generate. - - * install.sh: Remove. - * install-sh: New file from Automake. - * missing: New file from Automake. - * ltconfig: New file from Libtool. - * ltmain.sh: New file from Libtool. - - * mpf/Makefile.am: New file. - * mpf/Makefile.in: Generate. - * mpf/configure.in: Remove. - * mpf/tests/Makefile.am: New file. - * mpf/tests/Makefile.in: Generate. - * mpf/tests/configure.in: Remove. - - * mpn/Makefile.am: New file. - * mpn/Makefile.in: Generate. - * mpn/configure.in: Remove. - - * mpq/Makefile.am: New file. - * mpq/Makefile.in: Generate. - * mpq/configure.in: Remove. - * mpq/tests/Makefile.am: New file. - * mpq/tests/Makefile.in: Generate. - * mpq/tests/configure.in: Remove. - - * mpz/Makefile.am: New file. - * mpz/Makefile.in: Generate. - * mpz/configure.in: Remove. - * mpz/tests/Makefile.am: New file. - * mpz/tests/Makefile.in: Generate. - * mpz/tests/configure.in: Remove. - -2000-02-10 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/add_n.S: Don't use label L0 twice. - * mpn/x86/sub_n.S: Likewise. - -2000-01-20 Linus Nordberg <linus@swox.se> - - * demos/pexpr.c: Don't use setup_error_handler() in windoze. - -2000-01-19 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (sigaltstack): #define to sigstack for AIX. - (setup_error_handler): Don't write to ss_size and ss_flags - on AIX. - -2000-01-11 Torbjorn Granlund <tege@swox.com> - - * mpn/configure.in (hppa2.0*-*-*): Move assignment of - target_makefile_frag to where it belongs. - -1999-12-21 Torbjorn Granlund <tege@swox.com> - - * longlong.h (v9 umul_ppmm): New #define. - (v9 udiv_qrnnd): New #define. - -1999-12-14 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/divmod_1.c: Use invert_limb. - * mpn/generic/mod_1.c: Use invert_limb. - - * gmp-impl.h (invert_limb): Put definition here. - * mpn/generic/divrem.c (invert_limb): Delete definition. - * mpn/generic/divrem_2.c (invert_limb): Delete definition. - - * gmp.h (mpn_divrem): Inhibit for non-gcc. - But declare (undo 1999-11-22 change). - - * gmp-impl.h (DItype,UDItype): Do these also if _LONG_LONG_LIMB. - - * longlong.h: Move 64-bit hppa code out of __GNUC__ conditional. - - * stack-alloc.c (HSIZ): New #define. - (__tmp_alloc): Use HSIZ instead of sizeof(tmp_stack). - -1999-12-10 Torbjorn Granlund <tege@swox.com> - - * config.sub: Clean up handling of x86 CPUs: Properly recognize - Amd CPUs as unique entities. Use manufacturer's names of - processors ("pentium", etc); still match ambiguous names like - "i586", "i686", "p6" but be conservative in interpreting them. - - * configure.in: Recognize x86 CPU types known by config.guess. - * mpn/configure.in: Likewise. Add x86/mmx path component as - appropriate. - (athlon-*-*): Fix typo. - - * config.guess: Update x86 recog code to initially match - more than just i386. - Call K6-2 and K6-III for "k62" and "k63" respectively. - - * config.guess: Recognize x86 CPU types. - Update code for FreeBSD, NetBSD, OpenBSD, Linux. - -1999-12-08 Torbjorn Granlund <tege@swox.com> - - * mpf/pow_ui.c: Avoid final squaring in loop. - -1999-12-07 Torbjorn Granlund <tege@swox.com> - - * gmp-impl.h (udiv_qrnnd_preinv2gen): Prefix local variables with `_'. - (udiv_qrnnd_preinv2norm): Likewise. - From Kevin Ryde: - (HAVE_ALLOCA): #define also if defined (alloca). - -1999-12-04 Torbjorn Granlund <tege@swox.com> - - * mpn/tests/add_n.c: Set OPS from CLOCK. - * mpn/tests/sub_n.c: Likewise. - * mpn/tests/mul_1.c: Likewise. - * mpn/tests/addmul_1.c: Likewise. - * mpn/tests/submul_1.c: Likewise. - - * mpn/tests/lshift.c: Update from add_n.c. - * mpn/tests/rshift.c: Likewise. - -1999-12-03 Torbjorn Granlund <tege@swox.com> - - * mpn/powerpc64/copy.S: New file. - -1999-12-02 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/copy.s: New file. - - * mpn/tests/copy.c: New file. - - * mpn/configure.in: Recognize more Amd CPUs; Set special paths for - k7 CPU. - - * configure.in: Recognize Amd x86 CPUs. - - * mpz/fdiv_r_2exp.c: In rounding code, read in->_mp_size before - writing to res->_mp_size. - - * mpn/powerpc64/*.S: Clean up assembly syntax, add function headers. - * mpn/powerpc64/gmp-mparam.h: (KARATSUBA_MUL_THRESHOLD): #define. - (KARATSUBA_SQR_THRESHOLD): #define. - - * mpn/tests/add_n.c (main): Only print test number if TIMES==1 - and not printing. - (main): Don't run reference code if NOCHECK. - * mpn/tests/sub_n.c: Likewise. - * mpn/tests/mul_1.c: Likewise. - * mpn/tests/addmul_1.c: Likewise. - * mpn/tests/submul_1.c: Likewise. - - * mpn/tests/lshift.c: (main): Only print test number if TIMES==1 - and not printing. - * mpn/tests/rshift.c: Likewise. - -1999-11-22 Torbjorn Granlund <tege@swox.com> - - * gmp.h (mpz_init_set_str): Declare using __gmp_const. - (mpz_set_str): Likewise. - (mpf_init_set_str): Likewise. - (mpf_set_str): Likewise. - (mpn_set_str): Likewise. - (__gmp_0): Likewise. - (mpn_divrem): Remove separate declaration; it's defined later in - this file. - - * gmp.h: Replace "defined (__STD__)' by (__STDC__-0) in - expressions involving more than one term, to handle Sun's compiler - that most helpfully sets __STDC__ to 0. - * gmp-impl.h: Likewise. - * longlong.h: Likewise. - -1999-11-21 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/gmp-mparam.h (KARATSUBA_MUL_THRESHOLD): #define. - (KARATSUBA_SQR_THRESHOLD): #define. - - * mpn/sparc64/lshift.s: Compensate stack references for odd stack ptr. - * mpn/sparc64/rshift.s: Likewise. - - * mpn/sparc64/addmul_1.s: Propagate carry properly. - * mpn/sparc64/submul_1.s: Likewise. - - * mpn/sparc64/sub_n.s: Rewrite. - - * mpn/sparc64/sub_n.s: Get operand order for main subcc right - (before scrapping this code for new code). - -1999-11-20 Torbjorn Granlund <tege@swox.com> - - * mpn/sparc64/add_n.s: Rewrite. - -1999-11-17 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/syntax.h (PROLOG): New #define. - (EPILOG): New #define. - - * gmp.h (mpn_addsub_n): Declare. - * gmp.h (mpn_add_nc): Declare. - * gmp.h (mpn_sub_nc): Declare. - * mpn/powerpc64/addsub_n.S: New file. - -1999-11-17 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/gmp-mparam.h - (KARATSUBA_MUL_THRESHOLD): Only #define #ifndef. - (KARATSUBA_SQR_THRESHOLD): Likewise. - -1999-11-14 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/mul_1.S: Unroll and optimize for P6 and K7. - -1999-11-09 Torbjorn Granlund <tege@swox.com> - - * mpn/x86/p6/gmp-mparam.h - (KARATSUBA_MUL_THRESHOLD): Only #define #ifndef. - (KARATSUBA_SQR_THRESHOLD): Likewise. - -1999-11-05 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/addsub_n.c: New file. - -1999-11-02 Torbjorn Granlund <tege@swox.com> - - * config.guess: Handle alpha:FreeBSD with alpha:NetBSD. - - * configure.in (vax*-*-*): New case. - * config/mt-vax: New file. - * mpn/vax/add_n.s: Rewrite. - * mpn/vax/sub_n.s: Rewrite. - -1999-10-31 Torbjorn Granlund <tege@swox.com> - - * mpn/vax/rshift.s: New file. - * mpn/vax/lshift.s: New file. - -1999-10-29 Torbjorn Granlund <tege@swox.com> - - * config.sub: Handle k5 and k6. - * mpn/configure.in: Recognize k6. - - * mpf/tests/t-get_d.c (LOW_BOUND, HIGH_BOUND): New #defines. - (main): Tighten error bounds to 14 digits. - - * longlong.h (default umul_ppmm, when smul_ppmm exists): - Rename __m0 => __xm0, __m1 => __xm1. - (default smul_ppmm): Likewise. - -1999-10-11 Torbjorn Granlund <tege@swox.com> - - * config.guess: Reverse the test for POWER vs PowerPC. - * config.guess (sun4m:SunOS:5.*:*): New case. - * config.guess (sun4u:SunOS:5.*:*): New case. - -1999-09-29 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/divrem_2.c: Clean up comments. - -1999-09-23 Torbjorn Granlund <tege@swox.com> - - * mpz/tests/Makefile.in: Use move-if-change when generating binaries. - * mpf/tests/Makefile.in: Likewise. - * mpq/tests/Makefile.in: Likewise. - * mpz/tests/move-if-change: New file. - * mpf/tests/move-if-change: New file. - * mpq/tests/move-if-change: New file. - - * gmp.h (mpn_incr_u): New macro (from mpn/generic/mul_n.c). - (mpn_decr_u): New macro. - - * mpn/generic/mul_n.c (mpn_incr): Delete. - * mpn/generic/mul_n.c: Update usages mpn_incr => mpn_incr_u. - * mpn/generic/divrem_newt.c: Use mpn_incr_u and mpn_decr_u instead of - mpn_add_1 and mpn_sub_1. - * mpn/generic/sqrtrem.c: Likewise. - * mpz/cdiv_q_ui.c: Likewise. - * mpz/cdiv_qr_ui.c: Likewise. - * mpz/fdiv_q_ui.c: Likewise. - * mpz/fdiv_qr_ui.c: Likewise. - - * mpn/generic/sqrtrem.c: Start single-limb Newton iteration from 18 - bits. - -1999-07-27 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/divrem_1.c (__gmpn_divrem_1n): New function. - - * mpn/generic/divrem_2.c: New file, code from divrem.c, `case 2:'. - * mpn/Makefile.in: Compile divrem_2.c. - * make.bat: Compile divrem_2.c. - * mpn/configure.in (functions): Add divrem_2. - * gmp.h: Declare mpn_divrem_2. - - * mpn/generic/divrem.c: Delete special cases, handle just divisors - of more than 2 limbs. - * gmp.h (mpn_divrem): Call mpn_divrem_1, mpn_divrem_2, as appropriate. - - * mpn/generic/divrem.c: Rework variable usage for better register - allocation. - -1999-07-26 Torbjorn Granlund <tege@swox.com> - - * mpn/alpha/ev5/add_n.s: Rewrite for better ev6 speed. - * mpn/alpha/ev5/sub_n.s: Likewise. - -1999-07-21 Torbjorn Granlund <tege@swox.com> - - * longlong.h (alpha): Define umul_ppmm for cc. - - * gmp-impl.h (DItype, UDItype): Define for non-gcc if _LONGLONG is - defined. - -1999-07-15 Torbjorn Granlund <tege@swox.com> - - * longlong.h (powerpc64 count_leading_zeros): Fix typo. - (powerpc64 add_ssaaaa): Fix typos. - (powerpc64 sub_ddmmss): Fix typos. - -1999-07-14 Torbjorn Granlund <tege@swox.com> - - * mpz/tests/Makefile.in: Pass XCFLAGS when linking. - * mpf/tests/Makefile.in: Likewise. - * mpq/tests/Makefile.in: Likewise. - * mpn/Makefile.in (.S.o): Pass XCFLAGS. - - * longlong.h: Add support for 64-bit PowerPC. - * config.sub: Handle "powerpc64". - * configure.in: Likewise. - * mpn/configure.in: Suppress use of config/t-ppc-aix for now, - it seems compiler passes proper options. - * mpn/powerpc64/*.S: New files. - - * Makefile.in (FLAGS_TO_PASS): Pass "AR=$(AR)". - -1999-07-07 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (factor): Change alloca call to a malloc/free pair. - - * mpn/powerpc32/syntax.h: Add #define's for crN. - - * gmp.h (gmp_rand_algorithm): Remove spurious `,'. - -1999-07-05 Torbjorn Granlund <tege@swox.com> - - * mpn/generic/divrem_1.c: Normalize divisor when needed. - -1999-07-02 Torbjorn Granlund <tege@swox.com> - - * mpn/configure.in (powerpc*-apple-mach): New configuration. - * mpn/powerpc32/*: Add support for apple-macho syntax. - * mpn/powerpc32/syntax.h: New file. - * gmp-impl.h: Don't use `__attribute__' syntax for Apple's perversion - of GCC. - -1999-05-26 Linus Nordberg <linus@swox.se> - - * rand.c (gmp_rand_init): Fix typo. - - * mpn/generic/rawrandom.c (mpn_rawrandom): Count bits, not limbs, - to keep track of how many rounds to do in loop. Clean up - temporary allocation. Update `seedsize' inside loop. Mask off - the correct number of bits from final result. Init `mcopyp' even - when not normalizing `m'. - - * randlc.c (gmp_rand_init_lc): Fix typo (don't call - mpz_init_set_ui()). - - * mpn/generic/rawrandom.c (mpn_rawrandom): Set SIZ(s->seed) when - reallocating. - - * tests/rand/Makefile (test, bigtest): Add 33-bit tests. - - * tests/rand/gen.c (main): Set precision of variable passed to - mpf_urandomb(). Add option `-p'. - -1999-05-25 Linus Nordberg <linus@swox.se> - - * randcm.c: Remove. - * randcmui.c: Remove. - * Makefile.in: Remove randcm and randcmui. - * make.bat: Ditto. - * gmp-impl.h: Remove prototypes for __gmp_rand_init_common() and - __gmp_rand_init_common_ui(). - * randlc.c (gmp_rand_init_lc): Don't call - __gmp_rand_init_common(). - - * randlcui.c (gmp_rand_init_lc_ui): Don't call - __gmp_rand_init_common_ui(). - - * gmp.h (__gmp_rand_state_struct): Remove unused member `maxval'. - * randclr.c (gmp_rand_clear): Remove reference to s->maxval. - * randcm.c (__gmp_rand_init_common): Ditto - - * mpn/generic/rawrandom.c (mpn_rawrandom): Don't calculate nlimbs - twice. - - * gmp.h (__gmp_rand_dist): Remove. - -1999-05-24 Linus Nordberg <linus@swox.se> - - * mpn/generic/rawrandom.c: Clean up comments. - - * gmp.texi: Add documentation for random number generation. - -1999-05-21 Linus Nordberg <linus@swox.se> - - * gmp.h: Typedef `gmp_rand_state' as an array with one element. - Change prototypes accordingly. - * gmp-impl.h: Change prototypes using `gmp_rand_state'. - * rand.c (gmp_rand_init): Take `gmp_rand_state' as argument - instead of a pointer to a `gmp_rand_state'. - * mpf/urandom.c (mpf_urandomb): Ditto. - * mpz/urandom.c (mpz_urandomb): Ditto. - * mpn/generic/rawrandom.c (mpn_rawrandom): Ditto. - * randcmui.c (__gmp_rand_init_common_ui): Ditto. - * randlc.c (gmp_rand_init_lc): Ditto. - * randlcui.c (gmp_rand_init_lc_ui): Ditto. - * randui.c (gmp_rand_init_ui): Ditto. - * randcm.c (__gmp_rand_init_common): Ditto. - * randclr.c (gmp_rand_clear): Ditto. - - * tests/rand/gen.c (main): Pass `s' to rand-funcs instead of address - of `s'. - -1999-05-20 Linus Nordberg <linus@swox.se> - - * Makefile.in: Rename randi.c --> rand.c, randi_lc.c --> randlc.c, - randicom.c --> randcm.c. Add randui.c, randcmui.c, randlcui.c. - * make.bat: Ditto. - - * gmp.h: Add prototypes for gmp_rand_init_ui() and - gmp_rand_init_lc_ui(). - * gmp-impl.h: Add prototypes for __gmp_rand_init_common() and - __gmp_rand_init_common_ui(). - - * randlc.c, randcm.c, randclr.c, rand.c: Change #include of - <gmp.h> to "gmp.h". - * randclr.c: Include stdlib.h for free(). - * rand.c: Include gmp-impl.h. - -1999-05-12 Torbjorn Granlund <tege@swox.com> - - * mpn/configure.in: Put generic m68k alternative last. - -1999-05-04 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c (setup_error_handler): Use sigemptyset to create - empty set (for portability). - (fns): Fix typo '#if #if'. - (mpz_eval_expr): Implement FERMAT and MERSENNE. - - * demos/pexpr.c: Cast longjmp argument via long to silent warnings on - 64-bit hosts. - -1999-05-03 Torbjorn Granlund <tege@swox.com> - - * demos/pexpr.c: Add #defines for GMP 1.x and 2.0 compatibility. - - * demos/pexpr.c (setup_error_handler): New function; take signal - handler setup code from main(), with major modifications to use modern - signal interface. - (main): Remove signal handler setup code; call setup_error_handler. - -1999-04-29 Linus Nordberg <linus@swox.se> - - * tests/rand/findcl.c (main): Add option '-i' for interval factor. - Separate v and merit lose figures. Add '-v' for version. - -1999-04-28 Linus Nordberg <linus@swox.se> - - * tests/rand/statlib.c: Change debugging stuff. - - * tests/rand/gmpstat.h: Add debug values definitions. - - * tests/rand/findcl.c (main): Print low and high merit on startup. - Print version string on startup. Catch SEGV and HUP. Add option -d - for debug. Fix bug making test for v too hard. - (sh_status): New function. - (sh_status): Flush stdout. Add RCSID. - -1999-04-27 Linus Nordberg <linus@swox.se> - - * tests/rand/Makefile (clean): Add target. - -1999-04-27 Linus Nordberg <linus.nordberg@canit.se> - - * tests/rand/stat.c: Include gmpstat.h. - Add global int g_debug. - - * tests/rand/spect.c: Include <unistd.h>. - - * tests/rand/findcl.c (main): Input is `m', not all factors of `m'. - Print only the very first matching multiplier. Include <unistd.h>. - Flush stdout. Print "done." when done. - - * tests/rand/spect.c: Move everything but main() to statlib.c. - - * tests/rand/findcl.c: New file. - - * tests/rand/gmpstat.h: New file. - - * tests/rand/statlib.c (merit, merit_u, f_floor, vz_dot, - spectral_test): New functions. - -1999-04-27 Torbjorn Granlund <tege@swox.com> - - * mpn/configure.in: Fix typo, "sparc-*)" was "sparc)". - -1999-04-21 Torbjorn Granlund <tege@swox.com> - - * config.sub: Recognize ev6. - -1999-04-12 Linus Nordberg <linus.nordberg@canit.se> - - * urandom.c: Split up into randclr.c, randi.c, randi_lc.c, - randicom.c. - * randclr.c, randi.c, randi_lc.c, randicom.c: New files. - * Makefile.in: Remove urandom. Add randclr, randi, randi_lc, - randicom. - * make.bat: Ditto - -1999-03-31 Torbjorn Granlund <tege@matematik.su.se> - - * configure.in (sparc9-*-solaris2.[789]*, etc): New alternative. - * mpn/configure.in: Use mt-sprc9 also for ultrasparc*-*-solaris2*. - -1999-03-30 Linus Nordberg <linus.nordberg@canit.se> - - * urandom.c (__gmp_rand_scheme): Change NULL->0. - Include "gmp.h" instead of <gmp.h>. - -1999-03-29 Linus Nordberg <linus.nordberg@canit.se> - - * gmp.h (__gmp_rand_data_lc): Now holds a, c, m instead of scheme - struct. - (__gmp_rand_lc_scheme_struct): Remove mpz_t's `a' and `m'. - - * tests/rand/stat.c (f_freq): Don't print 2nd level results if doing - 1st level. - - * tests/rand/gen.c (main): Set default algorithm to mpz_urandomb. - (main): Add option -c. - -1999-03-24 Linus Nordberg <linus.nordberg@canit.se> - - * tests/rand/Makefile (GMPINC): Rename to GMPH. - (GMPH): Add gmp-mparam.h. - (CFLAGS): Add -I$(GMPLIBDIR)/mpn - -1999-03-23 Linus Nordberg <linus.nordberg@canit.se> - - * Makefile.in: Compile top-dir/urandom.c. - * make.bat: Ditto. - - * mpn/Makefile.in: Compile rawrandom.c. - * make.bat: Ditto. - - * mpn/configure.in (functions): Add rawrandom. - - * gmp.h (__gmp_rand_scheme_struct): Rename to - __gmp_rand_lc_scheme_struct. - (__gmp_rand_data_lc): Remove member 'n'. Allocate a - __gmp_rand_lc_scheme_struct instead of a pointer to one. - Add prototype for gmp_rand_init_lc(), mpn_rawrandom(). - New prototype for mpz_urandomb(). - - * urandom.c: New file. - (__gmp_rand_init_common): New function. - (gmp_rand_init_lc): New function. - (gmp_rand_init): Don't init data_lc->n. Call gmp_rand_init_lc() - and __gmp_rand_init_common(). - (gmp_rand_clear): Remove reference to data_lc->n. - - * mpz/urandom.c (gmp_rand_init, gmp_rand_clear): Move to new file - urandom.c in top-dir. - (mpz_urandomb): Add function parameter nbits. Call mpn_rawrandom(). - - * mpf/urandom.c (mpf_urandomb): Call mpn_rawrandom(). - - * mpn/generic/rawrandom.c: New file. - (mpn_rawrandom): New function. - -1999-03-17 Torbjorn Granlund <tege@matematik.su.se> - - * extract-dbl.c: When packing result, adjust exp when sc == 0. - - * mpf/tests/t-get_d.c: New file. - * mpf/tests/Makefile.in: Compile t-get_d.c. - -1999-03-16 Linus Nordberg <linus.nordberg@canit.se> - - * mpz/urandom.c (__gmp_rand_scheme): Add extra braces around the - mpz_t members. - - * make.bat: Compile mpz/urandom.c and mpf/urandom.c - - * tests/rand/statlib.c (ks_table): Use mpf_pow_ui() and exp(). - - * tests/rand/gen.c: Include unistd.h for getopt. - -1999-03-15 Linus Nordberg <linus.nordberg@canit.se> - - * mpz/urandom.c (gmp_rand_init): New function. - (gmp_rand_clear): New function. - (mpz_urandomb): New function. - - * mpz/Makefile.in: Compile urandom.c - - * mpf/urandom.c (mpf_urandomb): New function. - - * mpf/Makefile.in: Compile urandom.c. - - * gmp.h (__gmp_rand_state_struct, __gmp_rand_scheme_struct): New - structs for randomization functions. - (gmp_rand_dist, gmp_rand_alogrithm): New enums for randomization - functions. - (mpz_urandomb, mpf_urandomb): Add prototype. - (gmp_rand_init, gmp_rand_clear): Add prototype. - - * tests/rand/gen.c, stat.c, statlib.c, statlib.h: New files. - * tests/rand/Makefile, tests/rand/ChangeLog: New files. - -1999-03-15 Torbjorn Granlund <tege@matematik.su.se> - - * .gdbinit: New file. - - * mpz/dump.c: New file. - * mpz/Makefile.in: Compile dump.c. - * make.bat: Likewise. - * gmp.h (mpz_dump): Declare. - -1999-03-14 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/tests/reuse.c: Also test mpz_invert and mpz_divexact. - - * mpz/tests/convert.c: Update to GMP 2 variable syntax. - -1999-03-13 Torbjorn Granlund <tege@matematik.su.se> - - * mpf/README: New file. - * mpz/README: New file. - - * mpf/pow_ui.c: New file. - * mpf/Makefile.in: Compile pow_ui.c. - * make.bat: Likewise. - * gmp.h (mpf_pow_ui): Declare. - -1999-03-12 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/configure.in: Stage 1 of rewrite. - * mpn/underscore.h: New name for bsd.h. - * mpn/sysv.h: Deleted. - - * mpn/m68k/*: Don't include sysdep.h. - - * mpn/pa64/README: New file. - -1999-03-11 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/powerpc32/add_n.S: Add support for both AIX and ELF syntax. - Renamed from `.s'. - * mpn/powerpc32/sub_n.S: Likewise. - * mpn/powerpc32/lshift.S: Likewise. - * mpn/powerpc32/rshift.S: Likewise. - * mpn/powerpc32/mul_1.S: Likewise. - * mpn/powerpc32/addmul_1.S: Likewise. - * mpn/powerpc32/submul_1.S: Likewise. - - * mpn/powerpc32/umul.S: New file. - * mpn/sparc32/v8/umul.S: New file. - * mpn/sparc32/umul.S: New file. - * mpn/x86/umul.S: New file. - * mpn/x86/udiv.S: New file. - - * mpn/Makefile.in (mul_basecase.o): Delete rule. - -1999-02-22 Torbjorn Granlund <tege@matematik.su.se> - - * configure.in (hppa2.0*-*-*): Force use of GCC. - - * extract-dbl.c: Handle IEEE denormalized numbrs. Clean up. - -1998-12-02 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/Makefile.in (CCAS): New macro. - (.s.o): Use CCAS. - (.S.o): Likewise. - - * mpn/Makefile.in (mul_basecase.o): Add dependency. - (sqr_basecase.o): Likewise. - (mod_1.o): Likewise. - - * demos/pexpr.c (cputime): Test also __hpux. - (cleanup_and_exit): Check SIGXCPU only #ifdef LIMIT_RESOURCE_USAGE. - - * mpz/tests/t-2exp.c: Use urandom, not random. - - * mpn/configure.in (arm*-*-*): New alternative. - -1998-11-30 Torbjorn Granlund <tege@matematik.su.se> - - * gmp-impl.h (union ieee_double_extract): Special case for - little-endian arm. - (LIMBS): Alias for PTR. - -1998-11-26 Torbjorn Granlund <tege@matematik.su.se> - - * longlong.h (m68000 umul_ppmm): Use `muluw', not `mulu'. - (m68k stuff): Clean up; add coldfire support. - -1998-11-23 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/mips3/gmp-mparam.h (KARATSUBA_MUL_THRESHOLD): #define. - (KARATSUBA_SQR_THRESHOLD): #define. - - * mpn/sparc32/v9/README: New file. - -1998-11-20 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/x86/README: New file. - - * mpn/arm/gmp-mparam.h: New file. - * mpn/pa64/gmp-mparam.h: New file. - * mpn/hppa/gmp-mparam.h: New file. - * mpn/x86/pentium/gmp-mparam.h: New file. - * mpn/sparc32/v9/gmp-mparam.h: New file. - * mpn/powerpc32/gmp-mparam.h: New file. - * mpn/x86/p6/gmp-mparam.h: New file. - - * mpn/alpha/gmp-mparam.h (KARATSUBA_MUL_THRESHOLD): #define. - (KARATSUBA_SQR_THRESHOLD): #define. - - * mpn/configure.in: Point to x86/p6 when appropriate. - - * mpn/power/umul.s: New file. - * mpn/power/sdiv.s: New file. - * mpn/pa64/addmul_1.S: New file. - * mpn/pa64/submul_1.S: New file. - * mpn/pa64/mul_1.S: New file. - * mpn/pa64/udiv_qrnnd.c: New file. - * mpn/pa64/umul_ppmm.S: New file. - * mpn/mips2/umul.s: New file. - * mpn/m68k/mc68020/umul.s: New file. - * mpn/m68k/mc68020/udiv.s: New file. - * mpn/hppa/hppa1_1/umul.s: New file. - * mpn/alpha/umul.s: New file. - * mpn/a29k/udiv.s: New file. - * mpn/a29k/umul.s: New file. - -1998-11-17 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/x86/mul_basecase.S: New file for non-pentiums. - * mpn/x86/mul_basecase.S: Move to mpn/x86/pentium. - -1998-11-16 Torbjorn Granlund <tege@matematik.su.se> - - * make.bat: Compile mul_basecase.c and sqr_basecase.c. - -1998-11-10 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/invert.c: Defer writing to parameter `invert' until - end. - -1998-11-03 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/pa64/udiv_qrnnd.c: Handle more border cases. - -1998-10-29 Torbjorn Granlund <tege@matematik.su.se> - - * insert-dbl.c: Special case biased exponents < 1; Get boundary for - Inf right. - - * longlong.h (COUNT_LEADING_ZEROS_NEED_CLZ_TAB): New #define. - -1998-10-28 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/powerpc32/submul_1.s: Rewrite, optimizing for PPC604. - * mpn/powerpc32/addmul_1.s: Likewise. - * mpn/powerpc32/lshift.s: Likewise. - -1998-10-23 Torbjorn Granlund <tege@matematik.su.se> - - * config/mt-sprc9-gcc (XCFLAGS): Add -Wa,-xarch=v8plus. - - * mpn/sparc32/v9/submul_1.s: New file. - -1998-10-21 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/config/mt-pa2hpux: New file. - * mpn/configure.in (hppa2.0*-*-*): Use new 64-bit code. - - * config.sub: Recognize hppa2.0 as CPU type. - - * longlong.h (64-bit hppa): Add umul_ppmm and udiv_qrnnd. - * mpn/pa64/mul_1.S: New file. - * mpn/pa64/addmul_1.S: New file. - * mpn/pa64/submul_1.S: New file. - * mpn/pa64/umul_ppmm.S: New file. - * mpn/pa64/udiv_qrnnd.c: New file. - -1998-10-20 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/pprime_p.c: Pass 1L, not 1, to mpz_cmp_ui. - - * mpz/fdiv_q_2exp.c: Cast `long' argument to `mp_limb_t' for mpn calls. - * mpz/gcd_ui.c: Likewise. - * mpz/add_ui.c: Likewise. - * mpz/sub_ui.c: Likewise. - -1998-10-19 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/generic/bdivmod.c: Avoid using switch statement with mp_limb_t - index. - -1998-10-17 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/sparc32/v9/mul_1.s: Misc cleanups. - * mpn/sparc32/v9/addmul_1.s: Misc cleanups. - -1998-10-16 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/tests/{add,sub,}mul_1.c: Print xlimb using mpn_print. - - * mpz/tests/t-powm.c (SIZE): Increase to 50. - (EXP_SIZE): New parameter; use it for computing exp_size. - -1998-10-15 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/generic/divrem_newt.c: Use TMP_ALLOC interface. - - * mpn/generic/sqrtrem.c: Check BITS_PER_MP_LIMB before defining - assembly variants of SQRT. - -1998-10-14 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/tests: Clean up timing routines. Don't include longlong.h - where it is not needed. - (mpn_print): Handle printing when _LONG_LONG_LIMB. - * mpn/tests/{add,sub,}mul_1.c: Generate xlimb with mpn_random2 - and do it whether TIMES != 1 or not. - - * mpn/generic/mul_n.c: Delay assignment of `sign' for lower - register pressure. - - * mpn/sparc32/v9/mul_1.s: New file. - - * config/mt-sprc9-gcc: New file. - * configure.in: Use it. - - * mpn/configure.in: Use sparc64 for Solaris 2.7 and later with a - sparc v9 CPU. - * mpn/configure.in: Use sparc32/v9 for Solaris 2.6 or earlier with - a sparc v9 CPU. - - * mpf/sub.c: In initial code for ediff == 0, limit precision - before jumping to `normalize'. - -1998-10-13 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/hppa/hppa2_0/add_n.s: New file. - * mpn/hppa/hppa2_0/sub_n.s: New file. - * mpn/configure.in: Handle hppa2.0 (32-bit code for now). - - * config.guess: Update from egcs 1.1. - (9000/[3478]??:HP-UX:*:*): Properly return 2.0 for all known 2.0 - machines. - -1998-10-07 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/root.c (mpz_root): New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h (mpz_root): Declare. - - * mpz/perfpow.c: New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h (mpz_perfect_power_p): Declare. - - * mpz/remove.c: New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h (mpz_remove): Declare. - - * mpz/bin_ui.c: New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h (mpz_bin_ui): Declare. - - * mpz/bin_uiui.c: New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h (mpz_bin_uiui): Declare. - -1998-09-16 Torbjorn Granlund <tege@matematik.su.se> - - * longlong.h: Test for __powerpc__ in addition to _ARCH_PPC. - -Sat Sep 5 17:22:28 1998 Torbjorn Granlund <tege@matematik.su.se> - - * mpf/cmp_si.c: Compare most significant mantissa limb before - trying to deduce anything from the limb count. - * mpf/cmp_ui.c: Likewise. - -Tue Aug 18 10:24:39 1998 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/pprime_p.c (mpz_probab_prime_p): Add new code block - for doing more dividing. - -Sat Aug 15 18:43:17 1998 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/generic/divrem_newt.c: New name for divrem_newton.c. - * mpn/Makefile.in: Corresponding changes. - * mpn/configure.in: Likewise. - -Wed Aug 12 23:07:09 1998 Torbjorn Granlund <tege@matematik.su.se> - - * config.guess: Handle powerpc for NetBSD. - -Tue Jul 28 23:10:55 1998 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/fib_ui.c: New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h (mpz_fib_ui): Declare. - -Wed Jun 17 22:52:58 1998 Torbjorn Granlund <tege@matematik.su.se> - - * make.bat: Fix typo, `asm-synt.h' => `asm-syntax.h'. - -Wed Jun 3 11:27:32 1998 Torbjorn Granlund <tege@matematik.su.se> - - * config/mt-pwr: New file. - * config/mt-ppc: New file. - * configure.in: Use the new files. - -Tue Jun 2 13:04:17 1998 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/sparc32/v9/addmul_1.s: New file. - * mpn/config/mt-sprc9: New file. - * mpn/configure.in: Use mt-sprc9. - -Tue May 26 11:24:18 1998 Torbjorn Granlund <tege@matematik.su.se> - - * demos/factorize.c (factor_using_pollard_rho): Pass correct - parameters in recursive calls; join the two recursion arms. - - * mpf/set_q.c: Set result sign. - When normalizing the numerator, don't allow it to increase in size - beyond prec. - -Tue May 19 17:28:14 1998 Torbjorn Granlund <tege@matematik.su.se> - - * demos/factorize.c (factor_using_division): Call fflush - also for the factor 2. - -Mon May 18 15:51:01 1998 Torbjorn Granlund <tege@matematik.su.se> - - * make.bat: Pass -fomit-frame-pointer. Do not pass -g. - -Tue May 5 01:42:50 1998 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/Makefile.in (LOCAL_CC): Remove definition. - - * gmp.h: Get rid of GMP_SMALL stuff. - * mpz/Makefile.in: Likewise. - * mpq/Makefile.in: Likewise. - * mpf/Makefile.in: Likewise. - - * mpz/invert.c: Fix typo in comment. - -Mon May 4 23:05:32 1998 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/generic/sqrtrem.c: Check that __arch64__ is not defined - before defining sparc SQRT. - -Mon Apr 20 19:16:17 1998 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/generic/gcdext.c: Allow gp to be NULL. - -1998-04-03 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/configure.in: Recognize `alphaev5*', not `alphaev5'. - - * config.guess: Handle CPU variants for NetBSD. - -Mon Mar 16 13:07:54 1998 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/pprime_p.c: Use mpn_mod_1/mpn_preinv_mod_1 for computing mod PP, - not mpz_tdiv_r_ui (which expects an `unsigned long'). - (mpz_probab_prime_p): Change type of `r' to mp_limb_t. - -Thu Mar 12 17:19:04 1998 Torbjorn Granlund <tege@matematik.su.se> - - * gmp.h (mpf_ceil, mpf_floor, mpf_trunc): Add declarations. - - * config.guess: Update from FSF version. - * config.sub: Likewise. - - * config.guess: Add special handling of alpha-*-NetBSD. - -Wed Mar 11 00:55:34 1998 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/inp_str.c: Update from set_str.c. - Properly increment `nread' when skipping minus sign. - - * mpz/set_str.c: Check for empty string after having skipped - leading zeros. - -Mon Mar 9 19:28:00 1998 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/set_str.c: Skip leading zeros. - -Wed Mar 4 19:29:16 1998 Torbjorn Granlund <tege@matematik.su.se> - - * gmp.h (mpz_cmp_si): Cast argument before calling mpz_cmp_ui. - - * demos/factorize.c: Rewrite. - -1998-02-04 Torbjorn Granlund <tege@matematik.su.se> - - * configure.in (i[3456]86* etc): Check if using gcc before - choosing mt-x86. - - * configure.in (m68*-*-*): New alternative. - * config/mt-m68k: New file. - - * mpn/alpha/invert-limb.s: Put tables in text segment, - since not all systems support "rdata". - -Wed Feb 4 02:20:57 1998 Torbjorn Granlund <tege@matematik.su.se> - - * gmp.h (__GNU_MP_VERSION_SNAP): New #define. - (__GNU_MP_VERSION_MINOR): Now 1. - -Wed Jan 28 22:29:36 1998 Torbjorn Granlund <tege@tunnis.tmg.se> - - * longlong.h (alpha udiv_qrnnd): #define UDIV_NEEDS_NORMALIZATION. - -Wed Jan 28 20:28:19 1998 Torbjorn Granlund <tege@sophie.matematik.su.se> - - * mpz/pprime_p.c (mpz_probab_prime_p): Delete 59 from tried divisors. - -Mon Jan 26 01:39:02 1998 Torbjorn Granlund <tege@tunnis.tmg.se> - - * mpz/pprime_p.c (mpz_probab_prime_p): Major overhaul: Check small - numbers specifically; check small factors, then perform a fermat test. - -Tue Jan 13 14:58:28 1998 Torbjorn Granlund <tege@tunnis.tmg.se> - - * longlong.h (alpha udiv_qrnnd): Call __mpn_invert_normalized_limb - and udiv_qrnnd_preinv. - -Wed Jan 7 01:52:54 1998 Torbjorn Granlund <tege@tunnis.tmg.se> - - * mpn/configure.in (alpha*, extra_functions): Add invert-limb and - remove udiv_qrnnd. - - * mpn/tests/divrem.c: Get allocations right. - - * mpn/generic/divrem.c: Conditionally pre-invert most significant - divisor limb. - -Tue Jan 6 23:08:54 1998 Torbjorn Granlund <tege@tunnis.tmg.se> - - * mpn/generic/divrem_1.c: Rename variables to comply to conventions. - Make `i' have type `mp_size_t'. - -Tue Dec 30 22:21:42 1997 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/tdiv_qr_ui.c: Return the remainder. - * mpz/tdiv_r_ui.c: Likewise. - * mpz/tdiv_q_ui.c: Likewise. - * gmp.h: Change return type of mpz_tdiv_qr_ui, mpz_tdiv_r_ui, - mpz_tdiv_q_ui. - - * mpz/tdiv_ui.c: New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h (mpz_tdiv_ui): Declare. - -Fri Nov 7 04:21:15 1997 Torbjorn Granlund <tege@matematik.su.se> - - * mpf/integer.c (FUNC_NAME): Fix bogus test for mpf_trunc. - - * demos/isprime.c: New file. - - Sat Nov 1 19:32:25 1997 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/cmp_abs.c: New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h (mpz_cmp_abs): Declare. - - * mpz/cmp_abs_ui.c: New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h (mpz_cmp_abs_ui): Declare. - -Sat Sep 27 04:49:52 1997 Torbjorn Granlund <tege@tunnis.tmg.se> - - * mpz/fdiv_r_2exp.c: Get allocation for `tmp' right. - - * mpz/fdiv_q_2exp.c: In final result adjustment code, handle - that intermediate result is zero. - - * mpz/tests/t-2exp.c: New file. - * mpz/tests/Makefile.in: Handle t-2exp.c. - -Fri Sep 26 16:29:21 1997 Torbjorn Granlund <tege@tunnis.tmg.se> - - * mpz/divexact.c: Fix typo in test for whether to copy numerator to - quotient and move that statement to after handling quotient and - denominator overlap. Misc cleanups. - - * mpn/generic/gcd.c: Change count argument of mpn_lshift/mpn_rshift - calls to `unsigned int'. - * mpz/divexact.c: Likewise. - -Mon Sep 22 02:19:52 1997 Torbjorn Granlund <tege@pro.tmg.se> - - * mpz/tests/t-powm.c: Decrease `reps' to 2500. - - * mpz/tests/t-pow_ui.c: New file. - * mpz/tests/Makefile.in: Handle t-pow_ui.c. - - * mpz/ui_pow_ui.c: Get special cases for exponent and base right. - - * mpz/pow_ui.c: Increase temp space allocation by 1 limb. - Split `rsize' into two variables; compute space allocation into - `ralloc'. - -Sun Sep 7 04:15:12 1997 Torbjorn Granlund <tege@pro.tmg.se> - - * mpn/pa64/lshift.s: New file. - * mpn/pa64/rshift.s: New file. - * mpn/pa64/sub_n.s: New file. - -Sat Sep 6 19:14:13 1997 Torbjorn Granlund <tege@gmp.tmg.se> - - * mpn/pa64/add_n.s: New file. - * mpn/pa64: New directory. - -Tue Aug 19 16:17:09 1997 Torbjorn Granlund <tege@pro.tmg.se> - - * mpz/swap.c: New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h (mpz_swap): Declare. - - * mpn/generic/mul_n.c: Push assignment of x and y pointers into the - if/else clauses in several places. (Decreases register pressure.) - -Mon Aug 18 03:29:50 1997 Torbjorn Granlund <tege@pro.tmg.se> - - * mpn/thumb/add_n.s: New file. - * mpn/thumb/sub_n.s: New file. - * mpn/arm/add_n.s: New file. - * mpn/arm/sub_n.s: New file. - - * mpz/powm.c: After mpn_mul_n and mpn_mul calls, adjust product size - if most significant limb is zero. - * mpz/powm_ui.c: Likewise. - -Fri Aug 15 02:13:57 1997 Torbjorn Granlund <tege@pro.tmg.se> - - * mpn/arm/m/mul_1.s: New file. - * mpn/arm/m/addmul_1.s: New file. - - * mpn/powerpc32/mul_1.s: Rewrite. - - * mpn/alpha/mul_1.s: Prefix labels with `.'. - -Mon Aug 11 02:37:16 1997 Torbjorn Granlund <tege@pro.tmg.se> - - * mpn/powerpc32/add_n.s: Rewrite. - * mpn/powerpc32/sub_n.s: Rewrite. - -Sun Aug 10 17:07:15 1997 Torbjorn Granlund <tege@pro.tmg.se> - - * mpn/powerpc32/addmul_1.s: Delete obsolete comments. - * mpn/powerpc32/submul_1.s: Likewise. - -Fri Jul 25 20:07:54 1997 Torbjorn Granlund <tege@pro.tmg.se> - - * mpz/addmul_ui.c: New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h (mpz_addmul_ui): Declare. - - * mpz/setbit.c: Add missing code after final `else'. - -Tue Jul 22 17:45:01 1997 Torbjorn Granlund <tege@tunnis.tmg.se> - - * mpn/sh/add_n.s: Fix typo. - * mpn/sh/sub_n.s: Likewise. - - * longlong.h (ns32k count_trailing_zeros): Fix typo. - - * insert-dbl.c: Check for exponent overflow and return Inf. - - * mpz/get_d.c: Rewrite to avoid rounding errors. - -Thu May 29 11:51:07 1997 Torbjorn Granlund <tege@pro.tmg.se> - - * mpq/add.c: Swap some usages of tmp1 and tmp2 to make sure - their allocation suffices. - * mpq/sub.c: Likewise. - -Wed Apr 16 02:24:25 1997 Torbjorn Granlund <tege@pro.tmg.se> - - * demos/pexpr.c: New file. - - * mpn/generic/mul_n.c: Misc optimizations from Robert Harley. - - * gmp-impl.h (MPZ_PROVOKE_REALLOC): New #define. - -Sat Apr 12 17:54:04 1997 Torbjorn Granlund <tege@pro.tmg.se> - - * mpz/tstbit.c: New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h (mpz_tstbit): Declare. - - * mpz/tests/logic.c: Use MPZ_CHECK_FORMAT. - * mpz/tests/bit.c: New test. - * mpz/tests/Makefile.in: Handle bit.c. - - * mpz/ior.c: In -OP2,+OP1 case, normalize OP2 after call to mpn_sub_1. - - * gmp-impl.h (MPZ_CHECK_FORMAT): New #define. - -Thu Apr 10 00:30:14 1997 Torbjorn Granlund <tege@tmg.se> - - * longlong.h (POWER/PowerPC): Test _ARCH_PWR instead of _IBMR2. - -Wed Apr 9 18:23:31 1997 Torbjorn Granlund <tege@pro.tmg.se> - - * gmp-impl.h: Move defaulting of UMUL_TIME and UDIV_TIME from here... - * longlong.h: ...to here. - -Sun Mar 30 12:16:23 1997 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/generic/next_prime.c: New file. - - * mpn/generic/perfsqr.c: Remove definitions of PP and PP_INVERTED. - * gmp-impl.h: Put them here. - -Fri Mar 28 08:18:05 1997 Torbjorn Granlund <tege@matematik.su.se> - - * gmp-impl.h (MPN_COPY_INCR, MPN_COPY_DECR): Define as inline asm for - for x86, but leave disabled for now. - -Fri Feb 28 02:39:47 1997 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/Makefile.in (.S.o): Pass SFLAGS and CFLAGS also to compiler - for assembly phase. - (.s.o): Pass SFLAGS. - -Wed Feb 26 06:46:08 1997 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/configure.in: For Pentium Pro, use default code, not Pentium - optimized code. - - * mpn/x86/addmul_1.S: Unroll and optimize for Pentium Pro. - * mpn/x86/submul_1.S: Likewise. - -Thu Feb 13 08:26:09 1997 Torbjorn Granlund <tege@matematik.su.se> - - * mpf/Makefile.in: Compile floor.o, ceil.o and trunc.o (from - integer.c). - * make.bat: Likewise. - -Wed Feb 5 05:58:44 1997 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/configure.in (alpha*): Add cntlz to extra_functions. - -Wed Feb 4 03:30:45 1997 Torbjorn Granlund <tege@matematik.su.se> - - * mpf/integer.c: New file (supporting mpf_floor, mpf_ceil, mpf_trunc). - -Mon Feb 3 14:21:36 1997 Torbjorn Granlund <tege@matematik.su.se> - - * make.bat: Fix typo, set_dfl_prc => set_dfl_prec. - -Sun Feb 2 02:34:33 1997 Torbjorn Granlund <tege@matematik.su.se> - - * mpf/out_str.c: After outputting `-', decrement n_digits. - -Wed Jan 8 02:50:20 1997 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpn/generic/divrem.c: qextra_limbs => qxn. - -Wed Dec 18 07:50:46 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpz/tests/t-tdiv.c (SIZE): Increase to 200. - -Tue Dec 17 19:32:48 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpn/generic/divrem.c (mpn_divrem_classic): New name for mpn_divrem. - * gmp.h (mpn_divrem): New function. - * mpn/generic/divrem_newton.c: New file. - * mpn/configure.in (functions): Add divrem_newton. - * make.bat: Likewise. - -Thu Dec 12 17:55:13 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * gmp.h (_GMP_H_HAVE_FILE): Test also __dj_include_stdio_h_. - -Sat Dec 7 09:40:06 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpn/alpha/invert-limb.s: New file. - -Thu Dec 5 01:25:31 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpz/ui_pow_ui.c (mpz_pow2): New (static) function. - (mpz_ui_pow_ui): Rewrite. - - * make.bat: `pre_mod_1.c' => `pre_mod_.c'. Fix typo in path to - gmp-mpar.h. - -Fri Nov 15 00:49:55 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpz/ui_pow_ui.c: Rewrite for better speed. - -Fri Nov 1 16:36:56 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * Makefile.in (recursive make rules): Use `&&' instead of `;' as - delimiter. - -Fri Oct 25 17:12:36 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * gmp-impl.h (Cray/uxp MPN_COPY): Really declare as inline. - -Thu Oct 24 15:08:19 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpn/fujitsu/rshift.c: Fix typo in loop boundaries. - -Fri Oct 18 03:13:54 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpn/configure.in: Recognize `nextstep' for m68k variants; likewise - for x86 variants. - - * mpn/x86/syntax.h (INSND): New macro. - * mpn/x86/[lr]shift.S: Use INSND. - * mpn/x86/pentium/[lr]shift.S: Likewise. - * mpn/config/t-oldgas (SFLAGS): Pass -DOLD_GAS. - - * gmp-impl.h: In code for determining endianness, test also - __BIG_ENDIAN__ and __hppa__. Remove test of __NeXT__. - -Wed Oct 16 03:50:34 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpf/set_str.c: Let `prec' determine precision used in - exponentiation code; decrease allocation accordingly. - - * mpn/vax: Change `jsob*' to `sob*' in all files. - -Tue Oct 15 03:54:06 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * longlong.h (m88110 udiv_qrnnd): Change type of intermediate quotient - to DImode (divu.d generates a 64-bit quotient). - - * configure.in (m88110*): Fix typo. - - * mpf/get_str.c: Compute exp_in_base using `double' to avoid overflow. - - * gmp-impl.h (struct bases): Change type of chars_per_bit_exactly from - float to double. - * mpn/mp_bases.c (__mp_bases): Give 17 digits for chars_per_bit_exactly - field. - - * mpf/get_str.c: Let `prec' determine precision used in - exponentiation code; decrease allocation accordingly. - -Sun Oct 13 03:31:53 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * longlong.h: Major cleanup. - (__udiv_qrnnd_c): Compute remainders using multiply and subtract, - not explicit `%' operator. - (C umul_ppmm): Get rid of a redundant __ll_lowpart. - - * mpz/invert.c: Properly detect all operands that would yield an - undefined inverse; make sure the inverse is always positive. - - * mpz/xor.c: New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h (mpz_xor): Declare. - - * mpz/tests/logic.c: Also test mpz_xor. - - * mpz/lcm.c: Special case for when either operand equals 0. - -Sat Oct 12 01:57:09 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpn/generic/gcd.c (find_a): Don't inline on x86. - - * Makefile.in (CFLAGS): Default to just `-g'. - - * configure.in: Recognize 386 and 486 wherever other x86 cpus are - recognized. - * configure.in: Use mt-x86 for all x86 cpus. - * config/mt-x86: New file. - - * mpn/alpha/cntlz.s: New file. - -Tue Oct 8 00:16:18 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * longlong.h: Define smul_ppmm for Fujitsu vpp/uxp. - Rewrite umul_ppmm to actually work on the hardware. - - * mpn/x86/sub_n.S: Avoid parens around displacement of `leal'. - * mpn/x86/add_n.S: Likewise. - - * mpn/x86/syntax.h (R): Define differently depending on __STDC__. - -Mon Oct 7 16:48:08 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * longlong.h: Don't test for __NeXT__ in outer 68k conditional; - add test for __m68k__. - -Sun Oct 6 00:59:09 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * gmp.h: Declare mpn_random. - * make.bat: Compile mpn/generic/random.c. - - * longlong.h: Define umul_ppmm for Fujitsu vpp/uxp. - - * gmp-impl.h: Protect definitions using `__attribute__ ((mode (...)))' - with test also for __GNUC_MINOR__. - - * gmp.h: Don't define macros using __builtin_constant_p when using - NeXT's compiler. - -Fri Oct 4 16:53:50 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpz/lcm.c: New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h (mpz_lcm): Declare. - -Wed Sep 25 00:06:21 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpq/tests/t-cmp_ui.c: Make sure numerator and denominator of `b' is - within limits of an `unsigned long int'. - - * mpz/tests/t-powm_ui.c: Change type of exp2 to `unsigned long int'. - -Tue Sep 24 18:58:20 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpz/powm_ui.c: Make result always positive. - - * urandom.h (urandom): Make it return mp_limb_t. - - * gmp-impl.h (CNST_LIMB): New macro. - * mpn/mp_bases.c: Use CNST_LIMB. - * mpn/generic/hamdist.c (popc_limb): Likewise. - * mpn/generic/popcount.c (popc_limb): Likewise. - * mpn/generic/perfsqr.c: Likewise. - -Fri Sep 20 03:08:10 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpz/pprime_p.c: When n <= 3, don't clear out n before using it. - -Wed Sep 18 11:22:45 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpn/fujitsu/mul_1.c: New file. - * mpn/fujitsu/addmul_1.c: New file. - * mpn/fujitsu/sub_n.c: New file. - * mpn/fujitsu/add_n.c: Mew file. - -Sun Sep 15 03:13:02 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpn/generic/random.c: New file. - * mpn/configure.in (functions): Add `random'. - - * gmp-impl.h (MPN_COPY): Define as annotated inline function for - Crays and Fujitsu VPPs. - - * gmp.h (mp_size_t): Define as `int' for non-MPP Cray. - (mp_exp_t): Likewise. - - * configure.in: Add support for Fujitsu VPP machines. - * mpn/configure.in: Likewise. - * config.guess: Likewise. - * config.sub: Likewise. - - * mpn/fujitsu/rshift.c: New file. - * mpn/fujitsu/lshift.c: New file. - * mpn/fujitsu: New directory, for Fujitsu VPP machines. - -Wed Sep 11 11:34:38 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpn/generic/mul_n.c (__gmpn_mul_n): New name for impn_mul_n. - Call __gmpn_mul_basecase, not impn_mul_n_basecase; update parameter - list to work with __gmpn_mul_basecase. - (__gmpn_sqr): New name for impn_sqr_n. - Call __gmpn_sqr_basecase, not impn_sqr_n_basecase; update parameter - list to work with __gmpn_sqr_basecase. - (mpn_mul_n): Update calls to match new names and parameter conventions. - * gmp-impl.h (MPN_MUL_N_RECURSE): Likewise. - (MPN_SQR_RECURSE): New name for MPN_SQR_N_RECURSE. - Update calls to match new names and parameter conventions. - * mpn/generic/mul.c: Never perform multiply explicitly here, call - __gmpn_mul_basecase instead. - Update calls to match new names and parameter conventions. - - * mpn/x86/mul_basecase.S: New file. - * mpn/generic/mul_basecase.c: New file. - * mpn/generic/sqr_basecase.c: New file. - -Wed Sep 4 02:59:21 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpz/set_str.c: Let `0b' and `0B' mean base 2. - -Fri Aug 30 00:44:00 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * longlong.h (x86 umul_ppmm): Work around GCC bug that was - triggered by Aug 28 change. - - * mpbsd/min.c (digit_value_in_base): New function. - - * mpz/set_str.c: Refine allocation size computation, use - chars_per_bit_exactly instead of chars_per_limb. - - * mpbsd/Makefile.in (.c.o): Add -D_mpz_realloc=_mp_realloc. - -Wed Aug 28 02:52:14 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * longlong.h (x86 umul_ppmm): Don't cast result operands. - (x86 udiv_qrnnd): Likewise. - (default smul_ppmm): Fix typo, umul_ppmm => smul_ppmm. - (default umul_ppmm): New #define using smul_ppmm. - (vax smul_ppmm): New #define. - (vax umul_ppmm): Delete. - (POWER umul_ppmm): Delete. - (IBM 370 smul_ppmm): New #define. - (IBM 370 umul_ppmm): Delete. - (IBM RT/ROMP smul_ppmm): New #define. - (IBM RT/ROMP umul_ppmm): Delete. - -Tue Aug 27 01:03:25 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * gmp-impl.h (__gmp_0): Make it `const'. - - * mpn/Makefile.in (clean mostlyclean): Comment out recursive clean - of `tests'. - - * mpn/generic/mul.c: Identify when we do squaring, and call - impn_sqr_n_basecase/impn_sqr_n as appropriate. Use - KARATSUBA_MUL_THRESHOLD and KARATSUBA_SQR_THRESHOLD. - Don't #define KARATSUBA_THRESHOLD. - - * mpn/generic/mul_n.c: Don't #define KARATSUBA_THRESHOLD. - (impn_mul_n, impn_sqr_n): Rewrite, based on code contributed by - Robert Harley. - (impn_sqr_n_basecase): Rewrite. - - * gmp-impl.h (KARATSUBA_MUL_THRESHOLD): New #define. - (KARATSUBA_SQR_THRESHOLD): Likewise. - (MPN_SQR_N_RECURSE): Use KARATSUBA_SQR_THRESHOLD. - (MPN_MUL_N_RECURSE): Use KARATSUBA_MUL_THRESHOLD. - - * configure.in: Fix typo in last change. - -Mon Aug 26 22:25:18 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpn/generic/random2.c: Fix typo, `alpha__' => `__alpha'. - * mpf/random2.c: Likewise. - -Sun Aug 25 00:07:09 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> - - * mpz/tests/t-mul.c: Also test squaring. - -Fri Aug 16 05:12:08 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mp_clz_tab.c (__clz_tab): Declare as `const'. - * version.c (gmp_version): Likewise. - * mpn/generic/sqrtrem.c (even_approx_tab, odd_approx_tab): Likewise. - -Thu Aug 15 02:34:47 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * gmp.h: Fix typo, `mips__' => `__mips'. - - * mpf/set_str.c: Allow a number to start with a period, if next - position contains a digit. - -Tue Aug 13 18:41:25 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpz/gcdext.c: Get cofactor sign right for negative input operands. - Clean up code for computing tt. - - * mpz/invert.c: Get rid of variable `rv'. - - * mpz/divexact.c: Test for zero divisor in special case for zero - dividend. - -Mon Aug 12 18:04:07 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpz/?div_*_ui.c: Special case for division by 0. - * mpz/tdiv_q.c: Likewise. - -Sat Aug 10 14:45:26 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpz/dmincl.c: Special case for division by 0. - - * mpz/tdiv_*_ui.c: Delete special case for dividend being 0; handle - it when computing size after mpn_divmod_1 call. - - * mp_bpl.c: (__gmp_junk): New variable. - (__gmp_0): New constant. - - * gmp-impl.h (DIVIDE_BY_ZERO): New #define. - -Fri Aug 9 20:03:27 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpz/divexact.c: Test for dividend being zero before testing - for small divisors. - -Thu Aug 8 13:20:23 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * configure.in: Require operating system specification for cpus - where assembly syntax differs between system. - - * Makefile.in (many targets): Change `-' action prefix to `@'. - - * mpn/Makefile.in: (distclean): Fix typo. - - * mpq/cmp_ui.c: Rename function to _mpq_cmp_ui. - (mpq_cmp_ui): #undef deleted. - * mpz/cmp_si.c: Rename function to _mpz_cmp_si. - (mpz_cmp_si): #undef deleted. - * mpz/cmp_ui.c: Rename function to _mpz_cmp_ui. - (mpz_cmp_ui): #undef deleted. - * Makefile.in: Corresponding changes. - - * mpf/get_prc.c: Return the *highest* precision achievable. - - * mpf/get_str.c: Complete rewrite. - - * mpf/set_str.c (swapptr): New #define. - (assert): New #define. - * mpf/set_str.c: Set prec to one more than the saved _mp_prec. - Misc cleanups. - - * mpz/set_str.c: #include string.h. - * mpf/out_str.c: #include string.h. - * mpbsd/xtom.c: #include string.h and ctype.h. - * mpbsd/mout.c: #include string.h. - -Wed Aug 7 11:46:04 EDT 1996 Ken Weber <kweber@mcs.kent.edu> - - * mpn/generic/gcd.c: Reorder mpn_gcd argument list. - * mpz/gcd.c: Change call to mpn_gcd. - * gmp.texi: Update manual entry on mpn_gcd. - * mpn/generic/bdivmod.c: Delete limb cache to make mpn_bdivmod - reentrant. - -Wed Aug 7 02:15:38 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpf/get_str.c: Rewrite code for converting integral part of a - number with both an integral and fractional part. - - * mpf/set_str.c: Get rid of variable xxx. New variables madj and radj. - In exp_in_base==0 case, add madj to msize for EXP field. - - * mpz/tests/t-gcd.c: Test deleted. Rename t-gcd2.c to t-gcd.c. - Increase reps to 2000. - * mpz/tests/t-gcd2.c: Get rid of mpz_refgcd. - - * mpf/set_str.c: Ignore excess limbs in MP,MSIZE. - -Thu Jul 25 04:39:10 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/configure.in: Fix typo in setting path, "sparc" => "sparc32". - -Wed Jul 24 02:27:02 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/generic/gcdext.c: Reorganize and clean up. Get rid of all - signed limb arithmetic. - -Mon Jul 22 02:39:56 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/generic/gcdext.c (mpn_gcdext): For large enough operands, - work with most significant *two* limbs. - (div2): New function (two variants). - (THRESHOLD): New #define. - - * mpz/gcdext.c: Fix typo in MPZ_TMP_INIT call. - - * longlong.h (alpha UMUL_TIME): Now 30. - (alpha UDIV_TIME): Now 350. - (x86 UMUL_TIME): Now 10 (let Pentium decide). - (SuperSPARC UDIV_TIME): Override default. - - * extract-dbl.c (MP_BASE_AS_DOUBLE): Don't redefine here. - - * extract-dbl.c: New name for extract-double.c. - * insert-dbl.c: New name for insert-double.c. - * Makefile.in: Corresponding changes. - * make.bat: Likewise. - - * mpz/Makefile.in (.c.o): Don't pass non-portable `-f' to cp. - * mpq/Makefile.in: Likewise. - * mpf/Makefile.in: Likewise. - -Sat Jul 20 01:35:18 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpz/getlimbn.c: Take ABS of integer->_mp_size. - - * mpz/divexact.c: Use mpn_divmod_1 if divisor is a single limb. - -Thu Jul 18 00:31:15 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/generic/popcount.c (popc_limb): Use different masking trick - for first step (due to David Seal). - * mpn/generic/hamdist.c (popc_limb): Likewise. - -Wed Jul 17 23:21:48 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/generic/divrem.c: In MPN_COPY_DECR call, copy dsize - 1 limbs. - -Sun Jul 14 17:47:46 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * configure.in: Handle sparc9, sparc64, and ultrasparc like sparc8. - -Thu Jul 11 14:05:54 1996 J.T. Conklin <jtc@rtl.cygnus.com> - - * longlong.h (mc680x0): Define umul_ppmm, udiv_qrnnd, sdiv_qrnnd - for the '020, '030, '040, and '332. Define count_leading_zeros - for the '020, '030, '040, and '060. - -Sun Jul 14 15:24:53 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - From Joe Keane: - * mpq/equal.c: Take ABS of num1_size before passing it to mpn_cmp. - -Fri Jul 12 17:11:17 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/generic/sqrtrem.c (SQRT): New asm for x86, but leave it - disabled for now. - - * mpn/generic/sqrtrem.c: Use MP_BASE_AS_DOUBLE. - -Wed Jul 10 03:17:45 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * cre-mparam.c: Delete obsolete file. - - * gmp.h: #define _LONG_LONG_LIMB if __mips && _ABIN32. - * longlong.h: Test __mips instead of __mips__. - -Sun Jul 7 23:19:13 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * longlong.h (_PROTO): Define, unless already defined. - (alpha __udiv_qrnnd): Declare using _PROTO. - (hppa __udiv_qrnnd): Likewise. - (sparc __udiv_qrnnd): Likewise. - -Mon Jul 1 01:44:30 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * config.guess: Update from master version; add Cray x90 handling. - -Wed Jun 26 05:35:02 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/power/add_n.s (__mpn_add_n): Work around GAS bug. - * mpn/power/sub_n.s (__mpn_sub_n): Likewise. - - * insert-double.c: Rework loop to avoid potential overflow. - - * mpq/get_d.c: For vax, if qsize > N_QLIMBS, ignore excess limbs. - - * mpq/tests/t-get_d.c (SIZE): Special case for vax. - - * gmp.h (mpX_cmp_ui): #define also when ! __GNUC__. - -Mon Jun 24 17:13:21 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * longlong.h (vax sdiv_qrnnd): Fix typo. - -Sat Jun 15 01:33:33 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * gmp.h: Support `small' and `large' type and function variants, - controlled by GMP_SMALL. - - * mpz/Makefile.in (.c.o): Compile each function twice, for small and - large variant. - (MPZS_OBJS): New variable. - (libmpz.a): Include MPZS_OBJS in archive. - * mpf/Makefile.in: Analogous changes. - * mpq/Makefile.in: Analogous changes. - - * gmp.h: Prefix all functions with __gmp, to allow namespace-clean - internal calls. - - * mp.h: Rip out __MP_SMALL__ stuff. - (__mpz_struct): mp_size_t => int. - - * mpz/invert.c: #include "gmp-impl.h". - Use MPZ_TMP_INIT, not mpz_init. - - * mpz/gcdext.c: Rewrite to call mpn_gcdext. - -Fri Jun 14 18:05:29 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/generic/gcdext.c (s0size): New parameter. - * gmp.h (mpn_gcdext): Update prototype. - - * mpn/generic/gcdext.c: Major rewrite. - -Mon Jun 10 00:14:27 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/generic/dump.c: Add missing `else'. - -Fri Jun 7 03:35:12 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * Makefile.in (gmp_toc.html): Pass -expandinfo to texi2html. - -Thu Jun 6 19:00:53 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * Version 2.0.2 released. - - * install.sh: New file. - * Makefile.in (INSTALL): Use install.sh. - (install-normal): New name for target `install'. - (install): New dummy target. - - * mpz/pow_ui.c: Swap tests for (e == 0) and (bsize == 0). - * mpz/ui_pow_ui.c: Swap tests for (e == 0) and (blimb == 0). - - * config/mt-linux (AR_FLAGS): New file. - * configure.in: Use config/mt-linux for all linux systems. - -Tue Jun 4 03:42:18 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * Version 2.0.1 released. - - * mpf/tests/ref.c: Cast result of TMP_ALLOC to the right pointer type. - - * extract-double.c: Test _GMP_IEEE_FLOATS with #if, not plain if. - - * insert-double.c: Don't #include stdlib.h. - - * gmp-impl.h (union ieee_double_extract): Test sparc and __sparc. - Do not test __sparc__. - - * mpf/reldiff.c: Change declaration to work around irix5 compiler bug. - * mpq/equal.c: Likewise. - - * mpn/generic/gcd.c: Delete spurious comma at end of enumeration. - - * mpn/generic/gcdext.c: Add K&R declaration syntax. - * stack-alloc.h: Likewise. - * insert-double.c: Likewise. - * extract-double.c: Likewise. - * mpf/tests/reuse.c: Likewise. - * mpz/tests/reuse.c: Likewise. - * mpf/tests/t-sub.c: Likewise. - * mpf/tests/t-add.c: Likewise. - * mpf/tests/t-muldiv.c: Likewise. - * mpf/tests/t-conv.c: Likewise. - * mpf/tests/ref.c: Likewise. - - * mpn/config/t-oldgas: Renamed from t-freebsd. - * mpn/configure.in: Use t-oldgas for freebsd, netbsd, and some linux - configurations. - - * mpn/powerpc32/mul_1.s: Really clear cy before entering loop. - * mpn/powerpc32/*.s: Fix power/powerpc syntax issues. - - * mpn/config/t-ppc-aix: New file. - * mpn/configure.in: Use t-ppc-aix for powerpc like t-pwr-aix for power. - -Wed May 29 02:07:31 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * gmp.h (mp_bits_per_limb): Change qualifier from `const' to - __gmp_const. - - * gmp.h (mpf_init_set_str): Add `const' qualifier for 2nd parameter. - * mpf/iset_str.c: Likewise. - -Mon May 27 00:15:58 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * gmp-impl.h: Declare __gmp_extract_double. - - * mpz/set_q.c: Delete unused variables. - - * gmp.h (mpq_equal): Declare. - - * mpf/eq.c: mpf_cmp2 -> mpf_eq. - -Fri May 24 03:20:44 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpz/iset_d.c: Don't include <math.h>. - - * insert-double.c (__gmp_scale2): New name for scal2. - * mpz/get_d.c: Corresponding change. - * mpf/get_d.c: Likewise. - * mpq/get_d.c: Likewise. - * gmp-impl.h: Declare __gmp_scale2. - - * mpn/generic/scan0.c: Clarify comment. - - * mpz/set_q.c: New file. - * Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h: Declare mpz_set_q. - - * insert-double.c: New file. - * Makefile.in: Compile it. - * make.bat: Likewise. - - * mpz/get_d.c: New file. - * mpz/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h: Declare mpz_get_d. - - * mpf/get_d.c: New file. - * mpf/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h: Declare mpf_get_d. - - * make.bat: Compile things in alphabetical order. - - * gmp-impl.h (MP_BASE_AS_DOUBLE): New #define. - (LIMBS_PER_DOUBLE): New #define. - - * extract-double.c: New file. - * Makefile.in: Compile it. - * make.bat: Likewise. - * mpz/set_d.c: Rewrite to use __gmp_extract_double. - * mpf/set_d.c: Likewise. - - * mpn/configure.in: Use t-pwr-aix also for aix 3.2.4 and up. - -Wed May 22 02:48:35 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * gmp-impl.h: Rework code for defining ieee_double_extract. - (IEEE_DOUBLE_BIG_ENDIAN): Macro removed. - (_GMP_IEEE_FLOATS): New macro. - * mpn/vax/gmp-mparam.h: Delete. - - * mpn/config/t-pwr-aix: New file. - * mpn/configure.in: Use t-pwr-aix for aix 4 and later. - -Mon May 20 16:30:31 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * gmp.h: In code for setting _GMP_H_HAVE_FILE, test more symbols. - - * mpf/tests/t-add.c (oo): Add some `l' printf modifiers. - * mpf/tests/t-sub.c (oo): Likewise. - * mpf/tests/t-conv.c (oo): Likewise. - * mpf/tests/t-sqrt.c (oo): Likewise. - - * mpz/tests/t-mul.c (_mpn_mul_classic): Remove unused variables. - - * mpn/{pyr,i960,clipper}/*.s: Add missing copyright headers. - -Fri May 17 02:24:43 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpz/set_d.c: Call _mpz_realloc. - - * mpq/set_z.c: New file. - * mpq/Makefile.in: Compile it. - * make.bat: Likewise. - * gmp.h: Declare mpq_set_z. - - * mp?/Makefile.in (libmp?.a): Depend on Makefile, not Makefile.in. - * mpf/Makefile.in (test): Delete spurious target. - * mpq/Makefile.in (test): Likewise. - - * mpf/out_str.c: Use `e' to separate exponent when base <= 10. - - * mpn/configure.in: Treat ultrasparc just like sparc v8, - until 64-bit compilers are ready. - - * mpf/set_d.c: Make it work for 64-bit machines. - -Thu May 16 20:53:57 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * gmp-impl.h: Set IEEE_DOUBLE_BIG_ENDIAN to 0 for little-endian - machines. - * mpn/x86/gmp-mparam.h: Delete file. - - * configure.in: Treat microsparc like sparc8. - - * urandom.h: Test __alpha instead of __alpha__, since the former - is the standard symbol. - * mpn/generic/random2.c: Likewise. - * mpf/random2.c: Likewise. - -Tue May 14 13:42:39 1996 Torbjorn Granlund (tege@tiny.matematik.su.se) - - * mpz/set_f.c: New file. - * mpz/Makefile.in: Compile it. - * gmp.h: Declare mpz_set_f. - - * mpf/set_q.c: Simplify expression in rsize == nsize if-then-else arms. - -Tue May 14 13:03:07 1996 Torbjorn Granlund (tege@tiny.matematik.su.se) - - * make.bat: Add all new files. - -Sun May 12 22:24:36 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpf/set_z.c: New file. - * mpf/Makefile.in: Compile it. - * gmp.h: Declare mpf_set_z. - -Sat May 11 19:26:25 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * gmp.h: Declare mpf_set_q. - - * mpf/set_q.c: Compute prec-1 limbs in mpn_divrem call. - -Fri May 10 17:37:38 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpf/set_q.c: New file. - * mpf/Makefile.in: Compile it. - - * config.sub: Recognize sparc8. - -Wed May 8 09:19:11 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpf/tests/t-dm2exp.c: New file. - - * mpf/tests/t-add.c: Correct header comment. - * mpf/tests/t-sub.c: Likewise. - * mpf/tests/t-sqrt.c: Likewise. - - * mpf/div.c: Misc variable name cleanups. - * mpf/div_ui.c: Base more closely on mpf/div.c. - * mpf/ui_div.c: Likewise. - - * mpz/tests/Makefile.in (check): Depend on Makefile. - * mpq/tests/Makefile.in (check): Likewise. - * mpf/tests/Makefile.in (check): Likewise. - - * mpf/tests/t-muldiv.c: New file. - * mpf/tests/Makefile.in: Compile and run `t-muldiv'. - (t-ref.o): Delete spurious rule. - - * mpf/sqrt.c: Properly detect negative input operand. - - * mpf/sqrt_ui.c: Delete spurious header comment. - * mpf/sqrt.c: Likewise. - * mpz/sqrt.c: Likewise. - - * mpz/tests/reuse.c (main): Read `reps' from command line. - - * mpf/tests/reuse.c: New file. - * mpf/tests/Makefile.in: Compile and run `reuse'. - - * mpf/mul_ui.c: Disable code for removing low zero limbs. - - * mpf/div.c: Fix condition for when vp and qp overlaps. - - * mpf/add_ui.c: When sum equals u, copy up to prec+1 limbs. - - * mpf/out_str.c: Don't output '\n' after exponent. - - * mpf/add_ui.c: New special case for when U is completely cancelled. - -Wed Apr 24 05:33:28 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * Version 2.0 released. - - * All files: Update FSF's address. - - * Makefile.in (gmp_toc.html): New name for gmp.html. - (TAGS): Depend on force. - - * mpf/tests/t-conv.c: Pass -base to mpf_set_str. - -Sat Apr 20 03:54:06 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * Makefile.in (ps): New target, depend on gmp.ps. - -Fri Apr 19 14:03:15 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpf/out_str.c: Print `@' before exponent, not `e'. - - * make.bat: Update from Makefiles. - -Thu Apr 18 01:22:05 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpf/set_str.c: If parameter `base' is negative, expect exponent - to be decimal, otherwise in the same base as the mantissa. - -Wed Apr 17 17:28:36 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpf/set_dfl_prec.c: Don't return anything. - * gmp.h: Corresponding changes. - - * mpf/set_dfl_prec.c: Use `unsigned long int' for bit counts. - * mpf/init2.c: Likewise. - * mpf/get_prc.c: Likewise. - * mpf/set_prc.c: Likewise. - * mpf/set_prc_raw.c: Likewise. - * mpz/popcount.c: Likewise. - * mpz/hamdist.c: Likewise. - * mpz/scan1.c: Likewise. - * mpz/scan0.c: Likewise. - * mpn/generic/popcount.c: Likewise. - * mpn/generic/hamdist.c: Likewise. - * mpn/generic/scan1.c: Likewise. - * mpn/generic/scan0.c: Likewise. - * gmp.h: Likewise. - - * mpf/eq.c: New file, based on mpf/diff.c. - * mpf/diff.c: Delete. - * mpf/Makefile.in: Corresponding changes. - * gmp.h: Likewise. - - * mpf/reldiff.c: New file. - * mpf/Makefile.in: Compile it. - * gmp.h: Declare mpf_reldiff. - - * mpz/iset_d.c: New file. - * mpz/Makefile.in: Compile it. - * gmp.h: Declare mpz_init_set_d. - -Tue Apr 16 16:28:31 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * Makefile.in (gmp.html): Pass -acc to texi2html. - -Mon Apr 15 16:20:24 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpf/set_str.c: Switch off code for defaulting the base from the - leading characters. - - * gmp.h (mp?_sign): Delete. - (mp?_sgn): New macros. - -Fri Apr 12 17:23:33 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * Makefile.in (gmp.dvi): Delete tmp.* at end of rule. - -Wed Apr 10 22:52:02 1996 Torbjorn Granlund (tege@tiny.matematik.su.se) - - * mpf/random2.c: Change of `exp' param, mp_size_t => mp_exp_t. - * gmp.h: Corresponding change. - - * gmp.h (mp_bits_per_limb): Make it const. - -Sat Mar 30 01:20:23 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * configure.in: Re-enable recognition of with_gcc. - - * mpf/Makefile.in (.c.o): Pass XCFLAGS. - * mpn/Makefile.in (.c.o): Likewise. - * mpz/Makefile.in (.c.o): Likewise. - * mpq/Makefile.in (.c.o): Likewise. - * mpbsd/Makefile.in (.c.o): Likewise. - * mpf/tests/Makefile.in (.c.o): Likewise. - * mpz/tests/Makefile.in (.c.o): Likewise. - * mpq/tests/Makefile.in (.c.o): Likewise. - - * Makefile.in (XCFLAGS): Default to empty. - (FLAGS_TO_PASS): Pass on XCFLAGS. - (.c.o): Pass XCFLAGS. - - * config/mt-m88110 (XCFLAGS): Define instead of CC. - * config/mt-sprc8-gcc (XCFLAGS): Likewise. - * config/mt-supspc-gcc (XCFLAGS): Likewise. - - * configure: Don't default CC to "gcc -O2" is -with-gcc=no was - specified. - -Mon Mar 25 01:07:54 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * urandom.h: Test for __SVR4 in addition to __svr4__. - - * mp_bpl.c (mp_bits_per_limb): Declare as `const'. - - * Makefile.in (CFLAGS): `-O2' => `-O'. - * mpn/Makefile.in (CFLAGS): Likewise. - - * gmp-impl.h: Get rid of obsolete field access macros. - - * mpn/mp_bases.c (__mp_bases): 1e39 => 1e38 to work around Solaris - cc compiler bug. - - * gmp.h (__MPN): Make it work also for non-ANSI compilers. - -Thu Mar 21 01:07:54 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpf/sub.c: New special case for ediff <= 1 before generic code. - Simplify generic code for ediff == 0. - Rename uexp => exp. - -Mon Mar 11 18:24:57 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpf/tests/*.c: Use ref_mpf_sub for error calculation. - * mpf/tests/Makefile.in: Link ref.o to all executables. - - * mpf/tests/t-sub.c: Make u = v + 1 with 50% probability. - -Sun Mar 10 21:03:17 1996 Torbjorn Granlund (tege@tiny.matematik.su.se) - - * mpf/get_str.c: In digit development loop for fractions, change - loop condition from `<' to `<='. - -Thu Mar 7 04:58:11 1996 Torbjorn Granlund <tege@tiny.matematik.su.se> - - * mpn/mp_bases.c (__mp_bases): 1e100 => 1e39 to avoid overflow warning. - -Wed Mar 6 01:10:42 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpf/tests/t-sqrt.c: New file. - * mpf/tests/Makefile.in: Corresponding changes. - - * mpf/sqrt.c: Special case for square root of zero. - - * mpq/add.c: Clean up variable names. - * mpq/sub.c: Update from mpq/add.c. - - * mpz/divexact.c: abs => ABS. - * mpz/gcd.c: Likewise. Rewrite final fixup code, to decrease - allocation. Misc cleanups. - -Tue Mar 5 22:24:56 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/configure.in: Recognize linuxoldld as a synonym for linuxaout. - - * gmp.h (mpn_add, mpn_add_1, mpn_sub, mpn_sub_1): Add prototypes. - - * mpn/configure.in: Use t-freebsd also for netbsd. - -Mon Mar 4 15:13:28 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpq/Makefile.in (cmp.o): Depend on longlong.h. - - * mpq/equal.c: New file. - * mpq/Makefile.in: Corresponding changes. - - * mpf/tests/t-add.c: New file. - * mpf/tests/t-sub.c: Renamed from t-addsub.c. - * mpf/tests/ref.c: New file. - * mpf/tests/Makefile.in: Corresponding changes. - - * gmp-impl.h (SIZ, ABSIZ, PTR, EXP, PREC, ALLOC): New #defines. - -Sun Mar 3 07:45:46 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpf/set_str.c: In exponentiation code, allocate 3 extra - limbs, not just 2. - - * mpf/get_str.c: Allocate sufficient space for tstr. - When calculating exp_in_base, round result down. - - * mpf/tests/t-conv.c: New file. - * mpf/tests/Makefile.in: Corresponding changes. - - * mp_bpl.c: New file. - * gmp.h: Declare it. - * Makefile.in: Corresponding changes. - -Sat Mar 2 06:27:56 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpf/set_prc_raw.c: New file. - * mpf/set_prc.c: Renamed from set_prec.c. - * mpf/get_prc.c: New file. - * mpf/Makefile.in: Corresponding changes. - * gmp.h: Declare new functions. - - * mpn/generic/gcdext.c: Add copyright header. - -Fri Mar 1 01:22:24 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/configure.in: For ppc601, search "power" before "powerpc32". - - * mp?/Makefile.in (AR_FLAGS): New variable. - (libmp?.a): Use it. - - * make.bat: New file. - * mpn/msdos: New directory. - * mpn/msdos/asm-syntax.h: New file. - - * mpn/Makefile.in (distclean maintainer-clean): Delete asm-syntax.h. - - * config.sub: Recognize [ctj]90-cray. - - * mpn/configure.in: Recognize [ctj]90-cray-unicos*. - - * mpn/generic/gcdext.c: Don't use alloca directly, use TMP_* macros. - - * mpn/generic/gcd.c: Split increment from use of USIZE to avoid - undefined behaviour. - -Thu Feb 29 04:11:24 1996 Torbjorn Granlund <tege@matematik.su.se> - - * Makefile.in (install-info-files): Update for new install-info - behaviour. - - * mpn/power/add_n.s: Rewrite. - * mpn/power/sub_n.s: Rewrite. - -Wed Feb 28 01:34:30 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/pow_ui.c: Compute allocation more aggressively for small bases. - * mpz/ui_pow_ui.c: Likewise. - - * mpn/mp_bases.c (__mp_bases): Put huge value in 2nd field for index 1. - - * mpn/generic/sqrtrem.c: sizeof (mp_limb_t) => BYTES_PER_MP_LIMB. - * mpn/generic/gcd.c: Likewise. - (SIGN_BIT): Compute differently. - -Mon Feb 26 00:07:36 1996 Torbjorn Granlund <tege@matematik.su.se> - - * All files: mp_limb => mp_limb_t, mp_limb_signed => mp_limb_signed_t. - - * Makefile.in (install, install-bsdmp, install-info-files): Depend - on installdirs. chmod all installed files. - -Sun Feb 25 01:47:41 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpbsd/configure.in: Delete debugging code. - - * All Makefile.in: Update clean targets. - - * Makefile.in (AR_FLAGS): New variable. - (libgmp.a): Use it. - (libmp.a): Likewise. - - * VERSION: Delete file. - - * Makefile.in (installdirs): New target. - * mkinstalldirs: New file (from the texinfo package). - - * Makefile.in (INSTALL, INSTALL_DATA, INSTALL_PROGRAM): New variables. - (MAKEINFO, MAKEINFOFLAGS, TEXI2DVI): New variables. - (install-info): New target. - (install, install-bsdmp): Depend on install-info. - ($(srcdir)/gmp.info): Changed from plain gmp.info; put info files - into source directory. - (distclean, mostlyclean): New targets. - (maintainer-clean): New name for realclean. - (uninstall): New target. - (TAGS): New target. - (info, dvi): New targets. - (.PHONY): Assign. - - * Makefile.in (install, install-bsdmp): Use INSTALL_DATA. - - * mp{n,z,f,bsd}/move-if-change: Delete. - - * mpbsd/Makefile.in (stamp-stddefh): Delete target. - - * Makefile.in (.c.o): Pass CFLAGS last. - * mpbsd/Makefile.in (.c.o): Likewise. - * mpf/Makefile.in (.c.o): Likewise. - * mpq/Makefile.in (.c.o): Likewise. - * mpz/Makefile.in (.c.o): Likewise. - * mpn/Makefile.in (.c.o): Likewise. - (.S.o): Likewise. - - * memory.c: Change allocation error message. - - * Makefile.in (install): Prefix gmp.h with $(srcdir). - (install-bsdmp): Prefix mp.h with $(srcdir). - - * mp{n,z,f,bsd}/{configure,config.sub}: Delete. - - * Makefile.in (gmp.dvi): Set TEXINPUTS also for 2nd tex invocation - (install targets): Install gmp.info-N. - -Sat Feb 24 03:36:52 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpf/get_str.c: Fix typo. - - * mpz/legendre.c: Clarify expression with extra parens. - - * version.c (gmp_version): Not static. - - * mpf/iset_str.c: Properly return error code. - - * mpf/add.c: Delete unused variables. - * mpf/inp_str.c: Likewise. - * mpq/get_d.c: Likewise. - - * mpn/generic/dump.c: #include <stdio.h>. - * mpf/dump.c: Likewise. - * mpf/set_str.c: #include <ctype.h>. - (strtol): Declare. - - * gmp.h: mpn_sqrt => mpn_sqrtrem. - - * Makefile.in (clean, realclean): Clean in mpbsd. - (check): Test in mpf. - - * mpf/Makefile.in (clean): Clean in tests. - * mpq/Makefile.in (clean): Clean in tests. - - * mpf/tests/Makefile.in: New file. - * mpf/tests/configure.in: New file. - * mpf/tests/t-addsub.c: New file. - - * mpf/sub_ui.c: Simply call mpf_sub for now. - - * mpf/sub.c: Increase prec by 1. - * mpf/ui_sub.c: Likewise. - -Fri Feb 23 00:59:54 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpf/ui_sub.c: Fix typos. - - * mpf/get_str.c: When allocating space for tmp, allow for an extra - limb. In code for fraction conversion, add special case for bases - that are a power of 2. - - * mpf/out_str.c: Output leading "0.". - Default base to 10, before computing string allocation. - - * mpf/get_str.c: Make variables for string size have type size_t. - * gmp.h: Corresponding change. - - * mpf/random2.c: Allow creation of prec+1 large mantissas. - - * mpf/add_ui.c: Don't abort if u < 0; special case for u <= 0. - Fix typo in MPN_COPY offset. - * mpf/sub_ui.c: Analogous changes. - - * mpf/set_prec.c: Rewrite. - - * mpf/init2.c: Compute precision as in set_prec.c. - - * mpf/div_2exp.c: Special case for u == 0. - * mpf/mul_2exp.c: Likewise. Write r->_mp_size always. - - * mpf/sqrt_ui.c: mpn_sqrt => mpn_sqrtrem. - * mpf/sqrt.c: Likewise. When computing new exponent, round quotient - towards -infinity. - - * mpf/add.c: Fix typos. - * mpf/sub.c: Fix typos. - -Thu Feb 22 00:24:48 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/Makefile.in (stamp-stddefh): Delete target. - (test): Delete target. - * Makefile.in (stamp-stddefh): Delete target. - (cre-stddefh.o): Delete target. - (gmp.dvi): Set TEXINPUTS before invoking tex. - - * cre-stddefh.c: Delete. - - * mpz/sqrt.c: Fix typo. - - * mpz/powm.c: Special case for mod == 0. - * mpz/powm_ui.c: Likewise. - - * mpz/get_si.c: Handle -0x80000000 correctly. - - * mpz/inp_str.c: Now returns size_t. - Make it return number of bytes read or error indication. - * mpf/inp_str.c: Likewise. - - * mpz/out_raw.c: Replace by mpz/out_binary.c, with modifications. - * mpz/inp_raw.c: Rewrite, using mpz/inp_binary as a base. - * mpz/inp_binary.c: Delete. - - * mpn/Makefile.in (XCFLAGS): Remove variable. - (.c.o): Don't pass XCFLAGS. - (SFLAGS): Set to nothing. - (.S.o): Pass SFLAGS, not XCFLAGS. - - * mpn/config/t-freebsd (SFLAGS): New name for XCFLAGS. - - * mpf/out_str.c: Make return number of bytes written or error - indication. - * mpz/out_str.c: Likewise. - * gmp.h: Corresponding changes. - - * gmp.h (__mpz_struct): mp_size_t => int. - (__mpq_struct): Likewise. - (__mpf_struct): Likewise. - (mp_size_t): int => long int. - - * mpn/cray: New directory. - * mpn/cray/gmp-mparam.h: New file. - * mpn/configure.in: Recognize cray variants. - - * Makefile.in: Set defaults for prefix, libdir, etc. - (install): New target. - (install-bsdmp): New target. - (gmp.html): New target. - - * stack-alloc.c (__tmp_alloc): Cast void ptrs to char * in comparison. - -Wed Feb 21 04:35:02 1996 Torbjorn Granlund <tege@matematik.su.se> - - * gmp.h: Sort mpn declarations. - (mpn_gcdext): Add declaration. - - * mpn/generic/divrem_1.c: New file. - * mpn/Makefile.in (divrem_1.o): New rule. - * configure.in (functions): Add divrem_1. - - * mpn/generic/divmod.c: Delete file. - * mpn/configure.in (functions): Delete divmod. - * Makefile.in (divmod.o): Delete rule. - * gmp.h (mpn_divmod): New #define. - - * gmp.h (mpn_next_bit_set): Delete spurious declaration. - - * mpn/generic/divrem.c (default case): In code assigning - most_significant_q_limb, move reassignment of n0 into if statement. - - * gmp.h (mpf_inp_str): Fix typo. - (mpf_out_str): Make prototype match reality. - * mpf/inp_str.c: New file. - * mpf/out_str.c: New file. - * mpf/Makefile.in: Compile new files. - - * mpn/Makefile.in (dump.o): Fix dependency path. - (inlines.o): Likewise. - - * mpn/configure.in: Make m68060 be the same as m68000. Clean up - m68k configs. - -Tue Feb 20 01:35:11 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/generic/sqrtrem.c: Renamed from sqrt. - * mpn/configure.in (functions): Corresponding change. - * mpn/Makefile.in: Likewise. - * mpz/sqrtrem.c: Likewise. - * mpz/sqrt.c: Likewise. - * mpn/generic/perfsqr.c: Likewise. - - * Makefile.in (clean): Also remove libmp.a. - Don't compile cre-conv-tab.c or mp_bases.c. - cre-conv-tab.c: Delete file. - (gmp.ps): New rule. - - * mpn/mp_bases.c: New file. - * mpn/Makefile.in: Compile mp_bases.c. - - * mpz/set_str.c: Skip initial whitespace. - * mpf/set_str.c: Likewise. - * mpbsd/xtom.c: Likewise. - - * gmp.h: Add missing mpz declarations. - Delete all formal parameter names from declarations. - - * mpn/Makefile.in: Add dependencies for .c files. - - * Makefile.in (check): Write recursive make calls separately, not as - a loop. - (FLAGS_TO_PASS): New variable. Use it for most recursive makes. - -Mon Feb 19 01:02:20 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpn/Makefile.in (.S.o): Pipe cpp output to grep in order to delete - lines starting with #. - (CPP): Set to $(CC) -E to avoid gcc dependency. - - * mpn/m68k/syntax.h (moveql): Define to moveq for MIT_SYNTAX. - - * mpn/hppa/hppa1_1/pa7100/addmul_1.S: Fix typo in s1_ptr alignment - code. - * mpn/hppa/hppa1_1/pa7100/submul_1.S: Likewise. - - * gmp.h: Fix typos in #defines of recently added mpn functions. - - * mpz/inp_str.c: Skip all whitespace, not just plain space. - * mpbsd/min.c: Likewise. - - * mpn/configure.in (functions): Add gcdext. - * mpn/generic/gcdext.c: New file. - - * mpz/legendre.c: mpz_div_2exp => mpz_tdiv_q_2exp. - - * gmp.h: Surround mpn declarations with extern "C" { ... }. - - * Makefile.in (check): New target. - - * mpq/get_d.c: Update comments. Use rsize instead of dsize + N_QLIMBS - when possible. Add special case for nsize == 0. - - * gmp.h (mpq_get_d): Add declaration. - (mpq_canonicalize): Likewise. - (mpq_cmp_ui): Likewise. - (mpf_diff): Likewise. - (mpf_ui_sub): Likewise. - (mpf_set_prec): Likewise. - (mpf_random2): Likewise. - - * gmp.h (mpz_cmp_ui): New #define. - (mpz_cmp_si): New #define. - (mpq_cmp_ui): New #define. - (mpz_sign): New #define. - (mpq_sign): New #define. - (mpf_sign): New #define. - (mpq_numref): New #define. - (mpq_denref): New #define. - - * mpq/set_z.c: File deleted. - * mpq/Makefile.in: Corresponding changes. - -Sun Feb 18 01:34:47 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpbsd/sdiv.c: Use _mp_realloc, not _mpz_realloc. - - * mpz/inp_binary.c: Default stream to stdin. - * mpz/inp_str.c: Likewise. - * mpz/inp_raw.c: Likewise. - * mpz/out_binary.c: Default stream to stdout. - * mpz/out_raw.c: Likewise. - * mpz/out_str.c: Likewise. - - * mpbsd/realloc.c: New file. - * mpbsd/Makefile.in: Corresponding changes. - - * mpbsd/min.c: Rewrite (base on mpz/inp_str.c). - * mpbsd/mtox.c: Rewrite (base on mpz/get_str.c). - - * mpbsd/mout.c: Rewrite (base on mpz/out_str) but make it output - spaces in each 10th position. - * mpbsd/xtom.c: Rewrite (base on mpz/set_str). - - * mpq/tests/Makefile.in (st-cmp): New file. - * mpq/tests/configure.in (srcname): New file. - - * mpz/tests/configure.in (srcname): Fix typo. - - * mpq/cmp.c: Add check using number of significant bits, to avoid - general multiplication. - -Sat Feb 17 11:58:30 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpq/cmp_ui.c: Store cy_limb after the mpn_mul_1 calls. - - * mpq/tests: New directory. - * mpq/tests/t-cmp.c: New file. - * mpq/tests/t-cmp_ui.c: New file. - - * mpz/tests/dive.c (main): Generate zero numerator. - (get_random_size) : Delete. - - * mpz/divexact.c: Add special case for 0/x. - - * gmp.h (mpz_mod): Add declaration. - -Fri Feb 16 18:18:39 1996 Andreas Schwab <schwab@informatik.uni-dortmund.de> - - * mpn/m68k/*: Rewrite code not to use the INSN macros. - (L): New macro to properly prefix local labels for ELF. - -Fri Feb 16 00:20:56 1996 Torbjorn Granlund <tege@matematik.su.se> - - * gmp-impl.h (ieee_double_extract): Use plain `unsigned int' for - fields. - * mpn/generic/inlines.c (_FORCE_INLINES): New #define. Delete - conditional __GNUC__. - * gmp.h (mpn_add, mpn_sub, mpn_add_1, mpn_sub_1): - Only define these if __GNUC__ || _FORCE_INLINES. - * mpf/random2.c: Add missing parameter in non-ANSI header. - * mpn/generic/gcd.c (SIGN_BIT): Do as #define to work around bug - in AIX compilers. - * mpq/get_d.c: #define N_QLIMBS. - * mpz/divexact.c: Obscure division by 0 to silent compiler warnings. - * stack-alloc.c: Cast void* pointer to char* before doing arithmetic - on it. - - * Makefile.in (mpbsd/libmpbsd.a): New rule. - * configure.in (configdirs): Add mpbsd. - - * gmp.h: Add declarations for a few missing mpn functions. - - * Makefile.in (libmp.a): New rule. - - * mpbsd/mdiv.c: #include "dmincl.c", not "mpz_dmincl.c" - * gmp.h: Move #define of __GNU_MP__ into the `#if __GNU_MP__' block. - * mp.h: Likewise. Update typedefs from gmp.h. - * mpbsd/configure.in: New file. - * mpbsd/Makefile.in: New file. - * mpbsd/configure: Link to master configure. - * mpbsd/config.sub: Link to master config.sub. - - * Makefile.in: Set RANLIB_TEST. - * (libgmp.a): Use it. - * (libgmp.a): Do ranlib before moving the libgmp.a to the build - directory. - * mp?/Makefile.in: Don't use or set RANLIB. - -Thu Feb 15 16:38:41 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/add_ui.c: MP_INT => mpz_t. - * mpz/cmp_ui.c: Likewise. - * mpz/fac_ui.c: Likewise. - * mpz/inp_binary.c: Likewise. - * mpz/inp_raw.c: Likewise. - * mpz/legendre.c: Likewise. - * mpz/jacobi.c: Likewise. - * mpz/out_binary.c: Likewise. - * mpz/out_raw.c: Likewise. - * mpz/random2.c: Likewise. - * mpz/random.c: Likewise. - * mpz/realloc.c: Likewise. - - * mpz/legendre.c: __mpz_2factor(X) => mpz_scan1(X,0), - __mpz_odd_less1_2factor => mpz_scan1(X,1). - * mpz/ntsup.c: File deleted. - * mpz/Makefile.in: Corresponding changes. - - * mpz/pprime_p: Use mpz_scan1 to avoid looping. - - * mpz/fac_ui.c: Type of `k' and `p' is `unsigned long'. - * mpz/pprime_p.c: Pass long to *_ui functions. - * mpz/gcdext.c: Likewise. - * mpz/fdiv_r_2exp.c: Likewise. - * mpz/fac_ui.c: Likewise. - - * mpz/powm.c: Don't use mpn_rshift when mod_shift_cnt is 0. - - * mpz/tests/Makefile.in (st-sqrtrem): Fix typo. - - * mpz/cmp_ui.c: #undef mpz_cmp_ui. - * mpz/cmp_si.c: #undef mpz_cmp_si. - * gmp.h (mpz_cmp_ui): New #define. - (mpz_cmp_si): New #define. - -Wed Feb 14 22:11:24 1996 Torbjorn Granlund <tege@matematik.su.se> - - * gmp.h: Test __cplusplus in addition to __STDC__. - * gmp-impl.h: Likewise. - - * gmp.h: Surround declarations with extern "C" { ... }. - -Tue Feb 13 15:20:45 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/fdiv_r_2exp.c: Use MPN_NORMALIZE. - * mpz/tdiv_r_2exp.c: Likewise. - - * mpz/fdiv_r_2exp.c: New file. - * mpz/fdiv_q_2exp.c: New file. - * mpz/tdiv_r_2exp.c: Renamed from mpz/mod_2exp.c. - * mpz/tdiv_q_2exp.c: Renamed from mpz/div_2exp.c - * mpz/Makefile.in: Corresponding changes. - - * mpz/scan0.c,scan1.c: New files. - * mpz/Makefile.in: Compile them. - - * gmp.h (mpn_normal_size): Delete. - - * config.guess: Update from Cygnus version. - - * mpn/m68k/rshift.S: Use INSN2 macro for lea instructions. - * mpn/m68k/lshift.S: Likewise. - - * mpn/configure.in: Fix configuration for plain 68000. - -Mon Feb 12 01:06:06 1996 Torbjorn Granlund <tege@matematik.su.se> - - * mpz/tests/t-powm.c: Generate negative BASE operand. - - * mpz/powm.c: Make result always positive. - -Sun Feb 11 01:44:56 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpz/tests/*.c: Add t- prefix. - * mpz/tests/Makefile.in: Corresponding changes. - * mpz/tests/configure.in: Update srctrigger. - - * mpz/tests/gcd.c: Generate negative operands. - * mpz/tests/gcd2.c: Likewise. - - * mpz/gcdext.c: At end, if G is negative, negate all G, S, and T. - -Thu Feb 8 17:16:12 UTC 1996 Ken Weber <kweber@mat.ufrgs.br> - - * mp{z,n}/gcd.c: Change mpn_gcd interface. - * gmp.h: Ditto. - * gmp.texi: update documentation. - -Mon Feb 7 23:58:43 1996 Andreas Schwab <schwab@informatik.uni-dortmund.de> - - * mpn/m68k/{lshift,rshift}.S: New files. - * mpn/m68k/syntax.h: New ELF_SYNTAX macros. - (MEM_INDX, R, PROLOG, EPILOG): New macros. - * mpn/m68k/*.S: Use R macro with register name. Use PROLOG and EPILOG - macros. Rename `size' to `s_size' or s1_size to avoid clash with ELF - .size directive. - * mpn/configure.in: New target m68k-*-linux*. - -Wed Feb 7 07:41:31 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * Makefile.in (cre-conv-tab): Workaround for SunOS make. - - * mpz/tests/reuse.c: New file. - * mpz/tests/Makefile.in: Handle reuse.c. - -Tue Feb 6 11:56:24 UTC 1996 Ken Weber <kweber@mat.ufrgs.br> - - * mpz/gcd.c: Fix g->size when one op is 0 and g == other op. - -Tue Feb 6 01:36:39 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * gmp.h (mpz_divexact): Delete parameter names. - (mpz_lcm): Delete spurious declaration. - - * mpz/dmincl.c: Fix typo. - -Mon Feb 5 01:11:56 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/generic/gcd.c (gcd_2): Declare consistently. - - * mpz/tdiv_q.c: Optimize division by a single-limb divisor. - * mpz/dmincl.c: Likewise. - - * mpz/add.c: Use MPN_NORMALIZE instead of mpn_normal_size. - * mpz/sub.c: Likewise. - * mpn/generic/sqrt.c: Likewise. - - * mpn/tests/{add_n,sub_n,lshift,rshift}.c: Put garbage in the - destination arrays. - -Fri Feb 2 02:21:27 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpz/{jacobi.c,legendre.c,ntsup.c,invert.c}: New files. - * mpz/Makefile.in: Compile them. - - * mpn/Makefile.in (INCLUDES): Don't search in `generic'. - -Thu Feb 1 02:15:11 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - Change from Ken Weber: - * mpz/divexact.c: Make it work when quot is identical to either input. - - * mpf/ui_sub.c: New file. - * mpf/Makefile.in: Compile it. - - * gmp-impl.h (MPZ_TMP_INIT): alloca -> TMP_ALLOC. - * mpz/{c,f}div_{q,qr,r}.c: Use TMP_DECL/TMP_MARK/TMP_FREE since - these use MPZ_TMP_INIT. - * mpz/mod.c: Likewise. - * mpq/{add,sub}.c: Likewise. - * mpq/canonicalize: Likewise. - - * mpq/{add,sub,mul,div}.c: Use mpz_divexact. MP_INT -> mpz_t. - * mpq/canonicalize.c: Likewise. - -Wed Jan 31 01:45:00 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/generic/gcd.c: Misc changes from Ken. - - * mpz/tests/gcd2.c: New file. - * mpz/tests/Makefile.in: Handle gcd2.c. - - * mpn/generic/gcd.c (mpn_gcd): When GCD == ORIG_V, return vsize, - not orig_vsize. Fix parameter declaration. - - * mpz/mod_ui.c: Delete file. - * mpz/Makefile.in: Don't try to compile mod_ui. - - * mpz/cdiv_*_ui.c): Make them work right. - * gmp.h: Declare cdiv*. - -Tue Jan 30 02:22:56 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpz/{cdiv_q.c,cdiv_q_ui.c,cdiv_qr.c,cdiv_qr_ui.c,cdiv_r.c, - cdiv_r_ui.c,cdiv_ui.c}: New files. - * mpz/Makefile.in: Compile them. - - * All files: Make file permissions right. - - Changes from Ken Weber: - * mpn/generic/accelgcd.c: Delete. - * mpn/generic/bingcd.c: Delete. - * mpn/generic/numbits.c: Delete. - * mpn/generic/gcd.c: New file. - * mpn/configure.in (functions): Update accordingly. - * mpz/divexact.c: New file. - * mpz/Makefile.in: Compile divexact.c. - * mpz/gcd.c: Rewrite to accommodate for gcd changes in mpn. - * gmp.h: declare new functions, delete obsolete declarations. - * mpz/tests/dive.c: New file. - * mpz/tests/Makefile.in: Handle dive.c. - -Mon Jan 29 03:53:24 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpz/random.c: Handle negative SIZE parameter. - - * mpz/tests/tdiv(_ui).c: New name for tst-dm(_ui).c. - * mpz/tests/tst-mdm(_ui).c: Delete. - * mpz/tests/fdiv(_ui).c: New test based in tst-mdm(_ui). - * mpz/tests/*.c: Get rid of tst- prefix for DOS 8+3 naming. - * mpz/tests/Makefile.in: Corresponding changes. - * mpz/tests/configure.in: Update srctrigger. - - * mpn/generic/divmod.c: Update from divrem. - * mpn/generic/divrem.c: Misc cleanups. - -Sun Jan 28 03:25:08 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * All files: Use new TMP_ALLOC interface. - - * mpz/powm_ui.c: Make Jan 25 changes to powm.c also here. - - * mpz/tests/powm_ui.c: New file. - * mpz/tests/Makefile.in: Add rules for tst-powm and tst-powm_ui. - - * Makefile.in: Update dependency list. - * mpf/Makefile.in: Likewise. - * mpz/Makefile.in: Likewise. - * mpq/Makefile.in: Likewise. - * Makefile.in: Set RANLIB simply to ranlib, and allow configure - to override it. - - * mpz/Makefile.in (conf): Delete spurious target. - (mp_bases.c): Delete. - (cre-conv-tab rules): Delete. - - * Makefile.in (cre-conv-tab): Greatly simplify. - -Sat Jan 27 13:38:15 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * stack-alloc.c: New file. - * stack-alloc.h: New file. - - * gmp.h (__gmp_inline): Define using __inline__. - -Thu Jan 25 00:28:37 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/generic/scan0.c: New file. - * mpn/generic/scan1.c: Renamed from next_bit.c. - * mpn/configure.in (functions): Include scan0 and scan1. - - * mpn/m68k/*: #include sysdep.h. Use C_GLOBAL_NAME. - - * configure: Update from Cygnus version. - * config.guess: Likewise. - * config.sub: Likewise. - * configure: Pass --nfp to recursive configures. - - * mpz/tests/tst-*.c: Adjust SIZE and reps. - - * mpz/powm.c: Move esize==0 test earlier. - In final reduction of rp,rsize, don't call mpn_divmod unless - reduction is really needed. - - * mpz/tests/tst-powm.c: Fix thinko in checking code. - - * All files: Get rid of `__' prefix from mpn_* calls and declarations. - * gmp.h: #define __MPN. - * gmp.h: Use __MPN in #defines for mpn calls. - - * mpn/generic/mul_n.c: Prepend `i' to internal routines. - * gmp-impl.h: Add #defines using __MPN for those internal routines. - - * mpn/generic/sqrt.c: Change call to mpn_mul to mpn_mul_n. - -Wed Jan 24 13:28:19 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/sparc32/udiv_fp.S: New name for udiv_qrnnd.S. - * mpn/sparc32/udiv_nfp.S: New name for v8/udiv_qrnnd.S. - * mpn/sparc32/v8/supersparc: New directory. - * mpn/sparc32/v8/supersparc/udiv.S: New file. - -Tue Jan 23 01:10:11 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - This major contribution is from Ken Weber: - * mpn/generic/accelgcd.c: New file. - * mpn/generic/bdivmod.c: New file. - * mpn/generic/bingcd.c: New file. - * mpn/generic/gcd_1.c: Rewrite. - * mpn/generic/numbits.c: New file (to go away soon). - * mpz/gcd.c: Rewrite. - * mpz/tests/tst-gcd.c (SIZE): Now 128. - * gmp.h: Declare new functions. - * mpn/configure.in (functions): List new files. - * gmp-impl.h (MPN_SWAP): Delete. - (MPN_LESS_BITS_LIMB, MPN_LESS_BITS, MPN_MORE_BITS): Delete. - (MPN_COMPL_INCR, MPN_COMPL): Delete. - -Mon Jan 22 02:04:59 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * gmp.h (mpn_name): New #define. - - * mpn/m88k/mc88110/addmul_1.s: New file. - * mpn/m88k/mc88110/add_n.S: New file. - * mpn/m88k/mc88110/sub_n.S: New file. - - * mpn/m88k/sub_n.s: Correctly initialize carry. - - * mpn/sparc32/{add_n.S,sub_n.S,lshift.S,rshift.S): `beq' => `be'. - -Sun Jan 21 00:04:35 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/sparc64/addmul_1.s: New file. - * mpn/sparc64/submul_1.s: New file. - * mpn/sparc64/rshift.s: New file. - -Sat Jan 20 00:32:54 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpz/iset.c: Fix typo introduced Dec 25. - -Wed Jan 17 13:16:44 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * config/mt-sprc8-gcc: New name for mt-sparc8-gcc. - * config/mt-sparcv8-gcc: Delete. - * configure.in: Corresponding changes. - -Tue Jan 16 16:31:01 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * gmp-impl.h: #include alloca.h when necessary. - - * longlong.h: Test __alpha instead of __alpha__, since the former - is the standard symbol. - -Mon Jan 15 18:06:57 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/sparc64/mul_1.s: Swap operands of mulx instructions. - * mpn/sparc64/lshift.s: New file. - -Fri Dec 29 17:34:03 1995 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/x86/pentium/add_n.S: Get rid of #defines for register names. - * mpn/x86/pentium/sub_n.S: Likewise. - -Thu Dec 28 03:16:57 1995 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/x86/pentium/mul_1.S: Rework loop to avoid AGI between update - of loop induction variable and load insn at beginning of loop. - * mpn/x86/pentium/addmul_1.S: Likewise. - * mpn/x86/pentium/submul_1.S: Likewise. - -Mon Dec 25 23:22:55 1995 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * All files: Prefix user-visible structure fields with _mp_. - -Fri Dec 22 20:42:17 1995 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/configure.in (m68k configs): Terminate path variable with - plain "m68k". - -Fri Dec 22 03:29:33 1995 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/sparc32/add_n.S: Update from sub_n.S to fix bugs, and to - clean things up. - - * mpn/configure.in (m68k configs): Update #include path for new - mpn directory organization. - -Tue Dec 12 02:53:02 1995 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * gmp.h: Prefix all structure field with _mp_. - * gmp-impl.h: Define access macros for these fields. - -Sun Dec 10 00:47:17 1995 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/alpha/addmul_1.s: Prefix labels with `.'. - * mpn/alpha/submul_1.s: Likewise. - * mpn/alpha/[lr]shift.s: Likewise. - * mpn/alpha/udiv_qrnnd.S: Likewise. - * mpn/alpha/ev5/[lr]shift.s: Likewise. - - * mpn/alpha/ev5/lshift.s: Fix typos. - -Fri Dec 1 14:28:20 1995 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/Makefile.in (.SUFFIXES): Define. - -Wed Nov 29 23:11:57 1995 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/sparc64/{add_n.s, sub_n.s}: New files. - -Tue Nov 28 06:03:13 1995 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/x86/syntax.h: Handle ELF_SYNTAX. - Rename GAS_SYNTAX => BSD_SYNTAX. - - * mpn/configure.in: Handle linuxelf and SysV for x86 variants. - -Mon Nov 27 01:32:12 1995 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/hppa/hppa1_1/pa7100/submul_1.S: New file. - -Sun Nov 26 04:30:47 1995 Torbjorn Granlund <tege@noisy.matematik.su.se> - - * mpn/hppa/hppa1_1/pa7100/addmul_1.S: New file. - - * mpn/sparc32/add_n.S: Rewrite to use 64 bit loads/stores. - * mpn/sparc32/sub_n.S: Likewise. - -Fri Nov 17 00:18:46 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/configure.in: Handle m68k on NextStep. - -Thu Nov 16 02:30:26 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn: Reorganize machine-specific directories. - * mpn/configure.in: Corresponding changes. - (sh, sh2): Handle these. - (m68k targets): Create asm-syntax.h. - -Thu Nov 9 02:20:50 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/generic/mul_n.c (____mpn_sqr_n): Delete code that calls abort. - (____mpn_mul_n): Likewise. - -Tue Nov 7 03:25:12 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpf/get_str.c: In exponentiation code (two places), don't swap - input and output areas when calling mpn_mul_1. - * mpf/set_str.c: Likewise. - -Fri Nov 3 02:35:58 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpf/Makefile.in: Make sure all objects are listed in dependency list; - delete spurious entries. - - * mpf/mul.c: Handle U or V being 0. Allow prec+1 for result precision. - - * mpf/set_prec.c: New computation of limb precision. - * mpf/set_dfl_prec.c: Likewise. - - * mpf/random2.c: Fix typo computing exp. - * mpf/get_str.c: In (uexp > usize) case, set n_limbs as a function of - the user-requested number of digits, n_digits. - -Thu Nov 2 16:25:07 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/generic/divrem.c (case 2): Don't move np vector back, it is - never read. - (default case): Put most significant limb from np in new variable n2; - decrease size argument for MPN_COPY_DECR; use n2 instead of np[dsize]. - -Wed Nov 1 02:59:53 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/sparc/[lr]shift.S: New files. - -Tue Oct 31 00:08:12 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpz/gcd_ui.c: Set w->size unconditionally when v is zero. - - * gmp-impl.h (assert): Delete definition. - - * mpf/sub.c: Delete all assert calls. Delete variable `cy'. - - * mpf/neg.c: Use prec+1 as precision. Optimize for when arguments - are the same. - * mpf/abs.c: Likewise. - * mpf/{set,neg,abs}.c: Make structure and variable names similar. - -Mon Oct 30 12:45:26 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpf/random2.c (random): Test __SVR4 in addition to __svr4__. - * mpn/generic/random2.c (random): Likewise. - -Sun Oct 29 01:54:28 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpf/div.c: Special handle U or V being 0. - - * mpf/random2.c: New file. - - * longlong.h (i860 rshift_rhlc): Define. - (i960 udiv_qrnnd): Define. - (i960 count_leading_zeros): Define. - (i960 add_ssaaaa): Define. - (i960 sub_ddmmss): Define. - (i960 rshift_rhlc): Define. - -Sat Oct 28 19:09:15 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/pentium/rshift.S: Fix and generalize condition for when to use - special code for shift by 1. - * mpn/pentium/lshift.S: Likewise. - -Thu Oct 26 00:02:56 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * gmp.h: #undef __need_size_t. - * mp.h: Update from gmp.h. - -Wed Oct 25 00:17:27 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpf/Makefile.in: Compile set_prec.c. - * mpf/realloc.c: Delete this file. - * mpf/Makefile.in: Delete mentions of realloc.c. - - * gmp.h (__mpf_struct): Get rid of `alloc' field. - * mpf/clear.c: Likewise. - * mpf/init*.c: Likewise. - * mpf/set_prec.c: Likewise. - * mpf/iset*.c: Likewise. - - * mpf/iset_str.c: New file. - - * mpn/configure.in: Handle pyramid. - - * mpf/set.c: Use prec+1 as precision. - - * mpf/set_prec.c: New file. - -Tue Oct 24 00:56:41 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/generic/divrem.c: New file. Will replace mpn/generic/divmod.c - when rest of source is converted. - * mpn/configure.in (functions): Add `divrem' - * mpn/generic/set_str.c: Never call __mpn_mul_1 with zero size. - - * mpf/get_str.c: Completely rewritten. - * mpf/add.c: Fix several problems. - * mpf/sub.c: Compare operands from most significant end until - first difference, exclude skipped limbs from computation. - Accordingly simplify normalization code. - * mpf/set_str.c: Fix several problems. - * mpf/dump.c: New file. - * mpf/Makefile.in: Compile dump.c. - * mpf/init2.c: Set prec field correctly. - -Sun Oct 22 03:02:09 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * cre-conv-tab.c: #include math.h; don't declare log and floor. - -Sat Oct 21 23:04:10 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpf/mul_ui.c: Handle U being 0. - -Wed Oct 18 19:39:27 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/generic/set_str.c: Correctly handle input like "000000000000". - Misc cleanups. - -Tue Oct 17 15:14:13 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * longlong.h: Define COUNT_LEADING_ZEROS_0 for machines where - appropriate. - -Mon Oct 16 19:14:43 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpf/add.c: Rewrite. - * mpf/set_str.c: New file. Needs more work. - -Sat Oct 14 00:14:04 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpf/div_2exp.c: Vastly simplify. - * mpf/mul_2exp.c: Likewise. - - * mpf/sub.c: Rewrite. - - * gmp-impl.h (udiv_qrnnd_preinv2gen): Terminate comment. - - * mpf/dump.c: Free allocated memory. - - * gmp-impl.h (assert): Define. - -Wed Oct 11 13:31:00 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/pentium/rshift.S: Install new code to optimize shift-by-1. - -Tue Oct 10 00:37:21 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/pentium/lshift.S: Install new code to optimize shift-by-1. - - * mpn/powerpc32/{lshift.s,rshift.s}: New files. - - * configure.in: Fix typo. - -Sat Oct 7 08:17:09 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * longlong.h (smul_ppmm): Correct type of __m0 and __m1. - -Wed Oct 4 16:31:28 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/configure.in: Handle alphaev5. - * mpn/ev4: New name for alpha subdir. - * mpn/ev5: New subdir. - * mpn/ev5/lshift.s: New file. - -Tue Oct 3 15:06:45 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/alpha/mul_1.s: Avoid static increments of pointers; use - corresponding offsets in ldq and stq instructions instead. - (Loop): Swap cmpult and stq to save one cycle on EV5. - - * mpn/tests/{add_n.s,sub_n.s,lshift.s,rshift.s,mul_1.s,addmul_1.s, - submul_1.s}: Don't check results if NOCHECK is defined. - -Mon Oct 2 11:40:18 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * longlong.h (mips umul_ppmm [32 and 64 bit versions]): - Make new variants, based on GCC version number, that use `l' and `h' - constraints instead of explicit mflo and mfhi instructions - -Sun Oct 1 00:17:47 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/mc88100/add_n.s: Decrease unrolling factor from 16 to 8. - * mpn/mc88100/sub_n.s: Likewise. - - * config/mt-m88110: New file. - * configure.in: Use it. - - * mpn/mc88110/mul_1.s: Fix thinko. - -Sat Sep 30 21:28:19 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpz/set_d.c: Declare `size' at function start. - - * experimental: New directory for mpx and mpz2. - - * mpz/tdiv_q.c: Clarify comments. - * mpz/{mod.c,mod_ui.c}: New file, for math mod function. - - * mpn/sh2/{mul_1.s,addmul_1.s,submul_1.s}: New files. - - * mpn/sh/{add_n.s,sub_n.s}: New files. - - * mpn/pyr/{add_n.s,sub_n.s,mul_1.s,addmul_1.s}: New files. - - * mpn/i960/{add_n.s,sub_n.s}: New files. - - * mpn/alpha/addmul_1.s (Loop): Move decrement of r18 to before umulh, - to save cycles on EV5. - * mpn/alpha/submul_1.s: Ditto. - * mpn/alpha/mul_1.s: Ditto. - -Thu Sep 28 02:48:59 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * gmp.h (mp_limb, mp_limb_signed): Define as `long long' if - _LONG_LONG_LIMB is defined. - - * longlong.h (m88110): Test __m88110__, not __mc88110__ - - * mpn/mc88110/mul_1.s: Rewrite. - -Tue Sep 26 23:29:05 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * config.sub: Update from current Cygnus version. - - * mpn/configure.in: Recognize canonical m88*, not mc88*. - -Fri Sep 22 14:58:05 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpz/set_d.c: New file. - * mpz/Makefile.in: Build new files. - - * mpq/get_d.c: Replace usage of scalbn with ldexp. - - * mpn/{vax,i386}/gmp-mparam.h: New files. - * gmp-impl.h (ieee_double_extract): Define here. - * mpf/set_d.c (ieee_double_extract): Not here. - -Thu Sep 21 00:56:36 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * longlong.h (C umul_ppmm): Use UWtype, not USItype for temps. - (udiv_qrnnd): For cases implemented with call to __udiv_qrnnd, - protect with new symbol LONGLONG_STANDALONE. - (68000 umul_ppmm): Use %# prefix for immediate constants. - -Wed Sep 20 15:36:23 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/generic/divmod_1.c: Handle - divisor_limb == 1 << (BITS_PER_MP_LIMB - 1) - specifically also when normalization_steps != 0. - -Mon Sep 18 15:42:30 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpq/get_d.c: New file. - -Sun Sep 17 02:04:36 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * longlong.h (pyr): Botch up for now. - -Sat Sep 16 00:11:50 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/clipper/mul_1.s: New file. - * mpn/clipper/add_n.s: New file. - * mpn/clipper/sub_n.s: New file. - * mpn/configure.in: Handle clipper*-*-*. - - * mpn/configure.in: Recognize rs6000-*-*. - -Fri Sep 15 00:41:34 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/alpha/add_n.s: New file. - * mpn/alpha/sub_n.s: New file. - - * mpn/mips3: New name for mpn/r4000. - * mpn/mips2: New name for mpn/r3000. - * mpn/configure.in: Corresponding changes. - - * mpn/generic/perfsqr.c (primes): Delete. - (residue_map): Delete. - -Thu Sep 14 00:07:58 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/r3000/sub_n.s: Fix typo. - - * dm_trunc.c: Delete spurious file. - - * mpz/out_binary.c: Fix typo. - - * mpn/configure.in (per-target): Make mips*-*-irix6* imply r4000. - - * gmp-impl.h: For sparc and sgi, include alloca.h. - - * mpn/z8000/mul_1.s: Replace `test r' with `and r,r'. Replace - `ldk r,#0' with `xor r,r'. - -Wed Sep 6 00:58:38 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpz/inp_binary.c: New file. - * mpz/out_binary.c: New file. - * mpz/Makefile.in: Build new files. - -Tue Sep 5 22:53:51 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * gmp.h (__mpz_struct): Change `long int' => `mp_size_t' for alloc - and size fields. - -Sat Sep 2 17:47:59 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/r4000/{add_n.s,sub_n.s}: Optimize away some pointer arithmetic. - * mpn/r3000/{add_n.s,sub_n.s,lshift.s,rshift.s}: New files, - derived from r4000 code. - -Fri Sep 1 05:35:52 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/r3000/mul_1.s: Fix typo. - - * mpn/powerpc32: Fix some old vs new mnemonic issues. - - * mpn/powerpc32/{add_n.s,sub_n.s}: New files. - * mpn/r4000/{add_n.s,sub_n.s,lshift.s,rshift.s}: New files. - -Wed Aug 30 10:43:47 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/r3000/mul_1.s ($LC1): Use addiu for immediate add. - * mpn/r4000/{mul_1.s,addmul_1.s,submul_1.s}: New files. - - * config.guess: Update to latest FSF revision. - -Mon Aug 28 02:18:13 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpz/out_str.c: Cast str to char * in fputs call. - - * gmp-impl.h: Define UQItype, SItype, and USItype also - when not __GNUC__. - -Fri Aug 25 01:45:04 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/i386/syntax.h: Renamed from asm-syntax.h. - * mpn/mc68020/syntax.h: Renamed from asm-syntax.h. - * mpn/configure.in: Corresponding changes. - -Sun Aug 13 19:20:04 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> - - * mpn/generic/random2.c: Test __hpux, not hpux. - -Sat Apr 15 20:50:33 1995 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpn/sparc/add_n.S: Make it work for PIC. - * mpn/sparc/sub_n.s: Likewise. - * mpn/sparc8/addmul_1.S: Likewise. - * mpn/sparc8/mul_1.S: Likewise. - * mpn/i386/add_n.S: Likewise. - * mpn/i386/sub_n.S: Likewise. - -Thu Apr 13 23:15:03 1995 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpn/configure.in: Don't search power subdir for generic ppc configs. - Add some ppc cpu-specific configs. Misc clean up. - -Mon Apr 10 00:16:35 1995 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpz/ui_pow_ui.c: Delete spurious code to handle negative results. - -Sun Apr 9 12:38:11 1995 Torbjorn Granlund (tege@tiny.cygnus.com) - - * longlong.h (SPARC v8 udiv_qrnnd): Generate remainder in C, - not in asm. - - * mpn/generic/sqrt.c (SQRT): Test for __SOFT_FLOAT. - -Tue Mar 28 00:19:52 1995 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpn/generic/hamdist.c (popc_limb): Make Mar 16 change here too. - -Fri Mar 17 23:29:22 1995 Torbjorn Granlund (tege@tiny.cygnus.com) - - * longlong.h (SH umul_ppmm): Define. - -Thu Mar 16 16:40:44 1995 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpn/generic/popcount.c (popc_limb): Rearrange 32 bit case - to help CSE. - -Fri Mar 10 20:03:49 1995 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpn/powerpc32/mul_1.s: Clear cy before entering loop. - Rearrange loop to save a cycle. - * mpn/powerpc32/addmul_1.s: New file. - * mpn/powerpc32/submul_1.s: New file. - -Fri Feb 17 22:44:45 1995 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpn/configure.in: Set target_makefile_frag for freebsd - in new case stmt. - * mpn/config/t-freebsd: New file. - * mpn/Makefile.in: Add #### for frag insertion. - (XCFLAGS): Clear by default. - (.c.o, .S.o rules): Pass XCFLAGS. - -Tue Feb 7 16:27:50 1995 Torbjorn Granlund (tege@tiny.cygnus.com) - - * longlong.h (68000 umul_ppmm): Merge improvements from henderson. - -Tue Jan 24 04:23:20 1995 Torbjorn Granlund (tege@tiny.cygnus.com) - - * longlong.h (default umul_ppmm): Store input parameters in temporaries - to avoid reading them twice. - (default smul_ppmm): New definition. - -Thu Dec 29 04:20:07 1994 Jim Meyering (meyering@comco.com) - - * generic/perfsqr.c (__mpn_perfect_square_p): Remove declaration - of unused variable. - * generic/pre_mod_1.c (__mpn_preinv_mod_1): Likewise. - * mpz/powm.c (pow): Likewise. - - * mpz/and.c (mpz_and): Use {} instead of `;' for empty else clause - to placate `gcc -Wall'. - * mpz/ior.c (mpz_ior): Likewise. - -Wed Dec 28 13:31:40 1994 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpn/m*68*/*.S: #include asm-syntax.h, not asm.h. - -Mon Dec 26 17:15:36 1994 Torbjorn Granlund (tege@tiny.cygnus.com) - - * longlong.h: Test for more symbols, in __mc68000__ case. - - * mpn/mpn/config.sub: Recognize m68060. - * mpn/configure.in: Change mc* to m* for 68k targets. - * mpn/Makefile.in (.S.o): Delete spurious creation of temp .c file. - -Mon Dec 19 01:56:30 1994 Torbjorn Granlund (tege@tiny.cygnus.com) - - * config.sub: Recognize pentium as a valid CPU. - * mpn/configure.in: Handle pentium specifically, to use new assembly - code. - -Mon Dec 19 00:13:01 1994 Jim Meyering (meyering@comco.com) - - * gmp.h: Define _GMP_H_HAVE_FILE if FILE, __STDIO_H__, or H_STDIO - is defined. - * gmp.h: test _GMP_H_HAVE_FILE instead of FILE everywhere else. - -Mon Dec 19 00:04:54 1994 Kent Boortz (boortz@sics.se) - - * Makefile.in (recursive makes): Pass CFLAGS. - -Sun Dec 18 22:34:49 1994 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpn/pentium: New directory. - - * mpz/pprime.c: Make sure to mpz_clear all temporaries. - - * longlong.h: Don't use udiv instruction when SUPERSPARC is defined. - * configure.in: Handle supersparc*-. - * config/mt-supspc-gcc: New file. - * config/mt-sparc8-gcc: New name for mt-sparcv8-gcc. - -Mon Dec 12 22:22:10 1994 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpn/i386/*.S: #include "asm-syntax.h", not "asm.h". - #include sysdep.h before asm-syntax.h. - - * mpn/mc68020/asm-syntax.h: #undef ALIGN before defining it. - * mpn/i386/asm-syntax.h: Likewise. - - * mpn/mc68020/asm-syntax.h: New name for asm.h. - * mpn/i386/asm-syntax.h: New name for asm.h. - -Tue Dec 6 21:55:25 1994 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpz/array_init.c: Fix typo in declaration. - -Fri Nov 18 19:50:52 1994 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpn/Makefile.in (.S.o): Pass CFLAGS and INCLUDES. - -Mon Nov 14 00:34:12 1994 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpn/generic/random2.c (random): Test for __svr4__. - -Wed Oct 12 23:28:16 1994 Torbjorn Granlund (tege@tiny.cygnus.com) - - * cre-conv-tab.c (main): Avoid upper-case X in printf format string. - -Tue Aug 23 17:16:35 1994 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpz/perfsqr.c: Use mpn_perfect_square_p. - * mpn/generic/perfsqr.c: New file. - -Wed Jul 6 13:46:51 1994 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpz/array_init.c: New file. - * mpz/Makefile.in: Compile array_init. - * gmp.h: Declare mpz_array_init. - -Mon Jul 4 01:10:03 1994 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpz/add.c: Fix bogus comment. - * mpz/sub.c: Likewise. - -Sat Jul 2 02:14:56 1994 Torbjorn Granlund (tege@adder.cygnus.com) - - * mpn/generic/pre_mod_1.c: New file. - * mpz/perfsqr.c: Use __mpn_preinv_mod_1 when faster. - -Fri Jul 01 22:10:19 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk) - - * longlong.h (arm umul_ppmm): Fix typos in last change. Mark - hard-coded registers with "%|" - -Thu Jun 30 03:59:33 1994 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpz/perfsqr.c: Define PP, etc, for machines with 64 bit limbs. - Use __mpn_mod_1. - * mpz/perfsqr.c: Don't clobber REM in quadratic residue check loop. - -Wed Jun 29 18:45:41 1994 Torbjorn Granlund (tege@adder.cygnus.com) - - * mpn/generic/sqrt.c (SQRT): New asm for IBM POWER2. - - * mpz/gcd_ui.c: Return 0 if result does not fit an unsigned long. - - * gmp.h: Use "defined (__STDC__)" consistently. - -Tue Jun 28 18:44:58 1994 Torbjorn Granlund (tege@adder.cygnus.com) - - * gmp.h (mpz_get_si): Don't use "signed" keyword for return type. - - * mpz/tests/Makefile.in: Use CFLAGS for linking. - - * Makefile.in (CFLAGS): Use -O2 here. - * mpn/Makefile (CFLAGS): Not here. - - * mpq/cmp_ui.c: Fix typo. - * mpq/canonicalize.c: Fix typo. - * mpz/gcd_ui.c: Handle gcd(0,v) and gcd(u,0) correctly. - * mpn/generic/gcd_1.c: Fix braino in last change. - -Mon Jun 27 16:10:27 1994 Torbjorn Granlund (tege@rtl.cygnus.com) - - * mpz/gcd_ui.c: Change return type and return result. - Allow destination param to be NULL. - * gmp.h: Corresponding change. - * mpn/generic/gcd_1.c: Handle zero return from mpn_mod_1. - -Tue Jun 14 02:17:43 1994 Torbjorn Granlund (tege@tiny.cygnus.com) - - * mpn/i386/asm.h (ALIGN): Make it take a parameter. - * mpn/i386/*.S: Use ALIGN to align all loops. - - * mpn/i386/*.S: Move colon inside C_GLOBAL_NAME expression. - (Makes old versions of GAS happy.) - -Sat May 28 01:43:54 1994 Torbjorn Granlund (tege@adder.cygnus.com) - - * Many files: Delete unused variables and labels. - * mpn/generic/dump.c: cast printf width argument to int. - -Wed May 25 00:42:37 1994 Torbjorn Granlund (tege@thepub.cygnus.com) - - * mpz/gcd.c (mpz_gcd): Normalize after __mpn_sub calls. - (xmod): Ignore return value of __mpn_divmod. - (xmod): Improve normalization code. - -Sat May 21 01:30:09 1994 Torbjorn Granlund (tege@adder.cygnus.com) - - * mpz/gcdext.c: Cosmetic changes. - - * mpz/fdiv_ui.c: New file. - -Fri May 20 00:24:53 1994 Torbjorn Granlund (tege@adder.cygnus.com) - - * mpz/tests/Makefile.in: Use explicit rules for running tests, - not a shell loop. - (clean): Delete stmp-*. - - * mpz/Makefile.in: Update. - - * mpz/div_ui.c: Don't include longlong.h. - * mpz/dm_ui.c: Likewise. - - * mpz/fdiv_q.c, mpz/fdiv_q_ui.c, mpz/fdiv_qr.c, mpz/fdiv_qr_ui.c, - mpz/fdiv_r.c, mpz/fdiv_r_ui.c: New files. Code partly from deleted - mdm.c, mdm_ui.c, etc, partly rewritten. - * mpz/dm_floor_ui.c, mpz/dm_floor.c: Delete. - * mpz/mdm.c, mpz/mdm_ui.c, mpz/mdiv.c, mpz/mdiv_ui.c, mpz/mmod.c, - mpz/mmod_ui.c: Delete. - - * mpz/tdiv_q.c, mpz/tdiv_q_ui.c, mpz/tdiv_qr.c, mpz/tdiv_qr_ui.c, - mpz/tdiv_r.c, mpz/tdiv_r_ui.c: - New names for files implementing truncating division. - * mpz/div_ui.c, mpz/dm_ui.c, mpz/mod_ui.c: Simplify. - - * mpn/Makefile.in (.S.o): Don't rely on CPP being defined, use CC - instead. - (clean): Delete tmp-*. - -Thu May 19 01:37:44 1994 Torbjorn Granlund (tege@adder.cygnus.com) - - * mpz/cmp.c: Call __mpn_cmp. - - * mpz/popcount.c: Fix typo. - - * mpz/powm_ui.c: Simplify main loop. Keep principal operand size - smaller than MSIZE when possible. - * mpz/powm.c: Likewise. - - * mpn/generic/sqrt.c: Move alloca calls into where the memory is - needed. Simplify. - - * gmp.h: (_PROTO): New macro. - Add many function declarations; use _PROTO macro in all declarations. - - * mpf/*.c: Prepend mpn calls with __. - -Wed May 18 20:57:06 1994 Torbjorn Granlund (tege@adder.cygnus.com) - - * mpf/*ui*.c: Make ui argument `long' for consistency with mpz - functions. - - * mpf/div_ui.c: Simplify. - -Tue May 17 01:05:14 1994 Torbjorn Granlund (tege@adder.cygnus.com) - - * mpz/*.c: Prepend mpn calls with __. - - * mpz/mul_ui.c: Use mpn_mul_1. - -Mon May 16 17:19:41 1994 Torbjorn Granlund (tege@adder.cygnus.com) - - * mpn/i386/mul_1.S: Use C_GLOBAL_NAME. - * mpn/i386/mul_1.S, mpn/i386/addmul_1.S, mpn/i386/submul_1.S: - Nuke use of LAB. - -Sat May 14 14:21:02 1994 Torbjorn Granlund (tege@adder.cygnus.com) - - * gmp-impl.h: Don't define abort here. - - * mpz/pow_ui.c: Increase temporary allocation. - * mpz/ui_pow_ui.c: Likewise. - - * gmp.h (mpz_add_1, mpz_sub_1): Don't call memcpy. - - * All Makefile.in: Delete spurious -I arguments. - Update dependencies. - - * mpz/popcount.c: New file. - * mpz/hamdist.c: New file. - - * All configure: Latest version from Cygnus. - - * mpq/Makefile.in: New file. - * mpq/configure.in: New file. - * Makefile.in, configure.in: Enable compilation of mpq. - - * mpq/set_z.c: Fix typos. - * mpq/canonicalize.c: Fix typos. - * mpq/cmp_ui.c: Fix typos. - - * mpf/add_ui.c: Read U->D into UP always. Delete spurious MPN_COPY. - * mpf/sub_ui.c: Likewise. - - * gmp-impl.h: Don't redefine alloca. - - * COPYING.LIB: Renamed from COPYING. - -Wed May 11 01:45:44 1994 Torbjorn Granlund (tege@adder.cygnus.com) - - * mpz/powm_ui.c: When shifting E left by C+1, handle out-of-range - shift counts. Fix typo when testing negative_result. - * mpz/powm.c: Likewise. - - * mpz/ui_pow_ui.c: New file. - * mpz/Makefile.in: Update. - - * mpz/pow_ui.c: Call __mpn_mul_n instead of __mpn_mul when possible. - - * mpz/div.c, mpz/div_ui.c, mpz/gcd.c: Prefix external mpn calls. - * mpz/gcd.c: Declare mpn_xmod. - - * mpz/powm.c: Major changes to accommodate changed mpn semantics. - * mpz/powm_ui.c: Update from mpz/powm.c. - - * mpz/tests/tst-io.c: New file. - * mpz/tests/tst-logic: New file. - * mpz/tests/Makefile.in: Update. - - * mpz/inp_str.c: Get base right when checking for first digit. - * mpz/inp_str.c: Allocate more space for DEST when needed. - - * mpz/com.c: Use mpn_add_1 and mpn_sub_1. - * mpz/and.c, mpz/ior.c: Likewise. Simplify somewhat. - - * mpz/add_ui.c: Use mpn_add_1 and mpn_sub_1. - Rename parameters to be consistent with mpz/sub_ui. - General simplifications. - * mpz/sub_ui.x: Likewise. - -Tue Aug 10 19:41:16 1993 Torbjorn Granlund (tege@prudens.matematik.su.se) - - * mpf: New directory. - * mpf/*.c: Merge basic set of mpf functions. - - * Many logs missing... - -Sun Apr 25 18:40:26 1993 Torbjorn Granlund (tege@pde.nada.kth.se) - - * memory.c: Use #if instead of #ifdef for __STDC__ for consistency. - * bsd/xtom.c: Likewise. - - * mpz/div.c: Remove free_me and free_me_size and their usage. - Use mpn_divmod for division; corresponding changes in return value - convention. - * mpz/powm.c: `carry_digit' => `carry_limb'. - * bsd/sdiv.c: Clarify comment. - -Sun Apr 25 00:31:28 1993 Torbjorn Granlund (tege@pde.nada.kth.se) - - * longlong.h (__udiv_qrnnd_c): Make all variables `unsigned long int'. - -Sat Apr 24 16:23:33 1993 Torbjorn Granlund (tege@pde.nada.kth.se) - - * longlong.h (__udiv_qrnnd_c): Make all variables `unsigned long int'. - - * gmp-impl.h: #define ABS. - * (Many files): Use ABS instead of abs. - - * mpn/generic/sqrt.c, mpz/clrbit.c, mpz/get_si.c, mpz/mod_2exp.c, - mpz/pow_ui.c: Cast 1 to mp_limb before shifting. - - * mpz/perfsqr.c: Use #if, not plain if for exclusion of code for - non-32-bit machines. - -Tue Apr 20 13:13:58 1993 Torbjorn Granlund (tege@du.nada.kth.se) - - * mpn/generic/sqrt.c: Handle overflow for intermediate quotients by - rounding them down to fit. - - * mpz/perfsqr.c (PP): Define in hexadecimal to avoid GCC warnings. - - * mpz/inp_str.c (char_ok_for_base): New function. - (mpz_inp_str): Use it. - -Sun Mar 28 21:54:06 1993 Torbjorn Granlund (tege@cyklop.nada.kth.se) - - * mpz/inp_raw.c: Allocate x_index, not xsize limbs. - -Mon Mar 15 11:44:06 1993 Torbjorn Granlund (tege@pde.nada.kth.se) - - * mpz/pprime.c: Declare param `const'. - * gmp.h: Add declarations for mpz_com. - -Thu Feb 18 14:10:34 1993 Torbjorn Granlund (tege@pde.nada.kth.se) - - * mpq/add.c, mpq/sub.c: Call mpz_clear for t. - -Fri Feb 12 20:27:34 1993 Torbjorn Granlund (tege@cyklop.nada.kth.se) - - * mpz/inp_str.c: Recog minus sign as first character. - -Wed Feb 3 01:36:02 1993 Torbjorn Granlund (tege@cyklop.nada.kth.se) - - * mpz/iset.c: Handle 0 size. - -Tue Feb 2 13:03:33 1993 Torbjorn Granlund (tege@cyklop.nada.kth.se) - - * mpz/mod_ui.c: Initialize dividend_size before it's used. - -Mon Jan 4 09:11:15 1993 Torbjorn Granlund (tege@sics.se) - - * bsd/itom.c: Declare param explicitly 'signed'. - * bsd/sdiv.c: Likewise. - - * mpq/cmp.c: Remove unused variable tmp_size. - * mpz/powm_ui.c: Fix typo in esize==0 if stmt. - * mpz/powm.c: Likewise. - -Sun Nov 29 01:16:11 1992 Torbjorn Granlund (tege@sics.se) - - * mpn/generic/divmod_1.c (mpn_divmod_1): Handle - divisor_limb == 1 << (BITS_PER_MP_LIMB - 1) - specifically. - - * Reorganize sources. New directories mpn, mpn/MACH, mpn/generic, - mpz, mpq, bsd. Use full file name for change logs hereafter. - -Wed Oct 28 17:40:04 1992 Torbjorn Granlund (tege@jupiter.sics.se) - - * longlong.h (__hppa umul_ppmm): Fix typos. - (__hppa sub_ddmmss): Swap input arguments. - - * mpz_perfsqr.c (mpz_perfect_square_p): Avoid , before } in - initializator. - -Sun Oct 25 20:30:06 1992 Torbjorn Granlund (tege@jupiter.sics.se) - - * mpz_pprime.c (mpz_probab_prime_p): Handle numbers <= 3 - specifically (used to consider all negative numbers prime). - - * mpz_powm_ui: `carry_digit' => `carry_limb'. - - * sdiv: Handle zero dividend specifically. Replace most code in - this function with a call to mpn_divmod_1. - -Fri Sep 11 22:15:55 1992 Torbjorn Granlund (tege@tarrega.sics.se) - - * mpq_clear: Don't free the MP_RAT! - - * mpn_lshift, mpn_rshift, mpn_rshiftci: Remove `long' from 4:th arg. - -Thu Sep 3 01:47:07 1992 Torbjorn Granlund (tege@jupiter.sics.se) - - * All files: Remove leading _ from mpn function names. - -Wed Sep 2 22:21:16 1992 Torbjorn Granlund (tege@jupiter.sics.se) - - Fix from Jan-Hein Buhrman: - * mpz_mdiv.c, mpz_mmod.c, mpz_mdm.c: Make them work as documented. - - * mpz_mmod.c, mpz_mdm.c: Move decl of TEMP_DIVISOR to reflect its - life. - -Sun Aug 30 18:37:15 1992 Torbjorn Granlund (tege@jupiter.sics.se) - - * _mpz_get_str: Use mpz_sizeinbase for computing out_len. - * _mpz_get_str: Don't remove leading zeros. Abort if there are some. - -Wed Mar 4 17:56:56 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * gmp.h: Change definition of MP_INT to make the & before params - optional. Use typedef to define it. - * mp.h: Use typedef to define MINT. - -Tue Feb 18 14:38:39 1992 Torbjorn Granlund (tege@zevs.sics.se) - - longlong.h (hppa umul_ppmm): Add missing semicolon. Declare type - of __w1 and __w0. - -Fri Feb 14 21:33:21 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * longlong.h: Make default count_leading_zeros work for machines > - 32 bits. Prepend `__' before local variables to avoid conflicts - with users' variables. - - * mpn_dm_1.c: Remove udiv_qrnnd_preinv ... - * gmp-impl.h: ... and put it here. - * mpn_mod_1: Use udiv_qrnnd_preinv if it is faster than udiv_qrnnd. - -Tue Feb 11 17:20:12 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * mpn_mul: Enhance base case by handling small multiplicands. - * mpn_dm_1.c: Revert last change. - -Mon Feb 10 11:55:15 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * mpn_dm_1.c: Don't define udiv_qrnnd_preinv unless needed. - -Fri Feb 7 16:26:16 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * mpn_mul: Replace code for base case. - -Thu Feb 6 15:10:42 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * mpn_dm_1.c (_mpn_divmod_1): Add code for avoiding division by - pre-inverting divisor. - -Sun Feb 2 11:10:25 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * longlong.h: Make __LLDEBUG__ work differently. - (_IBMR2): Reinsert old code. - -Sat Feb 1 16:43:00 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * longlong.h (#ifdef _IBMR2): Replace udiv_qrnnd with new code - using floating point operations. Don't define - UDIV_NEEDS_NORMALIZATION any longer. - -Fri Jan 31 15:09:13 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * longlong.h: Define UMUL_TIME and UDIV_TIME for most machines. - * longlong.h (#ifdef __hppa): Define umul_ppmm. - -Wed Jan 29 16:41:36 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * mpn_cmp: Only one length parameter, assume operand lengths are - the same. Don't require normalization. - * mpq_cmp, mpz_add, mpz_sub, mpz_gcd, mpn_mul, mpn_sqrt: Change for - new mpn_cmp definition. - -Tue Jan 28 11:18:55 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * _mpz_get_str: Fix typo in comment. - -Mon Jan 27 09:44:16 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * Makefile.in: Add new files. - - * mpn_dm_1.c: New file with function _mpn_divmod_1. - * mpz_dm_ui.c (mpz_divmod_ui): Use _mpn_divmod_1. - * mpz_div_ui: Likewise. - - * mpn_mod_1.c: New file with function _mpn_mod_1. - * mpz_mod_ui: Use _mpn_mod_1. - -Thu Jan 23 18:54:09 1992 Torbjorn Granlund (tege@zevs.sics.se) - - Bug found by Paul Zimmermann (zimmermann@inria.inria.fr): - * mpz_div_ui.c (mpz_div_ui), mpz_dm_ui.c (mpz_divmod_ui): - Handle dividend == 0. - -Wed Jan 22 12:02:26 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_pprime.c: Use "" for #include. - -Sun Jan 19 13:36:55 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * mpn_rshiftci.c (header): Correct comment. - -Wed Jan 15 18:56:04 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_powm, mpz_powm_ui (if (bsize > msize)): Do alloca (bsize + 1) - to make space for ignored quotient at the end. (The quotient might - always be an extra limb.) - -Tue Jan 14 21:28:48 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_powm_ui: Fix comment. - * mpz_powm: Likewise. - -Mon Jan 13 18:16:25 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * tests/Makefile.in: Prepend $(TEST_PREFIX) to Makefile target. - -Sun Jan 12 13:54:28 1992 Torbjorn Granlund (tege@zevs.sics.se) - - Fixes from Kazumaro Aoki: - * mpz_out_raw: Take abs of size to handle negative values. - * mpz_inp_raw: Reallocate before reading ptr from X. - * mpz_inp_raw: Store, don't read, size to x->size. - -Tue Jan 7 17:50:25 1992 Torbjorn Granlund (tege@zevs.sics.se) - - * gmp.h, mp.h: Remove parameter names from prototypes. - -Sun Dec 15 00:09:36 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * tests/Makefile.in: Prepend "./" to file names when executing - tests. - - * Makefile.in: Fix many problems. - -Sat Dec 14 01:00:02 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpn_sqrt.c: New file with _mpn_sqrt. - * mpz_sqrt, mpz_sqrtrem, mpz_perfect_square_p: Use _mpn_sqrt. - * msqrt.c: Delete. Create from mpz_sqrtrem.c in Makefile.in. - * mpz_do_sqrt.c: Delete. - * Makefile.in: Update to reflect these changes. - - * Makefile.in, configure, configure.subr: New files - (from bothner@cygnus.com). - * dist-Makefile: Delete. - - * mpz_fac_ui: Fix comment. - - * mpz_random2: Rewrite a bit to make it possible for the most - significant limb to be == 1. - - * mpz_pprime.c (mpz_probab_prime_p): Remove \t\n. - -Fri Dec 13 23:10:02 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_do_sqrt: Simplify special case for U == 0. - * m*sqrt*.c, mpz_perfsqr.c (mpz_perfect_square_p): - Rename _mpz_impl_sqrt to _mpz_do_sqrt. - -Fri Dec 13 12:52:28 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * gmp-impl.h (MPZ_TMP_INIT): Cast to the right type. - -Thu Dec 12 22:17:29 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpn_add, mpn_sub, mpn_mul, mpn_div: Change type of several - variables to mp_size. - -Wed Dec 11 22:00:34 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpn_rshift.c: Fix header comments. - -Mon Dec 9 17:46:10 1991 Torbjorn Granlund (tege@zevs.sics.se) - - Released 1.2. - - * gmp-impl.h (MPZ_TMP_INIT): Cast alloca return value. - - * dist-Makefile: Add missing dependency for cre-mparam. - - * mpz_mdiv.c, mpz_mmod.c, mpz_mdm.c, mpz_mdiv_ui.c, - mpz_mmod_ui.c, mpz_mdm_ui.c: Remove obsolete comment. - - * dist-Makefile (clean): clean in tests subdir too. - * tests/Makefile: Define default values for ROOT and SUB. - - * longlong.h (__a29k__ udiv_qrnnd): Change "q" to "1" for operand - 2 constraint. - -Mon Nov 11 00:06:05 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_sizeinb.c (mpz_sizeinbase): Special code for size == 0. - -Sat Nov 9 23:47:38 1991 Torbjorn Granlund (tege@zevs.sics.se) - - Released 1.1.94. - - * dist-Makefile, Makefile, tests/Makefile: Merge tests into - distribution. - -Fri Nov 8 22:57:19 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * gmp.h: Don't use keyword `signed' for non-ANSI compilers. - -Thu Nov 7 22:06:46 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * longlong.h: Cosmetic changes to keep it identical to gcc2 version - of longlong.h. - * longlong.h (__ibm032__): Fix operand order for add_ssaaaa and - sub_ddmmss. - -Mon Nov 4 00:36:46 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpn_mul: Fix indentation. - - * mpz_do_sqrt: Don't assume 32 bit limbs (had constant - 4294967296.0). - * mpz_do_sqrt: Handle overflow in conversion from double returned - by SQRT to mp_limb. - - * gmp.h: Add missing function definitions. - -Sun Nov 3 18:25:25 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_pow_ui: Change type of `i' to int. - - * ChangeLog: Add change log entry. - * ChangeLog: Add change log entry. - * ChangeLog: Add change log entry. - * ChangeLog: Add change log entry. - * ChangeLog: Add change log entry. - * ChangeLog: Add change log entry. - * ChangeLog: Add change log entry. - * ChangeLog: Add change log entry. -Stack overflow. - - * mpz_pow_ui.c: Fix typo in comment. - - * dist-Makefile: Create rpow.c from mpz_powm_ui.c. - * mpz_powm_ui.c: Add code for rpow. - * rpow.c: Delete this file. The rpow function is now implemented - in mpz_powm_ui.c. - - * mpz_fac_ui.c: New file. - * gmp.h, dist-Makefile: Add stuff for mpz_fac_ui. - - Bug found by John Amanatides (amana@sasquatch.cs.yorku.ca): - * mpz_powm_ui, mpz_powm: Call _mpn_mul in the right way, with - the first argument not smaller than the second. - -Tue Oct 29 13:56:55 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * cre-conv-tab.c (main), cre-mparam.c (main): Fix typo in output - header text. - -Mon Oct 28 00:35:29 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_random2: Handle size == 0. - - * gmp-impl.h (struct __mp_bases): Rename chars_per_limb_exactly to - chars_per_bit_exactly, and change its definition. - * cre-conv-tab.c (main): Output field according to its new - definition. - * mpz_out_str, _mpz_get_str, mpz_sizeinb, mout: - Use chars_per_bit_exactly. - - * mpz_random2: Change the loop termination condition in order to - get a large most significant limb with higher probability. - - * gmp.h: Add declaration of new mpz_random2 and mpz_get_si. - * mpz_get_si.c: New file. - * dist-Makefile: Add mpz_random2 and mpz_get_si. - - * mpz_sizeinb.c (mpz_sizeinbase): Special code for base being a - power of 2, giving exact result. - - * mpn_mul: Fix MPN_MUL_VERIFY in various ways. - * mpn_mul: New macro KARATSUBA_THRESHOLD. - * mpn_mul (karatsuba's algorithm): Don't write intermediate results - to prodp, use temporary pp instead. (Intermediate results can be - larger than the final result, possibly writing into hyperspace.) - * mpn_mul: Make smarter choice between Karatsuba's algorithm and the - shortcut algorithm. - * mpn_mul: Fix typo, cy instead of xcy. Unify carry handling code. - -Sun Oct 27 19:57:32 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpn_mul: In non-classical case, choose Karatsuba's algorithm only - when usize > 1.5 vsize. - - * mpn_mul: Break between classical and Karatsuba's algorithm at - KARATSUBA_THRESHOLD, if defined. Default to 8. - - * mpn_div: Kludge to fix stray memory read. - -Sat Oct 26 20:06:14 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_gcdext: Handle a = b = 0. Remove memory leakage by calling - mpz_clear for all temporary variables. - - * mpz_gcd: Reduce w_bcnt in _mpn_lshift call to hold that - function's argument constraints. Compute wsize correctly. - - * mpz_gcd: Fix typo in comment. - - * memory.c (_mp_default_allocate, _mp_default_reallocate): Call - abort if allocation fails, don't just exit. - -Fri Oct 25 22:17:20 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_random2.c: New file. - -Thu Oct 17 18:06:42 1991 Torbjorn Granlund (tege@zevs.sics.se) - - Bugs found by Pierre-Joseph Gailly (pjg@sunbim.be): - * mpq_cmp: Take sign into account, don't just compare the - magnitudes. - * mpq_cmp: Call _mpn_mul in the right way, with the first argument - not smaller than the second. - -Wed Oct 16 19:27:32 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_random: Ensure the result is normalized. - -Tue Oct 15 14:55:13 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_clrbit: Support non-ANSI compilers. - -Wed Oct 9 18:03:28 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * longlong.h (68k add_ssaaaa, sub_ddmmss): Generalize constraints. - -Tue Oct 8 17:42:59 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_mdm_ui: Add comments. - - * mpz_mdiv: Use MPZ_TMP_INIT instead of mpz_init. - * mpz_init_ui: Change spacing and header comment. - -Thu Oct 3 18:36:13 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * dist-Makefile: Prepend `./' before some filenames. - -Sun Sep 29 14:02:11 1991 Torbjorn Granlund (tege@zevs.sics.se) - - Released 1.1 (public). - - * mpz_com: New name of mpz_not. - * dist-Makefile: Change mpz_not to mpz_com. - -Tue Sep 24 12:44:11 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * longlong.h: Fix header comment. - -Mon Sep 9 15:16:24 1991 Torbjorn Granlund (tege@zevs.sics.se) - - Released 1.0.92. - - * mpn_mul.c (_mpn_mul): Handle leading zero limbs in non-Karatsuba - case. - - * longlong.h (m68000 umul_ppmm): Clobber one register less by - slightly rearranging the code. - -Sun Sep 1 18:53:25 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * dist-Makefile (stamp-stddefh): Fix typo. - -Sat Aug 31 20:41:31 1991 Torbjorn Granlund (tege@zevs.sics.se) - - Released 1.0.91. - - * mpz_mdiv.c, mpz_mmod.c, mpz_mdm.c, mpz_mdiv_ui.c, - mpz_mmod_ui.c, mpz_mdm_ui.c: New files and functions. - * gmp.h, gmp.texi: Define the new functions. - -Fri Aug 30 08:32:56 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_gcdext: Compute t argument from the other quantities at the - end, of the function, not in the loop. New feature: Allow t to be - NULL. - - * mpz_add.c, mpz_sub.c, mpz_mul.c, mpz_powm.c, mpz_gcd.c: Don't - include "mp.h". Use type name `MP_INT' always. - - * dist-Makefile, mpz_cmp.c: Merge mcmp.c from mpz_cmp.c. - -Wed Aug 28 00:45:11 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * dist-Makefile (documentation): Go via tmp.texi to avoid the - creation of gmp.dvi if any errors occur. Make tex read input - from /dev/null. - -Fri Aug 23 15:58:52 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * longlong.h (68020, i386): Don't define machine-dependent - __umulsidi3 (so the default definition is used). - * longlong.h (all machines): Cast all operands, sources and - destinations, to `unsigned long int'. - * longlong.h: Add gmicro support. - -Thu Aug 22 00:28:29 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * longlong.h: Rename BITS_PER_LONG to LONG_TYPE_SIZE. - * longlong.h (__ibm032__): Define count_leading_zeros and umul_ppmm. - * longlong.h: Define UMUL_TIME and UDIV_TIME for some CPUs. - * _mpz_get_str.c: Add code to do division by big_base using only - umul_qrnnd, if that is faster. Use UMUL_TIME and UDIV_TIME to - decide which variant to use. - -Wed Aug 21 15:45:23 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * longlong.h (__sparc__ umul_ppmm): Move two insn from end to the - nops. (Saves two insn.) - - * longlong.h (__sparc__ umul_ppmm): Rewrite in order to avoid - branch, and to permit input/output register overlap. - - * longlong.h (__29k__): Remove duplicated udiv_qrnnd definition. - * longlong.h (__29k__ umul_ppmm): Split asm instructions into two - asm statements (gives better code if either the upper or lower - part of the product is unused. - -Tue Aug 20 17:57:59 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * _mpz_get_str.c (outside of functions): Remove - num_to_ascii_lower_case and num_to_ascii_upper_case. Use string - constants in the function instead. - -Mon Aug 19 00:37:42 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * cre-conv-tab.c (main): Output table in hex. Output 4 fields, not - 3, for components 0 and 1. - - * gmp.h: Add declaration of mpq_neg. - - Released 1.0beta.13. - - * _mpz_set_str.c (mpz_set_str): Cast EOF and SPC to char before - comparing to enum literals SPC and EOF. This makes the code work - for compilers where `char' is unsigned. (Bug found by Brian - Beuning). - - Released 1.0beta.12. - - * mpz_mod_ui: Remove references to quot. Remove quot_ptr, quot_size - declarations and assignment code. - -Sun Aug 18 14:44:26 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_mod_ui: Handle dividend < 0. - - Released 1.0beta.11. - - * mpz_dm_ui, mpz_div_ui, mpz_mod_ui, sdiv: Make them share the same - general structure, variable names, etc. - - * sdiv: Un-normalize the remainder in n1 before it is negated. - - * longlong.h: Mention UDIV_NEEDS_NORMALIZATION in description of - udiv_qrnnd. - - * mpz_dm_ui.c (mpz_divmod_ui), mpz_div_ui.c (mpz_div_ui): Increment - the quotient size if the dividend size is incremented. (Bug found - by Brian Beuning.) - - * mpz_mod_ui: Shift back the remainder, if UDIV_NEEDS_NORMALIZATION. - (Bug found by Brian Beuning.) - - * mpz_mod_ui: Replace "digit" by "limb". - - * mpz_perfsqr.c (mpz_perfect_square_p): Disable second test case - for non-32-bit machines (PP is hardwired for such machines). - * mpz_perfsqr.c (outside of functions): Define PP value with an L. - - * mpn_mul.c (_mpn_mul): Add verification code that is activated if - DEBUG is defined. Replace "digit" by "limb". - * mpn_mul.c (_mpn_mul: Karatsuba's algorithm: 4.): Normalize temp - after the addition. - * mpn_mul.c (_mpn_mul: Karatsuba's algorithm: 1.): Compare u0_size - and v0_size, and according to the result, swap arguments in - recursive call. (Don't violate mpn_mul's own argument - constraints.) - -Fri Aug 16 13:47:12 1991 Torbjorn Granlund (tege@zevs.sics.se) - - Released 1.0beta.10. - - * longlong.h (IBMR2): Add udiv_qrnnd. - - * mpz_perfsqr: Remove unused variables. - - * mpz_and (case for different signs): Initialize loop variable i! - - * dist-Makefile: Update automatically generated dependencies. - * dist-Makefile (madd.c, msub.c, pow.c, mult.c, gcd.c): Add mp.h, - etc to dependency file lists. - - * longlong.h (add_ssaaaa, sub_ddmmss [C default versions]): Make __x - `unsigned long int'. - * longlong.h: Add `int' after `unsigned' and `long' everywhere. - -Wed Aug 14 18:06:48 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * longlong.h: Add ARM, i860 support. - - * mpn_lshift, mpn_rshift, mpn_rshiftci: Rename *_word with *_limb. - -Tue Aug 13 21:57:43 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * _mpz_get_str.c, _mpz_set_str.c, mpz_sizeinb.c (mpz_sizeinbase), - mpz_out_str.c, mout.c: Remove declaration of __mp_bases. - * gmp-impl.h: Put it here, and make it `const'. - * cre-conv-tab.c (main): Make struct __mp_bases `const'. - -Mon Aug 12 17:11:46 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * cre-conv-tab.c (main): Use %lu in printf for long ints. - - * dist-Makefile: Fix cre-* dependencies. - - * cre-conv-tab.c (main): Output field big_base_inverted. - - * gmp-impl.h (struct bases): New field big_base_inverted. - * gmp-impl.h (struct bases): Change type of chars_per_limb_exactly - to float (in order to keep the structure smaller). - - * mp.h, gmp.h: Change names of macros for avoiding multiple - includes. - -Fri Aug 9 18:01:36 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * _mpz_get_str: Only shift limb array if normalization_steps != 0 - (optimization). - - * longlong.h (sparc umul_ppmm): Use __asm__, not asm. - * longlong.h (IBMR2 umul_ppmm): Refer to __m0 and __m1, not to m0 - and m1 (overlap between output and input operands did not work). - * longlong.h: Add VAX, ROMP and HP-PA support. - * longlong.h: Sort the machine dependent code in alphabetical order - on the CPU name. - * longlong.h: Hack comments. - -Thu Aug 8 14:13:36 1991 Torbjorn Granlund (tege@zevs.sics.se) - - Released 1.0beta.9. - - * longlong.h: Define BITS_PER_LONG to 32 if it's not already - defined. - * Define __BITS4 to BITS_PER_LONG / 4. - * Don't assume 32 bit word size in "count_leading_zeros" C macro. - Use __BITS4 and BITS_PER_LONG instead. - - * longlong.h: Don't #undef internal macros (reverse change of Aug 3). - - * longlong.h (68k): Define add_ssaaaa sub_ddmmss, and umul_ppmm - even for plain mc68000. - - * mpq_div: Flip the sign of the numerator *and* denominator of the - result if the intermediate denominator is negative. - - * mpz_and.c, mpz_ior.c: Use MPN_COPY for all copying operations. - - * mpz_and.c: Compute the result size more conservatively. - * mpz_ior.c: Likewise. - - * mpz_realloc: Never allocate zero space even if NEW_SIZE == 0. - - * dist-Makefile: Remove madd.c, msub.c, pow.c, mult.c, gcd.c from - BSDMP_SRCS. - - * dist-Makefile: Create mult.c from mpz_mul.c. - * mult.c: Delete this file. - - * _mpz_set_str: Normalize the result (for bases 2, 4, 8... it was - not done properly if the input string had many leading zeros). - -Sun Aug 4 16:54:14 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * dist-Makefile (gcd.c, pow.c, madd.c, msub.c): Make these targets - work with VPATH and GNU MP. - - * mpz_gcd: Don't call mpz_set; inline its functionality. - - * mpq_mul, mpq_div: Fix several serious typos. - - * mpz_dmincl, mpz_div: Don't normalize the quotient if it's already - zero. - - * mpq_neg.c: New file. - - * dist-Makefile: Remove obsolete dependencies. - - * mpz_sub: Fix typo. - - Bugs found by Pierre-Joseph Gailly (pjg@sunbim.be): - * mpq_mul, mpq_div: Initialize tmp[12] variables even when the gcd - is just 1. - * mpz_gcd: Handle gcd(0,v) and gcd(u,0) in special cases. - -Sat Aug 3 23:45:28 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * longlong.h: Clean up comments. - * longlong.h: #undef internal macros. - -Fri Aug 2 18:29:11 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpq_set_si, mpq_set_ui: Canonicalize 0/x to 0/1. - * mpq_set_si, mpq_set_ui: Cosmetic formatting changes. - - * mpz_dmincl.c: Normalize the remainder before shifting it back. - - * mpz_dm_ui.c (mpz_divmod_ui): Handle rem == dividend. - - * mpn_div.c: Fix comment. - - * mpz_add.c, mpz_sub.c: Use __MP_INT (not MP_INT) for intermediate - type, in order to work for both GNU and Berkeley functions. - - * dist-Makefile: Create gcd.c from mpz_gcd.c, pow.c from mpz_powm, - madd.c from mpz_add.c, msub.c from mpz_sub.c. - respectively. - * pow.c, gcd.c, mpz_powmincl.c, madd.c, msub.c: Remove these. - * mpz_powm.c, mpz_gcd.c, mpz_add.c, mpz_sub.c: #ifdef for GNU and - Berkeley function name variants. - * dist-Makefile: Add created files to "clean" target. - -Tue Jul 16 15:19:46 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpq_get_den: No need for absolute value of the size, the - denominator is always positive. - - * mpz_get_ui: If the operand is zero, return zero. Don't read the - limb array! - - * mpz_dmincl.c: Don't ignore the return value from _mpn_rshift, it - is the size of the remainder. - -Mon Jul 15 11:08:05 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * Several files: Remove unused variables and functions. - - * gmp-impl.h: Declare _mpz_impl_sqrt. - - * mpz_dm_ui (mpz_divmod_ui), sdiv: Shift back the remainder if - UDIV_NEEDS_NORMALIZATION. (Fix from Brian Beuning.) - - * mpz_dm_ui.c, sdiv: Replace *digit with *limb. - - * mpz_ior: Add missing else statement in -OP1 | -OP2 case. - * mpz_ior: Add missing else statement in OP1 | -OP2 case. - * mpz_ior: Swap also OP1 and OP2 pointers in -OP1 & OP2 case. - * mpz_ior: Duplicate _mpz_realloc code. - - * mpz_and: Add missing else statement in -OP1 & -OP2 case. - * mpz_and: Rewrite OP1 & -OP2 case. - * mpz_and: Swap also OP1 and OP2 pointers in -OP1 & OP2 case. - - * mpz_gcdext: Loop in d1.size (not b->size). (Fix from Brian - Beuning.) - - * mpz_perfsqr: Fix argument order in _mpz_impl_sqrt call. (Fix from - Brian Beuning.) - -Fri Jul 12 17:10:33 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpq_set.c, mpq_set_ui.c, mpq_set_si.c, mpq_inv.c, - mpq_get_num.c, mpq_get_den.c, mpq_set_num.c, mpq_set_den.c: - New files. - - * mpz_dmincl.c: Remove second re-allocation of rem->d. It - was never executed. - - * dist-Makefile: Use `-r' instead of `-x' for test for ranlib (as - some unixes' test doesn't have the -r option). - - * *.*: Cast allocated pointers to the appropriate type (makes old C - compilers happier). - - * cre-conv-tab.c (main): Divide max_uli by 2 and multiply again - after conversion to double. (Kludge for broken C compilers.) - - * dist-Makefile (stamp-stddefh): New target. Test if "stddef.h" - exists in the system and creates a minimal one if it does not - exist. - * cre-stddefh.c: New file. - * dist-Makefile: Make libgmp.a and libmp.a depend on stamp-stddefh. - * dist-Makefile (clean): Add some more. - * gmp.h, mp.h: Unconditionally include "stddef.h". - -Thu Jul 11 10:08:21 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * min: Do ungetc of last read character. - * min.c: include stdio.h. - - * dist-Makefile: Go via tmp- files for cre* redirection. - * dist-Makefile: Add tmp* to "clean" target. - - * dist-Makefile: Use LOCAL_CC for cre*, to simplify cross - compilation. - - * gmp.h, mp.h: Don't define NULL here. - * gmp-impl.h: Define it here. - -Wed Jul 10 14:13:33 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_mod_2exp: Don't copy too much, overwriting most significant - limb. - - * mpz_and, mpz_ior: Don't read op[12]_ptr from op[12] when - reallocating res, if op[12]_ptr got their value from alloca. - - * mpz_and, mpz_ior: Clear up comments. - - * cre-mparam.c: Output parameters for `short int' and `int'. - - * mpz_and, mpz_ior: Negate negative op[12]_size in several places. - -Tue Jul 9 18:40:30 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * gmp.h, mp.h: Test for _SIZE_T defined before typedef'ing size_t. - (Fix for Sun lossage.) - - * gmp.h: Add declaration of mpq_clear. - - * dist-Makefile: Check if "ranlib" exists, before using it. - * dist-Makefile: Add mpz_sqrtrem.c and mpz_size.c. - * mpz_powm: Fix typo, "pow" instead of "mpz_powm". - -Fri Jul 5 19:08:09 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * move: Remove incorrect comment. - - * mpz_free, mpq_free: Rename to *_clear. - * dist-Makefile: Likewise. - * mpq_add, mpq_sub, mpq_mul, mpq_div: Likewise. - - * mpz_dmincl.c: Don't call "move", inline its functionality. - -Thu Jul 4 00:06:39 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * Makefile: Include dist-Makefile. Fix dist target to include - dist-Makefile (with the name "Makefile" in the archive). - - * dist-Makefile: New file made from Makefile. Add new mpz_... - functions. - - * mpz_powincl.c New file for mpz_powm (Berkeley MP pow) - functionality. Avoids code duplication. - * pow.c, mpz_powm.c: Include mpz_powincl.c - - * mpz_dmincl.c: New file containing general division code. Avoids - code duplication. - * mpz_dm.c (mpz_divmod), mpz_mod.c (mpz_mod), mdiv.c (mdiv): Include - mpz_dmincl.c. - - * _mpz_get_str: Don't call memmove, unless HAS_MEMMOVE is defined. - Instead, write the overlapping memory copying inline. - - * mpz_dm_ui.c: New name for mpz_divmod_ui.c (SysV file name limit). - - * longlong.h: Don't use #elif. - * mpz_do_sqrt.c: Likewise. - - * longlong.h: Use __asm__ instead of asm. - * longlong.h (sparc udiv_qrnnd): Make it to one string over several - lines. - - * longlong.h: Preend __ll_ to B, highpart, and lowpart. - - * longlong.h: Move array t in count_leading_zeros to the new file - mp_clz_tab.c. Rename the array __clz_tab. - * All files: #ifdef for traditional C compatibility. - -Wed Jul 3 11:42:14 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_and: Initialize res_ptr always (used to be initialized only - when reallocating). - - * longlong.h (umul_ppmm [C variant]): Make __ul...__vh - `unsigned int', and cast the multiplications. This way - compilers more easily can choose cheaper multiplication - instructions. - - * mpz_mod_2exp: Handle input argument < modulo argument. - * mpz_many: Make sure mp_size is the type for sizes, not int. - - * mpz_init, mpz_init_set*, mpq_init, mpq_add, mpq_sub, mpq_mul, - mpq_div: Change mpz_init* interface. Structure pointer as first - arg to initialization function, no longer *return* struct. - -Sun Jun 30 19:21:44 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * Rename mpz_impl_sqrt.c to mpz_do_sqrt.c to satisfy SysV 14 - character file name length limit. - - * Most files: Rename MINT to MP_INT. Rename MRAT to MP_RAT. - * mpz_sizeinb.c: New file with function mpz_sizeinbase. - * mp_bases.c: New file, with array __mp_bases. - * _mpz_get_str, _mpz_set_str: Remove struct bases, use extern - __mp_bases instead. - * mout, mpz_out_str: Use array __mp_bases instead of function - _mpz_get_cvtlen. - * mpz_get_cvtlen.c: Remove. - * Makefile: Update. - -Sat Jun 29 21:57:28 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * longlong.h (__sparc8__ umul_ppmm): Insert 3 nop:s for wr delay. - * longlong.h (___IBMR2__): Define umul_ppmm, add_ssaaaa, sub_ddmmss. - * longlong.h (__sparc__): Don't call .umul; expand asm instead. - Don't define __umulsidi3 (i.e. use default definition). - -Mon Jun 24 17:37:23 1991 Torbjorn Granlund (tege@amon.sics.se) - - * _mpz_get_str.c (num_to_ascii_lower_case, num_to_ascii_upper_case): - Swap 't' and 's'. - -Sat Jun 22 13:54:01 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_gcdext.c: New file. - - * mpn_mul: Handle carry and unexpected operand sizes in last - additions/subtractions. (Bug trigged when v1_size == 1.) - - * mp*_alloc*: Rename functions to mp*_init* (files to mp*_iset*.c). - * mpq_*: Call mpz_init*. - - * mpz_pow_ui, rpow: Use _mpn_mul instead of mult. Restructure. - -Wed May 29 20:32:33 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_get_cvtlen: multiply by size. - -Sun May 26 15:01:15 1991 Torbjorn Granlund (tege@bella.nada.kth.se) - - Alpha-release 0.95. - - Fixes from Doug Lea (dl@g.oswego.edu): - * mpz_mul_ui: Loop to MULT_SIZE (not PROD_SIZE). Adjust PROD_SIZE - correctly. - * mpz_div: Prepend _ to mpz_realloc. - * mpz_set_xs, mpz_set_ds: Fix typos in function name. - -Sat May 25 22:51:16 1991 Torbjorn Granlund (tege@bella.nada.kth.se) - - * mpz_divmod_ui: New function. - - * sdiv: Make the sign of the remainder correct. - -Thu May 23 15:28:24 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * Alpha-release 0.94. - - * mpz_mul_ui: Include longlong.h. - - * mpz_perfsqr.c (mpz_perfect_square_p): Call _mpz_impl_sqrt instead - of msqrt. - - * mpz_impl_sqrt: Don't call "move", inline its functionality. - - * mdiv: Use MPN_COPY instead of memcpy. - * rpow, mpz_mul, mpz_mod_2exp: Likewise. - * pow.c: Likewise, and fix bug in the size arg. - - * xtom: Don't use mpz_alloc, inline needed code instead. Call - _mpz_set_str instead of mpz_set_str. - - * Makefile: Make two libraries, libmp.a and libgmp.a. - -Thu May 22 20:25:29 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * Add manual to distribution. - * Fold in many missing routines described in the manual. - * Update Makefile. - -Wed May 22 13:48:46 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_set_str: Make it handle 0x prefix OK. - -Sat May 18 18:31:02 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * memory.c (_mp_default_reallocate): Swap OLD_SIZE and NEW_SIZE - arguments. - * mpz_realloc (_mpz_realloc): Swap in call to _mp_reallocate_func. - * min: Likewise. - -Thu May 16 20:43:05 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * memory.c: Make the default allocations functions global. - * mp_set_fns (mp_set_memory_functions): Make a NULL pointer mean the - default memory function. - -Wed May 8 20:02:42 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_div: Handle DEN the same as QUOT correctly by copying DEN->D - even if no normalization is needed. - * mpz_div: Rework reallocation scheme, to avoid excess copying. - - * mpz_sub_ui.c, mpz_add_ui.c: New files. - - * mpz_cmp.c, mpz_cmp_ui.c: New files. - - * mpz_mul_2exp: Handle zero input MINT correctly. - - * mpn_rshiftci: Don't handle shift counts > BITS_PER_MP_DIGIT. - - * mpz_out_raw.c, mpz_inp_raw.c: New files for raw I/O. - -Tue May 7 15:44:58 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpn_rshift: Don't handle shift counts > BITS_PER_MP_DIGIT. - * mpz_div_2exp: Don't call _mpn_rshift with cnt > BITS_PER_MP_DIGIT. - * gcd, mpz_gcd: Likewise. - - * gcd, mpz_gcd: Handle common 2 factors correctly. - -Mon May 6 20:22:59 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * gmp-impl.h (MPN_COPY): Inline a loop instead of calling memcpy. - - * gmp-impl.h, mpz_get_str, rpow: Swap DST and SRC in TMPCOPY* macros. - -Sun May 5 15:16:23 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpz_div: Remove test for QUOT == 0. - -Sun Apr 28 20:21:04 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * pow: Don't make MOD normalization in place, as it's a bad idea to - write on an input parameter. - * pow: Reduce BASE if it's > MOD. - * pow, mult, mpz_mul: Simplify realloc code. - -Sat Apr 27 21:03:11 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * Install multiplication using Karatsuba's algorithm as default. - -Fri Apr 26 01:03:57 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * msqrt: Store in ROOT even for U==0, to make msqrt(0) defined. - - * mpz_div_2exp.c, mpz_mul_2exp.c: New files for shifting right and - left, respectively. - * gmp.h: Add definitions for mpz_div_2exp and mpz_mul_2exp. - - * mlshift.c, mrshift.c: Remove. - -Wed Apr 24 21:39:22 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * mpn_mul: Check only for m2_size == 0 in function header. - -Mon Apr 22 01:31:57 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * karatsuba.c: New file for Karatsuba's multiplication algorithm. - - * mpz_random, mpz_init, mpz_mod_2exp: New files and functions. - - * mpn_cmp: Fix header comment. - -Sun Apr 21 00:10:44 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * pow: Switch off initial base reduction. - -Sat Apr 20 22:06:05 1991 Torbjorn Granlund (tege@echnaton.sics.se) - - * mpz_get_str: Don't generate initial zeros for initial word. - Used to write outside of allocated storage. - -Mon Apr 15 15:48:08 1991 Torbjorn Granlund (tege@zevs.sics.se) - - * _mpz_realloc: Make it accept size in number of mp_digits. - * Most functions: Use new _mpz_realloc definition. - - * mpz_set_str: Remove calls _mp_free_func. - - * Most functions: Rename mpn_* to _mpn_*. Rename mpz_realloc to - _mpz_realloc. - * mpn_lshift: Redefine _mpn_lshift to only handle small shifts. - * mdiv, mpz_div, ...: Changes for new definition of _mpn_lshift. - * msqrt, mp*_*shift*: Define cnt as unsigned (for speed). - -Sat Apr 6 14:05:16 1991 Torbjorn Granlund (tege@musta.nada.kth.se) - - * mpn_mul: Multiply by the first digit in M2 in a special - loop instead of zeroing the product area. - - * mpz_abs.c: New file. - - * sdiv: Implement as mpz_div_si for speed. - - * mpn_add: Make it work for second source operand == 0. - - * msub: Negate the correct operand, i.e. V before swapping, not - the smaller of U and V! - * madd, msub: Update abs_* when swapping operands, and not after - (optimization). - -Fri Apr 5 00:19:36 1991 Torbjorn Granlund (tege@black.nada.kth.se) - - * mpn_sub: Make it work for subtrahend == 0. - - * madd, msub: Rewrite to minimize mpn_cmp calls. Ensure - mpn_cmp is called with positive sizes (used to be called - incorrectly with negative sizes sometimes). - - * msqrt: Make it divide by zero if fed with a negative number. - * Remove if statement at end of precision calculation that was - never true. - - * itom, mp.h: The argument is of type short, not int. - - * mpz_realloc, gmp.h: Make mpz_realloc return the new digit pointer. - - * mpz_get_str.c, mpz_set_str.c, mpz_new_str.c: Don't include mp.h. - - * Add COPYING to distribution. - - * mpz_div_ui.c, mpz_div_si.c, mpz_new_ui.c, mpz_new_si.c: New files. - -Fri Mar 15 00:26:29 1991 Torbjorn Granlund (tege@musta.nada.kth.se) - - * Add Copyleft headers to all files. - - * mpn_mul.c, mpn_div.c: Add header comments. - * mult.c, mdiv.c: Update header comments. - - * mpq_add.c, mpq_sub.c, mpq_div.c, mpq_new.c, mpq_new_ui.c, - mpq_free.c: New files for rational arithmetics. - - * mpn_lshift.c: Avoid writing the most significant word if it is 0. - - * mdiv.c: Call mpn_lshift for the normalization. - * mdiv.c: Remove #ifdefs. - - * Makefile: Add ChangeLog to DISTFILES. - - * mpn_div.c: Make the add_back code work (by removing abort()). - * mpn_div.c: Make it return if the quotient is size as compared - with the difference NSIZE - DSIZE. If the stored quotient is - larger than that, return 1, otherwise 0. - * gmp.h: Fix mpn_div declaration. - * mdiv.c: Adopt call to mpn_div. - * mpz_div.c: New file (developed from mdiv.c). - - * README: Update routine names. - -Thu Mar 14 18:45:28 1991 Torbjorn Granlund (tege@musta.nada.kth.se) - - * mpq_mul.c: New file for rational multiplication. - - * gmp.h: Add definitions for rational arithmetics. - - * mpn_div: Kludge the case where the high numerator digit > the - high denominator digit. (This code is going to be optimized later.) - - * New files: gmp.h for GNU specific functions, gmp-common.h for - definitions common for mp.h and gmp.h. - - * Ensure mp.h just defines what BSD mp.h defines. - - * pow.c: Fix typo for bp allocation. - - * Rename natural number functions to mpn_*, integer functions to - mpz_*. - -Tue Mar 5 18:47:04 1991 Torbjorn Granlund (tege@musta.nada.kth.se) - - * mdiv.c (_mp_divide, case 2): Change test for estimate of Q from - "n0 >= r" to "n0 > r". - - * msqrt: Tune the increasing precision scheme, to do fewer steps. - -Tue Mar 3 18:50:10 1991 Torbjorn Granlund (tege@musta.nada.kth.se) - - * msqrt: Use the low level routines. Use low precision in the - beginning, and increase the precision as the result converges. - (This optimization gave a 6-fold speedup.) diff --git a/src/plugins/e-acsl/contrib/libgmp/INSTALL b/src/plugins/e-acsl/contrib/libgmp/INSTALL deleted file mode 100644 index 75199a1aba703d51c173ca7dd282ad99a7baf100..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/INSTALL +++ /dev/null @@ -1,80 +0,0 @@ -Copyright 1996, 1997, 1999-2002, 2006 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - - INSTALLING GNU MP - ================= - - -These instructions are only for the impatient. Others should read the install -instructions in gmp.info. Use - - info -f doc/gmp.info - -from the gmp source directory. - -Here are some brief instructions on how to install GMP. First you need to -compile. Since you're impatient, try this - - ./configure - make - make check <= VERY IMPORTANT!! - -If that fails, or you care about the performance of GMP, you need to read the -full instructions in the chapter "Installing GMP" in the manual. - -You should not skip the "make check" part; the risk that the GMP sources are -miscompiled are unfortunately quite high. And if they indeed are, "make check" -is very likely to trigger the compiler-introduced bug. - -Optionally, you can install the library with the following command. This will -be to /usr/local by default, and you'll probably need to be "root" to be able -to write there. - - make install - -To create the printable documentation from the texinfo source, type "make -gmp.dvi" or "make gmp.ps". This requires various "tex" commands. - -If you are new to GMP, it is a good idea you at least read the chapter "GMP -Basics" in the manual. - -Some known build problems are noted in the "Installing GMP" chapter of -the manual. Please report other problems to gmp-bugs@gmplib.org. - -The GMP web site is located here: https://gmplib.org/. - - ----------------- -Local variables: -mode: text -fill-column: 78 -End: diff --git a/src/plugins/e-acsl/contrib/libgmp/INSTALL.autoconf b/src/plugins/e-acsl/contrib/libgmp/INSTALL.autoconf deleted file mode 100644 index 0600b32390799321a0f4d1dc4a8b3d4c0bfce6fd..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/INSTALL.autoconf +++ /dev/null @@ -1,228 +0,0 @@ -Copyright (C) 1994-1996, 1999-2002 Free Software Foundation, Inc. - - This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. - -Basic Installation -================== - - These are generic installation instructions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. (Caching is -disabled by default to prevent problems with accidental use of stale -cache files.) - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You only need -`configure.ac' if you want to change it or regenerate `configure' using -a newer version of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. Run `./configure --help' -for details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - If you have to use a `make' that does not support the `VPATH' -variable, you have to compile the package for one architecture at a -time in the source code directory. After you have installed the -package for one architecture, use `make distclean' before reconfiguring -for another architecture. - -Installation Names -================== - - By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PATH'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PATH', the package will use -PATH as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=PATH' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Specifying the System Type -========================== - - There may be some features `configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, `configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the `--target=TYPE' option to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -will cause the specified gcc to be used as the C compiler (unless it is -overridden in the site shell script). - -`configure' Invocation -====================== - - `configure' recognizes the following options to control how it -operates. - -`--help' -`-h' - Print a summary of the options to `configure', and exit. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. - diff --git a/src/plugins/e-acsl/contrib/libgmp/Makefile.am b/src/plugins/e-acsl/contrib/libgmp/Makefile.am deleted file mode 100644 index 32added670cadacc327c994ebbcbc13b3d5de514..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/Makefile.am +++ /dev/null @@ -1,469 +0,0 @@ -## Process this file with automake to generate Makefile.in - - -# Copyright 1991, 1993, 1994, 1996, 1997, 1999-2004, 2006-2009, 2011-2015 Free -# Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - - -# The following options are the same as AM_INIT_AUTOMAKE in configure.in, -# except no $(top_builddir) on ansi2knr. That directory is wanted for the -# Makefiles in subdirectories, but here we must omit it so automake gives -# the actual ansi2knr build rule, not "cd $(top_builddir) && make ansi2knr". -# -# AUTOMAKE_OPTIONS = 1.8 gnu no-dependencies - - -# Libtool -version-info for libgmp.la and libmp.la. See "Versioning" in the -# libtool manual. -# -# CURRENT:REVISION:AGE -# -# 1. No interfaces changed, only implementations (good): Increment REVISION. -# -# 2. Interfaces added, none removed (good): Increment CURRENT, increment -# AGE, set REVISION to 0. -# -# 3. Interfaces removed (BAD, breaks upward compatibility): Increment -# CURRENT, set AGE and REVISION to 0. -# -# Do this separately for libgmp, libgmpxx and libmp, and only for releases. -# -# GMP -version-info -# release libgmp libgmpxx libmp -# 2.0.x - - - -# 3.0 3:0:0 - 3:0:0 -# 3.0.1 3:1:0 - 3:0:0 -# 3.1 4:0:1 - 4:0:1 -# 3.1.1 4:1:1 - 4:1:1 -# 4.0 5:0:2 3:0:0 4:2:1 -# 4.0.1 5:1:2 3:1:0 4:3:1 -# 4.1 6:0:3 3:2:0 4:4:1 -# 4.1.1 6:1:3 3:3:0 4:5:1 -# 4.1.2 6:2:3 3:4:0 4:6:1 -# 4.1.3 6:3:3 3:5:0 4:7:1 -# 4.1.4 6:3:3 3:5:0 4:7:1 WRONG, same as 4.1.3! -# 4.2 6:0:3 3:2:0 4:4:1 REALLY WRONG, same as 4.1! -# 4.2.1 7:1:4 4:1:1 4:10:1 WRONG for libgmpxx -# 4.2.2 7:2:4 4:2:0 4:11:1 -# 4.2.3 7:3:4 4:3:0 4:12:1 -# 4.2.4 7:4:4 4:4:0 4:13:1 -# 4.3.0 8:0:5 5:0:1 4:14:1 -# 4.3.1 8:1:5 5:1:1 4:15:1 WRONG Really used same as 4.3.0 -# 4.3.2 8:2:5 5:2:1 4:16:1 -# 5.0.0 9:0:6 6:0:2 4:20:1 Should have been 10:0:0 -# 5.0.1 10:1:0 6:1:2 4:21:1 -# 5.0.2 10:2:0 6:2:2 4:22:1 -# 5.0.3 10:3:0 6:3:2 4:23:1 -# 5.0.4 10:4:0 6:4:2 4:24:1 -# 5.0.5 10:5:0 6:5:2 4:25:1 -# 5.1.0 11:0:1 7:0:3 - -# 5.1.1 11:1:1 7:1:3 - -# 5.1.2 11:2:1 7:2:3 - -# 6.0.0 12:0:2 8:0:4 - -# 6.1.0 13:0:3 9:0:5 - -# -# Starting at 3:0:0 is a slight abuse of the versioning system, but it -# ensures we're past soname libgmp.so.2, which was used on Debian GNU/Linux -# packages of gmp 2. Pretend gmp 2 was 2:0:0, so the interface changes for -# gmp 3 mean 3:0:0 is right. -# -# We interpret "implementation changed" in item "1." above as meaning any -# release, ie. the REVISION is incremented every time (if nothing else). -# Even if we thought the code generated will be identical on all systems, -# it's still good to get the shared library filename (like -# libgmpxx.so.3.0.4) incrementing, to make it clear which GMP it's from. - -LIBGMP_LT_CURRENT = 13 -LIBGMP_LT_REVISION = 0 -LIBGMP_LT_AGE = 3 - -LIBGMPXX_LT_CURRENT = 9 -LIBGMPXX_LT_REVISION = 0 -LIBGMPXX_LT_AGE = 5 - - -SUBDIRS = mpn mpz mpq mpf printf scanf rand tune - -EXTRA_DIST = configfsf.guess configfsf.sub .gdbinit INSTALL.autoconf \ - COPYING.LESSERv3 COPYINGv2 COPYINGv3 - - -if WANT_CXX -GMPXX_HEADERS_OPTION = gmpxx.h -endif -EXTRA_DIST += gmpxx.h - -# gmp.h and mp.h are architecture dependent, mainly since they encode the -# limb size used in libgmp. For that reason they belong under $exec_prefix -# not $prefix, strictly speaking. -# -# $exec_prefix/include is not in the default include path for gcc built to -# the same $prefix and $exec_prefix, which might mean gmp.h is not found, -# but anyone knowledgeable enough to be playing with exec_prefix will be able -# to address that. -# -includeexecdir = $(exec_prefix)/include -include_HEADERS = $(GMPXX_HEADERS_OPTION) -nodist_includeexec_HEADERS = gmp.h -lib_LTLIBRARIES = libgmp.la $(GMPXX_LTLIBRARIES_OPTION) - -BUILT_SOURCES = gmp.h - -DISTCLEANFILES = $(BUILT_SOURCES) config.m4 @gmp_srclinks@ - -# Tell gmp.h it's building gmp, not an application, used by windows DLL stuff. -AM_CPPFLAGS=-D__GMP_WITHIN_GMP - - -MPF_OBJECTS = mpf/init$U.lo mpf/init2$U.lo mpf/inits$U.lo mpf/set$U.lo \ - mpf/set_ui$U.lo mpf/set_si$U.lo mpf/set_str$U.lo mpf/set_d$U.lo \ - mpf/set_z$U.lo mpf/iset$U.lo mpf/iset_ui$U.lo mpf/iset_si$U.lo \ - mpf/iset_str$U.lo mpf/iset_d$U.lo mpf/clear$U.lo mpf/clears$U.lo \ - mpf/get_str$U.lo mpf/dump$U.lo mpf/size$U.lo mpf/eq$U.lo mpf/reldiff$U.lo \ - mpf/sqrt$U.lo mpf/random2$U.lo mpf/inp_str$U.lo mpf/out_str$U.lo \ - mpf/add$U.lo mpf/add_ui$U.lo mpf/sub$U.lo mpf/sub_ui$U.lo mpf/ui_sub$U.lo \ - mpf/mul$U.lo mpf/mul_ui$U.lo mpf/div$U.lo mpf/div_ui$U.lo mpf/cmp_z$U.lo \ - mpf/cmp$U.lo mpf/cmp_d$U.lo mpf/cmp_ui$U.lo mpf/cmp_si$U.lo \ - mpf/mul_2exp$U.lo mpf/div_2exp$U.lo mpf/abs$U.lo mpf/neg$U.lo \ - mpf/set_q$U.lo mpf/get_d$U.lo mpf/get_d_2exp$U.lo mpf/set_dfl_prec$U.lo \ - mpf/set_prc$U.lo mpf/set_prc_raw$U.lo mpf/get_dfl_prec$U.lo \ - mpf/get_prc$U.lo mpf/ui_div$U.lo mpf/sqrt_ui$U.lo \ - mpf/ceilfloor$U.lo mpf/trunc$U.lo mpf/pow_ui$U.lo \ - mpf/urandomb$U.lo mpf/swap$U.lo \ - mpf/fits_sint$U.lo mpf/fits_slong$U.lo mpf/fits_sshort$U.lo \ - mpf/fits_uint$U.lo mpf/fits_ulong$U.lo mpf/fits_ushort$U.lo \ - mpf/get_si$U.lo mpf/get_ui$U.lo \ - mpf/int_p$U.lo - -MPZ_OBJECTS = mpz/abs$U.lo mpz/add$U.lo mpz/add_ui$U.lo \ - mpz/aorsmul$U.lo mpz/aorsmul_i$U.lo mpz/and$U.lo mpz/array_init$U.lo \ - mpz/bin_ui$U.lo mpz/bin_uiui$U.lo \ - mpz/cdiv_q$U.lo mpz/cdiv_q_ui$U.lo \ - mpz/cdiv_qr$U.lo mpz/cdiv_qr_ui$U.lo \ - mpz/cdiv_r$U.lo mpz/cdiv_r_ui$U.lo mpz/cdiv_ui$U.lo \ - mpz/cfdiv_q_2exp$U.lo mpz/cfdiv_r_2exp$U.lo \ - mpz/clear$U.lo mpz/clears$U.lo mpz/clrbit$U.lo \ - mpz/cmp$U.lo mpz/cmp_d$U.lo mpz/cmp_si$U.lo mpz/cmp_ui$U.lo \ - mpz/cmpabs$U.lo mpz/cmpabs_d$U.lo mpz/cmpabs_ui$U.lo \ - mpz/com$U.lo mpz/combit$U.lo \ - mpz/cong$U.lo mpz/cong_2exp$U.lo mpz/cong_ui$U.lo \ - mpz/divexact$U.lo mpz/divegcd$U.lo mpz/dive_ui$U.lo \ - mpz/divis$U.lo mpz/divis_ui$U.lo mpz/divis_2exp$U.lo mpz/dump$U.lo \ - mpz/export$U.lo mpz/mfac_uiui$U.lo \ - mpz/2fac_ui$U.lo mpz/fac_ui$U.lo mpz/oddfac_1$U.lo mpz/prodlimbs$U.lo \ - mpz/fdiv_q_ui$U.lo mpz/fdiv_qr$U.lo mpz/fdiv_qr_ui$U.lo \ - mpz/fdiv_r$U.lo mpz/fdiv_r_ui$U.lo mpz/fdiv_q$U.lo \ - mpz/fdiv_ui$U.lo mpz/fib_ui$U.lo mpz/fib2_ui$U.lo mpz/fits_sint$U.lo \ - mpz/fits_slong$U.lo mpz/fits_sshort$U.lo mpz/fits_uint$U.lo \ - mpz/fits_ulong$U.lo mpz/fits_ushort$U.lo mpz/gcd$U.lo \ - mpz/gcd_ui$U.lo mpz/gcdext$U.lo mpz/get_d$U.lo mpz/get_d_2exp$U.lo \ - mpz/get_si$U.lo mpz/get_str$U.lo mpz/get_ui$U.lo mpz/getlimbn$U.lo \ - mpz/hamdist$U.lo \ - mpz/import$U.lo mpz/init$U.lo mpz/init2$U.lo mpz/inits$U.lo \ - mpz/inp_raw$U.lo mpz/inp_str$U.lo mpz/invert$U.lo \ - mpz/ior$U.lo mpz/iset$U.lo mpz/iset_d$U.lo mpz/iset_si$U.lo \ - mpz/iset_str$U.lo mpz/iset_ui$U.lo mpz/jacobi$U.lo mpz/kronsz$U.lo \ - mpz/kronuz$U.lo mpz/kronzs$U.lo mpz/kronzu$U.lo \ - mpz/lcm$U.lo mpz/lcm_ui$U.lo mpz/limbs_finish$U.lo \ - mpz/limbs_modify$U.lo mpz/limbs_read$U.lo mpz/limbs_write$U.lo \ - mpz/lucnum_ui$U.lo mpz/lucnum2_ui$U.lo \ - mpz/millerrabin$U.lo mpz/mod$U.lo mpz/mul$U.lo mpz/mul_2exp$U.lo \ - mpz/mul_si$U.lo mpz/mul_ui$U.lo \ - mpz/n_pow_ui$U.lo mpz/neg$U.lo mpz/nextprime$U.lo \ - mpz/out_raw$U.lo mpz/out_str$U.lo mpz/perfpow$U.lo mpz/perfsqr$U.lo \ - mpz/popcount$U.lo mpz/pow_ui$U.lo mpz/powm$U.lo mpz/powm_sec$U.lo \ - mpz/powm_ui$U.lo mpz/primorial_ui$U.lo \ - mpz/pprime_p$U.lo mpz/random$U.lo mpz/random2$U.lo \ - mpz/realloc$U.lo mpz/realloc2$U.lo mpz/remove$U.lo mpz/roinit_n$U.lo \ - mpz/root$U.lo mpz/rootrem$U.lo mpz/rrandomb$U.lo mpz/scan0$U.lo \ - mpz/scan1$U.lo mpz/set$U.lo mpz/set_d$U.lo mpz/set_f$U.lo \ - mpz/set_q$U.lo mpz/set_si$U.lo mpz/set_str$U.lo mpz/set_ui$U.lo \ - mpz/setbit$U.lo \ - mpz/size$U.lo mpz/sizeinbase$U.lo mpz/sqrt$U.lo \ - mpz/sqrtrem$U.lo mpz/sub$U.lo mpz/sub_ui$U.lo mpz/swap$U.lo \ - mpz/tdiv_ui$U.lo mpz/tdiv_q$U.lo mpz/tdiv_q_2exp$U.lo \ - mpz/tdiv_q_ui$U.lo mpz/tdiv_qr$U.lo mpz/tdiv_qr_ui$U.lo \ - mpz/tdiv_r$U.lo mpz/tdiv_r_2exp$U.lo mpz/tdiv_r_ui$U.lo \ - mpz/tstbit$U.lo mpz/ui_pow_ui$U.lo mpz/ui_sub$U.lo mpz/urandomb$U.lo \ - mpz/urandomm$U.lo mpz/xor$U.lo - -MPQ_OBJECTS = mpq/abs$U.lo mpq/aors$U.lo \ - mpq/canonicalize$U.lo mpq/clear$U.lo mpq/clears$U.lo \ - mpq/cmp$U.lo mpq/cmp_si$U.lo mpq/cmp_ui$U.lo mpq/div$U.lo \ - mpq/get_d$U.lo mpq/get_den$U.lo mpq/get_num$U.lo mpq/get_str$U.lo \ - mpq/init$U.lo mpq/inits$U.lo mpq/inp_str$U.lo mpq/inv$U.lo \ - mpq/md_2exp$U.lo mpq/mul$U.lo mpq/neg$U.lo mpq/out_str$U.lo \ - mpq/set$U.lo mpq/set_den$U.lo mpq/set_num$U.lo \ - mpq/set_si$U.lo mpq/set_str$U.lo mpq/set_ui$U.lo \ - mpq/equal$U.lo mpq/set_z$U.lo mpq/set_d$U.lo \ - mpq/set_f$U.lo mpq/swap$U.lo - -MPN_OBJECTS = mpn/fib_table$U.lo mpn/mp_bases$U.lo - -PRINTF_OBJECTS = \ - printf/asprintf$U.lo printf/asprntffuns$U.lo \ - printf/doprnt$U.lo printf/doprntf$U.lo printf/doprnti$U.lo \ - printf/fprintf$U.lo \ - printf/obprintf$U.lo printf/obvprintf$U.lo printf/obprntffuns$U.lo \ - printf/printf$U.lo printf/printffuns$U.lo \ - printf/snprintf$U.lo printf/snprntffuns$U.lo \ - printf/sprintf$U.lo printf/sprintffuns$U.lo \ - printf/vasprintf$U.lo printf/vfprintf$U.lo printf/vprintf$U.lo \ - printf/vsnprintf$U.lo printf/vsprintf$U.lo \ - printf/repl-vsnprintf$U.lo - -SCANF_OBJECTS = \ - scanf/doscan$U.lo scanf/fscanf$U.lo scanf/fscanffuns$U.lo \ - scanf/scanf$U.lo scanf/sscanf$U.lo scanf/sscanffuns$U.lo \ - scanf/vfscanf$U.lo scanf/vscanf$U.lo scanf/vsscanf$U.lo - -RANDOM_OBJECTS = \ - rand/rand$U.lo rand/randclr$U.lo rand/randdef$U.lo rand/randiset$U.lo \ - rand/randlc2s$U.lo rand/randlc2x$U.lo rand/randmt$U.lo \ - rand/randmts$U.lo rand/rands$U.lo rand/randsd$U.lo rand/randsdui$U.lo \ - rand/randbui$U.lo rand/randmui$U.lo - -# no $U for C++ files -CXX_OBJECTS = \ - cxx/isfuns.lo cxx/ismpf.lo cxx/ismpq.lo cxx/ismpz.lo cxx/ismpznw.lo \ - cxx/limits.lo cxx/osdoprnti.lo cxx/osfuns.lo \ - cxx/osmpf.lo cxx/osmpq.lo cxx/osmpz.lo - -# In libtool 1.5 it doesn't work to build libgmp.la from the convenience -# libraries like mpz/libmpz.la. Or rather it works, but it ends up putting -# PIC objects into libgmp.a if shared and static are both built. (The PIC -# objects go into mpz/.libs/libmpz.a, and thence into .libs/libgmp.a.) -# -# For now the big lists of objects above are used. Something like mpz/*.lo -# would probably work, but might risk missing something out or getting -# something extra. The source files for each .lo are listed in the -# Makefile.am's in the subdirectories. -# -# Currently, for libgmp, unlike libmp below, we're not using -# -export-symbols, since the tune and speed programs, and perhaps some of -# the test programs, want to access undocumented symbols. - -libgmp_la_SOURCES = gmp-impl.h longlong.h \ - assert.c compat.c errno.c extract-dbl.c invalid.c memory.c \ - mp_bpl.c mp_clz_tab.c mp_dv_tab.c mp_minv_tab.c mp_get_fns.c mp_set_fns.c \ - version.c nextprime.c primesieve.c -EXTRA_libgmp_la_SOURCES = tal-debug.c tal-notreent.c tal-reent.c -libgmp_la_DEPENDENCIES = @TAL_OBJECT@ \ - $(MPF_OBJECTS) $(MPZ_OBJECTS) $(MPQ_OBJECTS) \ - $(MPN_OBJECTS) @mpn_objs_in_libgmp@ \ - $(PRINTF_OBJECTS) $(SCANF_OBJECTS) $(RANDOM_OBJECTS) -libgmp_la_LIBADD = $(libgmp_la_DEPENDENCIES) -libgmp_la_LDFLAGS = $(GMP_LDFLAGS) $(LIBGMP_LDFLAGS) \ - -version-info $(LIBGMP_LT_CURRENT):$(LIBGMP_LT_REVISION):$(LIBGMP_LT_AGE) -libgmp_la_CPPFLAGS = \ - -Dmalloc=__e_acsl_native_malloc \ - -Drealloc=__e_acsl_native_realloc \ - -Dcalloc=__e_acsl_native_calloc \ - -Dfree=__e_acsl_native_free \ - -Dposix_memalign=__e_acsl_native_posix_memalign -libgmp_la_CFLAGS = -Wno-attributes - -# We need at least one .cc file in $(libgmpxx_la_SOURCES) so automake will -# use $(CXXLINK) rather than the plain C $(LINK). cxx/dummy.cc is that -# file. - -if WANT_CXX -GMPXX_LTLIBRARIES_OPTION = libgmpxx.la -endif -libgmpxx_la_SOURCES = cxx/dummy.cc -libgmpxx_la_DEPENDENCIES = $(CXX_OBJECTS) libgmp.la -libgmpxx_la_LIBADD = $(libgmpxx_la_DEPENDENCIES) -libgmpxx_la_LDFLAGS = $(GMP_LDFLAGS) $(LIBGMPXX_LDFLAGS) \ - -version-info $(LIBGMPXX_LT_CURRENT):$(LIBGMPXX_LT_REVISION):$(LIBGMPXX_LT_AGE) - - - -install-data-hook: - @echo '' - @echo '+-------------------------------------------------------------+' - @echo '| CAUTION: |' - @echo '| |' - @echo '| If you have not already run "make check", then we strongly |' - @echo '| recommend you do so. |' - @echo '| |' - @echo '| GMP has been carefully tested by its authors, but compilers |' - @echo '| are all too often released with serious bugs. GMP tends to |' - @echo '| explore interesting corners in compilers and has hit bugs |' - @echo '| on quite a few occasions. |' - @echo '| |' - @echo '+-------------------------------------------------------------+' - @echo '' - - -# The "test -f" support for srcdir!=builddir is similar to the automake .c.o -# etc rules, but with each foo.c explicitly, since $< is not portable -# outside an inference rule. -# -# A quoted 'foo.c' is used with the "test -f"'s to avoid Sun make rewriting -# it as part of its VPATH support. See the autoconf manual "Limitations of -# Make". -# -# Generated .h files which are used by gmp-impl.h are BUILT_SOURCES since -# they must exist before anything can be compiled. -# -# Other generated .h files are also BUILT_SOURCES so as to get all the -# build-system stuff over and done with at the start. Also, dependencies on -# the .h files are not properly expressed for the various objects that use -# them. - -EXTRA_DIST += bootstrap.c - -fac_table.h: gen-fac$(EXEEXT_FOR_BUILD) - ./gen-fac $(GMP_LIMB_BITS) $(GMP_NAIL_BITS) >fac_table.h || (rm -f fac_table.h; exit 1) -BUILT_SOURCES += fac_table.h - -gen-fac$(EXEEXT_FOR_BUILD): gen-fac$(U_FOR_BUILD).c bootstrap.c - $(CC_FOR_BUILD) `test -f 'gen-fac$(U_FOR_BUILD).c' || echo '$(srcdir)/'`gen-fac$(U_FOR_BUILD).c -o gen-fac$(EXEEXT_FOR_BUILD) -DISTCLEANFILES += gen-fac$(EXEEXT_FOR_BUILD) -EXTRA_DIST += gen-fac.c - - -fib_table.h: gen-fib$(EXEEXT_FOR_BUILD) - ./gen-fib header $(GMP_LIMB_BITS) $(GMP_NAIL_BITS) >fib_table.h || (rm -f fib_table.h; exit 1) -BUILT_SOURCES += fib_table.h - -mpn/fib_table.c: gen-fib$(EXEEXT_FOR_BUILD) - ./gen-fib table $(GMP_LIMB_BITS) $(GMP_NAIL_BITS) >mpn/fib_table.c || (rm -f mpn/fib_table.c; exit 1) -BUILT_SOURCES += mpn/fib_table.c - -gen-fib$(EXEEXT_FOR_BUILD): gen-fib$(U_FOR_BUILD).c bootstrap.c - $(CC_FOR_BUILD) `test -f 'gen-fib$(U_FOR_BUILD).c' || echo '$(srcdir)/'`gen-fib$(U_FOR_BUILD).c -o gen-fib$(EXEEXT_FOR_BUILD) -DISTCLEANFILES += gen-fib$(EXEEXT_FOR_BUILD) -EXTRA_DIST += gen-fib.c - - -mp_bases.h: gen-bases$(EXEEXT_FOR_BUILD) - ./gen-bases header $(GMP_LIMB_BITS) $(GMP_NAIL_BITS) >mp_bases.h || (rm -f mp_bases.h; exit 1) -BUILT_SOURCES += mp_bases.h - -mpn/mp_bases.c: gen-bases$(EXEEXT_FOR_BUILD) - ./gen-bases table $(GMP_LIMB_BITS) $(GMP_NAIL_BITS) >mpn/mp_bases.c || (rm -f mpn/mp_bases.c; exit 1) -BUILT_SOURCES += mpn/mp_bases.c - -gen-bases$(EXEEXT_FOR_BUILD): gen-bases$(U_FOR_BUILD).c bootstrap.c - $(CC_FOR_BUILD) `test -f 'gen-bases$(U_FOR_BUILD).c' || echo '$(srcdir)/'`gen-bases$(U_FOR_BUILD).c -o gen-bases$(EXEEXT_FOR_BUILD) $(LIBM_FOR_BUILD) -DISTCLEANFILES += gen-bases$(EXEEXT_FOR_BUILD) -EXTRA_DIST += gen-bases.c - - -trialdivtab.h: gen-trialdivtab$(EXEEXT_FOR_BUILD) - ./gen-trialdivtab $(GMP_LIMB_BITS) 8000 >trialdivtab.h || (rm -f trialdivtab.h; exit 1) -BUILT_SOURCES += trialdivtab.h - -gen-trialdivtab$(EXEEXT_FOR_BUILD): gen-trialdivtab$(U_FOR_BUILD).c bootstrap.c - $(CC_FOR_BUILD) `test -f 'gen-trialdivtab$(U_FOR_BUILD).c' || echo '$(srcdir)/'`gen-trialdivtab$(U_FOR_BUILD).c -o gen-trialdivtab$(EXEEXT_FOR_BUILD) $(LIBM_FOR_BUILD) -DISTCLEANFILES += gen-trialdivtab$(EXEEXT_FOR_BUILD) -EXTRA_DIST += gen-trialdivtab.c - - -mpn/jacobitab.h: gen-jacobitab$(EXEEXT_FOR_BUILD) - ./gen-jacobitab >mpn/jacobitab.h || (rm -f mpn/jacobitab.h; exit 1) -BUILT_SOURCES += mpn/jacobitab.h - -gen-jacobitab$(EXEEXT_FOR_BUILD): gen-jacobitab$(U_FOR_BUILD).c - $(CC_FOR_BUILD) `test -f 'gen-jacobitab$(U_FOR_BUILD).c' || echo '$(srcdir)/'`gen-jacobitab$(U_FOR_BUILD).c -o gen-jacobitab$(EXEEXT_FOR_BUILD) -DISTCLEANFILES += gen-jacobitab$(EXEEXT_FOR_BUILD) -EXTRA_DIST += gen-jacobitab.c - - -mpn/perfsqr.h: gen-psqr$(EXEEXT_FOR_BUILD) - ./gen-psqr $(GMP_LIMB_BITS) $(GMP_NAIL_BITS) >mpn/perfsqr.h || (rm -f mpn/perfsqr.h; exit 1) -BUILT_SOURCES += mpn/perfsqr.h - -gen-psqr$(EXEEXT_FOR_BUILD): gen-psqr$(U_FOR_BUILD).c bootstrap.c - $(CC_FOR_BUILD) `test -f 'gen-psqr$(U_FOR_BUILD).c' || echo '$(srcdir)/'`gen-psqr$(U_FOR_BUILD).c -o gen-psqr$(EXEEXT_FOR_BUILD) $(LIBM_FOR_BUILD) -DISTCLEANFILES += gen-psqr$(EXEEXT_FOR_BUILD) -EXTRA_DIST += gen-psqr.c - -# Distribute mini-gmp. Test sources copied by dist-hook. -EXTRA_DIST += mini-gmp/README mini-gmp/mini-gmp.c mini-gmp/mini-gmp.h \ - mini-gmp/tests/Makefile mini-gmp/tests/run-tests - -# Avoid: CVS - cvs directories -# *~ - emacs backups -# .#* - cvs merge originals -# -# *~ and .#* only occur when a whole directory without it's own Makefile.am -# is distributed, like "doc" or the mpn cpu subdirectories. -# -dist-hook: - -find $(distdir) \( -name CVS -type d \) -o -name "*~" -o -name ".#*" \ - | xargs rm -rf - cp "$(srcdir)"/mini-gmp/tests/*.[ch] "$(distdir)/mini-gmp/tests" -# grep -F $(VERSION) $(srcdir)/Makefile.am \ -# | grep -q "^# *$(VERSION) *$(LIBGMP_LT_CURRENT):$(LIBGMP_LT_REVISION):$(LIBGMP_LT_AGE) *$(LIBGMPXX_LT_CURRENT):$(LIBGMPXX_LT_REVISION):$(LIBGMPXX_LT_AGE)" -# test -z "`sed -n 's/^# *[0-9]*\.[0-9]*\.[0-9]* *\([0-9]*:[0-9]*:[0-9]*\) *\([0-9]*:[0-9]*:[0-9]*\) *\([0-9]*:[0-9]*:[0-9]*\).*/A\1\nB\2\nC\3/p' $(srcdir)/Makefile.am | grep -v 'A6:3:3\|B3:5:0\|C4:7:1' | sort | uniq -d`" - -.PHONY: check-mini-gmp clean-mini-gmp - -check-mini-gmp: - abs_srcdir="`cd $(srcdir) && pwd`" ; \ - $(MKDIR_P) mini-gmp/tests \ - && cd mini-gmp/tests \ - && LD_LIBRARY_PATH="../../.libs:$$LD_LIBRARY_PATH" \ - DYLD_LIBRARY_PATH="../../.libs:$$DYLD_LIBRARY_PATH" \ - $(MAKE) -f "$$abs_srcdir/mini-gmp/tests/Makefile" \ - VPATH="$$abs_srcdir/mini-gmp/tests" \ - srcdir="$$abs_srcdir/mini-gmp/tests" \ - MINI_GMP_DIR="$$abs_srcdir/mini-gmp" \ - LDFLAGS="-L../../.libs" \ - LIBS="-lgmp -lm" \ - CC="$(CC_FOR_BUILD)" EXTRA_CFLAGS="-g -I../.." check - -clean-mini-gmp: - if [ -d mini-gmp/tests ] ; then \ - abs_srcdir="`cd $(srcdir) && pwd`" ; \ - cd mini-gmp/tests \ - && $(MAKE) -f "$$abs_srcdir/mini-gmp/tests/Makefile" clean ; \ - fi - -clean-gmp: - rm -f demos/pexpr-config.h demos/calc/calc-config.h - rm -f cxx/Makefile \ - demos/Makefile \ - demos/calc/Makefile \ - demos/expr/Makefile \ - doc/Makefile \ - tests/Makefile \ - tests/cxx/Makefile \ - tests/devel/Makefile \ - tests/misc/Makefile \ - tests/mpf/Makefile \ - tests/mpn/Makefile \ - tests/mpq/Makefile \ - tests/mpz/Makefile \ - tests/rand/Makefile - -clean-local: clean-mini-gmp -distclean-local: clean-mini-gmp clean-gmp diff --git a/src/plugins/e-acsl/contrib/libgmp/Makefile.in b/src/plugins/e-acsl/contrib/libgmp/Makefile.in deleted file mode 100644 index 4ab1dcb5c5e7de376fb5892706e8eb48a4cd67fe..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/Makefile.in +++ /dev/null @@ -1,1572 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# Copyright 1991, 1993, 1994, 1996, 1997, 1999-2004, 2006-2009, 2011-2015 Free -# Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - -# The following options are the same as AM_INIT_AUTOMAKE in configure.in, -# except no $(top_builddir) on ansi2knr. That directory is wanted for the -# Makefiles in subdirectories, but here we must omit it so automake gives -# the actual ansi2knr build rule, not "cd $(top_builddir) && make ansi2knr". -# -# AUTOMAKE_OPTIONS = 1.8 gnu no-dependencies - -# Libtool -version-info for libgmp.la and libmp.la. See "Versioning" in the -# libtool manual. -# -# CURRENT:REVISION:AGE -# -# 1. No interfaces changed, only implementations (good): Increment REVISION. -# -# 2. Interfaces added, none removed (good): Increment CURRENT, increment -# AGE, set REVISION to 0. -# -# 3. Interfaces removed (BAD, breaks upward compatibility): Increment -# CURRENT, set AGE and REVISION to 0. -# -# Do this separately for libgmp, libgmpxx and libmp, and only for releases. -# -# GMP -version-info -# release libgmp libgmpxx libmp -# 2.0.x - - - -# 3.0 3:0:0 - 3:0:0 -# 3.0.1 3:1:0 - 3:0:0 -# 3.1 4:0:1 - 4:0:1 -# 3.1.1 4:1:1 - 4:1:1 -# 4.0 5:0:2 3:0:0 4:2:1 -# 4.0.1 5:1:2 3:1:0 4:3:1 -# 4.1 6:0:3 3:2:0 4:4:1 -# 4.1.1 6:1:3 3:3:0 4:5:1 -# 4.1.2 6:2:3 3:4:0 4:6:1 -# 4.1.3 6:3:3 3:5:0 4:7:1 -# 4.1.4 6:3:3 3:5:0 4:7:1 WRONG, same as 4.1.3! -# 4.2 6:0:3 3:2:0 4:4:1 REALLY WRONG, same as 4.1! -# 4.2.1 7:1:4 4:1:1 4:10:1 WRONG for libgmpxx -# 4.2.2 7:2:4 4:2:0 4:11:1 -# 4.2.3 7:3:4 4:3:0 4:12:1 -# 4.2.4 7:4:4 4:4:0 4:13:1 -# 4.3.0 8:0:5 5:0:1 4:14:1 -# 4.3.1 8:1:5 5:1:1 4:15:1 WRONG Really used same as 4.3.0 -# 4.3.2 8:2:5 5:2:1 4:16:1 -# 5.0.0 9:0:6 6:0:2 4:20:1 Should have been 10:0:0 -# 5.0.1 10:1:0 6:1:2 4:21:1 -# 5.0.2 10:2:0 6:2:2 4:22:1 -# 5.0.3 10:3:0 6:3:2 4:23:1 -# 5.0.4 10:4:0 6:4:2 4:24:1 -# 5.0.5 10:5:0 6:5:2 4:25:1 -# 5.1.0 11:0:1 7:0:3 - -# 5.1.1 11:1:1 7:1:3 - -# 5.1.2 11:2:1 7:2:3 - -# 6.0.0 12:0:2 8:0:4 - -# 6.1.0 13:0:3 9:0:5 - -# -# Starting at 3:0:0 is a slight abuse of the versioning system, but it -# ensures we're past soname libgmp.so.2, which was used on Debian GNU/Linux -# packages of gmp 2. Pretend gmp 2 was 2:0:0, so the interface changes for -# gmp 3 mean 3:0:0 is right. -# -# We interpret "implementation changed" in item "1." above as meaning any -# release, ie. the REVISION is incremented every time (if nothing else). -# Even if we thought the code generated will be identical on all systems, -# it's still good to get the shared library filename (like -# libgmpxx.so.3.0.4) incrementing, to make it clear which GMP it's from. - - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = . -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ - $(am__configure_deps) $(am__include_HEADERS_DIST) \ - $(am__DIST_COMMON) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = gmp.h gmp-mparam.h -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" \ - "$(DESTDIR)$(includeexecdir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -am__DEPENDENCIES_1 = $(MPF_OBJECTS) $(MPZ_OBJECTS) $(MPQ_OBJECTS) \ - $(MPN_OBJECTS) $(PRINTF_OBJECTS) $(SCANF_OBJECTS) \ - $(RANDOM_OBJECTS) -am_libgmp_la_OBJECTS = libgmp_la-assert.lo libgmp_la-compat.lo \ - libgmp_la-errno.lo libgmp_la-extract-dbl.lo \ - libgmp_la-invalid.lo libgmp_la-memory.lo libgmp_la-mp_bpl.lo \ - libgmp_la-mp_clz_tab.lo libgmp_la-mp_dv_tab.lo \ - libgmp_la-mp_minv_tab.lo libgmp_la-mp_get_fns.lo \ - libgmp_la-mp_set_fns.lo libgmp_la-version.lo \ - libgmp_la-nextprime.lo libgmp_la-primesieve.lo -libgmp_la_OBJECTS = $(am_libgmp_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -libgmp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libgmp_la_CFLAGS) \ - $(CFLAGS) $(libgmp_la_LDFLAGS) $(LDFLAGS) -o $@ -am_libgmpxx_la_OBJECTS = dummy.lo -libgmpxx_la_OBJECTS = $(am_libgmpxx_la_OBJECTS) -libgmpxx_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(libgmpxx_la_LDFLAGS) $(LDFLAGS) -o $@ -@WANT_CXX_TRUE@am_libgmpxx_la_rpath = -rpath $(libdir) -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -depcomp = -am__depfiles_maybe = -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -AM_V_CXX = $(am__v_CXX_@AM_V@) -am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) -am__v_CXX_0 = @echo " CXX " $@; -am__v_CXX_1 = -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) -am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) -am__v_CXXLD_0 = @echo " CXXLD " $@; -am__v_CXXLD_1 = -SOURCES = $(libgmp_la_SOURCES) $(EXTRA_libgmp_la_SOURCES) \ - $(libgmpxx_la_SOURCES) -DIST_SOURCES = $(libgmp_la_SOURCES) $(EXTRA_libgmp_la_SOURCES) \ - $(libgmpxx_la_SOURCES) -RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ - ctags-recursive dvi-recursive html-recursive info-recursive \ - install-data-recursive install-dvi-recursive \ - install-exec-recursive install-html-recursive \ - install-info-recursive install-pdf-recursive \ - install-ps-recursive install-recursive installcheck-recursive \ - installdirs-recursive pdf-recursive ps-recursive \ - tags-recursive uninstall-recursive -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__include_HEADERS_DIST = gmpxx.h -HEADERS = $(include_HEADERS) $(nodist_includeexec_HEADERS) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -am__recursive_targets = \ - $(RECURSIVE_TARGETS) \ - $(RECURSIVE_CLEAN_TARGETS) \ - $(am__extra_recursive_targets) -AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - cscope distdir dist dist-all distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ - $(LISP)config.in -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -CSCOPE = cscope -DIST_SUBDIRS = $(SUBDIRS) -am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.in \ - $(srcdir)/gmp-h.in AUTHORS COPYING ChangeLog INSTALL NEWS \ - README compile config.guess config.sub install-sh ltmain.sh \ - missing ylwrap -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - if test -d "$(distdir)"; then \ - find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -rf "$(distdir)" \ - || { sleep 5 && rm -rf "$(distdir)"; }; \ - else :; fi -am__post_remove_distdir = $(am__remove_distdir) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -DIST_TARGETS = dist-gzip -distuninstallcheck_listfiles = find . -type f -print -am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ - | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' -distcleancheck_listfiles = find . -type f -print -ABI = @ABI@ -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AS = @AS@ -ASMFLAGS = @ASMFLAGS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CALLING_CONVENTIONS_OBJS = @CALLING_CONVENTIONS_OBJS@ -CC = @CC@ -CCAS = @CCAS@ -CC_FOR_BUILD = @CC_FOR_BUILD@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPP_FOR_BUILD = @CPP_FOR_BUILD@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFN_LONG_LONG_LIMB = @DEFN_LONG_LONG_LIMB@ -DEFS = @DEFS@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ -FGREP = @FGREP@ -GMP_LDFLAGS = @GMP_LDFLAGS@ -GMP_LIMB_BITS = @GMP_LIMB_BITS@ -GMP_NAIL_BITS = @GMP_NAIL_BITS@ -GREP = @GREP@ -HAVE_CLOCK_01 = @HAVE_CLOCK_01@ -HAVE_CPUTIME_01 = @HAVE_CPUTIME_01@ -HAVE_GETRUSAGE_01 = @HAVE_GETRUSAGE_01@ -HAVE_GETTIMEOFDAY_01 = @HAVE_GETTIMEOFDAY_01@ -HAVE_HOST_CPU_FAMILY_power = @HAVE_HOST_CPU_FAMILY_power@ -HAVE_HOST_CPU_FAMILY_powerpc = @HAVE_HOST_CPU_FAMILY_powerpc@ -HAVE_SIGACTION_01 = @HAVE_SIGACTION_01@ -HAVE_SIGALTSTACK_01 = @HAVE_SIGALTSTACK_01@ -HAVE_SIGSTACK_01 = @HAVE_SIGSTACK_01@ -HAVE_STACK_T_01 = @HAVE_STACK_T_01@ -HAVE_SYS_RESOURCE_H_01 = @HAVE_SYS_RESOURCE_H_01@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBCURSES = @LIBCURSES@ -LIBGMPXX_LDFLAGS = @LIBGMPXX_LDFLAGS@ -LIBGMP_DLL = @LIBGMP_DLL@ -LIBGMP_LDFLAGS = @LIBGMP_LDFLAGS@ -LIBM = @LIBM@ -LIBM_FOR_BUILD = @LIBM_FOR_BUILD@ -LIBOBJS = @LIBOBJS@ -LIBREADLINE = @LIBREADLINE@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -M4 = @M4@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SPEED_CYCLECOUNTER_OBJ = @SPEED_CYCLECOUNTER_OBJ@ -STRIP = @STRIP@ -TAL_OBJECT = @TAL_OBJECT@ -TUNE_LIBS = @TUNE_LIBS@ -TUNE_SQR_OBJ = @TUNE_SQR_OBJ@ -U_FOR_BUILD = @U_FOR_BUILD@ -VERSION = @VERSION@ -WITH_READLINE_01 = @WITH_READLINE_01@ -YACC = @YACC@ -YFLAGS = @YFLAGS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__leading_dot = @am__leading_dot@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -gmp_srclinks = @gmp_srclinks@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -mpn_objects = @mpn_objects@ -mpn_objs_in_libgmp = @mpn_objs_in_libgmp@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -LIBGMP_LT_CURRENT = 13 -LIBGMP_LT_REVISION = 0 -LIBGMP_LT_AGE = 3 -LIBGMPXX_LT_CURRENT = 9 -LIBGMPXX_LT_REVISION = 0 -LIBGMPXX_LT_AGE = 5 -SUBDIRS = mpn mpz mpq mpf printf scanf rand tune - -# The "test -f" support for srcdir!=builddir is similar to the automake .c.o -# etc rules, but with each foo.c explicitly, since $< is not portable -# outside an inference rule. -# -# A quoted 'foo.c' is used with the "test -f"'s to avoid Sun make rewriting -# it as part of its VPATH support. See the autoconf manual "Limitations of -# Make". -# -# Generated .h files which are used by gmp-impl.h are BUILT_SOURCES since -# they must exist before anything can be compiled. -# -# Other generated .h files are also BUILT_SOURCES so as to get all the -# build-system stuff over and done with at the start. Also, dependencies on -# the .h files are not properly expressed for the various objects that use -# them. - -# Distribute mini-gmp. Test sources copied by dist-hook. -EXTRA_DIST = configfsf.guess configfsf.sub .gdbinit INSTALL.autoconf \ - COPYING.LESSERv3 COPYINGv2 COPYINGv3 gmpxx.h bootstrap.c \ - gen-fac.c gen-fib.c gen-bases.c gen-trialdivtab.c \ - gen-jacobitab.c gen-psqr.c mini-gmp/README mini-gmp/mini-gmp.c \ - mini-gmp/mini-gmp.h mini-gmp/tests/Makefile \ - mini-gmp/tests/run-tests -@WANT_CXX_TRUE@GMPXX_HEADERS_OPTION = gmpxx.h - -# gmp.h and mp.h are architecture dependent, mainly since they encode the -# limb size used in libgmp. For that reason they belong under $exec_prefix -# not $prefix, strictly speaking. -# -# $exec_prefix/include is not in the default include path for gcc built to -# the same $prefix and $exec_prefix, which might mean gmp.h is not found, -# but anyone knowledgeable enough to be playing with exec_prefix will be able -# to address that. -# -includeexecdir = $(exec_prefix)/include -include_HEADERS = $(GMPXX_HEADERS_OPTION) -nodist_includeexec_HEADERS = gmp.h -lib_LTLIBRARIES = libgmp.la $(GMPXX_LTLIBRARIES_OPTION) -BUILT_SOURCES = gmp.h fac_table.h fib_table.h mpn/fib_table.c \ - mp_bases.h mpn/mp_bases.c trialdivtab.h mpn/jacobitab.h \ - mpn/perfsqr.h -DISTCLEANFILES = $(BUILT_SOURCES) config.m4 @gmp_srclinks@ \ - gen-fac$(EXEEXT_FOR_BUILD) gen-fib$(EXEEXT_FOR_BUILD) \ - gen-bases$(EXEEXT_FOR_BUILD) \ - gen-trialdivtab$(EXEEXT_FOR_BUILD) \ - gen-jacobitab$(EXEEXT_FOR_BUILD) gen-psqr$(EXEEXT_FOR_BUILD) - -# Tell gmp.h it's building gmp, not an application, used by windows DLL stuff. -AM_CPPFLAGS = -D__GMP_WITHIN_GMP -MPF_OBJECTS = mpf/init$U.lo mpf/init2$U.lo mpf/inits$U.lo mpf/set$U.lo \ - mpf/set_ui$U.lo mpf/set_si$U.lo mpf/set_str$U.lo mpf/set_d$U.lo \ - mpf/set_z$U.lo mpf/iset$U.lo mpf/iset_ui$U.lo mpf/iset_si$U.lo \ - mpf/iset_str$U.lo mpf/iset_d$U.lo mpf/clear$U.lo mpf/clears$U.lo \ - mpf/get_str$U.lo mpf/dump$U.lo mpf/size$U.lo mpf/eq$U.lo mpf/reldiff$U.lo \ - mpf/sqrt$U.lo mpf/random2$U.lo mpf/inp_str$U.lo mpf/out_str$U.lo \ - mpf/add$U.lo mpf/add_ui$U.lo mpf/sub$U.lo mpf/sub_ui$U.lo mpf/ui_sub$U.lo \ - mpf/mul$U.lo mpf/mul_ui$U.lo mpf/div$U.lo mpf/div_ui$U.lo mpf/cmp_z$U.lo \ - mpf/cmp$U.lo mpf/cmp_d$U.lo mpf/cmp_ui$U.lo mpf/cmp_si$U.lo \ - mpf/mul_2exp$U.lo mpf/div_2exp$U.lo mpf/abs$U.lo mpf/neg$U.lo \ - mpf/set_q$U.lo mpf/get_d$U.lo mpf/get_d_2exp$U.lo mpf/set_dfl_prec$U.lo \ - mpf/set_prc$U.lo mpf/set_prc_raw$U.lo mpf/get_dfl_prec$U.lo \ - mpf/get_prc$U.lo mpf/ui_div$U.lo mpf/sqrt_ui$U.lo \ - mpf/ceilfloor$U.lo mpf/trunc$U.lo mpf/pow_ui$U.lo \ - mpf/urandomb$U.lo mpf/swap$U.lo \ - mpf/fits_sint$U.lo mpf/fits_slong$U.lo mpf/fits_sshort$U.lo \ - mpf/fits_uint$U.lo mpf/fits_ulong$U.lo mpf/fits_ushort$U.lo \ - mpf/get_si$U.lo mpf/get_ui$U.lo \ - mpf/int_p$U.lo - -MPZ_OBJECTS = mpz/abs$U.lo mpz/add$U.lo mpz/add_ui$U.lo \ - mpz/aorsmul$U.lo mpz/aorsmul_i$U.lo mpz/and$U.lo mpz/array_init$U.lo \ - mpz/bin_ui$U.lo mpz/bin_uiui$U.lo \ - mpz/cdiv_q$U.lo mpz/cdiv_q_ui$U.lo \ - mpz/cdiv_qr$U.lo mpz/cdiv_qr_ui$U.lo \ - mpz/cdiv_r$U.lo mpz/cdiv_r_ui$U.lo mpz/cdiv_ui$U.lo \ - mpz/cfdiv_q_2exp$U.lo mpz/cfdiv_r_2exp$U.lo \ - mpz/clear$U.lo mpz/clears$U.lo mpz/clrbit$U.lo \ - mpz/cmp$U.lo mpz/cmp_d$U.lo mpz/cmp_si$U.lo mpz/cmp_ui$U.lo \ - mpz/cmpabs$U.lo mpz/cmpabs_d$U.lo mpz/cmpabs_ui$U.lo \ - mpz/com$U.lo mpz/combit$U.lo \ - mpz/cong$U.lo mpz/cong_2exp$U.lo mpz/cong_ui$U.lo \ - mpz/divexact$U.lo mpz/divegcd$U.lo mpz/dive_ui$U.lo \ - mpz/divis$U.lo mpz/divis_ui$U.lo mpz/divis_2exp$U.lo mpz/dump$U.lo \ - mpz/export$U.lo mpz/mfac_uiui$U.lo \ - mpz/2fac_ui$U.lo mpz/fac_ui$U.lo mpz/oddfac_1$U.lo mpz/prodlimbs$U.lo \ - mpz/fdiv_q_ui$U.lo mpz/fdiv_qr$U.lo mpz/fdiv_qr_ui$U.lo \ - mpz/fdiv_r$U.lo mpz/fdiv_r_ui$U.lo mpz/fdiv_q$U.lo \ - mpz/fdiv_ui$U.lo mpz/fib_ui$U.lo mpz/fib2_ui$U.lo mpz/fits_sint$U.lo \ - mpz/fits_slong$U.lo mpz/fits_sshort$U.lo mpz/fits_uint$U.lo \ - mpz/fits_ulong$U.lo mpz/fits_ushort$U.lo mpz/gcd$U.lo \ - mpz/gcd_ui$U.lo mpz/gcdext$U.lo mpz/get_d$U.lo mpz/get_d_2exp$U.lo \ - mpz/get_si$U.lo mpz/get_str$U.lo mpz/get_ui$U.lo mpz/getlimbn$U.lo \ - mpz/hamdist$U.lo \ - mpz/import$U.lo mpz/init$U.lo mpz/init2$U.lo mpz/inits$U.lo \ - mpz/inp_raw$U.lo mpz/inp_str$U.lo mpz/invert$U.lo \ - mpz/ior$U.lo mpz/iset$U.lo mpz/iset_d$U.lo mpz/iset_si$U.lo \ - mpz/iset_str$U.lo mpz/iset_ui$U.lo mpz/jacobi$U.lo mpz/kronsz$U.lo \ - mpz/kronuz$U.lo mpz/kronzs$U.lo mpz/kronzu$U.lo \ - mpz/lcm$U.lo mpz/lcm_ui$U.lo mpz/limbs_finish$U.lo \ - mpz/limbs_modify$U.lo mpz/limbs_read$U.lo mpz/limbs_write$U.lo \ - mpz/lucnum_ui$U.lo mpz/lucnum2_ui$U.lo \ - mpz/millerrabin$U.lo mpz/mod$U.lo mpz/mul$U.lo mpz/mul_2exp$U.lo \ - mpz/mul_si$U.lo mpz/mul_ui$U.lo \ - mpz/n_pow_ui$U.lo mpz/neg$U.lo mpz/nextprime$U.lo \ - mpz/out_raw$U.lo mpz/out_str$U.lo mpz/perfpow$U.lo mpz/perfsqr$U.lo \ - mpz/popcount$U.lo mpz/pow_ui$U.lo mpz/powm$U.lo mpz/powm_sec$U.lo \ - mpz/powm_ui$U.lo mpz/primorial_ui$U.lo \ - mpz/pprime_p$U.lo mpz/random$U.lo mpz/random2$U.lo \ - mpz/realloc$U.lo mpz/realloc2$U.lo mpz/remove$U.lo mpz/roinit_n$U.lo \ - mpz/root$U.lo mpz/rootrem$U.lo mpz/rrandomb$U.lo mpz/scan0$U.lo \ - mpz/scan1$U.lo mpz/set$U.lo mpz/set_d$U.lo mpz/set_f$U.lo \ - mpz/set_q$U.lo mpz/set_si$U.lo mpz/set_str$U.lo mpz/set_ui$U.lo \ - mpz/setbit$U.lo \ - mpz/size$U.lo mpz/sizeinbase$U.lo mpz/sqrt$U.lo \ - mpz/sqrtrem$U.lo mpz/sub$U.lo mpz/sub_ui$U.lo mpz/swap$U.lo \ - mpz/tdiv_ui$U.lo mpz/tdiv_q$U.lo mpz/tdiv_q_2exp$U.lo \ - mpz/tdiv_q_ui$U.lo mpz/tdiv_qr$U.lo mpz/tdiv_qr_ui$U.lo \ - mpz/tdiv_r$U.lo mpz/tdiv_r_2exp$U.lo mpz/tdiv_r_ui$U.lo \ - mpz/tstbit$U.lo mpz/ui_pow_ui$U.lo mpz/ui_sub$U.lo mpz/urandomb$U.lo \ - mpz/urandomm$U.lo mpz/xor$U.lo - -MPQ_OBJECTS = mpq/abs$U.lo mpq/aors$U.lo \ - mpq/canonicalize$U.lo mpq/clear$U.lo mpq/clears$U.lo \ - mpq/cmp$U.lo mpq/cmp_si$U.lo mpq/cmp_ui$U.lo mpq/div$U.lo \ - mpq/get_d$U.lo mpq/get_den$U.lo mpq/get_num$U.lo mpq/get_str$U.lo \ - mpq/init$U.lo mpq/inits$U.lo mpq/inp_str$U.lo mpq/inv$U.lo \ - mpq/md_2exp$U.lo mpq/mul$U.lo mpq/neg$U.lo mpq/out_str$U.lo \ - mpq/set$U.lo mpq/set_den$U.lo mpq/set_num$U.lo \ - mpq/set_si$U.lo mpq/set_str$U.lo mpq/set_ui$U.lo \ - mpq/equal$U.lo mpq/set_z$U.lo mpq/set_d$U.lo \ - mpq/set_f$U.lo mpq/swap$U.lo - -MPN_OBJECTS = mpn/fib_table$U.lo mpn/mp_bases$U.lo -PRINTF_OBJECTS = \ - printf/asprintf$U.lo printf/asprntffuns$U.lo \ - printf/doprnt$U.lo printf/doprntf$U.lo printf/doprnti$U.lo \ - printf/fprintf$U.lo \ - printf/obprintf$U.lo printf/obvprintf$U.lo printf/obprntffuns$U.lo \ - printf/printf$U.lo printf/printffuns$U.lo \ - printf/snprintf$U.lo printf/snprntffuns$U.lo \ - printf/sprintf$U.lo printf/sprintffuns$U.lo \ - printf/vasprintf$U.lo printf/vfprintf$U.lo printf/vprintf$U.lo \ - printf/vsnprintf$U.lo printf/vsprintf$U.lo \ - printf/repl-vsnprintf$U.lo - -SCANF_OBJECTS = \ - scanf/doscan$U.lo scanf/fscanf$U.lo scanf/fscanffuns$U.lo \ - scanf/scanf$U.lo scanf/sscanf$U.lo scanf/sscanffuns$U.lo \ - scanf/vfscanf$U.lo scanf/vscanf$U.lo scanf/vsscanf$U.lo - -RANDOM_OBJECTS = \ - rand/rand$U.lo rand/randclr$U.lo rand/randdef$U.lo rand/randiset$U.lo \ - rand/randlc2s$U.lo rand/randlc2x$U.lo rand/randmt$U.lo \ - rand/randmts$U.lo rand/rands$U.lo rand/randsd$U.lo rand/randsdui$U.lo \ - rand/randbui$U.lo rand/randmui$U.lo - - -# no $U for C++ files -CXX_OBJECTS = \ - cxx/isfuns.lo cxx/ismpf.lo cxx/ismpq.lo cxx/ismpz.lo cxx/ismpznw.lo \ - cxx/limits.lo cxx/osdoprnti.lo cxx/osfuns.lo \ - cxx/osmpf.lo cxx/osmpq.lo cxx/osmpz.lo - - -# In libtool 1.5 it doesn't work to build libgmp.la from the convenience -# libraries like mpz/libmpz.la. Or rather it works, but it ends up putting -# PIC objects into libgmp.a if shared and static are both built. (The PIC -# objects go into mpz/.libs/libmpz.a, and thence into .libs/libgmp.a.) -# -# For now the big lists of objects above are used. Something like mpz/*.lo -# would probably work, but might risk missing something out or getting -# something extra. The source files for each .lo are listed in the -# Makefile.am's in the subdirectories. -# -# Currently, for libgmp, unlike libmp below, we're not using -# -export-symbols, since the tune and speed programs, and perhaps some of -# the test programs, want to access undocumented symbols. -libgmp_la_SOURCES = gmp-impl.h longlong.h \ - assert.c compat.c errno.c extract-dbl.c invalid.c memory.c \ - mp_bpl.c mp_clz_tab.c mp_dv_tab.c mp_minv_tab.c mp_get_fns.c mp_set_fns.c \ - version.c nextprime.c primesieve.c - -EXTRA_libgmp_la_SOURCES = tal-debug.c tal-notreent.c tal-reent.c -libgmp_la_DEPENDENCIES = @TAL_OBJECT@ \ - $(MPF_OBJECTS) $(MPZ_OBJECTS) $(MPQ_OBJECTS) \ - $(MPN_OBJECTS) @mpn_objs_in_libgmp@ \ - $(PRINTF_OBJECTS) $(SCANF_OBJECTS) $(RANDOM_OBJECTS) - -libgmp_la_LIBADD = $(libgmp_la_DEPENDENCIES) -libgmp_la_LDFLAGS = $(GMP_LDFLAGS) $(LIBGMP_LDFLAGS) \ - -version-info $(LIBGMP_LT_CURRENT):$(LIBGMP_LT_REVISION):$(LIBGMP_LT_AGE) - -libgmp_la_CPPFLAGS = \ - -Dmalloc=__e_acsl_native_malloc \ - -Drealloc=__e_acsl_native_realloc \ - -Dcalloc=__e_acsl_native_calloc \ - -Dfree=__e_acsl_native_free \ - -Dposix_memalign=__e_acsl_native_posix_memalign - -libgmp_la_CFLAGS = -Wno-attributes - -# We need at least one .cc file in $(libgmpxx_la_SOURCES) so automake will -# use $(CXXLINK) rather than the plain C $(LINK). cxx/dummy.cc is that -# file. -@WANT_CXX_TRUE@GMPXX_LTLIBRARIES_OPTION = libgmpxx.la -libgmpxx_la_SOURCES = cxx/dummy.cc -libgmpxx_la_DEPENDENCIES = $(CXX_OBJECTS) libgmp.la -libgmpxx_la_LIBADD = $(libgmpxx_la_DEPENDENCIES) -libgmpxx_la_LDFLAGS = $(GMP_LDFLAGS) $(LIBGMPXX_LDFLAGS) \ - -version-info $(LIBGMPXX_LT_CURRENT):$(LIBGMPXX_LT_REVISION):$(LIBGMPXX_LT_AGE) - -all: $(BUILT_SOURCES) config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -.SUFFIXES: .c .cc .lo .o .obj -am--refresh: Makefile - @: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --gnu --ignore-deps'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu --ignore-deps \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --ignore-deps Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu --ignore-deps Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -config.h: stamp-h1 - @test -f $@ || rm -f stamp-h1 - @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 - -stamp-h1: $(srcdir)/config.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h -$(srcdir)/config.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 -gmp.h: $(top_builddir)/config.status $(srcdir)/gmp-h.in - cd $(top_builddir) && $(SHELL) ./config.status $@ - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libgmp.la: $(libgmp_la_OBJECTS) $(libgmp_la_DEPENDENCIES) $(EXTRA_libgmp_la_DEPENDENCIES) - $(AM_V_CCLD)$(libgmp_la_LINK) -rpath $(libdir) $(libgmp_la_OBJECTS) $(libgmp_la_LIBADD) $(LIBS) - -libgmpxx.la: $(libgmpxx_la_OBJECTS) $(libgmpxx_la_DEPENDENCIES) $(EXTRA_libgmpxx_la_DEPENDENCIES) - $(AM_V_CXXLD)$(libgmpxx_la_LINK) $(am_libgmpxx_la_rpath) $(libgmpxx_la_OBJECTS) $(libgmpxx_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -.c.o: - $(AM_V_CC)$(COMPILE) -c -o $@ $< - -.c.obj: - $(AM_V_CC)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: - $(AM_V_CC)$(LTCOMPILE) -c -o $@ $< - -libgmp_la-assert.lo: assert.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-assert.lo `test -f 'assert.c' || echo '$(srcdir)/'`assert.c - -libgmp_la-compat.lo: compat.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-compat.lo `test -f 'compat.c' || echo '$(srcdir)/'`compat.c - -libgmp_la-errno.lo: errno.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-errno.lo `test -f 'errno.c' || echo '$(srcdir)/'`errno.c - -libgmp_la-extract-dbl.lo: extract-dbl.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-extract-dbl.lo `test -f 'extract-dbl.c' || echo '$(srcdir)/'`extract-dbl.c - -libgmp_la-invalid.lo: invalid.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-invalid.lo `test -f 'invalid.c' || echo '$(srcdir)/'`invalid.c - -libgmp_la-memory.lo: memory.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-memory.lo `test -f 'memory.c' || echo '$(srcdir)/'`memory.c - -libgmp_la-mp_bpl.lo: mp_bpl.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-mp_bpl.lo `test -f 'mp_bpl.c' || echo '$(srcdir)/'`mp_bpl.c - -libgmp_la-mp_clz_tab.lo: mp_clz_tab.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-mp_clz_tab.lo `test -f 'mp_clz_tab.c' || echo '$(srcdir)/'`mp_clz_tab.c - -libgmp_la-mp_dv_tab.lo: mp_dv_tab.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-mp_dv_tab.lo `test -f 'mp_dv_tab.c' || echo '$(srcdir)/'`mp_dv_tab.c - -libgmp_la-mp_minv_tab.lo: mp_minv_tab.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-mp_minv_tab.lo `test -f 'mp_minv_tab.c' || echo '$(srcdir)/'`mp_minv_tab.c - -libgmp_la-mp_get_fns.lo: mp_get_fns.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-mp_get_fns.lo `test -f 'mp_get_fns.c' || echo '$(srcdir)/'`mp_get_fns.c - -libgmp_la-mp_set_fns.lo: mp_set_fns.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-mp_set_fns.lo `test -f 'mp_set_fns.c' || echo '$(srcdir)/'`mp_set_fns.c - -libgmp_la-version.lo: version.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-version.lo `test -f 'version.c' || echo '$(srcdir)/'`version.c - -libgmp_la-nextprime.lo: nextprime.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-nextprime.lo `test -f 'nextprime.c' || echo '$(srcdir)/'`nextprime.c - -libgmp_la-primesieve.lo: primesieve.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-primesieve.lo `test -f 'primesieve.c' || echo '$(srcdir)/'`primesieve.c - -libgmp_la-tal-debug.lo: tal-debug.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-tal-debug.lo `test -f 'tal-debug.c' || echo '$(srcdir)/'`tal-debug.c - -libgmp_la-tal-notreent.lo: tal-notreent.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-tal-notreent.lo `test -f 'tal-notreent.c' || echo '$(srcdir)/'`tal-notreent.c - -libgmp_la-tal-reent.lo: tal-reent.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgmp_la_CPPFLAGS) $(CPPFLAGS) $(libgmp_la_CFLAGS) $(CFLAGS) -c -o libgmp_la-tal-reent.lo `test -f 'tal-reent.c' || echo '$(srcdir)/'`tal-reent.c - -.cc.o: - $(AM_V_CXX)$(CXXCOMPILE) -c -o $@ $< - -.cc.obj: - $(AM_V_CXX)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: - $(AM_V_CXX)$(LTCXXCOMPILE) -c -o $@ $< - -dummy.lo: cxx/dummy.cc - $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o dummy.lo `test -f 'cxx/dummy.cc' || echo '$(srcdir)/'`cxx/dummy.cc - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt -install-includeHEADERS: $(include_HEADERS) - @$(NORMAL_INSTALL) - @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ - done - -uninstall-includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) -install-nodist_includeexecHEADERS: $(nodist_includeexec_HEADERS) - @$(NORMAL_INSTALL) - @list='$(nodist_includeexec_HEADERS)'; test -n "$(includeexecdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(includeexecdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(includeexecdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includeexecdir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(includeexecdir)" || exit $$?; \ - done - -uninstall-nodist_includeexecHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(nodist_includeexec_HEADERS)'; test -n "$(includeexecdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(includeexecdir)'; $(am__uninstall_files_from_dir) - -# This directory's subdirectories are mostly independent; you can cd -# into them and run 'make' without going through this Makefile. -# To change the values of 'make' variables: instead of editing Makefiles, -# (1) if the variable is set in 'config.status', edit 'config.status' -# (which will cause the Makefiles to be regenerated when you run 'make'); -# (2) otherwise, pass the desired values on the 'make' command line. -$(am__recursive_targets): - @fail=; \ - if $(am__make_keepgoing); then \ - failcom='fail=yes'; \ - else \ - failcom='exit 1'; \ - fi; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-recursive -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-recursive - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscope: cscope.files - test ! -s cscope.files \ - || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) -clean-cscope: - -rm -f cscope.files -cscope.files: clean-cscope cscopelist -cscopelist: cscopelist-recursive - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -rm -f cscope.out cscope.in.out cscope.po.out cscope.files - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - $(am__make_dryrun) \ - || test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__post_remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__post_remove_distdir) - -dist-lzip: distdir - tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__post_remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__post_remove_distdir) - -dist-tarZ: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__post_remove_distdir) - -dist-shar: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__post_remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__post_remove_distdir) - -dist dist-all: - $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' - $(am__post_remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lz*) \ - lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir) - chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build/sub \ - && ../../configure \ - $(AM_DISTCHECK_CONFIGURE_FLAGS) \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - --srcdir=../.. --prefix="$$dc_install_base" \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__post_remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @test -n '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: trying to run $@ with an empty' \ - '$$(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - $(am__cd) '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-recursive -all-am: Makefile $(LTLIBRARIES) $(HEADERS) config.h -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includeexecdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -clean: clean-recursive - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ - mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-local distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: install-includeHEADERS - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) install-data-hook -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES \ - install-nodist_includeexecHEADERS - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES \ - uninstall-nodist_includeexecHEADERS - -.MAKE: $(am__recursive_targets) all check install install-am \ - install-data-am install-strip - -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ - am--refresh check check-am clean clean-cscope clean-generic \ - clean-libLTLIBRARIES clean-libtool clean-local cscope \ - cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ - dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ - dist-zip distcheck distclean distclean-compile \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-local distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am \ - install-data-hook install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am \ - install-includeHEADERS install-info install-info-am \ - install-libLTLIBRARIES install-man \ - install-nodist_includeexecHEADERS install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am uninstall-includeHEADERS \ - uninstall-libLTLIBRARIES uninstall-nodist_includeexecHEADERS - -.PRECIOUS: Makefile - - -install-data-hook: - @echo '' - @echo '+-------------------------------------------------------------+' - @echo '| CAUTION: |' - @echo '| |' - @echo '| If you have not already run "make check", then we strongly |' - @echo '| recommend you do so. |' - @echo '| |' - @echo '| GMP has been carefully tested by its authors, but compilers |' - @echo '| are all too often released with serious bugs. GMP tends to |' - @echo '| explore interesting corners in compilers and has hit bugs |' - @echo '| on quite a few occasions. |' - @echo '| |' - @echo '+-------------------------------------------------------------+' - @echo '' - -fac_table.h: gen-fac$(EXEEXT_FOR_BUILD) - ./gen-fac $(GMP_LIMB_BITS) $(GMP_NAIL_BITS) >fac_table.h || (rm -f fac_table.h; exit 1) - -gen-fac$(EXEEXT_FOR_BUILD): gen-fac$(U_FOR_BUILD).c bootstrap.c - $(CC_FOR_BUILD) `test -f 'gen-fac$(U_FOR_BUILD).c' || echo '$(srcdir)/'`gen-fac$(U_FOR_BUILD).c -o gen-fac$(EXEEXT_FOR_BUILD) - -fib_table.h: gen-fib$(EXEEXT_FOR_BUILD) - ./gen-fib header $(GMP_LIMB_BITS) $(GMP_NAIL_BITS) >fib_table.h || (rm -f fib_table.h; exit 1) - -mpn/fib_table.c: gen-fib$(EXEEXT_FOR_BUILD) - ./gen-fib table $(GMP_LIMB_BITS) $(GMP_NAIL_BITS) >mpn/fib_table.c || (rm -f mpn/fib_table.c; exit 1) - -gen-fib$(EXEEXT_FOR_BUILD): gen-fib$(U_FOR_BUILD).c bootstrap.c - $(CC_FOR_BUILD) `test -f 'gen-fib$(U_FOR_BUILD).c' || echo '$(srcdir)/'`gen-fib$(U_FOR_BUILD).c -o gen-fib$(EXEEXT_FOR_BUILD) - -mp_bases.h: gen-bases$(EXEEXT_FOR_BUILD) - ./gen-bases header $(GMP_LIMB_BITS) $(GMP_NAIL_BITS) >mp_bases.h || (rm -f mp_bases.h; exit 1) - -mpn/mp_bases.c: gen-bases$(EXEEXT_FOR_BUILD) - ./gen-bases table $(GMP_LIMB_BITS) $(GMP_NAIL_BITS) >mpn/mp_bases.c || (rm -f mpn/mp_bases.c; exit 1) - -gen-bases$(EXEEXT_FOR_BUILD): gen-bases$(U_FOR_BUILD).c bootstrap.c - $(CC_FOR_BUILD) `test -f 'gen-bases$(U_FOR_BUILD).c' || echo '$(srcdir)/'`gen-bases$(U_FOR_BUILD).c -o gen-bases$(EXEEXT_FOR_BUILD) $(LIBM_FOR_BUILD) - -trialdivtab.h: gen-trialdivtab$(EXEEXT_FOR_BUILD) - ./gen-trialdivtab $(GMP_LIMB_BITS) 8000 >trialdivtab.h || (rm -f trialdivtab.h; exit 1) - -gen-trialdivtab$(EXEEXT_FOR_BUILD): gen-trialdivtab$(U_FOR_BUILD).c bootstrap.c - $(CC_FOR_BUILD) `test -f 'gen-trialdivtab$(U_FOR_BUILD).c' || echo '$(srcdir)/'`gen-trialdivtab$(U_FOR_BUILD).c -o gen-trialdivtab$(EXEEXT_FOR_BUILD) $(LIBM_FOR_BUILD) - -mpn/jacobitab.h: gen-jacobitab$(EXEEXT_FOR_BUILD) - ./gen-jacobitab >mpn/jacobitab.h || (rm -f mpn/jacobitab.h; exit 1) - -gen-jacobitab$(EXEEXT_FOR_BUILD): gen-jacobitab$(U_FOR_BUILD).c - $(CC_FOR_BUILD) `test -f 'gen-jacobitab$(U_FOR_BUILD).c' || echo '$(srcdir)/'`gen-jacobitab$(U_FOR_BUILD).c -o gen-jacobitab$(EXEEXT_FOR_BUILD) - -mpn/perfsqr.h: gen-psqr$(EXEEXT_FOR_BUILD) - ./gen-psqr $(GMP_LIMB_BITS) $(GMP_NAIL_BITS) >mpn/perfsqr.h || (rm -f mpn/perfsqr.h; exit 1) - -gen-psqr$(EXEEXT_FOR_BUILD): gen-psqr$(U_FOR_BUILD).c bootstrap.c - $(CC_FOR_BUILD) `test -f 'gen-psqr$(U_FOR_BUILD).c' || echo '$(srcdir)/'`gen-psqr$(U_FOR_BUILD).c -o gen-psqr$(EXEEXT_FOR_BUILD) $(LIBM_FOR_BUILD) - -# Avoid: CVS - cvs directories -# *~ - emacs backups -# .#* - cvs merge originals -# -# *~ and .#* only occur when a whole directory without it's own Makefile.am -# is distributed, like "doc" or the mpn cpu subdirectories. -# -dist-hook: - -find $(distdir) \( -name CVS -type d \) -o -name "*~" -o -name ".#*" \ - | xargs rm -rf - cp "$(srcdir)"/mini-gmp/tests/*.[ch] "$(distdir)/mini-gmp/tests" -# grep -F $(VERSION) $(srcdir)/Makefile.am \ -# | grep -q "^# *$(VERSION) *$(LIBGMP_LT_CURRENT):$(LIBGMP_LT_REVISION):$(LIBGMP_LT_AGE) *$(LIBGMPXX_LT_CURRENT):$(LIBGMPXX_LT_REVISION):$(LIBGMPXX_LT_AGE)" -# test -z "`sed -n 's/^# *[0-9]*\.[0-9]*\.[0-9]* *\([0-9]*:[0-9]*:[0-9]*\) *\([0-9]*:[0-9]*:[0-9]*\) *\([0-9]*:[0-9]*:[0-9]*\).*/A\1\nB\2\nC\3/p' $(srcdir)/Makefile.am | grep -v 'A6:3:3\|B3:5:0\|C4:7:1' | sort | uniq -d`" - -.PHONY: check-mini-gmp clean-mini-gmp - -check-mini-gmp: - abs_srcdir="`cd $(srcdir) && pwd`" ; \ - $(MKDIR_P) mini-gmp/tests \ - && cd mini-gmp/tests \ - && LD_LIBRARY_PATH="../../.libs:$$LD_LIBRARY_PATH" \ - DYLD_LIBRARY_PATH="../../.libs:$$DYLD_LIBRARY_PATH" \ - $(MAKE) -f "$$abs_srcdir/mini-gmp/tests/Makefile" \ - VPATH="$$abs_srcdir/mini-gmp/tests" \ - srcdir="$$abs_srcdir/mini-gmp/tests" \ - MINI_GMP_DIR="$$abs_srcdir/mini-gmp" \ - LDFLAGS="-L../../.libs" \ - LIBS="-lgmp -lm" \ - CC="$(CC_FOR_BUILD)" EXTRA_CFLAGS="-g -I../.." check - -clean-mini-gmp: - if [ -d mini-gmp/tests ] ; then \ - abs_srcdir="`cd $(srcdir) && pwd`" ; \ - cd mini-gmp/tests \ - && $(MAKE) -f "$$abs_srcdir/mini-gmp/tests/Makefile" clean ; \ - fi - -clean-gmp: - rm -f demos/pexpr-config.h demos/calc/calc-config.h - rm -f cxx/Makefile \ - demos/Makefile \ - demos/calc/Makefile \ - demos/expr/Makefile \ - doc/Makefile \ - tests/Makefile \ - tests/cxx/Makefile \ - tests/devel/Makefile \ - tests/misc/Makefile \ - tests/mpf/Makefile \ - tests/mpn/Makefile \ - tests/mpq/Makefile \ - tests/mpz/Makefile \ - tests/rand/Makefile - -clean-local: clean-mini-gmp -distclean-local: clean-mini-gmp clean-gmp - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/src/plugins/e-acsl/contrib/libgmp/NEWS b/src/plugins/e-acsl/contrib/libgmp/NEWS deleted file mode 100644 index 111acb70fb2d8ef70470b1ae4b457e3cdb71c223..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/NEWS +++ /dev/null @@ -1,956 +0,0 @@ -Copyright 1996, 1999-2015 Free Software Foundation, Inc. - -Verbatim copying and distribution of this entire article is permitted in any -medium, provided this notice is preserved. - - -Changes between GMP version 6.0.* and 6.1.0 - - BUGS FIXED - * The public function mpn_com is now correctly declared in gmp.h. - - * Healed possible failures of mpn_sec_sqr for non-cryptographic sizes for - some obsolete CPUs. - - * The option --disable-assembly now disables all inlined asm. - - * Fixed bug affecting mini-gmp's bitwise functions mpz_setbit, mpz_clrbit, - and mpz_combit. - - * Various problems related to precision for mpf have been fixed. - - * Fixed ABI incompatible stack alignment in calls from assembly code. - - * Fixed PIC bug in popcount affecting Intel processors using the 32-bit ABI. - - SPEEDUPS - * Speedup for Intel Broadwell and Skylake though assembly code making use of - new ADX instructions. - - * Square root is now faster when the remainder is not needed. Also the speed - to compute the k-th root improved, for small sizes. - - * Improved arm64 support. - - FEATURES - * New C++ functions gcd and lcm for mpz_class. - - * New public mpn functions mpn_divexact_1, mpn_zero_p, and mpn_cnd_swap. - - * New public mpq_cmp_z function, to efficiently compare rationals with - integers. - - * Support for Darwin in all x86 code, thereby enabling fat builds on Darwin. - - * Support for more 32-bit arm processors. - - * Support for compilation with clang/llvm on more platforms. Caution: GMP - triggers mis-compilation bugs in clang for many platforms, such as arm, x86 - (32-bit and 64-bit), powerpc, mips. - - * Support for AVX-less modern x86 CPUs. (Such support might be missing either - because the CPU vendor chose to disable AVX, or because the running kernel - lacks AVX context switch support.) - - * Stack usage trimmed; we believe 512 KiB is now sufficient for any GMP - call, irrespective of operand size. - - * Support for NetBSD under Xen; we switch off AVX unconditionally under - NetBSD since a bug in NetBSD makes AVX fail under Xen. - - MISC - * We now use manufacturers' code names for x86 CPUs, e.g., "haswell" instead - of names derived from the commercial brands. - - * Small improvements and better coverage for the test suite. - - * The various FreeBSD problems listed for 6.0.0 affect this release too. - - * Tuned values for FFT multiplications are provided for larger number on - many platforms. - -Changes between GMP version 5.1.* and 6.0.0 - - BUGS FIXED - * The function mpz_invert now considers any number invertible in Z/1Z. - - * The mpn multiply code now handles operands of more than 2^31 limbs - correctly. (Note however that the mpz code is limited to 2^32 bits on - 32-bit hosts and 2^37 bits on 64-bit hosts.) - - * Contains all fixes from release 5.1.3. - - SPEEDUPS - * Plain division of large operands is faster and more monotonous in operand - size. - - * Major speedup for ARM, in particular ARM Cortex-A15, thanks to improved - assembly. - - * Major speedup for SPARC T4/T5 and speedup also for T3, thanks to a lot of - new assembly. - - * Speedup for Intel Sandy Bridge, Ivy Bridge, Haswell, thanks to rewritten - and vastly expanded assembly support. Speedup also for the older Core 2 - and Nehalem. - - * Faster mixed arithmetic between mpq_class and double. - - * With g++, optimise more operations when one argument is a simple constant. - - FEATURES - * Support for new Intel and AMD CPUs. - - * Support for ARM64 alias Aarch64 alias ARMv8. - - * New public functions mpn_sec_mul and mpn_sec_sqr, implementing side-channel - silent multiplication and squaring. - - * New public functions mpn_sec_div_qr and mpn_sec_div_r, implementing - side-channel silent division. - - * New public functions mpn_cnd_add_n and mpn_cnd_sub_n. Side-channel silent - conditional addition and subtraction. - - * New public function mpn_sec_powm, implementing side-channel silent modexp. - - * New public function mpn_sec_invert, implementing side-channel silent - modular inversion. - - * Better support for applications which use the mpz_t type, but nevertheless - need to call some of the lower-level mpn functions. See the documentation - for mpz_limbs_read and related functions. - - MISC - * This release will not work on NetBSD 5.x, FreeBSD 7.x, 8.x or 9 series - before 9.3. The reason is that the m4 command is not correctly - implemented. (Workaround: Use an older GMP release, or install GNU m4 from - /usr/ports and tell GMP to use it.) - - * This release will not build properly on FreeBSD/amd64 before version 10 - using the 32-bit ABI (once a working m4 is installed). The reason is - broken limits.h. (Workaround: Use an older GMP release if using the 32-bit - ABI on these FreeBSD releases is important.) - - * This release will not work reliably on FreeBSD 10.0 for i386 or amd64 using - the 32-bit ABI. The reason is bugs in the compiler 'clang'. Depending on - CPU-dependent compiler flags, GMP may or may not be miscompiled in a - particular build. (Workaround: Compiling gcc from /usr/ports should work, - except that gcc circularly depends on GMP; we have not been able to test - that workaround due to FreeBSD 10.0 bugs affecting its ability to run under - KVM and Xen.) - - * This release will not compile on FreeBSD before version 10 for i386, - targeting any modern AMD processor. The reason is bugs in the old gcc - bundled with FreeBSD. (Workaround: install a less obsolete gcc from - /usr/ports and tell GMP to use it, or override the -march=amdfam10 - GMP configure command line argument.) - - -Changes between GMP version 5.1.2 and 5.1.3 - - BUGS FIXED - * The internal functions mpn_sbpi1_div_qr_sec mpn_sbpi1_div_r_sec could - compute garbage with a low probability. They are now rewritten, and the - test code has been improved. - - * A bug in the ia64 implementation of mpn_divrem_2, clobbering some - callee-save registers, has been fixed. This is an internal - function, with the bug manifesting itself as miscomputation in, - e.g., mpn_sqrtrem. - - * The documentation now correctly says 'const' for input arguments. - - SPEEDUPS - * None. - - FEATURES - * None. - - MISC - * None. - - -Changes between GMP version 5.1.1 and 5.1.2 - - BUGS FIXED - * A bug in mpz_powm_ui triggered by base arguments of at least 15000 decimal - digits or mod arguments of at least 7500 decimal digits has been fixed. - - * An AMD Bulldozer specific bug affecting the 64-bit Windows ABI has been - fixed. This bug was in a key function (mpn_mul_1) and made both Bulldozer - specific builds and fat builds run on Bulldozer completely non-functional. - - SPEEDUPS - * None. - - FEATURES - * None. - - MISC - * Fixes and generalisations to the test suite. - - * Minor portability enhancements. - - -Changes between GMP version 5.1.0 and 5.1.1 - - BUGS FIXED - * On Windows 64-bit, an error causing link errors about - __gmp_binvert_limb_table has been fixed. - - * Aarch64 alias ARM64 support now works. - - * A possible buffer overrun in mpz_ior has been fixed. - - * A rare sign flip in mpz_remove has been fixed. - - * A bug causing problems with mpf numbers with absolute value >= 2^31 has - been fixed. - - * Several bugs in mini-gmp have been fixed. - - * A bug caused by automake, related to the 'distcheck' target, has been fixed - by upgrading the automake used for GMP release engineering. - - SPEEDUPS - * None. - - FEATURES - * Preliminary support for the x32 ABI under x86-64. - - MISC - * The mini-gmp testsuite now tests the entire set of functions. - - * Various improvements of the GMP testsuite. - - -Changes between GMP version 5.0.* and 5.1.0 - - BUGS FIXED - * When reading a C++ number (like mpz_class) in an istream reaches the end - of the stream, the eofbit is now set. - - * The result sign of mpz_rootrem's remainder is now always correct. - - * The mpz_remove function now handles negative divisors. - - * Contains all fixes from release 5.0.5. - - SPEEDUPS - * The n-factorial and n-over-k functions have been reimplemented for great - speedups for small and large operands. - - * New subquadratic algorithm for the Kronecker/Jacobi/Legendre symbol. - - * Major speedup for ARM, in particular ARM Cortex-A9 and A15, thanks to broad - assembly support. - - * Significant speedup for POWER6 and POWER7 thanks to improved assembly. - - * The performance under M$ Windows' 64-bit ABI has been greatly improved - thanks to complete assembly support. - - * Minor speed improvements of many functions and for many platforms. - - FEATURES - * Many new CPUs recognised. - - * New functions for multi-factorials, and primorial: mpz_2fac_ui, - mpz_mfac_uiui and mpz_primorial_ui. - - * The mpz_powm_sec function now uses side-channel silent division for - converting into Montgomery residues. - - * The fat binary mechanism is now more robust in its CPU recognition. - - MISC - * Inclusion of assembly code is now controlled by the configure options - --enable-assembly and --disable-assembly. The "none" CPU target is gone. - - * In C++, the conversions mpq_class->mpz_class, mpf_class->mpz_class and - mpf_class->mpq_class are now explicit. - - * Includes "mini-gmp", a small, portable, but less efficient, implementation - of a subset of GMP's mpn and mpz interfaces. Used in GMP bootstrap, but it - can also be bundled with applications as a fallback when the real GMP - library is unavailable. - - * The ABIs under AIX are no longer called aix32 and aix64, but mode64 and 32. - This is more consistent with other powerpc systems. - - * The coverage of the testsuite has been improved, using the lcov tool. See - also https://gmplib.org/devel/lcov/. - - * It is now possible to compile GMP using a C++ compiler. - - * K&R C compilers are no longer supported. - - * The BSD MP compatibility functions have been removed. - - -Changes between GMP version 5.0.4 and 5.0.5 - - BUGS FIXED - * A bug causing AMD 11h processors to be treated like AMD 10h has been fixed. - The 11h processors do not correctly handle all 10h (aka K10) instructions, - and GMP's use of these instructions results in major miscomputations (not - as one would have hoped CPU traps of some 'illegal instruction' sort). - - * A bug affecting recent Intel Sandy Bridge CPUs resulting in configuration - failures has been fixed. - - SPEEDUPS - * None. - - FEATURES - * A couple of tests added to the self-check suite. - - MISC - * None. - - -Changes between GMP version 5.0.3 and 5.0.4 - - BUGS FIXED - * Thresholds in mpn_powm_sec for both fat and non-fat builds are now used - safely, plugging a one-word buffer overrun introduced in the 5.0.3 release - (for non-fat) and a multi-word buffer overrun that existed since 5.0 (for - fat). (We have not been able to provoke malign stack smashing in any of - the ~100 configurations explored by the GMP nightly builds, but the bug - should be assumed to be exploitable.) - - * Two bugs in multiplication code causing incorrect computation with - extremely low probability have been fixed. - - * A bug in the test suite causing buffer overruns during "make check", - sometimes leading to subsequent malloc crashes, has been fixed. - - * Two bugs in the gcd code have been fixed. They could lead to incorrect - results, but for uniformly distributed random operands, the likelihood for - that is infinitesimally small. (There was also a third bug, but that was - an incorrect ASSERT, which furthermore was not enabled by default.) - - * A bug affecting 32-bit PowerPC division has been fixed. The bug caused - miscomputation for certain divisors in the range 2^32 ... 2^64-1 (about 1 - in 2^30 of these). - - SPEEDUPS - * None, except indirectly through recognition of new CPUs, and through better - tuning parameters. - - FEATURES - * Some more tests added to the self-check suite. - - * The AMD "Bulldozer" CPU is now recognised. - - MISC - * None. - - -Changes between GMP version 5.0.2 and 5.0.3 - - BUGS FIXED - * A few minor bugs related to portability fixed. - - * A slight timing leak of the powm_sec functions have been sealed. (This - leak could possibly be used to extract the most significant few bits of the - exponent. "Few" here means at most 10.) - - * The mpz_nextprime function now runs a safer number of pseudo-random prime - tests. - - * A bug in division code possibly causing incorrect computation was fixed. - - SPEEDUPS - * None, except indirectly through recognition of new CPUs, and through better - tuning parameters. - - FEATURES - * New CPUs recognised. - - * IBM S/390 are now supported in both 31/32-bit and 64-bit mode. (We have - not been able to fully test this on any multilib machine, since IBM expired - our guest account a few days before our release.) - - MISC - * None. - - -Changes between GMP version 5.0.1 and 5.0.2 - - BUGS FIXED - * Many minor bugs related to portability fixed. - - * The support for HPPA 2.0N now works, after an assembly bug fix. - - * A test case type error has been fixed. The symptom of this bug was - spurious 'make check' failures. - - SPEEDUPS - * None, except indirectly through recognition of new CPUs. - - FEATURES - * Fat builds are now supported for 64-bit x86 processors also under Darwin. - - MISC - * None. - - -Changes between GMP version 5.0.0 and 5.0.1 - - BUGS FIXED - * Fat builds fixed. - - * Fixed crash for huge multiplies when old FFT_TABLE2 type of parameter - selection tables' sentinel was smaller than multiplied operands. - - * The solib numbers now reflect the removal of the documented but preliminary - mpn_bdivmod function; we correctly flag incompatibility with GMP 4.3. GMP - 5.0.0 has this wrong, and should perhaps be uninstalled to avoid confusion. - - SPEEDUPS - * Multiplication of large numbers has indirectly been sped up through better - FFT tuning and processor recognition. Since many operations depend on - multiplication, there will be a general speedup. - - FEATURES - * More Core i3, i5 an Core i7 processor models are recognised. - - * Fixes and workarounds for Mac OS quirks should make this GMP version build - using many of the different versions of "Xcode". - - MISC - * The amount of scratch memory needed for multiplication of huge numbers has - been reduced substantially (but is still larger than in GMP 4.3.) - - * Likewise, the amount of scratch memory needed for division of large numbers - has been reduced substantially. - - * The FFT tuning code of tune/tuneup.c has been completely rewritten, and - new, large FFT parameter selection tables are provided for many machines. - - * Upgraded to the latest autoconf, automake, libtool. - - -Changes between GMP version 4.3.X and 5.0.0 - - BUGS FIXED - * None (contains the same fixes as release 4.3.2). - - SPEEDUPS - * Multiplication has been overhauled: - (1) Multiplication of larger same size operands has been improved with - the addition of two new Toom functions and a new internal function - mpn_mulmod_bnm1 (computing U * V mod (B^n-1), B being the word base. - This latter function is used for the largest products, waiting for a - better Schoenhage-Strassen U * V mod (B^n+1) implementation. - (2) Likewise for squaring. - (3) Multiplication of different size operands has been improved with the - addition of many new Toom function, and by selecting underlying - functions better from the main multiply functions. - - * Division and mod have been overhauled: - (1) Plain "schoolbook" division is reimplemented using faster quotient - approximation. - (2) Division Q = N/D, R = N mod D where both the quotient and remainder - are needed now runs in time O(M(log(N))). This is an improvement of - a factor log(log(N)) - (3) Division where just the quotient is needed is now O(M(log(Q))) on - average. - (4) Modulo operations using Montgomery REDC form now take time O(M(n)). - (5) Exact division Q = N/D by means of mpz_divexact has been improved - for all sizes, and now runs in time O(M(log(N))). - - * The function mpz_powm is now faster for all sizes. Its complexity has - gone from O(M(n)log(n)m) to O(M(n)m) where n is the size of the modulo - argument and m is the size of the exponent. It is also radically - faster for even modulus, since it now partially factors such modulus - and performs two smaller modexp operations, then uses CRT. - - * The internal support for multiplication yielding just the lower n limbs - has been improved by using Mulders' algorithm. - - * Computation of inverses, both plain 1/N and 1/N mod B^n have been - improved by using well-tuned Newton iterations, and wrap-around - multiplication using mpn_mulmod_bnm1. - - * A new algorithm makes mpz_perfect_power_p asymptotically faster. - - * The function mpz_remove uses a much faster algorithm, is better tuned, - and also benefits from the division improvements. - - * Intel Atom and VIA Nano specific optimisations. - - * Plus hundreds of smaller improvements and tweaks! - - FEATURES - * New mpz function: mpz_powm_sec for side-channel quiet modexp - computations. - - * New mpn functions: mpn_sqr, mpn_and_n, mpn_ior_n, mpn_xor_n, mpn_nand_n, - mpn_nior_n, mpn_xnor_n, mpn_andn_n, mpn_iorn_n, mpn_com, mpn_neg, - mpn_copyi, mpn_copyd, mpn_zero. - - * The function mpn_tdiv_qr now allows certain argument overlap. - - * Support for fat binaries for 64-bit x86 processors has been added. - - * A new type, mp_bitcnt_t for bignum bit counts, has been introduced. - - * Support for Windows64 through mingw64 has been added. - - * The cofactors of mpz_gcdext and mpn_gcdext are now more strictly - normalised, returning to how GMP 4.2 worked. (Note that also release - 4.3.2 has this change.) - - MISC - * The mpn_mul function should no longer be used for squaring, - instead use the new mpn_sqr. - - * The algorithm selection has been improved, the number of thresholds have - more than doubled, and the tuning and use of existing thresholds have - been improved. - - * The tune/speed program can measure many of new functions. - - * The mpn_bdivmod function has been removed. We do not consider this an - incompatible change, since the function was marked as preliminary. - - * The testsuite has been enhanced in various ways. - - -Changes between GMP version 4.3.1 and 4.3.2 - - Bugs: - * Fixed bug in mpf_eq. - * Fixed overflow issues in mpz_set_str, mpz_inp_str, mpf_set_str, and - mpf_get_str. - * Avoid unbounded stack allocation for unbalanced multiplication. - * Fixed bug in FFT multiplication. - - Speedups: - * None, except that proper processor recognition helps affected processors. - - Features: - * Recognise more "Core 2" processor variants. - * The cofactors of mpz_gcdext and mpn_gcdext are now more strictly - normalised, returning to how GMP 4.2 worked. - - -Changes between GMP version 4.3.0 and 4.3.1 - - Bugs: - * Fixed bug in mpn_gcdext, affecting also mpz_gcdext and mpz_invert. - The bug could cause a cofactor to have a leading zero limb, which - could lead to crashes or miscomputation later on. - * Fixed some minor documentation issues. - - Speedups: - * None. - - Features: - * Workarounds for various issues with Mac OS X's build tools. - * Recognise more IBM "POWER" processor variants. - - -Changes between GMP version 4.2.X and 4.3.0 - - Bugs: - * Fixed bug in mpz_perfect_power_p with recognition of negative perfect - powers that can be written both as an even and odd power. - * We might accidentally have added bugs since there is a large amount of - new code in this release. - - Speedups: - * Vastly improved assembly code for x86-64 processors from AMD and Intel. - * Major improvements also for many other processor families, such as - Alpha, PowerPC, and Itanium. - * New sub-quadratic mpn_gcd and mpn_gcdext, as well as improved basecase - gcd code. - * The multiply FFT code has been slightly improved. - * Balanced multiplication now uses 4-way Toom in addition to schoolbook, - Karatsuba, 3-way Toom, and FFT. - * Unbalanced multiplication has been vastly improved. - * Improved schoolbook division by means of faster quotient approximation. - * Several new algorithms for division and mod by single limbs, giving - many-fold speedups. - * Improved nth root computations. - * The mpz_nextprime function uses sieving and is much faster. - * Countless minor tweaks. - - Features: - * Updated support for fat binaries for x86_32 include current processors - * Lots of new mpn internal interfaces. Some of them will become public - in a future GMP release. - * Support for the 32-bit ABI under x86-apple-darwin. - * x86 CPU recognition code should now default better for future - processors. - * The experimental nails feature does not work in this release, but - it might be re-enabled in the future. - - Misc: - * The gmp_version variable now always contains three parts. For this - release, it is "4.3.0". - - -Changes between GMP version 4.2.3 and 4.2.4 - - Bugs: - * Fix bug with parsing exponent '+' sign in mpf. - * Fix an allocation bug in mpf_set_str, also affecting mpf_init_set_str, and - mpf_inp_str. - - Speedups: - * None, except that proper processor recognition helps affected processors. - - Features: - * Recognize new AMD processors. - - -Changes between GMP version 4.2.2 and 4.2.3 - - Bugs: - * Fix x86 CPU recognition code to properly identify recent AMD and Intel - 64-bit processors. - * The >> operator of the C++ wrapper gmpxx.h now does floor rounding, not - truncation. - * Inline semantics now follow the C99 standard, and works with recent GCC - releases. - * C++ bitwise logical operations work for more types. - * For C++, gmp.h now includes cstdio, improving compiler compatibility. - * Bases > 36 now work properly in mpf_set_str. - - Speedups: - * None, except that proper processor recognition helps affected processors. - - Features: - * The allocation functions now detect overflow of the mpz_t type. This means - that overflow will now cause an abort, except when the allocation - computation itself overflows. (Such overflow can probably only happen in - powering functions; we will detect powering overflow in the future.) - - -Changes between GMP version 4.2.1 and 4.2.2 - - * License is now LGPL version 3. - - Bugs: - * Shared library numbers corrected for libcxx. - * Fixed serious bug in gmpxx.h where a=a+b*c would generate garbage. - Note that this only affects C++ programs. - * Fix crash in mpz_set_d for arguments with large negative exponent. - * Fix 32-bit ABI bug with Itanium assembly for popcount and hamdist. - * Fix assembly syntax problem for powerpc-ibm-aix with AIX native assembler. - * Fix problems with x86 --enable-fat, where the compiler where told to - generate code for the build machine, not plain i386 code as it should. - * Improved recognition of powerpc systems wrt Altivec/VMX capability. - * Misc minor fixes, mainly workarounds for compiler/assembler bugs. - - Speedups: - * "Core 2" and Pentium 4 processors, running in 64-bit mode will get a - slight boost as they are now specifically recognized. - - Features: - * New support for x86_64-solaris - * New, rudimentary support for x86-apple-darwin and x86_64-apple-darwin. - (Please see https://gmplib.org/macos.html for more information.) - - -Changes between GMP version 4.2 and 4.2.1 - - Bugs: - * Shared library numbers corrected. - * Broken support for 32-bit AIX fixed. - * Misc minor fixes. - - Speedups: - * Exact division (mpz_divexact) now falls back to plain division for large - operands. - - Features: - * Support for some new systems. - - -Changes between GMP version 4.1.4 and 4.2 - - Bugs: - * Minor bug fixes and code generalizations. - * Expanded and improved test suite. - - Speedups: - * Many minor optimizations, too many to mention here. - * Division now always subquadratic. - * Computation of n-factorial much faster. - * Added basic x86-64 assembly code. - * Floating-point output is now subquadratic for all bases. - * FFT multiply code now about 25% faster. - * Toom3 multiply code faster. - - Features: - * Much improved configure. - * Workarounds for many more compiler bugs. - * Temporary allocations are now made on the stack only if small. - * New systems supported: HPPA-2.0 gcc, IA-64 HP-UX, PowerPC-64 Darwin, - Sparc64 GNU/Linux. - * New i386 fat binaries, selecting optimised code at runtime (--enable-fat). - * New build option: --enable-profiling=instrument. - * New memory function: mp_get_memory_functions. - * New Mersenne Twister random numbers: gmp_randinit_mt, also now used for - gmp_randinit_default. - * New random functions: gmp_randinit_set, gmp_urandomb_ui, gmp_urandomm_ui. - * New integer functions: mpz_combit, mpz_rootrem. - * gmp_printf etc new type "M" for mp_limb_t. - * gmp_scanf and friends now accept C99 hex floats. - * Numeric input and output can now be in bases up to 62. - * Comparisons mpz_cmp_d, mpz_cmpabs_d, mpf_cmp_d recognise infinities. - * Conversions mpz_get_d, mpq_get_d, mpf_get_d truncate towards zero, - previously their behaviour was unspecified. - * Fixes for overflow issues with operands >= 2^31 bits. - - Caveats: - * mpfr is gone, and will from now on be released only separately. Please see - www.mpfr.org. - - -Changes between GMP version 4.1.3 and 4.1.4 - -* Bug fix to FFT multiplication code (crash for huge operands). -* Bug fix to mpf_sub (miscomputation). -* Support for powerpc64-gnu-linux. -* Better support for AMD64 in 32-bit mode. -* Upwardly binary compatible with 4.1.3, 4.1.2, 4.1.1, 4.1, 4.0.1, 4.0, - and 3.x versions. - - -Changes between GMP version 4.1.2 and 4.1.3 - -* Bug fix for FFT multiplication code (miscomputation). -* Bug fix to K6 assembly code for gcd. -* Bug fix to IA-64 assembly code for population count. -* Portability improvements, most notably functional AMD64 support. -* mpz_export allows NULL for countp parameter. -* Many minor bug fixes. -* mpz_export allows NULL for countp parameter. -* Upwardly binary compatible with 4.1.2, 4.1.1, 4.1, 4.0.1, 4.0, and 3.x - versions. - - -Changes between GMP version 4.1.1 and 4.1.2 - -* Bug fixes. - - -Changes between GMP version 4.1 and 4.1.1 - -* Bug fixes. -* New systems supported: NetBSD and OpenBSD sparc64. - - -Changes between GMP version 4.0.1 and 4.1 - -* Bug fixes. -* Speed improvements. -* Upwardly binary compatible with 4.0, 4.0.1, and 3.x versions. -* Asymptotically fast conversion to/from strings (mpz, mpq, mpn levels), but - also major speed improvements for tiny operands. -* mpn_get_str parameter restrictions relaxed. -* Major speed improvements for HPPA 2.0 systems. -* Major speed improvements for UltraSPARC systems. -* Major speed improvements for IA-64 systems (but still sub-optimal code). -* Extended test suite. -* mpfr is back, with many bug fixes and portability improvements. -* New function: mpz_ui_sub. -* New functions: mpz_export, mpz_import. -* Optimization for nth root functions (mpz_root, mpz_perfect_power_p). -* Optimization for extended gcd (mpz_gcdext, mpz_invert, mpn_gcdext). -* Generalized low-level number format, reserving a `nails' part of each - limb. (Please note that this is really experimental; some functions - are likely to compute garbage when nails are enabled.) -* Nails-enabled Alpha 21264 assembly code, allowing up to 75% better - performance. (Use --enable-nails=4 to enable it.) - - -Changes between GMP version 4.0 and 4.0.1 - -* Bug fixes. - - -Changes between GMP version 3.1.1 and 4.0 - -* Bug fixes. -* Speed improvements. -* Upwardly binary compatible with 3.x versions. -* New CPU support: IA-64, Pentium 4. -* Improved CPU support: 21264, Cray vector systems. -* Support for all MIPS ABIs: o32, n32, 64. -* New systems supported: Darwin, SCO, Windows DLLs. -* New divide-and-conquer square root algorithm. -* New algorithms chapter in the manual. -* New malloc reentrant temporary memory method. -* New C++ class interface by Gerardo Ballabio (beta). -* Revamped configure, featuring ABI selection. -* Speed improvements for mpz_powm and mpz_powm_ui (mainly affecting small - operands). -* mpz_perfect_power_p now properly recognizes 0, 1, and negative perfect - powers. -* mpz_hamdist now supports negative operands. -* mpz_jacobi now accepts non-positive denominators. -* mpz_powm now supports negative exponents. -* mpn_mul_1 operand overlap requirements relaxed. -* Float input and output uses locale specific decimal point where available. -* New gmp_printf, gmp_scanf and related functions. -* New division functions: mpz_cdiv_q_2exp, mpz_cdiv_r_2exp, mpz_divexact_ui. -* New divisibility tests: mpz_divisible_p, mpz_divisible_ui_p, - mpz_divisible_2exp_p, mpz_congruent_p, mpz_congruent_ui_p, - mpz_congruent_2exp_p. -* New Fibonacci function: mpz_fib2_ui. -* New Lucas number functions: mpz_lucnum_ui, mpz_lucnum2_ui. -* Other new integer functions: mpz_cmp_d, mpz_cmpabs_d, mpz_get_d_2exp, - mpz_init2, mpz_kronecker, mpz_lcm_ui, mpz_realloc2. -* New rational I/O: mpq_get_str, mpq_inp_str, mpq_out_str, mpq_set_str. -* Other new rational functions: mpq_abs, mpq_cmp_si, mpq_div_2exp, - mpq_mul_2exp, mpq_set_f. -* New float tests: mpf_integer_p, mpf_fits_sint_p, mpf_fits_slong_p, - mpf_fits_sshort_p, mpf_fits_uint_p, mpf_fits_ulong_p, mpf_fits_ushort_p. -* Other new float functions: mpf_cmp_d, mpf_get_default_prec, mpf_get_si, - mpf_get_ui, mpf_get_d_2exp. -* New random functions: gmp_randinit_default, gmp_randinit_lc_2exp_size. -* New demo expression string parser (see demos/expr). -* New preliminary perl interface (see demos/perl). -* Tuned algorithm thresholds for many more CPUs. - - -Changes between GMP version 3.1 and 3.1.1 - -* Bug fixes for division (rare), mpf_get_str, FFT, and miscellaneous minor - things. - - -Changes between GMP version 3.0 and 3.1 - -* Bug fixes. -* Improved `make check' running more tests. -* Tuned algorithm cutoff points for many machines. This will improve speed for - a lot of operations, in some cases by a large amount. -* Major speed improvements: Alpha 21264. -* Some speed improvements: Cray vector computers, AMD K6 and Athlon, Intel P5 - and Pentium Pro/II/III. -* The mpf_get_prec function now works as it did in GMP 2. -* New utilities for auto-tuning and speed measuring. -* Multiplication now optionally uses FFT for very large operands. (To enable - it, pass --enable-fft to configure.) -* Support for new systems: Solaris running on x86, FreeBSD 5, HP-UX 11, Cray - vector computers, Rhapsody, Nextstep/Openstep, MacOS. -* Support for shared libraries on 32-bit HPPA. -* New integer functions: mpz_mul_si, mpz_odd_p, mpz_even_p. -* New Kronecker symbol functions: mpz_kronecker_si, mpz_kronecker_ui, - mpz_si_kronecker, mpz_ui_kronecker. -* New rational functions: mpq_out_str, mpq_swap. -* New float functions: mpf_swap. -* New mpn functions: mpn_divexact_by3c, mpn_tdiv_qr. -* New EXPERIMENTAL function layer for accurate floating-point arithmetic, mpfr. - To try it, pass --enable-mpfr to configure. See the mpfr subdirectory for - more information; it is not documented in the main GMP manual. - - -Changes between GMP version 3.0 and 3.0.1 - -* Memory leaks in gmp_randinit and mpz_probab_prime_p fixed. -* Documentation for gmp_randinit fixed. Misc documentation errors fixed. - - -Changes between GMP version 2.0 and 3.0 - -* Source level compatibility with past releases (except mpn_gcd). -* Bug fixes. -* Much improved speed thanks to both host independent and host dependent - optimizations. -* Switch to autoconf/automake/libtool. -* Support for building libgmp as a shared library. -* Multiplication and squaring using 3-way Toom-Cook. -* Division using the Burnikel-Ziegler method. -* New functions computing binomial coefficients: mpz_bin_ui, mpz_bin_uiui. -* New function computing Fibonacci numbers: mpz_fib_ui. -* New random number generators: mpf_urandomb, mpz_rrandomb, mpz_urandomb, - mpz_urandomm, gmp_randclear, gmp_randinit, gmp_randinit_lc_2exp, - gmp_randseed, gmp_randseed_ui. -* New function for quickly extracting limbs: mpz_getlimbn. -* New functions performing integer size tests: mpz_fits_sint_p, - mpz_fits_slong_p, mpz_fits_sshort_p, mpz_fits_uint_p, mpz_fits_ulong_p, - mpz_fits_ushort_p. -* New mpf functions: mpf_ceil, mpf_floor, mpf_pow_ui, mpf_trunc. -* New mpq function: mpq_set_d. -* New mpz functions: mpz_addmul_ui, mpz_cmpabs, mpz_cmpabs_ui, mpz_lcm, - mpz_nextprime, mpz_perfect_power_p, mpz_remove, mpz_root, mpz_swap, - mpz_tdiv_ui, mpz_tstbit, mpz_xor. -* New mpn function: mpn_divexact_by3. -* New CPU support: DEC Alpha 21264, AMD K6 and Athlon, HPPA 2.0 and 64, - Intel Pentium Pro and Pentium-II/III, Sparc 64, PowerPC 64. -* Almost 10 times faster mpz_invert and mpn_gcdext. -* The interface of mpn_gcd has changed. -* Better support for MIPS R4x000 and R5000 under Irix 6. -* Improved support for SPARCv8 and SPARCv9 processors. - - -Changes between GMP version 2.0 and 2.0.2 - -* Many bug fixes. - - -Changes between GMP version 1.3.2 and 2.0 - -* Division routines in the mpz class have changed. There are three classes of - functions, that rounds the quotient to -infinity, 0, and +infinity, - respectively. The first class of functions have names that begin with - mpz_fdiv (f is short for floor), the second class' names begin with mpz_tdiv - (t is short for trunc), and the third class' names begin with mpz_cdiv (c is - short for ceil). - - The old division routines beginning with mpz_m are similar to the new - mpz_fdiv, with the exception that some of the new functions return useful - values. - - The old function names can still be used. All the old functions names will - now do floor division, not trunc division as some of them used to. This was - changed to make the functions more compatible with common mathematical - practice. - - The mpz_mod and mpz_mod_ui functions now compute the mathematical mod - function. I.e., the sign of the 2nd argument is ignored. - -* The mpq assignment functions do not canonicalize their results. A new - function, mpq_canonicalize must be called by the user if the result is not - known to be canonical. -* The mpn functions are now documented. These functions are intended for - very time critical applications, or applications that need full control over - memory allocation. Note that the mpn interface is irregular and hard to - use. -* New functions for arbitrary precision floating point arithmetic. Names - begin with `mpf_'. Associated type mpf_t. -* New and improved mpz functions, including much faster GCD, fast exact - division (mpz_divexact), bit scan (mpz_scan0 and mpz_scan1), and number - theoretical functions like Jacobi (mpz_jacobi) and multiplicative inverse - (mpz_invert). -* New variable types (mpz_t and mpq_t) are available that makes syntax of - mpz and mpq calls nicer (no need for & before variables). The MP_INT and - MP_RAT types are still available for compatibility. -* Uses GNU configure. This makes it possible to choose target architecture - and CPU variant, and to compile into a separate object directory. -* Carefully optimized assembly for important inner loops. Support for DEC - Alpha, Amd 29000, HPPA 1.0 and 1.1, Intel Pentium and generic x86, Intel - i960, Motorola MC68000, MC68020, MC88100, and MC88110, Motorola/IBM - PowerPC, National NS32000, IBM POWER, MIPS R3000, R4000, SPARCv7, - SuperSPARC, generic SPARCv8, and DEC VAX. Some support also for ARM, - Clipper, IBM ROMP (RT), and Pyramid AP/XP. -* Faster. Thanks to the assembler code, new algorithms, and general tuning. - In particular, the speed on machines without GCC is improved. -* Support for machines without alloca. -* Now under the LGPL. - -INCOMPATIBILITIES BETWEEN GMP 1 AND GMP 2 - -* mpq assignment functions do not canonicalize their results. -* mpz division functions round differently. -* mpz mod functions now really compute mod. -* mpz_powm and mpz_powm_ui now really use mod for reduction. diff --git a/src/plugins/e-acsl/contrib/libgmp/README b/src/plugins/e-acsl/contrib/libgmp/README deleted file mode 100644 index 73ce3648c613028aebbc0925a79cbe4d199994c0..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/README +++ /dev/null @@ -1,111 +0,0 @@ -Copyright 1991, 1996, 1999, 2000, 2007 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - - - THE GNU MP LIBRARY - - -GNU MP is a library for arbitrary precision arithmetic, operating on signed -integers, rational numbers, and floating point numbers. It has a rich set of -functions, and the functions have a regular interface. - -GNU MP is designed to be as fast as possible, both for small operands and huge -operands. The speed is achieved by using fullwords as the basic arithmetic -type, by using fast algorithms, with carefully optimized assembly code for the -most common inner loops for lots of CPUs, and by a general emphasis on speed -(instead of simplicity or elegance). - -GNU MP is believed to be faster than any other similar library. Its advantage -increases with operand sizes for certain operations, since GNU MP in many -cases has asymptotically faster algorithms. - -GNU MP is free software and may be freely copied on the terms contained in the -files COPYING* (see the manual for information on which license(s) applies to -which components of GNU MP). - - - - OVERVIEW OF GNU MP - -There are four classes of functions in GNU MP. - - 1. Signed integer arithmetic functions (mpz). These functions are intended - to be easy to use, with their regular interface. The associated type is - `mpz_t'. - - 2. Rational arithmetic functions (mpq). For now, just a small set of - functions necessary for basic rational arithmetics. The associated type - is `mpq_t'. - - 3. Floating-point arithmetic functions (mpf). If the C type `double' - doesn't give enough precision for your application, declare your - variables as `mpf_t' instead, set the precision to any number desired, - and call the functions in the mpf class for the arithmetic operations. - - 4. Positive-integer, hard-to-use, very low overhead functions are in the - mpn class. No memory management is performed. The caller must ensure - enough space is available for the results. The set of functions is not - regular, nor is the calling interface. These functions accept input - arguments in the form of pairs consisting of a pointer to the least - significant word, and an integral size telling how many limbs (= words) - the pointer points to. - - Almost all calculations, in the entire package, are made by calling these - low-level functions. - -For more information on how to use GNU MP, please refer to the documentation. -It is composed from the file doc/gmp.texi, and can be displayed on the screen -or printed. How to do that, as well how to build the library, is described in -the INSTALL file in this directory. - - - - REPORTING BUGS - -If you find a bug in the library, please make sure to tell us about it! - -You should first check the GNU MP web pages at https://gmplib.org/, under -"Status of the current release". There will be patches for all known serious -bugs there. - -Report bugs to gmp-bugs@gmplib.org. What information is needed in a useful bug -report is described in the manual. The same address can be used for suggesting -modifications and enhancements. - - - - ----------------- -Local variables: -mode: text -fill-column: 78 -End: diff --git a/src/plugins/e-acsl/contrib/libgmp/acinclude.m4 b/src/plugins/e-acsl/contrib/libgmp/acinclude.m4 deleted file mode 100644 index f6e8940ac005ef3dcfd68b767aa821cf3c5a4733..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/acinclude.m4 +++ /dev/null @@ -1,4022 +0,0 @@ -dnl GMP specific autoconf macros - - -dnl Copyright 2000-2006, 2009, 2011, 2013-2015 Free Software Foundation, Inc. -dnl -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl Some tests use, or must delete, the default compiler output. The -dnl possible filenames are based on what autoconf looks for, namely -dnl -dnl a.out - normal unix style -dnl b.out - i960 systems, including gcc there -dnl a.exe - djgpp -dnl a_out.exe - OpenVMS DEC C called via GNV wrapper (gnv.sourceforge.net) -dnl conftest.exe - various DOS compilers - - -define(IA64_PATTERN, -[[ia64*-*-* | itanium-*-* | itanium2-*-*]]) - -dnl Need to be careful not to match m6811, m6812, m68hc11 and m68hc12, all -dnl of which config.sub accepts. (Though none of which are likely to work -dnl with GMP.) -dnl -define(M68K_PATTERN, -[[m68k-*-* | m68[0-9][0-9][0-9]-*-*]]) - -define(POWERPC64_PATTERN, -[[powerpc64-*-* | powerpc64le-*-* | powerpc620-*-* | powerpc630-*-* | powerpc970-*-* | power[3-9]-*-*]]) - -define(S390_PATTERN, -[[s390-*-* | z900esa-*-* | z990esa-*-* | z9esa-*-* | z10esa-*-* | z196esa-*-*]]) - -define(S390X_PATTERN, -[[s390x-*-* | z900-*-* | z990-*-* | z9-*-* | z10-*-* | z196-*-*]]) - -define(X86_PATTERN, -[[i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-* | viac3*-*-* | geode*-*-* | atom-*-*]]) - -define(X86_64_PATTERN, -[[athlon64-*-* | k8-*-* | k10-*-* | bobcat-*-* | jaguar*-*-* | bulldozer*-*-* | piledriver*-*-* | steamroller*-*-* | excavator*-*-* | pentium4-*-* | atom-*-* | silvermont-*-* | goldmont-*-* | core2-*-* | corei*-*-* | x86_64-*-* | nano-*-* | nehalem*-*-* | westmere*-*-* | sandybridge*-*-* | ivybridge*-*-* | haswell*-*-* | broadwell*-*-* | skylake*-*-* | cabylake*-*-*]]) - -dnl GMP_FAT_SUFFIX(DSTVAR, DIRECTORY) -dnl --------------------------------- -dnl Emit code to set shell variable DSTVAR to the suffix for a fat binary -dnl routine from DIRECTORY. DIRECTORY can be a shell expression like $foo -dnl etc. -dnl -dnl The suffix is directory separators / or \ changed to underscores, and -dnl if there's more than one directory part, then the first is dropped. -dnl -dnl For instance, -dnl -dnl x86 -> x86 -dnl x86/k6 -> k6 -dnl x86/k6/mmx -> k6_mmx - -define(GMP_FAT_SUFFIX, -[[$1=`echo $2 | sed -e '/\//s:^[^/]*/::' -e 's:[\\/]:_:g'`]]) - - -dnl GMP_REMOVE_FROM_LIST(listvar,item) -dnl ---------------------------------- -dnl Emit code to remove any occurrence of ITEM from $LISTVAR. ITEM can be a -dnl shell expression like $foo if desired. - -define(GMP_REMOVE_FROM_LIST, -[remove_from_list_tmp= -for remove_from_list_i in $[][$1]; do - if test $remove_from_list_i = [$2]; then :; - else - remove_from_list_tmp="$remove_from_list_tmp $remove_from_list_i" - fi -done -[$1]=$remove_from_list_tmp -]) - - -dnl GMP_STRIP_PATH(subdir) -dnl ---------------------- -dnl Strip entries */subdir from $path and $fat_path. - -define(GMP_STRIP_PATH, -[GMP_STRIP_PATH_VAR(path, [$1]) -GMP_STRIP_PATH_VAR(fat_path, [$1]) -]) - -define(GMP_STRIP_PATH_VAR, -[tmp_path= -for i in $[][$1]; do - case $i in - */[$2]) ;; - *) tmp_path="$tmp_path $i" ;; - esac -done -[$1]="$tmp_path" -]) - - -dnl GMP_INCLUDE_GMP_H -dnl ----------------- -dnl Expand to the right way to #include gmp-h.in. This must be used -dnl instead of gmp.h, since that file isn't generated until the end of the -dnl configure. -dnl -dnl Dummy value for GMP_LIMB_BITS is enough -dnl for all current configure-time uses of gmp.h. - -define(GMP_INCLUDE_GMP_H, -[[#define __GMP_WITHIN_CONFIGURE 1 /* ignore template stuff */ -#define GMP_NAIL_BITS $GMP_NAIL_BITS -#define GMP_LIMB_BITS 123 -$DEFN_LONG_LONG_LIMB -#include "$srcdir/gmp-h.in"] -]) - - -dnl GMP_HEADER_GETVAL(NAME,FILE) -dnl ---------------------------- -dnl Expand at autoconf time to the value of a "#define NAME" from the given -dnl FILE. The regexps here aren't very rugged, but are enough for gmp. -dnl /dev/null as a parameter prevents a hang if $2 is accidentally omitted. - -define(GMP_HEADER_GETVAL, -[patsubst(patsubst( -esyscmd([grep "^#define $1 " $2 /dev/null 2>/dev/null]), -[^.*$1[ ]+],[]), -[[ - ]*$],[])]) - - -dnl GMP_VERSION -dnl ----------- -dnl The gmp version number, extracted from the #defines in gmp-h.in at -dnl autoconf time. Two digits like 3.0 if patchlevel <= 0, or three digits -dnl like 3.0.1 if patchlevel > 0. - -define(GMP_VERSION, -[GMP_HEADER_GETVAL(__GNU_MP_VERSION,gmp-h.in)[]dnl -.GMP_HEADER_GETVAL(__GNU_MP_VERSION_MINOR,gmp-h.in)[]dnl -.GMP_HEADER_GETVAL(__GNU_MP_VERSION_PATCHLEVEL,gmp-h.in)]) - - -dnl GMP_SUBST_CHECK_FUNCS(func,...) -dnl ------------------------------ -dnl Setup an AC_SUBST of HAVE_FUNC_01 for each argument. - -AC_DEFUN([GMP_SUBST_CHECK_FUNCS], -[m4_if([$1],,, -[_GMP_SUBST_CHECK_FUNCS(ac_cv_func_[$1],HAVE_[]m4_translit([$1],[a-z],[A-Z])_01) -GMP_SUBST_CHECK_FUNCS(m4_shift($@))])]) - -dnl Called: _GMP_SUBST_CHECK_FUNCS(cachevar,substvar) -AC_DEFUN([_GMP_SUBST_CHECK_FUNCS], -[case $[$1] in -yes) AC_SUBST([$2],1) ;; -no) [$2]=0 ;; -esac -]) - - -dnl GMP_SUBST_CHECK_HEADERS(foo.h,...) -dnl ---------------------------------- -dnl Setup an AC_SUBST of HAVE_FOO_H_01 for each argument. - -AC_DEFUN([GMP_SUBST_CHECK_HEADERS], -[m4_if([$1],,, -[_GMP_SUBST_CHECK_HEADERS(ac_cv_header_[]m4_translit([$1],[./],[__]), -HAVE_[]m4_translit([$1],[a-z./],[A-Z__])_01) -GMP_SUBST_CHECK_HEADERS(m4_shift($@))])]) - -dnl Called: _GMP_SUBST_CHECK_HEADERS(cachevar,substvar) -AC_DEFUN([_GMP_SUBST_CHECK_HEADERS], -[case $[$1] in -yes) AC_SUBST([$2],1) ;; -no) [$2]=0 ;; -esac -]) - - -dnl GMP_COMPARE_GE(A1,B1, A2,B2, ...) -dnl --------------------------------- -dnl Compare two version numbers A1.A2.etc and B1.B2.etc. Set -dnl $gmp_compare_ge to yes or no according to the result. The A parts -dnl should be variables, the B parts fixed numbers. As many parts as -dnl desired can be included. An empty string in an A part is taken to be -dnl zero, the B parts should be non-empty and non-zero. -dnl -dnl For example, -dnl -dnl GMP_COMPARE($major,10, $minor,3, $subminor,1) -dnl -dnl would test whether $major.$minor.$subminor is greater than or equal to -dnl 10.3.1. - -AC_DEFUN([GMP_COMPARE_GE], -[gmp_compare_ge=no -GMP_COMPARE_GE_INTERNAL($@) -]) - -AC_DEFUN([GMP_COMPARE_GE_INTERNAL], -[ifelse(len([$3]),0, -[if test -n "$1" && test "$1" -ge $2; then - gmp_compare_ge=yes -fi], -[if test -n "$1"; then - if test "$1" -gt $2; then - gmp_compare_ge=yes - else - if test "$1" -eq $2; then - GMP_COMPARE_GE_INTERNAL(m4_shift(m4_shift($@))) - fi - fi -fi]) -]) - - -dnl GMP_PROG_AR -dnl ----------- -dnl GMP additions to $AR. -dnl -dnl A cross-"ar" may be necessary when cross-compiling since the build -dnl system "ar" might try to interpret the object files to build a symbol -dnl table index, hence the use of AC_CHECK_TOOL. -dnl -dnl A user-selected $AR is always left unchanged. AC_CHECK_TOOL is still -dnl run to get the "checking" message printed though. -dnl -dnl If extra flags are added to AR, then ac_cv_prog_AR and -dnl ac_cv_prog_ac_ct_AR are set too, since libtool (cvs 2003-03-31 at -dnl least) will do an AC_CHECK_TOOL and that will AR from one of those two -dnl cached variables. (ac_cv_prog_AR is used if there's an ac_tool_prefix, -dnl or ac_cv_prog_ac_ct_AR is used otherwise.) FIXME: This is highly -dnl dependent on autoconf internals, perhaps it'd work to put our extra -dnl flags into AR_FLAGS instead. -dnl -dnl $AR_FLAGS is set to "cq" rather than leaving it to libtool "cru". The -dnl latter fails when libtool goes into piecewise mode and is unlucky -dnl enough to have two same-named objects in separate pieces, as happens -dnl for instance to random.o (and others) on vax-dec-ultrix4.5. Naturally -dnl a user-selected $AR_FLAGS is left unchanged. -dnl -dnl For reference, $ARFLAGS is used by automake (1.8) for its ".a" archive -dnl file rules. This doesn't get used by the piecewise linking, so we -dnl leave it at the default "cru". -dnl -dnl FIXME: Libtool 1.5.2 has its own arrangements for "cq", but that version -dnl is broken in other ways. When we can upgrade, remove the forcible -dnl AR_FLAGS=cq. - -AC_DEFUN([GMP_PROG_AR], -[dnl Want to establish $AR before libtool initialization. -AC_BEFORE([$0],[AC_PROG_LIBTOOL]) -gmp_user_AR=$AR -AC_CHECK_TOOL(AR, ar, ar) -if test -z "$gmp_user_AR"; then - eval arflags=\"\$ar${abi1}_flags\" - test -n "$arflags" || eval arflags=\"\$ar${abi2}_flags\" - if test -n "$arflags"; then - AC_MSG_CHECKING([for extra ar flags]) - AR="$AR $arflags" - ac_cv_prog_AR="$AR $arflags" - ac_cv_prog_ac_ct_AR="$AR $arflags" - AC_MSG_RESULT([$arflags]) - fi -fi -if test -z "$AR_FLAGS"; then - AR_FLAGS=cq -fi -]) - - -dnl GMP_PROG_M4 -dnl ----------- -dnl Find a working m4, either in $PATH or likely locations, and setup $M4 -dnl and an AC_SUBST accordingly. If $M4 is already set then it's a user -dnl choice and is accepted with no checks. GMP_PROG_M4 is like -dnl AC_PATH_PROG or AC_CHECK_PROG, but tests each m4 found to see if it's -dnl good enough. -dnl -dnl See mpn/asm-defs.m4 for details on the known bad m4s. - -AC_DEFUN([GMP_PROG_M4], -[AC_ARG_VAR(M4,[m4 macro processor]) -AC_CACHE_CHECK([for suitable m4], - gmp_cv_prog_m4, -[if test -n "$M4"; then - gmp_cv_prog_m4="$M4" -else - cat >conftest.m4 <<\EOF -dnl Must protect this against being expanded during autoconf m4! -dnl Dont put "dnl"s in this as autoconf will flag an error for unexpanded -dnl macros. -[define(dollarhash,``$][#'')ifelse(dollarhash(x),1,`define(t1,Y)', -``bad: $][# not supported (SunOS /usr/bin/m4) -'')ifelse(eval(89),89,`define(t2,Y)', -`bad: eval() doesnt support 8 or 9 in a constant (OpenBSD 2.6 m4) -')ifelse(eval(9,9),10,`define(t3,Y)', -`bad: eval() doesnt support radix in eval (FreeBSD 8.x,9.0,9.1,9.2 m4) -')ifelse(t1`'t2`'t3,YYY,`good -')] -EOF -dnl ' <- balance the quotes for emacs sh-mode - echo "trying m4" >&AC_FD_CC - gmp_tmp_val=`(m4 conftest.m4) 2>&AC_FD_CC` - echo "$gmp_tmp_val" >&AC_FD_CC - if test "$gmp_tmp_val" = good; then - gmp_cv_prog_m4="m4" - else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="$PATH:/usr/5bin" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - echo "trying $ac_dir/m4" >&AC_FD_CC - gmp_tmp_val=`($ac_dir/m4 conftest.m4) 2>&AC_FD_CC` - echo "$gmp_tmp_val" >&AC_FD_CC - if test "$gmp_tmp_val" = good; then - gmp_cv_prog_m4="$ac_dir/m4" - break - fi - done - IFS="$ac_save_ifs" - if test -z "$gmp_cv_prog_m4"; then - AC_MSG_ERROR([No usable m4 in \$PATH or /usr/5bin (see config.log for reasons).]) - fi - fi - rm -f conftest.m4 -fi]) -M4="$gmp_cv_prog_m4" -AC_SUBST(M4) -]) - - -dnl GMP_M4_M4WRAP_SPURIOUS -dnl ---------------------- -dnl Check for spurious output from m4wrap(), as described in mpn/asm-defs.m4. -dnl -dnl The following systems have been seen with the problem. -dnl -dnl - Unicos alpha, but its assembler doesn't seem to mind. -dnl - MacOS X Darwin, its assembler fails. -dnl - NetBSD 1.4.1 m68k, and gas 1.92.3 there gives a warning and ignores -dnl the bad last line since it doesn't have a newline. -dnl - NetBSD 1.4.2 alpha, but its assembler doesn't seem to mind. -dnl - HP-UX ia64. -dnl -dnl Enhancement: Maybe this could be in GMP_PROG_M4, and attempt to prefer -dnl an m4 with a working m4wrap, if it can be found. - -AC_DEFUN([GMP_M4_M4WRAP_SPURIOUS], -[AC_REQUIRE([GMP_PROG_M4]) -AC_CACHE_CHECK([if m4wrap produces spurious output], - gmp_cv_m4_m4wrap_spurious, -[# hide the d-n-l from autoconf's error checking -tmp_d_n_l=d""nl -cat >conftest.m4 <<EOF -[changequote({,})define(x,)m4wrap({x})$tmp_d_n_l] -EOF -echo test input is >&AC_FD_CC -cat conftest.m4 >&AC_FD_CC -tmp_chars=`$M4 conftest.m4 | wc -c` -echo produces $tmp_chars chars output >&AC_FD_CC -rm -f conftest.m4 -if test $tmp_chars = 0; then - gmp_cv_m4_m4wrap_spurious=no -else - gmp_cv_m4_m4wrap_spurious=yes -fi -]) -GMP_DEFINE_RAW(["define(<M4WRAP_SPURIOUS>,<$gmp_cv_m4_m4wrap_spurious>)"]) -]) - - -dnl GMP_PROG_NM -dnl ----------- -dnl GMP additions to libtool AC_PROG_NM. -dnl -dnl Note that if AC_PROG_NM can't find a working nm it still leaves -dnl $NM set to "nm", so $NM can't be assumed to actually work. -dnl -dnl A user-selected $NM is always left unchanged. AC_PROG_NM is still run -dnl to get the "checking" message printed though. -dnl -dnl Perhaps it'd be worthwhile checking that nm works, by running it on an -dnl actual object file. For instance on sparcv9 solaris old versions of -dnl GNU nm don't recognise 64-bit objects. Checking would give a better -dnl error message than just a failure in later tests like GMP_ASM_W32 etc. -dnl -dnl On the other hand it's not really normal autoconf practice to take too -dnl much trouble over detecting a broken set of tools. And libtool doesn't -dnl do anything at all for say ranlib or strip. So for now we're inclined -dnl to just demand that the user provides a coherent environment. - -AC_DEFUN([GMP_PROG_NM], -[dnl Make sure we're the first to call AC_PROG_NM, so our extra flags are -dnl used by everyone. -AC_BEFORE([$0],[AC_PROG_NM]) -gmp_user_NM=$NM -AC_PROG_NM - -# FIXME: When cross compiling (ie. $ac_tool_prefix not empty), libtool -# defaults to plain "nm" if a "${ac_tool_prefix}nm" is not found. In this -# case run it again to try the native "nm", firstly so that likely locations -# are searched, secondly so that -B or -p are added if necessary for BSD -# format. This is necessary for instance on OSF with "./configure -# --build=alphaev5-dec-osf --host=alphaev6-dec-osf". -# -if test -z "$gmp_user_NM" && test -n "$ac_tool_prefix" && test "$NM" = nm; then - $as_unset lt_cv_path_NM - gmp_save_ac_tool_prefix=$ac_tool_prefix - ac_tool_prefix= - NM= - AC_PROG_NM - ac_tool_prefix=$gmp_save_ac_tool_prefix -fi - -if test -z "$gmp_user_NM"; then - eval nmflags=\"\$nm${abi1}_flags\" - test -n "$nmflags" || eval nmflags=\"\$nm${abi2}_flags\" - if test -n "$nmflags"; then - AC_MSG_CHECKING([for extra nm flags]) - NM="$NM $nmflags" - AC_MSG_RESULT([$nmflags]) - fi -fi -]) - - -dnl GMP_PROG_CC_WORKS(cc+cflags,[ACTION-IF-WORKS][,ACTION-IF-NOT-WORKS]) -dnl -------------------------------------------------------------------- -dnl Check if cc+cflags can compile and link. -dnl -dnl This test is designed to be run repeatedly with different cc+cflags -dnl selections, so the result is not cached. -dnl -dnl For a native build, meaning $cross_compiling == no, we require that the -dnl generated program will run. This is the same as AC_PROG_CC does in -dnl _AC_COMPILER_EXEEXT_WORKS, and checking here will ensure we don't pass -dnl a CC/CFLAGS combination that it rejects. -dnl -dnl sparc-*-solaris2.7 can compile ABI=64 but won't run it if the kernel -dnl was booted in 32-bit mode. The effect of requiring the compiler output -dnl will run is that a plain native "./configure" falls back on ABI=32, but -dnl ABI=64 is still available as a cross-compile. -dnl -dnl The various specific problems we try to detect are done in separate -dnl compiles. Although this is probably a bit slower than one test -dnl program, it makes it easy to indicate the problem in AC_MSG_RESULT, -dnl hence giving the user a clue about why we rejected the compiler. - -AC_DEFUN([GMP_PROG_CC_WORKS], -[AC_MSG_CHECKING([compiler $1]) -gmp_prog_cc_works=yes - -# first see a simple "main()" works, then go on to other checks -GMP_PROG_CC_WORKS_PART([$1], []) - -GMP_PROG_CC_WORKS_PART([$1], [function pointer return], -[/* The following provokes an internal error from gcc 2.95.2 -mpowerpc64 - (without -maix64), hence detecting an unusable compiler */ -void *g() { return (void *) 0; } -void *f() { return g(); } -]) - -GMP_PROG_CC_WORKS_PART([$1], [cmov instruction], -[/* The following provokes an invalid instruction syntax from i386 gcc - -march=pentiumpro on Solaris 2.8. The native sun assembler - requires a non-standard syntax for cmov which gcc (as of 2.95.2 at - least) doesn't know. */ -int n; -int cmov () { return (n >= 0 ? n : 0); } -]) - -GMP_PROG_CC_WORKS_PART([$1], [double -> ulong conversion], -[/* The following provokes a linker invocation problem with gcc 3.0.3 - on AIX 4.3 under "-maix64 -mpowerpc64 -mcpu=630". The -mcpu=630 - option causes gcc to incorrectly select the 32-bit libgcc.a, not - the 64-bit one, and consequently it misses out on the __fixunsdfdi - helper (double -> uint64 conversion). */ -double d; -unsigned long gcc303 () { return (unsigned long) d; } -]) - -GMP_PROG_CC_WORKS_PART([$1], [double negation], -[/* The following provokes an error from hppa gcc 2.95 under -mpa-risc-2-0 if - the assembler doesn't know hppa 2.0 instructions. fneg is a 2.0 - instruction, and a negation like this comes out using it. */ -double fneg_data; -unsigned long fneg () { return -fneg_data; } -]) - -GMP_PROG_CC_WORKS_PART([$1], [double -> float conversion], -[/* The following makes gcc 3.3 -march=pentium4 generate an SSE2 xmm insn - (cvtsd2ss) which will provoke an error if the assembler doesn't recognise - those instructions. Not sure how much of the gmp code will come out - wanting sse2, but it's easiest to reject an option we know is bad. */ -double ftod_data; -float ftod () { return (float) ftod_data; } -]) - -GMP_PROG_CC_WORKS_PART([$1], [gnupro alpha ev6 char spilling], -[/* The following provokes an internal compiler error from gcc version - "2.9-gnupro-99r1" under "-O2 -mcpu=ev6", apparently relating to char - values being spilled into floating point registers. The problem doesn't - show up all the time, but has occurred enough in GMP for us to reject - this compiler+flags. */ -#include <string.h> /* for memcpy */ -struct try_t -{ - char dst[2]; - char size; - long d0, d1, d2, d3, d4, d5, d6; - char overlap; -}; -struct try_t param[6]; -int -param_init () -{ - struct try_t *p; - memcpy (p, ¶m[ 2 ], sizeof (*p)); - memcpy (p, ¶m[ 2 ], sizeof (*p)); - p->size = 2; - memcpy (p, ¶m[ 1 ], sizeof (*p)); - p->dst[0] = 1; - p->overlap = 2; - memcpy (p, ¶m[ 3 ], sizeof (*p)); - p->dst[0] = 1; - p->overlap = 8; - memcpy (p, ¶m[ 4 ], sizeof (*p)); - memcpy (p, ¶m[ 4 ], sizeof (*p)); - p->overlap = 8; - memcpy (p, ¶m[ 5 ], sizeof (*p)); - memcpy (p, ¶m[ 5 ], sizeof (*p)); - memcpy (p, ¶m[ 5 ], sizeof (*p)); - return 0; -} -]) - -# __builtin_alloca is not available everywhere, check it exists before -# seeing that it works -GMP_PROG_CC_WORKS_PART_TEST([$1],[__builtin_alloca availability], -[int k; int foo () { __builtin_alloca (k); }], - [GMP_PROG_CC_WORKS_PART([$1], [alloca array], -[/* The following provokes an internal compiler error from Itanium HP-UX cc - under +O2 or higher. We use this sort of code in mpn/generic/mul_fft.c. */ -int k; -int foo () -{ - int i, **a; - a = __builtin_alloca (k); - for (i = 0; i <= k; i++) - a[i] = __builtin_alloca (1 << i); -} -])]) - -GMP_PROG_CC_WORKS_PART([$1], [abs int -> double conversion], -[/* The following provokes an internal error from the assembler on - power2-ibm-aix4.3.1.0. gcc -mrios2 compiles to nabs+fcirz, and this - results in "Internal error related to the source program domain". - - For reference it seems to be the combination of nabs+fcirz which is bad, - not either alone. This sort of thing occurs in mpz/get_str.c with the - way double chars_per_bit_exactly is applied in MPN_SIZEINBASE. Perhaps - if that code changes to a scaled-integer style then we won't need this - test. */ - -double fp[1]; -int x; -int f () -{ - int a; - a = (x >= 0 ? x : -x); - return a * fp[0]; -} -]) - -GMP_PROG_CC_WORKS_PART([$1], [long long reliability test 1], -[/* The following provokes a segfault in the compiler on powerpc-apple-darwin. - Extracted from tests/mpn/t-iord_u.c. Causes Apple's gcc 3.3 build 1640 and - 1666 to segfault with e.g., -O2 -mpowerpc64. */ - -#if defined (__GNUC__) && ! defined (__cplusplus) -typedef unsigned long long t1;typedef t1*t2; -void g(){} -void h(){} -static __inline__ t1 e(t2 rp,t2 up,int n,t1 v0) -{t1 c,x,r;int i;if(v0){c=1;for(i=1;i<n;i++){x=up[i];r=x+1;rp[i]=r;}}return c;} -void f(){static const struct{t1 n;t1 src[9];t1 want[9];}d[]={{1,{0},{1}},};t1 got[9];int i; -for(i=0;i<1;i++){if(e(got,got,9,d[i].n)==0)h();g(i,d[i].src,d[i].n,got,d[i].want,9);if(d[i].n)h();}} -#else -int dummy; -#endif -]) - -GMP_PROG_CC_WORKS_PART([$1], [long long reliability test 2], -[/* The following provokes an internal compiler error on powerpc-apple-darwin. - Extracted from mpz/cfdiv_q_2exp.c. Causes Apple's gcc 3.3 build 1640 and - 1666 to get an ICE with -O1 -mpowerpc64. */ - -#if defined (__GNUC__) && ! defined (__cplusplus) -int g(); -void f(int u){int i;long long x;x=u?~0:0;if(x)for(i=0;i<9;i++);x&=g();if(x)g();} -int g(){return 0;} -#else -int dummy; -#endif -]) - -GMP_PROG_CC_WORKS_PART([$1], [freebsd hacked gcc], -[/* Provokes an ICE on i386-freebsd with the FreeBSD-hacked gcc, under - -O2 -march=amdfam10. We call helper functions here "open" and "close" in - order for linking to succeed. */ - -#if defined (__GNUC__) && ! defined (__cplusplus) -int open(int*,int*,int);void*close(int);void g(int*rp,int*up,int un){ -__builtin_expect(un<=0x7f00,1)?__builtin_alloca(un):close(un);if(__builtin_clzl -(up[un])){open(rp,up,un);while(1){if(rp[un-1]!=0)break;un--;}}} -#else -int dummy; -#endif -]) - -GMP_PROG_CC_WORKS_PART_MAIN([$1], [mpn_lshift_com optimization], -[/* The following is mis-compiled by HP ia-64 cc version - cc: HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003] - under "cc +O3", both in +DD32 and +DD64 modes. The mpn_lshift_com gets - inlined and its return value somehow botched to be 0 instead of 1. This - arises in the real mpn_lshift_com in mul_fft.c. A lower optimization - level, like +O2 seems ok. This code needs to be run to show the problem, - but that's fine, the offending cc is a native-only compiler so we don't - have to worry about cross compiling. */ - -#if ! defined (__cplusplus) -unsigned long -lshift_com (rp, up, n, cnt) - unsigned long *rp; - unsigned long *up; - long n; - unsigned cnt; -{ - unsigned long retval, high_limb, low_limb; - unsigned tnc; - long i; - tnc = 8 * sizeof (unsigned long) - cnt; - low_limb = *up++; - retval = low_limb >> tnc; - high_limb = low_limb << cnt; - for (i = n - 1; i != 0; i--) - { - low_limb = *up++; - *rp++ = ~(high_limb | (low_limb >> tnc)); - high_limb = low_limb << cnt; - } - return retval; -} -int -main () -{ - unsigned long cy, rp[2], up[2]; - up[0] = ~ 0L; - up[1] = 0; - cy = lshift_com (rp, up, 2L, 1); - if (cy != 1L) - return 1; - return 0; -} -#else -int -main () -{ - return 0; -} -#endif -]) - -GMP_PROG_CC_WORKS_PART_MAIN([$1], [mpn_lshift_com optimization 2], -[/* The following is mis-compiled by Intel ia-64 icc version 1.8 under - "icc -O3", After several calls, the function writes partial garbage to - the result vector. Perhaps relates to the chk.a.nc insn. This code needs - to be run to show the problem, but that's fine, the offending cc is a - native-only compiler so we don't have to worry about cross compiling. */ - -#if ! defined (__cplusplus) -#include <stdlib.h> -void -lshift_com (rp, up, n, cnt) - unsigned long *rp; - unsigned long *up; - long n; - unsigned cnt; -{ - unsigned long high_limb, low_limb; - unsigned tnc; - long i; - up += n; - rp += n; - tnc = 8 * sizeof (unsigned long) - cnt; - low_limb = *--up; - high_limb = low_limb << cnt; - for (i = n - 1; i != 0; i--) - { - low_limb = *--up; - *--rp = ~(high_limb | (low_limb >> tnc)); - high_limb = low_limb << cnt; - } - *--rp = ~high_limb; -} -int -main () -{ - unsigned long *r, *r2; - unsigned long a[88 + 1]; - long i; - for (i = 0; i < 88 + 1; i++) - a[i] = ~0L; - r = malloc (10000 * sizeof (unsigned long)); - r2 = r; - for (i = 0; i < 528; i += 22) - { - lshift_com (r2, a, - i / (8 * sizeof (unsigned long)) + 1, - i % (8 * sizeof (unsigned long))); - r2 += 88 + 1; - } - if (r[2048] != 0 || r[2049] != 0 || r[2050] != 0 || r[2051] != 0 || - r[2052] != 0 || r[2053] != 0 || r[2054] != 0) - abort (); - return 0; -} -#else -int -main () -{ - return 0; -} -#endif -]) - - -# A certain _GLOBAL_OFFSET_TABLE_ problem in past versions of gas, tickled -# by recent versions of gcc. -# -if test "$gmp_prog_cc_works" = yes; then - case $host in - X86_PATTERN) - # this problem only arises in PIC code, so don't need to test when - # --disable-shared. We don't necessarily have $enable_shared set to - # yes at this point, it will still be unset for the default (which is - # yes); hence the use of "!= no". - if test "$enable_shared" != no; then - GMP_PROG_CC_X86_GOT_EAX_EMITTED([$1], - [GMP_ASM_X86_GOT_EAX_OK([$1],, - [gmp_prog_cc_works="no, bad gas GOT with eax"])]) - fi - ;; - esac -fi - -AC_MSG_RESULT($gmp_prog_cc_works) -case $gmp_prog_cc_works in - yes) - [$2] - ;; - *) - [$3] - ;; -esac -]) - -dnl Called: GMP_PROG_CC_WORKS_PART(CC+CFLAGS,FAIL-MESSAGE [,CODE]) -dnl A dummy main() is appended to the CODE given. -dnl -AC_DEFUN([GMP_PROG_CC_WORKS_PART], -[GMP_PROG_CC_WORKS_PART_MAIN([$1],[$2], -[$3] -[int main () { return 0; }]) -]) - -dnl Called: GMP_PROG_CC_WORKS_PART_MAIN(CC+CFLAGS,FAIL-MESSAGE,CODE) -dnl CODE must include a main(). -dnl -AC_DEFUN([GMP_PROG_CC_WORKS_PART_MAIN], -[GMP_PROG_CC_WORKS_PART_TEST([$1],[$2],[$3], - [], - gmp_prog_cc_works="no[]m4_if([$2],,,[[, ]])[$2]", - gmp_prog_cc_works="no[]m4_if([$2],,,[[, ]])[$2][[, program does not run]]") -]) - -dnl Called: GMP_PROG_CC_WORKS_PART_TEST(CC+CFLAGS,TITLE,[CODE], -dnl [ACTION-GOOD],[ACTION-BAD][ACTION-NORUN]) -dnl -AC_DEFUN([GMP_PROG_CC_WORKS_PART_TEST], -[if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -[$3] -EOF - echo "Test compile: [$2]" >&AC_FD_CC - gmp_compile="$1 conftest.c >&AC_FD_CC" - if AC_TRY_EVAL(gmp_compile); then - cc_works_part=yes - if test "$cross_compiling" = no; then - if AC_TRY_COMMAND([./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest]); then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&AC_FD_CC - cat conftest.c >&AC_FD_CC - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - $4 - ;; - no) - $5 - ;; - norun) - $6 - ;; - esac -fi -]) - - -dnl GMP_PROG_CC_WORKS_LONGLONG(cc+cflags,[ACTION-YES][,ACTION-NO]) -dnl -------------------------------------------------------------- -dnl Check that cc+cflags accepts "long long". -dnl -dnl This test is designed to be run repeatedly with different cc+cflags -dnl selections, so the result is not cached. - -AC_DEFUN([GMP_PROG_CC_WORKS_LONGLONG], -[AC_MSG_CHECKING([compiler $1 has long long]) -cat >conftest.c <<EOF -long long foo; -long long bar () { return foo; } -int main () { return 0; } -EOF -gmp_prog_cc_works=no -gmp_compile="$1 -c conftest.c >&AC_FD_CC" -if AC_TRY_EVAL(gmp_compile); then - gmp_prog_cc_works=yes -else - echo "failed program was:" >&AC_FD_CC - cat conftest.c >&AC_FD_CC -fi -rm -f conftest* a.out b.out a.exe a_out.exe -AC_MSG_RESULT($gmp_prog_cc_works) -if test $gmp_prog_cc_works = yes; then - ifelse([$2],,:,[$2]) -else - ifelse([$3],,:,[$3]) -fi -]) - - -dnl GMP_C_TEST_SIZEOF(cc/cflags,test,[ACTION-GOOD][,ACTION-BAD]) -dnl ------------------------------------------------------------ -dnl The given cc/cflags compiler is run to check the size of a type -dnl specified by the "test" argument. "test" can either be a string, or a -dnl variable like $foo. The value should be for instance "sizeof-long-4", -dnl to test that sizeof(long)==4. -dnl -dnl This test is designed to be run for different compiler and/or flags -dnl combinations, so the result is not cached. -dnl -dnl The idea for making an array that has a negative size if the desired -dnl condition test is false comes from autoconf AC_CHECK_SIZEOF. The cast -dnl to "long" in the array dimension also follows autoconf, apparently it's -dnl a workaround for a HP compiler bug. - -AC_DEFUN([GMP_C_TEST_SIZEOF], -[echo "configure: testlist $2" >&AC_FD_CC -[gmp_sizeof_type=`echo "$2" | sed 's/sizeof-\([a-z]*\).*/\1/'`] -[gmp_sizeof_want=`echo "$2" | sed 's/sizeof-[a-z]*-\([0-9]*\).*/\1/'`] -AC_MSG_CHECKING([compiler $1 has sizeof($gmp_sizeof_type)==$gmp_sizeof_want]) -cat >conftest.c <<EOF -[int -main () -{ - static int test_array [1 - 2 * (long) (sizeof ($gmp_sizeof_type) != $gmp_sizeof_want)]; - test_array[0] = 0; - return 0; -}] -EOF -gmp_c_testlist_sizeof=no -gmp_compile="$1 -c conftest.c >&AC_FD_CC" -if AC_TRY_EVAL(gmp_compile); then - gmp_c_testlist_sizeof=yes -fi -rm -f conftest* -AC_MSG_RESULT($gmp_c_testlist_sizeof) -if test $gmp_c_testlist_sizeof = yes; then - ifelse([$3],,:,[$3]) -else - ifelse([$4],,:,[$4]) -fi -]) - - -dnl GMP_PROG_CC_IS_GNU(CC,[ACTIONS-IF-YES][,ACTIONS-IF-NO]) -dnl ------------------------------------------------------- -dnl Determine whether the given compiler is GNU C. -dnl -dnl This test is the same as autoconf _AC_LANG_COMPILER_GNU, but doesn't -dnl cache the result. The same "ifndef" style test is used, to avoid -dnl problems with syntax checking cpp's used on NeXT and Apple systems. - -AC_DEFUN([GMP_PROG_CC_IS_GNU], -[cat >conftest.c <<EOF -#if ! defined (__GNUC__) || defined (__INTEL_COMPILER) - choke me -#endif -EOF -gmp_compile="$1 -c conftest.c >&AC_FD_CC" -if AC_TRY_EVAL(gmp_compile); then - rm -f conftest* - AC_MSG_CHECKING([whether $1 is gcc]) - AC_MSG_RESULT(yes) - ifelse([$2],,:,[$2]) -else - rm -f conftest* - ifelse([$3],,:,[$3]) -fi -]) - - -dnl GMP_PROG_CC_IS_XLC(CC,[ACTIONS-IF-YES][,ACTIONS-IF-NO]) -dnl ------------------------------------------------------- -dnl Determine whether the given compiler is IBM xlc (on AIX). -dnl -dnl There doesn't seem to be a preprocessor symbol to test for this, or if -dnl there is one then it's well hidden in xlc 3.1 on AIX 4.3, so just grep -dnl the man page printed when xlc is invoked with no arguments. - -AC_DEFUN([GMP_PROG_CC_IS_XLC], -[gmp_command="$1 2>&1 | grep xlc >/dev/null" -if AC_TRY_EVAL(gmp_command); then - AC_MSG_CHECKING([whether $1 is xlc]) - AC_MSG_RESULT(yes) - ifelse([$2],,:,[$2]) -else - ifelse([$3],,:,[$3]) -fi -]) - - -dnl GMP_PROG_CC_X86_GOT_EAX_EMITTED(CC+CFLAGS, [ACTION-YES] [, ACTION-NO]) -dnl ---------------------------------------------------------------------- -dnl Determine whether CC+CFLAGS emits instructions using %eax with -dnl _GLOBAL_OFFSET_TABLE_. This test is for use on x86 systems. -dnl -dnl Recent versions of gcc will use %eax for the GOT in leaf functions, for -dnl instance gcc 3.3.3 with -O3. This avoids having to save and restore -dnl %ebx which otherwise usually holds the GOT, and is what gcc used in the -dnl past. -dnl -dnl %ecx and %edx are also candidates for this sort of optimization, and -dnl are used under lesser optimization levels, like -O2 in 3.3.3. FIXME: -dnl It's not quite clear what the conditions for using %eax are, we might -dnl need more test code to provoke it. -dnl -dnl The motivation for this test is that past versions of gas have bugs -dnl affecting this usage, see GMP_ASM_X86_GOT_EAX_OK. -dnl -dnl This test is not specific to gcc, other compilers might emit %eax GOT -dnl insns like this, though we've not investigated that. -dnl -dnl This is for use by compiler probing in GMP_PROG_CC_WORKS, so we doesn't -dnl cache the result. -dnl -dnl -fPIC is hard coded here, because this test is for use before libtool -dnl has established the pic options. It's right for gcc, but perhaps not -dnl other compilers. - -AC_DEFUN([GMP_PROG_CC_X86_GOT_EAX_EMITTED], -[echo "Testing gcc GOT with eax emitted" >&AC_FD_CC -cat >conftest.c <<\EOF -[int foo; -int bar () { return foo; } -]EOF -tmp_got_emitted=no -gmp_compile="$1 -fPIC -S conftest.c >&AC_FD_CC 2>&1" -if AC_TRY_EVAL(gmp_compile); then - if grep "addl.*_GLOBAL_OFFSET_TABLE_.*eax" conftest.s >/dev/null; then - tmp_got_emitted=yes - fi -fi -rm -f conftest.* -echo "Result: $tmp_got_emitted" >&AC_FD_CC -if test "$tmp_got_emitted" = yes; then - ifelse([$2],,:,[$2]) -else - ifelse([$3],,:,[$3]) -fi -]) - - -dnl GMP_HPC_HPPA_2_0(cc,[ACTION-IF-GOOD][,ACTION-IF-BAD]) -dnl --------------------------------------------------------- -dnl Find out whether a HP compiler is good enough to generate hppa 2.0. -dnl -dnl This test might be repeated for different compilers, so the result is -dnl not cached. - -AC_DEFUN([GMP_HPC_HPPA_2_0], -[AC_MSG_CHECKING([whether HP compiler $1 is good for 64-bits]) -# Bad compiler output: -# ccom: HP92453-01 G.10.32.05 HP C Compiler -# Good compiler output: -# ccom: HP92453-01 A.10.32.30 HP C Compiler -# Let A.10.32.30 or higher be ok. -echo >conftest.c -gmp_tmp_vs=`$1 $2 -V -c -o conftest.$OBJEXT conftest.c 2>&1 | grep "^ccom:"` -echo "Version string: $gmp_tmp_vs" >&AC_FD_CC -rm conftest* -gmp_tmp_v1=`echo $gmp_tmp_vs | sed 's/.* .\.\([[0-9]]*\).*/\1/'` -gmp_tmp_v2=`echo $gmp_tmp_vs | sed 's/.* .\..*\.\(.*\)\..* HP C.*/\1/'` -gmp_tmp_v3=`echo $gmp_tmp_vs | sed 's/.* .\..*\..*\.\(.*\) HP C.*/\1/'` -echo "Version number: $gmp_tmp_v1.$gmp_tmp_v2.$gmp_tmp_v3" >&AC_FD_CC -if test -z "$gmp_tmp_v1"; then - gmp_hpc_64bit=not-applicable -else - GMP_COMPARE_GE($gmp_tmp_v1, 10, $gmp_tmp_v2, 32, $gmp_tmp_v3, 30) - gmp_hpc_64bit=$gmp_compare_ge -fi -AC_MSG_RESULT($gmp_hpc_64bit) -if test $gmp_hpc_64bit = yes; then - ifelse([$2],,:,[$2]) -else - ifelse([$3],,:,[$3]) -fi -]) - - -dnl GMP_GCC_ARM_UMODSI(CC,[ACTIONS-IF-GOOD][,ACTIONS-IF-BAD]) -dnl --------------------------------------------------------- -dnl gcc 2.95.3 and earlier on arm has a bug in the libgcc __umodsi routine -dnl making "%" give wrong results for some operands, eg. "0x90000000 % 3". -dnl We're hoping it'll be fixed in 2.95.4, and we know it'll be fixed in -dnl gcc 3. -dnl -dnl There's only a couple of places gmp cares about this, one is the -dnl size==1 case in mpn/generic/mode1o.c, and this shows up in -dnl tests/mpz/t-jac.c as a wrong result from mpz_kronecker_ui. - -AC_DEFUN([GMP_GCC_ARM_UMODSI], -[AC_MSG_CHECKING([whether ARM gcc unsigned division works]) -tmp_version=`$1 --version` -echo "$tmp_version" >&AC_FD_CC -case $tmp_version in - [2.95 | 2.95.[123]]) - ifelse([$3],,:,[$3]) - gmp_gcc_arm_umodsi_result=["no, gcc 2.95.[0123]"] ;; - *) - ifelse([$2],,:,[$2]) - gmp_gcc_arm_umodsi_result=yes ;; -esac -AC_MSG_RESULT([$gmp_gcc_arm_umodsi_result]) -]) - - -dnl GMP_GCC_MIPS_O32(gcc,[actions-yes][,[actions-no]]) -dnl ------------------------------------------------- -dnl Test whether gcc supports o32. -dnl -dnl gcc 2.7.2.2 only does o32, and doesn't accept -mabi=32. -dnl -dnl gcc 2.95 accepts -mabi=32 but it only works on irix5, on irix6 it gives -dnl "cc1: The -mabi=32 support does not work yet". - -AC_DEFUN([GMP_GCC_MIPS_O32], -[AC_MSG_CHECKING([whether gcc supports o32]) -echo 'int x;' >conftest.c -echo "$1 -mabi=32 -c conftest.c" >&AC_FD_CC -if $1 -mabi=32 -c conftest.c >conftest.out 2>&1; then - result=yes -else - cat conftest.out >&AC_FD_CC - if grep "cc1: Invalid option \`abi=32'" conftest.out >/dev/null; then - result=yes - else - result=no - fi -fi -rm -f conftest.* -AC_MSG_RESULT($result) -if test $result = yes; then - ifelse([$2],,:,[$2]) -else - ifelse([$3],,:,[$3]) -fi -]) - - -dnl GMP_GCC_NO_CPP_PRECOMP(CCBASE,CC,CFLAGS,[ACTIONS-YES][,ACTIONS-NO]) -dnl ------------------------------------------------------------------- -dnl Check whether -no-cpp-precomp should be used on this compiler, and -dnl execute the corresponding ACTIONS-YES or ACTIONS-NO. -dnl -dnl -no-cpp-precomp is only meant for Apple's hacked version of gcc found -dnl on powerpc*-*-darwin*, but we can give it a try on any gcc. Normal gcc -dnl (as of 3.0 at least) only gives a warning, not an actual error, and we -dnl watch for that and decide against the option in that case, to avoid -dnl confusing the user. - -AC_DEFUN([GMP_GCC_NO_CPP_PRECOMP], -[if test "$ccbase" = gcc; then - AC_MSG_CHECKING([compiler $2 $3 -no-cpp-precomp]) - result=no - cat >conftest.c <<EOF -int main () { return 0; } -EOF - gmp_compile="$2 $3 -no-cpp-precomp conftest.c >conftest.out 2>&1" - if AC_TRY_EVAL(gmp_compile); then - if grep "unrecognized option.*-no-cpp-precomp" conftest.out >/dev/null; then : ; - else - result=yes - fi - fi - cat conftest.out >&AC_FD_CC - rm -f conftest* a.out b.out a.exe a_out.exe - AC_MSG_RESULT($result) - if test "$result" = yes; then - ifelse([$4],,:,[$4]) - else - ifelse([$5],,:,[$5]) - fi -fi -]) - - -dnl GMP_GCC_PENTIUM4_SSE2(CC+CFLAGS,[ACTION-IF-YES][,ACTION-IF-NO]) -dnl --------------------------------------------------------------- -dnl Determine whether gcc CC+CFLAGS is a good enough version for -dnl -march=pentium4 with sse2. -dnl -dnl Gcc 3.2.1 was seen generating incorrect code for raw double -> int -dnl conversions through a union. We believe the problem is in all 3.1 and -dnl 3.2 versions, but that it's fixed in 3.3. - -AC_DEFUN([GMP_GCC_PENTIUM4_SSE2], -[AC_MSG_CHECKING([whether gcc is good for sse2]) -case `$1 -dumpversion` in - [3.[012] | 3.[012].*]) result=no ;; - *) result=yes ;; -esac -AC_MSG_RESULT($result) -if test "$result" = yes; then - ifelse([$2],,:,[$2]) -else - ifelse([$3],,:,[$3]) -fi -]) - - -dnl GMP_GCC_WA_MCPU(CC+CFLAGS, NEWFLAG [,ACTION-YES [,ACTION-NO]]) -dnl -------------------------------------------------------------- -dnl Check whether gcc (or gas rather) accepts a flag like "-Wa,-mev67". -dnl -dnl Gas doesn't give an error for an unknown cpu, it only prints a warning -dnl like "Warning: Unknown CPU identifier `ev78'". -dnl -dnl This is intended for use on alpha, since only recent versions of gas -dnl accept -mev67, but there's nothing here that's alpha specific. - -AC_DEFUN([GMP_GCC_WA_MCPU], -[AC_MSG_CHECKING([assembler $1 $2]) -result=no -cat >conftest.c <<EOF -int main () {} -EOF -gmp_compile="$1 $2 -c conftest.c >conftest.out 2>&1" -if AC_TRY_EVAL(gmp_compile); then - if grep "Unknown CPU identifier" conftest.out >/dev/null; then : ; - else - result=yes - fi -fi -cat conftest.out >&AC_FD_CC -rm -f conftest* -AC_MSG_RESULT($result) -if test "$result" = yes; then - ifelse([$3],,:,[$3]) -else - ifelse([$4],,:,[$4]) -fi -]) - - -dnl GMP_GCC_WA_OLDAS(CC+CFLAGS [,ACTION-YES [,ACTION-NO]]) -dnl ------------------------------------------------------ -dnl Check whether gcc should be run with "-Wa,-oldas". -dnl -dnl On systems alpha*-*-osf* (or maybe just osf5), apparently there's a -dnl newish Compaq "as" which doesn't work with the gcc mips-tfile. -dnl Compiling an empty file with "gcc -c foo.c" produces for instance -dnl -dnl mips-tfile, /tmp/ccaqUNnF.s:7 Segmentation fault -dnl -dnl The fix is to pass "-oldas" to that assembler, as noted by -dnl -dnl http://gcc.gnu.org/install/specific.html#alpha*-dec-osf* -dnl -dnl The test here tries to compile an empty file, and if that fails but -dnl adding -Wa,-oldas makes it succeed, then that flag is considered -dnl necessary. -dnl -dnl We look for the failing case specifically, since it may not be a good -dnl idea to use -Wa,-oldas in other circumstances. For instance gas takes -dnl "-oldas" to mean the "-o" option and will write a file called "ldas" as -dnl its output. Normally gcc puts its own "-o" after any -Wa options, so -dnl -oldas ends up being harmless, but clearly that's only through good -dnl luck. -dnl -dnl This macro is designed for use while probing for a good compiler, and -dnl so doesn't cache it's result. - -AC_DEFUN([GMP_GCC_WA_OLDAS], -[AC_MSG_CHECKING([for $1 -Wa,-oldas]) -result=no -cat >conftest.c <<EOF -EOF -echo "with empty conftest.c" >&AC_FD_CC -gmp_compile="$1 -c conftest.c >&AC_FD_CC 2>&1" -if AC_TRY_EVAL(gmp_compile); then : ; -else - # empty fails - gmp_compile="$1 -Wa,-oldas -c conftest.c >&AC_FD_CC 2>&1" - if AC_TRY_EVAL(gmp_compile); then - # but with -Wa,-oldas it works - result=yes - fi -fi -rm -f conftest* -AC_MSG_RESULT($result) -if test "$result" = yes; then - ifelse([$2],,:,[$2]) -else - ifelse([$3],,:,[$3]) -fi -]) - - -dnl GMP_OS_X86_XMM(CC+CFLAGS,[ACTION-IF-YES][,ACTION-IF-NO]) -dnl -------------------------------------------------------- -dnl Determine whether the operating system supports XMM registers. -dnl -dnl If build==host then a test program is run, executing an SSE2 -dnl instruction using an XMM register. This will give a SIGILL if the -dnl system hasn't set the OSFXSR bit in CR4 to say it knows it must use -dnl fxsave/fxrestor in a context switch (to save xmm registers). -dnl -dnl If build!=host, we can fallback on: -dnl -dnl - FreeBSD version 4 is the first supporting xmm. -dnl -dnl - Linux kernel 2.4 might be the first stable series supporting xmm -dnl (not sure). But there's no version number in the GNU/Linux -dnl config tuple to test anyway. -dnl -dnl The default is to allow xmm. This might seem rash, but it's likely -dnl most systems know xmm by now, so this will normally be what's wanted. -dnl And cross compiling is a bit hairy anyway, so hopefully anyone doing it -dnl will be smart enough to know what to do. -dnl -dnl In the test program, .text and .globl are hard coded because this macro -dnl is wanted before GMP_ASM_TEXT and GMP_ASM_GLOBL are run. A .byte -dnl sequence is used (for xorps %xmm0, %xmm0) to make us independent of -dnl tests for whether the assembler supports sse2/xmm. Obviously we need -dnl both assembler and OS support, but this means we don't force the order -dnl in which we test. -dnl -dnl FIXME: Maybe we should use $CCAS to assemble, if it's set. (Would -dnl still want $CC/$CFLAGS for the link.) But this test is used before -dnl AC_PROG_CC sets $OBJEXT, so we'd need to check for various object file -dnl suffixes ourselves. - -AC_DEFUN([GMP_OS_X86_XMM], -[AC_CACHE_CHECK([whether the operating system supports XMM registers], - gmp_cv_os_x86_xmm, -[if test "$build" = "$host"; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.s <<EOF - .text -main: -_main: - .globl main - .globl _main - .byte 0x0f, 0x57, 0xc0 - xorl %eax, %eax - ret -EOF - gmp_compile="$1 conftest.s -o conftest >&AC_FD_CC" - if AC_TRY_EVAL(gmp_compile); then - if AC_TRY_COMMAND([./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest]); then - gmp_cv_os_x86_xmm=yes - else - gmp_cv_os_x86_xmm=no - fi - else - AC_MSG_WARN([Oops, cannot compile test program]) - fi - rm -f conftest* -fi - -if test -z "$gmp_cv_os_x86_xmm"; then - case $host_os in - [freebsd[123] | freebsd[123].*]) - gmp_cv_os_x86_xmm=no ;; - freebsd*) - gmp_cv_os_x86_xmm=yes ;; - *) - gmp_cv_os_x86_xmm=probably ;; - esac -fi -]) - -if test "$gmp_cv_os_x86_xmm" = probably; then - AC_MSG_WARN([Not certain of OS support for xmm when cross compiling.]) - AC_MSG_WARN([Will assume it's ok, expect a SIGILL if this is wrong.]) -fi - -case $gmp_cv_os_x86_xmm in -no) - $3 - ;; -*) - $2 - ;; -esac -]) - - -dnl GMP_CRAY_HOST_TYPES(C90/T90-IEEE, C90/T90-CFP, J90/SV1) -dnl ------------------------------------------------------- -dnl Execute the actions in the arguments on the respective Cray vector -dnl systems. For other hosts, do nothing. -dnl -dnl This macro should be used after the C compiler has been chosen, since -dnl on c90 and t90 we ask the compiler whether we're in IEEE or CFP float -dnl mode. -dnl -dnl This code is in a macro so that any AC_REQUIRE pre-requisites of -dnl AC_EGREP_CPP will be expanded at the top-level, ie. for all hosts not -dnl merely c90 and t90. In autoconf 2.57 for instance this means -dnl AC_PROG_EGREP, which is needed by various other macros. - -AC_DEFUN([GMP_CRAY_OPTIONS], -[case $host_cpu in - c90 | t90) - AC_EGREP_CPP(yes, -[#ifdef _CRAYIEEE -yes -#endif], - [$1], - [$2]) - ;; - j90 | sv1) - [$3] - ;; -esac -]) - - -dnl GMP_HPPA_LEVEL_20(cc/cflags [, ACTION-GOOD [,ACTION-BAD]]) -dnl ---------------------------------------------------------- -dnl Check that the given cc/cflags accepts HPPA 2.0n assembler code. -dnl -dnl Old versions of gas don't know 2.0 instructions. It rejects ".level -dnl 2.0" for a start, so just test that. -dnl -dnl This test is designed to be run for various different compiler and -dnl flags combinations, and hence doesn't cache its result. - -AC_DEFUN([GMP_HPPA_LEVEL_20], -[AC_MSG_CHECKING([$1 assembler knows hppa 2.0]) -result=no -cat >conftest.s <<EOF - .level 2.0 -EOF -gmp_compile="$1 -c conftest.s >&AC_FD_CC 2>&1" -if AC_TRY_EVAL(gmp_compile); then - result=yes -else - echo "failed program was" >&AC_FD_CC - cat conftest.s >&AC_FD_CC -fi -rm -f conftest* -AC_MSG_RESULT($result) -if test "$result" = yes; then - ifelse([$2],,:,[$2]) -else - ifelse([$3],,:,[$3]) -fi -]) - - -dnl GMP_PROG_CXX_WORKS(cxx/cxxflags [, ACTION-YES [,ACTION-NO]]) -dnl ------------------------------------------------------------ -dnl Check whether cxx/cxxflags can compile and link. -dnl -dnl This test is designed to be run repeatedly with different cxx/cxxflags -dnl selections, so the result is not cached. -dnl -dnl For a native build, we insist on being able to run the program, so as -dnl to detect any problems with the standard C++ library. During -dnl development various systems with broken or incomplete C++ installations -dnl were seen. -dnl -dnl The various features and problems we try to detect are done in separate -dnl compiles. Although this is probably a bit slower than one test -dnl program, it makes it easy to indicate the problem in AC_MSG_RESULT, -dnl hence giving the user a clue about why we rejected the compiler. - -AC_DEFUN([GMP_PROG_CXX_WORKS], -[AC_MSG_CHECKING([C++ compiler $1]) -gmp_prog_cxx_works=yes - -# start with a plain "main()", then go on to further checks -GMP_PROG_CXX_WORKS_PART([$1], []) - -GMP_PROG_CXX_WORKS_PART([$1], [namespace], -[namespace foo { } -using namespace foo; -]) - -# GMP requires the standard C++ iostream classes -GMP_PROG_CXX_WORKS_PART([$1], [std iostream], -[/* This test rejects g++ 2.7.2 which doesn't have <iostream>, only a - pre-standard iostream.h. */ -#include <iostream> - -/* This test rejects OSF 5.1 Compaq C++ in its default pre-standard iostream - mode, since that mode puts cout in the global namespace, not "std". */ -void someoutput (void) { std::cout << 123; } -]) - -AC_MSG_RESULT($gmp_prog_cxx_works) -case $gmp_prog_cxx_works in - yes) - [$2] - ;; - *) - [$3] - ;; -esac -]) - -dnl Called: GMP_PROG_CXX_WORKS_PART(CXX+CXXFLAGS, FAIL-MESSAGE [,CODE]) -dnl -AC_DEFUN([GMP_PROG_CXX_WORKS_PART], -[if test "$gmp_prog_cxx_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.cc <<EOF -[$3] -int main (void) { return 0; } -EOF - echo "Test compile: [$2]" >&AC_FD_CC - gmp_cxxcompile="$1 conftest.cc >&AC_FD_CC" - if AC_TRY_EVAL(gmp_cxxcompile); then - if test "$cross_compiling" = no; then - if AC_TRY_COMMAND([./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest]); then :; - else - gmp_prog_cxx_works="no[]m4_if([$2],,,[, ])[$2], program does not run" - fi - fi - else - gmp_prog_cxx_works="no[]m4_if([$2],,,[, ])[$2]" - fi - case $gmp_prog_cxx_works in - no*) - echo "failed program was:" >&AC_FD_CC - cat conftest.cc >&AC_FD_CC - ;; - esac - rm -f conftest* a.out b.out a.exe a_out.exe -fi -]) - - -dnl GMP_INIT([M4-DEF-FILE]) -dnl ----------------------- -dnl Initializations for GMP config.m4 generation. -dnl -dnl FIXME: The generated config.m4 doesn't get recreated by config.status. -dnl Maybe the relevant "echo"s should go through AC_CONFIG_COMMANDS. - -AC_DEFUN([GMP_INIT], -[ifelse([$1], , gmp_configm4=config.m4, gmp_configm4="[$1]") -gmp_tmpconfigm4=cnfm4.tmp -gmp_tmpconfigm4i=cnfm4i.tmp -gmp_tmpconfigm4p=cnfm4p.tmp -rm -f $gmp_tmpconfigm4 $gmp_tmpconfigm4i $gmp_tmpconfigm4p - -# CONFIG_TOP_SRCDIR is a path from the mpn builddir to the top srcdir. -# The pattern here tests for an absolute path the same way as -# _AC_OUTPUT_FILES in autoconf acgeneral.m4. -case $srcdir in -[[\\/]]* | ?:[[\\/]]* ) tmp="$srcdir" ;; -*) tmp="../$srcdir" ;; -esac -echo ["define(<CONFIG_TOP_SRCDIR>,<\`$tmp'>)"] >>$gmp_tmpconfigm4 - -# All CPUs use asm-defs.m4 -echo ["include][(CONFIG_TOP_SRCDIR\`/mpn/asm-defs.m4')"] >>$gmp_tmpconfigm4i -]) - - -dnl GMP_FINISH -dnl ---------- -dnl Create config.m4 from its accumulated parts. -dnl -dnl __CONFIG_M4_INCLUDED__ is used so that a second or subsequent include -dnl of config.m4 is harmless. -dnl -dnl A separate ifdef on the angle bracket quoted part ensures the quoting -dnl style there is respected. The basic defines from gmp_tmpconfigm4 are -dnl fully quoted but are still put under an ifdef in case any have been -dnl redefined by one of the m4 include files. -dnl -dnl Doing a big ifdef within asm-defs.m4 and/or other macro files wouldn't -dnl work, since it'd interpret parentheses and quotes in dnl comments, and -dnl having a whole file as a macro argument would overflow the string space -dnl on BSD m4. - -AC_DEFUN([GMP_FINISH], -[AC_REQUIRE([GMP_INIT]) -echo "creating $gmp_configm4" -echo ["d""nl $gmp_configm4. Generated automatically by configure."] > $gmp_configm4 -if test -f $gmp_tmpconfigm4; then - echo ["changequote(<,>)"] >> $gmp_configm4 - echo ["ifdef(<__CONFIG_M4_INCLUDED__>,,<"] >> $gmp_configm4 - cat $gmp_tmpconfigm4 >> $gmp_configm4 - echo [">)"] >> $gmp_configm4 - echo ["changequote(\`,')"] >> $gmp_configm4 - rm $gmp_tmpconfigm4 -fi -echo ["ifdef(\`__CONFIG_M4_INCLUDED__',,\`"] >> $gmp_configm4 -if test -f $gmp_tmpconfigm4i; then - cat $gmp_tmpconfigm4i >> $gmp_configm4 - rm $gmp_tmpconfigm4i -fi -if test -f $gmp_tmpconfigm4p; then - cat $gmp_tmpconfigm4p >> $gmp_configm4 - rm $gmp_tmpconfigm4p -fi -echo ["')"] >> $gmp_configm4 -echo ["define(\`__CONFIG_M4_INCLUDED__')"] >> $gmp_configm4 -]) - - -dnl GMP_INCLUDE_MPN(FILE) -dnl --------------------- -dnl Add an include_mpn(`FILE') to config.m4. FILE should be a path -dnl relative to the mpn source directory, for example -dnl -dnl GMP_INCLUDE_MPN(`x86/x86-defs.m4') -dnl - -AC_DEFUN([GMP_INCLUDE_MPN], -[AC_REQUIRE([GMP_INIT]) -echo ["include_mpn(\`$1')"] >> $gmp_tmpconfigm4i -]) - - -dnl GMP_DEFINE(MACRO, DEFINITION [, LOCATION]) -dnl ------------------------------------------ -dnl Define M4 macro MACRO as DEFINITION in temporary file. -dnl -dnl If LOCATION is `POST', the definition will appear after any include() -dnl directives inserted by GMP_INCLUDE. Mind the quoting! No shell -dnl variables will get expanded. Don't forget to invoke GMP_FINISH to -dnl create file config.m4. config.m4 uses `<' and '>' as quote characters -dnl for all defines. - -AC_DEFUN([GMP_DEFINE], -[AC_REQUIRE([GMP_INIT]) -echo ['define(<$1>, <$2>)'] >>ifelse([$3], [POST], - $gmp_tmpconfigm4p, $gmp_tmpconfigm4) -]) - - -dnl GMP_DEFINE_RAW(STRING [, LOCATION]) -dnl ------------------------------------ -dnl Put STRING into config.m4 file. -dnl -dnl If LOCATION is `POST', the definition will appear after any include() -dnl directives inserted by GMP_INCLUDE. Don't forget to invoke GMP_FINISH -dnl to create file config.m4. - -AC_DEFUN([GMP_DEFINE_RAW], -[AC_REQUIRE([GMP_INIT]) -echo [$1] >> ifelse([$2], [POST], $gmp_tmpconfigm4p, $gmp_tmpconfigm4) -]) - - -dnl GMP_TRY_ASSEMBLE(asm-code,[action-success][,action-fail]) -dnl ---------------------------------------------------------- -dnl Attempt to assemble the given code. -dnl Do "action-success" if this succeeds, "action-fail" if not. -dnl -dnl conftest.o and conftest.out are available for inspection in -dnl "action-success". If either action does a "break" out of a loop then -dnl an explicit "rm -f conftest*" will be necessary. -dnl -dnl This is not unlike AC_TRY_COMPILE, but there's no default includes or -dnl anything in "asm-code", everything wanted must be given explicitly. - -AC_DEFUN([GMP_TRY_ASSEMBLE], -[cat >conftest.s <<EOF -[$1] -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if AC_TRY_EVAL(gmp_assemble); then - cat conftest.out >&AC_FD_CC - ifelse([$2],,:,[$2]) -else - cat conftest.out >&AC_FD_CC - echo "configure: failed program was:" >&AC_FD_CC - cat conftest.s >&AC_FD_CC - ifelse([$3],,:,[$3]) -fi -rm -f conftest* -]) - - -dnl Checks whether the stack can be marked nonexecutable by passing an option -dnl to the C-compiler when acting on .s files. Appends that option to ASMFLAGS. -dnl This macro is adapted from one found in GLIBC-2.3.5. -dnl FIXME: This test looks broken. It tests that a file with .note.GNU-stack... -dnl can be compiled/assembled with -Wa,--noexecstack. It does not determine -dnl if that command-line option has any effect on general asm code. -AC_DEFUN([CL_AS_NOEXECSTACK],[ -dnl AC_REQUIRE([AC_PROG_CC]) GMP uses something else -AC_CACHE_CHECK([whether assembler supports --noexecstack option], -cl_cv_as_noexecstack, [dnl - cat > conftest.c <<EOF -void foo() {} -EOF - if AC_TRY_COMMAND([${CC} $CFLAGS $CPPFLAGS - -S -o conftest.s conftest.c >/dev/null]) \ - && grep .note.GNU-stack conftest.s >/dev/null \ - && AC_TRY_COMMAND([${CC} $CFLAGS $CPPFLAGS -Wa,--noexecstack - -c -o conftest.o conftest.s >/dev/null]) - then - cl_cv_as_noexecstack=yes - else - cl_cv_as_noexecstack=no - fi - rm -f conftest*]) - if test "$cl_cv_as_noexecstack" = yes; then - ASMFLAGS="$ASMFLAGS -Wa,--noexecstack" - fi - AC_SUBST(ASMFLAGS) -]) - - -dnl GMP_ASM_LABEL_SUFFIX -dnl -------------------- -dnl : - is usual. -dnl empty - hppa on HP-UX doesn't use a :, just the label name -dnl -dnl Note that it's necessary to test the empty case first, since HP "as" -dnl will accept "somelabel:", and take it to mean a label with a name that -dnl happens to end in a colon. - -AC_DEFUN([GMP_ASM_LABEL_SUFFIX], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_CACHE_CHECK([for assembler label suffix], - gmp_cv_asm_label_suffix, -[gmp_cv_asm_label_suffix=unknown -for i in "" ":"; do - echo "trying $i" >&AC_FD_CC - GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_text -somelabel$i], - [gmp_cv_asm_label_suffix=$i - rm -f conftest* - break], - [cat conftest.out >&AC_FD_CC]) -done -if test "$gmp_cv_asm_label_suffix" = "unknown"; then - AC_MSG_ERROR([Cannot determine label suffix]) -fi -]) -echo ["define(<LABEL_SUFFIX>, <$gmp_cv_asm_label_suffix>)"] >> $gmp_tmpconfigm4 -]) - - -dnl GMP_ASM_UNDERSCORE -dnl ------------------ -dnl Determine whether global symbols need to be prefixed with an underscore. -dnl The output from "nm" is grepped to see what a typical symbol looks like. -dnl -dnl This test used to grep the .o file directly, but that failed with greps -dnl that don't like binary files (eg. SunOS 4). -dnl -dnl This test also used to construct an assembler file with and without an -dnl underscore and try to link that to a C file, to see which worked. -dnl Although that's what will happen in the real build we don't really want -dnl to depend on creating asm files within configure for every possible CPU -dnl (or at least we don't want to do that more than we have to). -dnl -dnl The fallback on no underscore is based on the assumption that the world -dnl is moving towards non-underscore systems. There should actually be no -dnl good reason for nm to fail though. - -AC_DEFUN([GMP_ASM_UNDERSCORE], -[AC_REQUIRE([GMP_PROG_NM]) -AC_CACHE_CHECK([if globals are prefixed by underscore], - gmp_cv_asm_underscore, -[gmp_cv_asm_underscore="unknown" -cat >conftest.c <<EOF -int gurkmacka; -EOF -gmp_compile="$CC $CFLAGS $CPPFLAGS -c conftest.c >&AC_FD_CC" -if AC_TRY_EVAL(gmp_compile); then - $NM conftest.$OBJEXT >conftest.out - if grep _gurkmacka conftest.out >/dev/null; then - gmp_cv_asm_underscore=yes - elif grep gurkmacka conftest.out >/dev/null; then - gmp_cv_asm_underscore=no - else - echo "configure: $NM doesn't have gurkmacka:" >&AC_FD_CC - cat conftest.out >&AC_FD_CC - fi -else - echo "configure: failed program was:" >&AC_FD_CC - cat conftest.c >&AC_FD_CC -fi -rm -f conftest* -]) -case $gmp_cv_asm_underscore in - yes) - GMP_DEFINE(GSYM_PREFIX, [_]) ;; - no) - GMP_DEFINE(GSYM_PREFIX, []) ;; - *) - AC_MSG_WARN([+----------------------------------------------------------]) - AC_MSG_WARN([| Cannot determine global symbol prefix.]) - AC_MSG_WARN([| $NM output doesn't contain a global data symbol.]) - AC_MSG_WARN([| Will proceed with no underscore.]) - AC_MSG_WARN([| If this is wrong then you'll get link errors referring]) - AC_MSG_WARN([| to ___gmpn_add_n (note three underscores).]) - AC_MSG_WARN([| In this case do a fresh build with an override,]) - AC_MSG_WARN([| ./configure gmp_cv_asm_underscore=yes]) - AC_MSG_WARN([+----------------------------------------------------------]) - GMP_DEFINE(GSYM_PREFIX, []) - ;; -esac -]) - - -dnl GMP_ASM_ALIGN_LOG -dnl ----------------- -dnl Is parameter to `.align' logarithmic? - -AC_DEFUN([GMP_ASM_ALIGN_LOG], -[AC_REQUIRE([GMP_ASM_GLOBL]) -AC_REQUIRE([GMP_ASM_BYTE]) -AC_REQUIRE([GMP_ASM_DATA]) -AC_REQUIRE([GMP_ASM_LABEL_SUFFIX]) -AC_REQUIRE([GMP_PROG_NM]) -AC_CACHE_CHECK([if .align assembly directive is logarithmic], - gmp_cv_asm_align_log, -[GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_data - .align 4 - $gmp_cv_asm_globl foo - $gmp_cv_asm_byte 1 - .align 4 -foo$gmp_cv_asm_label_suffix - $gmp_cv_asm_byte 2], - [gmp_tmp_val=[`$NM conftest.$OBJEXT | grep foo | \ - sed -e 's;[[][0-9][]]\(.*\);\1;' -e 's;[^1-9]*\([0-9]*\).*;\1;'`] - if test "$gmp_tmp_val" = "10" || test "$gmp_tmp_val" = "16"; then - gmp_cv_asm_align_log=yes - else - gmp_cv_asm_align_log=no - fi], - [AC_MSG_ERROR([cannot assemble alignment test])])]) - -GMP_DEFINE_RAW(["define(<ALIGN_LOGARITHMIC>,<$gmp_cv_asm_align_log>)"]) -]) - - -dnl GMP_ASM_ALIGN_FILL_0x90 -dnl ----------------------- -dnl Determine whether a ",0x90" suffix works on a .align directive. -dnl This is only meant for use on x86, 0x90 being a "nop". -dnl -dnl Old gas, eg. 1.92.3 -dnl Needs ",0x90" or else the fill is 0x00, which can't be executed -dnl across. -dnl -dnl New gas, eg. 2.91 -dnl Generates multi-byte nop fills even when ",0x90" is given. -dnl -dnl Solaris 2.6 as -dnl ",0x90" is not allowed, causes a fatal error. -dnl -dnl Solaris 2.8 as -dnl ",0x90" does nothing, generates a warning that it's being ignored. -dnl -dnl SCO OpenServer 5 as -dnl Second parameter is max bytes to fill, not a fill pattern. -dnl ",0x90" is an error due to being bigger than the first parameter. -dnl Multi-byte nop fills are generated in text segments. -dnl -dnl Note that both solaris "as"s only care about ",0x90" if they actually -dnl have to use it to fill something, hence the .byte in the test. It's -dnl the second .align which provokes the error or warning. -dnl -dnl The warning from solaris 2.8 is suppressed to stop anyone worrying that -dnl something might be wrong. - -AC_DEFUN([GMP_ASM_ALIGN_FILL_0x90], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_CACHE_CHECK([if the .align directive accepts an 0x90 fill in .text], - gmp_cv_asm_align_fill_0x90, -[GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_text - .align 4, 0x90 - .byte 0 - .align 4, 0x90], -[if grep "Warning: Fill parameter ignored for executable section" conftest.out >/dev/null; then - echo "Suppressing this warning by omitting 0x90" 1>&AC_FD_CC - gmp_cv_asm_align_fill_0x90=no -else - gmp_cv_asm_align_fill_0x90=yes -fi], -[gmp_cv_asm_align_fill_0x90=no])]) - -GMP_DEFINE_RAW(["define(<ALIGN_FILL_0x90>,<$gmp_cv_asm_align_fill_0x90>)"]) -]) - - -dnl GMP_ASM_BYTE -dnl ------------ -dnl .byte - is usual. -dnl data1 - required by ia64 (on hpux at least). -dnl -dnl This macro is just to support other configure tests, not any actual asm -dnl code. - -AC_DEFUN([GMP_ASM_BYTE], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_REQUIRE([GMP_ASM_LABEL_SUFFIX]) -AC_CACHE_CHECK([for assembler byte directive], - gmp_cv_asm_byte, -[for i in .byte data1; do - echo "trying $i" >&AC_FD_CC - GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_data - $i 0 -], - [gmp_cv_asm_byte=$i - rm -f conftest* - break], - [cat conftest.out >&AC_FD_CC]) -done -if test -z "$gmp_cv_asm_byte"; then - AC_MSG_ERROR([Cannot determine how to emit a data byte]) -fi -]) -]) - - -dnl GMP_ASM_TEXT -dnl ------------ -dnl .text - is usual. -dnl .code - is needed by the hppa on HP-UX (but ia64 HP-UX uses .text) -dnl .csect .text[PR] - is for AIX. - -AC_DEFUN([GMP_ASM_TEXT], -[AC_CACHE_CHECK([how to switch to text section], - gmp_cv_asm_text, -[for i in ".text" ".code" [".csect .text[PR]"]; do - echo "trying $i" >&AC_FD_CC - GMP_TRY_ASSEMBLE([ $i], - [gmp_cv_asm_text=$i - rm -f conftest* - break]) -done -if test -z "$gmp_cv_asm_text"; then - AC_MSG_ERROR([Cannot determine text section directive]) -fi -]) -echo ["define(<TEXT>, <$gmp_cv_asm_text>)"] >> $gmp_tmpconfigm4 -]) - - -dnl GMP_ASM_DATA -dnl ------------ -dnl Can we say `.data'? - -AC_DEFUN([GMP_ASM_DATA], -[AC_CACHE_CHECK([how to switch to data section], - gmp_cv_asm_data, -[case $host in - *-*-aix*) gmp_cv_asm_data=[".csect .data[RW]"] ;; - *) gmp_cv_asm_data=".data" ;; -esac -]) -echo ["define(<DATA>, <$gmp_cv_asm_data>)"] >> $gmp_tmpconfigm4 -]) - - -dnl GMP_ASM_RODATA -dnl -------------- -dnl Find out how to switch to the read-only data section. -dnl -dnl The compiler output is grepped for the right directive. It's not -dnl considered wise to just probe for ".section .rodata" or whatever works, -dnl since arbitrary section names might be accepted, but not necessarily do -dnl the right thing when they get to the linker. -dnl -dnl Only a few asm files use RODATA, so this code is perhaps a bit -dnl excessive right now, but should find more uses in the future. -dnl -dnl FIXME: gcc on aix generates something like ".csect _foo.ro_c[RO],3" -dnl where foo is the object file. Might need to check for that if we use -dnl RODATA there. - -AC_DEFUN([GMP_ASM_RODATA], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_REQUIRE([GMP_ASM_DATA]) -AC_REQUIRE([GMP_ASM_LABEL_SUFFIX]) -AC_REQUIRE([GMP_ASM_UNDERSCORE]) -AC_CACHE_CHECK([how to switch to read-only data section], - gmp_cv_asm_rodata, -[ -dnl Default to DATA on CPUs with split code/data caching, and TEXT -dnl elsewhere. i386 means generic x86, so use DATA on it. -case $host in -X86_PATTERN | x86_64-*-*) - gmp_cv_asm_rodata="$gmp_cv_asm_data" ;; -*) - gmp_cv_asm_rodata="$gmp_cv_asm_text" ;; -esac - -cat >conftest.c <<EOF -extern const int foo[[]]; /* Suppresses C++'s suppression of foo */ -const int foo[[]] = {1,2,3}; -EOF -echo "Test program:" >&AC_FD_CC -cat conftest.c >&AC_FD_CC -gmp_compile="$CC $CFLAGS $CPPFLAGS -S conftest.c >&AC_FD_CC" -if AC_TRY_EVAL(gmp_compile); then - echo "Compiler output:" >&AC_FD_CC - cat conftest.s >&AC_FD_CC - if test $gmp_cv_asm_underscore = yes; then - tmp_gsym_prefix=_ - else - tmp_gsym_prefix= - fi - # must see our label - if grep "^${tmp_gsym_prefix}foo$gmp_cv_asm_label_suffix" conftest.s >/dev/null 2>&AC_FD_CC; then - # take the last directive before our label (hence skipping segments - # getting debugging info etc) - tmp_match=`sed -n ["/^${tmp_gsym_prefix}foo$gmp_cv_asm_label_suffix/q - /^[. ]*data/p - /^[. ]*rdata/p - /^[. ]*text/p - /^[. ]*section/p - /^[. ]*csect/p - /^[. ]*CSECT/p"] conftest.s | sed -n '$p'` - echo "Match: $tmp_match" >&AC_FD_CC - if test -n "$tmp_match"; then - gmp_cv_asm_rodata=$tmp_match - fi - else - echo "Couldn't find label: ^${tmp_gsym_prefix}foo$gmp_cv_asm_label_suffix" >&AC_FD_CC - fi -fi -rm -f conftest* -]) -echo ["define(<RODATA>, <$gmp_cv_asm_rodata>)"] >> $gmp_tmpconfigm4 -]) - - -dnl GMP_ASM_GLOBL -dnl ------------- -dnl The assembler directive to mark a label as a global symbol. -dnl -dnl ia64 - .global is standard, according to the Intel documentation. -dnl -dnl hppa - ".export foo,entry" is demanded by HP hppa "as". ".global" is a -dnl kind of import. -dnl -dnl other - .globl is usual. -dnl -dnl "gas" tends to accept .globl everywhere, in addition to .export or -dnl .global or whatever the system assembler demands. - -AC_DEFUN([GMP_ASM_GLOBL], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_CACHE_CHECK([for assembler global directive], - gmp_cv_asm_globl, -[case $host in - hppa*-*-*) gmp_cv_asm_globl=.export ;; - IA64_PATTERN) gmp_cv_asm_globl=.global ;; - *) gmp_cv_asm_globl=.globl ;; -esac -]) -echo ["define(<GLOBL>, <$gmp_cv_asm_globl>)"] >> $gmp_tmpconfigm4 -]) - - -dnl GMP_ASM_GLOBL_ATTR -dnl ------------------ -dnl Do we need something after `GLOBL symbol'? - -AC_DEFUN([GMP_ASM_GLOBL_ATTR], -[AC_REQUIRE([GMP_ASM_GLOBL]) -AC_CACHE_CHECK([for assembler global directive attribute], - gmp_cv_asm_globl_attr, -[case $gmp_cv_asm_globl in - .export) gmp_cv_asm_globl_attr=",entry" ;; - *) gmp_cv_asm_globl_attr="" ;; -esac -]) -echo ["define(<GLOBL_ATTR>, <$gmp_cv_asm_globl_attr>)"] >> $gmp_tmpconfigm4 -]) - - -dnl GMP_ASM_TYPE -dnl ------------ -dnl Can we say ".type", and how? -dnl -dnl For i386 GNU/Linux ELF systems, and very likely other ELF systems, -dnl .type and .size are important on functions in shared libraries. If -dnl .type is omitted and the mainline program references that function then -dnl the code will be copied down to the mainline at load time like a piece -dnl of data. If .size is wrong or missing (it defaults to 4 bytes or some -dnl such) then incorrect bytes will be copied and a segv is the most likely -dnl result. In any case such copying is not what's wanted, a .type -dnl directive will ensure a PLT entry is used. -dnl -dnl In GMP the assembler functions are normally only used from within the -dnl library (since most programs are not interested in the low level -dnl routines), and in those circumstances a missing .type isn't fatal, -dnl letting the problem go unnoticed. tests/mpn/t-asmtype.c aims to check -dnl for it. - -AC_DEFUN([GMP_ASM_TYPE], -[AC_CACHE_CHECK([for assembler .type directive], - gmp_cv_asm_type, -[gmp_cv_asm_type= -for gmp_tmp_prefix in @ \# %; do - GMP_TRY_ASSEMBLE([ .type sym,${gmp_tmp_prefix}function], - [if grep "\.type pseudo-op used outside of \.def/\.endef ignored" conftest.out >/dev/null; then : ; - else - gmp_cv_asm_type=".type \$][1,${gmp_tmp_prefix}\$][2" - break - fi]) -done -rm -f conftest* -]) -echo ["define(<TYPE>, <$gmp_cv_asm_type>)"] >> $gmp_tmpconfigm4 -]) - - -dnl GMP_ASM_SIZE -dnl ------------ -dnl Can we say `.size'? - -AC_DEFUN([GMP_ASM_SIZE], -[AC_CACHE_CHECK([for assembler .size directive], - gmp_cv_asm_size, -[gmp_cv_asm_size= -GMP_TRY_ASSEMBLE([ .size sym,1], - [if grep "\.size pseudo-op used outside of \.def/\.endef ignored" conftest.out >/dev/null; then : ; - else - gmp_cv_asm_size=".size \$][1,\$][2" - fi]) -]) -echo ["define(<SIZE>, <$gmp_cv_asm_size>)"] >> $gmp_tmpconfigm4 -]) - - -dnl GMP_ASM_COFF_TYPE -dnl ----------------- -dnl Determine whether the assembler supports COFF type information. -dnl -dnl Currently this is only needed for mingw (and cygwin perhaps) and so is -dnl run only on the x86s, but it ought to work anywhere. -dnl -dnl On MINGW, recent versions of the linker have an automatic import scheme -dnl for data in a DLL which is referenced by a mainline but without -dnl __declspec (__dllimport__) on the prototype. It seems functions -dnl without type information are treated as data, or something, and calls -dnl to them from the mainline will crash. gcc puts type information on the -dnl C functions it generates, we need to do the same for assembler -dnl functions. -dnl -dnl This applies only to functions without __declspec(__dllimport__), -dnl ie. without __GMP_DECLSPEC in the case of libgmp, so it also works just -dnl to ensure all assembler functions used from outside libgmp have -dnl __GMP_DECLSPEC on their prototypes. But this isn't an ideal situation, -dnl since we don't want perfectly valid calls going wrong just because -dnl there wasn't a prototype in scope. -dnl -dnl When an auto-import takes place, the following warning is given by the -dnl linker. This shouldn't be seen for any functions. -dnl -dnl Info: resolving _foo by linking to __imp__foo (auto-import) -dnl -dnl -dnl COFF type directives look like the following -dnl -dnl .def _foo -dnl .scl 2 -dnl .type 32 -dnl .endef -dnl -dnl _foo is the symbol with GSYM_PREFIX (_). .scl is the storage class, 2 -dnl for external, 3 for static. .type is the object type, 32 for a -dnl function. -dnl -dnl On an ELF system, this is (correctly) rejected due to .def, .endef and -dnl .scl being invalid, and .type not having enough arguments. - -AC_DEFUN([GMP_ASM_COFF_TYPE], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_REQUIRE([GMP_ASM_GLOBL]) -AC_REQUIRE([GMP_ASM_GLOBL_ATTR]) -AC_REQUIRE([GMP_ASM_LABEL_SUFFIX]) -AC_REQUIRE([GMP_ASM_UNDERSCORE]) -AC_CACHE_CHECK([for assembler COFF type directives], - gmp_cv_asm_x86_coff_type, -[GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_text - $gmp_cv_asm_globl ${tmp_gsym_prefix}foo$gmp_cv_asm_globl_attr - .def ${tmp_gsym_prefix}foo - .scl 2 - .type 32 - .endef -${tmp_gsym_prefix}foo$gmp_cv_asm_label_suffix -], - [gmp_cv_asm_x86_coff_type=yes], - [gmp_cv_asm_x86_coff_type=no]) -]) -echo ["define(<HAVE_COFF_TYPE>, <$gmp_cv_asm_x86_coff_type>)"] >> $gmp_tmpconfigm4 -]) - - -dnl GMP_ASM_LSYM_PREFIX -dnl ------------------- -dnl What is the prefix for a local label? -dnl -dnl The prefixes tested are, -dnl -dnl L - usual for underscore systems -dnl .L - usual for non-underscore systems -dnl $ - alpha (gas and OSF system assembler) -dnl L$ - hppa (gas and HP-UX system assembler) -dnl -dnl The default is "L" if the tests fail for any reason. There's a good -dnl chance this will be adequate, since on most systems labels are local -dnl anyway unless given a ".globl", and an "L" will avoid clashes with -dnl other identifers. -dnl -dnl For gas, ".L" is normally purely local to the assembler, it doesn't get -dnl put into the object file at all. This style is preferred, to keep the -dnl object files nice and clean. -dnl -dnl BSD format nm produces a line like -dnl -dnl 00000000 t Lgurkmacka -dnl -dnl The symbol code is normally "t" for text, but any lower case letter -dnl indicates a local definition. -dnl -dnl Code "n" is for a debugging symbol, OSF "nm -B" gives that as an upper -dnl case "N" for a local. -dnl -dnl HP-UX nm prints an error message (though seems to give a 0 exit) if -dnl there's no symbols at all in an object file, hence the use of "dummy". - -AC_DEFUN([GMP_ASM_LSYM_PREFIX], -[AC_REQUIRE([GMP_ASM_LABEL_SUFFIX]) -AC_REQUIRE([GMP_ASM_TEXT]) -AC_REQUIRE([GMP_PROG_NM]) -AC_CACHE_CHECK([for assembler local label prefix], - gmp_cv_asm_lsym_prefix, -[gmp_tmp_pre_appears=yes -for gmp_tmp_pre in L .L $L $ L$; do - echo "Trying $gmp_tmp_pre" >&AC_FD_CC - GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_text -dummy${gmp_cv_asm_label_suffix} -${gmp_tmp_pre}gurkmacka${gmp_cv_asm_label_suffix}], - [if $NM conftest.$OBJEXT >conftest.nm 2>&AC_FD_CC; then : ; else - cat conftest.nm >&AC_FD_CC - AC_MSG_WARN(["$NM" failure]) - break - fi - cat conftest.nm >&AC_FD_CC - if grep gurkmacka conftest.nm >/dev/null; then : ; else - # no mention of the symbol, this is good - echo "$gmp_tmp_pre label doesn't appear in object file at all (good)" >&AC_FD_CC - gmp_cv_asm_lsym_prefix="$gmp_tmp_pre" - gmp_tmp_pre_appears=no - break - fi - if grep [' [a-zN] .*gurkmacka'] conftest.nm >/dev/null; then - # symbol mentioned as a local, use this if nothing better - echo "$gmp_tmp_pre label is local but still in object file" >&AC_FD_CC - if test -z "$gmp_cv_asm_lsym_prefix"; then - gmp_cv_asm_lsym_prefix="$gmp_tmp_pre" - fi - else - echo "$gmp_tmp_pre label is something unknown" >&AC_FD_CC - fi - ]) -done -rm -f conftest* -if test -z "$gmp_cv_asm_lsym_prefix"; then - gmp_cv_asm_lsym_prefix=L - AC_MSG_WARN([cannot determine local label, using default $gmp_cv_asm_lsym_prefix]) -fi -# for development purposes, note whether we got a purely temporary local label -echo "Local label appears in object files: $gmp_tmp_pre_appears" >&AC_FD_CC -]) -echo ["define(<LSYM_PREFIX>, <${gmp_cv_asm_lsym_prefix}>)"] >> $gmp_tmpconfigm4 -AC_DEFINE_UNQUOTED(LSYM_PREFIX, "$gmp_cv_asm_lsym_prefix", - [Assembler local label prefix]) -]) - - -dnl GMP_ASM_W32 -dnl ----------- -dnl How to define a 32-bit word. -dnl -dnl FIXME: This test is not right for ia64-*-hpux*. The directive should -dnl be "data4", but the W32 macro is not currently used by the mpn/ia64 asm -dnl files. - -AC_DEFUN([GMP_ASM_W32], -[AC_REQUIRE([GMP_ASM_DATA]) -AC_REQUIRE([GMP_ASM_BYTE]) -AC_REQUIRE([GMP_ASM_GLOBL]) -AC_REQUIRE([GMP_ASM_LABEL_SUFFIX]) -AC_REQUIRE([GMP_PROG_NM]) -AC_CACHE_CHECK([how to define a 32-bit word], - gmp_cv_asm_w32, -[case $host in - *-*-hpux*) - # FIXME: HPUX puts first symbol at 0x40000000, breaking our assumption - # that it's at 0x0. We'll have to declare another symbol before the - # .long/.word and look at the distance between the two symbols. The - # only problem is that the sed expression(s) barfs (on Solaris, for - # example) for the symbol with value 0. For now, HPUX uses .word. - gmp_cv_asm_w32=".word" - ;; - *-*-*) - gmp_tmp_val= - for gmp_tmp_op in .long .word data4; do - GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_data - $gmp_cv_asm_globl foo - $gmp_tmp_op 0 -foo$gmp_cv_asm_label_suffix - $gmp_cv_asm_byte 0], - [gmp_tmp_val=[`$NM conftest.$OBJEXT | grep foo | \ - sed -e 's;[[][0-9][]]\(.*\);\1;' -e 's;[^1-9]*\([0-9]*\).*;\1;'`] - if test "$gmp_tmp_val" = 4; then - gmp_cv_asm_w32="$gmp_tmp_op" - break - fi]) - done - rm -f conftest* - ;; -esac -if test -z "$gmp_cv_asm_w32"; then - AC_MSG_ERROR([cannot determine how to define a 32-bit word]) -fi -]) -echo ["define(<W32>, <$gmp_cv_asm_w32>)"] >> $gmp_tmpconfigm4 -]) - - -dnl GMP_X86_ASM_GOT_UNDERSCORE -dnl -------------------------- -dnl Determine whether i386 _GLOBAL_OFFSET_TABLE_ needs an additional -dnl underscore prefix. -dnl -dnl SVR4 - the standard is _GLOBAL_OFFSET_TABLE_ -dnl GNU/Linux - follows SVR4 -dnl OpenBSD - an a.out underscore system, uses __GLOBAL_OFFSET_TABLE_ -dnl NetBSD - also an a.out underscore system, but _GLOBAL_OFFSET_TABLE_ -dnl -dnl The test attempts to link a program using _GLOBAL_OFFSET_TABLE_ or -dnl __GLOBAL_OFFSET_TABLE_ to see which works. -dnl -dnl $lt_prog_compiler_pic is included in the compile because old versions -dnl of gas wouldn't accept PIC idioms without the right option (-K). This -dnl is the same as what libtool and mpn/Makeasm.am will do. -dnl -dnl $lt_prog_compiler_pic is also included in the link because OpenBSD ld -dnl won't accept an R_386_GOTPC relocation without the right options. This -dnl is not what's done by the Makefiles when building executables, but -dnl let's hope it's ok (it works fine with gcc). -dnl -dnl The fallback is no additional underscore, on the basis that this will -dnl suit SVR4/ELF style systems, which should be much more common than -dnl a.out systems with shared libraries. -dnl -dnl Note that it's not an error for the tests to fail, since for instance -dnl cygwin, mingw and djgpp don't have a _GLOBAL_OFFSET_TABLE_ scheme at -dnl all. -dnl -dnl Perhaps $CCAS could be asked to do the linking as well as the -dnl assembling, but in the Makefiles it's only used for assembling, so lets -dnl keep it that way. -dnl -dnl The test here is run even under --disable-shared, so that PIC objects -dnl can be built and tested by the tune/many.pl development scheme. The -dnl tests will be reasonably quick and won't give a fatal error, so this -dnl arrangement is ok. AC_LIBTOOL_PROG_COMPILER_PIC does its -dnl $lt_prog_compiler_pic setups even for --disable-shared too. - -AC_DEFUN([GMP_ASM_X86_GOT_UNDERSCORE], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_REQUIRE([GMP_ASM_GLOBL]) -AC_REQUIRE([GMP_ASM_GLOBL_ATTR]) -AC_REQUIRE([GMP_ASM_LABEL_SUFFIX]) -AC_REQUIRE([GMP_ASM_UNDERSCORE]) -AC_REQUIRE([AC_LIBTOOL_PROG_COMPILER_PIC]) -AC_CACHE_CHECK([if _GLOBAL_OFFSET_TABLE_ is prefixed by underscore], - gmp_cv_asm_x86_got_underscore, -[gmp_cv_asm_x86_got_underscore="not applicable" -if test $gmp_cv_asm_underscore = yes; then - tmp_gsym_prefix=_ -else - tmp_gsym_prefix= -fi -for tmp_underscore in "" "_"; do - cat >conftest.s <<EOF - $gmp_cv_asm_text - $gmp_cv_asm_globl ${tmp_gsym_prefix}main$gmp_cv_asm_globl_attr -${tmp_gsym_prefix}main$gmp_cv_asm_label_suffix - addl $ ${tmp_underscore}_GLOBAL_OFFSET_TABLE_, %ebx -EOF - gmp_compile="$CCAS $CFLAGS $CPPFLAGS $lt_prog_compiler_pic conftest.s >&AC_FD_CC && $CC $CFLAGS $CPPFLAGS $lt_prog_compiler_pic conftest.$OBJEXT >&AC_FD_CC" - if AC_TRY_EVAL(gmp_compile); then - if test "$tmp_underscore" = "_"; then - gmp_cv_asm_x86_got_underscore=yes - else - gmp_cv_asm_x86_got_underscore=no - fi - break - fi -done -rm -f conftest* a.out b.out a.exe a_out.exe -]) -if test "$gmp_cv_asm_x86_got_underscore" = "yes"; then - GMP_DEFINE(GOT_GSYM_PREFIX, [_]) -else - GMP_DEFINE(GOT_GSYM_PREFIX, []) -fi -]) - - -dnl GMP_ASM_X86_GOT_EAX_OK(CC+CFLAGS, [ACTION-YES] [, ACTION-NO]) -dnl ------------------------------------------------------------- -dnl Determine whether _GLOBAL_OFFSET_TABLE_ used with %eax is ok. -dnl -dnl An instruction -dnl -dnl addl $_GLOBAL_OFFSET_TABLE_, %eax -dnl -dnl is incorrectly assembled by gas 2.12 (or thereabouts) and earlier. It -dnl puts an addend 2 into the R_386_GOTPC relocation, but it should be 1 -dnl for this %eax form being a 1 byte opcode (with other registers it's 2 -dnl opcode bytes). See note about this in mpn/x86/README too. -dnl -dnl We assemble this, surrounded by some unlikely byte sequences as -dnl delimiters, and check for the bad output. -dnl -dnl This is for use by compiler probing in GMP_PROG_CC_WORKS, so the result -dnl is not cached. -dnl -dnl This test is not specific to gas, but old gas is the only assembler we -dnl know of with this problem. The Solaris has been seen coming out ok. -dnl -dnl ".text" is hard coded because this macro is wanted before GMP_ASM_TEXT. -dnl This should be fine, ".text" is normal on x86 systems, and certainly -dnl will be fine with the offending gas. -dnl -dnl If an error occurs when assembling, we consider the assembler ok, since -dnl the bad output does not occur. This happens for instance on mingw, -dnl where _GLOBAL_OFFSET_TABLE_ results in a bfd error, since there's no -dnl GOT etc in PE object files. -dnl -dnl This test is used before the object file extension has been determined, -dnl so we force output to conftest.o. Using -o with -c is not portable, -dnl but we think all x86 compilers will accept -o with -c, certainly gcc -dnl does. -dnl -dnl -fPIC is hard coded here, because this test is for use before libtool -dnl has established the pic options. It's right for gcc, but perhaps not -dnl other compilers. - -AC_DEFUN([GMP_ASM_X86_GOT_EAX_OK], -[echo "Testing gas GOT with eax good" >&AC_FD_CC -cat >conftest.awk <<\EOF -[BEGIN { - want[0] = "001" - want[1] = "043" - want[2] = "105" - want[3] = "147" - want[4] = "211" - want[5] = "253" - want[6] = "315" - want[7] = "357" - - want[8] = "005" - want[9] = "002" - want[10] = "000" - want[11] = "000" - want[12] = "000" - - want[13] = "376" - want[14] = "334" - want[15] = "272" - want[16] = "230" - want[17] = "166" - want[18] = "124" - want[19] = "062" - want[20] = "020" - - result = "yes" -} -{ - for (f = 2; f <= NF; f++) - { - for (i = 0; i < 20; i++) - got[i] = got[i+1]; - got[20] = $f; - - found = 1 - for (i = 0; i < 21; i++) - if (got[i] != want[i]) - { - found = 0 - break - } - if (found) - { - result = "no" - exit - } - } -} -END { - print result -} -]EOF -cat >conftest.s <<\EOF -[ .text - .byte 1, 35, 69, 103, 137, 171, 205, 239 - addl $_GLOBAL_OFFSET_TABLE_, %eax - .byte 254, 220, 186, 152, 118, 84, 50, 16 -]EOF -tmp_got_good=yes -gmp_compile="$1 -fPIC -o conftest.o -c conftest.s >&AC_FD_CC 2>&1" -if AC_TRY_EVAL(gmp_compile); then - tmp_got_good=`od -b conftest.o | $AWK -f conftest.awk` -fi -rm -f conftest.* -echo "Result: $tmp_got_good" >&AC_FD_CC -if test "$tmp_got_good" = no; then - ifelse([$3],,:,[$3]) -else - ifelse([$2],,:,[$2]) -fi -]) - - -dnl GMP_ASM_X86_MMX([ACTION-IF-YES][,ACTION-IF-NO]) -dnl ----------------------------------------------- -dnl Determine whether the assembler supports MMX instructions. -dnl -dnl This macro is wanted before GMP_ASM_TEXT, so ".text" is hard coded -dnl here. ".text" is believed to be correct on all x86 systems. Actually -dnl ".text" probably isn't needed at all, at least for just checking -dnl instruction syntax. -dnl -dnl "movq %mm0, %mm1" should assemble to "0f 6f c8", but Solaris 2.6 and -dnl 2.7 wrongly assemble it to "0f 6f c1" (that being the reverse "movq -dnl %mm1, %mm0"). It seems more trouble than it's worth to work around -dnl this in the code, so just detect and reject. - -AC_DEFUN([GMP_ASM_X86_MMX], -[AC_CACHE_CHECK([if the assembler knows about MMX instructions], - gmp_cv_asm_x86_mmx, -[GMP_TRY_ASSEMBLE( -[ .text - movq %mm0, %mm1], -[gmp_cv_asm_x86_mmx=yes -case $host in -*-*-solaris*) - if (dis conftest.$OBJEXT >conftest.out) 2>/dev/null; then - if grep "0f 6f c1" conftest.out >/dev/null; then - gmp_cv_asm_x86_mmx=movq-bug - fi - else - AC_MSG_WARN(["dis" not available to check for "as" movq bug]) - fi -esac], -[gmp_cv_asm_x86_mmx=no])]) - -case $gmp_cv_asm_x86_mmx in -movq-bug) - AC_MSG_WARN([+----------------------------------------------------------]) - AC_MSG_WARN([| WARNING WARNING WARNING]) - AC_MSG_WARN([| Host CPU has MMX code, but the assembler]) - AC_MSG_WARN([| $CCAS $CFLAGS $CPPFLAGS]) - AC_MSG_WARN([| has the Solaris 2.6 and 2.7 bug where register to register]) - AC_MSG_WARN([| movq operands are reversed.]) - AC_MSG_WARN([| Non-MMX replacements will be used.]) - AC_MSG_WARN([| This will be an inferior build.]) - AC_MSG_WARN([+----------------------------------------------------------]) - ;; -no) - AC_MSG_WARN([+----------------------------------------------------------]) - AC_MSG_WARN([| WARNING WARNING WARNING]) - AC_MSG_WARN([| Host CPU has MMX code, but it can't be assembled by]) - AC_MSG_WARN([| $CCAS $CFLAGS $CPPFLAGS]) - AC_MSG_WARN([| Non-MMX replacements will be used.]) - AC_MSG_WARN([| This will be an inferior build.]) - AC_MSG_WARN([+----------------------------------------------------------]) - ;; -esac -if test "$gmp_cv_asm_x86_mmx" = yes; then - ifelse([$1],,:,[$1]) -else - ifelse([$2],,:,[$2]) -fi -]) - - -dnl GMP_ASM_X86_SHLDL_CL -dnl -------------------- - -AC_DEFUN([GMP_ASM_X86_SHLDL_CL], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_CACHE_CHECK([if the assembler takes cl with shldl], - gmp_cv_asm_x86_shldl_cl, -[GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_text - shldl %cl, %eax, %ebx], - gmp_cv_asm_x86_shldl_cl=yes, - gmp_cv_asm_x86_shldl_cl=no) -]) -if test "$gmp_cv_asm_x86_shldl_cl" = "yes"; then - GMP_DEFINE(WANT_SHLDL_CL,1) -else - GMP_DEFINE(WANT_SHLDL_CL,0) -fi -]) - - -dnl GMP_ASM_X86_SSE2([ACTION-IF-YES][,ACTION-IF-NO]) -dnl ------------------------------------------------ -dnl Determine whether the assembler supports SSE2 instructions. -dnl -dnl This macro is wanted before GMP_ASM_TEXT, so ".text" is hard coded -dnl here. ".text" is believed to be correct on all x86 systems, certainly -dnl it's all GMP_ASM_TEXT gives currently. Actually ".text" probably isn't -dnl needed at all, at least for just checking instruction syntax. - -AC_DEFUN([GMP_ASM_X86_SSE2], -[AC_CACHE_CHECK([if the assembler knows about SSE2 instructions], - gmp_cv_asm_x86_sse2, -[GMP_TRY_ASSEMBLE( -[ .text - paddq %mm0, %mm1], - [gmp_cv_asm_x86_sse2=yes], - [gmp_cv_asm_x86_sse2=no]) -]) -case $gmp_cv_asm_x86_sse2 in -yes) - ifelse([$1],,:,[$1]) - ;; -*) - AC_MSG_WARN([+----------------------------------------------------------]) - AC_MSG_WARN([| WARNING WARNING WARNING]) - AC_MSG_WARN([| Host CPU has SSE2 code, but it can't be assembled by]) - AC_MSG_WARN([| $CCAS $CFLAGS $CPPFLAGS]) - AC_MSG_WARN([| Non-SSE2 replacements will be used.]) - AC_MSG_WARN([| This will be an inferior build.]) - AC_MSG_WARN([+----------------------------------------------------------]) - ifelse([$2],,:,[$2]) - ;; -esac -]) - - -dnl GMP_ASM_X86_MULX([ACTION-IF-YES][,ACTION-IF-NO]) -dnl ------------------------------------------------ -dnl Determine whether the assembler supports the mulx instruction which debut -dnl with Haswell. -dnl -dnl This macro is wanted before GMP_ASM_TEXT, so ".text" is hard coded -dnl here. ".text" is believed to be correct on all x86 systems, certainly -dnl it's all GMP_ASM_TEXT gives currently. Actually ".text" probably isn't -dnl needed at all, at least for just checking instruction syntax. - -AC_DEFUN([GMP_ASM_X86_MULX], -[AC_CACHE_CHECK([if the assembler knows about the mulx instruction], - gmp_cv_asm_x86_mulx, -[GMP_TRY_ASSEMBLE( -[ .text - mulx %r8, %r9, %r10], - [gmp_cv_asm_x86_mulx=yes], - [gmp_cv_asm_x86_mulx=no]) -]) -case $gmp_cv_asm_x86_mulx in -yes) - ifelse([$1],,:,[$1]) - ;; -*) - AC_MSG_WARN([+----------------------------------------------------------]) - AC_MSG_WARN([| WARNING WARNING WARNING]) - AC_MSG_WARN([| Host CPU has the mulx instruction, but it can't be]) - AC_MSG_WARN([| assembled by]) - AC_MSG_WARN([| $CCAS $CFLAGS $CPPFLAGS]) - AC_MSG_WARN([| Older x86 instructions will be used.]) - AC_MSG_WARN([| This will be an inferior build.]) - AC_MSG_WARN([+----------------------------------------------------------]) - ifelse([$2],,:,[$2]) - ;; -esac -]) - - -dnl GMP_ASM_X86_ADX([ACTION-IF-YES][,ACTION-IF-NO]) -dnl ------------------------------------------------ -dnl Determine whether the assembler supports the adcx and adox instructions -dnl which debut with the Haswell shrink Broadwell. -dnl -dnl This macro is wanted before GMP_ASM_TEXT, so ".text" is hard coded -dnl here. ".text" is believed to be correct on all x86 systems, certainly -dnl it's all GMP_ASM_TEXT gives currently. Actually ".text" probably isn't -dnl needed at all, at least for just checking instruction syntax. - -AC_DEFUN([GMP_ASM_X86_ADX], -[AC_CACHE_CHECK([if the assembler knows about the adox instruction], - gmp_cv_asm_x86_adx, -[GMP_TRY_ASSEMBLE( -[ .text - adox %r8, %r9 - adcx %r8, %r9], - [gmp_cv_asm_x86_adx=yes], - [gmp_cv_asm_x86_adx=no]) -]) -case $gmp_cv_asm_x86_adx in -yes) - ifelse([$1],,:,[$1]) - ;; -*) - AC_MSG_WARN([+----------------------------------------------------------]) - AC_MSG_WARN([| WARNING WARNING WARNING]) - AC_MSG_WARN([| Host CPU has the adcx and adox instructions, but they]) - AC_MSG_WARN([| can't be assembled by]) - AC_MSG_WARN([| $CCAS $CFLAGS $CPPFLAGS]) - AC_MSG_WARN([| Older x86 instructions will be used.]) - AC_MSG_WARN([| This will be an inferior build.]) - AC_MSG_WARN([+----------------------------------------------------------]) - ifelse([$2],,:,[$2]) - ;; -esac -]) - - -dnl GMP_ASM_X86_MCOUNT -dnl ------------------ -dnl Find out how to call mcount for profiling on an x86 system. -dnl -dnl A dummy function is compiled and the ".s" output examined. The pattern -dnl matching might be a bit fragile, but should work at least with gcc on -dnl sensible systems. Certainly it's better than hard coding a table of -dnl conventions. -dnl -dnl For non-PIC, any ".data" is taken to mean a counter might be passed. -dnl It's assumed a movl will set it up, and the right register is taken -dnl from that movl. Any movl involving %esp is ignored (a frame pointer -dnl setup normally). -dnl -dnl For PIC, any ".data" is similarly interpreted, but a GOTOFF identifies -dnl the line setting up the right register. -dnl -dnl In both cases a line with "mcount" identifies the call and that line is -dnl used literally. -dnl -dnl On some systems (eg. FreeBSD 3.5) gcc emits ".data" but doesn't use it, -dnl so it's not an error to have .data but then not find a register. -dnl -dnl Variations in mcount conventions on different x86 systems can be found -dnl in gcc config/i386. mcount can have a "_" prefix or be .mcount or -dnl _mcount_ptr, and for PIC it can be called through a GOT entry, or via -dnl the PLT. If a pointer to a counter is required it's passed in %eax or -dnl %edx. -dnl -dnl Flags to specify PIC are taken from $lt_prog_compiler_pic set by -dnl AC_PROG_LIBTOOL. -dnl -dnl Enhancement: Cache the values determined here. But what's the right way -dnl to get two variables (mcount_nonpic_reg and mcount_nonpic_call say) set -dnl from one block of commands? - -AC_DEFUN([GMP_ASM_X86_MCOUNT], -[AC_REQUIRE([AC_ENABLE_SHARED]) -AC_REQUIRE([AC_PROG_LIBTOOL]) -AC_MSG_CHECKING([how to call x86 mcount]) -cat >conftest.c <<EOF -foo(){bar();} -EOF - -if test "$enable_static" = yes; then - gmp_asmout_compile="$CC $CFLAGS $CPPFLAGS -S conftest.c 1>&AC_FD_CC" - if AC_TRY_EVAL(gmp_asmout_compile); then - if grep '\.data' conftest.s >/dev/null; then - mcount_nonpic_reg=`sed -n ['/esp/!s/.*movl.*,\(%[a-z]*\).*$/\1/p'] conftest.s` - else - mcount_nonpic_reg= - fi - mcount_nonpic_call=`grep 'call.*mcount' conftest.s` - if test -z "$mcount_nonpic_call"; then - AC_MSG_ERROR([Cannot find mcount call for non-PIC]) - fi - else - AC_MSG_ERROR([Cannot compile test program for non-PIC]) - fi -fi - -if test "$enable_shared" = yes; then - gmp_asmout_compile="$CC $CFLAGS $CPPFLAGS $lt_prog_compiler_pic -S conftest.c 1>&AC_FD_CC" - if AC_TRY_EVAL(gmp_asmout_compile); then - if grep '\.data' conftest.s >/dev/null; then - case $lt_prog_compiler_pic in - *-DDLL_EXPORT*) - # Windows DLLs have non-PIC style mcount - mcount_pic_reg=`sed -n ['/esp/!s/.*movl.*,\(%[a-z]*\).*$/\1/p'] conftest.s` - ;; - *) - mcount_pic_reg=`sed -n ['s/.*GOTOFF.*,\(%[a-z]*\).*$/\1/p'] conftest.s` - ;; - esac - else - mcount_pic_reg= - fi - mcount_pic_call=`grep 'call.*mcount' conftest.s` - if test -z "$mcount_pic_call"; then - AC_MSG_ERROR([Cannot find mcount call for PIC]) - fi - else - AC_MSG_ERROR([Cannot compile test program for PIC]) - fi -fi - -GMP_DEFINE_RAW(["define(<MCOUNT_NONPIC_REG>, <\`$mcount_nonpic_reg'>)"]) -GMP_DEFINE_RAW(["define(<MCOUNT_NONPIC_CALL>,<\`$mcount_nonpic_call'>)"]) -GMP_DEFINE_RAW(["define(<MCOUNT_PIC_REG>, <\`$mcount_pic_reg'>)"]) -GMP_DEFINE_RAW(["define(<MCOUNT_PIC_CALL>, <\`$mcount_pic_call'>)"]) - -rm -f conftest.* -AC_MSG_RESULT([determined]) -]) - - -dnl GMP_ASM_IA64_ALIGN_OK -dnl --------------------- -dnl Determine whether .align correctly pads with nop instructions in a text -dnl segment. -dnl -dnl gas 2.14 and earlier byte swaps its padding bundle on big endian -dnl systems, which is incorrect (endianness only changes data). What -dnl should be "nop.m / nop.f / nop.i" comes out as "break" instructions. -dnl -dnl The test here detects the bad case, and assumes anything else is ok -dnl (there are many sensible nop bundles, so it'd be impractical to try to -dnl match everything good). - -AC_DEFUN([GMP_ASM_IA64_ALIGN_OK], -[AC_CACHE_CHECK([whether assembler .align padding is good], - gmp_cv_asm_ia64_align_ok, -[cat >conftest.awk <<\EOF -[BEGIN { - want[0] = "011" - want[1] = "160" - want[2] = "074" - want[3] = "040" - want[4] = "000" - want[5] = "040" - want[6] = "020" - want[7] = "221" - want[8] = "114" - want[9] = "000" - want[10] = "100" - want[11] = "200" - want[12] = "122" - want[13] = "261" - want[14] = "000" - want[15] = "200" - - want[16] = "000" - want[17] = "004" - want[18] = "000" - want[19] = "000" - want[20] = "000" - want[21] = "000" - want[22] = "002" - want[23] = "000" - want[24] = "000" - want[25] = "000" - want[26] = "000" - want[27] = "001" - want[28] = "000" - want[29] = "000" - want[30] = "000" - want[31] = "014" - - want[32] = "011" - want[33] = "270" - want[34] = "140" - want[35] = "062" - want[36] = "000" - want[37] = "040" - want[38] = "240" - want[39] = "331" - want[40] = "160" - want[41] = "000" - want[42] = "100" - want[43] = "240" - want[44] = "343" - want[45] = "371" - want[46] = "000" - want[47] = "200" - - result = "yes" -} -{ - for (f = 2; f <= NF; f++) - { - for (i = 0; i < 47; i++) - got[i] = got[i+1]; - got[47] = $f; - - found = 1 - for (i = 0; i < 48; i++) - if (got[i] != want[i]) - { - found = 0 - break - } - if (found) - { - result = "no" - exit - } - } -} -END { - print result -} -]EOF -GMP_TRY_ASSEMBLE( -[ .text - .align 32 -{ .mmi; add r14 = r15, r16 - add r17 = r18, r19 - add r20 = r21, r22 ;; } - .align 32 -{ .mmi; add r23 = r24, r25 - add r26 = r27, r28 - add r29 = r30, r31 ;; } -], - [gmp_cv_asm_ia64_align_ok=`od -b conftest.$OBJEXT | $AWK -f conftest.awk`], - [AC_MSG_WARN([oops, cannot compile test program]) - gmp_cv_asm_ia64_align_ok=yes]) -]) -GMP_DEFINE_RAW(["define(<IA64_ALIGN_OK>, <\`$gmp_cv_asm_ia64_align_ok'>)"]) -]) - - - - -dnl GMP_ASM_M68K_INSTRUCTION -dnl ------------------------ -dnl Not sure if ".l" and "%" are independent settings, but it doesn't hurt -dnl to try all four possibilities. Note that the % ones must be first, so -dnl "d0" won't be interpreted as a label. -dnl -dnl gas 1.92.3 on NetBSD 1.4 needs to be tested with a two operand -dnl instruction. It takes registers without "%", but a single operand -dnl "clrl %d0" only gives a warning, not an error. - -AC_DEFUN([GMP_ASM_M68K_INSTRUCTION], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_CACHE_CHECK([assembler instruction and register style], - gmp_cv_asm_m68k_instruction, -[for i in "addl %d0,%d1" "add.l %d0,%d1" "addl d0,d1" "add.l d0,d1"; do - GMP_TRY_ASSEMBLE( - [ $gmp_cv_asm_text - $i], - [gmp_cv_asm_m68k_instruction=$i - rm -f conftest* - break]) -done -if test -z "$gmp_cv_asm_m68k_instruction"; then - AC_MSG_ERROR([cannot determine assembler instruction and register style]) -fi -]) -case $gmp_cv_asm_m68k_instruction in -"addl d0,d1") want_dot_size=no; want_register_percent=no ;; -"addl %d0,%d1") want_dot_size=no; want_register_percent=yes ;; -"add.l d0,d1") want_dot_size=yes; want_register_percent=no ;; -"add.l %d0,%d1") want_dot_size=yes; want_register_percent=yes ;; -*) AC_MSG_ERROR([oops, unrecognised instruction and register style]) ;; -esac -GMP_DEFINE_RAW(["define(<WANT_REGISTER_PERCENT>, <\`$want_register_percent'>)"]) -GMP_DEFINE_RAW(["define(<WANT_DOT_SIZE>, <\`$want_dot_size'>)"]) -]) - - -dnl GMP_ASM_M68K_ADDRESSING -dnl ----------------------- - -AC_DEFUN([GMP_ASM_M68K_ADDRESSING], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_REQUIRE([GMP_ASM_M68K_INSTRUCTION]) -AC_CACHE_CHECK([assembler addressing style], - gmp_cv_asm_m68k_addressing, -[case $gmp_cv_asm_m68k_instruction in -addl*) movel=movel ;; -add.l*) movel=move.l ;; -*) AC_MSG_ERROR([oops, unrecognised gmp_cv_asm_m68k_instruction]) ;; -esac -case $gmp_cv_asm_m68k_instruction in -*"%d0,%d1") dreg=%d0; areg=%a0 ;; -*"d0,d1") dreg=d0; areg=a0 ;; -*) AC_MSG_ERROR([oops, unrecognised gmp_cv_asm_m68k_instruction]) ;; -esac -GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_text - $movel $dreg, $areg@-], - [gmp_cv_asm_m68k_addressing=mit], -[GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_text - $movel $dreg, -($areg)], - [gmp_cv_asm_m68k_addressing=motorola], -[AC_MSG_ERROR([cannot determine assembler addressing style])])]) -]) -GMP_DEFINE_RAW(["define(<WANT_ADDRESSING>, <\`$gmp_cv_asm_m68k_addressing'>)"]) -]) - - -dnl GMP_ASM_M68K_BRANCHES -dnl --------------------- -dnl "bra" is the standard branch instruction. "jra" or "jbra" are -dnl preferred where available, since on gas for instance they give a -dnl displacement only as big as it needs to be, whereas "bra" is always -dnl 16-bits. This applies to the conditional branches "bcc" etc too. -dnl However "dbcc" etc on gas are already only as big as they need to be. - -AC_DEFUN([GMP_ASM_M68K_BRANCHES], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_CACHE_CHECK([assembler shortest branches], - gmp_cv_asm_m68k_branches, -[for i in jra jbra bra; do - GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_text -foo$gmp_cv_asm_label_suffix - $i foo], - [gmp_cv_asm_m68k_branches=$i - rm -f conftest* - break]) -done -if test -z "$gmp_cv_asm_m68k_branches"; then - AC_MSG_ERROR([cannot determine assembler branching style]) -fi -]) -GMP_DEFINE_RAW(["define(<WANT_BRANCHES>, <\`$gmp_cv_asm_m68k_branches'>)"]) -]) - - -dnl GMP_ASM_POWERPC_PIC_ALWAYS -dnl -------------------------- -dnl Determine whether PIC is the default compiler output. -dnl -dnl SVR4 style "foo@ha" addressing is interpreted as non-PIC, and anything -dnl else is assumed to require PIC always (Darwin or AIX). SVR4 is the -dnl only non-PIC addressing syntax the asm files have at the moment anyway. -dnl -dnl Libtool does this by taking "*-*-aix* | *-*-darwin* | *-*-rhapsody*" to -dnl mean PIC always, but it seems more reliable to grep the compiler -dnl output. -dnl -dnl The next paragraph is untrue for Tiger. Was it ever true? For tiger, -dnl "cc -fast" makes non-PIC the default (and the binaries do run). -dnl On Darwin "cc -static" is non-PIC with syntax "ha16(_foo)", but that's -dnl apparently only for use in the kernel, which we're not attempting to -dnl target at the moment, so don't look for that. - -AC_DEFUN([GMP_ASM_POWERPC_PIC_ALWAYS], -[AC_REQUIRE([AC_PROG_CC]) -AC_CACHE_CHECK([whether compiler output is PIC by default], - gmp_cv_asm_powerpc_pic, -[gmp_cv_asm_powerpc_pic=yes -cat >conftest.c <<EOF -int foo; -int *bar() { return &foo; } -EOF -echo "Test program:" >&AC_FD_CC -cat conftest.c >&AC_FD_CC -gmp_compile="$CC $CFLAGS $CPPFLAGS -S conftest.c >&AC_FD_CC" -if AC_TRY_EVAL(gmp_compile); then - echo "Compiler output:" >&AC_FD_CC - cat conftest.s >&AC_FD_CC - if grep 'foo@ha' conftest.s >/dev/null 2>&AC_FD_CC; then - gmp_cv_asm_powerpc_pic=no - fi - if grep 'ha16(_foo)' conftest.s >/dev/null 2>&AC_FD_CC; then - gmp_cv_asm_powerpc_pic=no - fi -fi -rm -f conftest* -]) -GMP_DEFINE_RAW(["define(<PIC_ALWAYS>,<$gmp_cv_asm_powerpc_pic>)"]) -]) - - -dnl GMP_ASM_POWERPC_R_REGISTERS -dnl --------------------------- -dnl Determine whether the assembler takes powerpc registers with an "r" as -dnl in "r6", or as plain "6". The latter is standard, but NeXT, Rhapsody, -dnl and MacOS-X require the "r" forms. -dnl -dnl See also mpn/powerpc32/powerpc-defs.m4 which uses the result of this -dnl test. - -AC_DEFUN([GMP_ASM_POWERPC_R_REGISTERS], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_CACHE_CHECK([if the assembler needs r on registers], - gmp_cv_asm_powerpc_r_registers, -[GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_text - mtctr 6], -[gmp_cv_asm_powerpc_r_registers=no], -[GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_text - mtctr r6], -[gmp_cv_asm_powerpc_r_registers=yes], -[AC_MSG_ERROR([neither "mtctr 6" nor "mtctr r6" works])])])]) - -GMP_DEFINE_RAW(["define(<WANT_R_REGISTERS>,<$gmp_cv_asm_powerpc_r_registers>)"]) -]) - - -dnl GMP_ASM_SPARC_REGISTER -dnl ---------------------- -dnl Determine whether the assembler accepts the ".register" directive. -dnl Old versions of solaris "as" don't. -dnl -dnl See also mpn/sparc32/sparc-defs.m4 which uses the result of this test. - -AC_DEFUN([GMP_ASM_SPARC_REGISTER], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_CACHE_CHECK([if the assembler accepts ".register"], - gmp_cv_asm_sparc_register, -[GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_text - .register %g2,#scratch -], -[gmp_cv_asm_sparc_register=yes], -[gmp_cv_asm_sparc_register=no])]) - -GMP_DEFINE_RAW(["define(<HAVE_REGISTER>,<$gmp_cv_asm_sparc_register>)"]) -]) - - -dnl GMP_ASM_SPARC_GOTDATA -dnl ---------------------- -dnl Determine whether the assembler accepts gotdata relocations. -dnl -dnl See also mpn/sparc32/sparc-defs.m4 which uses the result of this test. - -AC_DEFUN([GMP_ASM_SPARC_GOTDATA], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_CACHE_CHECK([if the assembler accepts gotdata relocations], - gmp_cv_asm_sparc_gotdata, -[GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_text - .text - sethi %gdop_hix22(symbol), %g1 - or %g1, %gdop_lox10(symbol), %g1 -], -[gmp_cv_asm_sparc_gotdata=yes], -[gmp_cv_asm_sparc_gotdata=no])]) - -GMP_DEFINE_RAW(["define(<HAVE_GOTDATA>,<$gmp_cv_asm_sparc_gotdata>)"]) -]) - - -dnl GMP_ASM_SPARC_SHARED_THUNKS -dnl ---------------------- -dnl Determine whether the assembler supports all of the features -dnl necessary in order to emit shared PIC thunks on sparc. -dnl -dnl See also mpn/sparc32/sparc-defs.m4 which uses the result of this test. - -AC_DEFUN([GMP_ASM_SPARC_SHARED_THUNKS], -[AC_REQUIRE([GMP_ASM_TEXT]) -AC_CACHE_CHECK([if the assembler can support shared PIC thunks], - gmp_cv_asm_sparc_shared_thunks, -[GMP_TRY_ASSEMBLE( -[ $gmp_cv_asm_text - .section .text.__sparc_get_pc_thunk.l7,"axG",@progbits,__sparc_get_pc_thunk.l7,comdat - .weak __sparc_get_pc_thunk.l7 - .hidden __sparc_get_pc_thunk.l7 - .type __sparc_get_pc_thunk.l7, #function -__sparc_get_pc_thunk.l7: - jmp %o7+8 - add %o7, %l7, %l7 -], -[gmp_cv_asm_sparc_shared_thunks=yes], -[gmp_cv_asm_sparc_shared_thunks=no])]) - -GMP_DEFINE_RAW(["define(<HAVE_SHARED_THUNKS>,<$gmp_cv_asm_sparc_shared_thunks>)"]) -]) - - -dnl GMP_C_ATTRIBUTE_CONST -dnl --------------------- - -AC_DEFUN([GMP_C_ATTRIBUTE_CONST], -[AC_CACHE_CHECK([whether gcc __attribute__ ((const)) works], - gmp_cv_c_attribute_const, -[AC_TRY_COMPILE([int foo (int x) __attribute__ ((const));], , - gmp_cv_c_attribute_const=yes, gmp_cv_c_attribute_const=no) -]) -if test $gmp_cv_c_attribute_const = yes; then - AC_DEFINE(HAVE_ATTRIBUTE_CONST, 1, - [Define to 1 if the compiler accepts gcc style __attribute__ ((const))]) -fi -]) - - -dnl GMP_C_ATTRIBUTE_MALLOC -dnl ---------------------- -dnl gcc 2.95.x accepts __attribute__ ((malloc)) but with a warning that -dnl it's ignored. Pretend it doesn't exist in this case, to avoid that -dnl warning. - -AC_DEFUN([GMP_C_ATTRIBUTE_MALLOC], -[AC_CACHE_CHECK([whether gcc __attribute__ ((malloc)) works], - gmp_cv_c_attribute_malloc, -[cat >conftest.c <<EOF -void *foo (int x) __attribute__ ((malloc)); -EOF -gmp_compile="$CC $CFLAGS $CPPFLAGS -c conftest.c >conftest.out 2>&1" -if AC_TRY_EVAL(gmp_compile); then - if grep "attribute directive ignored" conftest.out >/dev/null; then - gmp_cv_c_attribute_malloc=no - else - gmp_cv_c_attribute_malloc=yes - fi -else - gmp_cv_c_attribute_malloc=no -fi -cat conftest.out >&AC_FD_CC -rm -f conftest* -]) -if test $gmp_cv_c_attribute_malloc = yes; then - AC_DEFINE(HAVE_ATTRIBUTE_MALLOC, 1, - [Define to 1 if the compiler accepts gcc style __attribute__ ((malloc))]) -fi -]) - - -dnl GMP_C_ATTRIBUTE_MODE -dnl -------------------- -dnl Introduced in gcc 2.2, but perhaps not in all Apple derived versions. - -AC_DEFUN([GMP_C_ATTRIBUTE_MODE], -[AC_CACHE_CHECK([whether gcc __attribute__ ((mode (XX))) works], - gmp_cv_c_attribute_mode, -[AC_TRY_COMPILE([typedef int SItype __attribute__ ((mode (SI)));], , - gmp_cv_c_attribute_mode=yes, gmp_cv_c_attribute_mode=no) -]) -if test $gmp_cv_c_attribute_mode = yes; then - AC_DEFINE(HAVE_ATTRIBUTE_MODE, 1, - [Define to 1 if the compiler accepts gcc style __attribute__ ((mode (XX)))]) -fi -]) - - -dnl GMP_C_ATTRIBUTE_NORETURN -dnl ------------------------ - -AC_DEFUN([GMP_C_ATTRIBUTE_NORETURN], -[AC_CACHE_CHECK([whether gcc __attribute__ ((noreturn)) works], - gmp_cv_c_attribute_noreturn, -[AC_TRY_COMPILE([void foo (int x) __attribute__ ((noreturn));], , - gmp_cv_c_attribute_noreturn=yes, gmp_cv_c_attribute_noreturn=no) -]) -if test $gmp_cv_c_attribute_noreturn = yes; then - AC_DEFINE(HAVE_ATTRIBUTE_NORETURN, 1, - [Define to 1 if the compiler accepts gcc style __attribute__ ((noreturn))]) -fi -]) - -dnl GMP_C_HIDDEN_ALIAS -dnl ------------------------ - -AC_DEFUN([GMP_C_HIDDEN_ALIAS], -[AC_CACHE_CHECK([whether gcc hidden aliases work], - gmp_cv_c_hidden_alias, -[AC_TRY_COMPILE( -[void hid() __attribute__ ((visibility("hidden"))); -void hid() {} -void pub() __attribute__ ((alias("hid")));], -, gmp_cv_c_hidden_alias=yes, gmp_cv_c_hidden_alias=no) -]) -if test $gmp_cv_c_hidden_alias = yes; then - AC_DEFINE(HAVE_HIDDEN_ALIAS, 1, - [Define to 1 if the compiler accepts gcc style __attribute__ ((visibility)) -and __attribute__ ((alias))]) -fi -]) - -dnl GMP_C_DOUBLE_FORMAT -dnl ------------------- -dnl Determine the floating point format. -dnl -dnl The object file is grepped, in order to work when cross compiling. A -dnl start and end sequence is included to avoid false matches, and allowance -dnl is made for the desired data crossing an "od -b" line boundary. The test -dnl number is a small integer so it should appear exactly, no rounding or -dnl truncation etc. -dnl -dnl "od -b", incidentally, is supported even by Unix V7, and the awk script -dnl used doesn't have functions or anything, so even an "old" awk should -dnl suffice. -dnl -dnl The C code here declares the variable foo as extern; without that, some -dnl C++ compilers will not put foo in the object file. - -AC_DEFUN([GMP_C_DOUBLE_FORMAT], -[AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AC_PROG_AWK]) -AC_CACHE_CHECK([format of `double' floating point], - gmp_cv_c_double_format, -[gmp_cv_c_double_format=unknown -cat >conftest.c <<\EOF -[struct foo { - char before[8]; - double x; - char after[8]; -}; -extern struct foo foo; -struct foo foo = { - { '\001', '\043', '\105', '\147', '\211', '\253', '\315', '\357' }, - -123456789.0, - { '\376', '\334', '\272', '\230', '\166', '\124', '\062', '\020' }, -};] -EOF -gmp_compile="$CC $CFLAGS $CPPFLAGS -c conftest.c >&AC_FD_CC 2>&1" -if AC_TRY_EVAL(gmp_compile); then -cat >conftest.awk <<\EOF -[ -BEGIN { - found = 0 -} - -{ - for (f = 2; f <= NF; f++) - { - for (i = 0; i < 23; i++) - got[i] = got[i+1]; - got[23] = $f; - - # match the special begin and end sequences - if (got[0] != "001") continue - if (got[1] != "043") continue - if (got[2] != "105") continue - if (got[3] != "147") continue - if (got[4] != "211") continue - if (got[5] != "253") continue - if (got[6] != "315") continue - if (got[7] != "357") continue - if (got[16] != "376") continue - if (got[17] != "334") continue - if (got[18] != "272") continue - if (got[19] != "230") continue - if (got[20] != "166") continue - if (got[21] != "124") continue - if (got[22] != "062") continue - if (got[23] != "020") continue - - saw = " (" got[8] " " got[9] " " got[10] " " got[11] " " got[12] " " got[13] " " got[14] " " got[15] ")" - - if (got[8] == "000" && \ - got[9] == "000" && \ - got[10] == "000" && \ - got[11] == "124" && \ - got[12] == "064" && \ - got[13] == "157" && \ - got[14] == "235" && \ - got[15] == "301") - { - print "IEEE little endian" - found = 1 - exit - } - - # Little endian with the two 4-byte halves swapped, as used by ARM - # when the chip is in little endian mode. - # - if (got[8] == "064" && \ - got[9] == "157" && \ - got[10] == "235" && \ - got[11] == "301" && \ - got[12] == "000" && \ - got[13] == "000" && \ - got[14] == "000" && \ - got[15] == "124") - { - print "IEEE little endian, swapped halves" - found = 1 - exit - } - - # gcc 2.95.4 on one GNU/Linux ARM system was seen generating 000 in - # the last byte, whereas 124 is correct. Not sure where the bug - # actually lies, but a running program didn't seem to get a full - # mantissa worth of working bits. - # - # We match this case explicitly so we can give a nice result message, - # but we deliberately exclude it from the normal IEEE double setups - # since it's too broken. - # - if (got[8] == "064" && \ - got[9] == "157" && \ - got[10] == "235" && \ - got[11] == "301" && \ - got[12] == "000" && \ - got[13] == "000" && \ - got[14] == "000" && \ - got[15] == "000") - { - print "bad ARM software floats" - found = 1 - exit - } - - if (got[8] == "301" && \ - got[9] == "235" && \ - got[10] == "157" && \ - got[11] == "064" && \ - got[12] == "124" && \ - got[13] == "000" && \ - got[14] == "000" && \ - got[15] == "000") - { - print "IEEE big endian" - found = 1 - exit - } - - if (got[8] == "353" && \ - got[9] == "315" && \ - got[10] == "242" && \ - got[11] == "171" && \ - got[12] == "000" && \ - got[13] == "240" && \ - got[14] == "000" && \ - got[15] == "000") - { - print "VAX D" - found = 1 - exit - } - - if (got[8] == "275" && \ - got[9] == "301" && \ - got[10] == "064" && \ - got[11] == "157" && \ - got[12] == "000" && \ - got[13] == "124" && \ - got[14] == "000" && \ - got[15] == "000") - { - print "VAX G" - found = 1 - exit - } - - if (got[8] == "300" && \ - got[9] == "033" && \ - got[10] == "353" && \ - got[11] == "171" && \ - got[12] == "242" && \ - got[13] == "240" && \ - got[14] == "000" && \ - got[15] == "000") - { - print "Cray CFP" - found = 1 - exit - } - } -} - -END { - if (! found) - print "unknown", saw -} -] -EOF - gmp_cv_c_double_format=`od -b conftest.$OBJEXT | $AWK -f conftest.awk` - case $gmp_cv_c_double_format in - unknown*) - echo "cannot match anything, conftest.$OBJEXT contains" >&AC_FD_CC - od -b conftest.$OBJEXT >&AC_FD_CC - ;; - esac -else - AC_MSG_WARN([oops, cannot compile test program]) -fi -rm -f conftest* -]) - -AH_VERBATIM([HAVE_DOUBLE], -[/* Define one of the following to 1 for the format of a `double'. - If your format is not among these choices, or you don't know what it is, - then leave all undefined. - IEEE_LITTLE_SWAPPED means little endian, but with the two 4-byte halves - swapped, as used by ARM CPUs in little endian mode. */ -#undef HAVE_DOUBLE_IEEE_BIG_ENDIAN -#undef HAVE_DOUBLE_IEEE_LITTLE_ENDIAN -#undef HAVE_DOUBLE_IEEE_LITTLE_SWAPPED -#undef HAVE_DOUBLE_VAX_D -#undef HAVE_DOUBLE_VAX_G -#undef HAVE_DOUBLE_CRAY_CFP]) - -case $gmp_cv_c_double_format in - "IEEE big endian") - AC_DEFINE(HAVE_DOUBLE_IEEE_BIG_ENDIAN, 1) - GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_DOUBLE_IEEE_BIG_ENDIAN')", POST) - ;; - "IEEE little endian") - AC_DEFINE(HAVE_DOUBLE_IEEE_LITTLE_ENDIAN, 1) - GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_DOUBLE_IEEE_LITTLE_ENDIAN')", POST) - ;; - "IEEE little endian, swapped halves") - AC_DEFINE(HAVE_DOUBLE_IEEE_LITTLE_SWAPPED, 1) ;; - "VAX D") - AC_DEFINE(HAVE_DOUBLE_VAX_D, 1) ;; - "VAX G") - AC_DEFINE(HAVE_DOUBLE_VAX_G, 1) ;; - "Cray CFP") - AC_DEFINE(HAVE_DOUBLE_CRAY_CFP, 1) ;; - "bad ARM software floats") - ;; - unknown*) - AC_MSG_WARN([Could not determine float format.]) - AC_MSG_WARN([Conversions to and from "double" may be slow.]) - ;; - *) - AC_MSG_WARN([oops, unrecognised float format: $gmp_cv_c_double_format]) - ;; -esac -]) - - -dnl GMP_C_STDARG -dnl ------------ -dnl Test whether to use <stdarg.h>. -dnl -dnl Notice the AC_DEFINE here is HAVE_STDARG to avoid clashing with -dnl HAVE_STDARG_H which could arise from AC_CHECK_HEADERS. -dnl -dnl This test might be slight overkill, after all there's really only going -dnl to be ANSI or K&R and the two can be differentiated by AC_PROG_CC_STDC -dnl or very likely by the setups for _PROTO in gmp.h. On the other hand -dnl this test is nice and direct, being what we're going to actually use. - -dnl AC_DEFUN([GMP_C_STDARG], -dnl [AC_CACHE_CHECK([whether <stdarg.h> exists and works], -dnl gmp_cv_c_stdarg, -dnl [AC_TRY_COMPILE( -dnl [#include <stdarg.h> -dnl int foo (int x, ...) -dnl { -dnl va_list ap; -dnl int y; -dnl va_start (ap, x); -dnl y = va_arg (ap, int); -dnl va_end (ap); -dnl return y; -dnl }],, -dnl gmp_cv_c_stdarg=yes, gmp_cv_c_stdarg=no) -dnl ]) -dnl if test $gmp_cv_c_stdarg = yes; then -dnl AC_DEFINE(HAVE_STDARG, 1, [Define to 1 if <stdarg.h> exists and works]) -dnl fi -dnl ]) - - -dnl GMP_FUNC_ALLOCA -dnl --------------- -dnl Determine whether "alloca" is available. This is AC_FUNC_ALLOCA from -dnl autoconf, but changed so it doesn't use alloca.c if alloca() isn't -dnl available, and also to use gmp-impl.h for the conditionals detecting -dnl compiler builtin alloca's. - -AC_DEFUN([GMP_FUNC_ALLOCA], -[AC_REQUIRE([GMP_HEADER_ALLOCA]) -AC_CACHE_CHECK([for alloca (via gmp-impl.h)], - gmp_cv_func_alloca, -[AC_TRY_LINK( -GMP_INCLUDE_GMP_H -[#include "$srcdir/gmp-impl.h" -], - [char *p = (char *) alloca (1);], - gmp_cv_func_alloca=yes, - gmp_cv_func_alloca=no)]) -if test $gmp_cv_func_alloca = yes; then - AC_DEFINE(HAVE_ALLOCA, 1, [Define to 1 if alloca() works (via gmp-impl.h).]) -fi -]) - -AC_DEFUN([GMP_HEADER_ALLOCA], -[# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -AC_CACHE_CHECK([for working alloca.h], - gmp_cv_header_alloca, -[AC_TRY_LINK([#include <alloca.h>], - [char *p = (char *) alloca (2 * sizeof (int));], - gmp_cv_header_alloca=yes, - gmp_cv_header_alloca=no)]) -if test $gmp_cv_header_alloca = yes; then - AC_DEFINE(HAVE_ALLOCA_H, 1, - [Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).]) -fi -]) - - -dnl GMP_OPTION_ALLOCA -dnl ----------------- -dnl Decide what to do about --enable-alloca from the user. -dnl This is a macro so it can require GMP_FUNC_ALLOCA. - -AC_DEFUN([GMP_OPTION_ALLOCA], -[AC_REQUIRE([GMP_FUNC_ALLOCA]) -AC_CACHE_CHECK([how to allocate temporary memory], - gmp_cv_option_alloca, -[case $enable_alloca in - yes) - gmp_cv_option_alloca=alloca - ;; - no) - gmp_cv_option_alloca=malloc-reentrant - ;; - reentrant | notreentrant) - case $gmp_cv_func_alloca in - yes) gmp_cv_option_alloca=alloca ;; - *) gmp_cv_option_alloca=malloc-$enable_alloca ;; - esac - ;; - *) - gmp_cv_option_alloca=$enable_alloca - ;; -esac -]) - -AH_VERBATIM([WANT_TMP], -[/* Define one of these to 1 for the desired temporary memory allocation - method, per --enable-alloca. */ -#undef WANT_TMP_ALLOCA -#undef WANT_TMP_REENTRANT -#undef WANT_TMP_NOTREENTRANT -#undef WANT_TMP_DEBUG]) - -case $gmp_cv_option_alloca in - alloca) - if test $gmp_cv_func_alloca = no; then - AC_MSG_ERROR([--enable-alloca=alloca specified, but alloca not available]) - fi - AC_DEFINE(WANT_TMP_ALLOCA) - TAL_OBJECT=tal-reent$U.lo - ;; - malloc-reentrant) - AC_DEFINE(WANT_TMP_REENTRANT) - TAL_OBJECT=tal-reent$U.lo - ;; - malloc-notreentrant) - AC_DEFINE(WANT_TMP_NOTREENTRANT) - TAL_OBJECT=tal-notreent$U.lo - ;; - debug) - AC_DEFINE(WANT_TMP_DEBUG) - TAL_OBJECT=tal-debug$U.lo - ;; - *) - # checks at the start of configure.in should protect us - AC_MSG_ERROR([unrecognised --enable-alloca=$gmp_cv_option_alloca]) - ;; -esac -AC_SUBST(TAL_OBJECT) -]) - - -dnl GMP_FUNC_SSCANF_WRITABLE_INPUT -dnl ------------------------------ -dnl Determine whether sscanf requires a writable input string. -dnl -dnl It might be nicer to run a program to determine this when doing a -dnl native build, but the systems afflicted are few and far between these -dnl days, so it seems good enough just to list them. - -AC_DEFUN([GMP_FUNC_SSCANF_WRITABLE_INPUT], -[AC_CACHE_CHECK([whether sscanf needs writable input], - gmp_cv_func_sscanf_writable_input, -[case $host in - *-*-hpux9 | *-*-hpux9.*) - gmp_cv_func_sscanf_writable_input=yes ;; - *) gmp_cv_func_sscanf_writable_input=no ;; -esac -]) -case $gmp_cv_func_sscanf_writable_input in - yes) AC_DEFINE(SSCANF_WRITABLE_INPUT, 1, - [Define to 1 if sscanf requires writable inputs]) ;; - no) ;; - *) AC_MSG_ERROR([unrecognised \$gmp_cv_func_sscanf_writable_input]) ;; -esac -]) - - -dnl GMP_FUNC_VSNPRINTF -dnl ------------------ -dnl Check whether vsnprintf exists, and works properly. -dnl -dnl Systems without vsnprintf include mingw32, OSF 4. -dnl -dnl Sparc Solaris 2.7 in 64-bit mode doesn't always truncate, making -dnl vsnprintf like vsprintf, and hence completely useless. On one system a -dnl literal string is enough to provoke the problem, on another a "%n" was -dnl needed. There seems to be something weird going on with the optimizer -dnl or something, since on the first system adding a second check with -dnl "%n", or even just an initialized local variable, makes it work. In -dnl any case, without bothering to get to the bottom of this, the two -dnl program runs in the code below end up successfully detecting the -dnl problem. -dnl -dnl glibc 2.0.x returns either -1 or bufsize-1 for an overflow (both seen, -dnl not sure which 2.0.x does which), but still puts the correct null -dnl terminated result into the buffer. - -AC_DEFUN([GMP_FUNC_VSNPRINTF], -[AC_CHECK_FUNC(vsnprintf, - [gmp_vsnprintf_exists=yes], - [gmp_vsnprintf_exists=no]) -if test "$gmp_vsnprintf_exists" = no; then - gmp_cv_func_vsnprintf=no -else - AC_CACHE_CHECK([whether vsnprintf works], - gmp_cv_func_vsnprintf, - [gmp_cv_func_vsnprintf=yes - for i in 'return check ("hello world");' 'int n; return check ("%nhello world", &n);'; do - AC_TRY_RUN([ -#include <string.h> /* for strcmp */ -#include <stdio.h> /* for vsnprintf */ - -#include <stdarg.h> - -int -check (const char *fmt, ...) -{ - static char buf[128]; - va_list ap; - int ret; - - va_start (ap, fmt); - - ret = vsnprintf (buf, 4, fmt, ap); - - if (strcmp (buf, "hel") != 0) - return 1; - - /* allowed return values */ - if (ret != -1 && ret != 3 && ret != 11) - return 2; - - return 0; -} - -int -main () -{ -$i -} -], - [:], - [gmp_cv_func_vsnprintf=no; break], - [gmp_cv_func_vsnprintf=probably; break]) - done - ]) - if test "$gmp_cv_func_vsnprintf" = probably; then - AC_MSG_WARN([cannot check for properly working vsnprintf when cross compiling, will assume it's ok]) - fi - if test "$gmp_cv_func_vsnprintf" != no; then - AC_DEFINE(HAVE_VSNPRINTF,1, - [Define to 1 if you have the `vsnprintf' function and it works properly.]) - fi -fi -]) - - -dnl GMP_H_EXTERN_INLINE -dnl ------------------- -dnl If the compiler has an "inline" of some sort, check whether the -dnl #ifdef's in gmp.h recognise it. - -AC_DEFUN([GMP_H_EXTERN_INLINE], -[AC_REQUIRE([AC_C_INLINE]) -case $ac_cv_c_inline in -no) ;; -*) - AC_TRY_COMPILE( -[#define __GMP_WITHIN_CONFIGURE_INLINE 1 -]GMP_INCLUDE_GMP_H[ -#ifndef __GMP_EXTERN_INLINE -die die die -#endif -],,, - [case $ac_cv_c_inline in - yes) tmp_inline=inline ;; - *) tmp_inline=$ac_cv_c_inline ;; - esac - AC_MSG_WARN([gmp.h doesnt recognise compiler "$tmp_inline", inlines will be unavailable])]) - ;; -esac -]) - - -dnl GMP_H_HAVE_FILE -dnl --------------- -dnl Check whether the #ifdef's in gmp.h recognise when stdio.h has been -dnl included to get FILE. - -AC_DEFUN([GMP_H_HAVE_FILE], -[AC_TRY_COMPILE( -[#include <stdio.h>] -GMP_INCLUDE_GMP_H -[#if ! _GMP_H_HAVE_FILE -die die die -#endif -],,, - [AC_MSG_WARN([gmp.h doesnt recognise <stdio.h>, FILE prototypes will be unavailable])]) -]) - - -dnl GMP_PROG_CC_FOR_BUILD -dnl --------------------- -dnl Establish CC_FOR_BUILD, a C compiler for the build system. -dnl -dnl If CC_FOR_BUILD is set then it's expected to work, likewise the old -dnl style HOST_CC, otherwise some likely candidates are tried, the same as -dnl configfsf.guess. - -AC_DEFUN([GMP_PROG_CC_FOR_BUILD], -[AC_REQUIRE([AC_PROG_CC]) -if test -n "$CC_FOR_BUILD"; then - GMP_PROG_CC_FOR_BUILD_WORKS($CC_FOR_BUILD,, - [AC_MSG_ERROR([Specified CC_FOR_BUILD doesn't seem to work])]) -elif test -n "$HOST_CC"; then - GMP_PROG_CC_FOR_BUILD_WORKS($HOST_CC, - [CC_FOR_BUILD=$HOST_CC], - [AC_MSG_ERROR([Specified HOST_CC doesn't seem to work])]) -else - for i in "$CC" "$CC $CFLAGS $CPPFLAGS" cc gcc c89 c99; do - GMP_PROG_CC_FOR_BUILD_WORKS($i, - [CC_FOR_BUILD=$i - break]) - done - if test -z "$CC_FOR_BUILD"; then - AC_MSG_ERROR([Cannot find a build system compiler]) - fi -fi - -AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler]) -AC_SUBST(CC_FOR_BUILD) -]) - - -dnl GMP_PROG_CC_FOR_BUILD_WORKS(cc/cflags[,[action-if-good][,action-if-bad]]) -dnl ------------------------------------------------------------------------- -dnl See if the given cc/cflags works on the build system. -dnl -dnl It seems easiest to just use the default compiler output, rather than -dnl figuring out the .exe or whatever at this stage. - -AC_DEFUN([GMP_PROG_CC_FOR_BUILD_WORKS], -[AC_MSG_CHECKING([build system compiler $1]) -# remove anything that might look like compiler output to our "||" expression -rm -f conftest* a.out b.out a.exe a_out.exe -cat >conftest.c <<EOF -int -main () -{ - return 0; -} -EOF -gmp_compile="$1 conftest.c" -cc_for_build_works=no -if AC_TRY_EVAL(gmp_compile); then - if (./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest) >&AC_FD_CC 2>&1; then - cc_for_build_works=yes - fi -fi -rm -f conftest* a.out b.out a.exe a_out.exe -AC_MSG_RESULT($cc_for_build_works) -if test "$cc_for_build_works" = yes; then - ifelse([$2],,:,[$2]) -else - ifelse([$3],,:,[$3]) -fi -]) - - -dnl GMP_PROG_CPP_FOR_BUILD -dnl --------------------- -dnl Establish CPP_FOR_BUILD, the build system C preprocessor. -dnl The choices tried here are the same as AC_PROG_CPP, but with -dnl CC_FOR_BUILD. - -AC_DEFUN([GMP_PROG_CPP_FOR_BUILD], -[AC_REQUIRE([GMP_PROG_CC_FOR_BUILD]) -AC_MSG_CHECKING([for build system preprocessor]) -if test -z "$CPP_FOR_BUILD"; then - AC_CACHE_VAL(gmp_cv_prog_cpp_for_build, - [cat >conftest.c <<EOF -#define FOO BAR -EOF - for i in "$CC_FOR_BUILD -E" "$CC_FOR_BUILD -E -traditional-cpp" "/lib/cpp"; do - gmp_compile="$i conftest.c" - if AC_TRY_EVAL(gmp_compile) >&AC_FD_CC 2>&1; then - gmp_cv_prog_cpp_for_build=$i - break - fi - done - rm -f conftest* a.out b.out a.exe a_out.exe - if test -z "$gmp_cv_prog_cpp_for_build"; then - AC_MSG_ERROR([Cannot find build system C preprocessor.]) - fi - ]) - CPP_FOR_BUILD=$gmp_cv_prog_cpp_for_build -fi -AC_MSG_RESULT([$CPP_FOR_BUILD]) - -AC_ARG_VAR(CPP_FOR_BUILD,[build system C preprocessor]) -AC_SUBST(CPP_FOR_BUILD) -]) - - -dnl GMP_PROG_EXEEXT_FOR_BUILD -dnl ------------------------- -dnl Determine EXEEXT_FOR_BUILD, the build system executable suffix. -dnl -dnl The idea is to find what "-o conftest$foo" will make it possible to run -dnl the program with ./conftest. On Unix-like systems this is of course -dnl nothing, for DOS it's ".exe", or for a strange RISC OS foreign file -dnl system cross compile it can be ",ff8" apparently. Not sure if the -dnl latter actually applies to a build-system executable, maybe it doesn't, -dnl but it won't hurt to try. - -AC_DEFUN([GMP_PROG_EXEEXT_FOR_BUILD], -[AC_REQUIRE([GMP_PROG_CC_FOR_BUILD]) -AC_CACHE_CHECK([for build system executable suffix], - gmp_cv_prog_exeext_for_build, -[cat >conftest.c <<EOF -int -main () -{ - return 0; -} -EOF -for i in .exe ,ff8 ""; do - gmp_compile="$CC_FOR_BUILD conftest.c -o conftest$i" - if AC_TRY_EVAL(gmp_compile); then - if (./conftest) 2>&AC_FD_CC; then - gmp_cv_prog_exeext_for_build=$i - break - fi - fi -done -rm -f conftest* -if test "${gmp_cv_prog_exeext_for_build+set}" != set; then - AC_MSG_ERROR([Cannot determine executable suffix]) -fi -]) -AC_SUBST(EXEEXT_FOR_BUILD,$gmp_cv_prog_exeext_for_build) -]) - - -dnl GMP_C_FOR_BUILD_ANSI -dnl -------------------- -dnl Determine whether CC_FOR_BUILD is ANSI, and establish U_FOR_BUILD -dnl accordingly. -dnl -dnl FIXME: Use AC_PROG_CC sets ac_cv_prog_cc_c89 which could be used instead - -AC_DEFUN([GMP_C_FOR_BUILD_ANSI], -[AC_REQUIRE([GMP_PROG_CC_FOR_BUILD]) -AC_CACHE_CHECK([whether build system compiler is ANSI], - gmp_cv_c_for_build_ansi, -[cat >conftest.c <<EOF -int -main (int argc, char **argv) -{ - return 0; -} -EOF -gmp_compile="$CC_FOR_BUILD conftest.c" -if AC_TRY_EVAL(gmp_compile); then - gmp_cv_c_for_build_ansi=yes -else - gmp_cv_c_for_build_ansi=no -fi -rm -f conftest* a.out b.out a.exe a_out.exe -]) -if test "$gmp_cv_c_for_build_ansi" = yes; then - U_FOR_BUILD= -else - AC_SUBST(U_FOR_BUILD,_) -fi -]) - - -dnl GMP_CHECK_LIBM_FOR_BUILD -dnl ------------------------ -dnl Establish LIBM_FOR_BUILD as -lm, if that seems to work. -dnl -dnl Libtool AC_CHECK_LIBM also uses -lmw on *-ncr-sysv4.3*, if it works. -dnl Don't know what that does, lets assume it's not needed just for log(). - -AC_DEFUN([GMP_CHECK_LIBM_FOR_BUILD], -[AC_REQUIRE([GMP_PROG_CC_FOR_BUILD]) -AC_CACHE_CHECK([for build system compiler math library], - gmp_cv_check_libm_for_build, -[cat >conftest.c <<EOF -#include <math.h> -int -main () -{ - return 0; -} -double d; -double -foo () -{ - return log (d); -} -EOF -gmp_compile="$CC_FOR_BUILD conftest.c -lm" -if AC_TRY_EVAL(gmp_compile); then - gmp_cv_check_libm_for_build=-lm -else - gmp_cv_check_libm_for_build=no -fi -rm -f conftest* a.out b.out a.exe a_out.exe -]) -case $gmp_cv_check_libm_for_build in - yes) AC_SUBST(LIBM_FOR_BUILD,-lm) ;; - no) LIBM_FOR_BUILD= ;; - *) LIBM_FOR_BUILD=$gmp_cv_check_libm_for_build ;; -esac -]) diff --git a/src/plugins/e-acsl/contrib/libgmp/aclocal.m4 b/src/plugins/e-acsl/contrib/libgmp/aclocal.m4 deleted file mode 100644 index 323c63c0a8318c5b1907d839e90eb229f42ea1f2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/aclocal.m4 +++ /dev/null @@ -1,9934 +0,0 @@ -# generated automatically by aclocal 1.15 -*- Autoconf -*- - -# Copyright (C) 1996-2014 Free Software Foundation, Inc. - -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, -[m4_warning([this file was generated for autoconf 2.69. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically 'autoreconf'.])]) - -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 2014 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. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program or library that is built -# using GNU Libtool, you may include this file under the same -# distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -]) - -# serial 58 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK -AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS=$ltmain - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_PREPARE_CC_BASENAME -# ----------------------- -m4_defun([_LT_PREPARE_CC_BASENAME], [ -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -func_cc_basename () -{ - for cc_temp in @S|@*""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac - done - func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -} -])# _LT_PREPARE_CC_BASENAME - - -# _LT_CC_BASENAME(CC) -# ------------------- -# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, -# but that macro is also expanded into generated libtool script, which -# arranges for $SED and $ECHO to be set by different means. -m4_defun([_LT_CC_BASENAME], -[m4_require([_LT_PREPARE_CC_BASENAME])dnl -AC_REQUIRE([_LT_DECL_SED])dnl -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl -func_cc_basename $1 -cc_basename=$func_cc_basename_result -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl - -_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl -dnl -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_WITH_SYSROOT])dnl -m4_require([_LT_CMD_TRUNCATE])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options that allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test set != "${COLLECT_NAMES+set}"; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a '.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld=$lt_cv_prog_gnu_ld - -old_CC=$CC -old_CFLAGS=$CFLAGS - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PREPARE_SED_QUOTE_VARS -# -------------------------- -# Define a few sed substitution that help us do robust quoting. -m4_defun([_LT_PREPARE_SED_QUOTE_VARS], -[# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' -]) - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from 'configure', and 'config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# 'config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain=$ac_aux_dir/ltmain.sh -])# _LT_PROG_LTMAIN - - - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the 'libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to 'config.status' so that its -# declaration there will have the same value as in 'configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags='_LT_TAGS'dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into 'config.status', and then the shell code to quote escape them in -# for loops in 'config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$[]1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -_LT_OUTPUT_LIBTOOL_INIT -]) - -# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) -# ------------------------------------ -# Generate a child script FILE with all initialization necessary to -# reuse the environment learned by the parent script, and make the -# file executable. If COMMENT is supplied, it is inserted after the -# '#!' sequence but before initialization text begins. After this -# macro, additional text can be appended to FILE to form the body of -# the child script. The macro ends with non-zero status if the -# file could not be fully written (such as if the disk is full). -m4_ifdef([AS_INIT_GENERATED], -[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], -[m4_defun([_LT_GENERATED_FILE_INIT], -[m4_require([AS_PREPARE])]dnl -[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl -[lt_write_fail=0 -cat >$1 <<_ASEOF || lt_write_fail=1 -#! $SHELL -# Generated by $as_me. -$2 -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$1 <<\_ASEOF || lt_write_fail=1 -AS_SHELL_SANITIZE -_AS_PREPARE -exec AS_MESSAGE_FD>&1 -_ASEOF -test 0 = "$lt_write_fail" && chmod +x $1[]dnl -m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], -[# Run this file to recreate a libtool stub with the current configuration.]) - -cat >>"$CONFIG_LT" <<\_LTEOF -lt_cl_silent=false -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -'$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to <bug-libtool@gnu.org>." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2011 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test 0 != $[#] -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try '$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try '$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -lt_cl_success=: -test yes = "$silent" && - lt_config_lt_args="$lt_config_lt_args --quiet" -exec AS_MESSAGE_LOG_FD>/dev/null -$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false -exec AS_MESSAGE_LOG_FD>>config.log -$lt_cl_success || AS_EXIT(1) -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options that allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST - fi - - cfgfile=${ofile}T - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL -# Generated automatically by $as_me ($PACKAGE) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. - -# Provide generalized library-building support services. -# Written by Gordon Matzigkeit, 1996 - -_LT_COPYING -_LT_LIBTOOL_TAGS - -# Configured defaults for sys_lib_dlsearch_path munging. -: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - cat <<'_LT_EOF' >> "$cfgfile" - -# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE - -_LT_PREPARE_MUNGE_PATH_LIST -_LT_PREPARE_CC_BASENAME - -# ### END FUNCTIONS SHARED WITH CONFIGURE - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test set != "${COLLECT_NAMES+set}"; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Go], [_LT_LANG(GO)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -m4_ifndef([AC_PROG_GO], [ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_GO. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -m4_defun([AC_PROG_GO], -[AC_LANG_PUSH(Go)dnl -AC_ARG_VAR([GOC], [Go compiler command])dnl -AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl -_AC_ARG_VAR_LDFLAGS()dnl -AC_CHECK_TOOL(GOC, gccgo) -if test -z "$GOC"; then - if test -n "$ac_tool_prefix"; then - AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) - fi -fi -if test -z "$GOC"; then - AC_CHECK_PROG(GOC, gccgo, gccgo, false) -fi -])#m4_defun -])#m4_ifndef - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([AC_PROG_GO], - [LT_LANG(GO)], - [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) -dnl AC_DEFUN([AC_LIBTOOL_RC], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "$LT_MULTI_MODULE"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test 0 = "$_lt_result"; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS=$save_LDFLAGS - ]) - - AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], - [lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD - echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD - $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD - echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD - $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - 10.[[012]][[,.]]*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test yes = "$lt_cv_apple_cc_single_mod"; then - _lt_dar_single_mod='$single_module' - fi - if test yes = "$lt_cv_ld_exported_symbols_list"; then - _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' - fi - if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES([TAG]) -# --------------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - if test yes = "$lt_cv_ld_force_load"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], - [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined - case $cc_basename in - ifort*|nagfor*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test yes = "$_lt_dar_can_shared"; then - output_verbose_link_cmd=func_echo_all - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" - m4_if([$1], [CXX], -[ if test yes != "$lt_cv_apple_cc_single_mod"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) -# ---------------------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -# Store the results from the different compilers for each TAGNAME. -# Allow to override them for all tags through lt_cv_aix_libpath. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath -else - AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], - [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ - lt_aix_libpath_sed='[ - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }]' - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi],[]) - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib - fi - ]) - aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) -fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[m4_divert_text([M4SH-INIT], [$1 -])])# _LT_SHELL_INIT - - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Find how we can fake an echo command that does not interpret backslash. -# In particular, with Autoconf 2.60 or later we add some code to the start -# of the generated configure script that will find a shell with a builtin -# printf (that we can use as an echo command). -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -AC_MSG_CHECKING([how to print strings]) -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$[]1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -case $ECHO in - printf*) AC_MSG_RESULT([printf]) ;; - print*) AC_MSG_RESULT([print -r]) ;; - *) AC_MSG_RESULT([cat]) ;; -esac - -m4_ifdef([_AS_DETECT_SUGGESTED], -[_AS_DETECT_SUGGESTED([ - test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test "X`printf %s $ECHO`" = "X$ECHO" \ - || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) - -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_WITH_SYSROOT -# ---------------- -AC_DEFUN([_LT_WITH_SYSROOT], -[AC_MSG_CHECKING([for sysroot]) -AC_ARG_WITH([sysroot], -[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], - [Search for dependent libraries within DIR (or the compiler's sysroot - if not specified).])], -[], [with_sysroot=no]) - -dnl lt_sysroot will always be passed unquoted. We quote it here -dnl in case the user passed a directory name. -lt_sysroot= -case $with_sysroot in #( - yes) - if test yes = "$GCC"; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - AC_MSG_RESULT([$with_sysroot]) - AC_MSG_ERROR([The sysroot must be an absolute path.]) - ;; -esac - - AC_MSG_RESULT([${lt_sysroot:-no}]) -_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl -[dependent libraries, and where our libraries should be installed.])]) - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test no = "$enable_libtool_lock" || enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out what ABI is being produced by ac_compile, and set mode - # options accordingly. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE=32 - ;; - *ELF-64*) - HPUX_IA64_MODE=64 - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test yes = "$lt_cv_prog_gnu_ld"; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -mips64*-*linux*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - emul=elf - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - emul="${emul}32" - ;; - *64-bit*) - emul="${emul}64" - ;; - esac - case `/usr/bin/file conftest.$ac_objext` in - *MSB*) - emul="${emul}btsmip" - ;; - *LSB*) - emul="${emul}ltsmip" - ;; - esac - case `/usr/bin/file conftest.$ac_objext` in - *N32*) - emul="${emul}n32" - ;; - esac - LD="${LD-ld} -m $emul" - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. Note that the listed cases only cover the - # situations where additional linker options are needed (such as when - # doing 32-bit compilation for a host where ld defaults to 64-bit, or - # vice versa); the common cases where no linker options are needed do - # not appear in the list. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - case `/usr/bin/file conftest.o` in - *x86-64*) - LD="${LD-ld} -m elf32_x86_64" - ;; - *) - LD="${LD-ld} -m elf_i386" - ;; - esac - ;; - powerpc64le-*linux*) - LD="${LD-ld} -m elf32lppclinux" - ;; - powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - powerpcle-*linux*) - LD="${LD-ld} -m elf64lppc" - ;; - powerpc-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test yes != "$lt_cv_cc_needs_belf"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS=$SAVE_CFLAGS - fi - ;; -*-*solaris*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*|x86_64-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD=${LD-ld}_sol2 - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks=$enable_libtool_lock -])# _LT_ENABLE_LOCK - - -# _LT_PROG_AR -# ----------- -m4_defun([_LT_PROG_AR], -[AC_CHECK_TOOLS(AR, [ar], false) -: ${AR=ar} -: ${AR_FLAGS=cru} -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) - -AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], - [lt_cv_ar_at_file=no - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], - [echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([lt_ar_try]) - if test 0 -eq "$ac_status"; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - AC_TRY_EVAL([lt_ar_try]) - if test 0 -ne "$ac_status"; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - ]) - ]) - -if test no = "$lt_cv_ar_at_file"; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi -_LT_DECL([], [archiver_list_spec], [1], - [How to feed a file listing to the archiver]) -])# _LT_PROG_AR - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[_LT_PROG_AR - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - bitrig* | openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -_LT_DECL([], [lock_old_archive_extraction], [0], - [Whether to use a lock for old archive extraction]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test yes = "[$]$2"; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS=$save_LDFLAGS -]) - -if test yes = "[$]$2"; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring=ABCD - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test X`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test 17 != "$i" # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n "$lt_cv_sys_max_cmd_len"; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test yes = "$cross_compiling"; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include <dlfcn.h> -#endif - -#include <stdio.h> - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisibility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test yes != "$enable_dlopen"; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen=load_add_on - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen=LoadLibrary - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen=dlopen - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ - lt_cv_dlopen=dyld - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - tpf*) - # Don't try to run any link tests for TPF. We know it's impossible - # because TPF is a cross-compiler, and we know how we open DSOs. - lt_cv_dlopen=dlopen - lt_cv_dlopen_libs= - lt_cv_dlopen_self=no - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen=shl_load], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen=dlopen], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test no = "$lt_cv_dlopen"; then - enable_dlopen=no - else - enable_dlopen=yes - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS=$CPPFLAGS - test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS=$LDFLAGS - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS=$LIBS - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test yes = "$lt_cv_dlopen_self"; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS=$save_CPPFLAGS - LDFLAGS=$save_LDFLAGS - LIBS=$save_LIBS - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links=nottested -if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test no = "$hard_links"; then - AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", - [Define to the sub-directory where libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then - - # We can hardcode non-existent directories. - if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && - test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || - test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then - # Fast installation is not supported - enable_fast_install=no -elif test yes = "$shlibpath_overrides_runpath" || - test no = "$enable_shared"; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP"; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_PREPARE_MUNGE_PATH_LIST -# --------------------------- -# Make sure func_munge_path_list() is defined correctly. -m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], -[[# func_munge_path_list VARIABLE PATH -# ----------------------------------- -# VARIABLE is name of variable containing _space_ separated list of -# directories to be munged by the contents of PATH, which is string -# having a format: -# "DIR[:DIR]:" -# string "DIR[ DIR]" will be prepended to VARIABLE -# ":DIR[:DIR]" -# string "DIR[ DIR]" will be appended to VARIABLE -# "DIRP[:DIRP]::[DIRA:]DIRA" -# string "DIRP[ DIRP]" will be prepended to VARIABLE and string -# "DIRA[ DIRA]" will be appended to VARIABLE -# "DIR[:DIR]" -# VARIABLE will be replaced by "DIR[ DIR]" -func_munge_path_list () -{ - case x@S|@2 in - x) - ;; - *:) - eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" - ;; - x:*) - eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" - ;; - *) - eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" - ;; - esac -} -]])# _LT_PREPARE_PATH_LIST - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test yes = "$GCC"; then - case $host_os in - darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; - *) lt_awk_arg='/^libraries:/' ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; - *) lt_sed_strip_eq='s|=/|/|g' ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary... - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - # ...but if some path component already ends with the multilib dir we assume - # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). - case "$lt_multi_os_dir; $lt_search_path_spec " in - "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) - lt_multi_os_dir= - ;; - esac - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" - elif test -n "$lt_multi_os_dir"; then - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS = " "; FS = "/|\n";} { - lt_foo = ""; - lt_count = 0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo = "/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=.so -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -AC_ARG_VAR([LT_SYS_LIBRARY_PATH], -[User-defined run-time library search path.]) - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='$libname$release$shared_ext$major' - ;; - -aix[[4-9]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test ia64 = "$host_cpu"; then - # AIX 5 supports IA64 - library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line '#! .'. This would cause the generated library to - # depend on '.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # Using Import Files as archive members, it is possible to support - # filename-based versioning of shared library archives on AIX. While - # this would work for both with and without runtime linking, it will - # prevent static linking of such archives. So we do filename-based - # shared library versioning with .so extension only, which is used - # when both runtime linking and shared linking is enabled. - # Unfortunately, runtime linking may impact performance, so we do - # not want this to be the default eventually. Also, we use the - # versioned .so libs for executables only if there is the -brtl - # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. - # To allow for filename-based versioning support, we need to create - # libNAME.so.V as an archive file, containing: - # *) an Import File, referring to the versioned filename of the - # archive as well as the shared archive member, telling the - # bitwidth (32 or 64) of that shared object, and providing the - # list of exported symbols of that shared object, eventually - # decorated with the 'weak' keyword - # *) the shared object with the F_LOADONLY flag set, to really avoid - # it being seen by the linker. - # At run time we better use the real file rather than another symlink, - # but for link time we create the symlink libNAME.so -> libNAME.so.V - - case $with_aix_soname,$aix_use_runtimelinking in - # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - aix,yes) # traditional libtool - dynamic_linker='AIX unversionable lib.so' - # If using run time linking (on AIX 4.2 or later) use lib<name>.so - # instead of lib<name>.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - aix,no) # traditional AIX only - dynamic_linker='AIX lib.a[(]lib.so.V[)]' - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - ;; - svr4,*) # full svr4 only - dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,yes) # both, prefer svr4 - dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # unpreferred sharedlib libNAME.a needs extra handling - postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' - postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,no) # both, prefer aix - dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling - postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' - postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' - ;; - esac - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='$libname$shared_ext' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' - library_names_spec='$libname.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec=$LIB - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' - soname_spec='$libname$release$major$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[23]].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - # Handle Gentoo/FreeBSD as it was Linux - case $host_vendor in - gentoo) - version_type=linux ;; - *) - version_type=freebsd-$objformat ;; - esac - - case $version_type in - freebsd-elf*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - need_version=yes - ;; - linux) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - need_lib_prefix=no - need_version=no - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=no - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - if test 32 = "$HPUX_IA64_MODE"; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - sys_lib_dlsearch_path_spec=/usr/lib/hpux32 - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - sys_lib_dlsearch_path_spec=/usr/lib/hpux64 - fi - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[[3-9]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test yes = "$lt_cv_prog_gnu_ld"; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" - sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -linux*android*) - version_type=none # Android doesn't support versioned libraries. - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext' - soname_spec='$libname$release$shared_ext' - finish_cmds= - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], - [lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [lt_cv_shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - ]) - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Ideally, we could use ldconfig to report *all* directores which are - # searched for libraries, however this is still not possible. Aside from not - # being certain /sbin/ldconfig is available, command - # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, - # even though it is searched at run-time. Try to do the best guess by - # appending ld.so.conf contents (and includes) to the search path. - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd* | bitrig*) - version_type=sunos - sys_lib_dlsearch_path_spec=/usr/lib - need_lib_prefix=no - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - need_version=no - else - need_version=yes - fi - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -os2*) - libname_spec='$name' - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - # OS/2 can only load a DLL with a base name of 8 characters or less. - soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; - v=$($ECHO $release$versuffix | tr -d .-); - n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); - $ECHO $n$v`$shared_ext' - library_names_spec='${libname}_dll.$libext' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=BEGINLIBPATH - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test yes = "$with_gnu_ld"; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec; then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' - soname_spec='$libname$shared_ext.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=sco - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test yes = "$with_gnu_ld"; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test no = "$dynamic_linker" && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test yes = "$GCC"; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then - sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec -fi - -if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then - sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec -fi - -# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... -configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec - -# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code -func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" - -# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool -configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [install_override_mode], [1], - [Permission mode override for installation of shared libraries]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], - [Detected run-time system search path for libraries]) -_LT_DECL([], [configure_time_lt_sys_library_path], [2], - [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program that can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD=$MAGIC_CMD - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$1"; then - lt_cv_path_MAGIC_CMD=$ac_dir/"$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD=$lt_cv_path_MAGIC_CMD - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS=$lt_save_ifs - MAGIC_CMD=$lt_save_MAGIC_CMD - ;; -esac]) -MAGIC_CMD=$lt_cv_path_MAGIC_CMD -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program that can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PROG_ECHO_BACKSLASH])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test no = "$withval" || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return, which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD=$ac_prog - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test yes = "$with_gnu_ld"; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD=$ac_dir/$ac_prog - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in - *GNU* | *'with BFD'*) - test no != "$with_gnu_ld" && break - ;; - *) - test yes != "$with_gnu_ld" && break - ;; - esac - fi - done - IFS=$lt_save_ifs -else - lt_cv_path_LD=$LD # Let the user override the test with a path. -fi]) -LD=$lt_cv_path_LD -if test -n "$LD"; then - AC_MSG_RESULT($LD) -else - AC_MSG_RESULT(no) -fi -test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) -_LT_PATH_LD_GNU -AC_SUBST([LD]) - -_LT_TAGDECL([], [LD], [1], [The linker used to build libraries]) -])# LT_PATH_LD - -# Old names: -AU_ALIAS([AM_PROG_LD], [LT_PATH_LD]) -AU_ALIAS([AC_PROG_LD], [LT_PATH_LD]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_LD], []) -dnl AC_DEFUN([AC_PROG_LD], []) - - -# _LT_PATH_LD_GNU -#- -------------- -m4_defun([_LT_PATH_LD_GNU], -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, -[# I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 </dev/null` in -*GNU* | *'with BFD'*) - lt_cv_prog_gnu_ld=yes - ;; -*) - lt_cv_prog_gnu_ld=no - ;; -esac]) -with_gnu_ld=$lt_cv_prog_gnu_ld -])# _LT_PATH_LD_GNU - - -# _LT_CMD_RELOAD -# -------------- -# find reload flag for linker -# -- PORTME Some linkers may need a different reload flag. -m4_defun([_LT_CMD_RELOAD], -[AC_CACHE_CHECK([for $LD option to reload object files], - lt_cv_ld_reload_flag, - [lt_cv_ld_reload_flag='-r']) -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test yes != "$GCC"; then - reload_cmds=false - fi - ;; - darwin*) - if test yes = "$GCC"; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac -_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl -_LT_TAGDECL([], [reload_cmds], [2])dnl -])# _LT_CMD_RELOAD - - -# _LT_PATH_DD -# ----------- -# find a working dd -m4_defun([_LT_PATH_DD], -[AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD], -[printf 0123456789abcdef0123456789abcdef >conftest.i -cat conftest.i conftest.i >conftest2.i -: ${lt_DD:=$DD} -AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], -[if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then - cmp -s conftest.i conftest.out \ - && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: -fi]) -rm -f conftest.i conftest2.i conftest.out]) -])# _LT_PATH_DD - - -# _LT_CMD_TRUNCATE -# ---------------- -# find command to truncate a binary pipe -m4_defun([_LT_CMD_TRUNCATE], -[m4_require([_LT_PATH_DD]) -AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], -[printf 0123456789abcdef0123456789abcdef >conftest.i -cat conftest.i conftest.i >conftest2.i -lt_cv_truncate_bin= -if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then - cmp -s conftest.i conftest.out \ - && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" -fi -rm -f conftest.i conftest2.i conftest.out -test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) -_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], - [Command to truncate a binary pipe]) -])# _LT_CMD_TRUNCATE - - -# _LT_CHECK_MAGIC_METHOD -# ---------------------- -# how to check for library dependencies -# -- PORTME fill in with the dynamic library characteristics -m4_defun([_LT_CHECK_MAGIC_METHOD], -[m4_require([_LT_DECL_EGREP]) -m4_require([_LT_DECL_OBJDUMP]) -AC_CACHE_CHECK([how to recognize dependent libraries], -lt_cv_deplibs_check_method, -[lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# 'unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# that responds to the $file_magic_cmd with a given extended regex. -# If you have 'file' or equivalent on your system and you're not sure -# whether 'pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[[4-9]]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[[45]]*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd* | bitrig*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -os2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method = "file_magic"]) -_LT_DECL([], [file_magic_glob], [1], - [How to find potential files when deplibs_check_method = "file_magic"]) -_LT_DECL([], [want_nocaseglob], [1], - [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM=$NM -else - lt_nm_to_check=${ac_tool_prefix}nm - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - tmp_nm=$ac_dir/$lt_tmp_nm - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the 'sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty - case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; - *) lt_bad_file=/dev/null ;; - esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in - *$lt_bad_file* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break 2 - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break 2 - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS=$lt_save_ifs - done - : ${lt_cv_path_NM=no} -fi]) -if test no != "$lt_cv_path_NM"; then - NM=$lt_cv_path_NM -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols -headers" - ;; - *) - DUMPBIN=: - ;; - esac - fi - AC_SUBST([DUMPBIN]) - if test : != "$DUMPBIN"; then - NM=$DUMPBIN - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - -# _LT_CHECK_SHAREDLIB_FROM_LINKLIB -# -------------------------------- -# how to determine the name of the shared library -# associated with a specific link library. -# -- PORTME fill in with the dynamic library characteristics -m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], -[m4_require([_LT_DECL_EGREP]) -m4_require([_LT_DECL_OBJDUMP]) -m4_require([_LT_DECL_DLLTOOL]) -AC_CACHE_CHECK([how to associate runtime and link libraries], -lt_cv_sharedlib_from_linklib_cmd, -[lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh; - # decide which one to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd=$ECHO - ;; -esac -]) -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - -_LT_DECL([], [sharedlib_from_linklib_cmd], [1], - [Command to associate shared and link libraries]) -])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB - - -# _LT_PATH_MANIFEST_TOOL -# ---------------------- -# locate the manifest tool -m4_defun([_LT_PATH_MANIFEST_TOOL], -[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], - [lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&AS_MESSAGE_LOG_FD - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest*]) -if test yes != "$lt_cv_path_mainfest_tool"; then - MANIFEST_TOOL=: -fi -_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl -])# _LT_PATH_MANIFEST_TOOL - - -# _LT_DLL_DEF_P([FILE]) -# --------------------- -# True iff FILE is a Windows DLL '.def' file. -# Keep in sync with func_dll_def_p in the libtool script -AC_DEFUN([_LT_DLL_DEF_P], -[dnl - test DEF = "`$SED -n dnl - -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace - -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments - -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl - -e q dnl Only consider the first "real" line - $1`" dnl -])# _LT_DLL_DEF_P - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM=-lm) - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test yes = "$GCC"; then - case $cc_basename in - nvcc*) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; - *) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; - esac - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test ia64 = "$host_cpu"; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Gets list of data symbols to import. - lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" - # Adjust the below global symbol transforms to fixup imported variables. - lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" - lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" - lt_c_name_lib_hook="\ - -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ - -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" -else - # Disable hooks by default. - lt_cv_sys_global_symbol_to_import= - lt_cdecl_hook= - lt_c_name_hook= - lt_c_name_lib_hook= -fi - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n"\ -$lt_cdecl_hook\ -" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ -$lt_c_name_hook\ -" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" - -# Transform an extracted symbol line into symbol name with lib prefix and -# symbol address. -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ -$lt_c_name_lib_hook\ -" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ -" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function, - # D for any global variable and I for any imported variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ -" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ -" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ -" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ -" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE -/* DATA imports from DLLs on WIN32 can't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT@&t@_DLSYM_CONST -#elif defined __osf__ -/* This system does not cope well with relocations in const data. */ -# define LT@&t@_DLSYM_CONST -#else -# define LT@&t@_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT@&t@_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS=conftstm.$ac_objext - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test yes = "$pipe_works"; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], - [Transform the output of nm into a list of symbols to manually relocate]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], - [The name lister interface]) -_LT_DECL([], [nm_file_list_spec], [1], - [Specify filename containing input files for $NM]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test yes = "$GXX"; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the '-m68020' flag to GCC prevents building anything better, - # like '-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - case $host_os in - os2*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' - ;; - esac - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' - if test ia64 != "$host_cpu"; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64, which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test yes = "$GCC"; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the '-m68020' flag to GCC prevents building anything better, - # like '-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - case $host_os in - os2*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' - ;; - esac - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' - if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - case $cc_basename in - nagfor*) - # NAG Fortran compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - case $host_os in - os2*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' - ;; - esac - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - # old Intel for x86_64, which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - nagfor*) - # NAG Fortran compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - tcc*) - # Fabrice Bellard et al's Tiny C Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - *Sun\ F* | *Sun*Fortran*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Intel*\ [[CF]]*Compiler*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - *Portland\ Group*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms that do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac - -AC_CACHE_CHECK([for $compiler option to produce PIC], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to GNU nm, but means don't demangle to AIX nm. - # Without the "-l" option, or with the "-B" option, AIX nm treats - # weak defined symbols like other global defined symbols, whereas - # GNU nm marks them as "W". - # While the 'weak' keyword is ignored in the Export File, we need - # it in the Import File for the 'aix-soname' feature, so we have - # to replace the "-B" option with "-P" for AIX nm. - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - ;; - esac - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ' (' and ')$', so one must not match beginning or - # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', - # as well as any symbol that contains 'd'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test yes != "$GCC"; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd* | bitrig*) - with_gnu_ld=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test yes = "$with_gnu_ld"; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; - *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test yes = "$lt_use_gnu_ld_interface"; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='$wl' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test ia64 != "$host_cpu"; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file, use it as - # is; otherwise, prepend EXPORTS... - _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - shrext_cmds=.dll - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test linux-dietlibc = "$host_os"; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test no = "$tmp_diet" - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - nagfor*) # NAGFOR 5.3 - tmp_sharedflag='-Wl,-shared' ;; - xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - - if test yes = "$supports_anon_versioning"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - tcc*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' - ;; - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test yes = "$supports_anon_versioning"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test ia64 = "$host_cpu"; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag= - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to GNU nm, but means don't demangle to AIX nm. - # Without the "-l" option, or with the "-B" option, AIX nm treats - # weak defined symbols like other global defined symbols, whereas - # GNU nm marks them as "W". - # While the 'weak' keyword is ignored in the Export File, we need - # it in the Import File for the 'aix-soname' feature, so we have - # to replace the "-B" option with "-P" for AIX nm. - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # have runtime linking enabled, and use it for executables. - # For shared libraries, we enable/disable runtime linking - # depending on the kind of the shared library created - - # when "with_aix_soname,aix_use_runtimelinking" is: - # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables - # "aix,yes" lib.so shared, rtl:yes, for executables - # lib.a static archive - # "both,no" lib.so.V(shr.o) shared, rtl:yes - # lib.a(lib.so.V) shared, rtl:no, for executables - # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a(lib.so.V) shared, rtl:no - # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a static archive - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then - aix_use_runtimelinking=yes - break - fi - done - if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then - # With aix-soname=svr4, we create the lib.so.V shared archives only, - # so we don't have lib.a shared libs to link our executables. - # We have to force runtime linking in this case. - aix_use_runtimelinking=yes - LDFLAGS="$LDFLAGS -Wl,-brtl" - fi - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='$wl-f,' - case $with_aix_soname,$aix_use_runtimelinking in - aix,*) ;; # traditional, no import file - svr4,* | *,yes) # use import file - # The Import File defines what to hardcode. - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - ;; - esac - - if test yes = "$GCC"; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`$CC -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test yes = "$aix_use_runtimelinking"; then - shared_flag="$shared_flag "'$wl-G' - fi - # Need to ensure runtime linking is disabled for the traditional - # shared library, or the linker may eventually find shared libraries - # /with/ Import File - we do not want to mix them. - shared_flag_aix='-shared' - shared_flag_svr4='-shared $wl-G' - else - # not using gcc - if test ia64 = "$host_cpu"; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test yes = "$aix_use_runtimelinking"; then - shared_flag='$wl-G' - else - shared_flag='$wl-bM:SRE' - fi - shared_flag_aix='$wl-bM:SRE' - shared_flag_svr4='$wl-G' - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag - else - if test ia64 = "$host_cpu"; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' - if test yes = "$with_gnu_ld"; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' - # -brtl affects multiple linker settings, -berok does not and is overridden later - compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' - if test svr4 != "$with_aix_soname"; then - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' - fi - if test aix != "$with_aix_soname"; then - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' - else - # used by -dlpreopen to get the symbols - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' - fi - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then - cp "$export_symbols" "$output_objdir/$soname.def"; - echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; - else - $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile=$lt_outputfile.exe - lt_tool_outputfile=$lt_tool_outputfile.exe - ;; - esac~ - if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - esac - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test yes = "$GCC"; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - ;; - - hpux10*) - if test yes,no = "$GCC,$with_gnu_ld"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test no = "$with_gnu_ld"; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test yes,no = "$GCC,$with_gnu_ld"; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - m4_if($1, [], [ - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - _LT_LINKER_OPTION([if $CC understands -b], - _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], - [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) - ;; - esac - fi - if test no = "$with_gnu_ld"; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test yes = "$GCC"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], - [lt_cv_irix_exported_symbol], - [save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" - AC_LINK_IFELSE( - [AC_LANG_SOURCE( - [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], - [C++], [[int foo (void) { return 0; }]], - [Fortran 77], [[ - subroutine foo - end]], - [Fortran], [[ - subroutine foo - end]])])], - [lt_cv_irix_exported_symbol=yes], - [lt_cv_irix_exported_symbol=no]) - LDFLAGS=$save_LDFLAGS]) - if test yes = "$lt_cv_irix_exported_symbol"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' - fi - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - linux*) - case $cc_basename in - tcc*) - # Fabrice Bellard et al's Tiny C Compiler - _LT_TAGVAR(ld_shlibs, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd* | bitrig*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - shrext_cmds=.dll - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - osf3*) - if test yes = "$GCC"; then - _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test yes = "$GCC"; then - _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test yes = "$GCC"; then - wlarc='$wl' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='$wl' - _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands '-z linker_flag'. GCC discards it without '$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test yes = "$GCC"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test sequent = "$host_vendor"; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test yes = "$GCC"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We CANNOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' - runpath_var='LD_RUN_PATH' - - if test yes = "$GCC"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test sni = "$host_vendor"; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test yes,yes = "$GCC,$enable_shared"; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_CACHE_CHECK([whether -lc should be explicitly linked in], - [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), - [$RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - ]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting $shlibpath_var if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [postlink_cmds], [2], - [Commands necessary for finishing linking programs]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to 'libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC=$CC -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report what library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test no = "$can_build_shared" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test yes = "$enable_shared" && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test ia64 != "$host_cpu"; then - case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in - yes,aix,yes) ;; # shared object as lib.so file only - yes,svr4,*) ;; # shared object as lib.so archive member only - yes,*) enable_static=no ;; # shared object in lib.a archive as well - esac - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test yes = "$enable_shared" || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC=$lt_save_CC -])# _LT_LANG_C_CONFIG - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to 'libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -if test -n "$CXX" && ( test no != "$CXX" && - ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || - (test g++ != "$CXX"))); then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test yes != "$_lt_caught_CXX_error"; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test yes = "$GXX"; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test yes = "$GXX"; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test yes = "$with_gnu_ld"; then - _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='$wl' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test ia64 = "$host_cpu"; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag= - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # have runtime linking enabled, and use it for executables. - # For shared libraries, we enable/disable runtime linking - # depending on the kind of the shared library created - - # when "with_aix_soname,aix_use_runtimelinking" is: - # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables - # "aix,yes" lib.so shared, rtl:yes, for executables - # lib.a static archive - # "both,no" lib.so.V(shr.o) shared, rtl:yes - # lib.a(lib.so.V) shared, rtl:no, for executables - # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a(lib.so.V) shared, rtl:no - # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a static archive - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then - # With aix-soname=svr4, we create the lib.so.V shared archives only, - # so we don't have lib.a shared libs to link our executables. - # We have to force runtime linking in this case. - aix_use_runtimelinking=yes - LDFLAGS="$LDFLAGS -Wl,-brtl" - fi - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='$wl-f,' - case $with_aix_soname,$aix_use_runtimelinking in - aix,*) ;; # no import file - svr4,* | *,yes) # use import file - # The Import File defines what to hardcode. - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - ;; - esac - - if test yes = "$GXX"; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`$CC -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test yes = "$aix_use_runtimelinking"; then - shared_flag=$shared_flag' $wl-G' - fi - # Need to ensure runtime linking is disabled for the traditional - # shared library, or the linker may eventually find shared libraries - # /with/ Import File - we do not want to mix them. - shared_flag_aix='-shared' - shared_flag_svr4='-shared $wl-G' - else - # not using gcc - if test ia64 = "$host_cpu"; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test yes = "$aix_use_runtimelinking"; then - shared_flag='$wl-G' - else - shared_flag='$wl-bM:SRE' - fi - shared_flag_aix='$wl-bM:SRE' - shared_flag_svr4='$wl-G' - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - # The "-G" linker flag allows undefined symbols. - _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag - else - if test ia64 = "$host_cpu"; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' - if test yes = "$with_gnu_ld"; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' - # -brtl affects multiple linker settings, -berok does not and is overridden later - compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' - if test svr4 != "$with_aix_soname"; then - # This is similar to how AIX traditionally builds its shared - # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' - fi - if test aix != "$with_aix_soname"; then - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' - else - # used by -dlpreopen to get the symbols - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' - fi - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then - cp "$export_symbols" "$output_objdir/$soname.def"; - echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; - else - $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile=$lt_outputfile.exe - lt_tool_outputfile=$lt_tool_outputfile.exe - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file, use it as - # is; otherwise, prepend EXPORTS... - _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - shrext_cmds=.dll - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd2.*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes = "$GXX"; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test no = "$with_gnu_ld"; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes = "$GXX"; then - if test no = "$with_gnu_ld"; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test yes = "$GXX"; then - if test no = "$with_gnu_ld"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - if test yes = "$supports_anon_versioning"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd* | bitrig*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes,no = "$GXX,$with_gnu_ld"; then - _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands '-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test yes,no = "$GXX,$with_gnu_ld"; then - _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require '-G' NOT '-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We CANNOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ - '"$_LT_TAGVAR(old_archive_cmds, $1)" - _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ - '"$_LT_TAGVAR(reload_cmds, $1)" - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no - - _LT_TAGVAR(GCC, $1)=$GXX - _LT_TAGVAR(LD, $1)=$LD - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test yes != "$_lt_caught_CXX_error" - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_FUNC_STRIPNAME_CNF -# ---------------------- -# func_stripname_cnf prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# -# This function is identical to the (non-XSI) version of func_stripname, -# except this one can be used by m4 code that may be executed by configure, -# rather than the libtool script. -m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl -AC_REQUIRE([_LT_DECL_SED]) -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) -func_stripname_cnf () -{ - case @S|@2 in - .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; - *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; - esac -} # func_stripname_cnf -])# _LT_FUNC_STRIPNAME_CNF - - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF -package foo -func foo() { -} -_LT_EOF -]) - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac - -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case $prev$p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test x-L = "$p" || - test x-R = "$p"; then - prev=$p - continue - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test no = "$pre_test_object_deps_done"; then - case $prev in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)=$prev$p - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" - fi - fi - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test no = "$pre_test_object_deps_done"; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)=$p - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)=$p - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to 'libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_LANG_PUSH(Fortran 77) -if test -z "$F77" || test no = "$F77"; then - _lt_disable_F77=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test yes != "$_lt_disable_F77"; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${F77-"f77"} - CFLAGS=$FFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test no = "$can_build_shared" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test yes = "$enable_shared" && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test ia64 != "$host_cpu"; then - case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in - yes,aix,yes) ;; # shared object as lib.so file only - yes,svr4,*) ;; # shared object as lib.so archive member only - yes,*) enable_static=no ;; # shared object in lib.a archive as well - esac - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test yes = "$enable_shared" || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)=$G77 - _LT_TAGVAR(LD, $1)=$LD - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS -fi # test yes != "$_lt_disable_F77" - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to 'libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_LANG_PUSH(Fortran) - -if test -z "$FC" || test no = "$FC"; then - _lt_disable_FC=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test yes != "$_lt_disable_FC"; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${FC-"f95"} - CFLAGS=$FCFLAGS - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test no = "$can_build_shared" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test yes = "$enable_shared" && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test ia64 != "$host_cpu"; then - case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in - yes,aix,yes) ;; # shared object as lib.so file only - yes,svr4,*) ;; # shared object as lib.so archive member only - yes,*) enable_static=no ;; # shared object in lib.a archive as well - esac - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test yes = "$enable_shared" || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu - _LT_TAGVAR(LD, $1)=$LD - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS -fi # test yes != "$_lt_disable_FC" - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to 'libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -CFLAGS=$GCJFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)=$LD -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_GO_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Go compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to 'libtool'. -m4_defun([_LT_LANG_GO_CONFIG], -[AC_REQUIRE([LT_PROG_GO])dnl -AC_LANG_SAVE - -# Source file extension for Go test sources. -ac_ext=go - -# Object file extension for compiled Go test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="package main; func main() { }" - -# Code to be used in simple link tests -lt_simple_link_test_code='package main; func main() { }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GOC-"gccgo"} -CFLAGS=$GOFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)=$LD -_LT_CC_BASENAME([$compiler]) - -# Go did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GO_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to 'libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code=$lt_simple_compile_test_code - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -CFLAGS= -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_GO -# ---------- -AC_DEFUN([LT_PROG_GO], -[AC_CHECK_TOOL(GOC, gccgo,) -]) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - -# _LT_DECL_DLLTOOL -# ---------------- -# Ensure DLLTOOL variable is set. -m4_defun([_LT_DECL_DLLTOOL], -[AC_CHECK_TOOL(DLLTOOL, dlltool, false) -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) -AC_SUBST([DLLTOOL]) -]) - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f "$lt_ac_sed" && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test 10 -lt "$lt_ac_count" && break - lt_ac_count=`expr $lt_ac_count + 1` - if test "$lt_ac_count" -gt "$lt_ac_max"; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PATH_CONVERSION_FUNCTIONS -# ----------------------------- -# Determine what file name conversion functions should be used by -# func_to_host_file (and, implicitly, by func_to_host_path). These are needed -# for certain cross-compile configurations and native mingw. -m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_MSG_CHECKING([how to convert $build file names to $host format]) -AC_CACHE_VAL(lt_cv_to_host_file_cmd, -[case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac -]) -to_host_file_cmd=$lt_cv_to_host_file_cmd -AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) -_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], - [0], [convert $build file names to $host format])dnl - -AC_MSG_CHECKING([how to convert $build file names to toolchain format]) -AC_CACHE_VAL(lt_cv_to_tool_file_cmd, -[#assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac -]) -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) -_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], - [0], [convert $build files to toolchain format])dnl -])# _LT_PATH_CONVERSION_FUNCTIONS - -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software -# Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 8 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option '$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl 'shared' nor 'disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], - [_LT_WITH_AIX_SONAME([aix])]) - ]) -])# _LT_SET_OPTIONS - - - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the 'dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [1], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the 'win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the 'shared' and -# 'disable-shared' LT_INIT options. -# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS=$lt_save_ifs - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the 'static' and -# 'disable-static' LT_INIT options. -# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS=$lt_save_ifs - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the 'fast-install' -# and 'disable-fast-install' LT_INIT options. -# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS=$lt_save_ifs - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the 'fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the 'disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_AIX_SONAME([DEFAULT]) -# ---------------------------------- -# implement the --with-aix-soname flag, and support the `aix-soname=aix' -# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT -# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. -m4_define([_LT_WITH_AIX_SONAME], -[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl -shared_archive_member_spec= -case $host,$enable_shared in -power*-*-aix[[5-9]]*,yes) - AC_MSG_CHECKING([which variant of shared library versioning to provide]) - AC_ARG_WITH([aix-soname], - [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], - [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], - [case $withval in - aix|svr4|both) - ;; - *) - AC_MSG_ERROR([Unknown argument to --with-aix-soname]) - ;; - esac - lt_cv_with_aix_soname=$with_aix_soname], - [AC_CACHE_VAL([lt_cv_with_aix_soname], - [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) - with_aix_soname=$lt_cv_with_aix_soname]) - AC_MSG_RESULT([$with_aix_soname]) - if test aix != "$with_aix_soname"; then - # For the AIX way of multilib, we name the shared archive member - # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', - # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. - # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, - # the AIX toolchain works better with OBJECT_MODE set (default 32). - if test 64 = "${OBJECT_MODE-32}"; then - shared_archive_member_spec=shr_64 - else - shared_archive_member_spec=shr - fi - fi - ;; -*) - with_aix_soname=aix - ;; -esac - -_LT_DECL([], [shared_archive_member_spec], [0], - [Shared archive member basename, for filename based shared library versioning on AIX])dnl -])# _LT_WITH_AIX_SONAME - -LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) -LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) -LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' -# LT_INIT options. -# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for lt_pkg in $withval; do - IFS=$lt_save_ifs - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS=$lt_save_ifs - ;; - esac], - [pic_mode=m4_default([$1], [default])]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the 'pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) - -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- -# -# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software -# Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltsugar.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) - - -# lt_join(SEP, ARG1, [ARG2...]) -# ----------------------------- -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their -# associated separator. -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier -# versions in m4sugar had bugs. -m4_define([lt_join], -[m4_if([$#], [1], [], - [$#], [2], [[$2]], - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) -m4_define([_lt_join], -[m4_if([$#$2], [2], [], - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) - - -# lt_car(LIST) -# lt_cdr(LIST) -# ------------ -# Manipulate m4 lists. -# These macros are necessary as long as will still need to support -# Autoconf-2.59, which quotes differently. -m4_define([lt_car], [[$1]]) -m4_define([lt_cdr], -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], - [$#], 1, [], - [m4_dquote(m4_shift($@))])]) -m4_define([lt_unquote], $1) - - -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) -# ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. -# Note that neither SEPARATOR nor STRING are expanded; they are appended -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). -# No SEPARATOR is output if MACRO-NAME was previously undefined (different -# than defined and empty). -# -# This macro is needed until we can rely on Autoconf 2.62, since earlier -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. -m4_define([lt_append], -[m4_define([$1], - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) - - - -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) -# ---------------------------------------------------------- -# Produce a SEP delimited list of all paired combinations of elements of -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list -# has the form PREFIXmINFIXSUFFIXn. -# Needed until we can rely on m4_combine added in Autoconf 2.62. -m4_define([lt_combine], -[m4_if(m4_eval([$# > 3]), [1], - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl -[[m4_foreach([_Lt_prefix], [$2], - [m4_foreach([_Lt_suffix], - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) - - -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) -# ----------------------------------------------------------------------- -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. -m4_define([lt_if_append_uniq], -[m4_ifdef([$1], - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], - [lt_append([$1], [$2], [$3])$4], - [$5])], - [lt_append([$1], [$2], [$3])$4])]) - - -# lt_dict_add(DICT, KEY, VALUE) -# ----------------------------- -m4_define([lt_dict_add], -[m4_define([$1($2)], [$3])]) - - -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) -# -------------------------------------------- -m4_define([lt_dict_add_subkey], -[m4_define([$1($2:$3)], [$4])]) - - -# lt_dict_fetch(DICT, KEY, [SUBKEY]) -# ---------------------------------- -m4_define([lt_dict_fetch], -[m4_ifval([$3], - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) - - -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) -# ----------------------------------------------------------------- -m4_define([lt_if_dict_fetch], -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], - [$5], - [$6])]) - - -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) -# -------------------------------------------------------------- -m4_define([lt_dict_filter], -[m4_if([$5], [], [], - [lt_join(m4_quote(m4_default([$4], [[, ]])), - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl -]) - -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# @configure_input@ - -# serial 4179 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.4.6]) -m4_define([LT_PACKAGE_REVISION], [2.4.6]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.6' -macro_revision='2.4.6' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) - -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -# -# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software -# Foundation, Inc. -# Written by Scott James Remnant, 2004. -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 5 lt~obsolete.m4 - -# These exist entirely to fool aclocal when bootstrapping libtool. -# -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), -# which have later been changed to m4_define as they aren't part of the -# exported API, or moved to Autoconf or Automake where they belong. -# -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -# using a macro with the same name in our local m4/libtool.m4 it'll -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -# and doesn't know about Autoconf macros at all.) -# -# So we provide this file, which has a silly filename so it's always -# included after everything else. This provides aclocal with the -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -# because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -# -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -# Yes, that means every name once taken will need to remain here until -# we give up compatibility with versions before 1.7, at which point -# we need to keep only those names which we still refer to. - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) - -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) -m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) -m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) -m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) -m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) -m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) -m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) - -# Copyright (C) 2002-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.15' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.15], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.15])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to -# '$srcdir', '$srcdir/..', or '$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is '.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -# Expand $ac_aux_dir to an absolute path. -am_aux_dir=`cd "$ac_aux_dir" && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ([2.52])dnl - m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. -m4_define([AC_PROG_CC], -m4_defn([AC_PROG_CC]) -[_AM_PROG_CC_C_O -]) - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.65])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[AC_DIAGNOSE([obsolete], - [$0: two- and three-arguments forms are deprecated.]) -m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if( - m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), - [ok:ok],, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) - AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) -AM_MISSING_PROG([AUTOCONF], [autoconf]) -AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) -AM_MISSING_PROG([AUTOHEADER], [autoheader]) -AM_MISSING_PROG([MAKEINFO], [makeinfo]) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> -# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> -AC_SUBST([mkdir_p], ['$(MKDIR_P)']) -# We need awk for the "check" target (and possibly the TAP driver). The -# system "awk" is bad on some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES([CC])], - [m4_define([AC_PROG_CC], - m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES([CXX])], - [m4_define([AC_PROG_CXX], - m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES([OBJC])], - [m4_define([AC_PROG_OBJC], - m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], - [_AM_DEPENDENCIES([OBJCXX])], - [m4_define([AC_PROG_OBJCXX], - m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl -]) -AC_REQUIRE([AM_SILENT_RULES])dnl -dnl The testsuite driver may need to know about EXEEXT, so add the -dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This -dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl - -# POSIX will say in a future version that running "rm -f" with no argument -# is OK; and we want to be able to make that assumption in our Makefile -# recipes. So use an aggressive probe to check that the usage we want is -# actually supported "in the wild" to an acceptable degree. -# See automake bug#10828. -# To make any issue more visible, cause the running configure to be aborted -# by default if the 'rm' program in use doesn't match our expectations; the -# user can still override this though. -if rm -f && rm -fr && rm -rf; then : OK; else - cat >&2 <<'END' -Oops! - -Your 'rm' program seems unable to run without file operands specified -on the command line, even when the '-f' option is present. This is contrary -to the behaviour of most rm programs out there, and not conforming with -the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> - -Please tell bug-automake@gnu.org about your system, including the value -of your $PATH and any error possibly output before this message. This -can help us improve future automake versions. - -END - if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then - echo 'Configuration will proceed anyway, since you have set the' >&2 - echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 - echo >&2 - else - cat >&2 <<'END' -Aborting the configuration process, to ensure you take notice of the issue. - -You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: <http://www.gnu.org/software/coreutils/>. - -If you want to complete the configuration process using your problematic -'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM -to "yes", and re-run configure. - -END - AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) - fi -fi -dnl The trailing newline in this macro's definition is deliberate, for -dnl backward compatibility and to allow trailing 'dnl'-style comments -dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. -]) - -dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST([install_sh])]) - -# Copyright (C) 2003-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Copyright (C) 1998-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_LEX -# ----------- -# Autoconf leaves LEX=: if lex or flex can't be found. Change that to a -# "missing" invocation, for better error output. -AC_DEFUN([AM_PROG_LEX], -[AC_PREREQ([2.50])dnl -AC_REQUIRE([AM_MISSING_HAS_RUN])dnl -AC_REQUIRE([AC_PROG_LEX])dnl -if test "$LEX" = :; then - LEX=${am_missing_run}flex -fi]) - -# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- -# From Jim Meyering - -# Copyright (C) 1996-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_MAINTAINER_MODE([DEFAULT-MODE]) -# ---------------------------------- -# Control maintainer-specific portions of Makefiles. -# Default is to disable them, unless 'enable' is passed literally. -# For symmetry, 'disable' may be passed as well. Anyway, the user -# can override the default with the --enable/--disable switch. -AC_DEFUN([AM_MAINTAINER_MODE], -[m4_case(m4_default([$1], [disable]), - [enable], [m4_define([am_maintainer_other], [disable])], - [disable], [m4_define([am_maintainer_other], [enable])], - [m4_define([am_maintainer_other], [enable]) - m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) -AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode's default is 'disable' unless 'enable' is passed - AC_ARG_ENABLE([maintainer-mode], - [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], - am_maintainer_other[ make rules and dependencies not useful - (and sometimes confusing) to the casual installer])], - [USE_MAINTAINER_MODE=$enableval], - [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) - AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) - MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST([MAINT])dnl -] -) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it is modern enough. -# If it is, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --is-lightweight"; then - am_missing_run="$MISSING " -else - am_missing_run= - AC_MSG_WARN(['missing' script is too old or missing]) -fi -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# -------------------- -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) - -# _AM_SET_OPTIONS(OPTIONS) -# ------------------------ -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Copyright (C) 1999-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# _AM_PROG_CC_C_O -# --------------- -# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC -# to automatically call this. -AC_DEFUN([_AM_PROG_CC_C_O], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([compile])dnl -AC_LANG_PUSH([C])dnl -AC_CACHE_CHECK( - [whether $CC understands -c and -o together], - [am_cv_prog_cc_c_o], - [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) - # Make sure it works both with $CC and with simple cc. - # Following AC_PROG_CC_C_O, we do the test twice because some - # compilers refuse to overwrite an existing .o file with -o, - # though they will create one. - am_cv_prog_cc_c_o=yes - for am_i in 1 2; do - if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ - && test -f conftest2.$ac_objext; then - : OK - else - am_cv_prog_cc_c_o=no - break - fi - done - rm -f core conftest* - unset am_i]) -if test "$am_cv_prog_cc_c_o" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi -AC_LANG_POP([C])]) - -# For backward compatibility. -AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) - -# Copyright (C) 2001-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_RUN_LOG(COMMAND) -# ------------------- -# Run COMMAND, save the exit status in ac_status, and log it. -# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) -AC_DEFUN([AM_RUN_LOG], -[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD - ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - (exit $ac_status); }]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; -esac - -# Do 'set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken - alias in your environment]) - fi - if test "$[2]" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT([yes]) -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi -AC_CONFIG_COMMANDS_PRE( - [AC_MSG_CHECKING([that generated files are newer than configure]) - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - AC_MSG_RESULT([done])]) -rm -f conftest.file -]) - -# Copyright (C) 2009-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_SILENT_RULES([DEFAULT]) -# -------------------------- -# Enable less verbose build rules; with the default set to DEFAULT -# ("yes" being less verbose, "no" or empty being verbose). -AC_DEFUN([AM_SILENT_RULES], -[AC_ARG_ENABLE([silent-rules], [dnl -AS_HELP_STRING( - [--enable-silent-rules], - [less verbose build output (undo: "make V=1")]) -AS_HELP_STRING( - [--disable-silent-rules], - [verbose build output (undo: "make V=0")])dnl -]) -case $enable_silent_rules in @%:@ ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; -esac -dnl -dnl A few 'make' implementations (e.g., NonStop OS and NextStep) -dnl do not support nested variable expansions. -dnl See automake bug#9928 and bug#10237. -am_make=${MAKE-make} -AC_CACHE_CHECK([whether $am_make supports nested variables], - [am_cv_make_support_nested_variables], - [if AS_ECHO([['TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi]) -if test $am_cv_make_support_nested_variables = yes; then - dnl Using '$V' instead of '$(V)' breaks IRIX make. - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AC_SUBST([AM_V])dnl -AM_SUBST_NOTMAKE([AM_V])dnl -AC_SUBST([AM_DEFAULT_V])dnl -AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl -AC_SUBST([AM_DEFAULT_VERBOSITY])dnl -AM_BACKSLASH='\' -AC_SUBST([AM_BACKSLASH])dnl -_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl -]) - -# Copyright (C) 2001-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor 'install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in "make install-strip", and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# -------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004-2014 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of 'v7', 'ustar', or 'pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -# -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AC_SUBST([AMTAR], ['$${TAR-tar}']) - -# We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' - -m4_if([$1], [v7], - [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], - - [m4_case([$1], - [ustar], - [# The POSIX 1988 'ustar' format is defined with fixed-size fields. - # There is notably a 21 bits limit for the UID and the GID. In fact, - # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 - # and bug#13588). - am_max_uid=2097151 # 2^21 - 1 - am_max_gid=$am_max_uid - # The $UID and $GID variables are not portable, so we need to resort - # to the POSIX-mandated id(1) utility. Errors in the 'id' calls - # below are definitely unexpected, so allow the users to see them - # (that is, avoid stderr redirection). - am_uid=`id -u || echo unknown` - am_gid=`id -g || echo unknown` - AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) - if test $am_uid -le $am_max_uid; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - _am_tools=none - fi - AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) - if test $am_gid -le $am_max_gid; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - _am_tools=none - fi], - - [pax], - [], - - [m4_fatal([Unknown tar format])]) - - AC_MSG_CHECKING([how to create a $1 tar archive]) - - # Go ahead even if we have the value already cached. We do so because we - # need to set the values for the 'am__tar' and 'am__untar' variables. - _am_tools=${am_cv_prog_tar_$1-$_am_tools} - - for _am_tool in $_am_tools; do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works. - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar <conftest.tar]) - AM_RUN_LOG([cat conftest.dir/file]) - grep GrepMe conftest.dir/file >/dev/null 2>&1 && break - fi - done - rm -rf conftest.dir - - AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) - AC_MSG_RESULT([$am_cv_prog_tar_$1])]) - -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([acinclude.m4]) diff --git a/src/plugins/e-acsl/contrib/libgmp/assert.c b/src/plugins/e-acsl/contrib/libgmp/assert.c deleted file mode 100644 index 2e85e6bf63915e0b5570eabf519a8f8ace6cec33..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/assert.c +++ /dev/null @@ -1,59 +0,0 @@ -/* GMP assertion failure handler. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> -#include <stdlib.h> -#include "gmp.h" -#include "gmp-impl.h" - - -void -__gmp_assert_header (const char *filename, int linenum) -{ - if (filename != NULL && filename[0] != '\0') - { - fprintf (stderr, "%s:", filename); - if (linenum != -1) - fprintf (stderr, "%d: ", linenum); - } -} - -void -__gmp_assert_fail (const char *filename, int linenum, - const char *expr) -{ - __gmp_assert_header (filename, linenum); - fprintf (stderr, "GNU MP assertion failed: %s\n", expr); - abort(); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/bootstrap.c b/src/plugins/e-acsl/contrib/libgmp/bootstrap.c deleted file mode 100644 index bff960ed83a6378ba5aae7a547a6fc4e2e0912d1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/bootstrap.c +++ /dev/null @@ -1,146 +0,0 @@ -/* Functions needed for bootstrapping the gmp build, based on mini-gmp. - -Copyright 2001, 2002, 2004, 2011, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "mini-gmp/mini-gmp.c" - -#define MIN(l,o) ((l) < (o) ? (l) : (o)) -#define PTR(x) ((x)->_mp_d) -#define SIZ(x) ((x)->_mp_size) - -#define xmalloc gmp_default_alloc - -int -isprime (unsigned long int t) -{ - unsigned long int q, r, d; - - if (t < 32) - return (0xa08a28acUL >> t) & 1; - if ((t & 1) == 0) - return 0; - - if (t % 3 == 0) - return 0; - if (t % 5 == 0) - return 0; - if (t % 7 == 0) - return 0; - - for (d = 11;;) - { - q = t / d; - r = t - q * d; - if (q < d) - return 1; - if (r == 0) - break; - d += 2; - q = t / d; - r = t - q * d; - if (q < d) - return 1; - if (r == 0) - break; - d += 4; - } - return 0; -} - -int -log2_ceil (int n) -{ - int e; - assert (n >= 1); - for (e = 0; ; e++) - if ((1 << e) >= n) - break; - return e; -} - -/* Set inv to the inverse of d, in the style of invert_limb, ie. for - udiv_qrnnd_preinv. */ -void -mpz_preinv_invert (mpz_t inv, mpz_t d, int numb_bits) -{ - mpz_t t; - int norm; - assert (SIZ(d) > 0); - - norm = numb_bits - mpz_sizeinbase (d, 2); - assert (norm >= 0); - mpz_init_set_ui (t, 1L); - mpz_mul_2exp (t, t, 2*numb_bits - norm); - mpz_tdiv_q (inv, t, d); - mpz_set_ui (t, 1L); - mpz_mul_2exp (t, t, numb_bits); - mpz_sub (inv, inv, t); - - mpz_clear (t); -} - -/* Calculate r satisfying r*d == 1 mod 2^n. */ -void -mpz_invert_2exp (mpz_t r, mpz_t a, unsigned long n) -{ - unsigned long i; - mpz_t inv, prod; - - assert (mpz_odd_p (a)); - - mpz_init_set_ui (inv, 1L); - mpz_init (prod); - - for (i = 1; i < n; i++) - { - mpz_mul (prod, inv, a); - if (mpz_tstbit (prod, i) != 0) - mpz_setbit (inv, i); - } - - mpz_mul (prod, inv, a); - mpz_tdiv_r_2exp (prod, prod, n); - assert (mpz_cmp_ui (prod, 1L) == 0); - - mpz_set (r, inv); - - mpz_clear (inv); - mpz_clear (prod); -} - -/* Calculate inv satisfying r*a == 1 mod 2^n. */ -void -mpz_invert_ui_2exp (mpz_t r, unsigned long a, unsigned long n) -{ - mpz_t az; - mpz_init_set_ui (az, a); - mpz_invert_2exp (r, az, n); - mpz_clear (az); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/compat.c b/src/plugins/e-acsl/contrib/libgmp/compat.c deleted file mode 100644 index b896f8489f0f3410f43505d02aedcd725c0d4e2a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/compat.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Old function entrypoints retained for binary compatibility. - -Copyright 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" - - -/* mpn_divexact_by3 was a function in gmp 3.0.1, but as of gmp 3.1 it's a - macro calling mpn_divexact_by3c. */ -mp_limb_t -__MPN (divexact_by3) (mp_ptr dst, mp_srcptr src, mp_size_t size) -{ - return mpn_divexact_by3 (dst, src, size); -} - - -/* mpn_divmod_1 was a function in gmp 3.0.1 and earlier, but marked obsolete - in both gmp 2 and 3. As of gmp 3.1 it's a macro calling mpn_divrem_1. */ -mp_limb_t -__MPN (divmod_1) (mp_ptr dst, mp_srcptr src, mp_size_t size, mp_limb_t divisor) -{ - return mpn_divmod_1 (dst, src, size, divisor); -} - - -/* mpz_legendre was a separate function in gmp 3.1.1 and earlier, but as of - 4.0 it's a #define alias for mpz_jacobi. */ -int -__gmpz_legendre (mpz_srcptr a, mpz_srcptr b) -{ - return mpz_jacobi (a, b); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/compile b/src/plugins/e-acsl/contrib/libgmp/compile deleted file mode 100755 index a85b723c7e67d46316e85e7422bd5088e9136042..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/compile +++ /dev/null @@ -1,347 +0,0 @@ -#! /bin/sh -# Wrapper for compilers which do not understand '-c -o'. - -scriptversion=2012-10-14.11; # UTC - -# Copyright (C) 1999-2014 Free Software Foundation, Inc. -# Written by Tom Tromey <tromey@cygnus.com>. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to <bug-automake@gnu.org> or send patches to -# <automake-patches@gnu.org>. - -nl=' -' - -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent tools from complaining about whitespace usage. -IFS=" "" $nl" - -file_conv= - -# func_file_conv build_file lazy -# Convert a $build file to $host form and store it in $file -# Currently only supports Windows hosts. If the determined conversion -# type is listed in (the comma separated) LAZY, no conversion will -# take place. -func_file_conv () -{ - file=$1 - case $file in - / | /[!/]*) # absolute file, and not a UNC file - if test -z "$file_conv"; then - # lazily determine how to convert abs files - case `uname -s` in - MINGW*) - file_conv=mingw - ;; - CYGWIN*) - file_conv=cygwin - ;; - *) - file_conv=wine - ;; - esac - fi - case $file_conv/,$2, in - *,$file_conv,*) - ;; - mingw/*) - file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` - ;; - cygwin/*) - file=`cygpath -m "$file" || echo "$file"` - ;; - wine/*) - file=`winepath -w "$file" || echo "$file"` - ;; - esac - ;; - esac -} - -# func_cl_dashL linkdir -# Make cl look for libraries in LINKDIR -func_cl_dashL () -{ - func_file_conv "$1" - if test -z "$lib_path"; then - lib_path=$file - else - lib_path="$lib_path;$file" - fi - linker_opts="$linker_opts -LIBPATH:$file" -} - -# func_cl_dashl library -# Do a library search-path lookup for cl -func_cl_dashl () -{ - lib=$1 - found=no - save_IFS=$IFS - IFS=';' - for dir in $lib_path $LIB - do - IFS=$save_IFS - if $shared && test -f "$dir/$lib.dll.lib"; then - found=yes - lib=$dir/$lib.dll.lib - break - fi - if test -f "$dir/$lib.lib"; then - found=yes - lib=$dir/$lib.lib - break - fi - if test -f "$dir/lib$lib.a"; then - found=yes - lib=$dir/lib$lib.a - break - fi - done - IFS=$save_IFS - - if test "$found" != yes; then - lib=$lib.lib - fi -} - -# func_cl_wrapper cl arg... -# Adjust compile command to suit cl -func_cl_wrapper () -{ - # Assume a capable shell - lib_path= - shared=: - linker_opts= - for arg - do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as 'compile cc -o foo foo.c'. - eat=1 - case $2 in - *.o | *.[oO][bB][jJ]) - func_file_conv "$2" - set x "$@" -Fo"$file" - shift - ;; - *) - func_file_conv "$2" - set x "$@" -Fe"$file" - shift - ;; - esac - ;; - -I) - eat=1 - func_file_conv "$2" mingw - set x "$@" -I"$file" - shift - ;; - -I*) - func_file_conv "${1#-I}" mingw - set x "$@" -I"$file" - shift - ;; - -l) - eat=1 - func_cl_dashl "$2" - set x "$@" "$lib" - shift - ;; - -l*) - func_cl_dashl "${1#-l}" - set x "$@" "$lib" - shift - ;; - -L) - eat=1 - func_cl_dashL "$2" - ;; - -L*) - func_cl_dashL "${1#-L}" - ;; - -static) - shared=false - ;; - -Wl,*) - arg=${1#-Wl,} - save_ifs="$IFS"; IFS=',' - for flag in $arg; do - IFS="$save_ifs" - linker_opts="$linker_opts $flag" - done - IFS="$save_ifs" - ;; - -Xlinker) - eat=1 - linker_opts="$linker_opts $2" - ;; - -*) - set x "$@" "$1" - shift - ;; - *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) - func_file_conv "$1" - set x "$@" -Tp"$file" - shift - ;; - *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) - func_file_conv "$1" mingw - set x "$@" "$file" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift - done - if test -n "$linker_opts"; then - linker_opts="-link$linker_opts" - fi - exec "$@" $linker_opts - exit 1 -} - -eat= - -case $1 in - '') - echo "$0: No command. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: compile [--help] [--version] PROGRAM [ARGS] - -Wrapper for compilers which do not understand '-c -o'. -Remove '-o dest.o' from ARGS, run PROGRAM with the remaining -arguments, and rename the output as expected. - -If you are trying to build a whole package this is not the -right script to run: please start by reading the file 'INSTALL'. - -Report bugs to <bug-automake@gnu.org>. -EOF - exit $? - ;; - -v | --v*) - echo "compile $scriptversion" - exit $? - ;; - cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) - func_cl_wrapper "$@" # Doesn't return... - ;; -esac - -ofile= -cfile= - -for arg -do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as 'compile cc -o foo foo.c'. - # So we strip '-o arg' only if arg is an object. - eat=1 - case $2 in - *.o | *.obj) - ofile=$2 - ;; - *) - set x "$@" -o "$2" - shift - ;; - esac - ;; - *.c) - cfile=$1 - set x "$@" "$1" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift -done - -if test -z "$ofile" || test -z "$cfile"; then - # If no '-o' option was seen then we might have been invoked from a - # pattern rule where we don't need one. That is ok -- this is a - # normal compilation that the losing compiler can handle. If no - # '.c' file was seen then we are probably linking. That is also - # ok. - exec "$@" -fi - -# Name of file we expect compiler to create. -cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` - -# Create the lock directory. -# Note: use '[/\\:.-]' here to ensure that we don't use the same name -# that we are using for the .o file. Also, base the name on the expected -# object file name, since that is what matters with a parallel build. -lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d -while true; do - if mkdir "$lockdir" >/dev/null 2>&1; then - break - fi - sleep 1 -done -# FIXME: race condition here if user kills between mkdir and trap. -trap "rmdir '$lockdir'; exit 1" 1 2 15 - -# Run the compile. -"$@" -ret=$? - -if test -f "$cofile"; then - test "$cofile" = "$ofile" || mv "$cofile" "$ofile" -elif test -f "${cofile}bj"; then - test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" -fi - -rmdir "$lockdir" -exit $ret - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/src/plugins/e-acsl/contrib/libgmp/config.guess b/src/plugins/e-acsl/contrib/libgmp/config.guess deleted file mode 100755 index b9d0c5894d53877e79ee434e5e3742770041c98e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/config.guess +++ /dev/null @@ -1,1057 +0,0 @@ -#! /bin/sh -# -# GMP config.guess wrapper. - - -# Copyright 2000-2006, 2008, 2011-2015 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - - -# Usage: config.guess -# -# Print the host system CPU-VENDOR-OS. -# -# configfsf.guess is run and its guess then sharpened up to take advantage -# of the finer grained CPU types that GMP knows. - - -# Expect to find configfsf.guess in the same directory as this config.guess -configfsf_guess="`echo \"$0\" | sed 's/config.guess$/configfsf.guess/'`" -if test "$configfsf_guess" = "$0"; then - echo "Cannot derive configfsf.guess from $0" 1>&2 - exit 1 -fi -if test -f "$configfsf_guess"; then - : -else - echo "$configfsf_guess not found" 1>&2 - exit 1 -fi - -# Setup a $SHELL with which to run configfsf.guess, using the same -# $CONFIG_SHELL or /bin/sh as autoconf does when running config.guess -SHELL=${CONFIG_SHELL-/bin/sh} - -# Identify ourselves on --version, --help or errors -if test $# != 0; then - echo "(GNU MP wrapped config.guess)" - $SHELL $configfsf_guess "$@" - exit 1 -fi - -guess_full=`$SHELL $configfsf_guess` -if test $? != 0; then - exit 1 -fi - -guess_cpu=`echo "$guess_full" | sed 's/-.*$//'` -guess_rest=`echo "$guess_full" | sed 's/^[^-]*//'` -exact_cpu= - - -# ------------------------------------------------------------------------- -# The following should look at the current guess and probe the system to -# establish a better guess in exact_cpu. Leave exact_cpu empty if probes -# can't be done, or don't work. -# -# When a number of probes are done, test -z "$exact_cpu" can be used instead -# of putting each probe under an "else" of the preceeding. That can stop -# the code getting horribly nested and marching off the right side of the -# screen. - -# Note that when a compile-and-link is done in one step we need to remove .o -# files, since lame C compilers generate these even when not asked. -# - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy $dummy.core ${dummy}0.s" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - - -case "$guess_full" in - -alpha-*-*) - eval $set_cc_for_build - # configfsf.guess detects exact alpha cpu types for OSF and GNU/Linux, but - # not for *BSD and other systems. We try to get an exact type for any - # plain "alpha" it leaves. - # - # configfsf.guess used to have a block of code not unlike this, but these - # days does its thing with Linux kernel /proc/cpuinfo or OSF psrinfo. - # - cat <<EOF >${dummy}0.s - .data -Lformat: - .byte 37,100,45,37,120,10,0 # "%d-%x\n" - .text - .globl main - .align 4 - .ent main -main: - .frame \$30,16,\$26,0 - ldgp \$29,0(\$27) - .prologue 1 - .long 0x47e03d91 # implver \$17 - lda \$2,-1 - .long 0x47e20c21 # amask \$2,\$1 - lda \$16,Lformat - not \$1,\$18 - jsr \$26,printf - ldgp \$29,0(\$26) - mov 0,\$16 - jsr \$26,exit - .end main -EOF - $CC_FOR_BUILD ${dummy}0.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - case `$dummy` in - 0-0) exact_cpu=alpha ;; - 1-0) exact_cpu=alphaev5 ;; - 1-1) exact_cpu=alphaev56 ;; - 1-101) exact_cpu=alphapca56 ;; - 2-303) exact_cpu=alphaev6 ;; - 2-307) exact_cpu=alphaev67 ;; - 2-1307) exact_cpu=alphaev68 ;; - esac - fi - ;; - -arm*-*-*) - cpu_code=`sed -n 's/^CPU part.*\(0x.*\)$/\1/p' /proc/cpuinfo 2>/dev/null | head -n 1 2>/dev/null` - case "$cpu_code" in - 0xa10 | 0xa11 | 0xb11) # v4 strongarm/sa1100 - exact_cpu="armsa1";; - 0x915 | 0x925 | \ - 0x920 | 0x922 | 0x940) # v4 - exact_cpu="arm9tdmi";; - 0x210 | 0x290 | 0x2d0 | \ - 0x212 | 0x292 | 0x2d2 | \ - 0x411) exact_cpu="armxscale";; # v5 pxa2xx - 0x926 | 0x946 | 0x966 | 0x968) # v5te/v5tej - exact_cpu="arm9te";; - 0xa20 | 0xa22 | 0xa26) # v5te - exact_cpu="arm10";; - 0xb02) exact_cpu="arm11mpcore";; # v6 - 0xb36) exact_cpu="arm1136";; # v6 - 0xb56) exact_cpu="arm1156";; # v6t2 - 0xb76) exact_cpu="arm1176";; # v6 - 0xc05) exact_cpu="armcortexa5";; # v7a - 0xc07) exact_cpu="armcortexa7";; # v7a - 0xc08) exact_cpu="armcortexa8";; # v7a - 0xc09) exact_cpu="armcortexa9";; # v7a - 0xc0f) exact_cpu="armcortexa15";; # v7a - 0xc14) exact_cpu="armcortexr4";; # v7r - 0xc15) exact_cpu="armcortexr5";; # v7r - 0xc23) exact_cpu="armcortexm3";; # v7m - *) exact_cpu=$guess_cpu;; - esac - exact_cpu="${exact_cpu}`sed -n 's;^Features.*\(neon\).*;\1;p' /proc/cpuinfo 2>/dev/null | head -n 1 2>/dev/null`" - ;; - -ia64*-*-*) - eval $set_cc_for_build - # CPUID[3] bits 24 to 31 is the processor family. itanium2 is documented - # as 0x1f, plain itanium has been seen returning 0x07 on two systems, but - # haven't found any documentation on it as such. - # - # Defining both getcpuid and _getcpuid lets us ignore whether the system - # expects underscores or not. - # - # "unsigned long long" is always 64 bits, in fact on hpux in ilp32 mode - # (which is the default there), it's the only 64-bit type. - # - cat >${dummy}0.s <<EOF - .text - .global _getcpuid - .proc _getcpuid -_getcpuid: - mov r8 = CPUID[r32] ;; - br.ret.sptk.many rp ;; - .endp _getcpuid - .global getcpuid - .proc getcpuid -getcpuid: - mov r8 = CPUID[r32] ;; - br.ret.sptk.many rp ;; - .endp getcpuid -EOF - cat >$dummy.c <<EOF -#include <stdio.h> -unsigned long long getcpuid (); -int -main () -{ - if (getcpuid(0LL) == 0x49656E69756E6547LL && getcpuid(1LL) == 0x6C65746ELL) - { - /* "GenuineIntel" */ - switch ((getcpuid(3LL) >> 24) & 0xFF) { - case 0x07: puts ("itanium"); break; - case 0x1F: puts ("itanium2"); break; /* McKinley, Madison */ - case 0x20: puts ("itanium2"); break; /* Montecito */ - } - } - return 0; -} -EOF - if $CC_FOR_BUILD ${dummy}0.s $dummy.c -o $dummy >/dev/null 2>&1; then - exact_cpu=`$dummy` - fi - ;; - -mips-*-irix[6789]*) - # IRIX 6 and up always has a 64-bit mips cpu - exact_cpu=mips64 - ;; - -m68k-*-*) - eval $set_cc_for_build - # NetBSD (and presumably other *BSD) "sysctl hw.model" gives for example - # hw.model = Apple Macintosh Quadra 610 (68040) - exact_cpu=`(sysctl hw.model) 2>/dev/null | sed -n 's/^.*\(680[012346]0\).*$/m\1/p'` - if test -z "$exact_cpu"; then - # Linux kernel 2.2 gives for example "CPU: 68020" (tabs in between). - exact_cpu=`sed -n 's/^CPU:.*\(680[012346]0\).*$/m\1/p' /proc/cpuinfo 2>/dev/null` - fi - if test -z "$exact_cpu"; then - # Try: movel #0,%d0; rts - # This is to check the compiler and our asm code works etc, before - # assuming failures below indicate cpu characteristics. - # .byte is used to avoid problems with assembler syntax variations. - # For testing, provoke failures by adding "illegal" possibly as - # ".byte 0x4A, 0xFC" - cat >${dummy}0.s <<EOF - .text - .globl main - .globl _main -main: -_main: - .byte 0x70, 0x00 - .byte 0x4e, 0x75 -EOF - - if ($CC_FOR_BUILD ${dummy}0.s -o $dummy && $dummy) >/dev/null 2>&1; then - - # $SHELL -c is used to execute $dummy below, since ($dummy) - # 2>/dev/null still prints the SIGILL message on some shells. - # - # Try: movel #0,%d0 - # rtd #0 - cat >${dummy}0.s <<EOF - .text - .globl main - .globl _main -main: -_main: - .byte 0x70, 0x00 - .byte 0x4e, 0x74, 0x00, 0x00 -EOF - if $CC_FOR_BUILD ${dummy}0.s -o $dummy >/dev/null 2>&1; then - $SHELL -c $dummy >/dev/null 2>&1 - if test $? != 0; then - exact_cpu=m68000 # because rtd didn't work - fi - fi - # - - if test -z "$exact_cpu"; then - # Try: trapf - # movel #0,%d0 - # rts - # Another possibility for identifying 68000 and 68010 is the - # different value stored by "movem a0,(a0)+" - cat >${dummy}0.s <<EOF - .text - .globl main - .globl _main -main: -_main: - .byte 0x51, 0xFC - .byte 0x70, 0x00 - .byte 0x4e, 0x75 -EOF - if $CC_FOR_BUILD ${dummy}0.s -o $dummy >/dev/null 2>&1; then - $SHELL -c $dummy >/dev/null 2>&1 - if test $? != 0; then - exact_cpu=m68010 # because trapf didn't work - fi - fi - fi - - if test -z "$exact_cpu"; then - # Try: bfffo %d1{0:31},%d0 - # movel #0,%d0 - # rts - cat >${dummy}0.s <<EOF - .text - .globl main - .globl _main -main: -_main: - .byte 0xED, 0xC1, 0x00, 0x1F - .byte 0x70, 0x00 - .byte 0x4e, 0x75 -EOF - if $CC_FOR_BUILD ${dummy}0.s -o $dummy >/dev/null 2>&1; then - $SHELL -c $dummy >/dev/null 2>&1 - if test $? != 0; then - exact_cpu=m68360 # cpu32, because bfffo didn't work - fi - fi - fi - - if test -z "$exact_cpu"; then - # FIXME: Now we know 68020 or up, but how to detect 030, 040 and 060? - exact_cpu=m68020 - fi - fi - fi - if test -z "$exact_cpu"; then - case "$guess_full" in - *-*-next* | *-*-openstep*) # NeXTs are 68020 or better - exact_cpu=m68020 ;; - esac - fi - ;; - - -rs6000-*-* | powerpc*-*-*) - # Enhancement: On MacOS the "machine" command prints for instance - # "ppc750". Interestingly on powerpc970-apple-darwin6.8.5 it prints - # "ppc970" where there's no actual #define for 970 from NXGetLocalArchInfo - # (as noted below). But the man page says the command is still "under - # development", so it doesn't seem wise to use it just yet, not while - # there's an alternative. - # - # Try to read the PVR. mfpvr is a protected instruction, NetBSD, MacOS - # and AIX don't allow it in user mode, but the Linux kernel does. - # - # Using explicit bytes for mfpvr avoids worrying about assembler syntax - # and underscores. "char"s are used instead of "int"s to avoid worrying - # whether sizeof(int)==4 or if it's the right endianness. - # - # Note this is no good on AIX, since a C function there is the address of - # a function descriptor, not actual code. But this doesn't matter since - # AIX doesn't allow mfpvr anyway. - # - eval $set_cc_for_build - cat >$dummy.c <<\EOF -#include <stdio.h> -struct { - int n; /* force 4-byte alignment */ - char a[8]; -} getpvr = { - 0, - { - 0x7c, 0x7f, 0x42, 0xa6, /* mfpvr r3 */ - 0x4e, 0x80, 0x00, 0x20, /* blr */ - } -}; -int -main () -{ - unsigned (*fun)(); - unsigned pvr; - - /* a separate "fun" variable is necessary for gcc 2.95.2 on MacOS, - it gets a compiler error on a combined cast and call */ - fun = (unsigned (*)()) getpvr.a; - pvr = (*fun) (); - - switch (pvr >> 16) { - case 0x0001: puts ("powerpc601"); break; - case 0x0003: puts ("powerpc603"); break; - case 0x0004: puts ("powerpc604"); break; - case 0x0006: puts ("powerpc603e"); break; - case 0x0007: puts ("powerpc603e"); break; /* 603ev */ - case 0x0008: puts ("powerpc750"); break; - case 0x0009: puts ("powerpc604e"); break; - case 0x000a: puts ("powerpc604e"); break; /* 604ev5 */ - case 0x000c: puts ("powerpc7400"); break; - case 0x0041: puts ("powerpc630"); break; - case 0x0050: puts ("powerpc860"); break; - case 0x8000: puts ("powerpc7450"); break; - case 0x8001: puts ("powerpc7455"); break; - case 0x8002: puts ("powerpc7457"); break; - case 0x8003: puts ("powerpc7447"); break; /* really 7447A */ - case 0x800c: puts ("powerpc7410"); break; - } - return 0; -} -EOF - if ($CC_FOR_BUILD $dummy.c -o $dummy) >/dev/null 2>&1; then - # This style construct is needed on AIX 4.3 to suppress the SIGILL error - # from (*fun)(). Using $SHELL -c $dummy 2>/dev/null doesn't work. - { x=`$dummy`; } 2>/dev/null - if test -n "$x"; then - exact_cpu=$x - fi - fi - - # Grep the linux kernel /proc/cpuinfo pseudo-file. - # Anything unrecognised is ignored, since of course we mustn't spit out - # a cpu type config.sub doesn't know. - if test -z "$exact_cpu" && test -f /proc/cpuinfo; then - x=`grep "^cpu[ ]" /proc/cpuinfo | head -n 1` - x=`echo $x | sed -n 's/^cpu[ ]*:[ ]*\([A-Za-z0-9]*\).*/\1/p'` - x=`echo $x | sed 's/PPC//'` - case $x in - 601) exact_cpu="power" ;; - 603ev) exact_cpu="powerpc603e" ;; - 604ev5) exact_cpu="powerpc604e" ;; - 970??) exact_cpu="powerpc970" ;; - 603 | 603e | 604 | 604e | 750 | 821 | 860) - exact_cpu="powerpc$x" ;; - POWER[4-9]*) - exact_cpu=`echo $x | sed -e "s;POWER;power;" -e "s;[a-zA-Z]*$;;"` ;; - esac - fi - - if test -z "$exact_cpu"; then - # On AIX, try looking at _system_configuration. This is present in - # version 4 at least. - cat >$dummy.c <<EOF -#include <stdio.h> -#include <sys/systemcfg.h> -int -main () -{ - switch (_system_configuration.implementation) { - /* Old versions of AIX don't have all these constants, - use ifdef for safety. */ -#ifdef POWER_RS2 - case POWER_RS2: puts ("power2"); break; -#endif -#ifdef POWER_601 - case POWER_601: puts ("power"); break; -#endif -#ifdef POWER_603 - case POWER_603: puts ("powerpc603"); break; -#endif -#ifdef POWER_604 - case POWER_604: puts ("powerpc604"); break; -#endif -#ifdef POWER_620 - case POWER_620: puts ("powerpc620"); break; -#endif -#ifdef POWER_630 - case POWER_630: puts ("powerpc630"); break; -#endif - /* Dunno what this is, leave it out for now. - case POWER_A35: puts ("powerpca35"); break; - */ - /* This is waiting for a bit more info. - case POWER_RS64II: puts ("powerpcrs64ii"); break; - */ -#ifdef POWER_4 - case POWER_4: puts ("power4"); break; -#endif -#ifdef POWER_5 - case POWER_5: puts ("power5"); break; -#endif -#ifdef POWER_6 - case POWER_6: puts ("power6"); break; -#endif -#ifdef POWER_7 - case POWER_7: puts ("power7"); break; -#endif -#ifdef POWER_8 - case POWER_8: puts ("power8"); break; -#endif - default: - if (_system_configuration.architecture == POWER_RS) - puts ("power"); - else if (_system_configuration.width == 64) - puts ("powerpc64"); - } - return 0; -} -EOF - if ($CC_FOR_BUILD $dummy.c -o $dummy) >/dev/null 2>&1; then - x=`$dummy` - if test -n "$x"; then - exact_cpu=$x - fi - fi - fi - - if test -z "$exact_cpu"; then - # On MacOS X (or any Mach-O presumably), NXGetLocalArchInfo cpusubtype - # can tell us the exact cpu. - cat >$dummy.c <<EOF -#include <stdio.h> -#include <mach-o/arch.h> -int -main (void) -{ - const NXArchInfo *a = NXGetLocalArchInfo(); - if (a->cputype == CPU_TYPE_POWERPC) - { - switch (a->cpusubtype) { - /* The following known to Darwin 1.3. */ - case CPU_SUBTYPE_POWERPC_601: puts ("powerpc601"); break; - case CPU_SUBTYPE_POWERPC_602: puts ("powerpc602"); break; - case CPU_SUBTYPE_POWERPC_603: puts ("powerpc603"); break; - case CPU_SUBTYPE_POWERPC_603e: puts ("powerpc603e"); break; - case CPU_SUBTYPE_POWERPC_603ev: puts ("powerpc603e"); break; - case CPU_SUBTYPE_POWERPC_604: puts ("powerpc604"); break; - case CPU_SUBTYPE_POWERPC_604e: puts ("powerpc604e"); break; - case CPU_SUBTYPE_POWERPC_620: puts ("powerpc620"); break; - case CPU_SUBTYPE_POWERPC_750: puts ("powerpc750"); break; - case CPU_SUBTYPE_POWERPC_7400: puts ("powerpc7400"); break; - case CPU_SUBTYPE_POWERPC_7450: puts ("powerpc7450"); break; - /* Darwin 6.8.5 doesn't define the following */ - case 0x8001: puts ("powerpc7455"); break; - case 0x8002: puts ("powerpc7457"); break; - case 0x8003: puts ("powerpc7447"); break; - case 100: puts ("powerpc970"); break; - } - } - return 0; -} -EOF - if ($CC_FOR_BUILD $dummy.c -o $dummy) >/dev/null 2>&1; then - x=`$dummy` - if test -n "$x"; then - exact_cpu=$x - fi - fi - fi - ;; - -sparc-*-* | sparc64-*-*) - # If we can recognise an actual v7 then $exact_cpu is set to "sparc" so as - # to short-circuit subsequent tests. - - # Grep the linux kernel /proc/cpuinfo pseudo-file. - # A typical line is "cpu\t\t: TI UltraSparc II (BlackBird)" - # See arch/sparc/kernel/cpu.c and arch/sparc64/kernel/cpu.c. - # - if test -f /proc/cpuinfo; then - if grep 'cpu.*Cypress' /proc/cpuinfo >/dev/null; then - exact_cpu="sparc" # ie. v7 - elif grep 'cpu.*Power-UP' /proc/cpuinfo >/dev/null; then - exact_cpu="sparc" # ie. v7 - elif grep 'cpu.*HyperSparc' /proc/cpuinfo >/dev/null; then - exact_cpu="sparcv8" - elif grep 'cpu.*SuperSparc' /proc/cpuinfo >/dev/null; then - exact_cpu="supersparc" - elif grep 'cpu.*MicroSparc' /proc/cpuinfo >/dev/null; then - exact_cpu="microsparc" - elif grep 'cpu.*MB86904' /proc/cpuinfo >/dev/null; then - # actually MicroSPARC-II - exact_cpu=microsparc - elif grep 'cpu.*UltraSparc T5' /proc/cpuinfo >/dev/null; then - exact_cpu="ultrasparct5" - elif grep 'cpu.*UltraSparc T4' /proc/cpuinfo >/dev/null; then - exact_cpu="ultrasparct4" - elif grep 'cpu.*UltraSparc T3' /proc/cpuinfo >/dev/null; then - exact_cpu="ultrasparct3" - elif grep 'cpu.*UltraSparc T2' /proc/cpuinfo >/dev/null; then - exact_cpu="ultrasparct2" - elif grep 'cpu.*UltraSparc T1' /proc/cpuinfo >/dev/null; then - exact_cpu="ultrasparct1" - elif grep 'cpu.*UltraSparc III' /proc/cpuinfo >/dev/null; then - exact_cpu="ultrasparc3" - elif grep 'cpu.*UltraSparc IIi' /proc/cpuinfo >/dev/null; then - exact_cpu="ultrasparc2i" - elif grep 'cpu.*UltraSparc II' /proc/cpuinfo >/dev/null; then - exact_cpu="ultrasparc2" - elif grep 'cpu.*UltraSparc' /proc/cpuinfo >/dev/null; then - exact_cpu="ultrasparc" - fi - fi - - # Need to invoke this for setup of $dummy - eval $set_cc_for_build - - # Grep the output from sysinfo on SunOS. - # sysinfo has been seen living in /bin or in /usr/kvm - # cpu0 is a "SuperSPARC Model 41 SPARCmodule" CPU - # cpu0 is a "75 MHz TI,TMS390Z55" CPU - # - if test -z "$exact_cpu"; then - for i in sysinfo /usr/kvm/sysinfo; do - if $SHELL -c $i 2>/dev/null >$dummy; then - if grep 'cpu0 is a "SuperSPARC' $dummy >/dev/null; then - exact_cpu=supersparc - break - elif grep 'cpu0 is a .*TMS390Z5.' $dummy >/dev/null; then - # TMS390Z50 and TMS390Z55 - exact_cpu=supersparc - break - fi - fi - done - fi - - # Grep the output from prtconf on Solaris. - # Use an explicit /usr/sbin, since that directory might not be in a normal - # user's path. - # - # SUNW,UltraSPARC (driver not attached) - # SUNW,UltraSPARC-II (driver not attached) - # SUNW,UltraSPARC-IIi (driver not attached) - # SUNW,UltraSPARC-III+ (driver not attached) - # Ross,RT625 (driver not attached) - # TI,TMS390Z50 (driver not attached) - # - # /usr/sbin/sysdef prints similar information, but includes all loadable - # cpu modules, not just the real cpu. - # - # We first try a plain prtconf, since that is known to work on older systems. - # But for newer T1 systems, that doesn't produce any useful output, we need - # "prtconf -vp" there. - # - for prtconfopt in "" "-vp"; do - if test -z "$exact_cpu"; then - if $SHELL -c "/usr/sbin/prtconf $prtconfopt" 2>/dev/null >$dummy; then - if grep 'SUNW,UltraSPARC-T5' $dummy >/dev/null; then - exact_cpu=ultrasparct5 - elif grep 'SUNW,UltraSPARC-T4' $dummy >/dev/null; then - exact_cpu=ultrasparct4 - elif grep 'SUNW,UltraSPARC-T3' $dummy >/dev/null; then - exact_cpu=ultrasparct3 - elif grep 'SUNW,UltraSPARC-T2' $dummy >/dev/null; then - exact_cpu=ultrasparct2 - elif grep 'SUNW,UltraSPARC-T1' $dummy >/dev/null; then - exact_cpu=ultrasparct1 - elif grep 'SUNW,UltraSPARC-III' $dummy >/dev/null; then - exact_cpu=ultrasparc3 - elif grep 'SUNW,UltraSPARC-IIi' $dummy >/dev/null; then - exact_cpu=ultrasparc2i - elif grep 'SUNW,UltraSPARC-II' $dummy >/dev/null; then - exact_cpu=ultrasparc2 - elif grep 'SUNW,UltraSPARC' $dummy >/dev/null; then - exact_cpu=ultrasparc - elif grep 'Ross,RT62.' $dummy >/dev/null; then - # RT620, RT625, RT626 hypersparcs (v8). - exact_cpu=sparcv8 - elif grep 'TI,TMS390Z5.' $dummy >/dev/null; then - # TMS390Z50 and TMS390Z55 - exact_cpu=supersparc - elif grep 'TI,TMS390S10' $dummy >/dev/null; then - exact_cpu=microsparc - elif grep 'FMI,MB86904' $dummy >/dev/null; then - # actually MicroSPARC-II - exact_cpu=microsparc - fi - fi - fi - done - - # Grep the output from sysctl hw.model on sparc or sparc64 *BSD. - # Use an explicit /sbin, since that directory might not be in a normal - # user's path. Example outputs, - # - # hw.model: Sun Microsystems UltraSparc-IIi - # - if test -z "$exact_cpu"; then - if $SHELL -c "/sbin/sysctl hw.model" 2>/dev/null >$dummy; then - if grep -i 'UltraSparc-T5' $dummy >/dev/null; then - exact_cpu=ultrasparct5 - elif grep -i 'UltraSparc-T4' $dummy >/dev/null; then - exact_cpu=ultrasparct4 - elif grep -i 'UltraSparc-T3' $dummy >/dev/null; then - exact_cpu=ultrasparct3 - elif grep -i 'UltraSparc-T2' $dummy >/dev/null; then - exact_cpu=ultrasparct2 - elif grep -i 'UltraSparc-T1' $dummy >/dev/null; then - exact_cpu=ultrasparct1 - elif grep -i 'UltraSparc-III' $dummy >/dev/null; then - exact_cpu=ultrasparc3 - elif grep -i 'UltraSparc-IIi' $dummy >/dev/null; then - exact_cpu=ultrasparc2i - elif grep -i 'UltraSparc-II' $dummy >/dev/null; then - exact_cpu=ultrasparc2 - elif grep -i 'UltraSparc' $dummy >/dev/null; then - exact_cpu=ultrasparc - elif grep 'TMS390Z5.' $dummy >/dev/null; then - # TMS390Z50 and TMS390Z55 - exact_cpu=supersparc - elif grep 'TMS390S10' $dummy >/dev/null; then - exact_cpu=microsparc - elif grep 'MB86904' $dummy >/dev/null; then - # actually MicroSPARC-II - exact_cpu=microsparc - elif grep 'MB86907' $dummy >/dev/null; then - exact_cpu=turbosparc - fi - fi - fi - - # sun4m and sun4d are v8s of some sort, sun4u is a v9 of some sort - # - if test -z "$exact_cpu"; then - case `uname -m` in - sun4[md]) exact_cpu=sparcv8 ;; - sun4u) exact_cpu=sparcv9 ;; - esac - fi - ;; - - -# Recognise x86 processors using a tricky cpuid with 4 arguments, repeating -# arguments; for x86-64 we effectively pass the 1st in rdx and the 2nd in rcx. -# This allows the same asm to work for both standard and Windoze calling -# conventions. - -i?86-*-* | amd64-*-* | x86_64-*-*) - eval $set_cc_for_build - - cat <<EOF >$dummy.c -#include <string.h> -#include <stdio.h> -#define CPUID(a,b) cpuid(b,a,a,b) -#if __cplusplus -extern "C" -#endif -unsigned int cpuid (int, char *, char *, int); -int -main () -{ - char vendor_string[13]; - char feature_string[12]; - long fms; - int family, model; - const char *modelstr, *suffix; - int cpu_64bit = 0, cpu_avx = 0; - int cpuid_64bit, cpuid_avx, cpuid_osxsave; - - CPUID (vendor_string, 0); - vendor_string[12] = 0; - - fms = CPUID (feature_string, 1); - - family = ((fms >> 8) & 0xf) + ((fms >> 20) & 0xff); - model = ((fms >> 4) & 0xf) + ((fms >> 12) & 0xf0); - - cpuid_avx = (feature_string[11] >> 4) & 1; - cpuid_osxsave = (feature_string[11] >> 3) & 1; - - modelstr = "$guess_cpu"; - - /**************************************************/ - /*** WARNING: keep this list in sync with fat.c ***/ - /**************************************************/ - if (strcmp (vendor_string, "GenuineIntel") == 0) - { - switch (family) - { - case 5: - if (model <= 2) modelstr = "pentium"; - else if (model >= 4) modelstr = "pentiummmx"; - break; - case 6: - if (model <= 1) modelstr = "pentiumpro"; - else if (model <= 6) modelstr = "pentium2"; - else if (model <= 8) modelstr = "pentium3"; - else if (model <= 9) modelstr = "pentiumm"; - else if (model <= 0x0c) modelstr = "pentium3"; - else if (model <= 0x0e) modelstr = "pentiumm"; - else if (model <= 0x19) cpu_64bit = 1, modelstr = "core2"; - else if (model == 0x1a) cpu_64bit = 1, modelstr = "nehalem"; /* NHM Gainestown */ - else if (model == 0x1c) cpu_64bit = 1, modelstr = "atom"; /* Silverthorne */ - else if (model == 0x1d) cpu_64bit = 1, modelstr = "core2"; /* PNR Dunnington */ - else if (model == 0x1e) cpu_64bit = 1, modelstr = "nehalem"; /* NHM Lynnfield/Jasper */ - else if (model == 0x25) cpu_64bit = 1, modelstr = "westmere"; /* WSM Clarkdale/Arrandale */ - else if (model == 0x26) cpu_64bit = 1, modelstr = "atom"; /* Lincroft */ - else if (model == 0x27) cpu_64bit = 1, modelstr = "atom"; /* Saltwell */ - else if (model == 0x2a) cpu_64bit = 1, cpu_avx=1, modelstr = "sandybridge";/* SB */ - else if (model == 0x2c) cpu_64bit = 1, modelstr = "westmere"; /* WSM Gulftown */ - else if (model == 0x2d) cpu_64bit = 1, cpu_avx=1, modelstr = "sandybridge";/* SBC-EP */ - else if (model == 0x2e) cpu_64bit = 1, modelstr = "nehalem"; /* NHM Beckton */ - else if (model == 0x2f) cpu_64bit = 1, modelstr = "westmere"; /* WSM Eagleton */ - else if (model == 0x36) cpu_64bit = 1, modelstr = "atom"; /* Cedarview/Saltwell */ - else if (model == 0x37) cpu_64bit = 1, modelstr = "silvermont"; /* Silvermont */ - else if (model == 0x3a) cpu_64bit = 1, cpu_avx=1, modelstr = "ivybridge"; /* IBR */ - else if (model == 0x3c) cpu_64bit = 1, cpu_avx=1, modelstr = "haswell"; /* Haswell client */ - else if (model == 0x3d) cpu_64bit = 1, cpu_avx=1, modelstr = "broadwell"; /* Broadwell */ - else if (model == 0x3e) cpu_64bit = 1, cpu_avx=1, modelstr = "ivybridge"; /* Ivytown */ - else if (model == 0x3f) cpu_64bit = 1, cpu_avx=1, modelstr = "haswell"; /* Haswell server */ - else if (model == 0x45) cpu_64bit = 1, cpu_avx=1, modelstr = "haswell"; /* Haswell ULT */ - else if (model == 0x46) cpu_64bit = 1, cpu_avx=1, modelstr = "haswell"; /* Crystal Well */ - else if (model == 0x47) cpu_64bit = 1, cpu_avx=1, modelstr = "broadwell"; /* Broadwell */ - else if (model == 0x4a) cpu_64bit = 1, modelstr = "silvermont"; /* Silvermont */ - else if (model == 0x4c) cpu_64bit = 1, modelstr = "silvermont"; /* Airmont */ - else if (model == 0x4d) cpu_64bit = 1, modelstr = "silvermont"; /* Silvermont/Avoton */ - else if (model == 0x4e) cpu_64bit = 1, cpu_avx=1, modelstr = "skylake"; /* Skylake client */ - else if (model == 0x4f) cpu_64bit = 1, cpu_avx=1, modelstr = "broadwell"; /* Broadwell server */ - else if (model == 0x55) cpu_64bit = 1, cpu_avx=1, modelstr = "skylake"; /* Skylake server */ - else if (model == 0x56) cpu_64bit = 1, cpu_avx=1, modelstr = "broadwell"; /* Broadwell microserver */ - else if (model == 0x57) cpu_64bit = 1, modelstr = "knightslanding"; /* aka Xeon Phi */ - else if (model == 0x5a) cpu_64bit = 1, modelstr = "silvermont"; /* Silvermont */ - else if (model == 0x5c) cpu_64bit = 1, modelstr = "goldmont"; /* Goldmont */ - else if (model == 0x5e) cpu_64bit = 1, cpu_avx=1, modelstr = "skylake"; /* Skylake */ - else if (model == 0x5f) cpu_64bit = 1, modelstr = "goldmont"; /* Goldmont */ - else if (model == 0x8e) cpu_64bit = 1, cpu_avx=1, modelstr = "cabylake"; /* Capylake Y/U */ - else if (model == 0x9e) cpu_64bit = 1, cpu_avx=1, modelstr = "cabylake"; /* Capylake desktop */ - else cpu_64bit = 1, modelstr = "nehalem"; /* default */ - - if (strcmp (modelstr, "haswell") == 0) - { - /* Some Haswells lack BMI2. Let them appear as Sandybridges for - now. */ - CPUID (feature_string, 7); - if ((feature_string[0 + 8 / 8] & (1 << (8 % 8))) == 0) - modelstr = "sandybridge"; - } - - break; - case 15: - cpu_64bit = 1, modelstr = "pentium4"; - break; - } - } - else if (strcmp (vendor_string, "AuthenticAMD") == 0) - { - switch (family) - { - case 5: - if (model <= 3) modelstr = "k5"; - else if (model <= 7) modelstr = "k6"; - else if (model == 8) modelstr = "k62"; - else if (model == 9) modelstr = "k63"; - else if (model == 10) modelstr = "geode"; - else if (model == 13) modelstr = "k63"; - break; - case 6: - modelstr = "athlon"; - break; - case 15: /* K8, K9 */ - cpu_64bit = 1, modelstr = "k8"; - break; - case 16: /* K10 */ - cpu_64bit = 1, modelstr = "k10"; - break; - case 17: /* Hybrid k8/k10, claim k8 */ - cpu_64bit = 1, modelstr = "k8"; - break; - case 18: /* Llano, uses K10 core */ - cpu_64bit = 1, modelstr = "k10"; - break; - case 19: /* AMD Internal, assume future K10 */ - cpu_64bit = 1, modelstr = "k10"; - break; - case 20: /* Bobcat */ - cpu_64bit = 1, modelstr = "bobcat"; - break; - case 21: /* Bulldozer */ - cpu_64bit = 1, cpu_avx = 1; - if (model <= 1) - modelstr = "bulldozer"; - else if (model < 0x20) /* really 2, [0x10-0x20) */ - modelstr = "piledriver"; - else if (model < 0x40) /* really [0x30-0x40) */ - modelstr = "steamroller"; - else /* really [0x60-0x70) */ - modelstr = "excavator"; - break; - case 22: /* Jaguar, an improved bobcat */ - cpu_64bit = 1, cpu_avx = 1, modelstr = "jaguar"; - break; - } - } - else if (strcmp (vendor_string, "CyrixInstead") == 0) - { - /* Should recognize Cyrix' processors too. */ - } - else if (strcmp (vendor_string, "CentaurHauls") == 0) - { - switch (family) - { - case 6: - if (model < 9) modelstr = "viac3"; - else if (model < 15) modelstr = "viac32"; - else cpu_64bit = 1, modelstr = "nano"; - break; - } - } - - CPUID (feature_string, 0x80000001); - cpuid_64bit = (feature_string[7] >> 5) & 1; - - suffix = ""; - - if (cpuid_64bit && ! cpu_64bit) - /* If our cpuid-based CPU identification thinks this is a 32-bit CPU but - cpuid claims AMD64 capabilities, then revert to the generic "x86_64". - This is of course wrong, but it can happen in some virtualisers and - emulators, and this workaround allows for successful 64-bit builds. */ - modelstr = "x86_64"; - else if (cpu_avx && ! (cpuid_avx && cpuid_osxsave)) - /* For CPUs nominally capable of executing AVX, append "noavx" when not - both the AVX and OSXSAVE cpuid bits are set. We tolerate weirdness - here, as some virtualisers set a broken cpuid state here, while other - virtualisers allow users to set a broken state. */ - suffix = "noavx"; - - printf ("%s%s", modelstr, suffix); - return 0; -} -EOF - -# The rcx/ecx zeroing here and in the variant below is needed for the BMI2 -# check. - - cat <<EOF >${dummy}0.s - .globl cpuid - .globl _cpuid -cpuid: -_cpuid: - push %rbx - mov %rdx, %r8 - mov %ecx, %eax - xor %ecx, %ecx - .byte 0x0f - .byte 0xa2 - mov %ebx, (%r8) - mov %edx, 4(%r8) - mov %ecx, 8(%r8) - pop %rbx - ret -EOF - - if ($CC_FOR_BUILD ${dummy}0.s $dummy.c -o $dummy) >/dev/null 2>&1; then - # On 80386 and early 80486 cpuid is not available and will result in a - # SIGILL message, hence 2>/dev/null. - # - # On i386-unknown-freebsd4.9, "/bin/sh -c ./dummy" seems to send an - # "Illegal instruction (core dumped)" message to stdout, so we test $? - # to check if the program run was successful. - # - x=`$SHELL -c $dummy 2>/dev/null` - if test $? = 0 && test -n "$x"; then - exact_cpu=$x - fi - fi - - cat <<EOF >${dummy}0.s - .globl cpuid - .globl _cpuid -cpuid: -_cpuid: - pushl %esi - pushl %ebx - movl 24(%esp),%eax - xor %ecx, %ecx - .byte 0x0f - .byte 0xa2 - movl 20(%esp),%esi - movl %ebx,(%esi) - movl %edx,4(%esi) - movl %ecx,8(%esi) - popl %ebx - popl %esi - ret -EOF - - if test -z "$exact_cpu"; then - if ($CC_FOR_BUILD ${dummy}0.s $dummy.c -o $dummy) >/dev/null 2>&1; then - # On 80386 and early 80486 cpuid is not available and will result in a - # SIGILL message, hence 2>/dev/null. - # - # On i386-unknown-freebsd4.9, "/bin/sh -c ./dummy" seems to send an - # "Illegal instruction (core dumped)" message to stdout, so we test $? - # to check if the program run was successful. - # - x=`$SHELL -c $dummy 2>/dev/null` - if test $? = 0 && test -n "$x"; then - exact_cpu=$x - fi - fi - fi - - # We need to remove some .o files here since lame C compilers - # generate these even when not asked. - ;; - -s390*-*-*) - model=`grep "^processor 0: version =" /proc/cpuinfo | sed -e 's/.*machine = //'` - case $model in - 2064 | 2066) zcpu="z900" ;; - 2084 | 2086) zcpu="z990" ;; - 2094 | 2096) zcpu="z9" ;; - 2097 | 2098) zcpu="z10" ;; - 2817 | 2818 | *) zcpu="z196" ;; - esac - case "$guess_full" in - s390x-*-*) exact_cpu=${zcpu} ;; - s390-*-*) exact_cpu=${zcpu}esa ;; - esac - ;; - -esac - - - -# ------------------------------------------------------------------------- -# Use an exact cpu, if possible - -if test -n "$exact_cpu"; then - echo "$exact_cpu$guess_rest" -else - echo "$guess_full" -fi -exit 0 - - - -# Local variables: -# fill-column: 76 -# End: diff --git a/src/plugins/e-acsl/contrib/libgmp/config.in b/src/plugins/e-acsl/contrib/libgmp/config.in deleted file mode 100644 index 34d65a2cdaae34d022577c71c9b098c9476c22f8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/config.in +++ /dev/null @@ -1,641 +0,0 @@ -/* config.in. Generated from configure.ac by autoheader. */ - -/* - -Copyright 1996-2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. -*/ - -/* Define if building universal (internal helper macro) */ -#undef AC_APPLE_UNIVERSAL_BUILD - -/* The gmp-mparam.h file (a string) the tune program should suggest updating. - */ -#undef GMP_MPARAM_H_SUGGEST - -/* Define to 1 if you have the `alarm' function. */ -#undef HAVE_ALARM - -/* Define to 1 if alloca() works (via gmp-impl.h). */ -#undef HAVE_ALLOCA - -/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). - */ -#undef HAVE_ALLOCA_H - -/* Define to 1 if the compiler accepts gcc style __attribute__ ((const)) */ -#undef HAVE_ATTRIBUTE_CONST - -/* Define to 1 if the compiler accepts gcc style __attribute__ ((malloc)) */ -#undef HAVE_ATTRIBUTE_MALLOC - -/* Define to 1 if the compiler accepts gcc style __attribute__ ((mode (XX))) - */ -#undef HAVE_ATTRIBUTE_MODE - -/* Define to 1 if the compiler accepts gcc style __attribute__ ((noreturn)) */ -#undef HAVE_ATTRIBUTE_NORETURN - -/* Define to 1 if you have the `attr_get' function. */ -#undef HAVE_ATTR_GET - -/* Define to 1 if tests/libtests has calling conventions checking for the CPU - */ -#undef HAVE_CALLING_CONVENTIONS - -/* Define to 1 if you have the `clock' function. */ -#undef HAVE_CLOCK - -/* Define to 1 if you have the `clock_gettime' function */ -#undef HAVE_CLOCK_GETTIME - -/* Define to 1 if you have the `cputime' function. */ -#undef HAVE_CPUTIME - -/* Define to 1 if you have the declaration of `fgetc', and to 0 if you don't. - */ -#undef HAVE_DECL_FGETC - -/* Define to 1 if you have the declaration of `fscanf', and to 0 if you don't. - */ -#undef HAVE_DECL_FSCANF - -/* Define to 1 if you have the declaration of `optarg', and to 0 if you don't. - */ -#undef HAVE_DECL_OPTARG - -/* Define to 1 if you have the declaration of `sys_errlist', and to 0 if you - don't. */ -#undef HAVE_DECL_SYS_ERRLIST - -/* Define to 1 if you have the declaration of `sys_nerr', and to 0 if you - don't. */ -#undef HAVE_DECL_SYS_NERR - -/* Define to 1 if you have the declaration of `ungetc', and to 0 if you don't. - */ -#undef HAVE_DECL_UNGETC - -/* Define to 1 if you have the declaration of `vfprintf', and to 0 if you - don't. */ -#undef HAVE_DECL_VFPRINTF - -/* Define to 1 if you have the <dlfcn.h> header file. */ -#undef HAVE_DLFCN_H - -/* Define one of the following to 1 for the format of a `double'. - If your format is not among these choices, or you don't know what it is, - then leave all undefined. - IEEE_LITTLE_SWAPPED means little endian, but with the two 4-byte halves - swapped, as used by ARM CPUs in little endian mode. */ -#undef HAVE_DOUBLE_IEEE_BIG_ENDIAN -#undef HAVE_DOUBLE_IEEE_LITTLE_ENDIAN -#undef HAVE_DOUBLE_IEEE_LITTLE_SWAPPED -#undef HAVE_DOUBLE_VAX_D -#undef HAVE_DOUBLE_VAX_G -#undef HAVE_DOUBLE_CRAY_CFP - -/* Define to 1 if you have the <fcntl.h> header file. */ -#undef HAVE_FCNTL_H - -/* Define to 1 if you have the <float.h> header file. */ -#undef HAVE_FLOAT_H - -/* Define to 1 if you have the `getpagesize' function. */ -#undef HAVE_GETPAGESIZE - -/* Define to 1 if you have the `getrusage' function. */ -#undef HAVE_GETRUSAGE - -/* Define to 1 if you have the `getsysinfo' function. */ -#undef HAVE_GETSYSINFO - -/* Define to 1 if you have the `gettimeofday' function. */ -#undef HAVE_GETTIMEOFDAY - -/* Define to 1 if the compiler accepts gcc style __attribute__ ((visibility)) - and __attribute__ ((alias)) */ -#undef HAVE_HIDDEN_ALIAS - -/* Define one of these to 1 for the host CPU family. - If your CPU is not in any of these families, leave all undefined. - For an AMD64 chip, define "x86" in ABI=32, but not in ABI=64. */ -#undef HAVE_HOST_CPU_FAMILY_alpha -#undef HAVE_HOST_CPU_FAMILY_m68k -#undef HAVE_HOST_CPU_FAMILY_power -#undef HAVE_HOST_CPU_FAMILY_powerpc -#undef HAVE_HOST_CPU_FAMILY_x86 -#undef HAVE_HOST_CPU_FAMILY_x86_64 - -/* Define one of the following to 1 for the host CPU, as per the output of - ./config.guess. If your CPU is not listed here, leave all undefined. */ -#undef HAVE_HOST_CPU_alphaev67 -#undef HAVE_HOST_CPU_alphaev68 -#undef HAVE_HOST_CPU_alphaev7 -#undef HAVE_HOST_CPU_m68020 -#undef HAVE_HOST_CPU_m68030 -#undef HAVE_HOST_CPU_m68040 -#undef HAVE_HOST_CPU_m68060 -#undef HAVE_HOST_CPU_m68360 -#undef HAVE_HOST_CPU_powerpc604 -#undef HAVE_HOST_CPU_powerpc604e -#undef HAVE_HOST_CPU_powerpc750 -#undef HAVE_HOST_CPU_powerpc7400 -#undef HAVE_HOST_CPU_supersparc -#undef HAVE_HOST_CPU_i386 -#undef HAVE_HOST_CPU_i586 -#undef HAVE_HOST_CPU_i686 -#undef HAVE_HOST_CPU_pentium -#undef HAVE_HOST_CPU_pentiummmx -#undef HAVE_HOST_CPU_pentiumpro -#undef HAVE_HOST_CPU_pentium2 -#undef HAVE_HOST_CPU_pentium3 -#undef HAVE_HOST_CPU_s390_z900 -#undef HAVE_HOST_CPU_s390_z990 -#undef HAVE_HOST_CPU_s390_z9 -#undef HAVE_HOST_CPU_s390_z10 -#undef HAVE_HOST_CPU_s390_z196 - -/* Define to 1 iff we have a s390 with 64-bit registers. */ -#undef HAVE_HOST_CPU_s390_zarch - -/* Define to 1 if the system has the type `intmax_t'. */ -#undef HAVE_INTMAX_T - -/* Define to 1 if the system has the type `intptr_t'. */ -#undef HAVE_INTPTR_T - -/* Define to 1 if you have the <inttypes.h> header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the <invent.h> header file. */ -#undef HAVE_INVENT_H - -/* Define to 1 if you have the <langinfo.h> header file. */ -#undef HAVE_LANGINFO_H - -/* Define one of these to 1 for the endianness of `mp_limb_t'. - If the endianness is not a simple big or little, or you don't know what - it is, then leave both undefined. */ -#undef HAVE_LIMB_BIG_ENDIAN -#undef HAVE_LIMB_LITTLE_ENDIAN - -/* Define to 1 if you have the `localeconv' function. */ -#undef HAVE_LOCALECONV - -/* Define to 1 if you have the <locale.h> header file. */ -#undef HAVE_LOCALE_H - -/* Define to 1 if the system has the type `long double'. */ -#undef HAVE_LONG_DOUBLE - -/* Define to 1 if the system has the type `long long'. */ -#undef HAVE_LONG_LONG - -/* Define to 1 if you have the <machine/hal_sysinfo.h> header file. */ -#undef HAVE_MACHINE_HAL_SYSINFO_H - -/* Define to 1 if you have the <memory.h> header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `memset' function. */ -#undef HAVE_MEMSET - -/* Define to 1 if you have the `mmap' function. */ -#undef HAVE_MMAP - -/* Define to 1 if you have the `mprotect' function. */ -#undef HAVE_MPROTECT - -/* Define to 1 each of the following for which a native (ie. CPU specific) - implementation of the corresponding routine exists. */ -#undef HAVE_NATIVE_mpn_add_n -#undef HAVE_NATIVE_mpn_add_n_sub_n -#undef HAVE_NATIVE_mpn_add_nc -#undef HAVE_NATIVE_mpn_addaddmul_1msb0 -#undef HAVE_NATIVE_mpn_addlsh1_n -#undef HAVE_NATIVE_mpn_addlsh2_n -#undef HAVE_NATIVE_mpn_addlsh_n -#undef HAVE_NATIVE_mpn_addlsh1_nc -#undef HAVE_NATIVE_mpn_addlsh2_nc -#undef HAVE_NATIVE_mpn_addlsh_nc -#undef HAVE_NATIVE_mpn_addlsh1_n_ip1 -#undef HAVE_NATIVE_mpn_addlsh2_n_ip1 -#undef HAVE_NATIVE_mpn_addlsh_n_ip1 -#undef HAVE_NATIVE_mpn_addlsh1_nc_ip1 -#undef HAVE_NATIVE_mpn_addlsh2_nc_ip1 -#undef HAVE_NATIVE_mpn_addlsh_nc_ip1 -#undef HAVE_NATIVE_mpn_addlsh1_n_ip2 -#undef HAVE_NATIVE_mpn_addlsh2_n_ip2 -#undef HAVE_NATIVE_mpn_addlsh_n_ip2 -#undef HAVE_NATIVE_mpn_addlsh1_nc_ip2 -#undef HAVE_NATIVE_mpn_addlsh2_nc_ip2 -#undef HAVE_NATIVE_mpn_addlsh_nc_ip2 -#undef HAVE_NATIVE_mpn_addmul_1c -#undef HAVE_NATIVE_mpn_addmul_2 -#undef HAVE_NATIVE_mpn_addmul_3 -#undef HAVE_NATIVE_mpn_addmul_4 -#undef HAVE_NATIVE_mpn_addmul_5 -#undef HAVE_NATIVE_mpn_addmul_6 -#undef HAVE_NATIVE_mpn_addmul_7 -#undef HAVE_NATIVE_mpn_addmul_8 -#undef HAVE_NATIVE_mpn_addmul_2s -#undef HAVE_NATIVE_mpn_and_n -#undef HAVE_NATIVE_mpn_andn_n -#undef HAVE_NATIVE_mpn_bdiv_dbm1c -#undef HAVE_NATIVE_mpn_bdiv_q_1 -#undef HAVE_NATIVE_mpn_pi1_bdiv_q_1 -#undef HAVE_NATIVE_mpn_cnd_add_n -#undef HAVE_NATIVE_mpn_cnd_sub_n -#undef HAVE_NATIVE_mpn_com -#undef HAVE_NATIVE_mpn_copyd -#undef HAVE_NATIVE_mpn_copyi -#undef HAVE_NATIVE_mpn_div_qr_1n_pi1 -#undef HAVE_NATIVE_mpn_div_qr_2 -#undef HAVE_NATIVE_mpn_divexact_1 -#undef HAVE_NATIVE_mpn_divexact_by3c -#undef HAVE_NATIVE_mpn_divrem_1 -#undef HAVE_NATIVE_mpn_divrem_1c -#undef HAVE_NATIVE_mpn_divrem_2 -#undef HAVE_NATIVE_mpn_gcd_1 -#undef HAVE_NATIVE_mpn_hamdist -#undef HAVE_NATIVE_mpn_invert_limb -#undef HAVE_NATIVE_mpn_ior_n -#undef HAVE_NATIVE_mpn_iorn_n -#undef HAVE_NATIVE_mpn_lshift -#undef HAVE_NATIVE_mpn_lshiftc -#undef HAVE_NATIVE_mpn_lshsub_n -#undef HAVE_NATIVE_mpn_mod_1 -#undef HAVE_NATIVE_mpn_mod_1_1p -#undef HAVE_NATIVE_mpn_mod_1c -#undef HAVE_NATIVE_mpn_mod_1s_2p -#undef HAVE_NATIVE_mpn_mod_1s_4p -#undef HAVE_NATIVE_mpn_mod_34lsub1 -#undef HAVE_NATIVE_mpn_modexact_1_odd -#undef HAVE_NATIVE_mpn_modexact_1c_odd -#undef HAVE_NATIVE_mpn_mul_1 -#undef HAVE_NATIVE_mpn_mul_1c -#undef HAVE_NATIVE_mpn_mul_2 -#undef HAVE_NATIVE_mpn_mul_3 -#undef HAVE_NATIVE_mpn_mul_4 -#undef HAVE_NATIVE_mpn_mul_5 -#undef HAVE_NATIVE_mpn_mul_6 -#undef HAVE_NATIVE_mpn_mul_basecase -#undef HAVE_NATIVE_mpn_mullo_basecase -#undef HAVE_NATIVE_mpn_nand_n -#undef HAVE_NATIVE_mpn_nior_n -#undef HAVE_NATIVE_mpn_popcount -#undef HAVE_NATIVE_mpn_preinv_divrem_1 -#undef HAVE_NATIVE_mpn_preinv_mod_1 -#undef HAVE_NATIVE_mpn_redc_1 -#undef HAVE_NATIVE_mpn_redc_2 -#undef HAVE_NATIVE_mpn_rsblsh1_n -#undef HAVE_NATIVE_mpn_rsblsh2_n -#undef HAVE_NATIVE_mpn_rsblsh_n -#undef HAVE_NATIVE_mpn_rsblsh1_nc -#undef HAVE_NATIVE_mpn_rsblsh2_nc -#undef HAVE_NATIVE_mpn_rsblsh_nc -#undef HAVE_NATIVE_mpn_rsh1add_n -#undef HAVE_NATIVE_mpn_rsh1add_nc -#undef HAVE_NATIVE_mpn_rsh1sub_n -#undef HAVE_NATIVE_mpn_rsh1sub_nc -#undef HAVE_NATIVE_mpn_rshift -#undef HAVE_NATIVE_mpn_sqr_basecase -#undef HAVE_NATIVE_mpn_sqr_diagonal -#undef HAVE_NATIVE_mpn_sqr_diag_addlsh1 -#undef HAVE_NATIVE_mpn_sub_n -#undef HAVE_NATIVE_mpn_sub_nc -#undef HAVE_NATIVE_mpn_sublsh1_n -#undef HAVE_NATIVE_mpn_sublsh2_n -#undef HAVE_NATIVE_mpn_sublsh_n -#undef HAVE_NATIVE_mpn_sublsh1_nc -#undef HAVE_NATIVE_mpn_sublsh2_nc -#undef HAVE_NATIVE_mpn_sublsh_nc -#undef HAVE_NATIVE_mpn_sublsh1_n_ip1 -#undef HAVE_NATIVE_mpn_sublsh2_n_ip1 -#undef HAVE_NATIVE_mpn_sublsh_n_ip1 -#undef HAVE_NATIVE_mpn_sublsh1_nc_ip1 -#undef HAVE_NATIVE_mpn_sublsh2_nc_ip1 -#undef HAVE_NATIVE_mpn_sublsh_nc_ip1 -#undef HAVE_NATIVE_mpn_submul_1c -#undef HAVE_NATIVE_mpn_tabselect -#undef HAVE_NATIVE_mpn_udiv_qrnnd -#undef HAVE_NATIVE_mpn_udiv_qrnnd_r -#undef HAVE_NATIVE_mpn_umul_ppmm -#undef HAVE_NATIVE_mpn_umul_ppmm_r -#undef HAVE_NATIVE_mpn_xor_n -#undef HAVE_NATIVE_mpn_xnor_n - -/* Define to 1 if you have the `nl_langinfo' function. */ -#undef HAVE_NL_LANGINFO - -/* Define to 1 if you have the <nl_types.h> header file. */ -#undef HAVE_NL_TYPES_H - -/* Define to 1 if you have the `obstack_vprintf' function. */ -#undef HAVE_OBSTACK_VPRINTF - -/* Define to 1 if you have the `popen' function. */ -#undef HAVE_POPEN - -/* Define to 1 if you have the `processor_info' function. */ -#undef HAVE_PROCESSOR_INFO - -/* Define to 1 if <sys/pstat.h> `struct pst_processor' exists and contains - `psp_iticksperclktick'. */ -#undef HAVE_PSP_ITICKSPERCLKTICK - -/* Define to 1 if you have the `pstat_getprocessor' function. */ -#undef HAVE_PSTAT_GETPROCESSOR - -/* Define to 1 if the system has the type `ptrdiff_t'. */ -#undef HAVE_PTRDIFF_T - -/* Define to 1 if the system has the type `quad_t'. */ -#undef HAVE_QUAD_T - -/* Define to 1 if you have the `raise' function. */ -#undef HAVE_RAISE - -/* Define to 1 if you have the `read_real_time' function. */ -#undef HAVE_READ_REAL_TIME - -/* Define to 1 if you have the `sigaction' function. */ -#undef HAVE_SIGACTION - -/* Define to 1 if you have the `sigaltstack' function. */ -#undef HAVE_SIGALTSTACK - -/* Define to 1 if you have the `sigstack' function. */ -#undef HAVE_SIGSTACK - -/* Tune directory speed_cyclecounter, undef=none, 1=32bits, 2=64bits) */ -#undef HAVE_SPEED_CYCLECOUNTER - -/* Define to 1 if you have the <sstream> header file. */ -#undef HAVE_SSTREAM - -/* Define to 1 if the system has the type `stack_t'. */ -#undef HAVE_STACK_T - -/* Define to 1 if you have the <stdint.h> header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the <stdlib.h> header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if the system has the type `std::locale'. */ -#undef HAVE_STD__LOCALE - -/* Define to 1 if you have the `strchr' function. */ -#undef HAVE_STRCHR - -/* Define to 1 if you have the `strerror' function. */ -#undef HAVE_STRERROR - -/* Define to 1 if you have the <strings.h> header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the <string.h> header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the `strnlen' function. */ -#undef HAVE_STRNLEN - -/* Define to 1 if you have the `strtol' function. */ -#undef HAVE_STRTOL - -/* Define to 1 if you have the `strtoul' function. */ -#undef HAVE_STRTOUL - -/* Define to 1 if you have the `sysconf' function. */ -#undef HAVE_SYSCONF - -/* Define to 1 if you have the `sysctl' function. */ -#undef HAVE_SYSCTL - -/* Define to 1 if you have the `sysctlbyname' function. */ -#undef HAVE_SYSCTLBYNAME - -/* Define to 1 if you have the `syssgi' function. */ -#undef HAVE_SYSSGI - -/* Define to 1 if you have the <sys/attributes.h> header file. */ -#undef HAVE_SYS_ATTRIBUTES_H - -/* Define to 1 if you have the <sys/iograph.h> header file. */ -#undef HAVE_SYS_IOGRAPH_H - -/* Define to 1 if you have the <sys/mman.h> header file. */ -#undef HAVE_SYS_MMAN_H - -/* Define to 1 if you have the <sys/param.h> header file. */ -#undef HAVE_SYS_PARAM_H - -/* Define to 1 if you have the <sys/processor.h> header file. */ -#undef HAVE_SYS_PROCESSOR_H - -/* Define to 1 if you have the <sys/pstat.h> header file. */ -#undef HAVE_SYS_PSTAT_H - -/* Define to 1 if you have the <sys/resource.h> header file. */ -#undef HAVE_SYS_RESOURCE_H - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the <sys/sysctl.h> header file. */ -#undef HAVE_SYS_SYSCTL_H - -/* Define to 1 if you have the <sys/sysinfo.h> header file. */ -#undef HAVE_SYS_SYSINFO_H - -/* Define to 1 if you have the <sys/syssgi.h> header file. */ -#undef HAVE_SYS_SYSSGI_H - -/* Define to 1 if you have the <sys/systemcfg.h> header file. */ -#undef HAVE_SYS_SYSTEMCFG_H - -/* Define to 1 if you have the <sys/times.h> header file. */ -#undef HAVE_SYS_TIMES_H - -/* Define to 1 if you have the <sys/time.h> header file. */ -#undef HAVE_SYS_TIME_H - -/* Define to 1 if you have the <sys/types.h> header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the `times' function. */ -#undef HAVE_TIMES - -/* Define to 1 if the system has the type `uint_least32_t'. */ -#undef HAVE_UINT_LEAST32_T - -/* Define to 1 if you have the <unistd.h> header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if you have the `vsnprintf' function and it works properly. */ -#undef HAVE_VSNPRINTF - -/* Define to 1 for Windos/64 */ -#undef HOST_DOS64 - -/* Assembler local label prefix */ -#undef LSYM_PREFIX - -/* Define to the sub-directory where libtool stores uninstalled libraries. */ -#undef LT_OBJDIR - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define as the return type of signal handlers (`int' or `void'). */ -#undef RETSIGTYPE - -/* The size of `mp_limb_t', as computed by sizeof. */ -#undef SIZEOF_MP_LIMB_T - -/* The size of `unsigned', as computed by sizeof. */ -#undef SIZEOF_UNSIGNED - -/* The size of `unsigned long', as computed by sizeof. */ -#undef SIZEOF_UNSIGNED_LONG - -/* The size of `unsigned short', as computed by sizeof. */ -#undef SIZEOF_UNSIGNED_SHORT - -/* The size of `void *', as computed by sizeof. */ -#undef SIZEOF_VOID_P - -/* Define to 1 if sscanf requires writable inputs */ -#undef SSCANF_WRITABLE_INPUT - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ -#undef TIME_WITH_SYS_TIME - -/* Maximum size the tune program can test for SQR_TOOM2_THRESHOLD */ -#undef TUNE_SQR_TOOM2_MAX - -/* Version number of package */ -#undef VERSION - -/* Defined to 1 as per --enable-assembly */ -#undef WANT_ASSEMBLY - -/* Define to 1 to enable ASSERT checking, per --enable-assert */ -#undef WANT_ASSERT - -/* Define to 1 to enable GMP_CPU_TYPE faking cpuid, per --enable-fake-cpuid */ -#undef WANT_FAKE_CPUID - -/* Define to 1 when building a fat binary. */ -#undef WANT_FAT_BINARY - -/* Define to 1 to enable FFTs for multiplication, per --enable-fft */ -#undef WANT_FFT - -/* Define to 1 to enable old mpn_mul_fft_full for multiplication, per - --enable-old-fft-full */ -#undef WANT_OLD_FFT_FULL - -/* Define to 1 if --enable-profiling=gprof */ -#undef WANT_PROFILING_GPROF - -/* Define to 1 if --enable-profiling=instrument */ -#undef WANT_PROFILING_INSTRUMENT - -/* Define to 1 if --enable-profiling=prof */ -#undef WANT_PROFILING_PROF - -/* Define one of these to 1 for the desired temporary memory allocation - method, per --enable-alloca. */ -#undef WANT_TMP_ALLOCA -#undef WANT_TMP_REENTRANT -#undef WANT_TMP_NOTREENTRANT -#undef WANT_TMP_DEBUG - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -# undef WORDS_BIGENDIAN -# endif -#endif - -/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a - `char[]'. */ -#undef YYTEXT_POINTER - -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -#undef inline -#endif - -/* Define to the equivalent of the C99 'restrict' keyword, or to - nothing if this is not supported. Do not define if restrict is - supported directly. */ -#undef restrict -/* Work around a bug in Sun C++: it does not support _Restrict or - __restrict__, even though the corresponding Sun C compiler ends up with - "#define restrict _Restrict" or "#define restrict __restrict__" in the - previous line. Perhaps some future version of Sun C++ will work with - restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ -#if defined __SUNPRO_CC && !defined __RESTRICT -# define _Restrict -# define __restrict__ -#endif - -/* Define to empty if the keyword `volatile' does not work. Warning: valid - code using `volatile' can become incorrect without. Disable with care. */ -#undef volatile diff --git a/src/plugins/e-acsl/contrib/libgmp/config.sub b/src/plugins/e-acsl/contrib/libgmp/config.sub deleted file mode 100755 index f248e7170437202d297af4281e8dd3badb5a3587..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/config.sub +++ /dev/null @@ -1,165 +0,0 @@ -#! /bin/sh -# -# GMP config.sub wrapper. - - -# Copyright 2000-2003, 2006, 2009-2015 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - - -# Usage: config.sub CPU-VENDOR-OS -# config.sub ALIAS -# -# Validate and canonicalize the given configuration name, with special -# handling for GMP extra CPU names. -# -# When the CPU isn't special the whole name is simply passed straight -# through to configfsf.sub. -# -# When the CPU is a GMP extra, configfsf.sub is run on a similar CPU that it -# will recognise. For example "athlon-pc-freebsd3.5" is validated using -# "i386-pc-freebsd3.5". -# -# Any canonicalizations made by configfsf.sub are preserved. For example -# given "athlon-linux", configfsf.sub is called with "i386-linux" and will -# give back "i386-pc-linux-gnu". "athlon" is then reinstated, so we print -# "athlon-pc-linux-gnu". - - -# Expect to find configfsf.sub in the same directory as this config.sub -configfsf_sub="`echo \"$0\" | sed 's/config.sub$/configfsf.sub/'`" -if test "$configfsf_sub" = "$0"; then - echo "Cannot derive configfsf.sub from $0" 1>&2 - exit 1 -fi -if test -f "$configfsf_sub"; then - : -else - echo "$configfsf_sub not found" 1>&2 - exit 1 -fi - -# Always run configfsf.sub with $SHELL, like autoconf does for config.sub -SHELL=${CONFIG_SHELL-/bin/sh} - -# Identify ourselves on --version, --help, etc -case "$1" in -"" | -*) - echo "(GNU MP wrapped config.sub)" 1>&2 - $SHELL $configfsf_sub "$@" - exit - ;; -esac - -given_full="$1" -given_cpu=`echo "$given_full" | sed 's/-.*$//'` -given_rest=`echo "$given_full" | sed 's/^[^-]*//'` - - -# Aliases for GMP extras -case "$given_cpu" in - # configfsf.sub turns p5 into i586, instead use our exact cpu type - p5 | p54) given_cpu=pentium ;; - p55) given_cpu=pentiummmx ;; - - # configfsf.sub turns p6, pentiumii and pentiumiii into i686, instead use - # our exact cpu types - p6) given_cpu=pentiumpro ;; - pentiumii) given_cpu=pentium2 ;; - pentiumiii) given_cpu=pentium3 ;; -esac -given_full="$given_cpu$given_rest" - - -# GMP extras and what to use for the config.sub test -case "$given_cpu" in -itanium | itanium2) - test_cpu=ia64 ;; -pentium | pentiummmx | pentiumpro | pentium[234m] | k[567] | k6[23] | geode | athlon | viac3*) - test_cpu=i386 ;; -athlon64 | atom | silvermont | goldmont | core2 | corei* | opteron | k[89] | k10 | bobcat | jaguar* | bulldozer* | piledriver* | steamroller* | excavator* | nano | nehalem* | westmere* | sandybridge* | ivybridge* | haswell* | broadwell* | skylake* | cabylake* | knightslanding) - test_cpu=x86_64 ;; -power[2-9] | power2sc) - test_cpu=power ;; -powerpc401 | powerpc403 | powerpc405 | \ -powerpc505 | \ -powerpc601 | powerpc602 | \ -powerpc603 | powerpc603e | \ -powerpc604 | powerpc604e | \ -powerpc620 | powerpc630 | powerpc970 | \ -powerpc740 | powerpc7400 | powerpc7450 | powerpc750 | \ -powerpc801 | powerpc821 | powerpc823 | powerpc860 | \ -powerpc64) - test_cpu=powerpc ;; -sparcv8 | supersparc | microsparc | \ -ultrasparc | ultrasparc2 | ultrasparc2i | ultrasparc3 | ultrasparct[12345]) - test_cpu=sparc ;; -sh2) - test_cpu=sh ;; - -z900 | z990 | z9 | z10 | z196) - test_cpu=s390x;; -z900esa | z990esa | z9esa | z10esa | z196esa) - test_cpu=s390;; - -armsa1 | armxscale | arm9tdmi | arm9te | \ -arm10* | arm11mpcore | armsa1 | arm1136 | arm1156 | arm1176 | \ -armcortexa5 | armcortexa7 | armcortexa8 | armcortexa9 | armcortexa15 | \ -armcortexr4 | armcortexr5 | armcortexm3 | arm*neon) - test_cpu="arm";; - -*) - # Don't need or want to change the given name, just run configfsf.sub - $SHELL $configfsf_sub "$given_full" - if test $? = 0; then - exit 0 - else - echo "(GNU MP wrapped config.sub, testing \"$given_full\")" - exit 1 - fi -esac - - -test_full="$test_cpu$given_rest" -canonical_full=`$SHELL $configfsf_sub "$test_full"` -if test $? = 0; then - : -else - echo "(GNU MP wrapped config.sub, testing \"$given_full\" as \"$test_full\")" - exit 1 -fi - -canonical_rest=`echo "$canonical_full" | sed 's/^[^-]*//'` -echo "$given_cpu$canonical_rest" -exit 0 - - - -# Local variables: -# fill-column: 76 -# End: diff --git a/src/plugins/e-acsl/contrib/libgmp/configfsf.guess b/src/plugins/e-acsl/contrib/libgmp/configfsf.guess deleted file mode 100755 index afcb17bcd0989dcd015b846ae578fd57456d1c35..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/configfsf.guess +++ /dev/null @@ -1,1444 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright 1992-2015 Free Software Foundation, Inc. - -timestamp='2015-10-21' - -# 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 -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see <https://www.gnu.org/licenses/>. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that -# program. This Exception is an additional permission under section 7 -# of the GNU General Public License, version 3 ("GPLv3"). -# -# 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 -# -# Please send patches to <config-patches@gnu.org>. - - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to <config-patches@gnu.org>." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright 1992-2015 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." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -case "${UNAME_SYSTEM}" in -Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu - - eval $set_cc_for_build - cat <<-EOF > $dummy.c - #include <features.h> - #if defined(__UCLIBC__) - LIBC=uclibc - #elif defined(__dietlibc__) - LIBC=dietlibc - #else - LIBC=gnu - #endif - EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` - ;; -esac - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # 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=`(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. - case "${UNAME_MACHINE_ARCH}" in - arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - 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 - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - 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}${abi}" - exit ;; - *:Bitrig:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:Sortix:*:*) - echo ${UNAME_MACHINE}-unknown-sortix - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - 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" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - 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'` - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm*:riscos:*:*|arm*:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - 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 (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - 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 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include <stdio.h> /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include <sys/systemcfg.h> - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - 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 - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - 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 - 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 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include <stdlib.h> - #include <unistd.h> - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (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" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include <unistd.h> - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - 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_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/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - 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/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - *:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - 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} - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - aarch64_be:Linux:*:*) - UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - else - if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_PCS_VFP - then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi - else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf - fi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} - exit ;; - 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 ;; - hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} - exit ;; - 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 ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } - ;; - openrisc*:Linux:*:*) - echo or1k-unknown-linux-${LIBC} - exit ;; - or32:Linux:*:* | or1k*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-${LIBC} - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; - PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; - *) echo hppa-unknown-linux-${LIBC} ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} - exit ;; - ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} - exit ;; - ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux-${LIBC} - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} - exit ;; - x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` - echo ${UNAME_MACHINE}-pc-isc$UNAME_REL - elif /bin/uname -X 2>/dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # 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 configure will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says <Richard.M.Bartel@ccMail.Census.GOV> - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes <hewes@openmarket.com>. - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - x86_64:Haiku:*:*) - echo x86_64-unknown-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc - fi - if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; 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 - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi - fi - elif test "$UNAME_PROCESSOR" = i386 ; then - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 - fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} - exit ;; - NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "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 - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; - x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx - 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 - - http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD -and - http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -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. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/src/plugins/e-acsl/contrib/libgmp/configfsf.sub b/src/plugins/e-acsl/contrib/libgmp/configfsf.sub deleted file mode 100644 index e5987f0fde283c9f88253db0f14868589dd35d34..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/configfsf.sub +++ /dev/null @@ -1,1813 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright 1992-2015 Free Software Foundation, Inc. - -timestamp='2015-08-20' - -# 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 -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see <https://www.gnu.org/licenses/>. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that -# program. This Exception is an additional permission under section 7 -# of the GNU General Public License, version 3 ("GPLv3"). - - -# 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. -# If it is invalid, we print an error message on stderr and exit with code 1. -# 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 - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to <config-patches@gnu.org>." - -version="\ -GNU config.sub ($timestamp) - -Copyright 1992-2015 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." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -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* | netbsd*-eabi* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | 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 \ - | e2k | epiphany \ - | fido | fr30 | frv | ft32 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | rx \ - | score \ - | 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 \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | we32k \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - 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 - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown - ;; - xgate) - basic_machine=$basic_machine-unknown - os=-none - ;; - xscaleeb) - basic_machine=armeb-unknown - ;; - - xscaleel) - basic_machine=armel-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | 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-* \ - | 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-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | 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*-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - asmjs) - basic_machine=asmjs-unknown - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - 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 - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - moxiebox) - basic_machine=moxie-unknown - os=-moxiebox - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc | ppcbe) basic_machine=powerpc-unknown - ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tile*) - basic_machine=$basic_machine-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - xscale-* | xscalee[bl]-*) - basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* | -plan9* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* | -cloudabi* | -sortix* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* \ - | -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* \ - | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -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*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -nacl*) - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - c8051-*) - os=-elf - ;; - hexagon-*) - os=-elf - ;; - tic54x-*) - os=-coff - ;; - tic55x-*) - os=-coff - ;; - tic6x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/src/plugins/e-acsl/contrib/libgmp/configure b/src/plugins/e-acsl/contrib/libgmp/configure deleted file mode 100755 index 1ece306f39f4c6a3539b957853ecaceac2735fb8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/configure +++ /dev/null @@ -1,30115 +0,0 @@ -#! /bin/sh -# From configure.ac Revision. -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GNU MP 6.1.0. -# -# Report bugs to <gmp-bugs@gmplib.org, see https://gmplib.org/manual/Reporting-Bugs.html>. -# -# -# -# Copyright 1996-2015 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. -# -# -# -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Use a proper internal environment variable to ensure we don't fall - # into an infinite loop, continuously re-executing ourselves. - if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then - _as_can_reexec=no; export _as_can_reexec; - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 - fi - # We don't want this to propagate to other subprocesses. - { _as_can_reexec=; unset _as_can_reexec;} -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -test -x / || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1 - - test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ - || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - export CONFIG_SHELL - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: gmp-bugs@gmplib.org, see -$0: https://gmplib.org/manual/Reporting-Bugs.html about -$0: your system, including any error possibly output before -$0: this message. Then install a modern shell, or manually -$0: run the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # If we had to re-execute with $CONFIG_SHELL, we're ensured to have - # already done that, so ensure we don't try to do so again and fall - # in an infinite loop. This has already happened in practice. - _as_can_reexec=no; export _as_can_reexec - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - -SHELL=${CONFIG_SHELL-/bin/sh} - - -test -n "$DJDIR" || exec 7<&0 </dev/null -exec 6>&1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='GNU MP' -PACKAGE_TARNAME='gmp' -PACKAGE_VERSION='6.1.0' -PACKAGE_STRING='GNU MP 6.1.0' -PACKAGE_BUGREPORT='gmp-bugs@gmplib.org, see https://gmplib.org/manual/Reporting-Bugs.html' -PACKAGE_URL='http://www.gnu.org/software/gmp/' - -ac_unique_file="gmp-impl.h" -# Factoring default headers for most tests. -ac_includes_default="\ -#include <stdio.h> -#ifdef HAVE_SYS_TYPES_H -# include <sys/types.h> -#endif -#ifdef HAVE_SYS_STAT_H -# include <sys/stat.h> -#endif -#ifdef STDC_HEADERS -# include <stdlib.h> -# include <stddef.h> -#else -# ifdef HAVE_STDLIB_H -# include <stdlib.h> -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include <memory.h> -# endif -# include <string.h> -#endif -#ifdef HAVE_STRINGS_H -# include <strings.h> -#endif -#ifdef HAVE_INTTYPES_H -# include <inttypes.h> -#endif -#ifdef HAVE_STDINT_H -# include <stdint.h> -#endif -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -TUNE_SQR_OBJ -gmp_srclinks -mpn_objs_in_libgmp -mpn_objects -GMP_LIMB_BITS -M4 -TUNE_LIBS -TAL_OBJECT -LIBM -ENABLE_STATIC_FALSE -ENABLE_STATIC_TRUE -LT_SYS_LIBRARY_PATH -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -MANIFEST_TOOL -RANLIB -ac_ct_AR -LN_S -LD -FGREP -SED -LIBTOOL -LIBGMP_DLL -OBJDUMP -DLLTOOL -AS -NM -ac_ct_DUMPBIN -DUMPBIN -AR -ASMFLAGS -EGREP -GREP -CXXCPP -WANT_CXX_FALSE -WANT_CXX_TRUE -ac_ct_CXX -CXXFLAGS -CXX -CCAS -LIBM_FOR_BUILD -U_FOR_BUILD -EXEEXT_FOR_BUILD -CPP_FOR_BUILD -CC_FOR_BUILD -CPP -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -DEFN_LONG_LONG_LIMB -CALLING_CONVENTIONS_OBJS -SPEED_CYCLECOUNTER_OBJ -LIBGMPXX_LDFLAGS -LIBGMP_LDFLAGS -GMP_LDFLAGS -HAVE_HOST_CPU_FAMILY_powerpc -HAVE_HOST_CPU_FAMILY_power -ABI -GMP_NAIL_BITS -MAINT -MAINTAINER_MODE_FALSE -MAINTAINER_MODE_TRUE -AM_BACKSLASH -AM_DEFAULT_VERBOSITY -AM_DEFAULT_V -AM_V -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_silent_rules -enable_maintainer_mode -enable_assert -enable_alloca -enable_cxx -enable_assembly -enable_fft -enable_old_fft_full -enable_nails -enable_profiling -with_readline -enable_fat -enable_minithres -enable_fake_cpuid -enable_shared -enable_static -with_pic -enable_fast_install -with_aix_soname -with_gnu_ld -with_sysroot -enable_libtool_lock -' - ac_precious_vars='build_alias -host_alias -target_alias -ABI -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP -CC_FOR_BUILD -CPP_FOR_BUILD -CXX -CXXFLAGS -CCC -CXXCPP -LT_SYS_LIBRARY_PATH -M4' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures GNU MP 6.1.0 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/gmp] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of GNU MP 6.1.0:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-silent-rules less verbose build output (undo: "make V=1") - --disable-silent-rules verbose build output (undo: "make V=0") - --enable-maintainer-mode - enable make rules and dependencies not useful (and - sometimes confusing) to the casual installer - --enable-assert enable ASSERT checking [default=no] - --enable-alloca how to get temp memory [default=reentrant] - --enable-cxx enable C++ support [default=no] - --enable-assembly enable the use of assembly loops [default=yes] - --enable-fft enable FFTs for multiplication [default=yes] - --enable-old-fft-full enable old mpn_mul_fft_full for multiplication - [default=no] - --enable-nails use nails on limbs [default=no] - --enable-profiling build with profiler support [default=no] - --enable-fat build fat libraries on systems that support it - [default=no] - --enable-minithres choose minimal thresholds for testing [default=no] - --enable-fake-cpuid enable GMP_CPU_TYPE faking cpuid [default=no] - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-readline readline support in demo programs [default=detect] - --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use - both] - --with-aix-soname=aix|svr4|both - shared library versioning (aka "SONAME") variant to - provide on AIX, [default=aix]. - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-sysroot[=DIR] Search for dependent libraries within DIR (or the - compiler's sysroot if not specified). - -Some influential environment variables: - ABI desired ABI (for processors supporting more than one ABI) - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a - nonstandard directory <lib dir> - LIBS libraries to pass to the linker, e.g. -l<library> - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if - you have headers in a nonstandard directory <include dir> - CPP C preprocessor - CC_FOR_BUILD - build system C compiler - CPP_FOR_BUILD - build system C preprocessor - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CXXCPP C++ preprocessor - LT_SYS_LIBRARY_PATH - User-defined run-time library search path. - M4 m4 macro processor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to <gmp-bugs@gmplib.org, see https://gmplib.org/manual/Reporting-Bugs.html>. -GNU MP home page: <http://www.gnu.org/software/gmp/>. -General help using GNU software: <http://www.gnu.org/gethelp/>. -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -GNU MP configure 6.1.0 -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. - - - -Copyright 1996-2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_compile - -# ac_fn_cxx_try_cpp LINENO -# ------------------------ -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_cpp - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case <limits.h> declares $2. - For example, HP-UX 11i <limits.h> declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - <limits.h> exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - -# ac_fn_cxx_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_link - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ssssssssssssssssssssssssssssssssss ## -## Report this to gmp-bugs@gmplib.org ## -## ssssssssssssssssssssssssssssssssss ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES -# --------------------------------------------- -# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. -ac_fn_c_check_decl () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - as_decl_name=`echo $2|sed 's/ *(.*//'` - as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -#ifndef $as_decl_name -#ifdef __cplusplus - (void) $as_decl_use; -#else - (void) $as_decl_name; -#endif -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_decl - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_type - -# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES -# ---------------------------------------------------- -# Tries to find if the field MEMBER exists in type AGGR, after including -# INCLUDES, setting cache variable VAR accordingly. -ac_fn_c_check_member () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 -$as_echo_n "checking for $2.$3... " >&6; } -if eval \${$4+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (sizeof ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - eval "$4=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$4 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_member - -# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES -# --------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_cxx_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ssssssssssssssssssssssssssssssssss ## -## Report this to gmp-bugs@gmplib.org ## -## ssssssssssssssssssssssssssssssssss ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_cxx_check_header_mongrel - -# ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES -# --------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_cxx_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_cxx_check_type - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include <stdio.h> -#include <stdlib.h> -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - echo >>conftest.val; read $3 <conftest.val; ac_retval=0 -else - ac_retval=1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -rm -f conftest.val - - fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_compute_int -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by GNU MP $as_me 6.1.0, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - - - - - - - -# If --target is not used then $target_alias is empty, but if say -# "./configure athlon-pc-freebsd3.5" is used, then all three of -# $build_alias, $host_alias and $target_alias are set to -# "athlon-pc-freebsd3.5". -# -if test -n "$target_alias" && test "$target_alias" != "$host_alias"; then - as_fn_error $? "--target is not appropriate for GMP -Use --build=CPU-VENDOR-OS if you need to specify your CPU and/or system -explicitly. Use --host if cross-compiling (see \"Installing GMP\" in the -manual for more on this)." "$LINENO" 5 -fi - -gmp_configm4="config.m4" -gmp_tmpconfigm4=cnfm4.tmp -gmp_tmpconfigm4i=cnfm4i.tmp -gmp_tmpconfigm4p=cnfm4p.tmp -rm -f $gmp_tmpconfigm4 $gmp_tmpconfigm4i $gmp_tmpconfigm4p - -# CONFIG_TOP_SRCDIR is a path from the mpn builddir to the top srcdir. -# The pattern here tests for an absolute path the same way as -# _AC_OUTPUT_FILES in autoconf acgeneral.m4. -case $srcdir in -[\\/]* | ?:[\\/]* ) tmp="$srcdir" ;; -*) tmp="../$srcdir" ;; -esac -echo "define(<CONFIG_TOP_SRCDIR>,<\`$tmp'>)" >>$gmp_tmpconfigm4 - -# All CPUs use asm-defs.m4 -echo "include(CONFIG_TOP_SRCDIR\`/mpn/asm-defs.m4')" >>$gmp_tmpconfigm4i - - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - - -am__api_version='1.15' - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; -esac - -# Do 'set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken - alias in your environment" "$LINENO" 5 - fi - if test "$2" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error $? "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi - -rm -f conftest.file - -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# Expand $ac_aux_dir to an absolute path. -am_aux_dir=`cd "$ac_aux_dir" && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --is-lightweight"; then - am_missing_run="$MISSING " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -# Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : - enableval=$enable_silent_rules; -fi - -case $enable_silent_rules in # ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=1;; -esac -am_make=${MAKE-make} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 -$as_echo_n "checking whether $am_make supports nested variables... " >&6; } -if ${am_cv_make_support_nested_variables+:} false; then : - $as_echo_n "(cached) " >&6 -else - if $as_echo 'TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 -$as_echo "$am_cv_make_support_nested_variables" >&6; } -if test $am_cv_make_support_nested_variables = yes; then - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AM_BACKSLASH='\' - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='gmp' - VERSION='6.1.0' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> -# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> -mkdir_p='$(MKDIR_P)' - -# We need awk for the "check" target (and possibly the TAP driver). The -# system "awk" is bad on some platforms. -# Always define AMTAR for backward compatibility. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AMTAR='$${TAR-tar}' - - -# We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar pax cpio none' - -am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' - - - - - - -# POSIX will say in a future version that running "rm -f" with no argument -# is OK; and we want to be able to make that assumption in our Makefile -# recipes. So use an aggressive probe to check that the usage we want is -# actually supported "in the wild" to an acceptable degree. -# See automake bug#10828. -# To make any issue more visible, cause the running configure to be aborted -# by default if the 'rm' program in use doesn't match our expectations; the -# user can still override this though. -if rm -f && rm -fr && rm -rf; then : OK; else - cat >&2 <<'END' -Oops! - -Your 'rm' program seems unable to run without file operands specified -on the command line, even when the '-f' option is present. This is contrary -to the behaviour of most rm programs out there, and not conforming with -the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> - -Please tell bug-automake@gnu.org about your system, including the value -of your $PATH and any error possibly output before this message. This -can help us improve future automake versions. - -END - if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then - echo 'Configuration will proceed anyway, since you have set the' >&2 - echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 - echo >&2 - else - cat >&2 <<'END' -Aborting the configuration process, to ensure you take notice of the issue. - -You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: <http://www.gnu.org/software/coreutils/>. - -If you want to complete the configuration process using your problematic -'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM -to "yes", and re-run configure. - -END - as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 - fi -fi - -ac_config_headers="$ac_config_headers config.h:config.in" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 -$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } - # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -$as_echo "$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - - MAINT=$MAINTAINER_MODE_TRUE - - - - -# Check whether --enable-assert was given. -if test "${enable_assert+set}" = set; then : - enableval=$enable_assert; case $enableval in -yes|no) ;; -*) as_fn_error $? "bad value $enableval for --enable-assert, need yes or no" "$LINENO" 5 ;; -esac -else - enable_assert=no -fi - - -if test "$enable_assert" = "yes"; then - -$as_echo "#define WANT_ASSERT 1" >>confdefs.h - - want_assert_01=1 -else - want_assert_01=0 -fi - -echo "define(<WANT_ASSERT>,$want_assert_01)" >> $gmp_tmpconfigm4 - - - -# Check whether --enable-alloca was given. -if test "${enable_alloca+set}" = set; then : - enableval=$enable_alloca; case $enableval in -alloca|malloc-reentrant|malloc-notreentrant) ;; -yes|no|reentrant|notreentrant) ;; -debug) ;; -*) - as_fn_error $? "bad value $enableval for --enable-alloca, need one of: -yes no reentrant notreentrant alloca malloc-reentrant malloc-notreentrant debug" "$LINENO" 5 ;; -esac -else - enable_alloca=reentrant -fi - - - -# IMPROVE ME: The default for C++ is disabled. The tests currently -# performed below for a working C++ compiler are not particularly strong, -# and in general can't be expected to get the right setup on their own. The -# most significant problem is getting the ABI the same. Defaulting CXXFLAGS -# to CFLAGS takes only a small step towards this. It's also probably worth -# worrying whether the C and C++ runtimes from say gcc and a vendor C++ can -# work together. Some rather broken C++ installations were encountered -# during testing, and though such things clearly aren't GMP's problem, if -# --enable-cxx=detect were to be the default then some careful checks of -# which, if any, C++ compiler on the system is up to scratch would be -# wanted. -# -# Check whether --enable-cxx was given. -if test "${enable_cxx+set}" = set; then : - enableval=$enable_cxx; case $enableval in -yes|no|detect) ;; -*) as_fn_error $? "bad value $enableval for --enable-cxx, need yes/no/detect" "$LINENO" 5 ;; -esac -else - enable_cxx=no -fi - - - -# Check whether --enable-assembly was given. -if test "${enable_assembly+set}" = set; then : - enableval=$enable_assembly; case $enableval in -yes|no) ;; -*) as_fn_error $? "bad value $enableval for --enable-assembly, need yes or no" "$LINENO" 5 ;; -esac -else - enable_assembly=yes -fi - - -if test "$enable_assembly" = "yes"; then - -$as_echo "#define WANT_ASSEMBLY 1" >>confdefs.h - -fi - - -# Check whether --enable-fft was given. -if test "${enable_fft+set}" = set; then : - enableval=$enable_fft; case $enableval in -yes|no) ;; -*) as_fn_error $? "bad value $enableval for --enable-fft, need yes or no" "$LINENO" 5 ;; -esac -else - enable_fft=yes -fi - - -if test "$enable_fft" = "yes"; then - -$as_echo "#define WANT_FFT 1" >>confdefs.h - -fi - - -# Check whether --enable-old-fft-full was given. -if test "${enable_old_fft_full+set}" = set; then : - enableval=$enable_old_fft_full; case $enableval in -yes|no) ;; -*) as_fn_error $? "bad value $enableval for --enable-old-fft-full, need yes or no" "$LINENO" 5 ;; -esac -else - enable_old_fft_full=no -fi - - -if test "$enable_old_fft_full" = "yes"; then - -$as_echo "#define WANT_OLD_FFT_FULL 1" >>confdefs.h - -fi - - -# Check whether --enable-nails was given. -if test "${enable_nails+set}" = set; then : - enableval=$enable_nails; case $enableval in -yes|no|[02468]|[0-9][02468]) ;; -*[13579]) - as_fn_error $? "bad value $enableval for --enable-nails, only even nail sizes supported" "$LINENO" 5 ;; -*) - as_fn_error $? "bad value $enableval for --enable-nails, need yes/no/number" "$LINENO" 5 ;; -esac -else - enable_nails=no -fi - - -case $enable_nails in -yes) GMP_NAIL_BITS=2 ;; -no) GMP_NAIL_BITS=0 ;; -*) GMP_NAIL_BITS=$enable_nails ;; -esac - - - -# Check whether --enable-profiling was given. -if test "${enable_profiling+set}" = set; then : - enableval=$enable_profiling; case $enableval in -no|prof|gprof|instrument) ;; -*) as_fn_error $? "bad value $enableval for --enable-profiling, need no/prof/gprof/instrument" "$LINENO" 5 ;; -esac -else - enable_profiling=no -fi - - -case $enable_profiling in - prof) - -$as_echo "#define WANT_PROFILING_PROF 1" >>confdefs.h - - ;; - gprof) - -$as_echo "#define WANT_PROFILING_GPROF 1" >>confdefs.h - - ;; - instrument) - -$as_echo "#define WANT_PROFILING_INSTRUMENT 1" >>confdefs.h - - ;; -esac - - -echo "define(<WANT_PROFILING>,<\`$enable_profiling'>)" >> $gmp_tmpconfigm4 - - -# -fomit-frame-pointer is incompatible with -pg on some chips -if test "$enable_profiling" = gprof; then - fomit_frame_pointer= -else - fomit_frame_pointer="-fomit-frame-pointer" -fi - - - -# Check whether --with-readline was given. -if test "${with_readline+set}" = set; then : - withval=$with_readline; case $withval in -yes|no|detect) ;; -*) as_fn_error $? "bad value $withval for --with-readline, need yes/no/detect" "$LINENO" 5 ;; -esac -else - with_readline=detect -fi - - - -# Check whether --enable-fat was given. -if test "${enable_fat+set}" = set; then : - enableval=$enable_fat; case $enableval in -yes|no) ;; -*) as_fn_error $? "bad value $enableval for --enable-fat, need yes or no" "$LINENO" 5 ;; -esac -else - enable_fat=no -fi - - - -# Check whether --enable-minithres was given. -if test "${enable_minithres+set}" = set; then : - enableval=$enable_minithres; case $enableval in -yes|no) ;; -*) as_fn_error $? "bad value $enableval for --enable-minithres, need yes or no" "$LINENO" 5 ;; -esac -else - enable_minithres=no -fi - - - -# Check whether --enable-fake-cpuid was given. -if test "${enable_fake_cpuid+set}" = set; then : - enableval=$enable_fake_cpuid; case $enableval in -yes|no) ;; -*) as_fn_error $? "bad value $enableval for --enable-fake-cpuid, need yes or no" "$LINENO" 5 ;; -esac -else - enable_fake_cpuid=no -fi - - -if test "$enable_fake_cpuid" = "yes"; then - -$as_echo "#define WANT_FAKE_CPUID 1" >>confdefs.h - -fi - - -if test $enable_fat = yes && test $enable_assembly = no ; then - as_fn_error $? "when doing a fat build, disabling assembly will not work" "$LINENO" 5 -fi - -if test $enable_fake_cpuid = yes && test $enable_fat = no ; then - as_fn_error $? "--enable-fake-cpuid requires --enable-fat" "$LINENO" 5 -fi - - -tmp_host=`echo $host_cpu | sed 's/\./_/'` -cat >>confdefs.h <<_ACEOF -#define HAVE_HOST_CPU_$tmp_host 1 -_ACEOF - - -echo "define_not_for_expansion(\`HAVE_HOST_CPU_$tmp_host')" >> $gmp_tmpconfigm4p - - - - - - -# Table of compilers, options, and mpn paths. This code has various related -# purposes -# -# - better default CC/CFLAGS selections than autoconf otherwise gives -# - default CC/CFLAGS selections for extra CPU types specific to GMP -# - a few tests for known bad compilers -# - choice of ABIs on suitable systems -# - selection of corresponding mpn search path -# -# After GMP specific searches and tests, the standard autoconf AC_PROG_CC is -# called. User selections of CC etc are respected. -# -# Care is taken not to use macros like AC_TRY_COMPILE during the GMP -# pre-testing, since they of course depend on AC_PROG_CC, and also some of -# them cache their results, which is not wanted. -# -# The ABI selection mechanism is unique to GMP. All that reaches autoconf -# is a different selection of CC/CFLAGS according to the best ABI the system -# supports, and/or what the user selects. Naturally the mpn assembler code -# selected is very dependent on the ABI. -# -# The closest the standard tools come to a notion of ABI is something like -# "sparc64" which encodes a CPU and an ABI together. This doesn't seem to -# scale well for GMP, where exact CPU types like "ultrasparc2" are wanted, -# separate from the ABI used on them. -# -# -# The variables set here are -# -# cclist the compiler choices -# xx_cflags flags for compiler xx -# xx_cflags_maybe flags for compiler xx, if they work -# xx_cppflags cpp flags for compiler xx -# xx_cflags_optlist list of sets of optional flags -# xx_cflags_yyy set yyy of optional flags for compiler xx -# xx_ldflags -Wc,-foo flags for libtool linking with compiler xx -# ar_flags extra flags for $AR -# nm_flags extra flags for $NM -# limb limb size, can be "longlong" -# path mpn search path -# extra_functions extra mpn functions -# fat_path fat binary mpn search path [if fat binary desired] -# fat_functions fat functions -# fat_thresholds fat thresholds -# -# Suppose xx_cflags_optlist="arch", then flags from $xx_cflags_arch are -# tried, and the first flag that works will be used. An optlist like "arch -# cpu optimize" can be used to get multiple independent sets of flags tried. -# The first that works from each will be used. If no flag in a set works -# then nothing from that set is added. -# -# For multiple ABIs, the scheme extends as follows. -# -# abilist set of ABI choices -# cclist_aa compiler choices in ABI aa -# xx_aa_cflags flags for xx in ABI aa -# xx_aa_cflags_maybe flags for xx in ABI aa, if they work -# xx_aa_cppflags cpp flags for xx in ABI aa -# xx_aa_cflags_optlist list of sets of optional flags in ABI aa -# xx_aa_cflags_yyy set yyy of optional flags for compiler xx in ABI aa -# xx_aa_ldflags -Wc,-foo flags for libtool linking -# ar_aa_flags extra flags for $AR in ABI aa -# nm_aa_flags extra flags for $NM in ABI aa -# limb_aa limb size in ABI aa, can be "longlong" -# path_aa mpn search path in ABI aa -# extra_functions_aa extra mpn functions in ABI aa -# -# As a convenience, the unadorned xx_cflags (etc) are used for the last ABI -# in ablist, if an xx_aa_cflags for that ABI isn't given. For example if -# abilist="64 32" then $cc_64_cflags will be used for the 64-bit ABI, but -# for the 32-bit either $cc_32_cflags or $cc_cflags is used, whichever is -# defined. This makes it easy to add some 64-bit compilers and flags to an -# unadorned 32-bit set. -# -# limb=longlong (or limb_aa=longlong) applies to all compilers within that -# ABI. It won't work to have some needing long long and some not, since a -# single instantiated gmp.h will be used by both. -# -# SPEED_CYCLECOUNTER, cyclecounter_size and CALLING_CONVENTIONS_OBJS are -# also set here, with an ABI suffix. -# -# -# -# A table-driven approach like this to mapping cpu type to good compiler -# options is a bit of a maintenance burden, but there's not much uniformity -# between options specifications on different compilers. Some sort of -# separately updatable tool might be cute. -# -# The use of lots of variables like this, direct and indirect, tends to -# obscure when and how various things are done, but unfortunately it's -# pretty much the only way. If shell subroutines were portable then actual -# code like "if this .. do that" could be written, but attempting the same -# with full copies of GMP_PROG_CC_WORKS etc expanded at every point would -# hugely bloat the output. - - - - -# abilist needs to be non-empty, "standard" is just a generic name here -abilist="standard" - -# FIXME: We'd like to prefer an ANSI compiler, perhaps by preferring -# c89 over cc here. But note that on HP-UX c89 provides a castrated -# environment, and would want to be excluded somehow. Maybe -# AC_PROG_CC_STDC already does enough to stick cc into ANSI mode and -# we don't need to worry. -# -cclist="gcc cc" - -gcc_cflags="-O3 -pedantic" -gcc_64_cflags="-O3 -pedantic" -cc_cflags="-O" -cc_64_cflags="-O" - -SPEED_CYCLECOUNTER_OBJ= -cyclecounter_size=2 - -HAVE_HOST_CPU_FAMILY_power=0 - -HAVE_HOST_CPU_FAMILY_powerpc=0 - - -case $host in - - alpha*-*-*) - $as_echo "#define HAVE_HOST_CPU_FAMILY_alpha 1" >>confdefs.h - - case $host_cpu in - alphaev5* | alphapca5*) - path="alpha/ev5 alpha" ;; - alphaev67 | alphaev68 | alphaev7*) - path="alpha/ev67 alpha/ev6 alpha" ;; - alphaev6) - path="alpha/ev6 alpha" ;; - *) - path="alpha" ;; - esac - if test "$enable_assembly" = "yes" ; then - extra_functions="cntlz" - fi - gcc_cflags_optlist="asm cpu oldas" # need asm ahead of cpu, see below - gcc_cflags_maybe="-mieee" - gcc_cflags_oldas="-Wa,-oldas" # see GMP_GCC_WA_OLDAS. - - # gcc 2.7.2.3 doesn't know any -mcpu= for alpha, apparently. - # gcc 2.95 knows -mcpu= ev4, ev5, ev56, pca56, ev6. - # gcc 3.0 adds nothing. - # gcc 3.1 adds ev45, ev67 (but ev45 is the same as ev4). - # gcc 3.2 adds nothing. - # - # gcc version "2.9-gnupro-99r1" under "-O2 -mcpu=ev6" strikes internal - # compiler errors too easily and is rejected by GMP_PROG_CC_WORKS. Each - # -mcpu=ev6 below has a fallback to -mcpu=ev56 for this reason. - # - case $host_cpu in - alpha) gcc_cflags_cpu="-mcpu=ev4" ;; - alphaev5) gcc_cflags_cpu="-mcpu=ev5" ;; - alphaev56) gcc_cflags_cpu="-mcpu=ev56" ;; - alphapca56 | alphapca57) - gcc_cflags_cpu="-mcpu=pca56" ;; - alphaev6) gcc_cflags_cpu="-mcpu=ev6 -mcpu=ev56" ;; - alphaev67 | alphaev68 | alphaev7*) - gcc_cflags_cpu="-mcpu=ev67 -mcpu=ev6 -mcpu=ev56" ;; - esac - - # gcc version "2.9-gnupro-99r1" on alphaev68-dec-osf5.1 has been seen - # accepting -mcpu=ev6, but not putting the assembler in the right mode - # for what it produces. We need to do this for it, and need to do it - # before testing the -mcpu options. - # - # On old versions of gcc, which don't know -mcpu=, we believe an - # explicit -Wa,-mev5 etc will be necessary to put the assembler in - # the right mode for our .asm files and longlong.h asm blocks. - # - # On newer versions of gcc, when -mcpu= is known, we must give a -Wa - # which is at least as high as the code gcc will generate. gcc - # establishes what it needs with a ".arch" directive, our command line - # option seems to override that. - # - # gas prior to 2.14 doesn't accept -mev67, but -mev6 seems enough for - # ctlz and cttz (in 2.10.0 at least). - # - # OSF `as' accepts ev68 but stupidly treats it as ev4. -arch only seems - # to affect insns like ldbu which are expanded as macros when necessary. - # Insns like ctlz which were never available as macros are always - # accepted and always generate their plain code. - # - case $host_cpu in - alpha) gcc_cflags_asm="-Wa,-arch,ev4 -Wa,-mev4" ;; - alphaev5) gcc_cflags_asm="-Wa,-arch,ev5 -Wa,-mev5" ;; - alphaev56) gcc_cflags_asm="-Wa,-arch,ev56 -Wa,-mev56" ;; - alphapca56 | alphapca57) - gcc_cflags_asm="-Wa,-arch,pca56 -Wa,-mpca56" ;; - alphaev6) gcc_cflags_asm="-Wa,-arch,ev6 -Wa,-mev6" ;; - alphaev67 | alphaev68 | alphaev7*) - gcc_cflags_asm="-Wa,-arch,ev67 -Wa,-mev67 -Wa,-arch,ev6 -Wa,-mev6" ;; - esac - - # It might be better to ask "cc" whether it's Cray C or DEC C, - # instead of relying on the OS part of $host. But it's hard to - # imagine either of those compilers anywhere except their native - # systems. - # - -echo "include_mpn(\`alpha/alpha-defs.m4')" >> $gmp_tmpconfigm4i - - case $host in - *-cray-unicos*) - cc_cflags="-O" # no -g, it silently disables all optimizations - -echo "include_mpn(\`alpha/unicos.m4')" >> $gmp_tmpconfigm4i - - # Don't perform any assembly syntax tests on this beast. - gmp_asm_syntax_testing=no - ;; - *-*-osf*) - -echo "include_mpn(\`alpha/default.m4')" >> $gmp_tmpconfigm4i - - cc_cflags="" - cc_cflags_optlist="opt cpu" - - # not sure if -fast works on old versions, so make it optional - cc_cflags_opt="-fast -O2" - - # DEC C V5.9-005 knows ev4, ev5, ev56, pca56, ev6. - # Compaq C V6.3-029 adds ev67. - # - case $host_cpu in - alpha) cc_cflags_cpu="-arch~ev4~-tune~ev4" ;; - alphaev5) cc_cflags_cpu="-arch~ev5~-tune~ev5" ;; - alphaev56) cc_cflags_cpu="-arch~ev56~-tune~ev56" ;; - alphapca56 | alphapca57) - cc_cflags_cpu="-arch~pca56~-tune~pca56" ;; - alphaev6) cc_cflags_cpu="-arch~ev6~-tune~ev6" ;; - alphaev67 | alphaev68 | alphaev7*) - cc_cflags_cpu="-arch~ev67~-tune~ev67 -arch~ev6~-tune~ev6" ;; - esac - ;; - *) - -echo "include_mpn(\`alpha/default.m4')" >> $gmp_tmpconfigm4i - - ;; - esac - - case $host in - *-*-unicos*) - # tune/alpha.asm assumes int==4bytes but unicos uses int==8bytes - ;; - *) - SPEED_CYCLECOUNTER_OBJ=alpha.lo - cyclecounter_size=1 ;; - esac - ;; - - - # Cray vector machines. - # This must come after alpha* so that we can recognize present and future - # vector processors with a wildcard. - *-cray-unicos*) - gmp_asm_syntax_testing=no - cclist="cc" - # We used to have -hscalar0 here as a workaround for miscompilation of - # mpz/import.c, but let's hope Cray fixes their bugs instead, since - # -hscalar0 causes disastrously poor code to be generated. - cc_cflags="-O3 -hnofastmd -htask0 -Wa,-B" - path="cray" - ;; - - - arm64*-*-* | aarch64*-*-*) - # The compiler clang version 3.4 or earlier requires an explicit -mfpu=neon - # for out assembly code. Since this compiler cloaks as gcc, we have to - # fake too. - gcc_cflags_maybe="-mfpu=neon" - path="arm64" - ;; - - - arm*-*-*) - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - gcc_cflags_optlist="arch fpmode neon tune" - gcc_testlist="gcc-arm-umodsi" - -echo "include_mpn(\`arm/arm-defs.m4')" >> $gmp_tmpconfigm4i - - CALLING_CONVENTIONS_OBJS='arm32call.lo arm32check.lo' - - # This is needed for clang, which is not content with flags like -mfpu=neon - # alone. - case $host in - *-*-*eabi) - gcc_cflags_fpmode="-mfloat-abi=softfp" ;; - *-*-*eabihf) - gcc_cflags_fpmode="-mfloat-abi=hard" ;; - esac - - # FIXME: We make mandatory compiler options optional here. We should - # either enforce them, or organise to strip paths as the corresponding - # options fail. - case $host_cpu in - armv7*) - path="arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - ;; - armv6t2*) - path="arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv6t2" - ;; - armv6*) - path="arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv6" - ;; - armsa1 | arm9tdmi | armv4*) - path="arm" - gcc_cflags_arch="-march=armv4" - ;; - armxscale | arm9te | arm10 | armv5*) - path="arm/v5 arm" - gcc_cflags_arch="-march=armv5" - ;; - arm11mpcore | arm1136 | arm1176*) - path="arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv6" - ;; - arm1156) - path="arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv6t2" - ;; - armcortexa5) - path="arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - ;; - armcortexa7) - path="arm/v7a/cora7 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a7" - ;; - armcortexa7neon) - path="arm/neon arm/v7a/cora7 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a7" - ;; - armcortexa8) - path="arm/v7a/cora8 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a8" - ;; - armcortexa8neon) - path="arm/neon arm/v7a/cora8 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a8" - ;; - armcortexa9) - path="arm/v7a/cora9 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a9" - ;; - armcortexa9neon) - path="arm/neon arm/v7a/cora9 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a9" - ;; - armcortexa15) - path="arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a15 -mtune=cortex-a9" - ;; - armcortexa15neon) - path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a15 -mtune=cortex-a9" - ;; - *) - path="arm" - ;; - esac - ;; - - - # Fujitsu - f30[01]-fujitsu-sysv*) - cclist="gcc vcc" - # FIXME: flags for vcc? - vcc_cflags="-g" - path="fujitsu" - ;; - - - hppa*-*-*) - # HP cc (the one sold separately) is K&R by default, but AM_C_PROTOTYPES - # will add "-Ae", or "-Aa -D_HPUX_SOURCE", to put it into ansi mode, if - # possible. - # - # gcc for hppa 2.0 can be built either for 2.0n (32-bit) or 2.0w - # (64-bit), but not both, so there's no option to choose the desired - # mode, we must instead detect which of the two it is. This is done by - # checking sizeof(long), either 4 or 8 bytes respectively. Do this in - # ABI=1.0 too, in case someone tries to build that with a 2.0w gcc. - # - gcc_cflags_optlist="arch" - gcc_testlist="sizeof-long-4" - SPEED_CYCLECOUNTER_OBJ=hppa.lo - cyclecounter_size=1 - - # FIXME: For hppa2.0*, path should be "pa32/hppa2_0 pa32/hppa1_1 pa32". - # (Can't remember why this isn't done already, have to check what .asm - # files are available in each and how they run on a typical 2.0 cpu.) - # - case $host_cpu in - hppa1.0*) path="pa32" ;; - hppa7000*) path="pa32/hppa1_1 pa32" ;; - hppa2.0* | hppa64) - path="pa32/hppa2_0 pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;; - *) # default to 7100 - path="pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;; - esac - - # gcc 2.7.2.3 knows -mpa-risc-1-0 and -mpa-risc-1-1 - # gcc 2.95 adds -mpa-risc-2-0, plus synonyms -march=1.0, 1.1 and 2.0 - # - # We don't use -mpa-risc-2-0 in ABI=1.0 because 64-bit registers may not - # be saved by the kernel on an old system. Actually gcc (as of 3.2) - # only adds a few float instructions with -mpa-risc-2-0, so it would - # probably be safe, but let's not take the chance. In any case, a - # configuration like --host=hppa2.0 ABI=1.0 is far from optimal. - # - case $host_cpu in - hppa1.0*) gcc_cflags_arch="-mpa-risc-1-0" ;; - *) # default to 7100 - gcc_cflags_arch="-mpa-risc-1-1" ;; - esac - - case $host_cpu in - hppa1.0*) cc_cflags="+O2" ;; - *) # default to 7100 - cc_cflags="+DA1.1 +O2" ;; - esac - - case $host in - hppa2.0*-*-* | hppa64-*-*) - cclist_20n="gcc cc" - abilist="2.0n 1.0" - path_20n="pa64" - limb_20n=longlong - any_20n_testlist="sizeof-long-4" - SPEED_CYCLECOUNTER_OBJ_20n=hppa2.lo - cyclecounter_size_20n=2 - - # -mpa-risc-2-0 is only an optional flag, in case an old gcc is - # used. Assembler support for 2.0 is essential though, for our asm - # files. - gcc_20n_cflags="$gcc_cflags" - gcc_20n_cflags_optlist="arch" - gcc_20n_cflags_arch="-mpa-risc-2-0 -mpa-risc-1-1" - gcc_20n_testlist="sizeof-long-4 hppa-level-2.0" - - cc_20n_cflags="+DA2.0 +e +O2 -Wl,+vnocompatwarnings" - cc_20n_testlist="hpc-hppa-2-0" - - # ABI=2.0w is available for hppa2.0w and hppa2.0, but not for - # hppa2.0n, on the assumption that that the latter indicates a - # desire for ABI=2.0n. - case $host in - hppa2.0n-*-*) ;; - *) - # HPUX 10 and earlier cannot run 2.0w. Not sure about other - # systems (GNU/Linux for instance), but lets assume they're ok. - case $host in - *-*-hpux[1-9] | *-*-hpux[1-9].* | *-*-hpux10 | *-*-hpux10.*) ;; - *-*-linux*) abilist="1.0" ;; # due to linux permanent kernel bug - *) abilist="2.0w $abilist" ;; - esac - - cclist_20w="gcc cc" - gcc_20w_cflags="$gcc_cflags -mpa-risc-2-0" - cc_20w_cflags="+DD64 +O2" - cc_20w_testlist="hpc-hppa-2-0" - path_20w="pa64" - any_20w_testlist="sizeof-long-8" - SPEED_CYCLECOUNTER_OBJ_20w=hppa2w.lo - cyclecounter_size_20w=2 - ;; - esac - ;; - esac - ;; - - - ia64*-*-* | itanium-*-* | itanium2-*-*) - abilist="64" - -echo "include_mpn(\`ia64/ia64-defs.m4')" >> $gmp_tmpconfigm4i - - SPEED_CYCLECOUNTER_OBJ=ia64.lo - any_32_testlist="sizeof-long-4" - - case $host_cpu in - itanium) path="ia64/itanium ia64" ;; - itanium2) path="ia64/itanium2 ia64" ;; - *) path="ia64" ;; - esac - - gcc_64_cflags_optlist="tune" - gcc_32_cflags_optlist=$gcc_64_cflags_optlist - - # gcc pre-release 3.4 adds -mtune itanium and itanium2 - case $host_cpu in - itanium) gcc_cflags_tune="-mtune=itanium" ;; - itanium2) gcc_cflags_tune="-mtune=itanium2" ;; - esac - - case $host in - *-*-linux*) - cclist="gcc icc" - icc_cflags="-no-gcc" - icc_cflags_optlist="opt" - # Don't use -O3, it is for "large data sets" and also miscompiles GMP. - # But icc miscompiles GMP at any optimization level, at higher levels - # it miscompiles more files... - icc_cflags_opt="-O2 -O1" - icc_cflags_opt_maybe="-fp-model~precise" - ;; - - *-*-hpux*) - # HP cc sometimes gets internal errors if the optimization level is - # too high. GMP_PROG_CC_WORKS detects this, the "_opt" fallbacks - # let us use whatever seems to work. - # - abilist="32 64" - any_64_testlist="sizeof-long-8" - - cclist_32="gcc cc" - path_32="ia64" - cc_32_cflags="" - cc_32_cflags_optlist="opt" - cc_32_cflags_opt="+O2 +O1" - gcc_32_cflags="$gcc_cflags -milp32" - limb_32=longlong - SPEED_CYCLECOUNTER_OBJ_32=ia64.lo - cyclecounter_size_32=2 - - # Must have +DD64 in CPPFLAGS to get the right __LP64__ for headers, - # but also need it in CFLAGS for linking programs, since automake - # only uses CFLAGS when linking, not CPPFLAGS. - # FIXME: Maybe should use cc_64_ldflags for this, but that would - # need GMP_LDFLAGS used consistently by all the programs. - # - cc_64_cflags="+DD64" - cc_64_cppflags="+DD64" - cc_64_cflags_optlist="opt" - cc_64_cflags_opt="+O2 +O1" - gcc_64_cflags="$gcc_cflags -mlp64" - ;; - esac - ;; - - - # Motorola 68k - # - m68k-*-* | m68[0-9][0-9][0-9]-*-*) - $as_echo "#define HAVE_HOST_CPU_FAMILY_m68k 1" >>confdefs.h - - -echo "include_mpn(\`m68k/m68k-defs.m4')" >> $gmp_tmpconfigm4i - - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - gcc_cflags_optlist="arch" - - # gcc 2.7.2 knows -m68000, -m68020, -m68030, -m68040. - # gcc 2.95 adds -mcpu32, -m68060. - # FIXME: Maybe "-m68020 -mnobitfield" would suit cpu32 on 2.7.2. - # - case $host_cpu in - m68020) gcc_cflags_arch="-m68020" ;; - m68030) gcc_cflags_arch="-m68030" ;; - m68040) gcc_cflags_arch="-m68040" ;; - m68060) gcc_cflags_arch="-m68060 -m68000" ;; - m68360) gcc_cflags_arch="-mcpu32 -m68000" ;; - *) gcc_cflags_arch="-m68000" ;; - esac - - # FIXME: m68k/mc68020 looks like it's ok for cpu32, but this wants to be - # tested. Will need to introduce an m68k/cpu32 if m68k/mc68020 ever uses - # the bitfield instructions. - case $host_cpu in - m680[234]0 | m68360) path="m68k/mc68020 m68k" ;; - *) path="m68k" ;; - esac - ;; - - - # Motorola 88k - m88k*-*-*) - path="m88k" - ;; - m88110*-*-*) - gcc_cflags="$gcc_cflags -m88110" - path="m88k/mc88110 m88k" - ;; - - - # IRIX 5 and earlier can only run 32-bit o32. - # - # IRIX 6 and up always has a 64-bit mips CPU can run n32 or 64. n32 is - # preferred over 64, but only because that's been the default in past - # versions of GMP. The two are equally efficient. - # - # Linux kernel 2.2.13 arch/mips/kernel/irixelf.c has a comment about not - # supporting n32 or 64. - # - # For reference, libtool (eg. 1.5.6) recognises the n32 ABI and knows the - # right options to use when linking (both cc and gcc), so no need for - # anything special from us. - # - mips*-*-*) - abilist="o32" - gcc_cflags_optlist="abi" - gcc_cflags_abi="-mabi=32 -m32" - gcc_testlist="gcc-mips-o32" - path="mips32" - cc_cflags="-O2 -o32" # no -g, it disables all optimizations - # this suits both mips32 and mips64 - -echo "include_mpn(\`mips32/mips-defs.m4')" >> $gmp_tmpconfigm4i - - - case $host in - mips64*-*-* | mips*-*-irix[6789]*) - abilist="n32 64 o32" - - cclist_n32="gcc cc" - gcc_n32_cflags_optlist="abi" - gcc_n32_cflags="$gcc_cflags" - gcc_n32_cflags_abi="-mabi=n32 -mn32" - cc_n32_cflags="-O2 -n32" # no -g, it disables all optimizations - limb_n32=longlong - path_n32="mips64" - - cclist_64="gcc cc" - gcc_64_cflags_optlist="abi" - gcc_64_cflags="$gcc_cflags" - gcc_64_cflags_abi="-mabi=64 -m64" - gcc_64_ldflags="-Wc,-mabi=64" - cc_64_cflags="-O2 -64" # no -g, it disables all optimizations - cc_64_ldflags="-Wc,-64" - path_64="mips64" - ;; - esac - ;; - - - # Darwin (powerpc-apple-darwin1.3) has it's hacked gcc installed as cc. - # Our usual "gcc in disguise" detection means gcc_cflags etc here gets - # used. - # - # The darwin pre-compiling preprocessor is disabled with -no-cpp-precomp - # since it doesn't like "__attribute__ ((mode (SI)))" etc in gmp-impl.h, - # and so always ends up running the plain preprocessor anyway. This could - # be done in CPPFLAGS rather than CFLAGS, but there's not many places - # preprocessing is done separately, and this is only a speedup, the normal - # preprocessor gets run if there's any problems. - # - # We used to use -Wa,-mppc with gcc, but can't remember exactly why. - # Presumably it was for old versions of gcc where -mpowerpc doesn't put - # the assembler in the right mode. In any case -Wa,-mppc is not good, for - # instance -mcpu=604 makes recent gcc use -m604 to get access to the - # "fsel" instruction, but a -Wa,-mppc overrides that, making code that - # comes out with fsel fail. - # - # (Note also that the darwin assembler doesn't accept "-mppc", so any - # -Wa,-mppc was used only if it worked. The right flag on darwin would be - # "-arch ppc" or some such, but that's already the default.) - # - powerpc*-*-* | power[3-9]-*-*) - $as_echo "#define HAVE_HOST_CPU_FAMILY_powerpc 1" >>confdefs.h - - HAVE_HOST_CPU_FAMILY_powerpc=1 - abilist="32" - cclist="gcc cc" - cc_cflags="-O2" - gcc_32_cflags_maybe="-m32" - gcc_cflags_optlist="precomp subtype asm cpu" - gcc_cflags_precomp="-no-cpp-precomp" - gcc_cflags_subtype="-force_cpusubtype_ALL" # for vmx on darwin - gcc_cflags_asm="" - gcc_cflags_cpu="" - vmx_path="" - - # grab this object, though it's not a true cycle counter routine - SPEED_CYCLECOUNTER_OBJ=powerpc.lo - cyclecounter_size=0 - - case $host_cpu in - powerpc740 | powerpc750) - path="powerpc32/750 powerpc32" ;; - powerpc7400 | powerpc7410) - path="powerpc32/vmx powerpc32/750 powerpc32" ;; - powerpc74[45]?) - path="powerpc32/vmx powerpc32" ;; - *) - path="powerpc32" ;; - esac - - case $host_cpu in - powerpc401) gcc_cflags_cpu="-mcpu=401" ;; - powerpc403) gcc_cflags_cpu="-mcpu=403" - xlc_cflags_arch="-qarch=403 -qarch=ppc" ;; - powerpc405) gcc_cflags_cpu="-mcpu=405" ;; - powerpc505) gcc_cflags_cpu="-mcpu=505" ;; - powerpc601) gcc_cflags_cpu="-mcpu=601" - xlc_cflags_arch="-qarch=601 -qarch=ppc" ;; - powerpc602) gcc_cflags_cpu="-mcpu=602" - xlc_cflags_arch="-qarch=602 -qarch=ppc" ;; - powerpc603) gcc_cflags_cpu="-mcpu=603" - xlc_cflags_arch="-qarch=603 -qarch=ppc" ;; - powerpc603e) gcc_cflags_cpu="-mcpu=603e -mcpu=603" - xlc_cflags_arch="-qarch=603 -qarch=ppc" ;; - powerpc604) gcc_cflags_cpu="-mcpu=604" - xlc_cflags_arch="-qarch=604 -qarch=ppc" ;; - powerpc604e) gcc_cflags_cpu="-mcpu=604e -mcpu=604" - xlc_cflags_arch="-qarch=604 -qarch=ppc" ;; - powerpc620) gcc_cflags_cpu="-mcpu=620" ;; - powerpc630) gcc_cflags_cpu="-mcpu=630" - xlc_cflags_arch="-qarch=pwr3" - cpu_path="p3 p3-p7" ;; - powerpc740) gcc_cflags_cpu="-mcpu=740" ;; - powerpc7400 | powerpc7410) - gcc_cflags_asm="-Wa,-maltivec" - gcc_cflags_cpu="-mcpu=7400 -mcpu=750" ;; - powerpc74[45]?) - gcc_cflags_asm="-Wa,-maltivec" - gcc_cflags_cpu="-mcpu=7450" ;; - powerpc750) gcc_cflags_cpu="-mcpu=750" ;; - powerpc801) gcc_cflags_cpu="-mcpu=801" ;; - powerpc821) gcc_cflags_cpu="-mcpu=821" ;; - powerpc823) gcc_cflags_cpu="-mcpu=823" ;; - powerpc860) gcc_cflags_cpu="-mcpu=860" ;; - powerpc970) gcc_cflags_cpu="-mtune=970" - xlc_cflags_arch="-qarch=970 -qarch=pwr3" - vmx_path="powerpc64/vmx" - cpu_path="p4 p3-p7" ;; - power4) gcc_cflags_cpu="-mtune=power4" - xlc_cflags_arch="-qarch=pwr4" - cpu_path="p4 p3-p7" ;; - power5) gcc_cflags_cpu="-mtune=power5 -mtune=power4" - xlc_cflags_arch="-qarch=pwr5" - cpu_path="p5 p4 p3-p7" ;; - power6) gcc_cflags_cpu="-mtune=power6" - xlc_cflags_arch="-qarch=pwr6" - cpu_path="p6 p3-p7" ;; - power7) gcc_cflags_cpu="-mtune=power7 -mtune=power5" - xlc_cflags_arch="-qarch=pwr7 -qarch=pwr5" - cpu_path="p7 p5 p4 p3-p7" ;; - power[89]) gcc_cflags_cpu="-mtune=power8 -mtune=power7 -mtune=power5" - xlc_cflags_arch="-qarch=pwr8 -qarch=pwr7 -qarch=pwr5" - cpu_path="p8 p7 p5 p4 p3-p7" ;; - esac - - case $host in - *-*-aix*) - cclist="gcc xlc cc" - gcc_32_cflags_maybe="-maix32" - xlc_cflags="-O2 -qmaxmem=20000" - xlc_cflags_optlist="arch" - xlc_32_cflags_maybe="-q32" - ar_32_flags="-X32" - nm_32_flags="-X32" - esac - - case $host in - powerpc64-*-* | powerpc64le-*-* | powerpc620-*-* | powerpc630-*-* | powerpc970-*-* | power[3-9]-*-*) - case $host in - *-*-aix*) - # On AIX a true 64-bit ABI is available. - # Need -Wc to pass object type flags through to the linker. - abilist="mode64 $abilist" - cclist_mode64="gcc xlc" - gcc_mode64_cflags="$gcc_cflags -maix64 -mpowerpc64" - gcc_mode64_cflags_optlist="cpu" - gcc_mode64_ldflags="-Wc,-maix64" - xlc_mode64_cflags="-O2 -q64 -qmaxmem=20000" - xlc_mode64_cflags_optlist="arch" - xlc_mode64_ldflags="-Wc,-q64" - # Must indicate object type to ar and nm - ar_mode64_flags="-X64" - nm_mode64_flags="-X64" - path_mode64="" - p="" - for i in $cpu_path - do path_mode64="${path_mode64}powerpc64/mode64/$i " - path_mode64="${path_mode64}powerpc64/$i " - p="${p} powerpc32/$i " - done - path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" - path="$p $path" - # grab this object, though it's not a true cycle counter routine - SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo - cyclecounter_size_mode64=0 - ;; - *-*-darwin*) - # On Darwin we can use 64-bit instructions with a longlong limb, - # but the chip still in 32-bit mode. - # In theory this can be used on any OS which knows how to save - # 64-bit registers in a context switch. - # - # Note that we must use -mpowerpc64 with gcc, since the - # longlong.h macros expect limb operands in a single 64-bit - # register, not two 32-bit registers as would be given for a - # long long without -mpowerpc64. In theory we could detect and - # accommodate both styles, but the proper 64-bit registers will - # be fastest and are what we really want to use. - # - # One would think -mpowerpc64 would set the assembler in the right - # mode to handle 64-bit instructions. But for that, also - # -force_cpusubtype_ALL is needed. - # - # Do not use -fast for Darwin, it actually adds options - # incompatible with a shared library. - # - abilist="mode64 mode32 $abilist" - gcc_cflags_opt="-O3 -O2 -O1" # will this become used? - cclist_mode32="gcc" - gcc_mode32_cflags_maybe="-m32" - gcc_mode32_cflags="-mpowerpc64" - gcc_mode32_cflags_optlist="subtype cpu opt" - gcc_mode32_cflags_subtype="-force_cpusubtype_ALL" - gcc_mode32_cflags_opt="-O3 -O2 -O1" - limb_mode32=longlong - cclist_mode64="gcc" - gcc_mode64_cflags="-m64" - gcc_mode64_cflags_optlist="cpu opt" - gcc_mode64_cflags_opt="-O3 -O2 -O1" - path_mode64="" - path_mode32="" - p="" - for i in $cpu_path - do path_mode64="${path_mode64}powerpc64/mode64/$i " - path_mode64="${path_mode64}powerpc64/$i " - path_mode32="${path_mode32}powerpc64/mode32/$i " - path_mode32="${path_mode32}powerpc64/$i " - p="${p} powerpc32/$i " - done - path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" - path_mode32="${path_mode32}powerpc64/mode32 $vmx_path powerpc64" - path="$p $path" - SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo - cyclecounter_size_mode64=0 - any_mode64_testlist="sizeof-long-8" - ;; - *-*-linux* | *-*-*bsd*) - # On GNU/Linux, assume the processor is in 64-bit mode. Some - # environments have a gcc that is always in 64-bit mode, while - # others require -m64, hence the use of cflags_maybe. The - # sizeof-long-8 test checks the mode is right (for the no option - # case). - # - # -mpowerpc64 is not used, since it should be the default in - # 64-bit mode. (We need its effect for the various longlong.h - # asm macros to be right of course.) - # - # gcc64 was an early port of gcc to 64-bit mode, but should be - # obsolete before too long. We prefer plain gcc when it knows - # 64-bits. - # - abilist="mode64 mode32 $abilist" - cclist_mode32="gcc" - gcc_mode32_cflags_maybe="-m32" - gcc_mode32_cflags="-mpowerpc64" - gcc_mode32_cflags_optlist="cpu opt" - gcc_mode32_cflags_opt="-O3 -O2 -O1" - limb_mode32=longlong - cclist_mode64="gcc gcc64" - gcc_mode64_cflags_maybe="-m64" - gcc_mode64_cflags_optlist="cpu opt" - gcc_mode64_cflags_opt="-O3 -O2 -O1" - path_mode64="" - path_mode32="" - p="" - for i in $cpu_path - do path_mode64="${path_mode64}powerpc64/mode64/$i " - path_mode64="${path_mode64}powerpc64/$i " - path_mode32="${path_mode32}powerpc64/mode32/$i " - path_mode32="${path_mode32}powerpc64/$i " - p="${p} powerpc32/$i " - done - path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" - path_mode32="${path_mode32}powerpc64/mode32 $vmx_path powerpc64" - path="$p $path" - SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo - cyclecounter_size_mode64=0 - any_mode64_testlist="sizeof-long-8" - ;; - esac - ;; - esac - ;; - - - # POWER 32-bit - power-*-* | power[12]-*-* | power2sc-*-*) - $as_echo "#define HAVE_HOST_CPU_FAMILY_power 1" >>confdefs.h - - HAVE_HOST_CPU_FAMILY_power=1 - cclist="gcc" - extra_functions="udiv_w_sdiv" - path="power" - - # gcc 2.7.2 knows rios1, rios2, rsc - # - # -mcpu=rios2 can tickle an AIX assembler bug (see GMP_PROG_CC_WORKS) so - # there needs to be a fallback to just -mpower. - # - gcc_cflags_optlist="cpu" - case $host in - power-*-*) gcc_cflags_cpu="-mcpu=power -mpower" ;; - power1-*-*) gcc_cflags_cpu="-mcpu=rios1 -mpower" ;; - power2-*-*) gcc_cflags_cpu="-mcpu=rios2 -mpower" ;; - power2sc-*-*) gcc_cflags_cpu="-mcpu=rsc -mpower" ;; - esac - case $host in - *-*-aix*) - cclist="gcc xlc" - xlc_cflags="-O2 -qarch=pwr -qmaxmem=20000" - ;; - esac - ;; - - - # IBM System/390 and z/Architecture - s390-*-* | z900esa-*-* | z990esa-*-* | z9esa-*-* | z10esa-*-* | z196esa-*-* | s390x-*-* | z900-*-* | z990-*-* | z9-*-* | z10-*-* | z196-*-*) - abilist="32" - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - gcc_cflags_optlist="arch" - path="s390_32" - extra_functions="udiv_w_sdiv" - gcc_32_cflags_maybe="-m31" - - case $host_cpu in - s390) - ;; - z900 | z900esa) - cpu="z900" - gccarch="$cpu" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - cat >>confdefs.h <<_ACEOF -#define HAVE_HOST_CPU_s390_$cpu 1 -_ACEOF - - $as_echo "#define HAVE_HOST_CPU_s390_zarch 1" >>confdefs.h - - extra_functions="" - ;; - z990 | z990esa) - cpu="z990" - gccarch="$cpu" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - cat >>confdefs.h <<_ACEOF -#define HAVE_HOST_CPU_s390_$cpu 1 -_ACEOF - - $as_echo "#define HAVE_HOST_CPU_s390_zarch 1" >>confdefs.h - - extra_functions="" - ;; - z9 | z9esa) - cpu="z9" - gccarch="z9-109" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - cat >>confdefs.h <<_ACEOF -#define HAVE_HOST_CPU_s390_$cpu 1 -_ACEOF - - $as_echo "#define HAVE_HOST_CPU_s390_zarch 1" >>confdefs.h - - extra_functions="" - ;; - z10 | z10esa) - cpu="z10" - gccarch="z10" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - cat >>confdefs.h <<_ACEOF -#define HAVE_HOST_CPU_s390_$cpu 1 -_ACEOF - - $as_echo "#define HAVE_HOST_CPU_s390_zarch 1" >>confdefs.h - - extra_functions="" - ;; - z196 | z196esa) - cpu="z196" - gccarch="z196" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - cat >>confdefs.h <<_ACEOF -#define HAVE_HOST_CPU_s390_$cpu 1 -_ACEOF - - $as_echo "#define HAVE_HOST_CPU_s390_zarch 1" >>confdefs.h - - extra_functions="" - ;; - esac - - case $host in - s390x-*-* | z900-*-* | z990-*-* | z9-*-* | z10-*-* | z196-*-*) - abilist="64 32" - cclist_64="gcc" - gcc_64_cflags_optlist="arch" - gcc_64_cflags="$gcc_cflags -m64" - path_64="s390_64/$host_cpu s390_64" - extra_functions="" - ;; - esac - ;; - - - sh-*-*) path="sh" ;; - sh[2-4]-*-*) path="sh/sh2 sh" ;; - - - *sparc*-*-*) - # sizeof(long)==4 or 8 is tested, to ensure we get the right ABI. We've - # had various bug reports where users have set CFLAGS for their desired - # mode, but not set our ABI. For some reason it's sparc where this - # keeps coming up, presumably users there are accustomed to driving the - # compiler mode that way. The effect of our testlist setting is to - # reject ABI=64 in favour of ABI=32 if the user has forced the flags to - # 32-bit mode. - # - abilist="32" - cclist="gcc acc cc" - any_testlist="sizeof-long-4" - -echo "include_mpn(\`sparc32/sparc-defs.m4')" >> $gmp_tmpconfigm4i - - - case $host_cpu in - sparcv8 | microsparc | turbosparc) - path="sparc32/v8 sparc32" ;; - supersparc) - path="sparc32/v8/supersparc sparc32/v8 sparc32" ;; - sparc64 | sparcv9* | ultrasparc | ultrasparc[234]*) - path="sparc32/v9 sparc32/v8 sparc32" ;; - ultrasparct[12345]) - path="sparc32/ultrasparct1 sparc32/v8 sparc32" ;; - *) - path="sparc32" ;; - esac - - # gcc 2.7.2 doesn't know about v9 and doesn't pass -xarch=v8plus to the - # assembler. Add it explicitly since the solaris assembler won't accept - # our sparc32/v9 asm code without it. gas accepts -xarch=v8plus too, so - # it can be in the cflags unconditionally (though gas doesn't need it). - # - # gcc -m32 is needed to force 32-bit mode on a dual-ABI system, but past - # gcc doesn't know that flag, hence cflags_maybe. Note that -m32 cannot - # be done through the optlist since the plain cflags would be run first - # and we don't want to require the default mode (whatever it is) works. - # - # Note it's gcc_32_cflags_maybe and not gcc_cflags_maybe because the - # latter would be used in the 64-bit ABI on systems like "*bsd" where - # abilist="64" only. - # - gcc_32_cflags_maybe="-m32" - gcc_cflags_optlist="cpu asm" - - # gcc 2.7.2 knows -mcypress, -msupersparc, -mv8, -msparclite. - # gcc 2.95 knows -mcpu= v7, hypersparc, sparclite86x, f930, f934, - # sparclet, tsc701, v9, ultrasparc. A warning is given that the - # plain -m forms will disappear. - # gcc 3.3 adds ultrasparc3. - # - case $host_cpu in - supersparc*) - gcc_cflags_cpu="-mcpu=supersparc -msupersparc" - gcc_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8";; - sparcv8 | microsparc* | turbosparc | hypersparc*) - gcc_cflags_cpu="-mcpu=v8 -mv8" - gcc_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8";; - sparc64 | sparcv9*) - gcc_cflags_cpu="-mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8plus" - gcc_64_cflags_asm="-Wa,-Av9 -Wa,-xarch=v9";; - ultrasparc1 | ultrasparc2*) - gcc_cflags_cpu="-mcpu=ultrasparc -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusa -Wa,-xarch=v8plusa" - gcc_64_cflags_asm="-Wa,-Av9a -Wa,-xarch=v9a";; - ultrasparc[34]) - gcc_cflags_cpu="-mcpu=ultrasparc3 -mcpu=ultrasparc -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusb -Wa,-xarch=v8plusb" - gcc_64_cflags_asm="-Wa,-Av9b -Wa,-xarch=v9b";; - ultrasparct[12]) - gcc_cflags_cpu="-mcpu=niagara -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusc -Wa,-xarch=v8plusc" - gcc_64_cflags_asm="-Wa,-Av9c -Wa,-xarch=v9c";; - ultrasparct3) - gcc_cflags_cpu="-mcpu=niagara3 -mcpu=niagara -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusd -Wa,-xarch=v8plusd" - gcc_64_cflags_asm="-Wa,-Av9d -Wa,-xarch=v9d";; - ultrasparct[45]) - gcc_cflags_cpu="-mcpu=niagara4 -mcpu=niagara3 -mcpu=niagara -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusd -Wa,-xarch=v8plusd" - gcc_64_cflags_asm="-Wa,-Av9d -Wa,-xarch=v9d";; - *) - gcc_cflags_cpu="-mcpu=v7 -mcypress" - gcc_cflags_asm="";; - esac - - # SunPRO cc and acc, and SunOS bundled cc - case $host in - *-*-solaris* | *-*-sunos*) - # Note no -g, it disables all optimizations. - cc_cflags= - cc_cflags_optlist="opt arch cpu" - - # SunOS <= 4 cc doesn't know -xO3, fallback to -O2. - cc_cflags_opt="-xO3 -O2" - - # SunOS cc doesn't know -xarch, apparently always generating v7 - # code, so make this optional - case $host_cpu in - sparcv8 | microsparc* | supersparc* | turbosparc | hypersparc*) - cc_cflags_arch="-xarch=v8";; - ultrasparct[345]) - cc_cflags_arch="-xarch=v8plusd" ;; - sparc64 | sparcv9* | ultrasparc*) - cc_cflags_arch="-xarch=v8plus" ;; - *) - cc_cflags_arch="-xarch=v7" ;; - esac - - # SunOS cc doesn't know -xchip and doesn't seem to have an equivalent. - # SunPRO cc 5 recognises -xchip=generic, old, super, super2, micro, - # micro2, hyper, hyper2, powerup, ultra, ultra2, ultra2i. - # SunPRO cc 6 adds -xchip=ultra2e, ultra3cu. - # - case $host_cpu in - supersparc*) cc_cflags_cpu="-xchip=super" ;; - microsparc*) cc_cflags_cpu="-xchip=micro" ;; - turbosparc) cc_cflags_cpu="-xchip=micro2" ;; - hypersparc*) cc_cflags_cpu="-xchip=hyper" ;; - ultrasparc) cc_cflags_cpu="-xchip=ultra" ;; - ultrasparc2) cc_cflags_cpu="-xchip=ultra2 -xchip=ultra" ;; - ultrasparc2i) cc_cflags_cpu="-xchip=ultra2i -xchip=ultra2 -xchip=ultra" ;; - ultrasparc3) cc_cflags_cpu="-xchip=ultra3 -xchip=ultra" ;; - ultrasparc4) cc_cflags_cpu="-xchip=ultra4 -xchip=ultra3 -xchip=ultra" ;; - ultrasparct1) cc_cflags_cpu="-xchip=ultraT1" ;; - ultrasparct2) cc_cflags_cpu="-xchip=ultraT2 -xchip=ultraT1" ;; - ultrasparct3) cc_cflags_cpu="-xchip=ultraT3 -xchip=ultraT2" ;; - ultrasparct4) cc_cflags_cpu="-xchip=T4" ;; - ultrasparct5) cc_cflags_cpu="-xchip=T5 -xchip=T4" ;; - *) cc_cflags_cpu="-xchip=generic" ;; - esac - esac - - case $host_cpu in - sparc64 | sparcv9* | ultrasparc*) - case $host in - # Solaris 6 and earlier cannot run ABI=64 since it doesn't save - # registers properly, so ABI=32 is left as the only choice. - # - *-*-solaris2.[0-6] | *-*-solaris2.[0-6].*) ;; - - # BSD sparc64 ports are 64-bit-only systems, so ABI=64 is the only - # choice. In fact they need no special compiler flags, gcc -m64 - # is the default, but it doesn't hurt to add it. v9 CPUs always - # use the sparc64 port, since the plain 32-bit sparc ports don't - # run on a v9. - # - *-*-*bsd*) abilist="64" ;; - - # For all other systems, we try both 64 and 32. - # - # GNU/Linux sparc64 has only recently gained a 64-bit user mode. - # In the past sparc64 meant a v9 cpu, but there were no 64-bit - # operations in user mode. We assume that if "gcc -m64" works - # then the system is suitable. Hopefully even if someone attempts - # to put a new gcc and/or glibc on an old system it won't run. - # - *) abilist="64 32" ;; - esac - - case $host_cpu in - ultrasparc | ultrasparc2 | ultrasparc2i) - path_64="sparc64/ultrasparc1234 sparc64" ;; - ultrasparc[34]) - path_64="sparc64/ultrasparc34 sparc64/ultrasparc1234 sparc64" ;; - ultrasparct[12]) - path_64="sparc64/ultrasparct1 sparc64" ;; - ultrasparct[345]) - path_64="sparc64/ultrasparct3 sparc64" ;; - *) - path_64="sparc64" - esac - - cclist_64="gcc" - any_64_testlist="sizeof-long-8" - - # gcc -mptr64 is probably implied by -m64, but we're not sure if - # this was always so. On Solaris in the past we always used both - # "-m64 -mptr64". - # - # gcc -Wa,-xarch=v9 is thought to be necessary in some cases on - # solaris, but it would seem likely that if gcc is going to generate - # 64-bit code it will have to add that option itself where needed. - # An extra copy of this option should be harmless though, but leave - # it until we're sure. (Might want -xarch=v9a or -xarch=v9b for the - # higher cpu types instead.) - # - gcc_64_cflags="$gcc_cflags -m64 -mptr64" - gcc_64_ldflags="-Wc,-m64" - gcc_64_cflags_optlist="cpu asm" - - case $host in - *-*-solaris*) - # Sun cc. - # - # We used to have -fast and some fixup options here, but it - # recurrently caused problems with miscompilation. Of course, - # -fast is documented as miscompiling things for the sake of speed. - # - cclist_64="$cclist_64 cc" - cc_64_cflags_optlist="cpu" - case $host_cpu in - ultrasparct[345]) - cc_64_cflags="$cc_64_cflags -xO3 -xarch=v9d" ;; - *) - cc_64_cflags="-xO3 -xarch=v9" ;; - esac - ;; - esac - - # using the v9 %tick register - SPEED_CYCLECOUNTER_OBJ_32=sparcv9.lo - SPEED_CYCLECOUNTER_OBJ_64=sparcv9.lo - cyclecounter_size_32=2 - cyclecounter_size_64=2 - ;; - esac - ;; - - - # VAX - vax*-*-*elf*) - # Use elf conventions (i.e., '%' register prefix, no global prefix) - # - -echo "include_mpn(\`vax/elf.m4')" >> $gmp_tmpconfigm4i - - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - path="vax" - extra_functions="udiv_w_sdiv" - ;; - vax*-*-*) - # Default to aout conventions (i.e., no register prefix, '_' global prefix) - # - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - path="vax" - extra_functions="udiv_w_sdiv" - ;; - - - # AMD and Intel x86 configurations, including AMD64 - # - # Rumour has it gcc -O2 used to give worse register allocation than just - # -O, but lets assume that's no longer true. - # - # -m32 forces 32-bit mode on a bi-arch 32/64 amd64 build of gcc. -m64 is - # the default in such a build (we think), so -m32 is essential for ABI=32. - # This is, of course, done for any $host_cpu, not just x86_64, so we can - # get such a gcc into the right mode to cross-compile to say i486-*-*. - # - # -m32 is not available in gcc 2.95 and earlier, hence cflags_maybe to use - # it when it works. We check sizeof(long)==4 to ensure we get the right - # mode, in case -m32 has failed not because it's an old gcc, but because - # it's a dual 32/64-bit gcc without a 32-bit libc, or whatever. - # - i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-* | viac3*-*-* | geode*-*-* | atom-*-* | athlon64-*-* | k8-*-* | k10-*-* | bobcat-*-* | jaguar*-*-* | bulldozer*-*-* | piledriver*-*-* | steamroller*-*-* | excavator*-*-* | pentium4-*-* | atom-*-* | silvermont-*-* | goldmont-*-* | core2-*-* | corei*-*-* | x86_64-*-* | nano-*-* | nehalem*-*-* | westmere*-*-* | sandybridge*-*-* | ivybridge*-*-* | haswell*-*-* | broadwell*-*-* | skylake*-*-* | cabylake*-*-*) - abilist="32" - cclist="gcc icc cc" - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - gcc_32_cflags_maybe="-m32" - icc_cflags="-no-gcc" - icc_cflags_optlist="opt" - icc_cflags_opt="-O3 -O2 -O1" - icc_cflags_opt_maybe="-fp-model~precise" - any_32_testlist="sizeof-long-4" - gcc_cflags_optlist="cpu arch noavx" - CALLING_CONVENTIONS_OBJS='x86call.lo x86check$U.lo' - - # Availability of rdtsc is checked at run-time. - SPEED_CYCLECOUNTER_OBJ=pentium.lo - - # gcc 2.7.2 only knows i386 and i486, using -m386 or -m486. These - # represent -mcpu= since -m486 doesn't generate 486 specific insns. - # gcc 2.95 adds k6, pentium and pentiumpro, and takes -march= and -mcpu=. - # gcc 3.0 adds athlon. - # gcc 3.1 adds k6-2, k6-3, pentium-mmx, pentium2, pentium3, pentium4, - # athlon-tbird, athlon-4, athlon-xp, athlon-mp. - # gcc 3.2 adds winchip2. - # gcc 3.3 adds winchip-c6. - # gcc 3.3.1 from mandrake adds k8 and knows -mtune. - # gcc 3.4 adds c3, c3-2, k8, and deprecates -mcpu in favour of -mtune. - # - # In gcc 2.95.[0123], -march=pentiumpro provoked a stack slot bug in an - # old version of mpz/powm.c. Seems to be fine with the current code, so - # no need for any restrictions on that option. - # - # -march=pentiumpro can fail if the assembler doesn't know "cmov" - # (eg. solaris 2.8 native "as"), so always have -march=pentium after - # that as a fallback. - # - # -march=pentium4 and -march=k8 enable SSE2 instructions, which may or - # may not be supported by the assembler and/or the OS, and is bad in gcc - # prior to 3.3. The tests will reject these if no good, so fallbacks - # like "-march=pentium4 -mno-sse2" are given to try also without SSE2. - # Note the relevant -march types are listed in the optflags handling - # below, be sure to update there if adding new types emitting SSE2. - # - # -mtune is used at the start of each cpu option list to give something - # gcc 3.4 will use, thereby avoiding warnings from -mcpu. -mcpu forms - # are retained for use by prior gcc. For example pentium has - # "-mtune=pentium -mcpu=pentium ...", the -mtune is for 3.4 and the - # -mcpu for prior. If there's a brand new choice in 3.4 for a chip, - # like k8 for x86_64, then it can be the -mtune at the start, no need to - # duplicate anything. - # - case $host_cpu in - i386*) - gcc_cflags_cpu="-mtune=i386 -mcpu=i386 -m386" - gcc_cflags_arch="-march=i386" - path="x86" - ;; - i486*) - gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486" - gcc_cflags_arch="-march=i486" - path="x86/i486 x86" - ;; - i586 | pentium) - gcc_cflags_cpu="-mtune=pentium -mcpu=pentium -m486" - gcc_cflags_arch="-march=pentium" - path="x86/pentium x86" - ;; - pentiummmx) - gcc_cflags_cpu="-mtune=pentium-mmx -mcpu=pentium-mmx -mcpu=pentium -m486" - gcc_cflags_arch="-march=pentium-mmx -march=pentium" - path="x86/pentium/mmx x86/pentium x86/mmx x86" - ;; - i686 | pentiumpro) - gcc_cflags_cpu="-mtune=pentiumpro -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentiumpro -march=pentium" - path="x86/p6 x86" - ;; - pentium2) - gcc_cflags_cpu="-mtune=pentium2 -mcpu=pentium2 -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentium2 -march=pentiumpro -march=pentium" - path="x86/p6/mmx x86/p6 x86/mmx x86" - ;; - pentium3) - gcc_cflags_cpu="-mtune=pentium3 -mcpu=pentium3 -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentium3 -march=pentiumpro -march=pentium" - path="x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - ;; - pentiumm) - gcc_cflags_cpu="-mtune=pentium3 -mcpu=pentium3 -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentium3 -march=pentiumpro -march=pentium" - path="x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - ;; - k6) - gcc_cflags_cpu="-mtune=k6 -mcpu=k6 -mcpu=i486 -m486" - gcc_cflags_arch="-march=k6" - path="x86/k6/mmx x86/k6 x86/mmx x86" - ;; - k62) - gcc_cflags_cpu="-mtune=k6-2 -mcpu=k6-2 -mcpu=k6 -mcpu=i486 -m486" - gcc_cflags_arch="-march=k6-2 -march=k6" - path="x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86" - ;; - k63) - gcc_cflags_cpu="-mtune=k6-3 -mcpu=k6-3 -mcpu=k6 -mcpu=i486 -m486" - gcc_cflags_arch="-march=k6-3 -march=k6" - path="x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86" - ;; - geode) - gcc_cflags_cpu="-mtune=k6-3 -mcpu=k6-3 -mcpu=k6 -mcpu=i486 -m486" - gcc_cflags_arch="-march=k6-3 -march=k6" - path="x86/geode x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86" - ;; - athlon) - # Athlon instruction costs are close to P6 (3 cycle load latency, - # 4-6 cycle mul, 40 cycle div, pairable adc, etc) so if gcc doesn't - # know athlon (eg. 2.95.2 doesn't) then fall back on pentiumpro. - gcc_cflags_cpu="-mtune=athlon -mcpu=athlon -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=athlon -march=pentiumpro -march=pentium" - path="x86/k7/mmx x86/k7 x86/mmx x86" - ;; - i786 | pentium4) - # pentiumpro is the primary fallback when gcc doesn't know pentium4. - # This gets us cmov to eliminate branches. Maybe "athlon" would be - # a possibility on gcc 3.0. - # - gcc_cflags_cpu="-mtune=pentium4 -mcpu=pentium4 -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentium4 -march=pentium4~-mno-sse2 -march=pentiumpro -march=pentium" - gcc_64_cflags_cpu="-mtune=nocona" - path="x86/pentium4/sse2 x86/pentium4/mmx x86/pentium4 x86/mmx x86" - path_64="x86_64/pentium4 x86_64" - ;; - viac32) - # Not sure of the best fallbacks here for -mcpu. - # c3-2 has sse and mmx, so pentium3 is good for -march. - gcc_cflags_cpu="-mtune=c3-2 -mcpu=c3-2 -mcpu=i486 -m486" - gcc_cflags_arch="-march=c3-2 -march=pentium3 -march=pentiumpro -march=pentium" - path="x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - ;; - viac3*) - # Not sure of the best fallbacks here. - gcc_cflags_cpu="-mtune=c3 -mcpu=c3 -mcpu=i486 -m486" - gcc_cflags_arch="-march=c3 -march=pentium-mmx -march=pentium" - path="x86/pentium/mmx x86/pentium x86/mmx x86" - ;; - athlon64 | k8 | x86_64) - gcc_cflags_cpu="-mtune=k8 -mcpu=athlon -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=k8 -march=k8~-mno-sse2 -march=athlon -march=pentiumpro -march=pentium" - path="x86/k8 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/k8 x86_64" - ;; - k10) - gcc_cflags_cpu="-mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/k10 x86/k8 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/k10 x86_64/k8 x86_64" - ;; - bobcat) - gcc_cflags_cpu="-mtune=btver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=btver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bobcat x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bobcat x86_64/k10 x86_64/k8 x86_64" - ;; - jaguar | jaguarnoavx) - gcc_cflags_cpu="-mtune=btver2 -mtune=btver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=btver2 -march=btver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/jaguar x86/bobcat x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/jaguar x86_64/bobcat x86_64/k10 x86_64/k8 x86_64" - ;; - bulldozer | bd1 | bulldozernoavx | bd1noavx) - gcc_cflags_cpu="-mtune=bdver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" - ;; - piledriver | bd2 | piledrivernoavx | bd2noavx) - gcc_cflags_cpu="-mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" - ;; - steamroller | bd3 | steamrollernoavx | bd3noavx) - gcc_cflags_cpu="-mtune=bdver3 -mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=bdver3 -march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bd3 x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bd3 x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" - ;; - excavator | bd4 | excavatornoavx | bd4noavx) - gcc_cflags_cpu="-mtune=bdver4 -mtune=bdver3 -mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=bdver4 -march=bdver3 -march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bd4 x86/bd3 x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bd4 x86_64/bd3 x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" - ;; - core2) - gcc_cflags_cpu="-mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/core2 x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/core2 x86_64" - ;; - corei | coreinhm | coreiwsm | nehalem | westmere) - gcc_cflags_cpu="-mtune=corei7 -mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreinhm x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/coreinhm x86_64/core2 x86_64" - ;; - coreisbr | coreisbrnoavx | coreiibr | coreiibrnoavx | \ - sandybridge | sandybridgenoavx | ivybridge | ivybridgenoavx) - gcc_cflags_cpu="-mtune=sandybridge -mtune=corei7 -mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=sandybridge -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" - ;; - coreihwl | coreihwlnoavx | haswell | haswellnoavx) - gcc_cflags_cpu="-mtune=haswell -mtune=corei7 -mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=haswell -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/coreihwl x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" - ;; - coreibwl | coreibwlnoavx | broadwell | broadwellnoavx) - gcc_cflags_cpu="-mtune=broadwell -mtune=corei7 -mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=broadwell -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/coreibwl x86_64/coreihwl x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" - # extra_functions_64="missing" # enable for bmi2/adx simulation - ;; - skylake | skylakenoavx | cabylake | cabylakenoavx) - gcc_cflags_cpu="-mtune=skylake -mtune=broadwell -mtune=corei7 -mtune=core2 -mtune=k8" - # Don't pass -march=skylake for now as then some compilers emit AVX512. - gcc_cflags_arch="-march=broadwell -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/skylake x86_64/coreibwl x86_64/coreihwl x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" - # extra_functions_64="missing" # enable for bmi2/adx simulation - ;; - atom) # in-order pipeline atom - gcc_cflags_cpu="-mtune=atom -mtune=pentium3" - gcc_cflags_arch="-march=atom -march=pentium3" - path="x86/atom/sse2 x86/atom/mmx x86/atom x86/mmx x86" - path_64="x86_64/atom x86_64" - ;; - silvermont | goldmont) # out-of-order pipeline atom - gcc_cflags_cpu="-mtune=slm -mtune=atom -mtune=pentium3" - gcc_cflags_arch="-march=slm -march=atom -march=pentium3" - path="x86/atom/sse2 x86/atom/mmx x86/atom x86/mmx x86" - path_64="x86_64/silvermont x86_64/atom x86_64" - ;; - nano) - gcc_cflags_cpu="-mtune=nano" - gcc_cflags_arch="-march=nano" - path="x86/nano x86/mmx x86" - path_64="x86_64/nano x86_64" - ;; - *) - gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486" - gcc_cflags_arch="-march=i486" - path="x86" - path_64="x86_64" - ;; - esac - - case $host in - # Disable AVX if the CPU part tells us AVX is unavailable, but also - # unconditionally for NetBSD where they don't work but OSXSAVE is set - # to claim the contrary. - *noavx-*-* | *-*-netbsd*) - gcc_cflags_noavx="-mno-avx";; - esac - - case $host in - athlon64-*-* | k8-*-* | k10-*-* | bobcat-*-* | jaguar*-*-* | bulldozer*-*-* | piledriver*-*-* | steamroller*-*-* | excavator*-*-* | pentium4-*-* | atom-*-* | silvermont-*-* | goldmont-*-* | core2-*-* | corei*-*-* | x86_64-*-* | nano-*-* | nehalem*-*-* | westmere*-*-* | sandybridge*-*-* | ivybridge*-*-* | haswell*-*-* | broadwell*-*-* | skylake*-*-* | cabylake*-*-*) - cclist_64="gcc cc" - gcc_64_cflags="$gcc_cflags -m64" - gcc_64_cflags_optlist="cpu arch noavx" - CALLING_CONVENTIONS_OBJS_64='amd64call.lo amd64check$U.lo' - SPEED_CYCLECOUNTER_OBJ_64=x86_64.lo - cyclecounter_size_64=2 - - cclist_x32="gcc cc" - gcc_x32_cflags="$gcc_cflags -mx32" - gcc_x32_cflags_optlist="$gcc_64_cflags_optlist" - CALLING_CONVENTIONS_OBJS_x32="$CALLING_CONVENTIONS_OBJS_64" - SPEED_CYCLECOUNTER_OBJ_x32="$SPEED_CYCLECOUNTER_OBJ_64" - cyclecounter_size_x32="$cyclecounter_size_64" - path_x32="$path_64" - limb_x32=longlong - any_x32_testlist="sizeof-long-4" - - abilist="64 x32 32" - if test "$enable_assembly" = "yes" ; then - extra_functions_64="$extra_functions_64 invert_limb_table" - extra_functions_x32=$extra_functions_64 - fi - - case $host in - *-*-solaris*) - # Sun cc. - cc_64_cflags="-xO3 -m64" - ;; - *-*-mingw* | *-*-cygwin) - limb_64=longlong - CALLING_CONVENTIONS_OBJS_64="" - -$as_echo "#define HOST_DOS64 1" >>confdefs.h - - GMP_NONSTD_ABI_64=DOS64 - ;; - esac - ;; - esac - ;; - - - # Special CPU "none" used to select generic C, now this is obsolete. - none-*-*) - enable_assembly=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: the \"none\" host is obsolete, use --disable-assembly" >&5 -$as_echo "$as_me: WARNING: the \"none\" host is obsolete, use --disable-assembly" >&2;} - ;; - -esac - -# mingw can be built by the cygwin gcc if -mno-cygwin is added. For -# convenience add this automatically if it works. Actual mingw gcc accepts -# -mno-cygwin too, but of course is the default. mingw only runs on the -# x86s, but allow any CPU here so as to catch "none" too. -# -case $host in - *-*-mingw*) - gcc_cflags_optlist="$gcc_cflags_optlist nocygwin" - gcc_cflags_nocygwin="-mno-cygwin" - ;; -esac - - -CFLAGS_or_unset=${CFLAGS-'(unset)'} -CPPFLAGS_or_unset=${CPPFLAGS-'(unset)'} - -cat >&5 <<EOF -User: -ABI=$ABI -CC=$CC -CFLAGS=$CFLAGS_or_unset -CPPFLAGS=$CPPFLAGS_or_unset -MPN_PATH=$MPN_PATH -GMP: -abilist=$abilist -cclist=$cclist -EOF - - -test_CFLAGS=${CFLAGS+set} -test_CPPFLAGS=${CPPFLAGS+set} - -for abi in $abilist; do - abi_last="$abi" -done - -# If the user specifies an ABI then it must be in $abilist, after that -# $abilist is restricted to just that choice. -# -if test -n "$ABI"; then - found=no - for abi in $abilist; do - if test $abi = "$ABI"; then found=yes; break; fi - done - if test $found = no; then - as_fn_error $? "ABI=$ABI is not among the following valid choices: $abilist" "$LINENO" 5 - fi - abilist="$ABI" -fi - -found_compiler=no - -for abi in $abilist; do - - echo "checking ABI=$abi" - - # Suppose abilist="64 32", then for abi=64, will have abi1="_64" and - # abi2="_64". For abi=32, will have abi1="_32" and abi2="". This is how - # $gcc_cflags becomes a fallback for $gcc_32_cflags (the last in the - # abilist), but there's no fallback for $gcc_64_cflags. - # - abi1=`echo _$abi | sed 's/[.]//g'` - if test $abi = $abi_last; then abi2=; else abi2="$abi1"; fi - - # Compiler choices under this ABI - eval cclist_chosen=\"\$cclist$abi1\" - test -n "$cclist_chosen" || eval cclist_chosen=\"\$cclist$abi2\" - - # If there's a user specified $CC then don't use a list for - # $cclist_chosen, just a single value for $ccbase. - # - if test -n "$CC"; then - - # The first word of $CC, stripped of any directory. For instance - # CC="/usr/local/bin/gcc -pipe" will give "gcc". - # - for ccbase in $CC; do break; done - ccbase=`echo $ccbase | sed 's:.*/::'` - - # If this $ccbase is in $cclist_chosen then it's a compiler we know and - # we can do flags defaulting with it. If not, then $cclist_chosen is - # set to "unrecognised" so no default flags are used. - # - # "unrecognised" is used to avoid bad effects with eval if $ccbase has - # non-symbol characters. For instance ccbase=my+cc would end up with - # something like cflags="$my+cc_cflags" which would give - # cflags="+cc_cflags" rather than the intended empty string for an - # unknown compiler. - # - found=unrecognised - for i in $cclist_chosen; do - if test "$ccbase" = $i; then - found=$ccbase - break - fi - done - cclist_chosen=$found - fi - - for ccbase in $cclist_chosen; do - - # When cross compiling, look for a compiler with the $host_alias as a - # prefix, the same way that AC_CHECK_TOOL does. But don't do this to a - # user-selected $CC. - # - # $cross_compiling will be yes/no/maybe at this point. Do the host - # prefixing for "maybe" as well as "yes". - # - if test "$cross_compiling" != no && test -z "$CC"; then - cross_compiling_prefix="${host_alias}-" - fi - - for ccprefix in $cross_compiling_prefix ""; do - - cc="$CC" - test -n "$cc" || cc="$ccprefix$ccbase" - - # If the compiler is gcc but installed under another name, then change - # $ccbase so as to use the flags we know for gcc. This helps for - # instance when specifying CC=gcc272 on Debian GNU/Linux, or the - # native cc which is really gcc on NeXT or MacOS-X. - # - # FIXME: There's a slight misfeature here. If cc is actually gcc but - # gcc is not a known compiler under this $abi then we'll end up - # testing it with no flags and it'll work, but chances are it won't be - # in the right mode for the ABI we desire. Let's quietly hope this - # doesn't happen. - # - if test $ccbase != gcc; then - cat >conftest.c <<EOF -#if ! defined (__GNUC__) || defined (__INTEL_COMPILER) - choke me -#endif -EOF -gmp_compile="$cc -c conftest.c >&5" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - rm -f conftest* - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $cc is gcc" >&5 -$as_echo_n "checking whether $cc is gcc... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - ccbase=gcc -else - rm -f conftest* - : -fi - - fi - - # Similarly if the compiler is IBM xlc but invoked as cc or whatever - # then change $ccbase and make the default xlc flags available. - if test $ccbase != xlc; then - gmp_command="$cc 2>&1 | grep xlc >/dev/null" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_command\""; } >&5 - (eval $gmp_command) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $cc is xlc" >&5 -$as_echo_n "checking whether $cc is xlc... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - ccbase=xlc -else - : -fi - - fi - - # acc was Sun's first unbundled compiler back in the SunOS days, or - # something like that, but today its man page says it's not meant to - # be used directly (instead via /usr/ucb/cc). The options are pretty - # much the same as the main SunPRO cc, so share those configs. - # - case $host in - *sparc*-*-solaris* | *sparc*-*-sunos*) - if test "$ccbase" = acc; then ccbase=cc; fi ;; - esac - - for tmp_cflags_maybe in yes no; do - eval cflags=\"\$${ccbase}${abi1}_cflags\" - test -n "$cflags" || eval cflags=\"\$${ccbase}${abi2}_cflags\" - - if test "$tmp_cflags_maybe" = yes; then - # don't try cflags_maybe when the user set CFLAGS - if test "$test_CFLAGS" = set; then continue; fi - eval cflags_maybe=\"\$${ccbase}${abi1}_cflags_maybe\" - test -n "$cflags_maybe" || eval cflags_maybe=\"\$${ccbase}${abi2}_cflags_maybe\" - # don't try cflags_maybe if there's nothing set - if test -z "$cflags_maybe"; then continue; fi - cflags="$cflags_maybe $cflags" - fi - - # Any user CFLAGS, even an empty string, takes precedence - if test "$test_CFLAGS" = set; then cflags=$CFLAGS; fi - - # Any user CPPFLAGS, even an empty string, takes precedence - eval cppflags=\"\$${ccbase}${abi1}_cppflags\" - test -n "$cppflags" || eval cppflags=\"\$${ccbase}${abi2}_cppflags\" - if test "$test_CPPFLAGS" = set; then cppflags=$CPPFLAGS; fi - - # --enable-profiling adds -p/-pg even to user-specified CFLAGS. - # This is convenient, but it's perhaps a bit naughty to modify user - # CFLAGS. - case "$enable_profiling" in - prof) cflags="$cflags -p" ;; - gprof) cflags="$cflags -pg" ;; - instrument) cflags="$cflags -finstrument-functions" ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler $cc $cflags $cppflags" >&5 -$as_echo_n "checking compiler $cc $cflags $cppflags... " >&6; } -gmp_prog_cc_works=yes - -# first see a simple "main()" works, then go on to other checks -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF - -int main () { return 0; } -EOF - echo "Test compile: " >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no" - ;; - norun) - gmp_prog_cc_works="no, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes an internal error from gcc 2.95.2 -mpowerpc64 - (without -maix64), hence detecting an unusable compiler */ -void *g() { return (void *) 0; } -void *f() { return g(); } - -int main () { return 0; } -EOF - echo "Test compile: function pointer return" >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, function pointer return" - ;; - norun) - gmp_prog_cc_works="no, function pointer return, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes an invalid instruction syntax from i386 gcc - -march=pentiumpro on Solaris 2.8. The native sun assembler - requires a non-standard syntax for cmov which gcc (as of 2.95.2 at - least) doesn't know. */ -int n; -int cmov () { return (n >= 0 ? n : 0); } - -int main () { return 0; } -EOF - echo "Test compile: cmov instruction" >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, cmov instruction" - ;; - norun) - gmp_prog_cc_works="no, cmov instruction, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes a linker invocation problem with gcc 3.0.3 - on AIX 4.3 under "-maix64 -mpowerpc64 -mcpu=630". The -mcpu=630 - option causes gcc to incorrectly select the 32-bit libgcc.a, not - the 64-bit one, and consequently it misses out on the __fixunsdfdi - helper (double -> uint64 conversion). */ -double d; -unsigned long gcc303 () { return (unsigned long) d; } - -int main () { return 0; } -EOF - echo "Test compile: double -> ulong conversion" >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, double -> ulong conversion" - ;; - norun) - gmp_prog_cc_works="no, double -> ulong conversion, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes an error from hppa gcc 2.95 under -mpa-risc-2-0 if - the assembler doesn't know hppa 2.0 instructions. fneg is a 2.0 - instruction, and a negation like this comes out using it. */ -double fneg_data; -unsigned long fneg () { return -fneg_data; } - -int main () { return 0; } -EOF - echo "Test compile: double negation" >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, double negation" - ;; - norun) - gmp_prog_cc_works="no, double negation, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following makes gcc 3.3 -march=pentium4 generate an SSE2 xmm insn - (cvtsd2ss) which will provoke an error if the assembler doesn't recognise - those instructions. Not sure how much of the gmp code will come out - wanting sse2, but it's easiest to reject an option we know is bad. */ -double ftod_data; -float ftod () { return (float) ftod_data; } - -int main () { return 0; } -EOF - echo "Test compile: double -> float conversion" >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, double -> float conversion" - ;; - norun) - gmp_prog_cc_works="no, double -> float conversion, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes an internal compiler error from gcc version - "2.9-gnupro-99r1" under "-O2 -mcpu=ev6", apparently relating to char - values being spilled into floating point registers. The problem doesn't - show up all the time, but has occurred enough in GMP for us to reject - this compiler+flags. */ -#include <string.h> /* for memcpy */ -struct try_t -{ - char dst[2]; - char size; - long d0, d1, d2, d3, d4, d5, d6; - char overlap; -}; -struct try_t param[6]; -int -param_init () -{ - struct try_t *p; - memcpy (p, ¶m[ 2 ], sizeof (*p)); - memcpy (p, ¶m[ 2 ], sizeof (*p)); - p->size = 2; - memcpy (p, ¶m[ 1 ], sizeof (*p)); - p->dst[0] = 1; - p->overlap = 2; - memcpy (p, ¶m[ 3 ], sizeof (*p)); - p->dst[0] = 1; - p->overlap = 8; - memcpy (p, ¶m[ 4 ], sizeof (*p)); - memcpy (p, ¶m[ 4 ], sizeof (*p)); - p->overlap = 8; - memcpy (p, ¶m[ 5 ], sizeof (*p)); - memcpy (p, ¶m[ 5 ], sizeof (*p)); - memcpy (p, ¶m[ 5 ], sizeof (*p)); - return 0; -} - -int main () { return 0; } -EOF - echo "Test compile: gnupro alpha ev6 char spilling" >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, gnupro alpha ev6 char spilling" - ;; - norun) - gmp_prog_cc_works="no, gnupro alpha ev6 char spilling, program does not run" - ;; - esac -fi - - - - -# __builtin_alloca is not available everywhere, check it exists before -# seeing that it works -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -int k; int foo () { __builtin_alloca (k); } -EOF - echo "Test compile: __builtin_alloca availability" >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes an internal compiler error from Itanium HP-UX cc - under +O2 or higher. We use this sort of code in mpn/generic/mul_fft.c. */ -int k; -int foo () -{ - int i, **a; - a = __builtin_alloca (k); - for (i = 0; i <= k; i++) - a[i] = __builtin_alloca (1 << i); -} - -int main () { return 0; } -EOF - echo "Test compile: alloca array" >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, alloca array" - ;; - norun) - gmp_prog_cc_works="no, alloca array, program does not run" - ;; - esac -fi - - - - ;; - no) - - ;; - norun) - - ;; - esac -fi - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes an internal error from the assembler on - power2-ibm-aix4.3.1.0. gcc -mrios2 compiles to nabs+fcirz, and this - results in "Internal error related to the source program domain". - - For reference it seems to be the combination of nabs+fcirz which is bad, - not either alone. This sort of thing occurs in mpz/get_str.c with the - way double chars_per_bit_exactly is applied in MPN_SIZEINBASE. Perhaps - if that code changes to a scaled-integer style then we won't need this - test. */ - -double fp[1]; -int x; -int f () -{ - int a; - a = (x >= 0 ? x : -x); - return a * fp[0]; -} - -int main () { return 0; } -EOF - echo "Test compile: abs int -> double conversion" >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, abs int -> double conversion" - ;; - norun) - gmp_prog_cc_works="no, abs int -> double conversion, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes a segfault in the compiler on powerpc-apple-darwin. - Extracted from tests/mpn/t-iord_u.c. Causes Apple's gcc 3.3 build 1640 and - 1666 to segfault with e.g., -O2 -mpowerpc64. */ - -#if defined (__GNUC__) && ! defined (__cplusplus) -typedef unsigned long long t1;typedef t1*t2; -void g(){} -void h(){} -static __inline__ t1 e(t2 rp,t2 up,int n,t1 v0) -{t1 c,x,r;int i;if(v0){c=1;for(i=1;i<n;i++){x=up[i];r=x+1;rp[i]=r;}}return c;} -void f(){static const struct{t1 n;t1 src[9];t1 want[9];}d[]={{1,{0},{1}},};t1 got[9];int i; -for(i=0;i<1;i++){if(e(got,got,9,d[i].n)==0)h();g(i,d[i].src,d[i].n,got,d[i].want,9);if(d[i].n)h();}} -#else -int dummy; -#endif - -int main () { return 0; } -EOF - echo "Test compile: long long reliability test 1" >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, long long reliability test 1" - ;; - norun) - gmp_prog_cc_works="no, long long reliability test 1, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes an internal compiler error on powerpc-apple-darwin. - Extracted from mpz/cfdiv_q_2exp.c. Causes Apple's gcc 3.3 build 1640 and - 1666 to get an ICE with -O1 -mpowerpc64. */ - -#if defined (__GNUC__) && ! defined (__cplusplus) -int g(); -void f(int u){int i;long long x;x=u?~0:0;if(x)for(i=0;i<9;i++);x&=g();if(x)g();} -int g(){return 0;} -#else -int dummy; -#endif - -int main () { return 0; } -EOF - echo "Test compile: long long reliability test 2" >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, long long reliability test 2" - ;; - norun) - gmp_prog_cc_works="no, long long reliability test 2, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* Provokes an ICE on i386-freebsd with the FreeBSD-hacked gcc, under - -O2 -march=amdfam10. We call helper functions here "open" and "close" in - order for linking to succeed. */ - -#if defined (__GNUC__) && ! defined (__cplusplus) -int open(int*,int*,int);void*close(int);void g(int*rp,int*up,int un){ -__builtin_expect(un<=0x7f00,1)?__builtin_alloca(un):close(un);if(__builtin_clzl -(up[un])){open(rp,up,un);while(1){if(rp[un-1]!=0)break;un--;}}} -#else -int dummy; -#endif - -int main () { return 0; } -EOF - echo "Test compile: freebsd hacked gcc" >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, freebsd hacked gcc" - ;; - norun) - gmp_prog_cc_works="no, freebsd hacked gcc, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following is mis-compiled by HP ia-64 cc version - cc: HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003] - under "cc +O3", both in +DD32 and +DD64 modes. The mpn_lshift_com gets - inlined and its return value somehow botched to be 0 instead of 1. This - arises in the real mpn_lshift_com in mul_fft.c. A lower optimization - level, like +O2 seems ok. This code needs to be run to show the problem, - but that's fine, the offending cc is a native-only compiler so we don't - have to worry about cross compiling. */ - -#if ! defined (__cplusplus) -unsigned long -lshift_com (rp, up, n, cnt) - unsigned long *rp; - unsigned long *up; - long n; - unsigned cnt; -{ - unsigned long retval, high_limb, low_limb; - unsigned tnc; - long i; - tnc = 8 * sizeof (unsigned long) - cnt; - low_limb = *up++; - retval = low_limb >> tnc; - high_limb = low_limb << cnt; - for (i = n - 1; i != 0; i--) - { - low_limb = *up++; - *rp++ = ~(high_limb | (low_limb >> tnc)); - high_limb = low_limb << cnt; - } - return retval; -} -int -main () -{ - unsigned long cy, rp[2], up[2]; - up[0] = ~ 0L; - up[1] = 0; - cy = lshift_com (rp, up, 2L, 1); - if (cy != 1L) - return 1; - return 0; -} -#else -int -main () -{ - return 0; -} -#endif - -EOF - echo "Test compile: mpn_lshift_com optimization" >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, mpn_lshift_com optimization" - ;; - norun) - gmp_prog_cc_works="no, mpn_lshift_com optimization, program does not run" - ;; - esac -fi - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following is mis-compiled by Intel ia-64 icc version 1.8 under - "icc -O3", After several calls, the function writes partial garbage to - the result vector. Perhaps relates to the chk.a.nc insn. This code needs - to be run to show the problem, but that's fine, the offending cc is a - native-only compiler so we don't have to worry about cross compiling. */ - -#if ! defined (__cplusplus) -#include <stdlib.h> -void -lshift_com (rp, up, n, cnt) - unsigned long *rp; - unsigned long *up; - long n; - unsigned cnt; -{ - unsigned long high_limb, low_limb; - unsigned tnc; - long i; - up += n; - rp += n; - tnc = 8 * sizeof (unsigned long) - cnt; - low_limb = *--up; - high_limb = low_limb << cnt; - for (i = n - 1; i != 0; i--) - { - low_limb = *--up; - *--rp = ~(high_limb | (low_limb >> tnc)); - high_limb = low_limb << cnt; - } - *--rp = ~high_limb; -} -int -main () -{ - unsigned long *r, *r2; - unsigned long a[88 + 1]; - long i; - for (i = 0; i < 88 + 1; i++) - a[i] = ~0L; - r = malloc (10000 * sizeof (unsigned long)); - r2 = r; - for (i = 0; i < 528; i += 22) - { - lshift_com (r2, a, - i / (8 * sizeof (unsigned long)) + 1, - i % (8 * sizeof (unsigned long))); - r2 += 88 + 1; - } - if (r[2048] != 0 || r[2049] != 0 || r[2050] != 0 || r[2051] != 0 || - r[2052] != 0 || r[2053] != 0 || r[2054] != 0) - abort (); - return 0; -} -#else -int -main () -{ - return 0; -} -#endif - -EOF - echo "Test compile: mpn_lshift_com optimization 2" >&5 - gmp_compile="$cc $cflags $cppflags conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, mpn_lshift_com optimization 2" - ;; - norun) - gmp_prog_cc_works="no, mpn_lshift_com optimization 2, program does not run" - ;; - esac -fi - - - - -# A certain _GLOBAL_OFFSET_TABLE_ problem in past versions of gas, tickled -# by recent versions of gcc. -# -if test "$gmp_prog_cc_works" = yes; then - case $host in - i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-* | viac3*-*-* | geode*-*-* | atom-*-*) - # this problem only arises in PIC code, so don't need to test when - # --disable-shared. We don't necessarily have $enable_shared set to - # yes at this point, it will still be unset for the default (which is - # yes); hence the use of "!= no". - if test "$enable_shared" != no; then - echo "Testing gcc GOT with eax emitted" >&5 -cat >conftest.c <<\EOF -int foo; -int bar () { return foo; } -EOF -tmp_got_emitted=no -gmp_compile="$cc $cflags $cppflags -fPIC -S conftest.c >&5 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if grep "addl.*_GLOBAL_OFFSET_TABLE_.*eax" conftest.s >/dev/null; then - tmp_got_emitted=yes - fi -fi -rm -f conftest.* -echo "Result: $tmp_got_emitted" >&5 -if test "$tmp_got_emitted" = yes; then - echo "Testing gas GOT with eax good" >&5 -cat >conftest.awk <<\EOF -BEGIN { - want[0] = "001" - want[1] = "043" - want[2] = "105" - want[3] = "147" - want[4] = "211" - want[5] = "253" - want[6] = "315" - want[7] = "357" - - want[8] = "005" - want[9] = "002" - want[10] = "000" - want[11] = "000" - want[12] = "000" - - want[13] = "376" - want[14] = "334" - want[15] = "272" - want[16] = "230" - want[17] = "166" - want[18] = "124" - want[19] = "062" - want[20] = "020" - - result = "yes" -} -{ - for (f = 2; f <= NF; f++) - { - for (i = 0; i < 20; i++) - got[i] = got[i+1]; - got[20] = $f; - - found = 1 - for (i = 0; i < 21; i++) - if (got[i] != want[i]) - { - found = 0 - break - } - if (found) - { - result = "no" - exit - } - } -} -END { - print result -} -EOF -cat >conftest.s <<\EOF - .text - .byte 1, 35, 69, 103, 137, 171, 205, 239 - addl $_GLOBAL_OFFSET_TABLE_, %eax - .byte 254, 220, 186, 152, 118, 84, 50, 16 -EOF -tmp_got_good=yes -gmp_compile="$cc $cflags $cppflags -fPIC -o conftest.o -c conftest.s >&5 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - tmp_got_good=`od -b conftest.o | $AWK -f conftest.awk` -fi -rm -f conftest.* -echo "Result: $tmp_got_good" >&5 -if test "$tmp_got_good" = no; then - gmp_prog_cc_works="no, bad gas GOT with eax" -else - : -fi - -else - : -fi - - fi - ;; - esac -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_prog_cc_works" >&5 -$as_echo "$gmp_prog_cc_works" >&6; } -case $gmp_prog_cc_works in - yes) - - ;; - *) - continue - ;; -esac - - - # If we're supposed to be using a "long long" for a limb, check that - # it works. - eval limb_chosen=\"\$limb$abi1\" - test -n "$limb_chosen" || eval limb_chosen=\"\$limb$abi2\" - if test "$limb_chosen" = longlong; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler $cc $cflags $cppflags has long long" >&5 -$as_echo_n "checking compiler $cc $cflags $cppflags has long long... " >&6; } -cat >conftest.c <<EOF -long long foo; -long long bar () { return foo; } -int main () { return 0; } -EOF -gmp_prog_cc_works=no -gmp_compile="$cc $cflags $cppflags -c conftest.c >&5" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - gmp_prog_cc_works=yes -else - echo "failed program was:" >&5 - cat conftest.c >&5 -fi -rm -f conftest* a.out b.out a.exe a_out.exe -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_prog_cc_works" >&5 -$as_echo "$gmp_prog_cc_works" >&6; } -if test $gmp_prog_cc_works = yes; then - : -else - continue -fi - - fi - - # The tests to perform on this $cc, if any - eval testlist=\"\$${ccbase}${abi1}_testlist\" - test -n "$testlist" || eval testlist=\"\$${ccbase}${abi2}_testlist\" - test -n "$testlist" || eval testlist=\"\$any${abi1}_testlist\" - test -n "$testlist" || eval testlist=\"\$any${abi2}_testlist\" - - testlist_pass=yes - for tst in $testlist; do - case $tst in - hpc-hppa-2-0) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether HP compiler $cc is good for 64-bits" >&5 -$as_echo_n "checking whether HP compiler $cc is good for 64-bits... " >&6; } -# Bad compiler output: -# ccom: HP92453-01 G.10.32.05 HP C Compiler -# Good compiler output: -# ccom: HP92453-01 A.10.32.30 HP C Compiler -# Let A.10.32.30 or higher be ok. -echo >conftest.c -gmp_tmp_vs=`$cc -V -c -o conftest.$OBJEXT conftest.c 2>&1 | grep "^ccom:"` -echo "Version string: $gmp_tmp_vs" >&5 -rm conftest* -gmp_tmp_v1=`echo $gmp_tmp_vs | sed 's/.* .\.\([0-9]*\).*/\1/'` -gmp_tmp_v2=`echo $gmp_tmp_vs | sed 's/.* .\..*\.\(.*\)\..* HP C.*/\1/'` -gmp_tmp_v3=`echo $gmp_tmp_vs | sed 's/.* .\..*\..*\.\(.*\) HP C.*/\1/'` -echo "Version number: $gmp_tmp_v1.$gmp_tmp_v2.$gmp_tmp_v3" >&5 -if test -z "$gmp_tmp_v1"; then - gmp_hpc_64bit=not-applicable -else - gmp_compare_ge=no -if test -n "$gmp_tmp_v1"; then - if test "$gmp_tmp_v1" -gt 10; then - gmp_compare_ge=yes - else - if test "$gmp_tmp_v1" -eq 10; then - if test -n "$gmp_tmp_v2"; then - if test "$gmp_tmp_v2" -gt 32; then - gmp_compare_ge=yes - else - if test "$gmp_tmp_v2" -eq 32; then - if test -n "$gmp_tmp_v3" && test "$gmp_tmp_v3" -ge 30; then - gmp_compare_ge=yes -fi - - fi - fi -fi - - fi - fi -fi - - - gmp_hpc_64bit=$gmp_compare_ge -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_hpc_64bit" >&5 -$as_echo "$gmp_hpc_64bit" >&6; } -if test $gmp_hpc_64bit = yes; then - : -else - testlist_pass=no -fi - ;; - gcc-arm-umodsi) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ARM gcc unsigned division works" >&5 -$as_echo_n "checking whether ARM gcc unsigned division works... " >&6; } -tmp_version=`$cc --version` -echo "$tmp_version" >&5 -case $tmp_version in - 2.95 | 2.95.[123]) - testlist_pass=no - gmp_gcc_arm_umodsi_result="no, gcc 2.95.[0123]" ;; - *) - : - gmp_gcc_arm_umodsi_result=yes ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_gcc_arm_umodsi_result" >&5 -$as_echo "$gmp_gcc_arm_umodsi_result" >&6; } - ;; - gcc-mips-o32) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc supports o32" >&5 -$as_echo_n "checking whether gcc supports o32... " >&6; } -echo 'int x;' >conftest.c -echo "$cc -mabi=32 -c conftest.c" >&5 -if $cc -mabi=32 -c conftest.c >conftest.out 2>&1; then - result=yes -else - cat conftest.out >&5 - if grep "cc1: Invalid option \`abi=32'" conftest.out >/dev/null; then - result=yes - else - result=no - fi -fi -rm -f conftest.* -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } -if test $result = yes; then - : -else - testlist_pass=no -fi - ;; - hppa-level-2.0) { $as_echo "$as_me:${as_lineno-$LINENO}: checking $cc $cflags assembler knows hppa 2.0" >&5 -$as_echo_n "checking $cc $cflags assembler knows hppa 2.0... " >&6; } -result=no -cat >conftest.s <<EOF - .level 2.0 -EOF -gmp_compile="$cc $cflags -c conftest.s >&5 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - result=yes -else - echo "failed program was" >&5 - cat conftest.s >&5 -fi -rm -f conftest* -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } -if test "$result" = yes; then - : -else - testlist_pass=no -fi - ;; - sizeof*) echo "configure: testlist $tst" >&5 -gmp_sizeof_type=`echo "$tst" | sed 's/sizeof-\([a-z]*\).*/\1/'` -gmp_sizeof_want=`echo "$tst" | sed 's/sizeof-[a-z]*-\([0-9]*\).*/\1/'` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler $cc $cflags has sizeof($gmp_sizeof_type)==$gmp_sizeof_want" >&5 -$as_echo_n "checking compiler $cc $cflags has sizeof($gmp_sizeof_type)==$gmp_sizeof_want... " >&6; } -cat >conftest.c <<EOF -int -main () -{ - static int test_array [1 - 2 * (long) (sizeof ($gmp_sizeof_type) != $gmp_sizeof_want)]; - test_array[0] = 0; - return 0; -} -EOF -gmp_c_testlist_sizeof=no -gmp_compile="$cc $cflags -c conftest.c >&5" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - gmp_c_testlist_sizeof=yes -fi -rm -f conftest* -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_c_testlist_sizeof" >&5 -$as_echo "$gmp_c_testlist_sizeof" >&6; } -if test $gmp_c_testlist_sizeof = yes; then - : -else - testlist_pass=no -fi - ;; - esac - if test $testlist_pass = no; then break; fi - done - - if test $testlist_pass = yes; then - found_compiler=yes - break - fi - done - - if test $found_compiler = yes; then break; fi - done - - if test $found_compiler = yes; then break; fi - done - - if test $found_compiler = yes; then break; fi -done - - -# If we recognised the CPU, as indicated by $path being set, then insist -# that we have a working compiler, either from our $cclist choices or from -# $CC. We can't let AC_PROG_CC look around for a compiler because it might -# find one that we've rejected (for not supporting the modes our asm code -# demands, etc). -# -# If we didn't recognise the CPU (and this includes host_cpu=none), then -# fall through and let AC_PROG_CC look around for a compiler too. This is -# mostly in the interests of following a standard autoconf setup, after all -# we've already tested cc and gcc adequately (hopefully). As of autoconf -# 2.50 the only thing AC_PROG_CC really adds is a check for "cl" (Microsoft -# C on MS-DOS systems). -# -if test $found_compiler = no && test -n "$path"; then - as_fn_error $? "could not find a working compiler, see config.log for details" "$LINENO" 5 -fi - -case $host in - i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-* | viac3*-*-* | geode*-*-* | atom-*-* | athlon64-*-* | k8-*-* | k10-*-* | bobcat-*-* | jaguar*-*-* | bulldozer*-*-* | piledriver*-*-* | steamroller*-*-* | excavator*-*-* | pentium4-*-* | atom-*-* | silvermont-*-* | goldmont-*-* | core2-*-* | corei*-*-* | x86_64-*-* | nano-*-* | nehalem*-*-* | westmere*-*-* | sandybridge*-*-* | ivybridge*-*-* | haswell*-*-* | broadwell*-*-* | skylake*-*-* | cabylake*-*-*) - # If the user asked for a fat build, override the path and flags set above - if test $enable_fat = yes; then - gcc_cflags_cpu="" - gcc_cflags_arch="" - - fat_functions="add_n addmul_1 bdiv_dbm1c com cnd_add_n cnd_sub_n - copyd copyi dive_1 divrem_1 - gcd_1 lshift lshiftc mod_1 mod_1_1 mod_1_1_cps mod_1_2 - mod_1_2_cps mod_1_4 mod_1_4_cps mod_34lsub1 mode1o mul_1 - mul_basecase mullo_basecase pre_divrem_1 pre_mod_1 redc_1 - redc_2 rshift sqr_basecase sub_n submul_1" - - if test "$abi" = 32; then - extra_functions="$extra_functions fat fat_entry" - path="x86/fat x86" - fat_path="x86 x86/fat x86/i486 - x86/k6 x86/k6/mmx x86/k6/k62mmx - x86/k7 x86/k7/mmx - x86/k8 x86/k10 x86/bobcat - x86/pentium x86/pentium/mmx - x86/p6 x86/p6/mmx x86/p6/p3mmx x86/p6/sse2 - x86/pentium4 x86/pentium4/mmx x86/pentium4/sse2 - x86/core2 x86/coreinhm x86/coreisbr - x86/atom x86/atom/mmx x86/atom/sse2 x86/nano" - fi - - if test "$abi" = 64; then - gcc_64_cflags="" - extra_functions_64="$extra_functions_64 fat fat_entry" - path_64="x86_64/fat x86_64" - fat_path="x86_64 x86_64/fat - x86_64/k8 x86_64/k10 x86_64/bd1 x86_64/bobcat x86_64/pentium4 - x86_64/core2 x86_64/coreinhm x86_64/coreisbr x86_64/coreihwl - x86_64/coreibwl x86_64/skylake x86_64/atom x86_64/silvermont - x86_64/nano" - fat_functions="$fat_functions addmul_2 addlsh1_n addlsh2_n sublsh1_n" - fi - - fat_thresholds="MUL_TOOM22_THRESHOLD MUL_TOOM33_THRESHOLD - SQR_TOOM2_THRESHOLD SQR_TOOM3_THRESHOLD - BMOD_1_TO_MOD_1_THRESHOLD" - fi - ;; -esac - - -if test $found_compiler = yes; then - - # If we're creating CFLAGS, then look for optional additions. If the user - # set CFLAGS then leave it alone. - # - if test "$test_CFLAGS" != set; then - eval optlist=\"\$${ccbase}${abi1}_cflags_optlist\" - test -n "$optlist" || eval optlist=\"\$${ccbase}${abi2}_cflags_optlist\" - - for opt in $optlist; do - eval optflags=\"\$${ccbase}${abi1}_cflags_${opt}\" - test -n "$optflags" || eval optflags=\"\$${ccbase}${abi2}_cflags_${opt}\" - test -n "$optflags" || eval optflags=\"\$${ccbase}_cflags_${opt}\" - - for flag in $optflags; do - - # ~ represents a space in an option spec - flag=`echo "$flag" | tr '~' ' '` - - case $flag in - -march=pentium4 | -march=k8) - # For -march settings which enable SSE2 we exclude certain bad - # gcc versions and we need an OS knowing how to save xmm regs. - # - # This is only for ABI=32, any 64-bit gcc is good and any OS - # knowing x86_64 will know xmm. - # - # -march=k8 was only introduced in gcc 3.3, so we shouldn't need - # the GMP_GCC_PENTIUM4_SSE2 check (for gcc 3.2 and prior). But - # it doesn't hurt to run it anyway, sharing code with the - # pentium4 case. - # - if test "$abi" = 32; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc is good for sse2" >&5 -$as_echo_n "checking whether gcc is good for sse2... " >&6; } -case `$cc $cflags $cppflags -dumpversion` in - 3.[012] | 3.[012].*) result=no ;; - *) result=yes ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } -if test "$result" = yes; then - : -else - continue -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the operating system supports XMM registers" >&5 -$as_echo_n "checking whether the operating system supports XMM registers... " >&6; } -if ${gmp_cv_os_x86_xmm+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$build" = "$host"; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.s <<EOF - .text -main: -_main: - .globl main - .globl _main - .byte 0x0f, 0x57, 0xc0 - xorl %eax, %eax - ret -EOF - gmp_compile="$cc $cflags $cppflags conftest.s -o conftest >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - gmp_cv_os_x86_xmm=yes - else - gmp_cv_os_x86_xmm=no - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Oops, cannot compile test program" >&5 -$as_echo "$as_me: WARNING: Oops, cannot compile test program" >&2;} - fi - rm -f conftest* -fi - -if test -z "$gmp_cv_os_x86_xmm"; then - case $host_os in - freebsd[123] | freebsd[123].*) - gmp_cv_os_x86_xmm=no ;; - freebsd*) - gmp_cv_os_x86_xmm=yes ;; - *) - gmp_cv_os_x86_xmm=probably ;; - esac -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_os_x86_xmm" >&5 -$as_echo "$gmp_cv_os_x86_xmm" >&6; } - -if test "$gmp_cv_os_x86_xmm" = probably; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Not certain of OS support for xmm when cross compiling." >&5 -$as_echo "$as_me: WARNING: Not certain of OS support for xmm when cross compiling." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Will assume it's ok, expect a SIGILL if this is wrong." >&5 -$as_echo "$as_me: WARNING: Will assume it's ok, expect a SIGILL if this is wrong." >&2;} -fi - -case $gmp_cv_os_x86_xmm in -no) - continue - ;; -*) - - ;; -esac - - fi - ;; - -no-cpp-precomp) - # special check, avoiding a warning - if test "$ccbase" = gcc; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler $cc $cflags -no-cpp-precomp" >&5 -$as_echo_n "checking compiler $cc $cflags -no-cpp-precomp... " >&6; } - result=no - cat >conftest.c <<EOF -int main () { return 0; } -EOF - gmp_compile="$cc $cflags -no-cpp-precomp conftest.c >conftest.out 2>&1" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if grep "unrecognized option.*-no-cpp-precomp" conftest.out >/dev/null; then : ; - else - result=yes - fi - fi - cat conftest.out >&5 - rm -f conftest* a.out b.out a.exe a_out.exe - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - if test "$result" = yes; then - cflags="$cflags $flag" - break - else - continue - fi -fi - - ;; - -Wa,-m*) - case $host in - alpha*-*-*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler $cc $cflags $flag" >&5 -$as_echo_n "checking assembler $cc $cflags $flag... " >&6; } -result=no -cat >conftest.c <<EOF -int main () {} -EOF -gmp_compile="$cc $cflags $flag -c conftest.c >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if grep "Unknown CPU identifier" conftest.out >/dev/null; then : ; - else - result=yes - fi -fi -cat conftest.out >&5 -rm -f conftest* -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } -if test "$result" = yes; then - : -else - continue -fi - - ;; - esac - ;; - -Wa,-oldas) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $cc $cflags $cppflags -Wa,-oldas" >&5 -$as_echo_n "checking for $cc $cflags $cppflags -Wa,-oldas... " >&6; } -result=no -cat >conftest.c <<EOF -EOF -echo "with empty conftest.c" >&5 -gmp_compile="$cc $cflags $cppflags -c conftest.c >&5 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : ; -else - # empty fails - gmp_compile="$cc $cflags $cppflags -Wa,-oldas -c conftest.c >&5 2>&1" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # but with -Wa,-oldas it works - result=yes - fi -fi -rm -f conftest* -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } -if test "$result" = yes; then - cflags="$cflags $flag" - break -else - continue -fi - - ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler $cc $cflags $cppflags $flag" >&5 -$as_echo_n "checking compiler $cc $cflags $cppflags $flag... " >&6; } -gmp_prog_cc_works=yes - -# first see a simple "main()" works, then go on to other checks -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF - -int main () { return 0; } -EOF - echo "Test compile: " >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no" - ;; - norun) - gmp_prog_cc_works="no, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes an internal error from gcc 2.95.2 -mpowerpc64 - (without -maix64), hence detecting an unusable compiler */ -void *g() { return (void *) 0; } -void *f() { return g(); } - -int main () { return 0; } -EOF - echo "Test compile: function pointer return" >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, function pointer return" - ;; - norun) - gmp_prog_cc_works="no, function pointer return, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes an invalid instruction syntax from i386 gcc - -march=pentiumpro on Solaris 2.8. The native sun assembler - requires a non-standard syntax for cmov which gcc (as of 2.95.2 at - least) doesn't know. */ -int n; -int cmov () { return (n >= 0 ? n : 0); } - -int main () { return 0; } -EOF - echo "Test compile: cmov instruction" >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, cmov instruction" - ;; - norun) - gmp_prog_cc_works="no, cmov instruction, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes a linker invocation problem with gcc 3.0.3 - on AIX 4.3 under "-maix64 -mpowerpc64 -mcpu=630". The -mcpu=630 - option causes gcc to incorrectly select the 32-bit libgcc.a, not - the 64-bit one, and consequently it misses out on the __fixunsdfdi - helper (double -> uint64 conversion). */ -double d; -unsigned long gcc303 () { return (unsigned long) d; } - -int main () { return 0; } -EOF - echo "Test compile: double -> ulong conversion" >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, double -> ulong conversion" - ;; - norun) - gmp_prog_cc_works="no, double -> ulong conversion, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes an error from hppa gcc 2.95 under -mpa-risc-2-0 if - the assembler doesn't know hppa 2.0 instructions. fneg is a 2.0 - instruction, and a negation like this comes out using it. */ -double fneg_data; -unsigned long fneg () { return -fneg_data; } - -int main () { return 0; } -EOF - echo "Test compile: double negation" >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, double negation" - ;; - norun) - gmp_prog_cc_works="no, double negation, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following makes gcc 3.3 -march=pentium4 generate an SSE2 xmm insn - (cvtsd2ss) which will provoke an error if the assembler doesn't recognise - those instructions. Not sure how much of the gmp code will come out - wanting sse2, but it's easiest to reject an option we know is bad. */ -double ftod_data; -float ftod () { return (float) ftod_data; } - -int main () { return 0; } -EOF - echo "Test compile: double -> float conversion" >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, double -> float conversion" - ;; - norun) - gmp_prog_cc_works="no, double -> float conversion, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes an internal compiler error from gcc version - "2.9-gnupro-99r1" under "-O2 -mcpu=ev6", apparently relating to char - values being spilled into floating point registers. The problem doesn't - show up all the time, but has occurred enough in GMP for us to reject - this compiler+flags. */ -#include <string.h> /* for memcpy */ -struct try_t -{ - char dst[2]; - char size; - long d0, d1, d2, d3, d4, d5, d6; - char overlap; -}; -struct try_t param[6]; -int -param_init () -{ - struct try_t *p; - memcpy (p, ¶m[ 2 ], sizeof (*p)); - memcpy (p, ¶m[ 2 ], sizeof (*p)); - p->size = 2; - memcpy (p, ¶m[ 1 ], sizeof (*p)); - p->dst[0] = 1; - p->overlap = 2; - memcpy (p, ¶m[ 3 ], sizeof (*p)); - p->dst[0] = 1; - p->overlap = 8; - memcpy (p, ¶m[ 4 ], sizeof (*p)); - memcpy (p, ¶m[ 4 ], sizeof (*p)); - p->overlap = 8; - memcpy (p, ¶m[ 5 ], sizeof (*p)); - memcpy (p, ¶m[ 5 ], sizeof (*p)); - memcpy (p, ¶m[ 5 ], sizeof (*p)); - return 0; -} - -int main () { return 0; } -EOF - echo "Test compile: gnupro alpha ev6 char spilling" >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, gnupro alpha ev6 char spilling" - ;; - norun) - gmp_prog_cc_works="no, gnupro alpha ev6 char spilling, program does not run" - ;; - esac -fi - - - - -# __builtin_alloca is not available everywhere, check it exists before -# seeing that it works -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -int k; int foo () { __builtin_alloca (k); } -EOF - echo "Test compile: __builtin_alloca availability" >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes an internal compiler error from Itanium HP-UX cc - under +O2 or higher. We use this sort of code in mpn/generic/mul_fft.c. */ -int k; -int foo () -{ - int i, **a; - a = __builtin_alloca (k); - for (i = 0; i <= k; i++) - a[i] = __builtin_alloca (1 << i); -} - -int main () { return 0; } -EOF - echo "Test compile: alloca array" >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, alloca array" - ;; - norun) - gmp_prog_cc_works="no, alloca array, program does not run" - ;; - esac -fi - - - - ;; - no) - - ;; - norun) - - ;; - esac -fi - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes an internal error from the assembler on - power2-ibm-aix4.3.1.0. gcc -mrios2 compiles to nabs+fcirz, and this - results in "Internal error related to the source program domain". - - For reference it seems to be the combination of nabs+fcirz which is bad, - not either alone. This sort of thing occurs in mpz/get_str.c with the - way double chars_per_bit_exactly is applied in MPN_SIZEINBASE. Perhaps - if that code changes to a scaled-integer style then we won't need this - test. */ - -double fp[1]; -int x; -int f () -{ - int a; - a = (x >= 0 ? x : -x); - return a * fp[0]; -} - -int main () { return 0; } -EOF - echo "Test compile: abs int -> double conversion" >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, abs int -> double conversion" - ;; - norun) - gmp_prog_cc_works="no, abs int -> double conversion, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes a segfault in the compiler on powerpc-apple-darwin. - Extracted from tests/mpn/t-iord_u.c. Causes Apple's gcc 3.3 build 1640 and - 1666 to segfault with e.g., -O2 -mpowerpc64. */ - -#if defined (__GNUC__) && ! defined (__cplusplus) -typedef unsigned long long t1;typedef t1*t2; -void g(){} -void h(){} -static __inline__ t1 e(t2 rp,t2 up,int n,t1 v0) -{t1 c,x,r;int i;if(v0){c=1;for(i=1;i<n;i++){x=up[i];r=x+1;rp[i]=r;}}return c;} -void f(){static const struct{t1 n;t1 src[9];t1 want[9];}d[]={{1,{0},{1}},};t1 got[9];int i; -for(i=0;i<1;i++){if(e(got,got,9,d[i].n)==0)h();g(i,d[i].src,d[i].n,got,d[i].want,9);if(d[i].n)h();}} -#else -int dummy; -#endif - -int main () { return 0; } -EOF - echo "Test compile: long long reliability test 1" >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, long long reliability test 1" - ;; - norun) - gmp_prog_cc_works="no, long long reliability test 1, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following provokes an internal compiler error on powerpc-apple-darwin. - Extracted from mpz/cfdiv_q_2exp.c. Causes Apple's gcc 3.3 build 1640 and - 1666 to get an ICE with -O1 -mpowerpc64. */ - -#if defined (__GNUC__) && ! defined (__cplusplus) -int g(); -void f(int u){int i;long long x;x=u?~0:0;if(x)for(i=0;i<9;i++);x&=g();if(x)g();} -int g(){return 0;} -#else -int dummy; -#endif - -int main () { return 0; } -EOF - echo "Test compile: long long reliability test 2" >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, long long reliability test 2" - ;; - norun) - gmp_prog_cc_works="no, long long reliability test 2, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* Provokes an ICE on i386-freebsd with the FreeBSD-hacked gcc, under - -O2 -march=amdfam10. We call helper functions here "open" and "close" in - order for linking to succeed. */ - -#if defined (__GNUC__) && ! defined (__cplusplus) -int open(int*,int*,int);void*close(int);void g(int*rp,int*up,int un){ -__builtin_expect(un<=0x7f00,1)?__builtin_alloca(un):close(un);if(__builtin_clzl -(up[un])){open(rp,up,un);while(1){if(rp[un-1]!=0)break;un--;}}} -#else -int dummy; -#endif - -int main () { return 0; } -EOF - echo "Test compile: freebsd hacked gcc" >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, freebsd hacked gcc" - ;; - norun) - gmp_prog_cc_works="no, freebsd hacked gcc, program does not run" - ;; - esac -fi - - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following is mis-compiled by HP ia-64 cc version - cc: HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003] - under "cc +O3", both in +DD32 and +DD64 modes. The mpn_lshift_com gets - inlined and its return value somehow botched to be 0 instead of 1. This - arises in the real mpn_lshift_com in mul_fft.c. A lower optimization - level, like +O2 seems ok. This code needs to be run to show the problem, - but that's fine, the offending cc is a native-only compiler so we don't - have to worry about cross compiling. */ - -#if ! defined (__cplusplus) -unsigned long -lshift_com (rp, up, n, cnt) - unsigned long *rp; - unsigned long *up; - long n; - unsigned cnt; -{ - unsigned long retval, high_limb, low_limb; - unsigned tnc; - long i; - tnc = 8 * sizeof (unsigned long) - cnt; - low_limb = *up++; - retval = low_limb >> tnc; - high_limb = low_limb << cnt; - for (i = n - 1; i != 0; i--) - { - low_limb = *up++; - *rp++ = ~(high_limb | (low_limb >> tnc)); - high_limb = low_limb << cnt; - } - return retval; -} -int -main () -{ - unsigned long cy, rp[2], up[2]; - up[0] = ~ 0L; - up[1] = 0; - cy = lshift_com (rp, up, 2L, 1); - if (cy != 1L) - return 1; - return 0; -} -#else -int -main () -{ - return 0; -} -#endif - -EOF - echo "Test compile: mpn_lshift_com optimization" >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, mpn_lshift_com optimization" - ;; - norun) - gmp_prog_cc_works="no, mpn_lshift_com optimization, program does not run" - ;; - esac -fi - - - -if test "$gmp_prog_cc_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.c <<EOF -/* The following is mis-compiled by Intel ia-64 icc version 1.8 under - "icc -O3", After several calls, the function writes partial garbage to - the result vector. Perhaps relates to the chk.a.nc insn. This code needs - to be run to show the problem, but that's fine, the offending cc is a - native-only compiler so we don't have to worry about cross compiling. */ - -#if ! defined (__cplusplus) -#include <stdlib.h> -void -lshift_com (rp, up, n, cnt) - unsigned long *rp; - unsigned long *up; - long n; - unsigned cnt; -{ - unsigned long high_limb, low_limb; - unsigned tnc; - long i; - up += n; - rp += n; - tnc = 8 * sizeof (unsigned long) - cnt; - low_limb = *--up; - high_limb = low_limb << cnt; - for (i = n - 1; i != 0; i--) - { - low_limb = *--up; - *--rp = ~(high_limb | (low_limb >> tnc)); - high_limb = low_limb << cnt; - } - *--rp = ~high_limb; -} -int -main () -{ - unsigned long *r, *r2; - unsigned long a[88 + 1]; - long i; - for (i = 0; i < 88 + 1; i++) - a[i] = ~0L; - r = malloc (10000 * sizeof (unsigned long)); - r2 = r; - for (i = 0; i < 528; i += 22) - { - lshift_com (r2, a, - i / (8 * sizeof (unsigned long)) + 1, - i % (8 * sizeof (unsigned long))); - r2 += 88 + 1; - } - if (r[2048] != 0 || r[2049] != 0 || r[2050] != 0 || r[2051] != 0 || - r[2052] != 0 || r[2053] != 0 || r[2054] != 0) - abort (); - return 0; -} -#else -int -main () -{ - return 0; -} -#endif - -EOF - echo "Test compile: mpn_lshift_com optimization 2" >&5 - gmp_compile="$cc $cflags $cppflags $flag conftest.c >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cc_works_part=yes - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - cc_works_part=norun - fi - fi - else - cc_works_part=no - fi - if test "$cc_works_part" != yes; then - echo "failed program was:" >&5 - cat conftest.c >&5 - fi - rm -f conftest* a.out b.out a.exe a_out.exe - case $cc_works_part in - yes) - - ;; - no) - gmp_prog_cc_works="no, mpn_lshift_com optimization 2" - ;; - norun) - gmp_prog_cc_works="no, mpn_lshift_com optimization 2, program does not run" - ;; - esac -fi - - - - -# A certain _GLOBAL_OFFSET_TABLE_ problem in past versions of gas, tickled -# by recent versions of gcc. -# -if test "$gmp_prog_cc_works" = yes; then - case $host in - i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-* | viac3*-*-* | geode*-*-* | atom-*-*) - # this problem only arises in PIC code, so don't need to test when - # --disable-shared. We don't necessarily have $enable_shared set to - # yes at this point, it will still be unset for the default (which is - # yes); hence the use of "!= no". - if test "$enable_shared" != no; then - echo "Testing gcc GOT with eax emitted" >&5 -cat >conftest.c <<\EOF -int foo; -int bar () { return foo; } -EOF -tmp_got_emitted=no -gmp_compile="$cc $cflags $cppflags $flag -fPIC -S conftest.c >&5 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if grep "addl.*_GLOBAL_OFFSET_TABLE_.*eax" conftest.s >/dev/null; then - tmp_got_emitted=yes - fi -fi -rm -f conftest.* -echo "Result: $tmp_got_emitted" >&5 -if test "$tmp_got_emitted" = yes; then - echo "Testing gas GOT with eax good" >&5 -cat >conftest.awk <<\EOF -BEGIN { - want[0] = "001" - want[1] = "043" - want[2] = "105" - want[3] = "147" - want[4] = "211" - want[5] = "253" - want[6] = "315" - want[7] = "357" - - want[8] = "005" - want[9] = "002" - want[10] = "000" - want[11] = "000" - want[12] = "000" - - want[13] = "376" - want[14] = "334" - want[15] = "272" - want[16] = "230" - want[17] = "166" - want[18] = "124" - want[19] = "062" - want[20] = "020" - - result = "yes" -} -{ - for (f = 2; f <= NF; f++) - { - for (i = 0; i < 20; i++) - got[i] = got[i+1]; - got[20] = $f; - - found = 1 - for (i = 0; i < 21; i++) - if (got[i] != want[i]) - { - found = 0 - break - } - if (found) - { - result = "no" - exit - } - } -} -END { - print result -} -EOF -cat >conftest.s <<\EOF - .text - .byte 1, 35, 69, 103, 137, 171, 205, 239 - addl $_GLOBAL_OFFSET_TABLE_, %eax - .byte 254, 220, 186, 152, 118, 84, 50, 16 -EOF -tmp_got_good=yes -gmp_compile="$cc $cflags $cppflags $flag -fPIC -o conftest.o -c conftest.s >&5 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - tmp_got_good=`od -b conftest.o | $AWK -f conftest.awk` -fi -rm -f conftest.* -echo "Result: $tmp_got_good" >&5 -if test "$tmp_got_good" = no; then - gmp_prog_cc_works="no, bad gas GOT with eax" -else - : -fi - -else - : -fi - - fi - ;; - esac -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_prog_cc_works" >&5 -$as_echo "$gmp_prog_cc_works" >&6; } -case $gmp_prog_cc_works in - yes) - cflags="$cflags $flag" - break - ;; - *) - - ;; -esac - - done - done - fi - - ABI="$abi" - CC="$cc" - CFLAGS="$cflags" - CPPFLAGS="$cppflags" - eval GMP_NONSTD_ABI=\"\$GMP_NONSTD_ABI_$ABI\" - - # Could easily have this in config.h too, if desired. - ABI_nodots=`echo $ABI | sed 's/\./_/'` - -echo "define_not_for_expansion(\`HAVE_ABI_$ABI_nodots')" >> $gmp_tmpconfigm4p - - - - # GMP_LDFLAGS substitution, selected according to ABI. - # These are needed on libgmp.la and libmp.la, but currently not on - # convenience libraries like tune/libspeed.la or mpz/libmpz.la. - # - eval GMP_LDFLAGS=\"\$${ccbase}${abi1}_ldflags\" - test -n "$GMP_LDFLAGS" || eval GMP_LDFLAGS=\"\$${ccbase}${abi1}_ldflags\" - - - - - # extra_functions, selected according to ABI - eval tmp=\"\$extra_functions$abi1\" - test -n "$tmp" || eval tmp=\"\$extra_functions$abi2\" - extra_functions="$tmp" - - - # Cycle counter, selected according to ABI. - # - eval tmp=\"\$SPEED_CYCLECOUNTER_OBJ$abi1\" - test -n "$tmp" || eval tmp=\"\$SPEED_CYCLECOUNTER_OBJ$abi2\" - SPEED_CYCLECOUNTER_OBJ="$tmp" - eval tmp=\"\$cyclecounter_size$abi1\" - test -n "$tmp" || eval tmp=\"\$cyclecounter_size$abi2\" - cyclecounter_size="$tmp" - - if test -n "$SPEED_CYCLECOUNTER_OBJ"; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_SPEED_CYCLECOUNTER $cyclecounter_size -_ACEOF - - fi - - - - # Calling conventions checking, selected according to ABI. - # - eval tmp=\"\$CALLING_CONVENTIONS_OBJS$abi1\" - test -n "$tmp" || eval tmp=\"\$CALLING_CONVENTIONS_OBJS$abi2\" - if test "$enable_assembly" = "yes"; then - CALLING_CONVENTIONS_OBJS="$tmp" - else - CALLING_CONVENTIONS_OBJS="" - fi - - if test -n "$CALLING_CONVENTIONS_OBJS"; then - -$as_echo "#define HAVE_CALLING_CONVENTIONS 1" >>confdefs.h - - fi - - -fi - - -# If the user gave an MPN_PATH, use that verbatim, otherwise choose -# according to the ABI and add "generic". -# -if test -n "$MPN_PATH"; then - path="$MPN_PATH" -else - eval tmp=\"\$path$abi1\" - test -n "$tmp" || eval tmp=\"\$path$abi2\" - path="$tmp generic" -fi - - -# Long long limb setup for gmp.h. -case $limb_chosen in -longlong) DEFN_LONG_LONG_LIMB="#define _LONG_LONG_LIMB 1" ;; -*) DEFN_LONG_LONG_LIMB="/* #undef _LONG_LONG_LIMB */" ;; -esac - - - -# The C compiler and preprocessor, put into ANSI mode if possible. -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdio.h> -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdarg.h> -#include <stdio.h> -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 -$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } -if ${am_cv_prog_cc_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF - # Make sure it works both with $CC and with simple cc. - # Following AC_PROG_CC_C_O, we do the test twice because some - # compilers refuse to overwrite an existing .o file with -o, - # though they will create one. - am_cv_prog_cc_c_o=yes - for am_i in 1 2; do - if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 - ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } \ - && test -f conftest2.$ac_objext; then - : OK - else - am_cv_prog_cc_c_o=no - break - fi - done - rm -f core conftest* - unset am_i -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 -$as_echo "$am_cv_prog_cc_c_o" >&6; } -if test "$am_cv_prog_cc_c_o" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - case $ac_cv_prog_cc_stdc in #( - no) : - ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( - *) : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 -$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } -if ${ac_cv_prog_cc_c99+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdarg.h> -#include <stdbool.h> -#include <stdlib.h> -#include <wchar.h> -#include <stdio.h> - -// Check varargs macros. These examples are taken from C99 6.10.3.5. -#define debug(...) fprintf (stderr, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} - -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - your preprocessor is broken; -#endif -#if BIG_OK -#else - your preprocessor is broken; -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; - -struct incomplete_array -{ - int datasize; - double data[]; -}; - -struct named_init { - int number; - const wchar_t *name; - double average; -}; - -typedef const char *ccp; - -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\0'; ++i) - continue; - return 0; -} - -// Check varargs and va_copy. -static void -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); - - const char *str; - int number; - float fnumber; - - while (*format) - { - switch (*format++) - { - case 's': // string - str = va_arg (args_copy, const char *); - break; - case 'd': // int - number = va_arg (args_copy, int); - break; - case 'f': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); -} - -int -main () -{ - - // Check bool. - _Bool success = false; - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - test_varargs ("s, d' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' - || dynamic_array[ni.number - 1] != 543); - - ; - return 0; -} -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c99" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c99" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c99" != xno; then : - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdarg.h> -#include <stdio.h> -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 -else - ac_cv_prog_cc_stdc=no -fi - -fi - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 -$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } - if ${ac_cv_prog_cc_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -fi - - case $ac_cv_prog_cc_stdc in #( - no) : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; #( - '') : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; #( - *) : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 -$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; -esac - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -# The C compiler on the build system, and associated tests. - -if test -n "$CC_FOR_BUILD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system compiler $CC_FOR_BUILD" >&5 -$as_echo_n "checking build system compiler $CC_FOR_BUILD... " >&6; } -# remove anything that might look like compiler output to our "||" expression -rm -f conftest* a.out b.out a.exe a_out.exe -cat >conftest.c <<EOF -int -main () -{ - return 0; -} -EOF -gmp_compile="$CC_FOR_BUILD conftest.c" -cc_for_build_works=no -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if (./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest) >&5 2>&1; then - cc_for_build_works=yes - fi -fi -rm -f conftest* a.out b.out a.exe a_out.exe -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cc_for_build_works" >&5 -$as_echo "$cc_for_build_works" >&6; } -if test "$cc_for_build_works" = yes; then - : -else - as_fn_error $? "Specified CC_FOR_BUILD doesn't seem to work" "$LINENO" 5 -fi - -elif test -n "$HOST_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system compiler $HOST_CC" >&5 -$as_echo_n "checking build system compiler $HOST_CC... " >&6; } -# remove anything that might look like compiler output to our "||" expression -rm -f conftest* a.out b.out a.exe a_out.exe -cat >conftest.c <<EOF -int -main () -{ - return 0; -} -EOF -gmp_compile="$HOST_CC conftest.c" -cc_for_build_works=no -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if (./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest) >&5 2>&1; then - cc_for_build_works=yes - fi -fi -rm -f conftest* a.out b.out a.exe a_out.exe -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cc_for_build_works" >&5 -$as_echo "$cc_for_build_works" >&6; } -if test "$cc_for_build_works" = yes; then - CC_FOR_BUILD=$HOST_CC -else - as_fn_error $? "Specified HOST_CC doesn't seem to work" "$LINENO" 5 -fi - -else - for i in "$CC" "$CC $CFLAGS $CPPFLAGS" cc gcc c89 c99; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system compiler $i" >&5 -$as_echo_n "checking build system compiler $i... " >&6; } -# remove anything that might look like compiler output to our "||" expression -rm -f conftest* a.out b.out a.exe a_out.exe -cat >conftest.c <<EOF -int -main () -{ - return 0; -} -EOF -gmp_compile="$i conftest.c" -cc_for_build_works=no -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if (./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest) >&5 2>&1; then - cc_for_build_works=yes - fi -fi -rm -f conftest* a.out b.out a.exe a_out.exe -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cc_for_build_works" >&5 -$as_echo "$cc_for_build_works" >&6; } -if test "$cc_for_build_works" = yes; then - CC_FOR_BUILD=$i - break -else - : -fi - - done - if test -z "$CC_FOR_BUILD"; then - as_fn_error $? "Cannot find a build system compiler" "$LINENO" 5 - fi -fi - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for build system preprocessor" >&5 -$as_echo_n "checking for build system preprocessor... " >&6; } -if test -z "$CPP_FOR_BUILD"; then - if ${gmp_cv_prog_cpp_for_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.c <<EOF -#define FOO BAR -EOF - for i in "$CC_FOR_BUILD -E" "$CC_FOR_BUILD -E -traditional-cpp" "/lib/cpp"; do - gmp_compile="$i conftest.c" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >&5 2>&1; then - gmp_cv_prog_cpp_for_build=$i - break - fi - done - rm -f conftest* a.out b.out a.exe a_out.exe - if test -z "$gmp_cv_prog_cpp_for_build"; then - as_fn_error $? "Cannot find build system C preprocessor." "$LINENO" 5 - fi - -fi - - CPP_FOR_BUILD=$gmp_cv_prog_cpp_for_build -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP_FOR_BUILD" >&5 -$as_echo "$CPP_FOR_BUILD" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for build system executable suffix" >&5 -$as_echo_n "checking for build system executable suffix... " >&6; } -if ${gmp_cv_prog_exeext_for_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.c <<EOF -int -main () -{ - return 0; -} -EOF -for i in .exe ,ff8 ""; do - gmp_compile="$CC_FOR_BUILD conftest.c -o conftest$i" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if (./conftest) 2>&5; then - gmp_cv_prog_exeext_for_build=$i - break - fi - fi -done -rm -f conftest* -if test "${gmp_cv_prog_exeext_for_build+set}" != set; then - as_fn_error $? "Cannot determine executable suffix" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_prog_exeext_for_build" >&5 -$as_echo "$gmp_cv_prog_exeext_for_build" >&6; } -EXEEXT_FOR_BUILD=$gmp_cv_prog_exeext_for_build - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build system compiler is ANSI" >&5 -$as_echo_n "checking whether build system compiler is ANSI... " >&6; } -if ${gmp_cv_c_for_build_ansi+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.c <<EOF -int -main (int argc, char **argv) -{ - return 0; -} -EOF -gmp_compile="$CC_FOR_BUILD conftest.c" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - gmp_cv_c_for_build_ansi=yes -else - gmp_cv_c_for_build_ansi=no -fi -rm -f conftest* a.out b.out a.exe a_out.exe - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_c_for_build_ansi" >&5 -$as_echo "$gmp_cv_c_for_build_ansi" >&6; } -if test "$gmp_cv_c_for_build_ansi" = yes; then - U_FOR_BUILD= -else - U_FOR_BUILD=_ - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for build system compiler math library" >&5 -$as_echo_n "checking for build system compiler math library... " >&6; } -if ${gmp_cv_check_libm_for_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.c <<EOF -#include <math.h> -int -main () -{ - return 0; -} -double d; -double -foo () -{ - return log (d); -} -EOF -gmp_compile="$CC_FOR_BUILD conftest.c -lm" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - gmp_cv_check_libm_for_build=-lm -else - gmp_cv_check_libm_for_build=no -fi -rm -f conftest* a.out b.out a.exe a_out.exe - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_check_libm_for_build" >&5 -$as_echo "$gmp_cv_check_libm_for_build" >&6; } -case $gmp_cv_check_libm_for_build in - yes) LIBM_FOR_BUILD=-lm - ;; - no) LIBM_FOR_BUILD= ;; - *) LIBM_FOR_BUILD=$gmp_cv_check_libm_for_build ;; -esac - - - -# How to assemble, used with CFLAGS etc, see mpn/Makeasm.am. -# Using the compiler is a lot easier than figuring out how to invoke the -# assembler directly. -# -test -n "$CCAS" || CCAS="$CC -c" - - - -# The C++ compiler, if desired. -want_cxx=no -if test $enable_cxx != no; then - test_CXXFLAGS=${CXXFLAGS+set} - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - echo "CXXFLAGS chosen by autoconf: $CXXFLAGS" >&5 - cxxflags_ac_prog_cxx=$CXXFLAGS - cxxflags_list=ac_prog_cxx - - # If the user didn't specify $CXXFLAGS, then try $CFLAGS, with -g removed - # if AC_PROG_CXX thinks that doesn't work. $CFLAGS stands a good chance - # of working, eg. on a GNU system where CC=gcc and CXX=g++. - # - if test "$test_CXXFLAGS" != set; then - cxxflags_cflags=$CFLAGS - cxxflags_list="cflags $cxxflags_list" - if test "$ac_prog_cxx_g" = no; then - cxxflags_cflags=`echo "$cxxflags_cflags" | sed -e 's/ -g //' -e 's/^-g //' -e 's/ -g$//'` - fi - fi - - # See if the C++ compiler works. If the user specified CXXFLAGS then all - # we're doing is checking whether AC_PROG_CXX succeeded, since it doesn't - # give a fatal error, just leaves CXX set to a default g++. If on the - # other hand the user didn't specify CXXFLAGS then we get to try here our - # $cxxflags_list alternatives. - # - # Automake includes $CPPFLAGS in a C++ compile, so we do the same here. - # - for cxxflags_choice in $cxxflags_list; do - eval CXXFLAGS=\"\$cxxflags_$cxxflags_choice\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking C++ compiler $CXX $CPPFLAGS $CXXFLAGS" >&5 -$as_echo_n "checking C++ compiler $CXX $CPPFLAGS $CXXFLAGS... " >&6; } -gmp_prog_cxx_works=yes - -# start with a plain "main()", then go on to further checks -if test "$gmp_prog_cxx_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.cc <<EOF - -int main (void) { return 0; } -EOF - echo "Test compile: " >&5 - gmp_cxxcompile="$CXX $CPPFLAGS $CXXFLAGS conftest.cc >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_cxxcompile\""; } >&5 - (eval $gmp_cxxcompile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - gmp_prog_cxx_works="no, program does not run" - fi - fi - else - gmp_prog_cxx_works="no" - fi - case $gmp_prog_cxx_works in - no*) - echo "failed program was:" >&5 - cat conftest.cc >&5 - ;; - esac - rm -f conftest* a.out b.out a.exe a_out.exe -fi - - -if test "$gmp_prog_cxx_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.cc <<EOF -namespace foo { } -using namespace foo; - -int main (void) { return 0; } -EOF - echo "Test compile: namespace" >&5 - gmp_cxxcompile="$CXX $CPPFLAGS $CXXFLAGS conftest.cc >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_cxxcompile\""; } >&5 - (eval $gmp_cxxcompile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - gmp_prog_cxx_works="no, namespace, program does not run" - fi - fi - else - gmp_prog_cxx_works="no, namespace" - fi - case $gmp_prog_cxx_works in - no*) - echo "failed program was:" >&5 - cat conftest.cc >&5 - ;; - esac - rm -f conftest* a.out b.out a.exe a_out.exe -fi - - -# GMP requires the standard C++ iostream classes -if test "$gmp_prog_cxx_works" = yes; then - # remove anything that might look like compiler output to our "||" expression - rm -f conftest* a.out b.out a.exe a_out.exe - cat >conftest.cc <<EOF -/* This test rejects g++ 2.7.2 which doesn't have <iostream>, only a - pre-standard iostream.h. */ -#include <iostream> - -/* This test rejects OSF 5.1 Compaq C++ in its default pre-standard iostream - mode, since that mode puts cout in the global namespace, not "std". */ -void someoutput (void) { std::cout << 123; } - -int main (void) { return 0; } -EOF - echo "Test compile: std iostream" >&5 - gmp_cxxcompile="$CXX $CPPFLAGS $CXXFLAGS conftest.cc >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_cxxcompile\""; } >&5 - (eval $gmp_cxxcompile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$cross_compiling" = no; then - if { ac_try='./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then :; - else - gmp_prog_cxx_works="no, std iostream, program does not run" - fi - fi - else - gmp_prog_cxx_works="no, std iostream" - fi - case $gmp_prog_cxx_works in - no*) - echo "failed program was:" >&5 - cat conftest.cc >&5 - ;; - esac - rm -f conftest* a.out b.out a.exe a_out.exe -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_prog_cxx_works" >&5 -$as_echo "$gmp_prog_cxx_works" >&6; } -case $gmp_prog_cxx_works in - yes) - want_cxx=yes - break - ;; - *) - - ;; -esac - - done - - # If --enable-cxx=yes but a C++ compiler can't be found, then abort. - if test $want_cxx = no && test $enable_cxx = yes; then - as_fn_error $? "C++ compiler not available, see config.log for details" "$LINENO" 5 - fi -fi - - if test $want_cxx = yes; then - WANT_CXX_TRUE= - WANT_CXX_FALSE='#' -else - WANT_CXX_TRUE='#' - WANT_CXX_FALSE= -fi - - -# FIXME: We're not interested in CXXCPP for ourselves, but if we don't do it -# here then AC_PROG_LIBTOOL will AC_REQUIRE it (via _LT_AC_TAGCONFIG) and -# hence execute it unconditionally, and that will fail if there's no C++ -# compiler (and no generic /lib/cpp). -# -if test $want_cxx = yes; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi - - -# Path setups for Cray, according to IEEE or CFP. These must come after -# deciding the compiler. -# - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -case $host_cpu in - c90 | t90) - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef _CRAYIEEE -yes -#endif -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - add_path="cray/ieee" -else - add_path="cray/cfp"; extra_functions="mulwwc90" -fi -rm -f conftest* - - ;; - j90 | sv1) - add_path="cray/cfp"; extra_functions="mulwwj90" - ;; -esac - - - -if test -z "$MPN_PATH"; then - path="$add_path $path" -fi - -# For a nail build, also look in "nails" subdirectories. -# -if test $GMP_NAIL_BITS != 0 && test -z "$MPN_PATH"; then - new_path= - for i in $path; do - case $i in - generic) new_path="$new_path $i" ;; - *) new_path="$new_path $i/nails $i" ;; - esac - done - path=$new_path -fi - - -# Put all directories into CPUVEC_list so as to get a full set of -# CPUVEC_SETUP_$tmp_suffix defines into config.h, even if some of them are -# empty because mmx and/or sse2 had to be dropped. -# -for i in $fat_path; do - tmp_suffix=`echo $i | sed -e '/\//s:^[^/]*/::' -e 's:[\\/]:_:g'` - CPUVEC_list="$CPUVEC_list CPUVEC_SETUP_$tmp_suffix" -done - - -# If there's any sse2 or mmx in the path, check whether the assembler -# supports it, and remove if not. -# -# We only need this in ABI=32, for ABI=64 on x86_64 we can assume a new -# enough assembler. -# -case $host in - i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-* | viac3*-*-* | geode*-*-* | atom-*-* | athlon64-*-* | k8-*-* | k10-*-* | bobcat-*-* | jaguar*-*-* | bulldozer*-*-* | piledriver*-*-* | steamroller*-*-* | excavator*-*-* | pentium4-*-* | atom-*-* | silvermont-*-* | goldmont-*-* | core2-*-* | corei*-*-* | x86_64-*-* | nano-*-* | nehalem*-*-* | westmere*-*-* | sandybridge*-*-* | ivybridge*-*-* | haswell*-*-* | broadwell*-*-* | skylake*-*-* | cabylake*-*-*) - if test "$ABI" = 32; then - case "$path $fat_path" in - *mmx*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the assembler knows about MMX instructions" >&5 -$as_echo_n "checking if the assembler knows about MMX instructions... " >&6; } -if ${gmp_cv_asm_x86_mmx+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.s <<EOF - .text - movq %mm0, %mm1 -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_x86_mmx=yes -case $host in -*-*-solaris*) - if (dis conftest.$OBJEXT >conftest.out) 2>/dev/null; then - if grep "0f 6f c1" conftest.out >/dev/null; then - gmp_cv_asm_x86_mmx=movq-bug - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"dis\" not available to check for \"as\" movq bug" >&5 -$as_echo "$as_me: WARNING: \"dis\" not available to check for \"as\" movq bug" >&2;} - fi -esac -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - gmp_cv_asm_x86_mmx=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_x86_mmx" >&5 -$as_echo "$gmp_cv_asm_x86_mmx" >&6; } - -case $gmp_cv_asm_x86_mmx in -movq-bug) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +----------------------------------------------------------" >&5 -$as_echo "$as_me: WARNING: +----------------------------------------------------------" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | WARNING WARNING WARNING" >&5 -$as_echo "$as_me: WARNING: | WARNING WARNING WARNING" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | Host CPU has MMX code, but the assembler" >&5 -$as_echo "$as_me: WARNING: | Host CPU has MMX code, but the assembler" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | $CCAS $CFLAGS $CPPFLAGS" >&5 -$as_echo "$as_me: WARNING: | $CCAS $CFLAGS $CPPFLAGS" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | has the Solaris 2.6 and 2.7 bug where register to register" >&5 -$as_echo "$as_me: WARNING: | has the Solaris 2.6 and 2.7 bug where register to register" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | movq operands are reversed." >&5 -$as_echo "$as_me: WARNING: | movq operands are reversed." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | Non-MMX replacements will be used." >&5 -$as_echo "$as_me: WARNING: | Non-MMX replacements will be used." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | This will be an inferior build." >&5 -$as_echo "$as_me: WARNING: | This will be an inferior build." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +----------------------------------------------------------" >&5 -$as_echo "$as_me: WARNING: +----------------------------------------------------------" >&2;} - ;; -no) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +----------------------------------------------------------" >&5 -$as_echo "$as_me: WARNING: +----------------------------------------------------------" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | WARNING WARNING WARNING" >&5 -$as_echo "$as_me: WARNING: | WARNING WARNING WARNING" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | Host CPU has MMX code, but it can't be assembled by" >&5 -$as_echo "$as_me: WARNING: | Host CPU has MMX code, but it can't be assembled by" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | $CCAS $CFLAGS $CPPFLAGS" >&5 -$as_echo "$as_me: WARNING: | $CCAS $CFLAGS $CPPFLAGS" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | Non-MMX replacements will be used." >&5 -$as_echo "$as_me: WARNING: | Non-MMX replacements will be used." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | This will be an inferior build." >&5 -$as_echo "$as_me: WARNING: | This will be an inferior build." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +----------------------------------------------------------" >&5 -$as_echo "$as_me: WARNING: +----------------------------------------------------------" >&2;} - ;; -esac -if test "$gmp_cv_asm_x86_mmx" = yes; then - : -else - tmp_path= -for i in $path; do - case $i in - */*mmx*) ;; - *) tmp_path="$tmp_path $i" ;; - esac -done -path="$tmp_path" - -tmp_path= -for i in $fat_path; do - case $i in - */*mmx*) ;; - *) tmp_path="$tmp_path $i" ;; - esac -done -fat_path="$tmp_path" - - -fi - ;; - esac - case "$path $fat_path" in - *sse2*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the assembler knows about SSE2 instructions" >&5 -$as_echo_n "checking if the assembler knows about SSE2 instructions... " >&6; } -if ${gmp_cv_asm_x86_sse2+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.s <<EOF - .text - paddq %mm0, %mm1 -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_x86_sse2=yes -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - gmp_cv_asm_x86_sse2=no -fi -rm -f conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_x86_sse2" >&5 -$as_echo "$gmp_cv_asm_x86_sse2" >&6; } -case $gmp_cv_asm_x86_sse2 in -yes) - : - ;; -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +----------------------------------------------------------" >&5 -$as_echo "$as_me: WARNING: +----------------------------------------------------------" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | WARNING WARNING WARNING" >&5 -$as_echo "$as_me: WARNING: | WARNING WARNING WARNING" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | Host CPU has SSE2 code, but it can't be assembled by" >&5 -$as_echo "$as_me: WARNING: | Host CPU has SSE2 code, but it can't be assembled by" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | $CCAS $CFLAGS $CPPFLAGS" >&5 -$as_echo "$as_me: WARNING: | $CCAS $CFLAGS $CPPFLAGS" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | Non-SSE2 replacements will be used." >&5 -$as_echo "$as_me: WARNING: | Non-SSE2 replacements will be used." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | This will be an inferior build." >&5 -$as_echo "$as_me: WARNING: | This will be an inferior build." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +----------------------------------------------------------" >&5 -$as_echo "$as_me: WARNING: +----------------------------------------------------------" >&2;} - tmp_path= -for i in $path; do - case $i in - */sse2) ;; - *) tmp_path="$tmp_path $i" ;; - esac -done -path="$tmp_path" - -tmp_path= -for i in $fat_path; do - case $i in - */sse2) ;; - *) tmp_path="$tmp_path $i" ;; - esac -done -fat_path="$tmp_path" - - - ;; -esac - ;; - esac - fi - case "$path $fat_path" in - *mulx*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the assembler knows about the mulx instruction" >&5 -$as_echo_n "checking if the assembler knows about the mulx instruction... " >&6; } -if ${gmp_cv_asm_x86_mulx+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.s <<EOF - .text - mulx %r8, %r9, %r10 -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_x86_mulx=yes -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - gmp_cv_asm_x86_mulx=no -fi -rm -f conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_x86_mulx" >&5 -$as_echo "$gmp_cv_asm_x86_mulx" >&6; } -case $gmp_cv_asm_x86_mulx in -yes) - : - ;; -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +----------------------------------------------------------" >&5 -$as_echo "$as_me: WARNING: +----------------------------------------------------------" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | WARNING WARNING WARNING" >&5 -$as_echo "$as_me: WARNING: | WARNING WARNING WARNING" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | Host CPU has the mulx instruction, but it can't be" >&5 -$as_echo "$as_me: WARNING: | Host CPU has the mulx instruction, but it can't be" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | assembled by" >&5 -$as_echo "$as_me: WARNING: | assembled by" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | $CCAS $CFLAGS $CPPFLAGS" >&5 -$as_echo "$as_me: WARNING: | $CCAS $CFLAGS $CPPFLAGS" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | Older x86 instructions will be used." >&5 -$as_echo "$as_me: WARNING: | Older x86 instructions will be used." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | This will be an inferior build." >&5 -$as_echo "$as_me: WARNING: | This will be an inferior build." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +----------------------------------------------------------" >&5 -$as_echo "$as_me: WARNING: +----------------------------------------------------------" >&2;} - tmp_path= -for i in $path; do - case $i in - */mulx) ;; - *) tmp_path="$tmp_path $i" ;; - esac -done -path="$tmp_path" - -tmp_path= -for i in $fat_path; do - case $i in - */mulx) ;; - *) tmp_path="$tmp_path $i" ;; - esac -done -fat_path="$tmp_path" - - - ;; -esac - ;; - esac - case "$path $fat_path" in - *adx*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the assembler knows about the adox instruction" >&5 -$as_echo_n "checking if the assembler knows about the adox instruction... " >&6; } -if ${gmp_cv_asm_x86_adx+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.s <<EOF - .text - adox %r8, %r9 - adcx %r8, %r9 -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_x86_adx=yes -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - gmp_cv_asm_x86_adx=no -fi -rm -f conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_x86_adx" >&5 -$as_echo "$gmp_cv_asm_x86_adx" >&6; } -case $gmp_cv_asm_x86_adx in -yes) - : - ;; -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +----------------------------------------------------------" >&5 -$as_echo "$as_me: WARNING: +----------------------------------------------------------" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | WARNING WARNING WARNING" >&5 -$as_echo "$as_me: WARNING: | WARNING WARNING WARNING" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | Host CPU has the adcx and adox instructions, but they" >&5 -$as_echo "$as_me: WARNING: | Host CPU has the adcx and adox instructions, but they" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | can't be assembled by" >&5 -$as_echo "$as_me: WARNING: | can't be assembled by" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | $CCAS $CFLAGS $CPPFLAGS" >&5 -$as_echo "$as_me: WARNING: | $CCAS $CFLAGS $CPPFLAGS" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | Older x86 instructions will be used." >&5 -$as_echo "$as_me: WARNING: | Older x86 instructions will be used." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | This will be an inferior build." >&5 -$as_echo "$as_me: WARNING: | This will be an inferior build." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +----------------------------------------------------------" >&5 -$as_echo "$as_me: WARNING: +----------------------------------------------------------" >&2;} - tmp_path= -for i in $path; do - case $i in - */adx) ;; - *) tmp_path="$tmp_path $i" ;; - esac -done -path="$tmp_path" - -tmp_path= -for i in $fat_path; do - case $i in - */adx) ;; - *) tmp_path="$tmp_path $i" ;; - esac -done -fat_path="$tmp_path" - - - ;; -esac - ;; - esac - ;; -esac - - -if test "$enable_assembly" = "no"; then - path="generic" - CFLAGS="$CFLAGS -DNO_ASM" -# for abi in $abilist; do -# eval unset "path_\$abi" -# eval gcc_${abi}_cflags=\"\$gcc_${abi}_cflags -DNO_ASM\" -# done -fi - - -cat >&5 <<EOF -Decided: -ABI=$ABI -CC=$CC -CFLAGS=$CFLAGS -CPPFLAGS=$CPPFLAGS -GMP_LDFLAGS=$GMP_LDFLAGS -CXX=$CXX -CXXFLAGS=$CXXFLAGS -path=$path -EOF -echo "using ABI=\"$ABI\"" -echo " CC=\"$CC\"" -echo " CFLAGS=\"$CFLAGS\"" -echo " CPPFLAGS=\"$CPPFLAGS\"" -if test $want_cxx = yes; then - echo " CXX=\"$CXX\"" - echo " CXXFLAGS=\"$CXXFLAGS\"" -fi -echo " MPN_PATH=\"$path\"" - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether assembler supports --noexecstack option" >&5 -$as_echo_n "checking whether assembler supports --noexecstack option... " >&6; } -if ${cl_cv_as_noexecstack+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.c <<EOF -void foo() {} -EOF - if { ac_try='${CC} $CFLAGS $CPPFLAGS - -S -o conftest.s conftest.c >/dev/null' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } \ - && grep .note.GNU-stack conftest.s >/dev/null \ - && { ac_try='${CC} $CFLAGS $CPPFLAGS -Wa,--noexecstack - -c -o conftest.o conftest.s >/dev/null' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } - then - cl_cv_as_noexecstack=yes - else - cl_cv_as_noexecstack=no - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cl_cv_as_noexecstack" >&5 -$as_echo "$cl_cv_as_noexecstack" >&6; } - if test "$cl_cv_as_noexecstack" = yes; then - ASMFLAGS="$ASMFLAGS -Wa,--noexecstack" - fi - - - - -gmp_user_AR=$AR -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="ar" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -if test -z "$gmp_user_AR"; then - eval arflags=\"\$ar${abi1}_flags\" - test -n "$arflags" || eval arflags=\"\$ar${abi2}_flags\" - if test -n "$arflags"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for extra ar flags" >&5 -$as_echo_n "checking for extra ar flags... " >&6; } - AR="$AR $arflags" - ac_cv_prog_AR="$AR $arflags" - ac_cv_prog_ac_ct_AR="$AR $arflags" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $arflags" >&5 -$as_echo "$arflags" >&6; } - fi -fi -if test -z "$AR_FLAGS"; then - AR_FLAGS=cq -fi - - -gmp_user_NM=$NM -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM=$NM -else - lt_nm_to_check=${ac_tool_prefix}nm - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - tmp_nm=$ac_dir/$lt_tmp_nm - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the 'sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty - case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; - *) lt_bad_file=/dev/null ;; - esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in - *$lt_bad_file* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break 2 - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break 2 - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS=$lt_save_ifs - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test no != "$lt_cv_path_NM"; then - NM=$lt_cv_path_NM -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols -headers" - ;; - *) - DUMPBIN=: - ;; - esac - fi - - if test : != "$DUMPBIN"; then - NM=$DUMPBIN - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - - -# FIXME: When cross compiling (ie. $ac_tool_prefix not empty), libtool -# defaults to plain "nm" if a "${ac_tool_prefix}nm" is not found. In this -# case run it again to try the native "nm", firstly so that likely locations -# are searched, secondly so that -B or -p are added if necessary for BSD -# format. This is necessary for instance on OSF with "./configure -# --build=alphaev5-dec-osf --host=alphaev6-dec-osf". -# -if test -z "$gmp_user_NM" && test -n "$ac_tool_prefix" && test "$NM" = nm; then - $as_unset lt_cv_path_NM - gmp_save_ac_tool_prefix=$ac_tool_prefix - ac_tool_prefix= - NM= - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM=$NM -else - lt_nm_to_check=${ac_tool_prefix}nm - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - tmp_nm=$ac_dir/$lt_tmp_nm - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the 'sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty - case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; - *) lt_bad_file=/dev/null ;; - esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in - *$lt_bad_file* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break 2 - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break 2 - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS=$lt_save_ifs - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test no != "$lt_cv_path_NM"; then - NM=$lt_cv_path_NM -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols -headers" - ;; - *) - DUMPBIN=: - ;; - esac - fi - - if test : != "$DUMPBIN"; then - NM=$DUMPBIN - fi -fi -test -z "$NM" && NM=nm - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - - ac_tool_prefix=$gmp_save_ac_tool_prefix -fi - -if test -z "$gmp_user_NM"; then - eval nmflags=\"\$nm${abi1}_flags\" - test -n "$nmflags" || eval nmflags=\"\$nm${abi2}_flags\" - if test -n "$nmflags"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for extra nm flags" >&5 -$as_echo_n "checking for extra nm flags... " >&6; } - NM="$NM $nmflags" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nmflags" >&5 -$as_echo "$nmflags" >&6; } - fi -fi - - -case $host in - # FIXME: On AIX 3 and 4, $libname.a is included in libtool - # $library_names_spec, so libgmp.a becomes a symlink to libgmp.so, making - # it impossible to build shared and static libraries simultaneously. - # Disable shared libraries by default, but let the user override with - # --enable-shared --disable-static. - # - # FIXME: This $libname.a problem looks like it might apply to *-*-amigaos* - # and *-*-os2* too, but wait for someone to test this before worrying - # about it. If there is a problem then of course libtool is the right - # place to fix it. - # - *-*-aix[34]*) - if test -z "$enable_shared"; then enable_shared=no; fi ;; -esac - - -# Configs for Windows DLLs. - -enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. -set dummy ${ac_tool_prefix}as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AS+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AS"; then - ac_cv_prog_AS="$AS" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AS="${ac_tool_prefix}as" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AS=$ac_cv_prog_AS -if test -n "$AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 -$as_echo "$AS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AS"; then - ac_ct_AS=$AS - # Extract the first word of "as", so it can be a program name with args. -set dummy as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AS+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AS"; then - ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AS="as" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AS=$ac_cv_prog_ac_ct_AS -if test -n "$ac_ct_AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 -$as_echo "$ac_ct_AS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AS" = x; then - AS="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AS=$ac_ct_AS - fi -else - AS="$ac_cv_prog_AS" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - - ;; -esac - -test -z "$AS" && AS=as - - - - - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - -LIBGMP_DLL=0 - -case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - # By default, build only static. - if test -z "$enable_shared"; then - enable_shared=no - fi - # Don't allow both static and DLL. - if test "$enable_shared" != no && test "$enable_static" != no; then - as_fn_error $? "cannot build both static and DLL, since gmp.h is different for each. -Use \"--disable-static --enable-shared\" to build just a DLL." "$LINENO" 5 - fi - - # "-no-undefined" is required when building a DLL, see documentation on - # AC_LIBTOOL_WIN32_DLL. - # - # "-Wl,--export-all-symbols" is a bit of a hack, it gets all libgmp and - # libgmpxx functions and variables exported. This is what libtool did - # in the past, and it's convenient for us in the test programs. - # - # Maybe it'd be prudent to check for --export-all-symbols before using - # it, but it seems to have been in ld since at least 2000, and there's - # not really any alternative we want to take up at the moment. - # - # "-Wl,output-def" is used to get a .def file for use by MS lib to make - # a .lib import library, described in the manual. libgmp-3.dll.def - # corresponds to the libmp-3.dll.def generated by libtool (as a result - # of -export-symbols on that library). - # - # Incidentally, libtool does generate an import library libgmp.dll.a, - # but it's "ar" format and cannot be used by the MS linker. There - # doesn't seem to be any GNU tool for generating or converting to .lib. - # - # FIXME: The .def files produced by -Wl,output-def include isascii, - # iscsym, iscsymf and toascii, apparently because mingw ctype.h doesn't - # inline isascii (used in gmp). It gives an extern inline for - # __isascii, but for some reason not the plain isascii. - # - if test "$enable_shared" = yes; then - GMP_LDFLAGS="$GMP_LDFLAGS -no-undefined -Wl,--export-all-symbols" - LIBGMP_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmp-3.dll.def" - LIBGMPXX_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmpxx-3.dll.def" - LIBGMP_DLL=1 - fi - ;; -esac - - -# Ensure that $CONFIG_SHELL is available for AC_LIBTOOL_SYS_MAX_CMD_LEN. -# It's often set already by _LT_AC_PROG_ECHO_BACKSLASH or -# _AS_LINENO_PREPARE, but not always. -# -# The symptom of CONFIG_SHELL unset is some "expr" errors during the test, -# and an empty result. This only happens when invoked as "sh configure", -# ie. no path, and can be seen for instance on ia64-*-hpux*. -# -# FIXME: Newer libtool should have it's own fix for this. -# -if test -z "$CONFIG_SHELL"; then - CONFIG_SHELL=$SHELL -fi - -# Enable CXX in libtool only if we want it, and never enable GCJ, nor RC on -# mingw and cygwin. Under --disable-cxx this avoids some error messages -# from libtool arising from the fact we didn't actually run AC_PROG_CXX. -# Notice that any user-supplied --with-tags setting takes precedence. -# -# FIXME: Is this the right way to get this effect? Very possibly not, but -# the current _LT_AC_TAGCONFIG doesn't really suggest an alternative. -# -if test "${with_tags+set}" != set; then - if test $want_cxx = yes; then - with_tags=CXX - else - with_tags= - fi -fi - -# The dead hand of AC_REQUIRE makes AC_PROG_LIBTOOL expand and execute -# AC_PROG_F77, even when F77 is not in the selected with_tags. This is -# probably harmless, but it's unsightly and bloats our configure, so pretend -# AC_PROG_F77 has been expanded already. -# -# FIXME: Rumour has it libtool will one day provide a way for a configure.in -# to say what it wants from among supported languages etc. -# -#AC_PROVIDE([AC_PROG_F77]) - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.4.6' -macro_revision='2.4.6' - - - - - - - - - - - - - -ltmain=$ac_aux_dir/ltmain.sh - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "" -} - -case $ECHO in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; -esac - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_FGREP" || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return, which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD=$ac_prog - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD=$ac_dir/$ac_prog - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in - *GNU* | *'with BFD'*) - test no != "$with_gnu_ld" && break - ;; - *) - test yes != "$with_gnu_ld" && break - ;; - esac - fi - done - IFS=$lt_save_ifs -else - lt_cv_path_LD=$LD # Let the user override the test with a path. -fi -fi - -LD=$lt_cv_path_LD -if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 </dev/null` in -*GNU* | *'with BFD'*) - lt_cv_prog_gnu_ld=yes - ;; -*) - lt_cv_prog_gnu_ld=no - ;; -esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring=ABCD - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test X`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test 17 != "$i" # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n "$lt_cv_sys_max_cmd_len"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac - -fi - -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac - -fi - -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test yes != "$GCC"; then - reload_cmds=false - fi - ;; - darwin*) - if test yes = "$GCC"; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# 'unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# that responds to the $file_magic_cmd with a given extended regex. -# If you have 'file' or equivalent on your system and you're not sure -# whether 'pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd* | bitrig*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -os2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh; - # decide which one to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd=$ECHO - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - - -if test -n "$ac_tool_prefix"; then - for ac_prog in ar - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_AR" && break -done - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -fi - -: ${AR=ar} -: ${AR_FLAGS=cru} - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ar_at_file=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test 0 -eq "$ac_status"; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test 0 -ne "$ac_status"; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } - -if test no = "$lt_cv_ar_at_file"; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - bitrig* | openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test ia64 = "$host_cpu"; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Gets list of data symbols to import. - lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" - # Adjust the below global symbol transforms to fixup imported variables. - lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" - lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" - lt_c_name_lib_hook="\ - -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ - -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" -else - # Disable hooks by default. - lt_cv_sys_global_symbol_to_import= - lt_cdecl_hook= - lt_c_name_hook= - lt_c_name_lib_hook= -fi - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n"\ -$lt_cdecl_hook\ -" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ -$lt_c_name_hook\ -" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" - -# Transform an extracted symbol line into symbol name with lib prefix and -# symbol address. -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ -$lt_c_name_lib_hook\ -" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ -" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function, - # D for any global variable and I for any imported variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ -" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ -" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ -" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ -" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE -/* DATA imports from DLLs on WIN32 can't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined __osf__ -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS=conftstm.$ac_objext - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest$ac_exeext; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test yes = "$pipe_works"; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } - -# Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : - withval=$with_sysroot; -else - with_sysroot=no -fi - - -lt_sysroot= -case $with_sysroot in #( - yes) - if test yes = "$GCC"; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -$as_echo "$with_sysroot" >&6; } - as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 - ;; -esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -$as_echo_n "checking for a working dd... " >&6; } -if ${ac_cv_path_lt_DD+:} false; then : - $as_echo_n "(cached) " >&6 -else - printf 0123456789abcdef0123456789abcdef >conftest.i -cat conftest.i conftest.i >conftest2.i -: ${lt_DD:=$DD} -if test -z "$lt_DD"; then - ac_path_lt_DD_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in dd; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_lt_DD" || continue -if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then - cmp -s conftest.i conftest.out \ - && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: -fi - $ac_path_lt_DD_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_lt_DD"; then - : - fi -else - ac_cv_path_lt_DD=$lt_DD -fi - -rm -f conftest.i conftest2.i conftest.out -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -$as_echo "$ac_cv_path_lt_DD" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -$as_echo_n "checking how to truncate binary pipes... " >&6; } -if ${lt_cv_truncate_bin+:} false; then : - $as_echo_n "(cached) " >&6 -else - printf 0123456789abcdef0123456789abcdef >conftest.i -cat conftest.i conftest.i >conftest2.i -lt_cv_truncate_bin= -if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then - cmp -s conftest.i conftest.out \ - && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" -fi -rm -f conftest.i conftest2.i conftest.out -test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -$as_echo "$lt_cv_truncate_bin" >&6; } - - - - - - - -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -func_cc_basename () -{ - for cc_temp in $*""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac - done - func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -} - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test no = "$enable_libtool_lock" || enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out what ABI is being produced by ac_compile, and set mode - # options accordingly. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE=32 - ;; - *ELF-64*) - HPUX_IA64_MODE=64 - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test yes = "$lt_cv_prog_gnu_ld"; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -mips64*-*linux*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - emul=elf - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - emul="${emul}32" - ;; - *64-bit*) - emul="${emul}64" - ;; - esac - case `/usr/bin/file conftest.$ac_objext` in - *MSB*) - emul="${emul}btsmip" - ;; - *LSB*) - emul="${emul}ltsmip" - ;; - esac - case `/usr/bin/file conftest.$ac_objext` in - *N32*) - emul="${emul}n32" - ;; - esac - LD="${LD-ld} -m $emul" - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. Note that the listed cases only cover the - # situations where additional linker options are needed (such as when - # doing 32-bit compilation for a host where ld defaults to 64-bit, or - # vice versa); the common cases where no linker options are needed do - # not appear in the list. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - case `/usr/bin/file conftest.o` in - *x86-64*) - LD="${LD-ld} -m elf32_x86_64" - ;; - *) - LD="${LD-ld} -m elf_i386" - ;; - esac - ;; - powerpc64le-*linux*) - LD="${LD-ld} -m elf32lppclinux" - ;; - powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - powerpcle-*linux*) - LD="${LD-ld} -m elf64lppc" - ;; - powerpc-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test yes != "$lt_cv_cc_needs_belf"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS=$SAVE_CFLAGS - fi - ;; -*-*solaris*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*|x86_64-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD=${LD-ld}_sol2 - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks=$enable_libtool_lock - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. -set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MANIFEST_TOOL"; then - ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL -if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_MANIFEST_TOOL"; then - ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL - # Extract the first word of "mt", so it can be a program name with args. -set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_MANIFEST_TOOL"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL -if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_MANIFEST_TOOL" = x; then - MANIFEST_TOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL - fi -else - MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" -fi - -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&5 - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test yes != "$lt_cv_path_mainfest_tool"; then - MANIFEST_TOOL=: -fi - - - - - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "$LT_MULTI_MODULE"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&5 - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test 0 = "$_lt_result"; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 - echo "$RANLIB libconftest.a" >&5 - $RANLIB libconftest.a 2>&5 - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&5 - elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&5 - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - 10.[012][,.]*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test yes = "$lt_cv_apple_cc_single_mod"; then - _lt_dar_single_mod='$single_module' - fi - if test yes = "$lt_cv_ld_exported_symbols_list"; then - _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' - fi - if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -# func_munge_path_list VARIABLE PATH -# ----------------------------------- -# VARIABLE is name of variable containing _space_ separated list of -# directories to be munged by the contents of PATH, which is string -# having a format: -# "DIR[:DIR]:" -# string "DIR[ DIR]" will be prepended to VARIABLE -# ":DIR[:DIR]" -# string "DIR[ DIR]" will be appended to VARIABLE -# "DIRP[:DIRP]::[DIRA:]DIRA" -# string "DIRP[ DIRP]" will be prepended to VARIABLE and string -# "DIRA[ DIRA]" will be appended to VARIABLE -# "DIR[:DIR]" -# VARIABLE will be replaced by "DIR[ DIR]" -func_munge_path_list () -{ - case x$2 in - x) - ;; - *:) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" - ;; - x:*) - eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" - ;; - *) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" - ;; - esac -} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <string.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ctype.h> -#include <stdlib.h> -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - - -func_stripname_cnf () -{ - case $2 in - .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; - *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; - esac -} # func_stripname_cnf - - - - - -# Set options - - - - enable_dlopen=no - - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS=$lt_save_ifs - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS=$lt_save_ifs - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for lt_pkg in $withval; do - IFS=$lt_save_ifs - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS=$lt_save_ifs - ;; - esac -else - pic_mode=default -fi - - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS=$lt_save_ifs - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - shared_archive_member_spec= -case $host,$enable_shared in -power*-*-aix[5-9]*,yes) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } - -# Check whether --with-aix-soname was given. -if test "${with_aix_soname+set}" = set; then : - withval=$with_aix_soname; case $withval in - aix|svr4|both) - ;; - *) - as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 - ;; - esac - lt_cv_with_aix_soname=$with_aix_soname -else - if ${lt_cv_with_aix_soname+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_with_aix_soname=aix -fi - - with_aix_soname=$lt_cv_with_aix_soname -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -$as_echo "$with_aix_soname" >&6; } - if test aix != "$with_aix_soname"; then - # For the AIX way of multilib, we name the shared archive member - # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', - # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. - # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, - # the AIX toolchain works better with OBJECT_MODE set (default 32). - if test 64 = "${OBJECT_MODE-32}"; then - shared_archive_member_spec=shr_64 - else - shared_archive_member_spec=shr - fi - fi - ;; -*) - with_aix_soname=aix - ;; -esac - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS=$ltmain - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test set != "${COLLECT_NAMES+set}"; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a '.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld=$lt_cv_prog_gnu_ld - -old_CC=$CC -old_CFLAGS=$CFLAGS - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -func_cc_basename $compiler -cc_basename=$func_cc_basename_result - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD=$MAGIC_CMD - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/${ac_tool_prefix}file"; then - lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD=$lt_cv_path_MAGIC_CMD - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS=$lt_save_ifs - MAGIC_CMD=$lt_save_MAGIC_CMD - ;; -esac -fi - -MAGIC_CMD=$lt_cv_path_MAGIC_CMD -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD=$MAGIC_CMD - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/file"; then - lt_cv_path_MAGIC_CMD=$ac_dir/"file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD=$lt_cv_path_MAGIC_CMD - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS=$lt_save_ifs - MAGIC_CMD=$lt_save_MAGIC_CMD - ;; -esac -fi - -MAGIC_CMD=$lt_cv_path_MAGIC_CMD -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC=$CC -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test yes = "$GCC"; then - case $cc_basename in - nvcc*) - lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; - *) - lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - - - if test yes = "$GCC"; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - lt_prog_compiler_pic='-fPIC' - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the '-m68020' flag to GCC prevents building anything better, - # like '-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - case $host_os in - os2*) - lt_prog_compiler_static='$wl-static' - ;; - esac - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - lt_prog_compiler_wl='-Xlinker ' - if test -n "$lt_prog_compiler_pic"; then - lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - case $cc_basename in - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - case $host_os in - os2*) - lt_prog_compiler_static='$wl-static' - ;; - esac - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='$wl-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - # old Intel for x86_64, which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - tcc*) - # Fabrice Bellard et al's Tiny C Compiler - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - *Sun\ F* | *Sun*Fortran*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Intel*\ [CF]*Compiler*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - *Portland\ Group*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms that do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } -lt_prog_compiler_pic=$lt_cv_prog_compiler_pic - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test yes = "$lt_cv_prog_compiler_pic_works"; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS=$save_LDFLAGS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test yes = "$lt_cv_prog_compiler_static_works"; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links=nottested -if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ' (' and ')$', so one must not match beginning or - # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', - # as well as any symbol that contains 'd'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test yes != "$GCC"; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd* | bitrig*) - with_gnu_ld=no - ;; - esac - - ld_shlibs=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test yes = "$with_gnu_ld"; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; - *\ \(GNU\ Binutils\)\ [3-9]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test yes = "$lt_use_gnu_ld_interface"; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='$wl' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - export_dynamic_flag_spec='$wl--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test ia64 != "$host_cpu"; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - export_dynamic_flag_spec='$wl--export-all-symbols' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file, use it as - # is; otherwise, prepend EXPORTS... - archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - haiku*) - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - link_all_deplibs=yes - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - shrext_cmds=.dll - archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - enable_shared_with_static_runtimes=yes - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='$wl-rpath,$libdir' - export_dynamic_flag_spec='$wl-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test linux-dietlibc = "$host_os"; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test no = "$tmp_diet" - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - nagfor*) # NAGFOR 5.3 - tmp_sharedflag='-Wl,-shared' ;; - xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - compiler_needs_object=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - - if test yes = "$supports_anon_versioning"; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - tcc*) - export_dynamic_flag_spec='-rdynamic' - ;; - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test yes = "$supports_anon_versioning"; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test no = "$ld_shlibs"; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test ia64 = "$host_cpu"; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag= - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to GNU nm, but means don't demangle to AIX nm. - # Without the "-l" option, or with the "-B" option, AIX nm treats - # weak defined symbols like other global defined symbols, whereas - # GNU nm marks them as "W". - # While the 'weak' keyword is ignored in the Export File, we need - # it in the Import File for the 'aix-soname' feature, so we have - # to replace the "-B" option with "-P" for AIX nm. - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # have runtime linking enabled, and use it for executables. - # For shared libraries, we enable/disable runtime linking - # depending on the kind of the shared library created - - # when "with_aix_soname,aix_use_runtimelinking" is: - # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables - # "aix,yes" lib.so shared, rtl:yes, for executables - # lib.a static archive - # "both,no" lib.so.V(shr.o) shared, rtl:yes - # lib.a(lib.so.V) shared, rtl:no, for executables - # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a(lib.so.V) shared, rtl:no - # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a static archive - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then - aix_use_runtimelinking=yes - break - fi - done - if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then - # With aix-soname=svr4, we create the lib.so.V shared archives only, - # so we don't have lib.a shared libs to link our executables. - # We have to force runtime linking in this case. - aix_use_runtimelinking=yes - LDFLAGS="$LDFLAGS -Wl,-brtl" - fi - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='$wl-f,' - case $with_aix_soname,$aix_use_runtimelinking in - aix,*) ;; # traditional, no import file - svr4,* | *,yes) # use import file - # The Import File defines what to hardcode. - hardcode_direct=no - hardcode_direct_absolute=no - ;; - esac - - if test yes = "$GCC"; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`$CC -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test yes = "$aix_use_runtimelinking"; then - shared_flag="$shared_flag "'$wl-G' - fi - # Need to ensure runtime linking is disabled for the traditional - # shared library, or the linker may eventually find shared libraries - # /with/ Import File - we do not want to mix them. - shared_flag_aix='-shared' - shared_flag_svr4='-shared $wl-G' - else - # not using gcc - if test ia64 = "$host_cpu"; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test yes = "$aix_use_runtimelinking"; then - shared_flag='$wl-G' - else - shared_flag='$wl-bM:SRE' - fi - shared_flag_aix='$wl-bM:SRE' - shared_flag_svr4='$wl-G' - fi - fi - - export_dynamic_flag_spec='$wl-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=/usr/lib:/lib - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag - else - if test ia64 = "$host_cpu"; then - hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=/usr/lib:/lib - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' $wl-bernotok' - allow_undefined_flag=' $wl-berok' - if test yes = "$with_gnu_ld"; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - fi - archive_cmds_need_lc=yes - archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' - # -brtl affects multiple linker settings, -berok does not and is overridden later - compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' - if test svr4 != "$with_aix_soname"; then - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' - fi - if test aix != "$with_aix_soname"; then - archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' - else - # used by -dlpreopen to get the symbols - archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' - fi - archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - always_export_symbols=yes - file_list_spec='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' - archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp "$export_symbols" "$output_objdir/$soname.def"; - echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; - else - $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, )='true' - enable_shared_with_static_runtimes=yes - exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - old_postinstall_cmds='chmod 644 $oldlib' - postlink_cmds='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile=$lt_outputfile.exe - lt_tool_outputfile=$lt_tool_outputfile.exe - ;; - esac~ - if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - enable_shared_with_static_runtimes=yes - ;; - esac - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - if test yes = "$lt_cv_ld_force_load"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - - else - whole_archive_flag_spec='' - fi - link_all_deplibs=yes - allow_undefined_flag=$_lt_dar_allow_undefined - case $cc_basename in - ifort*|nagfor*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test yes = "$_lt_dar_can_shared"; then - output_verbose_link_cmd=func_echo_all - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test yes = "$GCC"; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='$wl+b $wl$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='$wl-E' - ;; - - hpux10*) - if test yes,no = "$GCC,$with_gnu_ld"; then - archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test no = "$with_gnu_ld"; then - hardcode_libdir_flag_spec='$wl+b $wl$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='$wl-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test yes,no = "$GCC,$with_gnu_ld"; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler__b=no - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS -b" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler__b=yes - fi - else - lt_cv_prog_compiler__b=yes - fi - fi - $RM -r conftest* - LDFLAGS=$save_LDFLAGS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } - -if test yes = "$lt_cv_prog_compiler__b"; then - archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' -fi - - ;; - esac - fi - if test no = "$with_gnu_ld"; then - hardcode_libdir_flag_spec='$wl+b $wl$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='$wl-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test yes = "$GCC"; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo (void) { return 0; } -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_irix_exported_symbol=yes -else - lt_cv_irix_exported_symbol=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } - if test yes = "$lt_cv_irix_exported_symbol"; then - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' - fi - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - linux*) - case $cc_basename in - tcc*) - # Fabrice Bellard et al's Tiny C Compiler - ld_shlibs=yes - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd* | bitrig*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='$wl-rpath,$libdir' - export_dynamic_flag_spec='$wl-E' - else - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='$wl-rpath,$libdir' - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - shrext_cmds=.dll - archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - enable_shared_with_static_runtimes=yes - ;; - - osf3*) - if test yes = "$GCC"; then - allow_undefined_flag=' $wl-expect_unresolved $wl\*' - archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test yes = "$GCC"; then - allow_undefined_flag=' $wl-expect_unresolved $wl\*' - archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test yes = "$GCC"; then - wlarc='$wl' - archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='$wl' - archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands '-z linker_flag'. GCC discards it without '$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test yes = "$GCC"; then - whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test sequent = "$host_vendor"; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='$wl-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test yes = "$GCC"; then - archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We CANNOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='$wl-z,text' - allow_undefined_flag='$wl-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='$wl-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='$wl-Bexport' - runpath_var='LD_RUN_PATH' - - if test yes = "$GCC"; then - archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test sni = "$host_vendor"; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='$wl-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test no = "$ld_shlibs" && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test yes,yes = "$GCC,$enable_shared"; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc=no - else - lt_cv_archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } - archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test yes = "$GCC"; then - case $host_os in - darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; - *) lt_awk_arg='/^libraries:/' ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; - *) lt_sed_strip_eq='s|=/|/|g' ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary... - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - # ...but if some path component already ends with the multilib dir we assume - # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). - case "$lt_multi_os_dir; $lt_search_path_spec " in - "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) - lt_multi_os_dir= - ;; - esac - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" - elif test -n "$lt_multi_os_dir"; then - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS = " "; FS = "/|\n";} { - lt_foo = ""; - lt_count = 0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo = "/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's|/\([A-Za-z]:\)|\1|g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=.so -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - - - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='$libname$release$shared_ext$major' - ;; - -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test ia64 = "$host_cpu"; then - # AIX 5 supports IA64 - library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line '#! .'. This would cause the generated library to - # depend on '.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # Using Import Files as archive members, it is possible to support - # filename-based versioning of shared library archives on AIX. While - # this would work for both with and without runtime linking, it will - # prevent static linking of such archives. So we do filename-based - # shared library versioning with .so extension only, which is used - # when both runtime linking and shared linking is enabled. - # Unfortunately, runtime linking may impact performance, so we do - # not want this to be the default eventually. Also, we use the - # versioned .so libs for executables only if there is the -brtl - # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. - # To allow for filename-based versioning support, we need to create - # libNAME.so.V as an archive file, containing: - # *) an Import File, referring to the versioned filename of the - # archive as well as the shared archive member, telling the - # bitwidth (32 or 64) of that shared object, and providing the - # list of exported symbols of that shared object, eventually - # decorated with the 'weak' keyword - # *) the shared object with the F_LOADONLY flag set, to really avoid - # it being seen by the linker. - # At run time we better use the real file rather than another symlink, - # but for link time we create the symlink libNAME.so -> libNAME.so.V - - case $with_aix_soname,$aix_use_runtimelinking in - # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - aix,yes) # traditional libtool - dynamic_linker='AIX unversionable lib.so' - # If using run time linking (on AIX 4.2 or later) use lib<name>.so - # instead of lib<name>.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - aix,no) # traditional AIX only - dynamic_linker='AIX lib.a(lib.so.V)' - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - ;; - svr4,*) # full svr4 only - dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,yes) # both, prefer svr4 - dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # unpreferred sharedlib libNAME.a needs extra handling - postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' - postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,no) # both, prefer aix - dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling - postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' - postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' - ;; - esac - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='$libname$shared_ext' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - library_names_spec='$libname.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec=$LIB - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' - soname_spec='$libname$release$major$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - # Handle Gentoo/FreeBSD as it was Linux - case $host_vendor in - gentoo) - version_type=linux ;; - *) - version_type=freebsd-$objformat ;; - esac - - case $version_type in - freebsd-elf*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - need_version=yes - ;; - linux) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - need_lib_prefix=no - need_version=no - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=no - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - if test 32 = "$HPUX_IA64_MODE"; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - sys_lib_dlsearch_path_spec=/usr/lib/hpux32 - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - sys_lib_dlsearch_path_spec=/usr/lib/hpux64 - fi - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test yes = "$lt_cv_prog_gnu_ld"; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" - sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -linux*android*) - version_type=none # Android doesn't support versioned libraries. - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext' - soname_spec='$libname$release$shared_ext' - finish_cmds= - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - hardcode_libdir_flag_spec='-L$libdir' - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Ideally, we could use ldconfig to report *all* directores which are - # searched for libraries, however this is still not possible. Aside from not - # being certain /sbin/ldconfig is available, command - # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, - # even though it is searched at run-time. Try to do the best guess by - # appending ld.so.conf contents (and includes) to the search path. - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd* | bitrig*) - version_type=sunos - sys_lib_dlsearch_path_spec=/usr/lib - need_lib_prefix=no - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - need_version=no - else - need_version=yes - fi - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -os2*) - libname_spec='$name' - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - # OS/2 can only load a DLL with a base name of 8 characters or less. - soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; - v=$($ECHO $release$versuffix | tr -d .-); - n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); - $ECHO $n$v`$shared_ext' - library_names_spec='${libname}_dll.$libext' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=BEGINLIBPATH - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test yes = "$with_gnu_ld"; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec; then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' - soname_spec='$libname$shared_ext.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=sco - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test yes = "$with_gnu_ld"; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test no = "$dynamic_linker" && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test yes = "$GCC"; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then - sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec -fi - -if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then - sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec -fi - -# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... -configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec - -# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code -func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" - -# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool -configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test yes = "$hardcode_automatic"; then - - # We can hardcode non-existent directories. - if test no != "$hardcode_direct" && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && - test no != "$hardcode_minus_L"; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test relink = "$hardcode_action" || - test yes = "$inherit_rpath"; then - # Fast installation is not supported - enable_fast_install=no -elif test yes = "$shlibpath_overrides_runpath" || - test no = "$enable_shared"; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test yes != "$enable_dlopen"; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen=load_add_on - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen=LoadLibrary - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen=dlopen - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - - lt_cv_dlopen=dyld - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - tpf*) - # Don't try to run any link tests for TPF. We know it's impossible - # because TPF is a cross-compiler, and we know how we open DSOs. - lt_cv_dlopen=dlopen - lt_cv_dlopen_libs= - lt_cv_dlopen_self=no - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : - lt_cv_dlopen=shl_load -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : - lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : - lt_cv_dlopen=dlopen -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : - lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : - lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test no = "$lt_cv_dlopen"; then - enable_dlopen=no - else - enable_dlopen=yes - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS=$CPPFLAGS - test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS=$LDFLAGS - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS=$LIBS - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test yes = "$cross_compiling"; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include <dlfcn.h> -#endif - -#include <stdio.h> - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisibility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test yes = "$lt_cv_dlopen_self"; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test yes = "$cross_compiling"; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include <dlfcn.h> -#endif - -#include <stdio.h> - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisibility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS=$save_CPPFLAGS - LDFLAGS=$save_LDFLAGS - LIBS=$save_LIBS - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP"; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report what library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test no = "$can_build_shared" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test yes = "$enable_shared" && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test ia64 != "$host_cpu"; then - case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in - yes,aix,yes) ;; # shared object as lib.so file only - yes,svr4,*) ;; # shared object as lib.so archive member only - yes,*) enable_static=no ;; # shared object in lib.a archive as well - esac - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test yes = "$enable_shared" || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC=$lt_save_CC - - if test -n "$CXX" && ( test no != "$CXX" && - ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || - (test g++ != "$CXX"))); then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -else - _lt_caught_CXX_error=yes -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -compiler_needs_object_CXX=no -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_direct_absolute_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -inherit_rpath_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -reload_flag_CXX=$reload_flag -reload_cmds_CXX=$reload_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test yes != "$_lt_caught_CXX_error"; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - - # save warnings/boilerplate of simple test code - ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - - ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - compiler_CXX=$CC - func_cc_basename $compiler -cc_basename=$func_cc_basename_result - - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test yes = "$GXX"; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' - else - lt_prog_compiler_no_builtin_flag_CXX= - fi - - if test yes = "$GXX"; then - # Set up default GNU C++ configuration - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return, which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD=$ac_prog - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD=$ac_dir/$ac_prog - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in - *GNU* | *'with BFD'*) - test no != "$with_gnu_ld" && break - ;; - *) - test yes != "$with_gnu_ld" && break - ;; - esac - fi - done - IFS=$lt_save_ifs -else - lt_cv_path_LD=$LD # Let the user override the test with a path. -fi -fi - -LD=$lt_cv_path_LD -if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 </dev/null` in -*GNU* | *'with BFD'*) - lt_cv_prog_gnu_ld=yes - ;; -*) - lt_cv_prog_gnu_ld=no - ;; -esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test yes = "$with_gnu_ld"; then - archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='$wl' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - ld_shlibs_CXX=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix[4-9]*) - if test ia64 = "$host_cpu"; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag= - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # have runtime linking enabled, and use it for executables. - # For shared libraries, we enable/disable runtime linking - # depending on the kind of the shared library created - - # when "with_aix_soname,aix_use_runtimelinking" is: - # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables - # "aix,yes" lib.so shared, rtl:yes, for executables - # lib.a static archive - # "both,no" lib.so.V(shr.o) shared, rtl:yes - # lib.a(lib.so.V) shared, rtl:no, for executables - # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a(lib.so.V) shared, rtl:no - # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a static archive - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then - # With aix-soname=svr4, we create the lib.so.V shared archives only, - # so we don't have lib.a shared libs to link our executables. - # We have to force runtime linking in this case. - aix_use_runtimelinking=yes - LDFLAGS="$LDFLAGS -Wl,-brtl" - fi - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - file_list_spec_CXX='$wl-f,' - case $with_aix_soname,$aix_use_runtimelinking in - aix,*) ;; # no import file - svr4,* | *,yes) # use import file - # The Import File defines what to hardcode. - hardcode_direct_CXX=no - hardcode_direct_absolute_CXX=no - ;; - esac - - if test yes = "$GXX"; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`$CC -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - esac - shared_flag='-shared' - if test yes = "$aix_use_runtimelinking"; then - shared_flag=$shared_flag' $wl-G' - fi - # Need to ensure runtime linking is disabled for the traditional - # shared library, or the linker may eventually find shared libraries - # /with/ Import File - we do not want to mix them. - shared_flag_aix='-shared' - shared_flag_svr4='-shared $wl-G' - else - # not using gcc - if test ia64 = "$host_cpu"; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test yes = "$aix_use_runtimelinking"; then - shared_flag='$wl-G' - else - shared_flag='$wl-bM:SRE' - fi - shared_flag_aix='$wl-bM:SRE' - shared_flag_svr4='$wl-G' - fi - fi - - export_dynamic_flag_spec_CXX='$wl-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - always_export_symbols_CXX=yes - if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - # The "-G" linker flag allows undefined symbols. - no_undefined_flag_CXX='-bernotok' - # Determine the default libpath from the value encoded in an empty - # executable. - if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=/usr/lib:/lib - fi - -fi - - aix_libpath=$lt_cv_aix_libpath__CXX -fi - - hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag - else - if test ia64 = "$host_cpu"; then - hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=/usr/lib:/lib - fi - -fi - - aix_libpath=$lt_cv_aix_libpath__CXX -fi - - hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' $wl-bernotok' - allow_undefined_flag_CXX=' $wl-berok' - if test yes = "$with_gnu_ld"; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - fi - archive_cmds_need_lc_CXX=yes - archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' - # -brtl affects multiple linker settings, -berok does not and is overridden later - compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' - if test svr4 != "$with_aix_soname"; then - # This is similar to how AIX traditionally builds its shared - # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. - archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' - fi - if test aix != "$with_aix_soname"; then - archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' - else - # used by -dlpreopen to get the symbols - archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' - fi - archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_CXX=' ' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=yes - file_list_spec_CXX='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' - archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp "$export_symbols" "$output_objdir/$soname.def"; - echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; - else - $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' - enable_shared_with_static_runtimes_CXX=yes - # Don't use ranlib - old_postinstall_cmds_CXX='chmod 644 $oldlib' - postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile=$lt_outputfile.exe - lt_tool_outputfile=$lt_tool_outputfile.exe - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - export_dynamic_flag_spec_CXX='$wl--export-all-symbols' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file, use it as - # is; otherwise, prepend EXPORTS... - archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - esac - ;; - darwin* | rhapsody*) - - - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - if test yes = "$lt_cv_ld_force_load"; then - whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - - else - whole_archive_flag_spec_CXX='' - fi - link_all_deplibs_CXX=yes - allow_undefined_flag_CXX=$_lt_dar_allow_undefined - case $cc_basename in - ifort*|nagfor*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test yes = "$_lt_dar_can_shared"; then - output_verbose_link_cmd=func_echo_all - archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" - module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" - if test yes != "$lt_cv_apple_cc_single_mod"; then - archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" - archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" - fi - - else - ld_shlibs_CXX=no - fi - - ;; - - os2*) - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_minus_L_CXX=yes - allow_undefined_flag_CXX=unsupported - shrext_cmds=.dll - archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - enable_shared_with_static_runtimes_CXX=yes - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - freebsd2.*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - ld_shlibs_CXX=no - ;; - - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - - haiku*) - archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - link_all_deplibs_CXX=yes - ;; - - hpux9*) - hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='$wl-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes = "$GXX"; then - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test no = "$with_gnu_ld"; then - hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' - hardcode_libdir_separator_CXX=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - export_dynamic_flag_spec_CXX='$wl-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes = "$GXX"; then - if test no = "$with_gnu_ld"; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - interix[3-9]*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - export_dynamic_flag_spec_CXX='$wl-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test yes = "$GXX"; then - if test no = "$with_gnu_ld"; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - hardcode_libdir_separator_CXX=: - inherit_rpath_CXX=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' - whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [1-5].* | *pgcpp\ [1-5].*) - prelink_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - old_archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' - whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - export_dynamic_flag_spec_CXX='$wl--export-dynamic' - archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - if test yes = "$supports_anon_versioning"; then - archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' - hardcode_libdir_flag_spec_CXX='-R$libdir' - whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - compiler_needs_object_CXX=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - ld_shlibs_CXX=yes - ;; - - openbsd* | bitrig*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - hardcode_direct_absolute_CXX=yes - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='$wl-E' - whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - ld_shlibs_CXX=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - case $host in - osf3*) - allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' - archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - ;; - *) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ - $RM $lib.exp' - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - ;; - esac - - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes,no = "$GXX,$with_gnu_ld"; then - allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' - case $host in - osf3*) - archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - ;; - *) - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands '-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test yes,no = "$GXX,$with_gnu_ld"; then - no_undefined_flag_CXX=' $wl-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require '-G' NOT '-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='$wl-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We CANNOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_CXX='$wl-z,text' - allow_undefined_flag_CXX='$wl-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='$wl-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ - '"$old_archive_cmds_CXX" - reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ - '"$reload_cmds_CXX" - ;; - *) - archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } - test no = "$ld_shlibs_CXX" && can_build_shared=no - - GCC_CXX=$GXX - LD_CXX=$LD - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - # Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= - -cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF - - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac - -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case $prev$p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test x-L = "$p" || - test x-R = "$p"; then - prev=$p - continue - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test no = "$pre_test_object_deps_done"; then - case $prev in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX=$prev$p - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX=$prev$p - else - postdeps_CXX="${postdeps_CXX} $prev$p" - fi - fi - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test no = "$pre_test_object_deps_done"; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX=$p - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX=$p - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS - -# PORTME: override above test on systems where it is broken -case $host_os in -interix[3-9]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; -esac - - -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - compiler_lib_search_dirs_CXX= -if test -n "${compiler_lib_search_path_CXX}"; then - compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - - - # C++ specific cases for pic, static, wl, etc. - if test yes = "$GXX"; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - lt_prog_compiler_pic_CXX='-fPIC' - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic_CXX='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the '-m68020' flag to GCC prevents building anything better, - # like '-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - case $host_os in - os2*) - lt_prog_compiler_static_CXX='$wl-static' - ;; - esac - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static_CXX= - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix[4-9]*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='$wl-a ${wl}archive' - if test ia64 != "$host_cpu"; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='$wl-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64, which still supported -KPIC. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-qpic' - lt_prog_compiler_static_CXX='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -case $host_os in - # For platforms that do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } -lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works_CXX=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } - -if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works_CXX=no - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works_CXX=yes - fi - else - lt_cv_prog_compiler_static_works_CXX=yes - fi - fi - $RM -r conftest* - LDFLAGS=$save_LDFLAGS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } - -if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then - : -else - lt_prog_compiler_static_CXX= -fi - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - -hard_links=nottested -if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - case $host_os in - aix[4-9]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to GNU nm, but means don't demangle to AIX nm. - # Without the "-l" option, or with the "-B" option, AIX nm treats - # weak defined symbols like other global defined symbols, whereas - # GNU nm marks them as "W". - # While the 'weak' keyword is ignored in the Export File, we need - # it in the Import File for the 'aix-soname' feature, so we have - # to replace the "-B" option with "-P" for AIX nm. - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX=$ltdll_cmds - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) - exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - ;; - esac - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } -test no = "$ld_shlibs_CXX" && can_build_shared=no - -with_gnu_ld_CXX=$with_gnu_ld - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test yes,yes = "$GCC,$enable_shared"; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc_CXX=no - else - lt_cv_archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } - archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=.so -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - - - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='$libname$release$shared_ext$major' - ;; - -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test ia64 = "$host_cpu"; then - # AIX 5 supports IA64 - library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line '#! .'. This would cause the generated library to - # depend on '.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # Using Import Files as archive members, it is possible to support - # filename-based versioning of shared library archives on AIX. While - # this would work for both with and without runtime linking, it will - # prevent static linking of such archives. So we do filename-based - # shared library versioning with .so extension only, which is used - # when both runtime linking and shared linking is enabled. - # Unfortunately, runtime linking may impact performance, so we do - # not want this to be the default eventually. Also, we use the - # versioned .so libs for executables only if there is the -brtl - # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. - # To allow for filename-based versioning support, we need to create - # libNAME.so.V as an archive file, containing: - # *) an Import File, referring to the versioned filename of the - # archive as well as the shared archive member, telling the - # bitwidth (32 or 64) of that shared object, and providing the - # list of exported symbols of that shared object, eventually - # decorated with the 'weak' keyword - # *) the shared object with the F_LOADONLY flag set, to really avoid - # it being seen by the linker. - # At run time we better use the real file rather than another symlink, - # but for link time we create the symlink libNAME.so -> libNAME.so.V - - case $with_aix_soname,$aix_use_runtimelinking in - # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - aix,yes) # traditional libtool - dynamic_linker='AIX unversionable lib.so' - # If using run time linking (on AIX 4.2 or later) use lib<name>.so - # instead of lib<name>.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - aix,no) # traditional AIX only - dynamic_linker='AIX lib.a(lib.so.V)' - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - ;; - svr4,*) # full svr4 only - dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,yes) # both, prefer svr4 - dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # unpreferred sharedlib libNAME.a needs extra handling - postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' - postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,no) # both, prefer aix - dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling - postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' - postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' - ;; - esac - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='$libname$shared_ext' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - library_names_spec='$libname.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec=$LIB - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' - soname_spec='$libname$release$major$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - # Handle Gentoo/FreeBSD as it was Linux - case $host_vendor in - gentoo) - version_type=linux ;; - *) - version_type=freebsd-$objformat ;; - esac - - case $version_type in - freebsd-elf*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - need_version=yes - ;; - linux) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - need_lib_prefix=no - need_version=no - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=no - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - if test 32 = "$HPUX_IA64_MODE"; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - sys_lib_dlsearch_path_spec=/usr/lib/hpux32 - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - sys_lib_dlsearch_path_spec=/usr/lib/hpux64 - fi - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test yes = "$lt_cv_prog_gnu_ld"; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" - sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -linux*android*) - version_type=none # Android doesn't support versioned libraries. - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext' - soname_spec='$libname$release$shared_ext' - finish_cmds= - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - hardcode_libdir_flag_spec_CXX='-L$libdir' - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Ideally, we could use ldconfig to report *all* directores which are - # searched for libraries, however this is still not possible. Aside from not - # being certain /sbin/ldconfig is available, command - # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, - # even though it is searched at run-time. Try to do the best guess by - # appending ld.so.conf contents (and includes) to the search path. - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd* | bitrig*) - version_type=sunos - sys_lib_dlsearch_path_spec=/usr/lib - need_lib_prefix=no - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - need_version=no - else - need_version=yes - fi - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -os2*) - libname_spec='$name' - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - # OS/2 can only load a DLL with a base name of 8 characters or less. - soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; - v=$($ECHO $release$versuffix | tr -d .-); - n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); - $ECHO $n$v`$shared_ext' - library_names_spec='${libname}_dll.$libext' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=BEGINLIBPATH - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test yes = "$with_gnu_ld"; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec; then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' - soname_spec='$libname$shared_ext.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=sco - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test yes = "$with_gnu_ld"; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test no = "$dynamic_linker" && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test yes = "$GCC"; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then - sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec -fi - -if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then - sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec -fi - -# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... -configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec - -# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code -func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" - -# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool -configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test yes = "$hardcode_automatic_CXX"; then - - # We can hardcode non-existent directories. - if test no != "$hardcode_direct_CXX" && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && - test no != "$hardcode_minus_L_CXX"; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } - -if test relink = "$hardcode_action_CXX" || - test yes = "$inherit_rpath_CXX"; then - # Fast installation is not supported - enable_fast_install=no -elif test yes = "$shlibpath_overrides_runpath" || - test no = "$enable_shared"; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test yes != "$_lt_caught_CXX_error" - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - - -# Generate an error here if attempting to build both shared and static when -# $libname.a is in $library_names_spec (as mentioned above), rather than -# wait for ar or ld to fail. -# -if test "$enable_shared" = yes && test "$enable_static" = yes; then - case $library_names_spec in - *libname.a*) - as_fn_error $? "cannot create both shared and static libraries on this system, --disable one of the two" "$LINENO" 5 - ;; - esac -fi - - if test "$enable_static" = yes; then - ENABLE_STATIC_TRUE= - ENABLE_STATIC_FALSE='#' -else - ENABLE_STATIC_TRUE='#' - ENABLE_STATIC_FALSE= -fi - - - -# Many of these library and header checks are for the benefit of -# supplementary programs. libgmp doesn't use anything too weird. - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <string.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ctype.h> -#include <stdlib.h> -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 -$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } -if ${ac_cv_header_time+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> -#include <sys/time.h> -#include <time.h> - -int -main () -{ -if ((struct tm *) 0) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_time=yes -else - ac_cv_header_time=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 -$as_echo "$ac_cv_header_time" >&6; } -if test $ac_cv_header_time = yes; then - -$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h - -fi - - -# Reasons for testing: -# float.h - not in SunOS bundled cc -# invent.h - IRIX specific -# langinfo.h - X/Open standard only, not in djgpp for instance -# locale.h - old systems won't have this -# nl_types.h - X/Open standard only, not in djgpp for instance -# (usually langinfo.h gives nl_item etc, but not on netbsd 1.4.1) -# sys/attributes.h - IRIX specific -# sys/iograph.h - IRIX specific -# sys/mman.h - not in Cray Unicos -# sys/param.h - not in mingw -# sys/processor.h - solaris specific, though also present in macos -# sys/pstat.h - HPUX specific -# sys/resource.h - not in mingw -# sys/sysctl.h - not in mingw -# sys/sysinfo.h - OSF specific -# sys/syssgi.h - IRIX specific -# sys/systemcfg.h - AIX specific -# sys/time.h - autoconf suggests testing, don't know anywhere without it -# sys/times.h - not in mingw -# machine/hal_sysinfo.h - OSF specific -# -# inttypes.h, stdint.h, unistd.h and sys/types.h are already in the autoconf -# default tests -# -for ac_header in fcntl.h float.h invent.h langinfo.h locale.h nl_types.h sys/attributes.h sys/iograph.h sys/mman.h sys/param.h sys/processor.h sys/pstat.h sys/sysinfo.h sys/syssgi.h sys/systemcfg.h sys/time.h sys/times.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -# On SunOS, sys/resource.h needs sys/time.h (for struct timeval) -for ac_header in sys/resource.h -do : - ac_fn_c_check_header_compile "$LINENO" "sys/resource.h" "ac_cv_header_sys_resource_h" "#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif -" -if test "x$ac_cv_header_sys_resource_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_RESOURCE_H 1 -_ACEOF - -fi - -done - - -# On NetBSD and OpenBSD, sys/sysctl.h needs sys/param.h for various constants -for ac_header in sys/sysctl.h -do : - ac_fn_c_check_header_compile "$LINENO" "sys/sysctl.h" "ac_cv_header_sys_sysctl_h" "#if HAVE_SYS_PARAM_H -# include <sys/param.h> -#endif -" -if test "x$ac_cv_header_sys_sysctl_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_SYSCTL_H 1 -_ACEOF - -fi - -done - - -# On OSF 4.0, <machine/hal_sysinfo.h> must have <sys/sysinfo.h> for ulong_t -for ac_header in machine/hal_sysinfo.h -do : - ac_fn_c_check_header_compile "$LINENO" "machine/hal_sysinfo.h" "ac_cv_header_machine_hal_sysinfo_h" "#if HAVE_SYS_SYSINFO_H -# include <sys/sysinfo.h> -#endif -" -if test "x$ac_cv_header_machine_hal_sysinfo_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MACHINE_HAL_SYSINFO_H 1 -_ACEOF - -fi - -done - - -# Reasons for testing: -# optarg - not declared in mingw -# fgetc, fscanf, ungetc, vfprintf - not declared in SunOS 4 -# sys_errlist, sys_nerr - not declared in SunOS 4 -# -# optarg should be in unistd.h and the rest in stdio.h, both of which are -# in the autoconf default includes. -# -# sys_errlist and sys_nerr are supposed to be in <errno.h> on SunOS according -# to the man page (but aren't), in glibc they're in stdio.h. -# -ac_fn_c_check_decl "$LINENO" "fgetc" "ac_cv_have_decl_fgetc" "$ac_includes_default" -if test "x$ac_cv_have_decl_fgetc" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FGETC $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "fscanf" "ac_cv_have_decl_fscanf" "$ac_includes_default" -if test "x$ac_cv_have_decl_fscanf" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FSCANF $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "optarg" "ac_cv_have_decl_optarg" "$ac_includes_default" -if test "x$ac_cv_have_decl_optarg" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_OPTARG $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "ungetc" "ac_cv_have_decl_ungetc" "$ac_includes_default" -if test "x$ac_cv_have_decl_ungetc" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_UNGETC $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "vfprintf" "ac_cv_have_decl_vfprintf" "$ac_includes_default" -if test "x$ac_cv_have_decl_vfprintf" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VFPRINTF $ac_have_decl -_ACEOF - -ac_fn_c_check_decl "$LINENO" "sys_errlist" "ac_cv_have_decl_sys_errlist" "#include <stdio.h> -#include <errno.h> -" -if test "x$ac_cv_have_decl_sys_errlist" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SYS_ERRLIST $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "sys_nerr" "ac_cv_have_decl_sys_nerr" "#include <stdio.h> -#include <errno.h> -" -if test "x$ac_cv_have_decl_sys_nerr" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SYS_NERR $ac_have_decl -_ACEOF - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 -$as_echo_n "checking return type of signal handlers... " >&6; } -if ${ac_cv_type_signal+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> -#include <signal.h> - -int -main () -{ -return *(signal (0, 0)) (0) == 1; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_type_signal=int -else - ac_cv_type_signal=void -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 -$as_echo "$ac_cv_type_signal" >&6; } - -cat >>confdefs.h <<_ACEOF -#define RETSIGTYPE $ac_cv_type_signal -_ACEOF - - - -# Reasons for testing: -# intmax_t - C99 -# long double - not in the HP bundled K&R cc -# long long - only in reasonably recent compilers -# ptrdiff_t - seems to be everywhere, maybe don't need to check this -# quad_t - BSD specific -# uint_least32_t - C99 -# -# the default includes are sufficient for all these types -# -ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "$ac_includes_default" -if test "x$ac_cv_type_intmax_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_INTMAX_T 1 -_ACEOF - - -fi -ac_fn_c_check_type "$LINENO" "long double" "ac_cv_type_long_double" "$ac_includes_default" -if test "x$ac_cv_type_long_double" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_LONG_DOUBLE 1 -_ACEOF - - -fi -ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default" -if test "x$ac_cv_type_long_long" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_LONG_LONG 1 -_ACEOF - - -fi -ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" -if test "x$ac_cv_type_ptrdiff_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_PTRDIFF_T 1 -_ACEOF - - -fi -ac_fn_c_check_type "$LINENO" "quad_t" "ac_cv_type_quad_t" "$ac_includes_default" -if test "x$ac_cv_type_quad_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_QUAD_T 1 -_ACEOF - - -fi -ac_fn_c_check_type "$LINENO" "uint_least32_t" "ac_cv_type_uint_least32_t" "$ac_includes_default" -if test "x$ac_cv_type_uint_least32_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_UINT_LEAST32_T 1 -_ACEOF - - -fi -ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default" -if test "x$ac_cv_type_intptr_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_INTPTR_T 1 -_ACEOF - - -fi - - -# FIXME: Really want #ifndef __cplusplus around the #define volatile -# replacement autoconf gives, since volatile is always available in C++. -# But we don't use it in C++ currently. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5 -$as_echo_n "checking for working volatile... " >&6; } -if ${ac_cv_c_volatile+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - -volatile int x; -int * volatile y = (int *) 0; -return !x && !y; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_volatile=yes -else - ac_cv_c_volatile=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 -$as_echo "$ac_cv_c_volatile" >&6; } -if test $ac_cv_c_volatile = no; then - -$as_echo "#define volatile /**/" >>confdefs.h - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 -$as_echo_n "checking for C/C++ restrict keyword... " >&6; } -if ${ac_cv_c_restrict+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_restrict=no - # The order here caters to the fact that C++ does not require restrict. - for ac_kw in __restrict __restrict__ _Restrict restrict; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -typedef int * int_ptr; - int foo (int_ptr $ac_kw ip) { - return ip[0]; - } -int -main () -{ -int s[1]; - int * $ac_kw t = s; - t[0] = 0; - return foo(t) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_restrict=$ac_kw -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - test "$ac_cv_c_restrict" != no && break - done - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 -$as_echo "$ac_cv_c_restrict" >&6; } - - case $ac_cv_c_restrict in - restrict) ;; - no) $as_echo "#define restrict /**/" >>confdefs.h - ;; - *) cat >>confdefs.h <<_ACEOF -#define restrict $ac_cv_c_restrict -_ACEOF - ;; - esac - - -# GMP_C_STDARG -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc __attribute__ ((const)) works" >&5 -$as_echo_n "checking whether gcc __attribute__ ((const)) works... " >&6; } -if ${gmp_cv_c_attribute_const+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo (int x) __attribute__ ((const)); -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gmp_cv_c_attribute_const=yes -else - gmp_cv_c_attribute_const=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_c_attribute_const" >&5 -$as_echo "$gmp_cv_c_attribute_const" >&6; } -if test $gmp_cv_c_attribute_const = yes; then - -$as_echo "#define HAVE_ATTRIBUTE_CONST 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc __attribute__ ((malloc)) works" >&5 -$as_echo_n "checking whether gcc __attribute__ ((malloc)) works... " >&6; } -if ${gmp_cv_c_attribute_malloc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.c <<EOF -void *foo (int x) __attribute__ ((malloc)); -EOF -gmp_compile="$CC $CFLAGS $CPPFLAGS -c conftest.c >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if grep "attribute directive ignored" conftest.out >/dev/null; then - gmp_cv_c_attribute_malloc=no - else - gmp_cv_c_attribute_malloc=yes - fi -else - gmp_cv_c_attribute_malloc=no -fi -cat conftest.out >&5 -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_c_attribute_malloc" >&5 -$as_echo "$gmp_cv_c_attribute_malloc" >&6; } -if test $gmp_cv_c_attribute_malloc = yes; then - -$as_echo "#define HAVE_ATTRIBUTE_MALLOC 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc __attribute__ ((mode (XX))) works" >&5 -$as_echo_n "checking whether gcc __attribute__ ((mode (XX))) works... " >&6; } -if ${gmp_cv_c_attribute_mode+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -typedef int SItype __attribute__ ((mode (SI))); -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gmp_cv_c_attribute_mode=yes -else - gmp_cv_c_attribute_mode=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_c_attribute_mode" >&5 -$as_echo "$gmp_cv_c_attribute_mode" >&6; } -if test $gmp_cv_c_attribute_mode = yes; then - -$as_echo "#define HAVE_ATTRIBUTE_MODE 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc __attribute__ ((noreturn)) works" >&5 -$as_echo_n "checking whether gcc __attribute__ ((noreturn)) works... " >&6; } -if ${gmp_cv_c_attribute_noreturn+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -void foo (int x) __attribute__ ((noreturn)); -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gmp_cv_c_attribute_noreturn=yes -else - gmp_cv_c_attribute_noreturn=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_c_attribute_noreturn" >&5 -$as_echo "$gmp_cv_c_attribute_noreturn" >&6; } -if test $gmp_cv_c_attribute_noreturn = yes; then - -$as_echo "#define HAVE_ATTRIBUTE_NORETURN 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc hidden aliases work" >&5 -$as_echo_n "checking whether gcc hidden aliases work... " >&6; } -if ${gmp_cv_c_hidden_alias+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -void hid() __attribute__ ((visibility("hidden"))); -void hid() {} -void pub() __attribute__ ((alias("hid"))); -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gmp_cv_c_hidden_alias=yes -else - gmp_cv_c_hidden_alias=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_c_hidden_alias" >&5 -$as_echo "$gmp_cv_c_hidden_alias" >&6; } -if test $gmp_cv_c_hidden_alias = yes; then - -$as_echo "#define HAVE_HIDDEN_ALIAS 1" >>confdefs.h - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -$as_echo_n "checking for inline... " >&6; } -if ${ac_cv_c_inline+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __cplusplus -typedef int foo_t; -static $ac_kw foo_t static_foo () {return 0; } -$ac_kw foo_t foo () {return 0; } -#endif - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_inline=$ac_kw -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - test "$ac_cv_c_inline" != no && break -done - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -$as_echo "$ac_cv_c_inline" >&6; } - -case $ac_cv_c_inline in - inline | yes) ;; - *) - case $ac_cv_c_inline in - no) ac_val=;; - *) ac_val=$ac_cv_c_inline;; - esac - cat >>confdefs.h <<_ACEOF -#ifndef __cplusplus -#define inline $ac_val -#endif -_ACEOF - ;; -esac - - -case $ac_cv_c_inline in -no) ;; -*) - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define __GMP_WITHIN_CONFIGURE_INLINE 1 -#define __GMP_WITHIN_CONFIGURE 1 /* ignore template stuff */ -#define GMP_NAIL_BITS $GMP_NAIL_BITS -#define GMP_LIMB_BITS 123 -$DEFN_LONG_LONG_LIMB -#include "$srcdir/gmp-h.in" - -#ifndef __GMP_EXTERN_INLINE -die die die -#endif - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - case $ac_cv_c_inline in - yes) tmp_inline=inline ;; - *) tmp_inline=$ac_cv_c_inline ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: gmp.h doesnt recognise compiler \"$tmp_inline\", inlines will be unavailable" >&5 -$as_echo "$as_me: WARNING: gmp.h doesnt recognise compiler \"$tmp_inline\", inlines will be unavailable" >&2;} -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ;; -esac - - -# from libtool -LIBM= -case $host in -*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _mwvalidcheckl in -lmw" >&5 -$as_echo_n "checking for _mwvalidcheckl in -lmw... " >&6; } -if ${ac_cv_lib_mw__mwvalidcheckl+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lmw $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char _mwvalidcheckl (); -int -main () -{ -return _mwvalidcheckl (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_mw__mwvalidcheckl=yes -else - ac_cv_lib_mw__mwvalidcheckl=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mw__mwvalidcheckl" >&5 -$as_echo "$ac_cv_lib_mw__mwvalidcheckl" >&6; } -if test "x$ac_cv_lib_mw__mwvalidcheckl" = xyes; then : - LIBM=-lmw -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 -$as_echo_n "checking for cos in -lm... " >&6; } -if ${ac_cv_lib_m_cos+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char cos (); -int -main () -{ -return cos (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_m_cos=yes -else - ac_cv_lib_m_cos=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 -$as_echo "$ac_cv_lib_m_cos" >&6; } -if test "x$ac_cv_lib_m_cos" = xyes; then : - LIBM="$LIBM -lm" -fi - - ;; -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 -$as_echo_n "checking for cos in -lm... " >&6; } -if ${ac_cv_lib_m_cos+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char cos (); -int -main () -{ -return cos (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_m_cos=yes -else - ac_cv_lib_m_cos=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 -$as_echo "$ac_cv_lib_m_cos" >&6; } -if test "x$ac_cv_lib_m_cos" = xyes; then : - LIBM=-lm -fi - - ;; -esac - - - - -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 -$as_echo_n "checking for working alloca.h... " >&6; } -if ${gmp_cv_header_alloca+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <alloca.h> -int -main () -{ -char *p = (char *) alloca (2 * sizeof (int)); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gmp_cv_header_alloca=yes -else - gmp_cv_header_alloca=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_header_alloca" >&5 -$as_echo "$gmp_cv_header_alloca" >&6; } -if test $gmp_cv_header_alloca = yes; then - -$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca (via gmp-impl.h)" >&5 -$as_echo_n "checking for alloca (via gmp-impl.h)... " >&6; } -if ${gmp_cv_func_alloca+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define __GMP_WITHIN_CONFIGURE 1 /* ignore template stuff */ -#define GMP_NAIL_BITS $GMP_NAIL_BITS -#define GMP_LIMB_BITS 123 -$DEFN_LONG_LONG_LIMB -#include "$srcdir/gmp-h.in" - -#include "$srcdir/gmp-impl.h" - -int -main () -{ -char *p = (char *) alloca (1); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gmp_cv_func_alloca=yes -else - gmp_cv_func_alloca=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_func_alloca" >&5 -$as_echo "$gmp_cv_func_alloca" >&6; } -if test $gmp_cv_func_alloca = yes; then - -$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to allocate temporary memory" >&5 -$as_echo_n "checking how to allocate temporary memory... " >&6; } -if ${gmp_cv_option_alloca+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $enable_alloca in - yes) - gmp_cv_option_alloca=alloca - ;; - no) - gmp_cv_option_alloca=malloc-reentrant - ;; - reentrant | notreentrant) - case $gmp_cv_func_alloca in - yes) gmp_cv_option_alloca=alloca ;; - *) gmp_cv_option_alloca=malloc-$enable_alloca ;; - esac - ;; - *) - gmp_cv_option_alloca=$enable_alloca - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_option_alloca" >&5 -$as_echo "$gmp_cv_option_alloca" >&6; } - - - -case $gmp_cv_option_alloca in - alloca) - if test $gmp_cv_func_alloca = no; then - as_fn_error $? "--enable-alloca=alloca specified, but alloca not available" "$LINENO" 5 - fi - $as_echo "#define WANT_TMP_ALLOCA 1" >>confdefs.h - - TAL_OBJECT=tal-reent$U.lo - ;; - malloc-reentrant) - $as_echo "#define WANT_TMP_REENTRANT 1" >>confdefs.h - - TAL_OBJECT=tal-reent$U.lo - ;; - malloc-notreentrant) - $as_echo "#define WANT_TMP_NOTREENTRANT 1" >>confdefs.h - - TAL_OBJECT=tal-notreent$U.lo - ;; - debug) - $as_echo "#define WANT_TMP_DEBUG 1" >>confdefs.h - - TAL_OBJECT=tal-debug$U.lo - ;; - *) - # checks at the start of configure.in should protect us - as_fn_error $? "unrecognised --enable-alloca=$gmp_cv_option_alloca" "$LINENO" 5 - ;; -esac - - - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdio.h> -#define __GMP_WITHIN_CONFIGURE 1 /* ignore template stuff */ -#define GMP_NAIL_BITS $GMP_NAIL_BITS -#define GMP_LIMB_BITS 123 -$DEFN_LONG_LONG_LIMB -#include "$srcdir/gmp-h.in" - -#if ! _GMP_H_HAVE_FILE -die die die -#endif - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: gmp.h doesnt recognise <stdio.h>, FILE prototypes will be unavailable" >&5 -$as_echo "$as_me: WARNING: gmp.h doesnt recognise <stdio.h>, FILE prototypes will be unavailable" >&2;} -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if ${ac_cv_c_bigendian+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - #include <sys/param.h> - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - #include <sys/param.h> - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <limits.h> - -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <limits.h> - -int -main () -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; - -int -main () -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - $as_echo "#define HAVE_LIMB_BIG_ENDIAN 1" >>confdefs.h - - -echo "define_not_for_expansion(\`HAVE_LIMB_BIG_ENDIAN')" >> $gmp_tmpconfigm4p -;; #( - no) - $as_echo "#define HAVE_LIMB_LITTLE_ENDIAN 1" >>confdefs.h - - -echo "define_not_for_expansion(\`HAVE_LIMB_LITTLE_ENDIAN')" >> $gmp_tmpconfigm4p - - ;; #( - universal) - -$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h - - ;; #( - *) - : ;; - esac - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking format of \`double' floating point" >&5 -$as_echo_n "checking format of \`double' floating point... " >&6; } -if ${gmp_cv_c_double_format+:} false; then : - $as_echo_n "(cached) " >&6 -else - gmp_cv_c_double_format=unknown -cat >conftest.c <<\EOF -struct foo { - char before[8]; - double x; - char after[8]; -}; -extern struct foo foo; -struct foo foo = { - { '\001', '\043', '\105', '\147', '\211', '\253', '\315', '\357' }, - -123456789.0, - { '\376', '\334', '\272', '\230', '\166', '\124', '\062', '\020' }, -}; -EOF -gmp_compile="$CC $CFLAGS $CPPFLAGS -c conftest.c >&5 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then -cat >conftest.awk <<\EOF - -BEGIN { - found = 0 -} - -{ - for (f = 2; f <= NF; f++) - { - for (i = 0; i < 23; i++) - got[i] = got[i+1]; - got[23] = $f; - - # match the special begin and end sequences - if (got[0] != "001") continue - if (got[1] != "043") continue - if (got[2] != "105") continue - if (got[3] != "147") continue - if (got[4] != "211") continue - if (got[5] != "253") continue - if (got[6] != "315") continue - if (got[7] != "357") continue - if (got[16] != "376") continue - if (got[17] != "334") continue - if (got[18] != "272") continue - if (got[19] != "230") continue - if (got[20] != "166") continue - if (got[21] != "124") continue - if (got[22] != "062") continue - if (got[23] != "020") continue - - saw = " (" got[8] " " got[9] " " got[10] " " got[11] " " got[12] " " got[13] " " got[14] " " got[15] ")" - - if (got[8] == "000" && \ - got[9] == "000" && \ - got[10] == "000" && \ - got[11] == "124" && \ - got[12] == "064" && \ - got[13] == "157" && \ - got[14] == "235" && \ - got[15] == "301") - { - print "IEEE little endian" - found = 1 - exit - } - - # Little endian with the two 4-byte halves swapped, as used by ARM - # when the chip is in little endian mode. - # - if (got[8] == "064" && \ - got[9] == "157" && \ - got[10] == "235" && \ - got[11] == "301" && \ - got[12] == "000" && \ - got[13] == "000" && \ - got[14] == "000" && \ - got[15] == "124") - { - print "IEEE little endian, swapped halves" - found = 1 - exit - } - - # gcc 2.95.4 on one GNU/Linux ARM system was seen generating 000 in - # the last byte, whereas 124 is correct. Not sure where the bug - # actually lies, but a running program didn't seem to get a full - # mantissa worth of working bits. - # - # We match this case explicitly so we can give a nice result message, - # but we deliberately exclude it from the normal IEEE double setups - # since it's too broken. - # - if (got[8] == "064" && \ - got[9] == "157" && \ - got[10] == "235" && \ - got[11] == "301" && \ - got[12] == "000" && \ - got[13] == "000" && \ - got[14] == "000" && \ - got[15] == "000") - { - print "bad ARM software floats" - found = 1 - exit - } - - if (got[8] == "301" && \ - got[9] == "235" && \ - got[10] == "157" && \ - got[11] == "064" && \ - got[12] == "124" && \ - got[13] == "000" && \ - got[14] == "000" && \ - got[15] == "000") - { - print "IEEE big endian" - found = 1 - exit - } - - if (got[8] == "353" && \ - got[9] == "315" && \ - got[10] == "242" && \ - got[11] == "171" && \ - got[12] == "000" && \ - got[13] == "240" && \ - got[14] == "000" && \ - got[15] == "000") - { - print "VAX D" - found = 1 - exit - } - - if (got[8] == "275" && \ - got[9] == "301" && \ - got[10] == "064" && \ - got[11] == "157" && \ - got[12] == "000" && \ - got[13] == "124" && \ - got[14] == "000" && \ - got[15] == "000") - { - print "VAX G" - found = 1 - exit - } - - if (got[8] == "300" && \ - got[9] == "033" && \ - got[10] == "353" && \ - got[11] == "171" && \ - got[12] == "242" && \ - got[13] == "240" && \ - got[14] == "000" && \ - got[15] == "000") - { - print "Cray CFP" - found = 1 - exit - } - } -} - -END { - if (! found) - print "unknown", saw -} - -EOF - gmp_cv_c_double_format=`od -b conftest.$OBJEXT | $AWK -f conftest.awk` - case $gmp_cv_c_double_format in - unknown*) - echo "cannot match anything, conftest.$OBJEXT contains" >&5 - od -b conftest.$OBJEXT >&5 - ;; - esac -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: oops, cannot compile test program" >&5 -$as_echo "$as_me: WARNING: oops, cannot compile test program" >&2;} -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_c_double_format" >&5 -$as_echo "$gmp_cv_c_double_format" >&6; } - - - -case $gmp_cv_c_double_format in - "IEEE big endian") - $as_echo "#define HAVE_DOUBLE_IEEE_BIG_ENDIAN 1" >>confdefs.h - - -echo "define_not_for_expansion(\`HAVE_DOUBLE_IEEE_BIG_ENDIAN')" >> $gmp_tmpconfigm4p - - ;; - "IEEE little endian") - $as_echo "#define HAVE_DOUBLE_IEEE_LITTLE_ENDIAN 1" >>confdefs.h - - -echo "define_not_for_expansion(\`HAVE_DOUBLE_IEEE_LITTLE_ENDIAN')" >> $gmp_tmpconfigm4p - - ;; - "IEEE little endian, swapped halves") - $as_echo "#define HAVE_DOUBLE_IEEE_LITTLE_SWAPPED 1" >>confdefs.h - ;; - "VAX D") - $as_echo "#define HAVE_DOUBLE_VAX_D 1" >>confdefs.h - ;; - "VAX G") - $as_echo "#define HAVE_DOUBLE_VAX_G 1" >>confdefs.h - ;; - "Cray CFP") - $as_echo "#define HAVE_DOUBLE_CRAY_CFP 1" >>confdefs.h - ;; - "bad ARM software floats") - ;; - unknown*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not determine float format." >&5 -$as_echo "$as_me: WARNING: Could not determine float format." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Conversions to and from \"double\" may be slow." >&5 -$as_echo "$as_me: WARNING: Conversions to and from \"double\" may be slow." >&2;} - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: oops, unrecognised float format: $gmp_cv_c_double_format" >&5 -$as_echo "$as_me: WARNING: oops, unrecognised float format: $gmp_cv_c_double_format" >&2;} - ;; -esac - - - -# Reasons for testing: -# alarm - not in mingw -# attr_get - IRIX specific -# clock_gettime - not in glibc 2.2.4, only very recent systems -# cputime - not in glibc -# getsysinfo - OSF specific -# getrusage - not in mingw -# gettimeofday - not in mingw -# mmap - not in mingw, djgpp -# nl_langinfo - X/Open standard only, not in djgpp for instance -# obstack_vprintf - glibc specific -# processor_info - solaris specific -# pstat_getprocessor - HPUX specific (10.x and up) -# raise - an ANSI-ism, though probably almost universal by now -# read_real_time - AIX specific -# sigaction - not in mingw -# sigaltstack - not in mingw, or old AIX (reputedly) -# sigstack - not in mingw -# strerror - not in SunOS -# strnlen - glibc extension (some other systems too) -# syssgi - IRIX specific -# times - not in mingw -# -# AC_FUNC_STRNLEN is not used because we don't want the AC_LIBOBJ -# replacement setups it gives. It detects a faulty strnlen on AIX, but -# missing out on that test is ok since our only use of strnlen is in -# __gmp_replacement_vsnprintf which is not required on AIX since it has a -# vsnprintf. -# -for ac_func in alarm attr_get clock cputime getpagesize getrusage gettimeofday getsysinfo localeconv memset mmap mprotect nl_langinfo obstack_vprintf popen processor_info pstat_getprocessor raise read_real_time sigaction sigaltstack sigstack syssgi strchr strerror strnlen strtol strtoul sysconf sysctl sysctlbyname times -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -# clock_gettime is in librt on *-*-osf5.1 and on glibc, so att -lrt to -# TUNE_LIBS if needed. On linux (tested on x86_32, 2.6.26), -# clock_getres reports ns accuracy, while in a quick test on osf -# clock_getres said only 1 millisecond. - -old_LIBS="$LIBS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 -$as_echo_n "checking for library containing clock_gettime... " >&6; } -if ${ac_cv_search_clock_gettime+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char clock_gettime (); -int -main () -{ -return clock_gettime (); - ; - return 0; -} -_ACEOF -for ac_lib in '' rt; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_clock_gettime=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_clock_gettime+:} false; then : - break -fi -done -if ${ac_cv_search_clock_gettime+:} false; then : - -else - ac_cv_search_clock_gettime=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 -$as_echo "$ac_cv_search_clock_gettime" >&6; } -ac_res=$ac_cv_search_clock_gettime -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - - -$as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h - -fi - -TUNE_LIBS="$LIBS" -LIBS="$old_LIBS" - - - -ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf" -if test "x$ac_cv_func_vsnprintf" = xyes; then : - gmp_vsnprintf_exists=yes -else - gmp_vsnprintf_exists=no -fi - -if test "$gmp_vsnprintf_exists" = no; then - gmp_cv_func_vsnprintf=no -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vsnprintf works" >&5 -$as_echo_n "checking whether vsnprintf works... " >&6; } -if ${gmp_cv_func_vsnprintf+:} false; then : - $as_echo_n "(cached) " >&6 -else - gmp_cv_func_vsnprintf=yes - for i in 'return check ("hello world");' 'int n; return check ("%nhello world", &n);'; do - if test "$cross_compiling" = yes; then : - gmp_cv_func_vsnprintf=probably; break -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include <string.h> /* for strcmp */ -#include <stdio.h> /* for vsnprintf */ - -#include <stdarg.h> - -int -check (const char *fmt, ...) -{ - static char buf[128]; - va_list ap; - int ret; - - va_start (ap, fmt); - - ret = vsnprintf (buf, 4, fmt, ap); - - if (strcmp (buf, "hel") != 0) - return 1; - - /* allowed return values */ - if (ret != -1 && ret != 3 && ret != 11) - return 2; - - return 0; -} - -int -main () -{ -$i -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - : -else - gmp_cv_func_vsnprintf=no; break -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - done - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_func_vsnprintf" >&5 -$as_echo "$gmp_cv_func_vsnprintf" >&6; } - if test "$gmp_cv_func_vsnprintf" = probably; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for properly working vsnprintf when cross compiling, will assume it's ok" >&5 -$as_echo "$as_me: WARNING: cannot check for properly working vsnprintf when cross compiling, will assume it's ok" >&2;} - fi - if test "$gmp_cv_func_vsnprintf" != no; then - -$as_echo "#define HAVE_VSNPRINTF 1" >>confdefs.h - - fi -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sscanf needs writable input" >&5 -$as_echo_n "checking whether sscanf needs writable input... " >&6; } -if ${gmp_cv_func_sscanf_writable_input+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-hpux9 | *-*-hpux9.*) - gmp_cv_func_sscanf_writable_input=yes ;; - *) gmp_cv_func_sscanf_writable_input=no ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_func_sscanf_writable_input" >&5 -$as_echo "$gmp_cv_func_sscanf_writable_input" >&6; } -case $gmp_cv_func_sscanf_writable_input in - yes) -$as_echo "#define SSCANF_WRITABLE_INPUT 1" >>confdefs.h - ;; - no) ;; - *) as_fn_error $? "unrecognised \$gmp_cv_func_sscanf_writable_input" "$LINENO" 5 ;; -esac - - -# Reasons for checking: -# pst_processor psp_iticksperclktick - not in hpux 9 -# -ac_fn_c_check_member "$LINENO" "struct pst_processor" "psp_iticksperclktick" "ac_cv_member_struct_pst_processor_psp_iticksperclktick" "#include <sys/pstat.h> -" -if test "x$ac_cv_member_struct_pst_processor_psp_iticksperclktick" = xyes; then : - -$as_echo "#define HAVE_PSP_ITICKSPERCLKTICK 1" >>confdefs.h - -fi - - -# C++ tests, when required -# -if test $enable_cxx = yes; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - # Reasons for testing: - # <sstream> - not in g++ 2.95.2 - # std::locale - not in g++ 2.95.4 - # - -for ac_header in sstream -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sstream" "ac_cv_header_sstream" "$ac_includes_default" -if test "x$ac_cv_header_sstream" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SSTREAM 1 -_ACEOF - -fi - -done - - ac_fn_cxx_check_type "$LINENO" "std::locale" "ac_cv_type_std__locale" "#include <locale> -" -if test "x$ac_cv_type_std__locale" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STD__LOCALE 1 -_ACEOF - - -fi - - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi - - -# Pick the correct source files in $path and link them to mpn/. -# $gmp_mpn_functions lists all functions we need. -# -# The rule is to find a file with the function name and a .asm, .S, -# .s, or .c extension. Certain multi-function files with special names -# can provide some functions too. (mpn/Makefile.am passes -# -DOPERATION_<func> to get them to generate the right code.) - -# Note: $gmp_mpn_functions must have mod_1 before pre_mod_1 so the former -# can optionally provide the latter as an extra entrypoint. Likewise -# divrem_1 and pre_divrem_1. - -gmp_mpn_functions_optional="umul udiv \ - invert_limb sqr_diagonal sqr_diag_addlsh1 \ - mul_2 mul_3 mul_4 mul_5 mul_6 \ - addmul_2 addmul_3 addmul_4 addmul_5 addmul_6 addmul_7 addmul_8 \ - addlsh1_n sublsh1_n rsblsh1_n rsh1add_n rsh1sub_n \ - addlsh2_n sublsh2_n rsblsh2_n \ - addlsh_n sublsh_n rsblsh_n \ - add_n_sub_n addaddmul_1msb0" - -gmp_mpn_functions="$extra_functions \ - add add_1 add_n sub sub_1 sub_n cnd_add_n cnd_sub_n cnd_swap neg com \ - mul_1 addmul_1 submul_1 \ - add_err1_n add_err2_n add_err3_n sub_err1_n sub_err2_n sub_err3_n \ - lshift rshift dive_1 diveby3 divis divrem divrem_1 divrem_2 \ - fib2_ui mod_1 mod_34lsub1 mode1o pre_divrem_1 pre_mod_1 dump \ - mod_1_1 mod_1_2 mod_1_3 mod_1_4 lshiftc \ - mul mul_fft mul_n sqr mul_basecase sqr_basecase nussbaumer_mul \ - mulmid_basecase toom42_mulmid mulmid_n mulmid \ - random random2 pow_1 \ - rootrem sqrtrem sizeinbase get_str set_str \ - scan0 scan1 popcount hamdist cmp zero_p \ - perfsqr perfpow \ - gcd_1 gcd gcdext_1 gcdext gcd_subdiv_step \ - gcdext_lehmer \ - div_q tdiv_qr jacbase jacobi_2 jacobi get_d \ - matrix22_mul matrix22_mul1_inverse_vector \ - hgcd_matrix hgcd2 hgcd_step hgcd_reduce hgcd hgcd_appr \ - hgcd2_jacobi hgcd_jacobi \ - mullo_n mullo_basecase sqrlo sqrlo_basecase \ - toom22_mul toom32_mul toom42_mul toom52_mul toom62_mul \ - toom33_mul toom43_mul toom53_mul toom54_mul toom63_mul \ - toom44_mul \ - toom6h_mul toom6_sqr toom8h_mul toom8_sqr \ - toom_couple_handling \ - toom2_sqr toom3_sqr toom4_sqr \ - toom_eval_dgr3_pm1 toom_eval_dgr3_pm2 \ - toom_eval_pm1 toom_eval_pm2 toom_eval_pm2exp toom_eval_pm2rexp \ - toom_interpolate_5pts toom_interpolate_6pts toom_interpolate_7pts \ - toom_interpolate_8pts toom_interpolate_12pts toom_interpolate_16pts \ - invertappr invert binvert mulmod_bnm1 sqrmod_bnm1 \ - div_qr_1 div_qr_1n_pi1 \ - div_qr_2 div_qr_2n_pi1 div_qr_2u_pi1 \ - sbpi1_div_q sbpi1_div_qr sbpi1_divappr_q \ - dcpi1_div_q dcpi1_div_qr dcpi1_divappr_q \ - mu_div_qr mu_divappr_q mu_div_q \ - bdiv_q_1 \ - sbpi1_bdiv_q sbpi1_bdiv_qr \ - dcpi1_bdiv_q dcpi1_bdiv_qr \ - mu_bdiv_q mu_bdiv_qr \ - bdiv_q bdiv_qr broot brootinv bsqrt bsqrtinv \ - divexact bdiv_dbm1c redc_1 redc_2 redc_n powm powlo sec_powm \ - sec_mul sec_sqr sec_div_qr sec_div_r sec_pi1_div_qr sec_pi1_div_r \ - sec_add_1 sec_sub_1 sec_invert \ - trialdiv remove \ - and_n andn_n nand_n ior_n iorn_n nior_n xor_n xnor_n \ - copyi copyd zero sec_tabselect \ - comb_tables \ - $gmp_mpn_functions_optional" - - - -# the list of all object files used by mpn/Makefile.in and the -# top-level Makefile.in, respectively -mpn_objects= -mpn_objs_in_libgmp= - -# links from the sources, to be removed by "make distclean" -gmp_srclinks= - - -# mpn_relative_top_srcdir is $top_srcdir, but for use from within the mpn -# build directory. If $srcdir is relative then we use a relative path too, -# so the two trees can be moved together. -case $srcdir in - [\\/]* | ?:[\\/]*) # absolute, as per autoconf - mpn_relative_top_srcdir=$srcdir ;; - *) # relative - mpn_relative_top_srcdir=../$srcdir ;; -esac - - - - - - -# Fat binary setups. -# -# We proceed through each $fat_path directory, and look for $fat_function -# routines there. Those found are incorporated in the build by generating a -# little mpn/<foo>.asm or mpn/<foo>.c file in the build directory, with -# suitable function renaming, and adding that to $mpn_objects (the same as a -# normal mpn file). -# -# fat.h is generated with macros to let internal calls to each $fat_function -# go directly through __gmpn_cpuvec, plus macros and declarations helping to -# setup that structure, on a per-directory basis ready for -# mpn/<cpu>/fat/fat.c. -# -# fat.h includes thresholds listed in $fat_thresholds, extracted from -# gmp-mparam.h in each directory. An overall maximum for each threshold is -# established, for use in making fixed size arrays of temporary space. -# (Eg. MUL_TOOM33_THRESHOLD_LIMIT used by mpn/generic/mul.c.) -# -# It'd be possible to do some of this manually, but when there's more than a -# few functions and a few directories it becomes very tedious, and very -# prone to having some routine accidentally omitted. On that basis it seems -# best to automate as much as possible, even if the code to do so is a bit -# ugly. -# - -if test -n "$fat_path"; then - # Usually the mpn build directory is created with mpn/Makefile - # instantiation, but we want to write to it sooner. - mkdir mpn 2>/dev/null - - echo "/* fat.h - setups for fat binaries." >fat.h - echo " Generated by configure - DO NOT EDIT. */" >>fat.h - - -$as_echo "#define WANT_FAT_BINARY 1" >>confdefs.h - - -echo 'define(<WANT_FAT_BINARY>, <yes>)' >>$gmp_tmpconfigm4 - - - # Don't want normal copies of fat functions - for tmp_fn in $fat_functions; do - remove_from_list_tmp= -for remove_from_list_i in $gmp_mpn_functions; do - if test $remove_from_list_i = $tmp_fn; then :; - else - remove_from_list_tmp="$remove_from_list_tmp $remove_from_list_i" - fi -done -gmp_mpn_functions=$remove_from_list_tmp - - remove_from_list_tmp= -for remove_from_list_i in $gmp_mpn_functions_optional; do - if test $remove_from_list_i = $tmp_fn; then :; - else - remove_from_list_tmp="$remove_from_list_tmp $remove_from_list_i" - fi -done -gmp_mpn_functions_optional=$remove_from_list_tmp - - done - - for tmp_fn in $fat_functions; do - case $tmp_fn in - dive_1) tmp_fbase=divexact_1 ;; - diveby3) tmp_fbase=divexact_by3c ;; - pre_divrem_1) tmp_fbase=preinv_divrem_1 ;; - mode1o) tmp_fbase=modexact_1c_odd ;; - pre_mod_1) tmp_fbase=preinv_mod_1 ;; - mod_1_1) tmp_fbase=mod_1_1p ;; - mod_1_1_cps) tmp_fbase=mod_1_1p_cps ;; - mod_1_2) tmp_fbase=mod_1s_2p ;; - mod_1_2_cps) tmp_fbase=mod_1s_2p_cps ;; - mod_1_3) tmp_fbase=mod_1s_3p ;; - mod_1_3_cps) tmp_fbase=mod_1s_3p_cps ;; - mod_1_4) tmp_fbase=mod_1s_4p ;; - mod_1_4_cps) tmp_fbase=mod_1s_4p_cps ;; - *) tmp_fbase=$tmp_fn ;; -esac - - echo " -#ifndef OPERATION_$tmp_fn -#undef mpn_$tmp_fbase -#define mpn_$tmp_fbase (*__gmpn_cpuvec.$tmp_fbase) -#endif -DECL_$tmp_fbase (__MPN(${tmp_fbase}_init));" >>fat.h - # encourage various macros to use fat functions - cat >>confdefs.h <<_ACEOF -#define HAVE_NATIVE_mpn_$tmp_fbase 1 -_ACEOF - - done - - echo "" >>fat.h - echo "/* variable thresholds */" >>fat.h - for tmp_tn in $fat_thresholds; do - echo "#undef $tmp_tn" >>fat.h - echo "#define $tmp_tn CPUVEC_THRESHOLD (`echo $tmp_tn | tr [A-Z] [a-z]`)" >>fat.h - done - - echo " -/* Copy all fields into __gmpn_cpuvec. - memcpy is not used because it might operate byte-wise (depending on its - implementation), and we need the function pointer writes to be atomic. - "volatile" discourages the compiler from trying to optimize this. */ -#define CPUVEC_INSTALL(vec) \\ - do { \\ - volatile struct cpuvec_t *p = &__gmpn_cpuvec; \\" >>fat.h - for tmp_fn in $fat_functions; do - case $tmp_fn in - dive_1) tmp_fbase=divexact_1 ;; - diveby3) tmp_fbase=divexact_by3c ;; - pre_divrem_1) tmp_fbase=preinv_divrem_1 ;; - mode1o) tmp_fbase=modexact_1c_odd ;; - pre_mod_1) tmp_fbase=preinv_mod_1 ;; - mod_1_1) tmp_fbase=mod_1_1p ;; - mod_1_1_cps) tmp_fbase=mod_1_1p_cps ;; - mod_1_2) tmp_fbase=mod_1s_2p ;; - mod_1_2_cps) tmp_fbase=mod_1s_2p_cps ;; - mod_1_3) tmp_fbase=mod_1s_3p ;; - mod_1_3_cps) tmp_fbase=mod_1s_3p_cps ;; - mod_1_4) tmp_fbase=mod_1s_4p ;; - mod_1_4_cps) tmp_fbase=mod_1s_4p_cps ;; - *) tmp_fbase=$tmp_fn ;; -esac - - echo " p->$tmp_fbase = vec.$tmp_fbase; \\" >>fat.h - done - for tmp_tn in $fat_thresholds; do - tmp_field_name=`echo $tmp_tn | tr [A-Z] [a-z]` - echo " p->$tmp_field_name = vec.$tmp_field_name; \\" >>fat.h - done - echo " } while (0)" >>fat.h - - echo " -/* A helper to check all fields are filled. */ -#define ASSERT_CPUVEC(vec) \\ - do { \\" >>fat.h - for tmp_fn in $fat_functions; do - case $tmp_fn in - dive_1) tmp_fbase=divexact_1 ;; - diveby3) tmp_fbase=divexact_by3c ;; - pre_divrem_1) tmp_fbase=preinv_divrem_1 ;; - mode1o) tmp_fbase=modexact_1c_odd ;; - pre_mod_1) tmp_fbase=preinv_mod_1 ;; - mod_1_1) tmp_fbase=mod_1_1p ;; - mod_1_1_cps) tmp_fbase=mod_1_1p_cps ;; - mod_1_2) tmp_fbase=mod_1s_2p ;; - mod_1_2_cps) tmp_fbase=mod_1s_2p_cps ;; - mod_1_3) tmp_fbase=mod_1s_3p ;; - mod_1_3_cps) tmp_fbase=mod_1s_3p_cps ;; - mod_1_4) tmp_fbase=mod_1s_4p ;; - mod_1_4_cps) tmp_fbase=mod_1s_4p_cps ;; - *) tmp_fbase=$tmp_fn ;; -esac - - echo " ASSERT (vec.$tmp_fbase != NULL); \\" >>fat.h - done - for tmp_tn in $fat_thresholds; do - tmp_field_name=`echo $tmp_tn | tr [A-Z] [a-z]` - echo " ASSERT (vec.$tmp_field_name != 0); \\" >>fat.h - done - echo " } while (0)" >>fat.h - - echo " -/* Call ITERATE(field) for each fat threshold field. */ -#define ITERATE_FAT_THRESHOLDS() \\ - do { \\" >>fat.h - for tmp_tn in $fat_thresholds; do - tmp_field_name=`echo $tmp_tn | tr [A-Z] [a-z]` - echo " ITERATE ($tmp_tn, $tmp_field_name); \\" >>fat.h - done - echo " } while (0)" >>fat.h - - for tmp_dir in $fat_path; do - CPUVEC_SETUP= - THRESH_ASM_SETUP= - echo "" >>fat.h - tmp_suffix=`echo $tmp_dir | sed -e '/\//s:^[^/]*/::' -e 's:[\\/]:_:g'` - - # In order to keep names unique on a DOS 8.3 filesystem, use a prefix - # (rather than a suffix) for the generated file names, and abbreviate. - case $tmp_suffix in - pentium) tmp_prefix=p ;; - pentium_mmx) tmp_prefix=pm ;; - p6_mmx) tmp_prefix=p2 ;; - p6_p3mmx) tmp_prefix=p3 ;; - pentium4) tmp_prefix=p4 ;; - pentium4_mmx) tmp_prefix=p4m ;; - pentium4_sse2) tmp_prefix=p4s ;; - k6_mmx) tmp_prefix=k6m ;; - k6_k62mmx) tmp_prefix=k62 ;; - k7_mmx) tmp_prefix=k7m ;; - *) tmp_prefix=$tmp_suffix ;; - esac - - # Extract desired thresholds from gmp-mparam.h file in this directory, - # if present. - tmp_mparam=$srcdir/mpn/$tmp_dir/gmp-mparam.h - if test -f $tmp_mparam; then - for tmp_tn in $fat_thresholds; do - tmp_thresh=`sed -n "s/^#define $tmp_tn[ ]*\\([0-9][0-9]*\\).*$/\\1/p" $tmp_mparam` - if test -n "$tmp_thresh"; then - THRESH_ASM_SETUP="${THRESH_ASM_SETUP}define($tmp_tn,$tmp_thresh) -" - CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.`echo $tmp_tn | tr [A-Z] [a-z]` = $tmp_thresh; \\ -" - eval tmp_limit=\$${tmp_tn}_LIMIT - if test -z "$tmp_limit"; then - tmp_limit=0 - fi - if test $tmp_thresh -gt $tmp_limit; then - eval ${tmp_tn}_LIMIT=$tmp_thresh - fi - fi - done - fi - - for tmp_fn in $fat_functions; do - # functions that can be provided by multi-function files -tmp_mulfunc= -case $tmp_fn in - add_n|sub_n) tmp_mulfunc="aors_n" ;; - add_err1_n|sub_err1_n) - tmp_mulfunc="aors_err1_n" ;; - add_err2_n|sub_err2_n) - tmp_mulfunc="aors_err2_n" ;; - add_err3_n|sub_err3_n) - tmp_mulfunc="aors_err3_n" ;; - cnd_add_n|cnd_sub_n) tmp_mulfunc="cnd_aors_n" ;; - sec_add_1|sec_sub_1) tmp_mulfunc="sec_aors_1" ;; - addmul_1|submul_1) tmp_mulfunc="aorsmul_1" ;; - mul_2|addmul_2) tmp_mulfunc="aormul_2" ;; - mul_3|addmul_3) tmp_mulfunc="aormul_3" ;; - mul_4|addmul_4) tmp_mulfunc="aormul_4" ;; - popcount|hamdist) tmp_mulfunc="popham" ;; - and_n|andn_n|nand_n | ior_n|iorn_n|nior_n | xor_n|xnor_n) - tmp_mulfunc="logops_n" ;; - lshift|rshift) tmp_mulfunc="lorrshift";; - addlsh1_n) - tmp_mulfunc="aorslsh1_n aorrlsh1_n aorsorrlsh1_n";; - sublsh1_n) - tmp_mulfunc="aorslsh1_n sorrlsh1_n aorsorrlsh1_n";; - rsblsh1_n) - tmp_mulfunc="aorrlsh1_n sorrlsh1_n aorsorrlsh1_n";; - addlsh2_n) - tmp_mulfunc="aorslsh2_n aorrlsh2_n aorsorrlsh2_n";; - sublsh2_n) - tmp_mulfunc="aorslsh2_n sorrlsh2_n aorsorrlsh2_n";; - rsblsh2_n) - tmp_mulfunc="aorrlsh2_n sorrlsh2_n aorsorrlsh2_n";; - addlsh_n) - tmp_mulfunc="aorslsh_n aorrlsh_n aorsorrlsh_n";; - sublsh_n) - tmp_mulfunc="aorslsh_n sorrlsh_n aorsorrlsh_n";; - rsblsh_n) - tmp_mulfunc="aorrlsh_n sorrlsh_n aorsorrlsh_n";; - rsh1add_n|rsh1sub_n) - tmp_mulfunc="rsh1aors_n";; - sec_div_qr|sec_div_r) - tmp_mulfunc="sec_div";; - sec_pi1_div_qr|sec_pi1_div_r) - tmp_mulfunc="sec_pi1_div";; -esac - - - for tmp_base in $tmp_fn $tmp_mulfunc; do - for tmp_ext in asm S s c; do - tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext - if test -f $tmp_file; then - - # If the host uses a non-standard ABI, check if tmp_file supports it - # - if test -n "$GMP_NONSTD_ABI" && test $tmp_ext != "c"; then - abi=`sed -n 's/^[ ]*ABI_SUPPORT(\(.*\))/\1/p' $tmp_file ` - if echo "$abi" | grep -q "\\b${GMP_NONSTD_ABI}\\b"; then - true - else - continue - fi - fi - - mpn_objects="$mpn_objects ${tmp_prefix}_$tmp_fn.lo" - mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/${tmp_prefix}_$tmp_fn.lo" - - case $tmp_fn in - dive_1) tmp_fbase=divexact_1 ;; - diveby3) tmp_fbase=divexact_by3c ;; - pre_divrem_1) tmp_fbase=preinv_divrem_1 ;; - mode1o) tmp_fbase=modexact_1c_odd ;; - pre_mod_1) tmp_fbase=preinv_mod_1 ;; - mod_1_1) tmp_fbase=mod_1_1p ;; - mod_1_1_cps) tmp_fbase=mod_1_1p_cps ;; - mod_1_2) tmp_fbase=mod_1s_2p ;; - mod_1_2_cps) tmp_fbase=mod_1s_2p_cps ;; - mod_1_3) tmp_fbase=mod_1s_3p ;; - mod_1_3_cps) tmp_fbase=mod_1s_3p_cps ;; - mod_1_4) tmp_fbase=mod_1s_4p ;; - mod_1_4_cps) tmp_fbase=mod_1s_4p_cps ;; - *) tmp_fbase=$tmp_fn ;; -esac - - - # carry-in variant, eg. divrem_1c or modexact_1c_odd - case $tmp_fbase in - *_1*) tmp_fbasec=`echo $tmp_fbase | sed 's/_1/_1c/'` ;; - *) tmp_fbasec=${tmp_fbase}c ;; - esac - - # Create a little file doing an include from srcdir. The - # OPERATION and renamings aren't all needed all the time, but - # they don't hurt if unused. - # - # FIXME: Should generate these via config.status commands. - # Would need them all in one AC_CONFIG_COMMANDS though, since - # that macro doesn't accept a set of separate commands generated - # by shell code. - # - case $tmp_ext in - asm) - # hide the d-n-l from autoconf's error checking - tmp_d_n_l=d""nl - echo "$tmp_d_n_l mpn_$tmp_fbase - from $tmp_dir directory for fat binary. -$tmp_d_n_l Generated by configure - DO NOT EDIT. - -define(OPERATION_$tmp_fn) -define(__gmpn_$tmp_fbase, __gmpn_${tmp_fbase}_$tmp_suffix) -define(__gmpn_$tmp_fbasec,__gmpn_${tmp_fbasec}_${tmp_suffix}) -define(__gmpn_preinv_${tmp_fbase},__gmpn_preinv_${tmp_fbase}_${tmp_suffix}) -define(__gmpn_${tmp_fbase}_cps,__gmpn_${tmp_fbase}_cps_${tmp_suffix}) - -$tmp_d_n_l For k6 and k7 gcd_1 calling their corresponding mpn_modexact_1_odd -ifdef(\`__gmpn_modexact_1_odd',, -\`define(__gmpn_modexact_1_odd,__gmpn_modexact_1_odd_${tmp_suffix})') - -$THRESH_ASM_SETUP -include($mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.asm) -" >mpn/${tmp_prefix}_$tmp_fn.asm - ;; - c) - echo "/* mpn_$tmp_fbase - from $tmp_dir directory for fat binary. - Generated by configure - DO NOT EDIT. */ - -#define OPERATION_$tmp_fn 1 -#define __gmpn_$tmp_fbase __gmpn_${tmp_fbase}_$tmp_suffix -#define __gmpn_$tmp_fbasec __gmpn_${tmp_fbasec}_${tmp_suffix} -#define __gmpn_preinv_${tmp_fbase} __gmpn_preinv_${tmp_fbase}_${tmp_suffix} -#define __gmpn_${tmp_fbase}_cps __gmpn_${tmp_fbase}_cps_${tmp_suffix} - -#include \"$mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.c\" -" >mpn/${tmp_prefix}_$tmp_fn.c - ;; - esac - - # Prototype, and append to CPUVEC_SETUP for this directory. - echo "DECL_$tmp_fbase (__gmpn_${tmp_fbase}_$tmp_suffix);" >>fat.h - CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.$tmp_fbase = __gmpn_${tmp_fbase}_${tmp_suffix}; \\ -" - # Ditto for any preinv variant (preinv_divrem_1, preinv_mod_1). - if grep "^PROLOGUE(mpn_preinv_$tmp_fn)" $tmp_file >/dev/null; then - echo "DECL_preinv_$tmp_fbase (__gmpn_preinv_${tmp_fbase}_$tmp_suffix);" >>fat.h - CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.preinv_$tmp_fbase = __gmpn_preinv_${tmp_fbase}_${tmp_suffix}; \\ -" - fi - - # Ditto for any mod_1...cps variant - if grep "^PROLOGUE(mpn_${tmp_fbase}_cps)" $tmp_file >/dev/null; then - echo "DECL_${tmp_fbase}_cps (__gmpn_${tmp_fbase}_cps_$tmp_suffix);" >>fat.h - CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.${tmp_fbase}_cps = __gmpn_${tmp_fbase}_cps_${tmp_suffix}; \\ -" - fi - fi - done - done - done - - # Emit CPUVEC_SETUP for this directory - echo "" >>fat.h - echo "#define CPUVEC_SETUP_$tmp_suffix \\" >>fat.h - echo " do { \\" >>fat.h - echo "$CPUVEC_SETUP } while (0)" >>fat.h - done - - # Emit threshold limits - echo "" >>fat.h - for tmp_tn in $fat_thresholds; do - eval tmp_limit=\$${tmp_tn}_LIMIT - echo "#define ${tmp_tn}_LIMIT $tmp_limit" >>fat.h - done -fi - - -# Normal binary setups. -# - -for tmp_ext in asm S s c; do - eval found_$tmp_ext=no -done - -for tmp_fn in $gmp_mpn_functions; do - for tmp_ext in asm S s c; do - test "$no_create" = yes || rm -f mpn/$tmp_fn.$tmp_ext - done - - # mpn_preinv_divrem_1 might have been provided by divrem_1.asm, likewise - # mpn_preinv_mod_1 by mod_1.asm. - case $tmp_fn in - pre_divrem_1) - if test "$HAVE_NATIVE_mpn_preinv_divrem_1" = yes; then continue; fi ;; - pre_mod_1) - if test "$HAVE_NATIVE_mpn_preinv_mod_1" = yes; then continue; fi ;; - esac - - # functions that can be provided by multi-function files -tmp_mulfunc= -case $tmp_fn in - add_n|sub_n) tmp_mulfunc="aors_n" ;; - add_err1_n|sub_err1_n) - tmp_mulfunc="aors_err1_n" ;; - add_err2_n|sub_err2_n) - tmp_mulfunc="aors_err2_n" ;; - add_err3_n|sub_err3_n) - tmp_mulfunc="aors_err3_n" ;; - cnd_add_n|cnd_sub_n) tmp_mulfunc="cnd_aors_n" ;; - sec_add_1|sec_sub_1) tmp_mulfunc="sec_aors_1" ;; - addmul_1|submul_1) tmp_mulfunc="aorsmul_1" ;; - mul_2|addmul_2) tmp_mulfunc="aormul_2" ;; - mul_3|addmul_3) tmp_mulfunc="aormul_3" ;; - mul_4|addmul_4) tmp_mulfunc="aormul_4" ;; - popcount|hamdist) tmp_mulfunc="popham" ;; - and_n|andn_n|nand_n | ior_n|iorn_n|nior_n | xor_n|xnor_n) - tmp_mulfunc="logops_n" ;; - lshift|rshift) tmp_mulfunc="lorrshift";; - addlsh1_n) - tmp_mulfunc="aorslsh1_n aorrlsh1_n aorsorrlsh1_n";; - sublsh1_n) - tmp_mulfunc="aorslsh1_n sorrlsh1_n aorsorrlsh1_n";; - rsblsh1_n) - tmp_mulfunc="aorrlsh1_n sorrlsh1_n aorsorrlsh1_n";; - addlsh2_n) - tmp_mulfunc="aorslsh2_n aorrlsh2_n aorsorrlsh2_n";; - sublsh2_n) - tmp_mulfunc="aorslsh2_n sorrlsh2_n aorsorrlsh2_n";; - rsblsh2_n) - tmp_mulfunc="aorrlsh2_n sorrlsh2_n aorsorrlsh2_n";; - addlsh_n) - tmp_mulfunc="aorslsh_n aorrlsh_n aorsorrlsh_n";; - sublsh_n) - tmp_mulfunc="aorslsh_n sorrlsh_n aorsorrlsh_n";; - rsblsh_n) - tmp_mulfunc="aorrlsh_n sorrlsh_n aorsorrlsh_n";; - rsh1add_n|rsh1sub_n) - tmp_mulfunc="rsh1aors_n";; - sec_div_qr|sec_div_r) - tmp_mulfunc="sec_div";; - sec_pi1_div_qr|sec_pi1_div_r) - tmp_mulfunc="sec_pi1_div";; -esac - - - found=no - for tmp_dir in $path; do - for tmp_base in $tmp_fn $tmp_mulfunc; do - for tmp_ext in asm S s c; do - tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext - if test -f $tmp_file; then - - # For a nails build, check if the file supports our nail bits. - # Generic code always supports all nails. - # - # FIXME: When a multi-function file is selected to provide one of - # the nails-neutral routines, like logops_n for and_n, the - # PROLOGUE grepping will create HAVE_NATIVE_mpn_<foo> defines for - # all functions in that file, even if they haven't all been - # nailified. Not sure what to do about this, it's only really a - # problem for logops_n, and it's not too terrible to insist those - # get nailified always. - # - if test $GMP_NAIL_BITS != 0 && test $tmp_dir != generic; then - case $tmp_fn in - and_n | ior_n | xor_n | andn_n | \ - copyi | copyd | \ - popcount | hamdist | \ - udiv | udiv_w_sdiv | umul | \ - cntlz | invert_limb) - # these operations are either unaffected by nails or defined - # to operate on full limbs - ;; - *) - nails=`sed -n 's/^[ ]*NAILS_SUPPORT(\(.*\))/\1/p' $tmp_file ` - for n in $nails; do - case $n in - *-*) - n_start=`echo "$n" | sed -n 's/\(.*\)-.*/\1/p'` - n_end=`echo "$n" | sed -n 's/.*-\(.*\)/\1/p'` - ;; - *) - n_start=$n - n_end=$n - ;; - esac - if test $GMP_NAIL_BITS -ge $n_start && test $GMP_NAIL_BITS -le $n_end; then - found=yes - break - fi - done - if test $found != yes; then - continue - fi - ;; - esac - fi - - # If the host uses a non-standard ABI, check if tmp_file supports it - # - if test -n "$GMP_NONSTD_ABI" && test $tmp_ext != "c"; then - abi=`sed -n 's/^[ ]*ABI_SUPPORT(\(.*\))/\1/p' $tmp_file ` - if echo "$abi" | grep -q "\\b${GMP_NONSTD_ABI}\\b"; then - true - else - continue - fi - fi - - found=yes - eval found_$tmp_ext=yes - - if test $tmp_ext = c; then - tmp_u='$U' - else - tmp_u= - fi - - mpn_objects="$mpn_objects $tmp_fn$tmp_u.lo" - mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/$tmp_fn$tmp_u.lo" - ac_config_links="$ac_config_links mpn/$tmp_fn.$tmp_ext:mpn/$tmp_dir/$tmp_base.$tmp_ext" - - gmp_srclinks="$gmp_srclinks mpn/$tmp_fn.$tmp_ext" - - # Duplicate AC_DEFINEs are harmless, so it doesn't matter - # that multi-function files get grepped here repeatedly. - # The PROLOGUE pattern excludes the optional second parameter. - gmp_ep=` - sed -n 's/^[ ]*MULFUNC_PROLOGUE(\(.*\))/\1/p' $tmp_file ; - sed -n 's/^[ ]*PROLOGUE(\([^,]*\).*)/\1/p' $tmp_file - ` - for gmp_tmp in $gmp_ep; do - cat >>confdefs.h <<_ACEOF -#define HAVE_NATIVE_$gmp_tmp 1 -_ACEOF - - eval HAVE_NATIVE_$gmp_tmp=yes - done - - case $tmp_fn in - sqr_basecase) sqr_basecase_source=$tmp_file ;; - esac - - break - fi - done - if test $found = yes; then break ; fi - done - if test $found = yes; then break ; fi - done - - if test $found = no; then - for tmp_optional in $gmp_mpn_functions_optional; do - if test $tmp_optional = $tmp_fn; then - found=yes - fi - done - if test $found = no; then - as_fn_error $? "no version of $tmp_fn found in path: $path" "$LINENO" 5 - fi - fi -done - -# All cycle counters are .asm files currently -if test -n "$SPEED_CYCLECOUNTER_OBJ"; then - found_asm=yes -fi - - - - -# Don't demand an m4 unless it's actually needed. -if test $found_asm = yes; then - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suitable m4" >&5 -$as_echo_n "checking for suitable m4... " >&6; } -if ${gmp_cv_prog_m4+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$M4"; then - gmp_cv_prog_m4="$M4" -else - cat >conftest.m4 <<\EOF -define(dollarhash,``$#'')ifelse(dollarhash(x),1,`define(t1,Y)', -``bad: $# not supported (SunOS /usr/bin/m4) -'')ifelse(eval(89),89,`define(t2,Y)', -`bad: eval() doesnt support 8 or 9 in a constant (OpenBSD 2.6 m4) -')ifelse(eval(9,9),10,`define(t3,Y)', -`bad: eval() doesnt support radix in eval (FreeBSD 8.x,9.0,9.1,9.2 m4) -')ifelse(t1`'t2`'t3,YYY,`good -') -EOF - echo "trying m4" >&5 - gmp_tmp_val=`(m4 conftest.m4) 2>&5` - echo "$gmp_tmp_val" >&5 - if test "$gmp_tmp_val" = good; then - gmp_cv_prog_m4="m4" - else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH:/usr/5bin" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - echo "trying $ac_dir/m4" >&5 - gmp_tmp_val=`($ac_dir/m4 conftest.m4) 2>&5` - echo "$gmp_tmp_val" >&5 - if test "$gmp_tmp_val" = good; then - gmp_cv_prog_m4="$ac_dir/m4" - break - fi - done - IFS="$ac_save_ifs" - if test -z "$gmp_cv_prog_m4"; then - as_fn_error $? "No usable m4 in \$PATH or /usr/5bin (see config.log for reasons)." "$LINENO" 5 - fi - fi - rm -f conftest.m4 -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_prog_m4" >&5 -$as_echo "$gmp_cv_prog_m4" >&6; } -M4="$gmp_cv_prog_m4" - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if m4wrap produces spurious output" >&5 -$as_echo_n "checking if m4wrap produces spurious output... " >&6; } -if ${gmp_cv_m4_m4wrap_spurious+:} false; then : - $as_echo_n "(cached) " >&6 -else - # hide the d-n-l from autoconf's error checking -tmp_d_n_l=d""nl -cat >conftest.m4 <<EOF -changequote({,})define(x,)m4wrap({x})$tmp_d_n_l -EOF -echo test input is >&5 -cat conftest.m4 >&5 -tmp_chars=`$M4 conftest.m4 | wc -c` -echo produces $tmp_chars chars output >&5 -rm -f conftest.m4 -if test $tmp_chars = 0; then - gmp_cv_m4_m4wrap_spurious=no -else - gmp_cv_m4_m4wrap_spurious=yes -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_m4_m4wrap_spurious" >&5 -$as_echo "$gmp_cv_m4_m4wrap_spurious" >&6; } - -echo "define(<M4WRAP_SPURIOUS>,<$gmp_cv_m4_m4wrap_spurious>)" >> $gmp_tmpconfigm4 - - -# else -# It's unclear why this m4-not-needed stuff was ever done. -# if test -z "$M4" ; then -# M4=m4-not-needed -# fi -fi - -# Only do the GMP_ASM checks if there's a .S or .asm wanting them. -if test $found_asm = no && test $found_S = no; then - gmp_asm_syntax_testing=no -fi - -if test "$gmp_asm_syntax_testing" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to switch to text section" >&5 -$as_echo_n "checking how to switch to text section... " >&6; } -if ${gmp_cv_asm_text+:} false; then : - $as_echo_n "(cached) " >&6 -else - for i in ".text" ".code" ".csect .text[PR]"; do - echo "trying $i" >&5 - cat >conftest.s <<EOF - $i -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_text=$i - rm -f conftest* - break -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - : -fi -rm -f conftest* - -done -if test -z "$gmp_cv_asm_text"; then - as_fn_error $? "Cannot determine text section directive" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_text" >&5 -$as_echo "$gmp_cv_asm_text" >&6; } -echo "define(<TEXT>, <$gmp_cv_asm_text>)" >> $gmp_tmpconfigm4 - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to switch to data section" >&5 -$as_echo_n "checking how to switch to data section... " >&6; } -if ${gmp_cv_asm_data+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-aix*) gmp_cv_asm_data=".csect .data[RW]" ;; - *) gmp_cv_asm_data=".data" ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_data" >&5 -$as_echo "$gmp_cv_asm_data" >&6; } -echo "define(<DATA>, <$gmp_cv_asm_data>)" >> $gmp_tmpconfigm4 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler label suffix" >&5 -$as_echo_n "checking for assembler label suffix... " >&6; } -if ${gmp_cv_asm_label_suffix+:} false; then : - $as_echo_n "(cached) " >&6 -else - gmp_cv_asm_label_suffix=unknown -for i in "" ":"; do - echo "trying $i" >&5 - cat >conftest.s <<EOF - $gmp_cv_asm_text -somelabel$i -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_label_suffix=$i - rm -f conftest* - break -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - cat conftest.out >&5 -fi -rm -f conftest* - -done -if test "$gmp_cv_asm_label_suffix" = "unknown"; then - as_fn_error $? "Cannot determine label suffix" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_label_suffix" >&5 -$as_echo "$gmp_cv_asm_label_suffix" >&6; } -echo "define(<LABEL_SUFFIX>, <$gmp_cv_asm_label_suffix>)" >> $gmp_tmpconfigm4 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler global directive" >&5 -$as_echo_n "checking for assembler global directive... " >&6; } -if ${gmp_cv_asm_globl+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - hppa*-*-*) gmp_cv_asm_globl=.export ;; - ia64*-*-* | itanium-*-* | itanium2-*-*) gmp_cv_asm_globl=.global ;; - *) gmp_cv_asm_globl=.globl ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_globl" >&5 -$as_echo "$gmp_cv_asm_globl" >&6; } -echo "define(<GLOBL>, <$gmp_cv_asm_globl>)" >> $gmp_tmpconfigm4 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler global directive attribute" >&5 -$as_echo_n "checking for assembler global directive attribute... " >&6; } -if ${gmp_cv_asm_globl_attr+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $gmp_cv_asm_globl in - .export) gmp_cv_asm_globl_attr=",entry" ;; - *) gmp_cv_asm_globl_attr="" ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_globl_attr" >&5 -$as_echo "$gmp_cv_asm_globl_attr" >&6; } -echo "define(<GLOBL_ATTR>, <$gmp_cv_asm_globl_attr>)" >> $gmp_tmpconfigm4 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if globals are prefixed by underscore" >&5 -$as_echo_n "checking if globals are prefixed by underscore... " >&6; } -if ${gmp_cv_asm_underscore+:} false; then : - $as_echo_n "(cached) " >&6 -else - gmp_cv_asm_underscore="unknown" -cat >conftest.c <<EOF -int gurkmacka; -EOF -gmp_compile="$CC $CFLAGS $CPPFLAGS -c conftest.c >&5" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - $NM conftest.$OBJEXT >conftest.out - if grep _gurkmacka conftest.out >/dev/null; then - gmp_cv_asm_underscore=yes - elif grep gurkmacka conftest.out >/dev/null; then - gmp_cv_asm_underscore=no - else - echo "configure: $NM doesn't have gurkmacka:" >&5 - cat conftest.out >&5 - fi -else - echo "configure: failed program was:" >&5 - cat conftest.c >&5 -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_underscore" >&5 -$as_echo "$gmp_cv_asm_underscore" >&6; } -case $gmp_cv_asm_underscore in - yes) - -echo 'define(<GSYM_PREFIX>, <_>)' >>$gmp_tmpconfigm4 - ;; - no) - -echo 'define(<GSYM_PREFIX>, <>)' >>$gmp_tmpconfigm4 - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +----------------------------------------------------------" >&5 -$as_echo "$as_me: WARNING: +----------------------------------------------------------" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | Cannot determine global symbol prefix." >&5 -$as_echo "$as_me: WARNING: | Cannot determine global symbol prefix." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | $NM output doesn't contain a global data symbol." >&5 -$as_echo "$as_me: WARNING: | $NM output doesn't contain a global data symbol." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | Will proceed with no underscore." >&5 -$as_echo "$as_me: WARNING: | Will proceed with no underscore." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | If this is wrong then you'll get link errors referring" >&5 -$as_echo "$as_me: WARNING: | If this is wrong then you'll get link errors referring" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | to ___gmpn_add_n (note three underscores)." >&5 -$as_echo "$as_me: WARNING: | to ___gmpn_add_n (note three underscores)." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | In this case do a fresh build with an override," >&5 -$as_echo "$as_me: WARNING: | In this case do a fresh build with an override," >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: | ./configure gmp_cv_asm_underscore=yes" >&5 -$as_echo "$as_me: WARNING: | ./configure gmp_cv_asm_underscore=yes" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +----------------------------------------------------------" >&5 -$as_echo "$as_me: WARNING: +----------------------------------------------------------" >&2;} - -echo 'define(<GSYM_PREFIX>, <>)' >>$gmp_tmpconfigm4 - - ;; -esac - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to switch to read-only data section" >&5 -$as_echo_n "checking how to switch to read-only data section... " >&6; } -if ${gmp_cv_asm_rodata+:} false; then : - $as_echo_n "(cached) " >&6 -else - -case $host in -i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-* | viac3*-*-* | geode*-*-* | atom-*-* | x86_64-*-*) - gmp_cv_asm_rodata="$gmp_cv_asm_data" ;; -*) - gmp_cv_asm_rodata="$gmp_cv_asm_text" ;; -esac - -cat >conftest.c <<EOF -extern const int foo[]; /* Suppresses C++'s suppression of foo */ -const int foo[] = {1,2,3}; -EOF -echo "Test program:" >&5 -cat conftest.c >&5 -gmp_compile="$CC $CFLAGS $CPPFLAGS -S conftest.c >&5" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - echo "Compiler output:" >&5 - cat conftest.s >&5 - if test $gmp_cv_asm_underscore = yes; then - tmp_gsym_prefix=_ - else - tmp_gsym_prefix= - fi - # must see our label - if grep "^${tmp_gsym_prefix}foo$gmp_cv_asm_label_suffix" conftest.s >/dev/null 2>&5; then - # take the last directive before our label (hence skipping segments - # getting debugging info etc) - tmp_match=`sed -n "/^${tmp_gsym_prefix}foo$gmp_cv_asm_label_suffix/q - /^[. ]*data/p - /^[. ]*rdata/p - /^[. ]*text/p - /^[. ]*section/p - /^[. ]*csect/p - /^[. ]*CSECT/p" conftest.s | sed -n '$p'` - echo "Match: $tmp_match" >&5 - if test -n "$tmp_match"; then - gmp_cv_asm_rodata=$tmp_match - fi - else - echo "Couldn't find label: ^${tmp_gsym_prefix}foo$gmp_cv_asm_label_suffix" >&5 - fi -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_rodata" >&5 -$as_echo "$gmp_cv_asm_rodata" >&6; } -echo "define(<RODATA>, <$gmp_cv_asm_rodata>)" >> $gmp_tmpconfigm4 - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler .type directive" >&5 -$as_echo_n "checking for assembler .type directive... " >&6; } -if ${gmp_cv_asm_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - gmp_cv_asm_type= -for gmp_tmp_prefix in @ \# %; do - cat >conftest.s <<EOF - .type sym,${gmp_tmp_prefix}function -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - if grep "\.type pseudo-op used outside of \.def/\.endef ignored" conftest.out >/dev/null; then : ; - else - gmp_cv_asm_type=".type \$1,${gmp_tmp_prefix}\$2" - break - fi -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - : -fi -rm -f conftest* - -done -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_type" >&5 -$as_echo "$gmp_cv_asm_type" >&6; } -echo "define(<TYPE>, <$gmp_cv_asm_type>)" >> $gmp_tmpconfigm4 - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler .size directive" >&5 -$as_echo_n "checking for assembler .size directive... " >&6; } -if ${gmp_cv_asm_size+:} false; then : - $as_echo_n "(cached) " >&6 -else - gmp_cv_asm_size= -cat >conftest.s <<EOF - .size sym,1 -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - if grep "\.size pseudo-op used outside of \.def/\.endef ignored" conftest.out >/dev/null; then : ; - else - gmp_cv_asm_size=".size \$1,\$2" - fi -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - : -fi -rm -f conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_size" >&5 -$as_echo "$gmp_cv_asm_size" >&6; } -echo "define(<SIZE>, <$gmp_cv_asm_size>)" >> $gmp_tmpconfigm4 - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler local label prefix" >&5 -$as_echo_n "checking for assembler local label prefix... " >&6; } -if ${gmp_cv_asm_lsym_prefix+:} false; then : - $as_echo_n "(cached) " >&6 -else - gmp_tmp_pre_appears=yes -for gmp_tmp_pre in L .L $L $ L$; do - echo "Trying $gmp_tmp_pre" >&5 - cat >conftest.s <<EOF - $gmp_cv_asm_text -dummy${gmp_cv_asm_label_suffix} -${gmp_tmp_pre}gurkmacka${gmp_cv_asm_label_suffix} -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - if $NM conftest.$OBJEXT >conftest.nm 2>&5; then : ; else - cat conftest.nm >&5 - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"$NM\" failure" >&5 -$as_echo "$as_me: WARNING: \"$NM\" failure" >&2;} - break - fi - cat conftest.nm >&5 - if grep gurkmacka conftest.nm >/dev/null; then : ; else - # no mention of the symbol, this is good - echo "$gmp_tmp_pre label doesn't appear in object file at all (good)" >&5 - gmp_cv_asm_lsym_prefix="$gmp_tmp_pre" - gmp_tmp_pre_appears=no - break - fi - if grep ' [a-zN] .*gurkmacka' conftest.nm >/dev/null; then - # symbol mentioned as a local, use this if nothing better - echo "$gmp_tmp_pre label is local but still in object file" >&5 - if test -z "$gmp_cv_asm_lsym_prefix"; then - gmp_cv_asm_lsym_prefix="$gmp_tmp_pre" - fi - else - echo "$gmp_tmp_pre label is something unknown" >&5 - fi - -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - : -fi -rm -f conftest* - -done -rm -f conftest* -if test -z "$gmp_cv_asm_lsym_prefix"; then - gmp_cv_asm_lsym_prefix=L - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine local label, using default $gmp_cv_asm_lsym_prefix" >&5 -$as_echo "$as_me: WARNING: cannot determine local label, using default $gmp_cv_asm_lsym_prefix" >&2;} -fi -# for development purposes, note whether we got a purely temporary local label -echo "Local label appears in object files: $gmp_tmp_pre_appears" >&5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_lsym_prefix" >&5 -$as_echo "$gmp_cv_asm_lsym_prefix" >&6; } -echo "define(<LSYM_PREFIX>, <${gmp_cv_asm_lsym_prefix}>)" >> $gmp_tmpconfigm4 - -cat >>confdefs.h <<_ACEOF -#define LSYM_PREFIX "$gmp_cv_asm_lsym_prefix" -_ACEOF - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler byte directive" >&5 -$as_echo_n "checking for assembler byte directive... " >&6; } -if ${gmp_cv_asm_byte+:} false; then : - $as_echo_n "(cached) " >&6 -else - for i in .byte data1; do - echo "trying $i" >&5 - cat >conftest.s <<EOF - $gmp_cv_asm_data - $i 0 - -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_byte=$i - rm -f conftest* - break -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - cat conftest.out >&5 -fi -rm -f conftest* - -done -if test -z "$gmp_cv_asm_byte"; then - as_fn_error $? "Cannot determine how to emit a data byte" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_byte" >&5 -$as_echo "$gmp_cv_asm_byte" >&6; } - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to define a 32-bit word" >&5 -$as_echo_n "checking how to define a 32-bit word... " >&6; } -if ${gmp_cv_asm_w32+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-hpux*) - # FIXME: HPUX puts first symbol at 0x40000000, breaking our assumption - # that it's at 0x0. We'll have to declare another symbol before the - # .long/.word and look at the distance between the two symbols. The - # only problem is that the sed expression(s) barfs (on Solaris, for - # example) for the symbol with value 0. For now, HPUX uses .word. - gmp_cv_asm_w32=".word" - ;; - *-*-*) - gmp_tmp_val= - for gmp_tmp_op in .long .word data4; do - cat >conftest.s <<EOF - $gmp_cv_asm_data - $gmp_cv_asm_globl foo - $gmp_tmp_op 0 -foo$gmp_cv_asm_label_suffix - $gmp_cv_asm_byte 0 -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_tmp_val=`$NM conftest.$OBJEXT | grep foo | \ - sed -e 's;[[][0-9][]]\(.*\);\1;' -e 's;[^1-9]*\([0-9]*\).*;\1;'` - if test "$gmp_tmp_val" = 4; then - gmp_cv_asm_w32="$gmp_tmp_op" - break - fi -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - : -fi -rm -f conftest* - - done - rm -f conftest* - ;; -esac -if test -z "$gmp_cv_asm_w32"; then - as_fn_error $? "cannot determine how to define a 32-bit word" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_w32" >&5 -$as_echo "$gmp_cv_asm_w32" >&6; } -echo "define(<W32>, <$gmp_cv_asm_w32>)" >> $gmp_tmpconfigm4 - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if .align assembly directive is logarithmic" >&5 -$as_echo_n "checking if .align assembly directive is logarithmic... " >&6; } -if ${gmp_cv_asm_align_log+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.s <<EOF - $gmp_cv_asm_data - .align 4 - $gmp_cv_asm_globl foo - $gmp_cv_asm_byte 1 - .align 4 -foo$gmp_cv_asm_label_suffix - $gmp_cv_asm_byte 2 -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_tmp_val=`$NM conftest.$OBJEXT | grep foo | \ - sed -e 's;[[][0-9][]]\(.*\);\1;' -e 's;[^1-9]*\([0-9]*\).*;\1;'` - if test "$gmp_tmp_val" = "10" || test "$gmp_tmp_val" = "16"; then - gmp_cv_asm_align_log=yes - else - gmp_cv_asm_align_log=no - fi -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - as_fn_error $? "cannot assemble alignment test" "$LINENO" 5 -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_align_log" >&5 -$as_echo "$gmp_cv_asm_align_log" >&6; } - - -echo "define(<ALIGN_LOGARITHMIC>,<$gmp_cv_asm_align_log>)" >> $gmp_tmpconfigm4 - - - - case $host in - hppa*-*-*) - # for both pa32 and pa64 - -echo "include_mpn(\`pa32/pa-defs.m4')" >> $gmp_tmpconfigm4i - - ;; - ia64*-*-* | itanium-*-* | itanium2-*-*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether assembler .align padding is good" >&5 -$as_echo_n "checking whether assembler .align padding is good... " >&6; } -if ${gmp_cv_asm_ia64_align_ok+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.awk <<\EOF -BEGIN { - want[0] = "011" - want[1] = "160" - want[2] = "074" - want[3] = "040" - want[4] = "000" - want[5] = "040" - want[6] = "020" - want[7] = "221" - want[8] = "114" - want[9] = "000" - want[10] = "100" - want[11] = "200" - want[12] = "122" - want[13] = "261" - want[14] = "000" - want[15] = "200" - - want[16] = "000" - want[17] = "004" - want[18] = "000" - want[19] = "000" - want[20] = "000" - want[21] = "000" - want[22] = "002" - want[23] = "000" - want[24] = "000" - want[25] = "000" - want[26] = "000" - want[27] = "001" - want[28] = "000" - want[29] = "000" - want[30] = "000" - want[31] = "014" - - want[32] = "011" - want[33] = "270" - want[34] = "140" - want[35] = "062" - want[36] = "000" - want[37] = "040" - want[38] = "240" - want[39] = "331" - want[40] = "160" - want[41] = "000" - want[42] = "100" - want[43] = "240" - want[44] = "343" - want[45] = "371" - want[46] = "000" - want[47] = "200" - - result = "yes" -} -{ - for (f = 2; f <= NF; f++) - { - for (i = 0; i < 47; i++) - got[i] = got[i+1]; - got[47] = $f; - - found = 1 - for (i = 0; i < 48; i++) - if (got[i] != want[i]) - { - found = 0 - break - } - if (found) - { - result = "no" - exit - } - } -} -END { - print result -} -EOF -cat >conftest.s <<EOF - .text - .align 32 -{ .mmi; add r14 = r15, r16 - add r17 = r18, r19 - add r20 = r21, r22 ;; } - .align 32 -{ .mmi; add r23 = r24, r25 - add r26 = r27, r28 - add r29 = r30, r31 ;; } - -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_ia64_align_ok=`od -b conftest.$OBJEXT | $AWK -f conftest.awk` -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: oops, cannot compile test program" >&5 -$as_echo "$as_me: WARNING: oops, cannot compile test program" >&2;} - gmp_cv_asm_ia64_align_ok=yes -fi -rm -f conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_ia64_align_ok" >&5 -$as_echo "$gmp_cv_asm_ia64_align_ok" >&6; } - -echo "define(<IA64_ALIGN_OK>, <\`$gmp_cv_asm_ia64_align_ok'>)" >> $gmp_tmpconfigm4 - - - ;; - m68k-*-* | m68[0-9][0-9][0-9]-*-*) - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler instruction and register style" >&5 -$as_echo_n "checking assembler instruction and register style... " >&6; } -if ${gmp_cv_asm_m68k_instruction+:} false; then : - $as_echo_n "(cached) " >&6 -else - for i in "addl %d0,%d1" "add.l %d0,%d1" "addl d0,d1" "add.l d0,d1"; do - cat >conftest.s <<EOF - $gmp_cv_asm_text - $i -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_m68k_instruction=$i - rm -f conftest* - break -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - : -fi -rm -f conftest* - -done -if test -z "$gmp_cv_asm_m68k_instruction"; then - as_fn_error $? "cannot determine assembler instruction and register style" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_m68k_instruction" >&5 -$as_echo "$gmp_cv_asm_m68k_instruction" >&6; } -case $gmp_cv_asm_m68k_instruction in -"addl d0,d1") want_dot_size=no; want_register_percent=no ;; -"addl %d0,%d1") want_dot_size=no; want_register_percent=yes ;; -"add.l d0,d1") want_dot_size=yes; want_register_percent=no ;; -"add.l %d0,%d1") want_dot_size=yes; want_register_percent=yes ;; -*) as_fn_error $? "oops, unrecognised instruction and register style" "$LINENO" 5 ;; -esac - -echo "define(<WANT_REGISTER_PERCENT>, <\`$want_register_percent'>)" >> $gmp_tmpconfigm4 - - -echo "define(<WANT_DOT_SIZE>, <\`$want_dot_size'>)" >> $gmp_tmpconfigm4 - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler addressing style" >&5 -$as_echo_n "checking assembler addressing style... " >&6; } -if ${gmp_cv_asm_m68k_addressing+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $gmp_cv_asm_m68k_instruction in -addl*) movel=movel ;; -add.l*) movel=move.l ;; -*) as_fn_error $? "oops, unrecognised gmp_cv_asm_m68k_instruction" "$LINENO" 5 ;; -esac -case $gmp_cv_asm_m68k_instruction in -*"%d0,%d1") dreg=%d0; areg=%a0 ;; -*"d0,d1") dreg=d0; areg=a0 ;; -*) as_fn_error $? "oops, unrecognised gmp_cv_asm_m68k_instruction" "$LINENO" 5 ;; -esac -cat >conftest.s <<EOF - $gmp_cv_asm_text - $movel $dreg, $areg@- -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_m68k_addressing=mit -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - cat >conftest.s <<EOF - $gmp_cv_asm_text - $movel $dreg, -($areg) -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_m68k_addressing=motorola -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - as_fn_error $? "cannot determine assembler addressing style" "$LINENO" 5 -fi -rm -f conftest* - -fi -rm -f conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_m68k_addressing" >&5 -$as_echo "$gmp_cv_asm_m68k_addressing" >&6; } - -echo "define(<WANT_ADDRESSING>, <\`$gmp_cv_asm_m68k_addressing'>)" >> $gmp_tmpconfigm4 - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler shortest branches" >&5 -$as_echo_n "checking assembler shortest branches... " >&6; } -if ${gmp_cv_asm_m68k_branches+:} false; then : - $as_echo_n "(cached) " >&6 -else - for i in jra jbra bra; do - cat >conftest.s <<EOF - $gmp_cv_asm_text -foo$gmp_cv_asm_label_suffix - $i foo -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_m68k_branches=$i - rm -f conftest* - break -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - : -fi -rm -f conftest* - -done -if test -z "$gmp_cv_asm_m68k_branches"; then - as_fn_error $? "cannot determine assembler branching style" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_m68k_branches" >&5 -$as_echo "$gmp_cv_asm_m68k_branches" >&6; } - -echo "define(<WANT_BRANCHES>, <\`$gmp_cv_asm_m68k_branches'>)" >> $gmp_tmpconfigm4 - - - ;; - powerpc*-*-* | power[3-9]-*-*) - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler output is PIC by default" >&5 -$as_echo_n "checking whether compiler output is PIC by default... " >&6; } -if ${gmp_cv_asm_powerpc_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else - gmp_cv_asm_powerpc_pic=yes -cat >conftest.c <<EOF -int foo; -int *bar() { return &foo; } -EOF -echo "Test program:" >&5 -cat conftest.c >&5 -gmp_compile="$CC $CFLAGS $CPPFLAGS -S conftest.c >&5" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - echo "Compiler output:" >&5 - cat conftest.s >&5 - if grep 'foo@ha' conftest.s >/dev/null 2>&5; then - gmp_cv_asm_powerpc_pic=no - fi - if grep 'ha16(_foo)' conftest.s >/dev/null 2>&5; then - gmp_cv_asm_powerpc_pic=no - fi -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_powerpc_pic" >&5 -$as_echo "$gmp_cv_asm_powerpc_pic" >&6; } - -echo "define(<PIC_ALWAYS>,<$gmp_cv_asm_powerpc_pic>)" >> $gmp_tmpconfigm4 - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the assembler needs r on registers" >&5 -$as_echo_n "checking if the assembler needs r on registers... " >&6; } -if ${gmp_cv_asm_powerpc_r_registers+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.s <<EOF - $gmp_cv_asm_text - mtctr 6 -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_powerpc_r_registers=no -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - cat >conftest.s <<EOF - $gmp_cv_asm_text - mtctr r6 -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_powerpc_r_registers=yes -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - as_fn_error $? "neither \"mtctr 6\" nor \"mtctr r6\" works" "$LINENO" 5 -fi -rm -f conftest* - -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_powerpc_r_registers" >&5 -$as_echo "$gmp_cv_asm_powerpc_r_registers" >&6; } - - -echo "define(<WANT_R_REGISTERS>,<$gmp_cv_asm_powerpc_r_registers>)" >> $gmp_tmpconfigm4 - - - -echo "include_mpn(\`powerpc32/powerpc-defs.m4')" >> $gmp_tmpconfigm4i - - - # Check for Linux ELFv2 ABI - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if _CALL_ELF == 2 -yes -#endif -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - -echo "define(<ELFv2_ABI>)" >> $gmp_tmpconfigm4 - -fi -rm -f conftest* - - - case $host in - *-*-aix*) - case $ABI in - mode64) -echo "include_mpn(\`powerpc64/aix.m4')" >> $gmp_tmpconfigm4i - ;; - *) -echo "include_mpn(\`powerpc32/aix.m4')" >> $gmp_tmpconfigm4i - ;; - esac - ;; - *-*-linux* | *-*-*bsd*) - case $ABI in - mode64) -echo "include_mpn(\`powerpc64/elf.m4')" >> $gmp_tmpconfigm4i - ;; - mode32 | 32) -echo "include_mpn(\`powerpc32/elf.m4')" >> $gmp_tmpconfigm4i - ;; - esac - ;; - *-*-darwin*) - case $ABI in - mode64) -echo "include_mpn(\`powerpc64/darwin.m4')" >> $gmp_tmpconfigm4i - ;; - mode32 | 32) -echo "include_mpn(\`powerpc32/darwin.m4')" >> $gmp_tmpconfigm4i - ;; - esac - ;; - *) - # Assume unrecognized operating system is the powerpc eABI - -echo "include_mpn(\`powerpc32/eabi.m4')" >> $gmp_tmpconfigm4i - - ;; - esac - ;; - power*-*-aix*) - -echo "include_mpn(\`powerpc32/aix.m4')" >> $gmp_tmpconfigm4i - - ;; - *sparc*-*-*) - case $ABI in - 64) - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the assembler accepts \".register\"" >&5 -$as_echo_n "checking if the assembler accepts \".register\"... " >&6; } -if ${gmp_cv_asm_sparc_register+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.s <<EOF - $gmp_cv_asm_text - .register %g2,#scratch - -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_sparc_register=yes -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - gmp_cv_asm_sparc_register=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_sparc_register" >&5 -$as_echo "$gmp_cv_asm_sparc_register" >&6; } - - -echo "define(<HAVE_REGISTER>,<$gmp_cv_asm_sparc_register>)" >> $gmp_tmpconfigm4 - - - ;; - esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the assembler accepts gotdata relocations" >&5 -$as_echo_n "checking if the assembler accepts gotdata relocations... " >&6; } -if ${gmp_cv_asm_sparc_gotdata+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.s <<EOF - $gmp_cv_asm_text - .text - sethi %gdop_hix22(symbol), %g1 - or %g1, %gdop_lox10(symbol), %g1 - -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_sparc_gotdata=yes -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - gmp_cv_asm_sparc_gotdata=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_sparc_gotdata" >&5 -$as_echo "$gmp_cv_asm_sparc_gotdata" >&6; } - - -echo "define(<HAVE_GOTDATA>,<$gmp_cv_asm_sparc_gotdata>)" >> $gmp_tmpconfigm4 - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the assembler can support shared PIC thunks" >&5 -$as_echo_n "checking if the assembler can support shared PIC thunks... " >&6; } -if ${gmp_cv_asm_sparc_shared_thunks+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.s <<EOF - $gmp_cv_asm_text - .section .text.__sparc_get_pc_thunk.l7,"axG",@progbits,__sparc_get_pc_thunk.l7,comdat - .weak __sparc_get_pc_thunk.l7 - .hidden __sparc_get_pc_thunk.l7 - .type __sparc_get_pc_thunk.l7, #function -__sparc_get_pc_thunk.l7: - jmp %o7+8 - add %o7, %l7, %l7 - -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_sparc_shared_thunks=yes -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - gmp_cv_asm_sparc_shared_thunks=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_sparc_shared_thunks" >&5 -$as_echo "$gmp_cv_asm_sparc_shared_thunks" >&6; } - - -echo "define(<HAVE_SHARED_THUNKS>,<$gmp_cv_asm_sparc_shared_thunks>)" >> $gmp_tmpconfigm4 - - - ;; - i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-* | viac3*-*-* | geode*-*-* | atom-*-* | athlon64-*-* | k8-*-* | k10-*-* | bobcat-*-* | jaguar*-*-* | bulldozer*-*-* | piledriver*-*-* | steamroller*-*-* | excavator*-*-* | pentium4-*-* | atom-*-* | silvermont-*-* | goldmont-*-* | core2-*-* | corei*-*-* | x86_64-*-* | nano-*-* | nehalem*-*-* | westmere*-*-* | sandybridge*-*-* | ivybridge*-*-* | haswell*-*-* | broadwell*-*-* | skylake*-*-* | cabylake*-*-*) - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the .align directive accepts an 0x90 fill in .text" >&5 -$as_echo_n "checking if the .align directive accepts an 0x90 fill in .text... " >&6; } -if ${gmp_cv_asm_align_fill_0x90+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.s <<EOF - $gmp_cv_asm_text - .align 4, 0x90 - .byte 0 - .align 4, 0x90 -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - if grep "Warning: Fill parameter ignored for executable section" conftest.out >/dev/null; then - echo "Suppressing this warning by omitting 0x90" 1>&5 - gmp_cv_asm_align_fill_0x90=no -else - gmp_cv_asm_align_fill_0x90=yes -fi -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - gmp_cv_asm_align_fill_0x90=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_align_fill_0x90" >&5 -$as_echo "$gmp_cv_asm_align_fill_0x90" >&6; } - - -echo "define(<ALIGN_FILL_0x90>,<$gmp_cv_asm_align_fill_0x90>)" >> $gmp_tmpconfigm4 - - - case $ABI in - 32) - -echo "include_mpn(\`x86/x86-defs.m4')" >> $gmp_tmpconfigm4i - - $as_echo "#define HAVE_HOST_CPU_FAMILY_x86 1" >>confdefs.h - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler COFF type directives" >&5 -$as_echo_n "checking for assembler COFF type directives... " >&6; } -if ${gmp_cv_asm_x86_coff_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.s <<EOF - $gmp_cv_asm_text - $gmp_cv_asm_globl ${tmp_gsym_prefix}foo$gmp_cv_asm_globl_attr - .def ${tmp_gsym_prefix}foo - .scl 2 - .type 32 - .endef -${tmp_gsym_prefix}foo$gmp_cv_asm_label_suffix - -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_x86_coff_type=yes -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - gmp_cv_asm_x86_coff_type=no -fi -rm -f conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_x86_coff_type" >&5 -$as_echo "$gmp_cv_asm_x86_coff_type" >&6; } -echo "define(<HAVE_COFF_TYPE>, <$gmp_cv_asm_x86_coff_type>)" >> $gmp_tmpconfigm4 - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if _GLOBAL_OFFSET_TABLE_ is prefixed by underscore" >&5 -$as_echo_n "checking if _GLOBAL_OFFSET_TABLE_ is prefixed by underscore... " >&6; } -if ${gmp_cv_asm_x86_got_underscore+:} false; then : - $as_echo_n "(cached) " >&6 -else - gmp_cv_asm_x86_got_underscore="not applicable" -if test $gmp_cv_asm_underscore = yes; then - tmp_gsym_prefix=_ -else - tmp_gsym_prefix= -fi -for tmp_underscore in "" "_"; do - cat >conftest.s <<EOF - $gmp_cv_asm_text - $gmp_cv_asm_globl ${tmp_gsym_prefix}main$gmp_cv_asm_globl_attr -${tmp_gsym_prefix}main$gmp_cv_asm_label_suffix - addl $ ${tmp_underscore}_GLOBAL_OFFSET_TABLE_, %ebx -EOF - gmp_compile="$CCAS $CFLAGS $CPPFLAGS $lt_prog_compiler_pic conftest.s >&5 && $CC $CFLAGS $CPPFLAGS $lt_prog_compiler_pic conftest.$OBJEXT >&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_compile\""; } >&5 - (eval $gmp_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$tmp_underscore" = "_"; then - gmp_cv_asm_x86_got_underscore=yes - else - gmp_cv_asm_x86_got_underscore=no - fi - break - fi -done -rm -f conftest* a.out b.out a.exe a_out.exe - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_x86_got_underscore" >&5 -$as_echo "$gmp_cv_asm_x86_got_underscore" >&6; } -if test "$gmp_cv_asm_x86_got_underscore" = "yes"; then - -echo 'define(<GOT_GSYM_PREFIX>, <_>)' >>$gmp_tmpconfigm4 - -else - -echo 'define(<GOT_GSYM_PREFIX>, <>)' >>$gmp_tmpconfigm4 - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the assembler takes cl with shldl" >&5 -$as_echo_n "checking if the assembler takes cl with shldl... " >&6; } -if ${gmp_cv_asm_x86_shldl_cl+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.s <<EOF - $gmp_cv_asm_text - shldl %cl, %eax, %ebx -EOF -gmp_assemble="$CCAS $CFLAGS $CPPFLAGS conftest.s >conftest.out 2>&1" -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_assemble\""; } >&5 - (eval $gmp_assemble) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat conftest.out >&5 - gmp_cv_asm_x86_shldl_cl=yes -else - cat conftest.out >&5 - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - gmp_cv_asm_x86_shldl_cl=no -fi -rm -f conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gmp_cv_asm_x86_shldl_cl" >&5 -$as_echo "$gmp_cv_asm_x86_shldl_cl" >&6; } -if test "$gmp_cv_asm_x86_shldl_cl" = "yes"; then - -echo 'define(<WANT_SHLDL_CL>, <1>)' >>$gmp_tmpconfigm4 - -else - -echo 'define(<WANT_SHLDL_CL>, <0>)' >>$gmp_tmpconfigm4 - -fi - - case $enable_profiling in - prof | gprof) # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS=$lt_save_ifs - ;; - esac -else - enable_shared=yes -fi - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to call x86 mcount" >&5 -$as_echo_n "checking how to call x86 mcount... " >&6; } -cat >conftest.c <<EOF -foo(){bar();} -EOF - -if test "$enable_static" = yes; then - gmp_asmout_compile="$CC $CFLAGS $CPPFLAGS -S conftest.c 1>&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_asmout_compile\""; } >&5 - (eval $gmp_asmout_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if grep '\.data' conftest.s >/dev/null; then - mcount_nonpic_reg=`sed -n '/esp/!s/.*movl.*,\(%[a-z]*\).*$/\1/p' conftest.s` - else - mcount_nonpic_reg= - fi - mcount_nonpic_call=`grep 'call.*mcount' conftest.s` - if test -z "$mcount_nonpic_call"; then - as_fn_error $? "Cannot find mcount call for non-PIC" "$LINENO" 5 - fi - else - as_fn_error $? "Cannot compile test program for non-PIC" "$LINENO" 5 - fi -fi - -if test "$enable_shared" = yes; then - gmp_asmout_compile="$CC $CFLAGS $CPPFLAGS $lt_prog_compiler_pic -S conftest.c 1>&5" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gmp_asmout_compile\""; } >&5 - (eval $gmp_asmout_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if grep '\.data' conftest.s >/dev/null; then - case $lt_prog_compiler_pic in - *-DDLL_EXPORT*) - # Windows DLLs have non-PIC style mcount - mcount_pic_reg=`sed -n '/esp/!s/.*movl.*,\(%[a-z]*\).*$/\1/p' conftest.s` - ;; - *) - mcount_pic_reg=`sed -n 's/.*GOTOFF.*,\(%[a-z]*\).*$/\1/p' conftest.s` - ;; - esac - else - mcount_pic_reg= - fi - mcount_pic_call=`grep 'call.*mcount' conftest.s` - if test -z "$mcount_pic_call"; then - as_fn_error $? "Cannot find mcount call for PIC" "$LINENO" 5 - fi - else - as_fn_error $? "Cannot compile test program for PIC" "$LINENO" 5 - fi -fi - - -echo "define(<MCOUNT_NONPIC_REG>, <\`$mcount_nonpic_reg'>)" >> $gmp_tmpconfigm4 - - -echo "define(<MCOUNT_NONPIC_CALL>,<\`$mcount_nonpic_call'>)" >> $gmp_tmpconfigm4 - - -echo "define(<MCOUNT_PIC_REG>, <\`$mcount_pic_reg'>)" >> $gmp_tmpconfigm4 - - -echo "define(<MCOUNT_PIC_CALL>, <\`$mcount_pic_call'>)" >> $gmp_tmpconfigm4 - - -rm -f conftest.* -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: determined" >&5 -$as_echo "determined" >&6; } - ;; - esac - case $host in - *-*-darwin*) - -echo "include_mpn(\`x86/darwin.m4')" >> $gmp_tmpconfigm4i - ;; - esac - ;; - 64|x32) - -echo "include_mpn(\`x86_64/x86_64-defs.m4')" >> $gmp_tmpconfigm4i - - $as_echo "#define HAVE_HOST_CPU_FAMILY_x86_64 1" >>confdefs.h - - case $host in - *-*-darwin*) - -echo "include_mpn(\`x86_64/darwin.m4')" >> $gmp_tmpconfigm4i - ;; - *-*-mingw* | *-*-cygwin) - -echo "include_mpn(\`x86_64/dos64.m4')" >> $gmp_tmpconfigm4i - ;; - *-openbsd*) - -echo "define(<OPENBSD>,1)" >> $gmp_tmpconfigm4 - ;; - esac - ;; - esac - ;; - esac -fi - -# For --enable-minithres, prepend "minithres" to path so that its special -# gmp-mparam.h will be used. -if test $enable_minithres = yes; then - path="minithres $path" -fi - -# Create link for gmp-mparam.h. -gmp_mparam_source= -for gmp_mparam_dir in $path; do - test "$no_create" = yes || rm -f gmp-mparam.h - tmp_file=$srcdir/mpn/$gmp_mparam_dir/gmp-mparam.h - if test -f $tmp_file; then - ac_config_links="$ac_config_links gmp-mparam.h:mpn/$gmp_mparam_dir/gmp-mparam.h" - - gmp_srclinks="$gmp_srclinks gmp-mparam.h" - gmp_mparam_source=$tmp_file - break - fi -done -if test -z "$gmp_mparam_source"; then - as_fn_error $? "no version of gmp-mparam.h found in path: $path" "$LINENO" 5 -fi - -# For a helpful message from tune/tuneup.c -gmp_mparam_suggest=$gmp_mparam_source -if test "$gmp_mparam_dir" = generic; then - for i in $path; do break; done - if test "$i" != generic; then - gmp_mparam_suggest="new file $srcdir/mpn/$i/gmp-mparam.h" - fi -fi - -cat >>confdefs.h <<_ACEOF -#define GMP_MPARAM_H_SUGGEST "$gmp_mparam_source" -_ACEOF - - - -# Copy relevant parameters from gmp-mparam.h to config.m4. -# We only do this for parameters that are used by some assembly files. -# Fat binaries do this on a per-file basis, so skip in that case. -# -if test -z "$fat_path"; then - for i in SQR_TOOM2_THRESHOLD BMOD_1_TO_MOD_1_THRESHOLD SHLD_SLOW SHRD_SLOW; do - value=`sed -n 's/^#define '$i'[ ]*\([0-9][0-9]*\).*$/\1/p' $gmp_mparam_source` - if test -n "$value"; then - -echo "define(<$i>,<$value>)" >> $gmp_tmpconfigm4 - - fi - done -fi - - -# Sizes of some types, needed at preprocessing time. -# -# FIXME: The assumption that GMP_LIMB_BITS is 8*sizeof(mp_limb_t) might -# be slightly rash, but it's true everywhere we know of and ought to be true -# of any sensible system. In a generic C build, grepping LONG_BIT out of -# <limits.h> might be an alternative, for maximum portability. -# -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 -$as_echo_n "checking size of void *... " >&6; } -if ${ac_cv_sizeof_void_p+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_void_p" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (void *) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_void_p=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 -$as_echo "$ac_cv_sizeof_void_p" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_VOID_P $ac_cv_sizeof_void_p -_ACEOF - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned short" >&5 -$as_echo_n "checking size of unsigned short... " >&6; } -if ${ac_cv_sizeof_unsigned_short+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned short))" "ac_cv_sizeof_unsigned_short" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_unsigned_short" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (unsigned short) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_unsigned_short=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_short" >&5 -$as_echo "$ac_cv_sizeof_unsigned_short" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UNSIGNED_SHORT $ac_cv_sizeof_unsigned_short -_ACEOF - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned" >&5 -$as_echo_n "checking size of unsigned... " >&6; } -if ${ac_cv_sizeof_unsigned+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned))" "ac_cv_sizeof_unsigned" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_unsigned" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (unsigned) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_unsigned=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned" >&5 -$as_echo "$ac_cv_sizeof_unsigned" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UNSIGNED $ac_cv_sizeof_unsigned -_ACEOF - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5 -$as_echo_n "checking size of unsigned long... " >&6; } -if ${ac_cv_sizeof_unsigned_long+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_unsigned_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (unsigned long) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_unsigned_long=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5 -$as_echo "$ac_cv_sizeof_unsigned_long" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long -_ACEOF - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of mp_limb_t" >&5 -$as_echo_n "checking size of mp_limb_t... " >&6; } -if ${ac_cv_sizeof_mp_limb_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (mp_limb_t))" "ac_cv_sizeof_mp_limb_t" "#define __GMP_WITHIN_CONFIGURE 1 /* ignore template stuff */ -#define GMP_NAIL_BITS $GMP_NAIL_BITS -#define GMP_LIMB_BITS 123 -$DEFN_LONG_LONG_LIMB -#include \"$srcdir/gmp-h.in\" - -"; then : - -else - if test "$ac_cv_type_mp_limb_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (mp_limb_t) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_mp_limb_t=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_mp_limb_t" >&5 -$as_echo "$ac_cv_sizeof_mp_limb_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_MP_LIMB_T $ac_cv_sizeof_mp_limb_t -_ACEOF - - -if test "$ac_cv_sizeof_mp_limb_t" = 0; then - as_fn_error $? "Oops, mp_limb_t doesn't seem to work" "$LINENO" 5 -fi -GMP_LIMB_BITS=`expr 8 \* $ac_cv_sizeof_mp_limb_t` - - -echo "define(<SIZEOF_UNSIGNED>,<$ac_cv_sizeof_unsigned>)" >> $gmp_tmpconfigm4 - - -# Check compiler limb size matches gmp-mparam.h -# -# FIXME: Some of the cycle counter objects in the tune directory depend on -# the size of ulong, it'd be possible to check that here, though a mismatch -# probably wouldn't want to be fatal, none of the libgmp assembler code -# depends on ulong. -# -mparam_bits=`sed -n 's/^#define GMP_LIMB_BITS[ ][ ]*\([0-9]*\).*$/\1/p' $gmp_mparam_source` -if test -n "$mparam_bits" && test "$mparam_bits" -ne $GMP_LIMB_BITS; then - if test "$test_CFLAGS" = set; then - as_fn_error $? "Oops, mp_limb_t is $GMP_LIMB_BITS bits, but the assembler code -in this configuration expects $mparam_bits bits. -You appear to have set \$CFLAGS, perhaps you also need to tell GMP the -intended ABI, see \"ABI and ISA\" in the manual." "$LINENO" 5 - else - as_fn_error $? "Oops, mp_limb_t is $GMP_LIMB_BITS bits, but the assembler code -in this configuration expects $mparam_bits bits." "$LINENO" 5 - fi -fi - - -echo "define(<GMP_LIMB_BITS>,$GMP_LIMB_BITS)" >> $gmp_tmpconfigm4 - - -echo "define(<GMP_NAIL_BITS>,$GMP_NAIL_BITS)" >> $gmp_tmpconfigm4 - - -echo "define(<GMP_NUMB_BITS>,eval(GMP_LIMB_BITS-GMP_NAIL_BITS))" >> $gmp_tmpconfigm4 - - - - - - - - -# A recompiled sqr_basecase for use in the tune program, if necessary. -TUNE_SQR_OBJ= -test -d tune || mkdir tune -case $sqr_basecase_source in - *.asm) - sqr_max=`sed -n 's/^def...(SQR_TOOM2_THRESHOLD_MAX, *\([0-9]*\))/\1/p' $sqr_basecase_source` - if test -n "$sqr_max"; then - TUNE_SQR_OBJ=sqr_asm.o - -cat >>confdefs.h <<_ACEOF -#define TUNE_SQR_TOOM2_MAX $sqr_max -_ACEOF - - fi - cat >tune/sqr_basecase.c <<EOF -/* not sure that an empty file can compile, so put in a dummy */ -int sqr_basecase_dummy; -EOF - ;; - *.c) - TUNE_SQR_OBJ= - $as_echo "#define TUNE_SQR_TOOM2_MAX SQR_TOOM2_MAX_GENERIC" >>confdefs.h - - cat >tune/sqr_basecase.c <<EOF -#define TUNE_PROGRAM_BUILD 1 -#define TUNE_PROGRAM_BUILD_SQR 1 -#include "mpn/sqr_basecase.c" -EOF - ;; -esac - - -# Create config.m4. - -echo "creating $gmp_configm4" -echo "d""nl $gmp_configm4. Generated automatically by configure." > $gmp_configm4 -if test -f $gmp_tmpconfigm4; then - echo "changequote(<,>)" >> $gmp_configm4 - echo "ifdef(<__CONFIG_M4_INCLUDED__>,,<" >> $gmp_configm4 - cat $gmp_tmpconfigm4 >> $gmp_configm4 - echo ">)" >> $gmp_configm4 - echo "changequote(\`,')" >> $gmp_configm4 - rm $gmp_tmpconfigm4 -fi -echo "ifdef(\`__CONFIG_M4_INCLUDED__',,\`" >> $gmp_configm4 -if test -f $gmp_tmpconfigm4i; then - cat $gmp_tmpconfigm4i >> $gmp_configm4 - rm $gmp_tmpconfigm4i -fi -if test -f $gmp_tmpconfigm4p; then - cat $gmp_tmpconfigm4p >> $gmp_configm4 - rm $gmp_tmpconfigm4p -fi -echo "')" >> $gmp_configm4 -echo "define(\`__CONFIG_M4_INCLUDED__')" >> $gmp_configm4 - - -# Create Makefiles -# FIXME: Upcoming version of autoconf/automake may not like broken lines. -# Right now automake isn't accepting the new AC_CONFIG_FILES scheme. - -ac_config_files="$ac_config_files Makefile mpf/Makefile mpn/Makefile mpq/Makefile mpz/Makefile printf/Makefile scanf/Makefile rand/Makefile cxx/Makefile doc/Makefile tune/Makefile gmp.h:gmp-h.in" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "checking that generated files are newer than configure... " >&6; } - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${WANT_CXX_TRUE}" && test -z "${WANT_CXX_FALSE}"; then - as_fn_error $? "conditional \"WANT_CXX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${ENABLE_STATIC_TRUE}" && test -z "${ENABLE_STATIC_FALSE}"; then - as_fn_error $? "conditional \"ENABLE_STATIC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by GNU MP $as_me 6.1.0, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_links="$ac_config_links" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration links: -$config_links - -Configuration commands: -$config_commands - -Report bugs to <gmp-bugs@gmplib.org, see https://gmplib.org/manual/Reporting-Bugs.html>. -GNU MP home page: <http://www.gnu.org/software/gmp/>. -General help using GNU software: <http://www.gnu.org/gethelp/>." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -GNU MP config.status 6.1.0 -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' -AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' -DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' -macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' -macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' -enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' -enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' -pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' -shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' -SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' -ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' -PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' -host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' -host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' -host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' -build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' -build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' -build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' -SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' -Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' -GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' -EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' -FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' -LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' -LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' -ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' -exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' -lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' -lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' -lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' -reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' -file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' -want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' -sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' -AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' -archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' -STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' -RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' -lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' -CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' -compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' -GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' -lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' -nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' -lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' -lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' -objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' -need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' -MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' -LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' -OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' -libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' -module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' -postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' -need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' -version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' -runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' -libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' -soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' -install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' -finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' -configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' -old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' -striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' -predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' -postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' -predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' -postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' -LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' -reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' -reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' -compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' -GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' -archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' -module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' -with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' -no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' -inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' -link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' -always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' -exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' -include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' -prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' -postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' -file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' -predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' -postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' -predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' -postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in NM \ -AS \ -DLLTOOL \ -OBJDUMP \ -SHELL \ -ECHO \ -PATH_SEPARATOR \ -SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -deplibs_check_method \ -file_magic_cmd \ -file_magic_glob \ -want_nocaseglob \ -sharedlib_from_linklib_cmd \ -AR \ -AR_FLAGS \ -archiver_list_spec \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_import \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -lt_cv_nm_interface \ -nm_file_list_spec \ -lt_cv_truncate_bin \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_pic \ -lt_prog_compiler_wl \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -MANIFEST_TOOL \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_separator \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -install_override_mode \ -finish_eval \ -old_striplib \ -striplib \ -compiler_lib_search_dirs \ -predep_objects \ -postdep_objects \ -predeps \ -postdeps \ -compiler_lib_search_path \ -LD_CXX \ -reload_flag_CXX \ -compiler_CXX \ -lt_prog_compiler_no_builtin_flag_CXX \ -lt_prog_compiler_pic_CXX \ -lt_prog_compiler_wl_CXX \ -lt_prog_compiler_static_CXX \ -lt_cv_prog_compiler_c_o_CXX \ -export_dynamic_flag_spec_CXX \ -whole_archive_flag_spec_CXX \ -compiler_needs_object_CXX \ -with_gnu_ld_CXX \ -allow_undefined_flag_CXX \ -no_undefined_flag_CXX \ -hardcode_libdir_flag_spec_CXX \ -hardcode_libdir_separator_CXX \ -exclude_expsyms_CXX \ -include_expsyms_CXX \ -file_list_spec_CXX \ -compiler_lib_search_dirs_CXX \ -predep_objects_CXX \ -postdep_objects_CXX \ -predeps_CXX \ -postdeps_CXX \ -compiler_lib_search_path_CXX; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postlink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -configure_time_dlsearch_path \ -configure_time_lt_sys_library_path \ -reload_cmds_CXX \ -old_archive_cmds_CXX \ -old_archive_from_new_cmds_CXX \ -old_archive_from_expsyms_cmds_CXX \ -archive_cmds_CXX \ -archive_expsym_cmds_CXX \ -module_cmds_CXX \ -module_expsym_cmds_CXX \ -export_symbols_cmds_CXX \ -prelink_cmds_CXX \ -postlink_cmds_CXX; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -ac_aux_dir='$ac_aux_dir' - -# See if we are running on zsh, and set the options that allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - RM='$RM' - ofile='$ofile' - - - - - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "mpn/$tmp_fn.$tmp_ext") CONFIG_LINKS="$CONFIG_LINKS mpn/$tmp_fn.$tmp_ext:mpn/$tmp_dir/$tmp_base.$tmp_ext" ;; - "gmp-mparam.h") CONFIG_LINKS="$CONFIG_LINKS gmp-mparam.h:mpn/$gmp_mparam_dir/gmp-mparam.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "mpf/Makefile") CONFIG_FILES="$CONFIG_FILES mpf/Makefile" ;; - "mpn/Makefile") CONFIG_FILES="$CONFIG_FILES mpn/Makefile" ;; - "mpq/Makefile") CONFIG_FILES="$CONFIG_FILES mpq/Makefile" ;; - "mpz/Makefile") CONFIG_FILES="$CONFIG_FILES mpz/Makefile" ;; - "printf/Makefile") CONFIG_FILES="$CONFIG_FILES printf/Makefile" ;; - "scanf/Makefile") CONFIG_FILES="$CONFIG_FILES scanf/Makefile" ;; - "rand/Makefile") CONFIG_FILES="$CONFIG_FILES rand/Makefile" ;; - "cxx/Makefile") CONFIG_FILES="$CONFIG_FILES cxx/Makefile" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "tune/Makefile") CONFIG_FILES="$CONFIG_FILES tune/Makefile" ;; - "gmp.h") CONFIG_FILES="$CONFIG_FILES gmp.h:gmp-h.in" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' <conf$$subs.awk | sed ' -/^[^""]/{ - N - s/\n// -} -' >>$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_tt=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_tt"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' <confdefs.h | sed ' -s/'"$ac_delim"'/"\\\ -"/g' >>$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - :L) - # - # CONFIG_LINK - # - - if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then - : - else - # Prefer the file from the source tree if names are identical. - if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then - ac_source=$srcdir/$ac_source - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 -$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} - - if test ! -r "$ac_source"; then - as_fn_error $? "$ac_source: file not found" "$LINENO" 5 - fi - rm -f "$ac_file" - - # Try a relative symlink, then a hard link, then a copy. - case $ac_source in - [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; - *) ac_rel_source=$ac_top_build_prefix$ac_source ;; - esac - ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || - ln "$ac_source" "$ac_file" 2>/dev/null || - cp -p "$ac_source" "$ac_file" || - as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 - fi - ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "libtool":C) - - # See if we are running on zsh, and set the options that allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST - fi - - cfgfile=${ofile}T - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL -# Generated automatically by $as_me ($PACKAGE) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. - -# Provide generalized library-building support services. -# Written by Gordon Matzigkeit, 1996 - -# Copyright (C) 2014 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. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program or library that is built -# using GNU Libtool, you may include this file under the same -# distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - - -# The names of the tagged configurations supported by this script. -available_tags='CXX ' - -# Configured defaults for sys_lib_dlsearch_path munging. -: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} - -# ### BEGIN LIBTOOL CONFIG - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Assembler program. -AS=$lt_AS - -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - -# Object dumper program. -OBJDUMP=$lt_OBJDUMP - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# Shared archive member basename,for filename based shared library versioning on AIX. -shared_archive_member_spec=$shared_archive_member_spec - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that protects backslashes. -ECHO=$lt_ECHO - -# The PATH separator for the build system. -PATH_SEPARATOR=$lt_PATH_SEPARATOR - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# convert \$build file names to \$host format. -to_host_file_cmd=$lt_cv_to_host_file_cmd - -# convert \$build files to toolchain format. -to_tool_file_cmd=$lt_cv_to_tool_file_cmd - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method = "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# How to find potential files when deplibs_check_method = "file_magic". -file_magic_glob=$lt_file_magic_glob - -# Find potential files using nocaseglob when deplibs_check_method = "file_magic". -want_nocaseglob=$lt_want_nocaseglob - -# Command to associate shared and link libraries. -sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd - -# The archiver. -AR=$lt_AR - -# Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS - -# How to feed a file listing to the archiver. -archiver_list_spec=$lt_archiver_list_spec - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=$lock_old_archive_extraction - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm into a list of symbols to manually relocate. -global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name lister interface. -nm_interface=$lt_lt_cv_nm_interface - -# Specify filename containing input files for \$NM. -nm_file_list_spec=$lt_nm_file_list_spec - -# The root where to search for dependent libraries,and where our libraries should be installed. -lt_sysroot=$lt_sysroot - -# Command to truncate a binary pipe. -lt_truncate_bin=$lt_lt_cv_truncate_bin - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Manifest tool. -MANIFEST_TOOL=$lt_MANIFEST_TOOL - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Permission mode override for installation of shared libraries. -install_override_mode=$lt_install_override_mode - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Detected run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path - -# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. -configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \$shlibpath_var if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects -postdep_objects=$lt_postdep_objects -predeps=$lt_predeps -postdeps=$lt_postdeps - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path - -# ### END LIBTOOL CONFIG - -_LT_EOF - - cat <<'_LT_EOF' >> "$cfgfile" - -# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE - -# func_munge_path_list VARIABLE PATH -# ----------------------------------- -# VARIABLE is name of variable containing _space_ separated list of -# directories to be munged by the contents of PATH, which is string -# having a format: -# "DIR[:DIR]:" -# string "DIR[ DIR]" will be prepended to VARIABLE -# ":DIR[:DIR]" -# string "DIR[ DIR]" will be appended to VARIABLE -# "DIRP[:DIRP]::[DIRA:]DIRA" -# string "DIRP[ DIRP]" will be prepended to VARIABLE and string -# "DIRA[ DIRA]" will be appended to VARIABLE -# "DIR[:DIR]" -# VARIABLE will be replaced by "DIR[ DIR]" -func_munge_path_list () -{ - case x$2 in - x) - ;; - *:) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" - ;; - x:*) - eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" - ;; - *) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" - ;; - esac -} - - -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -func_cc_basename () -{ - for cc_temp in $*""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac - done - func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -} - - -# ### END FUNCTIONS SHARED WITH CONFIGURE - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test set != "${COLLECT_NAMES+set}"; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain=$ac_aux_dir/ltmain.sh - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - - cat <<_LT_EOF >> "$ofile" - -# ### BEGIN LIBTOOL TAG CONFIG: CXX - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# How to create reloadable object files. -reload_flag=$lt_reload_flag_CXX -reload_cmds=$lt_reload_cmds_CXX - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds_CXX - -# A language specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU compiler? -with_gcc=$GCC_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object_CXX - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld_CXX - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \$shlibpath_var if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute_CXX - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath_CXX - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds_CXX - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds_CXX - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec_CXX - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects_CXX -postdep_objects=$lt_postdep_objects_CXX -predeps=$lt_predeps_CXX -postdeps=$lt_postdeps_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -# ### END LIBTOOL TAG CONFIG: CXX -_LT_EOF - - ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: summary of build options: - - Version: ${PACKAGE_STRING} - Host type: ${host} - ABI: ${ABI} - Install prefix: ${prefix} - Compiler: ${CC} - Static libraries: ${enable_static} - Shared libraries: ${enable_shared} -" >&5 -$as_echo "$as_me: summary of build options: - - Version: ${PACKAGE_STRING} - Host type: ${host} - ABI: ${ABI} - Install prefix: ${prefix} - Compiler: ${CC} - Static libraries: ${enable_static} - Shared libraries: ${enable_shared} -" >&6;} - -if test x$cross_compiling = xyes ; then - case "$host" in - *-*-mingw* | *-*-cygwin) - if test x$ABI = x64 ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: If wine64 is installed, use make check TESTS_ENVIRONMENT=wine64." >&5 -$as_echo "$as_me: If wine64 is installed, use make check TESTS_ENVIRONMENT=wine64." >&6;} - else - { $as_echo "$as_me:${as_lineno-$LINENO}: If wine is installed, use make check TESTS_ENVIRONMENT=wine." >&5 -$as_echo "$as_me: If wine is installed, use make check TESTS_ENVIRONMENT=wine." >&6;} - fi - ;; - esac -fi diff --git a/src/plugins/e-acsl/contrib/libgmp/configure.ac b/src/plugins/e-acsl/contrib/libgmp/configure.ac deleted file mode 100644 index dbbbc0ab59927f47f26dcdbe77859aa68df5ddcc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/configure.ac +++ /dev/null @@ -1,3811 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. - - -define(GMP_COPYRIGHT,[[ - -Copyright 1996-2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. -]]) - -AC_COPYRIGHT(GMP_COPYRIGHT) -AH_TOP(/*GMP_COPYRIGHT*/) - -AC_REVISION($Revision$) -AC_PREREQ(2.59) -AC_INIT(GNU MP, GMP_VERSION, [gmp-bugs@gmplib.org, see https://gmplib.org/manual/Reporting-Bugs.html], gmp) -AC_CONFIG_SRCDIR(gmp-impl.h) -m4_pattern_forbid([^[ \t]*GMP_]) -m4_pattern_allow(GMP_LDFLAGS) -m4_pattern_allow(GMP_LIMB_BITS) -m4_pattern_allow(GMP_MPARAM_H_SUGGEST) -m4_pattern_allow(GMP_NAIL_BITS) -m4_pattern_allow(GMP_NUMB_BITS) -m4_pattern_allow(GMP_NONSTD_ABI) -m4_pattern_allow(GMP_CPU_TYPE) - -# If --target is not used then $target_alias is empty, but if say -# "./configure athlon-pc-freebsd3.5" is used, then all three of -# $build_alias, $host_alias and $target_alias are set to -# "athlon-pc-freebsd3.5". -# -if test -n "$target_alias" && test "$target_alias" != "$host_alias"; then - AC_MSG_ERROR([--target is not appropriate for GMP -Use --build=CPU-VENDOR-OS if you need to specify your CPU and/or system -explicitly. Use --host if cross-compiling (see "Installing GMP" in the -manual for more on this).]) -fi - -GMP_INIT(config.m4) - -AC_CANONICAL_HOST - -dnl Automake "no-dependencies" is used because include file dependencies -dnl are not useful to us. Pretty much everything depends just on gmp.h, -dnl gmp-impl.h and longlong.h, and yet only rarely does everything need to -dnl be rebuilt for changes to those files. -dnl -dnl "no-dependencies" also helps with the way we're setup to run -dnl AC_PROG_CXX only conditionally. If dependencies are used then recent -dnl automake (eg 1.7.2) appends an AM_CONDITIONAL to AC_PROG_CXX, and then -dnl gets upset if it's not actually executed. -dnl -dnl Note that there's a copy of these options in the top-level Makefile.am, -dnl so update there too if changing anything. -dnl -AM_INIT_AUTOMAKE([1.8 gnu no-dependencies]) -AC_CONFIG_HEADERS(config.h:config.in) -AM_MAINTAINER_MODE - - -AC_ARG_ENABLE(assert, -AC_HELP_STRING([--enable-assert],[enable ASSERT checking [default=no]]), -[case $enableval in -yes|no) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-assert, need yes or no]) ;; -esac], -[enable_assert=no]) - -if test "$enable_assert" = "yes"; then - AC_DEFINE(WANT_ASSERT,1, - [Define to 1 to enable ASSERT checking, per --enable-assert]) - want_assert_01=1 -else - want_assert_01=0 -fi -GMP_DEFINE_RAW(["define(<WANT_ASSERT>,$want_assert_01)"]) - - -AC_ARG_ENABLE(alloca, -AC_HELP_STRING([--enable-alloca],[how to get temp memory [default=reentrant]]), -[case $enableval in -alloca|malloc-reentrant|malloc-notreentrant) ;; -yes|no|reentrant|notreentrant) ;; -debug) ;; -*) - AC_MSG_ERROR([bad value $enableval for --enable-alloca, need one of: -yes no reentrant notreentrant alloca malloc-reentrant malloc-notreentrant debug]) ;; -esac], -[enable_alloca=reentrant]) - - -# IMPROVE ME: The default for C++ is disabled. The tests currently -# performed below for a working C++ compiler are not particularly strong, -# and in general can't be expected to get the right setup on their own. The -# most significant problem is getting the ABI the same. Defaulting CXXFLAGS -# to CFLAGS takes only a small step towards this. It's also probably worth -# worrying whether the C and C++ runtimes from say gcc and a vendor C++ can -# work together. Some rather broken C++ installations were encountered -# during testing, and though such things clearly aren't GMP's problem, if -# --enable-cxx=detect were to be the default then some careful checks of -# which, if any, C++ compiler on the system is up to scratch would be -# wanted. -# -AC_ARG_ENABLE(cxx, -AC_HELP_STRING([--enable-cxx],[enable C++ support [default=no]]), -[case $enableval in -yes|no|detect) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-cxx, need yes/no/detect]) ;; -esac], -[enable_cxx=no]) - - -AC_ARG_ENABLE(assembly, -AC_HELP_STRING([--enable-assembly],[enable the use of assembly loops [default=yes]]), -[case $enableval in -yes|no) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-assembly, need yes or no]) ;; -esac], -[enable_assembly=yes]) - -if test "$enable_assembly" = "yes"; then - AC_DEFINE(WANT_ASSEMBLY,1, - [Defined to 1 as per --enable-assembly]) -fi - - -AC_ARG_ENABLE(fft, -AC_HELP_STRING([--enable-fft],[enable FFTs for multiplication [default=yes]]), -[case $enableval in -yes|no) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-fft, need yes or no]) ;; -esac], -[enable_fft=yes]) - -if test "$enable_fft" = "yes"; then - AC_DEFINE(WANT_FFT,1, - [Define to 1 to enable FFTs for multiplication, per --enable-fft]) -fi - - -AC_ARG_ENABLE(old-fft-full, -AC_HELP_STRING([--enable-old-fft-full],[enable old mpn_mul_fft_full for multiplication [default=no]]), -[case $enableval in -yes|no) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-old-fft-full, need yes or no]) ;; -esac], -[enable_old_fft_full=no]) - -if test "$enable_old_fft_full" = "yes"; then - AC_DEFINE(WANT_OLD_FFT_FULL,1, - [Define to 1 to enable old mpn_mul_fft_full for multiplication, per --enable-old-fft-full]) -fi - - -AC_ARG_ENABLE(nails, -AC_HELP_STRING([--enable-nails],[use nails on limbs [default=no]]), -[case $enableval in -[yes|no|[02468]|[0-9][02468]]) ;; -[*[13579]]) - AC_MSG_ERROR([bad value $enableval for --enable-nails, only even nail sizes supported]) ;; -*) - AC_MSG_ERROR([bad value $enableval for --enable-nails, need yes/no/number]) ;; -esac], -[enable_nails=no]) - -case $enable_nails in -yes) GMP_NAIL_BITS=2 ;; -no) GMP_NAIL_BITS=0 ;; -*) GMP_NAIL_BITS=$enable_nails ;; -esac -AC_SUBST(GMP_NAIL_BITS) - - -AC_ARG_ENABLE(profiling, -AC_HELP_STRING([--enable-profiling], - [build with profiler support [default=no]]), -[case $enableval in -no|prof|gprof|instrument) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-profiling, need no/prof/gprof/instrument]) ;; -esac], -[enable_profiling=no]) - -case $enable_profiling in - prof) - AC_DEFINE(WANT_PROFILING_PROF, 1, - [Define to 1 if --enable-profiling=prof]) - ;; - gprof) - AC_DEFINE(WANT_PROFILING_GPROF, 1, - [Define to 1 if --enable-profiling=gprof]) - ;; - instrument) - AC_DEFINE(WANT_PROFILING_INSTRUMENT, 1, - [Define to 1 if --enable-profiling=instrument]) - ;; -esac - -GMP_DEFINE_RAW(["define(<WANT_PROFILING>,<\`$enable_profiling'>)"]) - -# -fomit-frame-pointer is incompatible with -pg on some chips -if test "$enable_profiling" = gprof; then - fomit_frame_pointer= -else - fomit_frame_pointer="-fomit-frame-pointer" -fi - - -AC_ARG_WITH(readline, -AC_HELP_STRING([--with-readline], - [readline support in demo programs [default=detect]]), -[case $withval in -yes|no|detect) ;; -*) AC_MSG_ERROR([bad value $withval for --with-readline, need yes/no/detect]) ;; -esac], -[with_readline=detect]) - - -AC_ARG_ENABLE(fat, -AC_HELP_STRING([--enable-fat], - [build fat libraries on systems that support it [default=no]]), -[case $enableval in -yes|no) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-fat, need yes or no]) ;; -esac], -[enable_fat=no]) - - -AC_ARG_ENABLE(minithres, -AC_HELP_STRING([--enable-minithres], - [choose minimal thresholds for testing [default=no]]), -[case $enableval in -yes|no) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-minithres, need yes or no]) ;; -esac], -[enable_minithres=no]) - - -AC_ARG_ENABLE(fake-cpuid, -AC_HELP_STRING([--enable-fake-cpuid],[enable GMP_CPU_TYPE faking cpuid [default=no]]), -[case $enableval in -yes|no) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-fake-cpuid, need yes or no]) ;; -esac], -[enable_fake_cpuid=no]) - -if test "$enable_fake_cpuid" = "yes"; then - AC_DEFINE(WANT_FAKE_CPUID,1, - [Define to 1 to enable GMP_CPU_TYPE faking cpuid, per --enable-fake-cpuid]) -fi - - -if test $enable_fat = yes && test $enable_assembly = no ; then - AC_MSG_ERROR([when doing a fat build, disabling assembly will not work]) -fi - -if test $enable_fake_cpuid = yes && test $enable_fat = no ; then - AC_MSG_ERROR([--enable-fake-cpuid requires --enable-fat]) -fi - - -tmp_host=`echo $host_cpu | sed 's/\./_/'` -AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_$tmp_host) -GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_HOST_CPU_$tmp_host')", POST) - -dnl The HAVE_HOST_CPU_ list here only needs to have entries for those which -dnl are going to be tested, not everything that can possibly be selected. -dnl -dnl The HAVE_HOST_CPU_FAMILY_ list similarly, and note that the AC_DEFINEs -dnl for these are under the cpu specific setups below. - -AH_VERBATIM([HAVE_HOST_CPU_1], -[/* Define one of these to 1 for the host CPU family. - If your CPU is not in any of these families, leave all undefined. - For an AMD64 chip, define "x86" in ABI=32, but not in ABI=64. */ -#undef HAVE_HOST_CPU_FAMILY_alpha -#undef HAVE_HOST_CPU_FAMILY_m68k -#undef HAVE_HOST_CPU_FAMILY_power -#undef HAVE_HOST_CPU_FAMILY_powerpc -#undef HAVE_HOST_CPU_FAMILY_x86 -#undef HAVE_HOST_CPU_FAMILY_x86_64 - -/* Define one of the following to 1 for the host CPU, as per the output of - ./config.guess. If your CPU is not listed here, leave all undefined. */ -#undef HAVE_HOST_CPU_alphaev67 -#undef HAVE_HOST_CPU_alphaev68 -#undef HAVE_HOST_CPU_alphaev7 -#undef HAVE_HOST_CPU_m68020 -#undef HAVE_HOST_CPU_m68030 -#undef HAVE_HOST_CPU_m68040 -#undef HAVE_HOST_CPU_m68060 -#undef HAVE_HOST_CPU_m68360 -#undef HAVE_HOST_CPU_powerpc604 -#undef HAVE_HOST_CPU_powerpc604e -#undef HAVE_HOST_CPU_powerpc750 -#undef HAVE_HOST_CPU_powerpc7400 -#undef HAVE_HOST_CPU_supersparc -#undef HAVE_HOST_CPU_i386 -#undef HAVE_HOST_CPU_i586 -#undef HAVE_HOST_CPU_i686 -#undef HAVE_HOST_CPU_pentium -#undef HAVE_HOST_CPU_pentiummmx -#undef HAVE_HOST_CPU_pentiumpro -#undef HAVE_HOST_CPU_pentium2 -#undef HAVE_HOST_CPU_pentium3 -#undef HAVE_HOST_CPU_s390_z900 -#undef HAVE_HOST_CPU_s390_z990 -#undef HAVE_HOST_CPU_s390_z9 -#undef HAVE_HOST_CPU_s390_z10 -#undef HAVE_HOST_CPU_s390_z196 - -/* Define to 1 iff we have a s390 with 64-bit registers. */ -#undef HAVE_HOST_CPU_s390_zarch]) - - -# Table of compilers, options, and mpn paths. This code has various related -# purposes -# -# - better default CC/CFLAGS selections than autoconf otherwise gives -# - default CC/CFLAGS selections for extra CPU types specific to GMP -# - a few tests for known bad compilers -# - choice of ABIs on suitable systems -# - selection of corresponding mpn search path -# -# After GMP specific searches and tests, the standard autoconf AC_PROG_CC is -# called. User selections of CC etc are respected. -# -# Care is taken not to use macros like AC_TRY_COMPILE during the GMP -# pre-testing, since they of course depend on AC_PROG_CC, and also some of -# them cache their results, which is not wanted. -# -# The ABI selection mechanism is unique to GMP. All that reaches autoconf -# is a different selection of CC/CFLAGS according to the best ABI the system -# supports, and/or what the user selects. Naturally the mpn assembler code -# selected is very dependent on the ABI. -# -# The closest the standard tools come to a notion of ABI is something like -# "sparc64" which encodes a CPU and an ABI together. This doesn't seem to -# scale well for GMP, where exact CPU types like "ultrasparc2" are wanted, -# separate from the ABI used on them. -# -# -# The variables set here are -# -# cclist the compiler choices -# xx_cflags flags for compiler xx -# xx_cflags_maybe flags for compiler xx, if they work -# xx_cppflags cpp flags for compiler xx -# xx_cflags_optlist list of sets of optional flags -# xx_cflags_yyy set yyy of optional flags for compiler xx -# xx_ldflags -Wc,-foo flags for libtool linking with compiler xx -# ar_flags extra flags for $AR -# nm_flags extra flags for $NM -# limb limb size, can be "longlong" -# path mpn search path -# extra_functions extra mpn functions -# fat_path fat binary mpn search path [if fat binary desired] -# fat_functions fat functions -# fat_thresholds fat thresholds -# -# Suppose xx_cflags_optlist="arch", then flags from $xx_cflags_arch are -# tried, and the first flag that works will be used. An optlist like "arch -# cpu optimize" can be used to get multiple independent sets of flags tried. -# The first that works from each will be used. If no flag in a set works -# then nothing from that set is added. -# -# For multiple ABIs, the scheme extends as follows. -# -# abilist set of ABI choices -# cclist_aa compiler choices in ABI aa -# xx_aa_cflags flags for xx in ABI aa -# xx_aa_cflags_maybe flags for xx in ABI aa, if they work -# xx_aa_cppflags cpp flags for xx in ABI aa -# xx_aa_cflags_optlist list of sets of optional flags in ABI aa -# xx_aa_cflags_yyy set yyy of optional flags for compiler xx in ABI aa -# xx_aa_ldflags -Wc,-foo flags for libtool linking -# ar_aa_flags extra flags for $AR in ABI aa -# nm_aa_flags extra flags for $NM in ABI aa -# limb_aa limb size in ABI aa, can be "longlong" -# path_aa mpn search path in ABI aa -# extra_functions_aa extra mpn functions in ABI aa -# -# As a convenience, the unadorned xx_cflags (etc) are used for the last ABI -# in ablist, if an xx_aa_cflags for that ABI isn't given. For example if -# abilist="64 32" then $cc_64_cflags will be used for the 64-bit ABI, but -# for the 32-bit either $cc_32_cflags or $cc_cflags is used, whichever is -# defined. This makes it easy to add some 64-bit compilers and flags to an -# unadorned 32-bit set. -# -# limb=longlong (or limb_aa=longlong) applies to all compilers within that -# ABI. It won't work to have some needing long long and some not, since a -# single instantiated gmp.h will be used by both. -# -# SPEED_CYCLECOUNTER, cyclecounter_size and CALLING_CONVENTIONS_OBJS are -# also set here, with an ABI suffix. -# -# -# -# A table-driven approach like this to mapping cpu type to good compiler -# options is a bit of a maintenance burden, but there's not much uniformity -# between options specifications on different compilers. Some sort of -# separately updatable tool might be cute. -# -# The use of lots of variables like this, direct and indirect, tends to -# obscure when and how various things are done, but unfortunately it's -# pretty much the only way. If shell subroutines were portable then actual -# code like "if this .. do that" could be written, but attempting the same -# with full copies of GMP_PROG_CC_WORKS etc expanded at every point would -# hugely bloat the output. - - -AC_ARG_VAR(ABI, [desired ABI (for processors supporting more than one ABI)]) - -# abilist needs to be non-empty, "standard" is just a generic name here -abilist="standard" - -# FIXME: We'd like to prefer an ANSI compiler, perhaps by preferring -# c89 over cc here. But note that on HP-UX c89 provides a castrated -# environment, and would want to be excluded somehow. Maybe -# AC_PROG_CC_STDC already does enough to stick cc into ANSI mode and -# we don't need to worry. -# -cclist="gcc cc" - -gcc_cflags="-O3 -pedantic" -gcc_64_cflags="-O3 -pedantic" -cc_cflags="-O" -cc_64_cflags="-O" - -SPEED_CYCLECOUNTER_OBJ= -cyclecounter_size=2 - -AC_SUBST(HAVE_HOST_CPU_FAMILY_power, 0) -AC_SUBST(HAVE_HOST_CPU_FAMILY_powerpc,0) - -case $host in - - alpha*-*-*) - AC_DEFINE(HAVE_HOST_CPU_FAMILY_alpha) - case $host_cpu in - alphaev5* | alphapca5*) - path="alpha/ev5 alpha" ;; - alphaev67 | alphaev68 | alphaev7*) - path="alpha/ev67 alpha/ev6 alpha" ;; - alphaev6) - path="alpha/ev6 alpha" ;; - *) - path="alpha" ;; - esac - if test "$enable_assembly" = "yes" ; then - extra_functions="cntlz" - fi - gcc_cflags_optlist="asm cpu oldas" # need asm ahead of cpu, see below - gcc_cflags_maybe="-mieee" - gcc_cflags_oldas="-Wa,-oldas" # see GMP_GCC_WA_OLDAS. - - # gcc 2.7.2.3 doesn't know any -mcpu= for alpha, apparently. - # gcc 2.95 knows -mcpu= ev4, ev5, ev56, pca56, ev6. - # gcc 3.0 adds nothing. - # gcc 3.1 adds ev45, ev67 (but ev45 is the same as ev4). - # gcc 3.2 adds nothing. - # - # gcc version "2.9-gnupro-99r1" under "-O2 -mcpu=ev6" strikes internal - # compiler errors too easily and is rejected by GMP_PROG_CC_WORKS. Each - # -mcpu=ev6 below has a fallback to -mcpu=ev56 for this reason. - # - case $host_cpu in - alpha) gcc_cflags_cpu="-mcpu=ev4" ;; - alphaev5) gcc_cflags_cpu="-mcpu=ev5" ;; - alphaev56) gcc_cflags_cpu="-mcpu=ev56" ;; - alphapca56 | alphapca57) - gcc_cflags_cpu="-mcpu=pca56" ;; - alphaev6) gcc_cflags_cpu="-mcpu=ev6 -mcpu=ev56" ;; - alphaev67 | alphaev68 | alphaev7*) - gcc_cflags_cpu="-mcpu=ev67 -mcpu=ev6 -mcpu=ev56" ;; - esac - - # gcc version "2.9-gnupro-99r1" on alphaev68-dec-osf5.1 has been seen - # accepting -mcpu=ev6, but not putting the assembler in the right mode - # for what it produces. We need to do this for it, and need to do it - # before testing the -mcpu options. - # - # On old versions of gcc, which don't know -mcpu=, we believe an - # explicit -Wa,-mev5 etc will be necessary to put the assembler in - # the right mode for our .asm files and longlong.h asm blocks. - # - # On newer versions of gcc, when -mcpu= is known, we must give a -Wa - # which is at least as high as the code gcc will generate. gcc - # establishes what it needs with a ".arch" directive, our command line - # option seems to override that. - # - # gas prior to 2.14 doesn't accept -mev67, but -mev6 seems enough for - # ctlz and cttz (in 2.10.0 at least). - # - # OSF `as' accepts ev68 but stupidly treats it as ev4. -arch only seems - # to affect insns like ldbu which are expanded as macros when necessary. - # Insns like ctlz which were never available as macros are always - # accepted and always generate their plain code. - # - case $host_cpu in - alpha) gcc_cflags_asm="-Wa,-arch,ev4 -Wa,-mev4" ;; - alphaev5) gcc_cflags_asm="-Wa,-arch,ev5 -Wa,-mev5" ;; - alphaev56) gcc_cflags_asm="-Wa,-arch,ev56 -Wa,-mev56" ;; - alphapca56 | alphapca57) - gcc_cflags_asm="-Wa,-arch,pca56 -Wa,-mpca56" ;; - alphaev6) gcc_cflags_asm="-Wa,-arch,ev6 -Wa,-mev6" ;; - alphaev67 | alphaev68 | alphaev7*) - gcc_cflags_asm="-Wa,-arch,ev67 -Wa,-mev67 -Wa,-arch,ev6 -Wa,-mev6" ;; - esac - - # It might be better to ask "cc" whether it's Cray C or DEC C, - # instead of relying on the OS part of $host. But it's hard to - # imagine either of those compilers anywhere except their native - # systems. - # - GMP_INCLUDE_MPN(alpha/alpha-defs.m4) - case $host in - *-cray-unicos*) - cc_cflags="-O" # no -g, it silently disables all optimizations - GMP_INCLUDE_MPN(alpha/unicos.m4) - # Don't perform any assembly syntax tests on this beast. - gmp_asm_syntax_testing=no - ;; - *-*-osf*) - GMP_INCLUDE_MPN(alpha/default.m4) - cc_cflags="" - cc_cflags_optlist="opt cpu" - - # not sure if -fast works on old versions, so make it optional - cc_cflags_opt="-fast -O2" - - # DEC C V5.9-005 knows ev4, ev5, ev56, pca56, ev6. - # Compaq C V6.3-029 adds ev67. - # - case $host_cpu in - alpha) cc_cflags_cpu="-arch~ev4~-tune~ev4" ;; - alphaev5) cc_cflags_cpu="-arch~ev5~-tune~ev5" ;; - alphaev56) cc_cflags_cpu="-arch~ev56~-tune~ev56" ;; - alphapca56 | alphapca57) - cc_cflags_cpu="-arch~pca56~-tune~pca56" ;; - alphaev6) cc_cflags_cpu="-arch~ev6~-tune~ev6" ;; - alphaev67 | alphaev68 | alphaev7*) - cc_cflags_cpu="-arch~ev67~-tune~ev67 -arch~ev6~-tune~ev6" ;; - esac - ;; - *) - GMP_INCLUDE_MPN(alpha/default.m4) - ;; - esac - - case $host in - *-*-unicos*) - # tune/alpha.asm assumes int==4bytes but unicos uses int==8bytes - ;; - *) - SPEED_CYCLECOUNTER_OBJ=alpha.lo - cyclecounter_size=1 ;; - esac - ;; - - - # Cray vector machines. - # This must come after alpha* so that we can recognize present and future - # vector processors with a wildcard. - *-cray-unicos*) - gmp_asm_syntax_testing=no - cclist="cc" - # We used to have -hscalar0 here as a workaround for miscompilation of - # mpz/import.c, but let's hope Cray fixes their bugs instead, since - # -hscalar0 causes disastrously poor code to be generated. - cc_cflags="-O3 -hnofastmd -htask0 -Wa,-B" - path="cray" - ;; - - - arm64*-*-* | aarch64*-*-*) - # The compiler clang version 3.4 or earlier requires an explicit -mfpu=neon - # for out assembly code. Since this compiler cloaks as gcc, we have to - # fake too. - gcc_cflags_maybe="-mfpu=neon" - path="arm64" - ;; - - - arm*-*-*) - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - gcc_cflags_optlist="arch fpmode neon tune" - gcc_testlist="gcc-arm-umodsi" - GMP_INCLUDE_MPN(arm/arm-defs.m4) - CALLING_CONVENTIONS_OBJS='arm32call.lo arm32check.lo' - - # This is needed for clang, which is not content with flags like -mfpu=neon - # alone. - case $host in - *-*-*eabi) - gcc_cflags_fpmode="-mfloat-abi=softfp" ;; - *-*-*eabihf) - gcc_cflags_fpmode="-mfloat-abi=hard" ;; - esac - - # FIXME: We make mandatory compiler options optional here. We should - # either enforce them, or organise to strip paths as the corresponding - # options fail. - case $host_cpu in - armv7*) - path="arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - ;; - armv6t2*) - path="arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv6t2" - ;; - armv6*) - path="arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv6" - ;; - armsa1 | arm9tdmi | armv4*) - path="arm" - gcc_cflags_arch="-march=armv4" - ;; - armxscale | arm9te | arm10 | armv5*) - path="arm/v5 arm" - gcc_cflags_arch="-march=armv5" - ;; - arm11mpcore | arm1136 | arm1176*) - path="arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv6" - ;; - arm1156) - path="arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv6t2" - ;; - armcortexa5) - path="arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - ;; - armcortexa7) - path="arm/v7a/cora7 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a7" - ;; - armcortexa7neon) - path="arm/neon arm/v7a/cora7 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a7" - ;; - armcortexa8) - path="arm/v7a/cora8 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a8" - ;; - armcortexa8neon) - path="arm/neon arm/v7a/cora8 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a8" - ;; - armcortexa9) - path="arm/v7a/cora9 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a9" - ;; - armcortexa9neon) - path="arm/neon arm/v7a/cora9 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a9" - ;; - armcortexa15) - path="arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a15 -mtune=cortex-a9" - ;; - armcortexa15neon) - path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a15 -mtune=cortex-a9" - ;; - *) - path="arm" - ;; - esac - ;; - - - # Fujitsu - [f30[01]-fujitsu-sysv*]) - cclist="gcc vcc" - # FIXME: flags for vcc? - vcc_cflags="-g" - path="fujitsu" - ;; - - - hppa*-*-*) - # HP cc (the one sold separately) is K&R by default, but AM_C_PROTOTYPES - # will add "-Ae", or "-Aa -D_HPUX_SOURCE", to put it into ansi mode, if - # possible. - # - # gcc for hppa 2.0 can be built either for 2.0n (32-bit) or 2.0w - # (64-bit), but not both, so there's no option to choose the desired - # mode, we must instead detect which of the two it is. This is done by - # checking sizeof(long), either 4 or 8 bytes respectively. Do this in - # ABI=1.0 too, in case someone tries to build that with a 2.0w gcc. - # - gcc_cflags_optlist="arch" - gcc_testlist="sizeof-long-4" - SPEED_CYCLECOUNTER_OBJ=hppa.lo - cyclecounter_size=1 - - # FIXME: For hppa2.0*, path should be "pa32/hppa2_0 pa32/hppa1_1 pa32". - # (Can't remember why this isn't done already, have to check what .asm - # files are available in each and how they run on a typical 2.0 cpu.) - # - case $host_cpu in - hppa1.0*) path="pa32" ;; - hppa7000*) path="pa32/hppa1_1 pa32" ;; - hppa2.0* | hppa64) - path="pa32/hppa2_0 pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;; - *) # default to 7100 - path="pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;; - esac - - # gcc 2.7.2.3 knows -mpa-risc-1-0 and -mpa-risc-1-1 - # gcc 2.95 adds -mpa-risc-2-0, plus synonyms -march=1.0, 1.1 and 2.0 - # - # We don't use -mpa-risc-2-0 in ABI=1.0 because 64-bit registers may not - # be saved by the kernel on an old system. Actually gcc (as of 3.2) - # only adds a few float instructions with -mpa-risc-2-0, so it would - # probably be safe, but let's not take the chance. In any case, a - # configuration like --host=hppa2.0 ABI=1.0 is far from optimal. - # - case $host_cpu in - hppa1.0*) gcc_cflags_arch="-mpa-risc-1-0" ;; - *) # default to 7100 - gcc_cflags_arch="-mpa-risc-1-1" ;; - esac - - case $host_cpu in - hppa1.0*) cc_cflags="+O2" ;; - *) # default to 7100 - cc_cflags="+DA1.1 +O2" ;; - esac - - case $host in - hppa2.0*-*-* | hppa64-*-*) - cclist_20n="gcc cc" - abilist="2.0n 1.0" - path_20n="pa64" - limb_20n=longlong - any_20n_testlist="sizeof-long-4" - SPEED_CYCLECOUNTER_OBJ_20n=hppa2.lo - cyclecounter_size_20n=2 - - # -mpa-risc-2-0 is only an optional flag, in case an old gcc is - # used. Assembler support for 2.0 is essential though, for our asm - # files. - gcc_20n_cflags="$gcc_cflags" - gcc_20n_cflags_optlist="arch" - gcc_20n_cflags_arch="-mpa-risc-2-0 -mpa-risc-1-1" - gcc_20n_testlist="sizeof-long-4 hppa-level-2.0" - - cc_20n_cflags="+DA2.0 +e +O2 -Wl,+vnocompatwarnings" - cc_20n_testlist="hpc-hppa-2-0" - - # ABI=2.0w is available for hppa2.0w and hppa2.0, but not for - # hppa2.0n, on the assumption that that the latter indicates a - # desire for ABI=2.0n. - case $host in - hppa2.0n-*-*) ;; - *) - # HPUX 10 and earlier cannot run 2.0w. Not sure about other - # systems (GNU/Linux for instance), but lets assume they're ok. - case $host in - [*-*-hpux[1-9] | *-*-hpux[1-9].* | *-*-hpux10 | *-*-hpux10.*]) ;; - [*-*-linux*]) abilist="1.0" ;; # due to linux permanent kernel bug - *) abilist="2.0w $abilist" ;; - esac - - cclist_20w="gcc cc" - gcc_20w_cflags="$gcc_cflags -mpa-risc-2-0" - cc_20w_cflags="+DD64 +O2" - cc_20w_testlist="hpc-hppa-2-0" - path_20w="pa64" - any_20w_testlist="sizeof-long-8" - SPEED_CYCLECOUNTER_OBJ_20w=hppa2w.lo - cyclecounter_size_20w=2 - ;; - esac - ;; - esac - ;; - - - IA64_PATTERN) - abilist="64" - GMP_INCLUDE_MPN(ia64/ia64-defs.m4) - SPEED_CYCLECOUNTER_OBJ=ia64.lo - any_32_testlist="sizeof-long-4" - - case $host_cpu in - itanium) path="ia64/itanium ia64" ;; - itanium2) path="ia64/itanium2 ia64" ;; - *) path="ia64" ;; - esac - - gcc_64_cflags_optlist="tune" - gcc_32_cflags_optlist=$gcc_64_cflags_optlist - - # gcc pre-release 3.4 adds -mtune itanium and itanium2 - case $host_cpu in - itanium) gcc_cflags_tune="-mtune=itanium" ;; - itanium2) gcc_cflags_tune="-mtune=itanium2" ;; - esac - - case $host in - *-*-linux*) - cclist="gcc icc" - icc_cflags="-no-gcc" - icc_cflags_optlist="opt" - # Don't use -O3, it is for "large data sets" and also miscompiles GMP. - # But icc miscompiles GMP at any optimization level, at higher levels - # it miscompiles more files... - icc_cflags_opt="-O2 -O1" - icc_cflags_opt_maybe="-fp-model~precise" - ;; - - *-*-hpux*) - # HP cc sometimes gets internal errors if the optimization level is - # too high. GMP_PROG_CC_WORKS detects this, the "_opt" fallbacks - # let us use whatever seems to work. - # - abilist="32 64" - any_64_testlist="sizeof-long-8" - - cclist_32="gcc cc" - path_32="ia64" - cc_32_cflags="" - cc_32_cflags_optlist="opt" - cc_32_cflags_opt="+O2 +O1" - gcc_32_cflags="$gcc_cflags -milp32" - limb_32=longlong - SPEED_CYCLECOUNTER_OBJ_32=ia64.lo - cyclecounter_size_32=2 - - # Must have +DD64 in CPPFLAGS to get the right __LP64__ for headers, - # but also need it in CFLAGS for linking programs, since automake - # only uses CFLAGS when linking, not CPPFLAGS. - # FIXME: Maybe should use cc_64_ldflags for this, but that would - # need GMP_LDFLAGS used consistently by all the programs. - # - cc_64_cflags="+DD64" - cc_64_cppflags="+DD64" - cc_64_cflags_optlist="opt" - cc_64_cflags_opt="+O2 +O1" - gcc_64_cflags="$gcc_cflags -mlp64" - ;; - esac - ;; - - - # Motorola 68k - # - M68K_PATTERN) - AC_DEFINE(HAVE_HOST_CPU_FAMILY_m68k) - GMP_INCLUDE_MPN(m68k/m68k-defs.m4) - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - gcc_cflags_optlist="arch" - - # gcc 2.7.2 knows -m68000, -m68020, -m68030, -m68040. - # gcc 2.95 adds -mcpu32, -m68060. - # FIXME: Maybe "-m68020 -mnobitfield" would suit cpu32 on 2.7.2. - # - case $host_cpu in - m68020) gcc_cflags_arch="-m68020" ;; - m68030) gcc_cflags_arch="-m68030" ;; - m68040) gcc_cflags_arch="-m68040" ;; - m68060) gcc_cflags_arch="-m68060 -m68000" ;; - m68360) gcc_cflags_arch="-mcpu32 -m68000" ;; - *) gcc_cflags_arch="-m68000" ;; - esac - - # FIXME: m68k/mc68020 looks like it's ok for cpu32, but this wants to be - # tested. Will need to introduce an m68k/cpu32 if m68k/mc68020 ever uses - # the bitfield instructions. - case $host_cpu in - [m680[234]0 | m68360]) path="m68k/mc68020 m68k" ;; - *) path="m68k" ;; - esac - ;; - - - # Motorola 88k - m88k*-*-*) - path="m88k" - ;; - m88110*-*-*) - gcc_cflags="$gcc_cflags -m88110" - path="m88k/mc88110 m88k" - ;; - - - # IRIX 5 and earlier can only run 32-bit o32. - # - # IRIX 6 and up always has a 64-bit mips CPU can run n32 or 64. n32 is - # preferred over 64, but only because that's been the default in past - # versions of GMP. The two are equally efficient. - # - # Linux kernel 2.2.13 arch/mips/kernel/irixelf.c has a comment about not - # supporting n32 or 64. - # - # For reference, libtool (eg. 1.5.6) recognises the n32 ABI and knows the - # right options to use when linking (both cc and gcc), so no need for - # anything special from us. - # - mips*-*-*) - abilist="o32" - gcc_cflags_optlist="abi" - gcc_cflags_abi="-mabi=32 -m32" - gcc_testlist="gcc-mips-o32" - path="mips32" - cc_cflags="-O2 -o32" # no -g, it disables all optimizations - # this suits both mips32 and mips64 - GMP_INCLUDE_MPN(mips32/mips-defs.m4) - - case $host in - [mips64*-*-* | mips*-*-irix[6789]*]) - abilist="n32 64 o32" - - cclist_n32="gcc cc" - gcc_n32_cflags_optlist="abi" - gcc_n32_cflags="$gcc_cflags" - gcc_n32_cflags_abi="-mabi=n32 -mn32" - cc_n32_cflags="-O2 -n32" # no -g, it disables all optimizations - limb_n32=longlong - path_n32="mips64" - - cclist_64="gcc cc" - gcc_64_cflags_optlist="abi" - gcc_64_cflags="$gcc_cflags" - gcc_64_cflags_abi="-mabi=64 -m64" - gcc_64_ldflags="-Wc,-mabi=64" - cc_64_cflags="-O2 -64" # no -g, it disables all optimizations - cc_64_ldflags="-Wc,-64" - path_64="mips64" - ;; - esac - ;; - - - # Darwin (powerpc-apple-darwin1.3) has it's hacked gcc installed as cc. - # Our usual "gcc in disguise" detection means gcc_cflags etc here gets - # used. - # - # The darwin pre-compiling preprocessor is disabled with -no-cpp-precomp - # since it doesn't like "__attribute__ ((mode (SI)))" etc in gmp-impl.h, - # and so always ends up running the plain preprocessor anyway. This could - # be done in CPPFLAGS rather than CFLAGS, but there's not many places - # preprocessing is done separately, and this is only a speedup, the normal - # preprocessor gets run if there's any problems. - # - # We used to use -Wa,-mppc with gcc, but can't remember exactly why. - # Presumably it was for old versions of gcc where -mpowerpc doesn't put - # the assembler in the right mode. In any case -Wa,-mppc is not good, for - # instance -mcpu=604 makes recent gcc use -m604 to get access to the - # "fsel" instruction, but a -Wa,-mppc overrides that, making code that - # comes out with fsel fail. - # - # (Note also that the darwin assembler doesn't accept "-mppc", so any - # -Wa,-mppc was used only if it worked. The right flag on darwin would be - # "-arch ppc" or some such, but that's already the default.) - # - [powerpc*-*-* | power[3-9]-*-*]) - AC_DEFINE(HAVE_HOST_CPU_FAMILY_powerpc) - HAVE_HOST_CPU_FAMILY_powerpc=1 - abilist="32" - cclist="gcc cc" - cc_cflags="-O2" - gcc_32_cflags_maybe="-m32" - gcc_cflags_optlist="precomp subtype asm cpu" - gcc_cflags_precomp="-no-cpp-precomp" - gcc_cflags_subtype="-force_cpusubtype_ALL" # for vmx on darwin - gcc_cflags_asm="" - gcc_cflags_cpu="" - vmx_path="" - - # grab this object, though it's not a true cycle counter routine - SPEED_CYCLECOUNTER_OBJ=powerpc.lo - cyclecounter_size=0 - - case $host_cpu in - powerpc740 | powerpc750) - path="powerpc32/750 powerpc32" ;; - powerpc7400 | powerpc7410) - path="powerpc32/vmx powerpc32/750 powerpc32" ;; - [powerpc74[45]?]) - path="powerpc32/vmx powerpc32" ;; - *) - path="powerpc32" ;; - esac - - case $host_cpu in - powerpc401) gcc_cflags_cpu="-mcpu=401" ;; - powerpc403) gcc_cflags_cpu="-mcpu=403" - xlc_cflags_arch="-qarch=403 -qarch=ppc" ;; - powerpc405) gcc_cflags_cpu="-mcpu=405" ;; - powerpc505) gcc_cflags_cpu="-mcpu=505" ;; - powerpc601) gcc_cflags_cpu="-mcpu=601" - xlc_cflags_arch="-qarch=601 -qarch=ppc" ;; - powerpc602) gcc_cflags_cpu="-mcpu=602" - xlc_cflags_arch="-qarch=602 -qarch=ppc" ;; - powerpc603) gcc_cflags_cpu="-mcpu=603" - xlc_cflags_arch="-qarch=603 -qarch=ppc" ;; - powerpc603e) gcc_cflags_cpu="-mcpu=603e -mcpu=603" - xlc_cflags_arch="-qarch=603 -qarch=ppc" ;; - powerpc604) gcc_cflags_cpu="-mcpu=604" - xlc_cflags_arch="-qarch=604 -qarch=ppc" ;; - powerpc604e) gcc_cflags_cpu="-mcpu=604e -mcpu=604" - xlc_cflags_arch="-qarch=604 -qarch=ppc" ;; - powerpc620) gcc_cflags_cpu="-mcpu=620" ;; - powerpc630) gcc_cflags_cpu="-mcpu=630" - xlc_cflags_arch="-qarch=pwr3" - cpu_path="p3 p3-p7" ;; - powerpc740) gcc_cflags_cpu="-mcpu=740" ;; - powerpc7400 | powerpc7410) - gcc_cflags_asm="-Wa,-maltivec" - gcc_cflags_cpu="-mcpu=7400 -mcpu=750" ;; - [powerpc74[45]?]) - gcc_cflags_asm="-Wa,-maltivec" - gcc_cflags_cpu="-mcpu=7450" ;; - powerpc750) gcc_cflags_cpu="-mcpu=750" ;; - powerpc801) gcc_cflags_cpu="-mcpu=801" ;; - powerpc821) gcc_cflags_cpu="-mcpu=821" ;; - powerpc823) gcc_cflags_cpu="-mcpu=823" ;; - powerpc860) gcc_cflags_cpu="-mcpu=860" ;; - powerpc970) gcc_cflags_cpu="-mtune=970" - xlc_cflags_arch="-qarch=970 -qarch=pwr3" - vmx_path="powerpc64/vmx" - cpu_path="p4 p3-p7" ;; - power4) gcc_cflags_cpu="-mtune=power4" - xlc_cflags_arch="-qarch=pwr4" - cpu_path="p4 p3-p7" ;; - power5) gcc_cflags_cpu="-mtune=power5 -mtune=power4" - xlc_cflags_arch="-qarch=pwr5" - cpu_path="p5 p4 p3-p7" ;; - power6) gcc_cflags_cpu="-mtune=power6" - xlc_cflags_arch="-qarch=pwr6" - cpu_path="p6 p3-p7" ;; - power7) gcc_cflags_cpu="-mtune=power7 -mtune=power5" - xlc_cflags_arch="-qarch=pwr7 -qarch=pwr5" - cpu_path="p7 p5 p4 p3-p7" ;; - [power[89]]) gcc_cflags_cpu="-mtune=power8 -mtune=power7 -mtune=power5" - xlc_cflags_arch="-qarch=pwr8 -qarch=pwr7 -qarch=pwr5" - cpu_path="p8 p7 p5 p4 p3-p7" ;; - esac - - case $host in - *-*-aix*) - cclist="gcc xlc cc" - gcc_32_cflags_maybe="-maix32" - xlc_cflags="-O2 -qmaxmem=20000" - xlc_cflags_optlist="arch" - xlc_32_cflags_maybe="-q32" - ar_32_flags="-X32" - nm_32_flags="-X32" - esac - - case $host in - POWERPC64_PATTERN) - case $host in - *-*-aix*) - # On AIX a true 64-bit ABI is available. - # Need -Wc to pass object type flags through to the linker. - abilist="mode64 $abilist" - cclist_mode64="gcc xlc" - gcc_mode64_cflags="$gcc_cflags -maix64 -mpowerpc64" - gcc_mode64_cflags_optlist="cpu" - gcc_mode64_ldflags="-Wc,-maix64" - xlc_mode64_cflags="-O2 -q64 -qmaxmem=20000" - xlc_mode64_cflags_optlist="arch" - xlc_mode64_ldflags="-Wc,-q64" - # Must indicate object type to ar and nm - ar_mode64_flags="-X64" - nm_mode64_flags="-X64" - path_mode64="" - p="" - for i in $cpu_path - do path_mode64="${path_mode64}powerpc64/mode64/$i " - path_mode64="${path_mode64}powerpc64/$i " - p="${p} powerpc32/$i " - done - path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" - path="$p $path" - # grab this object, though it's not a true cycle counter routine - SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo - cyclecounter_size_mode64=0 - ;; - *-*-darwin*) - # On Darwin we can use 64-bit instructions with a longlong limb, - # but the chip still in 32-bit mode. - # In theory this can be used on any OS which knows how to save - # 64-bit registers in a context switch. - # - # Note that we must use -mpowerpc64 with gcc, since the - # longlong.h macros expect limb operands in a single 64-bit - # register, not two 32-bit registers as would be given for a - # long long without -mpowerpc64. In theory we could detect and - # accommodate both styles, but the proper 64-bit registers will - # be fastest and are what we really want to use. - # - # One would think -mpowerpc64 would set the assembler in the right - # mode to handle 64-bit instructions. But for that, also - # -force_cpusubtype_ALL is needed. - # - # Do not use -fast for Darwin, it actually adds options - # incompatible with a shared library. - # - abilist="mode64 mode32 $abilist" - gcc_cflags_opt="-O3 -O2 -O1" # will this become used? - cclist_mode32="gcc" - gcc_mode32_cflags_maybe="-m32" - gcc_mode32_cflags="-mpowerpc64" - gcc_mode32_cflags_optlist="subtype cpu opt" - gcc_mode32_cflags_subtype="-force_cpusubtype_ALL" - gcc_mode32_cflags_opt="-O3 -O2 -O1" - limb_mode32=longlong - cclist_mode64="gcc" - gcc_mode64_cflags="-m64" - gcc_mode64_cflags_optlist="cpu opt" - gcc_mode64_cflags_opt="-O3 -O2 -O1" - path_mode64="" - path_mode32="" - p="" - for i in $cpu_path - do path_mode64="${path_mode64}powerpc64/mode64/$i " - path_mode64="${path_mode64}powerpc64/$i " - path_mode32="${path_mode32}powerpc64/mode32/$i " - path_mode32="${path_mode32}powerpc64/$i " - p="${p} powerpc32/$i " - done - path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" - path_mode32="${path_mode32}powerpc64/mode32 $vmx_path powerpc64" - path="$p $path" - SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo - cyclecounter_size_mode64=0 - any_mode64_testlist="sizeof-long-8" - ;; - *-*-linux* | *-*-*bsd*) - # On GNU/Linux, assume the processor is in 64-bit mode. Some - # environments have a gcc that is always in 64-bit mode, while - # others require -m64, hence the use of cflags_maybe. The - # sizeof-long-8 test checks the mode is right (for the no option - # case). - # - # -mpowerpc64 is not used, since it should be the default in - # 64-bit mode. (We need its effect for the various longlong.h - # asm macros to be right of course.) - # - # gcc64 was an early port of gcc to 64-bit mode, but should be - # obsolete before too long. We prefer plain gcc when it knows - # 64-bits. - # - abilist="mode64 mode32 $abilist" - cclist_mode32="gcc" - gcc_mode32_cflags_maybe="-m32" - gcc_mode32_cflags="-mpowerpc64" - gcc_mode32_cflags_optlist="cpu opt" - gcc_mode32_cflags_opt="-O3 -O2 -O1" - limb_mode32=longlong - cclist_mode64="gcc gcc64" - gcc_mode64_cflags_maybe="-m64" - gcc_mode64_cflags_optlist="cpu opt" - gcc_mode64_cflags_opt="-O3 -O2 -O1" - path_mode64="" - path_mode32="" - p="" - for i in $cpu_path - do path_mode64="${path_mode64}powerpc64/mode64/$i " - path_mode64="${path_mode64}powerpc64/$i " - path_mode32="${path_mode32}powerpc64/mode32/$i " - path_mode32="${path_mode32}powerpc64/$i " - p="${p} powerpc32/$i " - done - path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" - path_mode32="${path_mode32}powerpc64/mode32 $vmx_path powerpc64" - path="$p $path" - SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo - cyclecounter_size_mode64=0 - any_mode64_testlist="sizeof-long-8" - ;; - esac - ;; - esac - ;; - - - # POWER 32-bit - [power-*-* | power[12]-*-* | power2sc-*-*]) - AC_DEFINE(HAVE_HOST_CPU_FAMILY_power) - HAVE_HOST_CPU_FAMILY_power=1 - cclist="gcc" - extra_functions="udiv_w_sdiv" - path="power" - - # gcc 2.7.2 knows rios1, rios2, rsc - # - # -mcpu=rios2 can tickle an AIX assembler bug (see GMP_PROG_CC_WORKS) so - # there needs to be a fallback to just -mpower. - # - gcc_cflags_optlist="cpu" - case $host in - power-*-*) gcc_cflags_cpu="-mcpu=power -mpower" ;; - power1-*-*) gcc_cflags_cpu="-mcpu=rios1 -mpower" ;; - power2-*-*) gcc_cflags_cpu="-mcpu=rios2 -mpower" ;; - power2sc-*-*) gcc_cflags_cpu="-mcpu=rsc -mpower" ;; - esac - case $host in - *-*-aix*) - cclist="gcc xlc" - xlc_cflags="-O2 -qarch=pwr -qmaxmem=20000" - ;; - esac - ;; - - - # IBM System/390 and z/Architecture - S390_PATTERN | S390X_PATTERN) - abilist="32" - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - gcc_cflags_optlist="arch" - path="s390_32" - extra_functions="udiv_w_sdiv" - gcc_32_cflags_maybe="-m31" - - case $host_cpu in - s390) - ;; - z900 | z900esa) - cpu="z900" - gccarch="$cpu" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) - AC_DEFINE(HAVE_HOST_CPU_s390_zarch) - extra_functions="" - ;; - z990 | z990esa) - cpu="z990" - gccarch="$cpu" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) - AC_DEFINE(HAVE_HOST_CPU_s390_zarch) - extra_functions="" - ;; - z9 | z9esa) - cpu="z9" - gccarch="z9-109" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) - AC_DEFINE(HAVE_HOST_CPU_s390_zarch) - extra_functions="" - ;; - z10 | z10esa) - cpu="z10" - gccarch="z10" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) - AC_DEFINE(HAVE_HOST_CPU_s390_zarch) - extra_functions="" - ;; - z196 | z196esa) - cpu="z196" - gccarch="z196" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) - AC_DEFINE(HAVE_HOST_CPU_s390_zarch) - extra_functions="" - ;; - esac - - case $host in - S390X_PATTERN) - abilist="64 32" - cclist_64="gcc" - gcc_64_cflags_optlist="arch" - gcc_64_cflags="$gcc_cflags -m64" - path_64="s390_64/$host_cpu s390_64" - extra_functions="" - ;; - esac - ;; - - - sh-*-*) path="sh" ;; - [sh[2-4]-*-*]) path="sh/sh2 sh" ;; - - - *sparc*-*-*) - # sizeof(long)==4 or 8 is tested, to ensure we get the right ABI. We've - # had various bug reports where users have set CFLAGS for their desired - # mode, but not set our ABI. For some reason it's sparc where this - # keeps coming up, presumably users there are accustomed to driving the - # compiler mode that way. The effect of our testlist setting is to - # reject ABI=64 in favour of ABI=32 if the user has forced the flags to - # 32-bit mode. - # - abilist="32" - cclist="gcc acc cc" - any_testlist="sizeof-long-4" - GMP_INCLUDE_MPN(sparc32/sparc-defs.m4) - - case $host_cpu in - sparcv8 | microsparc | turbosparc) - path="sparc32/v8 sparc32" ;; - supersparc) - path="sparc32/v8/supersparc sparc32/v8 sparc32" ;; - [sparc64 | sparcv9* | ultrasparc | ultrasparc[234]*]) - path="sparc32/v9 sparc32/v8 sparc32" ;; - [ultrasparct[12345]]) - path="sparc32/ultrasparct1 sparc32/v8 sparc32" ;; - *) - path="sparc32" ;; - esac - - # gcc 2.7.2 doesn't know about v9 and doesn't pass -xarch=v8plus to the - # assembler. Add it explicitly since the solaris assembler won't accept - # our sparc32/v9 asm code without it. gas accepts -xarch=v8plus too, so - # it can be in the cflags unconditionally (though gas doesn't need it). - # - # gcc -m32 is needed to force 32-bit mode on a dual-ABI system, but past - # gcc doesn't know that flag, hence cflags_maybe. Note that -m32 cannot - # be done through the optlist since the plain cflags would be run first - # and we don't want to require the default mode (whatever it is) works. - # - # Note it's gcc_32_cflags_maybe and not gcc_cflags_maybe because the - # latter would be used in the 64-bit ABI on systems like "*bsd" where - # abilist="64" only. - # - gcc_32_cflags_maybe="-m32" - gcc_cflags_optlist="cpu asm" - - # gcc 2.7.2 knows -mcypress, -msupersparc, -mv8, -msparclite. - # gcc 2.95 knows -mcpu= v7, hypersparc, sparclite86x, f930, f934, - # sparclet, tsc701, v9, ultrasparc. A warning is given that the - # plain -m forms will disappear. - # gcc 3.3 adds ultrasparc3. - # - case $host_cpu in - supersparc*) - gcc_cflags_cpu="-mcpu=supersparc -msupersparc" - gcc_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8";; - sparcv8 | microsparc* | turbosparc | hypersparc*) - gcc_cflags_cpu="-mcpu=v8 -mv8" - gcc_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8";; - sparc64 | sparcv9*) - gcc_cflags_cpu="-mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8plus" - gcc_64_cflags_asm="-Wa,-Av9 -Wa,-xarch=v9";; - ultrasparc1 | ultrasparc2*) - gcc_cflags_cpu="-mcpu=ultrasparc -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusa -Wa,-xarch=v8plusa" - gcc_64_cflags_asm="-Wa,-Av9a -Wa,-xarch=v9a";; - [ultrasparc[34]]) - gcc_cflags_cpu="-mcpu=ultrasparc3 -mcpu=ultrasparc -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusb -Wa,-xarch=v8plusb" - gcc_64_cflags_asm="-Wa,-Av9b -Wa,-xarch=v9b";; - [ultrasparct[12]]) - gcc_cflags_cpu="-mcpu=niagara -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusc -Wa,-xarch=v8plusc" - gcc_64_cflags_asm="-Wa,-Av9c -Wa,-xarch=v9c";; - ultrasparct3) - gcc_cflags_cpu="-mcpu=niagara3 -mcpu=niagara -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusd -Wa,-xarch=v8plusd" - gcc_64_cflags_asm="-Wa,-Av9d -Wa,-xarch=v9d";; - [ultrasparct[45]]) - gcc_cflags_cpu="-mcpu=niagara4 -mcpu=niagara3 -mcpu=niagara -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusd -Wa,-xarch=v8plusd" - gcc_64_cflags_asm="-Wa,-Av9d -Wa,-xarch=v9d";; - *) - gcc_cflags_cpu="-mcpu=v7 -mcypress" - gcc_cflags_asm="";; - esac - - # SunPRO cc and acc, and SunOS bundled cc - case $host in - *-*-solaris* | *-*-sunos*) - # Note no -g, it disables all optimizations. - cc_cflags= - cc_cflags_optlist="opt arch cpu" - - # SunOS <= 4 cc doesn't know -xO3, fallback to -O2. - cc_cflags_opt="-xO3 -O2" - - # SunOS cc doesn't know -xarch, apparently always generating v7 - # code, so make this optional - case $host_cpu in - sparcv8 | microsparc* | supersparc* | turbosparc | hypersparc*) - cc_cflags_arch="-xarch=v8";; - [ultrasparct[345]]) - cc_cflags_arch="-xarch=v8plusd" ;; - sparc64 | sparcv9* | ultrasparc*) - cc_cflags_arch="-xarch=v8plus" ;; - *) - cc_cflags_arch="-xarch=v7" ;; - esac - - # SunOS cc doesn't know -xchip and doesn't seem to have an equivalent. - # SunPRO cc 5 recognises -xchip=generic, old, super, super2, micro, - # micro2, hyper, hyper2, powerup, ultra, ultra2, ultra2i. - # SunPRO cc 6 adds -xchip=ultra2e, ultra3cu. - # - case $host_cpu in - supersparc*) cc_cflags_cpu="-xchip=super" ;; - microsparc*) cc_cflags_cpu="-xchip=micro" ;; - turbosparc) cc_cflags_cpu="-xchip=micro2" ;; - hypersparc*) cc_cflags_cpu="-xchip=hyper" ;; - ultrasparc) cc_cflags_cpu="-xchip=ultra" ;; - ultrasparc2) cc_cflags_cpu="-xchip=ultra2 -xchip=ultra" ;; - ultrasparc2i) cc_cflags_cpu="-xchip=ultra2i -xchip=ultra2 -xchip=ultra" ;; - ultrasparc3) cc_cflags_cpu="-xchip=ultra3 -xchip=ultra" ;; - ultrasparc4) cc_cflags_cpu="-xchip=ultra4 -xchip=ultra3 -xchip=ultra" ;; - ultrasparct1) cc_cflags_cpu="-xchip=ultraT1" ;; - ultrasparct2) cc_cflags_cpu="-xchip=ultraT2 -xchip=ultraT1" ;; - ultrasparct3) cc_cflags_cpu="-xchip=ultraT3 -xchip=ultraT2" ;; - ultrasparct4) cc_cflags_cpu="-xchip=T4" ;; - ultrasparct5) cc_cflags_cpu="-xchip=T5 -xchip=T4" ;; - *) cc_cflags_cpu="-xchip=generic" ;; - esac - esac - - case $host_cpu in - sparc64 | sparcv9* | ultrasparc*) - case $host in - # Solaris 6 and earlier cannot run ABI=64 since it doesn't save - # registers properly, so ABI=32 is left as the only choice. - # - [*-*-solaris2.[0-6] | *-*-solaris2.[0-6].*]) ;; - - # BSD sparc64 ports are 64-bit-only systems, so ABI=64 is the only - # choice. In fact they need no special compiler flags, gcc -m64 - # is the default, but it doesn't hurt to add it. v9 CPUs always - # use the sparc64 port, since the plain 32-bit sparc ports don't - # run on a v9. - # - *-*-*bsd*) abilist="64" ;; - - # For all other systems, we try both 64 and 32. - # - # GNU/Linux sparc64 has only recently gained a 64-bit user mode. - # In the past sparc64 meant a v9 cpu, but there were no 64-bit - # operations in user mode. We assume that if "gcc -m64" works - # then the system is suitable. Hopefully even if someone attempts - # to put a new gcc and/or glibc on an old system it won't run. - # - *) abilist="64 32" ;; - esac - - case $host_cpu in - ultrasparc | ultrasparc2 | ultrasparc2i) - path_64="sparc64/ultrasparc1234 sparc64" ;; - [ultrasparc[34]]) - path_64="sparc64/ultrasparc34 sparc64/ultrasparc1234 sparc64" ;; - [ultrasparct[12]]) - path_64="sparc64/ultrasparct1 sparc64" ;; - [ultrasparct[345]]) - path_64="sparc64/ultrasparct3 sparc64" ;; - *) - path_64="sparc64" - esac - - cclist_64="gcc" - any_64_testlist="sizeof-long-8" - - # gcc -mptr64 is probably implied by -m64, but we're not sure if - # this was always so. On Solaris in the past we always used both - # "-m64 -mptr64". - # - # gcc -Wa,-xarch=v9 is thought to be necessary in some cases on - # solaris, but it would seem likely that if gcc is going to generate - # 64-bit code it will have to add that option itself where needed. - # An extra copy of this option should be harmless though, but leave - # it until we're sure. (Might want -xarch=v9a or -xarch=v9b for the - # higher cpu types instead.) - # - gcc_64_cflags="$gcc_cflags -m64 -mptr64" - gcc_64_ldflags="-Wc,-m64" - gcc_64_cflags_optlist="cpu asm" - - case $host in - *-*-solaris*) - # Sun cc. - # - # We used to have -fast and some fixup options here, but it - # recurrently caused problems with miscompilation. Of course, - # -fast is documented as miscompiling things for the sake of speed. - # - cclist_64="$cclist_64 cc" - cc_64_cflags_optlist="cpu" - case $host_cpu in - [ultrasparct[345]]) - cc_64_cflags="$cc_64_cflags -xO3 -xarch=v9d" ;; - *) - cc_64_cflags="-xO3 -xarch=v9" ;; - esac - ;; - esac - - # using the v9 %tick register - SPEED_CYCLECOUNTER_OBJ_32=sparcv9.lo - SPEED_CYCLECOUNTER_OBJ_64=sparcv9.lo - cyclecounter_size_32=2 - cyclecounter_size_64=2 - ;; - esac - ;; - - - # VAX - vax*-*-*elf*) - # Use elf conventions (i.e., '%' register prefix, no global prefix) - # - GMP_INCLUDE_MPN(vax/elf.m4) - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - path="vax" - extra_functions="udiv_w_sdiv" - ;; - vax*-*-*) - # Default to aout conventions (i.e., no register prefix, '_' global prefix) - # - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - path="vax" - extra_functions="udiv_w_sdiv" - ;; - - - # AMD and Intel x86 configurations, including AMD64 - # - # Rumour has it gcc -O2 used to give worse register allocation than just - # -O, but lets assume that's no longer true. - # - # -m32 forces 32-bit mode on a bi-arch 32/64 amd64 build of gcc. -m64 is - # the default in such a build (we think), so -m32 is essential for ABI=32. - # This is, of course, done for any $host_cpu, not just x86_64, so we can - # get such a gcc into the right mode to cross-compile to say i486-*-*. - # - # -m32 is not available in gcc 2.95 and earlier, hence cflags_maybe to use - # it when it works. We check sizeof(long)==4 to ensure we get the right - # mode, in case -m32 has failed not because it's an old gcc, but because - # it's a dual 32/64-bit gcc without a 32-bit libc, or whatever. - # - X86_PATTERN | X86_64_PATTERN) - abilist="32" - cclist="gcc icc cc" - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - gcc_32_cflags_maybe="-m32" - icc_cflags="-no-gcc" - icc_cflags_optlist="opt" - icc_cflags_opt="-O3 -O2 -O1" - icc_cflags_opt_maybe="-fp-model~precise" - any_32_testlist="sizeof-long-4" - gcc_cflags_optlist="cpu arch noavx" - CALLING_CONVENTIONS_OBJS='x86call.lo x86check$U.lo' - - # Availability of rdtsc is checked at run-time. - SPEED_CYCLECOUNTER_OBJ=pentium.lo - - # gcc 2.7.2 only knows i386 and i486, using -m386 or -m486. These - # represent -mcpu= since -m486 doesn't generate 486 specific insns. - # gcc 2.95 adds k6, pentium and pentiumpro, and takes -march= and -mcpu=. - # gcc 3.0 adds athlon. - # gcc 3.1 adds k6-2, k6-3, pentium-mmx, pentium2, pentium3, pentium4, - # athlon-tbird, athlon-4, athlon-xp, athlon-mp. - # gcc 3.2 adds winchip2. - # gcc 3.3 adds winchip-c6. - # gcc 3.3.1 from mandrake adds k8 and knows -mtune. - # gcc 3.4 adds c3, c3-2, k8, and deprecates -mcpu in favour of -mtune. - # - # In gcc 2.95.[0123], -march=pentiumpro provoked a stack slot bug in an - # old version of mpz/powm.c. Seems to be fine with the current code, so - # no need for any restrictions on that option. - # - # -march=pentiumpro can fail if the assembler doesn't know "cmov" - # (eg. solaris 2.8 native "as"), so always have -march=pentium after - # that as a fallback. - # - # -march=pentium4 and -march=k8 enable SSE2 instructions, which may or - # may not be supported by the assembler and/or the OS, and is bad in gcc - # prior to 3.3. The tests will reject these if no good, so fallbacks - # like "-march=pentium4 -mno-sse2" are given to try also without SSE2. - # Note the relevant -march types are listed in the optflags handling - # below, be sure to update there if adding new types emitting SSE2. - # - # -mtune is used at the start of each cpu option list to give something - # gcc 3.4 will use, thereby avoiding warnings from -mcpu. -mcpu forms - # are retained for use by prior gcc. For example pentium has - # "-mtune=pentium -mcpu=pentium ...", the -mtune is for 3.4 and the - # -mcpu for prior. If there's a brand new choice in 3.4 for a chip, - # like k8 for x86_64, then it can be the -mtune at the start, no need to - # duplicate anything. - # - case $host_cpu in - i386*) - gcc_cflags_cpu="-mtune=i386 -mcpu=i386 -m386" - gcc_cflags_arch="-march=i386" - path="x86" - ;; - i486*) - gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486" - gcc_cflags_arch="-march=i486" - path="x86/i486 x86" - ;; - i586 | pentium) - gcc_cflags_cpu="-mtune=pentium -mcpu=pentium -m486" - gcc_cflags_arch="-march=pentium" - path="x86/pentium x86" - ;; - pentiummmx) - gcc_cflags_cpu="-mtune=pentium-mmx -mcpu=pentium-mmx -mcpu=pentium -m486" - gcc_cflags_arch="-march=pentium-mmx -march=pentium" - path="x86/pentium/mmx x86/pentium x86/mmx x86" - ;; - i686 | pentiumpro) - gcc_cflags_cpu="-mtune=pentiumpro -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentiumpro -march=pentium" - path="x86/p6 x86" - ;; - pentium2) - gcc_cflags_cpu="-mtune=pentium2 -mcpu=pentium2 -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentium2 -march=pentiumpro -march=pentium" - path="x86/p6/mmx x86/p6 x86/mmx x86" - ;; - pentium3) - gcc_cflags_cpu="-mtune=pentium3 -mcpu=pentium3 -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentium3 -march=pentiumpro -march=pentium" - path="x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - ;; - pentiumm) - gcc_cflags_cpu="-mtune=pentium3 -mcpu=pentium3 -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentium3 -march=pentiumpro -march=pentium" - path="x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - ;; - k6) - gcc_cflags_cpu="-mtune=k6 -mcpu=k6 -mcpu=i486 -m486" - gcc_cflags_arch="-march=k6" - path="x86/k6/mmx x86/k6 x86/mmx x86" - ;; - k62) - gcc_cflags_cpu="-mtune=k6-2 -mcpu=k6-2 -mcpu=k6 -mcpu=i486 -m486" - gcc_cflags_arch="-march=k6-2 -march=k6" - path="x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86" - ;; - k63) - gcc_cflags_cpu="-mtune=k6-3 -mcpu=k6-3 -mcpu=k6 -mcpu=i486 -m486" - gcc_cflags_arch="-march=k6-3 -march=k6" - path="x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86" - ;; - geode) - gcc_cflags_cpu="-mtune=k6-3 -mcpu=k6-3 -mcpu=k6 -mcpu=i486 -m486" - gcc_cflags_arch="-march=k6-3 -march=k6" - path="x86/geode x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86" - ;; - athlon) - # Athlon instruction costs are close to P6 (3 cycle load latency, - # 4-6 cycle mul, 40 cycle div, pairable adc, etc) so if gcc doesn't - # know athlon (eg. 2.95.2 doesn't) then fall back on pentiumpro. - gcc_cflags_cpu="-mtune=athlon -mcpu=athlon -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=athlon -march=pentiumpro -march=pentium" - path="x86/k7/mmx x86/k7 x86/mmx x86" - ;; - i786 | pentium4) - # pentiumpro is the primary fallback when gcc doesn't know pentium4. - # This gets us cmov to eliminate branches. Maybe "athlon" would be - # a possibility on gcc 3.0. - # - gcc_cflags_cpu="-mtune=pentium4 -mcpu=pentium4 -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentium4 -march=pentium4~-mno-sse2 -march=pentiumpro -march=pentium" - gcc_64_cflags_cpu="-mtune=nocona" - path="x86/pentium4/sse2 x86/pentium4/mmx x86/pentium4 x86/mmx x86" - path_64="x86_64/pentium4 x86_64" - ;; - viac32) - # Not sure of the best fallbacks here for -mcpu. - # c3-2 has sse and mmx, so pentium3 is good for -march. - gcc_cflags_cpu="-mtune=c3-2 -mcpu=c3-2 -mcpu=i486 -m486" - gcc_cflags_arch="-march=c3-2 -march=pentium3 -march=pentiumpro -march=pentium" - path="x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - ;; - viac3*) - # Not sure of the best fallbacks here. - gcc_cflags_cpu="-mtune=c3 -mcpu=c3 -mcpu=i486 -m486" - gcc_cflags_arch="-march=c3 -march=pentium-mmx -march=pentium" - path="x86/pentium/mmx x86/pentium x86/mmx x86" - ;; - athlon64 | k8 | x86_64) - gcc_cflags_cpu="-mtune=k8 -mcpu=athlon -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=k8 -march=k8~-mno-sse2 -march=athlon -march=pentiumpro -march=pentium" - path="x86/k8 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/k8 x86_64" - ;; - k10) - gcc_cflags_cpu="-mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/k10 x86/k8 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/k10 x86_64/k8 x86_64" - ;; - bobcat) - gcc_cflags_cpu="-mtune=btver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=btver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bobcat x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bobcat x86_64/k10 x86_64/k8 x86_64" - ;; - jaguar | jaguarnoavx) - gcc_cflags_cpu="-mtune=btver2 -mtune=btver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=btver2 -march=btver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/jaguar x86/bobcat x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/jaguar x86_64/bobcat x86_64/k10 x86_64/k8 x86_64" - ;; - bulldozer | bd1 | bulldozernoavx | bd1noavx) - gcc_cflags_cpu="-mtune=bdver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" - ;; - piledriver | bd2 | piledrivernoavx | bd2noavx) - gcc_cflags_cpu="-mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" - ;; - steamroller | bd3 | steamrollernoavx | bd3noavx) - gcc_cflags_cpu="-mtune=bdver3 -mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=bdver3 -march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bd3 x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bd3 x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" - ;; - excavator | bd4 | excavatornoavx | bd4noavx) - gcc_cflags_cpu="-mtune=bdver4 -mtune=bdver3 -mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=bdver4 -march=bdver3 -march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bd4 x86/bd3 x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bd4 x86_64/bd3 x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" - ;; - core2) - gcc_cflags_cpu="-mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/core2 x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/core2 x86_64" - ;; - corei | coreinhm | coreiwsm | nehalem | westmere) - gcc_cflags_cpu="-mtune=corei7 -mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreinhm x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/coreinhm x86_64/core2 x86_64" - ;; - coreisbr | coreisbrnoavx | coreiibr | coreiibrnoavx | \ - sandybridge | sandybridgenoavx | ivybridge | ivybridgenoavx) - gcc_cflags_cpu="-mtune=sandybridge -mtune=corei7 -mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=sandybridge -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" - ;; - coreihwl | coreihwlnoavx | haswell | haswellnoavx) - gcc_cflags_cpu="-mtune=haswell -mtune=corei7 -mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=haswell -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/coreihwl x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" - ;; - coreibwl | coreibwlnoavx | broadwell | broadwellnoavx) - gcc_cflags_cpu="-mtune=broadwell -mtune=corei7 -mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=broadwell -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/coreibwl x86_64/coreihwl x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" - # extra_functions_64="missing" # enable for bmi2/adx simulation - ;; - skylake | skylakenoavx | cabylake | cabylakenoavx) - gcc_cflags_cpu="-mtune=skylake -mtune=broadwell -mtune=corei7 -mtune=core2 -mtune=k8" - # Don't pass -march=skylake for now as then some compilers emit AVX512. - gcc_cflags_arch="-march=broadwell -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/skylake x86_64/coreibwl x86_64/coreihwl x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" - # extra_functions_64="missing" # enable for bmi2/adx simulation - ;; - atom) # in-order pipeline atom - gcc_cflags_cpu="-mtune=atom -mtune=pentium3" - gcc_cflags_arch="-march=atom -march=pentium3" - path="x86/atom/sse2 x86/atom/mmx x86/atom x86/mmx x86" - path_64="x86_64/atom x86_64" - ;; - silvermont | goldmont) # out-of-order pipeline atom - gcc_cflags_cpu="-mtune=slm -mtune=atom -mtune=pentium3" - gcc_cflags_arch="-march=slm -march=atom -march=pentium3" - path="x86/atom/sse2 x86/atom/mmx x86/atom x86/mmx x86" - path_64="x86_64/silvermont x86_64/atom x86_64" - ;; - nano) - gcc_cflags_cpu="-mtune=nano" - gcc_cflags_arch="-march=nano" - path="x86/nano x86/mmx x86" - path_64="x86_64/nano x86_64" - ;; - *) - gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486" - gcc_cflags_arch="-march=i486" - path="x86" - path_64="x86_64" - ;; - esac - - case $host in - # Disable AVX if the CPU part tells us AVX is unavailable, but also - # unconditionally for NetBSD where they don't work but OSXSAVE is set - # to claim the contrary. - *noavx-*-* | *-*-netbsd*) - gcc_cflags_noavx="-mno-avx";; - esac - - case $host in - X86_64_PATTERN) - cclist_64="gcc cc" - gcc_64_cflags="$gcc_cflags -m64" - gcc_64_cflags_optlist="cpu arch noavx" - CALLING_CONVENTIONS_OBJS_64='amd64call.lo amd64check$U.lo' - SPEED_CYCLECOUNTER_OBJ_64=x86_64.lo - cyclecounter_size_64=2 - - cclist_x32="gcc cc" - gcc_x32_cflags="$gcc_cflags -mx32" - gcc_x32_cflags_optlist="$gcc_64_cflags_optlist" - CALLING_CONVENTIONS_OBJS_x32="$CALLING_CONVENTIONS_OBJS_64" - SPEED_CYCLECOUNTER_OBJ_x32="$SPEED_CYCLECOUNTER_OBJ_64" - cyclecounter_size_x32="$cyclecounter_size_64" - path_x32="$path_64" - limb_x32=longlong - any_x32_testlist="sizeof-long-4" - - abilist="64 x32 32" - if test "$enable_assembly" = "yes" ; then - extra_functions_64="$extra_functions_64 invert_limb_table" - extra_functions_x32=$extra_functions_64 - fi - - case $host in - *-*-solaris*) - # Sun cc. - cc_64_cflags="-xO3 -m64" - ;; - *-*-mingw* | *-*-cygwin) - limb_64=longlong - CALLING_CONVENTIONS_OBJS_64="" - AC_DEFINE(HOST_DOS64,1,[Define to 1 for Windos/64]) - GMP_NONSTD_ABI_64=DOS64 - ;; - esac - ;; - esac - ;; - - - # Special CPU "none" used to select generic C, now this is obsolete. - none-*-*) - enable_assembly=no - AC_MSG_WARN([the \"none\" host is obsolete, use --disable-assembly]) - ;; - -esac - -# mingw can be built by the cygwin gcc if -mno-cygwin is added. For -# convenience add this automatically if it works. Actual mingw gcc accepts -# -mno-cygwin too, but of course is the default. mingw only runs on the -# x86s, but allow any CPU here so as to catch "none" too. -# -case $host in - *-*-mingw*) - gcc_cflags_optlist="$gcc_cflags_optlist nocygwin" - gcc_cflags_nocygwin="-mno-cygwin" - ;; -esac - - -CFLAGS_or_unset=${CFLAGS-'(unset)'} -CPPFLAGS_or_unset=${CPPFLAGS-'(unset)'} - -cat >&AC_FD_CC <<EOF -User: -ABI=$ABI -CC=$CC -CFLAGS=$CFLAGS_or_unset -CPPFLAGS=$CPPFLAGS_or_unset -MPN_PATH=$MPN_PATH -GMP: -abilist=$abilist -cclist=$cclist -EOF - - -test_CFLAGS=${CFLAGS+set} -test_CPPFLAGS=${CPPFLAGS+set} - -for abi in $abilist; do - abi_last="$abi" -done - -# If the user specifies an ABI then it must be in $abilist, after that -# $abilist is restricted to just that choice. -# -if test -n "$ABI"; then - found=no - for abi in $abilist; do - if test $abi = "$ABI"; then found=yes; break; fi - done - if test $found = no; then - AC_MSG_ERROR([ABI=$ABI is not among the following valid choices: $abilist]) - fi - abilist="$ABI" -fi - -found_compiler=no - -for abi in $abilist; do - - echo "checking ABI=$abi" - - # Suppose abilist="64 32", then for abi=64, will have abi1="_64" and - # abi2="_64". For abi=32, will have abi1="_32" and abi2="". This is how - # $gcc_cflags becomes a fallback for $gcc_32_cflags (the last in the - # abilist), but there's no fallback for $gcc_64_cflags. - # - abi1=[`echo _$abi | sed 's/[.]//g'`] - if test $abi = $abi_last; then abi2=; else abi2="$abi1"; fi - - # Compiler choices under this ABI - eval cclist_chosen=\"\$cclist$abi1\" - test -n "$cclist_chosen" || eval cclist_chosen=\"\$cclist$abi2\" - - # If there's a user specified $CC then don't use a list for - # $cclist_chosen, just a single value for $ccbase. - # - if test -n "$CC"; then - - # The first word of $CC, stripped of any directory. For instance - # CC="/usr/local/bin/gcc -pipe" will give "gcc". - # - for ccbase in $CC; do break; done - ccbase=`echo $ccbase | sed 's:.*/::'` - - # If this $ccbase is in $cclist_chosen then it's a compiler we know and - # we can do flags defaulting with it. If not, then $cclist_chosen is - # set to "unrecognised" so no default flags are used. - # - # "unrecognised" is used to avoid bad effects with eval if $ccbase has - # non-symbol characters. For instance ccbase=my+cc would end up with - # something like cflags="$my+cc_cflags" which would give - # cflags="+cc_cflags" rather than the intended empty string for an - # unknown compiler. - # - found=unrecognised - for i in $cclist_chosen; do - if test "$ccbase" = $i; then - found=$ccbase - break - fi - done - cclist_chosen=$found - fi - - for ccbase in $cclist_chosen; do - - # When cross compiling, look for a compiler with the $host_alias as a - # prefix, the same way that AC_CHECK_TOOL does. But don't do this to a - # user-selected $CC. - # - # $cross_compiling will be yes/no/maybe at this point. Do the host - # prefixing for "maybe" as well as "yes". - # - if test "$cross_compiling" != no && test -z "$CC"; then - cross_compiling_prefix="${host_alias}-" - fi - - for ccprefix in $cross_compiling_prefix ""; do - - cc="$CC" - test -n "$cc" || cc="$ccprefix$ccbase" - - # If the compiler is gcc but installed under another name, then change - # $ccbase so as to use the flags we know for gcc. This helps for - # instance when specifying CC=gcc272 on Debian GNU/Linux, or the - # native cc which is really gcc on NeXT or MacOS-X. - # - # FIXME: There's a slight misfeature here. If cc is actually gcc but - # gcc is not a known compiler under this $abi then we'll end up - # testing it with no flags and it'll work, but chances are it won't be - # in the right mode for the ABI we desire. Let's quietly hope this - # doesn't happen. - # - if test $ccbase != gcc; then - GMP_PROG_CC_IS_GNU($cc,ccbase=gcc) - fi - - # Similarly if the compiler is IBM xlc but invoked as cc or whatever - # then change $ccbase and make the default xlc flags available. - if test $ccbase != xlc; then - GMP_PROG_CC_IS_XLC($cc,ccbase=xlc) - fi - - # acc was Sun's first unbundled compiler back in the SunOS days, or - # something like that, but today its man page says it's not meant to - # be used directly (instead via /usr/ucb/cc). The options are pretty - # much the same as the main SunPRO cc, so share those configs. - # - case $host in - *sparc*-*-solaris* | *sparc*-*-sunos*) - if test "$ccbase" = acc; then ccbase=cc; fi ;; - esac - - for tmp_cflags_maybe in yes no; do - eval cflags=\"\$${ccbase}${abi1}_cflags\" - test -n "$cflags" || eval cflags=\"\$${ccbase}${abi2}_cflags\" - - if test "$tmp_cflags_maybe" = yes; then - # don't try cflags_maybe when the user set CFLAGS - if test "$test_CFLAGS" = set; then continue; fi - eval cflags_maybe=\"\$${ccbase}${abi1}_cflags_maybe\" - test -n "$cflags_maybe" || eval cflags_maybe=\"\$${ccbase}${abi2}_cflags_maybe\" - # don't try cflags_maybe if there's nothing set - if test -z "$cflags_maybe"; then continue; fi - cflags="$cflags_maybe $cflags" - fi - - # Any user CFLAGS, even an empty string, takes precedence - if test "$test_CFLAGS" = set; then cflags=$CFLAGS; fi - - # Any user CPPFLAGS, even an empty string, takes precedence - eval cppflags=\"\$${ccbase}${abi1}_cppflags\" - test -n "$cppflags" || eval cppflags=\"\$${ccbase}${abi2}_cppflags\" - if test "$test_CPPFLAGS" = set; then cppflags=$CPPFLAGS; fi - - # --enable-profiling adds -p/-pg even to user-specified CFLAGS. - # This is convenient, but it's perhaps a bit naughty to modify user - # CFLAGS. - case "$enable_profiling" in - prof) cflags="$cflags -p" ;; - gprof) cflags="$cflags -pg" ;; - instrument) cflags="$cflags -finstrument-functions" ;; - esac - - GMP_PROG_CC_WORKS($cc $cflags $cppflags,,continue) - - # If we're supposed to be using a "long long" for a limb, check that - # it works. - eval limb_chosen=\"\$limb$abi1\" - test -n "$limb_chosen" || eval limb_chosen=\"\$limb$abi2\" - if test "$limb_chosen" = longlong; then - GMP_PROG_CC_WORKS_LONGLONG($cc $cflags $cppflags,,continue) - fi - - # The tests to perform on this $cc, if any - eval testlist=\"\$${ccbase}${abi1}_testlist\" - test -n "$testlist" || eval testlist=\"\$${ccbase}${abi2}_testlist\" - test -n "$testlist" || eval testlist=\"\$any${abi1}_testlist\" - test -n "$testlist" || eval testlist=\"\$any${abi2}_testlist\" - - testlist_pass=yes - for tst in $testlist; do - case $tst in - hpc-hppa-2-0) GMP_HPC_HPPA_2_0($cc,,testlist_pass=no) ;; - gcc-arm-umodsi) GMP_GCC_ARM_UMODSI($cc,,testlist_pass=no) ;; - gcc-mips-o32) GMP_GCC_MIPS_O32($cc,,testlist_pass=no) ;; - hppa-level-2.0) GMP_HPPA_LEVEL_20($cc $cflags,,testlist_pass=no) ;; - sizeof*) GMP_C_TEST_SIZEOF($cc $cflags,$tst,,testlist_pass=no) ;; - esac - if test $testlist_pass = no; then break; fi - done - - if test $testlist_pass = yes; then - found_compiler=yes - break - fi - done - - if test $found_compiler = yes; then break; fi - done - - if test $found_compiler = yes; then break; fi - done - - if test $found_compiler = yes; then break; fi -done - - -# If we recognised the CPU, as indicated by $path being set, then insist -# that we have a working compiler, either from our $cclist choices or from -# $CC. We can't let AC_PROG_CC look around for a compiler because it might -# find one that we've rejected (for not supporting the modes our asm code -# demands, etc). -# -# If we didn't recognise the CPU (and this includes host_cpu=none), then -# fall through and let AC_PROG_CC look around for a compiler too. This is -# mostly in the interests of following a standard autoconf setup, after all -# we've already tested cc and gcc adequately (hopefully). As of autoconf -# 2.50 the only thing AC_PROG_CC really adds is a check for "cl" (Microsoft -# C on MS-DOS systems). -# -if test $found_compiler = no && test -n "$path"; then - AC_MSG_ERROR([could not find a working compiler, see config.log for details]) -fi - -case $host in - X86_PATTERN | X86_64_PATTERN) - # If the user asked for a fat build, override the path and flags set above - if test $enable_fat = yes; then - gcc_cflags_cpu="" - gcc_cflags_arch="" - - fat_functions="add_n addmul_1 bdiv_dbm1c com cnd_add_n cnd_sub_n - copyd copyi dive_1 divrem_1 - gcd_1 lshift lshiftc mod_1 mod_1_1 mod_1_1_cps mod_1_2 - mod_1_2_cps mod_1_4 mod_1_4_cps mod_34lsub1 mode1o mul_1 - mul_basecase mullo_basecase pre_divrem_1 pre_mod_1 redc_1 - redc_2 rshift sqr_basecase sub_n submul_1" - - if test "$abi" = 32; then - extra_functions="$extra_functions fat fat_entry" - path="x86/fat x86" - fat_path="x86 x86/fat x86/i486 - x86/k6 x86/k6/mmx x86/k6/k62mmx - x86/k7 x86/k7/mmx - x86/k8 x86/k10 x86/bobcat - x86/pentium x86/pentium/mmx - x86/p6 x86/p6/mmx x86/p6/p3mmx x86/p6/sse2 - x86/pentium4 x86/pentium4/mmx x86/pentium4/sse2 - x86/core2 x86/coreinhm x86/coreisbr - x86/atom x86/atom/mmx x86/atom/sse2 x86/nano" - fi - - if test "$abi" = 64; then - gcc_64_cflags="" - extra_functions_64="$extra_functions_64 fat fat_entry" - path_64="x86_64/fat x86_64" - fat_path="x86_64 x86_64/fat - x86_64/k8 x86_64/k10 x86_64/bd1 x86_64/bobcat x86_64/pentium4 - x86_64/core2 x86_64/coreinhm x86_64/coreisbr x86_64/coreihwl - x86_64/coreibwl x86_64/skylake x86_64/atom x86_64/silvermont - x86_64/nano" - fat_functions="$fat_functions addmul_2 addlsh1_n addlsh2_n sublsh1_n" - fi - - fat_thresholds="MUL_TOOM22_THRESHOLD MUL_TOOM33_THRESHOLD - SQR_TOOM2_THRESHOLD SQR_TOOM3_THRESHOLD - BMOD_1_TO_MOD_1_THRESHOLD" - fi - ;; -esac - - -if test $found_compiler = yes; then - - # If we're creating CFLAGS, then look for optional additions. If the user - # set CFLAGS then leave it alone. - # - if test "$test_CFLAGS" != set; then - eval optlist=\"\$${ccbase}${abi1}_cflags_optlist\" - test -n "$optlist" || eval optlist=\"\$${ccbase}${abi2}_cflags_optlist\" - - for opt in $optlist; do - eval optflags=\"\$${ccbase}${abi1}_cflags_${opt}\" - test -n "$optflags" || eval optflags=\"\$${ccbase}${abi2}_cflags_${opt}\" - test -n "$optflags" || eval optflags=\"\$${ccbase}_cflags_${opt}\" - - for flag in $optflags; do - - # ~ represents a space in an option spec - flag=`echo "$flag" | tr '~' ' '` - - case $flag in - -march=pentium4 | -march=k8) - # For -march settings which enable SSE2 we exclude certain bad - # gcc versions and we need an OS knowing how to save xmm regs. - # - # This is only for ABI=32, any 64-bit gcc is good and any OS - # knowing x86_64 will know xmm. - # - # -march=k8 was only introduced in gcc 3.3, so we shouldn't need - # the GMP_GCC_PENTIUM4_SSE2 check (for gcc 3.2 and prior). But - # it doesn't hurt to run it anyway, sharing code with the - # pentium4 case. - # - if test "$abi" = 32; then - GMP_GCC_PENTIUM4_SSE2($cc $cflags $cppflags,, continue) - GMP_OS_X86_XMM($cc $cflags $cppflags,, continue) - fi - ;; - -no-cpp-precomp) - # special check, avoiding a warning - GMP_GCC_NO_CPP_PRECOMP($ccbase,$cc,$cflags, - [cflags="$cflags $flag" - break], - [continue]) - ;; - -Wa,-m*) - case $host in - alpha*-*-*) - GMP_GCC_WA_MCPU($cc $cflags, $flag, , [continue]) - ;; - esac - ;; - -Wa,-oldas) - GMP_GCC_WA_OLDAS($cc $cflags $cppflags, - [cflags="$cflags $flag" - break], - [continue]) - ;; - esac - - GMP_PROG_CC_WORKS($cc $cflags $cppflags $flag, - [cflags="$cflags $flag" - break]) - done - done - fi - - ABI="$abi" - CC="$cc" - CFLAGS="$cflags" - CPPFLAGS="$cppflags" - eval GMP_NONSTD_ABI=\"\$GMP_NONSTD_ABI_$ABI\" - - # Could easily have this in config.h too, if desired. - ABI_nodots=`echo $ABI | sed 's/\./_/'` - GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_ABI_$ABI_nodots')", POST) - - - # GMP_LDFLAGS substitution, selected according to ABI. - # These are needed on libgmp.la and libmp.la, but currently not on - # convenience libraries like tune/libspeed.la or mpz/libmpz.la. - # - eval GMP_LDFLAGS=\"\$${ccbase}${abi1}_ldflags\" - test -n "$GMP_LDFLAGS" || eval GMP_LDFLAGS=\"\$${ccbase}${abi1}_ldflags\" - AC_SUBST(GMP_LDFLAGS) - AC_SUBST(LIBGMP_LDFLAGS) - AC_SUBST(LIBGMPXX_LDFLAGS) - - # extra_functions, selected according to ABI - eval tmp=\"\$extra_functions$abi1\" - test -n "$tmp" || eval tmp=\"\$extra_functions$abi2\" - extra_functions="$tmp" - - - # Cycle counter, selected according to ABI. - # - eval tmp=\"\$SPEED_CYCLECOUNTER_OBJ$abi1\" - test -n "$tmp" || eval tmp=\"\$SPEED_CYCLECOUNTER_OBJ$abi2\" - SPEED_CYCLECOUNTER_OBJ="$tmp" - eval tmp=\"\$cyclecounter_size$abi1\" - test -n "$tmp" || eval tmp=\"\$cyclecounter_size$abi2\" - cyclecounter_size="$tmp" - - if test -n "$SPEED_CYCLECOUNTER_OBJ"; then - AC_DEFINE_UNQUOTED(HAVE_SPEED_CYCLECOUNTER, $cyclecounter_size, - [Tune directory speed_cyclecounter, undef=none, 1=32bits, 2=64bits)]) - fi - AC_SUBST(SPEED_CYCLECOUNTER_OBJ) - - - # Calling conventions checking, selected according to ABI. - # - eval tmp=\"\$CALLING_CONVENTIONS_OBJS$abi1\" - test -n "$tmp" || eval tmp=\"\$CALLING_CONVENTIONS_OBJS$abi2\" - if test "$enable_assembly" = "yes"; then - CALLING_CONVENTIONS_OBJS="$tmp" - else - CALLING_CONVENTIONS_OBJS="" - fi - - if test -n "$CALLING_CONVENTIONS_OBJS"; then - AC_DEFINE(HAVE_CALLING_CONVENTIONS,1, - [Define to 1 if tests/libtests has calling conventions checking for the CPU]) - fi - AC_SUBST(CALLING_CONVENTIONS_OBJS) - -fi - - -# If the user gave an MPN_PATH, use that verbatim, otherwise choose -# according to the ABI and add "generic". -# -if test -n "$MPN_PATH"; then - path="$MPN_PATH" -else - eval tmp=\"\$path$abi1\" - test -n "$tmp" || eval tmp=\"\$path$abi2\" - path="$tmp generic" -fi - - -# Long long limb setup for gmp.h. -case $limb_chosen in -longlong) DEFN_LONG_LONG_LIMB="#define _LONG_LONG_LIMB 1" ;; -*) DEFN_LONG_LONG_LIMB="/* #undef _LONG_LONG_LIMB */" ;; -esac -AC_SUBST(DEFN_LONG_LONG_LIMB) - - -# The C compiler and preprocessor, put into ANSI mode if possible. -AC_PROG_CC -AC_PROG_CC_STDC -AC_PROG_CPP - - -# The C compiler on the build system, and associated tests. -GMP_PROG_CC_FOR_BUILD -GMP_PROG_CPP_FOR_BUILD -GMP_PROG_EXEEXT_FOR_BUILD -GMP_C_FOR_BUILD_ANSI -GMP_CHECK_LIBM_FOR_BUILD - - -# How to assemble, used with CFLAGS etc, see mpn/Makeasm.am. -# Using the compiler is a lot easier than figuring out how to invoke the -# assembler directly. -# -test -n "$CCAS" || CCAS="$CC -c" -AC_SUBST(CCAS) - - -# The C++ compiler, if desired. -want_cxx=no -if test $enable_cxx != no; then - test_CXXFLAGS=${CXXFLAGS+set} - AC_PROG_CXX - - echo "CXXFLAGS chosen by autoconf: $CXXFLAGS" >&AC_FD_CC - cxxflags_ac_prog_cxx=$CXXFLAGS - cxxflags_list=ac_prog_cxx - - # If the user didn't specify $CXXFLAGS, then try $CFLAGS, with -g removed - # if AC_PROG_CXX thinks that doesn't work. $CFLAGS stands a good chance - # of working, eg. on a GNU system where CC=gcc and CXX=g++. - # - if test "$test_CXXFLAGS" != set; then - cxxflags_cflags=$CFLAGS - cxxflags_list="cflags $cxxflags_list" - if test "$ac_prog_cxx_g" = no; then - cxxflags_cflags=`echo "$cxxflags_cflags" | sed -e 's/ -g //' -e 's/^-g //' -e 's/ -g$//'` - fi - fi - - # See if the C++ compiler works. If the user specified CXXFLAGS then all - # we're doing is checking whether AC_PROG_CXX succeeded, since it doesn't - # give a fatal error, just leaves CXX set to a default g++. If on the - # other hand the user didn't specify CXXFLAGS then we get to try here our - # $cxxflags_list alternatives. - # - # Automake includes $CPPFLAGS in a C++ compile, so we do the same here. - # - for cxxflags_choice in $cxxflags_list; do - eval CXXFLAGS=\"\$cxxflags_$cxxflags_choice\" - GMP_PROG_CXX_WORKS($CXX $CPPFLAGS $CXXFLAGS, - [want_cxx=yes - break]) - done - - # If --enable-cxx=yes but a C++ compiler can't be found, then abort. - if test $want_cxx = no && test $enable_cxx = yes; then - AC_MSG_ERROR([C++ compiler not available, see config.log for details]) - fi -fi - -AM_CONDITIONAL(WANT_CXX, test $want_cxx = yes) - -# FIXME: We're not interested in CXXCPP for ourselves, but if we don't do it -# here then AC_PROG_LIBTOOL will AC_REQUIRE it (via _LT_AC_TAGCONFIG) and -# hence execute it unconditionally, and that will fail if there's no C++ -# compiler (and no generic /lib/cpp). -# -if test $want_cxx = yes; then - AC_PROG_CXXCPP -fi - - -# Path setups for Cray, according to IEEE or CFP. These must come after -# deciding the compiler. -# -GMP_CRAY_OPTIONS( - [add_path="cray/ieee"], - [add_path="cray/cfp"; extra_functions="mulwwc90"], - [add_path="cray/cfp"; extra_functions="mulwwj90"]) - - -if test -z "$MPN_PATH"; then - path="$add_path $path" -fi - -# For a nail build, also look in "nails" subdirectories. -# -if test $GMP_NAIL_BITS != 0 && test -z "$MPN_PATH"; then - new_path= - for i in $path; do - case $i in - generic) new_path="$new_path $i" ;; - *) new_path="$new_path $i/nails $i" ;; - esac - done - path=$new_path -fi - - -# Put all directories into CPUVEC_list so as to get a full set of -# CPUVEC_SETUP_$tmp_suffix defines into config.h, even if some of them are -# empty because mmx and/or sse2 had to be dropped. -# -for i in $fat_path; do - GMP_FAT_SUFFIX(tmp_suffix, $i) - CPUVEC_list="$CPUVEC_list CPUVEC_SETUP_$tmp_suffix" -done - - -# If there's any sse2 or mmx in the path, check whether the assembler -# supports it, and remove if not. -# -# We only need this in ABI=32, for ABI=64 on x86_64 we can assume a new -# enough assembler. -# -case $host in - X86_PATTERN | X86_64_PATTERN) - if test "$ABI" = 32; then - case "$path $fat_path" in - *mmx*) GMP_ASM_X86_MMX( , [GMP_STRIP_PATH(*mmx*)]) ;; - esac - case "$path $fat_path" in - *sse2*) GMP_ASM_X86_SSE2( , [GMP_STRIP_PATH(sse2)]) ;; - esac - fi - case "$path $fat_path" in - *mulx*) GMP_ASM_X86_MULX( , [GMP_STRIP_PATH(mulx)]) ;; - esac - case "$path $fat_path" in - *adx*) GMP_ASM_X86_ADX( , [GMP_STRIP_PATH(adx)]) ;; - esac - ;; -esac - - -if test "$enable_assembly" = "no"; then - path="generic" - CFLAGS="$CFLAGS -DNO_ASM" -# for abi in $abilist; do -# eval unset "path_\$abi" -# eval gcc_${abi}_cflags=\"\$gcc_${abi}_cflags -DNO_ASM\" -# done -fi - - -cat >&AC_FD_CC <<EOF -Decided: -ABI=$ABI -CC=$CC -CFLAGS=$CFLAGS -CPPFLAGS=$CPPFLAGS -GMP_LDFLAGS=$GMP_LDFLAGS -CXX=$CXX -CXXFLAGS=$CXXFLAGS -path=$path -EOF -echo "using ABI=\"$ABI\"" -echo " CC=\"$CC\"" -echo " CFLAGS=\"$CFLAGS\"" -echo " CPPFLAGS=\"$CPPFLAGS\"" -if test $want_cxx = yes; then - echo " CXX=\"$CXX\"" - echo " CXXFLAGS=\"$CXXFLAGS\"" -fi -echo " MPN_PATH=\"$path\"" - - -CL_AS_NOEXECSTACK - -GMP_PROG_AR -GMP_PROG_NM - -case $host in - # FIXME: On AIX 3 and 4, $libname.a is included in libtool - # $library_names_spec, so libgmp.a becomes a symlink to libgmp.so, making - # it impossible to build shared and static libraries simultaneously. - # Disable shared libraries by default, but let the user override with - # --enable-shared --disable-static. - # - # FIXME: This $libname.a problem looks like it might apply to *-*-amigaos* - # and *-*-os2* too, but wait for someone to test this before worrying - # about it. If there is a problem then of course libtool is the right - # place to fix it. - # - [*-*-aix[34]*]) - if test -z "$enable_shared"; then enable_shared=no; fi ;; -esac - - -# Configs for Windows DLLs. - -AC_LIBTOOL_WIN32_DLL - -AC_SUBST(LIBGMP_DLL,0) -case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - # By default, build only static. - if test -z "$enable_shared"; then - enable_shared=no - fi - # Don't allow both static and DLL. - if test "$enable_shared" != no && test "$enable_static" != no; then - AC_MSG_ERROR([cannot build both static and DLL, since gmp.h is different for each. -Use "--disable-static --enable-shared" to build just a DLL.]) - fi - - # "-no-undefined" is required when building a DLL, see documentation on - # AC_LIBTOOL_WIN32_DLL. - # - # "-Wl,--export-all-symbols" is a bit of a hack, it gets all libgmp and - # libgmpxx functions and variables exported. This is what libtool did - # in the past, and it's convenient for us in the test programs. - # - # Maybe it'd be prudent to check for --export-all-symbols before using - # it, but it seems to have been in ld since at least 2000, and there's - # not really any alternative we want to take up at the moment. - # - # "-Wl,output-def" is used to get a .def file for use by MS lib to make - # a .lib import library, described in the manual. libgmp-3.dll.def - # corresponds to the libmp-3.dll.def generated by libtool (as a result - # of -export-symbols on that library). - # - # Incidentally, libtool does generate an import library libgmp.dll.a, - # but it's "ar" format and cannot be used by the MS linker. There - # doesn't seem to be any GNU tool for generating or converting to .lib. - # - # FIXME: The .def files produced by -Wl,output-def include isascii, - # iscsym, iscsymf and toascii, apparently because mingw ctype.h doesn't - # inline isascii (used in gmp). It gives an extern inline for - # __isascii, but for some reason not the plain isascii. - # - if test "$enable_shared" = yes; then - GMP_LDFLAGS="$GMP_LDFLAGS -no-undefined -Wl,--export-all-symbols" - LIBGMP_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmp-3.dll.def" - LIBGMPXX_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmpxx-3.dll.def" - LIBGMP_DLL=1 - fi - ;; -esac - - -# Ensure that $CONFIG_SHELL is available for AC_LIBTOOL_SYS_MAX_CMD_LEN. -# It's often set already by _LT_AC_PROG_ECHO_BACKSLASH or -# _AS_LINENO_PREPARE, but not always. -# -# The symptom of CONFIG_SHELL unset is some "expr" errors during the test, -# and an empty result. This only happens when invoked as "sh configure", -# ie. no path, and can be seen for instance on ia64-*-hpux*. -# -# FIXME: Newer libtool should have it's own fix for this. -# -if test -z "$CONFIG_SHELL"; then - CONFIG_SHELL=$SHELL -fi - -# Enable CXX in libtool only if we want it, and never enable GCJ, nor RC on -# mingw and cygwin. Under --disable-cxx this avoids some error messages -# from libtool arising from the fact we didn't actually run AC_PROG_CXX. -# Notice that any user-supplied --with-tags setting takes precedence. -# -# FIXME: Is this the right way to get this effect? Very possibly not, but -# the current _LT_AC_TAGCONFIG doesn't really suggest an alternative. -# -if test "${with_tags+set}" != set; then - if test $want_cxx = yes; then - with_tags=CXX - else - with_tags= - fi -fi - -# The dead hand of AC_REQUIRE makes AC_PROG_LIBTOOL expand and execute -# AC_PROG_F77, even when F77 is not in the selected with_tags. This is -# probably harmless, but it's unsightly and bloats our configure, so pretend -# AC_PROG_F77 has been expanded already. -# -# FIXME: Rumour has it libtool will one day provide a way for a configure.in -# to say what it wants from among supported languages etc. -# -#AC_PROVIDE([AC_PROG_F77]) - -AC_PROG_LIBTOOL - -# Generate an error here if attempting to build both shared and static when -# $libname.a is in $library_names_spec (as mentioned above), rather than -# wait for ar or ld to fail. -# -if test "$enable_shared" = yes && test "$enable_static" = yes; then - case $library_names_spec in - *libname.a*) - AC_MSG_ERROR([cannot create both shared and static libraries on this system, --disable one of the two]) - ;; - esac -fi - -AM_CONDITIONAL(ENABLE_STATIC, test "$enable_static" = yes) - - -# Many of these library and header checks are for the benefit of -# supplementary programs. libgmp doesn't use anything too weird. - -AC_HEADER_STDC -AC_HEADER_TIME - -# Reasons for testing: -# float.h - not in SunOS bundled cc -# invent.h - IRIX specific -# langinfo.h - X/Open standard only, not in djgpp for instance -# locale.h - old systems won't have this -# nl_types.h - X/Open standard only, not in djgpp for instance -# (usually langinfo.h gives nl_item etc, but not on netbsd 1.4.1) -# sys/attributes.h - IRIX specific -# sys/iograph.h - IRIX specific -# sys/mman.h - not in Cray Unicos -# sys/param.h - not in mingw -# sys/processor.h - solaris specific, though also present in macos -# sys/pstat.h - HPUX specific -# sys/resource.h - not in mingw -# sys/sysctl.h - not in mingw -# sys/sysinfo.h - OSF specific -# sys/syssgi.h - IRIX specific -# sys/systemcfg.h - AIX specific -# sys/time.h - autoconf suggests testing, don't know anywhere without it -# sys/times.h - not in mingw -# machine/hal_sysinfo.h - OSF specific -# -# inttypes.h, stdint.h, unistd.h and sys/types.h are already in the autoconf -# default tests -# -AC_CHECK_HEADERS(fcntl.h float.h invent.h langinfo.h locale.h nl_types.h sys/attributes.h sys/iograph.h sys/mman.h sys/param.h sys/processor.h sys/pstat.h sys/sysinfo.h sys/syssgi.h sys/systemcfg.h sys/time.h sys/times.h) - -# On SunOS, sys/resource.h needs sys/time.h (for struct timeval) -AC_CHECK_HEADERS(sys/resource.h,,, -[#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif]) - -# On NetBSD and OpenBSD, sys/sysctl.h needs sys/param.h for various constants -AC_CHECK_HEADERS(sys/sysctl.h,,, -[#if HAVE_SYS_PARAM_H -# include <sys/param.h> -#endif]) - -# On OSF 4.0, <machine/hal_sysinfo.h> must have <sys/sysinfo.h> for ulong_t -AC_CHECK_HEADERS(machine/hal_sysinfo.h,,, -[#if HAVE_SYS_SYSINFO_H -# include <sys/sysinfo.h> -#endif]) - -# Reasons for testing: -# optarg - not declared in mingw -# fgetc, fscanf, ungetc, vfprintf - not declared in SunOS 4 -# sys_errlist, sys_nerr - not declared in SunOS 4 -# -# optarg should be in unistd.h and the rest in stdio.h, both of which are -# in the autoconf default includes. -# -# sys_errlist and sys_nerr are supposed to be in <errno.h> on SunOS according -# to the man page (but aren't), in glibc they're in stdio.h. -# -AC_CHECK_DECLS([fgetc, fscanf, optarg, ungetc, vfprintf]) -AC_CHECK_DECLS([sys_errlist, sys_nerr], , , -[#include <stdio.h> -#include <errno.h>]) - -AC_TYPE_SIGNAL - -# Reasons for testing: -# intmax_t - C99 -# long double - not in the HP bundled K&R cc -# long long - only in reasonably recent compilers -# ptrdiff_t - seems to be everywhere, maybe don't need to check this -# quad_t - BSD specific -# uint_least32_t - C99 -# -# the default includes are sufficient for all these types -# -AC_CHECK_TYPES([intmax_t, long double, long long, ptrdiff_t, quad_t, - uint_least32_t, intptr_t]) - -# FIXME: Really want #ifndef __cplusplus around the #define volatile -# replacement autoconf gives, since volatile is always available in C++. -# But we don't use it in C++ currently. -AC_C_VOLATILE - -AC_C_RESTRICT - -# GMP_C_STDARG -GMP_C_ATTRIBUTE_CONST -GMP_C_ATTRIBUTE_MALLOC -GMP_C_ATTRIBUTE_MODE -GMP_C_ATTRIBUTE_NORETURN -GMP_C_HIDDEN_ALIAS - -GMP_H_EXTERN_INLINE - -# from libtool -AC_CHECK_LIBM -AC_SUBST(LIBM) - -GMP_FUNC_ALLOCA -GMP_OPTION_ALLOCA - -GMP_H_HAVE_FILE - -AC_C_BIGENDIAN( - [AC_DEFINE(HAVE_LIMB_BIG_ENDIAN, 1) - GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_LIMB_BIG_ENDIAN')", POST)], - [AC_DEFINE(HAVE_LIMB_LITTLE_ENDIAN, 1) - GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_LIMB_LITTLE_ENDIAN')", POST) - ], [:]) -AH_VERBATIM([HAVE_LIMB], -[/* Define one of these to 1 for the endianness of `mp_limb_t'. - If the endianness is not a simple big or little, or you don't know what - it is, then leave both undefined. */ -#undef HAVE_LIMB_BIG_ENDIAN -#undef HAVE_LIMB_LITTLE_ENDIAN]) - -GMP_C_DOUBLE_FORMAT - - -# Reasons for testing: -# alarm - not in mingw -# attr_get - IRIX specific -# clock_gettime - not in glibc 2.2.4, only very recent systems -# cputime - not in glibc -# getsysinfo - OSF specific -# getrusage - not in mingw -# gettimeofday - not in mingw -# mmap - not in mingw, djgpp -# nl_langinfo - X/Open standard only, not in djgpp for instance -# obstack_vprintf - glibc specific -# processor_info - solaris specific -# pstat_getprocessor - HPUX specific (10.x and up) -# raise - an ANSI-ism, though probably almost universal by now -# read_real_time - AIX specific -# sigaction - not in mingw -# sigaltstack - not in mingw, or old AIX (reputedly) -# sigstack - not in mingw -# strerror - not in SunOS -# strnlen - glibc extension (some other systems too) -# syssgi - IRIX specific -# times - not in mingw -# -# AC_FUNC_STRNLEN is not used because we don't want the AC_LIBOBJ -# replacement setups it gives. It detects a faulty strnlen on AIX, but -# missing out on that test is ok since our only use of strnlen is in -# __gmp_replacement_vsnprintf which is not required on AIX since it has a -# vsnprintf. -# -AC_CHECK_FUNCS(alarm attr_get clock cputime getpagesize getrusage gettimeofday getsysinfo localeconv memset mmap mprotect nl_langinfo obstack_vprintf popen processor_info pstat_getprocessor raise read_real_time sigaction sigaltstack sigstack syssgi strchr strerror strnlen strtol strtoul sysconf sysctl sysctlbyname times) - -# clock_gettime is in librt on *-*-osf5.1 and on glibc, so att -lrt to -# TUNE_LIBS if needed. On linux (tested on x86_32, 2.6.26), -# clock_getres reports ns accuracy, while in a quick test on osf -# clock_getres said only 1 millisecond. - -old_LIBS="$LIBS" -AC_SEARCH_LIBS(clock_gettime, rt, [ - AC_DEFINE([HAVE_CLOCK_GETTIME],1,[Define to 1 if you have the `clock_gettime' function])]) -TUNE_LIBS="$LIBS" -LIBS="$old_LIBS" - -AC_SUBST(TUNE_LIBS) - -GMP_FUNC_VSNPRINTF -GMP_FUNC_SSCANF_WRITABLE_INPUT - -# Reasons for checking: -# pst_processor psp_iticksperclktick - not in hpux 9 -# -AC_CHECK_MEMBER(struct pst_processor.psp_iticksperclktick, - [AC_DEFINE(HAVE_PSP_ITICKSPERCLKTICK, 1, -[Define to 1 if <sys/pstat.h> `struct pst_processor' exists -and contains `psp_iticksperclktick'.])],, - [#include <sys/pstat.h>]) - -# C++ tests, when required -# -if test $enable_cxx = yes; then - AC_LANG_PUSH(C++) - - # Reasons for testing: - # <sstream> - not in g++ 2.95.2 - # std::locale - not in g++ 2.95.4 - # - AC_CHECK_HEADERS([sstream]) - AC_CHECK_TYPES([std::locale],,,[#include <locale>]) - - AC_LANG_POP(C++) -fi - - -# Pick the correct source files in $path and link them to mpn/. -# $gmp_mpn_functions lists all functions we need. -# -# The rule is to find a file with the function name and a .asm, .S, -# .s, or .c extension. Certain multi-function files with special names -# can provide some functions too. (mpn/Makefile.am passes -# -DOPERATION_<func> to get them to generate the right code.) - -# Note: $gmp_mpn_functions must have mod_1 before pre_mod_1 so the former -# can optionally provide the latter as an extra entrypoint. Likewise -# divrem_1 and pre_divrem_1. - -gmp_mpn_functions_optional="umul udiv \ - invert_limb sqr_diagonal sqr_diag_addlsh1 \ - mul_2 mul_3 mul_4 mul_5 mul_6 \ - addmul_2 addmul_3 addmul_4 addmul_5 addmul_6 addmul_7 addmul_8 \ - addlsh1_n sublsh1_n rsblsh1_n rsh1add_n rsh1sub_n \ - addlsh2_n sublsh2_n rsblsh2_n \ - addlsh_n sublsh_n rsblsh_n \ - add_n_sub_n addaddmul_1msb0" - -gmp_mpn_functions="$extra_functions \ - add add_1 add_n sub sub_1 sub_n cnd_add_n cnd_sub_n cnd_swap neg com \ - mul_1 addmul_1 submul_1 \ - add_err1_n add_err2_n add_err3_n sub_err1_n sub_err2_n sub_err3_n \ - lshift rshift dive_1 diveby3 divis divrem divrem_1 divrem_2 \ - fib2_ui mod_1 mod_34lsub1 mode1o pre_divrem_1 pre_mod_1 dump \ - mod_1_1 mod_1_2 mod_1_3 mod_1_4 lshiftc \ - mul mul_fft mul_n sqr mul_basecase sqr_basecase nussbaumer_mul \ - mulmid_basecase toom42_mulmid mulmid_n mulmid \ - random random2 pow_1 \ - rootrem sqrtrem sizeinbase get_str set_str \ - scan0 scan1 popcount hamdist cmp zero_p \ - perfsqr perfpow \ - gcd_1 gcd gcdext_1 gcdext gcd_subdiv_step \ - gcdext_lehmer \ - div_q tdiv_qr jacbase jacobi_2 jacobi get_d \ - matrix22_mul matrix22_mul1_inverse_vector \ - hgcd_matrix hgcd2 hgcd_step hgcd_reduce hgcd hgcd_appr \ - hgcd2_jacobi hgcd_jacobi \ - mullo_n mullo_basecase sqrlo sqrlo_basecase \ - toom22_mul toom32_mul toom42_mul toom52_mul toom62_mul \ - toom33_mul toom43_mul toom53_mul toom54_mul toom63_mul \ - toom44_mul \ - toom6h_mul toom6_sqr toom8h_mul toom8_sqr \ - toom_couple_handling \ - toom2_sqr toom3_sqr toom4_sqr \ - toom_eval_dgr3_pm1 toom_eval_dgr3_pm2 \ - toom_eval_pm1 toom_eval_pm2 toom_eval_pm2exp toom_eval_pm2rexp \ - toom_interpolate_5pts toom_interpolate_6pts toom_interpolate_7pts \ - toom_interpolate_8pts toom_interpolate_12pts toom_interpolate_16pts \ - invertappr invert binvert mulmod_bnm1 sqrmod_bnm1 \ - div_qr_1 div_qr_1n_pi1 \ - div_qr_2 div_qr_2n_pi1 div_qr_2u_pi1 \ - sbpi1_div_q sbpi1_div_qr sbpi1_divappr_q \ - dcpi1_div_q dcpi1_div_qr dcpi1_divappr_q \ - mu_div_qr mu_divappr_q mu_div_q \ - bdiv_q_1 \ - sbpi1_bdiv_q sbpi1_bdiv_qr \ - dcpi1_bdiv_q dcpi1_bdiv_qr \ - mu_bdiv_q mu_bdiv_qr \ - bdiv_q bdiv_qr broot brootinv bsqrt bsqrtinv \ - divexact bdiv_dbm1c redc_1 redc_2 redc_n powm powlo sec_powm \ - sec_mul sec_sqr sec_div_qr sec_div_r sec_pi1_div_qr sec_pi1_div_r \ - sec_add_1 sec_sub_1 sec_invert \ - trialdiv remove \ - and_n andn_n nand_n ior_n iorn_n nior_n xor_n xnor_n \ - copyi copyd zero sec_tabselect \ - comb_tables \ - $gmp_mpn_functions_optional" - -define(GMP_MULFUNC_CHOICES, -[# functions that can be provided by multi-function files -tmp_mulfunc= -case $tmp_fn in - add_n|sub_n) tmp_mulfunc="aors_n" ;; - add_err1_n|sub_err1_n) - tmp_mulfunc="aors_err1_n" ;; - add_err2_n|sub_err2_n) - tmp_mulfunc="aors_err2_n" ;; - add_err3_n|sub_err3_n) - tmp_mulfunc="aors_err3_n" ;; - cnd_add_n|cnd_sub_n) tmp_mulfunc="cnd_aors_n" ;; - sec_add_1|sec_sub_1) tmp_mulfunc="sec_aors_1" ;; - addmul_1|submul_1) tmp_mulfunc="aorsmul_1" ;; - mul_2|addmul_2) tmp_mulfunc="aormul_2" ;; - mul_3|addmul_3) tmp_mulfunc="aormul_3" ;; - mul_4|addmul_4) tmp_mulfunc="aormul_4" ;; - popcount|hamdist) tmp_mulfunc="popham" ;; - and_n|andn_n|nand_n | ior_n|iorn_n|nior_n | xor_n|xnor_n) - tmp_mulfunc="logops_n" ;; - lshift|rshift) tmp_mulfunc="lorrshift";; - addlsh1_n) - tmp_mulfunc="aorslsh1_n aorrlsh1_n aorsorrlsh1_n";; - sublsh1_n) - tmp_mulfunc="aorslsh1_n sorrlsh1_n aorsorrlsh1_n";; - rsblsh1_n) - tmp_mulfunc="aorrlsh1_n sorrlsh1_n aorsorrlsh1_n";; - addlsh2_n) - tmp_mulfunc="aorslsh2_n aorrlsh2_n aorsorrlsh2_n";; - sublsh2_n) - tmp_mulfunc="aorslsh2_n sorrlsh2_n aorsorrlsh2_n";; - rsblsh2_n) - tmp_mulfunc="aorrlsh2_n sorrlsh2_n aorsorrlsh2_n";; - addlsh_n) - tmp_mulfunc="aorslsh_n aorrlsh_n aorsorrlsh_n";; - sublsh_n) - tmp_mulfunc="aorslsh_n sorrlsh_n aorsorrlsh_n";; - rsblsh_n) - tmp_mulfunc="aorrlsh_n sorrlsh_n aorsorrlsh_n";; - rsh1add_n|rsh1sub_n) - tmp_mulfunc="rsh1aors_n";; - sec_div_qr|sec_div_r) - tmp_mulfunc="sec_div";; - sec_pi1_div_qr|sec_pi1_div_r) - tmp_mulfunc="sec_pi1_div";; -esac -]) - -# the list of all object files used by mpn/Makefile.in and the -# top-level Makefile.in, respectively -mpn_objects= -mpn_objs_in_libgmp= - -# links from the sources, to be removed by "make distclean" -gmp_srclinks= - - -# mpn_relative_top_srcdir is $top_srcdir, but for use from within the mpn -# build directory. If $srcdir is relative then we use a relative path too, -# so the two trees can be moved together. -case $srcdir in - [[\\/]* | ?:[\\/]*]) # absolute, as per autoconf - mpn_relative_top_srcdir=$srcdir ;; - *) # relative - mpn_relative_top_srcdir=../$srcdir ;; -esac - - -define(MPN_SUFFIXES,[asm S s c]) - -dnl Usage: GMP_FILE_TO_FUNCTION_BASE(func,file) -dnl -dnl Set $func to the function base name for $file, eg. dive_1 gives -dnl divexact_1. -dnl -define(GMP_FILE_TO_FUNCTION, -[case $$2 in - dive_1) $1=divexact_1 ;; - diveby3) $1=divexact_by3c ;; - pre_divrem_1) $1=preinv_divrem_1 ;; - mode1o) $1=modexact_1c_odd ;; - pre_mod_1) $1=preinv_mod_1 ;; - mod_1_1) $1=mod_1_1p ;; - mod_1_1_cps) $1=mod_1_1p_cps ;; - mod_1_2) $1=mod_1s_2p ;; - mod_1_2_cps) $1=mod_1s_2p_cps ;; - mod_1_3) $1=mod_1s_3p ;; - mod_1_3_cps) $1=mod_1s_3p_cps ;; - mod_1_4) $1=mod_1s_4p ;; - mod_1_4_cps) $1=mod_1s_4p_cps ;; - *) $1=$$2 ;; -esac -]) - -# Fat binary setups. -# -# We proceed through each $fat_path directory, and look for $fat_function -# routines there. Those found are incorporated in the build by generating a -# little mpn/<foo>.asm or mpn/<foo>.c file in the build directory, with -# suitable function renaming, and adding that to $mpn_objects (the same as a -# normal mpn file). -# -# fat.h is generated with macros to let internal calls to each $fat_function -# go directly through __gmpn_cpuvec, plus macros and declarations helping to -# setup that structure, on a per-directory basis ready for -# mpn/<cpu>/fat/fat.c. -# -# fat.h includes thresholds listed in $fat_thresholds, extracted from -# gmp-mparam.h in each directory. An overall maximum for each threshold is -# established, for use in making fixed size arrays of temporary space. -# (Eg. MUL_TOOM33_THRESHOLD_LIMIT used by mpn/generic/mul.c.) -# -# It'd be possible to do some of this manually, but when there's more than a -# few functions and a few directories it becomes very tedious, and very -# prone to having some routine accidentally omitted. On that basis it seems -# best to automate as much as possible, even if the code to do so is a bit -# ugly. -# - -if test -n "$fat_path"; then - # Usually the mpn build directory is created with mpn/Makefile - # instantiation, but we want to write to it sooner. - mkdir mpn 2>/dev/null - - echo "/* fat.h - setups for fat binaries." >fat.h - echo " Generated by configure - DO NOT EDIT. */" >>fat.h - - AC_DEFINE(WANT_FAT_BINARY, 1, [Define to 1 when building a fat binary.]) - GMP_DEFINE(WANT_FAT_BINARY, yes) - - # Don't want normal copies of fat functions - for tmp_fn in $fat_functions; do - GMP_REMOVE_FROM_LIST(gmp_mpn_functions, $tmp_fn) - GMP_REMOVE_FROM_LIST(gmp_mpn_functions_optional, $tmp_fn) - done - - for tmp_fn in $fat_functions; do - GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) - echo " -#ifndef OPERATION_$tmp_fn -#undef mpn_$tmp_fbase -#define mpn_$tmp_fbase (*__gmpn_cpuvec.$tmp_fbase) -#endif -DECL_$tmp_fbase (__MPN(${tmp_fbase}_init));" >>fat.h - # encourage various macros to use fat functions - AC_DEFINE_UNQUOTED(HAVE_NATIVE_mpn_$tmp_fbase) - done - - echo "" >>fat.h - echo "/* variable thresholds */" >>fat.h - for tmp_tn in $fat_thresholds; do - echo "#undef $tmp_tn" >>fat.h - echo "#define $tmp_tn CPUVEC_THRESHOLD (`echo $tmp_tn | tr [A-Z] [a-z]`)" >>fat.h - done - - echo " -/* Copy all fields into __gmpn_cpuvec. - memcpy is not used because it might operate byte-wise (depending on its - implementation), and we need the function pointer writes to be atomic. - "volatile" discourages the compiler from trying to optimize this. */ -#define CPUVEC_INSTALL(vec) \\ - do { \\ - volatile struct cpuvec_t *p = &__gmpn_cpuvec; \\" >>fat.h - for tmp_fn in $fat_functions; do - GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) - echo " p->$tmp_fbase = vec.$tmp_fbase; \\" >>fat.h - done - for tmp_tn in $fat_thresholds; do - tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]` - echo " p->$tmp_field_name = vec.$tmp_field_name; \\" >>fat.h - done - echo " } while (0)" >>fat.h - - echo " -/* A helper to check all fields are filled. */ -#define ASSERT_CPUVEC(vec) \\ - do { \\" >>fat.h - for tmp_fn in $fat_functions; do - GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) - echo " ASSERT (vec.$tmp_fbase != NULL); \\" >>fat.h - done - for tmp_tn in $fat_thresholds; do - tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]` - echo " ASSERT (vec.$tmp_field_name != 0); \\" >>fat.h - done - echo " } while (0)" >>fat.h - - echo " -/* Call ITERATE(field) for each fat threshold field. */ -#define ITERATE_FAT_THRESHOLDS() \\ - do { \\" >>fat.h - for tmp_tn in $fat_thresholds; do - tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]` - echo " ITERATE ($tmp_tn, $tmp_field_name); \\" >>fat.h - done - echo " } while (0)" >>fat.h - - for tmp_dir in $fat_path; do - CPUVEC_SETUP= - THRESH_ASM_SETUP= - echo "" >>fat.h - GMP_FAT_SUFFIX(tmp_suffix, $tmp_dir) - - # In order to keep names unique on a DOS 8.3 filesystem, use a prefix - # (rather than a suffix) for the generated file names, and abbreviate. - case $tmp_suffix in - pentium) tmp_prefix=p ;; - pentium_mmx) tmp_prefix=pm ;; - p6_mmx) tmp_prefix=p2 ;; - p6_p3mmx) tmp_prefix=p3 ;; - pentium4) tmp_prefix=p4 ;; - pentium4_mmx) tmp_prefix=p4m ;; - pentium4_sse2) tmp_prefix=p4s ;; - k6_mmx) tmp_prefix=k6m ;; - k6_k62mmx) tmp_prefix=k62 ;; - k7_mmx) tmp_prefix=k7m ;; - *) tmp_prefix=$tmp_suffix ;; - esac - - # Extract desired thresholds from gmp-mparam.h file in this directory, - # if present. - tmp_mparam=$srcdir/mpn/$tmp_dir/gmp-mparam.h - if test -f $tmp_mparam; then - for tmp_tn in $fat_thresholds; do - tmp_thresh=`sed -n "s/^#define $tmp_tn[ ]*\\([0-9][0-9]*\\).*$/\\1/p" $tmp_mparam` - if test -n "$tmp_thresh"; then - THRESH_ASM_SETUP=["${THRESH_ASM_SETUP}define($tmp_tn,$tmp_thresh) -"] - CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.`echo $tmp_tn | tr [[A-Z]] [[a-z]]` = $tmp_thresh; \\ -" - eval tmp_limit=\$${tmp_tn}_LIMIT - if test -z "$tmp_limit"; then - tmp_limit=0 - fi - if test $tmp_thresh -gt $tmp_limit; then - eval ${tmp_tn}_LIMIT=$tmp_thresh - fi - fi - done - fi - - for tmp_fn in $fat_functions; do - GMP_MULFUNC_CHOICES - - for tmp_base in $tmp_fn $tmp_mulfunc; do - for tmp_ext in MPN_SUFFIXES; do - tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext - if test -f $tmp_file; then - - # If the host uses a non-standard ABI, check if tmp_file supports it - # - if test -n "$GMP_NONSTD_ABI" && test $tmp_ext != "c"; then - abi=[`sed -n 's/^[ ]*ABI_SUPPORT(\(.*\))/\1/p' $tmp_file `] - if echo "$abi" | grep -q "\\b${GMP_NONSTD_ABI}\\b"; then - true - else - continue - fi - fi - - mpn_objects="$mpn_objects ${tmp_prefix}_$tmp_fn.lo" - mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/${tmp_prefix}_$tmp_fn.lo" - - GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) - - # carry-in variant, eg. divrem_1c or modexact_1c_odd - case $tmp_fbase in - *_1*) tmp_fbasec=`echo $tmp_fbase | sed 's/_1/_1c/'` ;; - *) tmp_fbasec=${tmp_fbase}c ;; - esac - - # Create a little file doing an include from srcdir. The - # OPERATION and renamings aren't all needed all the time, but - # they don't hurt if unused. - # - # FIXME: Should generate these via config.status commands. - # Would need them all in one AC_CONFIG_COMMANDS though, since - # that macro doesn't accept a set of separate commands generated - # by shell code. - # - case $tmp_ext in - asm) - # hide the d-n-l from autoconf's error checking - tmp_d_n_l=d""nl - echo ["$tmp_d_n_l mpn_$tmp_fbase - from $tmp_dir directory for fat binary. -$tmp_d_n_l Generated by configure - DO NOT EDIT. - -define(OPERATION_$tmp_fn) -define(__gmpn_$tmp_fbase, __gmpn_${tmp_fbase}_$tmp_suffix) -define(__gmpn_$tmp_fbasec,__gmpn_${tmp_fbasec}_${tmp_suffix}) -define(__gmpn_preinv_${tmp_fbase},__gmpn_preinv_${tmp_fbase}_${tmp_suffix}) -define(__gmpn_${tmp_fbase}_cps,__gmpn_${tmp_fbase}_cps_${tmp_suffix}) - -$tmp_d_n_l For k6 and k7 gcd_1 calling their corresponding mpn_modexact_1_odd -ifdef(\`__gmpn_modexact_1_odd',, -\`define(__gmpn_modexact_1_odd,__gmpn_modexact_1_odd_${tmp_suffix})') - -$THRESH_ASM_SETUP -include][($mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.asm) -"] >mpn/${tmp_prefix}_$tmp_fn.asm - ;; - c) - echo ["/* mpn_$tmp_fbase - from $tmp_dir directory for fat binary. - Generated by configure - DO NOT EDIT. */ - -#define OPERATION_$tmp_fn 1 -#define __gmpn_$tmp_fbase __gmpn_${tmp_fbase}_$tmp_suffix -#define __gmpn_$tmp_fbasec __gmpn_${tmp_fbasec}_${tmp_suffix} -#define __gmpn_preinv_${tmp_fbase} __gmpn_preinv_${tmp_fbase}_${tmp_suffix} -#define __gmpn_${tmp_fbase}_cps __gmpn_${tmp_fbase}_cps_${tmp_suffix} - -#include \"$mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.c\" -"] >mpn/${tmp_prefix}_$tmp_fn.c - ;; - esac - - # Prototype, and append to CPUVEC_SETUP for this directory. - echo "DECL_$tmp_fbase (__gmpn_${tmp_fbase}_$tmp_suffix);" >>fat.h - CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.$tmp_fbase = __gmpn_${tmp_fbase}_${tmp_suffix}; \\ -" - # Ditto for any preinv variant (preinv_divrem_1, preinv_mod_1). - if grep "^PROLOGUE(mpn_preinv_$tmp_fn)" $tmp_file >/dev/null; then - echo "DECL_preinv_$tmp_fbase (__gmpn_preinv_${tmp_fbase}_$tmp_suffix);" >>fat.h - CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.preinv_$tmp_fbase = __gmpn_preinv_${tmp_fbase}_${tmp_suffix}; \\ -" - fi - - # Ditto for any mod_1...cps variant - if grep "^PROLOGUE(mpn_${tmp_fbase}_cps)" $tmp_file >/dev/null; then - echo "DECL_${tmp_fbase}_cps (__gmpn_${tmp_fbase}_cps_$tmp_suffix);" >>fat.h - CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.${tmp_fbase}_cps = __gmpn_${tmp_fbase}_cps_${tmp_suffix}; \\ -" - fi - fi - done - done - done - - # Emit CPUVEC_SETUP for this directory - echo "" >>fat.h - echo "#define CPUVEC_SETUP_$tmp_suffix \\" >>fat.h - echo " do { \\" >>fat.h - echo "$CPUVEC_SETUP } while (0)" >>fat.h - done - - # Emit threshold limits - echo "" >>fat.h - for tmp_tn in $fat_thresholds; do - eval tmp_limit=\$${tmp_tn}_LIMIT - echo "#define ${tmp_tn}_LIMIT $tmp_limit" >>fat.h - done -fi - - -# Normal binary setups. -# - -for tmp_ext in MPN_SUFFIXES; do - eval found_$tmp_ext=no -done - -for tmp_fn in $gmp_mpn_functions; do - for tmp_ext in MPN_SUFFIXES; do - test "$no_create" = yes || rm -f mpn/$tmp_fn.$tmp_ext - done - - # mpn_preinv_divrem_1 might have been provided by divrem_1.asm, likewise - # mpn_preinv_mod_1 by mod_1.asm. - case $tmp_fn in - pre_divrem_1) - if test "$HAVE_NATIVE_mpn_preinv_divrem_1" = yes; then continue; fi ;; - pre_mod_1) - if test "$HAVE_NATIVE_mpn_preinv_mod_1" = yes; then continue; fi ;; - esac - - GMP_MULFUNC_CHOICES - - found=no - for tmp_dir in $path; do - for tmp_base in $tmp_fn $tmp_mulfunc; do - for tmp_ext in MPN_SUFFIXES; do - tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext - if test -f $tmp_file; then - - # For a nails build, check if the file supports our nail bits. - # Generic code always supports all nails. - # - # FIXME: When a multi-function file is selected to provide one of - # the nails-neutral routines, like logops_n for and_n, the - # PROLOGUE grepping will create HAVE_NATIVE_mpn_<foo> defines for - # all functions in that file, even if they haven't all been - # nailified. Not sure what to do about this, it's only really a - # problem for logops_n, and it's not too terrible to insist those - # get nailified always. - # - if test $GMP_NAIL_BITS != 0 && test $tmp_dir != generic; then - case $tmp_fn in - and_n | ior_n | xor_n | andn_n | \ - copyi | copyd | \ - popcount | hamdist | \ - udiv | udiv_w_sdiv | umul | \ - cntlz | invert_limb) - # these operations are either unaffected by nails or defined - # to operate on full limbs - ;; - *) - nails=[`sed -n 's/^[ ]*NAILS_SUPPORT(\(.*\))/\1/p' $tmp_file `] - for n in $nails; do - case $n in - *-*) - n_start=`echo "$n" | sed -n 's/\(.*\)-.*/\1/p'` - n_end=`echo "$n" | sed -n 's/.*-\(.*\)/\1/p'` - ;; - *) - n_start=$n - n_end=$n - ;; - esac - if test $GMP_NAIL_BITS -ge $n_start && test $GMP_NAIL_BITS -le $n_end; then - found=yes - break - fi - done - if test $found != yes; then - continue - fi - ;; - esac - fi - - # If the host uses a non-standard ABI, check if tmp_file supports it - # - if test -n "$GMP_NONSTD_ABI" && test $tmp_ext != "c"; then - abi=[`sed -n 's/^[ ]*ABI_SUPPORT(\(.*\))/\1/p' $tmp_file `] - if echo "$abi" | grep -q "\\b${GMP_NONSTD_ABI}\\b"; then - true - else - continue - fi - fi - - found=yes - eval found_$tmp_ext=yes - - if test $tmp_ext = c; then - tmp_u='$U' - else - tmp_u= - fi - - mpn_objects="$mpn_objects $tmp_fn$tmp_u.lo" - mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/$tmp_fn$tmp_u.lo" - AC_CONFIG_LINKS(mpn/$tmp_fn.$tmp_ext:mpn/$tmp_dir/$tmp_base.$tmp_ext) - gmp_srclinks="$gmp_srclinks mpn/$tmp_fn.$tmp_ext" - - # Duplicate AC_DEFINEs are harmless, so it doesn't matter - # that multi-function files get grepped here repeatedly. - # The PROLOGUE pattern excludes the optional second parameter. - gmp_ep=[` - sed -n 's/^[ ]*MULFUNC_PROLOGUE(\(.*\))/\1/p' $tmp_file ; - sed -n 's/^[ ]*PROLOGUE(\([^,]*\).*)/\1/p' $tmp_file - `] - for gmp_tmp in $gmp_ep; do - AC_DEFINE_UNQUOTED(HAVE_NATIVE_$gmp_tmp) - eval HAVE_NATIVE_$gmp_tmp=yes - done - - case $tmp_fn in - sqr_basecase) sqr_basecase_source=$tmp_file ;; - esac - - break - fi - done - if test $found = yes; then break ; fi - done - if test $found = yes; then break ; fi - done - - if test $found = no; then - for tmp_optional in $gmp_mpn_functions_optional; do - if test $tmp_optional = $tmp_fn; then - found=yes - fi - done - if test $found = no; then - AC_MSG_ERROR([no version of $tmp_fn found in path: $path]) - fi - fi -done - -# All cycle counters are .asm files currently -if test -n "$SPEED_CYCLECOUNTER_OBJ"; then - found_asm=yes -fi - -dnl The following list only needs to have templates for those defines which -dnl are going to be tested by the code, there's no need to have every -dnl possible mpn routine. - -AH_VERBATIM([HAVE_NATIVE], -[/* Define to 1 each of the following for which a native (ie. CPU specific) - implementation of the corresponding routine exists. */ -#undef HAVE_NATIVE_mpn_add_n -#undef HAVE_NATIVE_mpn_add_n_sub_n -#undef HAVE_NATIVE_mpn_add_nc -#undef HAVE_NATIVE_mpn_addaddmul_1msb0 -#undef HAVE_NATIVE_mpn_addlsh1_n -#undef HAVE_NATIVE_mpn_addlsh2_n -#undef HAVE_NATIVE_mpn_addlsh_n -#undef HAVE_NATIVE_mpn_addlsh1_nc -#undef HAVE_NATIVE_mpn_addlsh2_nc -#undef HAVE_NATIVE_mpn_addlsh_nc -#undef HAVE_NATIVE_mpn_addlsh1_n_ip1 -#undef HAVE_NATIVE_mpn_addlsh2_n_ip1 -#undef HAVE_NATIVE_mpn_addlsh_n_ip1 -#undef HAVE_NATIVE_mpn_addlsh1_nc_ip1 -#undef HAVE_NATIVE_mpn_addlsh2_nc_ip1 -#undef HAVE_NATIVE_mpn_addlsh_nc_ip1 -#undef HAVE_NATIVE_mpn_addlsh1_n_ip2 -#undef HAVE_NATIVE_mpn_addlsh2_n_ip2 -#undef HAVE_NATIVE_mpn_addlsh_n_ip2 -#undef HAVE_NATIVE_mpn_addlsh1_nc_ip2 -#undef HAVE_NATIVE_mpn_addlsh2_nc_ip2 -#undef HAVE_NATIVE_mpn_addlsh_nc_ip2 -#undef HAVE_NATIVE_mpn_addmul_1c -#undef HAVE_NATIVE_mpn_addmul_2 -#undef HAVE_NATIVE_mpn_addmul_3 -#undef HAVE_NATIVE_mpn_addmul_4 -#undef HAVE_NATIVE_mpn_addmul_5 -#undef HAVE_NATIVE_mpn_addmul_6 -#undef HAVE_NATIVE_mpn_addmul_7 -#undef HAVE_NATIVE_mpn_addmul_8 -#undef HAVE_NATIVE_mpn_addmul_2s -#undef HAVE_NATIVE_mpn_and_n -#undef HAVE_NATIVE_mpn_andn_n -#undef HAVE_NATIVE_mpn_bdiv_dbm1c -#undef HAVE_NATIVE_mpn_bdiv_q_1 -#undef HAVE_NATIVE_mpn_pi1_bdiv_q_1 -#undef HAVE_NATIVE_mpn_cnd_add_n -#undef HAVE_NATIVE_mpn_cnd_sub_n -#undef HAVE_NATIVE_mpn_com -#undef HAVE_NATIVE_mpn_copyd -#undef HAVE_NATIVE_mpn_copyi -#undef HAVE_NATIVE_mpn_div_qr_1n_pi1 -#undef HAVE_NATIVE_mpn_div_qr_2 -#undef HAVE_NATIVE_mpn_divexact_1 -#undef HAVE_NATIVE_mpn_divexact_by3c -#undef HAVE_NATIVE_mpn_divrem_1 -#undef HAVE_NATIVE_mpn_divrem_1c -#undef HAVE_NATIVE_mpn_divrem_2 -#undef HAVE_NATIVE_mpn_gcd_1 -#undef HAVE_NATIVE_mpn_hamdist -#undef HAVE_NATIVE_mpn_invert_limb -#undef HAVE_NATIVE_mpn_ior_n -#undef HAVE_NATIVE_mpn_iorn_n -#undef HAVE_NATIVE_mpn_lshift -#undef HAVE_NATIVE_mpn_lshiftc -#undef HAVE_NATIVE_mpn_lshsub_n -#undef HAVE_NATIVE_mpn_mod_1 -#undef HAVE_NATIVE_mpn_mod_1_1p -#undef HAVE_NATIVE_mpn_mod_1c -#undef HAVE_NATIVE_mpn_mod_1s_2p -#undef HAVE_NATIVE_mpn_mod_1s_4p -#undef HAVE_NATIVE_mpn_mod_34lsub1 -#undef HAVE_NATIVE_mpn_modexact_1_odd -#undef HAVE_NATIVE_mpn_modexact_1c_odd -#undef HAVE_NATIVE_mpn_mul_1 -#undef HAVE_NATIVE_mpn_mul_1c -#undef HAVE_NATIVE_mpn_mul_2 -#undef HAVE_NATIVE_mpn_mul_3 -#undef HAVE_NATIVE_mpn_mul_4 -#undef HAVE_NATIVE_mpn_mul_5 -#undef HAVE_NATIVE_mpn_mul_6 -#undef HAVE_NATIVE_mpn_mul_basecase -#undef HAVE_NATIVE_mpn_mullo_basecase -#undef HAVE_NATIVE_mpn_nand_n -#undef HAVE_NATIVE_mpn_nior_n -#undef HAVE_NATIVE_mpn_popcount -#undef HAVE_NATIVE_mpn_preinv_divrem_1 -#undef HAVE_NATIVE_mpn_preinv_mod_1 -#undef HAVE_NATIVE_mpn_redc_1 -#undef HAVE_NATIVE_mpn_redc_2 -#undef HAVE_NATIVE_mpn_rsblsh1_n -#undef HAVE_NATIVE_mpn_rsblsh2_n -#undef HAVE_NATIVE_mpn_rsblsh_n -#undef HAVE_NATIVE_mpn_rsblsh1_nc -#undef HAVE_NATIVE_mpn_rsblsh2_nc -#undef HAVE_NATIVE_mpn_rsblsh_nc -#undef HAVE_NATIVE_mpn_rsh1add_n -#undef HAVE_NATIVE_mpn_rsh1add_nc -#undef HAVE_NATIVE_mpn_rsh1sub_n -#undef HAVE_NATIVE_mpn_rsh1sub_nc -#undef HAVE_NATIVE_mpn_rshift -#undef HAVE_NATIVE_mpn_sqr_basecase -#undef HAVE_NATIVE_mpn_sqr_diagonal -#undef HAVE_NATIVE_mpn_sqr_diag_addlsh1 -#undef HAVE_NATIVE_mpn_sub_n -#undef HAVE_NATIVE_mpn_sub_nc -#undef HAVE_NATIVE_mpn_sublsh1_n -#undef HAVE_NATIVE_mpn_sublsh2_n -#undef HAVE_NATIVE_mpn_sublsh_n -#undef HAVE_NATIVE_mpn_sublsh1_nc -#undef HAVE_NATIVE_mpn_sublsh2_nc -#undef HAVE_NATIVE_mpn_sublsh_nc -#undef HAVE_NATIVE_mpn_sublsh1_n_ip1 -#undef HAVE_NATIVE_mpn_sublsh2_n_ip1 -#undef HAVE_NATIVE_mpn_sublsh_n_ip1 -#undef HAVE_NATIVE_mpn_sublsh1_nc_ip1 -#undef HAVE_NATIVE_mpn_sublsh2_nc_ip1 -#undef HAVE_NATIVE_mpn_sublsh_nc_ip1 -#undef HAVE_NATIVE_mpn_submul_1c -#undef HAVE_NATIVE_mpn_tabselect -#undef HAVE_NATIVE_mpn_udiv_qrnnd -#undef HAVE_NATIVE_mpn_udiv_qrnnd_r -#undef HAVE_NATIVE_mpn_umul_ppmm -#undef HAVE_NATIVE_mpn_umul_ppmm_r -#undef HAVE_NATIVE_mpn_xor_n -#undef HAVE_NATIVE_mpn_xnor_n]) - -# Don't demand an m4 unless it's actually needed. -if test $found_asm = yes; then - GMP_PROG_M4 - GMP_M4_M4WRAP_SPURIOUS -# else -# It's unclear why this m4-not-needed stuff was ever done. -# if test -z "$M4" ; then -# M4=m4-not-needed -# fi -fi - -# Only do the GMP_ASM checks if there's a .S or .asm wanting them. -if test $found_asm = no && test $found_S = no; then - gmp_asm_syntax_testing=no -fi - -if test "$gmp_asm_syntax_testing" != no; then - GMP_ASM_TEXT - GMP_ASM_DATA - GMP_ASM_LABEL_SUFFIX - GMP_ASM_GLOBL - GMP_ASM_GLOBL_ATTR - GMP_ASM_UNDERSCORE - GMP_ASM_RODATA - GMP_ASM_TYPE - GMP_ASM_SIZE - GMP_ASM_LSYM_PREFIX - GMP_ASM_W32 - GMP_ASM_ALIGN_LOG - - case $host in - hppa*-*-*) - # for both pa32 and pa64 - GMP_INCLUDE_MPN(pa32/pa-defs.m4) - ;; - IA64_PATTERN) - GMP_ASM_IA64_ALIGN_OK - ;; - M68K_PATTERN) - GMP_ASM_M68K_INSTRUCTION - GMP_ASM_M68K_ADDRESSING - GMP_ASM_M68K_BRANCHES - ;; - [powerpc*-*-* | power[3-9]-*-*]) - GMP_ASM_POWERPC_PIC_ALWAYS - GMP_ASM_POWERPC_R_REGISTERS - GMP_INCLUDE_MPN(powerpc32/powerpc-defs.m4) - - # Check for Linux ELFv2 ABI - AC_EGREP_CPP(yes, -[#if _CALL_ELF == 2 -yes -#endif], - [GMP_DEFINE_RAW(["define(<ELFv2_ABI>)"])]) - - case $host in - *-*-aix*) - case $ABI in - mode64) GMP_INCLUDE_MPN(powerpc64/aix.m4) ;; - *) GMP_INCLUDE_MPN(powerpc32/aix.m4) ;; - esac - ;; - *-*-linux* | *-*-*bsd*) - case $ABI in - mode64) GMP_INCLUDE_MPN(powerpc64/elf.m4) ;; - mode32 | 32) GMP_INCLUDE_MPN(powerpc32/elf.m4) ;; - esac - ;; - *-*-darwin*) - case $ABI in - mode64) GMP_INCLUDE_MPN(powerpc64/darwin.m4) ;; - mode32 | 32) GMP_INCLUDE_MPN(powerpc32/darwin.m4) ;; - esac - ;; - *) - # Assume unrecognized operating system is the powerpc eABI - GMP_INCLUDE_MPN(powerpc32/eabi.m4) - ;; - esac - ;; - power*-*-aix*) - GMP_INCLUDE_MPN(powerpc32/aix.m4) - ;; - *sparc*-*-*) - case $ABI in - 64) - GMP_ASM_SPARC_REGISTER - ;; - esac - GMP_ASM_SPARC_GOTDATA - GMP_ASM_SPARC_SHARED_THUNKS - ;; - X86_PATTERN | X86_64_PATTERN) - GMP_ASM_ALIGN_FILL_0x90 - case $ABI in - 32) - GMP_INCLUDE_MPN(x86/x86-defs.m4) - AC_DEFINE(HAVE_HOST_CPU_FAMILY_x86) - GMP_ASM_COFF_TYPE - GMP_ASM_X86_GOT_UNDERSCORE - GMP_ASM_X86_SHLDL_CL - case $enable_profiling in - prof | gprof) GMP_ASM_X86_MCOUNT ;; - esac - case $host in - *-*-darwin*) - GMP_INCLUDE_MPN(x86/darwin.m4) ;; - esac - ;; - 64|x32) - GMP_INCLUDE_MPN(x86_64/x86_64-defs.m4) - AC_DEFINE(HAVE_HOST_CPU_FAMILY_x86_64) - case $host in - *-*-darwin*) - GMP_INCLUDE_MPN(x86_64/darwin.m4) ;; - *-*-mingw* | *-*-cygwin) - GMP_INCLUDE_MPN(x86_64/dos64.m4) ;; - *-openbsd*) - GMP_DEFINE_RAW(["define(<OPENBSD>,1)"]) ;; - esac - ;; - esac - ;; - esac -fi - -# For --enable-minithres, prepend "minithres" to path so that its special -# gmp-mparam.h will be used. -if test $enable_minithres = yes; then - path="minithres $path" -fi - -# Create link for gmp-mparam.h. -gmp_mparam_source= -for gmp_mparam_dir in $path; do - test "$no_create" = yes || rm -f gmp-mparam.h - tmp_file=$srcdir/mpn/$gmp_mparam_dir/gmp-mparam.h - if test -f $tmp_file; then - AC_CONFIG_LINKS(gmp-mparam.h:mpn/$gmp_mparam_dir/gmp-mparam.h) - gmp_srclinks="$gmp_srclinks gmp-mparam.h" - gmp_mparam_source=$tmp_file - break - fi -done -if test -z "$gmp_mparam_source"; then - AC_MSG_ERROR([no version of gmp-mparam.h found in path: $path]) -fi - -# For a helpful message from tune/tuneup.c -gmp_mparam_suggest=$gmp_mparam_source -if test "$gmp_mparam_dir" = generic; then - for i in $path; do break; done - if test "$i" != generic; then - gmp_mparam_suggest="new file $srcdir/mpn/$i/gmp-mparam.h" - fi -fi -AC_DEFINE_UNQUOTED(GMP_MPARAM_H_SUGGEST, "$gmp_mparam_source", -[The gmp-mparam.h file (a string) the tune program should suggest updating.]) - - -# Copy relevant parameters from gmp-mparam.h to config.m4. -# We only do this for parameters that are used by some assembly files. -# Fat binaries do this on a per-file basis, so skip in that case. -# -if test -z "$fat_path"; then - for i in SQR_TOOM2_THRESHOLD BMOD_1_TO_MOD_1_THRESHOLD SHLD_SLOW SHRD_SLOW; do - value=`sed -n 's/^#define '$i'[ ]*\([0-9][0-9]*\).*$/\1/p' $gmp_mparam_source` - if test -n "$value"; then - GMP_DEFINE_RAW(["define(<$i>,<$value>)"]) - fi - done -fi - - -# Sizes of some types, needed at preprocessing time. -# -# FIXME: The assumption that GMP_LIMB_BITS is 8*sizeof(mp_limb_t) might -# be slightly rash, but it's true everywhere we know of and ought to be true -# of any sensible system. In a generic C build, grepping LONG_BIT out of -# <limits.h> might be an alternative, for maximum portability. -# -AC_CHECK_SIZEOF(void *) -AC_CHECK_SIZEOF(unsigned short) -AC_CHECK_SIZEOF(unsigned) -AC_CHECK_SIZEOF(unsigned long) -AC_CHECK_SIZEOF(mp_limb_t, , GMP_INCLUDE_GMP_H) -if test "$ac_cv_sizeof_mp_limb_t" = 0; then - AC_MSG_ERROR([Oops, mp_limb_t doesn't seem to work]) -fi -AC_SUBST(GMP_LIMB_BITS, `expr 8 \* $ac_cv_sizeof_mp_limb_t`) -GMP_DEFINE_RAW(["define(<SIZEOF_UNSIGNED>,<$ac_cv_sizeof_unsigned>)"]) - -# Check compiler limb size matches gmp-mparam.h -# -# FIXME: Some of the cycle counter objects in the tune directory depend on -# the size of ulong, it'd be possible to check that here, though a mismatch -# probably wouldn't want to be fatal, none of the libgmp assembler code -# depends on ulong. -# -mparam_bits=[`sed -n 's/^#define GMP_LIMB_BITS[ ][ ]*\([0-9]*\).*$/\1/p' $gmp_mparam_source`] -if test -n "$mparam_bits" && test "$mparam_bits" -ne $GMP_LIMB_BITS; then - if test "$test_CFLAGS" = set; then - AC_MSG_ERROR([Oops, mp_limb_t is $GMP_LIMB_BITS bits, but the assembler code -in this configuration expects $mparam_bits bits. -You appear to have set \$CFLAGS, perhaps you also need to tell GMP the -intended ABI, see "ABI and ISA" in the manual.]) - else - AC_MSG_ERROR([Oops, mp_limb_t is $GMP_LIMB_BITS bits, but the assembler code -in this configuration expects $mparam_bits bits.]) - fi -fi - -GMP_DEFINE_RAW(["define(<GMP_LIMB_BITS>,$GMP_LIMB_BITS)"]) -GMP_DEFINE_RAW(["define(<GMP_NAIL_BITS>,$GMP_NAIL_BITS)"]) -GMP_DEFINE_RAW(["define(<GMP_NUMB_BITS>,eval(GMP_LIMB_BITS-GMP_NAIL_BITS))"]) - - -AC_SUBST(mpn_objects) -AC_SUBST(mpn_objs_in_libgmp) -AC_SUBST(gmp_srclinks) - - -# A recompiled sqr_basecase for use in the tune program, if necessary. -TUNE_SQR_OBJ= -test -d tune || mkdir tune -case $sqr_basecase_source in - *.asm) - sqr_max=[`sed -n 's/^def...(SQR_TOOM2_THRESHOLD_MAX, *\([0-9]*\))/\1/p' $sqr_basecase_source`] - if test -n "$sqr_max"; then - TUNE_SQR_OBJ=sqr_asm.o - AC_DEFINE_UNQUOTED(TUNE_SQR_TOOM2_MAX,$sqr_max, - [Maximum size the tune program can test for SQR_TOOM2_THRESHOLD]) - fi - cat >tune/sqr_basecase.c <<EOF -/* not sure that an empty file can compile, so put in a dummy */ -int sqr_basecase_dummy; -EOF - ;; - *.c) - TUNE_SQR_OBJ= - AC_DEFINE(TUNE_SQR_TOOM2_MAX,SQR_TOOM2_MAX_GENERIC) - cat >tune/sqr_basecase.c <<EOF -#define TUNE_PROGRAM_BUILD 1 -#define TUNE_PROGRAM_BUILD_SQR 1 -#include "mpn/sqr_basecase.c" -EOF - ;; -esac -AC_SUBST(TUNE_SQR_OBJ) - -# Create config.m4. -GMP_FINISH - -# Create Makefiles -# FIXME: Upcoming version of autoconf/automake may not like broken lines. -# Right now automake isn't accepting the new AC_CONFIG_FILES scheme. - -AC_OUTPUT(Makefile \ - mpf/Makefile mpn/Makefile mpq/Makefile \ - mpz/Makefile printf/Makefile scanf/Makefile rand/Makefile cxx/Makefile \ - doc/Makefile tune/Makefile \ - gmp.h:gmp-h.in) - -AC_MSG_NOTICE([summary of build options: - - Version: ${PACKAGE_STRING} - Host type: ${host} - ABI: ${ABI} - Install prefix: ${prefix} - Compiler: ${CC} - Static libraries: ${enable_static} - Shared libraries: ${enable_shared} -]) - -if test x$cross_compiling = xyes ; then - case "$host" in - *-*-mingw* | *-*-cygwin) - if test x$ABI = x64 ; then - AC_MSG_NOTICE([If wine64 is installed, use make check TESTS_ENVIRONMENT=wine64.]) - else - AC_MSG_NOTICE([If wine is installed, use make check TESTS_ENVIRONMENT=wine.]) - fi - ;; - esac -fi diff --git a/src/plugins/e-acsl/contrib/libgmp/cxx/Makefile.am b/src/plugins/e-acsl/contrib/libgmp/cxx/Makefile.am deleted file mode 100644 index 30ed76abcd701c2fb17858bec9789b405e4ea84d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/cxx/Makefile.am +++ /dev/null @@ -1,40 +0,0 @@ -## Process this file with automake to generate Makefile.in - -# Copyright 2001-2003, 2012 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - - -AM_CPPFLAGS = -D__GMP_WITHIN_GMPXX -I$(top_srcdir) - -if WANT_CXX -noinst_LTLIBRARIES = libcxx.la -endif - -libcxx_la_SOURCES = \ - isfuns.cc ismpf.cc ismpq.cc ismpz.cc ismpznw.cc limits.cc \ - osdoprnti.cc osfuns.cc osmpf.cc osmpq.cc osmpz.cc diff --git a/src/plugins/e-acsl/contrib/libgmp/cxx/Makefile.in b/src/plugins/e-acsl/contrib/libgmp/cxx/Makefile.in deleted file mode 100644 index b628df6fdbf0ce12dfe14ade000797c96163cafd..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/cxx/Makefile.in +++ /dev/null @@ -1,643 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# Copyright 2001-2003, 2012 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = cxx -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libcxx_la_LIBADD = -am_libcxx_la_OBJECTS = isfuns.lo ismpf.lo ismpq.lo ismpz.lo ismpznw.lo \ - limits.lo osdoprnti.lo osfuns.lo osmpf.lo osmpq.lo osmpz.lo -libcxx_la_OBJECTS = $(am_libcxx_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -@WANT_CXX_TRUE@am_libcxx_la_rpath = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = -am__depfiles_maybe = -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -AM_V_CXX = $(am__v_CXX_@AM_V@) -am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) -am__v_CXX_0 = @echo " CXX " $@; -am__v_CXX_1 = -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) -am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) -am__v_CXXLD_0 = @echo " CXXLD " $@; -am__v_CXXLD_1 = -SOURCES = $(libcxx_la_SOURCES) -DIST_SOURCES = $(libcxx_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ABI = @ABI@ -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AS = @AS@ -ASMFLAGS = @ASMFLAGS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CALLING_CONVENTIONS_OBJS = @CALLING_CONVENTIONS_OBJS@ -CC = @CC@ -CCAS = @CCAS@ -CC_FOR_BUILD = @CC_FOR_BUILD@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPP_FOR_BUILD = @CPP_FOR_BUILD@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFN_LONG_LONG_LIMB = @DEFN_LONG_LONG_LIMB@ -DEFS = @DEFS@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ -FGREP = @FGREP@ -GMP_LDFLAGS = @GMP_LDFLAGS@ -GMP_LIMB_BITS = @GMP_LIMB_BITS@ -GMP_NAIL_BITS = @GMP_NAIL_BITS@ -GREP = @GREP@ -HAVE_CLOCK_01 = @HAVE_CLOCK_01@ -HAVE_CPUTIME_01 = @HAVE_CPUTIME_01@ -HAVE_GETRUSAGE_01 = @HAVE_GETRUSAGE_01@ -HAVE_GETTIMEOFDAY_01 = @HAVE_GETTIMEOFDAY_01@ -HAVE_HOST_CPU_FAMILY_power = @HAVE_HOST_CPU_FAMILY_power@ -HAVE_HOST_CPU_FAMILY_powerpc = @HAVE_HOST_CPU_FAMILY_powerpc@ -HAVE_SIGACTION_01 = @HAVE_SIGACTION_01@ -HAVE_SIGALTSTACK_01 = @HAVE_SIGALTSTACK_01@ -HAVE_SIGSTACK_01 = @HAVE_SIGSTACK_01@ -HAVE_STACK_T_01 = @HAVE_STACK_T_01@ -HAVE_SYS_RESOURCE_H_01 = @HAVE_SYS_RESOURCE_H_01@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBCURSES = @LIBCURSES@ -LIBGMPXX_LDFLAGS = @LIBGMPXX_LDFLAGS@ -LIBGMP_DLL = @LIBGMP_DLL@ -LIBGMP_LDFLAGS = @LIBGMP_LDFLAGS@ -LIBM = @LIBM@ -LIBM_FOR_BUILD = @LIBM_FOR_BUILD@ -LIBOBJS = @LIBOBJS@ -LIBREADLINE = @LIBREADLINE@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -M4 = @M4@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SPEED_CYCLECOUNTER_OBJ = @SPEED_CYCLECOUNTER_OBJ@ -STRIP = @STRIP@ -TAL_OBJECT = @TAL_OBJECT@ -TUNE_LIBS = @TUNE_LIBS@ -TUNE_SQR_OBJ = @TUNE_SQR_OBJ@ -U_FOR_BUILD = @U_FOR_BUILD@ -VERSION = @VERSION@ -WITH_READLINE_01 = @WITH_READLINE_01@ -YACC = @YACC@ -YFLAGS = @YFLAGS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__leading_dot = @am__leading_dot@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -gmp_srclinks = @gmp_srclinks@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -mpn_objects = @mpn_objects@ -mpn_objs_in_libgmp = @mpn_objs_in_libgmp@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AM_CPPFLAGS = -D__GMP_WITHIN_GMPXX -I$(top_srcdir) -@WANT_CXX_TRUE@noinst_LTLIBRARIES = libcxx.la -libcxx_la_SOURCES = \ - isfuns.cc ismpf.cc ismpq.cc ismpz.cc ismpznw.cc limits.cc \ - osdoprnti.cc osfuns.cc osmpf.cc osmpq.cc osmpz.cc - -all: all-am - -.SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --ignore-deps cxx/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu --ignore-deps cxx/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libcxx.la: $(libcxx_la_OBJECTS) $(libcxx_la_DEPENDENCIES) $(EXTRA_libcxx_la_DEPENDENCIES) - $(AM_V_CXXLD)$(CXXLINK) $(am_libcxx_la_rpath) $(libcxx_la_OBJECTS) $(libcxx_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -.cc.o: - $(AM_V_CXX)$(CXXCOMPILE) -c -o $@ $< - -.cc.obj: - $(AM_V_CXX)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: - $(AM_V_CXX)$(LTCXXCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ - ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/src/plugins/e-acsl/contrib/libgmp/cxx/dummy.cc b/src/plugins/e-acsl/contrib/libgmp/cxx/dummy.cc deleted file mode 100644 index 8b728caa2d4a03e15d019272480d159e08e0ef94..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/cxx/dummy.cc +++ /dev/null @@ -1,33 +0,0 @@ -/* Dummy file to make automake treat libgmpxx.la as C++. - -Copyright 2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -/* some compilers reputedly dislike completely empty files */ -typedef int foo; diff --git a/src/plugins/e-acsl/contrib/libgmp/cxx/isfuns.cc b/src/plugins/e-acsl/contrib/libgmp/cxx/isfuns.cc deleted file mode 100644 index 3d349bcfa5fd506043a30cf9f7e3f7ec2724b5e8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/cxx/isfuns.cc +++ /dev/null @@ -1,116 +0,0 @@ -/* Auxiliary functions for C++-style input of GMP types. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <cctype> -#include <iostream> -#include <string> -#include "gmp.h" -#include "gmp-impl.h" - -using namespace std; - - -int -__gmp_istream_set_base (istream &i, char &c, bool &zero, bool &showbase) -{ - int base; - - zero = showbase = false; - switch (i.flags() & ios::basefield) - { - case ios::dec: - base = 10; - break; - case ios::hex: - base = 16; - break; - case ios::oct: - base = 8; - break; - default: - showbase = true; // look for initial "0" or "0x" or "0X" - if (c == '0') - { - if (! i.get(c)) - c = 0; // reset or we might loop indefinitely - - if (c == 'x' || c == 'X') - { - base = 16; - i.get(c); - } - else - { - base = 8; - zero = true; // if no other digit is read, the "0" counts - } - } - else - base = 10; - break; - } - - return base; -} - -void -__gmp_istream_set_digits (string &s, istream &i, char &c, bool &ok, int base) -{ - switch (base) - { - case 10: - while (isdigit(c)) - { - ok = true; // at least a valid digit was read - s += c; - if (! i.get(c)) - break; - } - break; - case 8: - while (isdigit(c) && c != '8' && c != '9') - { - ok = true; // at least a valid digit was read - s += c; - if (! i.get(c)) - break; - } - break; - case 16: - while (isxdigit(c)) - { - ok = true; // at least a valid digit was read - s += c; - if (! i.get(c)) - break; - } - break; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/cxx/ismpf.cc b/src/plugins/e-acsl/contrib/libgmp/cxx/ismpf.cc deleted file mode 100644 index 71c2b44d5cd7534e801b5c9e2d8ceedd4787f773..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/cxx/ismpf.cc +++ /dev/null @@ -1,145 +0,0 @@ -/* operator>> -- C++-style input of mpf_t. - -Copyright 2001, 2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <cctype> -#include <iostream> -#include <string> -#include <clocale> // for localeconv - -#include "gmp.h" -#include "gmp-impl.h" - -using namespace std; - - -// For g++ libstdc++ parsing see num_get<chartype,initer>::_M_extract_float -// in include/bits/locale_facets.tcc. -// -// There are no plans to accept hex or octal floats, not unless the standard -// C++ library does so. Although such formats might be of use, it's -// considered more important to be compatible with what the normal -// operator>> does on "double"s etc. - -istream & -operator>> (istream &i, mpf_ptr f) -{ - int base; - char c = 0; - string s; - bool ok = false; - - // C decimal point, as expected by mpf_set_str - const char *lconv_point = GMP_DECIMAL_POINT; - - // C++ decimal point -#if HAVE_STD__LOCALE - const locale& loc = i.getloc(); - char point_char = use_facet< numpunct<char> >(loc).decimal_point(); -#else - const char *point = lconv_point; - char point_char = *point; -#endif - - i.get(c); // start reading - - if (i.flags() & ios::skipws) // skip initial whitespace - { - // C++ isspace -#if HAVE_STD__LOCALE - const ctype<char>& ct = use_facet< ctype<char> >(loc); -#define cxx_isspace(c) (ct.is(ctype_base::space,(c))) -#else -#define cxx_isspace(c) isspace(c) -#endif - - while (cxx_isspace(c) && i.get(c)) - ; - } - - if (c == '-' || c == '+') // sign - { - if (c == '-') - s = "-"; - i.get(c); - } - - base = 10; - __gmp_istream_set_digits(s, i, c, ok, base); // read the number - - // look for the C++ radix point, but put the C one in for mpf_set_str - if (c == point_char) - { -#if HAVE_STD__LOCALE - i.get(c); -#else // lconv point can be multi-char - for (;;) - { - i.get(c); - point++; - if (*point == '\0') - break; - if (c != *point) - goto fail; - } -#endif - s += lconv_point; - __gmp_istream_set_digits(s, i, c, ok, base); // read the mantissa - } - - if (ok && (c == 'e' || c == 'E')) // exponent - { - s += c; - i.get(c); - ok = false; // exponent is mandatory - - if (c == '-' || c == '+') // sign - { - s += c; - i.get(c); - } - - __gmp_istream_set_digits(s, i, c, ok, base); // read the exponent - } - - if (i.good()) // last character read was non-numeric - i.putback(c); - else if (i.eof() && ok) // stopped just before eof - i.clear(ios::eofbit); - - if (ok) - ASSERT_NOCARRY (mpf_set_str(f, s.c_str(), base)); // extract the number - else - { - fail: - i.setstate(ios::failbit); // read failed - } - - return i; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/cxx/ismpq.cc b/src/plugins/e-acsl/contrib/libgmp/cxx/ismpq.cc deleted file mode 100644 index bc12e4a228d3b503ce8cba414006df66484a631c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/cxx/ismpq.cc +++ /dev/null @@ -1,67 +0,0 @@ -/* operator>> -- C++-style input of mpq_t. - -Copyright 2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <cctype> -#include <iostream> -#include <string> -#include "gmp.h" -#include "gmp-impl.h" - -using namespace std; - - -istream & -operator>> (istream &i, mpq_ptr q) -{ - if (! (i >> mpq_numref(q))) - return i; - - char c = 0; - i.get(c); // start reading - - if (c == '/') - { - // skip slash, read denominator - i.get(c); - return __gmpz_operator_in_nowhite (i, mpq_denref(q), c); - } - else - { - // no denominator, set 1 - q->_mp_den._mp_size = 1; - q->_mp_den._mp_d[0] = 1; - if (i.good()) - i.putback(c); - else if (i.eof()) - i.clear(ios::eofbit); - } - - return i; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/cxx/ismpz.cc b/src/plugins/e-acsl/contrib/libgmp/cxx/ismpz.cc deleted file mode 100644 index e4775bc300ee0f1c3db0090c1a555f4ff5386568..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/cxx/ismpz.cc +++ /dev/null @@ -1,63 +0,0 @@ -/* operator>> -- C++-style input of mpz_t. - -Copyright 2001, 2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <cctype> -#include <iostream> -#include <string> -#include "gmp.h" -#include "gmp-impl.h" - -using namespace std; - - -// For g++ libstdc++ parsing see num_get<chartype,initer>::_M_extract_int in -// include/bits/locale_facets.tcc. - -istream & -operator>> (istream &i, mpz_ptr z) -{ - char c = 0; - i.get(c); // start reading - - if (i.flags() & ios::skipws) // skip initial whitespace - { -#if HAVE_STD__LOCALE - const ctype<char>& ct = use_facet< ctype<char> >(i.getloc()); -#define cxx_isspace(c) (ct.is(ctype_base::space,(c))) -#else -#define cxx_isspace(c) isspace(c) -#endif - - while (cxx_isspace(c) && i.get(c)) - ; - } - - return __gmpz_operator_in_nowhite (i, z, c); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/cxx/ismpznw.cc b/src/plugins/e-acsl/contrib/libgmp/cxx/ismpznw.cc deleted file mode 100644 index 549742c2ad4b20d420d1ab09a3562e424be45416..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/cxx/ismpznw.cc +++ /dev/null @@ -1,73 +0,0 @@ -/* __gmpz_operator_in_nowhite -- C++-style input of mpz_t, no whitespace skip. - -Copyright 2001, 2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <cctype> -#include <iostream> -#include <string> -#include "gmp.h" -#include "gmp-impl.h" - -using namespace std; - - -// For g++ libstdc++ parsing see num_get<chartype,initer>::_M_extract_int in -// include/bits/locale_facets.tcc. - -istream & -__gmpz_operator_in_nowhite (istream &i, mpz_ptr z, char c) -{ - int base; - string s; - bool ok = false, zero, showbase; - - if (c == '-' || c == '+') // sign - { - if (c == '-') // mpz_set_str doesn't accept '+' - s = "-"; - i.get(c); - } - - base = __gmp_istream_set_base(i, c, zero, showbase); // select the base - __gmp_istream_set_digits(s, i, c, ok, base); // read the number - - if (i.good()) // last character read was non-numeric - i.putback(c); - else if (i.eof() && (ok || zero)) // stopped just before eof - i.clear(ios::eofbit); - - if (ok) - ASSERT_NOCARRY (mpz_set_str (z, s.c_str(), base)); // extract the number - else if (zero) - mpz_set_ui(z, 0); - else - i.setstate(ios::failbit); // read failed - - return i; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/cxx/limits.cc b/src/plugins/e-acsl/contrib/libgmp/cxx/limits.cc deleted file mode 100644 index 3004e16cce3adb6de63b2a32eace2eac2796fdce..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/cxx/limits.cc +++ /dev/null @@ -1,62 +0,0 @@ -/* instantiation of numeric_limits specializations. - -Copyright 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmpxx.h" - -namespace std { -#define GMPXX_INSTANTIATE_LIMITS(T) \ - const bool numeric_limits<T>::is_specialized; \ - const int numeric_limits<T>::digits; \ - const int numeric_limits<T>::digits10; \ - const int numeric_limits<T>::max_digits10; \ - const bool numeric_limits<T>::is_signed; \ - const bool numeric_limits<T>::is_integer; \ - const bool numeric_limits<T>::is_exact; \ - const int numeric_limits<T>::radix; \ - const int numeric_limits<T>::min_exponent; \ - const int numeric_limits<T>::min_exponent10; \ - const int numeric_limits<T>::max_exponent; \ - const int numeric_limits<T>::max_exponent10; \ - const bool numeric_limits<T>::has_infinity; \ - const bool numeric_limits<T>::has_quiet_NaN; \ - const bool numeric_limits<T>::has_signaling_NaN; \ - const float_denorm_style numeric_limits<T>::has_denorm; \ - const bool numeric_limits<T>::has_denorm_loss; \ - const bool numeric_limits<T>::is_iec559; \ - const bool numeric_limits<T>::is_bounded; \ - const bool numeric_limits<T>::is_modulo; \ - const bool numeric_limits<T>::traps; \ - const bool numeric_limits<T>::tinyness_before; \ - const float_round_style numeric_limits<T>::round_style - - GMPXX_INSTANTIATE_LIMITS(mpz_class); - GMPXX_INSTANTIATE_LIMITS(mpq_class); - GMPXX_INSTANTIATE_LIMITS(mpf_class); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/cxx/osdoprnti.cc b/src/plugins/e-acsl/contrib/libgmp/cxx/osdoprnti.cc deleted file mode 100644 index 4903c87d7f25d86a2ade464d8eee62c3e1db7fd1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/cxx/osdoprnti.cc +++ /dev/null @@ -1,68 +0,0 @@ -/* __gmp_doprnt_integer_ios -- integer formatted output to an ostream. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <iostream> -#include <stdarg.h> /* for va_list and hence doprnt_funs_t */ -#include <string.h> /* for strlen */ - -#include "gmp.h" -#include "gmp-impl.h" - -using namespace std; - - -/* The gmp_asprintf support routines never give an error, so - __gmp_doprnt_integer shouldn't fail and it's return can just be checked - with an ASSERT. */ - -ostream& -__gmp_doprnt_integer_ostream (ostream &o, struct doprnt_params_t *p, - char *s) -{ - struct gmp_asprintf_t d; - char *result; - int ret; - - /* don't show leading zeros the way printf does */ - p->prec = -1; - - GMP_ASPRINTF_T_INIT (d, &result); - ret = __gmp_doprnt_integer (&__gmp_asprintf_funs_noformat, &d, p, s); - ASSERT (ret != -1); - __gmp_asprintf_final (&d); - (*__gmp_free_func) (s, strlen(s)+1); - - gmp_allocated_string t (result); - return o.write (t.str, t.len); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/cxx/osfuns.cc b/src/plugins/e-acsl/contrib/libgmp/cxx/osfuns.cc deleted file mode 100644 index 8df833e15c1edd238972f61c8456fd73edc65d1a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/cxx/osfuns.cc +++ /dev/null @@ -1,124 +0,0 @@ -/* Support for operator<< routines. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <iostream> -#include <stdarg.h> /* for va_list and hence doprnt_funs_t */ -#include <string.h> - -#include "gmp.h" -#include "gmp-impl.h" - -using namespace std; - - -/* Don't need "format" for operator<< routines, just "memory" and "reps". - Omitting gmp_asprintf_format lets us avoid dragging vsnprintf into the - link. __gmp_asprintf_final will be called directly and doesn't need to - be in the struct. */ - -const struct doprnt_funs_t __gmp_asprintf_funs_noformat = { - NULL, - (doprnt_memory_t) __gmp_asprintf_memory, - (doprnt_reps_t) __gmp_asprintf_reps, - NULL -}; - - -void -__gmp_doprnt_params_from_ios (struct doprnt_params_t *p, ios &o) -{ - if ((o.flags() & ios::basefield) == ios::hex) - { - p->expfmt = "@%c%02d"; - p->base = (o.flags() & ios::uppercase ? -16 : 16); - } - else - { - p->expfmt = (o.flags() & ios::uppercase ? "E%c%02d" : "e%c%02d"); - if ((o.flags() & ios::basefield) == ios::oct) - p->base = 8; - else - p->base = 10; - } - - /* "general" if none or more than one bit set */ - if ((o.flags() & ios::floatfield) == ios::fixed) - p->conv = DOPRNT_CONV_FIXED; - else if ((o.flags() & ios::floatfield) == ios::scientific) - p->conv = DOPRNT_CONV_SCIENTIFIC; - else - p->conv = DOPRNT_CONV_GENERAL; - - p->exptimes4 = 0; - - p->fill = o.fill(); - - /* "right" if more than one bit set */ - if ((o.flags() & ios::adjustfield) == ios::left) - p->justify = DOPRNT_JUSTIFY_LEFT; - else if ((o.flags() & ios::adjustfield) == ios::internal) - p->justify = DOPRNT_JUSTIFY_INTERNAL; - else - p->justify = DOPRNT_JUSTIFY_RIGHT; - - /* ios::fixed allows prec==0, others take 0 as the default 6. - Don't allow negatives (they do bad things to __gmp_doprnt_float_cxx). */ - p->prec = MAX (0, o.precision()); - if (p->prec == 0 && p->conv != DOPRNT_CONV_FIXED) - p->prec = 6; - - /* for hex showbase is always, for octal only non-zero */ - if (o.flags() & ios::showbase) - p->showbase = ((o.flags() & ios::basefield) == ios::hex - ? DOPRNT_SHOWBASE_YES : DOPRNT_SHOWBASE_NONZERO); - else - p->showbase = DOPRNT_SHOWBASE_NO; - - p->showpoint = ((o.flags() & ios::showpoint) != 0); - - /* in fixed and scientific always show trailing zeros, in general format - show them if showpoint is set (or so it seems) */ - if ((o.flags() & ios::floatfield) == ios::fixed - || (o.flags() & ios::floatfield) == ios::scientific) - p->showtrailing = 1; - else - p->showtrailing = p->showpoint; - - p->sign = (o.flags() & ios::showpos ? '+' : '\0'); - - p->width = o.width(); - - /* reset on each output */ - o.width (0); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/cxx/osmpf.cc b/src/plugins/e-acsl/contrib/libgmp/cxx/osmpf.cc deleted file mode 100644 index c6a71d2520e24e981109d753bc91c8915925b6cb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/cxx/osmpf.cc +++ /dev/null @@ -1,71 +0,0 @@ -/* operator<< -- mpf formatted output to an ostream. - -Copyright 2001, 2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <clocale> -#include <iostream> -#include <stdarg.h> /* for va_list and hence doprnt_funs_t */ -#include <string.h> - -#include "gmp.h" -#include "gmp-impl.h" - -using namespace std; - - -/* The gmp_asprintf support routines never give an error, so - __gmp_doprnt_mpf shouldn't fail and it's return can just be checked with - an ASSERT. */ - -ostream& -operator<< (ostream &o, mpf_srcptr f) -{ - struct doprnt_params_t param; - struct gmp_asprintf_t d; - char *result; - int ret; - - __gmp_doprnt_params_from_ios (¶m, o); - -#if HAVE_STD__LOCALE - char point[2]; - point[0] = use_facet< numpunct<char> >(o.getloc()).decimal_point(); - point[1] = '\0'; -#else - const char *point = GMP_DECIMAL_POINT; -#endif - - GMP_ASPRINTF_T_INIT (d, &result); - ret = __gmp_doprnt_mpf (&__gmp_asprintf_funs_noformat, &d, ¶m, point, f); - ASSERT (ret != -1); - __gmp_asprintf_final (&d); - - gmp_allocated_string t (result); - return o.write (t.str, t.len); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/cxx/osmpq.cc b/src/plugins/e-acsl/contrib/libgmp/cxx/osmpq.cc deleted file mode 100644 index f95f39a648b4d99c05542793d78a7647531c51b2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/cxx/osmpq.cc +++ /dev/null @@ -1,48 +0,0 @@ -/* operator<< -- mpq formatted output to an ostream. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <iostream> -#include <stdarg.h> /* for va_list and hence doprnt_funs_t */ -#include <string.h> - -#include "gmp.h" -#include "gmp-impl.h" - -using namespace std; - - -ostream& -operator<< (ostream &o, mpq_srcptr q) -{ - struct doprnt_params_t param; - __gmp_doprnt_params_from_ios (¶m, o); - return __gmp_doprnt_integer_ostream (o, ¶m, - mpq_get_str (NULL, param.base, q)); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/cxx/osmpz.cc b/src/plugins/e-acsl/contrib/libgmp/cxx/osmpz.cc deleted file mode 100644 index ac1aefff40a03c8dbc6f1fd9539ba5b6a2d2e854..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/cxx/osmpz.cc +++ /dev/null @@ -1,48 +0,0 @@ -/* operator<< -- mpz formatted output to an ostream. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <iostream> -#include <stdarg.h> /* for va_list and hence doprnt_funs_t */ -#include <string.h> - -#include "gmp.h" -#include "gmp-impl.h" - -using namespace std; - - -ostream& -operator<< (ostream &o, mpz_srcptr z) -{ - struct doprnt_params_t param; - __gmp_doprnt_params_from_ios (¶m, o); - return __gmp_doprnt_integer_ostream (o, ¶m, - mpz_get_str (NULL, param.base, z)); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/Makefile.am b/src/plugins/e-acsl/contrib/libgmp/doc/Makefile.am deleted file mode 100644 index 083f25a630c170954147a0a9b136b2439dda1472..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/Makefile.am +++ /dev/null @@ -1,36 +0,0 @@ -## Process this file with automake to generate Makefile.in - - -# Copyright 2003 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - - -EXTRA_DIST = configuration isa_abi_headache projects.html tasks.html - -info_TEXINFOS = gmp.texi -gmp_TEXINFOS = fdl-1.3.texi diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/Makefile.in b/src/plugins/e-acsl/contrib/libgmp/doc/Makefile.in deleted file mode 100644 index 2d342b8a1d6f227beed140df56519015933cd011..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/Makefile.in +++ /dev/null @@ -1,847 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# Copyright 2003 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = doc -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/version.texi \ - $(srcdir)/stamp-vti $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -depcomp = -am__depfiles_maybe = -SOURCES = -DIST_SOURCES = -AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) -am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) -am__v_DVIPS_0 = @echo " DVIPS " $@; -am__v_DVIPS_1 = -AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) -am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) -am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; -am__v_MAKEINFO_1 = -AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) -am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) -am__v_INFOHTML_0 = @echo " INFOHTML" $@; -am__v_INFOHTML_1 = -AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) -am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) -am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; -am__v_TEXI2DVI_1 = -AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) -am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) -am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; -am__v_TEXI2PDF_1 = -AM_V_texinfo = $(am__v_texinfo_@AM_V@) -am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) -am__v_texinfo_0 = -q -am__v_texinfo_1 = -AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) -am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) -am__v_texidevnull_0 = > /dev/null -am__v_texidevnull_1 = -INFO_DEPS = $(srcdir)/gmp.info -am__TEXINFO_TEX_DIR = $(srcdir) -DVIS = gmp.dvi -PDFS = gmp.pdf -PSS = gmp.ps -HTMLS = gmp.html -TEXINFOS = gmp.texi -TEXI2DVI = texi2dvi -TEXI2PDF = $(TEXI2DVI) --pdf --batch -MAKEINFOHTML = $(MAKEINFO) --html -AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) -DVIPS = dvips -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__installdirs = "$(DESTDIR)$(infodir)" -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(gmp_TEXINFOS) $(srcdir)/Makefile.in mdate-sh \ - texinfo.tex -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ABI = @ABI@ -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AS = @AS@ -ASMFLAGS = @ASMFLAGS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CALLING_CONVENTIONS_OBJS = @CALLING_CONVENTIONS_OBJS@ -CC = @CC@ -CCAS = @CCAS@ -CC_FOR_BUILD = @CC_FOR_BUILD@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPP_FOR_BUILD = @CPP_FOR_BUILD@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFN_LONG_LONG_LIMB = @DEFN_LONG_LONG_LIMB@ -DEFS = @DEFS@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ -FGREP = @FGREP@ -GMP_LDFLAGS = @GMP_LDFLAGS@ -GMP_LIMB_BITS = @GMP_LIMB_BITS@ -GMP_NAIL_BITS = @GMP_NAIL_BITS@ -GREP = @GREP@ -HAVE_CLOCK_01 = @HAVE_CLOCK_01@ -HAVE_CPUTIME_01 = @HAVE_CPUTIME_01@ -HAVE_GETRUSAGE_01 = @HAVE_GETRUSAGE_01@ -HAVE_GETTIMEOFDAY_01 = @HAVE_GETTIMEOFDAY_01@ -HAVE_HOST_CPU_FAMILY_power = @HAVE_HOST_CPU_FAMILY_power@ -HAVE_HOST_CPU_FAMILY_powerpc = @HAVE_HOST_CPU_FAMILY_powerpc@ -HAVE_SIGACTION_01 = @HAVE_SIGACTION_01@ -HAVE_SIGALTSTACK_01 = @HAVE_SIGALTSTACK_01@ -HAVE_SIGSTACK_01 = @HAVE_SIGSTACK_01@ -HAVE_STACK_T_01 = @HAVE_STACK_T_01@ -HAVE_SYS_RESOURCE_H_01 = @HAVE_SYS_RESOURCE_H_01@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBCURSES = @LIBCURSES@ -LIBGMPXX_LDFLAGS = @LIBGMPXX_LDFLAGS@ -LIBGMP_DLL = @LIBGMP_DLL@ -LIBGMP_LDFLAGS = @LIBGMP_LDFLAGS@ -LIBM = @LIBM@ -LIBM_FOR_BUILD = @LIBM_FOR_BUILD@ -LIBOBJS = @LIBOBJS@ -LIBREADLINE = @LIBREADLINE@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -M4 = @M4@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SPEED_CYCLECOUNTER_OBJ = @SPEED_CYCLECOUNTER_OBJ@ -STRIP = @STRIP@ -TAL_OBJECT = @TAL_OBJECT@ -TUNE_LIBS = @TUNE_LIBS@ -TUNE_SQR_OBJ = @TUNE_SQR_OBJ@ -U_FOR_BUILD = @U_FOR_BUILD@ -VERSION = @VERSION@ -WITH_READLINE_01 = @WITH_READLINE_01@ -YACC = @YACC@ -YFLAGS = @YFLAGS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__leading_dot = @am__leading_dot@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -gmp_srclinks = @gmp_srclinks@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -mpn_objects = @mpn_objects@ -mpn_objs_in_libgmp = @mpn_objs_in_libgmp@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -EXTRA_DIST = configuration isa_abi_headache projects.html tasks.html -info_TEXINFOS = gmp.texi -gmp_TEXINFOS = fdl-1.3.texi -all: all-am - -.SUFFIXES: -.SUFFIXES: .dvi .html .info .pdf .ps .texi -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --ignore-deps doc/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu --ignore-deps doc/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -.texi.info: - $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ - am__cwd=`pwd` && $(am__cd) $(srcdir) && \ - rm -rf $$backupdir && mkdir $$backupdir && \ - if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ - for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ - if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ - done; \ - else :; fi && \ - cd "$$am__cwd"; \ - if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ - -o $@ $<; \ - then \ - rc=0; \ - $(am__cd) $(srcdir); \ - else \ - rc=$$?; \ - $(am__cd) $(srcdir) && \ - $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ - fi; \ - rm -rf $$backupdir; exit $$rc - -.texi.dvi: - $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ - MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ - $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ - $< - -.texi.pdf: - $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ - MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ - $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ - $< - -.texi.html: - $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) - $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ - -o $(@:.html=.htp) $<; \ - then \ - rm -rf $@ && mv $(@:.html=.htp) $@; \ - else \ - rm -rf $(@:.html=.htp); exit 1; \ - fi -$(srcdir)/gmp.info: gmp.texi $(srcdir)/version.texi $(gmp_TEXINFOS) -gmp.dvi: gmp.texi $(srcdir)/version.texi $(gmp_TEXINFOS) -gmp.pdf: gmp.texi $(srcdir)/version.texi $(gmp_TEXINFOS) -gmp.html: gmp.texi $(srcdir)/version.texi $(gmp_TEXINFOS) -$(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti -$(srcdir)/stamp-vti: gmp.texi $(top_srcdir)/configure - @(dir=.; test -f ./gmp.texi || dir=$(srcdir); \ - set `$(SHELL) $(srcdir)/mdate-sh $$dir/gmp.texi`; \ - echo "@set UPDATED $$1 $$2 $$3"; \ - echo "@set UPDATED-MONTH $$2 $$3"; \ - echo "@set EDITION $(VERSION)"; \ - echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \ - (cmp -s vti.tmp$$$$ $(srcdir)/version.texi \ - || (echo "Updating $(srcdir)/version.texi" && \ - cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \ - mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \ - rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$ - @cp $(srcdir)/version.texi $@ - -mostlyclean-vti: - -rm -f vti.tmp* $(srcdir)/version.texi.tmp* - -maintainer-clean-vti: -@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi -.dvi.ps: - $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ - $(DVIPS) $(AM_V_texinfo) -o $@ $< - -uninstall-dvi-am: - @$(NORMAL_UNINSTALL) - @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ - rm -f "$(DESTDIR)$(dvidir)/$$f"; \ - done - -uninstall-html-am: - @$(NORMAL_UNINSTALL) - @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ - rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ - done - -uninstall-info-am: - @$(PRE_UNINSTALL) - @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ - if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ - then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ - done; \ - else :; fi - @$(NORMAL_UNINSTALL) - @list='$(INFO_DEPS)'; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ - (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ - echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ - rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ - else :; fi); \ - done - -uninstall-pdf-am: - @$(NORMAL_UNINSTALL) - @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ - rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ - done - -uninstall-ps-am: - @$(NORMAL_UNINSTALL) - @list='$(PSS)'; test -n "$(psdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ - rm -f "$(DESTDIR)$(psdir)/$$f"; \ - done - -dist-info: $(INFO_DEPS) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; \ - for base in $$list; do \ - case $$base in \ - $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ - if test -f $$base; then d=.; else d=$(srcdir); fi; \ - base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ - for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ - if test -f $$file; then \ - relfile=`expr "$$file" : "$$d/\(.*\)"`; \ - test -f "$(distdir)/$$relfile" || \ - cp -p $$file "$(distdir)/$$relfile"; \ - else :; fi; \ - done; \ - done - -mostlyclean-aminfo: - -rm -rf gmp.t2d gmp.t2p - -clean-aminfo: - -test -z "gmp.dvi gmp.pdf gmp.ps gmp.html" \ - || rm -rf gmp.dvi gmp.pdf gmp.ps gmp.html - -maintainer-clean-aminfo: - @list='$(INFO_DEPS)'; for i in $$list; do \ - i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ - echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ - rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ - done -tags TAGS: - -ctags CTAGS: - -cscope cscopelist: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-info -check-am: all-am -check: check-am -all-am: Makefile $(INFO_DEPS) -installdirs: - for dir in "$(DESTDIR)$(infodir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: $(DVIS) - -html: html-am - -html-am: $(HTMLS) - -info: info-am - -info-am: $(INFO_DEPS) - -install-data-am: install-info-am - -install-dvi: install-dvi-am - -install-dvi-am: $(DVIS) - @$(NORMAL_INSTALL) - @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ - done -install-exec-am: - -install-html: install-html-am - -install-html-am: $(HTMLS) - @$(NORMAL_INSTALL) - @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ - $(am__strip_dir) \ - d2=$$d$$p; \ - if test -d "$$d2"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ - $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ - echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ - else \ - list2="$$list2 $$d2"; \ - fi; \ - done; \ - test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ - done; } -install-info: install-info-am - -install-info-am: $(INFO_DEPS) - @$(NORMAL_INSTALL) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ - fi; \ - for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ - file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ - for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ - $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ - if test -f $$ifile; then \ - echo "$$ifile"; \ - else : ; fi; \ - done; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done - @$(POST_INSTALL) - @if $(am__can_run_installinfo); then \ - list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ - install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ - done; \ - else : ; fi -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: $(PDFS) - @$(NORMAL_INSTALL) - @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done -install-ps: install-ps-am - -install-ps-am: $(PSS) - @$(NORMAL_INSTALL) - @list='$(PSS)'; test -n "$(psdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-aminfo \ - maintainer-clean-generic maintainer-clean-vti - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ - mostlyclean-libtool mostlyclean-vti - -pdf: pdf-am - -pdf-am: $(PDFS) - -ps: ps-am - -ps-am: $(PSS) - -uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ - uninstall-pdf-am uninstall-ps-am - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-aminfo clean-generic \ - clean-libtool cscopelist-am ctags-am dist-info distclean \ - distclean-generic distclean-libtool distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-aminfo maintainer-clean-generic \ - maintainer-clean-vti mostlyclean mostlyclean-aminfo \ - mostlyclean-generic mostlyclean-libtool mostlyclean-vti pdf \ - pdf-am ps ps-am tags-am uninstall uninstall-am \ - uninstall-dvi-am uninstall-html-am uninstall-info-am \ - uninstall-pdf-am uninstall-ps-am - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/configuration b/src/plugins/e-acsl/contrib/libgmp/doc/configuration deleted file mode 100644 index b6903866b2df1025db1431681e9ee0febcb49a86..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/configuration +++ /dev/null @@ -1,390 +0,0 @@ -/* doc/configuration (in Emacs -*-outline-*- format). */ - -Copyright 2000-2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - -* Adding a new file - -** Adding a top-level file - - i) Add it to libgmp_la_SOURCES in Makefile.am. - - ii) If libmp.la needs it (usually doesn't), then add it to - libmp_la_SOURCES too. - -** Adding a subdirectory file - -For instance for mpz, - - i) Add file.c to libmpz_la_SOURCES in mpz/Makefile.am. - - ii) Add mpz/file$U.lo to MPZ_OBJECTS in the top-level Makefile.am - - iii) If for some reason libmp.la needs it (usually doesn't) then add - mpz/file$U.lo to libmp_la_DEPENDENCIES in the top-level - Makefile.am too. - -The same applies to mpf, mpq, scanf and printf. - -** Adding an mpn file - -The way we build libmpn (in the `mpn' subdirectory) is quite special. - -Currently only mpn/mp_bases.c is truly generic and included in every -configuration. All other files are linked at build time into the mpn -build directory from one of the CPU specific sub-directories, or from -the mpn/generic directory. - -There are four types of mpn source files. - - .asm Assembly code preprocessed with m4 - .S Assembly code preprocessed with cpp - .s Assembly code not preprocessed at all - .c C code - -There are two types of .asm files. - - i) ``Normal'' files containing one function, though possibly with - more than one entry point. - - ii) Multi-function files that generate one of a set of functions - according to build options. - -To add a new implementation of an existing function, - - i) Put it in the appropriate CPU-specific mpn subdirectory, it'll be - detected and used. - - ii) Any entrypoints tested by HAVE_NATIVE_func in other code must - have PROLOGUE(func) for configure to grep. This is normal for - .asm or .S files, but for .c files a dummy comment like the - following will be needed. - - /* - PROLOGUE(func) - */ - -To add a new implementation using a multi-function file, in addition -do the following, - - i) Use a MULFUNC_PROLOGUE(func1 func2 ...) in the .asm, declaring - all the functions implemented, including carry-in variants. - - If there's a separate PROLOGUE(func) for each possible function - (but this is usually not the case), then MULFUNC_PROLOGUE isn't - necessary. - -To add a new style of multi-function file, in addition do the -following, - - i) Add to the GMP_MULFUNC_CHOICES "case" statement in configure.in - which lists each multi-function filename and what function files - it can provide. - -To add a completely new mpn function file, do the following, - - i) Ensure the filename is a valid C identifier, due to the - -DOPERATION_$* used to support multi-function files. This means - "-" can't be used (but "_" can). - - ii) Add it to configure.in under one of the following - - a) `gmp_mpn_functions' if it exists for every target. This - means there must be a C version in mpn/generic. (Eg. mul_1) - - b) `gmp_mpn_functions_optional' if it's a standard function, but - doesn't need to exist for every target. Code wanting to use - this will test HAVE_NATIVE_func to see if it's available. - (Eg. copyi) - - c) `extra_functions' for some targets, if it's a special - function that only ever needs to exist for certain targets. - Code wanting to use it can test either HAVE_NATIVE_func or - HAVE_HOST_CPU_foo, as desired. - - iii) If HAVE_NATIVE_func is going to be used, then add a #undef to - the AH_VERBATIM([HAVE_NATIVE] block in configure.in. - - iv) If the function can be provided by a multi-function file, then - add to the "case" statement in configure.in which lists each - multi-function filename and what function files it can provide. - - -** Adding a test program - - i) Tests to be run early in the testing can be added to the main - "tests" sub-directory. - - ii) Tests for mpn, mpz, mpq and mpf can be added under the - corresponding tests subdirectory. - - iii) Generic tests for late in the testing can be added to - "tests/misc". printf and scanf tests currently live there too. - - iv) Random number function tests can be added to "tests/rand". That - directory has some development-time programs too. - - v) C++ test programs can be added to "tests/cxx". A line like the - following must be added for each, since by default automake looks - for a .c file. - - t_foo_SOURCES = t-foo.cc - -In all cases the name of the program should be added to check_PROGRAMS -in the Makefile.am. TESTS is equal to check_PROGRAMS, so all those -programs get run. - -"tests/devel" has a number of programs which are only for development -purposes and are not for use in "make check". These should be listed -in EXTRA_PROGRAMS to get Makefile rules created, but they're never -built or run unless an explicit "make someprog" is used. - - -* Adding a new CPU - -In general it's policy to use proper names for each CPU type -supported. If two CPUs are quite similar and perhaps don't have any -actual differences in GMP then they're still given separate names, for -example alphaev67 and alphaev68. - -Canonical names: - - i) Decide the canonical CPU names GMP will accept. - - ii) Add these to the config.sub wrapper if configfsf.sub doesn't - already accept them. - - iii) Document the names in gmp.texi. - -Aliases (optional): - - i) Any aliases can be added to the config.sub wrapper, unless - configfsf.sub already does the right thing with them. - - ii) Leave configure.in and everywhere else using only the canonical - names. Aliases shouldn't appear anywhere except config.sub. - - iii) Document in gmp.texi, if desired. Usually this isn't a good - idea, better encourage users to know just the canonical - names. - -Configure: - - i) Add patterns to configure.in for the new CPU names. Include the - following (see configure.in for the variables to set up), - - a) ABI choices (if any). - b) Compiler choices. - c) mpn path for CPU specific code. - d) Good default CFLAGS for each likely compiler. - d) Any special tests necessary on the compiler or assembler - capabilities. - - ii) M4 macros to be shared by asm files in a CPU family are by - convention in a foo-defs.m4 like mpn/x86/x86-defs.m4. They're - likely to use settings from config.m4 generated by configure. - -Fat binaries: - - i) In configure.in, add CPU specific directory(s) to fat_path. - - ii) In mpn/<cpu>/fat.c, identify the CPU at runtime and use suitable - CPUVEC_SETUP_subdir macros to select the function pointers for it. - - iii) For the x86s, add to the "$tmp_prefix" setups in configure.in - which abbreviates subdirectory names to fit an 8.3 filesystem. - (No need to restrict to 8.3, just ensure uniqueness when - truncated.) - - -* The configure system - -** Installing tools - -The current versions of automake, autoconf and libtool in use can be -checked in the ChangeLog. Look for "Update to ...". Patches may have -been applied, look for "Regenerate ...". - -The GMP build system is in places somewhat dependent on the internals -of the build tools. Obviously that's avoided as much as possible, but -where it can't it creates a problem when upgrading or attempting to -use different tools versions. - -** Updating gmp - -The following files need to be updated when going to a new version of -the build tools. Unfortunately the tools generally don't identify -when an out-of-date version is present. - -aclocal.m4 is updated by running "aclocal". (Only needed for a new -automake or libtool.) - -INSTALL.autoconf can be copied from INSTALL in autoconf. - -ltmain.sh comes from libtool. Remove it and run "libtoolize --copy", -or just copy the file by hand. - -texinfo.tex can be updated from ftp.gnu.org. Check it still works -with "make gmp.dvi", "make gmp.ps" and "make gmp.pdf". - -configfsf.guess and configfsf.sub can be updated from ftp.gnu.org (or -from the "config" cvs module at subversions.gnu.org). The gmp -config.guess and config.sub wrappers are supposed to make such an -update fairly painless. - -depcomp from automake is not needed because configure.in specifies -automake with "no-dependencies". - -** How it works - -During development: - - Input files Tool Output files - --------------------------------------------------------- - - aclocal - $prefix/share/aclocal*/*.m4 ----------------> aclocal.m4 - - - configure.in \ autoconf - aclocal.m4 / -----------------------------> configure - - - */Makefile.am \ automake - configure.in | ----------------------------> Makefile.in - aclocal.m4 / - - configure.in \ autoheader - aclocal.m4 / -----------------------------> config.in - -At build time: - - Input files Tool Output files - -------------------------------------------- - - */Makefile.in \ configure / */Makefile - config.in | -------------> | config.h - gmp-h.in | | config.m4 - mp-h.in / | gmp.h - | mp.h - \ fat.h (fat binary build only) - -When configured with --enable-maintainer-mode the Makefiles include -rules to re-run the necessary tools if the input files are changed. -This can end up running a lot more things than are really necessary. - -If a build tree is in too much of a mess for those rules to work -properly then a bootstrap can be done from the source directory with - - aclocal - autoconf - automake - autoheader - -The autom4te.cache directory is created by autoconf to save some work -in subsequent automake or autoheader runs. It's recreated -automatically if removed, it doesn't get distributed. - -** C++ configuration - -It's intended that the contents of libgmp.la won't vary according to -whether --enable-cxx is selected. This means that if C++ shared -libraries don't work properly then a shared+static with --disable-cxx -can be done for the C parts, then a static-only with --enable-cxx to -get libgmpxx. - -libgmpxx.la uses some internals from libgmp.la, in order to share code -between C and C++. It's intended that libgmpxx can only be expected -to work with libgmp from the same version of GMP. If some of the -shared internals change their interface, then it's proposed to rename -them, for instance __gmp_doprint2 or the like, so as to provoke link -errors rather than mysterious failures from a mismatch. - -* Development setups - -** General - ---disable-shared will make builds go much faster, though of course -shared or shared+static should be tested too. - ---prefix to a dummy directory followed by "make install" will show -what's installed. - -"make check" acts on the libgmp just built, and will ignore any other -/usr/lib/libgmp, or at least it should do. Libtool does various hairy -things to ensure it hits the just-built library. - -** Long long limb testing - -On systems where gcc supports long long, but a limb is normally just a -long, the following can be used to force long long for testing -purposes. It will probably run quite slowly. - - ./configure --host=none ABI=longlong - -** Function argument conversions - -When using gcc, configuring with something like - - ./configure CFLAGS="-g -Wall -Wconversion -Wno-sign-compare" - -can show where function parameters are being converted due to having -function prototypes available, which won't happen in a K&R compiler. -Doing this in combination with the long long limb setups above is -good. - -Conversions between int and long aren't warned about by gcc when -they're the same size, which is unfortunate because casts should be -used in such cases, for the benefit of K&R compilers with int!=long -and where the difference matters in function calls. - -* Other Notes - -** Compatibility - -compat.c is the home of functions retained for binary compatibility, - but now done by other means (like a macro). - -struct __mpz_struct etc - this must be retained for C++ compatibility. - C++ applications defining functions taking mpz_t etc parameters - will get this in the mangled name because C++ "sees though" the - typedef mpz_t to the underlying struct. - -__gmpn - note that glibc defines some __mpn symbols, old versions of - some mpn routines, which it uses for floating point printfs. - - - - -Local variables: -mode: outline -fill-column: 70 -End: -/* eof doc/configuration */ diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/fdl-1.3.texi b/src/plugins/e-acsl/contrib/libgmp/doc/fdl-1.3.texi deleted file mode 100644 index 05804eecbbd2faafcaf93b1840256792e62bc165..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/fdl-1.3.texi +++ /dev/null @@ -1,506 +0,0 @@ -@c The GNU Free Documentation License. -@center Version 1.3, 3 November 2008 - -@c This file is intended to be included within another document, -@c hence no sectioning command or @node. - -@display -Copyright @copyright{} 2000-2002, 2007, 2008 Free Software Foundation, Inc. -@uref{http://fsf.org/} - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. -@end display - -@enumerate 0 -@item -PREAMBLE - -The purpose of this License is to make a manual, textbook, or other -functional and useful document @dfn{free} in the sense of freedom: to -assure everyone the effective freedom to copy and redistribute it, -with or without modifying it, either commercially or noncommercially. -Secondarily, this License preserves for the author and publisher a way -to get credit for their work, while not being considered responsible -for modifications made by others. - -This License is a kind of ``copyleft'', which means that derivative -works of the document must themselves be free in the same sense. It -complements the GNU General Public License, which is a copyleft -license designed for free software. - -We have designed this License in order to use it for manuals for free -software, because free software needs free documentation: a free -program should come with manuals providing the same freedoms that the -software does. But this License is not limited to software manuals; -it can be used for any textual work, regardless of subject matter or -whether it is published as a printed book. We recommend this License -principally for works whose purpose is instruction or reference. - -@item -APPLICABILITY AND DEFINITIONS - -This License applies to any manual or other work, in any medium, that -contains a notice placed by the copyright holder saying it can be -distributed under the terms of this License. Such a notice grants a -world-wide, royalty-free license, unlimited in duration, to use that -work under the conditions stated herein. The ``Document'', below, -refers to any such manual or work. Any member of the public is a -licensee, and is addressed as ``you''. You accept the license if you -copy, modify or distribute the work in a way requiring permission -under copyright law. - -A ``Modified Version'' of the Document means any work containing the -Document or a portion of it, either copied verbatim, or with -modifications and/or translated into another language. - -A ``Secondary Section'' is a named appendix or a front-matter section -of the Document that deals exclusively with the relationship of the -publishers or authors of the Document to the Document's overall -subject (or to related matters) and contains nothing that could fall -directly within that overall subject. (Thus, if the Document is in -part a textbook of mathematics, a Secondary Section may not explain -any mathematics.) The relationship could be a matter of historical -connection with the subject or with related matters, or of legal, -commercial, philosophical, ethical or political position regarding -them. - -The ``Invariant Sections'' are certain Secondary Sections whose titles -are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. If a -section does not fit the above definition of Secondary then it is not -allowed to be designated as Invariant. The Document may contain zero -Invariant Sections. If the Document does not identify any Invariant -Sections then there are none. - -The ``Cover Texts'' are certain short passages of text that are listed, -as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. A Front-Cover Text may -be at most 5 words, and a Back-Cover Text may be at most 25 words. - -A ``Transparent'' copy of the Document means a machine-readable copy, -represented in a format whose specification is available to the -general public, that is suitable for revising the document -straightforwardly with generic text editors or (for images composed of -pixels) generic paint programs or (for drawings) some widely available -drawing editor, and that is suitable for input to text formatters or -for automatic translation to a variety of formats suitable for input -to text formatters. A copy made in an otherwise Transparent file -format whose markup, or absence of markup, has been arranged to thwart -or discourage subsequent modification by readers is not Transparent. -An image format is not Transparent if used for any substantial amount -of text. A copy that is not ``Transparent'' is called ``Opaque''. - -Examples of suitable formats for Transparent copies include plain -@sc{ascii} without markup, Texinfo input format, La@TeX{} input -format, @acronym{SGML} or @acronym{XML} using a publicly available -@acronym{DTD}, and standard-conforming simple @acronym{HTML}, -PostScript or @acronym{PDF} designed for human modification. Examples -of transparent image formats include @acronym{PNG}, @acronym{XCF} and -@acronym{JPG}. Opaque formats include proprietary formats that can be -read and edited only by proprietary word processors, @acronym{SGML} or -@acronym{XML} for which the @acronym{DTD} and/or processing tools are -not generally available, and the machine-generated @acronym{HTML}, -PostScript or @acronym{PDF} produced by some word processors for -output purposes only. - -The ``Title Page'' means, for a printed book, the title page itself, -plus such following pages as are needed to hold, legibly, the material -this License requires to appear in the title page. For works in -formats which do not have any title page as such, ``Title Page'' means -the text near the most prominent appearance of the work's title, -preceding the beginning of the body of the text. - -The ``publisher'' means any person or entity that distributes copies -of the Document to the public. - -A section ``Entitled XYZ'' means a named subunit of the Document whose -title either is precisely XYZ or contains XYZ in parentheses following -text that translates XYZ in another language. (Here XYZ stands for a -specific section name mentioned below, such as ``Acknowledgements'', -``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' -of such a section when you modify the Document means that it remains a -section ``Entitled XYZ'' according to this definition. - -The Document may include Warranty Disclaimers next to the notice which -states that this License applies to the Document. These Warranty -Disclaimers are considered to be included by reference in this -License, but only as regards disclaiming warranties: any other -implication that these Warranty Disclaimers may have is void and has -no effect on the meaning of this License. - -@item -VERBATIM COPYING - -You may copy and distribute the Document in any medium, either -commercially or noncommercially, provided that this License, the -copyright notices, and the license notice saying this License applies -to the Document are reproduced in all copies, and that you add no other -conditions whatsoever to those of this License. You may not use -technical measures to obstruct or control the reading or further -copying of the copies you make or distribute. However, you may accept -compensation in exchange for copies. If you distribute a large enough -number of copies you must also follow the conditions in section 3. - -You may also lend copies, under the same conditions stated above, and -you may publicly display copies. - -@item -COPYING IN QUANTITY - -If you publish printed copies (or copies in media that commonly have -printed covers) of the Document, numbering more than 100, and the -Document's license notice requires Cover Texts, you must enclose the -copies in covers that carry, clearly and legibly, all these Cover -Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on -the back cover. Both covers must also clearly and legibly identify -you as the publisher of these copies. The front cover must present -the full title with all words of the title equally prominent and -visible. You may add other material on the covers in addition. -Copying with changes limited to the covers, as long as they preserve -the title of the Document and satisfy these conditions, can be treated -as verbatim copying in other respects. - -If the required texts for either cover are too voluminous to fit -legibly, you should put the first ones listed (as many as fit -reasonably) on the actual cover, and continue the rest onto adjacent -pages. - -If you publish or distribute Opaque copies of the Document numbering -more than 100, you must either include a machine-readable Transparent -copy along with each Opaque copy, or state in or with each Opaque copy -a computer-network location from which the general network-using -public has access to download using public-standard network protocols -a complete Transparent copy of the Document, free of added material. -If you use the latter option, you must take reasonably prudent steps, -when you begin distribution of Opaque copies in quantity, to ensure -that this Transparent copy will remain thus accessible at the stated -location until at least one year after the last time you distribute an -Opaque copy (directly or through your agents or retailers) of that -edition to the public. - -It is requested, but not required, that you contact the authors of the -Document well before redistributing any large number of copies, to give -them a chance to provide you with an updated version of the Document. - -@item -MODIFICATIONS - -You may copy and distribute a Modified Version of the Document under -the conditions of sections 2 and 3 above, provided that you release -the Modified Version under precisely this License, with the Modified -Version filling the role of the Document, thus licensing distribution -and modification of the Modified Version to whoever possesses a copy -of it. In addition, you must do these things in the Modified Version: - -@enumerate A -@item -Use in the Title Page (and on the covers, if any) a title distinct -from that of the Document, and from those of previous versions -(which should, if there were any, be listed in the History section -of the Document). You may use the same title as a previous version -if the original publisher of that version gives permission. - -@item -List on the Title Page, as authors, one or more persons or entities -responsible for authorship of the modifications in the Modified -Version, together with at least five of the principal authors of the -Document (all of its principal authors, if it has fewer than five), -unless they release you from this requirement. - -@item -State on the Title page the name of the publisher of the -Modified Version, as the publisher. - -@item -Preserve all the copyright notices of the Document. - -@item -Add an appropriate copyright notice for your modifications -adjacent to the other copyright notices. - -@item -Include, immediately after the copyright notices, a license notice -giving the public permission to use the Modified Version under the -terms of this License, in the form shown in the Addendum below. - -@item -Preserve in that license notice the full lists of Invariant Sections -and required Cover Texts given in the Document's license notice. - -@item -Include an unaltered copy of this License. - -@item -Preserve the section Entitled ``History'', Preserve its Title, and add -to it an item stating at least the title, year, new authors, and -publisher of the Modified Version as given on the Title Page. If -there is no section Entitled ``History'' in the Document, create one -stating the title, year, authors, and publisher of the Document as -given on its Title Page, then add an item describing the Modified -Version as stated in the previous sentence. - -@item -Preserve the network location, if any, given in the Document for -public access to a Transparent copy of the Document, and likewise -the network locations given in the Document for previous versions -it was based on. These may be placed in the ``History'' section. -You may omit a network location for a work that was published at -least four years before the Document itself, or if the original -publisher of the version it refers to gives permission. - -@item -For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve -the Title of the section, and preserve in the section all the -substance and tone of each of the contributor acknowledgements and/or -dedications given therein. - -@item -Preserve all the Invariant Sections of the Document, -unaltered in their text and in their titles. Section numbers -or the equivalent are not considered part of the section titles. - -@item -Delete any section Entitled ``Endorsements''. Such a section -may not be included in the Modified Version. - -@item -Do not retitle any existing section to be Entitled ``Endorsements'' or -to conflict in title with any Invariant Section. - -@item -Preserve any Warranty Disclaimers. -@end enumerate - -If the Modified Version includes new front-matter sections or -appendices that qualify as Secondary Sections and contain no material -copied from the Document, you may at your option designate some or all -of these sections as invariant. To do this, add their titles to the -list of Invariant Sections in the Modified Version's license notice. -These titles must be distinct from any other section titles. - -You may add a section Entitled ``Endorsements'', provided it contains -nothing but endorsements of your Modified Version by various -parties---for example, statements of peer review or that the text has -been approved by an organization as the authoritative definition of a -standard. - -You may add a passage of up to five words as a Front-Cover Text, and a -passage of up to 25 words as a Back-Cover Text, to the end of the list -of Cover Texts in the Modified Version. Only one passage of -Front-Cover Text and one of Back-Cover Text may be added by (or -through arrangements made by) any one entity. If the Document already -includes a cover text for the same cover, previously added by you or -by arrangement made by the same entity you are acting on behalf of, -you may not add another; but you may replace the old one, on explicit -permission from the previous publisher that added the old one. - -The author(s) and publisher(s) of the Document do not by this License -give permission to use their names for publicity for or to assert or -imply endorsement of any Modified Version. - -@item -COMBINING DOCUMENTS - -You may combine the Document with other documents released under this -License, under the terms defined in section 4 above for modified -versions, provided that you include in the combination all of the -Invariant Sections of all of the original documents, unmodified, and -list them all as Invariant Sections of your combined work in its -license notice, and that you preserve all their Warranty Disclaimers. - -The combined work need only contain one copy of this License, and -multiple identical Invariant Sections may be replaced with a single -copy. If there are multiple Invariant Sections with the same name but -different contents, make the title of each such section unique by -adding at the end of it, in parentheses, the name of the original -author or publisher of that section if known, or else a unique number. -Make the same adjustment to the section titles in the list of -Invariant Sections in the license notice of the combined work. - -In the combination, you must combine any sections Entitled ``History'' -in the various original documents, forming one section Entitled -``History''; likewise combine any sections Entitled ``Acknowledgements'', -and any sections Entitled ``Dedications''. You must delete all -sections Entitled ``Endorsements.'' - -@item -COLLECTIONS OF DOCUMENTS - -You may make a collection consisting of the Document and other documents -released under this License, and replace the individual copies of this -License in the various documents with a single copy that is included in -the collection, provided that you follow the rules of this License for -verbatim copying of each of the documents in all other respects. - -You may extract a single document from such a collection, and distribute -it individually under this License, provided you insert a copy of this -License into the extracted document, and follow this License in all -other respects regarding verbatim copying of that document. - -@item -AGGREGATION WITH INDEPENDENT WORKS - -A compilation of the Document or its derivatives with other separate -and independent documents or works, in or on a volume of a storage or -distribution medium, is called an ``aggregate'' if the copyright -resulting from the compilation is not used to limit the legal rights -of the compilation's users beyond what the individual works permit. -When the Document is included in an aggregate, this License does not -apply to the other works in the aggregate which are not themselves -derivative works of the Document. - -If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one half of -the entire aggregate, the Document's Cover Texts may be placed on -covers that bracket the Document within the aggregate, or the -electronic equivalent of covers if the Document is in electronic form. -Otherwise they must appear on printed covers that bracket the whole -aggregate. - -@item -TRANSLATION - -Translation is considered a kind of modification, so you may -distribute translations of the Document under the terms of section 4. -Replacing Invariant Sections with translations requires special -permission from their copyright holders, but you may include -translations of some or all Invariant Sections in addition to the -original versions of these Invariant Sections. You may include a -translation of this License, and all the license notices in the -Document, and any Warranty Disclaimers, provided that you also include -the original English version of this License and the original versions -of those notices and disclaimers. In case of a disagreement between -the translation and the original version of this License or a notice -or disclaimer, the original version will prevail. - -If a section in the Document is Entitled ``Acknowledgements'', -``Dedications'', or ``History'', the requirement (section 4) to Preserve -its Title (section 1) will typically require changing the actual -title. - -@item -TERMINATION - -You may not copy, modify, sublicense, or distribute the Document -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense, or distribute it is void, and -will automatically terminate your rights under this License. - -However, if you cease all violation of this License, then your license -from a particular copyright holder is reinstated (a) provisionally, -unless and until the copyright holder explicitly and finally -terminates your license, and (b) permanently, if the copyright holder -fails to notify you of the violation by some reasonable means prior to -60 days after the cessation. - -Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - -Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, receipt of a copy of some or all of the same material does -not give you any rights to use it. - -@item -FUTURE REVISIONS OF THIS LICENSE - -The Free Software Foundation may publish new, revised versions -of the GNU Free Documentation License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. See -@uref{https://www.gnu.org/copyleft/}. - -Each version of the License is given a distinguishing version number. -If the Document specifies that a particular numbered version of this -License ``or any later version'' applies to it, you have the option of -following the terms and conditions either of that specified version or -of any later version that has been published (not as a draft) by the -Free Software Foundation. If the Document does not specify a version -number of this License, you may choose any version ever published (not -as a draft) by the Free Software Foundation. If the Document -specifies that a proxy can decide which future versions of this -License can be used, that proxy's public statement of acceptance of a -version permanently authorizes you to choose that version for the -Document. - -@item -RELICENSING - -``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any -World Wide Web server that publishes copyrightable works and also -provides prominent facilities for anybody to edit those works. A -public wiki that anybody can edit is an example of such a server. A -``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the -site means any set of copyrightable works thus published on the MMC -site. - -``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 -license published by Creative Commons Corporation, a not-for-profit -corporation with a principal place of business in San Francisco, -California, as well as future copyleft versions of that license -published by that same organization. - -``Incorporate'' means to publish or republish a Document, in whole or -in part, as part of another Document. - -An MMC is ``eligible for relicensing'' if it is licensed under this -License, and if all works that were first published under this License -somewhere other than this MMC, and subsequently incorporated in whole -or in part into the MMC, (1) had no cover texts or invariant sections, -and (2) were thus incorporated prior to November 1, 2008. - -The operator of an MMC Site may republish an MMC contained in the site -under CC-BY-SA on the same site at any time before August 1, 2009, -provided the MMC is eligible for relicensing. - -@end enumerate - -@page -@heading ADDENDUM: How to use this License for your documents - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and -license notices just after the title page: - -@smallexample -@group - Copyright (C) @var{year} @var{your name}. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.3 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover - Texts. A copy of the license is included in the section entitled ``GNU - Free Documentation License''. -@end group -@end smallexample - -If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, -replace the ``with@dots{}Texts.'' line with this: - -@smallexample -@group - with the Invariant Sections being @var{list their titles}, with - the Front-Cover Texts being @var{list}, and with the Back-Cover Texts - being @var{list}. -@end group -@end smallexample - -If you have Invariant Sections without Cover Texts, or some other -combination of the three, merge those two alternatives to suit the -situation. - -If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of -free software license, such as the GNU General Public License, -to permit their use in free software. - -@c Local Variables: -@c ispell-local-pdict: "ispell-dict" -@c End: - diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/gmp.info b/src/plugins/e-acsl/contrib/libgmp/doc/gmp.info deleted file mode 100644 index fcb7a4e47608a918f8e5ddecb5a50a06468ec805..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/gmp.info +++ /dev/null @@ -1,176 +0,0 @@ -This is ../../gmp/doc/gmp.info, produced by makeinfo version 4.8 from -../../gmp/doc/gmp.texi. - - This manual describes how to install and use the GNU multiple -precision arithmetic library, version 6.1.0. - - Copyright 1991, 1993-2015 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this -document under the terms of the GNU Free Documentation License, Version -1.3 or any later version published by the Free Software Foundation; -with no Invariant Sections, with the Front-Cover Texts being "A GNU -Manual", and with the Back-Cover Texts being "You have freedom to copy -and modify this GNU Manual, like GNU software". A copy of the license -is included in *Note GNU Free Documentation License::. - -INFO-DIR-SECTION GNU libraries -START-INFO-DIR-ENTRY -* gmp: (gmp). GNU Multiple Precision Arithmetic Library. -END-INFO-DIR-ENTRY - - -Indirect: -gmp.info-1: 884 -gmp.info-2: 298669 - -Tag Table: -(Indirect) -Node: Top884 -Node: Copying2955 -Node: Introduction to GMP5301 -Node: Installing GMP8016 -Node: Build Options8748 -Node: ABI and ISA24481 -Node: Notes for Package Builds34318 -Node: Notes for Particular Systems37405 -Node: Known Build Problems45155 -Node: Performance optimization48690 -Node: GMP Basics49819 -Node: Headers and Libraries50467 -Node: Nomenclature and Types51872 -Node: Function Classes53868 -Node: Variable Conventions55402 -Node: Parameter Conventions57011 -Node: Memory Management59067 -Node: Reentrancy60195 -Node: Useful Macros and Constants62063 -Node: Compatibility with older versions63054 -Node: Demonstration Programs63965 -Node: Efficiency65830 -Node: Debugging73454 -Node: Profiling80480 -Node: Autoconf84471 -Node: Emacs86252 -Node: Reporting Bugs86858 -Node: Integer Functions89485 -Node: Initializing Integers90261 -Node: Assigning Integers92637 -Node: Simultaneous Integer Init & Assign94248 -Node: Converting Integers95895 -Node: Integer Arithmetic98859 -Node: Integer Division100595 -Node: Integer Exponentiation107347 -Node: Integer Roots108841 -Node: Number Theoretic Functions110561 -Node: Integer Comparisons117818 -Node: Integer Logic and Bit Fiddling119256 -Node: I/O of Integers121901 -Node: Integer Random Numbers124892 -Node: Integer Import and Export127509 -Node: Miscellaneous Integer Functions131525 -Node: Integer Special Functions133439 -Node: Rational Number Functions137600 -Node: Initializing Rationals138793 -Node: Rational Conversions141272 -Node: Rational Arithmetic143022 -Node: Comparing Rationals144434 -Node: Applying Integer Functions145905 -Node: I/O of Rationals147424 -Node: Floating-point Functions149482 -Node: Initializing Floats152526 -Node: Assigning Floats156619 -Node: Simultaneous Float Init & Assign159210 -Node: Converting Floats160760 -Node: Float Arithmetic164050 -Node: Float Comparison166203 -Node: I/O of Floats167774 -Node: Miscellaneous Float Functions170463 -Node: Low-level Functions172465 -Node: Random Number Functions206639 -Node: Random State Initialization207707 -Node: Random State Seeding210572 -Node: Random State Miscellaneous211977 -Node: Formatted Output212619 -Node: Formatted Output Strings212864 -Node: Formatted Output Functions218243 -Node: C++ Formatted Output222318 -Node: Formatted Input225018 -Node: Formatted Input Strings225254 -Node: Formatted Input Functions229906 -Node: C++ Formatted Input232875 -Node: C++ Class Interface234778 -Node: C++ Interface General235729 -Node: C++ Interface Integers238799 -Node: C++ Interface Rationals242638 -Node: C++ Interface Floats246661 -Node: C++ Interface Random Numbers252677 -Node: C++ Interface Limitations255079 -Node: Custom Allocation258657 -Node: Language Bindings262876 -Node: Algorithms266470 -Node: Multiplication Algorithms267170 -Node: Basecase Multiplication268259 -Node: Karatsuba Multiplication270167 -Node: Toom 3-Way Multiplication273793 -Node: Toom 4-Way Multiplication280212 -Node: Higher degree Toom'n'half281591 -Node: FFT Multiplication282877 -Node: Other Multiplication288213 -Node: Unbalanced Multiplication290687 -Node: Division Algorithms291475 -Node: Single Limb Division291854 -Node: Basecase Division294745 -Node: Divide and Conquer Division295948 -Node: Block-Wise Barrett Division298017 -Node: Exact Division298669 -Node: Exact Remainder301834 -Node: Small Quotient Division304084 -Node: Greatest Common Divisor Algorithms305682 -Node: Binary GCD305979 -Node: Lehmer's Algorithm308828 -Node: Subquadratic GCD311047 -Node: Extended GCD313507 -Node: Jacobi Symbol314819 -Node: Powering Algorithms315834 -Node: Normal Powering Algorithm316097 -Node: Modular Powering Algorithm316625 -Node: Root Extraction Algorithms317407 -Node: Square Root Algorithm317722 -Node: Nth Root Algorithm319863 -Node: Perfect Square Algorithm320648 -Node: Perfect Power Algorithm322735 -Node: Radix Conversion Algorithms323356 -Node: Binary to Radix323732 -Node: Radix to Binary327353 -Node: Other Algorithms329441 -Node: Prime Testing Algorithm329793 -Node: Factorial Algorithm330977 -Node: Binomial Coefficients Algorithm333367 -Node: Fibonacci Numbers Algorithm334261 -Node: Lucas Numbers Algorithm336735 -Node: Random Number Algorithms337456 -Node: Assembly Coding339578 -Node: Assembly Code Organisation340538 -Node: Assembly Basics341505 -Node: Assembly Carry Propagation342655 -Node: Assembly Cache Handling344486 -Node: Assembly Functional Units346647 -Node: Assembly Floating Point348260 -Node: Assembly SIMD Instructions352038 -Node: Assembly Software Pipelining353020 -Node: Assembly Loop Unrolling354082 -Node: Assembly Writing Guide356297 -Node: Internals359062 -Node: Integer Internals359574 -Node: Rational Internals361830 -Node: Float Internals363068 -Node: Raw Output Internals370482 -Node: C++ Interface Internals371676 -Node: Contributors374997 -Node: References381138 -Node: GNU Free Documentation License386906 -Node: Concept Index412069 -Node: Function Index458256 - -End Tag Table diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/gmp.info-1 b/src/plugins/e-acsl/contrib/libgmp/doc/gmp.info-1 deleted file mode 100644 index 2471554c27c3776df2cd0743bfdefd712c0a6cae..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/gmp.info-1 +++ /dev/null @@ -1,7026 +0,0 @@ -This is ../../gmp/doc/gmp.info, produced by makeinfo version 4.8 from -../../gmp/doc/gmp.texi. - - This manual describes how to install and use the GNU multiple -precision arithmetic library, version 6.1.0. - - Copyright 1991, 1993-2015 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this -document under the terms of the GNU Free Documentation License, Version -1.3 or any later version published by the Free Software Foundation; -with no Invariant Sections, with the Front-Cover Texts being "A GNU -Manual", and with the Back-Cover Texts being "You have freedom to copy -and modify this GNU Manual, like GNU software". A copy of the license -is included in *Note GNU Free Documentation License::. - -INFO-DIR-SECTION GNU libraries -START-INFO-DIR-ENTRY -* gmp: (gmp). GNU Multiple Precision Arithmetic Library. -END-INFO-DIR-ENTRY - - -File: gmp.info, Node: Top, Next: Copying, Prev: (dir), Up: (dir) - -GNU MP -****** - - This manual describes how to install and use the GNU multiple -precision arithmetic library, version 6.1.0. - - Copyright 1991, 1993-2015 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this -document under the terms of the GNU Free Documentation License, Version -1.3 or any later version published by the Free Software Foundation; -with no Invariant Sections, with the Front-Cover Texts being "A GNU -Manual", and with the Back-Cover Texts being "You have freedom to copy -and modify this GNU Manual, like GNU software". A copy of the license -is included in *Note GNU Free Documentation License::. - - -* Menu: - -* Copying:: GMP Copying Conditions (LGPL). -* Introduction to GMP:: Brief introduction to GNU MP. -* Installing GMP:: How to configure and compile the GMP library. -* GMP Basics:: What every GMP user should know. -* Reporting Bugs:: How to usefully report bugs. -* Integer Functions:: Functions for arithmetic on signed integers. -* Rational Number Functions:: Functions for arithmetic on rational numbers. -* Floating-point Functions:: Functions for arithmetic on floats. -* Low-level Functions:: Fast functions for natural numbers. -* Random Number Functions:: Functions for generating random numbers. -* Formatted Output:: `printf' style output. -* Formatted Input:: `scanf' style input. -* C++ Class Interface:: Class wrappers around GMP types. -* Custom Allocation:: How to customize the internal allocation. -* Language Bindings:: Using GMP from other languages. -* Algorithms:: What happens behind the scenes. -* Internals:: How values are represented behind the scenes. - -* Contributors:: Who brings you this library? -* References:: Some useful papers and books to read. -* GNU Free Documentation License:: -* Concept Index:: -* Function Index:: - - -File: gmp.info, Node: Copying, Next: Introduction to GMP, Prev: Top, Up: Top - -GNU MP Copying Conditions -************************* - -This library is "free"; this means that everyone is free to use it and -free to redistribute it on a free basis. The library is not in the -public domain; it is copyrighted and there are restrictions on its -distribution, but these restrictions are designed to permit everything -that a good cooperating citizen would want to do. What is not allowed -is to try to prevent others from further sharing any version of this -library that they might get from you. - - Specifically, we want to make sure that you have the right to give -away copies of the library, that you receive source code or else can -get it if you want it, that you can change this library or use pieces -of it in new free programs, and that you know you can do these things. - - To make sure that everyone has such rights, we have to forbid you to -deprive anyone else of these rights. For example, if you distribute -copies of the GNU MP library, you must give the recipients all the -rights that you have. You must make sure that they, too, receive or -can get the source code. And you must tell them their rights. - - Also, for our own protection, we must make certain that everyone -finds out that there is no warranty for the GNU MP library. If it is -modified by someone else and passed on, we want their recipients to -know that what they have is not what we distributed, so that any -problems introduced by others will not reflect on our reputation. - - More precisely, the GNU MP library is dual licensed, under the -conditions of the GNU Lesser General Public License version 3 (see -`COPYING.LESSERv3'), or the GNU General Public License version 2 (see -`COPYINGv2'). This is the recipient's choice, and the recipient also has -the additional option of applying later versions of these licenses. (The -reason for this dual licensing is to make it possible to use the -library with programs which are licensed under GPL version 2, but which -for historical or other reasons do not allow use under later versions -of the GPL). - - Programs which are not part of the library itself, such as -demonstration programs and the GMP testsuite, are licensed under the -terms of the GNU General Public License version 3 (see `COPYINGv3'), or -any later version. - - -File: gmp.info, Node: Introduction to GMP, Next: Installing GMP, Prev: Copying, Up: Top - -1 Introduction to GNU MP -************************ - -GNU MP is a portable library written in C for arbitrary precision -arithmetic on integers, rational numbers, and floating-point numbers. -It aims to provide the fastest possible arithmetic for all applications -that need higher precision than is directly supported by the basic C -types. - - Many applications use just a few hundred bits of precision; but some -applications may need thousands or even millions of bits. GMP is -designed to give good performance for both, by choosing algorithms -based on the sizes of the operands, and by carefully keeping the -overhead at a minimum. - - The speed of GMP is achieved by using fullwords as the basic -arithmetic type, by using sophisticated algorithms, by including -carefully optimized assembly code for the most common inner loops for -many different CPUs, and by a general emphasis on speed (as opposed to -simplicity or elegance). - - There is assembly code for these CPUs: ARM Cortex-A9, Cortex-A15, -and generic ARM, DEC Alpha 21064, 21164, and 21264, AMD K8 and K10 -(sold under many brands, e.g. Athlon64, Phenom, Opteron) Bulldozer, and -Bobcat, Intel Pentium, Pentium Pro/II/III, Pentium 4, Core2, Nehalem, -Sandy bridge, Haswell, generic x86, Intel IA-64, Motorola/IBM PowerPC -32 and 64 such as POWER970, POWER5, POWER6, and POWER7, MIPS 32-bit and -64-bit, SPARC 32-bit ad 64-bit with special support for all UltraSPARC -models. There is also assembly code for many obsolete CPUs. - -For up-to-date information on GMP, please see the GMP web pages at - - `https://gmplib.org/' - -The latest version of the library is available at - - `https://ftp.gnu.org/gnu/gmp/' - - Many sites around the world mirror `ftp.gnu.org', please use a mirror -near you, see `https://www.gnu.org/order/ftp.html' for a full list. - - There are three public mailing lists of interest. One for release -announcements, one for general questions and discussions about usage of -the GMP library and one for bug reports. For more information, see - - `https://gmplib.org/mailman/listinfo/'. - - The proper place for bug reports is <gmp-bugs@gmplib.org>. See -*Note Reporting Bugs:: for information about reporting bugs. - - -1.1 How to use this Manual -========================== - -Everyone should read *Note GMP Basics::. If you need to install the -library yourself, then read *Note Installing GMP::. If you have a -system with multiple ABIs, then read *Note ABI and ISA::, for the -compiler options that must be used on applications. - - The rest of the manual can be used for later reference, although it -is probably a good idea to glance through it. - - -File: gmp.info, Node: Installing GMP, Next: GMP Basics, Prev: Introduction to GMP, Up: Top - -2 Installing GMP -**************** - -GMP has an autoconf/automake/libtool based configuration system. On a -Unix-like system a basic build can be done with - - ./configure - make - -Some self-tests can be run with - - make check - -And you can install (under `/usr/local' by default) with - - make install - - If you experience problems, please report them to -<gmp-bugs@gmplib.org>. See *Note Reporting Bugs::, for information on -what to include in useful bug reports. - -* Menu: - -* Build Options:: -* ABI and ISA:: -* Notes for Package Builds:: -* Notes for Particular Systems:: -* Known Build Problems:: -* Performance optimization:: - - -File: gmp.info, Node: Build Options, Next: ABI and ISA, Prev: Installing GMP, Up: Installing GMP - -2.1 Build Options -================= - -All the usual autoconf configure options are available, run `./configure ---help' for a summary. The file `INSTALL.autoconf' has some generic -installation information too. - -Tools - `configure' requires various Unix-like tools. See *Note Notes for - Particular Systems::, for some options on non-Unix systems. - - It might be possible to build without the help of `configure', - certainly all the code is there, but unfortunately you'll be on - your own. - -Build Directory - To compile in a separate build directory, `cd' to that directory, - and prefix the configure command with the path to the GMP source - directory. For example - - cd /my/build/dir - /my/sources/gmp-6.1.0/configure - - Not all `make' programs have the necessary features (`VPATH') to - support this. In particular, SunOS and Slowaris `make' have bugs - that make them unable to build in a separate directory. Use GNU - `make' instead. - -`--prefix' and `--exec-prefix' - The `--prefix' option can be used in the normal way to direct GMP - to install under a particular tree. The default is `/usr/local'. - - `--exec-prefix' can be used to direct architecture-dependent files - like `libgmp.a' to a different location. This can be used to share - architecture-independent parts like the documentation, but - separate the dependent parts. Note however that `gmp.h' and - `mp.h' are architecture-dependent since they encode certain - aspects of `libgmp', so it will be necessary to ensure both - `$prefix/include' and `$exec_prefix/include' are available to the - compiler. - -`--disable-shared', `--disable-static' - By default both shared and static libraries are built (where - possible), but one or other can be disabled. Shared libraries - result in smaller executables and permit code sharing between - separate running processes, but on some CPUs are slightly slower, - having a small cost on each function call. - -Native Compilation, `--build=CPU-VENDOR-OS' - For normal native compilation, the system can be specified with - `--build'. By default `./configure' uses the output from running - `./config.guess'. On some systems `./config.guess' can determine - the exact CPU type, on others it will be necessary to give it - explicitly. For example, - - ./configure --build=ultrasparc-sun-solaris2.7 - - In all cases the `OS' part is important, since it controls how - libtool generates shared libraries. Running `./config.guess' is - the simplest way to see what it should be, if you don't know - already. - -Cross Compilation, `--host=CPU-VENDOR-OS' - When cross-compiling, the system used for compiling is given by - `--build' and the system where the library will run is given by - `--host'. For example when using a FreeBSD Athlon system to build - GNU/Linux m68k binaries, - - ./configure --build=athlon-pc-freebsd3.5 --host=m68k-mac-linux-gnu - - Compiler tools are sought first with the host system type as a - prefix. For example `m68k-mac-linux-gnu-ranlib' is tried, then - plain `ranlib'. This makes it possible for a set of - cross-compiling tools to co-exist with native tools. The prefix - is the argument to `--host', and this can be an alias, such as - `m68k-linux'. But note that tools don't have to be setup this - way, it's enough to just have a `PATH' with a suitable - cross-compiling `cc' etc. - - Compiling for a different CPU in the same family as the build - system is a form of cross-compilation, though very possibly this - would merely be special options on a native compiler. In any case - `./configure' avoids depending on being able to run code on the - build system, which is important when creating binaries for a - newer CPU since they very possibly won't run on the build system. - - In all cases the compiler must be able to produce an executable - (of whatever format) from a standard C `main'. Although only - object files will go to make up `libgmp', `./configure' uses - linking tests for various purposes, such as determining what - functions are available on the host system. - - Currently a warning is given unless an explicit `--build' is used - when cross-compiling, because it may not be possible to correctly - guess the build system type if the `PATH' has only a - cross-compiling `cc'. - - Note that the `--target' option is not appropriate for GMP. It's - for use when building compiler tools, with `--host' being where - they will run, and `--target' what they'll produce code for. - Ordinary programs or libraries like GMP are only interested in the - `--host' part, being where they'll run. (Some past versions of - GMP used `--target' incorrectly.) - -CPU types - In general, if you want a library that runs as fast as possible, - you should configure GMP for the exact CPU type your system uses. - However, this may mean the binaries won't run on older members of - the family, and might run slower on other members, older or newer. - The best idea is always to build GMP for the exact machine type - you intend to run it on. - - The following CPUs have specific support. See `configure.ac' for - details of what code and compiler options they select. - - * Alpha: alpha, alphaev5, alphaev56, alphapca56, alphapca57, - alphaev6, alphaev67, alphaev68 alphaev7 - - * Cray: c90, j90, t90, sv1 - - * HPPA: hppa1.0, hppa1.1, hppa2.0, hppa2.0n, hppa2.0w, hppa64 - - * IA-64: ia64, itanium, itanium2 - - * MIPS: mips, mips3, mips64 - - * Motorola: m68k, m68000, m68010, m68020, m68030, m68040, - m68060, m68302, m68360, m88k, m88110 - - * POWER: power, power1, power2, power2sc - - * PowerPC: powerpc, powerpc64, powerpc401, powerpc403, - powerpc405, powerpc505, powerpc601, powerpc602, powerpc603, - powerpc603e, powerpc604, powerpc604e, powerpc620, powerpc630, - powerpc740, powerpc7400, powerpc7450, powerpc750, powerpc801, - powerpc821, powerpc823, powerpc860, powerpc970 - - * SPARC: sparc, sparcv8, microsparc, supersparc, sparcv9, - ultrasparc, ultrasparc2, ultrasparc2i, ultrasparc3, sparc64 - - * x86 family: i386, i486, i586, pentium, pentiummmx, pentiumpro, - pentium2, pentium3, pentium4, k6, k62, k63, athlon, amd64, - viac3, viac32 - - * Other: arm, sh, sh2, vax, - - CPUs not listed will use generic C code. - -Generic C Build - If some of the assembly code causes problems, or if otherwise - desired, the generic C code can be selected with the configure - `--disable-assembly'. - - Note that this will run quite slowly, but it should be portable - and should at least make it possible to get something running if - all else fails. - -Fat binary, `--enable-fat' - Using `--enable-fat' selects a "fat binary" build on x86, where - optimized low level subroutines are chosen at runtime according to - the CPU detected. This means more code, but gives good - performance on all x86 chips. (This option might become available - for more architectures in the future.) - -`ABI' - On some systems GMP supports multiple ABIs (application binary - interfaces), meaning data type sizes and calling conventions. By - default GMP chooses the best ABI available, but a particular ABI - can be selected. For example - - ./configure --host=mips64-sgi-irix6 ABI=n32 - - See *Note ABI and ISA::, for the available choices on relevant - CPUs, and what applications need to do. - -`CC', `CFLAGS' - By default the C compiler used is chosen from among some likely - candidates, with `gcc' normally preferred if it's present. The - usual `CC=whatever' can be passed to `./configure' to choose - something different. - - For various systems, default compiler flags are set based on the - CPU and compiler. The usual `CFLAGS="-whatever"' can be passed to - `./configure' to use something different or to set good flags for - systems GMP doesn't otherwise know. - - The `CC' and `CFLAGS' used are printed during `./configure', and - can be found in each generated `Makefile'. This is the easiest way - to check the defaults when considering changing or adding - something. - - Note that when `CC' and `CFLAGS' are specified on a system - supporting multiple ABIs it's important to give an explicit - `ABI=whatever', since GMP can't determine the ABI just from the - flags and won't be able to select the correct assembly code. - - If just `CC' is selected then normal default `CFLAGS' for that - compiler will be used (if GMP recognises it). For example - `CC=gcc' can be used to force the use of GCC, with default flags - (and default ABI). - -`CPPFLAGS' - Any flags like `-D' defines or `-I' includes required by the - preprocessor should be set in `CPPFLAGS' rather than `CFLAGS'. - Compiling is done with both `CPPFLAGS' and `CFLAGS', but - preprocessing uses just `CPPFLAGS'. This distinction is because - most preprocessors won't accept all the flags the compiler does. - Preprocessing is done separately in some configure tests. - -`CC_FOR_BUILD' - Some build-time programs are compiled and run to generate - host-specific data tables. `CC_FOR_BUILD' is the compiler used - for this. It doesn't need to be in any particular ABI or mode, it - merely needs to generate executables that can run. The default is - to try the selected `CC' and some likely candidates such as `cc' - and `gcc', looking for something that works. - - No flags are used with `CC_FOR_BUILD' because a simple invocation - like `cc foo.c' should be enough. If some particular options are - required they can be included as for instance `CC_FOR_BUILD="cc - -whatever"'. - -C++ Support, `--enable-cxx' - C++ support in GMP can be enabled with `--enable-cxx', in which - case a C++ compiler will be required. As a convenience - `--enable-cxx=detect' can be used to enable C++ support only if a - compiler can be found. The C++ support consists of a library - `libgmpxx.la' and header file `gmpxx.h' (*note Headers and - Libraries::). - - A separate `libgmpxx.la' has been adopted rather than having C++ - objects within `libgmp.la' in order to ensure dynamic linked C - programs aren't bloated by a dependency on the C++ standard - library, and to avoid any chance that the C++ compiler could be - required when linking plain C programs. - - `libgmpxx.la' will use certain internals from `libgmp.la' and can - only be expected to work with `libgmp.la' from the same GMP - version. Future changes to the relevant internals will be - accompanied by renaming, so a mismatch will cause unresolved - symbols rather than perhaps mysterious misbehaviour. - - In general `libgmpxx.la' will be usable only with the C++ compiler - that built it, since name mangling and runtime support are usually - incompatible between different compilers. - -`CXX', `CXXFLAGS' - When C++ support is enabled, the C++ compiler and its flags can be - set with variables `CXX' and `CXXFLAGS' in the usual way. The - default for `CXX' is the first compiler that works from a list of - likely candidates, with `g++' normally preferred when available. - The default for `CXXFLAGS' is to try `CFLAGS', `CFLAGS' without - `-g', then for `g++' either `-g -O2' or `-O2', or for other - compilers `-g' or nothing. Trying `CFLAGS' this way is convenient - when using `gcc' and `g++' together, since the flags for `gcc' will - usually suit `g++'. - - It's important that the C and C++ compilers match, meaning their - startup and runtime support routines are compatible and that they - generate code in the same ABI (if there's a choice of ABIs on the - system). `./configure' isn't currently able to check these things - very well itself, so for that reason `--disable-cxx' is the - default, to avoid a build failure due to a compiler mismatch. - Perhaps this will change in the future. - - Incidentally, it's normally not good enough to set `CXX' to the - same as `CC'. Although `gcc' for instance recognises `foo.cc' as - C++ code, only `g++' will invoke the linker the right way when - building an executable or shared library from C++ object files. - -Temporary Memory, `--enable-alloca=<choice>' - GMP allocates temporary workspace using one of the following three - methods, which can be selected with for instance - `--enable-alloca=malloc-reentrant'. - - * `alloca' - C library or compiler builtin. - - * `malloc-reentrant' - the heap, in a re-entrant fashion. - - * `malloc-notreentrant' - the heap, with global variables. - - For convenience, the following choices are also available. - `--disable-alloca' is the same as `no'. - - * `yes' - a synonym for `alloca'. - - * `no' - a synonym for `malloc-reentrant'. - - * `reentrant' - `alloca' if available, otherwise - `malloc-reentrant'. This is the default. - - * `notreentrant' - `alloca' if available, otherwise - `malloc-notreentrant'. - - `alloca' is reentrant and fast, and is recommended. It actually - allocates just small blocks on the stack; larger ones use - malloc-reentrant. - - `malloc-reentrant' is, as the name suggests, reentrant and thread - safe, but `malloc-notreentrant' is faster and should be used if - reentrancy is not required. - - The two malloc methods in fact use the memory allocation functions - selected by `mp_set_memory_functions', these being `malloc' and - friends by default. *Note Custom Allocation::. - - An additional choice `--enable-alloca=debug' is available, to help - when debugging memory related problems (*note Debugging::). - -FFT Multiplication, `--disable-fft' - By default multiplications are done using Karatsuba, 3-way Toom, - higher degree Toom, and Fermat FFT. The FFT is only used on large - to very large operands and can be disabled to save code size if - desired. - -Assertion Checking, `--enable-assert' - This option enables some consistency checking within the library. - This can be of use while debugging, *note Debugging::. - -Execution Profiling, `--enable-profiling=prof/gprof/instrument' - Enable profiling support, in one of various styles, *note - Profiling::. - -`MPN_PATH' - Various assembly versions of each mpn subroutines are provided. - For a given CPU, a search is made though a path to choose a - version of each. For example `sparcv8' has - - MPN_PATH="sparc32/v8 sparc32 generic" - - which means look first for v8 code, then plain sparc32 (which is - v7), and finally fall back on generic C. Knowledgeable users with - special requirements can specify a different path. Normally this - is completely unnecessary. - -Documentation - The source for the document you're now reading is `doc/gmp.texi', - in Texinfo format, see *Note Texinfo: (texinfo)Top. - - Info format `doc/gmp.info' is included in the distribution. The - usual automake targets are available to make PostScript, DVI, PDF - and HTML (these will require various TeX and Texinfo tools). - - DocBook and XML can be generated by the Texinfo `makeinfo' program - too, see *Note Options for `makeinfo': (texinfo)makeinfo options. - - Some supplementary notes can also be found in the `doc' - subdirectory. - - - -File: gmp.info, Node: ABI and ISA, Next: Notes for Package Builds, Prev: Build Options, Up: Installing GMP - -2.2 ABI and ISA -=============== - -ABI (Application Binary Interface) refers to the calling conventions -between functions, meaning what registers are used and what sizes the -various C data types are. ISA (Instruction Set Architecture) refers to -the instructions and registers a CPU has available. - - Some 64-bit ISA CPUs have both a 64-bit ABI and a 32-bit ABI -defined, the latter for compatibility with older CPUs in the family. -GMP supports some CPUs like this in both ABIs. In fact within GMP -`ABI' means a combination of chip ABI, plus how GMP chooses to use it. -For example in some 32-bit ABIs, GMP may support a limb as either a -32-bit `long' or a 64-bit `long long'. - - By default GMP chooses the best ABI available for a given system, -and this generally gives significantly greater speed. But an ABI can -be chosen explicitly to make GMP compatible with other libraries, or -particular application requirements. For example, - - ./configure ABI=32 - - In all cases it's vital that all object code used in a given program -is compiled for the same ABI. - - Usually a limb is implemented as a `long'. When a `long long' limb -is used this is encoded in the generated `gmp.h'. This is convenient -for applications, but it does mean that `gmp.h' will vary, and can't be -just copied around. `gmp.h' remains compiler independent though, since -all compilers for a particular ABI will be expected to use the same -limb type. - - Currently no attempt is made to follow whatever conventions a system -has for installing library or header files built for a particular ABI. -This will probably only matter when installing multiple builds of GMP, -and it might be as simple as configuring with a special `libdir', or it -might require more than that. Note that builds for different ABIs need -to done separately, with a fresh `./configure' and `make' each. - - -AMD64 (`x86_64') - On AMD64 systems supporting both 32-bit and 64-bit modes for - applications, the following ABI choices are available. - - `ABI=64' - The 64-bit ABI uses 64-bit limbs and pointers and makes full - use of the chip architecture. This is the default. - Applications will usually not need special compiler flags, - but for reference the option is - - gcc -m64 - - `ABI=32' - The 32-bit ABI is the usual i386 conventions. This will be - slower, and is not recommended except for inter-operating - with other code not yet 64-bit capable. Applications must be - compiled with - - gcc -m32 - - (In GCC 2.95 and earlier there's no `-m32' option, it's the - only mode.) - - `ABI=x32' - The x32 ABI uses 64-bit limbs but 32-bit pointers. Like the - 64-bit ABI, it makes full use of the chip's arithmetic - capabilities. This ABI is not supported by all operating - systems. - - gcc -mx32 - - - -HPPA 2.0 (`hppa2.0*', `hppa64') - - `ABI=2.0w' - The 2.0w ABI uses 64-bit limbs and pointers and is available - on HP-UX 11 or up. Applications must be compiled with - - gcc [built for 2.0w] - cc +DD64 - - `ABI=2.0n' - The 2.0n ABI means the 32-bit HPPA 1.0 ABI and all its normal - calling conventions, but with 64-bit instructions permitted - within functions. GMP uses a 64-bit `long long' for a limb. - This ABI is available on hppa64 GNU/Linux and on HP-UX 10 or - higher. Applications must be compiled with - - gcc [built for 2.0n] - cc +DA2.0 +e - - Note that current versions of GCC (eg. 3.2) don't generate - 64-bit instructions for `long long' operations and so may be - slower than for 2.0w. (The GMP assembly code is the same - though.) - - `ABI=1.0' - HPPA 2.0 CPUs can run all HPPA 1.0 and 1.1 code in the 32-bit - HPPA 1.0 ABI. No special compiler options are needed for - applications. - - All three ABIs are available for CPU types `hppa2.0w', `hppa2.0' - and `hppa64', but for CPU type `hppa2.0n' only 2.0n or 1.0 are - considered. - - Note that GCC on HP-UX has no options to choose between 2.0n and - 2.0w modes, unlike HP `cc'. Instead it must be built for one or - the other ABI. GMP will detect how it was built, and skip to the - corresponding `ABI'. - - -IA-64 under HP-UX (`ia64*-*-hpux*', `itanium*-*-hpux*') - HP-UX supports two ABIs for IA-64. GMP performance is the same in - both. - - `ABI=32' - In the 32-bit ABI, pointers, `int's and `long's are 32 bits - and GMP uses a 64 bit `long long' for a limb. Applications - can be compiled without any special flags since this ABI is - the default in both HP C and GCC, but for reference the flags - are - - gcc -milp32 - cc +DD32 - - `ABI=64' - In the 64-bit ABI, `long's and pointers are 64 bits and GMP - uses a `long' for a limb. Applications must be compiled with - - gcc -mlp64 - cc +DD64 - - On other IA-64 systems, GNU/Linux for instance, `ABI=64' is the - only choice. - - -MIPS under IRIX 6 (`mips*-*-irix[6789]') - IRIX 6 always has a 64-bit MIPS 3 or better CPU, and supports ABIs - o32, n32, and 64. n32 or 64 are recommended, and GMP performance - will be the same in each. The default is n32. - - `ABI=o32' - The o32 ABI is 32-bit pointers and integers, and no 64-bit - operations. GMP will be slower than in n32 or 64, this - option only exists to support old compilers, eg. GCC 2.7.2. - Applications can be compiled with no special flags on an old - compiler, or on a newer compiler with - - gcc -mabi=32 - cc -32 - - `ABI=n32' - The n32 ABI is 32-bit pointers and integers, but with a - 64-bit limb using a `long long'. Applications must be - compiled with - - gcc -mabi=n32 - cc -n32 - - `ABI=64' - The 64-bit ABI is 64-bit pointers and integers. Applications - must be compiled with - - gcc -mabi=64 - cc -64 - - Note that MIPS GNU/Linux, as of kernel version 2.2, doesn't have - the necessary support for n32 or 64 and so only gets a 32-bit limb - and the MIPS 2 code. - - -PowerPC 64 (`powerpc64', `powerpc620', `powerpc630', `powerpc970', `power4', `power5') - - `ABI=mode64' - The AIX 64 ABI uses 64-bit limbs and pointers and is the - default on PowerPC 64 `*-*-aix*' systems. Applications must - be compiled with - - gcc -maix64 - xlc -q64 - - On 64-bit GNU/Linux, BSD, and Mac OS X/Darwin systems, the - applications must be compiled with - - gcc -m64 - - `ABI=mode32' - The `mode32' ABI uses a 64-bit `long long' limb but with the - chip still in 32-bit mode and using 32-bit calling - conventions. This is the default for systems where the true - 64-bit ABI is unavailable. No special compiler options are - typically needed for applications. This ABI is not available - under AIX. - - `ABI=32' - This is the basic 32-bit PowerPC ABI, with a 32-bit limb. No - special compiler options are needed for applications. - - GMP's speed is greatest for the `mode64' ABI, the `mode32' ABI is - 2nd best. In `ABI=32' only the 32-bit ISA is used and this - doesn't make full use of a 64-bit chip. - - -Sparc V9 (`sparc64', `sparcv9', `ultrasparc*') - - `ABI=64' - The 64-bit V9 ABI is available on the various BSD sparc64 - ports, recent versions of Sparc64 GNU/Linux, and Solaris 2.7 - and up (when the kernel is in 64-bit mode). GCC 3.2 or - higher, or Sun `cc' is required. On GNU/Linux, depending on - the default `gcc' mode, applications must be compiled with - - gcc -m64 - - On Solaris applications must be compiled with - - gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9 - cc -xarch=v9 - - On the BSD sparc64 systems no special options are required, - since 64-bits is the only ABI available. - - `ABI=32' - For the basic 32-bit ABI, GMP still uses as much of the V9 - ISA as it can. In the Sun documentation this combination is - known as "v8plus". On GNU/Linux, depending on the default - `gcc' mode, applications may need to be compiled with - - gcc -m32 - - On Solaris, no special compiler options are required for - applications, though using something like the following is - recommended. (`gcc' 2.8 and earlier only support `-mv8' - though.) - - gcc -mv8plus - cc -xarch=v8plus - - GMP speed is greatest in `ABI=64', so it's the default where - available. The speed is partly because there are extra registers - available and partly because 64-bits is considered the more - important case and has therefore had better code written for it. - - Don't be confused by the names of the `-m' and `-x' compiler - options, they're called `arch' but effectively control both ABI - and ISA. - - On Solaris 2.6 and earlier, only `ABI=32' is available since the - kernel doesn't save all registers. - - On Solaris 2.7 with the kernel in 32-bit mode, a normal native - build will reject `ABI=64' because the resulting executables won't - run. `ABI=64' can still be built if desired by making it look - like a cross-compile, for example - - ./configure --build=none --host=sparcv9-sun-solaris2.7 ABI=64 - - -File: gmp.info, Node: Notes for Package Builds, Next: Notes for Particular Systems, Prev: ABI and ISA, Up: Installing GMP - -2.3 Notes for Package Builds -============================ - -GMP should present no great difficulties for packaging in a binary -distribution. - - Libtool is used to build the library and `-version-info' is set -appropriately, having started from `3:0:0' in GMP 3.0 (*note Library -interface versions: (libtool)Versioning.). - - The GMP 4 series will be upwardly binary compatible in each release -and will be upwardly binary compatible with all of the GMP 3 series. -Additional function interfaces may be added in each release, so on -systems where libtool versioning is not fully checked by the loader an -auxiliary mechanism may be needed to express that a dynamic linked -application depends on a new enough GMP. - - An auxiliary mechanism may also be needed to express that -`libgmpxx.la' (from `--enable-cxx', *note Build Options::) requires -`libgmp.la' from the same GMP version, since this is not done by the -libtool versioning, nor otherwise. A mismatch will result in -unresolved symbols from the linker, or perhaps the loader. - - When building a package for a CPU family, care should be taken to use -`--host' (or `--build') to choose the least common denominator among -the CPUs which might use the package. For example this might mean plain -`sparc' (meaning V7) for SPARCs. - - For x86s, `--enable-fat' sets things up for a fat binary build, -making a runtime selection of optimized low level routines. This is a -good choice for packaging to run on a range of x86 chips. - - Users who care about speed will want GMP built for their exact CPU -type, to make best use of the available optimizations. Providing a way -to suitably rebuild a package may be useful. This could be as simple -as making it possible for a user to omit `--build' (and `--host') so -`./config.guess' will detect the CPU. But a way to manually specify a -`--build' will be wanted for systems where `./config.guess' is inexact. - - On systems with multiple ABIs, a packaged build will need to decide -which among the choices is to be provided, see *Note ABI and ISA::. A -given run of `./configure' etc will only build one ABI. If a second -ABI is also required then a second run of `./configure' etc must be -made, starting from a clean directory tree (`make distclean'). - - As noted under "ABI and ISA", currently no attempt is made to follow -system conventions for install locations that vary with ABI, such as -`/usr/lib/sparcv9' for `ABI=64' as opposed to `/usr/lib' for `ABI=32'. -A package build can override `libdir' and other standard variables as -necessary. - - Note that `gmp.h' is a generated file, and will be architecture and -ABI dependent. When attempting to install two ABIs simultaneously it -will be important that an application compile gets the correct `gmp.h' -for its desired ABI. If compiler include paths don't vary with ABI -options then it might be necessary to create a `/usr/include/gmp.h' -which tests preprocessor symbols and chooses the correct actual `gmp.h'. - - -File: gmp.info, Node: Notes for Particular Systems, Next: Known Build Problems, Prev: Notes for Package Builds, Up: Installing GMP - -2.4 Notes for Particular Systems -================================ - -AIX 3 and 4 - On systems `*-*-aix[34]*' shared libraries are disabled by - default, since some versions of the native `ar' fail on the - convenience libraries used. A shared build can be attempted with - - ./configure --enable-shared --disable-static - - Note that the `--disable-static' is necessary because in a shared - build libtool makes `libgmp.a' a symlink to `libgmp.so', - apparently for the benefit of old versions of `ld' which only - recognise `.a', but unfortunately this is done even if a fully - functional `ld' is available. - -ARM - On systems `arm*-*-*', versions of GCC up to and including 2.95.3 - have a bug in unsigned division, giving wrong results for some - operands. GMP `./configure' will demand GCC 2.95.4 or later. - -Compaq C++ - Compaq C++ on OSF 5.1 has two flavours of `iostream', a standard - one and an old pre-standard one (see `man iostream_intro'). GMP - can only use the standard one, which unfortunately is not the - default but must be selected by defining `__USE_STD_IOSTREAM'. - Configure with for instance - - ./configure --enable-cxx CPPFLAGS=-D__USE_STD_IOSTREAM - -Floating Point Mode - On some systems, the hardware floating point has a control mode - which can set all operations to be done in a particular precision, - for instance single, double or extended on x86 systems (x87 - floating point). The GMP functions involving a `double' cannot be - expected to operate to their full precision when the hardware is - in single precision mode. Of course this affects all code, - including application code, not just GMP. - -FreeBSD 7.x, 8.x, 9.0, 9.1, 9.2 - `m4' in these releases of FreeBSD has an eval function which - ignores its 2nd and 3rd arguments, which makes it unsuitable for - `.asm' file processing. `./configure' will detect the problem and - either abort or choose another m4 in the `PATH'. The bug is fixed - in FreeBSD 9.3 and 10.0, so either upgrade or use GNU m4. Note - that the FreeBSD package system installs GNU m4 under the name - `gm4', which GMP cannot guess. - -FreeBSD 7.x, 8.x, 9.x - GMP releases starting with 6.0 do not support `ABI=32' on - FreeBSD/amd64 prior to release 10.0 of the system. The cause is a - broken `limits.h', which GMP no longer works around. - -MS-DOS and MS Windows - On an MS-DOS system DJGPP can be used to build GMP, and on an MS - Windows system Cygwin, DJGPP and MINGW can be used. All three are - excellent ports of GCC and the various GNU tools. - - `http://www.cygwin.com/' - `http://www.delorie.com/djgpp/' - `http://www.mingw.org/' - - Microsoft also publishes an Interix "Services for Unix" which can - be used to build GMP on Windows (with a normal `./configure'), but - it's not free software. - -MS Windows DLLs - On systems `*-*-cygwin*', `*-*-mingw*' and `*-*-pw32*' by default - GMP builds only a static library, but a DLL can be built instead - using - - ./configure --disable-static --enable-shared - - Static and DLL libraries can't both be built, since certain export - directives in `gmp.h' must be different. - - A MINGW DLL build of GMP can be used with Microsoft C. Libtool - doesn't install a `.lib' format import library, but it can be - created with MS `lib' as follows, and copied to the install - directory. Similarly for `libmp' and `libgmpxx'. - - cd .libs - lib /def:libgmp-3.dll.def /out:libgmp-3.lib - - MINGW uses the C runtime library `msvcrt.dll' for I/O, so - applications wanting to use the GMP I/O routines must be compiled - with `cl /MD' to do the same. If one of the other C runtime - library choices provided by MS C is desired then the suggestion is - to use the GMP string functions and confine I/O to the application. - -Motorola 68k CPU Types - `m68k' is taken to mean 68000. `m68020' or higher will give a - performance boost on applicable CPUs. `m68360' can be used for - CPU32 series chips. `m68302' can be used for "Dragonball" series - chips, though this is merely a synonym for `m68000'. - -NetBSD 5.x - `m4' in these releases of NetBSD has an eval function which - ignores its 2nd and 3rd arguments, which makes it unsuitable for - `.asm' file processing. `./configure' will detect the problem and - either abort or choose another m4 in the `PATH'. The bug is fixed - in NetBSD 6, so either upgrade or use GNU m4. Note that the - NetBSD package system installs GNU m4 under the name `gm4', which - GMP cannot guess. - -OpenBSD 2.6 - `m4' in this release of OpenBSD has a bug in `eval' that makes it - unsuitable for `.asm' file processing. `./configure' will detect - the problem and either abort or choose another m4 in the `PATH'. - The bug is fixed in OpenBSD 2.7, so either upgrade or use GNU m4. - -Power CPU Types - In GMP, CPU types `power*' and `powerpc*' will each use - instructions not available on the other, so it's important to - choose the right one for the CPU that will be used. Currently GMP - has no assembly code support for using just the common instruction - subset. To get executables that run on both, the current - suggestion is to use the generic C code (`--disable-assembly'), - possibly with appropriate compiler options (like `-mcpu=common' for - `gcc'). CPU `rs6000' (which is not a CPU but a family of - workstations) is accepted by `config.sub', but is currently - equivalent to `--disable-assembly'. - -Sparc CPU Types - `sparcv8' or `supersparc' on relevant systems will give a - significant performance increase over the V7 code selected by plain - `sparc'. - -Sparc App Regs - The GMP assembly code for both 32-bit and 64-bit Sparc clobbers the - "application registers" `g2', `g3' and `g4', the same way that the - GCC default `-mapp-regs' does (*note SPARC Options: (gcc)SPARC - Options.). - - This makes that code unsuitable for use with the special V9 - `-mcmodel=embmedany' (which uses `g4' as a data segment pointer), - and for applications wanting to use those registers for special - purposes. In these cases the only suggestion currently is to - build GMP with `--disable-assembly' to avoid the assembly code. - -SunOS 4 - `/usr/bin/m4' lacks various features needed to process `.asm' - files, and instead `./configure' will automatically use - `/usr/5bin/m4', which we believe is always available (if not then - use GNU m4). - -x86 CPU Types - `i586', `pentium' or `pentiummmx' code is good for its intended P5 - Pentium chips, but quite slow when run on Intel P6 class chips - (PPro, P-II, P-III). `i386' is a better choice when making - binaries that must run on both. - -x86 MMX and SSE2 Code - If the CPU selected has MMX code but the assembler doesn't support - it, a warning is given and non-MMX code is used instead. This - will be an inferior build, since the MMX code that's present is - there because it's faster than the corresponding plain integer - code. The same applies to SSE2. - - Old versions of `gas' don't support MMX instructions, in particular - version 1.92.3 that comes with FreeBSD 2.2.8 or the more recent - OpenBSD 3.1 doesn't. - - Solaris 2.6 and 2.7 `as' generate incorrect object code for - register to register `movq' instructions, and so can't be used for - MMX code. Install a recent `gas' if MMX code is wanted on these - systems. - - -File: gmp.info, Node: Known Build Problems, Next: Performance optimization, Prev: Notes for Particular Systems, Up: Installing GMP - -2.5 Known Build Problems -======================== - -You might find more up-to-date information at `https://gmplib.org/'. - -Compiler link options - The version of libtool currently in use rather aggressively strips - compiler options when linking a shared library. This will - hopefully be relaxed in the future, but for now if this is a - problem the suggestion is to create a little script to hide them, - and for instance configure with - - ./configure CC=gcc-with-my-options - -DJGPP (`*-*-msdosdjgpp*') - The DJGPP port of `bash' 2.03 is unable to run the `configure' - script, it exits silently, having died writing a preamble to - `config.log'. Use `bash' 2.04 or higher. - - `make all' was found to run out of memory during the final - `libgmp.la' link on one system tested, despite having 64Mb - available. Running `make libgmp.la' directly helped, perhaps - recursing into the various subdirectories uses up memory. - -GNU binutils `strip' prior to 2.12 - `strip' from GNU binutils 2.11 and earlier should not be used on - the static libraries `libgmp.a' and `libmp.a' since it will - discard all but the last of multiple archive members with the same - name, like the three versions of `init.o' in `libgmp.a'. Binutils - 2.12 or higher can be used successfully. - - The shared libraries `libgmp.so' and `libmp.so' are not affected by - this and any version of `strip' can be used on them. - -`make' syntax error - On certain versions of SCO OpenServer 5 and IRIX 6.5 the native - `make' is unable to handle the long dependencies list for - `libgmp.la'. The symptom is a "syntax error" on the following - line of the top-level `Makefile'. - - libgmp.la: $(libgmp_la_OBJECTS) $(libgmp_la_DEPENDENCIES) - - Either use GNU Make, or as a workaround remove - `$(libgmp_la_DEPENDENCIES)' from that line (which will make the - initial build work, but if any recompiling is done `libgmp.la' - might not be rebuilt). - -MacOS X (`*-*-darwin*') - Libtool currently only knows how to create shared libraries on - MacOS X using the native `cc' (which is a modified GCC), not a - plain GCC. A static-only build should work though - (`--disable-shared'). - -NeXT prior to 3.3 - The system compiler on old versions of NeXT was a massacred and - old GCC, even if it called itself `cc'. This compiler cannot be - used to build GMP, you need to get a real GCC, and install that. - (NeXT may have fixed this in release 3.3 of their system.) - -POWER and PowerPC - Bugs in GCC 2.7.2 (and 2.6.3) mean it can't be used to compile GMP - on POWER or PowerPC. If you want to use GCC for these machines, - get GCC 2.7.2.1 (or later). - -Sequent Symmetry - Use the GNU assembler instead of the system assembler, since the - latter has serious bugs. - -Solaris 2.6 - The system `sed' prints an error "Output line too long" when - libtool builds `libgmp.la'. This doesn't seem to cause any - obvious ill effects, but GNU `sed' is recommended, to avoid any - doubt. - -Sparc Solaris 2.7 with gcc 2.95.2 in `ABI=32' - A shared library build of GMP seems to fail in this combination, - it builds but then fails the tests, apparently due to some - incorrect data relocations within `gmp_randinit_lc_2exp_size'. - The exact cause is unknown, `--disable-shared' is recommended. - - -File: gmp.info, Node: Performance optimization, Prev: Known Build Problems, Up: Installing GMP - -2.6 Performance optimization -============================ - -For optimal performance, build GMP for the exact CPU type of the target -computer, see *Note Build Options::. - - Unlike what is the case for most other programs, the compiler -typically doesn't matter much, since GMP uses assembly language for the -most critical operation. - - In particular for long-running GMP applications, and applications -demanding extremely large numbers, building and running the `tuneup' -program in the `tune' subdirectory, can be important. For example, - - cd tune - make tuneup - ./tuneup - - will generate better contents for the `gmp-mparam.h' parameter file. - - To use the results, put the output in the file indicated in the -`Parameters for ...' header. Then recompile from scratch. - - The `tuneup' program takes one useful parameter, `-f NNN', which -instructs the program how long to check FFT multiply parameters. If -you're going to use GMP for extremely large numbers, you may want to -run `tuneup' with a large NNN value. - - -File: gmp.info, Node: GMP Basics, Next: Reporting Bugs, Prev: Installing GMP, Up: Top - -3 GMP Basics -************ - -*Using functions, macros, data types, etc. not documented in this -manual is strongly discouraged. If you do so your application is -guaranteed to be incompatible with future versions of GMP.* - -* Menu: - -* Headers and Libraries:: -* Nomenclature and Types:: -* Function Classes:: -* Variable Conventions:: -* Parameter Conventions:: -* Memory Management:: -* Reentrancy:: -* Useful Macros and Constants:: -* Compatibility with older versions:: -* Demonstration Programs:: -* Efficiency:: -* Debugging:: -* Profiling:: -* Autoconf:: -* Emacs:: - - -File: gmp.info, Node: Headers and Libraries, Next: Nomenclature and Types, Prev: GMP Basics, Up: GMP Basics - -3.1 Headers and Libraries -========================= - -All declarations needed to use GMP are collected in the include file -`gmp.h'. It is designed to work with both C and C++ compilers. - - #include <gmp.h> - - Note however that prototypes for GMP functions with `FILE *' -parameters are only provided if `<stdio.h>' is included too. - - #include <stdio.h> - #include <gmp.h> - - Likewise `<stdarg.h>' is required for prototypes with `va_list' -parameters, such as `gmp_vprintf'. And `<obstack.h>' for prototypes -with `struct obstack' parameters, such as `gmp_obstack_printf', when -available. - - All programs using GMP must link against the `libgmp' library. On a -typical Unix-like system this can be done with `-lgmp', for example - - gcc myprogram.c -lgmp - - GMP C++ functions are in a separate `libgmpxx' library. This is -built and installed if C++ support has been enabled (*note Build -Options::). For example, - - g++ mycxxprog.cc -lgmpxx -lgmp - - GMP is built using Libtool and an application can use that to link -if desired, *note GNU Libtool: (libtool)Top. - - If GMP has been installed to a non-standard location then it may be -necessary to use `-I' and `-L' compiler options to point to the right -directories, and some sort of run-time path for a shared library. - - -File: gmp.info, Node: Nomenclature and Types, Next: Function Classes, Prev: Headers and Libraries, Up: GMP Basics - -3.2 Nomenclature and Types -========================== - -In this manual, "integer" usually means a multiple precision integer, as -defined by the GMP library. The C data type for such integers is -`mpz_t'. Here are some examples of how to declare such integers: - - mpz_t sum; - - struct foo { mpz_t x, y; }; - - mpz_t vec[20]; - - "Rational number" means a multiple precision fraction. The C data -type for these fractions is `mpq_t'. For example: - - mpq_t quotient; - - "Floating point number" or "Float" for short, is an arbitrary -precision mantissa with a limited precision exponent. The C data type -for such objects is `mpf_t'. For example: - - mpf_t fp; - - The floating point functions accept and return exponents in the C -type `mp_exp_t'. Currently this is usually a `long', but on some -systems it's an `int' for efficiency. - - A "limb" means the part of a multi-precision number that fits in a -single machine word. (We chose this word because a limb of the human -body is analogous to a digit, only larger, and containing several -digits.) Normally a limb is 32 or 64 bits. The C data type for a limb -is `mp_limb_t'. - - Counts of limbs of a multi-precision number represented in the C type -`mp_size_t'. Currently this is normally a `long', but on some systems -it's an `int' for efficiency, and on some systems it will be `long -long' in the future. - - Counts of bits of a multi-precision number are represented in the C -type `mp_bitcnt_t'. Currently this is always an `unsigned long', but on -some systems it will be an `unsigned long long' in the future. - - "Random state" means an algorithm selection and current state data. -The C data type for such objects is `gmp_randstate_t'. For example: - - gmp_randstate_t rstate; - - Also, in general `mp_bitcnt_t' is used for bit counts and ranges, and -`size_t' is used for byte or character counts. - - -File: gmp.info, Node: Function Classes, Next: Variable Conventions, Prev: Nomenclature and Types, Up: GMP Basics - -3.3 Function Classes -==================== - -There are six classes of functions in the GMP library: - - 1. Functions for signed integer arithmetic, with names beginning with - `mpz_'. The associated type is `mpz_t'. There are about 150 - functions in this class. (*note Integer Functions::) - - 2. Functions for rational number arithmetic, with names beginning with - `mpq_'. The associated type is `mpq_t'. There are about 35 - functions in this class, but the integer functions can be used for - arithmetic on the numerator and denominator separately. (*note - Rational Number Functions::) - - 3. Functions for floating-point arithmetic, with names beginning with - `mpf_'. The associated type is `mpf_t'. There are about 70 - functions is this class. (*note Floating-point Functions::) - - 4. Fast low-level functions that operate on natural numbers. These - are used by the functions in the preceding groups, and you can - also call them directly from very time-critical user programs. - These functions' names begin with `mpn_'. The associated type is - array of `mp_limb_t'. There are about 60 (hard-to-use) functions - in this class. (*note Low-level Functions::) - - 5. Miscellaneous functions. Functions for setting up custom - allocation and functions for generating random numbers. (*note - Custom Allocation::, and *note Random Number Functions::) - - -File: gmp.info, Node: Variable Conventions, Next: Parameter Conventions, Prev: Function Classes, Up: GMP Basics - -3.4 Variable Conventions -======================== - -GMP functions generally have output arguments before input arguments. -This notation is by analogy with the assignment operator. The BSD MP -compatibility functions are exceptions, having the output arguments -last. - - GMP lets you use the same variable for both input and output in one -call. For example, the main function for integer multiplication, -`mpz_mul', can be used to square `x' and put the result back in `x' with - - mpz_mul (x, x, x); - - Before you can assign to a GMP variable, you need to initialize it -by calling one of the special initialization functions. When you're -done with a variable, you need to clear it out, using one of the -functions for that purpose. Which function to use depends on the type -of variable. See the chapters on integer functions, rational number -functions, and floating-point functions for details. - - A variable should only be initialized once, or at least cleared -between each initialization. After a variable has been initialized, it -may be assigned to any number of times. - - For efficiency reasons, avoid excessive initializing and clearing. -In general, initialize near the start of a function and clear near the -end. For example, - - void - foo (void) - { - mpz_t n; - int i; - mpz_init (n); - for (i = 1; i < 100; i++) - { - mpz_mul (n, ...); - mpz_fdiv_q (n, ...); - ... - } - mpz_clear (n); - } - - -File: gmp.info, Node: Parameter Conventions, Next: Memory Management, Prev: Variable Conventions, Up: GMP Basics - -3.5 Parameter Conventions -========================= - -When a GMP variable is used as a function parameter, it's effectively a -call-by-reference, meaning if the function stores a value there it will -change the original in the caller. Parameters which are input-only can -be designated `const' to provoke a compiler error or warning on -attempting to modify them. - - When a function is going to return a GMP result, it should designate -a parameter that it sets, like the library functions do. More than one -value can be returned by having more than one output parameter, again -like the library functions. A `return' of an `mpz_t' etc doesn't -return the object, only a pointer, and this is almost certainly not -what's wanted. - - Here's an example accepting an `mpz_t' parameter, doing a -calculation, and storing the result to the indicated parameter. - - void - foo (mpz_t result, const mpz_t param, unsigned long n) - { - unsigned long i; - mpz_mul_ui (result, param, n); - for (i = 1; i < n; i++) - mpz_add_ui (result, result, i*7); - } - - int - main (void) - { - mpz_t r, n; - mpz_init (r); - mpz_init_set_str (n, "123456", 0); - foo (r, n, 20L); - gmp_printf ("%Zd\n", r); - return 0; - } - - `foo' works even if the mainline passes the same variable for -`param' and `result', just like the library functions. But sometimes -it's tricky to make that work, and an application might not want to -bother supporting that sort of thing. - - For interest, the GMP types `mpz_t' etc are implemented as -one-element arrays of certain structures. This is why declaring a -variable creates an object with the fields GMP needs, but then using it -as a parameter passes a pointer to the object. Note that the actual -fields in each `mpz_t' etc are for internal use only and should not be -accessed directly by code that expects to be compatible with future GMP -releases. - - -File: gmp.info, Node: Memory Management, Next: Reentrancy, Prev: Parameter Conventions, Up: GMP Basics - -3.6 Memory Management -===================== - -The GMP types like `mpz_t' are small, containing only a couple of sizes, -and pointers to allocated data. Once a variable is initialized, GMP -takes care of all space allocation. Additional space is allocated -whenever a variable doesn't have enough. - - `mpz_t' and `mpq_t' variables never reduce their allocated space. -Normally this is the best policy, since it avoids frequent reallocation. -Applications that need to return memory to the heap at some particular -point can use `mpz_realloc2', or clear variables no longer needed. - - `mpf_t' variables, in the current implementation, use a fixed amount -of space, determined by the chosen precision and allocated at -initialization, so their size doesn't change. - - All memory is allocated using `malloc' and friends by default, but -this can be changed, see *Note Custom Allocation::. Temporary memory -on the stack is also used (via `alloca'), but this can be changed at -build-time if desired, see *Note Build Options::. - - -File: gmp.info, Node: Reentrancy, Next: Useful Macros and Constants, Prev: Memory Management, Up: GMP Basics - -3.7 Reentrancy -============== - -GMP is reentrant and thread-safe, with some exceptions: - - * If configured with `--enable-alloca=malloc-notreentrant' (or with - `--enable-alloca=notreentrant' when `alloca' is not available), - then naturally GMP is not reentrant. - - * `mpf_set_default_prec' and `mpf_init' use a global variable for the - selected precision. `mpf_init2' can be used instead, and in the - C++ interface an explicit precision to the `mpf_class' constructor. - - * `mpz_random' and the other old random number functions use a global - random state and are hence not reentrant. The newer random number - functions that accept a `gmp_randstate_t' parameter can be used - instead. - - * `gmp_randinit' (obsolete) returns an error indication through a - global variable, which is not thread safe. Applications are - advised to use `gmp_randinit_default' or `gmp_randinit_lc_2exp' - instead. - - * `mp_set_memory_functions' uses global variables to store the - selected memory allocation functions. - - * If the memory allocation functions set by a call to - `mp_set_memory_functions' (or `malloc' and friends by default) are - not reentrant, then GMP will not be reentrant either. - - * If the standard I/O functions such as `fwrite' are not reentrant - then the GMP I/O functions using them will not be reentrant either. - - * It's safe for two threads to read from the same GMP variable - simultaneously, but it's not safe for one to read while another - might be writing, nor for two threads to write simultaneously. - It's not safe for two threads to generate a random number from the - same `gmp_randstate_t' simultaneously, since this involves an - update of that variable. - - -File: gmp.info, Node: Useful Macros and Constants, Next: Compatibility with older versions, Prev: Reentrancy, Up: GMP Basics - -3.8 Useful Macros and Constants -=============================== - - -- Global Constant: const int mp_bits_per_limb - The number of bits per limb. - - -- Macro: __GNU_MP_VERSION - -- Macro: __GNU_MP_VERSION_MINOR - -- Macro: __GNU_MP_VERSION_PATCHLEVEL - The major and minor GMP version, and patch level, respectively, as - integers. For GMP i.j, these numbers will be i, j, and 0, - respectively. For GMP i.j.k, these numbers will be i, j, and k, - respectively. - - -- Global Constant: const char * const gmp_version - The GMP version number, as a null-terminated string, in the form - "i.j.k". This release is "6.1.0". Note that the format "i.j" was - used, before version 4.3.0, when k was zero. - - -- Macro: __GMP_CC - -- Macro: __GMP_CFLAGS - The compiler and compiler flags, respectively, used when compiling - GMP, as strings. - - -File: gmp.info, Node: Compatibility with older versions, Next: Demonstration Programs, Prev: Useful Macros and Constants, Up: GMP Basics - -3.9 Compatibility with older versions -===================================== - -This version of GMP is upwardly binary compatible with all 5.x, 4.x, -and 3.x versions, and upwardly compatible at the source level with all -2.x versions, with the following exceptions. - - * `mpn_gcd' had its source arguments swapped as of GMP 3.0, for - consistency with other `mpn' functions. - - * `mpf_get_prec' counted precision slightly differently in GMP 3.0 - and 3.0.1, but in 3.1 reverted to the 2.x style. - - * `mpn_bdivmod', documented as preliminary in GMP 4, has been - removed. - - There are a number of compatibility issues between GMP 1 and GMP 2 -that of course also apply when porting applications from GMP 1 to GMP -5. Please see the GMP 2 manual for details. - - -File: gmp.info, Node: Demonstration Programs, Next: Efficiency, Prev: Compatibility with older versions, Up: GMP Basics - -3.10 Demonstration programs -=========================== - -The `demos' subdirectory has some sample programs using GMP. These -aren't built or installed, but there's a `Makefile' with rules for them. -For instance, - - make pexpr - ./pexpr 68^975+10 - -The following programs are provided - - * `pexpr' is an expression evaluator, the program used on the GMP - web page. - - * The `calc' subdirectory has a similar but simpler evaluator using - `lex' and `yacc'. - - * The `expr' subdirectory is yet another expression evaluator, a - library designed for ease of use within a C program. See - `demos/expr/README' for more information. - - * `factorize' is a Pollard-Rho factorization program. - - * `isprime' is a command-line interface to the `mpz_probab_prime_p' - function. - - * `primes' counts or lists primes in an interval, using a sieve. - - * `qcn' is an example use of `mpz_kronecker_ui' to estimate quadratic - class numbers. - - * The `perl' subdirectory is a comprehensive perl interface to GMP. - See `demos/perl/INSTALL' for more information. Documentation is - in POD format in `demos/perl/GMP.pm'. - - As an aside, consideration has been given at various times to some -sort of expression evaluation within the main GMP library. Going -beyond something minimal quickly leads to matters like user-defined -functions, looping, fixnums for control variables, etc, which are -considered outside the scope of GMP (much closer to language -interpreters or compilers, *Note Language Bindings::.) Something -simple for program input convenience may yet be a possibility, a -combination of the `expr' demo and the `pexpr' tree back-end perhaps. -But for now the above evaluators are offered as illustrations. - - -File: gmp.info, Node: Efficiency, Next: Debugging, Prev: Demonstration Programs, Up: GMP Basics - -3.11 Efficiency -=============== - -Small Operands - On small operands, the time for function call overheads and memory - allocation can be significant in comparison to actual calculation. - This is unavoidable in a general purpose variable precision - library, although GMP attempts to be as efficient as it can on - both large and small operands. - -Static Linking - On some CPUs, in particular the x86s, the static `libgmp.a' should - be used for maximum speed, since the PIC code in the shared - `libgmp.so' will have a small overhead on each function call and - global data address. For many programs this will be - insignificant, but for long calculations there's a gain to be had. - -Initializing and Clearing - Avoid excessive initializing and clearing of variables, since this - can be quite time consuming, especially in comparison to otherwise - fast operations like addition. - - A language interpreter might want to keep a free list or stack of - initialized variables ready for use. It should be possible to - integrate something like that with a garbage collector too. - -Reallocations - An `mpz_t' or `mpq_t' variable used to hold successively increasing - values will have its memory repeatedly `realloc'ed, which could be - quite slow or could fragment memory, depending on the C library. - If an application can estimate the final size then `mpz_init2' or - `mpz_realloc2' can be called to allocate the necessary space from - the beginning (*note Initializing Integers::). - - It doesn't matter if a size set with `mpz_init2' or `mpz_realloc2' - is too small, since all functions will do a further reallocation - if necessary. Badly overestimating memory required will waste - space though. - -`2exp' Functions - It's up to an application to call functions like `mpz_mul_2exp' - when appropriate. General purpose functions like `mpz_mul' make - no attempt to identify powers of two or other special forms, - because such inputs will usually be very rare and testing every - time would be wasteful. - -`ui' and `si' Functions - The `ui' functions and the small number of `si' functions exist for - convenience and should be used where applicable. But if for - example an `mpz_t' contains a value that fits in an `unsigned - long' there's no need extract it and call a `ui' function, just - use the regular `mpz' function. - -In-Place Operations - `mpz_abs', `mpq_abs', `mpf_abs', `mpz_neg', `mpq_neg' and - `mpf_neg' are fast when used for in-place operations like - `mpz_abs(x,x)', since in the current implementation only a single - field of `x' needs changing. On suitable compilers (GCC for - instance) this is inlined too. - - `mpz_add_ui', `mpz_sub_ui', `mpf_add_ui' and `mpf_sub_ui' benefit - from an in-place operation like `mpz_add_ui(x,x,y)', since usually - only one or two limbs of `x' will need to be changed. The same - applies to the full precision `mpz_add' etc if `y' is small. If - `y' is big then cache locality may be helped, but that's all. - - `mpz_mul' is currently the opposite, a separate destination is - slightly better. A call like `mpz_mul(x,x,y)' will, unless `y' is - only one limb, make a temporary copy of `x' before forming the - result. Normally that copying will only be a tiny fraction of the - time for the multiply, so this is not a particularly important - consideration. - - `mpz_set', `mpq_set', `mpq_set_num', `mpf_set', etc, make no - attempt to recognise a copy of something to itself, so a call like - `mpz_set(x,x)' will be wasteful. Naturally that would never be - written deliberately, but if it might arise from two pointers to - the same object then a test to avoid it might be desirable. - - if (x != y) - mpz_set (x, y); - - Note that it's never worth introducing extra `mpz_set' calls just - to get in-place operations. If a result should go to a particular - variable then just direct it there and let GMP take care of data - movement. - -Divisibility Testing (Small Integers) - `mpz_divisible_ui_p' and `mpz_congruent_ui_p' are the best - functions for testing whether an `mpz_t' is divisible by an - individual small integer. They use an algorithm which is faster - than `mpz_tdiv_ui', but which gives no useful information about - the actual remainder, only whether it's zero (or a particular - value). - - However when testing divisibility by several small integers, it's - best to take a remainder modulo their product, to save - multi-precision operations. For instance to test whether a number - is divisible by any of 23, 29 or 31 take a remainder modulo - 23*29*31 = 20677 and then test that. - - The division functions like `mpz_tdiv_q_ui' which give a quotient - as well as a remainder are generally a little slower than the - remainder-only functions like `mpz_tdiv_ui'. If the quotient is - only rarely wanted then it's probably best to just take a - remainder and then go back and calculate the quotient if and when - it's wanted (`mpz_divexact_ui' can be used if the remainder is - zero). - -Rational Arithmetic - The `mpq' functions operate on `mpq_t' values with no common - factors in the numerator and denominator. Common factors are - checked-for and cast out as necessary. In general, cancelling - factors every time is the best approach since it minimizes the - sizes for subsequent operations. - - However, applications that know something about the factorization - of the values they're working with might be able to avoid some of - the GCDs used for canonicalization, or swap them for divisions. - For example when multiplying by a prime it's enough to check for - factors of it in the denominator instead of doing a full GCD. Or - when forming a big product it might be known that very little - cancellation will be possible, and so canonicalization can be left - to the end. - - The `mpq_numref' and `mpq_denref' macros give access to the - numerator and denominator to do things outside the scope of the - supplied `mpq' functions. *Note Applying Integer Functions::. - - The canonical form for rationals allows mixed-type `mpq_t' and - integer additions or subtractions to be done directly with - multiples of the denominator. This will be somewhat faster than - `mpq_add'. For example, - - /* mpq increment */ - mpz_add (mpq_numref(q), mpq_numref(q), mpq_denref(q)); - - /* mpq += unsigned long */ - mpz_addmul_ui (mpq_numref(q), mpq_denref(q), 123UL); - - /* mpq -= mpz */ - mpz_submul (mpq_numref(q), mpq_denref(q), z); - -Number Sequences - Functions like `mpz_fac_ui', `mpz_fib_ui' and `mpz_bin_uiui' are - designed for calculating isolated values. If a range of values is - wanted it's probably best to call to get a starting point and - iterate from there. - -Text Input/Output - Hexadecimal or octal are suggested for input or output in text - form. Power-of-2 bases like these can be converted much more - efficiently than other bases, like decimal. For big numbers - there's usually nothing of particular interest to be seen in the - digits, so the base doesn't matter much. - - Maybe we can hope octal will one day become the normal base for - everyday use, as proposed by King Charles XII of Sweden and later - reformers. - - -File: gmp.info, Node: Debugging, Next: Profiling, Prev: Efficiency, Up: GMP Basics - -3.12 Debugging -============== - -Stack Overflow - Depending on the system, a segmentation violation or bus error - might be the only indication of stack overflow. See - `--enable-alloca' choices in *Note Build Options::, for how to - address this. - - In new enough versions of GCC, `-fstack-check' may be able to - ensure an overflow is recognised by the system before too much - damage is done, or `-fstack-limit-symbol' or - `-fstack-limit-register' may be able to add checking if the system - itself doesn't do any (*note Options for Code Generation: - (gcc)Code Gen Options.). These options must be added to the - `CFLAGS' used in the GMP build (*note Build Options::), adding - them just to an application will have no effect. Note also - they're a slowdown, adding overhead to each function call and each - stack allocation. - -Heap Problems - The most likely cause of application problems with GMP is heap - corruption. Failing to `init' GMP variables will have - unpredictable effects, and corruption arising elsewhere in a - program may well affect GMP. Initializing GMP variables more than - once or failing to clear them will cause memory leaks. - - In all such cases a `malloc' debugger is recommended. On a GNU or - BSD system the standard C library `malloc' has some diagnostic - facilities, see *Note Allocation Debugging: (libc)Allocation - Debugging, or `man 3 malloc'. Other possibilities, in no - particular order, include - - `http://www.inf.ethz.ch/personal/biere/projects/ccmalloc/' - `http://dmalloc.com/' - `http://www.perens.com/FreeSoftware/' (electric fence) - `http://packages.debian.org/stable/devel/fda' - `http://www.gnupdate.org/components/leakbug/' - `http://people.redhat.com/~otaylor/memprof/' - `http://www.cbmamiga.demon.co.uk/mpatrol/' - - The GMP default allocation routines in `memory.c' also have a - simple sentinel scheme which can be enabled with `#define DEBUG' - in that file. This is mainly designed for detecting buffer - overruns during GMP development, but might find other uses. - -Stack Backtraces - On some systems the compiler options GMP uses by default can - interfere with debugging. In particular on x86 and 68k systems - `-fomit-frame-pointer' is used and this generally inhibits stack - backtracing. Recompiling without such options may help while - debugging, though the usual caveats about it potentially moving a - memory problem or hiding a compiler bug will apply. - -GDB, the GNU Debugger - A sample `.gdbinit' is included in the distribution, showing how - to call some undocumented dump functions to print GMP variables - from within GDB. Note that these functions shouldn't be used in - final application code since they're undocumented and may be - subject to incompatible changes in future versions of GMP. - -Source File Paths - GMP has multiple source files with the same name, in different - directories. For example `mpz', `mpq' and `mpf' each have an - `init.c'. If the debugger can't already determine the right one - it may help to build with absolute paths on each C file. One way - to do that is to use a separate object directory with an absolute - path to the source directory. - - cd /my/build/dir - /my/source/dir/gmp-6.1.0/configure - - This works via `VPATH', and might require GNU `make'. Alternately - it might be possible to change the `.c.lo' rules appropriately. - -Assertion Checking - The build option `--enable-assert' is available to add some - consistency checks to the library (see *Note Build Options::). - These are likely to be of limited value to most applications. - Assertion failures are just as likely to indicate memory - corruption as a library or compiler bug. - - Applications using the low-level `mpn' functions, however, will - benefit from `--enable-assert' since it adds checks on the - parameters of most such functions, many of which have subtle - restrictions on their usage. Note however that only the generic C - code has checks, not the assembly code, so `--disable-assembly' - should be used for maximum checking. - -Temporary Memory Checking - The build option `--enable-alloca=debug' arranges that each block - of temporary memory in GMP is allocated with a separate call to - `malloc' (or the allocation function set with - `mp_set_memory_functions'). - - This can help a malloc debugger detect accesses outside the - intended bounds, or detect memory not released. In a normal - build, on the other hand, temporary memory is allocated in blocks - which GMP divides up for its own use, or may be allocated with a - compiler builtin `alloca' which will go nowhere near any malloc - debugger hooks. - -Maximum Debuggability - To summarize the above, a GMP build for maximum debuggability - would be - - ./configure --disable-shared --enable-assert \ - --enable-alloca=debug --disable-assembly CFLAGS=-g - - For C++, add `--enable-cxx CXXFLAGS=-g'. - -Checker - The GCC checker (`https://savannah.nongnu.org/projects/checker/') - can be used with GMP. It contains a stub library which means GMP - applications compiled with checker can use a normal GMP build. - - A build of GMP with checking within GMP itself can be made. This - will run very very slowly. On GNU/Linux for example, - - ./configure --disable-assembly CC=checkergcc - - `--disable-assembly' must be used, since the GMP assembly code - doesn't support the checking scheme. The GMP C++ features cannot - be used, since current versions of checker (0.9.9.1) don't yet - support the standard C++ library. - -Valgrind - Valgrind (`http://valgrind.org/') is a memory checker for x86, - ARM, MIPS, PowerPC, and S/390. It translates and emulates machine - instructions to do strong checks for uninitialized data (at the - level of individual bits), memory accesses through bad pointers, - and memory leaks. - - Valgrind does not always support every possible instruction, in - particular ones recently added to an ISA. Valgrind might - therefore be incompatible with a recent GMP or even a less recent - GMP which is compiled using a recent GCC. - - GMP's assembly code sometimes promotes a read of the limbs to some - larger size, for efficiency. GMP will do this even at the start - and end of a multilimb operand, using naturally aligned operations - on the larger type. This may lead to benign reads outside of - allocated areas, triggering complaints from Valgrind. Valgrind's - option `--partial-loads-ok=yes' should help. - -Other Problems - Any suspected bug in GMP itself should be isolated to make sure - it's not an application problem, see *Note Reporting Bugs::. - - -File: gmp.info, Node: Profiling, Next: Autoconf, Prev: Debugging, Up: GMP Basics - -3.13 Profiling -============== - -Running a program under a profiler is a good way to find where it's -spending most time and where improvements can be best sought. The -profiling choices for a GMP build are as follows. - -`--disable-profiling' - The default is to add nothing special for profiling. - - It should be possible to just compile the mainline of a program - with `-p' and use `prof' to get a profile consisting of - timer-based sampling of the program counter. Most of the GMP - assembly code has the necessary symbol information. - - This approach has the advantage of minimizing interference with - normal program operation, but on most systems the resolution of - the sampling is quite low (10 milliseconds for instance), - requiring long runs to get accurate information. - -`--enable-profiling=prof' - Build with support for the system `prof', which means `-p' added - to the `CFLAGS'. - - This provides call counting in addition to program counter - sampling, which allows the most frequently called routines to be - identified, and an average time spent in each routine to be - determined. - - The x86 assembly code has support for this option, but on other - processors the assembly routines will be as if compiled without - `-p' and therefore won't appear in the call counts. - - On some systems, such as GNU/Linux, `-p' in fact means `-pg' and in - this case `--enable-profiling=gprof' described below should be used - instead. - -`--enable-profiling=gprof' - Build with support for `gprof', which means `-pg' added to the - `CFLAGS'. - - This provides call graph construction in addition to call counting - and program counter sampling, which makes it possible to count - calls coming from different locations. For example the number of - calls to `mpn_mul' from `mpz_mul' versus the number from - `mpf_mul'. The program counter sampling is still flat though, so - only a total time in `mpn_mul' would be accumulated, not a - separate amount for each call site. - - The x86 assembly code has support for this option, but on other - processors the assembly routines will be as if compiled without - `-pg' and therefore not be included in the call counts. - - On x86 and m68k systems `-pg' and `-fomit-frame-pointer' are - incompatible, so the latter is omitted from the default flags in - that case, which might result in poorer code generation. - - Incidentally, it should be possible to use the `gprof' program - with a plain `--enable-profiling=prof' build. But in that case - only the `gprof -p' flat profile and call counts can be expected - to be valid, not the `gprof -q' call graph. - -`--enable-profiling=instrument' - Build with the GCC option `-finstrument-functions' added to the - `CFLAGS' (*note Options for Code Generation: (gcc)Code Gen - Options.). - - This inserts special instrumenting calls at the start and end of - each function, allowing exact timing and full call graph - construction. - - This instrumenting is not normally a standard system feature and - will require support from an external library, such as - - `http://sourceforge.net/projects/fnccheck/' - - This should be included in `LIBS' during the GMP configure so that - test programs will link. For example, - - ./configure --enable-profiling=instrument LIBS=-lfc - - On a GNU system the C library provides dummy instrumenting - functions, so programs compiled with this option will link. In - this case it's only necessary to ensure the correct library is - added when linking an application. - - The x86 assembly code supports this option, but on other - processors the assembly routines will be as if compiled without - `-finstrument-functions' meaning time spent in them will - effectively be attributed to their caller. - - -File: gmp.info, Node: Autoconf, Next: Emacs, Prev: Profiling, Up: GMP Basics - -3.14 Autoconf -============= - -Autoconf based applications can easily check whether GMP is installed. -The only thing to be noted is that GMP library symbols from version 3 -onwards have prefixes like `__gmpz'. The following therefore would be -a simple test, - - AC_CHECK_LIB(gmp, __gmpz_init) - - This just uses the default `AC_CHECK_LIB' actions for found or not -found, but an application that must have GMP would want to generate an -error if not found. For example, - - AC_CHECK_LIB(gmp, __gmpz_init, , - [AC_MSG_ERROR([GNU MP not found, see https://gmplib.org/])]) - - If functions added in some particular version of GMP are required, -then one of those can be used when checking. For example `mpz_mul_si' -was added in GMP 3.1, - - AC_CHECK_LIB(gmp, __gmpz_mul_si, , - [AC_MSG_ERROR( - [GNU MP not found, or not 3.1 or up, see https://gmplib.org/])]) - - An alternative would be to test the version number in `gmp.h' using -say `AC_EGREP_CPP'. That would make it possible to test the exact -version, if some particular sub-minor release is known to be necessary. - - In general it's recommended that applications should simply demand a -new enough GMP rather than trying to provide supplements for features -not available in past versions. - - Occasionally an application will need or want to know the size of a -type at configuration or preprocessing time, not just with `sizeof' in -the code. This can be done in the normal way with `mp_limb_t' etc, but -GMP 4.0 or up is best for this, since prior versions needed certain -`-D' defines on systems using a `long long' limb. The following would -suit Autoconf 2.50 or up, - - AC_CHECK_SIZEOF(mp_limb_t, , [#include <gmp.h>]) - - -File: gmp.info, Node: Emacs, Prev: Autoconf, Up: GMP Basics - -3.15 Emacs -========== - -<C-h C-i> (`info-lookup-symbol') is a good way to find documentation on -C functions while editing (*note Info Documentation Lookup: (emacs)Info -Lookup.). - - The GMP manual can be included in such lookups by putting the -following in your `.emacs', - - (eval-after-load "info-look" - '(let ((mode-value (assoc 'c-mode (assoc 'symbol info-lookup-alist)))) - (setcar (nthcdr 3 mode-value) - (cons '("(gmp)Function Index" nil "^ -.* " "\\>") - (nth 3 mode-value))))) - - -File: gmp.info, Node: Reporting Bugs, Next: Integer Functions, Prev: GMP Basics, Up: Top - -4 Reporting Bugs -**************** - -If you think you have found a bug in the GMP library, please -investigate it and report it. We have made this library available to -you, and it is not too much to ask you to report the bugs you find. - - Before you report a bug, check it's not already addressed in *Note -Known Build Problems::, or perhaps *Note Notes for Particular -Systems::. You may also want to check `https://gmplib.org/' for -patches for this release. - - Please include the following in any report, - - * The GMP version number, and if pre-packaged or patched then say so. - - * A test program that makes it possible for us to reproduce the bug. - Include instructions on how to run the program. - - * A description of what is wrong. If the results are incorrect, in - what way. If you get a crash, say so. - - * If you get a crash, include a stack backtrace from the debugger if - it's informative (`where' in `gdb', or `$C' in `adb'). - - * Please do not send core dumps, executables or `strace's. - - * The `configure' options you used when building GMP, if any. - - * The output from `configure', as printed to stdout, with any - options used. - - * The name of the compiler and its version. For `gcc', get the - version with `gcc -v', otherwise perhaps `what `which cc`', or - similar. - - * The output from running `uname -a'. - - * The output from running `./config.guess', and from running - `./configfsf.guess' (might be the same). - - * If the bug is related to `configure', then the compressed contents - of `config.log'. - - * If the bug is related to an `asm' file not assembling, then the - contents of `config.m4' and the offending line or lines from the - temporary `mpn/tmp-<file>.s'. - - Please make an effort to produce a self-contained report, with -something definite that can be tested or debugged. Vague queries or -piecemeal messages are difficult to act on and don't help the -development effort. - - It is not uncommon that an observed problem is actually due to a bug -in the compiler; the GMP code tends to explore interesting corners in -compilers. - - If your bug report is good, we will do our best to help you get a -corrected version of the library; if the bug report is poor, we won't -do anything about it (except maybe ask you to send a better report). - - Send your report to: <gmp-bugs@gmplib.org>. - - If you think something in this manual is unclear, or downright -incorrect, or if the language needs to be improved, please send a note -to the same address. - - -File: gmp.info, Node: Integer Functions, Next: Rational Number Functions, Prev: Reporting Bugs, Up: Top - -5 Integer Functions -******************* - -This chapter describes the GMP functions for performing integer -arithmetic. These functions start with the prefix `mpz_'. - - GMP integers are stored in objects of type `mpz_t'. - -* Menu: - -* Initializing Integers:: -* Assigning Integers:: -* Simultaneous Integer Init & Assign:: -* Converting Integers:: -* Integer Arithmetic:: -* Integer Division:: -* Integer Exponentiation:: -* Integer Roots:: -* Number Theoretic Functions:: -* Integer Comparisons:: -* Integer Logic and Bit Fiddling:: -* I/O of Integers:: -* Integer Random Numbers:: -* Integer Import and Export:: -* Miscellaneous Integer Functions:: -* Integer Special Functions:: - - -File: gmp.info, Node: Initializing Integers, Next: Assigning Integers, Prev: Integer Functions, Up: Integer Functions - -5.1 Initialization Functions -============================ - -The functions for integer arithmetic assume that all integer objects are -initialized. You do that by calling the function `mpz_init'. For -example, - - { - mpz_t integ; - mpz_init (integ); - ... - mpz_add (integ, ...); - ... - mpz_sub (integ, ...); - - /* Unless the program is about to exit, do ... */ - mpz_clear (integ); - } - - As you can see, you can store new values any number of times, once an -object is initialized. - - -- Function: void mpz_init (mpz_t X) - Initialize X, and set its value to 0. - - -- Function: void mpz_inits (mpz_t X, ...) - Initialize a NULL-terminated list of `mpz_t' variables, and set - their values to 0. - - -- Function: void mpz_init2 (mpz_t X, mp_bitcnt_t N) - Initialize X, with space for N-bit numbers, and set its value to 0. - Calling this function instead of `mpz_init' or `mpz_inits' is never - necessary; reallocation is handled automatically by GMP when - needed. - - While N defines the initial space, X will grow automatically in the - normal way, if necessary, for subsequent values stored. - `mpz_init2' makes it possible to avoid such reallocations if a - maximum size is known in advance. - - In preparation for an operation, GMP often allocates one limb more - than ultimately needed. To make sure GMP will not perform - reallocation for X, you need to add the number of bits in - `mp_limb_t' to N. - - -- Function: void mpz_clear (mpz_t X) - Free the space occupied by X. Call this function for all `mpz_t' - variables when you are done with them. - - -- Function: void mpz_clears (mpz_t X, ...) - Free the space occupied by a NULL-terminated list of `mpz_t' - variables. - - -- Function: void mpz_realloc2 (mpz_t X, mp_bitcnt_t N) - Change the space allocated for X to N bits. The value in X is - preserved if it fits, or is set to 0 if not. - - Calling this function is never necessary; reallocation is handled - automatically by GMP when needed. But this function can be used - to increase the space for a variable in order to avoid repeated - automatic reallocations, or to decrease it to give memory back to - the heap. - - -File: gmp.info, Node: Assigning Integers, Next: Simultaneous Integer Init & Assign, Prev: Initializing Integers, Up: Integer Functions - -5.2 Assignment Functions -======================== - -These functions assign new values to already initialized integers -(*note Initializing Integers::). - - -- Function: void mpz_set (mpz_t ROP, const mpz_t OP) - -- Function: void mpz_set_ui (mpz_t ROP, unsigned long int OP) - -- Function: void mpz_set_si (mpz_t ROP, signed long int OP) - -- Function: void mpz_set_d (mpz_t ROP, double OP) - -- Function: void mpz_set_q (mpz_t ROP, const mpq_t OP) - -- Function: void mpz_set_f (mpz_t ROP, const mpf_t OP) - Set the value of ROP from OP. - - `mpz_set_d', `mpz_set_q' and `mpz_set_f' truncate OP to make it an - integer. - - -- Function: int mpz_set_str (mpz_t ROP, const char *STR, int BASE) - Set the value of ROP from STR, a null-terminated C string in base - BASE. White space is allowed in the string, and is simply ignored. - - The BASE may vary from 2 to 62, or if BASE is 0, then the leading - characters are used: `0x' and `0X' for hexadecimal, `0b' and `0B' - for binary, `0' for octal, or decimal otherwise. - - For bases up to 36, case is ignored; upper-case and lower-case - letters have the same value. For bases 37 to 62, upper-case - letter represent the usual 10..35 while lower-case letter - represent 36..61. - - This function returns 0 if the entire string is a valid number in - base BASE. Otherwise it returns -1. - - -- Function: void mpz_swap (mpz_t ROP1, mpz_t ROP2) - Swap the values ROP1 and ROP2 efficiently. - - -File: gmp.info, Node: Simultaneous Integer Init & Assign, Next: Converting Integers, Prev: Assigning Integers, Up: Integer Functions - -5.3 Combined Initialization and Assignment Functions -==================================================== - -For convenience, GMP provides a parallel series of initialize-and-set -functions which initialize the output and then store the value there. -These functions' names have the form `mpz_init_set...' - - Here is an example of using one: - - { - mpz_t pie; - mpz_init_set_str (pie, "3141592653589793238462643383279502884", 10); - ... - mpz_sub (pie, ...); - ... - mpz_clear (pie); - } - -Once the integer has been initialized by any of the `mpz_init_set...' -functions, it can be used as the source or destination operand for the -ordinary integer functions. Don't use an initialize-and-set function -on a variable already initialized! - - -- Function: void mpz_init_set (mpz_t ROP, const mpz_t OP) - -- Function: void mpz_init_set_ui (mpz_t ROP, unsigned long int OP) - -- Function: void mpz_init_set_si (mpz_t ROP, signed long int OP) - -- Function: void mpz_init_set_d (mpz_t ROP, double OP) - Initialize ROP with limb space and set the initial numeric value - from OP. - - -- Function: int mpz_init_set_str (mpz_t ROP, const char *STR, int - BASE) - Initialize ROP and set its value like `mpz_set_str' (see its - documentation above for details). - - If the string is a correct base BASE number, the function returns - 0; if an error occurs it returns -1. ROP is initialized even if - an error occurs. (I.e., you have to call `mpz_clear' for it.) - - -File: gmp.info, Node: Converting Integers, Next: Integer Arithmetic, Prev: Simultaneous Integer Init & Assign, Up: Integer Functions - -5.4 Conversion Functions -======================== - -This section describes functions for converting GMP integers to -standard C types. Functions for converting _to_ GMP integers are -described in *Note Assigning Integers:: and *Note I/O of Integers::. - - -- Function: unsigned long int mpz_get_ui (const mpz_t OP) - Return the value of OP as an `unsigned long'. - - If OP is too big to fit an `unsigned long' then just the least - significant bits that do fit are returned. The sign of OP is - ignored, only the absolute value is used. - - -- Function: signed long int mpz_get_si (const mpz_t OP) - If OP fits into a `signed long int' return the value of OP. - Otherwise return the least significant part of OP, with the same - sign as OP. - - If OP is too big to fit in a `signed long int', the returned - result is probably not very useful. To find out if the value will - fit, use the function `mpz_fits_slong_p'. - - -- Function: double mpz_get_d (const mpz_t OP) - Convert OP to a `double', truncating if necessary (i.e. rounding - towards zero). - - If the exponent from the conversion is too big, the result is - system dependent. An infinity is returned where available. A - hardware overflow trap may or may not occur. - - -- Function: double mpz_get_d_2exp (signed long int *EXP, const mpz_t - OP) - Convert OP to a `double', truncating if necessary (i.e. rounding - towards zero), and returning the exponent separately. - - The return value is in the range 0.5<=abs(D)<1 and the exponent is - stored to `*EXP'. D * 2^EXP is the (truncated) OP value. If OP - is zero, the return is 0.0 and 0 is stored to `*EXP'. - - This is similar to the standard C `frexp' function (*note - Normalization Functions: (libc)Normalization Functions.). - - -- Function: char * mpz_get_str (char *STR, int BASE, const mpz_t OP) - Convert OP to a string of digits in base BASE. The base argument - may vary from 2 to 62 or from -2 to -36. - - For BASE in the range 2..36, digits and lower-case letters are - used; for -2..-36, digits and upper-case letters are used; for - 37..62, digits, upper-case letters, and lower-case letters (in - that significance order) are used. - - If STR is `NULL', the result string is allocated using the current - allocation function (*note Custom Allocation::). The block will be - `strlen(str)+1' bytes, that being exactly enough for the string and - null-terminator. - - If STR is not `NULL', it should point to a block of storage large - enough for the result, that being `mpz_sizeinbase (OP, BASE) + 2'. - The two extra bytes are for a possible minus sign, and the - null-terminator. - - A pointer to the result string is returned, being either the - allocated block, or the given STR. - - -File: gmp.info, Node: Integer Arithmetic, Next: Integer Division, Prev: Converting Integers, Up: Integer Functions - -5.5 Arithmetic Functions -======================== - - -- Function: void mpz_add (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) - -- Function: void mpz_add_ui (mpz_t ROP, const mpz_t OP1, unsigned - long int OP2) - Set ROP to OP1 + OP2. - - -- Function: void mpz_sub (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) - -- Function: void mpz_sub_ui (mpz_t ROP, const mpz_t OP1, unsigned - long int OP2) - -- Function: void mpz_ui_sub (mpz_t ROP, unsigned long int OP1, const - mpz_t OP2) - Set ROP to OP1 - OP2. - - -- Function: void mpz_mul (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) - -- Function: void mpz_mul_si (mpz_t ROP, const mpz_t OP1, long int OP2) - -- Function: void mpz_mul_ui (mpz_t ROP, const mpz_t OP1, unsigned - long int OP2) - Set ROP to OP1 times OP2. - - -- Function: void mpz_addmul (mpz_t ROP, const mpz_t OP1, const mpz_t - OP2) - -- Function: void mpz_addmul_ui (mpz_t ROP, const mpz_t OP1, unsigned - long int OP2) - Set ROP to ROP + OP1 times OP2. - - -- Function: void mpz_submul (mpz_t ROP, const mpz_t OP1, const mpz_t - OP2) - -- Function: void mpz_submul_ui (mpz_t ROP, const mpz_t OP1, unsigned - long int OP2) - Set ROP to ROP - OP1 times OP2. - - -- Function: void mpz_mul_2exp (mpz_t ROP, const mpz_t OP1, - mp_bitcnt_t OP2) - Set ROP to OP1 times 2 raised to OP2. This operation can also be - defined as a left shift by OP2 bits. - - -- Function: void mpz_neg (mpz_t ROP, const mpz_t OP) - Set ROP to -OP. - - -- Function: void mpz_abs (mpz_t ROP, const mpz_t OP) - Set ROP to the absolute value of OP. - - -File: gmp.info, Node: Integer Division, Next: Integer Exponentiation, Prev: Integer Arithmetic, Up: Integer Functions - -5.6 Division Functions -====================== - -Division is undefined if the divisor is zero. Passing a zero divisor -to the division or modulo functions (including the modular powering -functions `mpz_powm' and `mpz_powm_ui'), will cause an intentional -division by zero. This lets a program handle arithmetic exceptions in -these functions the same way as for normal C `int' arithmetic. - - -- Function: void mpz_cdiv_q (mpz_t Q, const mpz_t N, const mpz_t D) - -- Function: void mpz_cdiv_r (mpz_t R, const mpz_t N, const mpz_t D) - -- Function: void mpz_cdiv_qr (mpz_t Q, mpz_t R, const mpz_t N, const - mpz_t D) - -- Function: unsigned long int mpz_cdiv_q_ui (mpz_t Q, const mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_cdiv_r_ui (mpz_t R, const mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_cdiv_qr_ui (mpz_t Q, mpz_t R, - const mpz_t N, unsigned long int D) - -- Function: unsigned long int mpz_cdiv_ui (const mpz_t N, - unsigned long int D) - -- Function: void mpz_cdiv_q_2exp (mpz_t Q, const mpz_t N, - mp_bitcnt_t B) - -- Function: void mpz_cdiv_r_2exp (mpz_t R, const mpz_t N, - mp_bitcnt_t B) - - -- Function: void mpz_fdiv_q (mpz_t Q, const mpz_t N, const mpz_t D) - -- Function: void mpz_fdiv_r (mpz_t R, const mpz_t N, const mpz_t D) - -- Function: void mpz_fdiv_qr (mpz_t Q, mpz_t R, const mpz_t N, const - mpz_t D) - -- Function: unsigned long int mpz_fdiv_q_ui (mpz_t Q, const mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_fdiv_r_ui (mpz_t R, const mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_fdiv_qr_ui (mpz_t Q, mpz_t R, - const mpz_t N, unsigned long int D) - -- Function: unsigned long int mpz_fdiv_ui (const mpz_t N, - unsigned long int D) - -- Function: void mpz_fdiv_q_2exp (mpz_t Q, const mpz_t N, - mp_bitcnt_t B) - -- Function: void mpz_fdiv_r_2exp (mpz_t R, const mpz_t N, - mp_bitcnt_t B) - - -- Function: void mpz_tdiv_q (mpz_t Q, const mpz_t N, const mpz_t D) - -- Function: void mpz_tdiv_r (mpz_t R, const mpz_t N, const mpz_t D) - -- Function: void mpz_tdiv_qr (mpz_t Q, mpz_t R, const mpz_t N, const - mpz_t D) - -- Function: unsigned long int mpz_tdiv_q_ui (mpz_t Q, const mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_tdiv_r_ui (mpz_t R, const mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_tdiv_qr_ui (mpz_t Q, mpz_t R, - const mpz_t N, unsigned long int D) - -- Function: unsigned long int mpz_tdiv_ui (const mpz_t N, - unsigned long int D) - -- Function: void mpz_tdiv_q_2exp (mpz_t Q, const mpz_t N, - mp_bitcnt_t B) - -- Function: void mpz_tdiv_r_2exp (mpz_t R, const mpz_t N, - mp_bitcnt_t B) - - Divide N by D, forming a quotient Q and/or remainder R. For the - `2exp' functions, D=2^B. The rounding is in three styles, each - suiting different applications. - - * `cdiv' rounds Q up towards +infinity, and R will have the - opposite sign to D. The `c' stands for "ceil". - - * `fdiv' rounds Q down towards -infinity, and R will have the - same sign as D. The `f' stands for "floor". - - * `tdiv' rounds Q towards zero, and R will have the same sign - as N. The `t' stands for "truncate". - - In all cases Q and R will satisfy N=Q*D+R, and R will satisfy - 0<=abs(R)<abs(D). - - The `q' functions calculate only the quotient, the `r' functions - only the remainder, and the `qr' functions calculate both. Note - that for `qr' the same variable cannot be passed for both Q and R, - or results will be unpredictable. - - For the `ui' variants the return value is the remainder, and in - fact returning the remainder is all the `div_ui' functions do. For - `tdiv' and `cdiv' the remainder can be negative, so for those the - return value is the absolute value of the remainder. - - For the `2exp' variants the divisor is 2^B. These functions are - implemented as right shifts and bit masks, but of course they - round the same as the other functions. - - For positive N both `mpz_fdiv_q_2exp' and `mpz_tdiv_q_2exp' are - simple bitwise right shifts. For negative N, `mpz_fdiv_q_2exp' is - effectively an arithmetic right shift treating N as twos complement - the same as the bitwise logical functions do, whereas - `mpz_tdiv_q_2exp' effectively treats N as sign and magnitude. - - -- Function: void mpz_mod (mpz_t R, const mpz_t N, const mpz_t D) - -- Function: unsigned long int mpz_mod_ui (mpz_t R, const mpz_t N, - unsigned long int D) - Set R to N `mod' D. The sign of the divisor is ignored; the - result is always non-negative. - - `mpz_mod_ui' is identical to `mpz_fdiv_r_ui' above, returning the - remainder as well as setting R. See `mpz_fdiv_ui' above if only - the return value is wanted. - - -- Function: void mpz_divexact (mpz_t Q, const mpz_t N, const mpz_t D) - -- Function: void mpz_divexact_ui (mpz_t Q, const mpz_t N, unsigned - long D) - Set Q to N/D. These functions produce correct results only when - it is known in advance that D divides N. - - These routines are much faster than the other division functions, - and are the best choice when exact division is known to occur, for - example reducing a rational to lowest terms. - - -- Function: int mpz_divisible_p (const mpz_t N, const mpz_t D) - -- Function: int mpz_divisible_ui_p (const mpz_t N, unsigned long int - D) - -- Function: int mpz_divisible_2exp_p (const mpz_t N, mp_bitcnt_t B) - Return non-zero if N is exactly divisible by D, or in the case of - `mpz_divisible_2exp_p' by 2^B. - - N is divisible by D if there exists an integer Q satisfying N = - Q*D. Unlike the other division functions, D=0 is accepted and - following the rule it can be seen that only 0 is considered - divisible by 0. - - -- Function: int mpz_congruent_p (const mpz_t N, const mpz_t C, const - mpz_t D) - -- Function: int mpz_congruent_ui_p (const mpz_t N, unsigned long int - C, unsigned long int D) - -- Function: int mpz_congruent_2exp_p (const mpz_t N, const mpz_t C, - mp_bitcnt_t B) - Return non-zero if N is congruent to C modulo D, or in the case of - `mpz_congruent_2exp_p' modulo 2^B. - - N is congruent to C mod D if there exists an integer Q satisfying - N = C + Q*D. Unlike the other division functions, D=0 is accepted - and following the rule it can be seen that N and C are considered - congruent mod 0 only when exactly equal. - - -File: gmp.info, Node: Integer Exponentiation, Next: Integer Roots, Prev: Integer Division, Up: Integer Functions - -5.7 Exponentiation Functions -============================ - - -- Function: void mpz_powm (mpz_t ROP, const mpz_t BASE, const mpz_t - EXP, const mpz_t MOD) - -- Function: void mpz_powm_ui (mpz_t ROP, const mpz_t BASE, unsigned - long int EXP, const mpz_t MOD) - Set ROP to (BASE raised to EXP) modulo MOD. - - Negative EXP is supported if an inverse BASE^-1 mod MOD exists - (see `mpz_invert' in *Note Number Theoretic Functions::). If an - inverse doesn't exist then a divide by zero is raised. - - -- Function: void mpz_powm_sec (mpz_t ROP, const mpz_t BASE, const - mpz_t EXP, const mpz_t MOD) - Set ROP to (BASE raised to EXP) modulo MOD. - - It is required that EXP > 0 and that MOD is odd. - - This function is designed to take the same time and have the same - cache access patterns for any two same-size arguments, assuming - that function arguments are placed at the same position and that - the machine state is identical upon function entry. This function - is intended for cryptographic purposes, where resilience to - side-channel attacks is desired. - - -- Function: void mpz_pow_ui (mpz_t ROP, const mpz_t BASE, unsigned - long int EXP) - -- Function: void mpz_ui_pow_ui (mpz_t ROP, unsigned long int BASE, - unsigned long int EXP) - Set ROP to BASE raised to EXP. The case 0^0 yields 1. - - -File: gmp.info, Node: Integer Roots, Next: Number Theoretic Functions, Prev: Integer Exponentiation, Up: Integer Functions - -5.8 Root Extraction Functions -============================= - - -- Function: int mpz_root (mpz_t ROP, const mpz_t OP, unsigned long - int N) - Set ROP to the truncated integer part of the Nth root of OP. - Return non-zero if the computation was exact, i.e., if OP is ROP - to the Nth power. - - -- Function: void mpz_rootrem (mpz_t ROOT, mpz_t REM, const mpz_t U, - unsigned long int N) - Set ROOT to the truncated integer part of the Nth root of U. Set - REM to the remainder, U-ROOT**N. - - -- Function: void mpz_sqrt (mpz_t ROP, const mpz_t OP) - Set ROP to the truncated integer part of the square root of OP. - - -- Function: void mpz_sqrtrem (mpz_t ROP1, mpz_t ROP2, const mpz_t OP) - Set ROP1 to the truncated integer part of the square root of OP, - like `mpz_sqrt'. Set ROP2 to the remainder OP-ROP1*ROP1, which - will be zero if OP is a perfect square. - - If ROP1 and ROP2 are the same variable, the results are undefined. - - -- Function: int mpz_perfect_power_p (const mpz_t OP) - Return non-zero if OP is a perfect power, i.e., if there exist - integers A and B, with B>1, such that OP equals A raised to the - power B. - - Under this definition both 0 and 1 are considered to be perfect - powers. Negative values of OP are accepted, but of course can - only be odd perfect powers. - - -- Function: int mpz_perfect_square_p (const mpz_t OP) - Return non-zero if OP is a perfect square, i.e., if the square - root of OP is an integer. Under this definition both 0 and 1 are - considered to be perfect squares. - - -File: gmp.info, Node: Number Theoretic Functions, Next: Integer Comparisons, Prev: Integer Roots, Up: Integer Functions - -5.9 Number Theoretic Functions -============================== - - -- Function: int mpz_probab_prime_p (const mpz_t N, int REPS) - Determine whether N is prime. Return 2 if N is definitely prime, - return 1 if N is probably prime (without being certain), or return - 0 if N is definitely non-prime. - - This function performs some trial divisions, then REPS Miller-Rabin - probabilistic primality tests. A higher REPS value will reduce the - chances of a non-prime being identified as "probably prime". A - composite number will be identified as a prime with a probability - of less than 4^(-REPS). Reasonable values of REPS are between 15 - and 50. - - -- Function: void mpz_nextprime (mpz_t ROP, const mpz_t OP) - Set ROP to the next prime greater than OP. - - This function uses a probabilistic algorithm to identify primes. - For practical purposes it's adequate, the chance of a composite - passing will be extremely small. - - -- Function: void mpz_gcd (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) - Set ROP to the greatest common divisor of OP1 and OP2. The result - is always positive even if one or both input operands are negative. - Except if both inputs are zero; then this function defines - gcd(0,0) = 0. - - -- Function: unsigned long int mpz_gcd_ui (mpz_t ROP, const mpz_t OP1, - unsigned long int OP2) - Compute the greatest common divisor of OP1 and OP2. If ROP is not - `NULL', store the result there. - - If the result is small enough to fit in an `unsigned long int', it - is returned. If the result does not fit, 0 is returned, and the - result is equal to the argument OP1. Note that the result will - always fit if OP2 is non-zero. - - -- Function: void mpz_gcdext (mpz_t G, mpz_t S, mpz_t T, const mpz_t - A, const mpz_t B) - Set G to the greatest common divisor of A and B, and in addition - set S and T to coefficients satisfying A*S + B*T = G. The value - in G is always positive, even if one or both of A and B are - negative (or zero if both inputs are zero). The values in S and T - are chosen such that normally, abs(S) < abs(B) / (2 G) and abs(T) - < abs(A) / (2 G), and these relations define S and T uniquely. - There are a few exceptional cases: - - If abs(A) = abs(B), then S = 0, T = sgn(B). - - Otherwise, S = sgn(A) if B = 0 or abs(B) = 2 G, and T = sgn(B) if - A = 0 or abs(A) = 2 G. - - In all cases, S = 0 if and only if G = abs(B), i.e., if B divides - A or A = B = 0. - - If T is `NULL' then that value is not computed. - - -- Function: void mpz_lcm (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) - -- Function: void mpz_lcm_ui (mpz_t ROP, const mpz_t OP1, unsigned - long OP2) - Set ROP to the least common multiple of OP1 and OP2. ROP is - always positive, irrespective of the signs of OP1 and OP2. ROP - will be zero if either OP1 or OP2 is zero. - - -- Function: int mpz_invert (mpz_t ROP, const mpz_t OP1, const mpz_t - OP2) - Compute the inverse of OP1 modulo OP2 and put the result in ROP. - If the inverse exists, the return value is non-zero and ROP will - satisfy 0 <= ROP < abs(OP2) (with ROP = 0 possible only when - abs(OP2) = 1, i.e., in the somewhat degenerate zero ring). If an - inverse doesn't exist the return value is zero and ROP is - undefined. The behaviour of this function is undefined when OP2 - is zero. - - -- Function: int mpz_jacobi (const mpz_t A, const mpz_t B) - Calculate the Jacobi symbol (A/B). This is defined only for B odd. - - -- Function: int mpz_legendre (const mpz_t A, const mpz_t P) - Calculate the Legendre symbol (A/P). This is defined only for P - an odd positive prime, and for such P it's identical to the Jacobi - symbol. - - -- Function: int mpz_kronecker (const mpz_t A, const mpz_t B) - -- Function: int mpz_kronecker_si (const mpz_t A, long B) - -- Function: int mpz_kronecker_ui (const mpz_t A, unsigned long B) - -- Function: int mpz_si_kronecker (long A, const mpz_t B) - -- Function: int mpz_ui_kronecker (unsigned long A, const mpz_t B) - Calculate the Jacobi symbol (A/B) with the Kronecker extension - (a/2)=(2/a) when a odd, or (a/2)=0 when a even. - - When B is odd the Jacobi symbol and Kronecker symbol are - identical, so `mpz_kronecker_ui' etc can be used for mixed - precision Jacobi symbols too. - - For more information see Henri Cohen section 1.4.2 (*note - References::), or any number theory textbook. See also the - example program `demos/qcn.c' which uses `mpz_kronecker_ui'. - - -- Function: mp_bitcnt_t mpz_remove (mpz_t ROP, const mpz_t OP, const - mpz_t F) - Remove all occurrences of the factor F from OP and store the - result in ROP. The return value is how many such occurrences were - removed. - - -- Function: void mpz_fac_ui (mpz_t ROP, unsigned long int N) - -- Function: void mpz_2fac_ui (mpz_t ROP, unsigned long int N) - -- Function: void mpz_mfac_uiui (mpz_t ROP, unsigned long int N, - unsigned long int M) - Set ROP to the factorial of N: `mpz_fac_ui' computes the plain - factorial N!, `mpz_2fac_ui' computes the double-factorial N!!, and - `mpz_mfac_uiui' the M-multi-factorial N!^(M). - - -- Function: void mpz_primorial_ui (mpz_t ROP, unsigned long int N) - Set ROP to the primorial of N, i.e. the product of all positive - prime numbers <=N. - - -- Function: void mpz_bin_ui (mpz_t ROP, const mpz_t N, unsigned long - int K) - -- Function: void mpz_bin_uiui (mpz_t ROP, unsigned long int N, - unsigned long int K) - Compute the binomial coefficient N over K and store the result in - ROP. Negative values of N are supported by `mpz_bin_ui', using - the identity bin(-n,k) = (-1)^k * bin(n+k-1,k), see Knuth volume 1 - section 1.2.6 part G. - - -- Function: void mpz_fib_ui (mpz_t FN, unsigned long int N) - -- Function: void mpz_fib2_ui (mpz_t FN, mpz_t FNSUB1, unsigned long - int N) - `mpz_fib_ui' sets FN to to F[n], the N'th Fibonacci number. - `mpz_fib2_ui' sets FN to F[n], and FNSUB1 to F[n-1]. - - These functions are designed for calculating isolated Fibonacci - numbers. When a sequence of values is wanted it's best to start - with `mpz_fib2_ui' and iterate the defining F[n+1]=F[n]+F[n-1] or - similar. - - -- Function: void mpz_lucnum_ui (mpz_t LN, unsigned long int N) - -- Function: void mpz_lucnum2_ui (mpz_t LN, mpz_t LNSUB1, unsigned - long int N) - `mpz_lucnum_ui' sets LN to to L[n], the N'th Lucas number. - `mpz_lucnum2_ui' sets LN to L[n], and LNSUB1 to L[n-1]. - - These functions are designed for calculating isolated Lucas - numbers. When a sequence of values is wanted it's best to start - with `mpz_lucnum2_ui' and iterate the defining L[n+1]=L[n]+L[n-1] - or similar. - - The Fibonacci numbers and Lucas numbers are related sequences, so - it's never necessary to call both `mpz_fib2_ui' and - `mpz_lucnum2_ui'. The formulas for going from Fibonacci to Lucas - can be found in *Note Lucas Numbers Algorithm::, the reverse is - straightforward too. - - -File: gmp.info, Node: Integer Comparisons, Next: Integer Logic and Bit Fiddling, Prev: Number Theoretic Functions, Up: Integer Functions - -5.10 Comparison Functions -========================= - - -- Function: int mpz_cmp (const mpz_t OP1, const mpz_t OP2) - -- Function: int mpz_cmp_d (const mpz_t OP1, double OP2) - -- Macro: int mpz_cmp_si (const mpz_t OP1, signed long int OP2) - -- Macro: int mpz_cmp_ui (const mpz_t OP1, unsigned long int OP2) - Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero - if OP1 = OP2, or a negative value if OP1 < OP2. - - `mpz_cmp_ui' and `mpz_cmp_si' are macros and will evaluate their - arguments more than once. `mpz_cmp_d' can be called with an - infinity, but results are undefined for a NaN. - - -- Function: int mpz_cmpabs (const mpz_t OP1, const mpz_t OP2) - -- Function: int mpz_cmpabs_d (const mpz_t OP1, double OP2) - -- Function: int mpz_cmpabs_ui (const mpz_t OP1, unsigned long int OP2) - Compare the absolute values of OP1 and OP2. Return a positive - value if abs(OP1) > abs(OP2), zero if abs(OP1) = abs(OP2), or a - negative value if abs(OP1) < abs(OP2). - - `mpz_cmpabs_d' can be called with an infinity, but results are - undefined for a NaN. - - -- Macro: int mpz_sgn (const mpz_t OP) - Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. - - This function is actually implemented as a macro. It evaluates - its argument multiple times. - - -File: gmp.info, Node: Integer Logic and Bit Fiddling, Next: I/O of Integers, Prev: Integer Comparisons, Up: Integer Functions - -5.11 Logical and Bit Manipulation Functions -=========================================== - -These functions behave as if twos complement arithmetic were used -(although sign-magnitude is the actual implementation). The least -significant bit is number 0. - - -- Function: void mpz_and (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) - Set ROP to OP1 bitwise-and OP2. - - -- Function: void mpz_ior (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) - Set ROP to OP1 bitwise inclusive-or OP2. - - -- Function: void mpz_xor (mpz_t ROP, const mpz_t OP1, const mpz_t OP2) - Set ROP to OP1 bitwise exclusive-or OP2. - - -- Function: void mpz_com (mpz_t ROP, const mpz_t OP) - Set ROP to the one's complement of OP. - - -- Function: mp_bitcnt_t mpz_popcount (const mpz_t OP) - If OP>=0, return the population count of OP, which is the number - of 1 bits in the binary representation. If OP<0, the number of 1s - is infinite, and the return value is the largest possible - `mp_bitcnt_t'. - - -- Function: mp_bitcnt_t mpz_hamdist (const mpz_t OP1, const mpz_t OP2) - If OP1 and OP2 are both >=0 or both <0, return the hamming - distance between the two operands, which is the number of bit - positions where OP1 and OP2 have different bit values. If one - operand is >=0 and the other <0 then the number of bits different - is infinite, and the return value is the largest possible - `mp_bitcnt_t'. - - -- Function: mp_bitcnt_t mpz_scan0 (const mpz_t OP, mp_bitcnt_t - STARTING_BIT) - -- Function: mp_bitcnt_t mpz_scan1 (const mpz_t OP, mp_bitcnt_t - STARTING_BIT) - Scan OP, starting from bit STARTING_BIT, towards more significant - bits, until the first 0 or 1 bit (respectively) is found. Return - the index of the found bit. - - If the bit at STARTING_BIT is already what's sought, then - STARTING_BIT is returned. - - If there's no bit found, then the largest possible `mp_bitcnt_t' is - returned. This will happen in `mpz_scan0' past the end of a - negative number, or `mpz_scan1' past the end of a nonnegative - number. - - -- Function: void mpz_setbit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) - Set bit BIT_INDEX in ROP. - - -- Function: void mpz_clrbit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) - Clear bit BIT_INDEX in ROP. - - -- Function: void mpz_combit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) - Complement bit BIT_INDEX in ROP. - - -- Function: int mpz_tstbit (const mpz_t OP, mp_bitcnt_t BIT_INDEX) - Test bit BIT_INDEX in OP and return 0 or 1 accordingly. - - -File: gmp.info, Node: I/O of Integers, Next: Integer Random Numbers, Prev: Integer Logic and Bit Fiddling, Up: Integer Functions - -5.12 Input and Output Functions -=============================== - -Functions that perform input from a stdio stream, and functions that -output to a stdio stream, of `mpz' numbers. Passing a `NULL' pointer -for a STREAM argument to any of these functions will make them read from -`stdin' and write to `stdout', respectively. - - When using any of these functions, it is a good idea to include -`stdio.h' before `gmp.h', since that will allow `gmp.h' to define -prototypes for these functions. - - See also *Note Formatted Output:: and *Note Formatted Input::. - - -- Function: size_t mpz_out_str (FILE *STREAM, int BASE, const mpz_t - OP) - Output OP on stdio stream STREAM, as a string of digits in base - BASE. The base argument may vary from 2 to 62 or from -2 to -36. - - For BASE in the range 2..36, digits and lower-case letters are - used; for -2..-36, digits and upper-case letters are used; for - 37..62, digits, upper-case letters, and lower-case letters (in - that significance order) are used. - - Return the number of bytes written, or if an error occurred, - return 0. - - -- Function: size_t mpz_inp_str (mpz_t ROP, FILE *STREAM, int BASE) - Input a possibly white-space preceded string in base BASE from - stdio stream STREAM, and put the read integer in ROP. - - The BASE may vary from 2 to 62, or if BASE is 0, then the leading - characters are used: `0x' and `0X' for hexadecimal, `0b' and `0B' - for binary, `0' for octal, or decimal otherwise. - - For bases up to 36, case is ignored; upper-case and lower-case - letters have the same value. For bases 37 to 62, upper-case - letter represent the usual 10..35 while lower-case letter - represent 36..61. - - Return the number of bytes read, or if an error occurred, return 0. - - -- Function: size_t mpz_out_raw (FILE *STREAM, const mpz_t OP) - Output OP on stdio stream STREAM, in raw binary format. The - integer is written in a portable format, with 4 bytes of size - information, and that many bytes of limbs. Both the size and the - limbs are written in decreasing significance order (i.e., in - big-endian). - - The output can be read with `mpz_inp_raw'. - - Return the number of bytes written, or if an error occurred, - return 0. - - The output of this can not be read by `mpz_inp_raw' from GMP 1, - because of changes necessary for compatibility between 32-bit and - 64-bit machines. - - -- Function: size_t mpz_inp_raw (mpz_t ROP, FILE *STREAM) - Input from stdio stream STREAM in the format written by - `mpz_out_raw', and put the result in ROP. Return the number of - bytes read, or if an error occurred, return 0. - - This routine can read the output from `mpz_out_raw' also from GMP - 1, in spite of changes necessary for compatibility between 32-bit - and 64-bit machines. - - -File: gmp.info, Node: Integer Random Numbers, Next: Integer Import and Export, Prev: I/O of Integers, Up: Integer Functions - -5.13 Random Number Functions -============================ - -The random number functions of GMP come in two groups; older function -that rely on a global state, and newer functions that accept a state -parameter that is read and modified. Please see the *Note Random -Number Functions:: for more information on how to use and not to use -random number functions. - - -- Function: void mpz_urandomb (mpz_t ROP, gmp_randstate_t STATE, - mp_bitcnt_t N) - Generate a uniformly distributed random integer in the range 0 to - 2^N-1, inclusive. - - The variable STATE must be initialized by calling one of the - `gmp_randinit' functions (*Note Random State Initialization::) - before invoking this function. - - -- Function: void mpz_urandomm (mpz_t ROP, gmp_randstate_t STATE, - const mpz_t N) - Generate a uniform random integer in the range 0 to N-1, inclusive. - - The variable STATE must be initialized by calling one of the - `gmp_randinit' functions (*Note Random State Initialization::) - before invoking this function. - - -- Function: void mpz_rrandomb (mpz_t ROP, gmp_randstate_t STATE, - mp_bitcnt_t N) - Generate a random integer with long strings of zeros and ones in - the binary representation. Useful for testing functions and - algorithms, since this kind of random numbers have proven to be - more likely to trigger corner-case bugs. The random number will - be in the range 0 to 2^N-1, inclusive. - - The variable STATE must be initialized by calling one of the - `gmp_randinit' functions (*Note Random State Initialization::) - before invoking this function. - - -- Function: void mpz_random (mpz_t ROP, mp_size_t MAX_SIZE) - Generate a random integer of at most MAX_SIZE limbs. The generated - random number doesn't satisfy any particular requirements of - randomness. Negative random numbers are generated when MAX_SIZE - is negative. - - This function is obsolete. Use `mpz_urandomb' or `mpz_urandomm' - instead. - - -- Function: void mpz_random2 (mpz_t ROP, mp_size_t MAX_SIZE) - Generate a random integer of at most MAX_SIZE limbs, with long - strings of zeros and ones in the binary representation. Useful - for testing functions and algorithms, since this kind of random - numbers have proven to be more likely to trigger corner-case bugs. - Negative random numbers are generated when MAX_SIZE is negative. - - This function is obsolete. Use `mpz_rrandomb' instead. - - -File: gmp.info, Node: Integer Import and Export, Next: Miscellaneous Integer Functions, Prev: Integer Random Numbers, Up: Integer Functions - -5.14 Integer Import and Export -============================== - -`mpz_t' variables can be converted to and from arbitrary words of binary -data with the following functions. - - -- Function: void mpz_import (mpz_t ROP, size_t COUNT, int ORDER, - size_t SIZE, int ENDIAN, size_t NAILS, const void *OP) - Set ROP from an array of word data at OP. - - The parameters specify the format of the data. COUNT many words - are read, each SIZE bytes. ORDER can be 1 for most significant - word first or -1 for least significant first. Within each word - ENDIAN can be 1 for most significant byte first, -1 for least - significant first, or 0 for the native endianness of the host CPU. - The most significant NAILS bits of each word are skipped, this - can be 0 to use the full words. - - There is no sign taken from the data, ROP will simply be a positive - integer. An application can handle any sign itself, and apply it - for instance with `mpz_neg'. - - There are no data alignment restrictions on OP, any address is - allowed. - - Here's an example converting an array of `unsigned long' data, most - significant element first, and host byte order within each value. - - unsigned long a[20]; - /* Initialize Z and A */ - mpz_import (z, 20, 1, sizeof(a[0]), 0, 0, a); - - This example assumes the full `sizeof' bytes are used for data in - the given type, which is usually true, and certainly true for - `unsigned long' everywhere we know of. However on Cray vector - systems it may be noted that `short' and `int' are always stored - in 8 bytes (and with `sizeof' indicating that) but use only 32 or - 46 bits. The NAILS feature can account for this, by passing for - instance `8*sizeof(int)-INT_BIT'. - - -- Function: void * mpz_export (void *ROP, size_t *COUNTP, int ORDER, - size_t SIZE, int ENDIAN, size_t NAILS, const mpz_t OP) - Fill ROP with word data from OP. - - The parameters specify the format of the data produced. Each word - will be SIZE bytes and ORDER can be 1 for most significant word - first or -1 for least significant first. Within each word ENDIAN - can be 1 for most significant byte first, -1 for least significant - first, or 0 for the native endianness of the host CPU. The most - significant NAILS bits of each word are unused and set to zero, - this can be 0 to produce full words. - - The number of words produced is written to `*COUNTP', or COUNTP - can be `NULL' to discard the count. ROP must have enough space - for the data, or if ROP is `NULL' then a result array of the - necessary size is allocated using the current GMP allocation - function (*note Custom Allocation::). In either case the return - value is the destination used, either ROP or the allocated block. - - If OP is non-zero then the most significant word produced will be - non-zero. If OP is zero then the count returned will be zero and - nothing written to ROP. If ROP is `NULL' in this case, no block - is allocated, just `NULL' is returned. - - The sign of OP is ignored, just the absolute value is exported. An - application can use `mpz_sgn' to get the sign and handle it as - desired. (*note Integer Comparisons::) - - There are no data alignment restrictions on ROP, any address is - allowed. - - When an application is allocating space itself the required size - can be determined with a calculation like the following. Since - `mpz_sizeinbase' always returns at least 1, `count' here will be - at least one, which avoids any portability problems with - `malloc(0)', though if `z' is zero no space at all is actually - needed (or written). - - numb = 8*size - nail; - count = (mpz_sizeinbase (z, 2) + numb-1) / numb; - p = malloc (count * size); - - -File: gmp.info, Node: Miscellaneous Integer Functions, Next: Integer Special Functions, Prev: Integer Import and Export, Up: Integer Functions - -5.15 Miscellaneous Functions -============================ - - -- Function: int mpz_fits_ulong_p (const mpz_t OP) - -- Function: int mpz_fits_slong_p (const mpz_t OP) - -- Function: int mpz_fits_uint_p (const mpz_t OP) - -- Function: int mpz_fits_sint_p (const mpz_t OP) - -- Function: int mpz_fits_ushort_p (const mpz_t OP) - -- Function: int mpz_fits_sshort_p (const mpz_t OP) - Return non-zero iff the value of OP fits in an `unsigned long int', - `signed long int', `unsigned int', `signed int', `unsigned short - int', or `signed short int', respectively. Otherwise, return zero. - - -- Macro: int mpz_odd_p (const mpz_t OP) - -- Macro: int mpz_even_p (const mpz_t OP) - Determine whether OP is odd or even, respectively. Return - non-zero if yes, zero if no. These macros evaluate their argument - more than once. - - -- Function: size_t mpz_sizeinbase (const mpz_t OP, int BASE) - Return the size of OP measured in number of digits in the given - BASE. BASE can vary from 2 to 62. The sign of OP is ignored, - just the absolute value is used. The result will be either exact - or 1 too big. If BASE is a power of 2, the result is always - exact. If OP is zero the return value is always 1. - - This function can be used to determine the space required when - converting OP to a string. The right amount of allocation is - normally two more than the value returned by `mpz_sizeinbase', one - extra for a minus sign and one for the null-terminator. - - It will be noted that `mpz_sizeinbase(OP,2)' can be used to locate - the most significant 1 bit in OP, counting from 1. (Unlike the - bitwise functions which start from 0, *Note Logical and Bit - Manipulation Functions: Integer Logic and Bit Fiddling.) - - -File: gmp.info, Node: Integer Special Functions, Prev: Miscellaneous Integer Functions, Up: Integer Functions - -5.16 Special Functions -====================== - -The functions in this section are for various special purposes. Most -applications will not need them. - - -- Function: void mpz_array_init (mpz_t INTEGER_ARRAY, mp_size_t - ARRAY_SIZE, mp_size_t FIXED_NUM_BITS) - *This is an obsolete function. Do not use it.* - - -- Function: void * _mpz_realloc (mpz_t INTEGER, mp_size_t NEW_ALLOC) - Change the space for INTEGER to NEW_ALLOC limbs. The value in - INTEGER is preserved if it fits, or is set to 0 if not. The return - value is not useful to applications and should be ignored. - - `mpz_realloc2' is the preferred way to accomplish allocation - changes like this. `mpz_realloc2' and `_mpz_realloc' are the same - except that `_mpz_realloc' takes its size in limbs. - - -- Function: mp_limb_t mpz_getlimbn (const mpz_t OP, mp_size_t N) - Return limb number N from OP. The sign of OP is ignored, just the - absolute value is used. The least significant limb is number 0. - - `mpz_size' can be used to find how many limbs make up OP. - `mpz_getlimbn' returns zero if N is outside the range 0 to - `mpz_size(OP)-1'. - - -- Function: size_t mpz_size (const mpz_t OP) - Return the size of OP measured in number of limbs. If OP is zero, - the returned value will be zero. - - -- Function: const mp_limb_t * mpz_limbs_read (const mpz_t X) - Return a pointer to the limb array representing the absolute value - of X. The size of the array is `mpz_size(X)'. Intended for read - access only. - - -- Function: mp_limb_t * mpz_limbs_write (mpz_t X, mp_size_t N) - -- Function: mp_limb_t * mpz_limbs_modify (mpz_t X, mp_size_t N) - Return a pointer to the limb array, intended for write access. The - array is reallocated as needed, to make room for N limbs. Requires - N > 0. The `mpz_limbs_modify' function returns an array that holds - the old absolute value of X, while `mpz_limbs_write' may destroy - the old value and return an array with unspecified contents. - - -- Function: void mpz_limbs_finish (mpz_t X, mp_size_t S) - Updates the internal size field of X. Used after writing to the - limb array pointer returned by `mpz_limbs_write' or - `mpz_limbs_modify' is completed. The array should contain abs(S) - valid limbs, representing the new absolute value for X, and the - sign of X is taken from the sign of S. This function never - reallocates X, so the limb pointer remains valid. - - void foo (mpz_t x) - { - mp_size_t n, i; - mp_limb_t *xp; - - n = mpz_size (x); - xp = mpz_limbs_modify (x, 2*n); - for (i = 0; i < n; i++) - xp[n+i] = xp[n-1-i]; - mpz_limbs_finish (x, mpz_sgn (x) < 0 ? - 2*n : 2*n); - } - - -- Function: mpz_srcptr mpz_roinit_n (mpz_t X, const mp_limb_t *XP, - mp_size_t XS) - Special initialization of X, using the given limb array and size. - X should be treated as read-only: it can be passed safely as input - to any mpz function, but not as an output. The array XP must point - to at least a readable limb, its size is abs(XS), and the sign of - X is the sign of XS. For convenience, the function returns X, but - cast to a const pointer type. - - void foo (mpz_t x) - { - static const mp_limb_t y[3] = { 0x1, 0x2, 0x3 }; - mpz_t tmp; - mpz_add (x, x, mpz_roinit_n (tmp, y, 3)); - } - - -- Macro: mpz_t MPZ_ROINIT_N (mp_limb_t *XP, mp_size_t XS) - This macro expands to an initializer which can be assigned to an - mpz_t variable. The limb array XP must point to at least a - readable limb, moreover, unlike the `mpz_roinit_n' function, the - array must be normalized: if XS is non-zero, then `XP[abs(XS)-1]' - must be non-zero. Intended primarily for constant values. Using it - for non-constant values requires a C compiler supporting C99. - - void foo (mpz_t x) - { - static const mp_limb_t ya[3] = { 0x1, 0x2, 0x3 }; - static const mpz_t y = MPZ_ROINIT_N ((mp_limb_t *) ya, 3); - - mpz_add (x, x, y); - } - - -File: gmp.info, Node: Rational Number Functions, Next: Floating-point Functions, Prev: Integer Functions, Up: Top - -6 Rational Number Functions -*************************** - -This chapter describes the GMP functions for performing arithmetic on -rational numbers. These functions start with the prefix `mpq_'. - - Rational numbers are stored in objects of type `mpq_t'. - - All rational arithmetic functions assume operands have a canonical -form, and canonicalize their result. The canonical from means that the -denominator and the numerator have no common factors, and that the -denominator is positive. Zero has the unique representation 0/1. - - Pure assignment functions do not canonicalize the assigned variable. -It is the responsibility of the user to canonicalize the assigned -variable before any arithmetic operations are performed on that -variable. - - -- Function: void mpq_canonicalize (mpq_t OP) - Remove any factors that are common to the numerator and - denominator of OP, and make the denominator positive. - -* Menu: - -* Initializing Rationals:: -* Rational Conversions:: -* Rational Arithmetic:: -* Comparing Rationals:: -* Applying Integer Functions:: -* I/O of Rationals:: - - -File: gmp.info, Node: Initializing Rationals, Next: Rational Conversions, Prev: Rational Number Functions, Up: Rational Number Functions - -6.1 Initialization and Assignment Functions -=========================================== - - -- Function: void mpq_init (mpq_t X) - Initialize X and set it to 0/1. Each variable should normally - only be initialized once, or at least cleared out (using the - function `mpq_clear') between each initialization. - - -- Function: void mpq_inits (mpq_t X, ...) - Initialize a NULL-terminated list of `mpq_t' variables, and set - their values to 0/1. - - -- Function: void mpq_clear (mpq_t X) - Free the space occupied by X. Make sure to call this function for - all `mpq_t' variables when you are done with them. - - -- Function: void mpq_clears (mpq_t X, ...) - Free the space occupied by a NULL-terminated list of `mpq_t' - variables. - - -- Function: void mpq_set (mpq_t ROP, const mpq_t OP) - -- Function: void mpq_set_z (mpq_t ROP, const mpz_t OP) - Assign ROP from OP. - - -- Function: void mpq_set_ui (mpq_t ROP, unsigned long int OP1, - unsigned long int OP2) - -- Function: void mpq_set_si (mpq_t ROP, signed long int OP1, unsigned - long int OP2) - Set the value of ROP to OP1/OP2. Note that if OP1 and OP2 have - common factors, ROP has to be passed to `mpq_canonicalize' before - any operations are performed on ROP. - - -- Function: int mpq_set_str (mpq_t ROP, const char *STR, int BASE) - Set ROP from a null-terminated string STR in the given BASE. - - The string can be an integer like "41" or a fraction like - "41/152". The fraction must be in canonical form (*note Rational - Number Functions::), or if not then `mpq_canonicalize' must be - called. - - The numerator and optional denominator are parsed the same as in - `mpz_set_str' (*note Assigning Integers::). White space is - allowed in the string, and is simply ignored. The BASE can vary - from 2 to 62, or if BASE is 0 then the leading characters are - used: `0x' or `0X' for hex, `0b' or `0B' for binary, `0' for - octal, or decimal otherwise. Note that this is done separately - for the numerator and denominator, so for instance `0xEF/100' is - 239/100, whereas `0xEF/0x100' is 239/256. - - The return value is 0 if the entire string is a valid number, or - -1 if not. - - -- Function: void mpq_swap (mpq_t ROP1, mpq_t ROP2) - Swap the values ROP1 and ROP2 efficiently. - - -File: gmp.info, Node: Rational Conversions, Next: Rational Arithmetic, Prev: Initializing Rationals, Up: Rational Number Functions - -6.2 Conversion Functions -======================== - - -- Function: double mpq_get_d (const mpq_t OP) - Convert OP to a `double', truncating if necessary (i.e. rounding - towards zero). - - If the exponent from the conversion is too big or too small to fit - a `double' then the result is system dependent. For too big an - infinity is returned when available. For too small 0.0 is - normally returned. Hardware overflow, underflow and denorm traps - may or may not occur. - - -- Function: void mpq_set_d (mpq_t ROP, double OP) - -- Function: void mpq_set_f (mpq_t ROP, const mpf_t OP) - Set ROP to the value of OP. There is no rounding, this conversion - is exact. - - -- Function: char * mpq_get_str (char *STR, int BASE, const mpq_t OP) - Convert OP to a string of digits in base BASE. The base may vary - from 2 to 36. The string will be of the form `num/den', or if the - denominator is 1 then just `num'. - - If STR is `NULL', the result string is allocated using the current - allocation function (*note Custom Allocation::). The block will be - `strlen(str)+1' bytes, that being exactly enough for the string and - null-terminator. - - If STR is not `NULL', it should point to a block of storage large - enough for the result, that being - - mpz_sizeinbase (mpq_numref(OP), BASE) - + mpz_sizeinbase (mpq_denref(OP), BASE) + 3 - - The three extra bytes are for a possible minus sign, possible - slash, and the null-terminator. - - A pointer to the result string is returned, being either the - allocated block, or the given STR. - - -File: gmp.info, Node: Rational Arithmetic, Next: Comparing Rationals, Prev: Rational Conversions, Up: Rational Number Functions - -6.3 Arithmetic Functions -======================== - - -- Function: void mpq_add (mpq_t SUM, const mpq_t ADDEND1, const mpq_t - ADDEND2) - Set SUM to ADDEND1 + ADDEND2. - - -- Function: void mpq_sub (mpq_t DIFFERENCE, const mpq_t MINUEND, - const mpq_t SUBTRAHEND) - Set DIFFERENCE to MINUEND - SUBTRAHEND. - - -- Function: void mpq_mul (mpq_t PRODUCT, const mpq_t MULTIPLIER, - const mpq_t MULTIPLICAND) - Set PRODUCT to MULTIPLIER times MULTIPLICAND. - - -- Function: void mpq_mul_2exp (mpq_t ROP, const mpq_t OP1, - mp_bitcnt_t OP2) - Set ROP to OP1 times 2 raised to OP2. - - -- Function: void mpq_div (mpq_t QUOTIENT, const mpq_t DIVIDEND, const - mpq_t DIVISOR) - Set QUOTIENT to DIVIDEND/DIVISOR. - - -- Function: void mpq_div_2exp (mpq_t ROP, const mpq_t OP1, - mp_bitcnt_t OP2) - Set ROP to OP1 divided by 2 raised to OP2. - - -- Function: void mpq_neg (mpq_t NEGATED_OPERAND, const mpq_t OPERAND) - Set NEGATED_OPERAND to -OPERAND. - - -- Function: void mpq_abs (mpq_t ROP, const mpq_t OP) - Set ROP to the absolute value of OP. - - -- Function: void mpq_inv (mpq_t INVERTED_NUMBER, const mpq_t NUMBER) - Set INVERTED_NUMBER to 1/NUMBER. If the new denominator is zero, - this routine will divide by zero. - - -File: gmp.info, Node: Comparing Rationals, Next: Applying Integer Functions, Prev: Rational Arithmetic, Up: Rational Number Functions - -6.4 Comparison Functions -======================== - - -- Function: int mpq_cmp (const mpq_t OP1, const mpq_t OP2) - -- Function: int mpq_cmp_z (const mpq_t OP1, const mpz_t OP2) - Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero - if OP1 = OP2, and a negative value if OP1 < OP2. - - To determine if two rationals are equal, `mpq_equal' is faster than - `mpq_cmp'. - - -- Macro: int mpq_cmp_ui (const mpq_t OP1, unsigned long int NUM2, - unsigned long int DEN2) - -- Macro: int mpq_cmp_si (const mpq_t OP1, long int NUM2, unsigned - long int DEN2) - Compare OP1 and NUM2/DEN2. Return a positive value if OP1 > - NUM2/DEN2, zero if OP1 = NUM2/DEN2, and a negative value if OP1 < - NUM2/DEN2. - - NUM2 and DEN2 are allowed to have common factors. - - These functions are implemented as a macros and evaluate their - arguments multiple times. - - -- Macro: int mpq_sgn (const mpq_t OP) - Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. - - This function is actually implemented as a macro. It evaluates its - argument multiple times. - - -- Function: int mpq_equal (const mpq_t OP1, const mpq_t OP2) - Return non-zero if OP1 and OP2 are equal, zero if they are - non-equal. Although `mpq_cmp' can be used for the same purpose, - this function is much faster. - - -File: gmp.info, Node: Applying Integer Functions, Next: I/O of Rationals, Prev: Comparing Rationals, Up: Rational Number Functions - -6.5 Applying Integer Functions to Rationals -=========================================== - -The set of `mpq' functions is quite small. In particular, there are few -functions for either input or output. The following functions give -direct access to the numerator and denominator of an `mpq_t'. - - Note that if an assignment to the numerator and/or denominator could -take an `mpq_t' out of the canonical form described at the start of -this chapter (*note Rational Number Functions::) then -`mpq_canonicalize' must be called before any other `mpq' functions are -applied to that `mpq_t'. - - -- Macro: mpz_t mpq_numref (const mpq_t OP) - -- Macro: mpz_t mpq_denref (const mpq_t OP) - Return a reference to the numerator and denominator of OP, - respectively. The `mpz' functions can be used on the result of - these macros. - - -- Function: void mpq_get_num (mpz_t NUMERATOR, const mpq_t RATIONAL) - -- Function: void mpq_get_den (mpz_t DENOMINATOR, const mpq_t RATIONAL) - -- Function: void mpq_set_num (mpq_t RATIONAL, const mpz_t NUMERATOR) - -- Function: void mpq_set_den (mpq_t RATIONAL, const mpz_t DENOMINATOR) - Get or set the numerator or denominator of a rational. These - functions are equivalent to calling `mpz_set' with an appropriate - `mpq_numref' or `mpq_denref'. Direct use of `mpq_numref' or - `mpq_denref' is recommended instead of these functions. - - -File: gmp.info, Node: I/O of Rationals, Prev: Applying Integer Functions, Up: Rational Number Functions - -6.6 Input and Output Functions -============================== - -Functions that perform input from a stdio stream, and functions that -output to a stdio stream, of `mpq' numbers. Passing a `NULL' pointer -for a STREAM argument to any of these functions will make them read from -`stdin' and write to `stdout', respectively. - - When using any of these functions, it is a good idea to include -`stdio.h' before `gmp.h', since that will allow `gmp.h' to define -prototypes for these functions. - - See also *Note Formatted Output:: and *Note Formatted Input::. - - -- Function: size_t mpq_out_str (FILE *STREAM, int BASE, const mpq_t - OP) - Output OP on stdio stream STREAM, as a string of digits in base - BASE. The base may vary from 2 to 36. Output is in the form - `num/den' or if the denominator is 1 then just `num'. - - Return the number of bytes written, or if an error occurred, - return 0. - - -- Function: size_t mpq_inp_str (mpq_t ROP, FILE *STREAM, int BASE) - Read a string of digits from STREAM and convert them to a rational - in ROP. Any initial white-space characters are read and - discarded. Return the number of characters read (including white - space), or 0 if a rational could not be read. - - The input can be a fraction like `17/63' or just an integer like - `123'. Reading stops at the first character not in this form, and - white space is not permitted within the string. If the input - might not be in canonical form, then `mpq_canonicalize' must be - called (*note Rational Number Functions::). - - The BASE can be between 2 and 36, or can be 0 in which case the - leading characters of the string determine the base, `0x' or `0X' - for hexadecimal, `0' for octal, or decimal otherwise. The leading - characters are examined separately for the numerator and - denominator of a fraction, so for instance `0x10/11' is 16/11, - whereas `0x10/0x11' is 16/17. - - -File: gmp.info, Node: Floating-point Functions, Next: Low-level Functions, Prev: Rational Number Functions, Up: Top - -7 Floating-point Functions -************************** - -GMP floating point numbers are stored in objects of type `mpf_t' and -functions operating on them have an `mpf_' prefix. - - The mantissa of each float has a user-selectable precision, in -practice only limited by available memory. Each variable has its own -precision, and that can be increased or decreased at any time. This -selectable precision is a minimum value, GMP rounds it up to a whole -limb. - - The accuracy of a calculation is determined by the priorly set -precision of the destination variable and the numeric values of the -input variables. Input variables' set precisions do not affect -calculations (except indirectly as their values might have been -affected when they were assigned). - - The exponent of each float has fixed precision, one machine word on -most systems. In the current implementation the exponent is a count of -limbs, so for example on a 32-bit system this means a range of roughly -2^-68719476768 to 2^68719476736, or on a 64-bit system this will be -much greater. Note however that `mpf_get_str' can only return an -exponent which fits an `mp_exp_t' and currently `mpf_set_str' doesn't -accept exponents bigger than a `long'. - - Each variable keeps track of the mantissa data actually in use. -This means that if a float is exactly represented in only a few bits -then only those bits will be used in a calculation, even if the -variable's selected precision is high. This is a performance -optimization; it does not affect the numeric results. - - Internally, GMP sometimes calculates with higher precision than that -of the destination variable in order to limit errors. Final results -are always truncated to the destination variable's precision. - - The mantissa is stored in binary. One consequence of this is that -decimal fractions like 0.1 cannot be represented exactly. The same is -true of plain IEEE `double' floats. This makes both highly unsuitable -for calculations involving money or other values that should be exact -decimal fractions. (Suitably scaled integers, or perhaps rationals, -are better choices.) - - The `mpf' functions and variables have no special notion of infinity -or not-a-number, and applications must take care not to overflow the -exponent or results will be unpredictable. - - Note that the `mpf' functions are _not_ intended as a smooth -extension to IEEE P754 arithmetic. In particular results obtained on -one computer often differ from the results on a computer with a -different word size. - - New projects should consider using the GMP extension library MPFR -(`http://mpfr.org') instead. MPFR provides well-defined precision and -accurate rounding, and thereby naturally extends IEEE P754. - -* Menu: - -* Initializing Floats:: -* Assigning Floats:: -* Simultaneous Float Init & Assign:: -* Converting Floats:: -* Float Arithmetic:: -* Float Comparison:: -* I/O of Floats:: -* Miscellaneous Float Functions:: - - -File: gmp.info, Node: Initializing Floats, Next: Assigning Floats, Prev: Floating-point Functions, Up: Floating-point Functions - -7.1 Initialization Functions -============================ - - -- Function: void mpf_set_default_prec (mp_bitcnt_t PREC) - Set the default precision to be *at least* PREC bits. All - subsequent calls to `mpf_init' will use this precision, but - previously initialized variables are unaffected. - - -- Function: mp_bitcnt_t mpf_get_default_prec (void) - Return the default precision actually used. - - An `mpf_t' object must be initialized before storing the first value -in it. The functions `mpf_init' and `mpf_init2' are used for that -purpose. - - -- Function: void mpf_init (mpf_t X) - Initialize X to 0. Normally, a variable should be initialized - once only or at least be cleared, using `mpf_clear', between - initializations. The precision of X is undefined unless a default - precision has already been established by a call to - `mpf_set_default_prec'. - - -- Function: void mpf_init2 (mpf_t X, mp_bitcnt_t PREC) - Initialize X to 0 and set its precision to be *at least* PREC - bits. Normally, a variable should be initialized once only or at - least be cleared, using `mpf_clear', between initializations. - - -- Function: void mpf_inits (mpf_t X, ...) - Initialize a NULL-terminated list of `mpf_t' variables, and set - their values to 0. The precision of the initialized variables is - undefined unless a default precision has already been established - by a call to `mpf_set_default_prec'. - - -- Function: void mpf_clear (mpf_t X) - Free the space occupied by X. Make sure to call this function for - all `mpf_t' variables when you are done with them. - - -- Function: void mpf_clears (mpf_t X, ...) - Free the space occupied by a NULL-terminated list of `mpf_t' - variables. - - Here is an example on how to initialize floating-point variables: - { - mpf_t x, y; - mpf_init (x); /* use default precision */ - mpf_init2 (y, 256); /* precision _at least_ 256 bits */ - ... - /* Unless the program is about to exit, do ... */ - mpf_clear (x); - mpf_clear (y); - } - - The following three functions are useful for changing the precision -during a calculation. A typical use would be for adjusting the -precision gradually in iterative algorithms like Newton-Raphson, making -the computation precision closely match the actual accurate part of the -numbers. - - -- Function: mp_bitcnt_t mpf_get_prec (const mpf_t OP) - Return the current precision of OP, in bits. - - -- Function: void mpf_set_prec (mpf_t ROP, mp_bitcnt_t PREC) - Set the precision of ROP to be *at least* PREC bits. The value in - ROP will be truncated to the new precision. - - This function requires a call to `realloc', and so should not be - used in a tight loop. - - -- Function: void mpf_set_prec_raw (mpf_t ROP, mp_bitcnt_t PREC) - Set the precision of ROP to be *at least* PREC bits, without - changing the memory allocated. - - PREC must be no more than the allocated precision for ROP, that - being the precision when ROP was initialized, or in the most recent - `mpf_set_prec'. - - The value in ROP is unchanged, and in particular if it had a higher - precision than PREC it will retain that higher precision. New - values written to ROP will use the new PREC. - - Before calling `mpf_clear' or the full `mpf_set_prec', another - `mpf_set_prec_raw' call must be made to restore ROP to its original - allocated precision. Failing to do so will have unpredictable - results. - - `mpf_get_prec' can be used before `mpf_set_prec_raw' to get the - original allocated precision. After `mpf_set_prec_raw' it - reflects the PREC value set. - - `mpf_set_prec_raw' is an efficient way to use an `mpf_t' variable - at different precisions during a calculation, perhaps to gradually - increase precision in an iteration, or just to use various - different precisions for different purposes during a calculation. - - -File: gmp.info, Node: Assigning Floats, Next: Simultaneous Float Init & Assign, Prev: Initializing Floats, Up: Floating-point Functions - -7.2 Assignment Functions -======================== - -These functions assign new values to already initialized floats (*note -Initializing Floats::). - - -- Function: void mpf_set (mpf_t ROP, const mpf_t OP) - -- Function: void mpf_set_ui (mpf_t ROP, unsigned long int OP) - -- Function: void mpf_set_si (mpf_t ROP, signed long int OP) - -- Function: void mpf_set_d (mpf_t ROP, double OP) - -- Function: void mpf_set_z (mpf_t ROP, const mpz_t OP) - -- Function: void mpf_set_q (mpf_t ROP, const mpq_t OP) - Set the value of ROP from OP. - - -- Function: int mpf_set_str (mpf_t ROP, const char *STR, int BASE) - Set the value of ROP from the string in STR. The string is of the - form `M@N' or, if the base is 10 or less, alternatively `MeN'. - `M' is the mantissa and `N' is the exponent. The mantissa is - always in the specified base. The exponent is either in the - specified base or, if BASE is negative, in decimal. The decimal - point expected is taken from the current locale, on systems - providing `localeconv'. - - The argument BASE may be in the ranges 2 to 62, or -62 to -2. - Negative values are used to specify that the exponent is in - decimal. - - For bases up to 36, case is ignored; upper-case and lower-case - letters have the same value; for bases 37 to 62, upper-case letter - represent the usual 10..35 while lower-case letter represent - 36..61. - - Unlike the corresponding `mpz' function, the base will not be - determined from the leading characters of the string if BASE is 0. - This is so that numbers like `0.23' are not interpreted as octal. - - White space is allowed in the string, and is simply ignored. - [This is not really true; white-space is ignored in the beginning - of the string and within the mantissa, but not in other places, - such as after a minus sign or in the exponent. We are considering - changing the definition of this function, making it fail when - there is any white-space in the input, since that makes a lot of - sense. Please tell us your opinion about this change. Do you - really want it to accept "3 14" as meaning 314 as it does now?] - - This function returns 0 if the entire string is a valid number in - base BASE. Otherwise it returns -1. - - -- Function: void mpf_swap (mpf_t ROP1, mpf_t ROP2) - Swap ROP1 and ROP2 efficiently. Both the values and the - precisions of the two variables are swapped. - - -File: gmp.info, Node: Simultaneous Float Init & Assign, Next: Converting Floats, Prev: Assigning Floats, Up: Floating-point Functions - -7.3 Combined Initialization and Assignment Functions -==================================================== - -For convenience, GMP provides a parallel series of initialize-and-set -functions which initialize the output and then store the value there. -These functions' names have the form `mpf_init_set...' - - Once the float has been initialized by any of the `mpf_init_set...' -functions, it can be used as the source or destination operand for the -ordinary float functions. Don't use an initialize-and-set function on -a variable already initialized! - - -- Function: void mpf_init_set (mpf_t ROP, const mpf_t OP) - -- Function: void mpf_init_set_ui (mpf_t ROP, unsigned long int OP) - -- Function: void mpf_init_set_si (mpf_t ROP, signed long int OP) - -- Function: void mpf_init_set_d (mpf_t ROP, double OP) - Initialize ROP and set its value from OP. - - The precision of ROP will be taken from the active default - precision, as set by `mpf_set_default_prec'. - - -- Function: int mpf_init_set_str (mpf_t ROP, const char *STR, int - BASE) - Initialize ROP and set its value from the string in STR. See - `mpf_set_str' above for details on the assignment operation. - - Note that ROP is initialized even if an error occurs. (I.e., you - have to call `mpf_clear' for it.) - - The precision of ROP will be taken from the active default - precision, as set by `mpf_set_default_prec'. - - -File: gmp.info, Node: Converting Floats, Next: Float Arithmetic, Prev: Simultaneous Float Init & Assign, Up: Floating-point Functions - -7.4 Conversion Functions -======================== - - -- Function: double mpf_get_d (const mpf_t OP) - Convert OP to a `double', truncating if necessary (i.e. rounding - towards zero). - - If the exponent in OP is too big or too small to fit a `double' - then the result is system dependent. For too big an infinity is - returned when available. For too small 0.0 is normally returned. - Hardware overflow, underflow and denorm traps may or may not occur. - - -- Function: double mpf_get_d_2exp (signed long int *EXP, const mpf_t - OP) - Convert OP to a `double', truncating if necessary (i.e. rounding - towards zero), and with an exponent returned separately. - - The return value is in the range 0.5<=abs(D)<1 and the exponent is - stored to `*EXP'. D * 2^EXP is the (truncated) OP value. If OP - is zero, the return is 0.0 and 0 is stored to `*EXP'. - - This is similar to the standard C `frexp' function (*note - Normalization Functions: (libc)Normalization Functions.). - - -- Function: long mpf_get_si (const mpf_t OP) - -- Function: unsigned long mpf_get_ui (const mpf_t OP) - Convert OP to a `long' or `unsigned long', truncating any fraction - part. If OP is too big for the return type, the result is - undefined. - - See also `mpf_fits_slong_p' and `mpf_fits_ulong_p' (*note - Miscellaneous Float Functions::). - - -- Function: char * mpf_get_str (char *STR, mp_exp_t *EXPPTR, int - BASE, size_t N_DIGITS, const mpf_t OP) - Convert OP to a string of digits in base BASE. The base argument - may vary from 2 to 62 or from -2 to -36. Up to N_DIGITS digits - will be generated. Trailing zeros are not returned. No more - digits than can be accurately represented by OP are ever - generated. If N_DIGITS is 0 then that accurate maximum number of - digits are generated. - - For BASE in the range 2..36, digits and lower-case letters are - used; for -2..-36, digits and upper-case letters are used; for - 37..62, digits, upper-case letters, and lower-case letters (in - that significance order) are used. - - If STR is `NULL', the result string is allocated using the current - allocation function (*note Custom Allocation::). The block will be - `strlen(str)+1' bytes, that being exactly enough for the string and - null-terminator. - - If STR is not `NULL', it should point to a block of N_DIGITS + 2 - bytes, that being enough for the mantissa, a possible minus sign, - and a null-terminator. When N_DIGITS is 0 to get all significant - digits, an application won't be able to know the space required, - and STR should be `NULL' in that case. - - The generated string is a fraction, with an implicit radix point - immediately to the left of the first digit. The applicable - exponent is written through the EXPPTR pointer. For example, the - number 3.1416 would be returned as string "31416" and exponent 1. - - When OP is zero, an empty string is produced and the exponent - returned is 0. - - A pointer to the result string is returned, being either the - allocated block or the given STR. - - -File: gmp.info, Node: Float Arithmetic, Next: Float Comparison, Prev: Converting Floats, Up: Floating-point Functions - -7.5 Arithmetic Functions -======================== - - -- Function: void mpf_add (mpf_t ROP, const mpf_t OP1, const mpf_t OP2) - -- Function: void mpf_add_ui (mpf_t ROP, const mpf_t OP1, unsigned - long int OP2) - Set ROP to OP1 + OP2. - - -- Function: void mpf_sub (mpf_t ROP, const mpf_t OP1, const mpf_t OP2) - -- Function: void mpf_ui_sub (mpf_t ROP, unsigned long int OP1, const - mpf_t OP2) - -- Function: void mpf_sub_ui (mpf_t ROP, const mpf_t OP1, unsigned - long int OP2) - Set ROP to OP1 - OP2. - - -- Function: void mpf_mul (mpf_t ROP, const mpf_t OP1, const mpf_t OP2) - -- Function: void mpf_mul_ui (mpf_t ROP, const mpf_t OP1, unsigned - long int OP2) - Set ROP to OP1 times OP2. - - Division is undefined if the divisor is zero, and passing a zero -divisor to the divide functions will make these functions intentionally -divide by zero. This lets the user handle arithmetic exceptions in -these functions in the same manner as other arithmetic exceptions. - - -- Function: void mpf_div (mpf_t ROP, const mpf_t OP1, const mpf_t OP2) - -- Function: void mpf_ui_div (mpf_t ROP, unsigned long int OP1, const - mpf_t OP2) - -- Function: void mpf_div_ui (mpf_t ROP, const mpf_t OP1, unsigned - long int OP2) - Set ROP to OP1/OP2. - - -- Function: void mpf_sqrt (mpf_t ROP, const mpf_t OP) - -- Function: void mpf_sqrt_ui (mpf_t ROP, unsigned long int OP) - Set ROP to the square root of OP. - - -- Function: void mpf_pow_ui (mpf_t ROP, const mpf_t OP1, unsigned - long int OP2) - Set ROP to OP1 raised to the power OP2. - - -- Function: void mpf_neg (mpf_t ROP, const mpf_t OP) - Set ROP to -OP. - - -- Function: void mpf_abs (mpf_t ROP, const mpf_t OP) - Set ROP to the absolute value of OP. - - -- Function: void mpf_mul_2exp (mpf_t ROP, const mpf_t OP1, - mp_bitcnt_t OP2) - Set ROP to OP1 times 2 raised to OP2. - - -- Function: void mpf_div_2exp (mpf_t ROP, const mpf_t OP1, - mp_bitcnt_t OP2) - Set ROP to OP1 divided by 2 raised to OP2. - - -File: gmp.info, Node: Float Comparison, Next: I/O of Floats, Prev: Float Arithmetic, Up: Floating-point Functions - -7.6 Comparison Functions -======================== - - -- Function: int mpf_cmp (const mpf_t OP1, const mpf_t OP2) - -- Function: int mpf_cmp_z (const mpf_t OP1, const mpz_t OP2) - -- Function: int mpf_cmp_d (const mpf_t OP1, double OP2) - -- Function: int mpf_cmp_ui (const mpf_t OP1, unsigned long int OP2) - -- Function: int mpf_cmp_si (const mpf_t OP1, signed long int OP2) - Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero - if OP1 = OP2, and a negative value if OP1 < OP2. - - `mpf_cmp_d' can be called with an infinity, but results are - undefined for a NaN. - - -- Function: int mpf_eq (const mpf_t OP1, const mpf_t OP2, mp_bitcnt_t - op3) - *This function is mathematically ill-defined and should not be - used.* - - Return non-zero if the first OP3 bits of OP1 and OP2 are equal, - zero otherwise. Note that numbers like e.g., 256 (binary - 100000000) and 255 (binary 11111111) will never be equal by this - function's measure, and furthermore that 0 will only be equal to - itself. - - -- Function: void mpf_reldiff (mpf_t ROP, const mpf_t OP1, const mpf_t - OP2) - Compute the relative difference between OP1 and OP2 and store the - result in ROP. This is abs(OP1-OP2)/OP1. - - -- Macro: int mpf_sgn (const mpf_t OP) - Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. - - This function is actually implemented as a macro. It evaluates - its argument multiple times. - - -File: gmp.info, Node: I/O of Floats, Next: Miscellaneous Float Functions, Prev: Float Comparison, Up: Floating-point Functions - -7.7 Input and Output Functions -============================== - -Functions that perform input from a stdio stream, and functions that -output to a stdio stream, of `mpf' numbers. Passing a `NULL' pointer -for a STREAM argument to any of these functions will make them read from -`stdin' and write to `stdout', respectively. - - When using any of these functions, it is a good idea to include -`stdio.h' before `gmp.h', since that will allow `gmp.h' to define -prototypes for these functions. - - See also *Note Formatted Output:: and *Note Formatted Input::. - - -- Function: size_t mpf_out_str (FILE *STREAM, int BASE, size_t - N_DIGITS, const mpf_t OP) - Print OP to STREAM, as a string of digits. Return the number of - bytes written, or if an error occurred, return 0. - - The mantissa is prefixed with an `0.' and is in the given BASE, - which may vary from 2 to 62 or from -2 to -36. An exponent is - then printed, separated by an `e', or if the base is greater than - 10 then by an `@'. The exponent is always in decimal. The - decimal point follows the current locale, on systems providing - `localeconv'. - - For BASE in the range 2..36, digits and lower-case letters are - used; for -2..-36, digits and upper-case letters are used; for - 37..62, digits, upper-case letters, and lower-case letters (in - that significance order) are used. - - Up to N_DIGITS will be printed from the mantissa, except that no - more digits than are accurately representable by OP will be - printed. N_DIGITS can be 0 to select that accurate maximum. - - -- Function: size_t mpf_inp_str (mpf_t ROP, FILE *STREAM, int BASE) - Read a string in base BASE from STREAM, and put the read float in - ROP. The string is of the form `M@N' or, if the base is 10 or - less, alternatively `MeN'. `M' is the mantissa and `N' is the - exponent. The mantissa is always in the specified base. The - exponent is either in the specified base or, if BASE is negative, - in decimal. The decimal point expected is taken from the current - locale, on systems providing `localeconv'. - - The argument BASE may be in the ranges 2 to 36, or -36 to -2. - Negative values are used to specify that the exponent is in - decimal. - - Unlike the corresponding `mpz' function, the base will not be - determined from the leading characters of the string if BASE is 0. - This is so that numbers like `0.23' are not interpreted as octal. - - Return the number of bytes read, or if an error occurred, return 0. - - -File: gmp.info, Node: Miscellaneous Float Functions, Prev: I/O of Floats, Up: Floating-point Functions - -7.8 Miscellaneous Functions -=========================== - - -- Function: void mpf_ceil (mpf_t ROP, const mpf_t OP) - -- Function: void mpf_floor (mpf_t ROP, const mpf_t OP) - -- Function: void mpf_trunc (mpf_t ROP, const mpf_t OP) - Set ROP to OP rounded to an integer. `mpf_ceil' rounds to the - next higher integer, `mpf_floor' to the next lower, and `mpf_trunc' - to the integer towards zero. - - -- Function: int mpf_integer_p (const mpf_t OP) - Return non-zero if OP is an integer. - - -- Function: int mpf_fits_ulong_p (const mpf_t OP) - -- Function: int mpf_fits_slong_p (const mpf_t OP) - -- Function: int mpf_fits_uint_p (const mpf_t OP) - -- Function: int mpf_fits_sint_p (const mpf_t OP) - -- Function: int mpf_fits_ushort_p (const mpf_t OP) - -- Function: int mpf_fits_sshort_p (const mpf_t OP) - Return non-zero if OP would fit in the respective C data type, when - truncated to an integer. - - -- Function: void mpf_urandomb (mpf_t ROP, gmp_randstate_t STATE, - mp_bitcnt_t NBITS) - Generate a uniformly distributed random float in ROP, such that 0 - <= ROP < 1, with NBITS significant bits in the mantissa or less if - the precision of ROP is smaller. - - The variable STATE must be initialized by calling one of the - `gmp_randinit' functions (*Note Random State Initialization::) - before invoking this function. - - -- Function: void mpf_random2 (mpf_t ROP, mp_size_t MAX_SIZE, mp_exp_t - EXP) - Generate a random float of at most MAX_SIZE limbs, with long - strings of zeros and ones in the binary representation. The - exponent of the number is in the interval -EXP to EXP (in limbs). - This function is useful for testing functions and algorithms, - since these kind of random numbers have proven to be more likely - to trigger corner-case bugs. Negative random numbers are - generated when MAX_SIZE is negative. - - -File: gmp.info, Node: Low-level Functions, Next: Random Number Functions, Prev: Floating-point Functions, Up: Top - -8 Low-level Functions -********************* - -This chapter describes low-level GMP functions, used to implement the -high-level GMP functions, but also intended for time-critical user code. - - These functions start with the prefix `mpn_'. - - The `mpn' functions are designed to be as fast as possible, *not* to -provide a coherent calling interface. The different functions have -somewhat similar interfaces, but there are variations that make them -hard to use. These functions do as little as possible apart from the -real multiple precision computation, so that no time is spent on things -that not all callers need. - - A source operand is specified by a pointer to the least significant -limb and a limb count. A destination operand is specified by just a -pointer. It is the responsibility of the caller to ensure that the -destination has enough space for storing the result. - - With this way of specifying operands, it is possible to perform -computations on subranges of an argument, and store the result into a -subrange of a destination. - - A common requirement for all functions is that each source area -needs at least one limb. No size argument may be zero. Unless -otherwise stated, in-place operations are allowed where source and -destination are the same, but not where they only partly overlap. - - The `mpn' functions are the base for the implementation of the -`mpz_', `mpf_', and `mpq_' functions. - - This example adds the number beginning at S1P and the number -beginning at S2P and writes the sum at DESTP. All areas have N limbs. - - cy = mpn_add_n (destp, s1p, s2p, n) - - It should be noted that the `mpn' functions make no attempt to -identify high or low zero limbs on their operands, or other special -forms. On random data such cases will be unlikely and it'd be wasteful -for every function to check every time. An application knowing -something about its data can take steps to trim or perhaps split its -calculations. - - -In the notation used below, a source operand is identified by the -pointer to the least significant limb, and the limb count in braces. -For example, {S1P, S1N}. - - -- Function: mp_limb_t mpn_add_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Add {S1P, N} and {S2P, N}, and write the N least significant limbs - of the result to RP. Return carry, either 0 or 1. - - This is the lowest-level function for addition. It is the - preferred function for addition, since it is written in assembly - for most CPUs. For addition of a variable to itself (i.e., S1P - equals S2P) use `mpn_lshift' with a count of 1 for optimal speed. - - -- Function: mp_limb_t mpn_add_1 (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N, mp_limb_t S2LIMB) - Add {S1P, N} and S2LIMB, and write the N least significant limbs - of the result to RP. Return carry, either 0 or 1. - - -- Function: mp_limb_t mpn_add (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) - Add {S1P, S1N} and {S2P, S2N}, and write the S1N least significant - limbs of the result to RP. Return carry, either 0 or 1. - - This function requires that S1N is greater than or equal to S2N. - - -- Function: mp_limb_t mpn_sub_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Subtract {S2P, N} from {S1P, N}, and write the N least significant - limbs of the result to RP. Return borrow, either 0 or 1. - - This is the lowest-level function for subtraction. It is the - preferred function for subtraction, since it is written in - assembly for most CPUs. - - -- Function: mp_limb_t mpn_sub_1 (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N, mp_limb_t S2LIMB) - Subtract S2LIMB from {S1P, N}, and write the N least significant - limbs of the result to RP. Return borrow, either 0 or 1. - - -- Function: mp_limb_t mpn_sub (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) - Subtract {S2P, S2N} from {S1P, S1N}, and write the S1N least - significant limbs of the result to RP. Return borrow, either 0 or - 1. - - This function requires that S1N is greater than or equal to S2N. - - -- Function: mp_limb_t mpn_neg (mp_limb_t *RP, const mp_limb_t *SP, - mp_size_t N) - Perform the negation of {SP, N}, and write the result to {RP, N}. - This is equivalent to calling `mpn_sub_n' with a N-limb zero - minuend and passing {SP, N} as subtrahend. Return borrow, either - 0 or 1. - - -- Function: void mpn_mul_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Multiply {S1P, N} and {S2P, N}, and write the 2*N-limb result to - RP. - - The destination has to have space for 2*N limbs, even if the - product's most significant limb is zero. No overlap is permitted - between the destination and either source. - - If the two input operands are the same, use `mpn_sqr'. - - -- Function: mp_limb_t mpn_mul (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) - Multiply {S1P, S1N} and {S2P, S2N}, and write the (S1N+S2N)-limb - result to RP. Return the most significant limb of the result. - - The destination has to have space for S1N + S2N limbs, even if the - product's most significant limb is zero. No overlap is permitted - between the destination and either source. - - This function requires that S1N is greater than or equal to S2N. - - -- Function: void mpn_sqr (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N) - Compute the square of {S1P, N} and write the 2*N-limb result to RP. - - The destination has to have space for 2N limbs, even if the - result's most significant limb is zero. No overlap is permitted - between the destination and the source. - - -- Function: mp_limb_t mpn_mul_1 (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N, mp_limb_t S2LIMB) - Multiply {S1P, N} by S2LIMB, and write the N least significant - limbs of the product to RP. Return the most significant limb of - the product. {S1P, N} and {RP, N} are allowed to overlap provided - RP <= S1P. - - This is a low-level function that is a building block for general - multiplication as well as other operations in GMP. It is written - in assembly for most CPUs. - - Don't call this function if S2LIMB is a power of 2; use - `mpn_lshift' with a count equal to the logarithm of S2LIMB - instead, for optimal speed. - - -- Function: mp_limb_t mpn_addmul_1 (mp_limb_t *RP, const mp_limb_t - *S1P, mp_size_t N, mp_limb_t S2LIMB) - Multiply {S1P, N} and S2LIMB, and add the N least significant - limbs of the product to {RP, N} and write the result to RP. - Return the most significant limb of the product, plus carry-out - from the addition. {S1P, N} and {RP, N} are allowed to overlap - provided RP <= S1P. - - This is a low-level function that is a building block for general - multiplication as well as other operations in GMP. It is written - in assembly for most CPUs. - - -- Function: mp_limb_t mpn_submul_1 (mp_limb_t *RP, const mp_limb_t - *S1P, mp_size_t N, mp_limb_t S2LIMB) - Multiply {S1P, N} and S2LIMB, and subtract the N least significant - limbs of the product from {RP, N} and write the result to RP. - Return the most significant limb of the product, plus borrow-out - from the subtraction. {S1P, N} and {RP, N} are allowed to overlap - provided RP <= S1P. - - This is a low-level function that is a building block for general - multiplication and division as well as other operations in GMP. - It is written in assembly for most CPUs. - - -- Function: void mpn_tdiv_qr (mp_limb_t *QP, mp_limb_t *RP, mp_size_t - QXN, const mp_limb_t *NP, mp_size_t NN, const mp_limb_t *DP, - mp_size_t DN) - Divide {NP, NN} by {DP, DN} and put the quotient at {QP, NN-DN+1} - and the remainder at {RP, DN}. The quotient is rounded towards 0. - - No overlap is permitted between arguments, except that NP might - equal RP. The dividend size NN must be greater than or equal to - divisor size DN. The most significant limb of the divisor must be - non-zero. The QXN operand must be zero. - - -- Function: mp_limb_t mpn_divrem (mp_limb_t *R1P, mp_size_t QXN, - mp_limb_t *RS2P, mp_size_t RS2N, const mp_limb_t *S3P, - mp_size_t S3N) - [This function is obsolete. Please call `mpn_tdiv_qr' instead for - best performance.] - - Divide {RS2P, RS2N} by {S3P, S3N}, and write the quotient at R1P, - with the exception of the most significant limb, which is - returned. The remainder replaces the dividend at RS2P; it will be - S3N limbs long (i.e., as many limbs as the divisor). - - In addition to an integer quotient, QXN fraction limbs are - developed, and stored after the integral limbs. For most usages, - QXN will be zero. - - It is required that RS2N is greater than or equal to S3N. It is - required that the most significant bit of the divisor is set. - - If the quotient is not needed, pass RS2P + S3N as R1P. Aside from - that special case, no overlap between arguments is permitted. - - Return the most significant limb of the quotient, either 0 or 1. - - The area at R1P needs to be RS2N - S3N + QXN limbs large. - - -- Function: mp_limb_t mpn_divrem_1 (mp_limb_t *R1P, mp_size_t QXN, - mp_limb_t *S2P, mp_size_t S2N, mp_limb_t S3LIMB) - -- Macro: mp_limb_t mpn_divmod_1 (mp_limb_t *R1P, mp_limb_t *S2P, - mp_size_t S2N, mp_limb_t S3LIMB) - Divide {S2P, S2N} by S3LIMB, and write the quotient at R1P. - Return the remainder. - - The integer quotient is written to {R1P+QXN, S2N} and in addition - QXN fraction limbs are developed and written to {R1P, QXN}. - Either or both S2N and QXN can be zero. For most usages, QXN will - be zero. - - `mpn_divmod_1' exists for upward source compatibility and is - simply a macro calling `mpn_divrem_1' with a QXN of 0. - - The areas at R1P and S2P have to be identical or completely - separate, not partially overlapping. - - -- Function: mp_limb_t mpn_divmod (mp_limb_t *R1P, mp_limb_t *RS2P, - mp_size_t RS2N, const mp_limb_t *S3P, mp_size_t S3N) - [This function is obsolete. Please call `mpn_tdiv_qr' instead for - best performance.] - - -- Function: void mpn_divexact_1 (mp_limb_t * RP, const mp_limb_t * - SP, mp_size_t N, mp_limb_t D) - Divide {SP, N} by D, expecting it to divide exactly, and writing - the result to {RP, N}. If D doesn't divide exactly, the value - written to {RP, N} is undefined. The areas at RP and SP have to be - identical or completely separate, not partially overlapping. - - -- Macro: mp_limb_t mpn_divexact_by3 (mp_limb_t *RP, mp_limb_t *SP, - mp_size_t N) - -- Function: mp_limb_t mpn_divexact_by3c (mp_limb_t *RP, mp_limb_t - *SP, mp_size_t N, mp_limb_t CARRY) - Divide {SP, N} by 3, expecting it to divide exactly, and writing - the result to {RP, N}. If 3 divides exactly, the return value is - zero and the result is the quotient. If not, the return value is - non-zero and the result won't be anything useful. - - `mpn_divexact_by3c' takes an initial carry parameter, which can be - the return value from a previous call, so a large calculation can - be done piece by piece from low to high. `mpn_divexact_by3' is - simply a macro calling `mpn_divexact_by3c' with a 0 carry - parameter. - - These routines use a multiply-by-inverse and will be faster than - `mpn_divrem_1' on CPUs with fast multiplication but slow division. - - The source a, result q, size n, initial carry i, and return value - c satisfy c*b^n + a-i = 3*q, where b=2^GMP_NUMB_BITS. The return - c is always 0, 1 or 2, and the initial carry i must also be 0, 1 - or 2 (these are both borrows really). When c=0 clearly q=(a-i)/3. - When c!=0, the remainder (a-i) mod 3 is given by 3-c, because b - == 1 mod 3 (when `mp_bits_per_limb' is even, which is always so - currently). - - -- Function: mp_limb_t mpn_mod_1 (const mp_limb_t *S1P, mp_size_t S1N, - mp_limb_t S2LIMB) - Divide {S1P, S1N} by S2LIMB, and return the remainder. S1N can be - zero. - - -- Function: mp_limb_t mpn_lshift (mp_limb_t *RP, const mp_limb_t *SP, - mp_size_t N, unsigned int COUNT) - Shift {SP, N} left by COUNT bits, and write the result to {RP, N}. - The bits shifted out at the left are returned in the least - significant COUNT bits of the return value (the rest of the return - value is zero). - - COUNT must be in the range 1 to mp_bits_per_limb-1. The regions - {SP, N} and {RP, N} may overlap, provided RP >= SP. - - This function is written in assembly for most CPUs. - - -- Function: mp_limb_t mpn_rshift (mp_limb_t *RP, const mp_limb_t *SP, - mp_size_t N, unsigned int COUNT) - Shift {SP, N} right by COUNT bits, and write the result to {RP, - N}. The bits shifted out at the right are returned in the most - significant COUNT bits of the return value (the rest of the return - value is zero). - - COUNT must be in the range 1 to mp_bits_per_limb-1. The regions - {SP, N} and {RP, N} may overlap, provided RP <= SP. - - This function is written in assembly for most CPUs. - - -- Function: int mpn_cmp (const mp_limb_t *S1P, const mp_limb_t *S2P, - mp_size_t N) - Compare {S1P, N} and {S2P, N} and return a positive value if S1 > - S2, 0 if they are equal, or a negative value if S1 < S2. - - -- Function: int mpn_zero_p (const mp_limb_t *SP, mp_size_t N) - Test {SP, N} and return 1 if the operand is zero, 0 otherwise. - - -- Function: mp_size_t mpn_gcd (mp_limb_t *RP, mp_limb_t *XP, - mp_size_t XN, mp_limb_t *YP, mp_size_t YN) - Set {RP, RETVAL} to the greatest common divisor of {XP, XN} and - {YP, YN}. The result can be up to YN limbs, the return value is - the actual number produced. Both source operands are destroyed. - - It is required that XN >= YN > 0, and the most significant limb of - {YP, YN} must be non-zero. No overlap is permitted between {XP, - XN} and {YP, YN}. - - -- Function: mp_limb_t mpn_gcd_1 (const mp_limb_t *XP, mp_size_t XN, - mp_limb_t YLIMB) - Return the greatest common divisor of {XP, XN} and YLIMB. Both - operands must be non-zero. - - -- Function: mp_size_t mpn_gcdext (mp_limb_t *GP, mp_limb_t *SP, - mp_size_t *SN, mp_limb_t *UP, mp_size_t UN, mp_limb_t *VP, - mp_size_t VN) - Let U be defined by {UP, UN} and let V be defined by {VP, VN}. - - Compute the greatest common divisor G of U and V. Compute a - cofactor S such that G = US + VT. The second cofactor T is not - computed but can easily be obtained from (G - U*S) / V (the - division will be exact). It is required that UN >= VN > 0, and - the most significant limb of {VP, VN} must be non-zero. - - S satisfies S = 1 or abs(S) < V / (2 G). S = 0 if and only if V - divides U (i.e., G = V). - - Store G at GP and let the return value define its limb count. - Store S at SP and let |*SN| define its limb count. S can be - negative; when this happens *SN will be negative. The area at GP - should have room for VN limbs and the area at SP should have room - for VN+1 limbs. - - Both source operands are destroyed. - - Compatibility notes: GMP 4.3.0 and 4.3.1 defined S less strictly. - Earlier as well as later GMP releases define S as described here. - GMP releases before GMP 4.3.0 required additional space for both - input and output areas. More precisely, the areas {UP, UN+1} and - {VP, VN+1} were destroyed (i.e. the operands plus an extra limb - past the end of each), and the areas pointed to by GP and SP - should each have room for UN+1 limbs. - - -- Function: mp_size_t mpn_sqrtrem (mp_limb_t *R1P, mp_limb_t *R2P, - const mp_limb_t *SP, mp_size_t N) - Compute the square root of {SP, N} and put the result at {R1P, - ceil(N/2)} and the remainder at {R2P, RETVAL}. R2P needs space - for N limbs, but the return value indicates how many are produced. - - The most significant limb of {SP, N} must be non-zero. The areas - {R1P, ceil(N/2)} and {SP, N} must be completely separate. The - areas {R2P, N} and {SP, N} must be either identical or completely - separate. - - If the remainder is not wanted then R2P can be `NULL', and in this - case the return value is zero or non-zero according to whether the - remainder would have been zero or non-zero. - - A return value of zero indicates a perfect square. See also - `mpn_perfect_square_p'. - - -- Function: size_t mpn_sizeinbase (const mp_limb_t *XP, mp_size_t N, - int BASE) - Return the size of {XP,N} measured in number of digits in the - given BASE. BASE can vary from 2 to 62. Requires N > 0 and - XP[N-1] > 0. The result will be either exact or 1 too big. If - BASE is a power of 2, the result is always exact. - - -- Function: mp_size_t mpn_get_str (unsigned char *STR, int BASE, - mp_limb_t *S1P, mp_size_t S1N) - Convert {S1P, S1N} to a raw unsigned char array at STR in base - BASE, and return the number of characters produced. There may be - leading zeros in the string. The string is not in ASCII; to - convert it to printable format, add the ASCII codes for `0' or - `A', depending on the base and range. BASE can vary from 2 to 256. - - The most significant limb of the input {S1P, S1N} must be - non-zero. The input {S1P, S1N} is clobbered, except when BASE is - a power of 2, in which case it's unchanged. - - The area at STR has to have space for the largest possible number - represented by a S1N long limb array, plus one extra character. - - -- Function: mp_size_t mpn_set_str (mp_limb_t *RP, const unsigned char - *STR, size_t STRSIZE, int BASE) - Convert bytes {STR,STRSIZE} in the given BASE to limbs at RP. - - STR[0] is the most significant input byte and STR[STRSIZE-1] is - the least significant input byte. Each byte should be a value in - the range 0 to BASE-1, not an ASCII character. BASE can vary from - 2 to 256. - - The converted value is {RP,RN} where RN is the return value. If - the most significant input byte STR[0] is non-zero, then RP[RN-1] - will be non-zero, else RP[RN-1] and some number of subsequent - limbs may be zero. - - The area at RP has to have space for the largest possible number - with STRSIZE digits in the chosen base, plus one extra limb. - - The input must have at least one byte, and no overlap is permitted - between {STR,STRSIZE} and the result at RP. - - -- Function: mp_bitcnt_t mpn_scan0 (const mp_limb_t *S1P, mp_bitcnt_t - BIT) - Scan S1P from bit position BIT for the next clear bit. - - It is required that there be a clear bit within the area at S1P at - or beyond bit position BIT, so that the function has something to - return. - - -- Function: mp_bitcnt_t mpn_scan1 (const mp_limb_t *S1P, mp_bitcnt_t - BIT) - Scan S1P from bit position BIT for the next set bit. - - It is required that there be a set bit within the area at S1P at or - beyond bit position BIT, so that the function has something to - return. - - -- Function: void mpn_random (mp_limb_t *R1P, mp_size_t R1N) - -- Function: void mpn_random2 (mp_limb_t *R1P, mp_size_t R1N) - Generate a random number of length R1N and store it at R1P. The - most significant limb is always non-zero. `mpn_random' generates - uniformly distributed limb data, `mpn_random2' generates long - strings of zeros and ones in the binary representation. - - `mpn_random2' is intended for testing the correctness of the `mpn' - routines. - - -- Function: mp_bitcnt_t mpn_popcount (const mp_limb_t *S1P, mp_size_t - N) - Count the number of set bits in {S1P, N}. - - -- Function: mp_bitcnt_t mpn_hamdist (const mp_limb_t *S1P, const - mp_limb_t *S2P, mp_size_t N) - Compute the hamming distance between {S1P, N} and {S2P, N}, which - is the number of bit positions where the two operands have - different bit values. - - -- Function: int mpn_perfect_square_p (const mp_limb_t *S1P, mp_size_t - N) - Return non-zero iff {S1P, N} is a perfect square. The most - significant limb of the input {S1P, N} must be non-zero. - - -- Function: void mpn_and_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical and of {S1P, N} and {S2P, N}, and - write the result to {RP, N}. - - -- Function: void mpn_ior_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical inclusive or of {S1P, N} and {S2P, N}, - and write the result to {RP, N}. - - -- Function: void mpn_xor_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical exclusive or of {S1P, N} and {S2P, N}, - and write the result to {RP, N}. - - -- Function: void mpn_andn_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical and of {S1P, N} and the bitwise - complement of {S2P, N}, and write the result to {RP, N}. - - -- Function: void mpn_iorn_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical inclusive or of {S1P, N} and the - bitwise complement of {S2P, N}, and write the result to {RP, N}. - - -- Function: void mpn_nand_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical and of {S1P, N} and {S2P, N}, and - write the bitwise complement of the result to {RP, N}. - - -- Function: void mpn_nior_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical inclusive or of {S1P, N} and {S2P, N}, - and write the bitwise complement of the result to {RP, N}. - - -- Function: void mpn_xnor_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical exclusive or of {S1P, N} and {S2P, N}, - and write the bitwise complement of the result to {RP, N}. - - -- Function: void mpn_com (mp_limb_t *RP, const mp_limb_t *SP, - mp_size_t N) - Perform the bitwise complement of {SP, N}, and write the result to - {RP, N}. - - -- Function: void mpn_copyi (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N) - Copy from {S1P, N} to {RP, N}, increasingly. - - -- Function: void mpn_copyd (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N) - Copy from {S1P, N} to {RP, N}, decreasingly. - - -- Function: void mpn_zero (mp_limb_t *RP, mp_size_t N) - Zero {RP, N}. - - -8.1 Low-level functions for cryptography -======================================== - -The functions prefixed with `mpn_sec_' and `mpn_cnd_' are designed to -perform the exact same low-level operations and have the same cache -access patterns for any two same-size arguments, assuming that function -arguments are placed at the same position and that the machine state is -identical upon function entry. These functions are intended for -cryptographic purposes, where resilience to side-channel attacks is -desired. - - These functions are less efficient than their "leaky" counterparts; -their performance for operands of the sizes typically used for -cryptographic applications is between 15% and 100% worse. For larger -operands, these functions might be inadequate, since they rely on -asymptotically elementary algorithms. - - These functions do not make any explicit allocations. Those of -these functions that need scratch space accept a scratch space operand. -This convention allows callers to keep sensitive data in designated -memory areas. Note however that compilers may choose to spill scalar -values used within these functions to their stack frame and that such -scalars may contain sensitive data. - - In addition to these specially crafted functions, the following `mpn' -functions are naturally side-channel resistant: `mpn_add_n', -`mpn_sub_n', `mpn_lshift', `mpn_rshift', `mpn_zero', `mpn_copyi', -`mpn_copyd', `mpn_com', and the logical function (`mpn_and_n', etc). - - There are some exceptions from the side-channel resilience: (1) Some -assembly implementations of `mpn_lshift' identify shift-by-one as a -special case. This is a problem iff the shift count is a function of -sensitive data. (2) Alpha ev6 and Pentium4 using 64-bit limbs have -leaky `mpn_add_n' and `mpn_sub_n'. (3) Alpha ev6 has a leaky -`mpn_mul_1' which also makes `mpn_sec_mul' on those systems unsafe. - - -- Function: mp_limb_t mpn_cnd_add_n (mp_limb_t CND, mp_limb_t *RP, - const mp_limb_t *S1P, const mp_limb_t *S2P, mp_size_t N) - -- Function: mp_limb_t mpn_cnd_sub_n (mp_limb_t CND, mp_limb_t *RP, - const mp_limb_t *S1P, const mp_limb_t *S2P, mp_size_t N) - These functions do conditional addition and subtraction. If CND is - non-zero, they produce the same result as a regular `mpn_add_n' or - `mpn_sub_n', and if CND is zero, they copy {S1P,N} to the result - area and return zero. The functions are designed to have timing - and memory access patterns depending only on size and location of - the data areas, but independent of the condition CND. Like for - `mpn_add_n' and `mpn_sub_n', on most machines, the timing will - also be independent of the actual limb values. - - -- Function: mp_limb_t mpn_sec_add_1 (mp_limb_t *RP, const mp_limb_t - *AP, mp_size_t N, mp_limb_t B, mp_limb_t *TP) - -- Function: mp_limb_t mpn_sec_sub_1 (mp_limb_t *RP, const mp_limb_t - *AP, mp_size_t N, mp_limb_t B, mp_limb_t *TP) - Set R to A + B or A - B, respectively, where R = {RP,N}, A = - {AP,N}, and B is a single limb. Returns carry. - - These functions take O(N) time, unlike the leaky functions - `mpn_add_1' which are O(1) on average. They require scratch space - of `mpn_sec_add_1_itch(N)' and `mpn_sec_sub_1_itch(N)' limbs, - respectively, to be passed in the TP parameter. The scratch space - requirements are guaranteed to be at most N limbs, and increase - monotonously in the operand size. - - -- Function: void mpn_cnd_swap (mp_limb_t CND, volatile mp_limb_t *AP, - volatile mp_limb_t *BP, mp_size_t N) - If CND is non-zero, swaps the contents of the areas {AP,N} and - {BP,N}. Otherwise, the areas are left unmodified. Implemented - using logical operations on the limbs, with the same memory - accesses independent of the value of CND. - - -- Function: void mpn_sec_mul (mp_limb_t *RP, const mp_limb_t *AP, - mp_size_t AN, const mp_limb_t *BP, mp_size_t BN, mp_limb_t - *TP) - -- Function: mp_size_t mpn_sec_mul_itch (mp_size_t AN, mp_size_t BN) - Set R to A * B, where A = {AP,AN}, B = {BP,BN}, and R = {RP,AN+BN}. - - It is required that AN >= BN > 0. - - No overlapping between R and the input operands is allowed. For A - = B, use `mpn_sec_sqr' for optimal performance. - - This function requires scratch space of `mpn_sec_mul_itch(AN, BN)' - limbs to be passed in the TP parameter. The scratch space - requirements are guaranteed to increase monotonously in the - operand sizes. - - -- Function: void mpn_sec_sqr (mp_limb_t *RP, const mp_limb_t *AP, - mp_size_t AN, mp_limb_t *TP) - -- Function: mp_size_t mpn_sec_sqr_itch (mp_size_t AN) - Set R to A^2, where A = {AP,AN}, and R = {RP,2AN}. - - It is required that AN > 0. - - No overlapping between R and the input operands is allowed. - - This function requires scratch space of `mpn_sec_sqr_itch(AN)' - limbs to be passed in the TP parameter. The scratch space - requirements are guaranteed to increase monotonously in the - operand size. - - -- Function: void mpn_sec_powm (mp_limb_t *RP, const mp_limb_t *BP, - mp_size_t BN, const mp_limb_t *EP, mp_bitcnt_t ENB, const - mp_limb_t *MP, mp_size_t N, mp_limb_t *TP) - -- Function: mp_size_t mpn_sec_powm_itch (mp_size_t BN, mp_bitcnt_t - ENB, size_t N) - Set R to (B raised to E) modulo M, where R = {RP,N}, M = {MP,N}, - and E = {EP,ceil(ENB / `GMP_NUMB_BITS')}. - - It is required that B > 0, that M > 0 is odd, and that E < 2^ENB. - - No overlapping between R and the input operands is allowed. - - This function requires scratch space of `mpn_sec_powm_itch(BN, - ENB, N)' limbs to be passed in the TP parameter. The scratch - space requirements are guaranteed to increase monotonously in the - operand sizes. - - -- Function: void mpn_sec_tabselect (mp_limb_t *RP, const mp_limb_t - *TAB, mp_size_t N, mp_size_t NENTS, mp_size_t WHICH) - Select entry WHICH from table TAB, which has NENTS entries, each N - limbs. Store the selected entry at RP. - - This function reads the entire table to avoid side-channel - information leaks. - - -- Function: mp_limb_t mpn_sec_div_qr (mp_limb_t *QP, mp_limb_t *NP, - mp_size_t NN, const mp_limb_t *DP, mp_size_t DN, mp_limb_t - *TP) - -- Function: mp_size_t mpn_sec_div_qr_itch (mp_size_t NN, mp_size_t DN) - Set Q to the truncated quotient N / D and R to N modulo D, where N - = {NP,NN}, D = {DP,DN}, Q's most significant limb is the function - return value and the remaining limbs are {QP,NN-DN}, and R = - {NP,DN}. - - It is required that NN >= DN >= 1, and that DP[DN-1] != 0. This - does not imply that N >= D since N might be zero-padded. - - Note the overlapping between N and R. No other operand overlapping - is allowed. The entire space occupied by N is overwritten. - - This function requires scratch space of `mpn_sec_div_qr_itch(NN, - DN)' limbs to be passed in the TP parameter. - - -- Function: void mpn_sec_div_r (mp_limb_t *NP, mp_size_t NN, const - mp_limb_t *DP, mp_size_t DN, mp_limb_t *TP) - -- Function: mp_size_t mpn_sec_div_r_itch (mp_size_t NN, mp_size_t DN) - Set R to N modulo D, where N = {NP,NN}, D = {DP,DN}, and R = - {NP,DN}. - - It is required that NN >= DN >= 1, and that DP[DN-1] != 0. This - does not imply that N >= D since N might be zero-padded. - - Note the overlapping between N and R. No other operand overlapping - is allowed. The entire space occupied by N is overwritten. - - This function requires scratch space of `mpn_sec_div_r_itch(NN, - DN)' limbs to be passed in the TP parameter. - - -- Function: int mpn_sec_invert (mp_limb_t *RP, mp_limb_t *AP, const - mp_limb_t *MP, mp_size_t N, mp_bitcnt_t NBCNT, mp_limb_t *TP) - -- Function: mp_size_t mpn_sec_invert_itch (mp_size_t N) - Set R to the inverse of A modulo M, where R = {RP,N}, A = {AP,N}, - and M = {MP,N}. *This function's interface is preliminary.* - - If an inverse exists, return 1, otherwise return 0 and leave R - undefined. In either case, the input A is destroyed. - - It is required that M is odd, and that NBCNT >= ceil(log(A+1)) + - ceil(log(M+1)). A safe choice is NBCNT = 2 * N * GMP_NUMB_BITS, - but a smaller value might improve performance if M or A are known - to have leading zero bits. - - This function requires scratch space of `mpn_sec_invert_itch(N)' - limbs to be passed in the TP parameter. - - -8.2 Nails -========= - -*Everything in this section is highly experimental and may disappear or -be subject to incompatible changes in a future version of GMP.* - - Nails are an experimental feature whereby a few bits are left unused -at the top of each `mp_limb_t'. This can significantly improve carry -handling on some processors. - - All the `mpn' functions accepting limb data will expect the nail -bits to be zero on entry, and will return data with the nails similarly -all zero. This applies both to limb vectors and to single limb -arguments. - - Nails can be enabled by configuring with `--enable-nails'. By -default the number of bits will be chosen according to what suits the -host processor, but a particular number can be selected with -`--enable-nails=N'. - - At the mpn level, a nail build is neither source nor binary -compatible with a non-nail build, strictly speaking. But programs -acting on limbs only through the mpn functions are likely to work -equally well with either build, and judicious use of the definitions -below should make any program compatible with either build, at the -source level. - - For the higher level routines, meaning `mpz' etc, a nail build -should be fully source and binary compatible with a non-nail build. - - -- Macro: GMP_NAIL_BITS - -- Macro: GMP_NUMB_BITS - -- Macro: GMP_LIMB_BITS - `GMP_NAIL_BITS' is the number of nail bits, or 0 when nails are - not in use. `GMP_NUMB_BITS' is the number of data bits in a limb. - `GMP_LIMB_BITS' is the total number of bits in an `mp_limb_t'. In - all cases - - GMP_LIMB_BITS == GMP_NAIL_BITS + GMP_NUMB_BITS - - -- Macro: GMP_NAIL_MASK - -- Macro: GMP_NUMB_MASK - Bit masks for the nail and number parts of a limb. - `GMP_NAIL_MASK' is 0 when nails are not in use. - - `GMP_NAIL_MASK' is not often needed, since the nail part can be - obtained with `x >> GMP_NUMB_BITS', and that means one less large - constant, which can help various RISC chips. - - -- Macro: GMP_NUMB_MAX - The maximum value that can be stored in the number part of a limb. - This is the same as `GMP_NUMB_MASK', but can be used for clarity - when doing comparisons rather than bit-wise operations. - - The term "nails" comes from finger or toe nails, which are at the -ends of a limb (arm or leg). "numb" is short for number, but is also -how the developers felt after trying for a long time to come up with -sensible names for these things. - - In the future (the distant future most likely) a non-zero nail might -be permitted, giving non-unique representations for numbers in a limb -vector. This would help vector processors since carries would only -ever need to propagate one or two limbs. - - -File: gmp.info, Node: Random Number Functions, Next: Formatted Output, Prev: Low-level Functions, Up: Top - -9 Random Number Functions -************************* - -Sequences of pseudo-random numbers in GMP are generated using a -variable of type `gmp_randstate_t', which holds an algorithm selection -and a current state. Such a variable must be initialized by a call to -one of the `gmp_randinit' functions, and can be seeded with one of the -`gmp_randseed' functions. - - The functions actually generating random numbers are described in -*Note Integer Random Numbers::, and *Note Miscellaneous Float -Functions::. - - The older style random number functions don't accept a -`gmp_randstate_t' parameter but instead share a global variable of that -type. They use a default algorithm and are currently not seeded -(though perhaps that will change in the future). The new functions -accepting a `gmp_randstate_t' are recommended for applications that -care about randomness. - -* Menu: - -* Random State Initialization:: -* Random State Seeding:: -* Random State Miscellaneous:: - - -File: gmp.info, Node: Random State Initialization, Next: Random State Seeding, Prev: Random Number Functions, Up: Random Number Functions - -9.1 Random State Initialization -=============================== - - -- Function: void gmp_randinit_default (gmp_randstate_t STATE) - Initialize STATE with a default algorithm. This will be a - compromise between speed and randomness, and is recommended for - applications with no special requirements. Currently this is - `gmp_randinit_mt'. - - -- Function: void gmp_randinit_mt (gmp_randstate_t STATE) - Initialize STATE for a Mersenne Twister algorithm. This algorithm - is fast and has good randomness properties. - - -- Function: void gmp_randinit_lc_2exp (gmp_randstate_t STATE, const - mpz_t A, unsigned long C, mp_bitcnt_t M2EXP) - Initialize STATE with a linear congruential algorithm X = (A*X + - C) mod 2^M2EXP. - - The low bits of X in this algorithm are not very random. The least - significant bit will have a period no more than 2, and the second - bit no more than 4, etc. For this reason only the high half of - each X is actually used. - - When a random number of more than M2EXP/2 bits is to be generated, - multiple iterations of the recurrence are used and the results - concatenated. - - -- Function: int gmp_randinit_lc_2exp_size (gmp_randstate_t STATE, - mp_bitcnt_t SIZE) - Initialize STATE for a linear congruential algorithm as per - `gmp_randinit_lc_2exp'. A, C and M2EXP are selected from a table, - chosen so that SIZE bits (or more) of each X will be used, i.e. - M2EXP/2 >= SIZE. - - If successful the return value is non-zero. If SIZE is bigger - than the table data provides then the return value is zero. The - maximum SIZE currently supported is 128. - - -- Function: void gmp_randinit_set (gmp_randstate_t ROP, - gmp_randstate_t OP) - Initialize ROP with a copy of the algorithm and state from OP. - - -- Function: void gmp_randinit (gmp_randstate_t STATE, - gmp_randalg_t ALG, ...) - *This function is obsolete.* - - Initialize STATE with an algorithm selected by ALG. The only - choice is `GMP_RAND_ALG_LC', which is `gmp_randinit_lc_2exp_size' - described above. A third parameter of type `unsigned long' is - required, this is the SIZE for that function. - `GMP_RAND_ALG_DEFAULT' or 0 are the same as `GMP_RAND_ALG_LC'. - - `gmp_randinit' sets bits in the global variable `gmp_errno' to - indicate an error. `GMP_ERROR_UNSUPPORTED_ARGUMENT' if ALG is - unsupported, or `GMP_ERROR_INVALID_ARGUMENT' if the SIZE parameter - is too big. It may be noted this error reporting is not thread - safe (a good reason to use `gmp_randinit_lc_2exp_size' instead). - - -- Function: void gmp_randclear (gmp_randstate_t STATE) - Free all memory occupied by STATE. - - -File: gmp.info, Node: Random State Seeding, Next: Random State Miscellaneous, Prev: Random State Initialization, Up: Random Number Functions - -9.2 Random State Seeding -======================== - - -- Function: void gmp_randseed (gmp_randstate_t STATE, const mpz_t - SEED) - -- Function: void gmp_randseed_ui (gmp_randstate_t STATE, - unsigned long int SEED) - Set an initial seed value into STATE. - - The size of a seed determines how many different sequences of - random numbers that it's possible to generate. The "quality" of - the seed is the randomness of a given seed compared to the - previous seed used, and this affects the randomness of separate - number sequences. The method for choosing a seed is critical if - the generated numbers are to be used for important applications, - such as generating cryptographic keys. - - Traditionally the system time has been used to seed, but care - needs to be taken with this. If an application seeds often and - the resolution of the system clock is low, then the same sequence - of numbers might be repeated. Also, the system time is quite easy - to guess, so if unpredictability is required then it should - definitely not be the only source for the seed value. On some - systems there's a special device `/dev/random' which provides - random data better suited for use as a seed. - - -File: gmp.info, Node: Random State Miscellaneous, Prev: Random State Seeding, Up: Random Number Functions - -9.3 Random State Miscellaneous -============================== - - -- Function: unsigned long gmp_urandomb_ui (gmp_randstate_t STATE, - unsigned long N) - Return a uniformly distributed random number of N bits, i.e. in the - range 0 to 2^N-1 inclusive. N must be less than or equal to the - number of bits in an `unsigned long'. - - -- Function: unsigned long gmp_urandomm_ui (gmp_randstate_t STATE, - unsigned long N) - Return a uniformly distributed random number in the range 0 to - N-1, inclusive. - - -File: gmp.info, Node: Formatted Output, Next: Formatted Input, Prev: Random Number Functions, Up: Top - -10 Formatted Output -******************* - -* Menu: - -* Formatted Output Strings:: -* Formatted Output Functions:: -* C++ Formatted Output:: - - -File: gmp.info, Node: Formatted Output Strings, Next: Formatted Output Functions, Prev: Formatted Output, Up: Formatted Output - -10.1 Format Strings -=================== - -`gmp_printf' and friends accept format strings similar to the standard C -`printf' (*note Formatted Output: (libc)Formatted Output.). A format -specification is of the form - - % [flags] [width] [.[precision]] [type] conv - - GMP adds types `Z', `Q' and `F' for `mpz_t', `mpq_t' and `mpf_t' -respectively, `M' for `mp_limb_t', and `N' for an `mp_limb_t' array. -`Z', `Q', `M' and `N' behave like integers. `Q' will print a `/' and a -denominator, if needed. `F' behaves like a float. For example, - - mpz_t z; - gmp_printf ("%s is an mpz %Zd\n", "here", z); - - mpq_t q; - gmp_printf ("a hex rational: %#40Qx\n", q); - - mpf_t f; - int n; - gmp_printf ("fixed point mpf %.*Ff with %d digits\n", n, f, n); - - mp_limb_t l; - gmp_printf ("limb %Mu\n", l); - - const mp_limb_t *ptr; - mp_size_t size; - gmp_printf ("limb array %Nx\n", ptr, size); - - For `N' the limbs are expected least significant first, as per the -`mpn' functions (*note Low-level Functions::). A negative size can be -given to print the value as a negative. - - All the standard C `printf' types behave the same as the C library -`printf', and can be freely intermixed with the GMP extensions. In the -current implementation the standard parts of the format string are -simply handed to `printf' and only the GMP extensions handled directly. - - The flags accepted are as follows. GLIBC style ' is only for the -standard C types (not the GMP types), and only if the C library -supports it. - - 0 pad with zeros (rather than spaces) - # show the base with `0x', `0X' or `0' - + always show a sign - (space) show a space or a `-' sign - ' group digits, GLIBC style (not GMP types) - - The optional width and precision can be given as a number within the -format string, or as a `*' to take an extra parameter of type `int', the -same as the standard `printf'. - - The standard types accepted are as follows. `h' and `l' are -portable, the rest will depend on the compiler (or include files) for -the type and the C library for the output. - - h short - hh char - j intmax_t or uintmax_t - l long or wchar_t - ll long long - L long double - q quad_t or u_quad_t - t ptrdiff_t - z size_t - -The GMP types are - - F mpf_t, float conversions - Q mpq_t, integer conversions - M mp_limb_t, integer conversions - N mp_limb_t array, integer conversions - Z mpz_t, integer conversions - - The conversions accepted are as follows. `a' and `A' are always -supported for `mpf_t' but depend on the C library for standard C float -types. `m' and `p' depend on the C library. - - a A hex floats, C99 style - c character - d decimal integer - e E scientific format float - f fixed point float - i same as d - g G fixed or scientific float - m `strerror' string, GLIBC style - n store characters written so far - o octal integer - p pointer - s string - u unsigned integer - x X hex integer - - `o', `x' and `X' are unsigned for the standard C types, but for -types `Z', `Q' and `N' they are signed. `u' is not meaningful for `Z', -`Q' and `N'. - - `M' is a proxy for the C library `l' or `L', according to the size -of `mp_limb_t'. Unsigned conversions will be usual, but a signed -conversion can be used and will interpret the value as a twos complement -negative. - - `n' can be used with any type, even the GMP types. - - Other types or conversions that might be accepted by the C library -`printf' cannot be used through `gmp_printf', this includes for -instance extensions registered with GLIBC `register_printf_function'. -Also currently there's no support for POSIX `$' style numbered arguments -(perhaps this will be added in the future). - - The precision field has its usual meaning for integer `Z' and float -`F' types, but is currently undefined for `Q' and should not be used -with that. - - `mpf_t' conversions only ever generate as many digits as can be -accurately represented by the operand, the same as `mpf_get_str' does. -Zeros will be used if necessary to pad to the requested precision. This -happens even for an `f' conversion of an `mpf_t' which is an integer, -for instance 2^1024 in an `mpf_t' of 128 bits precision will only -produce about 40 digits, then pad with zeros to the decimal point. An -empty precision field like `%.Fe' or `%.Ff' can be used to specifically -request just the significant digits. Without any dot and thus no -precision field, a precision value of 6 will be used. Note that these -rules mean that `%Ff', `%.Ff', and `%.0Ff' will all be different. - - The decimal point character (or string) is taken from the current -locale settings on systems which provide `localeconv' (*note Locales -and Internationalization: (libc)Locales.). The C library will normally -do the same for standard float output. - - The format string is only interpreted as plain `char's, multibyte -characters are not recognised. Perhaps this will change in the future. - - -File: gmp.info, Node: Formatted Output Functions, Next: C++ Formatted Output, Prev: Formatted Output Strings, Up: Formatted Output - -10.2 Functions -============== - -Each of the following functions is similar to the corresponding C -library function. The basic `printf' forms take a variable argument -list. The `vprintf' forms take an argument pointer, see *Note Variadic -Functions: (libc)Variadic Functions, or `man 3 va_start'. - - It should be emphasised that if a format string is invalid, or the -arguments don't match what the format specifies, then the behaviour of -any of these functions will be unpredictable. GCC format string -checking is not available, since it doesn't recognise the GMP -extensions. - - The file based functions `gmp_printf' and `gmp_fprintf' will return --1 to indicate a write error. Output is not "atomic", so partial -output may be produced if a write error occurs. All the functions can -return -1 if the C library `printf' variant in use returns -1, but this -shouldn't normally occur. - - -- Function: int gmp_printf (const char *FMT, ...) - -- Function: int gmp_vprintf (const char *FMT, va_list AP) - Print to the standard output `stdout'. Return the number of - characters written, or -1 if an error occurred. - - -- Function: int gmp_fprintf (FILE *FP, const char *FMT, ...) - -- Function: int gmp_vfprintf (FILE *FP, const char *FMT, va_list AP) - Print to the stream FP. Return the number of characters written, - or -1 if an error occurred. - - -- Function: int gmp_sprintf (char *BUF, const char *FMT, ...) - -- Function: int gmp_vsprintf (char *BUF, const char *FMT, va_list AP) - Form a null-terminated string in BUF. Return the number of - characters written, excluding the terminating null. - - No overlap is permitted between the space at BUF and the string - FMT. - - These functions are not recommended, since there's no protection - against exceeding the space available at BUF. - - -- Function: int gmp_snprintf (char *BUF, size_t SIZE, const char - *FMT, ...) - -- Function: int gmp_vsnprintf (char *BUF, size_t SIZE, const char - *FMT, va_list AP) - Form a null-terminated string in BUF. No more than SIZE bytes - will be written. To get the full output, SIZE must be enough for - the string and null-terminator. - - The return value is the total number of characters which ought to - have been produced, excluding the terminating null. If RETVAL >= - SIZE then the actual output has been truncated to the first SIZE-1 - characters, and a null appended. - - No overlap is permitted between the region {BUF,SIZE} and the FMT - string. - - Notice the return value is in ISO C99 `snprintf' style. This is - so even if the C library `vsnprintf' is the older GLIBC 2.0.x - style. - - -- Function: int gmp_asprintf (char **PP, const char *FMT, ...) - -- Function: int gmp_vasprintf (char **PP, const char *FMT, va_list AP) - Form a null-terminated string in a block of memory obtained from - the current memory allocation function (*note Custom - Allocation::). The block will be the size of the string and - null-terminator. The address of the block in stored to *PP. The - return value is the number of characters produced, excluding the - null-terminator. - - Unlike the C library `asprintf', `gmp_asprintf' doesn't return -1 - if there's no more memory available, it lets the current allocation - function handle that. - - -- Function: int gmp_obstack_printf (struct obstack *OB, const char - *FMT, ...) - -- Function: int gmp_obstack_vprintf (struct obstack *OB, const char - *FMT, va_list AP) - Append to the current object in OB. The return value is the - number of characters written. A null-terminator is not written. - - FMT cannot be within the current object in OB, since that object - might move as it grows. - - These functions are available only when the C library provides the - obstack feature, which probably means only on GNU systems, see - *Note Obstacks: (libc)Obstacks. - - -File: gmp.info, Node: C++ Formatted Output, Prev: Formatted Output Functions, Up: Formatted Output - -10.3 C++ Formatted Output -========================= - -The following functions are provided in `libgmpxx' (*note Headers and -Libraries::), which is built if C++ support is enabled (*note Build -Options::). Prototypes are available from `<gmp.h>'. - - -- Function: ostream& operator<< (ostream& STREAM, const mpz_t OP) - Print OP to STREAM, using its `ios' formatting settings. - `ios::width' is reset to 0 after output, the same as the standard - `ostream operator<<' routines do. - - In hex or octal, OP is printed as a signed number, the same as for - decimal. This is unlike the standard `operator<<' routines on - `int' etc, which instead give twos complement. - - -- Function: ostream& operator<< (ostream& STREAM, const mpq_t OP) - Print OP to STREAM, using its `ios' formatting settings. - `ios::width' is reset to 0 after output, the same as the standard - `ostream operator<<' routines do. - - Output will be a fraction like `5/9', or if the denominator is 1 - then just a plain integer like `123'. - - In hex or octal, OP is printed as a signed value, the same as for - decimal. If `ios::showbase' is set then a base indicator is shown - on both the numerator and denominator (if the denominator is - required). - - -- Function: ostream& operator<< (ostream& STREAM, const mpf_t OP) - Print OP to STREAM, using its `ios' formatting settings. - `ios::width' is reset to 0 after output, the same as the standard - `ostream operator<<' routines do. - - The decimal point follows the standard library float `operator<<', - which on recent systems means the `std::locale' imbued on STREAM. - - Hex and octal are supported, unlike the standard `operator<<' on - `double'. The mantissa will be in hex or octal, the exponent will - be in decimal. For hex the exponent delimiter is an `@'. This is - as per `mpf_out_str'. - - `ios::showbase' is supported, and will put a base on the mantissa, - for example hex `0x1.8' or `0x0.8', or octal `01.4' or `00.4'. - This last form is slightly strange, but at least differentiates - itself from decimal. - - These operators mean that GMP types can be printed in the usual C++ -way, for example, - - mpz_t z; - int n; - ... - cout << "iteration " << n << " value " << z << "\n"; - - But note that `ostream' output (and `istream' input, *note C++ -Formatted Input::) is the only overloading available for the GMP types -and that for instance using `+' with an `mpz_t' will have unpredictable -results. For classes with overloading, see *Note C++ Class Interface::. - - -File: gmp.info, Node: Formatted Input, Next: C++ Class Interface, Prev: Formatted Output, Up: Top - -11 Formatted Input -****************** - -* Menu: - -* Formatted Input Strings:: -* Formatted Input Functions:: -* C++ Formatted Input:: - - -File: gmp.info, Node: Formatted Input Strings, Next: Formatted Input Functions, Prev: Formatted Input, Up: Formatted Input - -11.1 Formatted Input Strings -============================ - -`gmp_scanf' and friends accept format strings similar to the standard C -`scanf' (*note Formatted Input: (libc)Formatted Input.). A format -specification is of the form - - % [flags] [width] [type] conv - - GMP adds types `Z', `Q' and `F' for `mpz_t', `mpq_t' and `mpf_t' -respectively. `Z' and `Q' behave like integers. `Q' will read a `/' -and a denominator, if present. `F' behaves like a float. - - GMP variables don't require an `&' when passed to `gmp_scanf', since -they're already "call-by-reference". For example, - - /* to read say "a(5) = 1234" */ - int n; - mpz_t z; - gmp_scanf ("a(%d) = %Zd\n", &n, z); - - mpq_t q1, q2; - gmp_sscanf ("0377 + 0x10/0x11", "%Qi + %Qi", q1, q2); - - /* to read say "topleft (1.55,-2.66)" */ - mpf_t x, y; - char buf[32]; - gmp_scanf ("%31s (%Ff,%Ff)", buf, x, y); - - All the standard C `scanf' types behave the same as in the C library -`scanf', and can be freely intermixed with the GMP extensions. In the -current implementation the standard parts of the format string are -simply handed to `scanf' and only the GMP extensions handled directly. - - The flags accepted are as follows. `a' and `'' will depend on -support from the C library, and `'' cannot be used with GMP types. - - * read but don't store - a allocate a buffer (string conversions) - ' grouped digits, GLIBC style (not GMP - types) - - The standard types accepted are as follows. `h' and `l' are -portable, the rest will depend on the compiler (or include files) for -the type and the C library for the input. - - h short - hh char - j intmax_t or uintmax_t - l long int, double or wchar_t - ll long long - L long double - q quad_t or u_quad_t - t ptrdiff_t - z size_t - -The GMP types are - - F mpf_t, float conversions - Q mpq_t, integer conversions - Z mpz_t, integer conversions - - The conversions accepted are as follows. `p' and `[' will depend on -support from the C library, the rest are standard. - - c character or characters - d decimal integer - e E f g G float - i integer with base indicator - n characters read so far - o octal integer - p pointer - s string of non-whitespace characters - u decimal integer - x X hex integer - [ string of characters in a set - - `e', `E', `f', `g' and `G' are identical, they all read either fixed -point or scientific format, and either upper or lower case `e' for the -exponent in scientific format. - - C99 style hex float format (`printf %a', *note Formatted Output -Strings::) is always accepted for `mpf_t', but for the standard float -types it will depend on the C library. - - `x' and `X' are identical, both accept both upper and lower case -hexadecimal. - - `o', `u', `x' and `X' all read positive or negative values. For the -standard C types these are described as "unsigned" conversions, but -that merely affects certain overflow handling, negatives are still -allowed (per `strtoul', *note Parsing of Integers: (libc)Parsing of -Integers.). For GMP types there are no overflows, so `d' and `u' are -identical. - - `Q' type reads the numerator and (optional) denominator as given. -If the value might not be in canonical form then `mpq_canonicalize' -must be called before using it in any calculations (*note Rational -Number Functions::). - - `Qi' will read a base specification separately for the numerator and -denominator. For example `0x10/11' would be 16/11, whereas `0x10/0x11' -would be 16/17. - - `n' can be used with any of the types above, even the GMP types. -`*' to suppress assignment is allowed, though in that case it would do -nothing at all. - - Other conversions or types that might be accepted by the C library -`scanf' cannot be used through `gmp_scanf'. - - Whitespace is read and discarded before a field, except for `c' and -`[' conversions. - - For float conversions, the decimal point character (or string) -expected is taken from the current locale settings on systems which -provide `localeconv' (*note Locales and Internationalization: -(libc)Locales.). The C library will normally do the same for standard -float input. - - The format string is only interpreted as plain `char's, multibyte -characters are not recognised. Perhaps this will change in the future. - - -File: gmp.info, Node: Formatted Input Functions, Next: C++ Formatted Input, Prev: Formatted Input Strings, Up: Formatted Input - -11.2 Formatted Input Functions -============================== - -Each of the following functions is similar to the corresponding C -library function. The plain `scanf' forms take a variable argument -list. The `vscanf' forms take an argument pointer, see *Note Variadic -Functions: (libc)Variadic Functions, or `man 3 va_start'. - - It should be emphasised that if a format string is invalid, or the -arguments don't match what the format specifies, then the behaviour of -any of these functions will be unpredictable. GCC format string -checking is not available, since it doesn't recognise the GMP -extensions. - - No overlap is permitted between the FMT string and any of the results -produced. - - -- Function: int gmp_scanf (const char *FMT, ...) - -- Function: int gmp_vscanf (const char *FMT, va_list AP) - Read from the standard input `stdin'. - - -- Function: int gmp_fscanf (FILE *FP, const char *FMT, ...) - -- Function: int gmp_vfscanf (FILE *FP, const char *FMT, va_list AP) - Read from the stream FP. - - -- Function: int gmp_sscanf (const char *S, const char *FMT, ...) - -- Function: int gmp_vsscanf (const char *S, const char *FMT, va_list - AP) - Read from a null-terminated string S. - - The return value from each of these functions is the same as the -standard C99 `scanf', namely the number of fields successfully parsed -and stored. `%n' fields and fields read but suppressed by `*' don't -count towards the return value. - - If end of input (or a file error) is reached before a character for -a field or a literal, and if no previous non-suppressed fields have -matched, then the return value is `EOF' instead of 0. A whitespace -character in the format string is only an optional match and doesn't -induce an `EOF' in this fashion. Leading whitespace read and discarded -for a field don't count as characters for that field. - - For the GMP types, input parsing follows C99 rules, namely one -character of lookahead is used and characters are read while they -continue to meet the format requirements. If this doesn't provide a -complete number then the function terminates, with that field not -stored nor counted towards the return value. For instance with `mpf_t' -an input `1.23e-XYZ' would be read up to the `X' and that character -pushed back since it's not a digit. The string `1.23e-' would then be -considered invalid since an `e' must be followed by at least one digit. - - For the standard C types, in the current implementation GMP calls -the C library `scanf' functions, which might have looser rules about -what constitutes a valid input. - - Note that `gmp_sscanf' is the same as `gmp_fscanf' and only does one -character of lookahead when parsing. Although clearly it could look at -its entire input, it is deliberately made identical to `gmp_fscanf', -the same way C99 `sscanf' is the same as `fscanf'. - - -File: gmp.info, Node: C++ Formatted Input, Prev: Formatted Input Functions, Up: Formatted Input - -11.3 C++ Formatted Input -======================== - -The following functions are provided in `libgmpxx' (*note Headers and -Libraries::), which is built only if C++ support is enabled (*note -Build Options::). Prototypes are available from `<gmp.h>'. - - -- Function: istream& operator>> (istream& STREAM, mpz_t ROP) - Read ROP from STREAM, using its `ios' formatting settings. - - -- Function: istream& operator>> (istream& STREAM, mpq_t ROP) - An integer like `123' will be read, or a fraction like `5/9'. No - whitespace is allowed around the `/'. If the fraction is not in - canonical form then `mpq_canonicalize' must be called (*note - Rational Number Functions::) before operating on it. - - As per integer input, an `0' or `0x' base indicator is read when - none of `ios::dec', `ios::oct' or `ios::hex' are set. This is - done separately for numerator and denominator, so that for instance - `0x10/11' is 16/11 and `0x10/0x11' is 16/17. - - -- Function: istream& operator>> (istream& STREAM, mpf_t ROP) - Read ROP from STREAM, using its `ios' formatting settings. - - Hex or octal floats are not supported, but might be in the future, - or perhaps it's best to accept only what the standard float - `operator>>' does. - - Note that digit grouping specified by the `istream' locale is -currently not accepted. Perhaps this will change in the future. - - - These operators mean that GMP types can be read in the usual C++ -way, for example, - - mpz_t z; - ... - cin >> z; - - But note that `istream' input (and `ostream' output, *note C++ -Formatted Output::) is the only overloading available for the GMP types -and that for instance using `+' with an `mpz_t' will have unpredictable -results. For classes with overloading, see *Note C++ Class Interface::. - - -File: gmp.info, Node: C++ Class Interface, Next: Custom Allocation, Prev: Formatted Input, Up: Top - -12 C++ Class Interface -********************** - -This chapter describes the C++ class based interface to GMP. - - All GMP C language types and functions can be used in C++ programs, -since `gmp.h' has `extern "C"' qualifiers, but the class interface -offers overloaded functions and operators which may be more convenient. - - Due to the implementation of this interface, a reasonably recent C++ -compiler is required, one supporting namespaces, partial specialization -of templates and member templates. - - *Everything described in this chapter is to be considered preliminary -and might be subject to incompatible changes if some unforeseen -difficulty reveals itself.* - -* Menu: - -* C++ Interface General:: -* C++ Interface Integers:: -* C++ Interface Rationals:: -* C++ Interface Floats:: -* C++ Interface Random Numbers:: -* C++ Interface Limitations:: - - -File: gmp.info, Node: C++ Interface General, Next: C++ Interface Integers, Prev: C++ Class Interface, Up: C++ Class Interface - -12.1 C++ Interface General -========================== - -All the C++ classes and functions are available with - - #include <gmpxx.h> - - Programs should be linked with the `libgmpxx' and `libgmp' -libraries. For example, - - g++ mycxxprog.cc -lgmpxx -lgmp - -The classes defined are - - -- Class: mpz_class - -- Class: mpq_class - -- Class: mpf_class - - The standard operators and various standard functions are overloaded -to allow arithmetic with these classes. For example, - - int - main (void) - { - mpz_class a, b, c; - - a = 1234; - b = "-5678"; - c = a+b; - cout << "sum is " << c << "\n"; - cout << "absolute value is " << abs(c) << "\n"; - - return 0; - } - - An important feature of the implementation is that an expression like -`a=b+c' results in a single call to the corresponding `mpz_add', -without using a temporary for the `b+c' part. Expressions which by -their nature imply intermediate values, like `a=b*c+d*e', still use -temporaries though. - - The classes can be freely intermixed in expressions, as can the -classes and the standard types `long', `unsigned long' and `double'. -Smaller types like `int' or `float' can also be intermixed, since C++ -will promote them. - - Note that `bool' is not accepted directly, but must be explicitly -cast to an `int' first. This is because C++ will automatically convert -any pointer to a `bool', so if GMP accepted `bool' it would make all -sorts of invalid class and pointer combinations compile but almost -certainly not do anything sensible. - - Conversions back from the classes to standard C++ types aren't done -automatically, instead member functions like `get_si' are provided (see -the following sections for details). - - Also there are no automatic conversions from the classes to the -corresponding GMP C types, instead a reference to the underlying C -object can be obtained with the following functions, - - -- Function: mpz_t mpz_class::get_mpz_t () - -- Function: mpq_t mpq_class::get_mpq_t () - -- Function: mpf_t mpf_class::get_mpf_t () - - These can be used to call a C function which doesn't have a C++ class -interface. For example to set `a' to the GCD of `b' and `c', - - mpz_class a, b, c; - ... - mpz_gcd (a.get_mpz_t(), b.get_mpz_t(), c.get_mpz_t()); - - In the other direction, a class can be initialized from the -corresponding GMP C type, or assigned to if an explicit constructor is -used. In both cases this makes a copy of the value, it doesn't create -any sort of association. For example, - - mpz_t z; - // ... init and calculate z ... - mpz_class x(z); - mpz_class y; - y = mpz_class (z); - - There are no namespace setups in `gmpxx.h', all types and functions -are simply put into the global namespace. This is what `gmp.h' has -done in the past, and continues to do for compatibility. The extras -provided by `gmpxx.h' follow GMP naming conventions and are unlikely to -clash with anything. - - -File: gmp.info, Node: C++ Interface Integers, Next: C++ Interface Rationals, Prev: C++ Interface General, Up: C++ Class Interface - -12.2 C++ Interface Integers -=========================== - - -- Function: mpz_class::mpz_class (type N) - Construct an `mpz_class'. All the standard C++ types may be used, - except `long long' and `long double', and all the GMP C++ classes - can be used, although conversions from `mpq_class' and `mpf_class' - are `explicit'. Any necessary conversion follows the - corresponding C function, for example `double' follows `mpz_set_d' - (*note Assigning Integers::). - - -- Function: explicit mpz_class::mpz_class (const mpz_t Z) - Construct an `mpz_class' from an `mpz_t'. The value in Z is - copied into the new `mpz_class', there won't be any permanent - association between it and Z. - - -- Function: explicit mpz_class::mpz_class (const char *S, int BASE = - 0) - -- Function: explicit mpz_class::mpz_class (const string& S, int BASE - = 0) - Construct an `mpz_class' converted from a string using - `mpz_set_str' (*note Assigning Integers::). - - If the string is not a valid integer, an `std::invalid_argument' - exception is thrown. The same applies to `operator='. - - -- Function: mpz_class operator"" _mpz (const char *STR) - With C++11 compilers, integers can be constructed with the syntax - `123_mpz' which is equivalent to `mpz_class("123")'. - - -- Function: mpz_class operator/ (mpz_class A, mpz_class D) - -- Function: mpz_class operator% (mpz_class A, mpz_class D) - Divisions involving `mpz_class' round towards zero, as per the - `mpz_tdiv_q' and `mpz_tdiv_r' functions (*note Integer Division::). - This is the same as the C99 `/' and `%' operators. - - The `mpz_fdiv...' or `mpz_cdiv...' functions can always be called - directly if desired. For example, - - mpz_class q, a, d; - ... - mpz_fdiv_q (q.get_mpz_t(), a.get_mpz_t(), d.get_mpz_t()); - - -- Function: mpz_class abs (mpz_class OP) - -- Function: int cmp (mpz_class OP1, type OP2) - -- Function: int cmp (type OP1, mpz_class OP2) - -- Function: bool mpz_class::fits_sint_p (void) - -- Function: bool mpz_class::fits_slong_p (void) - -- Function: bool mpz_class::fits_sshort_p (void) - -- Function: bool mpz_class::fits_uint_p (void) - -- Function: bool mpz_class::fits_ulong_p (void) - -- Function: bool mpz_class::fits_ushort_p (void) - -- Function: double mpz_class::get_d (void) - -- Function: long mpz_class::get_si (void) - -- Function: string mpz_class::get_str (int BASE = 10) - -- Function: unsigned long mpz_class::get_ui (void) - -- Function: int mpz_class::set_str (const char *STR, int BASE) - -- Function: int mpz_class::set_str (const string& STR, int BASE) - -- Function: int sgn (mpz_class OP) - -- Function: mpz_class sqrt (mpz_class OP) - -- Function: mpz_class gcd (mpz_class OP1, mpz_class OP2) - -- Function: mpz_class lcm (mpz_class OP1, mpz_class OP2) - -- Function: void mpz_class::swap (mpz_class& OP) - -- Function: void swap (mpz_class& OP1, mpz_class& OP2) - These functions provide a C++ class interface to the corresponding - GMP C routines. - - `cmp' can be used with any of the classes or the standard C++ - types, except `long long' and `long double'. - - - Overloaded operators for combinations of `mpz_class' and `double' -are provided for completeness, but it should be noted that if the given -`double' is not an integer then the way any rounding is done is -currently unspecified. The rounding might take place at the start, in -the middle, or at the end of the operation, and it might change in the -future. - - Conversions between `mpz_class' and `double', however, are defined -to follow the corresponding C functions `mpz_get_d' and `mpz_set_d'. -And comparisons are always made exactly, as per `mpz_cmp_d'. - - -File: gmp.info, Node: C++ Interface Rationals, Next: C++ Interface Floats, Prev: C++ Interface Integers, Up: C++ Class Interface - -12.3 C++ Interface Rationals -============================ - -In all the following constructors, if a fraction is given then it -should be in canonical form, or if not then `mpq_class::canonicalize' -called. - - -- Function: mpq_class::mpq_class (type OP) - -- Function: mpq_class::mpq_class (integer NUM, integer DEN) - Construct an `mpq_class'. The initial value can be a single value - of any type (conversion from `mpf_class' is `explicit'), or a pair - of integers (`mpz_class' or standard C++ integer types) - representing a fraction, except that `long long' and `long double' - are not supported. For example, - - mpq_class q (99); - mpq_class q (1.75); - mpq_class q (1, 3); - - -- Function: explicit mpq_class::mpq_class (const mpq_t Q) - Construct an `mpq_class' from an `mpq_t'. The value in Q is - copied into the new `mpq_class', there won't be any permanent - association between it and Q. - - -- Function: explicit mpq_class::mpq_class (const char *S, int BASE = - 0) - -- Function: explicit mpq_class::mpq_class (const string& S, int BASE - = 0) - Construct an `mpq_class' converted from a string using - `mpq_set_str' (*note Initializing Rationals::). - - If the string is not a valid rational, an `std::invalid_argument' - exception is thrown. The same applies to `operator='. - - -- Function: mpq_class operator"" _mpq (const char *STR) - With C++11 compilers, integral rationals can be constructed with - the syntax `123_mpq' which is equivalent to `mpq_class(123_mpz)'. - Other rationals can be built as `-1_mpq/2' or `0xb_mpq/123456_mpz'. - - -- Function: void mpq_class::canonicalize () - Put an `mpq_class' into canonical form, as per *Note Rational - Number Functions::. All arithmetic operators require their - operands in canonical form, and will return results in canonical - form. - - -- Function: mpq_class abs (mpq_class OP) - -- Function: int cmp (mpq_class OP1, type OP2) - -- Function: int cmp (type OP1, mpq_class OP2) - -- Function: double mpq_class::get_d (void) - -- Function: string mpq_class::get_str (int BASE = 10) - -- Function: int mpq_class::set_str (const char *STR, int BASE) - -- Function: int mpq_class::set_str (const string& STR, int BASE) - -- Function: int sgn (mpq_class OP) - -- Function: void mpq_class::swap (mpq_class& OP) - -- Function: void swap (mpq_class& OP1, mpq_class& OP2) - These functions provide a C++ class interface to the corresponding - GMP C routines. - - `cmp' can be used with any of the classes or the standard C++ - types, except `long long' and `long double'. - - -- Function: mpz_class& mpq_class::get_num () - -- Function: mpz_class& mpq_class::get_den () - Get a reference to an `mpz_class' which is the numerator or - denominator of an `mpq_class'. This can be used both for read and - write access. If the object returned is modified, it modifies the - original `mpq_class'. - - If direct manipulation might produce a non-canonical value, then - `mpq_class::canonicalize' must be called before further operations. - - -- Function: mpz_t mpq_class::get_num_mpz_t () - -- Function: mpz_t mpq_class::get_den_mpz_t () - Get a reference to the underlying `mpz_t' numerator or denominator - of an `mpq_class'. This can be passed to C functions expecting an - `mpz_t'. Any modifications made to the `mpz_t' will modify the - original `mpq_class'. - - If direct manipulation might produce a non-canonical value, then - `mpq_class::canonicalize' must be called before further operations. - - -- Function: istream& operator>> (istream& STREAM, mpq_class& ROP); - Read ROP from STREAM, using its `ios' formatting settings, the - same as `mpq_t operator>>' (*note C++ Formatted Input::). - - If the ROP read might not be in canonical form then - `mpq_class::canonicalize' must be called. - - -File: gmp.info, Node: C++ Interface Floats, Next: C++ Interface Random Numbers, Prev: C++ Interface Rationals, Up: C++ Class Interface - -12.4 C++ Interface Floats -========================= - -When an expression requires the use of temporary intermediate -`mpf_class' values, like `f=g*h+x*y', those temporaries will have the -same precision as the destination `f'. Explicit constructors can be -used if this doesn't suit. - - -- Function: mpf_class::mpf_class (type OP) - -- Function: mpf_class::mpf_class (type OP, mp_bitcnt_t PREC) - Construct an `mpf_class'. Any standard C++ type can be used, - except `long long' and `long double', and any of the GMP C++ - classes can be used. - - If PREC is given, the initial precision is that value, in bits. If - PREC is not given, then the initial precision is determined by the - type of OP given. An `mpz_class', `mpq_class', or C++ builtin - type will give the default `mpf' precision (*note Initializing - Floats::). An `mpf_class' or expression will give the precision - of that value. The precision of a binary expression is the higher - of the two operands. - - mpf_class f(1.5); // default precision - mpf_class f(1.5, 500); // 500 bits (at least) - mpf_class f(x); // precision of x - mpf_class f(abs(x)); // precision of x - mpf_class f(-g, 1000); // 1000 bits (at least) - mpf_class f(x+y); // greater of precisions of x and y - - -- Function: explicit mpf_class::mpf_class (const mpf_t F) - -- Function: mpf_class::mpf_class (const mpf_t F, mp_bitcnt_t PREC) - Construct an `mpf_class' from an `mpf_t'. The value in F is - copied into the new `mpf_class', there won't be any permanent - association between it and F. - - If PREC is given, the initial precision is that value, in bits. If - PREC is not given, then the initial precision is that of F. - - -- Function: explicit mpf_class::mpf_class (const char *S) - -- Function: mpf_class::mpf_class (const char *S, mp_bitcnt_t PREC, - int BASE = 0) - -- Function: explicit mpf_class::mpf_class (const string& S) - -- Function: mpf_class::mpf_class (const string& S, mp_bitcnt_t PREC, - int BASE = 0) - Construct an `mpf_class' converted from a string using - `mpf_set_str' (*note Assigning Floats::). If PREC is given, the - initial precision is that value, in bits. If not, the default - `mpf' precision (*note Initializing Floats::) is used. - - If the string is not a valid float, an `std::invalid_argument' - exception is thrown. The same applies to `operator='. - - -- Function: mpf_class operator"" _mpf (const char *STR) - With C++11 compilers, floats can be constructed with the syntax - `1.23e-1_mpf' which is equivalent to `mpf_class("1.23e-1")'. - - -- Function: mpf_class& mpf_class::operator= (type OP) - Convert and store the given OP value to an `mpf_class' object. The - same types are accepted as for the constructors above. - - Note that `operator=' only stores a new value, it doesn't copy or - change the precision of the destination, instead the value is - truncated if necessary. This is the same as `mpf_set' etc. Note - in particular this means for `mpf_class' a copy constructor is not - the same as a default constructor plus assignment. - - mpf_class x (y); // x created with precision of y - - mpf_class x; // x created with default precision - x = y; // value truncated to that precision - - Applications using templated code may need to be careful about the - assumptions the code makes in this area, when working with - `mpf_class' values of various different or non-default precisions. - For instance implementations of the standard `complex' template - have been seen in both styles above, though of course `complex' is - normally only actually specified for use with the builtin float - types. - - -- Function: mpf_class abs (mpf_class OP) - -- Function: mpf_class ceil (mpf_class OP) - -- Function: int cmp (mpf_class OP1, type OP2) - -- Function: int cmp (type OP1, mpf_class OP2) - -- Function: bool mpf_class::fits_sint_p (void) - -- Function: bool mpf_class::fits_slong_p (void) - -- Function: bool mpf_class::fits_sshort_p (void) - -- Function: bool mpf_class::fits_uint_p (void) - -- Function: bool mpf_class::fits_ulong_p (void) - -- Function: bool mpf_class::fits_ushort_p (void) - -- Function: mpf_class floor (mpf_class OP) - -- Function: mpf_class hypot (mpf_class OP1, mpf_class OP2) - -- Function: double mpf_class::get_d (void) - -- Function: long mpf_class::get_si (void) - -- Function: string mpf_class::get_str (mp_exp_t& EXP, int BASE = 10, - size_t DIGITS = 0) - -- Function: unsigned long mpf_class::get_ui (void) - -- Function: int mpf_class::set_str (const char *STR, int BASE) - -- Function: int mpf_class::set_str (const string& STR, int BASE) - -- Function: int sgn (mpf_class OP) - -- Function: mpf_class sqrt (mpf_class OP) - -- Function: void mpf_class::swap (mpf_class& OP) - -- Function: void swap (mpf_class& OP1, mpf_class& OP2) - -- Function: mpf_class trunc (mpf_class OP) - These functions provide a C++ class interface to the corresponding - GMP C routines. - - `cmp' can be used with any of the classes or the standard C++ - types, except `long long' and `long double'. - - The accuracy provided by `hypot' is not currently guaranteed. - - -- Function: mp_bitcnt_t mpf_class::get_prec () - -- Function: void mpf_class::set_prec (mp_bitcnt_t PREC) - -- Function: void mpf_class::set_prec_raw (mp_bitcnt_t PREC) - Get or set the current precision of an `mpf_class'. - - The restrictions described for `mpf_set_prec_raw' (*note - Initializing Floats::) apply to `mpf_class::set_prec_raw'. Note - in particular that the `mpf_class' must be restored to it's - allocated precision before being destroyed. This must be done by - application code, there's no automatic mechanism for it. - - -File: gmp.info, Node: C++ Interface Random Numbers, Next: C++ Interface Limitations, Prev: C++ Interface Floats, Up: C++ Class Interface - -12.5 C++ Interface Random Numbers -================================= - - -- Class: gmp_randclass - The C++ class interface to the GMP random number functions uses - `gmp_randclass' to hold an algorithm selection and current state, - as per `gmp_randstate_t'. - - -- Function: gmp_randclass::gmp_randclass (void (*RANDINIT) - (gmp_randstate_t, ...), ...) - Construct a `gmp_randclass', using a call to the given RANDINIT - function (*note Random State Initialization::). The arguments - expected are the same as RANDINIT, but with `mpz_class' instead of - `mpz_t'. For example, - - gmp_randclass r1 (gmp_randinit_default); - gmp_randclass r2 (gmp_randinit_lc_2exp_size, 32); - gmp_randclass r3 (gmp_randinit_lc_2exp, a, c, m2exp); - gmp_randclass r4 (gmp_randinit_mt); - - `gmp_randinit_lc_2exp_size' will fail if the size requested is too - big, an `std::length_error' exception is thrown in that case. - - -- Function: gmp_randclass::gmp_randclass (gmp_randalg_t ALG, ...) - Construct a `gmp_randclass' using the same parameters as - `gmp_randinit' (*note Random State Initialization::). This - function is obsolete and the above RANDINIT style should be - preferred. - - -- Function: void gmp_randclass::seed (unsigned long int S) - -- Function: void gmp_randclass::seed (mpz_class S) - Seed a random number generator. See *note Random Number - Functions::, for how to choose a good seed. - - -- Function: mpz_class gmp_randclass::get_z_bits (mp_bitcnt_t BITS) - -- Function: mpz_class gmp_randclass::get_z_bits (mpz_class BITS) - Generate a random integer with a specified number of bits. - - -- Function: mpz_class gmp_randclass::get_z_range (mpz_class N) - Generate a random integer in the range 0 to N-1 inclusive. - - -- Function: mpf_class gmp_randclass::get_f () - -- Function: mpf_class gmp_randclass::get_f (mp_bitcnt_t PREC) - Generate a random float F in the range 0 <= F < 1. F will be to - PREC bits precision, or if PREC is not given then to the precision - of the destination. For example, - - gmp_randclass r; - ... - mpf_class f (0, 512); // 512 bits precision - f = r.get_f(); // random number, 512 bits - - -File: gmp.info, Node: C++ Interface Limitations, Prev: C++ Interface Random Numbers, Up: C++ Class Interface - -12.6 C++ Interface Limitations -============================== - -`mpq_class' and Templated Reading - A generic piece of template code probably won't know that - `mpq_class' requires a `canonicalize' call if inputs read with - `operator>>' might be non-canonical. This can lead to incorrect - results. - - `operator>>' behaves as it does for reasons of efficiency. A - canonicalize can be quite time consuming on large operands, and is - best avoided if it's not necessary. - - But this potential difficulty reduces the usefulness of - `mpq_class'. Perhaps a mechanism to tell `operator>>' what to do - will be adopted in the future, maybe a preprocessor define, a - global flag, or an `ios' flag pressed into service. Or maybe, at - the risk of inconsistency, the `mpq_class' `operator>>' could - canonicalize and leave `mpq_t' `operator>>' not doing so, for use - on those occasions when that's acceptable. Send feedback or - alternate ideas to <gmp-bugs@gmplib.org>. - -Subclassing - Subclassing the GMP C++ classes works, but is not currently - recommended. - - Expressions involving subclasses resolve correctly (or seem to), - but in normal C++ fashion the subclass doesn't inherit - constructors and assignments. There's many of those in the GMP - classes, and a good way to reestablish them in a subclass is not - yet provided. - -Templated Expressions - A subtle difficulty exists when using expressions together with - application-defined template functions. Consider the following, - with `T' intended to be some numeric type, - - template <class T> - T fun (const T &, const T &); - - When used with, say, plain `mpz_class' variables, it works fine: - `T' is resolved as `mpz_class'. - - mpz_class f(1), g(2); - fun (f, g); // Good - - But when one of the arguments is an expression, it doesn't work. - - mpz_class f(1), g(2), h(3); - fun (f, g+h); // Bad - - This is because `g+h' ends up being a certain expression template - type internal to `gmpxx.h', which the C++ template resolution - rules are unable to automatically convert to `mpz_class'. The - workaround is simply to add an explicit cast. - - mpz_class f(1), g(2), h(3); - fun (f, mpz_class(g+h)); // Good - - Similarly, within `fun' it may be necessary to cast an expression - to type `T' when calling a templated `fun2'. - - template <class T> - void fun (T f, T g) - { - fun2 (f, f+g); // Bad - } - - template <class T> - void fun (T f, T g) - { - fun2 (f, T(f+g)); // Good - } - -C++11 - C++11 provides several new ways in which types can be inferred: - `auto', `decltype', etc. While they can be very convenient, they - don't mix well with expression templates. In this example, the - addition is performed twice, as if we had defined `sum' as a macro. - - mpz_class z = 33; - auto sum = z + z; - mpz_class prod = sum * sum; - - This other example may crash, though some compilers might make it - look like it is working, because the expression `z+z' goes out of - scope before it is evaluated. - - mpz_class z = 33; - auto sum = z + z + z; - mpz_class prod = sum * 2; - - It is thus strongly recommended to avoid `auto' anywhere a GMP C++ - expression may appear. - - -File: gmp.info, Node: Custom Allocation, Next: Language Bindings, Prev: C++ Class Interface, Up: Top - -13 Custom Allocation -******************** - -By default GMP uses `malloc', `realloc' and `free' for memory -allocation, and if they fail GMP prints a message to the standard error -output and terminates the program. - - Alternate functions can be specified, to allocate memory in a -different way or to have a different error action on running out of -memory. - - -- Function: void mp_set_memory_functions ( - void *(*ALLOC_FUNC_PTR) (size_t), - void *(*REALLOC_FUNC_PTR) (void *, size_t, size_t), - void (*FREE_FUNC_PTR) (void *, size_t)) - Replace the current allocation functions from the arguments. If - an argument is `NULL', the corresponding default function is used. - - These functions will be used for all memory allocation done by - GMP, apart from temporary space from `alloca' if that function is - available and GMP is configured to use it (*note Build Options::). - - *Be sure to call `mp_set_memory_functions' only when there are no - active GMP objects allocated using the previous memory functions! - Usually that means calling it before any other GMP function.* - - The functions supplied should fit the following declarations: - - -- Function: void * allocate_function (size_t ALLOC_SIZE) - Return a pointer to newly allocated space with at least ALLOC_SIZE - bytes. - - -- Function: void * reallocate_function (void *PTR, size_t OLD_SIZE, - size_t NEW_SIZE) - Resize a previously allocated block PTR of OLD_SIZE bytes to be - NEW_SIZE bytes. - - The block may be moved if necessary or if desired, and in that - case the smaller of OLD_SIZE and NEW_SIZE bytes must be copied to - the new location. The return value is a pointer to the resized - block, that being the new location if moved or just PTR if not. - - PTR is never `NULL', it's always a previously allocated block. - NEW_SIZE may be bigger or smaller than OLD_SIZE. - - -- Function: void free_function (void *PTR, size_t SIZE) - De-allocate the space pointed to by PTR. - - PTR is never `NULL', it's always a previously allocated block of - SIZE bytes. - - A "byte" here means the unit used by the `sizeof' operator. - - The REALLOCATE_FUNCTION parameter OLD_SIZE and the FREE_FUNCTION -parameter SIZE are passed for convenience, but of course they can be -ignored if not needed by an implementation. The default functions -using `malloc' and friends for instance don't use them. - - No error return is allowed from any of these functions, if they -return then they must have performed the specified operation. In -particular note that ALLOCATE_FUNCTION or REALLOCATE_FUNCTION mustn't -return `NULL'. - - Getting a different fatal error action is a good use for custom -allocation functions, for example giving a graphical dialog rather than -the default print to `stderr'. How much is possible when genuinely out -of memory is another question though. - - There's currently no defined way for the allocation functions to -recover from an error such as out of memory, they must terminate -program execution. A `longjmp' or throwing a C++ exception will have -undefined results. This may change in the future. - - GMP may use allocated blocks to hold pointers to other allocated -blocks. This will limit the assumptions a conservative garbage -collection scheme can make. - - Since the default GMP allocation uses `malloc' and friends, those -functions will be linked in even if the first thing a program does is an -`mp_set_memory_functions'. It's necessary to change the GMP sources if -this is a problem. - - - -- Function: void mp_get_memory_functions ( - void *(**ALLOC_FUNC_PTR) (size_t), - void *(**REALLOC_FUNC_PTR) (void *, size_t, size_t), - void (**FREE_FUNC_PTR) (void *, size_t)) - Get the current allocation functions, storing function pointers to - the locations given by the arguments. If an argument is `NULL', - that function pointer is not stored. - - For example, to get just the current free function, - - void (*freefunc) (void *, size_t); - - mp_get_memory_functions (NULL, NULL, &freefunc); - - -File: gmp.info, Node: Language Bindings, Next: Algorithms, Prev: Custom Allocation, Up: Top - -14 Language Bindings -******************** - -The following packages and projects offer access to GMP from languages -other than C, though perhaps with varying levels of functionality and -efficiency. - - -C++ - * GMP C++ class interface, *note C++ Class Interface:: - Straightforward interface, expression templates to eliminate - temporaries. - - * ALP `https://www-sop.inria.fr/saga/logiciels/ALP/' - Linear algebra and polynomials using templates. - - * Arithmos `http://cant.ua.ac.be/old/arithmos/' - Rationals with infinities and square roots. - - * CLN `http://www.ginac.de/CLN/' - High level classes for arithmetic. - - * Linbox `http://www.linalg.org/' - Sparse vectors and matrices. - - * NTL `http://www.shoup.net/ntl/' - A C++ number theory library. - -Eiffel - * Eiffelroom `http://www.eiffelroom.org/node/442' - -Haskell - * Glasgow Haskell Compiler `https://www.haskell.org/ghc/' - -Java - * Kaffe `https://github.com/kaffe/kaffe' - -Lisp - * GNU Common Lisp `https://www.gnu.org/software/gcl/gcl.html' - - * Librep `http://librep.sourceforge.net/' - - * XEmacs (21.5.18 beta and up) `http://www.xemacs.org' - Optional big integers, rationals and floats using GMP. - -M4 - * GNU m4 betas `http://www.seindal.dk/rene/gnu/' - Optionally provides an arbitrary precision `mpeval'. - -ML - * MLton compiler `http://mlton.org/' - -Objective Caml - * MLGMP `http://opam.ocamlpro.com/pkg/mlgmp.20120224.html' - - * Numerix `http://pauillac.inria.fr/~quercia/' - Optionally using GMP. - -Oz - * Mozart `http://mozart.github.io/' - -Pascal - * GNU Pascal Compiler `http://www.gnu-pascal.de/' - GMP unit. - - * Numerix `http://pauillac.inria.fr/~quercia/' - For Free Pascal, optionally using GMP. - -Perl - * GMP module, see `demos/perl' in the GMP sources (*note - Demonstration Programs::). - - * Math::GMP `http://www.cpan.org/' - Compatible with Math::BigInt, but not as many functions as - the GMP module above. - - * Math::BigInt::GMP `http://www.cpan.org/' - Plug Math::GMP into normal Math::BigInt operations. - -Pike - * mpz module in the standard distribution, - `http://pike.ida.liu.se/' - -Prolog - * SWI Prolog `http://www.swi-prolog.org/' - Arbitrary precision floats. - -Python - * GMPY `https://code.google.com/p/gmpy/' - -Ruby - * http://rubygems.org/gems/gmp - -Scheme - * GNU Guile `https://www.gnu.org/software/guile/guile.html' - - * RScheme `http://www.rscheme.org/' - - * STklos `http://www.stklos.net/' - -Smalltalk - * GNU Smalltalk - `http://www.smalltalk.org/versions/GNUSmalltalk.html' - -Other - * Axiom `https://savannah.nongnu.org/projects/axiom' - Computer algebra using GCL. - - * DrGenius `http://drgenius.seul.org/' - Geometry system and mathematical programming language. - - * GiNaC `http://www.ginac.de/' - C++ computer algebra using CLN. - - * GOO `https://www.eecs.berkeley.edu/~jrb/goo/' - Dynamic object oriented language. - - * Maxima `https://www.ma.utexas.edu/users/wfs/maxima.html' - Macsyma computer algebra using GCL. - - * Regina `http://regina.sourceforge.net/' - Topological calculator. - - * Yacas `http://yacas.sourceforge.net' - Yet another computer algebra system. - - - -File: gmp.info, Node: Algorithms, Next: Internals, Prev: Language Bindings, Up: Top - -15 Algorithms -************* - -This chapter is an introduction to some of the algorithms used for -various GMP operations. The code is likely to be hard to understand -without knowing something about the algorithms. - - Some GMP internals are mentioned, but applications that expect to be -compatible with future GMP releases should take care to use only the -documented functions. - -* Menu: - -* Multiplication Algorithms:: -* Division Algorithms:: -* Greatest Common Divisor Algorithms:: -* Powering Algorithms:: -* Root Extraction Algorithms:: -* Radix Conversion Algorithms:: -* Other Algorithms:: -* Assembly Coding:: - - -File: gmp.info, Node: Multiplication Algorithms, Next: Division Algorithms, Prev: Algorithms, Up: Algorithms - -15.1 Multiplication -=================== - -NxN limb multiplications and squares are done using one of seven -algorithms, as the size N increases. - - Algorithm Threshold - Basecase (none) - Karatsuba `MUL_TOOM22_THRESHOLD' - Toom-3 `MUL_TOOM33_THRESHOLD' - Toom-4 `MUL_TOOM44_THRESHOLD' - Toom-6.5 `MUL_TOOM6H_THRESHOLD' - Toom-8.5 `MUL_TOOM8H_THRESHOLD' - FFT `MUL_FFT_THRESHOLD' - - Similarly for squaring, with the `SQR' thresholds. - - NxM multiplications of operands with different sizes above -`MUL_TOOM22_THRESHOLD' are currently done by special Toom-inspired -algorithms or directly with FFT, depending on operand size (*note -Unbalanced Multiplication::). - -* Menu: - -* Basecase Multiplication:: -* Karatsuba Multiplication:: -* Toom 3-Way Multiplication:: -* Toom 4-Way Multiplication:: -* Higher degree Toom'n'half:: -* FFT Multiplication:: -* Other Multiplication:: -* Unbalanced Multiplication:: - - -File: gmp.info, Node: Basecase Multiplication, Next: Karatsuba Multiplication, Prev: Multiplication Algorithms, Up: Multiplication Algorithms - -15.1.1 Basecase Multiplication ------------------------------- - -Basecase NxM multiplication is a straightforward rectangular set of -cross-products, the same as long multiplication done by hand and for -that reason sometimes known as the schoolbook or grammar school method. -This is an O(N*M) algorithm. See Knuth section 4.3.1 algorithm M -(*note References::), and the `mpn/generic/mul_basecase.c' code. - - Assembly implementations of `mpn_mul_basecase' are essentially the -same as the generic C code, but have all the usual assembly tricks and -obscurities introduced for speed. - - A square can be done in roughly half the time of a multiply, by -using the fact that the cross products above and below the diagonal are -the same. A triangle of products below the diagonal is formed, doubled -(left shift by one bit), and then the products on the diagonal added. -This can be seen in `mpn/generic/sqr_basecase.c'. Again the assembly -implementations take essentially the same approach. - - u0 u1 u2 u3 u4 - +---+---+---+---+---+ - u0 | d | | | | | - +---+---+---+---+---+ - u1 | | d | | | | - +---+---+---+---+---+ - u2 | | | d | | | - +---+---+---+---+---+ - u3 | | | | d | | - +---+---+---+---+---+ - u4 | | | | | d | - +---+---+---+---+---+ - - In practice squaring isn't a full 2x faster than multiplying, it's -usually around 1.5x. Less than 1.5x probably indicates -`mpn_sqr_basecase' wants improving on that CPU. - - On some CPUs `mpn_mul_basecase' can be faster than the generic C -`mpn_sqr_basecase' on some small sizes. `SQR_BASECASE_THRESHOLD' is -the size at which to use `mpn_sqr_basecase', this will be zero if that -routine should be used always. - - -File: gmp.info, Node: Karatsuba Multiplication, Next: Toom 3-Way Multiplication, Prev: Basecase Multiplication, Up: Multiplication Algorithms - -15.1.2 Karatsuba Multiplication -------------------------------- - -The Karatsuba multiplication algorithm is described in Knuth section -4.3.3 part A, and various other textbooks. A brief description is -given here. - - The inputs x and y are treated as each split into two parts of equal -length (or the most significant part one limb shorter if N is odd). - - high low - +----------+----------+ - | x1 | x0 | - +----------+----------+ - - +----------+----------+ - | y1 | y0 | - +----------+----------+ - - Let b be the power of 2 where the split occurs, i.e. if x0 is k -limbs (y0 the same) then b=2^(k*mp_bits_per_limb). With that x=x1*b+x0 -and y=y1*b+y0, and the following holds, - - x*y = (b^2+b)*x1*y1 - b*(x1-x0)*(y1-y0) + (b+1)*x0*y0 - - This formula means doing only three multiplies of (N/2)x(N/2) limbs, -whereas a basecase multiply of NxN limbs is equivalent to four -multiplies of (N/2)x(N/2). The factors (b^2+b) etc represent the -positions where the three products must be added. - - high low - +--------+--------+ +--------+--------+ - | x1*y1 | | x0*y0 | - +--------+--------+ +--------+--------+ - +--------+--------+ - add | x1*y1 | - +--------+--------+ - +--------+--------+ - add | x0*y0 | - +--------+--------+ - +--------+--------+ - sub | (x1-x0)*(y1-y0) | - +--------+--------+ - - The term (x1-x0)*(y1-y0) is best calculated as an absolute value, -and the sign used to choose to add or subtract. Notice the sum -high(x0*y0)+low(x1*y1) occurs twice, so it's possible to do 5*k limb -additions, rather than 6*k, but in GMP extra function call overheads -outweigh the saving. - - Squaring is similar to multiplying, but with x=y the formula reduces -to an equivalent with three squares, - - x^2 = (b^2+b)*x1^2 - b*(x1-x0)^2 + (b+1)*x0^2 - - The final result is accumulated from those three squares the same -way as for the three multiplies above. The middle term (x1-x0)^2 is now -always positive. - - A similar formula for both multiplying and squaring can be -constructed with a middle term (x1+x0)*(y1+y0). But those sums can -exceed k limbs, leading to more carry handling and additions than the -form above. - - Karatsuba multiplication is asymptotically an O(N^1.585) algorithm, -the exponent being log(3)/log(2), representing 3 multiplies each 1/2 -the size of the inputs. This is a big improvement over the basecase -multiply at O(N^2) and the advantage soon overcomes the extra additions -Karatsuba performs. `MUL_TOOM22_THRESHOLD' can be as little as 10 -limbs. The `SQR' threshold is usually about twice the `MUL'. - - The basecase algorithm will take a time of the form M(N) = a*N^2 + -b*N + c and the Karatsuba algorithm K(N) = 3*M(N/2) + d*N + e, which -expands to K(N) = 3/4*a*N^2 + 3/2*b*N + 3*c + d*N + e. The factor 3/4 -for a means per-crossproduct speedups in the basecase code will -increase the threshold since they benefit M(N) more than K(N). And -conversely the 3/2 for b means linear style speedups of b will increase -the threshold since they benefit K(N) more than M(N). The latter can -be seen for instance when adding an optimized `mpn_sqr_diagonal' to -`mpn_sqr_basecase'. Of course all speedups reduce total time, and in -that sense the algorithm thresholds are merely of academic interest. - - -File: gmp.info, Node: Toom 3-Way Multiplication, Next: Toom 4-Way Multiplication, Prev: Karatsuba Multiplication, Up: Multiplication Algorithms - -15.1.3 Toom 3-Way Multiplication --------------------------------- - -The Karatsuba formula is the simplest case of a general approach to -splitting inputs that leads to both Toom and FFT algorithms. A -description of Toom can be found in Knuth section 4.3.3, with an -example 3-way calculation after Theorem A. The 3-way form used in GMP -is described here. - - The operands are each considered split into 3 pieces of equal length -(or the most significant part 1 or 2 limbs shorter than the other two). - - high low - +----------+----------+----------+ - | x2 | x1 | x0 | - +----------+----------+----------+ - - +----------+----------+----------+ - | y2 | y1 | y0 | - +----------+----------+----------+ - -These parts are treated as the coefficients of two polynomials - - X(t) = x2*t^2 + x1*t + x0 - Y(t) = y2*t^2 + y1*t + y0 - - Let b equal the power of 2 which is the size of the x0, x1, y0 and -y1 pieces, i.e. if they're k limbs each then b=2^(k*mp_bits_per_limb). -With this x=X(b) and y=Y(b). - - Let a polynomial W(t)=X(t)*Y(t) and suppose its coefficients are - - W(t) = w4*t^4 + w3*t^3 + w2*t^2 + w1*t + w0 - - The w[i] are going to be determined, and when they are they'll give -the final result using w=W(b), since x*y=X(b)*Y(b)=W(b). The -coefficients will be roughly b^2 each, and the final W(b) will be an -addition like, - - high low - +-------+-------+ - | w4 | - +-------+-------+ - +--------+-------+ - | w3 | - +--------+-------+ - +--------+-------+ - | w2 | - +--------+-------+ - +--------+-------+ - | w1 | - +--------+-------+ - +-------+-------+ - | w0 | - +-------+-------+ - - The w[i] coefficients could be formed by a simple set of cross -products, like w4=x2*y2, w3=x2*y1+x1*y2, w2=x2*y0+x1*y1+x0*y2 etc, but -this would need all nine x[i]*y[j] for i,j=0,1,2, and would be -equivalent merely to a basecase multiply. Instead the following -approach is used. - - X(t) and Y(t) are evaluated and multiplied at 5 points, giving -values of W(t) at those points. In GMP the following points are used, - - Point Value - t=0 x0 * y0, which gives w0 immediately - t=1 (x2+x1+x0) * (y2+y1+y0) - t=-1 (x2-x1+x0) * (y2-y1+y0) - t=2 (4*x2+2*x1+x0) * (4*y2+2*y1+y0) - t=inf x2 * y2, which gives w4 immediately - - At t=-1 the values can be negative and that's handled using the -absolute values and tracking the sign separately. At t=inf the value -is actually X(t)*Y(t)/t^4 in the limit as t approaches infinity, but -it's much easier to think of as simply x2*y2 giving w4 immediately -(much like x0*y0 at t=0 gives w0 immediately). - - Each of the points substituted into W(t)=w4*t^4+...+w0 gives a -linear combination of the w[i] coefficients, and the value of those -combinations has just been calculated. - - W(0) = w0 - W(1) = w4 + w3 + w2 + w1 + w0 - W(-1) = w4 - w3 + w2 - w1 + w0 - W(2) = 16*w4 + 8*w3 + 4*w2 + 2*w1 + w0 - W(inf) = w4 - - This is a set of five equations in five unknowns, and some -elementary linear algebra quickly isolates each w[i]. This involves -adding or subtracting one W(t) value from another, and a couple of -divisions by powers of 2 and one division by 3, the latter using the -special `mpn_divexact_by3' (*note Exact Division::). - - The conversion of W(t) values to the coefficients is interpolation. -A polynomial of degree 4 like W(t) is uniquely determined by values -known at 5 different points. The points are arbitrary and can be -chosen to make the linear equations come out with a convenient set of -steps for quickly isolating the w[i]. - - Squaring follows the same procedure as multiplication, but there's -only one X(t) and it's evaluated at the 5 points, and those values -squared to give values of W(t). The interpolation is then identical, -and in fact the same `toom_interpolate_5pts' subroutine is used for -both squaring and multiplying. - - Toom-3 is asymptotically O(N^1.465), the exponent being -log(5)/log(3), representing 5 recursive multiplies of 1/3 the original -size each. This is an improvement over Karatsuba at O(N^1.585), though -Toom does more work in the evaluation and interpolation and so it only -realizes its advantage above a certain size. - - Near the crossover between Toom-3 and Karatsuba there's generally a -range of sizes where the difference between the two is small. -`MUL_TOOM33_THRESHOLD' is a somewhat arbitrary point in that range and -successive runs of the tune program can give different values due to -small variations in measuring. A graph of time versus size for the two -shows the effect, see `tune/README'. - - At the fairly small sizes where the Toom-3 thresholds occur it's -worth remembering that the asymptotic behaviour for Karatsuba and -Toom-3 can't be expected to make accurate predictions, due of course to -the big influence of all sorts of overheads, and the fact that only a -few recursions of each are being performed. Even at large sizes -there's a good chance machine dependent effects like cache architecture -will mean actual performance deviates from what might be predicted. - - The formula given for the Karatsuba algorithm (*note Karatsuba -Multiplication::) has an equivalent for Toom-3 involving only five -multiplies, but this would be complicated and unenlightening. - - An alternate view of Toom-3 can be found in Zuras (*note -References::), using a vector to represent the x and y splits and a -matrix multiplication for the evaluation and interpolation stages. The -matrix inverses are not meant to be actually used, and they have -elements with values much greater than in fact arise in the -interpolation steps. The diagram shown for the 3-way is attractive, -but again doesn't have to be implemented that way and for example with -a bit of rearrangement just one division by 6 can be done. - - -File: gmp.info, Node: Toom 4-Way Multiplication, Next: Higher degree Toom'n'half, Prev: Toom 3-Way Multiplication, Up: Multiplication Algorithms - -15.1.4 Toom 4-Way Multiplication --------------------------------- - -Karatsuba and Toom-3 split the operands into 2 and 3 coefficients, -respectively. Toom-4 analogously splits the operands into 4 -coefficients. Using the notation from the section on Toom-3 -multiplication, we form two polynomials: - - X(t) = x3*t^3 + x2*t^2 + x1*t + x0 - Y(t) = y3*t^3 + y2*t^2 + y1*t + y0 - - X(t) and Y(t) are evaluated and multiplied at 7 points, giving -values of W(t) at those points. In GMP the following points are used, - - Point Value - t=0 x0 * y0, which gives w0 immediately - t=1/2 (x3+2*x2+4*x1+8*x0) * (y3+2*y2+4*y1+8*y0) - t=-1/2 (-x3+2*x2-4*x1+8*x0) * (-y3+2*y2-4*y1+8*y0) - t=1 (x3+x2+x1+x0) * (y3+y2+y1+y0) - t=-1 (-x3+x2-x1+x0) * (-y3+y2-y1+y0) - t=2 (8*x3+4*x2+2*x1+x0) * (8*y3+4*y2+2*y1+y0) - t=inf x3 * y3, which gives w6 immediately - - The number of additions and subtractions for Toom-4 is much larger -than for Toom-3. But several subexpressions occur multiple times, for -example x2+x0, occurs for both t=1 and t=-1. - - Toom-4 is asymptotically O(N^1.404), the exponent being -log(7)/log(4), representing 7 recursive multiplies of 1/4 the original -size each. - - -File: gmp.info, Node: Higher degree Toom'n'half, Next: FFT Multiplication, Prev: Toom 4-Way Multiplication, Up: Multiplication Algorithms - -15.1.5 Higher degree Toom'n'half --------------------------------- - -The Toom algorithms described above (*note Toom 3-Way Multiplication::, -*note Toom 4-Way Multiplication::) generalizes to split into an -arbitrary number of pieces. In general a split of two equally long -operands into r pieces leads to evaluations and pointwise -multiplications done at 2*r-1 points. To fully exploit symmetries it -would be better to have a multiple of 4 points, that's why for higher -degree Toom'n'half is used. - - Toom'n'half means that the existence of one more piece is considered -for a single operand. It can be virtual, i.e. zero, or real, when the -two operand are not exactly balanced. By choosing an even r, Toom-r+1/2 -requires 2r points, a multiple of four. - - The four-plets of points include 0, inf, +1, -1 and +-2^i, +-2^-i . -Each of them giving shortcuts for the evaluation phase and for some -steps in the interpolation phase. Further tricks are used to reduce the -memory footprint of the whole multiplication algorithm to a memory -buffer equanl in size to the result of the product. - - Current GMP uses both Toom-6'n'half and Toom-8'n'half. - - -File: gmp.info, Node: FFT Multiplication, Next: Other Multiplication, Prev: Higher degree Toom'n'half, Up: Multiplication Algorithms - -15.1.6 FFT Multiplication -------------------------- - -At large to very large sizes a Fermat style FFT multiplication is used, -following Scho"nhage and Strassen (*note References::). Descriptions -of FFTs in various forms can be found in many textbooks, for instance -Knuth section 4.3.3 part C or Lipson chapter IX. A brief description -of the form used in GMP is given here. - - The multiplication done is x*y mod 2^N+1, for a given N. A full -product x*y is obtained by choosing N>=bits(x)+bits(y) and padding x -and y with high zero limbs. The modular product is the native form for -the algorithm, so padding to get a full product is unavoidable. - - The algorithm follows a split, evaluate, pointwise multiply, -interpolate and combine similar to that described above for Karatsuba -and Toom-3. A k parameter controls the split, with an FFT-k splitting -into 2^k pieces of M=N/2^k bits each. N must be a multiple of -(2^k)*mp_bits_per_limb so the split falls on limb boundaries, avoiding -bit shifts in the split and combine stages. - - The evaluations, pointwise multiplications, and interpolation, are -all done modulo 2^N'+1 where N' is 2M+k+3 rounded up to a multiple of -2^k and of `mp_bits_per_limb'. The results of interpolation will be -the following negacyclic convolution of the input pieces, and the -choice of N' ensures these sums aren't truncated. - - --- - \ b - w[n] = / (-1) * x[i] * y[j] - --- - i+j==b*2^k+n - b=0,1 - - The points used for the evaluation are g^i for i=0 to 2^k-1 where -g=2^(2N'/2^k). g is a 2^k'th root of unity mod 2^N'+1, which produces -necessary cancellations at the interpolation stage, and it's also a -power of 2 so the fast Fourier transforms used for the evaluation and -interpolation do only shifts, adds and negations. - - The pointwise multiplications are done modulo 2^N'+1 and either -recurse into a further FFT or use a plain multiplication (Toom-3, -Karatsuba or basecase), whichever is optimal at the size N'. The -interpolation is an inverse fast Fourier transform. The resulting set -of sums of x[i]*y[j] are added at appropriate offsets to give the final -result. - - Squaring is the same, but x is the only input so it's one transform -at the evaluate stage and the pointwise multiplies are squares. The -interpolation is the same. - - For a mod 2^N+1 product, an FFT-k is an O(N^(k/(k-1))) algorithm, -the exponent representing 2^k recursed modular multiplies each -1/2^(k-1) the size of the original. Each successive k is an asymptotic -improvement, but overheads mean each is only faster at bigger and -bigger sizes. In the code, `MUL_FFT_TABLE' and `SQR_FFT_TABLE' are the -thresholds where each k is used. Each new k effectively swaps some -multiplying for some shifts, adds and overheads. - - A mod 2^N+1 product can be formed with a normal NxN->2N bit multiply -plus a subtraction, so an FFT and Toom-3 etc can be compared directly. -A k=4 FFT at O(N^1.333) can be expected to be the first faster than -Toom-3 at O(N^1.465). In practice this is what's found, with -`MUL_FFT_MODF_THRESHOLD' and `SQR_FFT_MODF_THRESHOLD' being between 300 -and 1000 limbs, depending on the CPU. So far it's been found that only -very large FFTs recurse into pointwise multiplies above these sizes. - - When an FFT is to give a full product, the change of N to 2N doesn't -alter the theoretical complexity for a given k, but for the purposes of -considering where an FFT might be first used it can be assumed that the -FFT is recursing into a normal multiply and that on that basis it's -doing 2^k recursed multiplies each 1/2^(k-2) the size of the inputs, -making it O(N^(k/(k-2))). This would mean k=7 at O(N^1.4) would be the -first FFT faster than Toom-3. In practice `MUL_FFT_THRESHOLD' and -`SQR_FFT_THRESHOLD' have been found to be in the k=8 range, somewhere -between 3000 and 10000 limbs. - - The way N is split into 2^k pieces and then 2M+k+3 is rounded up to -a multiple of 2^k and `mp_bits_per_limb' means that when -2^k>=mp_bits_per_limb the effective N is a multiple of 2^(2k-1) bits. -The +k+3 means some values of N just under such a multiple will be -rounded to the next. The complexity calculations above assume that a -favourable size is used, meaning one which isn't padded through -rounding, and it's also assumed that the extra +k+3 bits are negligible -at typical FFT sizes. - - The practical effect of the 2^(2k-1) constraint is to introduce a -step-effect into measured speeds. For example k=8 will round N up to a -multiple of 32768 bits, so for a 32-bit limb there'll be 512 limb -groups of sizes for which `mpn_mul_n' runs at the same speed. Or for -k=9 groups of 2048 limbs, k=10 groups of 8192 limbs, etc. In practice -it's been found each k is used at quite small multiples of its size -constraint and so the step effect is quite noticeable in a time versus -size graph. - - The threshold determinations currently measure at the mid-points of -size steps, but this is sub-optimal since at the start of a new step it -can happen that it's better to go back to the previous k for a while. -Something more sophisticated for `MUL_FFT_TABLE' and `SQR_FFT_TABLE' -will be needed. - - -File: gmp.info, Node: Other Multiplication, Next: Unbalanced Multiplication, Prev: FFT Multiplication, Up: Multiplication Algorithms - -15.1.7 Other Multiplication ---------------------------- - -The Toom algorithms described above (*note Toom 3-Way Multiplication::, -*note Toom 4-Way Multiplication::) generalizes to split into an -arbitrary number of pieces, as per Knuth section 4.3.3 algorithm C. -This is not currently used. The notes here are merely for interest. - - In general a split into r+1 pieces is made, and evaluations and -pointwise multiplications done at 2*r+1 points. A 4-way split does 7 -pointwise multiplies, 5-way does 9, etc. Asymptotically an (r+1)-way -algorithm is O(N^(log(2*r+1)/log(r+1))). Only the pointwise -multiplications count towards big-O complexity, but the time spent in -the evaluate and interpolate stages grows with r and has a significant -practical impact, with the asymptotic advantage of each r realized only -at bigger and bigger sizes. The overheads grow as O(N*r), whereas in -an r=2^k FFT they grow only as O(N*log(r)). - - Knuth algorithm C evaluates at points 0,1,2,...,2*r, but exercise 4 -uses -r,...,0,...,r and the latter saves some small multiplies in the -evaluate stage (or rather trades them for additions), and has a further -saving of nearly half the interpolate steps. The idea is to separate -odd and even final coefficients and then perform algorithm C steps C7 -and C8 on them separately. The divisors at step C7 become j^2 and the -multipliers at C8 become 2*t*j-j^2. - - Splitting odd and even parts through positive and negative points -can be thought of as using -1 as a square root of unity. If a 4th root -of unity was available then a further split and speedup would be -possible, but no such root exists for plain integers. Going to complex -integers with i=sqrt(-1) doesn't help, essentially because in Cartesian -form it takes three real multiplies to do a complex multiply. The -existence of 2^k'th roots of unity in a suitable ring or field lets the -fast Fourier transform keep splitting and get to O(N*log(r)). - - Floating point FFTs use complex numbers approximating Nth roots of -unity. Some processors have special support for such FFTs. But these -are not used in GMP since it's very difficult to guarantee an exact -result (to some number of bits). An occasional difference of 1 in the -last bit might not matter to a typical signal processing algorithm, but -is of course of vital importance to GMP. - - -File: gmp.info, Node: Unbalanced Multiplication, Prev: Other Multiplication, Up: Multiplication Algorithms - -15.1.8 Unbalanced Multiplication --------------------------------- - -Multiplication of operands with different sizes, both below -`MUL_TOOM22_THRESHOLD' are done with plain schoolbook multiplication -(*note Basecase Multiplication::). - - For really large operands, we invoke FFT directly. - - For operands between these sizes, we use Toom inspired algorithms -suggested by Alberto Zanoni and Marco Bodrato. The idea is to split -the operands into polynomials of different degree. GMP currently -splits the smaller operand onto 2 coefficients, i.e., a polynomial of -degree 1, but the larger operand can be split into 2, 3, or 4 -coefficients, i.e., a polynomial of degree 1 to 3. - - -File: gmp.info, Node: Division Algorithms, Next: Greatest Common Divisor Algorithms, Prev: Multiplication Algorithms, Up: Algorithms - -15.2 Division Algorithms -======================== - -* Menu: - -* Single Limb Division:: -* Basecase Division:: -* Divide and Conquer Division:: -* Block-Wise Barrett Division:: -* Exact Division:: -* Exact Remainder:: -* Small Quotient Division:: - - -File: gmp.info, Node: Single Limb Division, Next: Basecase Division, Prev: Division Algorithms, Up: Division Algorithms - -15.2.1 Single Limb Division ---------------------------- - -Nx1 division is implemented using repeated 2x1 divisions from high to -low, either with a hardware divide instruction or a multiplication by -inverse, whichever is best on a given CPU. - - The multiply by inverse follows "Improved division by invariant -integers" by Mo"ller and Granlund (*note References::) and is -implemented as `udiv_qrnnd_preinv' in `gmp-impl.h'. The idea is to -have a fixed-point approximation to 1/d (see `invert_limb') and then -multiply by the high limb (plus one bit) of the dividend to get a -quotient q. With d normalized (high bit set), q is no more than 1 too -small. Subtracting q*d from the dividend gives a remainder, and -reveals whether q or q-1 is correct. - - The result is a division done with two multiplications and four or -five arithmetic operations. On CPUs with low latency multipliers this -can be much faster than a hardware divide, though the cost of -calculating the inverse at the start may mean it's only better on -inputs bigger than say 4 or 5 limbs. - - When a divisor must be normalized, either for the generic C -`__udiv_qrnnd_c' or the multiply by inverse, the division performed is -actually a*2^k by d*2^k where a is the dividend and k is the power -necessary to have the high bit of d*2^k set. The bit shifts for the -dividend are usually accomplished "on the fly" meaning by extracting -the appropriate bits at each step. Done this way the quotient limbs -come out aligned ready to store. When only the remainder is wanted, an -alternative is to take the dividend limbs unshifted and calculate r = a -mod d*2^k followed by an extra final step r*2^k mod d*2^k. This can -help on CPUs with poor bit shifts or few registers. - - The multiply by inverse can be done two limbs at a time. The -calculation is basically the same, but the inverse is two limbs and the -divisor treated as if padded with a low zero limb. This means more -work, since the inverse will need a 2x2 multiply, but the four 1x1s to -do that are independent and can therefore be done partly or wholly in -parallel. Likewise for a 2x1 calculating q*d. The net effect is to -process two limbs with roughly the same two multiplies worth of latency -that one limb at a time gives. This extends to 3 or 4 limbs at a time, -though the extra work to apply the inverse will almost certainly soon -reach the limits of multiplier throughput. - - A similar approach in reverse can be taken to process just half a -limb at a time if the divisor is only a half limb. In this case the -1x1 multiply for the inverse effectively becomes two (1/2)x1 for each -limb, which can be a saving on CPUs with a fast half limb multiply, or -in fact if the only multiply is a half limb, and especially if it's not -pipelined. - - -File: gmp.info, Node: Basecase Division, Next: Divide and Conquer Division, Prev: Single Limb Division, Up: Division Algorithms - -15.2.2 Basecase Division ------------------------- - -Basecase NxM division is like long division done by hand, but in base -2^mp_bits_per_limb. See Knuth section 4.3.1 algorithm D, and -`mpn/generic/sb_divrem_mn.c'. - - Briefly stated, while the dividend remains larger than the divisor, -a high quotient limb is formed and the Nx1 product q*d subtracted at -the top end of the dividend. With a normalized divisor (most -significant bit set), each quotient limb can be formed with a 2x1 -division and a 1x1 multiplication plus some subtractions. The 2x1 -division is by the high limb of the divisor and is done either with a -hardware divide or a multiply by inverse (the same as in *Note Single -Limb Division::) whichever is faster. Such a quotient is sometimes one -too big, requiring an addback of the divisor, but that happens rarely. - - With Q=N-M being the number of quotient limbs, this is an O(Q*M) -algorithm and will run at a speed similar to a basecase QxM -multiplication, differing in fact only in the extra multiply and divide -for each of the Q quotient limbs. - - -File: gmp.info, Node: Divide and Conquer Division, Next: Block-Wise Barrett Division, Prev: Basecase Division, Up: Division Algorithms - -15.2.3 Divide and Conquer Division ----------------------------------- - -For divisors larger than `DC_DIV_QR_THRESHOLD', division is done by -dividing. Or to be precise by a recursive divide and conquer algorithm -based on work by Moenck and Borodin, Jebelean, and Burnikel and Ziegler -(*note References::). - - The algorithm consists essentially of recognising that a 2NxN -division can be done with the basecase division algorithm (*note -Basecase Division::), but using N/2 limbs as a base, not just a single -limb. This way the multiplications that arise are (N/2)x(N/2) and can -take advantage of Karatsuba and higher multiplication algorithms (*note -Multiplication Algorithms::). The two "digits" of the quotient are -formed by recursive Nx(N/2) divisions. - - If the (N/2)x(N/2) multiplies are done with a basecase multiplication -then the work is about the same as a basecase division, but with more -function call overheads and with some subtractions separated from the -multiplies. These overheads mean that it's only when N/2 is above -`MUL_TOOM22_THRESHOLD' that divide and conquer is of use. - - `DC_DIV_QR_THRESHOLD' is based on the divisor size N, so it will be -somewhere above twice `MUL_TOOM22_THRESHOLD', but how much above -depends on the CPU. An optimized `mpn_mul_basecase' can lower -`DC_DIV_QR_THRESHOLD' a little by offering a ready-made advantage over -repeated `mpn_submul_1' calls. - - Divide and conquer is asymptotically O(M(N)*log(N)) where M(N) is -the time for an NxN multiplication done with FFTs. The actual time is -a sum over multiplications of the recursed sizes, as can be seen near -the end of section 2.2 of Burnikel and Ziegler. For example, within -the Toom-3 range, divide and conquer is 2.63*M(N). With higher -algorithms the M(N) term improves and the multiplier tends to log(N). -In practice, at moderate to large sizes, a 2NxN division is about 2 to -4 times slower than an NxN multiplication. - - -File: gmp.info, Node: Block-Wise Barrett Division, Next: Exact Division, Prev: Divide and Conquer Division, Up: Division Algorithms - -15.2.4 Block-Wise Barrett Division ----------------------------------- - -For the largest divisions, a block-wise Barrett division algorithm is -used. Here, the divisor is inverted to a precision determined by the -relative size of the dividend and divisor. Blocks of quotient limbs -are then generated by multiplying blocks from the dividend by the -inverse. - - Our block-wise algorithm computes a smaller inverse than in the -plain Barrett algorithm. For a 2n/n division, the inverse will be just -ceil(n/2) limbs. - diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/gmp.info-2 b/src/plugins/e-acsl/contrib/libgmp/doc/gmp.info-2 deleted file mode 100644 index 3899b4e62c9b330e036ce4ef0bdad73062f46f46..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/gmp.info-2 +++ /dev/null @@ -1,3922 +0,0 @@ -This is ../../gmp/doc/gmp.info, produced by makeinfo version 4.8 from -../../gmp/doc/gmp.texi. - - This manual describes how to install and use the GNU multiple -precision arithmetic library, version 6.1.0. - - Copyright 1991, 1993-2015 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this -document under the terms of the GNU Free Documentation License, Version -1.3 or any later version published by the Free Software Foundation; -with no Invariant Sections, with the Front-Cover Texts being "A GNU -Manual", and with the Back-Cover Texts being "You have freedom to copy -and modify this GNU Manual, like GNU software". A copy of the license -is included in *Note GNU Free Documentation License::. - -INFO-DIR-SECTION GNU libraries -START-INFO-DIR-ENTRY -* gmp: (gmp). GNU Multiple Precision Arithmetic Library. -END-INFO-DIR-ENTRY - - -File: gmp.info, Node: Exact Division, Next: Exact Remainder, Prev: Block-Wise Barrett Division, Up: Division Algorithms - -15.2.5 Exact Division ---------------------- - -A so-called exact division is when the dividend is known to be an exact -multiple of the divisor. Jebelean's exact division algorithm uses this -knowledge to make some significant optimizations (*note References::). - - The idea can be illustrated in decimal for example with 368154 -divided by 543. Because the low digit of the dividend is 4, the low -digit of the quotient must be 8. This is arrived at from 4*7 mod 10, -using the fact 7 is the modular inverse of 3 (the low digit of the -divisor), since 3*7 == 1 mod 10. So 8*543=4344 can be subtracted from -the dividend leaving 363810. Notice the low digit has become zero. - - The procedure is repeated at the second digit, with the next -quotient digit 7 (7 == 1*7 mod 10), subtracting 7*543=3801, leaving -325800. And finally at the third digit with quotient digit 6 (8*7 mod -10), subtracting 6*543=3258 leaving 0. So the quotient is 678. - - Notice however that the multiplies and subtractions don't need to -extend past the low three digits of the dividend, since that's enough -to determine the three quotient digits. For the last quotient digit no -subtraction is needed at all. On a 2NxN division like this one, only -about half the work of a normal basecase division is necessary. - - For an NxM exact division producing Q=N-M quotient limbs, the saving -over a normal basecase division is in two parts. Firstly, each of the -Q quotient limbs needs only one multiply, not a 2x1 divide and -multiply. Secondly, the crossproducts are reduced when Q>M to -Q*M-M*(M+1)/2, or when Q<=M to Q*(Q-1)/2. Notice the savings are -complementary. If Q is big then many divisions are saved, or if Q is -small then the crossproducts reduce to a small number. - - The modular inverse used is calculated efficiently by `binvert_limb' -in `gmp-impl.h'. This does four multiplies for a 32-bit limb, or six -for a 64-bit limb. `tune/modlinv.c' has some alternate implementations -that might suit processors better at bit twiddling than multiplying. - - The sub-quadratic exact division described by Jebelean in "Exact -Division with Karatsuba Complexity" is not currently implemented. It -uses a rearrangement similar to the divide and conquer for normal -division (*note Divide and Conquer Division::), but operating from low -to high. A further possibility not currently implemented is -"Bidirectional Exact Integer Division" by Krandick and Jebelean which -forms quotient limbs from both the high and low ends of the dividend, -and can halve once more the number of crossproducts needed in a 2NxN -division. - - A special case exact division by 3 exists in `mpn_divexact_by3', -supporting Toom-3 multiplication and `mpq' canonicalizations. It forms -quotient digits with a multiply by the modular inverse of 3 (which is -`0xAA..AAB') and uses two comparisons to determine a borrow for the next -limb. The multiplications don't need to be on the dependent chain, as -long as the effect of the borrows is applied, which can help chips with -pipelined multipliers. - - -File: gmp.info, Node: Exact Remainder, Next: Small Quotient Division, Prev: Exact Division, Up: Division Algorithms - -15.2.6 Exact Remainder ----------------------- - -If the exact division algorithm is done with a full subtraction at each -stage and the dividend isn't a multiple of the divisor, then low zero -limbs are produced but with a remainder in the high limbs. For -dividend a, divisor d, quotient q, and b = 2^mp_bits_per_limb, this -remainder r is of the form - - a = q*d + r*b^n - - n represents the number of zero limbs produced by the subtractions, -that being the number of limbs produced for q. r will be in the range -0<=r<d and can be viewed as a remainder, but one shifted up by a factor -of b^n. - - Carrying out full subtractions at each stage means the same number -of cross products must be done as a normal division, but there's still -some single limb divisions saved. When d is a single limb some -simplifications arise, providing good speedups on a number of -processors. - - The functions `mpn_divexact_by3', `mpn_modexact_1_odd' and the -internal `mpn_redc_X' functions differ subtly in how they return r, -leading to some negations in the above formula, but all are essentially -the same. - - Clearly r is zero when a is a multiple of d, and this leads to -divisibility or congruence tests which are potentially more efficient -than a normal division. - - The factor of b^n on r can be ignored in a GCD when d is odd, hence -the use of `mpn_modexact_1_odd' by `mpn_gcd_1' and `mpz_kronecker_ui' -etc (*note Greatest Common Divisor Algorithms::). - - Montgomery's REDC method for modular multiplications uses operands -of the form of x*b^-n and y*b^-n and on calculating (x*b^-n)*(y*b^-n) -uses the factor of b^n in the exact remainder to reach a product in the -same form (x*y)*b^-n (*note Modular Powering Algorithm::). - - Notice that r generally gives no useful information about the -ordinary remainder a mod d since b^n mod d could be anything. If -however b^n == 1 mod d, then r is the negative of the ordinary -remainder. This occurs whenever d is a factor of b^n-1, as for example -with 3 in `mpn_divexact_by3'. For a 32 or 64 bit limb other such -factors include 5, 17 and 257, but no particular use has been found for -this. - - -File: gmp.info, Node: Small Quotient Division, Prev: Exact Remainder, Up: Division Algorithms - -15.2.7 Small Quotient Division ------------------------------- - -An NxM division where the number of quotient limbs Q=N-M is small can -be optimized somewhat. - - An ordinary basecase division normalizes the divisor by shifting it -to make the high bit set, shifting the dividend accordingly, and -shifting the remainder back down at the end of the calculation. This -is wasteful if only a few quotient limbs are to be formed. Instead a -division of just the top 2*Q limbs of the dividend by the top Q limbs -of the divisor can be used to form a trial quotient. This requires -only those limbs normalized, not the whole of the divisor and dividend. - - A multiply and subtract then applies the trial quotient to the M-Q -unused limbs of the divisor and N-Q dividend limbs (which includes Q -limbs remaining from the trial quotient division). The starting trial -quotient can be 1 or 2 too big, but all cases of 2 too big and most -cases of 1 too big are detected by first comparing the most significant -limbs that will arise from the subtraction. An addback is done if the -quotient still turns out to be 1 too big. - - This whole procedure is essentially the same as one step of the -basecase algorithm done in a Q limb base, though with the trial -quotient test done only with the high limbs, not an entire Q limb -"digit" product. The correctness of this weaker test can be -established by following the argument of Knuth section 4.3.1 exercise -20 but with the v2*q>b*r+u2 condition appropriately relaxed. - - -File: gmp.info, Node: Greatest Common Divisor Algorithms, Next: Powering Algorithms, Prev: Division Algorithms, Up: Algorithms - -15.3 Greatest Common Divisor -============================ - -* Menu: - -* Binary GCD:: -* Lehmer's Algorithm:: -* Subquadratic GCD:: -* Extended GCD:: -* Jacobi Symbol:: - - -File: gmp.info, Node: Binary GCD, Next: Lehmer's Algorithm, Prev: Greatest Common Divisor Algorithms, Up: Greatest Common Divisor Algorithms - -15.3.1 Binary GCD ------------------ - -At small sizes GMP uses an O(N^2) binary style GCD. This is described -in many textbooks, for example Knuth section 4.5.2 algorithm B. It -simply consists of successively reducing odd operands a and b using - - a,b = abs(a-b),min(a,b) - strip factors of 2 from a - - The Euclidean GCD algorithm, as per Knuth algorithms E and A, -repeatedly computes the quotient q = floor(a/b) and replaces a,b by v, -u - q v. The binary algorithm has so far been found to be faster than -the Euclidean algorithm everywhere. One reason the binary method does -well is that the implied quotient at each step is usually small, so -often only one or two subtractions are needed to get the same effect as -a division. Quotients 1, 2 and 3 for example occur 67.7% of the time, -see Knuth section 4.5.3 Theorem E. - - When the implied quotient is large, meaning b is much smaller than -a, then a division is worthwhile. This is the basis for the initial a -mod b reductions in `mpn_gcd' and `mpn_gcd_1' (the latter for both Nx1 -and 1x1 cases). But after that initial reduction, big quotients occur -too rarely to make it worth checking for them. - - - The final 1x1 GCD in `mpn_gcd_1' is done in the generic C code as -described above. For two N-bit operands, the algorithm takes about -0.68 iterations per bit. For optimum performance some attention needs -to be paid to the way the factors of 2 are stripped from a. - - Firstly it may be noted that in twos complement the number of low -zero bits on a-b is the same as b-a, so counting or testing can begin on -a-b without waiting for abs(a-b) to be determined. - - A loop stripping low zero bits tends not to branch predict well, -since the condition is data dependent. But on average there's only a -few low zeros, so an option is to strip one or two bits arithmetically -then loop for more (as done for AMD K6). Or use a lookup table to get -a count for several bits then loop for more (as done for AMD K7). An -alternative approach is to keep just one of a or b odd and iterate - - a,b = abs(a-b), min(a,b) - a = a/2 if even - b = b/2 if even - - This requires about 1.25 iterations per bit, but stripping of a -single bit at each step avoids any branching. Repeating the bit strip -reduces to about 0.9 iterations per bit, which may be a worthwhile -tradeoff. - - Generally with the above approaches a speed of perhaps 6 cycles per -bit can be achieved, which is still not terribly fast with for instance -a 64-bit GCD taking nearly 400 cycles. It's this sort of time which -means it's not usually advantageous to combine a set of divisibility -tests into a GCD. - - Currently, the binary algorithm is used for GCD only when N < 3. - - -File: gmp.info, Node: Lehmer's Algorithm, Next: Subquadratic GCD, Prev: Binary GCD, Up: Greatest Common Divisor Algorithms - -15.3.2 Lehmer's algorithm -------------------------- - -Lehmer's improvement of the Euclidean algorithms is based on the -observation that the initial part of the quotient sequence depends only -on the most significant parts of the inputs. The variant of Lehmer's -algorithm used in GMP splits off the most significant two limbs, as -suggested, e.g., in "A Double-Digit Lehmer-Euclid Algorithm" by -Jebelean (*note References::). The quotients of two double-limb inputs -are collected as a 2 by 2 matrix with single-limb elements. This is -done by the function `mpn_hgcd2'. The resulting matrix is applied to -the inputs using `mpn_mul_1' and `mpn_submul_1'. Each iteration usually -reduces the inputs by almost one limb. In the rare case of a large -quotient, no progress can be made by examining just the most -significant two limbs, and the quotient is computed using plain -division. - - The resulting algorithm is asymptotically O(N^2), just as the -Euclidean algorithm and the binary algorithm. The quadratic part of the -work are the calls to `mpn_mul_1' and `mpn_submul_1'. For small sizes, -the linear work is also significant. There are roughly N calls to the -`mpn_hgcd2' function. This function uses a couple of important -optimizations: - - * It uses the same relaxed notion of correctness as `mpn_hgcd' (see - next section). This means that when called with the most - significant two limbs of two large numbers, the returned matrix - does not always correspond exactly to the initial quotient - sequence for the two large numbers; the final quotient may - sometimes be one off. - - * It takes advantage of the fact the quotients are usually small. - The division operator is not used, since the corresponding - assembler instruction is very slow on most architectures. (This - code could probably be improved further, it uses many branches - that are unfriendly to prediction). - - * It switches from double-limb calculations to single-limb - calculations half-way through, when the input numbers have been - reduced in size from two limbs to one and a half. - - - -File: gmp.info, Node: Subquadratic GCD, Next: Extended GCD, Prev: Lehmer's Algorithm, Up: Greatest Common Divisor Algorithms - -15.3.3 Subquadratic GCD ------------------------ - -For inputs larger than `GCD_DC_THRESHOLD', GCD is computed via the HGCD -(Half GCD) function, as a generalization to Lehmer's algorithm. - - Let the inputs a,b be of size N limbs each. Put S = floor(N/2) + 1. -Then HGCD(a,b) returns a transformation matrix T with non-negative -elements, and reduced numbers (c;d) = T^-1 (a;b). The reduced numbers -c,d must be larger than S limbs, while their difference abs(c-d) must -fit in S limbs. The matrix elements will also be of size roughly N/2. - - The HGCD base case uses Lehmer's algorithm, but with the above stop -condition that returns reduced numbers and the corresponding -transformation matrix half-way through. For inputs larger than -`HGCD_THRESHOLD', HGCD is computed recursively, using the divide and -conquer algorithm in "On Scho"nhage's algorithm and subquadratic -integer GCD computation" by Mo"ller (*note References::). The recursive -algorithm consists of these main steps. - - * Call HGCD recursively, on the most significant N/2 limbs. Apply the - resulting matrix T_1 to the full numbers, reducing them to a size - just above 3N/2. - - * Perform a small number of division or subtraction steps to reduce - the numbers to size below 3N/2. This is essential mainly for the - unlikely case of large quotients. - - * Call HGCD recursively, on the most significant N/2 limbs of the - reduced numbers. Apply the resulting matrix T_2 to the full - numbers, reducing them to a size just above N/2. - - * Compute T = T_1 T_2. - - * Perform a small number of division and subtraction steps to - satisfy the requirements, and return. - - GCD is then implemented as a loop around HGCD, similarly to Lehmer's -algorithm. Where Lehmer repeatedly chops off the top two limbs, calls -`mpn_hgcd2', and applies the resulting matrix to the full numbers, the -sub-quadratic GCD chops off the most significant third of the limbs (the -proportion is a tuning parameter, and 1/3 seems to be more efficient -than, e.g, 1/2), calls `mpn_hgcd', and applies the resulting matrix. -Once the input numbers are reduced to size below `GCD_DC_THRESHOLD', -Lehmer's algorithm is used for the rest of the work. - - The asymptotic running time of both HGCD and GCD is O(M(N)*log(N)), -where M(N) is the time for multiplying two N-limb numbers. - - -File: gmp.info, Node: Extended GCD, Next: Jacobi Symbol, Prev: Subquadratic GCD, Up: Greatest Common Divisor Algorithms - -15.3.4 Extended GCD -------------------- - -The extended GCD function, or GCDEXT, calculates gcd(a,b) and also -cofactors x and y satisfying a*x+b*y=gcd(a,b). All the algorithms used -for plain GCD are extended to handle this case. The binary algorithm is -used only for single-limb GCDEXT. Lehmer's algorithm is used for sizes -up to `GCDEXT_DC_THRESHOLD'. Above this threshold, GCDEXT is -implemented as a loop around HGCD, but with more book-keeping to keep -track of the cofactors. This gives the same asymptotic running time as -for GCD and HGCD, O(M(N)*log(N)) - - One difference to plain GCD is that while the inputs a and b are -reduced as the algorithm proceeds, the cofactors x and y grow in size. -This makes the tuning of the chopping-point more difficult. The current -code chops off the most significant half of the inputs for the call to -HGCD in the first iteration, and the most significant two thirds for -the remaining calls. This strategy could surely be improved. Also the -stop condition for the loop, where Lehmer's algorithm is invoked once -the inputs are reduced below `GCDEXT_DC_THRESHOLD', could maybe be -improved by taking into account the current size of the cofactors. - - -File: gmp.info, Node: Jacobi Symbol, Prev: Extended GCD, Up: Greatest Common Divisor Algorithms - -15.3.5 Jacobi Symbol --------------------- - -[This section is obsolete. The current Jacobi code actually uses a very -efficient algorithm.] - - `mpz_jacobi' and `mpz_kronecker' are currently implemented with a -simple binary algorithm similar to that described for the GCDs (*note -Binary GCD::). They're not very fast when both inputs are large. -Lehmer's multi-step improvement or a binary based multi-step algorithm -is likely to be better. - - When one operand fits a single limb, and that includes -`mpz_kronecker_ui' and friends, an initial reduction is done with -either `mpn_mod_1' or `mpn_modexact_1_odd', followed by the binary -algorithm on a single limb. The binary algorithm is well suited to a -single limb, and the whole calculation in this case is quite efficient. - - In all the routines sign changes for the result are accumulated -using some bit twiddling, avoiding table lookups or conditional jumps. - - -File: gmp.info, Node: Powering Algorithms, Next: Root Extraction Algorithms, Prev: Greatest Common Divisor Algorithms, Up: Algorithms - -15.4 Powering Algorithms -======================== - -* Menu: - -* Normal Powering Algorithm:: -* Modular Powering Algorithm:: - - -File: gmp.info, Node: Normal Powering Algorithm, Next: Modular Powering Algorithm, Prev: Powering Algorithms, Up: Powering Algorithms - -15.4.1 Normal Powering ----------------------- - -Normal `mpz' or `mpf' powering uses a simple binary algorithm, -successively squaring and then multiplying by the base when a 1 bit is -seen in the exponent, as per Knuth section 4.6.3. The "left to right" -variant described there is used rather than algorithm A, since it's -just as easy and can be done with somewhat less temporary memory. - - -File: gmp.info, Node: Modular Powering Algorithm, Prev: Normal Powering Algorithm, Up: Powering Algorithms - -15.4.2 Modular Powering ------------------------ - -Modular powering is implemented using a 2^k-ary sliding window -algorithm, as per "Handbook of Applied Cryptography" algorithm 14.85 -(*note References::). k is chosen according to the size of the -exponent. Larger exponents use larger values of k, the choice being -made to minimize the average number of multiplications that must -supplement the squaring. - - The modular multiplies and squarings use either a simple division or -the REDC method by Montgomery (*note References::). REDC is a little -faster, essentially saving N single limb divisions in a fashion similar -to an exact remainder (*note Exact Remainder::). - - -File: gmp.info, Node: Root Extraction Algorithms, Next: Radix Conversion Algorithms, Prev: Powering Algorithms, Up: Algorithms - -15.5 Root Extraction Algorithms -=============================== - -* Menu: - -* Square Root Algorithm:: -* Nth Root Algorithm:: -* Perfect Square Algorithm:: -* Perfect Power Algorithm:: - - -File: gmp.info, Node: Square Root Algorithm, Next: Nth Root Algorithm, Prev: Root Extraction Algorithms, Up: Root Extraction Algorithms - -15.5.1 Square Root ------------------- - -Square roots are taken using the "Karatsuba Square Root" algorithm by -Paul Zimmermann (*note References::). - - An input n is split into four parts of k bits each, so with b=2^k we -have n = a3*b^3 + a2*b^2 + a1*b + a0. Part a3 must be "normalized" so -that either the high or second highest bit is set. In GMP, k is kept -on a limb boundary and the input is left shifted (by an even number of -bits) to normalize. - - The square root of the high two parts is taken, by recursive -application of the algorithm (bottoming out in a one-limb Newton's -method), - - s1,r1 = sqrtrem (a3*b + a2) - - This is an approximation to the desired root and is extended by a -division to give s,r, - - q,u = divrem (r1*b + a1, 2*s1) - s = s1*b + q - r = u*b + a0 - q^2 - - The normalization requirement on a3 means at this point s is either -correct or 1 too big. r is negative in the latter case, so - - if r < 0 then - r = r + 2*s - 1 - s = s - 1 - - The algorithm is expressed in a divide and conquer form, but as -noted in the paper it can also be viewed as a discrete variant of -Newton's method, or as a variation on the schoolboy method (no longer -taught) for square roots two digits at a time. - - If the remainder r is not required then usually only a few high limbs -of r and u need to be calculated to determine whether an adjustment to -s is required. This optimization is not currently implemented. - - In the Karatsuba multiplication range this algorithm is -O(1.5*M(N/2)), where M(n) is the time to multiply two numbers of n -limbs. In the FFT multiplication range this grows to a bound of -O(6*M(N/2)). In practice a factor of about 1.5 to 1.8 is found in the -Karatsuba and Toom-3 ranges, growing to 2 or 3 in the FFT range. - - The algorithm does all its calculations in integers and the resulting -`mpn_sqrtrem' is used for both `mpz_sqrt' and `mpf_sqrt'. The extended -precision given by `mpf_sqrt_ui' is obtained by padding with zero limbs. - - -File: gmp.info, Node: Nth Root Algorithm, Next: Perfect Square Algorithm, Prev: Square Root Algorithm, Up: Root Extraction Algorithms - -15.5.2 Nth Root ---------------- - -Integer Nth roots are taken using Newton's method with the following -iteration, where A is the input and n is the root to be taken. - - 1 A - a[i+1] = - * ( --------- + (n-1)*a[i] ) - n a[i]^(n-1) - - The initial approximation a[1] is generated bitwise by successively -powering a trial root with or without new 1 bits, aiming to be just -above the true root. The iteration converges quadratically when -started from a good approximation. When n is large more initial bits -are needed to get good convergence. The current implementation is not -particularly well optimized. - - -File: gmp.info, Node: Perfect Square Algorithm, Next: Perfect Power Algorithm, Prev: Nth Root Algorithm, Up: Root Extraction Algorithms - -15.5.3 Perfect Square ---------------------- - -A significant fraction of non-squares can be quickly identified by -checking whether the input is a quadratic residue modulo small integers. - - `mpz_perfect_square_p' first tests the input mod 256, which means -just examining the low byte. Only 44 different values occur for -squares mod 256, so 82.8% of inputs can be immediately identified as -non-squares. - - On a 32-bit system similar tests are done mod 9, 5, 7, 13 and 17, -for a total 99.25% of inputs identified as non-squares. On a 64-bit -system 97 is tested too, for a total 99.62%. - - These moduli are chosen because they're factors of 2^24-1 (or 2^48-1 -for 64-bits), and such a remainder can be quickly taken just using -additions (see `mpn_mod_34lsub1'). - - When nails are in use moduli are instead selected by the `gen-psqr.c' -program and applied with an `mpn_mod_1'. The same 2^24-1 or 2^48-1 -could be done with nails using some extra bit shifts, but this is not -currently implemented. - - In any case each modulus is applied to the `mpn_mod_34lsub1' or -`mpn_mod_1' remainder and a table lookup identifies non-squares. By -using a "modexact" style calculation, and suitably permuted tables, -just one multiply each is required, see the code for details. Moduli -are also combined to save operations, so long as the lookup tables -don't become too big. `gen-psqr.c' does all the pre-calculations. - - A square root must still be taken for any value that passes these -tests, to verify it's really a square and not one of the small fraction -of non-squares that get through (i.e. a pseudo-square to all the tested -bases). - - Clearly more residue tests could be done, `mpz_perfect_square_p' only -uses a compact and efficient set. Big inputs would probably benefit -from more residue testing, small inputs might be better off with less. -The assumed distribution of squares versus non-squares in the input -would affect such considerations. - - -File: gmp.info, Node: Perfect Power Algorithm, Prev: Perfect Square Algorithm, Up: Root Extraction Algorithms - -15.5.4 Perfect Power --------------------- - -Detecting perfect powers is required by some factorization algorithms. -Currently `mpz_perfect_power_p' is implemented using repeated Nth root -extractions, though naturally only prime roots need to be considered. -(*Note Nth Root Algorithm::.) - - If a prime divisor p with multiplicity e can be found, then only -roots which are divisors of e need to be considered, much reducing the -work necessary. To this end divisibility by a set of small primes is -checked. - - -File: gmp.info, Node: Radix Conversion Algorithms, Next: Other Algorithms, Prev: Root Extraction Algorithms, Up: Algorithms - -15.6 Radix Conversion -===================== - -Radix conversions are less important than other algorithms. A program -dominated by conversions should probably use a different data -representation. - -* Menu: - -* Binary to Radix:: -* Radix to Binary:: - - -File: gmp.info, Node: Binary to Radix, Next: Radix to Binary, Prev: Radix Conversion Algorithms, Up: Radix Conversion Algorithms - -15.6.1 Binary to Radix ----------------------- - -Conversions from binary to a power-of-2 radix use a simple and fast -O(N) bit extraction algorithm. - - Conversions from binary to other radices use one of two algorithms. -Sizes below `GET_STR_PRECOMPUTE_THRESHOLD' use a basic O(N^2) method. -Repeated divisions by b^n are made, where b is the radix and n is the -biggest power that fits in a limb. But instead of simply using the -remainder r from such divisions, an extra divide step is done to give a -fractional limb representing r/b^n. The digits of r can then be -extracted using multiplications by b rather than divisions. Special -case code is provided for decimal, allowing multiplications by 10 to -optimize to shifts and adds. - - Above `GET_STR_PRECOMPUTE_THRESHOLD' a sub-quadratic algorithm is -used. For an input t, powers b^(n*2^i) of the radix are calculated, -until a power between t and sqrt(t) is reached. t is then divided by -that largest power, giving a quotient which is the digits above that -power, and a remainder which is those below. These two parts are in -turn divided by the second highest power, and so on recursively. When -a piece has been divided down to less than `GET_STR_DC_THRESHOLD' -limbs, the basecase algorithm described above is used. - - The advantage of this algorithm is that big divisions can make use -of the sub-quadratic divide and conquer division (*note Divide and -Conquer Division::), and big divisions tend to have less overheads than -lots of separate single limb divisions anyway. But in any case the -cost of calculating the powers b^(n*2^i) must first be overcome. - - `GET_STR_PRECOMPUTE_THRESHOLD' and `GET_STR_DC_THRESHOLD' represent -the same basic thing, the point where it becomes worth doing a big -division to cut the input in half. `GET_STR_PRECOMPUTE_THRESHOLD' -includes the cost of calculating the radix power required, whereas -`GET_STR_DC_THRESHOLD' assumes that's already available, which is the -case when recursing. - - Since the base case produces digits from least to most significant -but they want to be stored from most to least, it's necessary to -calculate in advance how many digits there will be, or at least be sure -not to underestimate that. For GMP the number of input bits is -multiplied by `chars_per_bit_exactly' from `mp_bases', rounding up. -The result is either correct or one too big. - - Examining some of the high bits of the input could increase the -chance of getting the exact number of digits, but an exact result every -time would not be practical, since in general the difference between -numbers 100... and 99... is only in the last few bits and the work to -identify 99... might well be almost as much as a full conversion. - - The r/b^n scheme described above for using multiplications to bring -out digits might be useful for more than a single limb. Some brief -experiments with it on the base case when recursing didn't give a -noticeable improvement, but perhaps that was only due to the -implementation. Something similar would work for the sub-quadratic -divisions too, though there would be the cost of calculating a bigger -radix power. - - Another possible improvement for the sub-quadratic part would be to -arrange for radix powers that balanced the sizes of quotient and -remainder produced, i.e. the highest power would be an b^(n*k) -approximately equal to sqrt(t), not restricted to a 2^i factor. That -ought to smooth out a graph of times against sizes, but may or may not -be a net speedup. - - -File: gmp.info, Node: Radix to Binary, Prev: Binary to Radix, Up: Radix Conversion Algorithms - -15.6.2 Radix to Binary ----------------------- - -*This section needs to be rewritten, it currently describes the -algorithms used before GMP 4.3.* - - Conversions from a power-of-2 radix into binary use a simple and fast -O(N) bitwise concatenation algorithm. - - Conversions from other radices use one of two algorithms. Sizes -below `SET_STR_PRECOMPUTE_THRESHOLD' use a basic O(N^2) method. Groups -of n digits are converted to limbs, where n is the biggest power of the -base b which will fit in a limb, then those groups are accumulated into -the result by multiplying by b^n and adding. This saves -multi-precision operations, as per Knuth section 4.4 part E (*note -References::). Some special case code is provided for decimal, giving -the compiler a chance to optimize multiplications by 10. - - Above `SET_STR_PRECOMPUTE_THRESHOLD' a sub-quadratic algorithm is -used. First groups of n digits are converted into limbs. Then adjacent -limbs are combined into limb pairs with x*b^n+y, where x and y are the -limbs. Adjacent limb pairs are combined into quads similarly with -x*b^(2n)+y. This continues until a single block remains, that being -the result. - - The advantage of this method is that the multiplications for each x -are big blocks, allowing Karatsuba and higher algorithms to be used. -But the cost of calculating the powers b^(n*2^i) must be overcome. -`SET_STR_PRECOMPUTE_THRESHOLD' usually ends up quite big, around 5000 -digits, and on some processors much bigger still. - - `SET_STR_PRECOMPUTE_THRESHOLD' is based on the input digits (and -tuned for decimal), though it might be better based on a limb count, so -as to be independent of the base. But that sort of count isn't used by -the base case and so would need some sort of initial calculation or -estimate. - - The main reason `SET_STR_PRECOMPUTE_THRESHOLD' is so much bigger -than the corresponding `GET_STR_PRECOMPUTE_THRESHOLD' is that -`mpn_mul_1' is much faster than `mpn_divrem_1' (often by a factor of 5, -or more). - - -File: gmp.info, Node: Other Algorithms, Next: Assembly Coding, Prev: Radix Conversion Algorithms, Up: Algorithms - -15.7 Other Algorithms -===================== - -* Menu: - -* Prime Testing Algorithm:: -* Factorial Algorithm:: -* Binomial Coefficients Algorithm:: -* Fibonacci Numbers Algorithm:: -* Lucas Numbers Algorithm:: -* Random Number Algorithms:: - - -File: gmp.info, Node: Prime Testing Algorithm, Next: Factorial Algorithm, Prev: Other Algorithms, Up: Other Algorithms - -15.7.1 Prime Testing --------------------- - -The primality testing in `mpz_probab_prime_p' (*note Number Theoretic -Functions::) first does some trial division by small factors and then -uses the Miller-Rabin probabilistic primality testing algorithm, as -described in Knuth section 4.5.4 algorithm P (*note References::). - - For an odd input n, and with n = q*2^k+1 where q is odd, this -algorithm selects a random base x and tests whether x^q mod n is 1 or --1, or an x^(q*2^j) mod n is 1, for 1<=j<=k. If so then n is probably -prime, if not then n is definitely composite. - - Any prime n will pass the test, but some composites do too. Such -composites are known as strong pseudoprimes to base x. No n is a -strong pseudoprime to more than 1/4 of all bases (see Knuth exercise -22), hence with x chosen at random there's no more than a 1/4 chance a -"probable prime" will in fact be composite. - - In fact strong pseudoprimes are quite rare, making the test much more -powerful than this analysis would suggest, but 1/4 is all that's proven -for an arbitrary n. - - -File: gmp.info, Node: Factorial Algorithm, Next: Binomial Coefficients Algorithm, Prev: Prime Testing Algorithm, Up: Other Algorithms - -15.7.2 Factorial ----------------- - -Factorials are calculated by a combination of two algorithms. An idea is -shared among them: to compute the odd part of the factorial; a final -step takes account of the power of 2 term, by shifting. - - For small n, the odd factor of n! is computed with the simple -observation that it is equal to the product of all positive odd numbers -smaller than n times the odd factor of [n/2]!, where [x] is the integer -part of x, and so on recursively. The procedure can be best illustrated -with an example, - - 23! = (23.21.19.17.15.13.11.9.7.5.3)(11.9.7.5.3)(5.3)2^19 - - Current code collects all the factors in a single list, with a loop -and no recursion, and compute the product, with no special care for -repeated chunks. - - When n is larger, computation pass trough prime sieving. An helper -function is used, as suggested by Peter Luschny: - - n - ----- - n! | | L(p,n) - msf(n) = -------------- = | | p - [n/2]!^2.2^k p=3 - - Where p ranges on odd prime numbers. The exponent k is chosen to -obtain an odd integer number: k is the number of 1 bits in the binary -representation of [n/2]. The function L(p,n) can be defined as zero -when p is composite, and, for any prime p, it is computed with: - - --- - \ n - L(p,n) = / [---] mod 2 <= log (n) . - --- p^i p - i>0 - - With this helper function, we are able to compute the odd part of n! -using the recursion implied by n!=[n/2]!^2*msf(n)*2^k. The recursion -stops using the small-n algorithm on some [n/2^i]. - - Both the above algorithms use binary splitting to compute the -product of many small factors. At first as many products as possible -are accumulated in a single register, generating a list of factors that -fit in a machine word. This list is then split into halves, and the -product is computed recursively. - - Such splitting is more efficient than repeated Nx1 multiplies since -it forms big multiplies, allowing Karatsuba and higher algorithms to be -used. And even below the Karatsuba threshold a big block of work can -be more efficient for the basecase algorithm. - - -File: gmp.info, Node: Binomial Coefficients Algorithm, Next: Fibonacci Numbers Algorithm, Prev: Factorial Algorithm, Up: Other Algorithms - -15.7.3 Binomial Coefficients ----------------------------- - -Binomial coefficients C(n,k) are calculated by first arranging k <= n/2 -using C(n,k) = C(n,n-k) if necessary, and then evaluating the following -product simply from i=2 to i=k. - - k (n-k+i) - C(n,k) = (n-k+1) * prod ------- - i=2 i - - It's easy to show that each denominator i will divide the product so -far, so the exact division algorithm is used (*note Exact Division::). - - The numerators n-k+i and denominators i are first accumulated into -as many fit a limb, to save multi-precision operations, though for -`mpz_bin_ui' this applies only to the divisors, since n is an `mpz_t' -and n-k+i in general won't fit in a limb at all. - - -File: gmp.info, Node: Fibonacci Numbers Algorithm, Next: Lucas Numbers Algorithm, Prev: Binomial Coefficients Algorithm, Up: Other Algorithms - -15.7.4 Fibonacci Numbers ------------------------- - -The Fibonacci functions `mpz_fib_ui' and `mpz_fib2_ui' are designed for -calculating isolated F[n] or F[n],F[n-1] values efficiently. - - For small n, a table of single limb values in `__gmp_fib_table' is -used. On a 32-bit limb this goes up to F[47], or on a 64-bit limb up -to F[93]. For convenience the table starts at F[-1]. - - Beyond the table, values are generated with a binary powering -algorithm, calculating a pair F[n] and F[n-1] working from high to low -across the bits of n. The formulas used are - - F[2k+1] = 4*F[k]^2 - F[k-1]^2 + 2*(-1)^k - F[2k-1] = F[k]^2 + F[k-1]^2 - - F[2k] = F[2k+1] - F[2k-1] - - At each step, k is the high b bits of n. If the next bit of n is 0 -then F[2k],F[2k-1] is used, or if it's a 1 then F[2k+1],F[2k] is used, -and the process repeated until all bits of n are incorporated. Notice -these formulas require just two squares per bit of n. - - It'd be possible to handle the first few n above the single limb -table with simple additions, using the defining Fibonacci recurrence -F[k+1]=F[k]+F[k-1], but this is not done since it usually turns out to -be faster for only about 10 or 20 values of n, and including a block of -code for just those doesn't seem worthwhile. If they really mattered -it'd be better to extend the data table. - - Using a table avoids lots of calculations on small numbers, and -makes small n go fast. A bigger table would make more small n go fast, -it's just a question of balancing size against desired speed. For GMP -the code is kept compact, with the emphasis primarily on a good -powering algorithm. - - `mpz_fib2_ui' returns both F[n] and F[n-1], but `mpz_fib_ui' is only -interested in F[n]. In this case the last step of the algorithm can -become one multiply instead of two squares. One of the following two -formulas is used, according as n is odd or even. - - F[2k] = F[k]*(F[k]+2F[k-1]) - - F[2k+1] = (2F[k]+F[k-1])*(2F[k]-F[k-1]) + 2*(-1)^k - - F[2k+1] here is the same as above, just rearranged to be a multiply. -For interest, the 2*(-1)^k term both here and above can be applied -just to the low limb of the calculation, without a carry or borrow into -further limbs, which saves some code size. See comments with -`mpz_fib_ui' and the internal `mpn_fib2_ui' for how this is done. - - -File: gmp.info, Node: Lucas Numbers Algorithm, Next: Random Number Algorithms, Prev: Fibonacci Numbers Algorithm, Up: Other Algorithms - -15.7.5 Lucas Numbers --------------------- - -`mpz_lucnum2_ui' derives a pair of Lucas numbers from a pair of -Fibonacci numbers with the following simple formulas. - - L[k] = F[k] + 2*F[k-1] - L[k-1] = 2*F[k] - F[k-1] - - `mpz_lucnum_ui' is only interested in L[n], and some work can be -saved. Trailing zero bits on n can be handled with a single square -each. - - L[2k] = L[k]^2 - 2*(-1)^k - - And the lowest 1 bit can be handled with one multiply of a pair of -Fibonacci numbers, similar to what `mpz_fib_ui' does. - - L[2k+1] = 5*F[k-1]*(2*F[k]+F[k-1]) - 4*(-1)^k - - -File: gmp.info, Node: Random Number Algorithms, Prev: Lucas Numbers Algorithm, Up: Other Algorithms - -15.7.6 Random Numbers ---------------------- - -For the `urandomb' functions, random numbers are generated simply by -concatenating bits produced by the generator. As long as the generator -has good randomness properties this will produce well-distributed N bit -numbers. - - For the `urandomm' functions, random numbers in a range 0<=R<N are -generated by taking values R of ceil(log2(N)) bits each until one -satisfies R<N. This will normally require only one or two attempts, -but the attempts are limited in case the generator is somehow -degenerate and produces only 1 bits or similar. - - The Mersenne Twister generator is by Matsumoto and Nishimura (*note -References::). It has a non-repeating period of 2^19937-1, which is a -Mersenne prime, hence the name of the generator. The state is 624 -words of 32-bits each, which is iterated with one XOR and shift for each -32-bit word generated, making the algorithm very fast. Randomness -properties are also very good and this is the default algorithm used by -GMP. - - Linear congruential generators are described in many text books, for -instance Knuth volume 2 (*note References::). With a modulus M and -parameters A and C, an integer state S is iterated by the formula S <- -A*S+C mod M. At each step the new state is a linear function of the -previous, mod M, hence the name of the generator. - - In GMP only moduli of the form 2^N are supported, and the current -implementation is not as well optimized as it could be. Overheads are -significant when N is small, and when N is large clearly the multiply -at each step will become slow. This is not a big concern, since the -Mersenne Twister generator is better in every respect and is therefore -recommended for all normal applications. - - For both generators the current state can be deduced by observing -enough output and applying some linear algebra (over GF(2) in the case -of the Mersenne Twister). This generally means raw output is -unsuitable for cryptographic applications without further hashing or -the like. - - -File: gmp.info, Node: Assembly Coding, Prev: Other Algorithms, Up: Algorithms - -15.8 Assembly Coding -==================== - -The assembly subroutines in GMP are the most significant source of -speed at small to moderate sizes. At larger sizes algorithm selection -becomes more important, but of course speedups in low level routines -will still speed up everything proportionally. - - Carry handling and widening multiplies that are important for GMP -can't be easily expressed in C. GCC `asm' blocks help a lot and are -provided in `longlong.h', but hand coding low level routines invariably -offers a speedup over generic C by a factor of anything from 2 to 10. - -* Menu: - -* Assembly Code Organisation:: -* Assembly Basics:: -* Assembly Carry Propagation:: -* Assembly Cache Handling:: -* Assembly Functional Units:: -* Assembly Floating Point:: -* Assembly SIMD Instructions:: -* Assembly Software Pipelining:: -* Assembly Loop Unrolling:: -* Assembly Writing Guide:: - - -File: gmp.info, Node: Assembly Code Organisation, Next: Assembly Basics, Prev: Assembly Coding, Up: Assembly Coding - -15.8.1 Code Organisation ------------------------- - -The various `mpn' subdirectories contain machine-dependent code, written -in C or assembly. The `mpn/generic' subdirectory contains default code, -used when there's no machine-specific version of a particular file. - - Each `mpn' subdirectory is for an ISA family. Generally 32-bit and -64-bit variants in a family cannot share code and have separate -directories. Within a family further subdirectories may exist for CPU -variants. - - In each directory a `nails' subdirectory may exist, holding code with -nails support for that CPU variant. A `NAILS_SUPPORT' directive in each -file indicates the nails values the code handles. Nails code only -exists where it's faster, or promises to be faster, than plain code. -There's no effort put into nails if they're not going to enhance a -given CPU. - - -File: gmp.info, Node: Assembly Basics, Next: Assembly Carry Propagation, Prev: Assembly Code Organisation, Up: Assembly Coding - -15.8.2 Assembly Basics ----------------------- - -`mpn_addmul_1' and `mpn_submul_1' are the most important routines for -overall GMP performance. All multiplications and divisions come down to -repeated calls to these. `mpn_add_n', `mpn_sub_n', `mpn_lshift' and -`mpn_rshift' are next most important. - - On some CPUs assembly versions of the internal functions -`mpn_mul_basecase' and `mpn_sqr_basecase' give significant speedups, -mainly through avoiding function call overheads. They can also -potentially make better use of a wide superscalar processor, as can -bigger primitives like `mpn_addmul_2' or `mpn_addmul_4'. - - The restrictions on overlaps between sources and destinations (*note -Low-level Functions::) are designed to facilitate a variety of -implementations. For example, knowing `mpn_add_n' won't have partly -overlapping sources and destination means reading can be done far ahead -of writing on superscalar processors, and loops can be vectorized on a -vector processor, depending on the carry handling. - - -File: gmp.info, Node: Assembly Carry Propagation, Next: Assembly Cache Handling, Prev: Assembly Basics, Up: Assembly Coding - -15.8.3 Carry Propagation ------------------------- - -The problem that presents most challenges in GMP is propagating carries -from one limb to the next. In functions like `mpn_addmul_1' and -`mpn_add_n', carries are the only dependencies between limb operations. - - On processors with carry flags, a straightforward CISC style `adc' is -generally best. AMD K6 `mpn_addmul_1' however is an example of an -unusual set of circumstances where a branch works out better. - - On RISC processors generally an add and compare for overflow is -used. This sort of thing can be seen in `mpn/generic/aors_n.c'. Some -carry propagation schemes require 4 instructions, meaning at least 4 -cycles per limb, but other schemes may use just 1 or 2. On wide -superscalar processors performance may be completely determined by the -number of dependent instructions between carry-in and carry-out for -each limb. - - On vector processors good use can be made of the fact that a carry -bit only very rarely propagates more than one limb. When adding a -single bit to a limb, there's only a carry out if that limb was -`0xFF...FF' which on random data will be only 1 in 2^mp_bits_per_limb. -`mpn/cray/add_n.c' is an example of this, it adds all limbs in -parallel, adds one set of carry bits in parallel and then only rarely -needs to fall through to a loop propagating further carries. - - On the x86s, GCC (as of version 2.95.2) doesn't generate -particularly good code for the RISC style idioms that are necessary to -handle carry bits in C. Often conditional jumps are generated where -`adc' or `sbb' forms would be better. And so unfortunately almost any -loop involving carry bits needs to be coded in assembly for best -results. - - -File: gmp.info, Node: Assembly Cache Handling, Next: Assembly Functional Units, Prev: Assembly Carry Propagation, Up: Assembly Coding - -15.8.4 Cache Handling ---------------------- - -GMP aims to perform well both on operands that fit entirely in L1 cache -and those which don't. - - Basic routines like `mpn_add_n' or `mpn_lshift' are often used on -large operands, so L2 and main memory performance is important for them. -`mpn_mul_1' and `mpn_addmul_1' are mostly used for multiply and square -basecases, so L1 performance matters most for them, unless assembly -versions of `mpn_mul_basecase' and `mpn_sqr_basecase' exist, in which -case the remaining uses are mostly for larger operands. - - For L2 or main memory operands, memory access times will almost -certainly be more than the calculation time. The aim therefore is to -maximize memory throughput, by starting a load of the next cache line -while processing the contents of the previous one. Clearly this is -only possible if the chip has a lock-up free cache or some sort of -prefetch instruction. Most current chips have both these features. - - Prefetching sources combines well with loop unrolling, since a -prefetch can be initiated once per unrolled loop (or more than once if -the loop covers more than one cache line). - - On CPUs without write-allocate caches, prefetching destinations will -ensure individual stores don't go further down the cache hierarchy, -limiting bandwidth. Of course for calculations which are slow anyway, -like `mpn_divrem_1', write-throughs might be fine. - - The distance ahead to prefetch will be determined by memory latency -versus throughput. The aim of course is to have data arriving -continuously, at peak throughput. Some CPUs have limits on the number -of fetches or prefetches in progress. - - If a special prefetch instruction doesn't exist then a plain load -can be used, but in that case care must be taken not to attempt to read -past the end of an operand, since that might produce a segmentation -violation. - - Some CPUs or systems have hardware that detects sequential memory -accesses and initiates suitable cache movements automatically, making -life easy. - - -File: gmp.info, Node: Assembly Functional Units, Next: Assembly Floating Point, Prev: Assembly Cache Handling, Up: Assembly Coding - -15.8.5 Functional Units ------------------------ - -When choosing an approach for an assembly loop, consideration is given -to what operations can execute simultaneously and what throughput can -thereby be achieved. In some cases an algorithm can be tweaked to -accommodate available resources. - - Loop control will generally require a counter and pointer updates, -costing as much as 5 instructions, plus any delays a branch introduces. -CPU addressing modes might reduce pointer updates, perhaps by allowing -just one updating pointer and others expressed as offsets from it, or -on CISC chips with all addressing done with the loop counter as a -scaled index. - - The final loop control cost can be amortised by processing several -limbs in each iteration (*note Assembly Loop Unrolling::). This at -least ensures loop control isn't a big fraction the work done. - - Memory throughput is always a limit. If perhaps only one load or -one store can be done per cycle then 3 cycles/limb will the top speed -for "binary" operations like `mpn_add_n', and any code achieving that -is optimal. - - Integer resources can be freed up by having the loop counter in a -float register, or by pressing the float units into use for some -multiplying, perhaps doing every second limb on the float side (*note -Assembly Floating Point::). - - Float resources can be freed up by doing carry propagation on the -integer side, or even by doing integer to float conversions in integers -using bit twiddling. - - -File: gmp.info, Node: Assembly Floating Point, Next: Assembly SIMD Instructions, Prev: Assembly Functional Units, Up: Assembly Coding - -15.8.6 Floating Point ---------------------- - -Floating point arithmetic is used in GMP for multiplications on CPUs -with poor integer multipliers. It's mostly useful for `mpn_mul_1', -`mpn_addmul_1' and `mpn_submul_1' on 64-bit machines, and -`mpn_mul_basecase' on both 32-bit and 64-bit machines. - - With IEEE 53-bit double precision floats, integer multiplications -producing up to 53 bits will give exact results. Breaking a 64x64 -multiplication into eight 16x32->48 bit pieces is convenient. With -some care though six 21x32->53 bit products can be used, if one of the -lower two 21-bit pieces also uses the sign bit. - - For the `mpn_mul_1' family of functions on a 64-bit machine, the -invariant single limb is split at the start, into 3 or 4 pieces. -Inside the loop, the bignum operand is split into 32-bit pieces. Fast -conversion of these unsigned 32-bit pieces to floating point is highly -machine-dependent. In some cases, reading the data into the integer -unit, zero-extending to 64-bits, then transferring to the floating -point unit back via memory is the only option. - - Converting partial products back to 64-bit limbs is usually best -done as a signed conversion. Since all values are smaller than 2^53, -signed and unsigned are the same, but most processors lack unsigned -conversions. - - - - Here is a diagram showing 16x32 bit products for an `mpn_mul_1' or -`mpn_addmul_1' with a 64-bit limb. The single limb operand V is split -into four 16-bit parts. The multi-limb operand U is split in the loop -into two 32-bit parts. - - +---+---+---+---+ - |v48|v32|v16|v00| V operand - +---+---+---+---+ - - +-------+---+---+ - x | u32 | u00 | U operand (one limb) - +---------------+ - - --------------------------------- - - +-----------+ - | u00 x v00 | p00 48-bit products - +-----------+ - +-----------+ - | u00 x v16 | p16 - +-----------+ - +-----------+ - | u00 x v32 | p32 - +-----------+ - +-----------+ - | u00 x v48 | p48 - +-----------+ - +-----------+ - | u32 x v00 | r32 - +-----------+ - +-----------+ - | u32 x v16 | r48 - +-----------+ - +-----------+ - | u32 x v32 | r64 - +-----------+ - +-----------+ - | u32 x v48 | r80 - +-----------+ - - p32 and r32 can be summed using floating-point addition, and -likewise p48 and r48. p00 and p16 can be summed with r64 and r80 from -the previous iteration. - - For each loop then, four 49-bit quantities are transferred to the -integer unit, aligned as follows, - - |-----64bits----|-----64bits----| - +------------+ - | p00 + r64' | i00 - +------------+ - +------------+ - | p16 + r80' | i16 - +------------+ - +------------+ - | p32 + r32 | i32 - +------------+ - +------------+ - | p48 + r48 | i48 - +------------+ - - The challenge then is to sum these efficiently and add in a carry -limb, generating a low 64-bit result limb and a high 33-bit carry limb -(i48 extends 33 bits into the high half). - - -File: gmp.info, Node: Assembly SIMD Instructions, Next: Assembly Software Pipelining, Prev: Assembly Floating Point, Up: Assembly Coding - -15.8.7 SIMD Instructions ------------------------- - -The single-instruction multiple-data support in current microprocessors -is aimed at signal processing algorithms where each data point can be -treated more or less independently. There's generally not much support -for propagating the sort of carries that arise in GMP. - - SIMD multiplications of say four 16x16 bit multiplies only do as much -work as one 32x32 from GMP's point of view, and need some shifts and -adds besides. But of course if say the SIMD form is fully pipelined -and uses less instruction decoding then it may still be worthwhile. - - On the x86 chips, MMX has so far found a use in `mpn_rshift' and -`mpn_lshift', and is used in a special case for 16-bit multipliers in -the P55 `mpn_mul_1'. SSE2 is used for Pentium 4 `mpn_mul_1', -`mpn_addmul_1', and `mpn_submul_1'. - - -File: gmp.info, Node: Assembly Software Pipelining, Next: Assembly Loop Unrolling, Prev: Assembly SIMD Instructions, Up: Assembly Coding - -15.8.8 Software Pipelining --------------------------- - -Software pipelining consists of scheduling instructions around the -branch point in a loop. For example a loop might issue a load not for -use in the present iteration but the next, thereby allowing extra -cycles for the data to arrive from memory. - - Naturally this is wanted only when doing things like loads or -multiplies that take several cycles to complete, and only where a CPU -has multiple functional units so that other work can be done in the -meantime. - - A pipeline with several stages will have a data value in progress at -each stage and each loop iteration moves them along one stage. This is -like juggling. - - If the latency of some instruction is greater than the loop time -then it will be necessary to unroll, so one register has a result ready -to use while another (or multiple others) are still in progress. -(*note Assembly Loop Unrolling::). - - -File: gmp.info, Node: Assembly Loop Unrolling, Next: Assembly Writing Guide, Prev: Assembly Software Pipelining, Up: Assembly Coding - -15.8.9 Loop Unrolling ---------------------- - -Loop unrolling consists of replicating code so that several limbs are -processed in each loop. At a minimum this reduces loop overheads by a -corresponding factor, but it can also allow better register usage, for -example alternately using one register combination and then another. -Judicious use of `m4' macros can help avoid lots of duplication in the -source code. - - Any amount of unrolling can be handled with a loop counter that's -decremented by N each time, stopping when the remaining count is less -than the further N the loop will process. Or by subtracting N at the -start, the termination condition becomes when the counter C is less -than 0 (and the count of remaining limbs is C+N). - - Alternately for a power of 2 unroll the loop count and remainder can -be established with a shift and mask. This is convenient if also -making a computed jump into the middle of a large loop. - - The limbs not a multiple of the unrolling can be handled in various -ways, for example - - * A simple loop at the end (or the start) to process the excess. - Care will be wanted that it isn't too much slower than the - unrolled part. - - * A set of binary tests, for example after an 8-limb unrolling, test - for 4 more limbs to process, then a further 2 more or not, and - finally 1 more or not. This will probably take more code space - than a simple loop. - - * A `switch' statement, providing separate code for each possible - excess, for example an 8-limb unrolling would have separate code - for 0 remaining, 1 remaining, etc, up to 7 remaining. This might - take a lot of code, but may be the best way to optimize all cases - in combination with a deep pipelined loop. - - * A computed jump into the middle of the loop, thus making the first - iteration handle the excess. This should make times smoothly - increase with size, which is attractive, but setups for the jump - and adjustments for pointers can be tricky and could become quite - difficult in combination with deep pipelining. - - -File: gmp.info, Node: Assembly Writing Guide, Prev: Assembly Loop Unrolling, Up: Assembly Coding - -15.8.10 Writing Guide ---------------------- - -This is a guide to writing software pipelined loops for processing limb -vectors in assembly. - - First determine the algorithm and which instructions are needed. -Code it without unrolling or scheduling, to make sure it works. On a -3-operand CPU try to write each new value to a new register, this will -greatly simplify later steps. - - Then note for each instruction the functional unit and/or issue port -requirements. If an instruction can use either of two units, like U0 -or U1 then make a category "U0/U1". Count the total using each unit -(or combined unit), and count all instructions. - - Figure out from those counts the best possible loop time. The goal -will be to find a perfect schedule where instruction latencies are -completely hidden. The total instruction count might be the limiting -factor, or perhaps a particular functional unit. It might be possible -to tweak the instructions to help the limiting factor. - - Suppose the loop time is N, then make N issue buckets, with the -final loop branch at the end of the last. Now fill the buckets with -dummy instructions using the functional units desired. Run this to -make sure the intended speed is reached. - - Now replace the dummy instructions with the real instructions from -the slow but correct loop you started with. The first will typically -be a load instruction. Then the instruction using that value is placed -in a bucket an appropriate distance down. Run the loop again, to check -it still runs at target speed. - - Keep placing instructions, frequently measuring the loop. After a -few you will need to wrap around from the last bucket back to the top -of the loop. If you used the new-register for new-value strategy above -then there will be no register conflicts. If not then take care not to -clobber something already in use. Changing registers at this time is -very error prone. - - The loop will overlap two or more of the original loop iterations, -and the computation of one vector element result will be started in one -iteration of the new loop, and completed one or several iterations -later. - - The final step is to create feed-in and wind-down code for the loop. -A good way to do this is to make a copy (or copies) of the loop at the -start and delete those instructions which don't have valid antecedents, -and at the end replicate and delete those whose results are unwanted -(including any further loads). - - The loop will have a minimum number of limbs loaded and processed, -so the feed-in code must test if the request size is smaller and skip -either to a suitable part of the wind-down or to special code for small -sizes. - - -File: gmp.info, Node: Internals, Next: Contributors, Prev: Algorithms, Up: Top - -16 Internals -************ - -*This chapter is provided only for informational purposes and the -various internals described here may change in future GMP releases. -Applications expecting to be compatible with future releases should use -only the documented interfaces described in previous chapters.* - -* Menu: - -* Integer Internals:: -* Rational Internals:: -* Float Internals:: -* Raw Output Internals:: -* C++ Interface Internals:: - - -File: gmp.info, Node: Integer Internals, Next: Rational Internals, Prev: Internals, Up: Internals - -16.1 Integer Internals -====================== - -`mpz_t' variables represent integers using sign and magnitude, in space -dynamically allocated and reallocated. The fields are as follows. - -`_mp_size' - The number of limbs, or the negative of that when representing a - negative integer. Zero is represented by `_mp_size' set to zero, - in which case the `_mp_d' data is unused. - -`_mp_d' - A pointer to an array of limbs which is the magnitude. These are - stored "little endian" as per the `mpn' functions, so `_mp_d[0]' - is the least significant limb and `_mp_d[ABS(_mp_size)-1]' is the - most significant. Whenever `_mp_size' is non-zero, the most - significant limb is non-zero. - - Currently there's always at least one limb allocated, so for - instance `mpz_set_ui' never needs to reallocate, and `mpz_get_ui' - can fetch `_mp_d[0]' unconditionally (though its value is then - only wanted if `_mp_size' is non-zero). - -`_mp_alloc' - `_mp_alloc' is the number of limbs currently allocated at `_mp_d', - and naturally `_mp_alloc >= ABS(_mp_size)'. When an `mpz' routine - is about to (or might be about to) increase `_mp_size', it checks - `_mp_alloc' to see whether there's enough space, and reallocates - if not. `MPZ_REALLOC' is generally used for this. - - The various bitwise logical functions like `mpz_and' behave as if -negative values were twos complement. But sign and magnitude is always -used internally, and necessary adjustments are made during the -calculations. Sometimes this isn't pretty, but sign and magnitude are -best for other routines. - - Some internal temporary variables are setup with `MPZ_TMP_INIT' and -these have `_mp_d' space obtained from `TMP_ALLOC' rather than the -memory allocation functions. Care is taken to ensure that these are -big enough that no reallocation is necessary (since it would have -unpredictable consequences). - - `_mp_size' and `_mp_alloc' are `int', although `mp_size_t' is -usually a `long'. This is done to make the fields just 32 bits on some -64 bits systems, thereby saving a few bytes of data space but still -providing plenty of range. - - -File: gmp.info, Node: Rational Internals, Next: Float Internals, Prev: Integer Internals, Up: Internals - -16.2 Rational Internals -======================= - -`mpq_t' variables represent rationals using an `mpz_t' numerator and -denominator (*note Integer Internals::). - - The canonical form adopted is denominator positive (and non-zero), -no common factors between numerator and denominator, and zero uniquely -represented as 0/1. - - It's believed that casting out common factors at each stage of a -calculation is best in general. A GCD is an O(N^2) operation so it's -better to do a few small ones immediately than to delay and have to do -a big one later. Knowing the numerator and denominator have no common -factors can be used for example in `mpq_mul' to make only two cross -GCDs necessary, not four. - - This general approach to common factors is badly sub-optimal in the -presence of simple factorizations or little prospect for cancellation, -but GMP has no way to know when this will occur. As per *Note -Efficiency::, that's left to applications. The `mpq_t' framework might -still suit, with `mpq_numref' and `mpq_denref' for direct access to the -numerator and denominator, or of course `mpz_t' variables can be used -directly. - - -File: gmp.info, Node: Float Internals, Next: Raw Output Internals, Prev: Rational Internals, Up: Internals - -16.3 Float Internals -==================== - -Efficient calculation is the primary aim of GMP floats and the use of -whole limbs and simple rounding facilitates this. - - `mpf_t' floats have a variable precision mantissa and a single -machine word signed exponent. The mantissa is represented using sign -and magnitude. - - most least - significant significant - limb limb - - _mp_d - |---- _mp_exp ---> | - _____ _____ _____ _____ _____ - |_____|_____|_____|_____|_____| - . <------------ radix point - - <-------- _mp_size ---------> - -The fields are as follows. - -`_mp_size' - The number of limbs currently in use, or the negative of that when - representing a negative value. Zero is represented by `_mp_size' - and `_mp_exp' both set to zero, and in that case the `_mp_d' data - is unused. (In the future `_mp_exp' might be undefined when - representing zero.) - -`_mp_prec' - The precision of the mantissa, in limbs. In any calculation the - aim is to produce `_mp_prec' limbs of result (the most significant - being non-zero). - -`_mp_d' - A pointer to the array of limbs which is the absolute value of the - mantissa. These are stored "little endian" as per the `mpn' - functions, so `_mp_d[0]' is the least significant limb and - `_mp_d[ABS(_mp_size)-1]' the most significant. - - The most significant limb is always non-zero, but there are no - other restrictions on its value, in particular the highest 1 bit - can be anywhere within the limb. - - `_mp_prec+1' limbs are allocated to `_mp_d', the extra limb being - for convenience (see below). There are no reallocations during a - calculation, only in a change of precision with `mpf_set_prec'. - -`_mp_exp' - The exponent, in limbs, determining the location of the implied - radix point. Zero means the radix point is just above the most - significant limb. Positive values mean a radix point offset - towards the lower limbs and hence a value >= 1, as for example in - the diagram above. Negative exponents mean a radix point further - above the highest limb. - - Naturally the exponent can be any value, it doesn't have to fall - within the limbs as the diagram shows, it can be a long way above - or a long way below. Limbs other than those included in the - `{_mp_d,_mp_size}' data are treated as zero. - - The `_mp_size' and `_mp_prec' fields are `int', although the -`mp_size_t' type is usually a `long'. The `_mp_exp' field is usually -`long'. This is done to make some fields just 32 bits on some 64 bits -systems, thereby saving a few bytes of data space but still providing -plenty of precision and a very large range. - - -The following various points should be noted. - -Low Zeros - The least significant limbs `_mp_d[0]' etc can be zero, though - such low zeros can always be ignored. Routines likely to produce - low zeros check and avoid them to save time in subsequent - calculations, but for most routines they're quite unlikely and - aren't checked. - -Mantissa Size Range - The `_mp_size' count of limbs in use can be less than `_mp_prec' if - the value can be represented in less. This means low precision - values or small integers stored in a high precision `mpf_t' can - still be operated on efficiently. - - `_mp_size' can also be greater than `_mp_prec'. Firstly a value is - allowed to use all of the `_mp_prec+1' limbs available at `_mp_d', - and secondly when `mpf_set_prec_raw' lowers `_mp_prec' it leaves - `_mp_size' unchanged and so the size can be arbitrarily bigger than - `_mp_prec'. - -Rounding - All rounding is done on limb boundaries. Calculating `_mp_prec' - limbs with the high non-zero will ensure the application requested - minimum precision is obtained. - - The use of simple "trunc" rounding towards zero is efficient, - since there's no need to examine extra limbs and increment or - decrement. - -Bit Shifts - Since the exponent is in limbs, there are no bit shifts in basic - operations like `mpf_add' and `mpf_mul'. When differing exponents - are encountered all that's needed is to adjust pointers to line up - the relevant limbs. - - Of course `mpf_mul_2exp' and `mpf_div_2exp' will require bit - shifts, but the choice is between an exponent in limbs which - requires shifts there, or one in bits which requires them almost - everywhere else. - -Use of `_mp_prec+1' Limbs - The extra limb on `_mp_d' (`_mp_prec+1' rather than just - `_mp_prec') helps when an `mpf' routine might get a carry from its - operation. `mpf_add' for instance will do an `mpn_add' of - `_mp_prec' limbs. If there's no carry then that's the result, but - if there is a carry then it's stored in the extra limb of space and - `_mp_size' becomes `_mp_prec+1'. - - Whenever `_mp_prec+1' limbs are held in a variable, the low limb - is not needed for the intended precision, only the `_mp_prec' high - limbs. But zeroing it out or moving the rest down is unnecessary. - Subsequent routines reading the value will simply take the high - limbs they need, and this will be `_mp_prec' if their target has - that same precision. This is no more than a pointer adjustment, - and must be checked anyway since the destination precision can be - different from the sources. - - Copy functions like `mpf_set' will retain a full `_mp_prec+1' limbs - if available. This ensures that a variable which has `_mp_size' - equal to `_mp_prec+1' will get its full exact value copied. - Strictly speaking this is unnecessary since only `_mp_prec' limbs - are needed for the application's requested precision, but it's - considered that an `mpf_set' from one variable into another of the - same precision ought to produce an exact copy. - -Application Precisions - `__GMPF_BITS_TO_PREC' converts an application requested precision - to an `_mp_prec'. The value in bits is rounded up to a whole limb - then an extra limb is added since the most significant limb of - `_mp_d' is only non-zero and therefore might contain only one bit. - - `__GMPF_PREC_TO_BITS' does the reverse conversion, and removes the - extra limb from `_mp_prec' before converting to bits. The net - effect of reading back with `mpf_get_prec' is simply the precision - rounded up to a multiple of `mp_bits_per_limb'. - - Note that the extra limb added here for the high only being - non-zero is in addition to the extra limb allocated to `_mp_d'. - For example with a 32-bit limb, an application request for 250 - bits will be rounded up to 8 limbs, then an extra added for the - high being only non-zero, giving an `_mp_prec' of 9. `_mp_d' then - gets 10 limbs allocated. Reading back with `mpf_get_prec' will - take `_mp_prec' subtract 1 limb and multiply by 32, giving 256 - bits. - - Strictly speaking, the fact the high limb has at least one bit - means that a float with, say, 3 limbs of 32-bits each will be - holding at least 65 bits, but for the purposes of `mpf_t' it's - considered simply to be 64 bits, a nice multiple of the limb size. - - -File: gmp.info, Node: Raw Output Internals, Next: C++ Interface Internals, Prev: Float Internals, Up: Internals - -16.4 Raw Output Internals -========================= - -`mpz_out_raw' uses the following format. - - +------+------------------------+ - | size | data bytes | - +------+------------------------+ - - The size is 4 bytes written most significant byte first, being the -number of subsequent data bytes, or the twos complement negative of -that when a negative integer is represented. The data bytes are the -absolute value of the integer, written most significant byte first. - - The most significant data byte is always non-zero, so the output is -the same on all systems, irrespective of limb size. - - In GMP 1, leading zero bytes were written to pad the data bytes to a -multiple of the limb size. `mpz_inp_raw' will still accept this, for -compatibility. - - The use of "big endian" for both the size and data fields is -deliberate, it makes the data easy to read in a hex dump of a file. -Unfortunately it also means that the limb data must be reversed when -reading or writing, so neither a big endian nor little endian system -can just read and write `_mp_d'. - - -File: gmp.info, Node: C++ Interface Internals, Prev: Raw Output Internals, Up: Internals - -16.5 C++ Interface Internals -============================ - -A system of expression templates is used to ensure something like -`a=b+c' turns into a simple call to `mpz_add' etc. For `mpf_class' the -scheme also ensures the precision of the final destination is used for -any temporaries within a statement like `f=w*x+y*z'. These are -important features which a naive implementation cannot provide. - - A simplified description of the scheme follows. The true scheme is -complicated by the fact that expressions have different return types. -For detailed information, refer to the source code. - - To perform an operation, say, addition, we first define a "function -object" evaluating it, - - struct __gmp_binary_plus - { - static void eval(mpf_t f, const mpf_t g, const mpf_t h) - { - mpf_add(f, g, h); - } - }; - -And an "additive expression" object, - - __gmp_expr<__gmp_binary_expr<mpf_class, mpf_class, __gmp_binary_plus> > - operator+(const mpf_class &f, const mpf_class &g) - { - return __gmp_expr - <__gmp_binary_expr<mpf_class, mpf_class, __gmp_binary_plus> >(f, g); - } - - The seemingly redundant `__gmp_expr<__gmp_binary_expr<...>>' is used -to encapsulate any possible kind of expression into a single template -type. In fact even `mpf_class' etc are `typedef' specializations of -`__gmp_expr'. - - Next we define assignment of `__gmp_expr' to `mpf_class'. - - template <class T> - mpf_class & mpf_class::operator=(const __gmp_expr<T> &expr) - { - expr.eval(this->get_mpf_t(), this->precision()); - return *this; - } - - template <class Op> - void __gmp_expr<__gmp_binary_expr<mpf_class, mpf_class, Op> >::eval - (mpf_t f, mp_bitcnt_t precision) - { - Op::eval(f, expr.val1.get_mpf_t(), expr.val2.get_mpf_t()); - } - - where `expr.val1' and `expr.val2' are references to the expression's -operands (here `expr' is the `__gmp_binary_expr' stored within the -`__gmp_expr'). - - This way, the expression is actually evaluated only at the time of -assignment, when the required precision (that of `f') is known. -Furthermore the target `mpf_t' is now available, thus we can call -`mpf_add' directly with `f' as the output argument. - - Compound expressions are handled by defining operators taking -subexpressions as their arguments, like this: - - template <class T, class U> - __gmp_expr - <__gmp_binary_expr<__gmp_expr<T>, __gmp_expr<U>, __gmp_binary_plus> > - operator+(const __gmp_expr<T> &expr1, const __gmp_expr<U> &expr2) - { - return __gmp_expr - <__gmp_binary_expr<__gmp_expr<T>, __gmp_expr<U>, __gmp_binary_plus> > - (expr1, expr2); - } - - And the corresponding specializations of `__gmp_expr::eval': - - template <class T, class U, class Op> - void __gmp_expr - <__gmp_binary_expr<__gmp_expr<T>, __gmp_expr<U>, Op> >::eval - (mpf_t f, mp_bitcnt_t precision) - { - // declare two temporaries - mpf_class temp1(expr.val1, precision), temp2(expr.val2, precision); - Op::eval(f, temp1.get_mpf_t(), temp2.get_mpf_t()); - } - - The expression is thus recursively evaluated to any level of -complexity and all subexpressions are evaluated to the precision of `f'. - - -File: gmp.info, Node: Contributors, Next: References, Prev: Internals, Up: Top - -Appendix A Contributors -*********************** - -Torbjo"rn Granlund wrote the original GMP library and is still the main -developer. Code not explicitly attributed to others, was contributed by -Torbjo"rn. Several other individuals and organizations have contributed -GMP. Here is a list in chronological order on first contribution: - - Gunnar Sjo"din and Hans Riesel helped with mathematical problems in -early versions of the library. - - Richard Stallman helped with the interface design and revised the -first version of this manual. - - Brian Beuning and Doug Lea helped with testing of early versions of -the library and made creative suggestions. - - John Amanatides of York University in Canada contributed the function -`mpz_probab_prime_p'. - - Paul Zimmermann wrote the REDC-based mpz_powm code, the -Scho"nhage-Strassen FFT multiply code, and the Karatsuba square root -code. He also improved the Toom3 code for GMP 4.2. Paul sparked the -development of GMP 2, with his comparisons between bignum packages. -The ECMNET project Paul is organizing was a driving force behind many -of the optimizations in GMP 3. Paul also wrote the new GMP 4.3 nth -root code (with Torbjo"rn). - - Ken Weber (Kent State University, Universidade Federal do Rio Grande -do Sul) contributed now defunct versions of `mpz_gcd', `mpz_divexact', -`mpn_gcd', and `mpn_bdivmod', partially supported by CNPq (Brazil) -grant 301314194-2. - - Per Bothner of Cygnus Support helped to set up GMP to use Cygnus' -configure. He has also made valuable suggestions and tested numerous -intermediary releases. - - Joachim Hollman was involved in the design of the `mpf' interface, -and in the `mpz' design revisions for version 2. - - Bennet Yee contributed the initial versions of `mpz_jacobi' and -`mpz_legendre'. - - Andreas Schwab contributed the files `mpn/m68k/lshift.S' and -`mpn/m68k/rshift.S' (now in `.asm' form). - - Robert Harley of Inria, France and David Seal of ARM, England, -suggested clever improvements for population count. Robert also wrote -highly optimized Karatsuba and 3-way Toom multiplication functions for -GMP 3, and contributed the ARM assembly code. - - Torsten Ekedahl of the Mathematical department of Stockholm -University provided significant inspiration during several phases of -the GMP development. His mathematical expertise helped improve several -algorithms. - - Linus Nordberg wrote the new configure system based on autoconf and -implemented the new random functions. - - Kevin Ryde worked on a large number of things: optimized x86 code, -m4 asm macros, parameter tuning, speed measuring, the configure system, -function inlining, divisibility tests, bit scanning, Jacobi symbols, -Fibonacci and Lucas number functions, printf and scanf functions, perl -interface, demo expression parser, the algorithms chapter in the -manual, `gmpasm-mode.el', and various miscellaneous improvements -elsewhere. - - Kent Boortz made the Mac OS 9 port. - - Steve Root helped write the optimized alpha 21264 assembly code. - - Gerardo Ballabio wrote the `gmpxx.h' C++ class interface and the C++ -`istream' input routines. - - Jason Moxham rewrote `mpz_fac_ui'. - - Pedro Gimeno implemented the Mersenne Twister and made other random -number improvements. - - Niels Mo"ller wrote the sub-quadratic GCD, extended GCD and jacobi -code, the quadratic Hensel division code, and (with Torbjo"rn) the new -divide and conquer division code for GMP 4.3. Niels also helped -implement the new Toom multiply code for GMP 4.3 and implemented helper -functions to simplify Toom evaluations for GMP 5.0. He wrote the -original version of mpn_mulmod_bnm1, and he is the main author of the -mini-gmp package used for gmp bootstrapping. - - Alberto Zanoni and Marco Bodrato suggested the unbalanced multiply -strategy, and found the optimal strategies for evaluation and -interpolation in Toom multiplication. - - Marco Bodrato helped implement the new Toom multiply code for GMP -4.3 and implemented most of the new Toom multiply and squaring code for -5.0. He is the main author of the current mpn_mulmod_bnm1, -mpn_mullo_n, and mpn_sqrlo. Marco also wrote the functions mpn_invert -and mpn_invertappr, and improved the speed of integer root extraction. -He is the author of the current combinatorial functions: binomial, -factorial, multifactorial, primorial. - - David Harvey suggested the internal function `mpn_bdiv_dbm1', -implementing division relevant to Toom multiplication. He also worked -on fast assembly sequences, in particular on a fast AMD64 -`mpn_mul_basecase'. He wrote the internal middle product functions -`mpn_mulmid_basecase', `mpn_toom42_mulmid', `mpn_mulmid_n' and related -helper routines. - - Martin Boij wrote `mpn_perfect_power_p'. - - Marc Glisse improved `gmpxx.h': use fewer temporaries (faster), -specializations of `numeric_limits' and `common_type', C++11 features -(move constructors, explicit bool conversion, UDL), make the conversion -from `mpq_class' to `mpz_class' explicit, optimize operations where one -argument is a small compile-time constant, replace some heap -allocations by stack allocations. He also fixed the eofbit handling of -C++ streams, and removed one division from `mpq/aors.c'. - - David S Miller wrote assembly code for SPARC T3 and T4. - - Mark Sofroniou cleaned up the types of mul_fft.c, letting it work -for huge operands. - - Ulrich Weigand ported GMP to the powerpc64le ABI. - - (This list is chronological, not ordered after significance. If you -have contributed to GMP but are not listed above, please tell -<gmp-devel@gmplib.org> about the omission!) - - The development of floating point functions of GNU MP 2, were -supported in part by the ESPRIT-BRA (Basic Research Activities) 6846 -project POSSO (POlynomial System SOlving). - - The development of GMP 2, 3, and 4.0 was supported in part by the -IDA Center for Computing Sciences. - - The development of GMP 4.3, 5.0, and 5.1 was supported in part by -the Swedish Foundation for Strategic Research. - - Thanks go to Hans Thorsen for donating an SGI system for the GMP -test system environment. - - -File: gmp.info, Node: References, Next: GNU Free Documentation License, Prev: Contributors, Up: Top - -Appendix B References -********************* - -B.1 Books -========= - - * Jonathan M. Borwein and Peter B. Borwein, "Pi and the AGM: A Study - in Analytic Number Theory and Computational Complexity", Wiley, - 1998. - - * Richard Crandall and Carl Pomerance, "Prime Numbers: A - Computational Perspective", 2nd edition, Springer-Verlag, 2005. - `http://www.math.dartmouth.edu/~carlp/' - - * Henri Cohen, "A Course in Computational Algebraic Number Theory", - Graduate Texts in Mathematics number 138, Springer-Verlag, 1993. - `http://www.math.u-bordeaux.fr/~cohen/' - - * Donald E. Knuth, "The Art of Computer Programming", volume 2, - "Seminumerical Algorithms", 3rd edition, Addison-Wesley, 1998. - `http://www-cs-faculty.stanford.edu/~knuth/taocp.html' - - * John D. Lipson, "Elements of Algebra and Algebraic Computing", The - Benjamin Cummings Publishing Company Inc, 1981. - - * Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone, - "Handbook of Applied Cryptography", - `http://www.cacr.math.uwaterloo.ca/hac/' - - * Richard M. Stallman and the GCC Developer Community, "Using the - GNU Compiler Collection", Free Software Foundation, 2008, - available online `https://gcc.gnu.org/onlinedocs/', and in the GCC - package `https://ftp.gnu.org/gnu/gcc/' - -B.2 Papers -========== - - * Yves Bertot, Nicolas Magaud and Paul Zimmermann, "A Proof of GMP - Square Root", Journal of Automated Reasoning, volume 29, 2002, pp. - 225-252. Also available online as INRIA Research Report 4475, - June 2002, `http://hal.inria.fr/docs/00/07/21/13/PDF/RR-4475.pdf' - - * Christoph Burnikel and Joachim Ziegler, "Fast Recursive Division", - Max-Planck-Institut fuer Informatik Research Report MPI-I-98-1-022, - `http://data.mpi-sb.mpg.de/internet/reports.nsf/NumberView/1998-1-022' - - * Torbjo"rn Granlund and Peter L. Montgomery, "Division by Invariant - Integers using Multiplication", in Proceedings of the SIGPLAN - PLDI'94 Conference, June 1994. Also available - `https://gmplib.org/~tege/divcnst-pldi94.pdf'. - - * Niels Mo"ller and Torbjo"rn Granlund, "Improved division by - invariant integers", IEEE Transactions on Computers, 11 June 2010. - `https://gmplib.org/~tege/division-paper.pdf' - - * Torbjo"rn Granlund and Niels Mo"ller, "Division of integers large - and small", to appear. - - * Tudor Jebelean, "An algorithm for exact division", Journal of - Symbolic Computation, volume 15, 1993, pp. 169-180. Research - report version available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1992/92-35.ps.gz' - - * Tudor Jebelean, "Exact Division with Karatsuba Complexity - - Extended Abstract", RISC-Linz technical report 96-31, - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1996/96-31.ps.gz' - - * Tudor Jebelean, "Practical Integer Division with Karatsuba - Complexity", ISSAC 97, pp. 339-341. Technical report available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1996/96-29.ps.gz' - - * Tudor Jebelean, "A Generalization of the Binary GCD Algorithm", - ISSAC 93, pp. 111-116. Technical report version available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1993/93-01.ps.gz' - - * Tudor Jebelean, "A Double-Digit Lehmer-Euclid Algorithm for - Finding the GCD of Long Integers", Journal of Symbolic - Computation, volume 19, 1995, pp. 145-157. Technical report - version also available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1992/92-69.ps.gz' - - * Werner Krandick and Tudor Jebelean, "Bidirectional Exact Integer - Division", Journal of Symbolic Computation, volume 21, 1996, pp. - 441-455. Early technical report version also available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1994/94-50.ps.gz' - - * Makoto Matsumoto and Takuji Nishimura, "Mersenne Twister: A - 623-dimensionally equidistributed uniform pseudorandom number - generator", ACM Transactions on Modelling and Computer Simulation, - volume 8, January 1998, pp. 3-30. Available online - `http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ARTICLES/mt.ps.gz' - (or .pdf) - - * R. Moenck and A. Borodin, "Fast Modular Transforms via Division", - Proceedings of the 13th Annual IEEE Symposium on Switching and - Automata Theory, October 1972, pp. 90-96. Reprinted as "Fast - Modular Transforms", Journal of Computer and System Sciences, - volume 8, number 3, June 1974, pp. 366-386. - - * Niels Mo"ller, "On Scho"nhage's algorithm and subquadratic integer - GCD computation", in Mathematics of Computation, volume 77, - January 2008, pp. 589-607. - - * Peter L. Montgomery, "Modular Multiplication Without Trial - Division", in Mathematics of Computation, volume 44, number 170, - April 1985. - - * Arnold Scho"nhage and Volker Strassen, "Schnelle Multiplikation - grosser Zahlen", Computing 7, 1971, pp. 281-292. - - * Kenneth Weber, "The accelerated integer GCD algorithm", ACM - Transactions on Mathematical Software, volume 21, number 1, March - 1995, pp. 111-122. - - * Paul Zimmermann, "Karatsuba Square Root", INRIA Research Report - 3805, November 1999, - `http://hal.inria.fr/inria-00072854/PDF/RR-3805.pdf' - - * Paul Zimmermann, "A Proof of GMP Fast Division and Square Root - Implementations", - `http://www.loria.fr/~zimmerma/papers/proof-div-sqrt.ps.gz' - - * Dan Zuras, "On Squaring and Multiplying Large Integers", ARITH-11: - IEEE Symposium on Computer Arithmetic, 1993, pp. 260 to 271. - Reprinted as "More on Multiplying and Squaring Large Integers", - IEEE Transactions on Computers, volume 43, number 8, August 1994, - pp. 899-908. - - -File: gmp.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: References, Up: Top - -Appendix C GNU Free Documentation License -***************************************** - - Version 1.3, 3 November 2008 - - Copyright (C) 2000-2002, 2007, 2008 Free Software Foundation, Inc. - `http://fsf.org/' - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to - assure everyone the effective freedom to copy and redistribute it, - with or without modifying it, either commercially or - noncommercially. Secondarily, this License preserves for the - author and publisher a way to get credit for their work, while not - being considered responsible for modifications made by others. - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. - It complements the GNU General Public License, which is a copyleft - license designed for free software. - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same freedoms - that the software does. But this License is not limited to - software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. - We recommend this License principally for works whose purpose is - instruction or reference. - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it - can be distributed under the terms of this License. Such a notice - grants a world-wide, royalty-free license, unlimited in duration, - to use that work under the conditions stated herein. The - "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You - accept the license if you copy, modify or distribute the work in a - way requiring permission under copyright law. - - A "Modified Version" of the Document means any work containing the - Document or a portion of it, either copied verbatim, or with - modifications and/or translated into another language. - - A "Secondary Section" is a named appendix or a front-matter section - of the Document that deals exclusively with the relationship of the - publishers or authors of the Document to the Document's overall - subject (or to related matters) and contains nothing that could - fall directly within that overall subject. (Thus, if the Document - is in part a textbook of mathematics, a Secondary Section may not - explain any mathematics.) The relationship could be a matter of - historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in - the notice that says that the Document is released under this - License. If a section does not fit the above definition of - Secondary then it is not allowed to be designated as Invariant. - The Document may contain zero Invariant Sections. If the Document - does not identify any Invariant Sections then there are none. - - The "Cover Texts" are certain short passages of text that are - listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. A - Front-Cover Text may be at most 5 words, and a Back-Cover Text may - be at most 25 words. - - A "Transparent" copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images - composed of pixels) generic paint programs or (for drawings) some - widely available drawing editor, and that is suitable for input to - text formatters or for automatic translation to a variety of - formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup, or absence of - markup, has been arranged to thwart or discourage subsequent - modification by readers is not Transparent. An image format is - not Transparent if used for any substantial amount of text. A - copy that is not "Transparent" is called "Opaque". - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and - standard-conforming simple HTML, PostScript or PDF designed for - human modification. Examples of transparent image formats include - PNG, XCF and JPG. Opaque formats include proprietary formats that - can be read and edited only by proprietary word processors, SGML or - XML for which the DTD and/or processing tools are not generally - available, and the machine-generated HTML, PostScript or PDF - produced by some word processors for output purposes only. - - The "Title Page" means, for a printed book, the title page itself, - plus such following pages as are needed to hold, legibly, the - material this License requires to appear in the title page. For - works in formats which do not have any title page as such, "Title - Page" means the text near the most prominent appearance of the - work's title, preceding the beginning of the body of the text. - - The "publisher" means any person or entity that distributes copies - of the Document to the public. - - A section "Entitled XYZ" means a named subunit of the Document - whose title either is precisely XYZ or contains XYZ in parentheses - following text that translates XYZ in another language. (Here XYZ - stands for a specific section name mentioned below, such as - "Acknowledgements", "Dedications", "Endorsements", or "History".) - To "Preserve the Title" of such a section when you modify the - Document means that it remains a section "Entitled XYZ" according - to this definition. - - The Document may include Warranty Disclaimers next to the notice - which states that this License applies to the Document. These - Warranty Disclaimers are considered to be included by reference in - this License, but only as regards disclaiming warranties: any other - implication that these Warranty Disclaimers may have is void and - has no effect on the meaning of this License. - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that you - add no other conditions whatsoever to those of this License. You - may not use technical measures to obstruct or control the reading - or further copying of the copies you make or distribute. However, - you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow - the conditions in section 3. - - You may also lend copies, under the same conditions stated above, - and you may publicly display copies. - - 3. COPYING IN QUANTITY - - If you publish printed copies (or copies in media that commonly - have printed covers) of the Document, numbering more than 100, and - the Document's license notice requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also clearly - and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the - title equally prominent and visible. You may add other material - on the covers in addition. Copying with changes limited to the - covers, as long as they preserve the title of the Document and - satisfy these conditions, can be treated as verbatim copying in - other respects. - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a - machine-readable Transparent copy along with each Opaque copy, or - state in or with each Opaque copy a computer-network location from - which the general network-using public has access to download - using public-standard network protocols a complete Transparent - copy of the Document, free of added material. If you use the - latter option, you must take reasonably prudent steps, when you - begin distribution of Opaque copies in quantity, to ensure that - this Transparent copy will remain thus accessible at the stated - location until at least one year after the last time you - distribute an Opaque copy (directly or through your agents or - retailers) of that edition to the public. - - It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of - copies, to give them a chance to provide you with an updated - version of the Document. - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document - under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with - the Modified Version filling the role of the Document, thus - licensing distribution and modification of the Modified Version to - whoever possesses a copy of it. In addition, you must do these - things in the Modified Version: - - A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed - in the History section of the Document). You may use the - same title as a previous version if the original publisher of - that version gives permission. - - B. List on the Title Page, as authors, one or more persons or - entities responsible for authorship of the modifications in - the Modified Version, together with at least five of the - principal authors of the Document (all of its principal - authors, if it has fewer than five), unless they release you - from this requirement. - - C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. - - D. Preserve all the copyright notices of the Document. - - E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - F. Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified - Version under the terms of this License, in the form shown in - the Addendum below. - - G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document's - license notice. - - H. Include an unaltered copy of this License. - - I. Preserve the section Entitled "History", Preserve its Title, - and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on - the Title Page. If there is no section Entitled "History" in - the Document, create one stating the title, year, authors, - and publisher of the Document as given on its Title Page, - then add an item describing the Modified Version as stated in - the previous sentence. - - J. Preserve the network location, if any, given in the Document - for public access to a Transparent copy of the Document, and - likewise the network locations given in the Document for - previous versions it was based on. These may be placed in - the "History" section. You may omit a network location for a - work that was published at least four years before the - Document itself, or if the original publisher of the version - it refers to gives permission. - - K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the - section all the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section - titles. - - M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. - - N. Do not retitle any existing section to be Entitled - "Endorsements" or to conflict in title with any Invariant - Section. - - O. Preserve any Warranty Disclaimers. - - If the Modified Version includes new front-matter sections or - appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option - designate some or all of these sections as invariant. To do this, - add their titles to the list of Invariant Sections in the Modified - Version's license notice. These titles must be distinct from any - other section titles. - - You may add a section Entitled "Endorsements", provided it contains - nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. - - You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end - of the list of Cover Texts in the Modified Version. Only one - passage of Front-Cover Text and one of Back-Cover Text may be - added by (or through arrangements made by) any one entity. If the - Document already includes a cover text for the same cover, - previously added by you or by arrangement made by the same entity - you are acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one. - - The author(s) and publisher(s) of the Document do not by this - License give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version. - - 5. COMBINING DOCUMENTS - - You may combine the Document with other documents released under - this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination - all of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice, and that you preserve all - their Warranty Disclaimers. - - The combined work need only contain one copy of this License, and - multiple identical Invariant Sections may be replaced with a single - copy. If there are multiple Invariant Sections with the same name - but different contents, make the title of each such section unique - by adding at the end of it, in parentheses, the name of the - original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in - the list of Invariant Sections in the license notice of the - combined work. - - In the combination, you must combine any sections Entitled - "History" in the various original documents, forming one section - Entitled "History"; likewise combine any sections Entitled - "Acknowledgements", and any sections Entitled "Dedications". You - must delete all sections Entitled "Endorsements." - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other - documents released under this License, and replace the individual - copies of this License in the various documents with a single copy - that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the - documents in all other respects. - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert - a copy of this License into the extracted document, and follow - this License in all other respects regarding verbatim copying of - that document. - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of - a storage or distribution medium, is called an "aggregate" if the - copyright resulting from the compilation is not used to limit the - legal rights of the compilation's users beyond what the individual - works permit. When the Document is included in an aggregate, this - License does not apply to the other works in the aggregate which - are not themselves derivative works of the Document. - - If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one half - of the entire aggregate, the Document's Cover Texts may be placed - on covers that bracket the Document within the aggregate, or the - electronic equivalent of covers if the Document is in electronic - form. Otherwise they must appear on printed covers that bracket - the whole aggregate. - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires special - permission from their copyright holders, but you may include - translations of some or all Invariant Sections in addition to the - original versions of these Invariant Sections. You may include a - translation of this License, and all the license notices in the - Document, and any Warranty Disclaimers, provided that you also - include the original English version of this License and the - original versions of those notices and disclaimers. In case of a - disagreement between the translation and the original version of - this License or a notice or disclaimer, the original version will - prevail. - - If a section in the Document is Entitled "Acknowledgements", - "Dedications", or "History", the requirement (section 4) to - Preserve its Title (section 1) will typically require changing the - actual title. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided under this License. Any attempt - otherwise to copy, modify, sublicense, or distribute it is void, - and will automatically terminate your rights under this License. - - However, if you cease all violation of this License, then your - license from a particular copyright holder is reinstated (a) - provisionally, unless and until the copyright holder explicitly - and finally terminates your license, and (b) permanently, if the - copyright holder fails to notify you of the violation by some - reasonable means prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is - reinstated permanently if the copyright holder notifies you of the - violation by some reasonable means, this is the first time you have - received notice of violation of this License (for any work) from - that copyright holder, and you cure the violation prior to 30 days - after your receipt of the notice. - - Termination of your rights under this section does not terminate - the licenses of parties who have received copies or rights from - you under this License. If your rights have been terminated and - not permanently reinstated, receipt of a copy of some or all of - the same material does not give you any rights to use it. - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software Foundation may publish new, revised versions of - the GNU Free Documentation License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. See - `https://www.gnu.org/copyleft/'. - - Each version of the License is given a distinguishing version - number. If the Document specifies that a particular numbered - version of this License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If - the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by the - Free Software Foundation. If the Document specifies that a proxy - can decide which future versions of this License can be used, that - proxy's public statement of acceptance of a version permanently - authorizes you to choose that version for the Document. - - 11. RELICENSING - - "Massive Multiauthor Collaboration Site" (or "MMC Site") means any - World Wide Web server that publishes copyrightable works and also - provides prominent facilities for anybody to edit those works. A - public wiki that anybody can edit is an example of such a server. - A "Massive Multiauthor Collaboration" (or "MMC") contained in the - site means any set of copyrightable works thus published on the MMC - site. - - "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 - license published by Creative Commons Corporation, a not-for-profit - corporation with a principal place of business in San Francisco, - California, as well as future copyleft versions of that license - published by that same organization. - - "Incorporate" means to publish or republish a Document, in whole or - in part, as part of another Document. - - An MMC is "eligible for relicensing" if it is licensed under this - License, and if all works that were first published under this - License somewhere other than this MMC, and subsequently - incorporated in whole or in part into the MMC, (1) had no cover - texts or invariant sections, and (2) were thus incorporated prior - to November 1, 2008. - - The operator of an MMC Site may republish an MMC contained in the - site under CC-BY-SA on the same site at any time before August 1, - 2009, provided the MMC is eligible for relicensing. - - -ADDENDUM: How to use this License for your documents -==================================================== - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and license -notices just after the title page: - - Copyright (C) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.3 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover - Texts. A copy of the license is included in the section entitled ``GNU - Free Documentation License''. - - If you have Invariant Sections, Front-Cover Texts and Back-Cover -Texts, replace the "with...Texts." line with this: - - with the Invariant Sections being LIST THEIR TITLES, with - the Front-Cover Texts being LIST, and with the Back-Cover Texts - being LIST. - - If you have Invariant Sections without Cover Texts, or some other -combination of the three, merge those two alternatives to suit the -situation. - - If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of -free software license, such as the GNU General Public License, to -permit their use in free software. - - -File: gmp.info, Node: Concept Index, Next: Function Index, Prev: GNU Free Documentation License, Up: Top - -Concept Index -************* - -�[index�] -* Menu: - -* #include: Headers and Libraries. - (line 6) -* --build: Build Options. (line 52) -* --disable-fft: Build Options. (line 313) -* --disable-shared: Build Options. (line 45) -* --disable-static: Build Options. (line 45) -* --enable-alloca: Build Options. (line 274) -* --enable-assert: Build Options. (line 319) -* --enable-cxx: Build Options. (line 226) -* --enable-fat: Build Options. (line 161) -* --enable-profiling <1>: Build Options. (line 323) -* --enable-profiling: Profiling. (line 6) -* --exec-prefix: Build Options. (line 32) -* --host: Build Options. (line 66) -* --prefix: Build Options. (line 32) -* -finstrument-functions: Profiling. (line 66) -* 2exp functions: Efficiency. (line 43) -* 68000: Notes for Particular Systems. - (line 94) -* 80x86: Notes for Particular Systems. - (line 150) -* ABI <1>: Build Options. (line 168) -* ABI: ABI and ISA. (line 6) -* About this manual: Introduction to GMP. (line 57) -* AC_CHECK_LIB: Autoconf. (line 11) -* AIX <1>: Notes for Particular Systems. - (line 7) -* AIX: ABI and ISA. (line 178) -* Algorithms: Algorithms. (line 6) -* alloca: Build Options. (line 274) -* Allocation of memory: Custom Allocation. (line 6) -* AMD64: ABI and ISA. (line 44) -* Anonymous FTP of latest version: Introduction to GMP. (line 37) -* Application Binary Interface: ABI and ISA. (line 6) -* Arithmetic functions <1>: Rational Arithmetic. (line 6) -* Arithmetic functions <2>: Float Arithmetic. (line 6) -* Arithmetic functions: Integer Arithmetic. (line 6) -* ARM: Notes for Particular Systems. - (line 20) -* Assembly cache handling: Assembly Cache Handling. - (line 6) -* Assembly carry propagation: Assembly Carry Propagation. - (line 6) -* Assembly code organisation: Assembly Code Organisation. - (line 6) -* Assembly coding: Assembly Coding. (line 6) -* Assembly floating Point: Assembly Floating Point. - (line 6) -* Assembly loop unrolling: Assembly Loop Unrolling. - (line 6) -* Assembly SIMD: Assembly SIMD Instructions. - (line 6) -* Assembly software pipelining: Assembly Software Pipelining. - (line 6) -* Assembly writing guide: Assembly Writing Guide. - (line 6) -* Assertion checking <1>: Debugging. (line 79) -* Assertion checking: Build Options. (line 319) -* Assignment functions <1>: Assigning Integers. (line 6) -* Assignment functions <2>: Initializing Rationals. - (line 6) -* Assignment functions <3>: Simultaneous Float Init & Assign. - (line 6) -* Assignment functions <4>: Simultaneous Integer Init & Assign. - (line 6) -* Assignment functions: Assigning Floats. (line 6) -* Autoconf: Autoconf. (line 6) -* Basics: GMP Basics. (line 6) -* Binomial coefficient algorithm: Binomial Coefficients Algorithm. - (line 6) -* Binomial coefficient functions: Number Theoretic Functions. - (line 124) -* Binutils strip: Known Build Problems. - (line 28) -* Bit manipulation functions: Integer Logic and Bit Fiddling. - (line 6) -* Bit scanning functions: Integer Logic and Bit Fiddling. - (line 40) -* Bit shift left: Integer Arithmetic. (line 38) -* Bit shift right: Integer Division. (line 62) -* Bits per limb: Useful Macros and Constants. - (line 7) -* Bug reporting: Reporting Bugs. (line 6) -* Build directory: Build Options. (line 19) -* Build notes for binary packaging: Notes for Package Builds. - (line 6) -* Build notes for particular systems: Notes for Particular Systems. - (line 6) -* Build options: Build Options. (line 6) -* Build problems known: Known Build Problems. - (line 6) -* Build system: Build Options. (line 52) -* Building GMP: Installing GMP. (line 6) -* Bus error: Debugging. (line 7) -* C compiler: Build Options. (line 179) -* C++ compiler: Build Options. (line 250) -* C++ interface: C++ Class Interface. (line 6) -* C++ interface internals: C++ Interface Internals. - (line 6) -* C++ istream input: C++ Formatted Input. (line 6) -* C++ ostream output: C++ Formatted Output. - (line 6) -* C++ support: Build Options. (line 226) -* CC: Build Options. (line 179) -* CC_FOR_BUILD: Build Options. (line 213) -* CFLAGS: Build Options. (line 179) -* Checker: Debugging. (line 115) -* checkergcc: Debugging. (line 122) -* Code organisation: Assembly Code Organisation. - (line 6) -* Compaq C++: Notes for Particular Systems. - (line 25) -* Comparison functions <1>: Integer Comparisons. (line 6) -* Comparison functions <2>: Float Comparison. (line 6) -* Comparison functions: Comparing Rationals. (line 6) -* Compatibility with older versions: Compatibility with older versions. - (line 6) -* Conditions for copying GNU MP: Copying. (line 6) -* Configuring GMP: Installing GMP. (line 6) -* Congruence algorithm: Exact Remainder. (line 30) -* Congruence functions: Integer Division. (line 137) -* Constants: Useful Macros and Constants. - (line 6) -* Contributors: Contributors. (line 6) -* Conventions for parameters: Parameter Conventions. - (line 6) -* Conventions for variables: Variable Conventions. - (line 6) -* Conversion functions <1>: Converting Integers. (line 6) -* Conversion functions <2>: Converting Floats. (line 6) -* Conversion functions: Rational Conversions. - (line 6) -* Copying conditions: Copying. (line 6) -* CPPFLAGS: Build Options. (line 205) -* CPU types <1>: Introduction to GMP. (line 24) -* CPU types: Build Options. (line 108) -* Cross compiling: Build Options. (line 66) -* Cryptography functions, low-level: Low-level Functions. (line 507) -* Custom allocation: Custom Allocation. (line 6) -* CXX: Build Options. (line 250) -* CXXFLAGS: Build Options. (line 250) -* Cygwin: Notes for Particular Systems. - (line 57) -* Darwin: Known Build Problems. - (line 51) -* Debugging: Debugging. (line 6) -* Demonstration programs: Demonstration Programs. - (line 6) -* Digits in an integer: Miscellaneous Integer Functions. - (line 23) -* Divisibility algorithm: Exact Remainder. (line 30) -* Divisibility functions: Integer Division. (line 137) -* Divisibility testing: Efficiency. (line 91) -* Division algorithms: Division Algorithms. (line 6) -* Division functions <1>: Rational Arithmetic. (line 24) -* Division functions <2>: Integer Division. (line 6) -* Division functions: Float Arithmetic. (line 33) -* DJGPP <1>: Notes for Particular Systems. - (line 57) -* DJGPP: Known Build Problems. - (line 18) -* DLLs: Notes for Particular Systems. - (line 70) -* DocBook: Build Options. (line 346) -* Documentation formats: Build Options. (line 339) -* Documentation license: GNU Free Documentation License. - (line 6) -* DVI: Build Options. (line 342) -* Efficiency: Efficiency. (line 6) -* Emacs: Emacs. (line 6) -* Exact division functions: Integer Division. (line 112) -* Exact remainder: Exact Remainder. (line 6) -* Example programs: Demonstration Programs. - (line 6) -* Exec prefix: Build Options. (line 32) -* Execution profiling <1>: Build Options. (line 323) -* Execution profiling: Profiling. (line 6) -* Exponentiation functions <1>: Float Arithmetic. (line 41) -* Exponentiation functions: Integer Exponentiation. - (line 6) -* Export: Integer Import and Export. - (line 45) -* Expression parsing demo: Demonstration Programs. - (line 15) -* Extended GCD: Number Theoretic Functions. - (line 43) -* Factor removal functions: Number Theoretic Functions. - (line 104) -* Factorial algorithm: Factorial Algorithm. (line 6) -* Factorial functions: Number Theoretic Functions. - (line 112) -* Factorization demo: Demonstration Programs. - (line 25) -* Fast Fourier Transform: FFT Multiplication. (line 6) -* Fat binary: Build Options. (line 161) -* FFT multiplication <1>: FFT Multiplication. (line 6) -* FFT multiplication: Build Options. (line 313) -* Fibonacci number algorithm: Fibonacci Numbers Algorithm. - (line 6) -* Fibonacci sequence functions: Number Theoretic Functions. - (line 132) -* Float arithmetic functions: Float Arithmetic. (line 6) -* Float assignment functions <1>: Simultaneous Float Init & Assign. - (line 6) -* Float assignment functions: Assigning Floats. (line 6) -* Float comparison functions: Float Comparison. (line 6) -* Float conversion functions: Converting Floats. (line 6) -* Float functions: Floating-point Functions. - (line 6) -* Float initialization functions <1>: Simultaneous Float Init & Assign. - (line 6) -* Float initialization functions: Initializing Floats. (line 6) -* Float input and output functions: I/O of Floats. (line 6) -* Float internals: Float Internals. (line 6) -* Float miscellaneous functions: Miscellaneous Float Functions. - (line 6) -* Float random number functions: Miscellaneous Float Functions. - (line 27) -* Float rounding functions: Miscellaneous Float Functions. - (line 9) -* Float sign tests: Float Comparison. (line 34) -* Floating point mode: Notes for Particular Systems. - (line 34) -* Floating-point functions: Floating-point Functions. - (line 6) -* Floating-point number: Nomenclature and Types. - (line 21) -* fnccheck: Profiling. (line 77) -* Formatted input: Formatted Input. (line 6) -* Formatted output: Formatted Output. (line 6) -* Free Documentation License: GNU Free Documentation License. - (line 6) -* FreeBSD: Notes for Particular Systems. - (line 43) -* frexp <1>: Converting Integers. (line 43) -* frexp: Converting Floats. (line 24) -* FTP of latest version: Introduction to GMP. (line 37) -* Function classes: Function Classes. (line 6) -* FunctionCheck: Profiling. (line 77) -* GCC Checker: Debugging. (line 115) -* GCD algorithms: Greatest Common Divisor Algorithms. - (line 6) -* GCD extended: Number Theoretic Functions. - (line 43) -* GCD functions: Number Theoretic Functions. - (line 26) -* GDB: Debugging. (line 58) -* Generic C: Build Options. (line 152) -* GMP Perl module: Demonstration Programs. - (line 35) -* GMP version number: Useful Macros and Constants. - (line 12) -* gmp.h: Headers and Libraries. - (line 6) -* gmpxx.h: C++ Interface General. - (line 8) -* GNU Debugger: Debugging. (line 58) -* GNU Free Documentation License: GNU Free Documentation License. - (line 6) -* GNU strip: Known Build Problems. - (line 28) -* gprof: Profiling. (line 41) -* Greatest common divisor algorithms: Greatest Common Divisor Algorithms. - (line 6) -* Greatest common divisor functions: Number Theoretic Functions. - (line 26) -* Hardware floating point mode: Notes for Particular Systems. - (line 34) -* Headers: Headers and Libraries. - (line 6) -* Heap problems: Debugging. (line 24) -* Home page: Introduction to GMP. (line 33) -* Host system: Build Options. (line 66) -* HP-UX: ABI and ISA. (line 77) -* HPPA: ABI and ISA. (line 77) -* I/O functions <1>: I/O of Integers. (line 6) -* I/O functions <2>: I/O of Floats. (line 6) -* I/O functions: I/O of Rationals. (line 6) -* i386: Notes for Particular Systems. - (line 150) -* IA-64: ABI and ISA. (line 116) -* Import: Integer Import and Export. - (line 11) -* In-place operations: Efficiency. (line 57) -* Include files: Headers and Libraries. - (line 6) -* info-lookup-symbol: Emacs. (line 6) -* Initialization functions <1>: Initializing Floats. (line 6) -* Initialization functions <2>: Random State Initialization. - (line 6) -* Initialization functions <3>: Simultaneous Float Init & Assign. - (line 6) -* Initialization functions <4>: Simultaneous Integer Init & Assign. - (line 6) -* Initialization functions <5>: Initializing Rationals. - (line 6) -* Initialization functions: Initializing Integers. - (line 6) -* Initializing and clearing: Efficiency. (line 21) -* Input functions <1>: Formatted Input Functions. - (line 6) -* Input functions <2>: I/O of Rationals. (line 6) -* Input functions <3>: I/O of Floats. (line 6) -* Input functions: I/O of Integers. (line 6) -* Install prefix: Build Options. (line 32) -* Installing GMP: Installing GMP. (line 6) -* Instruction Set Architecture: ABI and ISA. (line 6) -* instrument-functions: Profiling. (line 66) -* Integer: Nomenclature and Types. - (line 6) -* Integer arithmetic functions: Integer Arithmetic. (line 6) -* Integer assignment functions <1>: Assigning Integers. (line 6) -* Integer assignment functions: Simultaneous Integer Init & Assign. - (line 6) -* Integer bit manipulation functions: Integer Logic and Bit Fiddling. - (line 6) -* Integer comparison functions: Integer Comparisons. (line 6) -* Integer conversion functions: Converting Integers. (line 6) -* Integer division functions: Integer Division. (line 6) -* Integer exponentiation functions: Integer Exponentiation. - (line 6) -* Integer export: Integer Import and Export. - (line 45) -* Integer functions: Integer Functions. (line 6) -* Integer import: Integer Import and Export. - (line 11) -* Integer initialization functions <1>: Initializing Integers. - (line 6) -* Integer initialization functions: Simultaneous Integer Init & Assign. - (line 6) -* Integer input and output functions: I/O of Integers. (line 6) -* Integer internals: Integer Internals. (line 6) -* Integer logical functions: Integer Logic and Bit Fiddling. - (line 6) -* Integer miscellaneous functions: Miscellaneous Integer Functions. - (line 6) -* Integer random number functions: Integer Random Numbers. - (line 6) -* Integer root functions: Integer Roots. (line 6) -* Integer sign tests: Integer Comparisons. (line 28) -* Integer special functions: Integer Special Functions. - (line 6) -* Interix: Notes for Particular Systems. - (line 65) -* Internals: Internals. (line 6) -* Introduction: Introduction to GMP. (line 6) -* Inverse modulo functions: Number Theoretic Functions. - (line 70) -* IRIX <1>: ABI and ISA. (line 141) -* IRIX: Known Build Problems. - (line 38) -* ISA: ABI and ISA. (line 6) -* istream input: C++ Formatted Input. (line 6) -* Jacobi symbol algorithm: Jacobi Symbol. (line 6) -* Jacobi symbol functions: Number Theoretic Functions. - (line 79) -* Karatsuba multiplication: Karatsuba Multiplication. - (line 6) -* Karatsuba square root algorithm: Square Root Algorithm. - (line 6) -* Kronecker symbol functions: Number Theoretic Functions. - (line 91) -* Language bindings: Language Bindings. (line 6) -* Latest version of GMP: Introduction to GMP. (line 37) -* LCM functions: Number Theoretic Functions. - (line 64) -* Least common multiple functions: Number Theoretic Functions. - (line 64) -* Legendre symbol functions: Number Theoretic Functions. - (line 82) -* libgmp: Headers and Libraries. - (line 22) -* libgmpxx: Headers and Libraries. - (line 27) -* Libraries: Headers and Libraries. - (line 22) -* Libtool: Headers and Libraries. - (line 33) -* Libtool versioning: Notes for Package Builds. - (line 9) -* License conditions: Copying. (line 6) -* Limb: Nomenclature and Types. - (line 31) -* Limb size: Useful Macros and Constants. - (line 7) -* Linear congruential algorithm: Random Number Algorithms. - (line 25) -* Linear congruential random numbers: Random State Initialization. - (line 32) -* Linking: Headers and Libraries. - (line 22) -* Logical functions: Integer Logic and Bit Fiddling. - (line 6) -* Low-level functions: Low-level Functions. (line 6) -* Low-level functions for cryptography: Low-level Functions. (line 507) -* Lucas number algorithm: Lucas Numbers Algorithm. - (line 6) -* Lucas number functions: Number Theoretic Functions. - (line 143) -* MacOS X: Known Build Problems. - (line 51) -* Mailing lists: Introduction to GMP. (line 44) -* Malloc debugger: Debugging. (line 30) -* Malloc problems: Debugging. (line 24) -* Memory allocation: Custom Allocation. (line 6) -* Memory management: Memory Management. (line 6) -* Mersenne twister algorithm: Random Number Algorithms. - (line 17) -* Mersenne twister random numbers: Random State Initialization. - (line 13) -* MINGW: Notes for Particular Systems. - (line 57) -* MIPS: ABI and ISA. (line 141) -* Miscellaneous float functions: Miscellaneous Float Functions. - (line 6) -* Miscellaneous integer functions: Miscellaneous Integer Functions. - (line 6) -* MMX: Notes for Particular Systems. - (line 156) -* Modular inverse functions: Number Theoretic Functions. - (line 70) -* Most significant bit: Miscellaneous Integer Functions. - (line 34) -* MPN_PATH: Build Options. (line 327) -* MS Windows: Notes for Particular Systems. - (line 57) -* MS-DOS: Notes for Particular Systems. - (line 57) -* Multi-threading: Reentrancy. (line 6) -* Multiplication algorithms: Multiplication Algorithms. - (line 6) -* Nails: Low-level Functions. (line 683) -* Native compilation: Build Options. (line 52) -* NetBSD: Notes for Particular Systems. - (line 100) -* NeXT: Known Build Problems. - (line 57) -* Next prime function: Number Theoretic Functions. - (line 19) -* Nomenclature: Nomenclature and Types. - (line 6) -* Non-Unix systems: Build Options. (line 11) -* Nth root algorithm: Nth Root Algorithm. (line 6) -* Number sequences: Efficiency. (line 147) -* Number theoretic functions: Number Theoretic Functions. - (line 6) -* Numerator and denominator: Applying Integer Functions. - (line 6) -* obstack output: Formatted Output Functions. - (line 81) -* OpenBSD: Notes for Particular Systems. - (line 109) -* Optimizing performance: Performance optimization. - (line 6) -* ostream output: C++ Formatted Output. - (line 6) -* Other languages: Language Bindings. (line 6) -* Output functions <1>: Formatted Output Functions. - (line 6) -* Output functions <2>: I/O of Rationals. (line 6) -* Output functions <3>: I/O of Integers. (line 6) -* Output functions: I/O of Floats. (line 6) -* Packaged builds: Notes for Package Builds. - (line 6) -* Parameter conventions: Parameter Conventions. - (line 6) -* Parsing expressions demo: Demonstration Programs. - (line 21) -* Particular systems: Notes for Particular Systems. - (line 6) -* Past GMP versions: Compatibility with older versions. - (line 6) -* PDF: Build Options. (line 342) -* Perfect power algorithm: Perfect Power Algorithm. - (line 6) -* Perfect power functions: Integer Roots. (line 28) -* Perfect square algorithm: Perfect Square Algorithm. - (line 6) -* Perfect square functions: Integer Roots. (line 37) -* perl: Demonstration Programs. - (line 35) -* Perl module: Demonstration Programs. - (line 35) -* Postscript: Build Options. (line 342) -* Power/PowerPC <1>: Known Build Problems. - (line 63) -* Power/PowerPC: Notes for Particular Systems. - (line 115) -* Powering algorithms: Powering Algorithms. (line 6) -* Powering functions <1>: Float Arithmetic. (line 41) -* Powering functions: Integer Exponentiation. - (line 6) -* PowerPC: ABI and ISA. (line 176) -* Precision of floats: Floating-point Functions. - (line 6) -* Precision of hardware floating point: Notes for Particular Systems. - (line 34) -* Prefix: Build Options. (line 32) -* Prime testing algorithms: Prime Testing Algorithm. - (line 6) -* Prime testing functions: Number Theoretic Functions. - (line 7) -* Primorial functions: Number Theoretic Functions. - (line 117) -* printf formatted output: Formatted Output. (line 6) -* Probable prime testing functions: Number Theoretic Functions. - (line 7) -* prof: Profiling. (line 24) -* Profiling: Profiling. (line 6) -* Radix conversion algorithms: Radix Conversion Algorithms. - (line 6) -* Random number algorithms: Random Number Algorithms. - (line 6) -* Random number functions <1>: Integer Random Numbers. - (line 6) -* Random number functions <2>: Random Number Functions. - (line 6) -* Random number functions: Miscellaneous Float Functions. - (line 27) -* Random number seeding: Random State Seeding. - (line 6) -* Random number state: Random State Initialization. - (line 6) -* Random state: Nomenclature and Types. - (line 46) -* Rational arithmetic: Efficiency. (line 113) -* Rational arithmetic functions: Rational Arithmetic. (line 6) -* Rational assignment functions: Initializing Rationals. - (line 6) -* Rational comparison functions: Comparing Rationals. (line 6) -* Rational conversion functions: Rational Conversions. - (line 6) -* Rational initialization functions: Initializing Rationals. - (line 6) -* Rational input and output functions: I/O of Rationals. (line 6) -* Rational internals: Rational Internals. (line 6) -* Rational number: Nomenclature and Types. - (line 16) -* Rational number functions: Rational Number Functions. - (line 6) -* Rational numerator and denominator: Applying Integer Functions. - (line 6) -* Rational sign tests: Comparing Rationals. (line 28) -* Raw output internals: Raw Output Internals. - (line 6) -* Reallocations: Efficiency. (line 30) -* Reentrancy: Reentrancy. (line 6) -* References: References. (line 6) -* Remove factor functions: Number Theoretic Functions. - (line 104) -* Reporting bugs: Reporting Bugs. (line 6) -* Root extraction algorithm: Nth Root Algorithm. (line 6) -* Root extraction algorithms: Root Extraction Algorithms. - (line 6) -* Root extraction functions <1>: Float Arithmetic. (line 37) -* Root extraction functions: Integer Roots. (line 6) -* Root testing functions: Integer Roots. (line 28) -* Rounding functions: Miscellaneous Float Functions. - (line 9) -* Sample programs: Demonstration Programs. - (line 6) -* Scan bit functions: Integer Logic and Bit Fiddling. - (line 40) -* scanf formatted input: Formatted Input. (line 6) -* SCO: Known Build Problems. - (line 38) -* Seeding random numbers: Random State Seeding. - (line 6) -* Segmentation violation: Debugging. (line 7) -* Sequent Symmetry: Known Build Problems. - (line 68) -* Services for Unix: Notes for Particular Systems. - (line 65) -* Shared library versioning: Notes for Package Builds. - (line 9) -* Sign tests <1>: Comparing Rationals. (line 28) -* Sign tests <2>: Float Comparison. (line 34) -* Sign tests: Integer Comparisons. (line 28) -* Size in digits: Miscellaneous Integer Functions. - (line 23) -* Small operands: Efficiency. (line 7) -* Solaris <1>: ABI and ISA. (line 208) -* Solaris: Known Build Problems. - (line 72) -* Sparc: Notes for Particular Systems. - (line 127) -* Sparc V9: ABI and ISA. (line 208) -* Special integer functions: Integer Special Functions. - (line 6) -* Square root algorithm: Square Root Algorithm. - (line 6) -* SSE2: Notes for Particular Systems. - (line 156) -* Stack backtrace: Debugging. (line 50) -* Stack overflow <1>: Debugging. (line 7) -* Stack overflow: Build Options. (line 274) -* Static linking: Efficiency. (line 14) -* stdarg.h: Headers and Libraries. - (line 17) -* stdio.h: Headers and Libraries. - (line 11) -* Stripped libraries: Known Build Problems. - (line 28) -* Sun: ABI and ISA. (line 208) -* SunOS: Notes for Particular Systems. - (line 144) -* Systems: Notes for Particular Systems. - (line 6) -* Temporary memory: Build Options. (line 274) -* Texinfo: Build Options. (line 339) -* Text input/output: Efficiency. (line 153) -* Thread safety: Reentrancy. (line 6) -* Toom multiplication <1>: Higher degree Toom'n'half. - (line 6) -* Toom multiplication <2>: Other Multiplication. - (line 6) -* Toom multiplication <3>: Toom 4-Way Multiplication. - (line 6) -* Toom multiplication: Toom 3-Way Multiplication. - (line 6) -* Types: Nomenclature and Types. - (line 6) -* ui and si functions: Efficiency. (line 50) -* Unbalanced multiplication: Unbalanced Multiplication. - (line 6) -* Upward compatibility: Compatibility with older versions. - (line 6) -* Useful macros and constants: Useful Macros and Constants. - (line 6) -* User-defined precision: Floating-point Functions. - (line 6) -* Valgrind: Debugging. (line 130) -* Variable conventions: Variable Conventions. - (line 6) -* Version number: Useful Macros and Constants. - (line 12) -* Web page: Introduction to GMP. (line 33) -* Windows: Notes for Particular Systems. - (line 70) -* x86: Notes for Particular Systems. - (line 150) -* x87: Notes for Particular Systems. - (line 34) -* XML: Build Options. (line 346) - - -File: gmp.info, Node: Function Index, Prev: Concept Index, Up: Top - -Function and Type Index -*********************** - -�[index�] -* Menu: - -* __GMP_CC: Useful Macros and Constants. - (line 23) -* __GMP_CFLAGS: Useful Macros and Constants. - (line 24) -* __GNU_MP_VERSION: Useful Macros and Constants. - (line 10) -* __GNU_MP_VERSION_MINOR: Useful Macros and Constants. - (line 11) -* __GNU_MP_VERSION_PATCHLEVEL: Useful Macros and Constants. - (line 12) -* _mpz_realloc: Integer Special Functions. - (line 14) -* abs <1>: C++ Interface Rationals. - (line 49) -* abs <2>: C++ Interface Integers. - (line 47) -* abs: C++ Interface Floats. - (line 83) -* ceil: C++ Interface Floats. - (line 84) -* cmp <1>: C++ Interface Floats. - (line 85) -* cmp <2>: C++ Interface Integers. - (line 48) -* cmp <3>: C++ Interface Rationals. - (line 51) -* cmp: C++ Interface Floats. - (line 86) -* floor: C++ Interface Floats. - (line 93) -* gcd: C++ Interface Integers. - (line 64) -* gmp_asprintf: Formatted Output Functions. - (line 65) -* gmp_errno: Random State Initialization. - (line 55) -* GMP_ERROR_INVALID_ARGUMENT: Random State Initialization. - (line 55) -* GMP_ERROR_UNSUPPORTED_ARGUMENT: Random State Initialization. - (line 55) -* gmp_fprintf: Formatted Output Functions. - (line 29) -* gmp_fscanf: Formatted Input Functions. - (line 25) -* GMP_LIMB_BITS: Low-level Functions. (line 713) -* GMP_NAIL_BITS: Low-level Functions. (line 711) -* GMP_NAIL_MASK: Low-level Functions. (line 721) -* GMP_NUMB_BITS: Low-level Functions. (line 712) -* GMP_NUMB_MASK: Low-level Functions. (line 722) -* GMP_NUMB_MAX: Low-level Functions. (line 730) -* gmp_obstack_printf: Formatted Output Functions. - (line 79) -* gmp_obstack_vprintf: Formatted Output Functions. - (line 81) -* gmp_printf: Formatted Output Functions. - (line 24) -* GMP_RAND_ALG_DEFAULT: Random State Initialization. - (line 49) -* GMP_RAND_ALG_LC: Random State Initialization. - (line 49) -* gmp_randclass: C++ Interface Random Numbers. - (line 7) -* gmp_randclass::get_f: C++ Interface Random Numbers. - (line 46) -* gmp_randclass::get_z_bits: C++ Interface Random Numbers. - (line 39) -* gmp_randclass::get_z_range: C++ Interface Random Numbers. - (line 42) -* gmp_randclass::gmp_randclass: C++ Interface Random Numbers. - (line 27) -* gmp_randclass::seed: C++ Interface Random Numbers. - (line 34) -* gmp_randclear: Random State Initialization. - (line 62) -* gmp_randinit: Random State Initialization. - (line 47) -* gmp_randinit_default: Random State Initialization. - (line 7) -* gmp_randinit_lc_2exp: Random State Initialization. - (line 18) -* gmp_randinit_lc_2exp_size: Random State Initialization. - (line 32) -* gmp_randinit_mt: Random State Initialization. - (line 13) -* gmp_randinit_set: Random State Initialization. - (line 43) -* gmp_randseed: Random State Seeding. - (line 8) -* gmp_randseed_ui: Random State Seeding. - (line 10) -* gmp_randstate_t: Nomenclature and Types. - (line 46) -* gmp_scanf: Formatted Input Functions. - (line 21) -* gmp_snprintf: Formatted Output Functions. - (line 46) -* gmp_sprintf: Formatted Output Functions. - (line 34) -* gmp_sscanf: Formatted Input Functions. - (line 29) -* gmp_urandomb_ui: Random State Miscellaneous. - (line 8) -* gmp_urandomm_ui: Random State Miscellaneous. - (line 14) -* gmp_vasprintf: Formatted Output Functions. - (line 66) -* gmp_version: Useful Macros and Constants. - (line 18) -* gmp_vfprintf: Formatted Output Functions. - (line 30) -* gmp_vfscanf: Formatted Input Functions. - (line 26) -* gmp_vprintf: Formatted Output Functions. - (line 25) -* gmp_vscanf: Formatted Input Functions. - (line 22) -* gmp_vsnprintf: Formatted Output Functions. - (line 48) -* gmp_vsprintf: Formatted Output Functions. - (line 35) -* gmp_vsscanf: Formatted Input Functions. - (line 31) -* hypot: C++ Interface Floats. - (line 94) -* lcm: C++ Interface Integers. - (line 65) -* mp_bitcnt_t: Nomenclature and Types. - (line 42) -* mp_bits_per_limb: Useful Macros and Constants. - (line 7) -* mp_exp_t: Nomenclature and Types. - (line 27) -* mp_get_memory_functions: Custom Allocation. (line 90) -* mp_limb_t: Nomenclature and Types. - (line 31) -* mp_set_memory_functions: Custom Allocation. (line 18) -* mp_size_t: Nomenclature and Types. - (line 37) -* mpf_abs: Float Arithmetic. (line 47) -* mpf_add: Float Arithmetic. (line 7) -* mpf_add_ui: Float Arithmetic. (line 9) -* mpf_ceil: Miscellaneous Float Functions. - (line 7) -* mpf_class: C++ Interface General. - (line 20) -* mpf_class::fits_sint_p: C++ Interface Floats. - (line 87) -* mpf_class::fits_slong_p: C++ Interface Floats. - (line 88) -* mpf_class::fits_sshort_p: C++ Interface Floats. - (line 89) -* mpf_class::fits_uint_p: C++ Interface Floats. - (line 90) -* mpf_class::fits_ulong_p: C++ Interface Floats. - (line 91) -* mpf_class::fits_ushort_p: C++ Interface Floats. - (line 92) -* mpf_class::get_d: C++ Interface Floats. - (line 95) -* mpf_class::get_mpf_t: C++ Interface General. - (line 66) -* mpf_class::get_prec: C++ Interface Floats. - (line 115) -* mpf_class::get_si: C++ Interface Floats. - (line 96) -* mpf_class::get_str: C++ Interface Floats. - (line 98) -* mpf_class::get_ui: C++ Interface Floats. - (line 99) -* mpf_class::mpf_class: C++ Interface Floats. - (line 47) -* mpf_class::operator=: C++ Interface Floats. - (line 60) -* mpf_class::set_prec: C++ Interface Floats. - (line 116) -* mpf_class::set_prec_raw: C++ Interface Floats. - (line 117) -* mpf_class::set_str: C++ Interface Floats. - (line 101) -* mpf_class::swap: C++ Interface Floats. - (line 104) -* mpf_clear: Initializing Floats. (line 37) -* mpf_clears: Initializing Floats. (line 41) -* mpf_cmp: Float Comparison. (line 7) -* mpf_cmp_d: Float Comparison. (line 9) -* mpf_cmp_si: Float Comparison. (line 11) -* mpf_cmp_ui: Float Comparison. (line 10) -* mpf_cmp_z: Float Comparison. (line 8) -* mpf_div: Float Arithmetic. (line 29) -* mpf_div_2exp: Float Arithmetic. (line 55) -* mpf_div_ui: Float Arithmetic. (line 33) -* mpf_eq: Float Comparison. (line 19) -* mpf_fits_sint_p: Miscellaneous Float Functions. - (line 20) -* mpf_fits_slong_p: Miscellaneous Float Functions. - (line 18) -* mpf_fits_sshort_p: Miscellaneous Float Functions. - (line 22) -* mpf_fits_uint_p: Miscellaneous Float Functions. - (line 19) -* mpf_fits_ulong_p: Miscellaneous Float Functions. - (line 17) -* mpf_fits_ushort_p: Miscellaneous Float Functions. - (line 21) -* mpf_floor: Miscellaneous Float Functions. - (line 8) -* mpf_get_d: Converting Floats. (line 7) -* mpf_get_d_2exp: Converting Floats. (line 17) -* mpf_get_default_prec: Initializing Floats. (line 12) -* mpf_get_prec: Initializing Floats. (line 62) -* mpf_get_si: Converting Floats. (line 28) -* mpf_get_str: Converting Floats. (line 38) -* mpf_get_ui: Converting Floats. (line 29) -* mpf_init: Initializing Floats. (line 19) -* mpf_init2: Initializing Floats. (line 26) -* mpf_init_set: Simultaneous Float Init & Assign. - (line 16) -* mpf_init_set_d: Simultaneous Float Init & Assign. - (line 19) -* mpf_init_set_si: Simultaneous Float Init & Assign. - (line 18) -* mpf_init_set_str: Simultaneous Float Init & Assign. - (line 26) -* mpf_init_set_ui: Simultaneous Float Init & Assign. - (line 17) -* mpf_inits: Initializing Floats. (line 31) -* mpf_inp_str: I/O of Floats. (line 39) -* mpf_integer_p: Miscellaneous Float Functions. - (line 14) -* mpf_mul: Float Arithmetic. (line 19) -* mpf_mul_2exp: Float Arithmetic. (line 51) -* mpf_mul_ui: Float Arithmetic. (line 21) -* mpf_neg: Float Arithmetic. (line 44) -* mpf_out_str: I/O of Floats. (line 19) -* mpf_pow_ui: Float Arithmetic. (line 41) -* mpf_random2: Miscellaneous Float Functions. - (line 37) -* mpf_reldiff: Float Comparison. (line 30) -* mpf_set: Assigning Floats. (line 10) -* mpf_set_d: Assigning Floats. (line 13) -* mpf_set_default_prec: Initializing Floats. (line 7) -* mpf_set_prec: Initializing Floats. (line 65) -* mpf_set_prec_raw: Initializing Floats. (line 72) -* mpf_set_q: Assigning Floats. (line 15) -* mpf_set_si: Assigning Floats. (line 12) -* mpf_set_str: Assigning Floats. (line 18) -* mpf_set_ui: Assigning Floats. (line 11) -* mpf_set_z: Assigning Floats. (line 14) -* mpf_sgn: Float Comparison. (line 34) -* mpf_sqrt: Float Arithmetic. (line 36) -* mpf_sqrt_ui: Float Arithmetic. (line 37) -* mpf_sub: Float Arithmetic. (line 12) -* mpf_sub_ui: Float Arithmetic. (line 16) -* mpf_swap: Assigning Floats. (line 52) -* mpf_t: Nomenclature and Types. - (line 21) -* mpf_trunc: Miscellaneous Float Functions. - (line 9) -* mpf_ui_div: Float Arithmetic. (line 31) -* mpf_ui_sub: Float Arithmetic. (line 14) -* mpf_urandomb: Miscellaneous Float Functions. - (line 27) -* mpn_add: Low-level Functions. (line 69) -* mpn_add_1: Low-level Functions. (line 64) -* mpn_add_n: Low-level Functions. (line 54) -* mpn_addmul_1: Low-level Functions. (line 150) -* mpn_and_n: Low-level Functions. (line 449) -* mpn_andn_n: Low-level Functions. (line 464) -* mpn_cmp: Low-level Functions. (line 295) -* mpn_cnd_add_n: Low-level Functions. (line 542) -* mpn_cnd_sub_n: Low-level Functions. (line 544) -* mpn_cnd_swap: Low-level Functions. (line 569) -* mpn_com: Low-level Functions. (line 489) -* mpn_copyd: Low-level Functions. (line 498) -* mpn_copyi: Low-level Functions. (line 494) -* mpn_divexact_1: Low-level Functions. (line 233) -* mpn_divexact_by3: Low-level Functions. (line 240) -* mpn_divexact_by3c: Low-level Functions. (line 242) -* mpn_divmod: Low-level Functions. (line 228) -* mpn_divmod_1: Low-level Functions. (line 212) -* mpn_divrem: Low-level Functions. (line 186) -* mpn_divrem_1: Low-level Functions. (line 210) -* mpn_gcd: Low-level Functions. (line 303) -* mpn_gcd_1: Low-level Functions. (line 313) -* mpn_gcdext: Low-level Functions. (line 319) -* mpn_get_str: Low-level Functions. (line 373) -* mpn_hamdist: Low-level Functions. (line 438) -* mpn_ior_n: Low-level Functions. (line 454) -* mpn_iorn_n: Low-level Functions. (line 469) -* mpn_lshift: Low-level Functions. (line 271) -* mpn_mod_1: Low-level Functions. (line 266) -* mpn_mul: Low-level Functions. (line 116) -* mpn_mul_1: Low-level Functions. (line 135) -* mpn_mul_n: Low-level Functions. (line 105) -* mpn_nand_n: Low-level Functions. (line 474) -* mpn_neg: Low-level Functions. (line 98) -* mpn_nior_n: Low-level Functions. (line 479) -* mpn_perfect_square_p: Low-level Functions. (line 444) -* mpn_popcount: Low-level Functions. (line 434) -* mpn_random: Low-level Functions. (line 423) -* mpn_random2: Low-level Functions. (line 424) -* mpn_rshift: Low-level Functions. (line 283) -* mpn_scan0: Low-level Functions. (line 408) -* mpn_scan1: Low-level Functions. (line 416) -* mpn_sec_add_1: Low-level Functions. (line 555) -* mpn_sec_div_qr: Low-level Functions. (line 632) -* mpn_sec_div_qr_itch: Low-level Functions. (line 633) -* mpn_sec_div_r: Low-level Functions. (line 649) -* mpn_sec_div_r_itch: Low-level Functions. (line 650) -* mpn_sec_invert: Low-level Functions. (line 664) -* mpn_sec_invert_itch: Low-level Functions. (line 665) -* mpn_sec_mul: Low-level Functions. (line 577) -* mpn_sec_mul_itch: Low-level Functions. (line 578) -* mpn_sec_powm: Low-level Functions. (line 607) -* mpn_sec_powm_itch: Low-level Functions. (line 609) -* mpn_sec_sqr: Low-level Functions. (line 592) -* mpn_sec_sqr_itch: Low-level Functions. (line 593) -* mpn_sec_sub_1: Low-level Functions. (line 557) -* mpn_sec_tabselect: Low-level Functions. (line 623) -* mpn_set_str: Low-level Functions. (line 388) -* mpn_sizeinbase: Low-level Functions. (line 366) -* mpn_sqr: Low-level Functions. (line 127) -* mpn_sqrtrem: Low-level Functions. (line 348) -* mpn_sub: Low-level Functions. (line 90) -* mpn_sub_1: Low-level Functions. (line 85) -* mpn_sub_n: Low-level Functions. (line 76) -* mpn_submul_1: Low-level Functions. (line 162) -* mpn_tdiv_qr: Low-level Functions. (line 175) -* mpn_xnor_n: Low-level Functions. (line 484) -* mpn_xor_n: Low-level Functions. (line 459) -* mpn_zero: Low-level Functions. (line 501) -* mpn_zero_p: Low-level Functions. (line 299) -* mpq_abs: Rational Arithmetic. (line 34) -* mpq_add: Rational Arithmetic. (line 8) -* mpq_canonicalize: Rational Number Functions. - (line 22) -* mpq_class: C++ Interface General. - (line 19) -* mpq_class::canonicalize: C++ Interface Rationals. - (line 43) -* mpq_class::get_d: C++ Interface Rationals. - (line 52) -* mpq_class::get_den: C++ Interface Rationals. - (line 66) -* mpq_class::get_den_mpz_t: C++ Interface Rationals. - (line 76) -* mpq_class::get_mpq_t: C++ Interface General. - (line 65) -* mpq_class::get_num: C++ Interface Rationals. - (line 65) -* mpq_class::get_num_mpz_t: C++ Interface Rationals. - (line 75) -* mpq_class::get_str: C++ Interface Rationals. - (line 53) -* mpq_class::mpq_class: C++ Interface Rationals. - (line 12) -* mpq_class::set_str: C++ Interface Rationals. - (line 55) -* mpq_class::swap: C++ Interface Rationals. - (line 57) -* mpq_clear: Initializing Rationals. - (line 16) -* mpq_clears: Initializing Rationals. - (line 20) -* mpq_cmp: Comparing Rationals. (line 7) -* mpq_cmp_si: Comparing Rationals. (line 18) -* mpq_cmp_ui: Comparing Rationals. (line 16) -* mpq_cmp_z: Comparing Rationals. (line 8) -* mpq_denref: Applying Integer Functions. - (line 18) -* mpq_div: Rational Arithmetic. (line 24) -* mpq_div_2exp: Rational Arithmetic. (line 28) -* mpq_equal: Comparing Rationals. (line 34) -* mpq_get_d: Rational Conversions. - (line 7) -* mpq_get_den: Applying Integer Functions. - (line 24) -* mpq_get_num: Applying Integer Functions. - (line 23) -* mpq_get_str: Rational Conversions. - (line 22) -* mpq_init: Initializing Rationals. - (line 7) -* mpq_inits: Initializing Rationals. - (line 12) -* mpq_inp_str: I/O of Rationals. (line 27) -* mpq_inv: Rational Arithmetic. (line 37) -* mpq_mul: Rational Arithmetic. (line 16) -* mpq_mul_2exp: Rational Arithmetic. (line 20) -* mpq_neg: Rational Arithmetic. (line 31) -* mpq_numref: Applying Integer Functions. - (line 17) -* mpq_out_str: I/O of Rationals. (line 19) -* mpq_set: Initializing Rationals. - (line 24) -* mpq_set_d: Rational Conversions. - (line 17) -* mpq_set_den: Applying Integer Functions. - (line 26) -* mpq_set_f: Rational Conversions. - (line 18) -* mpq_set_num: Applying Integer Functions. - (line 25) -* mpq_set_si: Initializing Rationals. - (line 31) -* mpq_set_str: Initializing Rationals. - (line 36) -* mpq_set_ui: Initializing Rationals. - (line 29) -* mpq_set_z: Initializing Rationals. - (line 25) -* mpq_sgn: Comparing Rationals. (line 28) -* mpq_sub: Rational Arithmetic. (line 12) -* mpq_swap: Initializing Rationals. - (line 56) -* mpq_t: Nomenclature and Types. - (line 16) -* mpz_2fac_ui: Number Theoretic Functions. - (line 110) -* mpz_abs: Integer Arithmetic. (line 45) -* mpz_add: Integer Arithmetic. (line 7) -* mpz_add_ui: Integer Arithmetic. (line 9) -* mpz_addmul: Integer Arithmetic. (line 26) -* mpz_addmul_ui: Integer Arithmetic. (line 28) -* mpz_and: Integer Logic and Bit Fiddling. - (line 11) -* mpz_array_init: Integer Special Functions. - (line 11) -* mpz_bin_ui: Number Theoretic Functions. - (line 122) -* mpz_bin_uiui: Number Theoretic Functions. - (line 124) -* mpz_cdiv_q: Integer Division. (line 13) -* mpz_cdiv_q_2exp: Integer Division. (line 26) -* mpz_cdiv_q_ui: Integer Division. (line 18) -* mpz_cdiv_qr: Integer Division. (line 16) -* mpz_cdiv_qr_ui: Integer Division. (line 22) -* mpz_cdiv_r: Integer Division. (line 14) -* mpz_cdiv_r_2exp: Integer Division. (line 28) -* mpz_cdiv_r_ui: Integer Division. (line 20) -* mpz_cdiv_ui: Integer Division. (line 24) -* mpz_class: C++ Interface General. - (line 18) -* mpz_class::fits_sint_p: C++ Interface Integers. - (line 50) -* mpz_class::fits_slong_p: C++ Interface Integers. - (line 51) -* mpz_class::fits_sshort_p: C++ Interface Integers. - (line 52) -* mpz_class::fits_uint_p: C++ Interface Integers. - (line 53) -* mpz_class::fits_ulong_p: C++ Interface Integers. - (line 54) -* mpz_class::fits_ushort_p: C++ Interface Integers. - (line 55) -* mpz_class::get_d: C++ Interface Integers. - (line 56) -* mpz_class::get_mpz_t: C++ Interface General. - (line 64) -* mpz_class::get_si: C++ Interface Integers. - (line 57) -* mpz_class::get_str: C++ Interface Integers. - (line 58) -* mpz_class::get_ui: C++ Interface Integers. - (line 59) -* mpz_class::mpz_class: C++ Interface Integers. - (line 7) -* mpz_class::set_str: C++ Interface Integers. - (line 61) -* mpz_class::swap: C++ Interface Integers. - (line 66) -* mpz_clear: Initializing Integers. - (line 49) -* mpz_clears: Initializing Integers. - (line 53) -* mpz_clrbit: Integer Logic and Bit Fiddling. - (line 56) -* mpz_cmp: Integer Comparisons. (line 7) -* mpz_cmp_d: Integer Comparisons. (line 8) -* mpz_cmp_si: Integer Comparisons. (line 9) -* mpz_cmp_ui: Integer Comparisons. (line 10) -* mpz_cmpabs: Integer Comparisons. (line 18) -* mpz_cmpabs_d: Integer Comparisons. (line 19) -* mpz_cmpabs_ui: Integer Comparisons. (line 20) -* mpz_com: Integer Logic and Bit Fiddling. - (line 20) -* mpz_combit: Integer Logic and Bit Fiddling. - (line 59) -* mpz_congruent_2exp_p: Integer Division. (line 137) -* mpz_congruent_p: Integer Division. (line 133) -* mpz_congruent_ui_p: Integer Division. (line 135) -* mpz_divexact: Integer Division. (line 110) -* mpz_divexact_ui: Integer Division. (line 112) -* mpz_divisible_2exp_p: Integer Division. (line 123) -* mpz_divisible_p: Integer Division. (line 120) -* mpz_divisible_ui_p: Integer Division. (line 122) -* mpz_even_p: Miscellaneous Integer Functions. - (line 18) -* mpz_export: Integer Import and Export. - (line 45) -* mpz_fac_ui: Number Theoretic Functions. - (line 109) -* mpz_fdiv_q: Integer Division. (line 30) -* mpz_fdiv_q_2exp: Integer Division. (line 43) -* mpz_fdiv_q_ui: Integer Division. (line 35) -* mpz_fdiv_qr: Integer Division. (line 33) -* mpz_fdiv_qr_ui: Integer Division. (line 39) -* mpz_fdiv_r: Integer Division. (line 31) -* mpz_fdiv_r_2exp: Integer Division. (line 45) -* mpz_fdiv_r_ui: Integer Division. (line 37) -* mpz_fdiv_ui: Integer Division. (line 41) -* mpz_fib2_ui: Number Theoretic Functions. - (line 132) -* mpz_fib_ui: Number Theoretic Functions. - (line 130) -* mpz_fits_sint_p: Miscellaneous Integer Functions. - (line 10) -* mpz_fits_slong_p: Miscellaneous Integer Functions. - (line 8) -* mpz_fits_sshort_p: Miscellaneous Integer Functions. - (line 12) -* mpz_fits_uint_p: Miscellaneous Integer Functions. - (line 9) -* mpz_fits_ulong_p: Miscellaneous Integer Functions. - (line 7) -* mpz_fits_ushort_p: Miscellaneous Integer Functions. - (line 11) -* mpz_gcd: Number Theoretic Functions. - (line 26) -* mpz_gcd_ui: Number Theoretic Functions. - (line 33) -* mpz_gcdext: Number Theoretic Functions. - (line 43) -* mpz_get_d: Converting Integers. (line 27) -* mpz_get_d_2exp: Converting Integers. (line 36) -* mpz_get_si: Converting Integers. (line 18) -* mpz_get_str: Converting Integers. (line 47) -* mpz_get_ui: Converting Integers. (line 11) -* mpz_getlimbn: Integer Special Functions. - (line 23) -* mpz_hamdist: Integer Logic and Bit Fiddling. - (line 29) -* mpz_import: Integer Import and Export. - (line 11) -* mpz_init: Initializing Integers. - (line 26) -* mpz_init2: Initializing Integers. - (line 33) -* mpz_init_set: Simultaneous Integer Init & Assign. - (line 27) -* mpz_init_set_d: Simultaneous Integer Init & Assign. - (line 30) -* mpz_init_set_si: Simultaneous Integer Init & Assign. - (line 29) -* mpz_init_set_str: Simultaneous Integer Init & Assign. - (line 35) -* mpz_init_set_ui: Simultaneous Integer Init & Assign. - (line 28) -* mpz_inits: Initializing Integers. - (line 29) -* mpz_inp_raw: I/O of Integers. (line 62) -* mpz_inp_str: I/O of Integers. (line 31) -* mpz_invert: Number Theoretic Functions. - (line 70) -* mpz_ior: Integer Logic and Bit Fiddling. - (line 14) -* mpz_jacobi: Number Theoretic Functions. - (line 79) -* mpz_kronecker: Number Theoretic Functions. - (line 87) -* mpz_kronecker_si: Number Theoretic Functions. - (line 88) -* mpz_kronecker_ui: Number Theoretic Functions. - (line 89) -* mpz_lcm: Number Theoretic Functions. - (line 62) -* mpz_lcm_ui: Number Theoretic Functions. - (line 64) -* mpz_legendre: Number Theoretic Functions. - (line 82) -* mpz_limbs_finish: Integer Special Functions. - (line 48) -* mpz_limbs_modify: Integer Special Functions. - (line 41) -* mpz_limbs_read: Integer Special Functions. - (line 35) -* mpz_limbs_write: Integer Special Functions. - (line 40) -* mpz_lucnum2_ui: Number Theoretic Functions. - (line 143) -* mpz_lucnum_ui: Number Theoretic Functions. - (line 141) -* mpz_mfac_uiui: Number Theoretic Functions. - (line 112) -* mpz_mod: Integer Division. (line 100) -* mpz_mod_ui: Integer Division. (line 102) -* mpz_mul: Integer Arithmetic. (line 19) -* mpz_mul_2exp: Integer Arithmetic. (line 38) -* mpz_mul_si: Integer Arithmetic. (line 20) -* mpz_mul_ui: Integer Arithmetic. (line 22) -* mpz_neg: Integer Arithmetic. (line 42) -* mpz_nextprime: Number Theoretic Functions. - (line 19) -* mpz_odd_p: Miscellaneous Integer Functions. - (line 17) -* mpz_out_raw: I/O of Integers. (line 46) -* mpz_out_str: I/O of Integers. (line 19) -* mpz_perfect_power_p: Integer Roots. (line 28) -* mpz_perfect_square_p: Integer Roots. (line 37) -* mpz_popcount: Integer Logic and Bit Fiddling. - (line 23) -* mpz_pow_ui: Integer Exponentiation. - (line 31) -* mpz_powm: Integer Exponentiation. - (line 8) -* mpz_powm_sec: Integer Exponentiation. - (line 18) -* mpz_powm_ui: Integer Exponentiation. - (line 10) -* mpz_primorial_ui: Number Theoretic Functions. - (line 117) -* mpz_probab_prime_p: Number Theoretic Functions. - (line 7) -* mpz_random: Integer Random Numbers. - (line 42) -* mpz_random2: Integer Random Numbers. - (line 51) -* mpz_realloc2: Initializing Integers. - (line 57) -* mpz_remove: Number Theoretic Functions. - (line 104) -* mpz_roinit_n: Integer Special Functions. - (line 69) -* MPZ_ROINIT_N: Integer Special Functions. - (line 84) -* mpz_root: Integer Roots. (line 8) -* mpz_rootrem: Integer Roots. (line 14) -* mpz_rrandomb: Integer Random Numbers. - (line 31) -* mpz_scan0: Integer Logic and Bit Fiddling. - (line 38) -* mpz_scan1: Integer Logic and Bit Fiddling. - (line 40) -* mpz_set: Assigning Integers. (line 10) -* mpz_set_d: Assigning Integers. (line 13) -* mpz_set_f: Assigning Integers. (line 15) -* mpz_set_q: Assigning Integers. (line 14) -* mpz_set_si: Assigning Integers. (line 12) -* mpz_set_str: Assigning Integers. (line 21) -* mpz_set_ui: Assigning Integers. (line 11) -* mpz_setbit: Integer Logic and Bit Fiddling. - (line 53) -* mpz_sgn: Integer Comparisons. (line 28) -* mpz_si_kronecker: Number Theoretic Functions. - (line 90) -* mpz_size: Integer Special Functions. - (line 31) -* mpz_sizeinbase: Miscellaneous Integer Functions. - (line 23) -* mpz_sqrt: Integer Roots. (line 18) -* mpz_sqrtrem: Integer Roots. (line 21) -* mpz_sub: Integer Arithmetic. (line 12) -* mpz_sub_ui: Integer Arithmetic. (line 14) -* mpz_submul: Integer Arithmetic. (line 32) -* mpz_submul_ui: Integer Arithmetic. (line 34) -* mpz_swap: Assigning Integers. (line 37) -* mpz_t: Nomenclature and Types. - (line 6) -* mpz_tdiv_q: Integer Division. (line 47) -* mpz_tdiv_q_2exp: Integer Division. (line 60) -* mpz_tdiv_q_ui: Integer Division. (line 52) -* mpz_tdiv_qr: Integer Division. (line 50) -* mpz_tdiv_qr_ui: Integer Division. (line 56) -* mpz_tdiv_r: Integer Division. (line 48) -* mpz_tdiv_r_2exp: Integer Division. (line 62) -* mpz_tdiv_r_ui: Integer Division. (line 54) -* mpz_tdiv_ui: Integer Division. (line 58) -* mpz_tstbit: Integer Logic and Bit Fiddling. - (line 62) -* mpz_ui_kronecker: Number Theoretic Functions. - (line 91) -* mpz_ui_pow_ui: Integer Exponentiation. - (line 33) -* mpz_ui_sub: Integer Arithmetic. (line 16) -* mpz_urandomb: Integer Random Numbers. - (line 14) -* mpz_urandomm: Integer Random Numbers. - (line 23) -* mpz_xor: Integer Logic and Bit Fiddling. - (line 17) -* operator"" <1>: C++ Interface Floats. - (line 56) -* operator"" <2>: C++ Interface Rationals. - (line 38) -* operator"": C++ Interface Integers. - (line 30) -* operator%: C++ Interface Integers. - (line 35) -* operator/: C++ Interface Integers. - (line 34) -* operator<<: C++ Formatted Output. - (line 33) -* operator>> <1>: C++ Formatted Input. (line 14) -* operator>> <2>: C++ Interface Rationals. - (line 85) -* operator>>: C++ Formatted Input. (line 25) -* sgn <1>: C++ Interface Integers. - (line 62) -* sgn <2>: C++ Interface Rationals. - (line 56) -* sgn: C++ Interface Floats. - (line 102) -* sqrt <1>: C++ Interface Integers. - (line 63) -* sqrt: C++ Interface Floats. - (line 103) -* swap <1>: C++ Interface Floats. - (line 105) -* swap <2>: C++ Interface Rationals. - (line 58) -* swap: C++ Interface Integers. - (line 67) -* trunc: C++ Interface Floats. - (line 106) - - diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/gmp.texi b/src/plugins/e-acsl/contrib/libgmp/doc/gmp.texi deleted file mode 100644 index c389e87ce3069f6fef98bdce2b0fef0196eb9905..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/gmp.texi +++ /dev/null @@ -1,10905 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c %**start of header -@setfilename gmp.info -@documentencoding ISO-8859-1 -@include version.texi -@settitle GNU MP @value{VERSION} -@synindex tp fn -@iftex -@afourpaper -@end iftex -@comment %**end of header - -@copying -This manual describes how to install and use the GNU multiple precision -arithmetic library, version @value{VERSION}. - -Copyright 1991, 1993-2015 Free Software Foundation, Inc. - -Permission is granted to copy, distribute and/or modify this document under -the terms of the GNU Free Documentation License, Version 1.3 or any later -version published by the Free Software Foundation; with no Invariant Sections, -with the Front-Cover Texts being ``A GNU Manual'', and with the Back-Cover -Texts being ``You have freedom to copy and modify this GNU Manual, like GNU -software''. A copy of the license is included in -@ref{GNU Free Documentation License}. -@end copying -@c Note the @ref above must be on one line, a line break in an @ref within -@c @copying will bomb in recent texinfo.tex (eg. 2004-04-07.08 which comes -@c with texinfo 4.7), with messages about missing @endcsname. - - -@c Texinfo version 4.2 or up will be needed to process this file. -@c -@c The version number and edition number are taken from version.texi provided -@c by automake (note that it's regenerated only if you configure with -@c --enable-maintainer-mode). -@c -@c Notes discussing the present version number of GMP in relation to previous -@c ones (for instance in the "Compatibility" section) must be updated at -@c manually though. -@c -@c @cindex entries have been made for function categories and programming -@c topics. The "mpn" section is not included in this, because a beginner -@c looking for "GCD" or something is only going to be confused by pointers to -@c low level routines. -@c -@c @cindex entries are present for processors and systems when there's -@c particular notes concerning them, but not just for everything GMP -@c supports. -@c -@c Index entries for files use @code rather than @file, @samp or @option, -@c since the latter come out with quotes in TeX, which are nice in the text -@c but don't look so good in index columns. -@c -@c Tex: -@c -@c A suitable texinfo.tex is supplied, a newer one should work equally well. -@c -@c HTML: -@c -@c Nothing special is done for links to external manuals, they just come out -@c in the usual makeinfo style, eg. "../libc/Locales.html". If you have -@c local copies of such manuals then this is a good thing, if not then you -@c may want to search-and-replace to some online source. -@c - -@dircategory GNU libraries -@direntry -* gmp: (gmp). GNU Multiple Precision Arithmetic Library. -@end direntry - -@c html <meta name="description" content="..."> -@documentdescription -How to install and use the GNU multiple precision arithmetic library, version @value{VERSION}. -@end documentdescription - -@c smallbook -@finalout -@setchapternewpage on - -@ifnottex -@node Top, Copying, (dir), (dir) -@top GNU MP -@end ifnottex - -@iftex -@titlepage -@title GNU MP -@subtitle The GNU Multiple Precision Arithmetic Library -@subtitle Edition @value{EDITION} -@subtitle @value{UPDATED} - -@author by Torbj@"orn Granlund and the GMP development team -@c @email{tg@@gmplib.org} - -@c Include the Distribution inside the titlepage so -@c that headings are turned off. - -@tex -\global\parindent=0pt -\global\parskip=8pt -\global\baselineskip=13pt -@end tex - -@page -@vskip 0pt plus 1filll -@end iftex - -@insertcopying -@ifnottex -@sp 1 -@end ifnottex - -@iftex -@end titlepage -@headings double -@end iftex - -@c Don't bother with contents for html, the menus seem adequate. -@ifnothtml -@contents -@end ifnothtml - -@menu -* Copying:: GMP Copying Conditions (LGPL). -* Introduction to GMP:: Brief introduction to GNU MP. -* Installing GMP:: How to configure and compile the GMP library. -* GMP Basics:: What every GMP user should know. -* Reporting Bugs:: How to usefully report bugs. -* Integer Functions:: Functions for arithmetic on signed integers. -* Rational Number Functions:: Functions for arithmetic on rational numbers. -* Floating-point Functions:: Functions for arithmetic on floats. -* Low-level Functions:: Fast functions for natural numbers. -* Random Number Functions:: Functions for generating random numbers. -* Formatted Output:: @code{printf} style output. -* Formatted Input:: @code{scanf} style input. -* C++ Class Interface:: Class wrappers around GMP types. -* Custom Allocation:: How to customize the internal allocation. -* Language Bindings:: Using GMP from other languages. -* Algorithms:: What happens behind the scenes. -* Internals:: How values are represented behind the scenes. - -* Contributors:: Who brings you this library? -* References:: Some useful papers and books to read. -* GNU Free Documentation License:: -* Concept Index:: -* Function Index:: -@end menu - - -@c @m{T,N} is $T$ in tex or @math{N} otherwise. This is an easy way to give -@c different forms for math in tex and info. Commas in N or T don't work, -@c but @C{} can be used instead. \, works in info but not in tex. -@iftex -@macro m {T,N} -@tex$\T\$@end tex -@end macro -@end iftex -@ifnottex -@macro m {T,N} -@math{\N\} -@end macro -@end ifnottex - -@macro C {} -, -@end macro - -@c @ms{V,N} is $V_N$ in tex or just vn otherwise. This suits simple -@c subscripts like @ms{x,0}. -@iftex -@macro ms {V,N} -@tex$\V\_{\N\}$@end tex -@end macro -@end iftex -@ifnottex -@macro ms {V,N} -\V\\N\ -@end macro -@end ifnottex - -@c @nicode{S} is plain S in info, or @code{S} elsewhere. This can be used -@c when the quotes that @code{} gives in info aren't wanted, but the -@c fontification in tex or html is wanted. Doesn't work as @nicode{'\\0'} -@c though (gives two backslashes in tex). -@ifinfo -@macro nicode {S} -\S\ -@end macro -@end ifinfo -@ifnotinfo -@macro nicode {S} -@code{\S\} -@end macro -@end ifnotinfo - -@c @nisamp{S} is plain S in info, or @samp{S} elsewhere. This can be used -@c when the quotes that @samp{} gives in info aren't wanted, but the -@c fontification in tex or html is wanted. -@ifinfo -@macro nisamp {S} -\S\ -@end macro -@end ifinfo -@ifnotinfo -@macro nisamp {S} -@samp{\S\} -@end macro -@end ifnotinfo - -@c Usage: @GMPtimes{} -@c Give either \times or the word "times". -@tex -\gdef\GMPtimes{\times} -@end tex -@ifnottex -@macro GMPtimes -times -@end macro -@end ifnottex - -@c Usage: @GMPmultiply{} -@c Give * in info, or nothing in tex. -@tex -\gdef\GMPmultiply{} -@end tex -@ifnottex -@macro GMPmultiply -* -@end macro -@end ifnottex - -@c Usage: @GMPabs{x} -@c Give either |x| in tex, or abs(x) in info or html. -@tex -\gdef\GMPabs#1{|#1|} -@end tex -@ifnottex -@macro GMPabs {X} -@abs{}(\X\) -@end macro -@end ifnottex - -@c Usage: @GMPfloor{x} -@c Give either \lfloor x\rfloor in tex, or floor(x) in info or html. -@tex -\gdef\GMPfloor#1{\lfloor #1\rfloor} -@end tex -@ifnottex -@macro GMPfloor {X} -floor(\X\) -@end macro -@end ifnottex - -@c Usage: @GMPceil{x} -@c Give either \lceil x\rceil in tex, or ceil(x) in info or html. -@tex -\gdef\GMPceil#1{\lceil #1 \rceil} -@end tex -@ifnottex -@macro GMPceil {X} -ceil(\X\) -@end macro -@end ifnottex - -@c Math operators already available in tex, made available in info too. -@c For example @bmod{} can be used in both tex and info. -@ifnottex -@macro bmod -mod -@end macro -@macro gcd -gcd -@end macro -@macro ge ->= -@end macro -@macro le -<= -@end macro -@macro log -log -@end macro -@macro min -min -@end macro -@macro leftarrow -<- -@end macro -@macro rightarrow --> -@end macro -@end ifnottex - -@c New math operators. -@c @abs{} can be used in both tex and info, or just \abs in tex. -@tex -\gdef\abs{\mathop{\rm abs}} -@end tex -@ifnottex -@macro abs -abs -@end macro -@end ifnottex - -@c @cross{} is a \times symbol in tex, or an "x" in info. In tex it works -@c inside or outside $ $. -@tex -\gdef\cross{\ifmmode\times\else$\times$\fi} -@end tex -@ifnottex -@macro cross -x -@end macro -@end ifnottex - -@c @times{} made available as a "*" in info and html (already works in tex). -@ifnottex -@macro times -* -@end macro -@end ifnottex - -@c Usage: @W{text} -@c Like @w{} but working in math mode too. -@tex -\gdef\W#1{\ifmmode{#1}\else\w{#1}\fi} -@end tex -@ifnottex -@macro W {S} -@w{\S\} -@end macro -@end ifnottex - -@c Usage: \GMPdisplay{text} -@c Put the given text in an @display style indent, but without turning off -@c paragraph reflow etc. -@tex -\gdef\GMPdisplay#1{% -\noindent -\advance\leftskip by \lispnarrowing -#1\par} -@end tex - -@c Usage: \GMPhat -@c A new \hat that will work in math mode, unlike the texinfo redefined -@c version. -@tex -\gdef\GMPhat{\mathaccent"705E} -@end tex - -@c Usage: \GMPraise{text} -@c For use in a $ $ math expression as an alternative to "^". This is good -@c for @code{} in an exponent, since there seems to be no superscript font -@c for that. -@tex -\gdef\GMPraise#1{\mskip0.5\thinmuskip\hbox{\raise0.8ex\hbox{#1}}} -@end tex - -@c Usage: @texlinebreak{} -@c A line break as per @*, but only in tex. -@iftex -@macro texlinebreak -@* -@end macro -@end iftex -@ifnottex -@macro texlinebreak -@end macro -@end ifnottex - -@c Usage: @maybepagebreak -@c Allow tex to insert a page break, if it feels the urge. -@c Normally blocks of @deftypefun/funx are kept together, which can lead to -@c some poor page break positioning if it's a big block, like the sets of -@c division functions etc. -@tex -\gdef\maybepagebreak{\penalty0} -@end tex -@ifnottex -@macro maybepagebreak -@end macro -@end ifnottex - -@c Usage: @GMPreftop{info,title} -@c Usage: @GMPpxreftop{info,title} -@c -@c Like @ref{} and @pxref{}, but designed for a reference to the top of a -@c document, not a particular section. The TeX output for plain @ref insists -@c on printing a particular section, GMPreftop gives just the title. -@c -@c The texinfo manual recommends putting a likely section name in references -@c like this, eg. "Introduction", but it seems better to just give the title. -@c -@iftex -@macro GMPreftop{info,title} -@i{\title\} -@end macro -@macro GMPpxreftop{info,title} -see @i{\title\} -@end macro -@end iftex -@c -@ifnottex -@macro GMPreftop{info,title} -@ref{Top,\title\,\title\,\info\,\title\} -@end macro -@macro GMPpxreftop{info,title} -@pxref{Top,\title\,\title\,\info\,\title\} -@end macro -@end ifnottex - - -@node Copying, Introduction to GMP, Top, Top -@comment node-name, next, previous, up -@unnumbered GNU MP Copying Conditions -@cindex Copying conditions -@cindex Conditions for copying GNU MP -@cindex License conditions - -This library is @dfn{free}; this means that everyone is free to use it and -free to redistribute it on a free basis. The library is not in the public -domain; it is copyrighted and there are restrictions on its distribution, but -these restrictions are designed to permit everything that a good cooperating -citizen would want to do. What is not allowed is to try to prevent others -from further sharing any version of this library that they might get from -you.@refill - -Specifically, we want to make sure that you have the right to give away copies -of the library, that you receive source code or else can get it if you want -it, that you can change this library or use pieces of it in new free programs, -and that you know you can do these things.@refill - -To make sure that everyone has such rights, we have to forbid you to deprive -anyone else of these rights. For example, if you distribute copies of the GNU -MP library, you must give the recipients all the rights that you have. You -must make sure that they, too, receive or can get the source code. And you -must tell them their rights.@refill - -Also, for our own protection, we must make certain that everyone finds out -that there is no warranty for the GNU MP library. If it is modified by -someone else and passed on, we want their recipients to know that what they -have is not what we distributed, so that any problems introduced by others -will not reflect on our reputation.@refill - -More precisely, the GNU MP library is dual licensed, under the conditions of -the GNU Lesser General Public License version 3 (see -@file{COPYING.LESSERv3}), or the GNU General Public License version 2 (see -@file{COPYINGv2}). This is the recipient's choice, and the recipient also has -the additional option of applying later versions of these licenses. (The -reason for this dual licensing is to make it possible to use the library with -programs which are licensed under GPL version 2, but which for historical or -other reasons do not allow use under later versions of the GPL). - -Programs which are not part of the library itself, such as demonstration -programs and the GMP testsuite, are licensed under the terms of the GNU -General Public License version 3 (see @file{COPYINGv3}), or any later -version. - - -@node Introduction to GMP, Installing GMP, Copying, Top -@comment node-name, next, previous, up -@chapter Introduction to GNU MP -@cindex Introduction - -GNU MP is a portable library written in C for arbitrary precision arithmetic -on integers, rational numbers, and floating-point numbers. It aims to provide -the fastest possible arithmetic for all applications that need higher -precision than is directly supported by the basic C types. - -Many applications use just a few hundred bits of precision; but some -applications may need thousands or even millions of bits. GMP is designed to -give good performance for both, by choosing algorithms based on the sizes of -the operands, and by carefully keeping the overhead at a minimum. - -The speed of GMP is achieved by using fullwords as the basic arithmetic type, -by using sophisticated algorithms, by including carefully optimized assembly -code for the most common inner loops for many different CPUs, and by a general -emphasis on speed (as opposed to simplicity or elegance). - -There is assembly code for these CPUs: -@cindex CPU types -ARM Cortex-A9, Cortex-A15, and generic ARM, -DEC Alpha 21064, 21164, and 21264, -AMD K8 and K10 (sold under many brands, e.g. Athlon64, Phenom, Opteron) -Bulldozer, and Bobcat, -Intel Pentium, Pentium Pro/II/III, Pentium 4, Core2, Nehalem, Sandy bridge, Haswell, generic x86, -Intel IA-64, -Motorola/IBM PowerPC 32 and 64 such as POWER970, POWER5, POWER6, and POWER7, -MIPS 32-bit and 64-bit, -SPARC 32-bit ad 64-bit with special support for all UltraSPARC models. -There is also assembly code for many obsolete CPUs. - - -@cindex Home page -@cindex Web page -@noindent -For up-to-date information on GMP, please see the GMP web pages at - -@display -@uref{https://gmplib.org/} -@end display - -@cindex Latest version of GMP -@cindex Anonymous FTP of latest version -@cindex FTP of latest version -@noindent -The latest version of the library is available at - -@display -@uref{https://ftp.gnu.org/gnu/gmp/} -@end display - -Many sites around the world mirror @samp{ftp.gnu.org}, please use a mirror -near you, see @uref{https://www.gnu.org/order/ftp.html} for a full list. - -@cindex Mailing lists -There are three public mailing lists of interest. One for release -announcements, one for general questions and discussions about usage of the GMP -library and one for bug reports. For more information, see - -@display -@uref{https://gmplib.org/mailman/listinfo/}. -@end display - -The proper place for bug reports is @email{gmp-bugs@@gmplib.org}. See -@ref{Reporting Bugs} for information about reporting bugs. - -@sp 1 -@section How to use this Manual -@cindex About this manual - -Everyone should read @ref{GMP Basics}. If you need to install the library -yourself, then read @ref{Installing GMP}. If you have a system with multiple -ABIs, then read @ref{ABI and ISA}, for the compiler options that must be used -on applications. - -The rest of the manual can be used for later reference, although it is -probably a good idea to glance through it. - - -@node Installing GMP, GMP Basics, Introduction to GMP, Top -@comment node-name, next, previous, up -@chapter Installing GMP -@cindex Installing GMP -@cindex Configuring GMP -@cindex Building GMP - -GMP has an autoconf/automake/libtool based configuration system. On a -Unix-like system a basic build can be done with - -@example -./configure -make -@end example - -@noindent -Some self-tests can be run with - -@example -make check -@end example - -@noindent -And you can install (under @file{/usr/local} by default) with - -@example -make install -@end example - -If you experience problems, please report them to @email{gmp-bugs@@gmplib.org}. -See @ref{Reporting Bugs}, for information on what to include in useful bug -reports. - -@menu -* Build Options:: -* ABI and ISA:: -* Notes for Package Builds:: -* Notes for Particular Systems:: -* Known Build Problems:: -* Performance optimization:: -@end menu - - -@node Build Options, ABI and ISA, Installing GMP, Installing GMP -@section Build Options -@cindex Build options - -All the usual autoconf configure options are available, run @samp{./configure ---help} for a summary. The file @file{INSTALL.autoconf} has some generic -installation information too. - -@table @asis -@item Tools -@cindex Non-Unix systems -@samp{configure} requires various Unix-like tools. See @ref{Notes for -Particular Systems}, for some options on non-Unix systems. - -It might be possible to build without the help of @samp{configure}, certainly -all the code is there, but unfortunately you'll be on your own. - -@item Build Directory -@cindex Build directory -To compile in a separate build directory, @command{cd} to that directory, and -prefix the configure command with the path to the GMP source directory. For -example - -@example -cd /my/build/dir -/my/sources/gmp-@value{VERSION}/configure -@end example - -Not all @samp{make} programs have the necessary features (@code{VPATH}) to -support this. In particular, SunOS and Slowaris @command{make} have bugs that -make them unable to build in a separate directory. Use GNU @command{make} -instead. - -@item @option{--prefix} and @option{--exec-prefix} -@cindex Prefix -@cindex Exec prefix -@cindex Install prefix -@cindex @code{--prefix} -@cindex @code{--exec-prefix} -The @option{--prefix} option can be used in the normal way to direct GMP to -install under a particular tree. The default is @samp{/usr/local}. - -@option{--exec-prefix} can be used to direct architecture-dependent files like -@file{libgmp.a} to a different location. This can be used to share -architecture-independent parts like the documentation, but separate the -dependent parts. Note however that @file{gmp.h} and @file{mp.h} are -architecture-dependent since they encode certain aspects of @file{libgmp}, so -it will be necessary to ensure both @file{$prefix/include} and -@file{$exec_prefix/include} are available to the compiler. - -@item @option{--disable-shared}, @option{--disable-static} -@cindex @code{--disable-shared} -@cindex @code{--disable-static} -By default both shared and static libraries are built (where possible), but -one or other can be disabled. Shared libraries result in smaller executables -and permit code sharing between separate running processes, but on some CPUs -are slightly slower, having a small cost on each function call. - -@item Native Compilation, @option{--build=CPU-VENDOR-OS} -@cindex Native compilation -@cindex Build system -@cindex @code{--build} -For normal native compilation, the system can be specified with -@samp{--build}. By default @samp{./configure} uses the output from running -@samp{./config.guess}. On some systems @samp{./config.guess} can determine -the exact CPU type, on others it will be necessary to give it explicitly. For -example, - -@example -./configure --build=ultrasparc-sun-solaris2.7 -@end example - -In all cases the @samp{OS} part is important, since it controls how libtool -generates shared libraries. Running @samp{./config.guess} is the simplest way -to see what it should be, if you don't know already. - -@item Cross Compilation, @option{--host=CPU-VENDOR-OS} -@cindex Cross compiling -@cindex Host system -@cindex @code{--host} -When cross-compiling, the system used for compiling is given by @samp{--build} -and the system where the library will run is given by @samp{--host}. For -example when using a FreeBSD Athlon system to build GNU/Linux m68k binaries, - -@example -./configure --build=athlon-pc-freebsd3.5 --host=m68k-mac-linux-gnu -@end example - -Compiler tools are sought first with the host system type as a prefix. For -example @command{m68k-mac-linux-gnu-ranlib} is tried, then plain -@command{ranlib}. This makes it possible for a set of cross-compiling tools -to co-exist with native tools. The prefix is the argument to @samp{--host}, -and this can be an alias, such as @samp{m68k-linux}. But note that tools -don't have to be setup this way, it's enough to just have a @env{PATH} with a -suitable cross-compiling @command{cc} etc. - -Compiling for a different CPU in the same family as the build system is a form -of cross-compilation, though very possibly this would merely be special -options on a native compiler. In any case @samp{./configure} avoids depending -on being able to run code on the build system, which is important when -creating binaries for a newer CPU since they very possibly won't run on the -build system. - -In all cases the compiler must be able to produce an executable (of whatever -format) from a standard C @code{main}. Although only object files will go to -make up @file{libgmp}, @samp{./configure} uses linking tests for various -purposes, such as determining what functions are available on the host system. - -Currently a warning is given unless an explicit @samp{--build} is used when -cross-compiling, because it may not be possible to correctly guess the build -system type if the @env{PATH} has only a cross-compiling @command{cc}. - -Note that the @samp{--target} option is not appropriate for GMP@. It's for use -when building compiler tools, with @samp{--host} being where they will run, -and @samp{--target} what they'll produce code for. Ordinary programs or -libraries like GMP are only interested in the @samp{--host} part, being where -they'll run. (Some past versions of GMP used @samp{--target} incorrectly.) - -@item CPU types -@cindex CPU types -In general, if you want a library that runs as fast as possible, you should -configure GMP for the exact CPU type your system uses. However, this may mean -the binaries won't run on older members of the family, and might run slower on -other members, older or newer. The best idea is always to build GMP for the -exact machine type you intend to run it on. - -The following CPUs have specific support. See @file{configure.ac} for details -of what code and compiler options they select. - -@itemize @bullet - -@c Keep this formatting, it's easy to read and it can be grepped to -@c automatically test that CPUs listed get through ./config.sub - -@item -Alpha: -@nisamp{alpha}, -@nisamp{alphaev5}, -@nisamp{alphaev56}, -@nisamp{alphapca56}, -@nisamp{alphapca57}, -@nisamp{alphaev6}, -@nisamp{alphaev67}, -@nisamp{alphaev68} -@nisamp{alphaev7} - -@item -Cray: -@nisamp{c90}, -@nisamp{j90}, -@nisamp{t90}, -@nisamp{sv1} - -@item -HPPA: -@nisamp{hppa1.0}, -@nisamp{hppa1.1}, -@nisamp{hppa2.0}, -@nisamp{hppa2.0n}, -@nisamp{hppa2.0w}, -@nisamp{hppa64} - -@item -IA-64: -@nisamp{ia64}, -@nisamp{itanium}, -@nisamp{itanium2} - -@item -MIPS: -@nisamp{mips}, -@nisamp{mips3}, -@nisamp{mips64} - -@item -Motorola: -@nisamp{m68k}, -@nisamp{m68000}, -@nisamp{m68010}, -@nisamp{m68020}, -@nisamp{m68030}, -@nisamp{m68040}, -@nisamp{m68060}, -@nisamp{m68302}, -@nisamp{m68360}, -@nisamp{m88k}, -@nisamp{m88110} - -@item -POWER: -@nisamp{power}, -@nisamp{power1}, -@nisamp{power2}, -@nisamp{power2sc} - -@item -PowerPC: -@nisamp{powerpc}, -@nisamp{powerpc64}, -@nisamp{powerpc401}, -@nisamp{powerpc403}, -@nisamp{powerpc405}, -@nisamp{powerpc505}, -@nisamp{powerpc601}, -@nisamp{powerpc602}, -@nisamp{powerpc603}, -@nisamp{powerpc603e}, -@nisamp{powerpc604}, -@nisamp{powerpc604e}, -@nisamp{powerpc620}, -@nisamp{powerpc630}, -@nisamp{powerpc740}, -@nisamp{powerpc7400}, -@nisamp{powerpc7450}, -@nisamp{powerpc750}, -@nisamp{powerpc801}, -@nisamp{powerpc821}, -@nisamp{powerpc823}, -@nisamp{powerpc860}, -@nisamp{powerpc970} - -@item -SPARC: -@nisamp{sparc}, -@nisamp{sparcv8}, -@nisamp{microsparc}, -@nisamp{supersparc}, -@nisamp{sparcv9}, -@nisamp{ultrasparc}, -@nisamp{ultrasparc2}, -@nisamp{ultrasparc2i}, -@nisamp{ultrasparc3}, -@nisamp{sparc64} - -@item -x86 family: -@nisamp{i386}, -@nisamp{i486}, -@nisamp{i586}, -@nisamp{pentium}, -@nisamp{pentiummmx}, -@nisamp{pentiumpro}, -@nisamp{pentium2}, -@nisamp{pentium3}, -@nisamp{pentium4}, -@nisamp{k6}, -@nisamp{k62}, -@nisamp{k63}, -@nisamp{athlon}, -@nisamp{amd64}, -@nisamp{viac3}, -@nisamp{viac32} - -@item -Other: -@nisamp{arm}, -@nisamp{sh}, -@nisamp{sh2}, -@nisamp{vax}, -@end itemize - -CPUs not listed will use generic C code. - -@item Generic C Build -@cindex Generic C -If some of the assembly code causes problems, or if otherwise desired, the -generic C code can be selected with the configure @option{--disable-assembly}. - -Note that this will run quite slowly, but it should be portable and should at -least make it possible to get something running if all else fails. - -@item Fat binary, @option{--enable-fat} -@cindex Fat binary -@cindex @code{--enable-fat} -Using @option{--enable-fat} selects a ``fat binary'' build on x86, where -optimized low level subroutines are chosen at runtime according to the CPU -detected. This means more code, but gives good performance on all x86 chips. -(This option might become available for more architectures in the future.) - -@item @option{ABI} -@cindex ABI -On some systems GMP supports multiple ABIs (application binary interfaces), -meaning data type sizes and calling conventions. By default GMP chooses the -best ABI available, but a particular ABI can be selected. For example - -@example -./configure --host=mips64-sgi-irix6 ABI=n32 -@end example - -See @ref{ABI and ISA}, for the available choices on relevant CPUs, and what -applications need to do. - -@item @option{CC}, @option{CFLAGS} -@cindex C compiler -@cindex @code{CC} -@cindex @code{CFLAGS} -By default the C compiler used is chosen from among some likely candidates, -with @command{gcc} normally preferred if it's present. The usual -@samp{CC=whatever} can be passed to @samp{./configure} to choose something -different. - -For various systems, default compiler flags are set based on the CPU and -compiler. The usual @samp{CFLAGS="-whatever"} can be passed to -@samp{./configure} to use something different or to set good flags for systems -GMP doesn't otherwise know. - -The @samp{CC} and @samp{CFLAGS} used are printed during @samp{./configure}, -and can be found in each generated @file{Makefile}. This is the easiest way -to check the defaults when considering changing or adding something. - -Note that when @samp{CC} and @samp{CFLAGS} are specified on a system -supporting multiple ABIs it's important to give an explicit -@samp{ABI=whatever}, since GMP can't determine the ABI just from the flags and -won't be able to select the correct assembly code. - -If just @samp{CC} is selected then normal default @samp{CFLAGS} for that -compiler will be used (if GMP recognises it). For example @samp{CC=gcc} can -be used to force the use of GCC, with default flags (and default ABI). - -@item @option{CPPFLAGS} -@cindex @code{CPPFLAGS} -Any flags like @samp{-D} defines or @samp{-I} includes required by the -preprocessor should be set in @samp{CPPFLAGS} rather than @samp{CFLAGS}. -Compiling is done with both @samp{CPPFLAGS} and @samp{CFLAGS}, but -preprocessing uses just @samp{CPPFLAGS}. This distinction is because most -preprocessors won't accept all the flags the compiler does. Preprocessing is -done separately in some configure tests. - -@item @option{CC_FOR_BUILD} -@cindex @code{CC_FOR_BUILD} -Some build-time programs are compiled and run to generate host-specific data -tables. @samp{CC_FOR_BUILD} is the compiler used for this. It doesn't need -to be in any particular ABI or mode, it merely needs to generate executables -that can run. The default is to try the selected @samp{CC} and some likely -candidates such as @samp{cc} and @samp{gcc}, looking for something that works. - -No flags are used with @samp{CC_FOR_BUILD} because a simple invocation like -@samp{cc foo.c} should be enough. If some particular options are required -they can be included as for instance @samp{CC_FOR_BUILD="cc -whatever"}. - -@item C++ Support, @option{--enable-cxx} -@cindex C++ support -@cindex @code{--enable-cxx} -C++ support in GMP can be enabled with @samp{--enable-cxx}, in which case a -C++ compiler will be required. As a convenience @samp{--enable-cxx=detect} -can be used to enable C++ support only if a compiler can be found. The C++ -support consists of a library @file{libgmpxx.la} and header file -@file{gmpxx.h} (@pxref{Headers and Libraries}). - -A separate @file{libgmpxx.la} has been adopted rather than having C++ objects -within @file{libgmp.la} in order to ensure dynamic linked C programs aren't -bloated by a dependency on the C++ standard library, and to avoid any chance -that the C++ compiler could be required when linking plain C programs. - -@file{libgmpxx.la} will use certain internals from @file{libgmp.la} and can -only be expected to work with @file{libgmp.la} from the same GMP version. -Future changes to the relevant internals will be accompanied by renaming, so a -mismatch will cause unresolved symbols rather than perhaps mysterious -misbehaviour. - -In general @file{libgmpxx.la} will be usable only with the C++ compiler that -built it, since name mangling and runtime support are usually incompatible -between different compilers. - -@item @option{CXX}, @option{CXXFLAGS} -@cindex C++ compiler -@cindex @code{CXX} -@cindex @code{CXXFLAGS} -When C++ support is enabled, the C++ compiler and its flags can be set with -variables @samp{CXX} and @samp{CXXFLAGS} in the usual way. The default for -@samp{CXX} is the first compiler that works from a list of likely candidates, -with @command{g++} normally preferred when available. The default for -@samp{CXXFLAGS} is to try @samp{CFLAGS}, @samp{CFLAGS} without @samp{-g}, then -for @command{g++} either @samp{-g -O2} or @samp{-O2}, or for other compilers -@samp{-g} or nothing. Trying @samp{CFLAGS} this way is convenient when using -@samp{gcc} and @samp{g++} together, since the flags for @samp{gcc} will -usually suit @samp{g++}. - -It's important that the C and C++ compilers match, meaning their startup and -runtime support routines are compatible and that they generate code in the -same ABI (if there's a choice of ABIs on the system). @samp{./configure} -isn't currently able to check these things very well itself, so for that -reason @samp{--disable-cxx} is the default, to avoid a build failure due to a -compiler mismatch. Perhaps this will change in the future. - -Incidentally, it's normally not good enough to set @samp{CXX} to the same as -@samp{CC}. Although @command{gcc} for instance recognises @file{foo.cc} as -C++ code, only @command{g++} will invoke the linker the right way when -building an executable or shared library from C++ object files. - -@item Temporary Memory, @option{--enable-alloca=<choice>} -@cindex Temporary memory -@cindex Stack overflow -@cindex @code{alloca} -@cindex @code{--enable-alloca} -GMP allocates temporary workspace using one of the following three methods, -which can be selected with for instance -@samp{--enable-alloca=malloc-reentrant}. - -@itemize @bullet -@item -@samp{alloca} - C library or compiler builtin. -@item -@samp{malloc-reentrant} - the heap, in a re-entrant fashion. -@item -@samp{malloc-notreentrant} - the heap, with global variables. -@end itemize - -For convenience, the following choices are also available. -@samp{--disable-alloca} is the same as @samp{no}. - -@itemize @bullet -@item -@samp{yes} - a synonym for @samp{alloca}. -@item -@samp{no} - a synonym for @samp{malloc-reentrant}. -@item -@samp{reentrant} - @code{alloca} if available, otherwise -@samp{malloc-reentrant}. This is the default. -@item -@samp{notreentrant} - @code{alloca} if available, otherwise -@samp{malloc-notreentrant}. -@end itemize - -@code{alloca} is reentrant and fast, and is recommended. It actually allocates -just small blocks on the stack; larger ones use malloc-reentrant. - -@samp{malloc-reentrant} is, as the name suggests, reentrant and thread safe, -but @samp{malloc-notreentrant} is faster and should be used if reentrancy is -not required. - -The two malloc methods in fact use the memory allocation functions selected by -@code{mp_set_memory_functions}, these being @code{malloc} and friends by -default. @xref{Custom Allocation}. - -An additional choice @samp{--enable-alloca=debug} is available, to help when -debugging memory related problems (@pxref{Debugging}). - -@item FFT Multiplication, @option{--disable-fft} -@cindex FFT multiplication -@cindex @code{--disable-fft} -By default multiplications are done using Karatsuba, 3-way Toom, higher degree -Toom, and Fermat FFT@. The FFT is only used on large to very large operands -and can be disabled to save code size if desired. - -@item Assertion Checking, @option{--enable-assert} -@cindex Assertion checking -@cindex @code{--enable-assert} -This option enables some consistency checking within the library. This can be -of use while debugging, @pxref{Debugging}. - -@item Execution Profiling, @option{--enable-profiling=prof/gprof/instrument} -@cindex Execution profiling -@cindex @code{--enable-profiling} -Enable profiling support, in one of various styles, @pxref{Profiling}. - -@item @option{MPN_PATH} -@cindex @code{MPN_PATH} -Various assembly versions of each mpn subroutines are provided. For a given -CPU, a search is made though a path to choose a version of each. For example -@samp{sparcv8} has - -@example -MPN_PATH="sparc32/v8 sparc32 generic" -@end example - -which means look first for v8 code, then plain sparc32 (which is v7), and -finally fall back on generic C@. Knowledgeable users with special requirements -can specify a different path. Normally this is completely unnecessary. - -@item Documentation -@cindex Documentation formats -@cindex Texinfo -The source for the document you're now reading is @file{doc/gmp.texi}, in -Texinfo format, see @GMPreftop{texinfo, Texinfo}. - -@cindex Postscript -@cindex DVI -@cindex PDF -Info format @samp{doc/gmp.info} is included in the distribution. The usual -automake targets are available to make PostScript, DVI, PDF and HTML (these -will require various @TeX{} and Texinfo tools). - -@cindex DocBook -@cindex XML -DocBook and XML can be generated by the Texinfo @command{makeinfo} program -too, see @ref{makeinfo options,, Options for @command{makeinfo}, texinfo, -Texinfo}. - -Some supplementary notes can also be found in the @file{doc} subdirectory. - -@end table - - -@need 2000 -@node ABI and ISA, Notes for Package Builds, Build Options, Installing GMP -@section ABI and ISA -@cindex ABI -@cindex Application Binary Interface -@cindex ISA -@cindex Instruction Set Architecture - -ABI (Application Binary Interface) refers to the calling conventions between -functions, meaning what registers are used and what sizes the various C data -types are. ISA (Instruction Set Architecture) refers to the instructions and -registers a CPU has available. - -Some 64-bit ISA CPUs have both a 64-bit ABI and a 32-bit ABI defined, the -latter for compatibility with older CPUs in the family. GMP supports some -CPUs like this in both ABIs. In fact within GMP @samp{ABI} means a -combination of chip ABI, plus how GMP chooses to use it. For example in some -32-bit ABIs, GMP may support a limb as either a 32-bit @code{long} or a 64-bit -@code{long long}. - -By default GMP chooses the best ABI available for a given system, and this -generally gives significantly greater speed. But an ABI can be chosen -explicitly to make GMP compatible with other libraries, or particular -application requirements. For example, - -@example -./configure ABI=32 -@end example - -In all cases it's vital that all object code used in a given program is -compiled for the same ABI. - -Usually a limb is implemented as a @code{long}. When a @code{long long} limb -is used this is encoded in the generated @file{gmp.h}. This is convenient for -applications, but it does mean that @file{gmp.h} will vary, and can't be just -copied around. @file{gmp.h} remains compiler independent though, since all -compilers for a particular ABI will be expected to use the same limb type. - -Currently no attempt is made to follow whatever conventions a system has for -installing library or header files built for a particular ABI@. This will -probably only matter when installing multiple builds of GMP, and it might be -as simple as configuring with a special @samp{libdir}, or it might require -more than that. Note that builds for different ABIs need to done separately, -with a fresh @command{./configure} and @command{make} each. - -@sp 1 -@table @asis -@need 1000 -@item AMD64 (@samp{x86_64}) -@cindex AMD64 -On AMD64 systems supporting both 32-bit and 64-bit modes for applications, the -following ABI choices are available. - -@table @asis -@item @samp{ABI=64} -The 64-bit ABI uses 64-bit limbs and pointers and makes full use of the chip -architecture. This is the default. Applications will usually not need -special compiler flags, but for reference the option is - -@example -gcc -m64 -@end example - -@item @samp{ABI=32} -The 32-bit ABI is the usual i386 conventions. This will be slower, and is not -recommended except for inter-operating with other code not yet 64-bit capable. -Applications must be compiled with - -@example -gcc -m32 -@end example - -(In GCC 2.95 and earlier there's no @samp{-m32} option, it's the only mode.) - -@item @samp{ABI=x32} -The x32 ABI uses 64-bit limbs but 32-bit pointers. Like the 64-bit ABI, it -makes full use of the chip's arithmetic capabilities. This ABI is not -supported by all operating systems. - -@example -gcc -mx32 -@end example - -@end table - -@sp 1 -@need 1000 -@item HPPA 2.0 (@samp{hppa2.0*}, @samp{hppa64}) -@cindex HPPA -@cindex HP-UX -@table @asis -@item @samp{ABI=2.0w} -The 2.0w ABI uses 64-bit limbs and pointers and is available on HP-UX 11 or -up. Applications must be compiled with - -@example -gcc [built for 2.0w] -cc +DD64 -@end example - -@item @samp{ABI=2.0n} -The 2.0n ABI means the 32-bit HPPA 1.0 ABI and all its normal calling -conventions, but with 64-bit instructions permitted within functions. GMP -uses a 64-bit @code{long long} for a limb. This ABI is available on hppa64 -GNU/Linux and on HP-UX 10 or higher. Applications must be compiled with - -@example -gcc [built for 2.0n] -cc +DA2.0 +e -@end example - -Note that current versions of GCC (eg.@: 3.2) don't generate 64-bit -instructions for @code{long long} operations and so may be slower than for -2.0w. (The GMP assembly code is the same though.) - -@item @samp{ABI=1.0} -HPPA 2.0 CPUs can run all HPPA 1.0 and 1.1 code in the 32-bit HPPA 1.0 ABI@. -No special compiler options are needed for applications. -@end table - -All three ABIs are available for CPU types @samp{hppa2.0w}, @samp{hppa2.0} and -@samp{hppa64}, but for CPU type @samp{hppa2.0n} only 2.0n or 1.0 are -considered. - -Note that GCC on HP-UX has no options to choose between 2.0n and 2.0w modes, -unlike HP @command{cc}. Instead it must be built for one or the other ABI@. -GMP will detect how it was built, and skip to the corresponding @samp{ABI}. - -@sp 1 -@need 1500 -@item IA-64 under HP-UX (@samp{ia64*-*-hpux*}, @samp{itanium*-*-hpux*}) -@cindex IA-64 -@cindex HP-UX -HP-UX supports two ABIs for IA-64. GMP performance is the same in both. - -@table @asis -@item @samp{ABI=32} -In the 32-bit ABI, pointers, @code{int}s and @code{long}s are 32 bits and GMP -uses a 64 bit @code{long long} for a limb. Applications can be compiled -without any special flags since this ABI is the default in both HP C and GCC, -but for reference the flags are - -@example -gcc -milp32 -cc +DD32 -@end example - -@item @samp{ABI=64} -In the 64-bit ABI, @code{long}s and pointers are 64 bits and GMP uses a -@code{long} for a limb. Applications must be compiled with - -@example -gcc -mlp64 -cc +DD64 -@end example -@end table - -On other IA-64 systems, GNU/Linux for instance, @samp{ABI=64} is the only -choice. - -@sp 1 -@need 1000 -@item MIPS under IRIX 6 (@samp{mips*-*-irix[6789]}) -@cindex MIPS -@cindex IRIX -IRIX 6 always has a 64-bit MIPS 3 or better CPU, and supports ABIs o32, n32, -and 64. n32 or 64 are recommended, and GMP performance will be the same in -each. The default is n32. - -@table @asis -@item @samp{ABI=o32} -The o32 ABI is 32-bit pointers and integers, and no 64-bit operations. GMP -will be slower than in n32 or 64, this option only exists to support old -compilers, eg.@: GCC 2.7.2. Applications can be compiled with no special -flags on an old compiler, or on a newer compiler with - -@example -gcc -mabi=32 -cc -32 -@end example - -@item @samp{ABI=n32} -The n32 ABI is 32-bit pointers and integers, but with a 64-bit limb using a -@code{long long}. Applications must be compiled with - -@example -gcc -mabi=n32 -cc -n32 -@end example - -@item @samp{ABI=64} -The 64-bit ABI is 64-bit pointers and integers. Applications must be compiled -with - -@example -gcc -mabi=64 -cc -64 -@end example -@end table - -Note that MIPS GNU/Linux, as of kernel version 2.2, doesn't have the necessary -support for n32 or 64 and so only gets a 32-bit limb and the MIPS 2 code. - -@sp 1 -@need 1000 -@item PowerPC 64 (@samp{powerpc64}, @samp{powerpc620}, @samp{powerpc630}, @samp{powerpc970}, @samp{power4}, @samp{power5}) -@cindex PowerPC -@table @asis -@item @samp{ABI=mode64} -@cindex AIX -The AIX 64 ABI uses 64-bit limbs and pointers and is the default on PowerPC 64 -@samp{*-*-aix*} systems. Applications must be compiled with - -@example -gcc -maix64 -xlc -q64 -@end example - -On 64-bit GNU/Linux, BSD, and Mac OS X/Darwin systems, the applications must -be compiled with - -@example -gcc -m64 -@end example - -@item @samp{ABI=mode32} -The @samp{mode32} ABI uses a 64-bit @code{long long} limb but with the chip -still in 32-bit mode and using 32-bit calling conventions. This is the default -for systems where the true 64-bit ABI is unavailable. No special compiler -options are typically needed for applications. This ABI is not available under -AIX. - -@item @samp{ABI=32} -This is the basic 32-bit PowerPC ABI, with a 32-bit limb. No special compiler -options are needed for applications. -@end table - -GMP's speed is greatest for the @samp{mode64} ABI, the @samp{mode32} ABI is 2nd -best. In @samp{ABI=32} only the 32-bit ISA is used and this doesn't make full -use of a 64-bit chip. - -@sp 1 -@need 1000 -@item Sparc V9 (@samp{sparc64}, @samp{sparcv9}, @samp{ultrasparc*}) -@cindex Sparc V9 -@cindex Solaris -@cindex Sun -@table @asis -@item @samp{ABI=64} -The 64-bit V9 ABI is available on the various BSD sparc64 ports, recent -versions of Sparc64 GNU/Linux, and Solaris 2.7 and up (when the kernel is in -64-bit mode). GCC 3.2 or higher, or Sun @command{cc} is required. On -GNU/Linux, depending on the default @command{gcc} mode, applications must be -compiled with - -@example -gcc -m64 -@end example - -On Solaris applications must be compiled with - -@example -gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9 -cc -xarch=v9 -@end example - -On the BSD sparc64 systems no special options are required, since 64-bits is -the only ABI available. - -@item @samp{ABI=32} -For the basic 32-bit ABI, GMP still uses as much of the V9 ISA as it can. In -the Sun documentation this combination is known as ``v8plus''. On GNU/Linux, -depending on the default @command{gcc} mode, applications may need to be -compiled with - -@example -gcc -m32 -@end example - -On Solaris, no special compiler options are required for applications, though -using something like the following is recommended. (@command{gcc} 2.8 and -earlier only support @samp{-mv8} though.) - -@example -gcc -mv8plus -cc -xarch=v8plus -@end example -@end table - -GMP speed is greatest in @samp{ABI=64}, so it's the default where available. -The speed is partly because there are extra registers available and partly -because 64-bits is considered the more important case and has therefore had -better code written for it. - -Don't be confused by the names of the @samp{-m} and @samp{-x} compiler -options, they're called @samp{arch} but effectively control both ABI and ISA@. - -On Solaris 2.6 and earlier, only @samp{ABI=32} is available since the kernel -doesn't save all registers. - -On Solaris 2.7 with the kernel in 32-bit mode, a normal native build will -reject @samp{ABI=64} because the resulting executables won't run. -@samp{ABI=64} can still be built if desired by making it look like a -cross-compile, for example - -@example -./configure --build=none --host=sparcv9-sun-solaris2.7 ABI=64 -@end example -@end table - - -@need 2000 -@node Notes for Package Builds, Notes for Particular Systems, ABI and ISA, Installing GMP -@section Notes for Package Builds -@cindex Build notes for binary packaging -@cindex Packaged builds - -GMP should present no great difficulties for packaging in a binary -distribution. - -@cindex Libtool versioning -@cindex Shared library versioning -Libtool is used to build the library and @samp{-version-info} is set -appropriately, having started from @samp{3:0:0} in GMP 3.0 (@pxref{Versioning, -Library interface versions, Library interface versions, libtool, GNU -Libtool}). - -The GMP 4 series will be upwardly binary compatible in each release and will -be upwardly binary compatible with all of the GMP 3 series. Additional -function interfaces may be added in each release, so on systems where libtool -versioning is not fully checked by the loader an auxiliary mechanism may be -needed to express that a dynamic linked application depends on a new enough -GMP. - -An auxiliary mechanism may also be needed to express that @file{libgmpxx.la} -(from @option{--enable-cxx}, @pxref{Build Options}) requires @file{libgmp.la} -from the same GMP version, since this is not done by the libtool versioning, -nor otherwise. A mismatch will result in unresolved symbols from the linker, -or perhaps the loader. - -When building a package for a CPU family, care should be taken to use -@samp{--host} (or @samp{--build}) to choose the least common denominator among -the CPUs which might use the package. For example this might mean plain -@samp{sparc} (meaning V7) for SPARCs. - -For x86s, @option{--enable-fat} sets things up for a fat binary build, making a -runtime selection of optimized low level routines. This is a good choice for -packaging to run on a range of x86 chips. - -Users who care about speed will want GMP built for their exact CPU type, to -make best use of the available optimizations. Providing a way to suitably -rebuild a package may be useful. This could be as simple as making it -possible for a user to omit @samp{--build} (and @samp{--host}) so -@samp{./config.guess} will detect the CPU@. But a way to manually specify a -@samp{--build} will be wanted for systems where @samp{./config.guess} is -inexact. - -On systems with multiple ABIs, a packaged build will need to decide which -among the choices is to be provided, see @ref{ABI and ISA}. A given run of -@samp{./configure} etc will only build one ABI@. If a second ABI is also -required then a second run of @samp{./configure} etc must be made, starting -from a clean directory tree (@samp{make distclean}). - -As noted under ``ABI and ISA'', currently no attempt is made to follow system -conventions for install locations that vary with ABI, such as -@file{/usr/lib/sparcv9} for @samp{ABI=64} as opposed to @file{/usr/lib} for -@samp{ABI=32}. A package build can override @samp{libdir} and other standard -variables as necessary. - -Note that @file{gmp.h} is a generated file, and will be architecture and ABI -dependent. When attempting to install two ABIs simultaneously it will be -important that an application compile gets the correct @file{gmp.h} for its -desired ABI@. If compiler include paths don't vary with ABI options then it -might be necessary to create a @file{/usr/include/gmp.h} which tests -preprocessor symbols and chooses the correct actual @file{gmp.h}. - - -@need 2000 -@node Notes for Particular Systems, Known Build Problems, Notes for Package Builds, Installing GMP -@section Notes for Particular Systems -@cindex Build notes for particular systems -@cindex Particular systems -@cindex Systems -@table @asis - -@c This section is more or less meant for notes about performance or about -@c build problems that have been worked around but might leave a user -@c scratching their head. Fun with different ABIs on a system belongs in the -@c above section. - -@item AIX 3 and 4 -@cindex AIX -On systems @samp{*-*-aix[34]*} shared libraries are disabled by default, since -some versions of the native @command{ar} fail on the convenience libraries -used. A shared build can be attempted with - -@example -./configure --enable-shared --disable-static -@end example - -Note that the @samp{--disable-static} is necessary because in a shared build -libtool makes @file{libgmp.a} a symlink to @file{libgmp.so}, apparently for -the benefit of old versions of @command{ld} which only recognise @file{.a}, -but unfortunately this is done even if a fully functional @command{ld} is -available. - -@item ARM -@cindex ARM -On systems @samp{arm*-*-*}, versions of GCC up to and including 2.95.3 have a -bug in unsigned division, giving wrong results for some operands. GMP -@samp{./configure} will demand GCC 2.95.4 or later. - -@item Compaq C++ -@cindex Compaq C++ -Compaq C++ on OSF 5.1 has two flavours of @code{iostream}, a standard one and -an old pre-standard one (see @samp{man iostream_intro}). GMP can only use the -standard one, which unfortunately is not the default but must be selected by -defining @code{__USE_STD_IOSTREAM}. Configure with for instance - -@example -./configure --enable-cxx CPPFLAGS=-D__USE_STD_IOSTREAM -@end example - -@item Floating Point Mode -@cindex Floating point mode -@cindex Hardware floating point mode -@cindex Precision of hardware floating point -@cindex x87 -On some systems, the hardware floating point has a control mode which can set -all operations to be done in a particular precision, for instance single, -double or extended on x86 systems (x87 floating point). The GMP functions -involving a @code{double} cannot be expected to operate to their full -precision when the hardware is in single precision mode. Of course this -affects all code, including application code, not just GMP. - -@item FreeBSD 7.x, 8.x, 9.0, 9.1, 9.2 -@cindex FreeBSD -@command{m4} in these releases of FreeBSD has an eval function which ignores -its 2nd and 3rd arguments, which makes it unsuitable for @file{.asm} file -processing. @samp{./configure} will detect the problem and either abort or -choose another m4 in the @env{PATH}. The bug is fixed in FreeBSD 9.3 and 10.0, -so either upgrade or use GNU m4. Note that the FreeBSD package system installs -GNU m4 under the name @samp{gm4}, which GMP cannot guess. - -@item FreeBSD 7.x, 8.x, 9.x -@cindex FreeBSD -GMP releases starting with 6.0 do not support @samp{ABI=32} on FreeBSD/amd64 -prior to release 10.0 of the system. The cause is a broken @code{limits.h}, -which GMP no longer works around. - -@item MS-DOS and MS Windows -@cindex MS-DOS -@cindex MS Windows -@cindex Windows -@cindex Cygwin -@cindex DJGPP -@cindex MINGW -On an MS-DOS system DJGPP can be used to build GMP, and on an MS Windows -system Cygwin, DJGPP and MINGW can be used. All three are excellent ports of -GCC and the various GNU tools. - -@display -@uref{http://www.cygwin.com/} -@uref{http://www.delorie.com/djgpp/} -@uref{http://www.mingw.org/} -@end display - -@cindex Interix -@cindex Services for Unix -Microsoft also publishes an Interix ``Services for Unix'' which can be used to -build GMP on Windows (with a normal @samp{./configure}), but it's not free -software. - -@item MS Windows DLLs -@cindex DLLs -@cindex MS Windows -@cindex Windows -On systems @samp{*-*-cygwin*}, @samp{*-*-mingw*} and @samp{*-*-pw32*} by -default GMP builds only a static library, but a DLL can be built instead using - -@example -./configure --disable-static --enable-shared -@end example - -Static and DLL libraries can't both be built, since certain export directives -in @file{gmp.h} must be different. - -A MINGW DLL build of GMP can be used with Microsoft C@. Libtool doesn't -install a @file{.lib} format import library, but it can be created with MS -@command{lib} as follows, and copied to the install directory. Similarly for -@file{libmp} and @file{libgmpxx}. - -@example -cd .libs -lib /def:libgmp-3.dll.def /out:libgmp-3.lib -@end example - -MINGW uses the C runtime library @samp{msvcrt.dll} for I/O, so applications -wanting to use the GMP I/O routines must be compiled with @samp{cl /MD} to do -the same. If one of the other C runtime library choices provided by MS C is -desired then the suggestion is to use the GMP string functions and confine I/O -to the application. - -@item Motorola 68k CPU Types -@cindex 68000 -@samp{m68k} is taken to mean 68000. @samp{m68020} or higher will give a -performance boost on applicable CPUs. @samp{m68360} can be used for CPU32 -series chips. @samp{m68302} can be used for ``Dragonball'' series chips, -though this is merely a synonym for @samp{m68000}. - -@item NetBSD 5.x -@cindex NetBSD -@command{m4} in these releases of NetBSD has an eval function which ignores its -2nd and 3rd arguments, which makes it unsuitable for @file{.asm} file -processing. @samp{./configure} will detect the problem and either abort or -choose another m4 in the @env{PATH}. The bug is fixed in NetBSD 6, so either -upgrade or use GNU m4. Note that the NetBSD package system installs GNU m4 -under the name @samp{gm4}, which GMP cannot guess. - -@item OpenBSD 2.6 -@cindex OpenBSD -@command{m4} in this release of OpenBSD has a bug in @code{eval} that makes it -unsuitable for @file{.asm} file processing. @samp{./configure} will detect -the problem and either abort or choose another m4 in the @env{PATH}. The bug -is fixed in OpenBSD 2.7, so either upgrade or use GNU m4. - -@item Power CPU Types -@cindex Power/PowerPC -In GMP, CPU types @samp{power*} and @samp{powerpc*} will each use instructions -not available on the other, so it's important to choose the right one for the -CPU that will be used. Currently GMP has no assembly code support for using -just the common instruction subset. To get executables that run on both, the -current suggestion is to use the generic C code (@option{--disable-assembly}), -possibly with appropriate compiler options (like @samp{-mcpu=common} for -@command{gcc}). CPU @samp{rs6000} (which is not a CPU but a family of -workstations) is accepted by @file{config.sub}, but is currently equivalent to -@option{--disable-assembly}. - -@item Sparc CPU Types -@cindex Sparc -@samp{sparcv8} or @samp{supersparc} on relevant systems will give a -significant performance increase over the V7 code selected by plain -@samp{sparc}. - -@item Sparc App Regs -@cindex Sparc -The GMP assembly code for both 32-bit and 64-bit Sparc clobbers the -``application registers'' @code{g2}, @code{g3} and @code{g4}, the same way -that the GCC default @samp{-mapp-regs} does (@pxref{SPARC Options,, SPARC -Options, gcc, Using the GNU Compiler Collection (GCC)}). - -This makes that code unsuitable for use with the special V9 -@samp{-mcmodel=embmedany} (which uses @code{g4} as a data segment pointer), and -for applications wanting to use those registers for special purposes. In these -cases the only suggestion currently is to build GMP with -@option{--disable-assembly} to avoid the assembly code. - -@item SunOS 4 -@cindex SunOS -@command{/usr/bin/m4} lacks various features needed to process @file{.asm} -files, and instead @samp{./configure} will automatically use -@command{/usr/5bin/m4}, which we believe is always available (if not then use -GNU m4). - -@item x86 CPU Types -@cindex x86 -@cindex 80x86 -@cindex i386 -@samp{i586}, @samp{pentium} or @samp{pentiummmx} code is good for its intended -P5 Pentium chips, but quite slow when run on Intel P6 class chips (PPro, P-II, -P-III)@. @samp{i386} is a better choice when making binaries that must run on -both. - -@item x86 MMX and SSE2 Code -@cindex MMX -@cindex SSE2 -If the CPU selected has MMX code but the assembler doesn't support it, a -warning is given and non-MMX code is used instead. This will be an inferior -build, since the MMX code that's present is there because it's faster than the -corresponding plain integer code. The same applies to SSE2. - -Old versions of @samp{gas} don't support MMX instructions, in particular -version 1.92.3 that comes with FreeBSD 2.2.8 or the more recent OpenBSD 3.1 -doesn't. - -Solaris 2.6 and 2.7 @command{as} generate incorrect object code for register -to register @code{movq} instructions, and so can't be used for MMX code. -Install a recent @command{gas} if MMX code is wanted on these systems. -@end table - - -@need 2000 -@node Known Build Problems, Performance optimization, Notes for Particular Systems, Installing GMP -@section Known Build Problems -@cindex Build problems known - -@c This section is more or less meant for known build problems that are not -@c otherwise worked around and require some sort of manual intervention. - -You might find more up-to-date information at @uref{https://gmplib.org/}. - -@table @asis -@item Compiler link options -The version of libtool currently in use rather aggressively strips compiler -options when linking a shared library. This will hopefully be relaxed in the -future, but for now if this is a problem the suggestion is to create a little -script to hide them, and for instance configure with - -@example -./configure CC=gcc-with-my-options -@end example - -@item DJGPP (@samp{*-*-msdosdjgpp*}) -@cindex DJGPP -The DJGPP port of @command{bash} 2.03 is unable to run the @samp{configure} -script, it exits silently, having died writing a preamble to -@file{config.log}. Use @command{bash} 2.04 or higher. - -@samp{make all} was found to run out of memory during the final -@file{libgmp.la} link on one system tested, despite having 64Mb available. -Running @samp{make libgmp.la} directly helped, perhaps recursing into the -various subdirectories uses up memory. - -@item GNU binutils @command{strip} prior to 2.12 -@cindex Stripped libraries -@cindex Binutils @command{strip} -@cindex GNU @command{strip} -@command{strip} from GNU binutils 2.11 and earlier should not be used on the -static libraries @file{libgmp.a} and @file{libmp.a} since it will discard all -but the last of multiple archive members with the same name, like the three -versions of @file{init.o} in @file{libgmp.a}. Binutils 2.12 or higher can be -used successfully. - -The shared libraries @file{libgmp.so} and @file{libmp.so} are not affected by -this and any version of @command{strip} can be used on them. - -@item @command{make} syntax error -@cindex SCO -@cindex IRIX -On certain versions of SCO OpenServer 5 and IRIX 6.5 the native @command{make} -is unable to handle the long dependencies list for @file{libgmp.la}. The -symptom is a ``syntax error'' on the following line of the top-level -@file{Makefile}. - -@example -libgmp.la: $(libgmp_la_OBJECTS) $(libgmp_la_DEPENDENCIES) -@end example - -Either use GNU Make, or as a workaround remove -@code{$(libgmp_la_DEPENDENCIES)} from that line (which will make the initial -build work, but if any recompiling is done @file{libgmp.la} might not be -rebuilt). - -@item MacOS X (@samp{*-*-darwin*}) -@cindex MacOS X -@cindex Darwin -Libtool currently only knows how to create shared libraries on MacOS X using -the native @command{cc} (which is a modified GCC), not a plain GCC@. A -static-only build should work though (@samp{--disable-shared}). - -@item NeXT prior to 3.3 -@cindex NeXT -The system compiler on old versions of NeXT was a massacred and old GCC, even -if it called itself @file{cc}. This compiler cannot be used to build GMP, you -need to get a real GCC, and install that. (NeXT may have fixed this in -release 3.3 of their system.) - -@item POWER and PowerPC -@cindex Power/PowerPC -Bugs in GCC 2.7.2 (and 2.6.3) mean it can't be used to compile GMP on POWER or -PowerPC@. If you want to use GCC for these machines, get GCC 2.7.2.1 (or -later). - -@item Sequent Symmetry -@cindex Sequent Symmetry -Use the GNU assembler instead of the system assembler, since the latter has -serious bugs. - -@item Solaris 2.6 -@cindex Solaris -The system @command{sed} prints an error ``Output line too long'' when libtool -builds @file{libgmp.la}. This doesn't seem to cause any obvious ill effects, -but GNU @command{sed} is recommended, to avoid any doubt. - -@item Sparc Solaris 2.7 with gcc 2.95.2 in @samp{ABI=32} -@cindex Solaris -A shared library build of GMP seems to fail in this combination, it builds but -then fails the tests, apparently due to some incorrect data relocations within -@code{gmp_randinit_lc_2exp_size}. The exact cause is unknown, -@samp{--disable-shared} is recommended. -@end table - - -@need 2000 -@node Performance optimization, , Known Build Problems, Installing GMP -@section Performance optimization -@cindex Optimizing performance - -@c At some point, this should perhaps move to a separate chapter on optimizing -@c performance. - -For optimal performance, build GMP for the exact CPU type of the target -computer, see @ref{Build Options}. - -Unlike what is the case for most other programs, the compiler typically -doesn't matter much, since GMP uses assembly language for the most critical -operation. - -In particular for long-running GMP applications, and applications demanding -extremely large numbers, building and running the @code{tuneup} program in the -@file{tune} subdirectory, can be important. For example, - -@example -cd tune -make tuneup -./tuneup -@end example - -will generate better contents for the @file{gmp-mparam.h} parameter file. - -To use the results, put the output in the file indicated in the -@samp{Parameters for ...} header. Then recompile from scratch. - -The @code{tuneup} program takes one useful parameter, @samp{-f NNN}, which -instructs the program how long to check FFT multiply parameters. If you're -going to use GMP for extremely large numbers, you may want to run @code{tuneup} -with a large NNN value. - - -@node GMP Basics, Reporting Bugs, Installing GMP, Top -@comment node-name, next, previous, up -@chapter GMP Basics -@cindex Basics - -@strong{Using functions, macros, data types, etc.@: not documented in this -manual is strongly discouraged. If you do so your application is guaranteed -to be incompatible with future versions of GMP.} - -@menu -* Headers and Libraries:: -* Nomenclature and Types:: -* Function Classes:: -* Variable Conventions:: -* Parameter Conventions:: -* Memory Management:: -* Reentrancy:: -* Useful Macros and Constants:: -* Compatibility with older versions:: -* Demonstration Programs:: -* Efficiency:: -* Debugging:: -* Profiling:: -* Autoconf:: -* Emacs:: -@end menu - -@node Headers and Libraries, Nomenclature and Types, GMP Basics, GMP Basics -@section Headers and Libraries -@cindex Headers - -@cindex @file{gmp.h} -@cindex Include files -@cindex @code{#include} -All declarations needed to use GMP are collected in the include file -@file{gmp.h}. It is designed to work with both C and C++ compilers. - -@example -#include <gmp.h> -@end example - -@cindex @code{stdio.h} -Note however that prototypes for GMP functions with @code{FILE *} parameters -are only provided if @code{<stdio.h>} is included too. - -@example -#include <stdio.h> -#include <gmp.h> -@end example - -@cindex @code{stdarg.h} -Likewise @code{<stdarg.h>} is required for prototypes with @code{va_list} -parameters, such as @code{gmp_vprintf}. And @code{<obstack.h>} for prototypes -with @code{struct obstack} parameters, such as @code{gmp_obstack_printf}, when -available. - -@cindex Libraries -@cindex Linking -@cindex @code{libgmp} -All programs using GMP must link against the @file{libgmp} library. On a -typical Unix-like system this can be done with @samp{-lgmp}, for example - -@example -gcc myprogram.c -lgmp -@end example - -@cindex @code{libgmpxx} -GMP C++ functions are in a separate @file{libgmpxx} library. This is built -and installed if C++ support has been enabled (@pxref{Build Options}). For -example, - -@example -g++ mycxxprog.cc -lgmpxx -lgmp -@end example - -@cindex Libtool -GMP is built using Libtool and an application can use that to link if desired, -@GMPpxreftop{libtool, GNU Libtool}. - -If GMP has been installed to a non-standard location then it may be necessary -to use @samp{-I} and @samp{-L} compiler options to point to the right -directories, and some sort of run-time path for a shared library. - - -@node Nomenclature and Types, Function Classes, Headers and Libraries, GMP Basics -@section Nomenclature and Types -@cindex Nomenclature -@cindex Types - -@cindex Integer -@tindex @code{mpz_t} -In this manual, @dfn{integer} usually means a multiple precision integer, as -defined by the GMP library. The C data type for such integers is @code{mpz_t}. -Here are some examples of how to declare such integers: - -@example -mpz_t sum; - -struct foo @{ mpz_t x, y; @}; - -mpz_t vec[20]; -@end example - -@cindex Rational number -@tindex @code{mpq_t} -@dfn{Rational number} means a multiple precision fraction. The C data type -for these fractions is @code{mpq_t}. For example: - -@example -mpq_t quotient; -@end example - -@cindex Floating-point number -@tindex @code{mpf_t} -@dfn{Floating point number} or @dfn{Float} for short, is an arbitrary precision -mantissa with a limited precision exponent. The C data type for such objects -is @code{mpf_t}. For example: - -@example -mpf_t fp; -@end example - -@tindex @code{mp_exp_t} -The floating point functions accept and return exponents in the C type -@code{mp_exp_t}. Currently this is usually a @code{long}, but on some systems -it's an @code{int} for efficiency. - -@cindex Limb -@tindex @code{mp_limb_t} -A @dfn{limb} means the part of a multi-precision number that fits in a single -machine word. (We chose this word because a limb of the human body is -analogous to a digit, only larger, and containing several digits.) Normally a -limb is 32 or 64 bits. The C data type for a limb is @code{mp_limb_t}. - -@tindex @code{mp_size_t} -Counts of limbs of a multi-precision number represented in the C type -@code{mp_size_t}. Currently this is normally a @code{long}, but on some -systems it's an @code{int} for efficiency, and on some systems it will be -@code{long long} in the future. - -@tindex @code{mp_bitcnt_t} -Counts of bits of a multi-precision number are represented in the C type -@code{mp_bitcnt_t}. Currently this is always an @code{unsigned long}, but on -some systems it will be an @code{unsigned long long} in the future. - -@cindex Random state -@tindex @code{gmp_randstate_t} -@dfn{Random state} means an algorithm selection and current state data. The C -data type for such objects is @code{gmp_randstate_t}. For example: - -@example -gmp_randstate_t rstate; -@end example - -Also, in general @code{mp_bitcnt_t} is used for bit counts and ranges, and -@code{size_t} is used for byte or character counts. - - -@node Function Classes, Variable Conventions, Nomenclature and Types, GMP Basics -@section Function Classes -@cindex Function classes - -There are six classes of functions in the GMP library: - -@enumerate -@item -Functions for signed integer arithmetic, with names beginning with -@code{mpz_}. The associated type is @code{mpz_t}. There are about 150 -functions in this class. (@pxref{Integer Functions}) - -@item -Functions for rational number arithmetic, with names beginning with -@code{mpq_}. The associated type is @code{mpq_t}. There are about 35 -functions in this class, but the integer functions can be used for arithmetic -on the numerator and denominator separately. (@pxref{Rational Number -Functions}) - -@item -Functions for floating-point arithmetic, with names beginning with -@code{mpf_}. The associated type is @code{mpf_t}. There are about 70 -functions is this class. (@pxref{Floating-point Functions}) - -@item -Fast low-level functions that operate on natural numbers. These are used by -the functions in the preceding groups, and you can also call them directly -from very time-critical user programs. These functions' names begin with -@code{mpn_}. The associated type is array of @code{mp_limb_t}. There are -about 60 (hard-to-use) functions in this class. (@pxref{Low-level Functions}) - -@item -Miscellaneous functions. Functions for setting up custom allocation and -functions for generating random numbers. (@pxref{Custom Allocation}, and -@pxref{Random Number Functions}) -@end enumerate - - -@node Variable Conventions, Parameter Conventions, Function Classes, GMP Basics -@section Variable Conventions -@cindex Variable conventions -@cindex Conventions for variables - -GMP functions generally have output arguments before input arguments. This -notation is by analogy with the assignment operator. The BSD MP compatibility -functions are exceptions, having the output arguments last. - -GMP lets you use the same variable for both input and output in one call. For -example, the main function for integer multiplication, @code{mpz_mul}, can be -used to square @code{x} and put the result back in @code{x} with - -@example -mpz_mul (x, x, x); -@end example - -Before you can assign to a GMP variable, you need to initialize it by calling -one of the special initialization functions. When you're done with a -variable, you need to clear it out, using one of the functions for that -purpose. Which function to use depends on the type of variable. See the -chapters on integer functions, rational number functions, and floating-point -functions for details. - -A variable should only be initialized once, or at least cleared between each -initialization. After a variable has been initialized, it may be assigned to -any number of times. - -For efficiency reasons, avoid excessive initializing and clearing. In -general, initialize near the start of a function and clear near the end. For -example, - -@example -void -foo (void) -@{ - mpz_t n; - int i; - mpz_init (n); - for (i = 1; i < 100; i++) - @{ - mpz_mul (n, @dots{}); - mpz_fdiv_q (n, @dots{}); - @dots{} - @} - mpz_clear (n); -@} -@end example - - -@node Parameter Conventions, Memory Management, Variable Conventions, GMP Basics -@section Parameter Conventions -@cindex Parameter conventions -@cindex Conventions for parameters - -When a GMP variable is used as a function parameter, it's effectively a -call-by-reference, meaning if the function stores a value there it will change -the original in the caller. Parameters which are input-only can be designated -@code{const} to provoke a compiler error or warning on attempting to modify -them. - -When a function is going to return a GMP result, it should designate a -parameter that it sets, like the library functions do. More than one value -can be returned by having more than one output parameter, again like the -library functions. A @code{return} of an @code{mpz_t} etc doesn't return the -object, only a pointer, and this is almost certainly not what's wanted. - -Here's an example accepting an @code{mpz_t} parameter, doing a calculation, -and storing the result to the indicated parameter. - -@example -void -foo (mpz_t result, const mpz_t param, unsigned long n) -@{ - unsigned long i; - mpz_mul_ui (result, param, n); - for (i = 1; i < n; i++) - mpz_add_ui (result, result, i*7); -@} - -int -main (void) -@{ - mpz_t r, n; - mpz_init (r); - mpz_init_set_str (n, "123456", 0); - foo (r, n, 20L); - gmp_printf ("%Zd\n", r); - return 0; -@} -@end example - -@code{foo} works even if the mainline passes the same variable for -@code{param} and @code{result}, just like the library functions. But -sometimes it's tricky to make that work, and an application might not want to -bother supporting that sort of thing. - -For interest, the GMP types @code{mpz_t} etc are implemented as one-element -arrays of certain structures. This is why declaring a variable creates an -object with the fields GMP needs, but then using it as a parameter passes a -pointer to the object. Note that the actual fields in each @code{mpz_t} etc -are for internal use only and should not be accessed directly by code that -expects to be compatible with future GMP releases. - - -@need 1000 -@node Memory Management, Reentrancy, Parameter Conventions, GMP Basics -@section Memory Management -@cindex Memory management - -The GMP types like @code{mpz_t} are small, containing only a couple of sizes, -and pointers to allocated data. Once a variable is initialized, GMP takes -care of all space allocation. Additional space is allocated whenever a -variable doesn't have enough. - -@code{mpz_t} and @code{mpq_t} variables never reduce their allocated space. -Normally this is the best policy, since it avoids frequent reallocation. -Applications that need to return memory to the heap at some particular point -can use @code{mpz_realloc2}, or clear variables no longer needed. - -@code{mpf_t} variables, in the current implementation, use a fixed amount of -space, determined by the chosen precision and allocated at initialization, so -their size doesn't change. - -All memory is allocated using @code{malloc} and friends by default, but this -can be changed, see @ref{Custom Allocation}. Temporary memory on the stack is -also used (via @code{alloca}), but this can be changed at build-time if -desired, see @ref{Build Options}. - - -@node Reentrancy, Useful Macros and Constants, Memory Management, GMP Basics -@section Reentrancy -@cindex Reentrancy -@cindex Thread safety -@cindex Multi-threading - -@noindent -GMP is reentrant and thread-safe, with some exceptions: - -@itemize @bullet -@item -If configured with @option{--enable-alloca=malloc-notreentrant} (or with -@option{--enable-alloca=notreentrant} when @code{alloca} is not available), -then naturally GMP is not reentrant. - -@item -@code{mpf_set_default_prec} and @code{mpf_init} use a global variable for the -selected precision. @code{mpf_init2} can be used instead, and in the C++ -interface an explicit precision to the @code{mpf_class} constructor. - -@item -@code{mpz_random} and the other old random number functions use a global -random state and are hence not reentrant. The newer random number functions -that accept a @code{gmp_randstate_t} parameter can be used instead. - -@item -@code{gmp_randinit} (obsolete) returns an error indication through a global -variable, which is not thread safe. Applications are advised to use -@code{gmp_randinit_default} or @code{gmp_randinit_lc_2exp} instead. - -@item -@code{mp_set_memory_functions} uses global variables to store the selected -memory allocation functions. - -@item -If the memory allocation functions set by a call to -@code{mp_set_memory_functions} (or @code{malloc} and friends by default) are -not reentrant, then GMP will not be reentrant either. - -@item -If the standard I/O functions such as @code{fwrite} are not reentrant then the -GMP I/O functions using them will not be reentrant either. - -@item -It's safe for two threads to read from the same GMP variable simultaneously, -but it's not safe for one to read while another might be writing, nor for -two threads to write simultaneously. It's not safe for two threads to -generate a random number from the same @code{gmp_randstate_t} simultaneously, -since this involves an update of that variable. -@end itemize - - -@need 2000 -@node Useful Macros and Constants, Compatibility with older versions, Reentrancy, GMP Basics -@section Useful Macros and Constants -@cindex Useful macros and constants -@cindex Constants - -@deftypevr {Global Constant} {const int} mp_bits_per_limb -@findex mp_bits_per_limb -@cindex Bits per limb -@cindex Limb size -The number of bits per limb. -@end deftypevr - -@defmac __GNU_MP_VERSION -@defmacx __GNU_MP_VERSION_MINOR -@defmacx __GNU_MP_VERSION_PATCHLEVEL -@cindex Version number -@cindex GMP version number -The major and minor GMP version, and patch level, respectively, as integers. -For GMP i.j, these numbers will be i, j, and 0, respectively. -For GMP i.j.k, these numbers will be i, j, and k, respectively. -@end defmac - -@deftypevr {Global Constant} {const char * const} gmp_version -@findex gmp_version -The GMP version number, as a null-terminated string, in the form ``i.j.k''. -This release is @nicode{"@value{VERSION}"}. Note that the format ``i.j'' was -used, before version 4.3.0, when k was zero. -@end deftypevr - -@defmac __GMP_CC -@defmacx __GMP_CFLAGS -The compiler and compiler flags, respectively, used when compiling GMP, as -strings. -@end defmac - - -@node Compatibility with older versions, Demonstration Programs, Useful Macros and Constants, GMP Basics -@section Compatibility with older versions -@cindex Compatibility with older versions -@cindex Past GMP versions -@cindex Upward compatibility - -This version of GMP is upwardly binary compatible with all 5.x, 4.x, and 3.x -versions, and upwardly compatible at the source level with all 2.x versions, -with the following exceptions. - -@itemize @bullet -@item -@code{mpn_gcd} had its source arguments swapped as of GMP 3.0, for consistency -with other @code{mpn} functions. - -@item -@code{mpf_get_prec} counted precision slightly differently in GMP 3.0 and -3.0.1, but in 3.1 reverted to the 2.x style. - -@item -@code{mpn_bdivmod}, documented as preliminary in GMP 4, has been removed. -@end itemize - -There are a number of compatibility issues between GMP 1 and GMP 2 that of -course also apply when porting applications from GMP 1 to GMP 5. Please -see the GMP 2 manual for details. - -@c @item Integer division functions round the result differently. The obsolete -@c functions (@code{mpz_div}, @code{mpz_divmod}, @code{mpz_mdiv}, -@c @code{mpz_mdivmod}, etc) now all use floor rounding (i.e., they round the -@c quotient towards -@c @ifinfo -@c @minus{}infinity). -@c @end ifinfo -@c @iftex -@c @tex -@c $-\infty$). -@c @end tex -@c @end iftex -@c There are a lot of functions for integer division, giving the user better -@c control over the rounding. - -@c @item The function @code{mpz_mod} now compute the true @strong{mod} function. - -@c @item The functions @code{mpz_powm} and @code{mpz_powm_ui} now use -@c @strong{mod} for reduction. - -@c @item The assignment functions for rational numbers do no longer canonicalize -@c their results. In the case a non-canonical result could arise from an -@c assignment, the user need to insert an explicit call to -@c @code{mpq_canonicalize}. This change was made for efficiency. - -@c @item Output generated by @code{mpz_out_raw} in this release cannot be read -@c by @code{mpz_inp_raw} in previous releases. This change was made for making -@c the file format truly portable between machines with different word sizes. - -@c @item Several @code{mpn} functions have changed. But they were intentionally -@c undocumented in previous releases. - -@c @item The functions @code{mpz_cmp_ui}, @code{mpz_cmp_si}, and @code{mpq_cmp_ui} -@c are now implemented as macros, and thereby sometimes evaluate their -@c arguments multiple times. - -@c @item The functions @code{mpz_pow_ui} and @code{mpz_ui_pow_ui} now yield 1 -@c for 0^0. (In version 1, they yielded 0.) - -@c In version 1 of the library, @code{mpq_set_den} handled negative -@c denominators by copying the sign to the numerator. That is no longer done. - -@c Pure assignment functions do not canonicalize the assigned variable. It is -@c the responsibility of the user to canonicalize the assigned variable before -@c any arithmetic operations are performed on that variable. -@c Note that this is an incompatible change from version 1 of the library. - -@c @end enumerate - - -@need 1000 -@node Demonstration Programs, Efficiency, Compatibility with older versions, GMP Basics -@section Demonstration programs -@cindex Demonstration programs -@cindex Example programs -@cindex Sample programs -The @file{demos} subdirectory has some sample programs using GMP@. These -aren't built or installed, but there's a @file{Makefile} with rules for them. -For instance, - -@example -make pexpr -./pexpr 68^975+10 -@end example - -@noindent -The following programs are provided - -@itemize @bullet -@item -@cindex Expression parsing demo -@cindex Parsing expressions demo -@samp{pexpr} is an expression evaluator, the program used on the GMP web page. -@item -@cindex Expression parsing demo -@cindex Parsing expressions demo -The @samp{calc} subdirectory has a similar but simpler evaluator using -@command{lex} and @command{yacc}. -@item -@cindex Expression parsing demo -@cindex Parsing expressions demo -The @samp{expr} subdirectory is yet another expression evaluator, a library -designed for ease of use within a C program. See @file{demos/expr/README} for -more information. -@item -@cindex Factorization demo -@samp{factorize} is a Pollard-Rho factorization program. -@item -@samp{isprime} is a command-line interface to the @code{mpz_probab_prime_p} -function. -@item -@samp{primes} counts or lists primes in an interval, using a sieve. -@item -@samp{qcn} is an example use of @code{mpz_kronecker_ui} to estimate quadratic -class numbers. -@item -@cindex @code{perl} -@cindex GMP Perl module -@cindex Perl module -The @samp{perl} subdirectory is a comprehensive perl interface to GMP@. See -@file{demos/perl/INSTALL} for more information. Documentation is in POD -format in @file{demos/perl/GMP.pm}. -@end itemize - -As an aside, consideration has been given at various times to some sort of -expression evaluation within the main GMP library. Going beyond something -minimal quickly leads to matters like user-defined functions, looping, fixnums -for control variables, etc, which are considered outside the scope of GMP -(much closer to language interpreters or compilers, @xref{Language Bindings}.) -Something simple for program input convenience may yet be a possibility, a -combination of the @file{expr} demo and the @file{pexpr} tree back-end -perhaps. But for now the above evaluators are offered as illustrations. - - -@need 1000 -@node Efficiency, Debugging, Demonstration Programs, GMP Basics -@section Efficiency -@cindex Efficiency - -@table @asis -@item Small Operands -@cindex Small operands -On small operands, the time for function call overheads and memory allocation -can be significant in comparison to actual calculation. This is unavoidable -in a general purpose variable precision library, although GMP attempts to be -as efficient as it can on both large and small operands. - -@item Static Linking -@cindex Static linking -On some CPUs, in particular the x86s, the static @file{libgmp.a} should be -used for maximum speed, since the PIC code in the shared @file{libgmp.so} will -have a small overhead on each function call and global data address. For many -programs this will be insignificant, but for long calculations there's a gain -to be had. - -@item Initializing and Clearing -@cindex Initializing and clearing -Avoid excessive initializing and clearing of variables, since this can be -quite time consuming, especially in comparison to otherwise fast operations -like addition. - -A language interpreter might want to keep a free list or stack of -initialized variables ready for use. It should be possible to integrate -something like that with a garbage collector too. - -@item Reallocations -@cindex Reallocations -An @code{mpz_t} or @code{mpq_t} variable used to hold successively increasing -values will have its memory repeatedly @code{realloc}ed, which could be quite -slow or could fragment memory, depending on the C library. If an application -can estimate the final size then @code{mpz_init2} or @code{mpz_realloc2} can -be called to allocate the necessary space from the beginning -(@pxref{Initializing Integers}). - -It doesn't matter if a size set with @code{mpz_init2} or @code{mpz_realloc2} -is too small, since all functions will do a further reallocation if necessary. -Badly overestimating memory required will waste space though. - -@item @code{2exp} Functions -@cindex @code{2exp} functions -It's up to an application to call functions like @code{mpz_mul_2exp} when -appropriate. General purpose functions like @code{mpz_mul} make no attempt to -identify powers of two or other special forms, because such inputs will -usually be very rare and testing every time would be wasteful. - -@item @code{ui} and @code{si} Functions -@cindex @code{ui} and @code{si} functions -The @code{ui} functions and the small number of @code{si} functions exist for -convenience and should be used where applicable. But if for example an -@code{mpz_t} contains a value that fits in an @code{unsigned long} there's no -need extract it and call a @code{ui} function, just use the regular @code{mpz} -function. - -@item In-Place Operations -@cindex In-place operations -@code{mpz_abs}, @code{mpq_abs}, @code{mpf_abs}, @code{mpz_neg}, @code{mpq_neg} -and @code{mpf_neg} are fast when used for in-place operations like -@code{mpz_abs(x,x)}, since in the current implementation only a single field -of @code{x} needs changing. On suitable compilers (GCC for instance) this is -inlined too. - -@code{mpz_add_ui}, @code{mpz_sub_ui}, @code{mpf_add_ui} and @code{mpf_sub_ui} -benefit from an in-place operation like @code{mpz_add_ui(x,x,y)}, since -usually only one or two limbs of @code{x} will need to be changed. The same -applies to the full precision @code{mpz_add} etc if @code{y} is small. If -@code{y} is big then cache locality may be helped, but that's all. - -@code{mpz_mul} is currently the opposite, a separate destination is slightly -better. A call like @code{mpz_mul(x,x,y)} will, unless @code{y} is only one -limb, make a temporary copy of @code{x} before forming the result. Normally -that copying will only be a tiny fraction of the time for the multiply, so -this is not a particularly important consideration. - -@code{mpz_set}, @code{mpq_set}, @code{mpq_set_num}, @code{mpf_set}, etc, make -no attempt to recognise a copy of something to itself, so a call like -@code{mpz_set(x,x)} will be wasteful. Naturally that would never be written -deliberately, but if it might arise from two pointers to the same object then -a test to avoid it might be desirable. - -@example -if (x != y) - mpz_set (x, y); -@end example - -Note that it's never worth introducing extra @code{mpz_set} calls just to get -in-place operations. If a result should go to a particular variable then just -direct it there and let GMP take care of data movement. - -@item Divisibility Testing (Small Integers) -@cindex Divisibility testing -@code{mpz_divisible_ui_p} and @code{mpz_congruent_ui_p} are the best functions -for testing whether an @code{mpz_t} is divisible by an individual small -integer. They use an algorithm which is faster than @code{mpz_tdiv_ui}, but -which gives no useful information about the actual remainder, only whether -it's zero (or a particular value). - -However when testing divisibility by several small integers, it's best to take -a remainder modulo their product, to save multi-precision operations. For -instance to test whether a number is divisible by any of 23, 29 or 31 take a -remainder modulo @math{23@times{}29@times{}31 = 20677} and then test that. - -The division functions like @code{mpz_tdiv_q_ui} which give a quotient as well -as a remainder are generally a little slower than the remainder-only functions -like @code{mpz_tdiv_ui}. If the quotient is only rarely wanted then it's -probably best to just take a remainder and then go back and calculate the -quotient if and when it's wanted (@code{mpz_divexact_ui} can be used if the -remainder is zero). - -@item Rational Arithmetic -@cindex Rational arithmetic -The @code{mpq} functions operate on @code{mpq_t} values with no common factors -in the numerator and denominator. Common factors are checked-for and cast out -as necessary. In general, cancelling factors every time is the best approach -since it minimizes the sizes for subsequent operations. - -However, applications that know something about the factorization of the -values they're working with might be able to avoid some of the GCDs used for -canonicalization, or swap them for divisions. For example when multiplying by -a prime it's enough to check for factors of it in the denominator instead of -doing a full GCD@. Or when forming a big product it might be known that very -little cancellation will be possible, and so canonicalization can be left to -the end. - -The @code{mpq_numref} and @code{mpq_denref} macros give access to the -numerator and denominator to do things outside the scope of the supplied -@code{mpq} functions. @xref{Applying Integer Functions}. - -The canonical form for rationals allows mixed-type @code{mpq_t} and integer -additions or subtractions to be done directly with multiples of the -denominator. This will be somewhat faster than @code{mpq_add}. For example, - -@example -/* mpq increment */ -mpz_add (mpq_numref(q), mpq_numref(q), mpq_denref(q)); - -/* mpq += unsigned long */ -mpz_addmul_ui (mpq_numref(q), mpq_denref(q), 123UL); - -/* mpq -= mpz */ -mpz_submul (mpq_numref(q), mpq_denref(q), z); -@end example - -@item Number Sequences -@cindex Number sequences -Functions like @code{mpz_fac_ui}, @code{mpz_fib_ui} and @code{mpz_bin_uiui} -are designed for calculating isolated values. If a range of values is wanted -it's probably best to call to get a starting point and iterate from there. - -@item Text Input/Output -@cindex Text input/output -Hexadecimal or octal are suggested for input or output in text form. -Power-of-2 bases like these can be converted much more efficiently than other -bases, like decimal. For big numbers there's usually nothing of particular -interest to be seen in the digits, so the base doesn't matter much. - -Maybe we can hope octal will one day become the normal base for everyday use, -as proposed by King Charles XII of Sweden and later reformers. -@c Reference: Knuth volume 2 section 4.1, page 184 of second edition. :-) -@end table - - -@node Debugging, Profiling, Efficiency, GMP Basics -@section Debugging -@cindex Debugging - -@table @asis -@item Stack Overflow -@cindex Stack overflow -@cindex Segmentation violation -@cindex Bus error -Depending on the system, a segmentation violation or bus error might be the -only indication of stack overflow. See @samp{--enable-alloca} choices in -@ref{Build Options}, for how to address this. - -In new enough versions of GCC, @samp{-fstack-check} may be able to ensure an -overflow is recognised by the system before too much damage is done, or -@samp{-fstack-limit-symbol} or @samp{-fstack-limit-register} may be able to -add checking if the system itself doesn't do any (@pxref{Code Gen Options,, -Options for Code Generation, gcc, Using the GNU Compiler Collection (GCC)}). -These options must be added to the @samp{CFLAGS} used in the GMP build -(@pxref{Build Options}), adding them just to an application will have no -effect. Note also they're a slowdown, adding overhead to each function call -and each stack allocation. - -@item Heap Problems -@cindex Heap problems -@cindex Malloc problems -The most likely cause of application problems with GMP is heap corruption. -Failing to @code{init} GMP variables will have unpredictable effects, and -corruption arising elsewhere in a program may well affect GMP@. Initializing -GMP variables more than once or failing to clear them will cause memory leaks. - -@cindex Malloc debugger -In all such cases a @code{malloc} debugger is recommended. On a GNU or BSD -system the standard C library @code{malloc} has some diagnostic facilities, -see @ref{Allocation Debugging,, Allocation Debugging, libc, The GNU C Library -Reference Manual}, or @samp{man 3 malloc}. Other possibilities, in no -particular order, include - -@display -@uref{http://www.inf.ethz.ch/personal/biere/projects/ccmalloc/} -@uref{http://dmalloc.com/} -@uref{http://www.perens.com/FreeSoftware/} @ (electric fence) -@uref{http://packages.debian.org/stable/devel/fda} -@uref{http://www.gnupdate.org/components/leakbug/} -@uref{http://people.redhat.com/~otaylor/memprof/} -@uref{http://www.cbmamiga.demon.co.uk/mpatrol/} -@end display - -The GMP default allocation routines in @file{memory.c} also have a simple -sentinel scheme which can be enabled with @code{#define DEBUG} in that file. -This is mainly designed for detecting buffer overruns during GMP development, -but might find other uses. - -@item Stack Backtraces -@cindex Stack backtrace -On some systems the compiler options GMP uses by default can interfere with -debugging. In particular on x86 and 68k systems @samp{-fomit-frame-pointer} -is used and this generally inhibits stack backtracing. Recompiling without -such options may help while debugging, though the usual caveats about it -potentially moving a memory problem or hiding a compiler bug will apply. - -@item GDB, the GNU Debugger -@cindex GDB -@cindex GNU Debugger -A sample @file{.gdbinit} is included in the distribution, showing how to call -some undocumented dump functions to print GMP variables from within GDB@. Note -that these functions shouldn't be used in final application code since they're -undocumented and may be subject to incompatible changes in future versions of -GMP. - -@item Source File Paths -GMP has multiple source files with the same name, in different directories. -For example @file{mpz}, @file{mpq} and @file{mpf} each have an -@file{init.c}. If the debugger can't already determine the right one it may -help to build with absolute paths on each C file. One way to do that is to -use a separate object directory with an absolute path to the source directory. - -@example -cd /my/build/dir -/my/source/dir/gmp-@value{VERSION}/configure -@end example - -This works via @code{VPATH}, and might require GNU @command{make}. -Alternately it might be possible to change the @code{.c.lo} rules -appropriately. - -@item Assertion Checking -@cindex Assertion checking -The build option @option{--enable-assert} is available to add some consistency -checks to the library (see @ref{Build Options}). These are likely to be of -limited value to most applications. Assertion failures are just as likely to -indicate memory corruption as a library or compiler bug. - -Applications using the low-level @code{mpn} functions, however, will benefit -from @option{--enable-assert} since it adds checks on the parameters of most -such functions, many of which have subtle restrictions on their usage. Note -however that only the generic C code has checks, not the assembly code, so -@option{--disable-assembly} should be used for maximum checking. - -@item Temporary Memory Checking -The build option @option{--enable-alloca=debug} arranges that each block of -temporary memory in GMP is allocated with a separate call to @code{malloc} (or -the allocation function set with @code{mp_set_memory_functions}). - -This can help a malloc debugger detect accesses outside the intended bounds, -or detect memory not released. In a normal build, on the other hand, -temporary memory is allocated in blocks which GMP divides up for its own use, -or may be allocated with a compiler builtin @code{alloca} which will go -nowhere near any malloc debugger hooks. - -@item Maximum Debuggability -To summarize the above, a GMP build for maximum debuggability would be - -@example -./configure --disable-shared --enable-assert \ - --enable-alloca=debug --disable-assembly CFLAGS=-g -@end example - -For C++, add @samp{--enable-cxx CXXFLAGS=-g}. - -@item Checker -@cindex Checker -@cindex GCC Checker -The GCC checker (@uref{https://savannah.nongnu.org/projects/checker/}) can be -used with GMP@. It contains a stub library which means GMP applications -compiled with checker can use a normal GMP build. - -A build of GMP with checking within GMP itself can be made. This will run -very very slowly. On GNU/Linux for example, - -@cindex @command{checkergcc} -@example -./configure --disable-assembly CC=checkergcc -@end example - -@option{--disable-assembly} must be used, since the GMP assembly code doesn't -support the checking scheme. The GMP C++ features cannot be used, since -current versions of checker (0.9.9.1) don't yet support the standard C++ -library. - -@item Valgrind -@cindex Valgrind -Valgrind (@uref{http://valgrind.org/}) is a memory checker for x86, ARM, MIPS, -PowerPC, and S/390. It translates and emulates machine instructions to do -strong checks for uninitialized data (at the level of individual bits), memory -accesses through bad pointers, and memory leaks. - -Valgrind does not always support every possible instruction, in particular -ones recently added to an ISA. Valgrind might therefore be incompatible with -a recent GMP or even a less recent GMP which is compiled using a recent GCC. - -GMP's assembly code sometimes promotes a read of the limbs to some larger size, -for efficiency. GMP will do this even at the start and end of a multilimb -operand, using naturally aligned operations on the larger type. This may lead -to benign reads outside of allocated areas, triggering complaints from -Valgrind. Valgrind's option @samp{--partial-loads-ok=yes} should help. - -@item Other Problems -Any suspected bug in GMP itself should be isolated to make sure it's not an -application problem, see @ref{Reporting Bugs}. -@end table - - -@node Profiling, Autoconf, Debugging, GMP Basics -@section Profiling -@cindex Profiling -@cindex Execution profiling -@cindex @code{--enable-profiling} - -Running a program under a profiler is a good way to find where it's spending -most time and where improvements can be best sought. The profiling choices -for a GMP build are as follows. - -@table @asis -@item @samp{--disable-profiling} -The default is to add nothing special for profiling. - -It should be possible to just compile the mainline of a program with @code{-p} -and use @command{prof} to get a profile consisting of timer-based sampling of -the program counter. Most of the GMP assembly code has the necessary symbol -information. - -This approach has the advantage of minimizing interference with normal program -operation, but on most systems the resolution of the sampling is quite low (10 -milliseconds for instance), requiring long runs to get accurate information. - -@item @samp{--enable-profiling=prof} -@cindex @code{prof} -Build with support for the system @command{prof}, which means @samp{-p} added -to the @samp{CFLAGS}. - -This provides call counting in addition to program counter sampling, which -allows the most frequently called routines to be identified, and an average -time spent in each routine to be determined. - -The x86 assembly code has support for this option, but on other processors -the assembly routines will be as if compiled without @samp{-p} and therefore -won't appear in the call counts. - -On some systems, such as GNU/Linux, @samp{-p} in fact means @samp{-pg} and in -this case @samp{--enable-profiling=gprof} described below should be used -instead. - -@item @samp{--enable-profiling=gprof} -@cindex @code{gprof} -Build with support for @command{gprof}, which means @samp{-pg} added to the -@samp{CFLAGS}. - -This provides call graph construction in addition to call counting and program -counter sampling, which makes it possible to count calls coming from different -locations. For example the number of calls to @code{mpn_mul} from -@code{mpz_mul} versus the number from @code{mpf_mul}. The program counter -sampling is still flat though, so only a total time in @code{mpn_mul} would be -accumulated, not a separate amount for each call site. - -The x86 assembly code has support for this option, but on other processors -the assembly routines will be as if compiled without @samp{-pg} and therefore -not be included in the call counts. - -On x86 and m68k systems @samp{-pg} and @samp{-fomit-frame-pointer} are -incompatible, so the latter is omitted from the default flags in that case, -which might result in poorer code generation. - -Incidentally, it should be possible to use the @command{gprof} program with a -plain @samp{--enable-profiling=prof} build. But in that case only the -@samp{gprof -p} flat profile and call counts can be expected to be valid, not -the @samp{gprof -q} call graph. - -@item @samp{--enable-profiling=instrument} -@cindex @code{-finstrument-functions} -@cindex @code{instrument-functions} -Build with the GCC option @samp{-finstrument-functions} added to the -@samp{CFLAGS} (@pxref{Code Gen Options,, Options for Code Generation, gcc, -Using the GNU Compiler Collection (GCC)}). - -This inserts special instrumenting calls at the start and end of each -function, allowing exact timing and full call graph construction. - -This instrumenting is not normally a standard system feature and will require -support from an external library, such as - -@cindex FunctionCheck -@cindex fnccheck -@display -@uref{http://sourceforge.net/projects/fnccheck/} -@end display - -This should be included in @samp{LIBS} during the GMP configure so that test -programs will link. For example, - -@example -./configure --enable-profiling=instrument LIBS=-lfc -@end example - -On a GNU system the C library provides dummy instrumenting functions, so -programs compiled with this option will link. In this case it's only -necessary to ensure the correct library is added when linking an application. - -The x86 assembly code supports this option, but on other processors the -assembly routines will be as if compiled without -@samp{-finstrument-functions} meaning time spent in them will effectively be -attributed to their caller. -@end table - - -@node Autoconf, Emacs, Profiling, GMP Basics -@section Autoconf -@cindex Autoconf - -Autoconf based applications can easily check whether GMP is installed. The -only thing to be noted is that GMP library symbols from version 3 onwards have -prefixes like @code{__gmpz}. The following therefore would be a simple test, - -@cindex @code{AC_CHECK_LIB} -@example -AC_CHECK_LIB(gmp, __gmpz_init) -@end example - -This just uses the default @code{AC_CHECK_LIB} actions for found or not found, -but an application that must have GMP would want to generate an error if not -found. For example, - -@example -AC_CHECK_LIB(gmp, __gmpz_init, , - [AC_MSG_ERROR([GNU MP not found, see https://gmplib.org/])]) -@end example - -If functions added in some particular version of GMP are required, then one of -those can be used when checking. For example @code{mpz_mul_si} was added in -GMP 3.1, - -@example -AC_CHECK_LIB(gmp, __gmpz_mul_si, , - [AC_MSG_ERROR( - [GNU MP not found, or not 3.1 or up, see https://gmplib.org/])]) -@end example - -An alternative would be to test the version number in @file{gmp.h} using say -@code{AC_EGREP_CPP}. That would make it possible to test the exact version, -if some particular sub-minor release is known to be necessary. - -In general it's recommended that applications should simply demand a new -enough GMP rather than trying to provide supplements for features not -available in past versions. - -Occasionally an application will need or want to know the size of a type at -configuration or preprocessing time, not just with @code{sizeof} in the code. -This can be done in the normal way with @code{mp_limb_t} etc, but GMP 4.0 or -up is best for this, since prior versions needed certain @samp{-D} defines on -systems using a @code{long long} limb. The following would suit Autoconf 2.50 -or up, - -@example -AC_CHECK_SIZEOF(mp_limb_t, , [#include <gmp.h>]) -@end example - - -@node Emacs, , Autoconf, GMP Basics -@section Emacs -@cindex Emacs -@cindex @code{info-lookup-symbol} - -@key{C-h C-i} (@code{info-lookup-symbol}) is a good way to find documentation -on C functions while editing (@pxref{Info Lookup, , Info Documentation Lookup, -emacs, The Emacs Editor}). - -The GMP manual can be included in such lookups by putting the following in -your @file{.emacs}, - -@c This isn't pretty, but there doesn't seem to be a better way (in emacs -@c 21.2 at least). info-lookup->mode-value could be used for the "assoc"s, -@c but that function isn't documented, whereas info-lookup-alist is. -@c -@example -(eval-after-load "info-look" - '(let ((mode-value (assoc 'c-mode (assoc 'symbol info-lookup-alist)))) - (setcar (nthcdr 3 mode-value) - (cons '("(gmp)Function Index" nil "^ -.* " "\\>") - (nth 3 mode-value))))) -@end example - - -@node Reporting Bugs, Integer Functions, GMP Basics, Top -@comment node-name, next, previous, up -@chapter Reporting Bugs -@cindex Reporting bugs -@cindex Bug reporting - -If you think you have found a bug in the GMP library, please investigate it -and report it. We have made this library available to you, and it is not too -much to ask you to report the bugs you find. - -Before you report a bug, check it's not already addressed in @ref{Known Build -Problems}, or perhaps @ref{Notes for Particular Systems}. You may also want -to check @uref{https://gmplib.org/} for patches for this release. - -Please include the following in any report, - -@itemize @bullet -@item -The GMP version number, and if pre-packaged or patched then say so. - -@item -A test program that makes it possible for us to reproduce the bug. Include -instructions on how to run the program. - -@item -A description of what is wrong. If the results are incorrect, in what way. -If you get a crash, say so. - -@item -If you get a crash, include a stack backtrace from the debugger if it's -informative (@samp{where} in @command{gdb}, or @samp{$C} in @command{adb}). - -@item -Please do not send core dumps, executables or @command{strace}s. - -@item -The @samp{configure} options you used when building GMP, if any. - -@item -The output from @samp{configure}, as printed to stdout, with any options used. - -@item -The name of the compiler and its version. For @command{gcc}, get the version -with @samp{gcc -v}, otherwise perhaps @samp{what `which cc`}, or similar. - -@item -The output from running @samp{uname -a}. - -@item -The output from running @samp{./config.guess}, and from running -@samp{./configfsf.guess} (might be the same). - -@item -If the bug is related to @samp{configure}, then the compressed contents of -@file{config.log}. - -@item -If the bug is related to an @file{asm} file not assembling, then the contents -of @file{config.m4} and the offending line or lines from the temporary -@file{mpn/tmp-<file>.s}. -@end itemize - -Please make an effort to produce a self-contained report, with something -definite that can be tested or debugged. Vague queries or piecemeal messages -are difficult to act on and don't help the development effort. - -It is not uncommon that an observed problem is actually due to a bug in the -compiler; the GMP code tends to explore interesting corners in compilers. - -If your bug report is good, we will do our best to help you get a corrected -version of the library; if the bug report is poor, we won't do anything about -it (except maybe ask you to send a better report). - -Send your report to: @email{gmp-bugs@@gmplib.org}. - -If you think something in this manual is unclear, or downright incorrect, or if -the language needs to be improved, please send a note to the same address. - - -@node Integer Functions, Rational Number Functions, Reporting Bugs, Top -@comment node-name, next, previous, up -@chapter Integer Functions -@cindex Integer functions - -This chapter describes the GMP functions for performing integer arithmetic. -These functions start with the prefix @code{mpz_}. - -GMP integers are stored in objects of type @code{mpz_t}. - -@menu -* Initializing Integers:: -* Assigning Integers:: -* Simultaneous Integer Init & Assign:: -* Converting Integers:: -* Integer Arithmetic:: -* Integer Division:: -* Integer Exponentiation:: -* Integer Roots:: -* Number Theoretic Functions:: -* Integer Comparisons:: -* Integer Logic and Bit Fiddling:: -* I/O of Integers:: -* Integer Random Numbers:: -* Integer Import and Export:: -* Miscellaneous Integer Functions:: -* Integer Special Functions:: -@end menu - -@node Initializing Integers, Assigning Integers, Integer Functions, Integer Functions -@comment node-name, next, previous, up -@section Initialization Functions -@cindex Integer initialization functions -@cindex Initialization functions - -The functions for integer arithmetic assume that all integer objects are -initialized. You do that by calling the function @code{mpz_init}. For -example, - -@example -@{ - mpz_t integ; - mpz_init (integ); - @dots{} - mpz_add (integ, @dots{}); - @dots{} - mpz_sub (integ, @dots{}); - - /* Unless the program is about to exit, do ... */ - mpz_clear (integ); -@} -@end example - -As you can see, you can store new values any number of times, once an -object is initialized. - -@deftypefun void mpz_init (mpz_t @var{x}) -Initialize @var{x}, and set its value to 0. -@end deftypefun - -@deftypefun void mpz_inits (mpz_t @var{x}, ...) -Initialize a NULL-terminated list of @code{mpz_t} variables, and set their -values to 0. -@end deftypefun - -@deftypefun void mpz_init2 (mpz_t @var{x}, mp_bitcnt_t @var{n}) -Initialize @var{x}, with space for @var{n}-bit numbers, and set its value to 0. -Calling this function instead of @code{mpz_init} or @code{mpz_inits} is never -necessary; reallocation is handled automatically by GMP when needed. - -While @var{n} defines the initial space, @var{x} will grow automatically in the -normal way, if necessary, for subsequent values stored. @code{mpz_init2} makes -it possible to avoid such reallocations if a maximum size is known in advance. - -In preparation for an operation, GMP often allocates one limb more than -ultimately needed. To make sure GMP will not perform reallocation for -@var{x}, you need to add the number of bits in @code{mp_limb_t} to @var{n}. -@end deftypefun - -@deftypefun void mpz_clear (mpz_t @var{x}) -Free the space occupied by @var{x}. Call this function for all @code{mpz_t} -variables when you are done with them. -@end deftypefun - -@deftypefun void mpz_clears (mpz_t @var{x}, ...) -Free the space occupied by a NULL-terminated list of @code{mpz_t} variables. -@end deftypefun - -@deftypefun void mpz_realloc2 (mpz_t @var{x}, mp_bitcnt_t @var{n}) -Change the space allocated for @var{x} to @var{n} bits. The value in @var{x} -is preserved if it fits, or is set to 0 if not. - -Calling this function is never necessary; reallocation is handled automatically -by GMP when needed. But this function can be used to increase the space for a -variable in order to avoid repeated automatic reallocations, or to decrease it -to give memory back to the heap. -@end deftypefun - - -@node Assigning Integers, Simultaneous Integer Init & Assign, Initializing Integers, Integer Functions -@comment node-name, next, previous, up -@section Assignment Functions -@cindex Integer assignment functions -@cindex Assignment functions - -These functions assign new values to already initialized integers -(@pxref{Initializing Integers}). - -@deftypefun void mpz_set (mpz_t @var{rop}, const mpz_t @var{op}) -@deftypefunx void mpz_set_ui (mpz_t @var{rop}, unsigned long int @var{op}) -@deftypefunx void mpz_set_si (mpz_t @var{rop}, signed long int @var{op}) -@deftypefunx void mpz_set_d (mpz_t @var{rop}, double @var{op}) -@deftypefunx void mpz_set_q (mpz_t @var{rop}, const mpq_t @var{op}) -@deftypefunx void mpz_set_f (mpz_t @var{rop}, const mpf_t @var{op}) -Set the value of @var{rop} from @var{op}. - -@code{mpz_set_d}, @code{mpz_set_q} and @code{mpz_set_f} truncate @var{op} to -make it an integer. -@end deftypefun - -@deftypefun int mpz_set_str (mpz_t @var{rop}, const char *@var{str}, int @var{base}) -Set the value of @var{rop} from @var{str}, a null-terminated C string in base -@var{base}. White space is allowed in the string, and is simply ignored. - -The @var{base} may vary from 2 to 62, or if @var{base} is 0, then the leading -characters are used: @code{0x} and @code{0X} for hexadecimal, @code{0b} and -@code{0B} for binary, @code{0} for octal, or decimal otherwise. - -For bases up to 36, case is ignored; upper-case and lower-case letters have -the same value. For bases 37 to 62, upper-case letter represent the usual -10..35 while lower-case letter represent 36..61. - -This function returns 0 if the entire string is a valid number in base -@var{base}. Otherwise it returns @minus{}1. -@c -@c It turns out that it is not entirely true that this function ignores -@c white-space. It does ignore it between digits, but not after a minus sign -@c or within or after ``0x''. Some thought was given to disallowing all -@c whitespace, but that would be an incompatible change, whitespace has been -@c documented as ignored ever since GMP 1. -@c -@end deftypefun - -@deftypefun void mpz_swap (mpz_t @var{rop1}, mpz_t @var{rop2}) -Swap the values @var{rop1} and @var{rop2} efficiently. -@end deftypefun - - -@node Simultaneous Integer Init & Assign, Converting Integers, Assigning Integers, Integer Functions -@comment node-name, next, previous, up -@section Combined Initialization and Assignment Functions -@cindex Integer assignment functions -@cindex Assignment functions -@cindex Integer initialization functions -@cindex Initialization functions - -For convenience, GMP provides a parallel series of initialize-and-set functions -which initialize the output and then store the value there. These functions' -names have the form @code{mpz_init_set@dots{}} - -Here is an example of using one: - -@example -@{ - mpz_t pie; - mpz_init_set_str (pie, "3141592653589793238462643383279502884", 10); - @dots{} - mpz_sub (pie, @dots{}); - @dots{} - mpz_clear (pie); -@} -@end example - -@noindent -Once the integer has been initialized by any of the @code{mpz_init_set@dots{}} -functions, it can be used as the source or destination operand for the ordinary -integer functions. Don't use an initialize-and-set function on a variable -already initialized! - -@deftypefun void mpz_init_set (mpz_t @var{rop}, const mpz_t @var{op}) -@deftypefunx void mpz_init_set_ui (mpz_t @var{rop}, unsigned long int @var{op}) -@deftypefunx void mpz_init_set_si (mpz_t @var{rop}, signed long int @var{op}) -@deftypefunx void mpz_init_set_d (mpz_t @var{rop}, double @var{op}) -Initialize @var{rop} with limb space and set the initial numeric value from -@var{op}. -@end deftypefun - -@deftypefun int mpz_init_set_str (mpz_t @var{rop}, const char *@var{str}, int @var{base}) -Initialize @var{rop} and set its value like @code{mpz_set_str} (see its -documentation above for details). - -If the string is a correct base @var{base} number, the function returns 0; -if an error occurs it returns @minus{}1. @var{rop} is initialized even if -an error occurs. (I.e., you have to call @code{mpz_clear} for it.) -@end deftypefun - - -@node Converting Integers, Integer Arithmetic, Simultaneous Integer Init & Assign, Integer Functions -@comment node-name, next, previous, up -@section Conversion Functions -@cindex Integer conversion functions -@cindex Conversion functions - -This section describes functions for converting GMP integers to standard C -types. Functions for converting @emph{to} GMP integers are described in -@ref{Assigning Integers} and @ref{I/O of Integers}. - -@deftypefun {unsigned long int} mpz_get_ui (const mpz_t @var{op}) -Return the value of @var{op} as an @code{unsigned long}. - -If @var{op} is too big to fit an @code{unsigned long} then just the least -significant bits that do fit are returned. The sign of @var{op} is ignored, -only the absolute value is used. -@end deftypefun - -@deftypefun {signed long int} mpz_get_si (const mpz_t @var{op}) -If @var{op} fits into a @code{signed long int} return the value of @var{op}. -Otherwise return the least significant part of @var{op}, with the same sign -as @var{op}. - -If @var{op} is too big to fit in a @code{signed long int}, the returned -result is probably not very useful. To find out if the value will fit, use -the function @code{mpz_fits_slong_p}. -@end deftypefun - -@deftypefun double mpz_get_d (const mpz_t @var{op}) -Convert @var{op} to a @code{double}, truncating if necessary (i.e.@: rounding -towards zero). - -If the exponent from the conversion is too big, the result is system -dependent. An infinity is returned where available. A hardware overflow trap -may or may not occur. -@end deftypefun - -@deftypefun double mpz_get_d_2exp (signed long int *@var{exp}, const mpz_t @var{op}) -Convert @var{op} to a @code{double}, truncating if necessary (i.e.@: rounding -towards zero), and returning the exponent separately. - -The return value is in the range @math{0.5@le{}@GMPabs{@var{d}}<1} and the -exponent is stored to @code{*@var{exp}}. @m{@var{d} * 2^{exp}, @var{d} * -2^@var{exp}} is the (truncated) @var{op} value. If @var{op} is zero, the -return is @math{0.0} and 0 is stored to @code{*@var{exp}}. - -@cindex @code{frexp} -This is similar to the standard C @code{frexp} function (@pxref{Normalization -Functions,,, libc, The GNU C Library Reference Manual}). -@end deftypefun - -@deftypefun {char *} mpz_get_str (char *@var{str}, int @var{base}, const mpz_t @var{op}) -Convert @var{op} to a string of digits in base @var{base}. The base argument -may vary from 2 to 62 or from @minus{}2 to @minus{}36. - -For @var{base} in the range 2..36, digits and lower-case letters are used; for -@minus{}2..@minus{}36, digits and upper-case letters are used; for 37..62, -digits, upper-case letters, and lower-case letters (in that significance order) -are used. - -If @var{str} is @code{NULL}, the result string is allocated using the current -allocation function (@pxref{Custom Allocation}). The block will be -@code{strlen(str)+1} bytes, that being exactly enough for the string and -null-terminator. - -If @var{str} is not @code{NULL}, it should point to a block of storage large -enough for the result, that being @code{mpz_sizeinbase (@var{op}, @var{base}) -+ 2}. The two extra bytes are for a possible minus sign, and the -null-terminator. - -A pointer to the result string is returned, being either the allocated block, -or the given @var{str}. -@end deftypefun - - -@need 2000 -@node Integer Arithmetic, Integer Division, Converting Integers, Integer Functions -@comment node-name, next, previous, up -@section Arithmetic Functions -@cindex Integer arithmetic functions -@cindex Arithmetic functions - -@deftypefun void mpz_add (mpz_t @var{rop}, const mpz_t @var{op1}, const mpz_t @var{op2}) -@deftypefunx void mpz_add_ui (mpz_t @var{rop}, const mpz_t @var{op1}, unsigned long int @var{op2}) -Set @var{rop} to @math{@var{op1} + @var{op2}}. -@end deftypefun - -@deftypefun void mpz_sub (mpz_t @var{rop}, const mpz_t @var{op1}, const mpz_t @var{op2}) -@deftypefunx void mpz_sub_ui (mpz_t @var{rop}, const mpz_t @var{op1}, unsigned long int @var{op2}) -@deftypefunx void mpz_ui_sub (mpz_t @var{rop}, unsigned long int @var{op1}, const mpz_t @var{op2}) -Set @var{rop} to @var{op1} @minus{} @var{op2}. -@end deftypefun - -@deftypefun void mpz_mul (mpz_t @var{rop}, const mpz_t @var{op1}, const mpz_t @var{op2}) -@deftypefunx void mpz_mul_si (mpz_t @var{rop}, const mpz_t @var{op1}, long int @var{op2}) -@deftypefunx void mpz_mul_ui (mpz_t @var{rop}, const mpz_t @var{op1}, unsigned long int @var{op2}) -Set @var{rop} to @math{@var{op1} @GMPtimes{} @var{op2}}. -@end deftypefun - -@deftypefun void mpz_addmul (mpz_t @var{rop}, const mpz_t @var{op1}, const mpz_t @var{op2}) -@deftypefunx void mpz_addmul_ui (mpz_t @var{rop}, const mpz_t @var{op1}, unsigned long int @var{op2}) -Set @var{rop} to @math{@var{rop} + @var{op1} @GMPtimes{} @var{op2}}. -@end deftypefun - -@deftypefun void mpz_submul (mpz_t @var{rop}, const mpz_t @var{op1}, const mpz_t @var{op2}) -@deftypefunx void mpz_submul_ui (mpz_t @var{rop}, const mpz_t @var{op1}, unsigned long int @var{op2}) -Set @var{rop} to @math{@var{rop} - @var{op1} @GMPtimes{} @var{op2}}. -@end deftypefun - -@deftypefun void mpz_mul_2exp (mpz_t @var{rop}, const mpz_t @var{op1}, mp_bitcnt_t @var{op2}) -@cindex Bit shift left -Set @var{rop} to @m{@var{op1} \times 2^{op2}, @var{op1} times 2 raised to -@var{op2}}. This operation can also be defined as a left shift by @var{op2} -bits. -@end deftypefun - -@deftypefun void mpz_neg (mpz_t @var{rop}, const mpz_t @var{op}) -Set @var{rop} to @minus{}@var{op}. -@end deftypefun - -@deftypefun void mpz_abs (mpz_t @var{rop}, const mpz_t @var{op}) -Set @var{rop} to the absolute value of @var{op}. -@end deftypefun - - -@need 2000 -@node Integer Division, Integer Exponentiation, Integer Arithmetic, Integer Functions -@section Division Functions -@cindex Integer division functions -@cindex Division functions - -Division is undefined if the divisor is zero. Passing a zero divisor to the -division or modulo functions (including the modular powering functions -@code{mpz_powm} and @code{mpz_powm_ui}), will cause an intentional division by -zero. This lets a program handle arithmetic exceptions in these functions the -same way as for normal C @code{int} arithmetic. - -@c Separate deftypefun groups for cdiv, fdiv and tdiv produce a blank line -@c between each, and seem to let tex do a better job of page breaks than an -@c @sp 1 in the middle of one big set. - -@deftypefun void mpz_cdiv_q (mpz_t @var{q}, const mpz_t @var{n}, const mpz_t @var{d}) -@deftypefunx void mpz_cdiv_r (mpz_t @var{r}, const mpz_t @var{n}, const mpz_t @var{d}) -@deftypefunx void mpz_cdiv_qr (mpz_t @var{q}, mpz_t @var{r}, const mpz_t @var{n}, const mpz_t @var{d}) -@maybepagebreak -@deftypefunx {unsigned long int} mpz_cdiv_q_ui (mpz_t @var{q}, const mpz_t @var{n}, @w{unsigned long int @var{d}}) -@deftypefunx {unsigned long int} mpz_cdiv_r_ui (mpz_t @var{r}, const mpz_t @var{n}, @w{unsigned long int @var{d}}) -@deftypefunx {unsigned long int} mpz_cdiv_qr_ui (mpz_t @var{q}, mpz_t @var{r}, @w{const mpz_t @var{n}}, @w{unsigned long int @var{d}}) -@deftypefunx {unsigned long int} mpz_cdiv_ui (const mpz_t @var{n}, @w{unsigned long int @var{d}}) -@maybepagebreak -@deftypefunx void mpz_cdiv_q_2exp (mpz_t @var{q}, const mpz_t @var{n}, @w{mp_bitcnt_t @var{b}}) -@deftypefunx void mpz_cdiv_r_2exp (mpz_t @var{r}, const mpz_t @var{n}, @w{mp_bitcnt_t @var{b}}) -@end deftypefun - -@deftypefun void mpz_fdiv_q (mpz_t @var{q}, const mpz_t @var{n}, const mpz_t @var{d}) -@deftypefunx void mpz_fdiv_r (mpz_t @var{r}, const mpz_t @var{n}, const mpz_t @var{d}) -@deftypefunx void mpz_fdiv_qr (mpz_t @var{q}, mpz_t @var{r}, const mpz_t @var{n}, const mpz_t @var{d}) -@maybepagebreak -@deftypefunx {unsigned long int} mpz_fdiv_q_ui (mpz_t @var{q}, const mpz_t @var{n}, @w{unsigned long int @var{d}}) -@deftypefunx {unsigned long int} mpz_fdiv_r_ui (mpz_t @var{r}, const mpz_t @var{n}, @w{unsigned long int @var{d}}) -@deftypefunx {unsigned long int} mpz_fdiv_qr_ui (mpz_t @var{q}, mpz_t @var{r}, @w{const mpz_t @var{n}}, @w{unsigned long int @var{d}}) -@deftypefunx {unsigned long int} mpz_fdiv_ui (const mpz_t @var{n}, @w{unsigned long int @var{d}}) -@maybepagebreak -@deftypefunx void mpz_fdiv_q_2exp (mpz_t @var{q}, const mpz_t @var{n}, @w{mp_bitcnt_t @var{b}}) -@deftypefunx void mpz_fdiv_r_2exp (mpz_t @var{r}, const mpz_t @var{n}, @w{mp_bitcnt_t @var{b}}) -@end deftypefun - -@deftypefun void mpz_tdiv_q (mpz_t @var{q}, const mpz_t @var{n}, const mpz_t @var{d}) -@deftypefunx void mpz_tdiv_r (mpz_t @var{r}, const mpz_t @var{n}, const mpz_t @var{d}) -@deftypefunx void mpz_tdiv_qr (mpz_t @var{q}, mpz_t @var{r}, const mpz_t @var{n}, const mpz_t @var{d}) -@maybepagebreak -@deftypefunx {unsigned long int} mpz_tdiv_q_ui (mpz_t @var{q}, const mpz_t @var{n}, @w{unsigned long int @var{d}}) -@deftypefunx {unsigned long int} mpz_tdiv_r_ui (mpz_t @var{r}, const mpz_t @var{n}, @w{unsigned long int @var{d}}) -@deftypefunx {unsigned long int} mpz_tdiv_qr_ui (mpz_t @var{q}, mpz_t @var{r}, @w{const mpz_t @var{n}}, @w{unsigned long int @var{d}}) -@deftypefunx {unsigned long int} mpz_tdiv_ui (const mpz_t @var{n}, @w{unsigned long int @var{d}}) -@maybepagebreak -@deftypefunx void mpz_tdiv_q_2exp (mpz_t @var{q}, const mpz_t @var{n}, @w{mp_bitcnt_t @var{b}}) -@deftypefunx void mpz_tdiv_r_2exp (mpz_t @var{r}, const mpz_t @var{n}, @w{mp_bitcnt_t @var{b}}) -@cindex Bit shift right - -@sp 1 -Divide @var{n} by @var{d}, forming a quotient @var{q} and/or remainder -@var{r}. For the @code{2exp} functions, @m{@var{d}=2^b, @var{d}=2^@var{b}}. -The rounding is in three styles, each suiting different applications. - -@itemize @bullet -@item -@code{cdiv} rounds @var{q} up towards @m{+\infty, +infinity}, and @var{r} will -have the opposite sign to @var{d}. The @code{c} stands for ``ceil''. - -@item -@code{fdiv} rounds @var{q} down towards @m{-\infty, @minus{}infinity}, and -@var{r} will have the same sign as @var{d}. The @code{f} stands for -``floor''. - -@item -@code{tdiv} rounds @var{q} towards zero, and @var{r} will have the same sign -as @var{n}. The @code{t} stands for ``truncate''. -@end itemize - -In all cases @var{q} and @var{r} will satisfy -@m{@var{n}=@var{q}@var{d}+@var{r}, @var{n}=@var{q}*@var{d}+@var{r}}, and -@var{r} will satisfy @math{0@le{}@GMPabs{@var{r}}<@GMPabs{@var{d}}}. - -The @code{q} functions calculate only the quotient, the @code{r} functions -only the remainder, and the @code{qr} functions calculate both. Note that for -@code{qr} the same variable cannot be passed for both @var{q} and @var{r}, or -results will be unpredictable. - -For the @code{ui} variants the return value is the remainder, and in fact -returning the remainder is all the @code{div_ui} functions do. For -@code{tdiv} and @code{cdiv} the remainder can be negative, so for those the -return value is the absolute value of the remainder. - -For the @code{2exp} variants the divisor is @m{2^b,2^@var{b}}. These -functions are implemented as right shifts and bit masks, but of course they -round the same as the other functions. - -For positive @var{n} both @code{mpz_fdiv_q_2exp} and @code{mpz_tdiv_q_2exp} -are simple bitwise right shifts. For negative @var{n}, @code{mpz_fdiv_q_2exp} -is effectively an arithmetic right shift treating @var{n} as twos complement -the same as the bitwise logical functions do, whereas @code{mpz_tdiv_q_2exp} -effectively treats @var{n} as sign and magnitude. -@end deftypefun - -@deftypefun void mpz_mod (mpz_t @var{r}, const mpz_t @var{n}, const mpz_t @var{d}) -@deftypefunx {unsigned long int} mpz_mod_ui (mpz_t @var{r}, const mpz_t @var{n}, @w{unsigned long int @var{d}}) -Set @var{r} to @var{n} @code{mod} @var{d}. The sign of the divisor is -ignored; the result is always non-negative. - -@code{mpz_mod_ui} is identical to @code{mpz_fdiv_r_ui} above, returning the -remainder as well as setting @var{r}. See @code{mpz_fdiv_ui} above if only -the return value is wanted. -@end deftypefun - -@deftypefun void mpz_divexact (mpz_t @var{q}, const mpz_t @var{n}, const mpz_t @var{d}) -@deftypefunx void mpz_divexact_ui (mpz_t @var{q}, const mpz_t @var{n}, unsigned long @var{d}) -@cindex Exact division functions -Set @var{q} to @var{n}/@var{d}. These functions produce correct results only -when it is known in advance that @var{d} divides @var{n}. - -These routines are much faster than the other division functions, and are the -best choice when exact division is known to occur, for example reducing a -rational to lowest terms. -@end deftypefun - -@deftypefun int mpz_divisible_p (const mpz_t @var{n}, const mpz_t @var{d}) -@deftypefunx int mpz_divisible_ui_p (const mpz_t @var{n}, unsigned long int @var{d}) -@deftypefunx int mpz_divisible_2exp_p (const mpz_t @var{n}, mp_bitcnt_t @var{b}) -@cindex Divisibility functions -Return non-zero if @var{n} is exactly divisible by @var{d}, or in the case of -@code{mpz_divisible_2exp_p} by @m{2^b,2^@var{b}}. - -@var{n} is divisible by @var{d} if there exists an integer @var{q} satisfying -@math{@var{n} = @var{q}@GMPmultiply{}@var{d}}. Unlike the other division -functions, @math{@var{d}=0} is accepted and following the rule it can be seen -that only 0 is considered divisible by 0. -@end deftypefun - -@deftypefun int mpz_congruent_p (const mpz_t @var{n}, const mpz_t @var{c}, const mpz_t @var{d}) -@deftypefunx int mpz_congruent_ui_p (const mpz_t @var{n}, unsigned long int @var{c}, unsigned long int @var{d}) -@deftypefunx int mpz_congruent_2exp_p (const mpz_t @var{n}, const mpz_t @var{c}, mp_bitcnt_t @var{b}) -@cindex Divisibility functions -@cindex Congruence functions -Return non-zero if @var{n} is congruent to @var{c} modulo @var{d}, or in the -case of @code{mpz_congruent_2exp_p} modulo @m{2^b,2^@var{b}}. - -@var{n} is congruent to @var{c} mod @var{d} if there exists an integer @var{q} -satisfying @math{@var{n} = @var{c} + @var{q}@GMPmultiply{}@var{d}}. Unlike -the other division functions, @math{@var{d}=0} is accepted and following the -rule it can be seen that @var{n} and @var{c} are considered congruent mod 0 -only when exactly equal. -@end deftypefun - - -@need 2000 -@node Integer Exponentiation, Integer Roots, Integer Division, Integer Functions -@section Exponentiation Functions -@cindex Integer exponentiation functions -@cindex Exponentiation functions -@cindex Powering functions - -@deftypefun void mpz_powm (mpz_t @var{rop}, const mpz_t @var{base}, const mpz_t @var{exp}, const mpz_t @var{mod}) -@deftypefunx void mpz_powm_ui (mpz_t @var{rop}, const mpz_t @var{base}, unsigned long int @var{exp}, const mpz_t @var{mod}) -Set @var{rop} to @m{base^{exp} \bmod mod, (@var{base} raised to @var{exp}) -modulo @var{mod}}. - -Negative @var{exp} is supported if an inverse @math{@var{base}^@W{-1} @bmod -@var{mod}} exists (see @code{mpz_invert} in @ref{Number Theoretic Functions}). -If an inverse doesn't exist then a divide by zero is raised. -@end deftypefun - -@deftypefun void mpz_powm_sec (mpz_t @var{rop}, const mpz_t @var{base}, const mpz_t @var{exp}, const mpz_t @var{mod}) -Set @var{rop} to @m{base^{exp} \bmod @var{mod}, (@var{base} raised to @var{exp}) -modulo @var{mod}}. - -It is required that @math{@var{exp} > 0} and that @var{mod} is odd. - -This function is designed to take the same time and have the same cache access -patterns for any two same-size arguments, assuming that function arguments are -placed at the same position and that the machine state is identical upon -function entry. This function is intended for cryptographic purposes, where -resilience to side-channel attacks is desired. -@end deftypefun - -@deftypefun void mpz_pow_ui (mpz_t @var{rop}, const mpz_t @var{base}, unsigned long int @var{exp}) -@deftypefunx void mpz_ui_pow_ui (mpz_t @var{rop}, unsigned long int @var{base}, unsigned long int @var{exp}) -Set @var{rop} to @m{base^{exp}, @var{base} raised to @var{exp}}. The case -@math{0^0} yields 1. -@end deftypefun - - -@need 2000 -@node Integer Roots, Number Theoretic Functions, Integer Exponentiation, Integer Functions -@section Root Extraction Functions -@cindex Integer root functions -@cindex Root extraction functions - -@deftypefun int mpz_root (mpz_t @var{rop}, const mpz_t @var{op}, unsigned long int @var{n}) -Set @var{rop} to @m{\lfloor\root n \of {op}\rfloor@C{},} the truncated integer -part of the @var{n}th root of @var{op}. Return non-zero if the computation -was exact, i.e., if @var{op} is @var{rop} to the @var{n}th power. -@end deftypefun - -@deftypefun void mpz_rootrem (mpz_t @var{root}, mpz_t @var{rem}, const mpz_t @var{u}, unsigned long int @var{n}) -Set @var{root} to @m{\lfloor\root n \of {u}\rfloor@C{},} the truncated -integer part of the @var{n}th root of @var{u}. Set @var{rem} to the -remainder, @m{(@var{u} - @var{root}^n), -@var{u}@minus{}@var{root}**@var{n}}. -@end deftypefun - -@deftypefun void mpz_sqrt (mpz_t @var{rop}, const mpz_t @var{op}) -Set @var{rop} to @m{\lfloor\sqrt{@var{op}}\rfloor@C{},} the truncated -integer part of the square root of @var{op}. -@end deftypefun - -@deftypefun void mpz_sqrtrem (mpz_t @var{rop1}, mpz_t @var{rop2}, const mpz_t @var{op}) -Set @var{rop1} to @m{\lfloor\sqrt{@var{op}}\rfloor, the truncated integer part -of the square root of @var{op}}, like @code{mpz_sqrt}. Set @var{rop2} to the -remainder @m{(@var{op} - @var{rop1}^2), -@var{op}@minus{}@var{rop1}*@var{rop1}}, which will be zero if @var{op} is a -perfect square. - -If @var{rop1} and @var{rop2} are the same variable, the results are -undefined. -@end deftypefun - -@deftypefun int mpz_perfect_power_p (const mpz_t @var{op}) -@cindex Perfect power functions -@cindex Root testing functions -Return non-zero if @var{op} is a perfect power, i.e., if there exist integers -@m{a,@var{a}} and @m{b,@var{b}}, with @m{b>1, @var{b}>1}, such that -@m{@var{op}=a^b, @var{op} equals @var{a} raised to the power @var{b}}. - -Under this definition both 0 and 1 are considered to be perfect powers. -Negative values of @var{op} are accepted, but of course can only be odd -perfect powers. -@end deftypefun - -@deftypefun int mpz_perfect_square_p (const mpz_t @var{op}) -@cindex Perfect square functions -@cindex Root testing functions -Return non-zero if @var{op} is a perfect square, i.e., if the square root of -@var{op} is an integer. Under this definition both 0 and 1 are considered to -be perfect squares. -@end deftypefun - - -@need 2000 -@node Number Theoretic Functions, Integer Comparisons, Integer Roots, Integer Functions -@section Number Theoretic Functions -@cindex Number theoretic functions - -@deftypefun int mpz_probab_prime_p (const mpz_t @var{n}, int @var{reps}) -@cindex Prime testing functions -@cindex Probable prime testing functions -Determine whether @var{n} is prime. Return 2 if @var{n} is definitely prime, -return 1 if @var{n} is probably prime (without being certain), or return 0 if -@var{n} is definitely non-prime. - -This function performs some trial divisions, then @var{reps} Miller-Rabin -probabilistic primality tests. A higher @var{reps} value will reduce the -chances of a non-prime being identified as ``probably prime''. A composite -number will be identified as a prime with a probability of less than -@m{4^{-reps},4^(-@var{reps})}. Reasonable values of @var{reps} are between 15 -and 50. -@end deftypefun - -@deftypefun void mpz_nextprime (mpz_t @var{rop}, const mpz_t @var{op}) -@cindex Next prime function -Set @var{rop} to the next prime greater than @var{op}. - -This function uses a probabilistic algorithm to identify primes. For -practical purposes it's adequate, the chance of a composite passing will be -extremely small. -@end deftypefun - -@c mpz_prime_p not implemented as of gmp 3.0. - -@c @deftypefun int mpz_prime_p (const mpz_t @var{n}) -@c Return non-zero if @var{n} is prime and zero if @var{n} is a non-prime. -@c This function is far slower than @code{mpz_probab_prime_p}, but then it -@c never returns non-zero for composite numbers. - -@c (For practical purposes, using @code{mpz_probab_prime_p} is adequate. -@c The likelihood of a programming error or hardware malfunction is orders -@c of magnitudes greater than the likelihood for a composite to pass as a -@c prime, if the @var{reps} argument is in the suggested range.) -@c @end deftypefun - -@deftypefun void mpz_gcd (mpz_t @var{rop}, const mpz_t @var{op1}, const mpz_t @var{op2}) -@cindex Greatest common divisor functions -@cindex GCD functions -Set @var{rop} to the greatest common divisor of @var{op1} and @var{op2}. The -result is always positive even if one or both input operands are negative. -Except if both inputs are zero; then this function defines @math{gcd(0,0) = 0}. -@end deftypefun - -@deftypefun {unsigned long int} mpz_gcd_ui (mpz_t @var{rop}, const mpz_t @var{op1}, unsigned long int @var{op2}) -Compute the greatest common divisor of @var{op1} and @var{op2}. If -@var{rop} is not @code{NULL}, store the result there. - -If the result is small enough to fit in an @code{unsigned long int}, it is -returned. If the result does not fit, 0 is returned, and the result is equal -to the argument @var{op1}. Note that the result will always fit if @var{op2} -is non-zero. -@end deftypefun - -@deftypefun void mpz_gcdext (mpz_t @var{g}, mpz_t @var{s}, mpz_t @var{t}, const mpz_t @var{a}, const mpz_t @var{b}) -@cindex Extended GCD -@cindex GCD extended -Set @var{g} to the greatest common divisor of @var{a} and @var{b}, and in -addition set @var{s} and @var{t} to coefficients satisfying -@math{@var{a}@GMPmultiply{}@var{s} + @var{b}@GMPmultiply{}@var{t} = @var{g}}. -The value in @var{g} is always positive, even if one or both of @var{a} and -@var{b} are negative (or zero if both inputs are zero). The values in @var{s} -and @var{t} are chosen such that normally, @math{@GMPabs{@var{s}} < -@GMPabs{@var{b}} / (2 @var{g})} and @math{@GMPabs{@var{t}} < @GMPabs{@var{a}} -/ (2 @var{g})}, and these relations define @var{s} and @var{t} uniquely. There -are a few exceptional cases: - -If @math{@GMPabs{@var{a}} = @GMPabs{@var{b}}}, then @math{@var{s} = 0}, -@math{@var{t} = sgn(@var{b})}. - -Otherwise, @math{@var{s} = sgn(@var{a})} if @math{@var{b} = 0} or -@math{@GMPabs{@var{b}} = 2 @var{g}}, and @math{@var{t} = sgn(@var{b})} if -@math{@var{a} = 0} or @math{@GMPabs{@var{a}} = 2 @var{g}}. - -In all cases, @math{@var{s} = 0} if and only if @math{@var{g} = -@GMPabs{@var{b}}}, i.e., if @var{b} divides @var{a} or @math{@var{a} = @var{b} -= 0}. - -If @var{t} is @code{NULL} then that value is not computed. -@end deftypefun - -@deftypefun void mpz_lcm (mpz_t @var{rop}, const mpz_t @var{op1}, const mpz_t @var{op2}) -@deftypefunx void mpz_lcm_ui (mpz_t @var{rop}, const mpz_t @var{op1}, unsigned long @var{op2}) -@cindex Least common multiple functions -@cindex LCM functions -Set @var{rop} to the least common multiple of @var{op1} and @var{op2}. -@var{rop} is always positive, irrespective of the signs of @var{op1} and -@var{op2}. @var{rop} will be zero if either @var{op1} or @var{op2} is zero. -@end deftypefun - -@deftypefun int mpz_invert (mpz_t @var{rop}, const mpz_t @var{op1}, const mpz_t @var{op2}) -@cindex Modular inverse functions -@cindex Inverse modulo functions -Compute the inverse of @var{op1} modulo @var{op2} and put the result in -@var{rop}. If the inverse exists, the return value is non-zero and @var{rop} -will satisfy @math{0 @le{} @var{rop} < @GMPabs{@var{op2}}} (with @math{@var{rop} -= 0} possible only when @math{@GMPabs{@var{op2}} = 1}, i.e., in the -somewhat degenerate zero ring). If an inverse doesn't -exist the return value is zero and @var{rop} is undefined. The behaviour of -this function is undefined when @var{op2} is zero. -@end deftypefun - -@deftypefun int mpz_jacobi (const mpz_t @var{a}, const mpz_t @var{b}) -@cindex Jacobi symbol functions -Calculate the Jacobi symbol @m{\left(a \over b\right), -(@var{a}/@var{b})}. This is defined only for @var{b} odd. -@end deftypefun - -@deftypefun int mpz_legendre (const mpz_t @var{a}, const mpz_t @var{p}) -@cindex Legendre symbol functions -Calculate the Legendre symbol @m{\left(a \over p\right), -(@var{a}/@var{p})}. This is defined only for @var{p} an odd positive -prime, and for such @var{p} it's identical to the Jacobi symbol. -@end deftypefun - -@deftypefun int mpz_kronecker (const mpz_t @var{a}, const mpz_t @var{b}) -@deftypefunx int mpz_kronecker_si (const mpz_t @var{a}, long @var{b}) -@deftypefunx int mpz_kronecker_ui (const mpz_t @var{a}, unsigned long @var{b}) -@deftypefunx int mpz_si_kronecker (long @var{a}, const mpz_t @var{b}) -@deftypefunx int mpz_ui_kronecker (unsigned long @var{a}, const mpz_t @var{b}) -@cindex Kronecker symbol functions -Calculate the Jacobi symbol @m{\left(a \over b\right), -(@var{a}/@var{b})} with the Kronecker extension @m{\left(a \over -2\right) = \left(2 \over a\right), (a/2)=(2/a)} when @math{a} odd, or -@m{\left(a \over 2\right) = 0, (a/2)=0} when @math{a} even. - -When @var{b} is odd the Jacobi symbol and Kronecker symbol are -identical, so @code{mpz_kronecker_ui} etc can be used for mixed -precision Jacobi symbols too. - -For more information see Henri Cohen section 1.4.2 (@pxref{References}), -or any number theory textbook. See also the example program -@file{demos/qcn.c} which uses @code{mpz_kronecker_ui}. -@end deftypefun - -@deftypefun {mp_bitcnt_t} mpz_remove (mpz_t @var{rop}, const mpz_t @var{op}, const mpz_t @var{f}) -@cindex Remove factor functions -@cindex Factor removal functions -Remove all occurrences of the factor @var{f} from @var{op} and store the -result in @var{rop}. The return value is how many such occurrences were -removed. -@end deftypefun - -@deftypefun void mpz_fac_ui (mpz_t @var{rop}, unsigned long int @var{n}) -@deftypefunx void mpz_2fac_ui (mpz_t @var{rop}, unsigned long int @var{n}) -@deftypefunx void mpz_mfac_uiui (mpz_t @var{rop}, unsigned long int @var{n}, unsigned long int @var{m}) -@cindex Factorial functions -Set @var{rop} to the factorial of @var{n}: @code{mpz_fac_ui} computes the plain factorial @var{n}!, -@code{mpz_2fac_ui} computes the double-factorial @var{n}!!, and @code{mpz_mfac_uiui} the -@var{m}-multi-factorial @m{n!^{(m)}, @var{n}!^(@var{m})}. -@end deftypefun - -@deftypefun void mpz_primorial_ui (mpz_t @var{rop}, unsigned long int @var{n}) -@cindex Primorial functions -Set @var{rop} to the primorial of @var{n}, i.e. the product of all positive -prime numbers @math{@le{}@var{n}}. -@end deftypefun - -@deftypefun void mpz_bin_ui (mpz_t @var{rop}, const mpz_t @var{n}, unsigned long int @var{k}) -@deftypefunx void mpz_bin_uiui (mpz_t @var{rop}, unsigned long int @var{n}, @w{unsigned long int @var{k}}) -@cindex Binomial coefficient functions -Compute the binomial coefficient @m{\left({n}\atop{k}\right), @var{n} over -@var{k}} and store the result in @var{rop}. Negative values of @var{n} are -supported by @code{mpz_bin_ui}, using the identity -@m{\left({-n}\atop{k}\right) = (-1)^k \left({n+k-1}\atop{k}\right), -bin(-n@C{}k) = (-1)^k * bin(n+k-1@C{}k)}, see Knuth volume 1 section 1.2.6 -part G. -@end deftypefun - -@deftypefun void mpz_fib_ui (mpz_t @var{fn}, unsigned long int @var{n}) -@deftypefunx void mpz_fib2_ui (mpz_t @var{fn}, mpz_t @var{fnsub1}, unsigned long int @var{n}) -@cindex Fibonacci sequence functions -@code{mpz_fib_ui} sets @var{fn} to to @m{F_n,F[n]}, the @var{n}'th Fibonacci -number. @code{mpz_fib2_ui} sets @var{fn} to @m{F_n,F[n]}, and @var{fnsub1} to -@m{F_{n-1},F[n-1]}. - -These functions are designed for calculating isolated Fibonacci numbers. When -a sequence of values is wanted it's best to start with @code{mpz_fib2_ui} and -iterate the defining @m{F_{n+1} = F_n + F_{n-1}, F[n+1]=F[n]+F[n-1]} or -similar. -@end deftypefun - -@deftypefun void mpz_lucnum_ui (mpz_t @var{ln}, unsigned long int @var{n}) -@deftypefunx void mpz_lucnum2_ui (mpz_t @var{ln}, mpz_t @var{lnsub1}, unsigned long int @var{n}) -@cindex Lucas number functions -@code{mpz_lucnum_ui} sets @var{ln} to to @m{L_n,L[n]}, the @var{n}'th Lucas -number. @code{mpz_lucnum2_ui} sets @var{ln} to @m{L_n,L[n]}, and @var{lnsub1} -to @m{L_{n-1},L[n-1]}. - -These functions are designed for calculating isolated Lucas numbers. When a -sequence of values is wanted it's best to start with @code{mpz_lucnum2_ui} and -iterate the defining @m{L_{n+1} = L_n + L_{n-1}, L[n+1]=L[n]+L[n-1]} or -similar. - -The Fibonacci numbers and Lucas numbers are related sequences, so it's never -necessary to call both @code{mpz_fib2_ui} and @code{mpz_lucnum2_ui}. The -formulas for going from Fibonacci to Lucas can be found in @ref{Lucas Numbers -Algorithm}, the reverse is straightforward too. -@end deftypefun - - -@node Integer Comparisons, Integer Logic and Bit Fiddling, Number Theoretic Functions, Integer Functions -@comment node-name, next, previous, up -@section Comparison Functions -@cindex Integer comparison functions -@cindex Comparison functions - -@deftypefn Function int mpz_cmp (const mpz_t @var{op1}, const mpz_t @var{op2}) -@deftypefnx Function int mpz_cmp_d (const mpz_t @var{op1}, double @var{op2}) -@deftypefnx Macro int mpz_cmp_si (const mpz_t @var{op1}, signed long int @var{op2}) -@deftypefnx Macro int mpz_cmp_ui (const mpz_t @var{op1}, unsigned long int @var{op2}) -Compare @var{op1} and @var{op2}. Return a positive value if @math{@var{op1} > -@var{op2}}, zero if @math{@var{op1} = @var{op2}}, or a negative value if -@math{@var{op1} < @var{op2}}. - -@code{mpz_cmp_ui} and @code{mpz_cmp_si} are macros and will evaluate their -arguments more than once. @code{mpz_cmp_d} can be called with an infinity, -but results are undefined for a NaN. -@end deftypefn - -@deftypefn Function int mpz_cmpabs (const mpz_t @var{op1}, const mpz_t @var{op2}) -@deftypefnx Function int mpz_cmpabs_d (const mpz_t @var{op1}, double @var{op2}) -@deftypefnx Function int mpz_cmpabs_ui (const mpz_t @var{op1}, unsigned long int @var{op2}) -Compare the absolute values of @var{op1} and @var{op2}. Return a positive -value if @math{@GMPabs{@var{op1}} > @GMPabs{@var{op2}}}, zero if -@math{@GMPabs{@var{op1}} = @GMPabs{@var{op2}}}, or a negative value if -@math{@GMPabs{@var{op1}} < @GMPabs{@var{op2}}}. - -@code{mpz_cmpabs_d} can be called with an infinity, but results are undefined -for a NaN. -@end deftypefn - -@deftypefn Macro int mpz_sgn (const mpz_t @var{op}) -@cindex Sign tests -@cindex Integer sign tests -Return @math{+1} if @math{@var{op} > 0}, 0 if @math{@var{op} = 0}, and -@math{-1} if @math{@var{op} < 0}. - -This function is actually implemented as a macro. It evaluates its argument -multiple times. -@end deftypefn - - -@node Integer Logic and Bit Fiddling, I/O of Integers, Integer Comparisons, Integer Functions -@comment node-name, next, previous, up -@section Logical and Bit Manipulation Functions -@cindex Logical functions -@cindex Bit manipulation functions -@cindex Integer logical functions -@cindex Integer bit manipulation functions - -These functions behave as if twos complement arithmetic were used (although -sign-magnitude is the actual implementation). The least significant bit is -number 0. - -@deftypefun void mpz_and (mpz_t @var{rop}, const mpz_t @var{op1}, const mpz_t @var{op2}) -Set @var{rop} to @var{op1} bitwise-and @var{op2}. -@end deftypefun - -@deftypefun void mpz_ior (mpz_t @var{rop}, const mpz_t @var{op1}, const mpz_t @var{op2}) -Set @var{rop} to @var{op1} bitwise inclusive-or @var{op2}. -@end deftypefun - -@deftypefun void mpz_xor (mpz_t @var{rop}, const mpz_t @var{op1}, const mpz_t @var{op2}) -Set @var{rop} to @var{op1} bitwise exclusive-or @var{op2}. -@end deftypefun - -@deftypefun void mpz_com (mpz_t @var{rop}, const mpz_t @var{op}) -Set @var{rop} to the one's complement of @var{op}. -@end deftypefun - -@deftypefun {mp_bitcnt_t} mpz_popcount (const mpz_t @var{op}) -If @math{@var{op}@ge{}0}, return the population count of @var{op}, which is the -number of 1 bits in the binary representation. If @math{@var{op}<0}, the -number of 1s is infinite, and the return value is the largest possible -@code{mp_bitcnt_t}. -@end deftypefun - -@deftypefun {mp_bitcnt_t} mpz_hamdist (const mpz_t @var{op1}, const mpz_t @var{op2}) -If @var{op1} and @var{op2} are both @math{@ge{}0} or both @math{<0}, return the -hamming distance between the two operands, which is the number of bit positions -where @var{op1} and @var{op2} have different bit values. If one operand is -@math{@ge{}0} and the other @math{<0} then the number of bits different is -infinite, and the return value is the largest possible @code{mp_bitcnt_t}. -@end deftypefun - -@deftypefun {mp_bitcnt_t} mpz_scan0 (const mpz_t @var{op}, mp_bitcnt_t @var{starting_bit}) -@deftypefunx {mp_bitcnt_t} mpz_scan1 (const mpz_t @var{op}, mp_bitcnt_t @var{starting_bit}) -@cindex Bit scanning functions -@cindex Scan bit functions -Scan @var{op}, starting from bit @var{starting_bit}, towards more significant -bits, until the first 0 or 1 bit (respectively) is found. Return the index of -the found bit. - -If the bit at @var{starting_bit} is already what's sought, then -@var{starting_bit} is returned. - -If there's no bit found, then the largest possible @code{mp_bitcnt_t} is -returned. This will happen in @code{mpz_scan0} past the end of a negative -number, or @code{mpz_scan1} past the end of a nonnegative number. -@end deftypefun - -@deftypefun void mpz_setbit (mpz_t @var{rop}, mp_bitcnt_t @var{bit_index}) -Set bit @var{bit_index} in @var{rop}. -@end deftypefun - -@deftypefun void mpz_clrbit (mpz_t @var{rop}, mp_bitcnt_t @var{bit_index}) -Clear bit @var{bit_index} in @var{rop}. -@end deftypefun - -@deftypefun void mpz_combit (mpz_t @var{rop}, mp_bitcnt_t @var{bit_index}) -Complement bit @var{bit_index} in @var{rop}. -@end deftypefun - -@deftypefun int mpz_tstbit (const mpz_t @var{op}, mp_bitcnt_t @var{bit_index}) -Test bit @var{bit_index} in @var{op} and return 0 or 1 accordingly. -@end deftypefun - -@node I/O of Integers, Integer Random Numbers, Integer Logic and Bit Fiddling, Integer Functions -@comment node-name, next, previous, up -@section Input and Output Functions -@cindex Integer input and output functions -@cindex Input functions -@cindex Output functions -@cindex I/O functions - -Functions that perform input from a stdio stream, and functions that output to -a stdio stream, of @code{mpz} numbers. Passing a @code{NULL} pointer for a -@var{stream} argument to any of these functions will make them read from -@code{stdin} and write to @code{stdout}, respectively. - -When using any of these functions, it is a good idea to include @file{stdio.h} -before @file{gmp.h}, since that will allow @file{gmp.h} to define prototypes -for these functions. - -See also @ref{Formatted Output} and @ref{Formatted Input}. - -@deftypefun size_t mpz_out_str (FILE *@var{stream}, int @var{base}, const mpz_t @var{op}) -Output @var{op} on stdio stream @var{stream}, as a string of digits in base -@var{base}. The base argument may vary from 2 to 62 or from @minus{}2 to -@minus{}36. - -For @var{base} in the range 2..36, digits and lower-case letters are used; for -@minus{}2..@minus{}36, digits and upper-case letters are used; for 37..62, -digits, upper-case letters, and lower-case letters (in that significance order) -are used. - -Return the number of bytes written, or if an error occurred, return 0. -@end deftypefun - -@deftypefun size_t mpz_inp_str (mpz_t @var{rop}, FILE *@var{stream}, int @var{base}) -Input a possibly white-space preceded string in base @var{base} from stdio -stream @var{stream}, and put the read integer in @var{rop}. - -The @var{base} may vary from 2 to 62, or if @var{base} is 0, then the leading -characters are used: @code{0x} and @code{0X} for hexadecimal, @code{0b} and -@code{0B} for binary, @code{0} for octal, or decimal otherwise. - -For bases up to 36, case is ignored; upper-case and lower-case letters have -the same value. For bases 37 to 62, upper-case letter represent the usual -10..35 while lower-case letter represent 36..61. - -Return the number of bytes read, or if an error occurred, return 0. -@end deftypefun - -@deftypefun size_t mpz_out_raw (FILE *@var{stream}, const mpz_t @var{op}) -Output @var{op} on stdio stream @var{stream}, in raw binary format. The -integer is written in a portable format, with 4 bytes of size information, and -that many bytes of limbs. Both the size and the limbs are written in -decreasing significance order (i.e., in big-endian). - -The output can be read with @code{mpz_inp_raw}. - -Return the number of bytes written, or if an error occurred, return 0. - -The output of this can not be read by @code{mpz_inp_raw} from GMP 1, because -of changes necessary for compatibility between 32-bit and 64-bit machines. -@end deftypefun - -@deftypefun size_t mpz_inp_raw (mpz_t @var{rop}, FILE *@var{stream}) -Input from stdio stream @var{stream} in the format written by -@code{mpz_out_raw}, and put the result in @var{rop}. Return the number of -bytes read, or if an error occurred, return 0. - -This routine can read the output from @code{mpz_out_raw} also from GMP 1, in -spite of changes necessary for compatibility between 32-bit and 64-bit -machines. -@end deftypefun - - -@need 2000 -@node Integer Random Numbers, Integer Import and Export, I/O of Integers, Integer Functions -@comment node-name, next, previous, up -@section Random Number Functions -@cindex Integer random number functions -@cindex Random number functions - -The random number functions of GMP come in two groups; older function -that rely on a global state, and newer functions that accept a state -parameter that is read and modified. Please see the @ref{Random Number -Functions} for more information on how to use and not to use random -number functions. - -@deftypefun void mpz_urandomb (mpz_t @var{rop}, gmp_randstate_t @var{state}, mp_bitcnt_t @var{n}) -Generate a uniformly distributed random integer in the range 0 to @m{2^n-1, -2^@var{n}@minus{}1}, inclusive. - -The variable @var{state} must be initialized by calling one of the -@code{gmp_randinit} functions (@ref{Random State Initialization}) before -invoking this function. -@end deftypefun - -@deftypefun void mpz_urandomm (mpz_t @var{rop}, gmp_randstate_t @var{state}, const mpz_t @var{n}) -Generate a uniform random integer in the range 0 to @math{@var{n}-1}, -inclusive. - -The variable @var{state} must be initialized by calling one of the -@code{gmp_randinit} functions (@ref{Random State Initialization}) -before invoking this function. -@end deftypefun - -@deftypefun void mpz_rrandomb (mpz_t @var{rop}, gmp_randstate_t @var{state}, mp_bitcnt_t @var{n}) -Generate a random integer with long strings of zeros and ones in the -binary representation. Useful for testing functions and algorithms, -since this kind of random numbers have proven to be more likely to -trigger corner-case bugs. The random number will be in the range -0 to @m{2^n-1, 2^@var{n}@minus{}1}, inclusive. - -The variable @var{state} must be initialized by calling one of the -@code{gmp_randinit} functions (@ref{Random State Initialization}) -before invoking this function. -@end deftypefun - -@deftypefun void mpz_random (mpz_t @var{rop}, mp_size_t @var{max_size}) -Generate a random integer of at most @var{max_size} limbs. The generated -random number doesn't satisfy any particular requirements of randomness. -Negative random numbers are generated when @var{max_size} is negative. - -This function is obsolete. Use @code{mpz_urandomb} or -@code{mpz_urandomm} instead. -@end deftypefun - -@deftypefun void mpz_random2 (mpz_t @var{rop}, mp_size_t @var{max_size}) -Generate a random integer of at most @var{max_size} limbs, with long strings -of zeros and ones in the binary representation. Useful for testing functions -and algorithms, since this kind of random numbers have proven to be more -likely to trigger corner-case bugs. Negative random numbers are generated -when @var{max_size} is negative. - -This function is obsolete. Use @code{mpz_rrandomb} instead. -@end deftypefun - - -@node Integer Import and Export, Miscellaneous Integer Functions, Integer Random Numbers, Integer Functions -@section Integer Import and Export - -@code{mpz_t} variables can be converted to and from arbitrary words of binary -data with the following functions. - -@deftypefun void mpz_import (mpz_t @var{rop}, size_t @var{count}, int @var{order}, size_t @var{size}, int @var{endian}, size_t @var{nails}, const void *@var{op}) -@cindex Integer import -@cindex Import -Set @var{rop} from an array of word data at @var{op}. - -The parameters specify the format of the data. @var{count} many words are -read, each @var{size} bytes. @var{order} can be 1 for most significant word -first or -1 for least significant first. Within each word @var{endian} can be -1 for most significant byte first, -1 for least significant first, or 0 for -the native endianness of the host CPU@. The most significant @var{nails} bits -of each word are skipped, this can be 0 to use the full words. - -There is no sign taken from the data, @var{rop} will simply be a positive -integer. An application can handle any sign itself, and apply it for instance -with @code{mpz_neg}. - -There are no data alignment restrictions on @var{op}, any address is allowed. - -Here's an example converting an array of @code{unsigned long} data, most -significant element first, and host byte order within each value. - -@example -unsigned long a[20]; -/* Initialize @var{z} and @var{a} */ -mpz_import (z, 20, 1, sizeof(a[0]), 0, 0, a); -@end example - -This example assumes the full @code{sizeof} bytes are used for data in the -given type, which is usually true, and certainly true for @code{unsigned long} -everywhere we know of. However on Cray vector systems it may be noted that -@code{short} and @code{int} are always stored in 8 bytes (and with -@code{sizeof} indicating that) but use only 32 or 46 bits. The @var{nails} -feature can account for this, by passing for instance -@code{8*sizeof(int)-INT_BIT}. -@end deftypefun - -@deftypefun {void *} mpz_export (void *@var{rop}, size_t *@var{countp}, int @var{order}, size_t @var{size}, int @var{endian}, size_t @var{nails}, const mpz_t @var{op}) -@cindex Integer export -@cindex Export -Fill @var{rop} with word data from @var{op}. - -The parameters specify the format of the data produced. Each word will be -@var{size} bytes and @var{order} can be 1 for most significant word first or --1 for least significant first. Within each word @var{endian} can be 1 for -most significant byte first, -1 for least significant first, or 0 for the -native endianness of the host CPU@. The most significant @var{nails} bits of -each word are unused and set to zero, this can be 0 to produce full words. - -The number of words produced is written to @code{*@var{countp}}, or -@var{countp} can be @code{NULL} to discard the count. @var{rop} must have -enough space for the data, or if @var{rop} is @code{NULL} then a result array -of the necessary size is allocated using the current GMP allocation function -(@pxref{Custom Allocation}). In either case the return value is the -destination used, either @var{rop} or the allocated block. - -If @var{op} is non-zero then the most significant word produced will be -non-zero. If @var{op} is zero then the count returned will be zero and -nothing written to @var{rop}. If @var{rop} is @code{NULL} in this case, no -block is allocated, just @code{NULL} is returned. - -The sign of @var{op} is ignored, just the absolute value is exported. An -application can use @code{mpz_sgn} to get the sign and handle it as desired. -(@pxref{Integer Comparisons}) - -There are no data alignment restrictions on @var{rop}, any address is allowed. - -When an application is allocating space itself the required size can be -determined with a calculation like the following. Since @code{mpz_sizeinbase} -always returns at least 1, @code{count} here will be at least one, which -avoids any portability problems with @code{malloc(0)}, though if @code{z} is -zero no space at all is actually needed (or written). - -@example -numb = 8*size - nail; -count = (mpz_sizeinbase (z, 2) + numb-1) / numb; -p = malloc (count * size); -@end example -@end deftypefun - - -@need 2000 -@node Miscellaneous Integer Functions, Integer Special Functions, Integer Import and Export, Integer Functions -@comment node-name, next, previous, up -@section Miscellaneous Functions -@cindex Miscellaneous integer functions -@cindex Integer miscellaneous functions - -@deftypefun int mpz_fits_ulong_p (const mpz_t @var{op}) -@deftypefunx int mpz_fits_slong_p (const mpz_t @var{op}) -@deftypefunx int mpz_fits_uint_p (const mpz_t @var{op}) -@deftypefunx int mpz_fits_sint_p (const mpz_t @var{op}) -@deftypefunx int mpz_fits_ushort_p (const mpz_t @var{op}) -@deftypefunx int mpz_fits_sshort_p (const mpz_t @var{op}) -Return non-zero iff the value of @var{op} fits in an @code{unsigned long int}, -@code{signed long int}, @code{unsigned int}, @code{signed int}, @code{unsigned -short int}, or @code{signed short int}, respectively. Otherwise, return zero. -@end deftypefun - -@deftypefn Macro int mpz_odd_p (const mpz_t @var{op}) -@deftypefnx Macro int mpz_even_p (const mpz_t @var{op}) -Determine whether @var{op} is odd or even, respectively. Return non-zero if -yes, zero if no. These macros evaluate their argument more than once. -@end deftypefn - -@deftypefun size_t mpz_sizeinbase (const mpz_t @var{op}, int @var{base}) -@cindex Size in digits -@cindex Digits in an integer -Return the size of @var{op} measured in number of digits in the given -@var{base}. @var{base} can vary from 2 to 62. The sign of @var{op} is -ignored, just the absolute value is used. The result will be either exact or -1 too big. If @var{base} is a power of 2, the result is always exact. If -@var{op} is zero the return value is always 1. - -This function can be used to determine the space required when converting -@var{op} to a string. The right amount of allocation is normally two more -than the value returned by @code{mpz_sizeinbase}, one extra for a minus sign -and one for the null-terminator. - -@cindex Most significant bit -It will be noted that @code{mpz_sizeinbase(@var{op},2)} can be used to locate -the most significant 1 bit in @var{op}, counting from 1. (Unlike the bitwise -functions which start from 0, @xref{Integer Logic and Bit Fiddling,, Logical -and Bit Manipulation Functions}.) -@end deftypefun - - -@node Integer Special Functions, , Miscellaneous Integer Functions, Integer Functions -@section Special Functions -@cindex Special integer functions -@cindex Integer special functions - -The functions in this section are for various special purposes. Most -applications will not need them. - -@deftypefun void mpz_array_init (mpz_t @var{integer_array}, mp_size_t @var{array_size}, @w{mp_size_t @var{fixed_num_bits}}) -@strong{This is an obsolete function. Do not use it.} -@end deftypefun - -@deftypefun {void *} _mpz_realloc (mpz_t @var{integer}, mp_size_t @var{new_alloc}) -Change the space for @var{integer} to @var{new_alloc} limbs. The value in -@var{integer} is preserved if it fits, or is set to 0 if not. The return -value is not useful to applications and should be ignored. - -@code{mpz_realloc2} is the preferred way to accomplish allocation changes like -this. @code{mpz_realloc2} and @code{_mpz_realloc} are the same except that -@code{_mpz_realloc} takes its size in limbs. -@end deftypefun - -@deftypefun mp_limb_t mpz_getlimbn (const mpz_t @var{op}, mp_size_t @var{n}) -Return limb number @var{n} from @var{op}. The sign of @var{op} is ignored, -just the absolute value is used. The least significant limb is number 0. - -@code{mpz_size} can be used to find how many limbs make up @var{op}. -@code{mpz_getlimbn} returns zero if @var{n} is outside the range 0 to -@code{mpz_size(@var{op})-1}. -@end deftypefun - -@deftypefun size_t mpz_size (const mpz_t @var{op}) -Return the size of @var{op} measured in number of limbs. If @var{op} is zero, -the returned value will be zero. -@c (@xref{Nomenclature}, for an explanation of the concept @dfn{limb}.) -@end deftypefun - -@deftypefun {const mp_limb_t *} mpz_limbs_read (const mpz_t @var{x}) -Return a pointer to the limb array representing the absolute value of @var{x}. -The size of the array is @code{mpz_size(@var{x})}. Intended for read access -only. -@end deftypefun - -@deftypefun {mp_limb_t *} mpz_limbs_write (mpz_t @var{x}, mp_size_t @var{n}) -@deftypefunx {mp_limb_t *} mpz_limbs_modify (mpz_t @var{x}, mp_size_t @var{n}) -Return a pointer to the limb array, intended for write access. The array is -reallocated as needed, to make room for @var{n} limbs. Requires @math{@var{n} -> 0}. The @code{mpz_limbs_modify} function returns an array that holds the old -absolute value of @var{x}, while @code{mpz_limbs_write} may destroy the old -value and return an array with unspecified contents. -@end deftypefun - -@deftypefun void mpz_limbs_finish (mpz_t @var{x}, mp_size_t @var{s}) -Updates the internal size field of @var{x}. Used after writing to the limb -array pointer returned by @code{mpz_limbs_write} or @code{mpz_limbs_modify} is -completed. The array should contain @math{@GMPabs{@var{s}}} valid limbs, -representing the new absolute value for @var{x}, and the sign of @var{x} is -taken from the sign of @var{s}. This function never reallocates @var{x}, so -the limb pointer remains valid. -@end deftypefun - -@c FIXME: Some more useful and less silly example? -@example -void foo (mpz_t x) -@{ - mp_size_t n, i; - mp_limb_t *xp; - - n = mpz_size (x); - xp = mpz_limbs_modify (x, 2*n); - for (i = 0; i < n; i++) - xp[n+i] = xp[n-1-i]; - mpz_limbs_finish (x, mpz_sgn (x) < 0 ? - 2*n : 2*n); -@} -@end example - -@deftypefun mpz_srcptr mpz_roinit_n (mpz_t @var{x}, const mp_limb_t *@var{xp}, mp_size_t @var{xs}) -Special initialization of @var{x}, using the given limb array and size. -@var{x} should be treated as read-only: it can be passed safely as input to -any mpz function, but not as an output. The array @var{xp} must point to at -least a readable limb, its size is -@math{@GMPabs{@var{xs}}}, and the sign of @var{x} is the sign of @var{xs}. For -convenience, the function returns @var{x}, but cast to a const pointer type. -@end deftypefun - -@example -void foo (mpz_t x) -@{ - static const mp_limb_t y[3] = @{ 0x1, 0x2, 0x3 @}; - mpz_t tmp; - mpz_add (x, x, mpz_roinit_n (tmp, y, 3)); -@} -@end example - -@deftypefn Macro mpz_t MPZ_ROINIT_N (mp_limb_t *@var{xp}, mp_size_t @var{xs}) -This macro expands to an initializer which can be assigned to an mpz_t -variable. The limb array @var{xp} must point to at least a readable limb, -moreover, unlike the @code{mpz_roinit_n} function, the array must be -normalized: if @var{xs} is non-zero, then -@code{@var{xp}[@math{@GMPabs{@var{xs}}-1}]} must be non-zero. Intended -primarily for constant values. Using it for non-constant values requires a C -compiler supporting C99. -@end deftypefn - -@example -void foo (mpz_t x) -@{ - static const mp_limb_t ya[3] = @{ 0x1, 0x2, 0x3 @}; - static const mpz_t y = MPZ_ROINIT_N ((mp_limb_t *) ya, 3); - - mpz_add (x, x, y); -@} -@end example - - -@node Rational Number Functions, Floating-point Functions, Integer Functions, Top -@comment node-name, next, previous, up -@chapter Rational Number Functions -@cindex Rational number functions - -This chapter describes the GMP functions for performing arithmetic on rational -numbers. These functions start with the prefix @code{mpq_}. - -Rational numbers are stored in objects of type @code{mpq_t}. - -All rational arithmetic functions assume operands have a canonical form, and -canonicalize their result. The canonical from means that the denominator and -the numerator have no common factors, and that the denominator is positive. -Zero has the unique representation 0/1. - -Pure assignment functions do not canonicalize the assigned variable. It is -the responsibility of the user to canonicalize the assigned variable before -any arithmetic operations are performed on that variable. - -@deftypefun void mpq_canonicalize (mpq_t @var{op}) -Remove any factors that are common to the numerator and denominator of -@var{op}, and make the denominator positive. -@end deftypefun - -@menu -* Initializing Rationals:: -* Rational Conversions:: -* Rational Arithmetic:: -* Comparing Rationals:: -* Applying Integer Functions:: -* I/O of Rationals:: -@end menu - -@node Initializing Rationals, Rational Conversions, Rational Number Functions, Rational Number Functions -@comment node-name, next, previous, up -@section Initialization and Assignment Functions -@cindex Rational assignment functions -@cindex Assignment functions -@cindex Rational initialization functions -@cindex Initialization functions - -@deftypefun void mpq_init (mpq_t @var{x}) -Initialize @var{x} and set it to 0/1. Each variable should normally only be -initialized once, or at least cleared out (using the function @code{mpq_clear}) -between each initialization. -@end deftypefun - -@deftypefun void mpq_inits (mpq_t @var{x}, ...) -Initialize a NULL-terminated list of @code{mpq_t} variables, and set their -values to 0/1. -@end deftypefun - -@deftypefun void mpq_clear (mpq_t @var{x}) -Free the space occupied by @var{x}. Make sure to call this function for all -@code{mpq_t} variables when you are done with them. -@end deftypefun - -@deftypefun void mpq_clears (mpq_t @var{x}, ...) -Free the space occupied by a NULL-terminated list of @code{mpq_t} variables. -@end deftypefun - -@deftypefun void mpq_set (mpq_t @var{rop}, const mpq_t @var{op}) -@deftypefunx void mpq_set_z (mpq_t @var{rop}, const mpz_t @var{op}) -Assign @var{rop} from @var{op}. -@end deftypefun - -@deftypefun void mpq_set_ui (mpq_t @var{rop}, unsigned long int @var{op1}, unsigned long int @var{op2}) -@deftypefunx void mpq_set_si (mpq_t @var{rop}, signed long int @var{op1}, unsigned long int @var{op2}) -Set the value of @var{rop} to @var{op1}/@var{op2}. Note that if @var{op1} and -@var{op2} have common factors, @var{rop} has to be passed to -@code{mpq_canonicalize} before any operations are performed on @var{rop}. -@end deftypefun - -@deftypefun int mpq_set_str (mpq_t @var{rop}, const char *@var{str}, int @var{base}) -Set @var{rop} from a null-terminated string @var{str} in the given @var{base}. - -The string can be an integer like ``41'' or a fraction like ``41/152''. The -fraction must be in canonical form (@pxref{Rational Number Functions}), or if -not then @code{mpq_canonicalize} must be called. - -The numerator and optional denominator are parsed the same as in -@code{mpz_set_str} (@pxref{Assigning Integers}). White space is allowed in -the string, and is simply ignored. The @var{base} can vary from 2 to 62, or -if @var{base} is 0 then the leading characters are used: @code{0x} or @code{0X} for hex, -@code{0b} or @code{0B} for binary, -@code{0} for octal, or decimal otherwise. Note that this is done separately -for the numerator and denominator, so for instance @code{0xEF/100} is 239/100, -whereas @code{0xEF/0x100} is 239/256. - -The return value is 0 if the entire string is a valid number, or @minus{}1 if -not. -@end deftypefun - -@deftypefun void mpq_swap (mpq_t @var{rop1}, mpq_t @var{rop2}) -Swap the values @var{rop1} and @var{rop2} efficiently. -@end deftypefun - - -@need 2000 -@node Rational Conversions, Rational Arithmetic, Initializing Rationals, Rational Number Functions -@comment node-name, next, previous, up -@section Conversion Functions -@cindex Rational conversion functions -@cindex Conversion functions - -@deftypefun double mpq_get_d (const mpq_t @var{op}) -Convert @var{op} to a @code{double}, truncating if necessary (i.e.@: rounding -towards zero). - -If the exponent from the conversion is too big or too small to fit a -@code{double} then the result is system dependent. For too big an infinity is -returned when available. For too small @math{0.0} is normally returned. -Hardware overflow, underflow and denorm traps may or may not occur. -@end deftypefun - -@deftypefun void mpq_set_d (mpq_t @var{rop}, double @var{op}) -@deftypefunx void mpq_set_f (mpq_t @var{rop}, const mpf_t @var{op}) -Set @var{rop} to the value of @var{op}. There is no rounding, this conversion -is exact. -@end deftypefun - -@deftypefun {char *} mpq_get_str (char *@var{str}, int @var{base}, const mpq_t @var{op}) -Convert @var{op} to a string of digits in base @var{base}. The base may vary -from 2 to 36. The string will be of the form @samp{num/den}, or if the -denominator is 1 then just @samp{num}. - -If @var{str} is @code{NULL}, the result string is allocated using the current -allocation function (@pxref{Custom Allocation}). The block will be -@code{strlen(str)+1} bytes, that being exactly enough for the string and -null-terminator. - -If @var{str} is not @code{NULL}, it should point to a block of storage large -enough for the result, that being - -@example -mpz_sizeinbase (mpq_numref(@var{op}), @var{base}) -+ mpz_sizeinbase (mpq_denref(@var{op}), @var{base}) + 3 -@end example - -The three extra bytes are for a possible minus sign, possible slash, and the -null-terminator. - -A pointer to the result string is returned, being either the allocated block, -or the given @var{str}. -@end deftypefun - - -@node Rational Arithmetic, Comparing Rationals, Rational Conversions, Rational Number Functions -@comment node-name, next, previous, up -@section Arithmetic Functions -@cindex Rational arithmetic functions -@cindex Arithmetic functions - -@deftypefun void mpq_add (mpq_t @var{sum}, const mpq_t @var{addend1}, const mpq_t @var{addend2}) -Set @var{sum} to @var{addend1} + @var{addend2}. -@end deftypefun - -@deftypefun void mpq_sub (mpq_t @var{difference}, const mpq_t @var{minuend}, const mpq_t @var{subtrahend}) -Set @var{difference} to @var{minuend} @minus{} @var{subtrahend}. -@end deftypefun - -@deftypefun void mpq_mul (mpq_t @var{product}, const mpq_t @var{multiplier}, const mpq_t @var{multiplicand}) -Set @var{product} to @math{@var{multiplier} @GMPtimes{} @var{multiplicand}}. -@end deftypefun - -@deftypefun void mpq_mul_2exp (mpq_t @var{rop}, const mpq_t @var{op1}, mp_bitcnt_t @var{op2}) -Set @var{rop} to @m{@var{op1} \times 2^{op2}, @var{op1} times 2 raised to -@var{op2}}. -@end deftypefun - -@deftypefun void mpq_div (mpq_t @var{quotient}, const mpq_t @var{dividend}, const mpq_t @var{divisor}) -@cindex Division functions -Set @var{quotient} to @var{dividend}/@var{divisor}. -@end deftypefun - -@deftypefun void mpq_div_2exp (mpq_t @var{rop}, const mpq_t @var{op1}, mp_bitcnt_t @var{op2}) -Set @var{rop} to @m{@var{op1}/2^{op2}, @var{op1} divided by 2 raised to -@var{op2}}. -@end deftypefun - -@deftypefun void mpq_neg (mpq_t @var{negated_operand}, const mpq_t @var{operand}) -Set @var{negated_operand} to @minus{}@var{operand}. -@end deftypefun - -@deftypefun void mpq_abs (mpq_t @var{rop}, const mpq_t @var{op}) -Set @var{rop} to the absolute value of @var{op}. -@end deftypefun - -@deftypefun void mpq_inv (mpq_t @var{inverted_number}, const mpq_t @var{number}) -Set @var{inverted_number} to 1/@var{number}. If the new denominator is -zero, this routine will divide by zero. -@end deftypefun - -@node Comparing Rationals, Applying Integer Functions, Rational Arithmetic, Rational Number Functions -@comment node-name, next, previous, up -@section Comparison Functions -@cindex Rational comparison functions -@cindex Comparison functions - -@deftypefun int mpq_cmp (const mpq_t @var{op1}, const mpq_t @var{op2}) -@deftypefunx int mpq_cmp_z (const mpq_t @var{op1}, const mpz_t @var{op2}) -Compare @var{op1} and @var{op2}. Return a positive value if @math{@var{op1} > -@var{op2}}, zero if @math{@var{op1} = @var{op2}}, and a negative value if -@math{@var{op1} < @var{op2}}. - -To determine if two rationals are equal, @code{mpq_equal} is faster than -@code{mpq_cmp}. -@end deftypefun - -@deftypefn Macro int mpq_cmp_ui (const mpq_t @var{op1}, unsigned long int @var{num2}, unsigned long int @var{den2}) -@deftypefnx Macro int mpq_cmp_si (const mpq_t @var{op1}, long int @var{num2}, unsigned long int @var{den2}) -Compare @var{op1} and @var{num2}/@var{den2}. Return a positive value if -@math{@var{op1} > @var{num2}/@var{den2}}, zero if @math{@var{op1} = -@var{num2}/@var{den2}}, and a negative value if @math{@var{op1} < -@var{num2}/@var{den2}}. - -@var{num2} and @var{den2} are allowed to have common factors. - -These functions are implemented as a macros and evaluate their arguments -multiple times. -@end deftypefn - -@deftypefn Macro int mpq_sgn (const mpq_t @var{op}) -@cindex Sign tests -@cindex Rational sign tests -Return @math{+1} if @math{@var{op} > 0}, 0 if @math{@var{op} = 0}, and -@math{-1} if @math{@var{op} < 0}. - -This function is actually implemented as a macro. It evaluates its -argument multiple times. -@end deftypefn - -@deftypefun int mpq_equal (const mpq_t @var{op1}, const mpq_t @var{op2}) -Return non-zero if @var{op1} and @var{op2} are equal, zero if they are -non-equal. Although @code{mpq_cmp} can be used for the same purpose, this -function is much faster. -@end deftypefun - -@node Applying Integer Functions, I/O of Rationals, Comparing Rationals, Rational Number Functions -@comment node-name, next, previous, up -@section Applying Integer Functions to Rationals -@cindex Rational numerator and denominator -@cindex Numerator and denominator - -The set of @code{mpq} functions is quite small. In particular, there are few -functions for either input or output. The following functions give direct -access to the numerator and denominator of an @code{mpq_t}. - -Note that if an assignment to the numerator and/or denominator could take an -@code{mpq_t} out of the canonical form described at the start of this chapter -(@pxref{Rational Number Functions}) then @code{mpq_canonicalize} must be -called before any other @code{mpq} functions are applied to that @code{mpq_t}. - -@deftypefn Macro mpz_t mpq_numref (const mpq_t @var{op}) -@deftypefnx Macro mpz_t mpq_denref (const mpq_t @var{op}) -Return a reference to the numerator and denominator of @var{op}, respectively. -The @code{mpz} functions can be used on the result of these macros. -@end deftypefn - -@deftypefun void mpq_get_num (mpz_t @var{numerator}, const mpq_t @var{rational}) -@deftypefunx void mpq_get_den (mpz_t @var{denominator}, const mpq_t @var{rational}) -@deftypefunx void mpq_set_num (mpq_t @var{rational}, const mpz_t @var{numerator}) -@deftypefunx void mpq_set_den (mpq_t @var{rational}, const mpz_t @var{denominator}) -Get or set the numerator or denominator of a rational. These functions are -equivalent to calling @code{mpz_set} with an appropriate @code{mpq_numref} or -@code{mpq_denref}. Direct use of @code{mpq_numref} or @code{mpq_denref} is -recommended instead of these functions. -@end deftypefun - - -@need 2000 -@node I/O of Rationals, , Applying Integer Functions, Rational Number Functions -@comment node-name, next, previous, up -@section Input and Output Functions -@cindex Rational input and output functions -@cindex Input functions -@cindex Output functions -@cindex I/O functions - -Functions that perform input from a stdio stream, and functions that output to -a stdio stream, of @code{mpq} numbers. Passing a @code{NULL} pointer for a -@var{stream} argument to any of these functions will make them read from -@code{stdin} and write to @code{stdout}, respectively. - -When using any of these functions, it is a good idea to include @file{stdio.h} -before @file{gmp.h}, since that will allow @file{gmp.h} to define prototypes -for these functions. - -See also @ref{Formatted Output} and @ref{Formatted Input}. - -@deftypefun size_t mpq_out_str (FILE *@var{stream}, int @var{base}, const mpq_t @var{op}) -Output @var{op} on stdio stream @var{stream}, as a string of digits in base -@var{base}. The base may vary from 2 to 36. Output is in the form -@samp{num/den} or if the denominator is 1 then just @samp{num}. - -Return the number of bytes written, or if an error occurred, return 0. -@end deftypefun - -@deftypefun size_t mpq_inp_str (mpq_t @var{rop}, FILE *@var{stream}, int @var{base}) -Read a string of digits from @var{stream} and convert them to a rational in -@var{rop}. Any initial white-space characters are read and discarded. Return -the number of characters read (including white space), or 0 if a rational -could not be read. - -The input can be a fraction like @samp{17/63} or just an integer like -@samp{123}. Reading stops at the first character not in this form, and white -space is not permitted within the string. If the input might not be in -canonical form, then @code{mpq_canonicalize} must be called (@pxref{Rational -Number Functions}). - -The @var{base} can be between 2 and 36, or can be 0 in which case the leading -characters of the string determine the base, @samp{0x} or @samp{0X} for -hexadecimal, @samp{0} for octal, or decimal otherwise. The leading characters -are examined separately for the numerator and denominator of a fraction, so -for instance @samp{0x10/11} is @math{16/11}, whereas @samp{0x10/0x11} is -@math{16/17}. -@end deftypefun - - -@node Floating-point Functions, Low-level Functions, Rational Number Functions, Top -@comment node-name, next, previous, up -@chapter Floating-point Functions -@cindex Floating-point functions -@cindex Float functions -@cindex User-defined precision -@cindex Precision of floats - -GMP floating point numbers are stored in objects of type @code{mpf_t} and -functions operating on them have an @code{mpf_} prefix. - -The mantissa of each float has a user-selectable precision, in practice only -limited by available memory. Each variable has its own precision, and that can -be increased or decreased at any time. This selectable precision is a minimum -value, GMP rounds it up to a whole limb. - -The accuracy of a calculation is determined by the priorly set precision of the -destination variable and the numeric values of the input variables. Input -variables' set precisions do not affect calculations (except indirectly as -their values might have been affected when they were assigned). - -The exponent of each float has fixed precision, one machine word on most -systems. In the current implementation the exponent is a count of limbs, so -for example on a 32-bit system this means a range of roughly -@math{2^@W{-68719476768}} to @math{2^@W{68719476736}}, or on a 64-bit system -this will be much greater. Note however that @code{mpf_get_str} can only -return an exponent which fits an @code{mp_exp_t} and currently -@code{mpf_set_str} doesn't accept exponents bigger than a @code{long}. - -Each variable keeps track of the mantissa data actually in use. This means -that if a float is exactly represented in only a few bits then only those bits -will be used in a calculation, even if the variable's selected precision is -high. This is a performance optimization; it does not affect the numeric -results. - -Internally, GMP sometimes calculates with higher precision than that of the -destination variable in order to limit errors. Final results are always -truncated to the destination variable's precision. - -The mantissa is stored in binary. One consequence of this is that decimal -fractions like @math{0.1} cannot be represented exactly. The same is true of -plain IEEE @code{double} floats. This makes both highly unsuitable for -calculations involving money or other values that should be exact decimal -fractions. (Suitably scaled integers, or perhaps rationals, are better -choices.) - -The @code{mpf} functions and variables have no special notion of infinity or -not-a-number, and applications must take care not to overflow the exponent or -results will be unpredictable. - -Note that the @code{mpf} functions are @emph{not} intended as a smooth -extension to IEEE P754 arithmetic. In particular results obtained on one -computer often differ from the results on a computer with a different word -size. - -New projects should consider using the GMP extension library MPFR -(@url{http://mpfr.org}) instead. MPFR provides well-defined precision and -accurate rounding, and thereby naturally extends IEEE P754. - -@menu -* Initializing Floats:: -* Assigning Floats:: -* Simultaneous Float Init & Assign:: -* Converting Floats:: -* Float Arithmetic:: -* Float Comparison:: -* I/O of Floats:: -* Miscellaneous Float Functions:: -@end menu - -@node Initializing Floats, Assigning Floats, Floating-point Functions, Floating-point Functions -@comment node-name, next, previous, up -@section Initialization Functions -@cindex Float initialization functions -@cindex Initialization functions - -@deftypefun void mpf_set_default_prec (mp_bitcnt_t @var{prec}) -Set the default precision to be @strong{at least} @var{prec} bits. All -subsequent calls to @code{mpf_init} will use this precision, but previously -initialized variables are unaffected. -@end deftypefun - -@deftypefun {mp_bitcnt_t} mpf_get_default_prec (void) -Return the default precision actually used. -@end deftypefun - -An @code{mpf_t} object must be initialized before storing the first value in -it. The functions @code{mpf_init} and @code{mpf_init2} are used for that -purpose. - -@deftypefun void mpf_init (mpf_t @var{x}) -Initialize @var{x} to 0. Normally, a variable should be initialized once only -or at least be cleared, using @code{mpf_clear}, between initializations. The -precision of @var{x} is undefined unless a default precision has already been -established by a call to @code{mpf_set_default_prec}. -@end deftypefun - -@deftypefun void mpf_init2 (mpf_t @var{x}, mp_bitcnt_t @var{prec}) -Initialize @var{x} to 0 and set its precision to be @strong{at least} -@var{prec} bits. Normally, a variable should be initialized once only or at -least be cleared, using @code{mpf_clear}, between initializations. -@end deftypefun - -@deftypefun void mpf_inits (mpf_t @var{x}, ...) -Initialize a NULL-terminated list of @code{mpf_t} variables, and set their -values to 0. The precision of the initialized variables is undefined unless a -default precision has already been established by a call to -@code{mpf_set_default_prec}. -@end deftypefun - -@deftypefun void mpf_clear (mpf_t @var{x}) -Free the space occupied by @var{x}. Make sure to call this function for all -@code{mpf_t} variables when you are done with them. -@end deftypefun - -@deftypefun void mpf_clears (mpf_t @var{x}, ...) -Free the space occupied by a NULL-terminated list of @code{mpf_t} variables. -@end deftypefun - -@need 2000 -Here is an example on how to initialize floating-point variables: -@example -@{ - mpf_t x, y; - mpf_init (x); /* use default precision */ - mpf_init2 (y, 256); /* precision @emph{at least} 256 bits */ - @dots{} - /* Unless the program is about to exit, do ... */ - mpf_clear (x); - mpf_clear (y); -@} -@end example - -The following three functions are useful for changing the precision during a -calculation. A typical use would be for adjusting the precision gradually in -iterative algorithms like Newton-Raphson, making the computation precision -closely match the actual accurate part of the numbers. - -@deftypefun {mp_bitcnt_t} mpf_get_prec (const mpf_t @var{op}) -Return the current precision of @var{op}, in bits. -@end deftypefun - -@deftypefun void mpf_set_prec (mpf_t @var{rop}, mp_bitcnt_t @var{prec}) -Set the precision of @var{rop} to be @strong{at least} @var{prec} bits. The -value in @var{rop} will be truncated to the new precision. - -This function requires a call to @code{realloc}, and so should not be used in -a tight loop. -@end deftypefun - -@deftypefun void mpf_set_prec_raw (mpf_t @var{rop}, mp_bitcnt_t @var{prec}) -Set the precision of @var{rop} to be @strong{at least} @var{prec} bits, -without changing the memory allocated. - -@var{prec} must be no more than the allocated precision for @var{rop}, that -being the precision when @var{rop} was initialized, or in the most recent -@code{mpf_set_prec}. - -The value in @var{rop} is unchanged, and in particular if it had a higher -precision than @var{prec} it will retain that higher precision. New values -written to @var{rop} will use the new @var{prec}. - -Before calling @code{mpf_clear} or the full @code{mpf_set_prec}, another -@code{mpf_set_prec_raw} call must be made to restore @var{rop} to its original -allocated precision. Failing to do so will have unpredictable results. - -@code{mpf_get_prec} can be used before @code{mpf_set_prec_raw} to get the -original allocated precision. After @code{mpf_set_prec_raw} it reflects the -@var{prec} value set. - -@code{mpf_set_prec_raw} is an efficient way to use an @code{mpf_t} variable at -different precisions during a calculation, perhaps to gradually increase -precision in an iteration, or just to use various different precisions for -different purposes during a calculation. -@end deftypefun - - -@need 2000 -@node Assigning Floats, Simultaneous Float Init & Assign, Initializing Floats, Floating-point Functions -@comment node-name, next, previous, up -@section Assignment Functions -@cindex Float assignment functions -@cindex Assignment functions - -These functions assign new values to already initialized floats -(@pxref{Initializing Floats}). - -@deftypefun void mpf_set (mpf_t @var{rop}, const mpf_t @var{op}) -@deftypefunx void mpf_set_ui (mpf_t @var{rop}, unsigned long int @var{op}) -@deftypefunx void mpf_set_si (mpf_t @var{rop}, signed long int @var{op}) -@deftypefunx void mpf_set_d (mpf_t @var{rop}, double @var{op}) -@deftypefunx void mpf_set_z (mpf_t @var{rop}, const mpz_t @var{op}) -@deftypefunx void mpf_set_q (mpf_t @var{rop}, const mpq_t @var{op}) -Set the value of @var{rop} from @var{op}. -@end deftypefun - -@deftypefun int mpf_set_str (mpf_t @var{rop}, const char *@var{str}, int @var{base}) -Set the value of @var{rop} from the string in @var{str}. The string is of the -form @samp{M@@N} or, if the base is 10 or less, alternatively @samp{MeN}. -@samp{M} is the mantissa and @samp{N} is the exponent. The mantissa is always -in the specified base. The exponent is either in the specified base or, if -@var{base} is negative, in decimal. The decimal point expected is taken from -the current locale, on systems providing @code{localeconv}. - -The argument @var{base} may be in the ranges 2 to 62, or @minus{}62 to -@minus{}2. Negative values are used to specify that the exponent is in -decimal. - -For bases up to 36, case is ignored; upper-case and lower-case letters have -the same value; for bases 37 to 62, upper-case letter represent the usual -10..35 while lower-case letter represent 36..61. - -Unlike the corresponding @code{mpz} function, the base will not be determined -from the leading characters of the string if @var{base} is 0. This is so that -numbers like @samp{0.23} are not interpreted as octal. - -White space is allowed in the string, and is simply ignored. [This is not -really true; white-space is ignored in the beginning of the string and within -the mantissa, but not in other places, such as after a minus sign or in the -exponent. We are considering changing the definition of this function, making -it fail when there is any white-space in the input, since that makes a lot of -sense. Please tell us your opinion about this change. Do you really want it -to accept @nicode{"3 14"} as meaning 314 as it does now?] - -This function returns 0 if the entire string is a valid number in base -@var{base}. Otherwise it returns @minus{}1. -@end deftypefun - -@deftypefun void mpf_swap (mpf_t @var{rop1}, mpf_t @var{rop2}) -Swap @var{rop1} and @var{rop2} efficiently. Both the values and the -precisions of the two variables are swapped. -@end deftypefun - - -@node Simultaneous Float Init & Assign, Converting Floats, Assigning Floats, Floating-point Functions -@comment node-name, next, previous, up -@section Combined Initialization and Assignment Functions -@cindex Float assignment functions -@cindex Assignment functions -@cindex Float initialization functions -@cindex Initialization functions - -For convenience, GMP provides a parallel series of initialize-and-set functions -which initialize the output and then store the value there. These functions' -names have the form @code{mpf_init_set@dots{}} - -Once the float has been initialized by any of the @code{mpf_init_set@dots{}} -functions, it can be used as the source or destination operand for the ordinary -float functions. Don't use an initialize-and-set function on a variable -already initialized! - -@deftypefun void mpf_init_set (mpf_t @var{rop}, const mpf_t @var{op}) -@deftypefunx void mpf_init_set_ui (mpf_t @var{rop}, unsigned long int @var{op}) -@deftypefunx void mpf_init_set_si (mpf_t @var{rop}, signed long int @var{op}) -@deftypefunx void mpf_init_set_d (mpf_t @var{rop}, double @var{op}) -Initialize @var{rop} and set its value from @var{op}. - -The precision of @var{rop} will be taken from the active default precision, as -set by @code{mpf_set_default_prec}. -@end deftypefun - -@deftypefun int mpf_init_set_str (mpf_t @var{rop}, const char *@var{str}, int @var{base}) -Initialize @var{rop} and set its value from the string in @var{str}. See -@code{mpf_set_str} above for details on the assignment operation. - -Note that @var{rop} is initialized even if an error occurs. (I.e., you have to -call @code{mpf_clear} for it.) - -The precision of @var{rop} will be taken from the active default precision, as -set by @code{mpf_set_default_prec}. -@end deftypefun - - -@node Converting Floats, Float Arithmetic, Simultaneous Float Init & Assign, Floating-point Functions -@comment node-name, next, previous, up -@section Conversion Functions -@cindex Float conversion functions -@cindex Conversion functions - -@deftypefun double mpf_get_d (const mpf_t @var{op}) -Convert @var{op} to a @code{double}, truncating if necessary (i.e.@: rounding -towards zero). - -If the exponent in @var{op} is too big or too small to fit a @code{double} -then the result is system dependent. For too big an infinity is returned when -available. For too small @math{0.0} is normally returned. Hardware overflow, -underflow and denorm traps may or may not occur. -@end deftypefun - -@deftypefun double mpf_get_d_2exp (signed long int *@var{exp}, const mpf_t @var{op}) -Convert @var{op} to a @code{double}, truncating if necessary (i.e.@: rounding -towards zero), and with an exponent returned separately. - -The return value is in the range @math{0.5@le{}@GMPabs{@var{d}}<1} and the -exponent is stored to @code{*@var{exp}}. @m{@var{d} \times 2^{exp}, -@var{d} * 2^@var{exp}} is the (truncated) @var{op} value. If @var{op} is zero, -the return is @math{0.0} and 0 is stored to @code{*@var{exp}}. - -@cindex @code{frexp} -This is similar to the standard C @code{frexp} function (@pxref{Normalization -Functions,,, libc, The GNU C Library Reference Manual}). -@end deftypefun - -@deftypefun long mpf_get_si (const mpf_t @var{op}) -@deftypefunx {unsigned long} mpf_get_ui (const mpf_t @var{op}) -Convert @var{op} to a @code{long} or @code{unsigned long}, truncating any -fraction part. If @var{op} is too big for the return type, the result is -undefined. - -See also @code{mpf_fits_slong_p} and @code{mpf_fits_ulong_p} -(@pxref{Miscellaneous Float Functions}). -@end deftypefun - -@deftypefun {char *} mpf_get_str (char *@var{str}, mp_exp_t *@var{expptr}, int @var{base}, size_t @var{n_digits}, const mpf_t @var{op}) -Convert @var{op} to a string of digits in base @var{base}. The base argument -may vary from 2 to 62 or from @minus{}2 to @minus{}36. Up to @var{n_digits} -digits will be generated. Trailing zeros are not returned. No more digits -than can be accurately represented by @var{op} are ever generated. If -@var{n_digits} is 0 then that accurate maximum number of digits are generated. - -For @var{base} in the range 2..36, digits and lower-case letters are used; for -@minus{}2..@minus{}36, digits and upper-case letters are used; for 37..62, -digits, upper-case letters, and lower-case letters (in that significance order) -are used. - -If @var{str} is @code{NULL}, the result string is allocated using the current -allocation function (@pxref{Custom Allocation}). The block will be -@code{strlen(str)+1} bytes, that being exactly enough for the string and -null-terminator. - -If @var{str} is not @code{NULL}, it should point to a block of -@math{@var{n_digits} + 2} bytes, that being enough for the mantissa, a -possible minus sign, and a null-terminator. When @var{n_digits} is 0 to get -all significant digits, an application won't be able to know the space -required, and @var{str} should be @code{NULL} in that case. - -The generated string is a fraction, with an implicit radix point immediately -to the left of the first digit. The applicable exponent is written through -the @var{expptr} pointer. For example, the number 3.1416 would be returned as -string @nicode{"31416"} and exponent 1. - -When @var{op} is zero, an empty string is produced and the exponent returned -is 0. - -A pointer to the result string is returned, being either the allocated block -or the given @var{str}. -@end deftypefun - - -@node Float Arithmetic, Float Comparison, Converting Floats, Floating-point Functions -@comment node-name, next, previous, up -@section Arithmetic Functions -@cindex Float arithmetic functions -@cindex Arithmetic functions - -@deftypefun void mpf_add (mpf_t @var{rop}, const mpf_t @var{op1}, const mpf_t @var{op2}) -@deftypefunx void mpf_add_ui (mpf_t @var{rop}, const mpf_t @var{op1}, unsigned long int @var{op2}) -Set @var{rop} to @math{@var{op1} + @var{op2}}. -@end deftypefun - -@deftypefun void mpf_sub (mpf_t @var{rop}, const mpf_t @var{op1}, const mpf_t @var{op2}) -@deftypefunx void mpf_ui_sub (mpf_t @var{rop}, unsigned long int @var{op1}, const mpf_t @var{op2}) -@deftypefunx void mpf_sub_ui (mpf_t @var{rop}, const mpf_t @var{op1}, unsigned long int @var{op2}) -Set @var{rop} to @var{op1} @minus{} @var{op2}. -@end deftypefun - -@deftypefun void mpf_mul (mpf_t @var{rop}, const mpf_t @var{op1}, const mpf_t @var{op2}) -@deftypefunx void mpf_mul_ui (mpf_t @var{rop}, const mpf_t @var{op1}, unsigned long int @var{op2}) -Set @var{rop} to @math{@var{op1} @GMPtimes{} @var{op2}}. -@end deftypefun - -Division is undefined if the divisor is zero, and passing a zero divisor to the -divide functions will make these functions intentionally divide by zero. This -lets the user handle arithmetic exceptions in these functions in the same -manner as other arithmetic exceptions. - -@deftypefun void mpf_div (mpf_t @var{rop}, const mpf_t @var{op1}, const mpf_t @var{op2}) -@deftypefunx void mpf_ui_div (mpf_t @var{rop}, unsigned long int @var{op1}, const mpf_t @var{op2}) -@deftypefunx void mpf_div_ui (mpf_t @var{rop}, const mpf_t @var{op1}, unsigned long int @var{op2}) -@cindex Division functions -Set @var{rop} to @var{op1}/@var{op2}. -@end deftypefun - -@deftypefun void mpf_sqrt (mpf_t @var{rop}, const mpf_t @var{op}) -@deftypefunx void mpf_sqrt_ui (mpf_t @var{rop}, unsigned long int @var{op}) -@cindex Root extraction functions -Set @var{rop} to @m{\sqrt{@var{op}}, the square root of @var{op}}. -@end deftypefun - -@deftypefun void mpf_pow_ui (mpf_t @var{rop}, const mpf_t @var{op1}, unsigned long int @var{op2}) -@cindex Exponentiation functions -@cindex Powering functions -Set @var{rop} to @m{@var{op1}^{op2}, @var{op1} raised to the power @var{op2}}. -@end deftypefun - -@deftypefun void mpf_neg (mpf_t @var{rop}, const mpf_t @var{op}) -Set @var{rop} to @minus{}@var{op}. -@end deftypefun - -@deftypefun void mpf_abs (mpf_t @var{rop}, const mpf_t @var{op}) -Set @var{rop} to the absolute value of @var{op}. -@end deftypefun - -@deftypefun void mpf_mul_2exp (mpf_t @var{rop}, const mpf_t @var{op1}, mp_bitcnt_t @var{op2}) -Set @var{rop} to @m{@var{op1} \times 2^{op2}, @var{op1} times 2 raised to -@var{op2}}. -@end deftypefun - -@deftypefun void mpf_div_2exp (mpf_t @var{rop}, const mpf_t @var{op1}, mp_bitcnt_t @var{op2}) -Set @var{rop} to @m{@var{op1}/2^{op2}, @var{op1} divided by 2 raised to -@var{op2}}. -@end deftypefun - -@node Float Comparison, I/O of Floats, Float Arithmetic, Floating-point Functions -@comment node-name, next, previous, up -@section Comparison Functions -@cindex Float comparison functions -@cindex Comparison functions - -@deftypefun int mpf_cmp (const mpf_t @var{op1}, const mpf_t @var{op2}) -@deftypefunx int mpf_cmp_z (const mpf_t @var{op1}, const mpz_t @var{op2}) -@deftypefunx int mpf_cmp_d (const mpf_t @var{op1}, double @var{op2}) -@deftypefunx int mpf_cmp_ui (const mpf_t @var{op1}, unsigned long int @var{op2}) -@deftypefunx int mpf_cmp_si (const mpf_t @var{op1}, signed long int @var{op2}) -Compare @var{op1} and @var{op2}. Return a positive value if @math{@var{op1} > -@var{op2}}, zero if @math{@var{op1} = @var{op2}}, and a negative value if -@math{@var{op1} < @var{op2}}. - -@code{mpf_cmp_d} can be called with an infinity, but results are undefined for -a NaN. -@end deftypefun - -@deftypefun int mpf_eq (const mpf_t @var{op1}, const mpf_t @var{op2}, mp_bitcnt_t op3) -@strong{This function is mathematically ill-defined and should not be used.} - -Return non-zero if the first @var{op3} bits of @var{op1} and @var{op2} are -equal, zero otherwise. Note that numbers like e.g., 256 (binary 100000000) and -255 (binary 11111111) will never be equal by this function's measure, and -furthermore that 0 will only be equal to itself. -@end deftypefun - -@deftypefun void mpf_reldiff (mpf_t @var{rop}, const mpf_t @var{op1}, const mpf_t @var{op2}) -Compute the relative difference between @var{op1} and @var{op2} and store the -result in @var{rop}. This is @math{@GMPabs{@var{op1}-@var{op2}}/@var{op1}}. -@end deftypefun - -@deftypefn Macro int mpf_sgn (const mpf_t @var{op}) -@cindex Sign tests -@cindex Float sign tests -Return @math{+1} if @math{@var{op} > 0}, 0 if @math{@var{op} = 0}, and -@math{-1} if @math{@var{op} < 0}. - -This function is actually implemented as a macro. It evaluates its argument -multiple times. -@end deftypefn - -@node I/O of Floats, Miscellaneous Float Functions, Float Comparison, Floating-point Functions -@comment node-name, next, previous, up -@section Input and Output Functions -@cindex Float input and output functions -@cindex Input functions -@cindex Output functions -@cindex I/O functions - -Functions that perform input from a stdio stream, and functions that output to -a stdio stream, of @code{mpf} numbers. Passing a @code{NULL} pointer for a -@var{stream} argument to any of these functions will make them read from -@code{stdin} and write to @code{stdout}, respectively. - -When using any of these functions, it is a good idea to include @file{stdio.h} -before @file{gmp.h}, since that will allow @file{gmp.h} to define prototypes -for these functions. - -See also @ref{Formatted Output} and @ref{Formatted Input}. - -@deftypefun size_t mpf_out_str (FILE *@var{stream}, int @var{base}, size_t @var{n_digits}, const mpf_t @var{op}) -Print @var{op} to @var{stream}, as a string of digits. Return the number of -bytes written, or if an error occurred, return 0. - -The mantissa is prefixed with an @samp{0.} and is in the given @var{base}, -which may vary from 2 to 62 or from @minus{}2 to @minus{}36. An exponent is -then printed, separated by an @samp{e}, or if the base is greater than 10 then -by an @samp{@@}. The exponent is always in decimal. The decimal point follows -the current locale, on systems providing @code{localeconv}. - -For @var{base} in the range 2..36, digits and lower-case letters are used; for -@minus{}2..@minus{}36, digits and upper-case letters are used; for 37..62, -digits, upper-case letters, and lower-case letters (in that significance order) -are used. - -Up to @var{n_digits} will be printed from the mantissa, except that no more -digits than are accurately representable by @var{op} will be printed. -@var{n_digits} can be 0 to select that accurate maximum. -@end deftypefun - -@deftypefun size_t mpf_inp_str (mpf_t @var{rop}, FILE *@var{stream}, int @var{base}) -Read a string in base @var{base} from @var{stream}, and put the read float in -@var{rop}. The string is of the form @samp{M@@N} or, if the base is 10 or -less, alternatively @samp{MeN}. @samp{M} is the mantissa and @samp{N} is the -exponent. The mantissa is always in the specified base. The exponent is -either in the specified base or, if @var{base} is negative, in decimal. The -decimal point expected is taken from the current locale, on systems providing -@code{localeconv}. - -The argument @var{base} may be in the ranges 2 to 36, or @minus{}36 to -@minus{}2. Negative values are used to specify that the exponent is in -decimal. - -Unlike the corresponding @code{mpz} function, the base will not be determined -from the leading characters of the string if @var{base} is 0. This is so that -numbers like @samp{0.23} are not interpreted as octal. - -Return the number of bytes read, or if an error occurred, return 0. -@end deftypefun - -@c @deftypefun void mpf_out_raw (FILE *@var{stream}, const mpf_t @var{float}) -@c Output @var{float} on stdio stream @var{stream}, in raw binary -@c format. The float is written in a portable format, with 4 bytes of -@c size information, and that many bytes of limbs. Both the size and the -@c limbs are written in decreasing significance order. -@c @end deftypefun - -@c @deftypefun void mpf_inp_raw (mpf_t @var{float}, FILE *@var{stream}) -@c Input from stdio stream @var{stream} in the format written by -@c @code{mpf_out_raw}, and put the result in @var{float}. -@c @end deftypefun - - -@node Miscellaneous Float Functions, , I/O of Floats, Floating-point Functions -@comment node-name, next, previous, up -@section Miscellaneous Functions -@cindex Miscellaneous float functions -@cindex Float miscellaneous functions - -@deftypefun void mpf_ceil (mpf_t @var{rop}, const mpf_t @var{op}) -@deftypefunx void mpf_floor (mpf_t @var{rop}, const mpf_t @var{op}) -@deftypefunx void mpf_trunc (mpf_t @var{rop}, const mpf_t @var{op}) -@cindex Rounding functions -@cindex Float rounding functions -Set @var{rop} to @var{op} rounded to an integer. @code{mpf_ceil} rounds to the -next higher integer, @code{mpf_floor} to the next lower, and @code{mpf_trunc} -to the integer towards zero. -@end deftypefun - -@deftypefun int mpf_integer_p (const mpf_t @var{op}) -Return non-zero if @var{op} is an integer. -@end deftypefun - -@deftypefun int mpf_fits_ulong_p (const mpf_t @var{op}) -@deftypefunx int mpf_fits_slong_p (const mpf_t @var{op}) -@deftypefunx int mpf_fits_uint_p (const mpf_t @var{op}) -@deftypefunx int mpf_fits_sint_p (const mpf_t @var{op}) -@deftypefunx int mpf_fits_ushort_p (const mpf_t @var{op}) -@deftypefunx int mpf_fits_sshort_p (const mpf_t @var{op}) -Return non-zero if @var{op} would fit in the respective C data type, when -truncated to an integer. -@end deftypefun - -@deftypefun void mpf_urandomb (mpf_t @var{rop}, gmp_randstate_t @var{state}, mp_bitcnt_t @var{nbits}) -@cindex Random number functions -@cindex Float random number functions -Generate a uniformly distributed random float in @var{rop}, such that @math{0 -@le{} @var{rop} < 1}, with @var{nbits} significant bits in the mantissa or -less if the precision of @var{rop} is smaller. - -The variable @var{state} must be initialized by calling one of the -@code{gmp_randinit} functions (@ref{Random State Initialization}) before -invoking this function. -@end deftypefun - -@deftypefun void mpf_random2 (mpf_t @var{rop}, mp_size_t @var{max_size}, mp_exp_t @var{exp}) -Generate a random float of at most @var{max_size} limbs, with long strings of -zeros and ones in the binary representation. The exponent of the number is in -the interval @minus{}@var{exp} to @var{exp} (in limbs). This function is -useful for testing functions and algorithms, since these kind of random -numbers have proven to be more likely to trigger corner-case bugs. Negative -random numbers are generated when @var{max_size} is negative. -@end deftypefun - -@c @deftypefun size_t mpf_size (const mpf_t @var{op}) -@c Return the size of @var{op} measured in number of limbs. If @var{op} is -@c zero, the returned value will be zero. (@xref{Nomenclature}, for an -@c explanation of the concept @dfn{limb}.) -@c -@c @strong{This function is obsolete. It will disappear from future GMP -@c releases.} -@c @end deftypefun - - -@node Low-level Functions, Random Number Functions, Floating-point Functions, Top -@comment node-name, next, previous, up -@chapter Low-level Functions -@cindex Low-level functions - -This chapter describes low-level GMP functions, used to implement the -high-level GMP functions, but also intended for time-critical user code. - -These functions start with the prefix @code{mpn_}. - -@c 1. Some of these function clobber input operands. -@c - -The @code{mpn} functions are designed to be as fast as possible, @strong{not} -to provide a coherent calling interface. The different functions have somewhat -similar interfaces, but there are variations that make them hard to use. These -functions do as little as possible apart from the real multiple precision -computation, so that no time is spent on things that not all callers need. - -A source operand is specified by a pointer to the least significant limb and a -limb count. A destination operand is specified by just a pointer. It is the -responsibility of the caller to ensure that the destination has enough space -for storing the result. - -With this way of specifying operands, it is possible to perform computations on -subranges of an argument, and store the result into a subrange of a -destination. - -A common requirement for all functions is that each source area needs at least -one limb. No size argument may be zero. Unless otherwise stated, in-place -operations are allowed where source and destination are the same, but not where -they only partly overlap. - -The @code{mpn} functions are the base for the implementation of the -@code{mpz_}, @code{mpf_}, and @code{mpq_} functions. - -This example adds the number beginning at @var{s1p} and the number beginning at -@var{s2p} and writes the sum at @var{destp}. All areas have @var{n} limbs. - -@example -cy = mpn_add_n (destp, s1p, s2p, n) -@end example - -It should be noted that the @code{mpn} functions make no attempt to identify -high or low zero limbs on their operands, or other special forms. On random -data such cases will be unlikely and it'd be wasteful for every function to -check every time. An application knowing something about its data can take -steps to trim or perhaps split its calculations. -@c -@c For reference, within gmp mpz_t operands never have high zero limbs, and -@c we rate low zero limbs as unlikely too (or something an application should -@c handle). This is a prime motivation for not stripping zero limbs in say -@c mpn_mul_n etc. -@c -@c Other applications doing variable-length calculations will quite likely do -@c something similar to mpz. And even if not then it's highly likely zero -@c limb stripping can be done at just a few judicious points, which will be -@c more efficient than having lots of mpn functions checking every time. - -@sp 1 -@noindent -In the notation used below, a source operand is identified by the pointer to -the least significant limb, and the limb count in braces. For example, -@{@var{s1p}, @var{s1n}@}. - -@deftypefun mp_limb_t mpn_add_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -Add @{@var{s1p}, @var{n}@} and @{@var{s2p}, @var{n}@}, and write the @var{n} -least significant limbs of the result to @var{rp}. Return carry, either 0 or -1. - -This is the lowest-level function for addition. It is the preferred function -for addition, since it is written in assembly for most CPUs. For addition of -a variable to itself (i.e., @var{s1p} equals @var{s2p}) use @code{mpn_lshift} -with a count of 1 for optimal speed. -@end deftypefun - -@deftypefun mp_limb_t mpn_add_1 (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n}, mp_limb_t @var{s2limb}) -Add @{@var{s1p}, @var{n}@} and @var{s2limb}, and write the @var{n} least -significant limbs of the result to @var{rp}. Return carry, either 0 or 1. -@end deftypefun - -@deftypefun mp_limb_t mpn_add (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{s1n}, const mp_limb_t *@var{s2p}, mp_size_t @var{s2n}) -Add @{@var{s1p}, @var{s1n}@} and @{@var{s2p}, @var{s2n}@}, and write the -@var{s1n} least significant limbs of the result to @var{rp}. Return carry, -either 0 or 1. - -This function requires that @var{s1n} is greater than or equal to @var{s2n}. -@end deftypefun - -@deftypefun mp_limb_t mpn_sub_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -Subtract @{@var{s2p}, @var{n}@} from @{@var{s1p}, @var{n}@}, and write the -@var{n} least significant limbs of the result to @var{rp}. Return borrow, -either 0 or 1. - -This is the lowest-level function for subtraction. It is the preferred -function for subtraction, since it is written in assembly for most CPUs. -@end deftypefun - -@deftypefun mp_limb_t mpn_sub_1 (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n}, mp_limb_t @var{s2limb}) -Subtract @var{s2limb} from @{@var{s1p}, @var{n}@}, and write the @var{n} least -significant limbs of the result to @var{rp}. Return borrow, either 0 or 1. -@end deftypefun - -@deftypefun mp_limb_t mpn_sub (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{s1n}, const mp_limb_t *@var{s2p}, mp_size_t @var{s2n}) -Subtract @{@var{s2p}, @var{s2n}@} from @{@var{s1p}, @var{s1n}@}, and write the -@var{s1n} least significant limbs of the result to @var{rp}. Return borrow, -either 0 or 1. - -This function requires that @var{s1n} is greater than or equal to -@var{s2n}. -@end deftypefun - -@deftypefun mp_limb_t mpn_neg (mp_limb_t *@var{rp}, const mp_limb_t *@var{sp}, mp_size_t @var{n}) -Perform the negation of @{@var{sp}, @var{n}@}, and write the result to -@{@var{rp}, @var{n}@}. This is equivalent to calling @code{mpn_sub_n} with a -@var{n}-limb zero minuend and passing @{@var{sp}, @var{n}@} as subtrahend. -Return borrow, either 0 or 1. -@end deftypefun - -@deftypefun void mpn_mul_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -Multiply @{@var{s1p}, @var{n}@} and @{@var{s2p}, @var{n}@}, and write the -2*@var{n}-limb result to @var{rp}. - -The destination has to have space for 2*@var{n} limbs, even if the product's -most significant limb is zero. No overlap is permitted between the -destination and either source. - -If the two input operands are the same, use @code{mpn_sqr}. -@end deftypefun - -@deftypefun mp_limb_t mpn_mul (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{s1n}, const mp_limb_t *@var{s2p}, mp_size_t @var{s2n}) -Multiply @{@var{s1p}, @var{s1n}@} and @{@var{s2p}, @var{s2n}@}, and write the -(@var{s1n}+@var{s2n})-limb result to @var{rp}. Return the most significant -limb of the result. - -The destination has to have space for @var{s1n} + @var{s2n} limbs, even if the -product's most significant limb is zero. No overlap is permitted between the -destination and either source. - -This function requires that @var{s1n} is greater than or equal to @var{s2n}. -@end deftypefun - -@deftypefun void mpn_sqr (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n}) -Compute the square of @{@var{s1p}, @var{n}@} and write the 2*@var{n}-limb -result to @var{rp}. - -The destination has to have space for 2@var{n} limbs, even if the result's -most significant limb is zero. No overlap is permitted between the -destination and the source. -@end deftypefun - -@deftypefun mp_limb_t mpn_mul_1 (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n}, mp_limb_t @var{s2limb}) -Multiply @{@var{s1p}, @var{n}@} by @var{s2limb}, and write the @var{n} least -significant limbs of the product to @var{rp}. Return the most significant -limb of the product. @{@var{s1p}, @var{n}@} and @{@var{rp}, @var{n}@} are -allowed to overlap provided @math{@var{rp} @le{} @var{s1p}}. - -This is a low-level function that is a building block for general -multiplication as well as other operations in GMP@. It is written in assembly -for most CPUs. - -Don't call this function if @var{s2limb} is a power of 2; use @code{mpn_lshift} -with a count equal to the logarithm of @var{s2limb} instead, for optimal speed. -@end deftypefun - -@deftypefun mp_limb_t mpn_addmul_1 (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n}, mp_limb_t @var{s2limb}) -Multiply @{@var{s1p}, @var{n}@} and @var{s2limb}, and add the @var{n} least -significant limbs of the product to @{@var{rp}, @var{n}@} and write the result -to @var{rp}. Return the most significant limb of the product, plus carry-out -from the addition. @{@var{s1p}, @var{n}@} and @{@var{rp}, @var{n}@} are -allowed to overlap provided @math{@var{rp} @le{} @var{s1p}}. - -This is a low-level function that is a building block for general -multiplication as well as other operations in GMP@. It is written in assembly -for most CPUs. -@end deftypefun - -@deftypefun mp_limb_t mpn_submul_1 (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n}, mp_limb_t @var{s2limb}) -Multiply @{@var{s1p}, @var{n}@} and @var{s2limb}, and subtract the @var{n} -least significant limbs of the product from @{@var{rp}, @var{n}@} and write the -result to @var{rp}. Return the most significant limb of the product, plus -borrow-out from the subtraction. @{@var{s1p}, @var{n}@} and @{@var{rp}, -@var{n}@} are allowed to overlap provided @math{@var{rp} @le{} @var{s1p}}. - -This is a low-level function that is a building block for general -multiplication and division as well as other operations in GMP@. It is written -in assembly for most CPUs. -@end deftypefun - -@deftypefun void mpn_tdiv_qr (mp_limb_t *@var{qp}, mp_limb_t *@var{rp}, mp_size_t @var{qxn}, const mp_limb_t *@var{np}, mp_size_t @var{nn}, const mp_limb_t *@var{dp}, mp_size_t @var{dn}) -Divide @{@var{np}, @var{nn}@} by @{@var{dp}, @var{dn}@} and put the quotient -at @{@var{qp}, @var{nn}@minus{}@var{dn}+1@} and the remainder at @{@var{rp}, -@var{dn}@}. The quotient is rounded towards 0. - -No overlap is permitted between arguments, except that @var{np} might equal -@var{rp}. The dividend size @var{nn} must be greater than or equal to divisor -size @var{dn}. The most significant limb of the divisor must be non-zero. The -@var{qxn} operand must be zero. -@end deftypefun - -@deftypefun mp_limb_t mpn_divrem (mp_limb_t *@var{r1p}, mp_size_t @var{qxn}, mp_limb_t *@var{rs2p}, mp_size_t @var{rs2n}, const mp_limb_t *@var{s3p}, mp_size_t @var{s3n}) -[This function is obsolete. Please call @code{mpn_tdiv_qr} instead for best -performance.] - -Divide @{@var{rs2p}, @var{rs2n}@} by @{@var{s3p}, @var{s3n}@}, and write the -quotient at @var{r1p}, with the exception of the most significant limb, which -is returned. The remainder replaces the dividend at @var{rs2p}; it will be -@var{s3n} limbs long (i.e., as many limbs as the divisor). - -In addition to an integer quotient, @var{qxn} fraction limbs are developed, and -stored after the integral limbs. For most usages, @var{qxn} will be zero. - -It is required that @var{rs2n} is greater than or equal to @var{s3n}. It is -required that the most significant bit of the divisor is set. - -If the quotient is not needed, pass @var{rs2p} + @var{s3n} as @var{r1p}. Aside -from that special case, no overlap between arguments is permitted. - -Return the most significant limb of the quotient, either 0 or 1. - -The area at @var{r1p} needs to be @var{rs2n} @minus{} @var{s3n} + @var{qxn} -limbs large. -@end deftypefun - -@deftypefn Function mp_limb_t mpn_divrem_1 (mp_limb_t *@var{r1p}, mp_size_t @var{qxn}, @w{mp_limb_t *@var{s2p}}, mp_size_t @var{s2n}, mp_limb_t @var{s3limb}) -@deftypefnx Macro mp_limb_t mpn_divmod_1 (mp_limb_t *@var{r1p}, mp_limb_t *@var{s2p}, @w{mp_size_t @var{s2n}}, @w{mp_limb_t @var{s3limb}}) -Divide @{@var{s2p}, @var{s2n}@} by @var{s3limb}, and write the quotient at -@var{r1p}. Return the remainder. - -The integer quotient is written to @{@var{r1p}+@var{qxn}, @var{s2n}@} and in -addition @var{qxn} fraction limbs are developed and written to @{@var{r1p}, -@var{qxn}@}. Either or both @var{s2n} and @var{qxn} can be zero. For most -usages, @var{qxn} will be zero. - -@code{mpn_divmod_1} exists for upward source compatibility and is simply a -macro calling @code{mpn_divrem_1} with a @var{qxn} of 0. - -The areas at @var{r1p} and @var{s2p} have to be identical or completely -separate, not partially overlapping. -@end deftypefn - -@deftypefun mp_limb_t mpn_divmod (mp_limb_t *@var{r1p}, mp_limb_t *@var{rs2p}, mp_size_t @var{rs2n}, const mp_limb_t *@var{s3p}, mp_size_t @var{s3n}) -[This function is obsolete. Please call @code{mpn_tdiv_qr} instead for best -performance.] -@end deftypefun - -@deftypefun void mpn_divexact_1 (mp_limb_t * @var{rp}, const mp_limb_t * @var{sp}, mp_size_t @var{n}, mp_limb_t @var{d}) -Divide @{@var{sp}, @var{n}@} by @var{d}, expecting it to divide exactly, and -writing the result to @{@var{rp}, @var{n}@}. If @var{d} doesn't divide -exactly, the value written to @{@var{rp}, @var{n}@} is undefined. The areas at -@var{rp} and @var{sp} have to be identical or completely separate, not -partially overlapping. -@end deftypefun - -@deftypefn Macro mp_limb_t mpn_divexact_by3 (mp_limb_t *@var{rp}, mp_limb_t *@var{sp}, @w{mp_size_t @var{n}}) -@deftypefnx Function mp_limb_t mpn_divexact_by3c (mp_limb_t *@var{rp}, mp_limb_t *@var{sp}, @w{mp_size_t @var{n}}, mp_limb_t @var{carry}) -Divide @{@var{sp}, @var{n}@} by 3, expecting it to divide exactly, and writing -the result to @{@var{rp}, @var{n}@}. If 3 divides exactly, the return value is -zero and the result is the quotient. If not, the return value is non-zero and -the result won't be anything useful. - -@code{mpn_divexact_by3c} takes an initial carry parameter, which can be the -return value from a previous call, so a large calculation can be done piece by -piece from low to high. @code{mpn_divexact_by3} is simply a macro calling -@code{mpn_divexact_by3c} with a 0 carry parameter. - -These routines use a multiply-by-inverse and will be faster than -@code{mpn_divrem_1} on CPUs with fast multiplication but slow division. - -The source @math{a}, result @math{q}, size @math{n}, initial carry @math{i}, -and return value @math{c} satisfy @m{cb^n+a-i=3q, c*b^n + a-i = 3*q}, where -@m{b=2\GMPraise{@code{GMP\_NUMB\_BITS}}, b=2^GMP_NUMB_BITS}. The -return @math{c} is always 0, 1 or 2, and the initial carry @math{i} must also -be 0, 1 or 2 (these are both borrows really). When @math{c=0} clearly -@math{q=(a-i)/3}. When @m{c \neq 0, c!=0}, the remainder @math{(a-i) @bmod{} -3} is given by @math{3-c}, because @math{b @equiv{} 1 @bmod{} 3} (when -@code{mp_bits_per_limb} is even, which is always so currently). -@end deftypefn - -@deftypefun mp_limb_t mpn_mod_1 (const mp_limb_t *@var{s1p}, mp_size_t @var{s1n}, mp_limb_t @var{s2limb}) -Divide @{@var{s1p}, @var{s1n}@} by @var{s2limb}, and return the remainder. -@var{s1n} can be zero. -@end deftypefun - -@deftypefun mp_limb_t mpn_lshift (mp_limb_t *@var{rp}, const mp_limb_t *@var{sp}, mp_size_t @var{n}, unsigned int @var{count}) -Shift @{@var{sp}, @var{n}@} left by @var{count} bits, and write the result to -@{@var{rp}, @var{n}@}. The bits shifted out at the left are returned in the -least significant @var{count} bits of the return value (the rest of the return -value is zero). - -@var{count} must be in the range 1 to @nicode{mp_bits_per_limb}@minus{}1. The -regions @{@var{sp}, @var{n}@} and @{@var{rp}, @var{n}@} may overlap, provided -@math{@var{rp} @ge{} @var{sp}}. - -This function is written in assembly for most CPUs. -@end deftypefun - -@deftypefun mp_limb_t mpn_rshift (mp_limb_t *@var{rp}, const mp_limb_t *@var{sp}, mp_size_t @var{n}, unsigned int @var{count}) -Shift @{@var{sp}, @var{n}@} right by @var{count} bits, and write the result to -@{@var{rp}, @var{n}@}. The bits shifted out at the right are returned in the -most significant @var{count} bits of the return value (the rest of the return -value is zero). - -@var{count} must be in the range 1 to @nicode{mp_bits_per_limb}@minus{}1. The -regions @{@var{sp}, @var{n}@} and @{@var{rp}, @var{n}@} may overlap, provided -@math{@var{rp} @le{} @var{sp}}. - -This function is written in assembly for most CPUs. -@end deftypefun - -@deftypefun int mpn_cmp (const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -Compare @{@var{s1p}, @var{n}@} and @{@var{s2p}, @var{n}@} and return a -positive value if @math{@var{s1} > @var{s2}}, 0 if they are equal, or a -negative value if @math{@var{s1} < @var{s2}}. -@end deftypefun - -@deftypefun int mpn_zero_p (const mp_limb_t *@var{sp}, mp_size_t @var{n}) -Test @{@var{sp}, @var{n}@} and return 1 if the operand is zero, 0 otherwise. -@end deftypefun - -@deftypefun mp_size_t mpn_gcd (mp_limb_t *@var{rp}, mp_limb_t *@var{xp}, mp_size_t @var{xn}, mp_limb_t *@var{yp}, mp_size_t @var{yn}) -Set @{@var{rp}, @var{retval}@} to the greatest common divisor of @{@var{xp}, -@var{xn}@} and @{@var{yp}, @var{yn}@}. The result can be up to @var{yn} limbs, -the return value is the actual number produced. Both source operands are -destroyed. - -It is required that @math{@var{xn} @ge @var{yn} > 0}, and the most significant -limb of @{@var{yp}, @var{yn}@} must be non-zero. No overlap is permitted -between @{@var{xp}, @var{xn}@} and @{@var{yp}, @var{yn}@}. -@end deftypefun - -@deftypefun mp_limb_t mpn_gcd_1 (const mp_limb_t *@var{xp}, mp_size_t @var{xn}, mp_limb_t @var{ylimb}) -Return the greatest common divisor of @{@var{xp}, @var{xn}@} and @var{ylimb}. -Both operands must be non-zero. -@end deftypefun - -@deftypefun mp_size_t mpn_gcdext (mp_limb_t *@var{gp}, mp_limb_t *@var{sp}, mp_size_t *@var{sn}, mp_limb_t *@var{up}, mp_size_t @var{un}, mp_limb_t *@var{vp}, mp_size_t @var{vn}) -Let @m{U,@var{U}} be defined by @{@var{up}, @var{un}@} and let @m{V,@var{V}} be -defined by @{@var{vp}, @var{vn}@}. - -Compute the greatest common divisor @math{G} of @math{U} and @math{V}. Compute -a cofactor @math{S} such that @math{G = US + VT}. The second cofactor @var{T} -is not computed but can easily be obtained from @m{(G - US) / V, (@var{G} - -@var{U}*@var{S}) / @var{V}} (the division will be exact). It is required that -@math{@var{un} @ge @var{vn} > 0}, and the most significant -limb of @{@var{vp}, @var{vn}@} must be non-zero. - -@math{S} satisfies @math{S = 1} or @math{@GMPabs{S} < V / (2 G)}. @math{S = -0} if and only if @math{V} divides @math{U} (i.e., @math{G = V}). - -Store @math{G} at @var{gp} and let the return value define its limb count. -Store @math{S} at @var{sp} and let |*@var{sn}| define its limb count. @math{S} -can be negative; when this happens *@var{sn} will be negative. The area at -@var{gp} should have room for @var{vn} limbs and the area at @var{sp} should -have room for @math{@var{vn}+1} limbs. - -Both source operands are destroyed. - -Compatibility notes: GMP 4.3.0 and 4.3.1 defined @math{S} less strictly. -Earlier as well as later GMP releases define @math{S} as described here. -GMP releases before GMP 4.3.0 required additional space for both input and output -areas. More precisely, the areas @{@var{up}, @math{@var{un}+1}@} and -@{@var{vp}, @math{@var{vn}+1}@} were destroyed (i.e.@: the operands plus an -extra limb past the end of each), and the areas pointed to by @var{gp} and -@var{sp} should each have room for @math{@var{un}+1} limbs. -@end deftypefun - -@deftypefun mp_size_t mpn_sqrtrem (mp_limb_t *@var{r1p}, mp_limb_t *@var{r2p}, const mp_limb_t *@var{sp}, mp_size_t @var{n}) -Compute the square root of @{@var{sp}, @var{n}@} and put the result at -@{@var{r1p}, @math{@GMPceil{@var{n}/2}}@} and the remainder at @{@var{r2p}, -@var{retval}@}. @var{r2p} needs space for @var{n} limbs, but the return value -indicates how many are produced. - -The most significant limb of @{@var{sp}, @var{n}@} must be non-zero. The -areas @{@var{r1p}, @math{@GMPceil{@var{n}/2}}@} and @{@var{sp}, @var{n}@} must -be completely separate. The areas @{@var{r2p}, @var{n}@} and @{@var{sp}, -@var{n}@} must be either identical or completely separate. - -If the remainder is not wanted then @var{r2p} can be @code{NULL}, and in this -case the return value is zero or non-zero according to whether the remainder -would have been zero or non-zero. - -A return value of zero indicates a perfect square. See also -@code{mpn_perfect_square_p}. -@end deftypefun - -@deftypefun size_t mpn_sizeinbase (const mp_limb_t *@var{xp}, mp_size_t @var{n}, int @var{base}) -Return the size of @{@var{xp},@var{n}@} measured in number of digits in the -given @var{base}. @var{base} can vary from 2 to 62. Requires @math{@var{n} > 0} -and @math{@var{xp}[@var{n}-1] > 0}. The result will be either exact or -1 too big. If @var{base} is a power of 2, the result is always exact. -@end deftypefun - -@deftypefun mp_size_t mpn_get_str (unsigned char *@var{str}, int @var{base}, mp_limb_t *@var{s1p}, mp_size_t @var{s1n}) -Convert @{@var{s1p}, @var{s1n}@} to a raw unsigned char array at @var{str} in -base @var{base}, and return the number of characters produced. There may be -leading zeros in the string. The string is not in ASCII; to convert it to -printable format, add the ASCII codes for @samp{0} or @samp{A}, depending on -the base and range. @var{base} can vary from 2 to 256. - -The most significant limb of the input @{@var{s1p}, @var{s1n}@} must be -non-zero. The input @{@var{s1p}, @var{s1n}@} is clobbered, except when -@var{base} is a power of 2, in which case it's unchanged. - -The area at @var{str} has to have space for the largest possible number -represented by a @var{s1n} long limb array, plus one extra character. -@end deftypefun - -@deftypefun mp_size_t mpn_set_str (mp_limb_t *@var{rp}, const unsigned char *@var{str}, size_t @var{strsize}, int @var{base}) -Convert bytes @{@var{str},@var{strsize}@} in the given @var{base} to limbs at -@var{rp}. - -@math{@var{str}[0]} is the most significant input byte and -@math{@var{str}[@var{strsize}-1]} is the least significant input byte. Each -byte should be a value in the range 0 to @math{@var{base}-1}, not an ASCII -character. @var{base} can vary from 2 to 256. - -The converted value is @{@var{rp},@var{rn}@} where @var{rn} is the return -value. If the most significant input byte @math{@var{str}[0]} is non-zero, -then @math{@var{rp}[@var{rn}-1]} will be non-zero, else -@math{@var{rp}[@var{rn}-1]} and some number of subsequent limbs may be zero. - -The area at @var{rp} has to have space for the largest possible number with -@var{strsize} digits in the chosen base, plus one extra limb. - -The input must have at least one byte, and no overlap is permitted between -@{@var{str},@var{strsize}@} and the result at @var{rp}. -@end deftypefun - -@deftypefun {mp_bitcnt_t} mpn_scan0 (const mp_limb_t *@var{s1p}, mp_bitcnt_t @var{bit}) -Scan @var{s1p} from bit position @var{bit} for the next clear bit. - -It is required that there be a clear bit within the area at @var{s1p} at or -beyond bit position @var{bit}, so that the function has something to return. -@end deftypefun - -@deftypefun {mp_bitcnt_t} mpn_scan1 (const mp_limb_t *@var{s1p}, mp_bitcnt_t @var{bit}) -Scan @var{s1p} from bit position @var{bit} for the next set bit. - -It is required that there be a set bit within the area at @var{s1p} at or -beyond bit position @var{bit}, so that the function has something to return. -@end deftypefun - -@deftypefun void mpn_random (mp_limb_t *@var{r1p}, mp_size_t @var{r1n}) -@deftypefunx void mpn_random2 (mp_limb_t *@var{r1p}, mp_size_t @var{r1n}) -Generate a random number of length @var{r1n} and store it at @var{r1p}. The -most significant limb is always non-zero. @code{mpn_random} generates -uniformly distributed limb data, @code{mpn_random2} generates long strings of -zeros and ones in the binary representation. - -@code{mpn_random2} is intended for testing the correctness of the @code{mpn} -routines. -@end deftypefun - -@deftypefun {mp_bitcnt_t} mpn_popcount (const mp_limb_t *@var{s1p}, mp_size_t @var{n}) -Count the number of set bits in @{@var{s1p}, @var{n}@}. -@end deftypefun - -@deftypefun {mp_bitcnt_t} mpn_hamdist (const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -Compute the hamming distance between @{@var{s1p}, @var{n}@} and @{@var{s2p}, -@var{n}@}, which is the number of bit positions where the two operands have -different bit values. -@end deftypefun - -@deftypefun int mpn_perfect_square_p (const mp_limb_t *@var{s1p}, mp_size_t @var{n}) -Return non-zero iff @{@var{s1p}, @var{n}@} is a perfect square. -The most significant limb of the input @{@var{s1p}, @var{n}@} must be -non-zero. -@end deftypefun - -@deftypefun void mpn_and_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -Perform the bitwise logical and of @{@var{s1p}, @var{n}@} and @{@var{s2p}, -@var{n}@}, and write the result to @{@var{rp}, @var{n}@}. -@end deftypefun - -@deftypefun void mpn_ior_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -Perform the bitwise logical inclusive or of @{@var{s1p}, @var{n}@} and -@{@var{s2p}, @var{n}@}, and write the result to @{@var{rp}, @var{n}@}. -@end deftypefun - -@deftypefun void mpn_xor_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -Perform the bitwise logical exclusive or of @{@var{s1p}, @var{n}@} and -@{@var{s2p}, @var{n}@}, and write the result to @{@var{rp}, @var{n}@}. -@end deftypefun - -@deftypefun void mpn_andn_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -Perform the bitwise logical and of @{@var{s1p}, @var{n}@} and the bitwise -complement of @{@var{s2p}, @var{n}@}, and write the result to @{@var{rp}, @var{n}@}. -@end deftypefun - -@deftypefun void mpn_iorn_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -Perform the bitwise logical inclusive or of @{@var{s1p}, @var{n}@} and the bitwise -complement of @{@var{s2p}, @var{n}@}, and write the result to @{@var{rp}, @var{n}@}. -@end deftypefun - -@deftypefun void mpn_nand_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -Perform the bitwise logical and of @{@var{s1p}, @var{n}@} and @{@var{s2p}, -@var{n}@}, and write the bitwise complement of the result to @{@var{rp}, @var{n}@}. -@end deftypefun - -@deftypefun void mpn_nior_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -Perform the bitwise logical inclusive or of @{@var{s1p}, @var{n}@} and -@{@var{s2p}, @var{n}@}, and write the bitwise complement of the result to -@{@var{rp}, @var{n}@}. -@end deftypefun - -@deftypefun void mpn_xnor_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -Perform the bitwise logical exclusive or of @{@var{s1p}, @var{n}@} and -@{@var{s2p}, @var{n}@}, and write the bitwise complement of the result to -@{@var{rp}, @var{n}@}. -@end deftypefun - -@deftypefun void mpn_com (mp_limb_t *@var{rp}, const mp_limb_t *@var{sp}, mp_size_t @var{n}) -Perform the bitwise complement of @{@var{sp}, @var{n}@}, and write the result -to @{@var{rp}, @var{n}@}. -@end deftypefun - -@deftypefun void mpn_copyi (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n}) -Copy from @{@var{s1p}, @var{n}@} to @{@var{rp}, @var{n}@}, increasingly. -@end deftypefun - -@deftypefun void mpn_copyd (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n}) -Copy from @{@var{s1p}, @var{n}@} to @{@var{rp}, @var{n}@}, decreasingly. -@end deftypefun - -@deftypefun void mpn_zero (mp_limb_t *@var{rp}, mp_size_t @var{n}) -Zero @{@var{rp}, @var{n}@}. -@end deftypefun - -@sp 1 -@section Low-level functions for cryptography -@cindex Low-level functions for cryptography -@cindex Cryptography functions, low-level - -The functions prefixed with @code{mpn_sec_} and @code{mpn_cnd_} are designed to -perform the exact same low-level operations and have the same cache access -patterns for any two same-size arguments, assuming that function arguments are -placed at the same position and that the machine state is identical upon -function entry. These functions are intended for cryptographic purposes, where -resilience to side-channel attacks is desired. - -These functions are less efficient than their ``leaky'' counterparts; their -performance for operands of the sizes typically used for cryptographic -applications is between 15% and 100% worse. For larger operands, these -functions might be inadequate, since they rely on asymptotically elementary -algorithms. - -These functions do not make any explicit allocations. Those of these functions -that need scratch space accept a scratch space operand. This convention allows -callers to keep sensitive data in designated memory areas. Note however that -compilers may choose to spill scalar values used within these functions to -their stack frame and that such scalars may contain sensitive data. - -In addition to these specially crafted functions, the following @code{mpn} -functions are naturally side-channel resistant: @code{mpn_add_n}, -@code{mpn_sub_n}, @code{mpn_lshift}, @code{mpn_rshift}, @code{mpn_zero}, -@code{mpn_copyi}, @code{mpn_copyd}, @code{mpn_com}, and the logical function -(@code{mpn_and_n}, etc). - -There are some exceptions from the side-channel resilience: (1) Some assembly -implementations of @code{mpn_lshift} identify shift-by-one as a special case. -This is a problem iff the shift count is a function of sensitive data. (2) -Alpha ev6 and Pentium4 using 64-bit limbs have leaky @code{mpn_add_n} and -@code{mpn_sub_n}. (3) Alpha ev6 has a leaky @code{mpn_mul_1} which also makes -@code{mpn_sec_mul} on those systems unsafe. - -@deftypefun mp_limb_t mpn_cnd_add_n (mp_limb_t @var{cnd}, mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -@deftypefunx mp_limb_t mpn_cnd_sub_n (mp_limb_t @var{cnd}, mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n}) -These functions do conditional addition and subtraction. If @var{cnd} is -non-zero, they produce the same result as a regular @code{mpn_add_n} or -@code{mpn_sub_n}, and if @var{cnd} is zero, they copy @{@var{s1p},@var{n}@} to -the result area and return zero. The functions are designed to have timing and -memory access patterns depending only on size and location of the data areas, -but independent of the condition @var{cnd}. Like for @code{mpn_add_n} and -@code{mpn_sub_n}, on most machines, the timing will also be independent of the -actual limb values. -@end deftypefun - -@deftypefun mp_limb_t mpn_sec_add_1 (mp_limb_t *@var{rp}, const mp_limb_t *@var{ap}, mp_size_t @var{n}, mp_limb_t @var{b}, mp_limb_t *@var{tp}) -@deftypefunx mp_limb_t mpn_sec_sub_1 (mp_limb_t *@var{rp}, const mp_limb_t *@var{ap}, mp_size_t @var{n}, mp_limb_t @var{b}, mp_limb_t *@var{tp}) -Set @var{R} to @var{A} + @var{b} or @var{A} - @var{b}, respectively, where -@var{R} = @{@var{rp},@var{n}@}, @var{A} = @{@var{ap},@var{n}@}, and @var{b} is -a single limb. Returns carry. - -These functions take @math{O(N)} time, unlike the leaky functions -@code{mpn_add_1} which are @math{O(1)} on average. They require scratch space -of @code{mpn_sec_add_1_itch(@var{n})} and @code{mpn_sec_sub_1_itch(@var{n})} -limbs, respectively, to be passed in the @var{tp} parameter. The scratch space -requirements are guaranteed to be at most @var{n} limbs, and increase -monotonously in the operand size. -@end deftypefun - -@deftypefun void mpn_cnd_swap (mp_limb_t @var{cnd}, volatile mp_limb_t *@var{ap}, volatile mp_limb_t *@var{bp}, mp_size_t @var{n}) -If @var{cnd} is non-zero, swaps the contents of the areas @{@var{ap},@var{n}@} -and @{@var{bp},@var{n}@}. Otherwise, the areas are left unmodified. -Implemented using logical operations on the limbs, with the same memory -accesses independent of the value of @var{cnd}. -@end deftypefun - -@deftypefun void mpn_sec_mul (mp_limb_t *@var{rp}, const mp_limb_t *@var{ap}, mp_size_t @var{an}, const mp_limb_t *@var{bp}, mp_size_t @var{bn}, mp_limb_t *@var{tp}) -@deftypefunx mp_size_t mpn_sec_mul_itch (mp_size_t @var{an}, mp_size_t @var{bn}) -Set @var{R} to @math{A @times{} B}, where @var{A} = @{@var{ap},@var{an}@}, -@var{B} = @{@var{bp},@var{bn}@}, and @var{R} = -@{@var{rp},@math{@var{an}+@var{bn}}@}. - -It is required that @math{@var{an} @ge @var{bn} > 0}. - -No overlapping between @var{R} and the input operands is allowed. For -@math{@var{A} = @var{B}}, use @code{mpn_sec_sqr} for optimal performance. - -This function requires scratch space of @code{mpn_sec_mul_itch(@var{an}, -@var{bn})} limbs to be passed in the @var{tp} parameter. The scratch space -requirements are guaranteed to increase monotonously in the operand sizes. -@end deftypefun - - -@deftypefun void mpn_sec_sqr (mp_limb_t *@var{rp}, const mp_limb_t *@var{ap}, mp_size_t @var{an}, mp_limb_t *@var{tp}) -@deftypefunx mp_size_t mpn_sec_sqr_itch (mp_size_t @var{an}) -Set @var{R} to @math{A^2}, where @var{A} = @{@var{ap},@var{an}@}, and @var{R} = -@{@var{rp},@math{2@var{an}}@}. - -It is required that @math{@var{an} > 0}. - -No overlapping between @var{R} and the input operands is allowed. - -This function requires scratch space of @code{mpn_sec_sqr_itch(@var{an})} limbs -to be passed in the @var{tp} parameter. The scratch space requirements are -guaranteed to increase monotonously in the operand size. -@end deftypefun - - -@deftypefun void mpn_sec_powm (mp_limb_t *@var{rp}, const mp_limb_t *@var{bp}, mp_size_t @var{bn}, const mp_limb_t *@var{ep}, mp_bitcnt_t @var{enb}, const mp_limb_t *@var{mp}, mp_size_t @var{n}, mp_limb_t *@var{tp}) -@deftypefunx mp_size_t mpn_sec_powm_itch (mp_size_t @var{bn}, mp_bitcnt_t @var{enb}, size_t @var{n}) -Set @var{R} to @m{B^E \bmod @var{M}, (@var{B} raised to @var{E}) modulo -@var{M}}, where @var{R} = @{@var{rp},@var{n}@}, @var{M} = @{@var{mp},@var{n}@}, -and @var{E} = @{@var{ep},@math{@GMPceil{@var{enb} / -@code{GMP\_NUMB\_BITS}}}@}. - -It is required that @math{@var{B} > 0}, that @math{@var{M} > 0} is odd, and -that @m{@var{E} < 2@GMPraise{@var{enb}}, @var{E} < 2^@var{enb}}. - -No overlapping between @var{R} and the input operands is allowed. - -This function requires scratch space of @code{mpn_sec_powm_itch(@var{bn}, -@var{enb}, @var{n})} limbs to be passed in the @var{tp} parameter. The scratch -space requirements are guaranteed to increase monotonously in the operand -sizes. -@end deftypefun - -@deftypefun void mpn_sec_tabselect (mp_limb_t *@var{rp}, const mp_limb_t *@var{tab}, mp_size_t @var{n}, mp_size_t @var{nents}, mp_size_t @var{which}) -Select entry @var{which} from table @var{tab}, which has @var{nents} entries, each @var{n} -limbs. Store the selected entry at @var{rp}. - -This function reads the entire table to avoid side-channel information leaks. -@end deftypefun - -@deftypefun mp_limb_t mpn_sec_div_qr (mp_limb_t *@var{qp}, mp_limb_t *@var{np}, mp_size_t @var{nn}, const mp_limb_t *@var{dp}, mp_size_t @var{dn}, mp_limb_t *@var{tp}) -@deftypefunx mp_size_t mpn_sec_div_qr_itch (mp_size_t @var{nn}, mp_size_t @var{dn}) - -Set @var{Q} to @m{\lfloor @var{N} / @var{D}\rfloor, the truncated quotient -@var{N} / @var{D}} and @var{R} to @m{@var{N} \bmod @var{D}, @var{N} modulo -@var{D}}, where @var{N} = @{@var{np},@var{nn}@}, @var{D} = -@{@var{dp},@var{dn}@}, @var{Q}'s most significant limb is the function return -value and the remaining limbs are @{@var{qp},@var{nn-dn}@}, and @var{R} = -@{@var{np},@var{dn}@}. - -It is required that @math{@var{nn} @ge @var{dn} @ge 1}, and that -@m{@var{dp}[@var{dn}-1] @neq 0, @var{dp}[@var{dn}-1] != 0}. This does not -imply that @math{@var{N} @ge @var{D}} since @var{N} might be zero-padded. - -Note the overlapping between @var{N} and @var{R}. No other operand overlapping -is allowed. The entire space occupied by @var{N} is overwritten. - -This function requires scratch space of @code{mpn_sec_div_qr_itch(@var{nn}, -@var{dn})} limbs to be passed in the @var{tp} parameter. -@end deftypefun - -@deftypefun void mpn_sec_div_r (mp_limb_t *@var{np}, mp_size_t @var{nn}, const mp_limb_t *@var{dp}, mp_size_t @var{dn}, mp_limb_t *@var{tp}) -@deftypefunx mp_size_t mpn_sec_div_r_itch (mp_size_t @var{nn}, mp_size_t @var{dn}) - -Set @var{R} to @m{@var{N} \bmod @var{D}, @var{N} modulo @var{D}}, where @var{N} -= @{@var{np},@var{nn}@}, @var{D} = @{@var{dp},@var{dn}@}, and @var{R} = -@{@var{np},@var{dn}@}. - -It is required that @math{@var{nn} @ge @var{dn} @ge 1}, and that -@m{@var{dp}[@var{dn}-1] @neq 0, @var{dp}[@var{dn}-1] != 0}. This does not -imply that @math{@var{N} @ge @var{D}} since @var{N} might be zero-padded. - -Note the overlapping between @var{N} and @var{R}. No other operand overlapping -is allowed. The entire space occupied by @var{N} is overwritten. - -This function requires scratch space of @code{mpn_sec_div_r_itch(@var{nn}, -@var{dn})} limbs to be passed in the @var{tp} parameter. -@end deftypefun - -@deftypefun int mpn_sec_invert (mp_limb_t *@var{rp}, mp_limb_t *@var{ap}, const mp_limb_t *@var{mp}, mp_size_t @var{n}, mp_bitcnt_t @var{nbcnt}, mp_limb_t *@var{tp}) -@deftypefunx mp_size_t mpn_sec_invert_itch (mp_size_t @var{n}) -Set @var{R} to @m{@var{A}^{-1} \bmod @var{M}, the inverse of @var{A} modulo -@var{M}}, where @var{R} = @{@var{rp},@var{n}@}, @var{A} = @{@var{ap},@var{n}@}, -and @var{M} = @{@var{mp},@var{n}@}. @strong{This function's interface is -preliminary.} - -If an inverse exists, return 1, otherwise return 0 and leave @var{R} -undefined. In either case, the input @var{A} is destroyed. - -It is required that @var{M} is odd, and that @math{@var{nbcnt} @ge -@GMPceil{\log(@var{A}+1)} + @GMPceil{\log(@var{M}+1)}}. A safe choice is -@m{@var{nbcnt} = 2@var{n} @times{} @code{GMP\_NUMB\_BITS}, @var{nbcnt} = 2 -@times{} @var{n} @times{} GMP_NUMB_BITS}, but a smaller value might improve -performance if @var{M} or @var{A} are known to have leading zero bits. - -This function requires scratch space of @code{mpn_sec_invert_itch(@var{n})} -limbs to be passed in the @var{tp} parameter. -@end deftypefun - - -@sp 1 -@section Nails -@cindex Nails - -@strong{Everything in this section is highly experimental and may disappear or -be subject to incompatible changes in a future version of GMP.} - -Nails are an experimental feature whereby a few bits are left unused at the -top of each @code{mp_limb_t}. This can significantly improve carry handling -on some processors. - -All the @code{mpn} functions accepting limb data will expect the nail bits to -be zero on entry, and will return data with the nails similarly all zero. -This applies both to limb vectors and to single limb arguments. - -Nails can be enabled by configuring with @samp{--enable-nails}. By default -the number of bits will be chosen according to what suits the host processor, -but a particular number can be selected with @samp{--enable-nails=N}. - -At the mpn level, a nail build is neither source nor binary compatible with a -non-nail build, strictly speaking. But programs acting on limbs only through -the mpn functions are likely to work equally well with either build, and -judicious use of the definitions below should make any program compatible with -either build, at the source level. - -For the higher level routines, meaning @code{mpz} etc, a nail build should be -fully source and binary compatible with a non-nail build. - -@defmac GMP_NAIL_BITS -@defmacx GMP_NUMB_BITS -@defmacx GMP_LIMB_BITS -@code{GMP_NAIL_BITS} is the number of nail bits, or 0 when nails are not in -use. @code{GMP_NUMB_BITS} is the number of data bits in a limb. -@code{GMP_LIMB_BITS} is the total number of bits in an @code{mp_limb_t}. In -all cases - -@example -GMP_LIMB_BITS == GMP_NAIL_BITS + GMP_NUMB_BITS -@end example -@end defmac - -@defmac GMP_NAIL_MASK -@defmacx GMP_NUMB_MASK -Bit masks for the nail and number parts of a limb. @code{GMP_NAIL_MASK} is 0 -when nails are not in use. - -@code{GMP_NAIL_MASK} is not often needed, since the nail part can be obtained -with @code{x >> GMP_NUMB_BITS}, and that means one less large constant, which -can help various RISC chips. -@end defmac - -@defmac GMP_NUMB_MAX -The maximum value that can be stored in the number part of a limb. This is -the same as @code{GMP_NUMB_MASK}, but can be used for clarity when doing -comparisons rather than bit-wise operations. -@end defmac - -The term ``nails'' comes from finger or toe nails, which are at the ends of a -limb (arm or leg). ``numb'' is short for number, but is also how the -developers felt after trying for a long time to come up with sensible names -for these things. - -In the future (the distant future most likely) a non-zero nail might be -permitted, giving non-unique representations for numbers in a limb vector. -This would help vector processors since carries would only ever need to -propagate one or two limbs. - - -@node Random Number Functions, Formatted Output, Low-level Functions, Top -@chapter Random Number Functions -@cindex Random number functions - -Sequences of pseudo-random numbers in GMP are generated using a variable of -type @code{gmp_randstate_t}, which holds an algorithm selection and a current -state. Such a variable must be initialized by a call to one of the -@code{gmp_randinit} functions, and can be seeded with one of the -@code{gmp_randseed} functions. - -The functions actually generating random numbers are described in @ref{Integer -Random Numbers}, and @ref{Miscellaneous Float Functions}. - -The older style random number functions don't accept a @code{gmp_randstate_t} -parameter but instead share a global variable of that type. They use a -default algorithm and are currently not seeded (though perhaps that will -change in the future). The new functions accepting a @code{gmp_randstate_t} -are recommended for applications that care about randomness. - -@menu -* Random State Initialization:: -* Random State Seeding:: -* Random State Miscellaneous:: -@end menu - -@node Random State Initialization, Random State Seeding, Random Number Functions, Random Number Functions -@section Random State Initialization -@cindex Random number state -@cindex Initialization functions - -@deftypefun void gmp_randinit_default (gmp_randstate_t @var{state}) -Initialize @var{state} with a default algorithm. This will be a compromise -between speed and randomness, and is recommended for applications with no -special requirements. Currently this is @code{gmp_randinit_mt}. -@end deftypefun - -@deftypefun void gmp_randinit_mt (gmp_randstate_t @var{state}) -@cindex Mersenne twister random numbers -Initialize @var{state} for a Mersenne Twister algorithm. This algorithm is -fast and has good randomness properties. -@end deftypefun - -@deftypefun void gmp_randinit_lc_2exp (gmp_randstate_t @var{state}, const mpz_t @var{a}, @w{unsigned long @var{c}}, @w{mp_bitcnt_t @var{m2exp}}) -@cindex Linear congruential random numbers -Initialize @var{state} with a linear congruential algorithm @m{X = (@var{a}X + -@var{c}) @bmod 2^{m2exp}, X = (@var{a}*X + @var{c}) mod 2^@var{m2exp}}. - -The low bits of @math{X} in this algorithm are not very random. The least -significant bit will have a period no more than 2, and the second bit no more -than 4, etc. For this reason only the high half of each @math{X} is actually -used. - -When a random number of more than @math{@var{m2exp}/2} bits is to be -generated, multiple iterations of the recurrence are used and the results -concatenated. -@end deftypefun - -@deftypefun int gmp_randinit_lc_2exp_size (gmp_randstate_t @var{state}, mp_bitcnt_t @var{size}) -@cindex Linear congruential random numbers -Initialize @var{state} for a linear congruential algorithm as per -@code{gmp_randinit_lc_2exp}. @var{a}, @var{c} and @var{m2exp} are selected -from a table, chosen so that @var{size} bits (or more) of each @math{X} will -be used, i.e.@: @math{@var{m2exp}/2 @ge{} @var{size}}. - -If successful the return value is non-zero. If @var{size} is bigger than the -table data provides then the return value is zero. The maximum @var{size} -currently supported is 128. -@end deftypefun - -@deftypefun void gmp_randinit_set (gmp_randstate_t @var{rop}, gmp_randstate_t @var{op}) -Initialize @var{rop} with a copy of the algorithm and state from @var{op}. -@end deftypefun - -@c Although gmp_randinit, gmp_errno and related constants are obsolete, we -@c still put @findex entries for them, since they're still documented and -@c someone might be looking them up when perusing old application code. - -@deftypefun void gmp_randinit (gmp_randstate_t @var{state}, @w{gmp_randalg_t @var{alg}}, @dots{}) -@strong{This function is obsolete.} - -@findex GMP_RAND_ALG_LC -@findex GMP_RAND_ALG_DEFAULT -Initialize @var{state} with an algorithm selected by @var{alg}. The only -choice is @code{GMP_RAND_ALG_LC}, which is @code{gmp_randinit_lc_2exp_size} -described above. A third parameter of type @code{unsigned long} is required, -this is the @var{size} for that function. @code{GMP_RAND_ALG_DEFAULT} or 0 -are the same as @code{GMP_RAND_ALG_LC}. - -@c For reference, this is the only place gmp_errno has been documented, and -@c due to being non thread safe we won't be adding to it's uses. -@findex gmp_errno -@findex GMP_ERROR_UNSUPPORTED_ARGUMENT -@findex GMP_ERROR_INVALID_ARGUMENT -@code{gmp_randinit} sets bits in the global variable @code{gmp_errno} to -indicate an error. @code{GMP_ERROR_UNSUPPORTED_ARGUMENT} if @var{alg} is -unsupported, or @code{GMP_ERROR_INVALID_ARGUMENT} if the @var{size} parameter -is too big. It may be noted this error reporting is not thread safe (a good -reason to use @code{gmp_randinit_lc_2exp_size} instead). -@end deftypefun - -@deftypefun void gmp_randclear (gmp_randstate_t @var{state}) -Free all memory occupied by @var{state}. -@end deftypefun - - -@node Random State Seeding, Random State Miscellaneous, Random State Initialization, Random Number Functions -@section Random State Seeding -@cindex Random number seeding -@cindex Seeding random numbers - -@deftypefun void gmp_randseed (gmp_randstate_t @var{state}, const mpz_t @var{seed}) -@deftypefunx void gmp_randseed_ui (gmp_randstate_t @var{state}, @w{unsigned long int @var{seed}}) -Set an initial seed value into @var{state}. - -The size of a seed determines how many different sequences of random numbers -that it's possible to generate. The ``quality'' of the seed is the randomness -of a given seed compared to the previous seed used, and this affects the -randomness of separate number sequences. The method for choosing a seed is -critical if the generated numbers are to be used for important applications, -such as generating cryptographic keys. - -Traditionally the system time has been used to seed, but care needs to be -taken with this. If an application seeds often and the resolution of the -system clock is low, then the same sequence of numbers might be repeated. -Also, the system time is quite easy to guess, so if unpredictability is -required then it should definitely not be the only source for the seed value. -On some systems there's a special device @file{/dev/random} which provides -random data better suited for use as a seed. -@end deftypefun - - -@node Random State Miscellaneous, , Random State Seeding, Random Number Functions -@section Random State Miscellaneous - -@deftypefun {unsigned long} gmp_urandomb_ui (gmp_randstate_t @var{state}, unsigned long @var{n}) -Return a uniformly distributed random number of @var{n} bits, i.e.@: in the -range 0 to @m{2^n-1,2^@var{n}-1} inclusive. @var{n} must be less than or -equal to the number of bits in an @code{unsigned long}. -@end deftypefun - -@deftypefun {unsigned long} gmp_urandomm_ui (gmp_randstate_t @var{state}, unsigned long @var{n}) -Return a uniformly distributed random number in the range 0 to -@math{@var{n}-1}, inclusive. -@end deftypefun - - -@node Formatted Output, Formatted Input, Random Number Functions, Top -@chapter Formatted Output -@cindex Formatted output -@cindex @code{printf} formatted output - -@menu -* Formatted Output Strings:: -* Formatted Output Functions:: -* C++ Formatted Output:: -@end menu - -@node Formatted Output Strings, Formatted Output Functions, Formatted Output, Formatted Output -@section Format Strings - -@code{gmp_printf} and friends accept format strings similar to the standard C -@code{printf} (@pxref{Formatted Output,, Formatted Output, libc, The GNU C -Library Reference Manual}). A format specification is of the form - -@example -% [flags] [width] [.[precision]] [type] conv -@end example - -GMP adds types @samp{Z}, @samp{Q} and @samp{F} for @code{mpz_t}, @code{mpq_t} -and @code{mpf_t} respectively, @samp{M} for @code{mp_limb_t}, and @samp{N} for -an @code{mp_limb_t} array. @samp{Z}, @samp{Q}, @samp{M} and @samp{N} behave -like integers. @samp{Q} will print a @samp{/} and a denominator, if needed. -@samp{F} behaves like a float. For example, - -@example -mpz_t z; -gmp_printf ("%s is an mpz %Zd\n", "here", z); - -mpq_t q; -gmp_printf ("a hex rational: %#40Qx\n", q); - -mpf_t f; -int n; -gmp_printf ("fixed point mpf %.*Ff with %d digits\n", n, f, n); - -mp_limb_t l; -gmp_printf ("limb %Mu\n", l); - -const mp_limb_t *ptr; -mp_size_t size; -gmp_printf ("limb array %Nx\n", ptr, size); -@end example - -For @samp{N} the limbs are expected least significant first, as per the -@code{mpn} functions (@pxref{Low-level Functions}). A negative size can be -given to print the value as a negative. - -All the standard C @code{printf} types behave the same as the C library -@code{printf}, and can be freely intermixed with the GMP extensions. In the -current implementation the standard parts of the format string are simply -handed to @code{printf} and only the GMP extensions handled directly. - -The flags accepted are as follows. GLIBC style @nisamp{'} is only for the -standard C types (not the GMP types), and only if the C library supports it. - -@quotation -@multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM} -@item @nicode{0} @tab pad with zeros (rather than spaces) -@item @nicode{#} @tab show the base with @samp{0x}, @samp{0X} or @samp{0} -@item @nicode{+} @tab always show a sign -@item (space) @tab show a space or a @samp{-} sign -@item @nicode{'} @tab group digits, GLIBC style (not GMP types) -@end multitable -@end quotation - -The optional width and precision can be given as a number within the format -string, or as a @samp{*} to take an extra parameter of type @code{int}, the -same as the standard @code{printf}. - -The standard types accepted are as follows. @samp{h} and @samp{l} are -portable, the rest will depend on the compiler (or include files) for the type -and the C library for the output. - -@quotation -@multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM} -@item @nicode{h} @tab @nicode{short} -@item @nicode{hh} @tab @nicode{char} -@item @nicode{j} @tab @nicode{intmax_t} or @nicode{uintmax_t} -@item @nicode{l} @tab @nicode{long} or @nicode{wchar_t} -@item @nicode{ll} @tab @nicode{long long} -@item @nicode{L} @tab @nicode{long double} -@item @nicode{q} @tab @nicode{quad_t} or @nicode{u_quad_t} -@item @nicode{t} @tab @nicode{ptrdiff_t} -@item @nicode{z} @tab @nicode{size_t} -@end multitable -@end quotation - -@noindent -The GMP types are - -@quotation -@multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM} -@item @nicode{F} @tab @nicode{mpf_t}, float conversions -@item @nicode{Q} @tab @nicode{mpq_t}, integer conversions -@item @nicode{M} @tab @nicode{mp_limb_t}, integer conversions -@item @nicode{N} @tab @nicode{mp_limb_t} array, integer conversions -@item @nicode{Z} @tab @nicode{mpz_t}, integer conversions -@end multitable -@end quotation - -The conversions accepted are as follows. @samp{a} and @samp{A} are always -supported for @code{mpf_t} but depend on the C library for standard C float -types. @samp{m} and @samp{p} depend on the C library. - -@quotation -@multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM} -@item @nicode{a} @nicode{A} @tab hex floats, C99 style -@item @nicode{c} @tab character -@item @nicode{d} @tab decimal integer -@item @nicode{e} @nicode{E} @tab scientific format float -@item @nicode{f} @tab fixed point float -@item @nicode{i} @tab same as @nicode{d} -@item @nicode{g} @nicode{G} @tab fixed or scientific float -@item @nicode{m} @tab @code{strerror} string, GLIBC style -@item @nicode{n} @tab store characters written so far -@item @nicode{o} @tab octal integer -@item @nicode{p} @tab pointer -@item @nicode{s} @tab string -@item @nicode{u} @tab unsigned integer -@item @nicode{x} @nicode{X} @tab hex integer -@end multitable -@end quotation - -@samp{o}, @samp{x} and @samp{X} are unsigned for the standard C types, but for -types @samp{Z}, @samp{Q} and @samp{N} they are signed. @samp{u} is not -meaningful for @samp{Z}, @samp{Q} and @samp{N}. - -@samp{M} is a proxy for the C library @samp{l} or @samp{L}, according to the -size of @code{mp_limb_t}. Unsigned conversions will be usual, but a signed -conversion can be used and will interpret the value as a twos complement -negative. - -@samp{n} can be used with any type, even the GMP types. - -Other types or conversions that might be accepted by the C library -@code{printf} cannot be used through @code{gmp_printf}, this includes for -instance extensions registered with GLIBC @code{register_printf_function}. -Also currently there's no support for POSIX @samp{$} style numbered arguments -(perhaps this will be added in the future). - -The precision field has its usual meaning for integer @samp{Z} and float -@samp{F} types, but is currently undefined for @samp{Q} and should not be used -with that. - -@code{mpf_t} conversions only ever generate as many digits as can be -accurately represented by the operand, the same as @code{mpf_get_str} does. -Zeros will be used if necessary to pad to the requested precision. This -happens even for an @samp{f} conversion of an @code{mpf_t} which is an -integer, for instance @math{2^@W{1024}} in an @code{mpf_t} of 128 bits -precision will only produce about 40 digits, then pad with zeros to the -decimal point. An empty precision field like @samp{%.Fe} or @samp{%.Ff} can -be used to specifically request just the significant digits. Without any dot -and thus no precision field, a precision value of 6 will be used. Note that -these rules mean that @samp{%Ff}, @samp{%.Ff}, and @samp{%.0Ff} will all be -different. - -The decimal point character (or string) is taken from the current locale -settings on systems which provide @code{localeconv} (@pxref{Locales,, Locales -and Internationalization, libc, The GNU C Library Reference Manual}). The C -library will normally do the same for standard float output. - -The format string is only interpreted as plain @code{char}s, multibyte -characters are not recognised. Perhaps this will change in the future. - - -@node Formatted Output Functions, C++ Formatted Output, Formatted Output Strings, Formatted Output -@section Functions -@cindex Output functions - -Each of the following functions is similar to the corresponding C library -function. The basic @code{printf} forms take a variable argument list. The -@code{vprintf} forms take an argument pointer, see @ref{Variadic Functions,, -Variadic Functions, libc, The GNU C Library Reference Manual}, or @samp{man 3 -va_start}. - -It should be emphasised that if a format string is invalid, or the arguments -don't match what the format specifies, then the behaviour of any of these -functions will be unpredictable. GCC format string checking is not available, -since it doesn't recognise the GMP extensions. - -The file based functions @code{gmp_printf} and @code{gmp_fprintf} will return -@math{-1} to indicate a write error. Output is not ``atomic'', so partial -output may be produced if a write error occurs. All the functions can return -@math{-1} if the C library @code{printf} variant in use returns @math{-1}, but -this shouldn't normally occur. - -@deftypefun int gmp_printf (const char *@var{fmt}, @dots{}) -@deftypefunx int gmp_vprintf (const char *@var{fmt}, va_list @var{ap}) -Print to the standard output @code{stdout}. Return the number of characters -written, or @math{-1} if an error occurred. -@end deftypefun - -@deftypefun int gmp_fprintf (FILE *@var{fp}, const char *@var{fmt}, @dots{}) -@deftypefunx int gmp_vfprintf (FILE *@var{fp}, const char *@var{fmt}, va_list @var{ap}) -Print to the stream @var{fp}. Return the number of characters written, or -@math{-1} if an error occurred. -@end deftypefun - -@deftypefun int gmp_sprintf (char *@var{buf}, const char *@var{fmt}, @dots{}) -@deftypefunx int gmp_vsprintf (char *@var{buf}, const char *@var{fmt}, va_list @var{ap}) -Form a null-terminated string in @var{buf}. Return the number of characters -written, excluding the terminating null. - -No overlap is permitted between the space at @var{buf} and the string -@var{fmt}. - -These functions are not recommended, since there's no protection against -exceeding the space available at @var{buf}. -@end deftypefun - -@deftypefun int gmp_snprintf (char *@var{buf}, size_t @var{size}, const char *@var{fmt}, @dots{}) -@deftypefunx int gmp_vsnprintf (char *@var{buf}, size_t @var{size}, const char *@var{fmt}, va_list @var{ap}) -Form a null-terminated string in @var{buf}. No more than @var{size} bytes -will be written. To get the full output, @var{size} must be enough for the -string and null-terminator. - -The return value is the total number of characters which ought to have been -produced, excluding the terminating null. If @math{@var{retval} @ge{} -@var{size}} then the actual output has been truncated to the first -@math{@var{size}-1} characters, and a null appended. - -No overlap is permitted between the region @{@var{buf},@var{size}@} and the -@var{fmt} string. - -Notice the return value is in ISO C99 @code{snprintf} style. This is so even -if the C library @code{vsnprintf} is the older GLIBC 2.0.x style. -@end deftypefun - -@deftypefun int gmp_asprintf (char **@var{pp}, const char *@var{fmt}, @dots{}) -@deftypefunx int gmp_vasprintf (char **@var{pp}, const char *@var{fmt}, va_list @var{ap}) -Form a null-terminated string in a block of memory obtained from the current -memory allocation function (@pxref{Custom Allocation}). The block will be the -size of the string and null-terminator. The address of the block in stored to -*@var{pp}. The return value is the number of characters produced, excluding -the null-terminator. - -Unlike the C library @code{asprintf}, @code{gmp_asprintf} doesn't return -@math{-1} if there's no more memory available, it lets the current allocation -function handle that. -@end deftypefun - -@deftypefun int gmp_obstack_printf (struct obstack *@var{ob}, const char *@var{fmt}, @dots{}) -@deftypefunx int gmp_obstack_vprintf (struct obstack *@var{ob}, const char *@var{fmt}, va_list @var{ap}) -@cindex @code{obstack} output -Append to the current object in @var{ob}. The return value is the number of -characters written. A null-terminator is not written. - -@var{fmt} cannot be within the current object in @var{ob}, since that object -might move as it grows. - -These functions are available only when the C library provides the obstack -feature, which probably means only on GNU systems, see @ref{Obstacks,, -Obstacks, libc, The GNU C Library Reference Manual}. -@end deftypefun - - -@node C++ Formatted Output, , Formatted Output Functions, Formatted Output -@section C++ Formatted Output -@cindex C++ @code{ostream} output -@cindex @code{ostream} output - -The following functions are provided in @file{libgmpxx} (@pxref{Headers and -Libraries}), which is built if C++ support is enabled (@pxref{Build Options}). -Prototypes are available from @code{<gmp.h>}. - -@deftypefun ostream& operator<< (ostream& @var{stream}, const mpz_t @var{op}) -Print @var{op} to @var{stream}, using its @code{ios} formatting settings. -@code{ios::width} is reset to 0 after output, the same as the standard -@code{ostream operator<<} routines do. - -In hex or octal, @var{op} is printed as a signed number, the same as for -decimal. This is unlike the standard @code{operator<<} routines on @code{int} -etc, which instead give twos complement. -@end deftypefun - -@deftypefun ostream& operator<< (ostream& @var{stream}, const mpq_t @var{op}) -Print @var{op} to @var{stream}, using its @code{ios} formatting settings. -@code{ios::width} is reset to 0 after output, the same as the standard -@code{ostream operator<<} routines do. - -Output will be a fraction like @samp{5/9}, or if the denominator is 1 then -just a plain integer like @samp{123}. - -In hex or octal, @var{op} is printed as a signed value, the same as for -decimal. If @code{ios::showbase} is set then a base indicator is shown on -both the numerator and denominator (if the denominator is required). -@end deftypefun - -@deftypefun ostream& operator<< (ostream& @var{stream}, const mpf_t @var{op}) -Print @var{op} to @var{stream}, using its @code{ios} formatting settings. -@code{ios::width} is reset to 0 after output, the same as the standard -@code{ostream operator<<} routines do. - -The decimal point follows the standard library float @code{operator<<}, which -on recent systems means the @code{std::locale} imbued on @var{stream}. - -Hex and octal are supported, unlike the standard @code{operator<<} on -@code{double}. The mantissa will be in hex or octal, the exponent will be in -decimal. For hex the exponent delimiter is an @samp{@@}. This is as per -@code{mpf_out_str}. - -@code{ios::showbase} is supported, and will put a base on the mantissa, for -example hex @samp{0x1.8} or @samp{0x0.8}, or octal @samp{01.4} or @samp{00.4}. -This last form is slightly strange, but at least differentiates itself from -decimal. -@end deftypefun - -These operators mean that GMP types can be printed in the usual C++ way, for -example, - -@example -mpz_t z; -int n; -... -cout << "iteration " << n << " value " << z << "\n"; -@end example - -But note that @code{ostream} output (and @code{istream} input, @pxref{C++ -Formatted Input}) is the only overloading available for the GMP types and that -for instance using @code{+} with an @code{mpz_t} will have unpredictable -results. For classes with overloading, see @ref{C++ Class Interface}. - - -@node Formatted Input, C++ Class Interface, Formatted Output, Top -@chapter Formatted Input -@cindex Formatted input -@cindex @code{scanf} formatted input - -@menu -* Formatted Input Strings:: -* Formatted Input Functions:: -* C++ Formatted Input:: -@end menu - - -@node Formatted Input Strings, Formatted Input Functions, Formatted Input, Formatted Input -@section Formatted Input Strings - -@code{gmp_scanf} and friends accept format strings similar to the standard C -@code{scanf} (@pxref{Formatted Input,, Formatted Input, libc, The GNU C -Library Reference Manual}). A format specification is of the form - -@example -% [flags] [width] [type] conv -@end example - -GMP adds types @samp{Z}, @samp{Q} and @samp{F} for @code{mpz_t}, @code{mpq_t} -and @code{mpf_t} respectively. @samp{Z} and @samp{Q} behave like integers. -@samp{Q} will read a @samp{/} and a denominator, if present. @samp{F} behaves -like a float. - -GMP variables don't require an @code{&} when passed to @code{gmp_scanf}, since -they're already ``call-by-reference''. For example, - -@example -/* to read say "a(5) = 1234" */ -int n; -mpz_t z; -gmp_scanf ("a(%d) = %Zd\n", &n, z); - -mpq_t q1, q2; -gmp_sscanf ("0377 + 0x10/0x11", "%Qi + %Qi", q1, q2); - -/* to read say "topleft (1.55,-2.66)" */ -mpf_t x, y; -char buf[32]; -gmp_scanf ("%31s (%Ff,%Ff)", buf, x, y); -@end example - -All the standard C @code{scanf} types behave the same as in the C library -@code{scanf}, and can be freely intermixed with the GMP extensions. In the -current implementation the standard parts of the format string are simply -handed to @code{scanf} and only the GMP extensions handled directly. - -The flags accepted are as follows. @samp{a} and @samp{'} will depend on -support from the C library, and @samp{'} cannot be used with GMP types. - -@quotation -@multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM} -@item @nicode{*} @tab read but don't store -@item @nicode{a} @tab allocate a buffer (string conversions) -@item @nicode{'} @tab grouped digits, GLIBC style (not GMP types) -@end multitable -@end quotation - -The standard types accepted are as follows. @samp{h} and @samp{l} are -portable, the rest will depend on the compiler (or include files) for the type -and the C library for the input. - -@quotation -@multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM} -@item @nicode{h} @tab @nicode{short} -@item @nicode{hh} @tab @nicode{char} -@item @nicode{j} @tab @nicode{intmax_t} or @nicode{uintmax_t} -@item @nicode{l} @tab @nicode{long int}, @nicode{double} or @nicode{wchar_t} -@item @nicode{ll} @tab @nicode{long long} -@item @nicode{L} @tab @nicode{long double} -@item @nicode{q} @tab @nicode{quad_t} or @nicode{u_quad_t} -@item @nicode{t} @tab @nicode{ptrdiff_t} -@item @nicode{z} @tab @nicode{size_t} -@end multitable -@end quotation - -@noindent -The GMP types are - -@quotation -@multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM} -@item @nicode{F} @tab @nicode{mpf_t}, float conversions -@item @nicode{Q} @tab @nicode{mpq_t}, integer conversions -@item @nicode{Z} @tab @nicode{mpz_t}, integer conversions -@end multitable -@end quotation - -The conversions accepted are as follows. @samp{p} and @samp{[} will depend on -support from the C library, the rest are standard. - -@quotation -@multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM} -@item @nicode{c} @tab character or characters -@item @nicode{d} @tab decimal integer -@item @nicode{e} @nicode{E} @nicode{f} @nicode{g} @nicode{G} - @tab float -@item @nicode{i} @tab integer with base indicator -@item @nicode{n} @tab characters read so far -@item @nicode{o} @tab octal integer -@item @nicode{p} @tab pointer -@item @nicode{s} @tab string of non-whitespace characters -@item @nicode{u} @tab decimal integer -@item @nicode{x} @nicode{X} @tab hex integer -@item @nicode{[} @tab string of characters in a set -@end multitable -@end quotation - -@samp{e}, @samp{E}, @samp{f}, @samp{g} and @samp{G} are identical, they all -read either fixed point or scientific format, and either upper or lower case -@samp{e} for the exponent in scientific format. - -C99 style hex float format (@code{printf %a}, @pxref{Formatted Output -Strings}) is always accepted for @code{mpf_t}, but for the standard float -types it will depend on the C library. - -@samp{x} and @samp{X} are identical, both accept both upper and lower case -hexadecimal. - -@samp{o}, @samp{u}, @samp{x} and @samp{X} all read positive or negative -values. For the standard C types these are described as ``unsigned'' -conversions, but that merely affects certain overflow handling, negatives are -still allowed (per @code{strtoul}, @pxref{Parsing of Integers,, Parsing of -Integers, libc, The GNU C Library Reference Manual}). For GMP types there are -no overflows, so @samp{d} and @samp{u} are identical. - -@samp{Q} type reads the numerator and (optional) denominator as given. If the -value might not be in canonical form then @code{mpq_canonicalize} must be -called before using it in any calculations (@pxref{Rational Number -Functions}). - -@samp{Qi} will read a base specification separately for the numerator and -denominator. For example @samp{0x10/11} would be 16/11, whereas -@samp{0x10/0x11} would be 16/17. - -@samp{n} can be used with any of the types above, even the GMP types. -@samp{*} to suppress assignment is allowed, though in that case it would do -nothing at all. - -Other conversions or types that might be accepted by the C library -@code{scanf} cannot be used through @code{gmp_scanf}. - -Whitespace is read and discarded before a field, except for @samp{c} and -@samp{[} conversions. - -For float conversions, the decimal point character (or string) expected is -taken from the current locale settings on systems which provide -@code{localeconv} (@pxref{Locales,, Locales and Internationalization, libc, -The GNU C Library Reference Manual}). The C library will normally do the same -for standard float input. - -The format string is only interpreted as plain @code{char}s, multibyte -characters are not recognised. Perhaps this will change in the future. - - -@node Formatted Input Functions, C++ Formatted Input, Formatted Input Strings, Formatted Input -@section Formatted Input Functions -@cindex Input functions - -Each of the following functions is similar to the corresponding C library -function. The plain @code{scanf} forms take a variable argument list. The -@code{vscanf} forms take an argument pointer, see @ref{Variadic Functions,, -Variadic Functions, libc, The GNU C Library Reference Manual}, or @samp{man 3 -va_start}. - -It should be emphasised that if a format string is invalid, or the arguments -don't match what the format specifies, then the behaviour of any of these -functions will be unpredictable. GCC format string checking is not available, -since it doesn't recognise the GMP extensions. - -No overlap is permitted between the @var{fmt} string and any of the results -produced. - -@deftypefun int gmp_scanf (const char *@var{fmt}, @dots{}) -@deftypefunx int gmp_vscanf (const char *@var{fmt}, va_list @var{ap}) -Read from the standard input @code{stdin}. -@end deftypefun - -@deftypefun int gmp_fscanf (FILE *@var{fp}, const char *@var{fmt}, @dots{}) -@deftypefunx int gmp_vfscanf (FILE *@var{fp}, const char *@var{fmt}, va_list @var{ap}) -Read from the stream @var{fp}. -@end deftypefun - -@deftypefun int gmp_sscanf (const char *@var{s}, const char *@var{fmt}, @dots{}) -@deftypefunx int gmp_vsscanf (const char *@var{s}, const char *@var{fmt}, va_list @var{ap}) -Read from a null-terminated string @var{s}. -@end deftypefun - -The return value from each of these functions is the same as the standard C99 -@code{scanf}, namely the number of fields successfully parsed and stored. -@samp{%n} fields and fields read but suppressed by @samp{*} don't count -towards the return value. - -If end of input (or a file error) is reached before a character for a field or -a literal, and if no previous non-suppressed fields have matched, then the -return value is @code{EOF} instead of 0. A whitespace character in the format -string is only an optional match and doesn't induce an @code{EOF} in this -fashion. Leading whitespace read and discarded for a field don't count as -characters for that field. - -For the GMP types, input parsing follows C99 rules, namely one character of -lookahead is used and characters are read while they continue to meet the -format requirements. If this doesn't provide a complete number then the -function terminates, with that field not stored nor counted towards the return -value. For instance with @code{mpf_t} an input @samp{1.23e-XYZ} would be read -up to the @samp{X} and that character pushed back since it's not a digit. The -string @samp{1.23e-} would then be considered invalid since an @samp{e} must -be followed by at least one digit. - -For the standard C types, in the current implementation GMP calls the C -library @code{scanf} functions, which might have looser rules about what -constitutes a valid input. - -Note that @code{gmp_sscanf} is the same as @code{gmp_fscanf} and only does one -character of lookahead when parsing. Although clearly it could look at its -entire input, it is deliberately made identical to @code{gmp_fscanf}, the same -way C99 @code{sscanf} is the same as @code{fscanf}. - - -@node C++ Formatted Input, , Formatted Input Functions, Formatted Input -@section C++ Formatted Input -@cindex C++ @code{istream} input -@cindex @code{istream} input - -The following functions are provided in @file{libgmpxx} (@pxref{Headers and -Libraries}), which is built only if C++ support is enabled (@pxref{Build -Options}). Prototypes are available from @code{<gmp.h>}. - -@deftypefun istream& operator>> (istream& @var{stream}, mpz_t @var{rop}) -Read @var{rop} from @var{stream}, using its @code{ios} formatting settings. -@end deftypefun - -@deftypefun istream& operator>> (istream& @var{stream}, mpq_t @var{rop}) -An integer like @samp{123} will be read, or a fraction like @samp{5/9}. No -whitespace is allowed around the @samp{/}. If the fraction is not in -canonical form then @code{mpq_canonicalize} must be called (@pxref{Rational -Number Functions}) before operating on it. - -As per integer input, an @samp{0} or @samp{0x} base indicator is read when -none of @code{ios::dec}, @code{ios::oct} or @code{ios::hex} are set. This is -done separately for numerator and denominator, so that for instance -@samp{0x10/11} is @math{16/11} and @samp{0x10/0x11} is @math{16/17}. -@end deftypefun - -@deftypefun istream& operator>> (istream& @var{stream}, mpf_t @var{rop}) -Read @var{rop} from @var{stream}, using its @code{ios} formatting settings. - -Hex or octal floats are not supported, but might be in the future, or perhaps -it's best to accept only what the standard float @code{operator>>} does. -@end deftypefun - -Note that digit grouping specified by the @code{istream} locale is currently -not accepted. Perhaps this will change in the future. - -@sp 1 -These operators mean that GMP types can be read in the usual C++ way, for -example, - -@example -mpz_t z; -... -cin >> z; -@end example - -But note that @code{istream} input (and @code{ostream} output, @pxref{C++ -Formatted Output}) is the only overloading available for the GMP types and -that for instance using @code{+} with an @code{mpz_t} will have unpredictable -results. For classes with overloading, see @ref{C++ Class Interface}. - - - -@node C++ Class Interface, Custom Allocation, Formatted Input, Top -@chapter C++ Class Interface -@cindex C++ interface - -This chapter describes the C++ class based interface to GMP. - -All GMP C language types and functions can be used in C++ programs, since -@file{gmp.h} has @code{extern "C"} qualifiers, but the class interface offers -overloaded functions and operators which may be more convenient. - -Due to the implementation of this interface, a reasonably recent C++ compiler -is required, one supporting namespaces, partial specialization of templates -and member templates. - -@strong{Everything described in this chapter is to be considered preliminary -and might be subject to incompatible changes if some unforeseen difficulty -reveals itself.} - -@menu -* C++ Interface General:: -* C++ Interface Integers:: -* C++ Interface Rationals:: -* C++ Interface Floats:: -* C++ Interface Random Numbers:: -* C++ Interface Limitations:: -@end menu - - -@node C++ Interface General, C++ Interface Integers, C++ Class Interface, C++ Class Interface -@section C++ Interface General - -@noindent -All the C++ classes and functions are available with - -@cindex @code{gmpxx.h} -@example -#include <gmpxx.h> -@end example - -Programs should be linked with the @file{libgmpxx} and @file{libgmp} -libraries. For example, - -@example -g++ mycxxprog.cc -lgmpxx -lgmp -@end example - -@noindent -The classes defined are - -@deftp Class mpz_class -@deftpx Class mpq_class -@deftpx Class mpf_class -@end deftp - -The standard operators and various standard functions are overloaded to allow -arithmetic with these classes. For example, - -@example -int -main (void) -@{ - mpz_class a, b, c; - - a = 1234; - b = "-5678"; - c = a+b; - cout << "sum is " << c << "\n"; - cout << "absolute value is " << abs(c) << "\n"; - - return 0; -@} -@end example - -An important feature of the implementation is that an expression like -@code{a=b+c} results in a single call to the corresponding @code{mpz_add}, -without using a temporary for the @code{b+c} part. Expressions which by their -nature imply intermediate values, like @code{a=b*c+d*e}, still use temporaries -though. - -The classes can be freely intermixed in expressions, as can the classes and -the standard types @code{long}, @code{unsigned long} and @code{double}. -Smaller types like @code{int} or @code{float} can also be intermixed, since -C++ will promote them. - -Note that @code{bool} is not accepted directly, but must be explicitly cast to -an @code{int} first. This is because C++ will automatically convert any -pointer to a @code{bool}, so if GMP accepted @code{bool} it would make all -sorts of invalid class and pointer combinations compile but almost certainly -not do anything sensible. - -Conversions back from the classes to standard C++ types aren't done -automatically, instead member functions like @code{get_si} are provided (see -the following sections for details). - -Also there are no automatic conversions from the classes to the corresponding -GMP C types, instead a reference to the underlying C object can be obtained -with the following functions, - -@deftypefun mpz_t mpz_class::get_mpz_t () -@deftypefunx mpq_t mpq_class::get_mpq_t () -@deftypefunx mpf_t mpf_class::get_mpf_t () -@end deftypefun - -These can be used to call a C function which doesn't have a C++ class -interface. For example to set @code{a} to the GCD of @code{b} and @code{c}, - -@example -mpz_class a, b, c; -... -mpz_gcd (a.get_mpz_t(), b.get_mpz_t(), c.get_mpz_t()); -@end example - -In the other direction, a class can be initialized from the corresponding GMP -C type, or assigned to if an explicit constructor is used. In both cases this -makes a copy of the value, it doesn't create any sort of association. For -example, - -@example -mpz_t z; -// ... init and calculate z ... -mpz_class x(z); -mpz_class y; -y = mpz_class (z); -@end example - -There are no namespace setups in @file{gmpxx.h}, all types and functions are -simply put into the global namespace. This is what @file{gmp.h} has done in -the past, and continues to do for compatibility. The extras provided by -@file{gmpxx.h} follow GMP naming conventions and are unlikely to clash with -anything. - - -@node C++ Interface Integers, C++ Interface Rationals, C++ Interface General, C++ Class Interface -@section C++ Interface Integers - -@deftypefun {} mpz_class::mpz_class (type @var{n}) -Construct an @code{mpz_class}. All the standard C++ types may be used, except -@code{long long} and @code{long double}, and all the GMP C++ classes can be -used, although conversions from @code{mpq_class} and @code{mpf_class} are -@code{explicit}. Any necessary conversion follows the corresponding C -function, for example @code{double} follows @code{mpz_set_d} -(@pxref{Assigning Integers}). -@end deftypefun - -@deftypefun explicit mpz_class::mpz_class (const mpz_t @var{z}) -Construct an @code{mpz_class} from an @code{mpz_t}. The value in @var{z} is -copied into the new @code{mpz_class}, there won't be any permanent association -between it and @var{z}. -@end deftypefun - -@deftypefun explicit mpz_class::mpz_class (const char *@var{s}, int @var{base} = 0) -@deftypefunx explicit mpz_class::mpz_class (const string& @var{s}, int @var{base} = 0) -Construct an @code{mpz_class} converted from a string using @code{mpz_set_str} -(@pxref{Assigning Integers}). - -If the string is not a valid integer, an @code{std::invalid_argument} -exception is thrown. The same applies to @code{operator=}. -@end deftypefun - -@deftypefun mpz_class operator"" _mpz (const char *@var{str}) -With C++11 compilers, integers can be constructed with the syntax -@code{123_mpz} which is equivalent to @code{mpz_class("123")}. -@end deftypefun - -@deftypefun mpz_class operator/ (mpz_class @var{a}, mpz_class @var{d}) -@deftypefunx mpz_class operator% (mpz_class @var{a}, mpz_class @var{d}) -Divisions involving @code{mpz_class} round towards zero, as per the -@code{mpz_tdiv_q} and @code{mpz_tdiv_r} functions (@pxref{Integer Division}). -This is the same as the C99 @code{/} and @code{%} operators. - -The @code{mpz_fdiv@dots{}} or @code{mpz_cdiv@dots{}} functions can always be called -directly if desired. For example, - -@example -mpz_class q, a, d; -... -mpz_fdiv_q (q.get_mpz_t(), a.get_mpz_t(), d.get_mpz_t()); -@end example -@end deftypefun - -@deftypefun mpz_class abs (mpz_class @var{op}) -@deftypefunx int cmp (mpz_class @var{op1}, type @var{op2}) -@deftypefunx int cmp (type @var{op1}, mpz_class @var{op2}) -@maybepagebreak -@deftypefunx bool mpz_class::fits_sint_p (void) -@deftypefunx bool mpz_class::fits_slong_p (void) -@deftypefunx bool mpz_class::fits_sshort_p (void) -@maybepagebreak -@deftypefunx bool mpz_class::fits_uint_p (void) -@deftypefunx bool mpz_class::fits_ulong_p (void) -@deftypefunx bool mpz_class::fits_ushort_p (void) -@maybepagebreak -@deftypefunx double mpz_class::get_d (void) -@deftypefunx long mpz_class::get_si (void) -@deftypefunx string mpz_class::get_str (int @var{base} = 10) -@deftypefunx {unsigned long} mpz_class::get_ui (void) -@maybepagebreak -@deftypefunx int mpz_class::set_str (const char *@var{str}, int @var{base}) -@deftypefunx int mpz_class::set_str (const string& @var{str}, int @var{base}) -@deftypefunx int sgn (mpz_class @var{op}) -@deftypefunx mpz_class sqrt (mpz_class @var{op}) -@maybepagebreak -@deftypefunx mpz_class gcd (mpz_class @var{op1}, mpz_class @var{op2}) -@deftypefunx mpz_class lcm (mpz_class @var{op1}, mpz_class @var{op2}) -@maybepagebreak -@deftypefunx void mpz_class::swap (mpz_class& @var{op}) -@deftypefunx void swap (mpz_class& @var{op1}, mpz_class& @var{op2}) -These functions provide a C++ class interface to the corresponding GMP C -routines. - -@code{cmp} can be used with any of the classes or the standard C++ types, -except @code{long long} and @code{long double}. -@end deftypefun - -@sp 1 -Overloaded operators for combinations of @code{mpz_class} and @code{double} -are provided for completeness, but it should be noted that if the given -@code{double} is not an integer then the way any rounding is done is currently -unspecified. The rounding might take place at the start, in the middle, or at -the end of the operation, and it might change in the future. - -Conversions between @code{mpz_class} and @code{double}, however, are defined -to follow the corresponding C functions @code{mpz_get_d} and @code{mpz_set_d}. -And comparisons are always made exactly, as per @code{mpz_cmp_d}. - - -@node C++ Interface Rationals, C++ Interface Floats, C++ Interface Integers, C++ Class Interface -@section C++ Interface Rationals - -In all the following constructors, if a fraction is given then it should be in -canonical form, or if not then @code{mpq_class::canonicalize} called. - -@deftypefun {} mpq_class::mpq_class (type @var{op}) -@deftypefunx {} mpq_class::mpq_class (integer @var{num}, integer @var{den}) -Construct an @code{mpq_class}. The initial value can be a single value of any -type (conversion from @code{mpf_class} is @code{explicit}), or a pair of -integers (@code{mpz_class} or standard C++ integer types) representing a -fraction, except that @code{long long} and @code{long double} are not -supported. For example, - -@example -mpq_class q (99); -mpq_class q (1.75); -mpq_class q (1, 3); -@end example -@end deftypefun - -@deftypefun explicit mpq_class::mpq_class (const mpq_t @var{q}) -Construct an @code{mpq_class} from an @code{mpq_t}. The value in @var{q} is -copied into the new @code{mpq_class}, there won't be any permanent association -between it and @var{q}. -@end deftypefun - -@deftypefun explicit mpq_class::mpq_class (const char *@var{s}, int @var{base} = 0) -@deftypefunx explicit mpq_class::mpq_class (const string& @var{s}, int @var{base} = 0) -Construct an @code{mpq_class} converted from a string using @code{mpq_set_str} -(@pxref{Initializing Rationals}). - -If the string is not a valid rational, an @code{std::invalid_argument} -exception is thrown. The same applies to @code{operator=}. -@end deftypefun - -@deftypefun mpq_class operator"" _mpq (const char *@var{str}) -With C++11 compilers, integral rationals can be constructed with the syntax -@code{123_mpq} which is equivalent to @code{mpq_class(123_mpz)}. Other -rationals can be built as @code{-1_mpq/2} or @code{0xb_mpq/123456_mpz}. -@end deftypefun - -@deftypefun void mpq_class::canonicalize () -Put an @code{mpq_class} into canonical form, as per @ref{Rational Number -Functions}. All arithmetic operators require their operands in canonical -form, and will return results in canonical form. -@end deftypefun - -@deftypefun mpq_class abs (mpq_class @var{op}) -@deftypefunx int cmp (mpq_class @var{op1}, type @var{op2}) -@deftypefunx int cmp (type @var{op1}, mpq_class @var{op2}) -@maybepagebreak -@deftypefunx double mpq_class::get_d (void) -@deftypefunx string mpq_class::get_str (int @var{base} = 10) -@maybepagebreak -@deftypefunx int mpq_class::set_str (const char *@var{str}, int @var{base}) -@deftypefunx int mpq_class::set_str (const string& @var{str}, int @var{base}) -@deftypefunx int sgn (mpq_class @var{op}) -@maybepagebreak -@deftypefunx void mpq_class::swap (mpq_class& @var{op}) -@deftypefunx void swap (mpq_class& @var{op1}, mpq_class& @var{op2}) -These functions provide a C++ class interface to the corresponding GMP C -routines. - -@code{cmp} can be used with any of the classes or the standard C++ types, -except @code{long long} and @code{long double}. -@end deftypefun - -@deftypefun {mpz_class&} mpq_class::get_num () -@deftypefunx {mpz_class&} mpq_class::get_den () -Get a reference to an @code{mpz_class} which is the numerator or denominator -of an @code{mpq_class}. This can be used both for read and write access. If -the object returned is modified, it modifies the original @code{mpq_class}. - -If direct manipulation might produce a non-canonical value, then -@code{mpq_class::canonicalize} must be called before further operations. -@end deftypefun - -@deftypefun mpz_t mpq_class::get_num_mpz_t () -@deftypefunx mpz_t mpq_class::get_den_mpz_t () -Get a reference to the underlying @code{mpz_t} numerator or denominator of an -@code{mpq_class}. This can be passed to C functions expecting an -@code{mpz_t}. Any modifications made to the @code{mpz_t} will modify the -original @code{mpq_class}. - -If direct manipulation might produce a non-canonical value, then -@code{mpq_class::canonicalize} must be called before further operations. -@end deftypefun - -@deftypefun istream& operator>> (istream& @var{stream}, mpq_class& @var{rop}); -Read @var{rop} from @var{stream}, using its @code{ios} formatting settings, -the same as @code{mpq_t operator>>} (@pxref{C++ Formatted Input}). - -If the @var{rop} read might not be in canonical form then -@code{mpq_class::canonicalize} must be called. -@end deftypefun - - -@node C++ Interface Floats, C++ Interface Random Numbers, C++ Interface Rationals, C++ Class Interface -@section C++ Interface Floats - -When an expression requires the use of temporary intermediate @code{mpf_class} -values, like @code{f=g*h+x*y}, those temporaries will have the same precision -as the destination @code{f}. Explicit constructors can be used if this -doesn't suit. - -@deftypefun {} mpf_class::mpf_class (type @var{op}) -@deftypefunx {} mpf_class::mpf_class (type @var{op}, mp_bitcnt_t @var{prec}) -Construct an @code{mpf_class}. Any standard C++ type can be used, except -@code{long long} and @code{long double}, and any of the GMP C++ classes can be -used. - -If @var{prec} is given, the initial precision is that value, in bits. If -@var{prec} is not given, then the initial precision is determined by the type -of @var{op} given. An @code{mpz_class}, @code{mpq_class}, or C++ -builtin type will give the default @code{mpf} precision (@pxref{Initializing -Floats}). An @code{mpf_class} or expression will give the precision of that -value. The precision of a binary expression is the higher of the two -operands. - -@example -mpf_class f(1.5); // default precision -mpf_class f(1.5, 500); // 500 bits (at least) -mpf_class f(x); // precision of x -mpf_class f(abs(x)); // precision of x -mpf_class f(-g, 1000); // 1000 bits (at least) -mpf_class f(x+y); // greater of precisions of x and y -@end example -@end deftypefun - -@deftypefun explicit mpf_class::mpf_class (const mpf_t @var{f}) -@deftypefunx {} mpf_class::mpf_class (const mpf_t @var{f}, mp_bitcnt_t @var{prec}) -Construct an @code{mpf_class} from an @code{mpf_t}. The value in @var{f} is -copied into the new @code{mpf_class}, there won't be any permanent association -between it and @var{f}. - -If @var{prec} is given, the initial precision is that value, in bits. If -@var{prec} is not given, then the initial precision is that of @var{f}. -@end deftypefun - -@deftypefun explicit mpf_class::mpf_class (const char *@var{s}) -@deftypefunx {} mpf_class::mpf_class (const char *@var{s}, mp_bitcnt_t @var{prec}, int @var{base} = 0) -@deftypefunx explicit mpf_class::mpf_class (const string& @var{s}) -@deftypefunx {} mpf_class::mpf_class (const string& @var{s}, mp_bitcnt_t @var{prec}, int @var{base} = 0) -Construct an @code{mpf_class} converted from a string using @code{mpf_set_str} -(@pxref{Assigning Floats}). If @var{prec} is given, the initial precision is -that value, in bits. If not, the default @code{mpf} precision -(@pxref{Initializing Floats}) is used. - -If the string is not a valid float, an @code{std::invalid_argument} exception -is thrown. The same applies to @code{operator=}. -@end deftypefun - -@deftypefun mpf_class operator"" _mpf (const char *@var{str}) -With C++11 compilers, floats can be constructed with the syntax -@code{1.23e-1_mpf} which is equivalent to @code{mpf_class("1.23e-1")}. -@end deftypefun - -@deftypefun {mpf_class&} mpf_class::operator= (type @var{op}) -Convert and store the given @var{op} value to an @code{mpf_class} object. The -same types are accepted as for the constructors above. - -Note that @code{operator=} only stores a new value, it doesn't copy or change -the precision of the destination, instead the value is truncated if necessary. -This is the same as @code{mpf_set} etc. Note in particular this means for -@code{mpf_class} a copy constructor is not the same as a default constructor -plus assignment. - -@example -mpf_class x (y); // x created with precision of y - -mpf_class x; // x created with default precision -x = y; // value truncated to that precision -@end example - -Applications using templated code may need to be careful about the assumptions -the code makes in this area, when working with @code{mpf_class} values of -various different or non-default precisions. For instance implementations of -the standard @code{complex} template have been seen in both styles above, -though of course @code{complex} is normally only actually specified for use -with the builtin float types. -@end deftypefun - -@deftypefun mpf_class abs (mpf_class @var{op}) -@deftypefunx mpf_class ceil (mpf_class @var{op}) -@deftypefunx int cmp (mpf_class @var{op1}, type @var{op2}) -@deftypefunx int cmp (type @var{op1}, mpf_class @var{op2}) -@maybepagebreak -@deftypefunx bool mpf_class::fits_sint_p (void) -@deftypefunx bool mpf_class::fits_slong_p (void) -@deftypefunx bool mpf_class::fits_sshort_p (void) -@maybepagebreak -@deftypefunx bool mpf_class::fits_uint_p (void) -@deftypefunx bool mpf_class::fits_ulong_p (void) -@deftypefunx bool mpf_class::fits_ushort_p (void) -@maybepagebreak -@deftypefunx mpf_class floor (mpf_class @var{op}) -@deftypefunx mpf_class hypot (mpf_class @var{op1}, mpf_class @var{op2}) -@maybepagebreak -@deftypefunx double mpf_class::get_d (void) -@deftypefunx long mpf_class::get_si (void) -@deftypefunx string mpf_class::get_str (mp_exp_t& @var{exp}, int @var{base} = 10, size_t @var{digits} = 0) -@deftypefunx {unsigned long} mpf_class::get_ui (void) -@maybepagebreak -@deftypefunx int mpf_class::set_str (const char *@var{str}, int @var{base}) -@deftypefunx int mpf_class::set_str (const string& @var{str}, int @var{base}) -@deftypefunx int sgn (mpf_class @var{op}) -@deftypefunx mpf_class sqrt (mpf_class @var{op}) -@maybepagebreak -@deftypefunx void mpf_class::swap (mpf_class& @var{op}) -@deftypefunx void swap (mpf_class& @var{op1}, mpf_class& @var{op2}) -@deftypefunx mpf_class trunc (mpf_class @var{op}) -These functions provide a C++ class interface to the corresponding GMP C -routines. - -@code{cmp} can be used with any of the classes or the standard C++ types, -except @code{long long} and @code{long double}. - -The accuracy provided by @code{hypot} is not currently guaranteed. -@end deftypefun - -@deftypefun {mp_bitcnt_t} mpf_class::get_prec () -@deftypefunx void mpf_class::set_prec (mp_bitcnt_t @var{prec}) -@deftypefunx void mpf_class::set_prec_raw (mp_bitcnt_t @var{prec}) -Get or set the current precision of an @code{mpf_class}. - -The restrictions described for @code{mpf_set_prec_raw} (@pxref{Initializing -Floats}) apply to @code{mpf_class::set_prec_raw}. Note in particular that the -@code{mpf_class} must be restored to it's allocated precision before being -destroyed. This must be done by application code, there's no automatic -mechanism for it. -@end deftypefun - - -@node C++ Interface Random Numbers, C++ Interface Limitations, C++ Interface Floats, C++ Class Interface -@section C++ Interface Random Numbers - -@deftp Class gmp_randclass -The C++ class interface to the GMP random number functions uses -@code{gmp_randclass} to hold an algorithm selection and current state, as per -@code{gmp_randstate_t}. -@end deftp - -@deftypefun {} gmp_randclass::gmp_randclass (void (*@var{randinit}) (gmp_randstate_t, @dots{}), @dots{}) -Construct a @code{gmp_randclass}, using a call to the given @var{randinit} -function (@pxref{Random State Initialization}). The arguments expected are -the same as @var{randinit}, but with @code{mpz_class} instead of @code{mpz_t}. -For example, - -@example -gmp_randclass r1 (gmp_randinit_default); -gmp_randclass r2 (gmp_randinit_lc_2exp_size, 32); -gmp_randclass r3 (gmp_randinit_lc_2exp, a, c, m2exp); -gmp_randclass r4 (gmp_randinit_mt); -@end example - -@code{gmp_randinit_lc_2exp_size} will fail if the size requested is too big, -an @code{std::length_error} exception is thrown in that case. -@end deftypefun - -@deftypefun {} gmp_randclass::gmp_randclass (gmp_randalg_t @var{alg}, @dots{}) -Construct a @code{gmp_randclass} using the same parameters as -@code{gmp_randinit} (@pxref{Random State Initialization}). This function is -obsolete and the above @var{randinit} style should be preferred. -@end deftypefun - -@deftypefun void gmp_randclass::seed (unsigned long int @var{s}) -@deftypefunx void gmp_randclass::seed (mpz_class @var{s}) -Seed a random number generator. See @pxref{Random Number Functions}, for how -to choose a good seed. -@end deftypefun - -@deftypefun mpz_class gmp_randclass::get_z_bits (mp_bitcnt_t @var{bits}) -@deftypefunx mpz_class gmp_randclass::get_z_bits (mpz_class @var{bits}) -Generate a random integer with a specified number of bits. -@end deftypefun - -@deftypefun mpz_class gmp_randclass::get_z_range (mpz_class @var{n}) -Generate a random integer in the range 0 to @math{@var{n}-1} inclusive. -@end deftypefun - -@deftypefun mpf_class gmp_randclass::get_f () -@deftypefunx mpf_class gmp_randclass::get_f (mp_bitcnt_t @var{prec}) -Generate a random float @var{f} in the range @math{0 <= @var{f} < 1}. @var{f} -will be to @var{prec} bits precision, or if @var{prec} is not given then to -the precision of the destination. For example, - -@example -gmp_randclass r; -... -mpf_class f (0, 512); // 512 bits precision -f = r.get_f(); // random number, 512 bits -@end example -@end deftypefun - - - -@node C++ Interface Limitations, , C++ Interface Random Numbers, C++ Class Interface -@section C++ Interface Limitations - -@table @asis -@item @code{mpq_class} and Templated Reading -A generic piece of template code probably won't know that @code{mpq_class} -requires a @code{canonicalize} call if inputs read with @code{operator>>} -might be non-canonical. This can lead to incorrect results. - -@code{operator>>} behaves as it does for reasons of efficiency. A -canonicalize can be quite time consuming on large operands, and is best -avoided if it's not necessary. - -But this potential difficulty reduces the usefulness of @code{mpq_class}. -Perhaps a mechanism to tell @code{operator>>} what to do will be adopted in -the future, maybe a preprocessor define, a global flag, or an @code{ios} flag -pressed into service. Or maybe, at the risk of inconsistency, the -@code{mpq_class} @code{operator>>} could canonicalize and leave @code{mpq_t} -@code{operator>>} not doing so, for use on those occasions when that's -acceptable. Send feedback or alternate ideas to @email{gmp-bugs@@gmplib.org}. - -@item Subclassing -Subclassing the GMP C++ classes works, but is not currently recommended. - -Expressions involving subclasses resolve correctly (or seem to), but in normal -C++ fashion the subclass doesn't inherit constructors and assignments. -There's many of those in the GMP classes, and a good way to reestablish them -in a subclass is not yet provided. - -@item Templated Expressions -A subtle difficulty exists when using expressions together with -application-defined template functions. Consider the following, with @code{T} -intended to be some numeric type, - -@example -template <class T> -T fun (const T &, const T &); -@end example - -@noindent -When used with, say, plain @code{mpz_class} variables, it works fine: @code{T} -is resolved as @code{mpz_class}. - -@example -mpz_class f(1), g(2); -fun (f, g); // Good -@end example - -@noindent -But when one of the arguments is an expression, it doesn't work. - -@example -mpz_class f(1), g(2), h(3); -fun (f, g+h); // Bad -@end example - -This is because @code{g+h} ends up being a certain expression template type -internal to @code{gmpxx.h}, which the C++ template resolution rules are unable -to automatically convert to @code{mpz_class}. The workaround is simply to add -an explicit cast. - -@example -mpz_class f(1), g(2), h(3); -fun (f, mpz_class(g+h)); // Good -@end example - -Similarly, within @code{fun} it may be necessary to cast an expression to type -@code{T} when calling a templated @code{fun2}. - -@example -template <class T> -void fun (T f, T g) -@{ - fun2 (f, f+g); // Bad -@} - -template <class T> -void fun (T f, T g) -@{ - fun2 (f, T(f+g)); // Good -@} -@end example - -@item C++11 -C++11 provides several new ways in which types can be inferred: @code{auto}, -@code{decltype}, etc. While they can be very convenient, they don't mix well -with expression templates. In this example, the addition is performed twice, -as if we had defined @code{sum} as a macro. - -@example -mpz_class z = 33; -auto sum = z + z; -mpz_class prod = sum * sum; -@end example - -This other example may crash, though some compilers might make it look like -it is working, because the expression @code{z+z} goes out of scope before it -is evaluated. - -@example -mpz_class z = 33; -auto sum = z + z + z; -mpz_class prod = sum * 2; -@end example - -It is thus strongly recommended to avoid @code{auto} anywhere a GMP C++ -expression may appear. -@end table - - -@node Custom Allocation, Language Bindings, C++ Class Interface, Top -@comment node-name, next, previous, up -@chapter Custom Allocation -@cindex Custom allocation -@cindex Memory allocation -@cindex Allocation of memory - -By default GMP uses @code{malloc}, @code{realloc} and @code{free} for memory -allocation, and if they fail GMP prints a message to the standard error output -and terminates the program. - -Alternate functions can be specified, to allocate memory in a different way or -to have a different error action on running out of memory. - -@deftypefun void mp_set_memory_functions (@* void *(*@var{alloc_func_ptr}) (size_t), @* void *(*@var{realloc_func_ptr}) (void *, size_t, size_t), @* void (*@var{free_func_ptr}) (void *, size_t)) -Replace the current allocation functions from the arguments. If an argument -is @code{NULL}, the corresponding default function is used. - -These functions will be used for all memory allocation done by GMP, apart from -temporary space from @code{alloca} if that function is available and GMP is -configured to use it (@pxref{Build Options}). - -@strong{Be sure to call @code{mp_set_memory_functions} only when there are no -active GMP objects allocated using the previous memory functions! Usually -that means calling it before any other GMP function.} -@end deftypefun - -The functions supplied should fit the following declarations: - -@deftypevr Function {void *} allocate_function (size_t @var{alloc_size}) -Return a pointer to newly allocated space with at least @var{alloc_size} -bytes. -@end deftypevr - -@deftypevr Function {void *} reallocate_function (void *@var{ptr}, size_t @var{old_size}, size_t @var{new_size}) -Resize a previously allocated block @var{ptr} of @var{old_size} bytes to be -@var{new_size} bytes. - -The block may be moved if necessary or if desired, and in that case the -smaller of @var{old_size} and @var{new_size} bytes must be copied to the new -location. The return value is a pointer to the resized block, that being the -new location if moved or just @var{ptr} if not. - -@var{ptr} is never @code{NULL}, it's always a previously allocated block. -@var{new_size} may be bigger or smaller than @var{old_size}. -@end deftypevr - -@deftypevr Function void free_function (void *@var{ptr}, size_t @var{size}) -De-allocate the space pointed to by @var{ptr}. - -@var{ptr} is never @code{NULL}, it's always a previously allocated block of -@var{size} bytes. -@end deftypevr - -A @dfn{byte} here means the unit used by the @code{sizeof} operator. - -The @var{reallocate_function} parameter @var{old_size} and the -@var{free_function} parameter @var{size} are passed for convenience, but of -course they can be ignored if not needed by an implementation. The default -functions using @code{malloc} and friends for instance don't use them. - -No error return is allowed from any of these functions, if they return then -they must have performed the specified operation. In particular note that -@var{allocate_function} or @var{reallocate_function} mustn't return -@code{NULL}. - -Getting a different fatal error action is a good use for custom allocation -functions, for example giving a graphical dialog rather than the default print -to @code{stderr}. How much is possible when genuinely out of memory is -another question though. - -There's currently no defined way for the allocation functions to recover from -an error such as out of memory, they must terminate program execution. A -@code{longjmp} or throwing a C++ exception will have undefined results. This -may change in the future. - -GMP may use allocated blocks to hold pointers to other allocated blocks. This -will limit the assumptions a conservative garbage collection scheme can make. - -Since the default GMP allocation uses @code{malloc} and friends, those -functions will be linked in even if the first thing a program does is an -@code{mp_set_memory_functions}. It's necessary to change the GMP sources if -this is a problem. - -@sp 1 -@deftypefun void mp_get_memory_functions (@* void *(**@var{alloc_func_ptr}) (size_t), @* void *(**@var{realloc_func_ptr}) (void *, size_t, size_t), @* void (**@var{free_func_ptr}) (void *, size_t)) -Get the current allocation functions, storing function pointers to the -locations given by the arguments. If an argument is @code{NULL}, that -function pointer is not stored. - -@need 1000 -For example, to get just the current free function, - -@example -void (*freefunc) (void *, size_t); - -mp_get_memory_functions (NULL, NULL, &freefunc); -@end example -@end deftypefun - -@node Language Bindings, Algorithms, Custom Allocation, Top -@chapter Language Bindings -@cindex Language bindings -@cindex Other languages - -The following packages and projects offer access to GMP from languages other -than C, though perhaps with varying levels of functionality and efficiency. - -@c @spaceuref{U} is the same as @uref{U}, but with a couple of extra spaces -@c in tex, just to separate the URL from the preceding text a bit. -@iftex -@macro spaceuref {U} -@ @ @uref{\U\} -@end macro -@end iftex -@ifnottex -@macro spaceuref {U} -@uref{\U\} -@end macro -@end ifnottex - -@sp 1 -@table @asis -@item C++ -@itemize @bullet -@item -GMP C++ class interface, @pxref{C++ Class Interface} @* Straightforward -interface, expression templates to eliminate temporaries. -@item -ALP @spaceuref{https://www-sop.inria.fr/saga/logiciels/ALP/} @* Linear algebra and -polynomials using templates. -@item -Arithmos @spaceuref{http://cant.ua.ac.be/old/arithmos/} @* Rationals -with infinities and square roots. -@item -CLN @spaceuref{http://www.ginac.de/CLN/} @* High level classes for arithmetic. -@item -Linbox @spaceuref{http://www.linalg.org/} @* Sparse vectors and matrices. -@item -NTL @spaceuref{http://www.shoup.net/ntl/} @* A C++ number theory library. -@end itemize - -@c @item D -@c @itemize @bullet -@c @item -@c gmp-d @spaceuref{http://home.comcast.net/~benhinkle/gmp-d/} -@c @end itemize - -@item Eiffel -@itemize @bullet -@item -Eiffelroom @spaceuref{http://www.eiffelroom.org/node/442} -@end itemize - -@c @item Fortran -@c @itemize @bullet -@c @item -@c Omni F77 @spaceuref{http://phase.hpcc.jp/Omni/home.html} @* Arbitrary -@c precision floats. -@c @end itemize - -@item Haskell -@itemize @bullet -@item -Glasgow Haskell Compiler @spaceuref{https://www.haskell.org/ghc/} -@end itemize - -@item Java -@itemize @bullet -@item -Kaffe @spaceuref{https://github.com/kaffe/kaffe} -@end itemize - -@item Lisp -@itemize @bullet -@item -GNU Common Lisp @spaceuref{https://www.gnu.org/software/gcl/gcl.html} -@item -Librep @spaceuref{http://librep.sourceforge.net/} -@item -@c FIXME: When there's a stable release with gmp support, just refer to it -@c rather than bothering to talk about betas. -XEmacs (21.5.18 beta and up) @spaceuref{http://www.xemacs.org} @* Optional -big integers, rationals and floats using GMP. -@end itemize - -@item M4 -@itemize @bullet -@item -@c FIXME: When there's a stable release with gmp support, just refer to it -@c rather than bothering to talk about betas. -GNU m4 betas @spaceuref{http://www.seindal.dk/rene/gnu/} @* Optionally provides -an arbitrary precision @code{mpeval}. -@end itemize - -@item ML -@itemize @bullet -@item -MLton compiler @spaceuref{http://mlton.org/} -@end itemize - -@item Objective Caml -@itemize @bullet -@item -MLGMP @spaceuref{http://opam.ocamlpro.com/pkg/mlgmp.20120224.html} -@item -Numerix @spaceuref{http://pauillac.inria.fr/~quercia/} @* Optionally using -GMP. -@end itemize - -@item Oz -@itemize @bullet -@item -Mozart @spaceuref{http://mozart.github.io/} -@end itemize - -@item Pascal -@itemize @bullet -@item -GNU Pascal Compiler @spaceuref{http://www.gnu-pascal.de/} @* GMP unit. -@item -Numerix @spaceuref{http://pauillac.inria.fr/~quercia/} @* For Free Pascal, -optionally using GMP. -@end itemize - -@item Perl -@itemize @bullet -@item -GMP module, see @file{demos/perl} in the GMP sources (@pxref{Demonstration -Programs}). -@item -Math::GMP @spaceuref{http://www.cpan.org/} @* Compatible with Math::BigInt, but -not as many functions as the GMP module above. -@item -Math::BigInt::GMP @spaceuref{http://www.cpan.org/} @* Plug Math::GMP into -normal Math::BigInt operations. -@end itemize - -@need 1000 -@item Pike -@itemize @bullet -@item -mpz module in the standard distribution, @uref{http://pike.ida.liu.se/} -@end itemize - -@need 500 -@item Prolog -@itemize @bullet -@item -SWI Prolog @spaceuref{http://www.swi-prolog.org/} @* -Arbitrary precision floats. -@end itemize - -@item Python -@itemize @bullet -@item -GMPY @uref{https://code.google.com/p/gmpy/} -@end itemize - -@item Ruby -@itemize @bullet -@item -http://rubygems.org/gems/gmp -@end itemize - -@item Scheme -@itemize @bullet -@item -GNU Guile @spaceuref{https://www.gnu.org/software/guile/guile.html} -@item -RScheme @spaceuref{http://www.rscheme.org/} -@item -STklos @spaceuref{http://www.stklos.net/} -@c -@c For reference, MzScheme uses some of gmp, but (as of version 205) it only -@c has copies of some of the generic C code, and we don't consider that a -@c language binding to gmp. -@c -@end itemize - -@item Smalltalk -@itemize @bullet -@item -GNU Smalltalk @spaceuref{http://www.smalltalk.org/versions/GNUSmalltalk.html} -@end itemize - -@item Other -@itemize @bullet -@item -Axiom @uref{https://savannah.nongnu.org/projects/axiom} @* Computer algebra -using GCL. -@item -DrGenius @spaceuref{http://drgenius.seul.org/} @* Geometry system and -mathematical programming language. -@item -GiNaC @spaceuref{http://www.ginac.de/} @* C++ computer algebra using CLN. -@item -GOO @spaceuref{https://www.eecs.berkeley.edu/~jrb/goo/} @* Dynamic object oriented -language. -@item -Maxima @uref{https://www.ma.utexas.edu/users/wfs/maxima.html} @* Macsyma -computer algebra using GCL. -@c @item -@c Q @spaceuref{http://q-lang.sourceforge.net/} @* Equational programming system. -@item -Regina @spaceuref{http://regina.sourceforge.net/} @* Topological calculator. -@item -Yacas @spaceuref{http://yacas.sourceforge.net} @* Yet another computer algebra system. -@end itemize - -@end table - - -@node Algorithms, Internals, Language Bindings, Top -@chapter Algorithms -@cindex Algorithms - -This chapter is an introduction to some of the algorithms used for various GMP -operations. The code is likely to be hard to understand without knowing -something about the algorithms. - -Some GMP internals are mentioned, but applications that expect to be -compatible with future GMP releases should take care to use only the -documented functions. - -@menu -* Multiplication Algorithms:: -* Division Algorithms:: -* Greatest Common Divisor Algorithms:: -* Powering Algorithms:: -* Root Extraction Algorithms:: -* Radix Conversion Algorithms:: -* Other Algorithms:: -* Assembly Coding:: -@end menu - - -@node Multiplication Algorithms, Division Algorithms, Algorithms, Algorithms -@section Multiplication -@cindex Multiplication algorithms - -N@cross{}N limb multiplications and squares are done using one of seven -algorithms, as the size N increases. - -@quotation -@multitable {KaratsubaMMM} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM} -@item Algorithm @tab Threshold -@item Basecase @tab (none) -@item Karatsuba @tab @code{MUL_TOOM22_THRESHOLD} -@item Toom-3 @tab @code{MUL_TOOM33_THRESHOLD} -@item Toom-4 @tab @code{MUL_TOOM44_THRESHOLD} -@item Toom-6.5 @tab @code{MUL_TOOM6H_THRESHOLD} -@item Toom-8.5 @tab @code{MUL_TOOM8H_THRESHOLD} -@item FFT @tab @code{MUL_FFT_THRESHOLD} -@end multitable -@end quotation - -Similarly for squaring, with the @code{SQR} thresholds. - -N@cross{}M multiplications of operands with different sizes above -@code{MUL_TOOM22_THRESHOLD} are currently done by special Toom-inspired -algorithms or directly with FFT, depending on operand size (@pxref{Unbalanced -Multiplication}). - -@menu -* Basecase Multiplication:: -* Karatsuba Multiplication:: -* Toom 3-Way Multiplication:: -* Toom 4-Way Multiplication:: -* Higher degree Toom'n'half:: -* FFT Multiplication:: -* Other Multiplication:: -* Unbalanced Multiplication:: -@end menu - - -@node Basecase Multiplication, Karatsuba Multiplication, Multiplication Algorithms, Multiplication Algorithms -@subsection Basecase Multiplication - -Basecase N@cross{}M multiplication is a straightforward rectangular set of -cross-products, the same as long multiplication done by hand and for that -reason sometimes known as the schoolbook or grammar school method. This is an -@m{O(NM),O(N*M)} algorithm. See Knuth section 4.3.1 algorithm M -(@pxref{References}), and the @file{mpn/generic/mul_basecase.c} code. - -Assembly implementations of @code{mpn_mul_basecase} are essentially the same -as the generic C code, but have all the usual assembly tricks and -obscurities introduced for speed. - -A square can be done in roughly half the time of a multiply, by using the fact -that the cross products above and below the diagonal are the same. A triangle -of products below the diagonal is formed, doubled (left shift by one bit), and -then the products on the diagonal added. This can be seen in -@file{mpn/generic/sqr_basecase.c}. Again the assembly implementations take -essentially the same approach. - -@tex -\def\GMPline#1#2#3#4#5#6{% - \hbox {% - \vrule height 2.5ex depth 1ex - \hbox to 2em {\hfil{#2}\hfil}% - \vrule \hbox to 2em {\hfil{#3}\hfil}% - \vrule \hbox to 2em {\hfil{#4}\hfil}% - \vrule \hbox to 2em {\hfil{#5}\hfil}% - \vrule \hbox to 2em {\hfil{#6}\hfil}% - \vrule}} -\GMPdisplay{ - \hbox{% - \vbox{% - \hbox to 1.5em {\vrule height 2.5ex depth 1ex width 0pt}% - \hbox {\vrule height 2.5ex depth 1ex width 0pt u0\hfil}% - \hbox {\vrule height 2.5ex depth 1ex width 0pt u1\hfil}% - \hbox {\vrule height 2.5ex depth 1ex width 0pt u2\hfil}% - \hbox {\vrule height 2.5ex depth 1ex width 0pt u3\hfil}% - \hbox {\vrule height 2.5ex depth 1ex width 0pt u4\hfil}% - \vfill}% - \vbox{% - \hbox{% - \hbox to 2em {\hfil u0\hfil}% - \hbox to 2em {\hfil u1\hfil}% - \hbox to 2em {\hfil u2\hfil}% - \hbox to 2em {\hfil u3\hfil}% - \hbox to 2em {\hfil u4\hfil}}% - \vskip 0.7ex - \hrule - \GMPline{u0}{d}{}{}{}{}% - \hrule - \GMPline{u1}{}{d}{}{}{}% - \hrule - \GMPline{u2}{}{}{d}{}{}% - \hrule - \GMPline{u3}{}{}{}{d}{}% - \hrule - \GMPline{u4}{}{}{}{}{d}% - \hrule}}} -@end tex -@ifnottex -@example -@group - u0 u1 u2 u3 u4 - +---+---+---+---+---+ -u0 | d | | | | | - +---+---+---+---+---+ -u1 | | d | | | | - +---+---+---+---+---+ -u2 | | | d | | | - +---+---+---+---+---+ -u3 | | | | d | | - +---+---+---+---+---+ -u4 | | | | | d | - +---+---+---+---+---+ -@end group -@end example -@end ifnottex - -In practice squaring isn't a full 2@cross{} faster than multiplying, it's -usually around 1.5@cross{}. Less than 1.5@cross{} probably indicates -@code{mpn_sqr_basecase} wants improving on that CPU. - -On some CPUs @code{mpn_mul_basecase} can be faster than the generic C -@code{mpn_sqr_basecase} on some small sizes. @code{SQR_BASECASE_THRESHOLD} is -the size at which to use @code{mpn_sqr_basecase}, this will be zero if that -routine should be used always. - - -@node Karatsuba Multiplication, Toom 3-Way Multiplication, Basecase Multiplication, Multiplication Algorithms -@subsection Karatsuba Multiplication -@cindex Karatsuba multiplication - -The Karatsuba multiplication algorithm is described in Knuth section 4.3.3 -part A, and various other textbooks. A brief description is given here. - -The inputs @math{x} and @math{y} are treated as each split into two parts of -equal length (or the most significant part one limb shorter if N is odd). - -@tex -% GMPboxwidth used for all the multiplication pictures -\global\newdimen\GMPboxwidth \global\GMPboxwidth=5em -% GMPboxdepth and GMPboxheight are also used for the float pictures -\global\newdimen\GMPboxdepth \global\GMPboxdepth=1ex -\global\newdimen\GMPboxheight \global\GMPboxheight=2ex -\gdef\GMPvrule{\vrule height \GMPboxheight depth \GMPboxdepth} -\def\GMPbox#1#2{% - \vbox {% - \hrule - \hbox to 2\GMPboxwidth{% - \GMPvrule \hfil $#1$\hfil \vrule \hfil $#2$\hfil \vrule}% - \hrule}} -\GMPdisplay{% -\vbox{% - \hbox to 2\GMPboxwidth {high \hfil low} - \vskip 0.7ex - \GMPbox{x_1}{x_0} - \vskip 0.5ex - \GMPbox{y_1}{y_0} -}} -@end tex -@ifnottex -@example -@group - high low -+----------+----------+ -| x1 | x0 | -+----------+----------+ - -+----------+----------+ -| y1 | y0 | -+----------+----------+ -@end group -@end example -@end ifnottex - -Let @math{b} be the power of 2 where the split occurs, i.e.@: if @ms{x,0} is -@math{k} limbs (@ms{y,0} the same) then -@m{b=2\GMPraise{$k*$@code{mp\_bits\_per\_limb}}, b=2^(k*mp_bits_per_limb)}. -With that @m{x=x_1b+x_0,x=x1*b+x0} and @m{y=y_1b+y_0,y=y1*b+y0}, and the -following holds, - -@display -@m{xy = (b^2+b)x_1y_1 - b(x_1-x_0)(y_1-y_0) + (b+1)x_0y_0, - x*y = (b^2+b)*x1*y1 - b*(x1-x0)*(y1-y0) + (b+1)*x0*y0} -@end display - -This formula means doing only three multiplies of (N/2)@cross{}(N/2) limbs, -whereas a basecase multiply of N@cross{}N limbs is equivalent to four -multiplies of (N/2)@cross{}(N/2). The factors @math{(b^2+b)} etc represent -the positions where the three products must be added. - -@tex -\def\GMPboxA#1#2{% - \vbox{% - \hrule - \hbox{% - \GMPvrule - \hbox to 2\GMPboxwidth {\hfil\hbox{$#1$}\hfil}% - \vrule - \hbox to 2\GMPboxwidth {\hfil\hbox{$#2$}\hfil}% - \vrule} - \hrule}} -\def\GMPboxB#1#2{% - \hbox{% - \raise \GMPboxdepth \hbox to \GMPboxwidth {\hfil #1\hskip 0.5em}% - \vbox{% - \hrule - \hbox{% - \GMPvrule - \hbox to 2\GMPboxwidth {\hfil\hbox{$#2$}\hfil}% - \vrule}% - \hrule}}} -\GMPdisplay{% -\vbox{% - \hbox to 4\GMPboxwidth {high \hfil low} - \vskip 0.7ex - \GMPboxA{x_1y_1}{x_0y_0} - \vskip 0.5ex - \GMPboxB{$+$}{x_1y_1} - \vskip 0.5ex - \GMPboxB{$+$}{x_0y_0} - \vskip 0.5ex - \GMPboxB{$-$}{(x_1-x_0)(y_1-y_0)} -}} -@end tex -@ifnottex -@example -@group - high low -+--------+--------+ +--------+--------+ -| x1*y1 | | x0*y0 | -+--------+--------+ +--------+--------+ - +--------+--------+ - add | x1*y1 | - +--------+--------+ - +--------+--------+ - add | x0*y0 | - +--------+--------+ - +--------+--------+ - sub | (x1-x0)*(y1-y0) | - +--------+--------+ -@end group -@end example -@end ifnottex - -The term @m{(x_1-x_0)(y_1-y_0),(x1-x0)*(y1-y0)} is best calculated as an -absolute value, and the sign used to choose to add or subtract. Notice the -sum @m{\mathop{\rm high}(x_0y_0)+\mathop{\rm low}(x_1y_1), -high(x0*y0)+low(x1*y1)} occurs twice, so it's possible to do @m{5k,5*k} limb -additions, rather than @m{6k,6*k}, but in GMP extra function call overheads -outweigh the saving. - -Squaring is similar to multiplying, but with @math{x=y} the formula reduces to -an equivalent with three squares, - -@display -@m{x^2 = (b^2+b)x_1^2 - b(x_1-x_0)^2 + (b+1)x_0^2, - x^2 = (b^2+b)*x1^2 - b*(x1-x0)^2 + (b+1)*x0^2} -@end display - -The final result is accumulated from those three squares the same way as for -the three multiplies above. The middle term @m{(x_1-x_0)^2,(x1-x0)^2} is now -always positive. - -A similar formula for both multiplying and squaring can be constructed with a -middle term @m{(x_1+x_0)(y_1+y_0),(x1+x0)*(y1+y0)}. But those sums can exceed -@math{k} limbs, leading to more carry handling and additions than the form -above. - -Karatsuba multiplication is asymptotically an @math{O(N^@W{1.585})} algorithm, -the exponent being @m{\log3/\log2,log(3)/log(2)}, representing 3 multiplies -each @math{1/2} the size of the inputs. This is a big improvement over the -basecase multiply at @math{O(N^2)} and the advantage soon overcomes the extra -additions Karatsuba performs. @code{MUL_TOOM22_THRESHOLD} can be as little -as 10 limbs. The @code{SQR} threshold is usually about twice the @code{MUL}. - -The basecase algorithm will take a time of the form @m{M(N) = aN^2 + bN + c, -M(N) = a*N^2 + b*N + c} and the Karatsuba algorithm @m{K(N) = 3M(N/2) + dN + -e, K(N) = 3*M(N/2) + d*N + e}, which expands to @m{K(N) = {3\over4} aN^2 + -{3\over2} bN + 3c + dN + e, K(N) = 3/4*a*N^2 + 3/2*b*N + 3*c + d*N + e}. The -factor @m{3\over4, 3/4} for @math{a} means per-crossproduct speedups in the -basecase code will increase the threshold since they benefit @math{M(N)} more -than @math{K(N)}. And conversely the @m{3\over2, 3/2} for @math{b} means -linear style speedups of @math{b} will increase the threshold since they -benefit @math{K(N)} more than @math{M(N)}. The latter can be seen for -instance when adding an optimized @code{mpn_sqr_diagonal} to -@code{mpn_sqr_basecase}. Of course all speedups reduce total time, and in -that sense the algorithm thresholds are merely of academic interest. - - -@node Toom 3-Way Multiplication, Toom 4-Way Multiplication, Karatsuba Multiplication, Multiplication Algorithms -@subsection Toom 3-Way Multiplication -@cindex Toom multiplication - -The Karatsuba formula is the simplest case of a general approach to splitting -inputs that leads to both Toom and FFT algorithms. A description of -Toom can be found in Knuth section 4.3.3, with an example 3-way -calculation after Theorem A@. The 3-way form used in GMP is described here. - -The operands are each considered split into 3 pieces of equal length (or the -most significant part 1 or 2 limbs shorter than the other two). - -@tex -\def\GMPbox#1#2#3{% - \vbox{% - \hrule \vfil - \hbox to 3\GMPboxwidth {% - \GMPvrule - \hfil$#1$\hfil - \vrule - \hfil$#2$\hfil - \vrule - \hfil$#3$\hfil - \vrule}% - \vfil \hrule -}} -\GMPdisplay{% -\vbox{% - \hbox to 3\GMPboxwidth {high \hfil low} - \vskip 0.7ex - \GMPbox{x_2}{x_1}{x_0} - \vskip 0.5ex - \GMPbox{y_2}{y_1}{y_0} - \vskip 0.5ex -}} -@end tex -@ifnottex -@example -@group - high low -+----------+----------+----------+ -| x2 | x1 | x0 | -+----------+----------+----------+ - -+----------+----------+----------+ -| y2 | y1 | y0 | -+----------+----------+----------+ -@end group -@end example -@end ifnottex - -@noindent -These parts are treated as the coefficients of two polynomials - -@display -@group -@m{X(t) = x_2t^2 + x_1t + x_0, - X(t) = x2*t^2 + x1*t + x0} -@m{Y(t) = y_2t^2 + y_1t + y_0, - Y(t) = y2*t^2 + y1*t + y0} -@end group -@end display - -Let @math{b} equal the power of 2 which is the size of the @ms{x,0}, @ms{x,1}, -@ms{y,0} and @ms{y,1} pieces, i.e.@: if they're @math{k} limbs each then -@m{b=2\GMPraise{$k*$@code{mp\_bits\_per\_limb}}, b=2^(k*mp_bits_per_limb)}. -With this @math{x=X(b)} and @math{y=Y(b)}. - -Let a polynomial @m{W(t)=X(t)Y(t),W(t)=X(t)*Y(t)} and suppose its coefficients -are - -@display -@m{W(t) = w_4t^4 + w_3t^3 + w_2t^2 + w_1t + w_0, - W(t) = w4*t^4 + w3*t^3 + w2*t^2 + w1*t + w0} -@end display - -The @m{w_i,w[i]} are going to be determined, and when they are they'll give -the final result using @math{w=W(b)}, since -@m{xy=X(b)Y(b),x*y=X(b)*Y(b)=W(b)}. The coefficients will be roughly -@math{b^2} each, and the final @math{W(b)} will be an addition like, - -@tex -\def\GMPbox#1#2{% - \moveright #1\GMPboxwidth - \vbox{% - \hrule - \hbox{% - \GMPvrule - \hbox to 2\GMPboxwidth {\hfil$#2$\hfil}% - \vrule}% - \hrule -}} -\GMPdisplay{% -\vbox{% - \hbox to 6\GMPboxwidth {high \hfil low}% - \vskip 0.7ex - \GMPbox{0}{w_4} - \vskip 0.5ex - \GMPbox{1}{w_3} - \vskip 0.5ex - \GMPbox{2}{w_2} - \vskip 0.5ex - \GMPbox{3}{w_1} - \vskip 0.5ex - \GMPbox{4}{w_0} -}} -@end tex -@ifnottex -@example -@group - high low -+-------+-------+ -| w4 | -+-------+-------+ - +--------+-------+ - | w3 | - +--------+-------+ - +--------+-------+ - | w2 | - +--------+-------+ - +--------+-------+ - | w1 | - +--------+-------+ - +-------+-------+ - | w0 | - +-------+-------+ -@end group -@end example -@end ifnottex - -The @m{w_i,w[i]} coefficients could be formed by a simple set of cross -products, like @m{w_4=x_2y_2,w4=x2*y2}, @m{w_3=x_2y_1+x_1y_2,w3=x2*y1+x1*y2}, -@m{w_2=x_2y_0+x_1y_1+x_0y_2,w2=x2*y0+x1*y1+x0*y2} etc, but this would need all -nine @m{x_iy_j,x[i]*y[j]} for @math{i,j=0,1,2}, and would be equivalent merely -to a basecase multiply. Instead the following approach is used. - -@math{X(t)} and @math{Y(t)} are evaluated and multiplied at 5 points, giving -values of @math{W(t)} at those points. In GMP the following points are used, - -@quotation -@multitable {@m{t=\infty,t=inf}M} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM} -@item Point @tab Value -@item @math{t=0} @tab @m{x_0y_0,x0 * y0}, which gives @ms{w,0} immediately -@item @math{t=1} @tab @m{(x_2+x_1+x_0)(y_2+y_1+y_0),(x2+x1+x0) * (y2+y1+y0)} -@item @math{t=-1} @tab @m{(x_2-x_1+x_0)(y_2-y_1+y_0),(x2-x1+x0) * (y2-y1+y0)} -@item @math{t=2} @tab @m{(4x_2+2x_1+x_0)(4y_2+2y_1+y_0),(4*x2+2*x1+x0) * (4*y2+2*y1+y0)} -@item @m{t=\infty,t=inf} @tab @m{x_2y_2,x2 * y2}, which gives @ms{w,4} immediately -@end multitable -@end quotation - -At @math{t=-1} the values can be negative and that's handled using the -absolute values and tracking the sign separately. At @m{t=\infty,t=inf} the -value is actually @m{\lim_{t\to\infty} {X(t)Y(t)\over t^4}, X(t)*Y(t)/t^4 in -the limit as t approaches infinity}, but it's much easier to think of as -simply @m{x_2y_2,x2*y2} giving @ms{w,4} immediately (much like -@m{x_0y_0,x0*y0} at @math{t=0} gives @ms{w,0} immediately). - -Each of the points substituted into -@m{W(t)=w_4t^4+\cdots+w_0,W(t)=w4*t^4+@dots{}+w0} gives a linear combination -of the @m{w_i,w[i]} coefficients, and the value of those combinations has just -been calculated. - -@tex -\GMPdisplay{% -$\matrix{% -W(0) & = & & & & & & & & & w_0 \cr -W(1) & = & w_4 & + & w_3 & + & w_2 & + & w_1 & + & w_0 \cr -W(-1) & = & w_4 & - & w_3 & + & w_2 & - & w_1 & + & w_0 \cr -W(2) & = & 16w_4 & + & 8w_3 & + & 4w_2 & + & 2w_1 & + & w_0 \cr -W(\infty) & = & w_4 \cr -}$} -@end tex -@ifnottex -@example -@group -W(0) = w0 -W(1) = w4 + w3 + w2 + w1 + w0 -W(-1) = w4 - w3 + w2 - w1 + w0 -W(2) = 16*w4 + 8*w3 + 4*w2 + 2*w1 + w0 -W(inf) = w4 -@end group -@end example -@end ifnottex - -This is a set of five equations in five unknowns, and some elementary linear -algebra quickly isolates each @m{w_i,w[i]}. This involves adding or -subtracting one @math{W(t)} value from another, and a couple of divisions by -powers of 2 and one division by 3, the latter using the special -@code{mpn_divexact_by3} (@pxref{Exact Division}). - -The conversion of @math{W(t)} values to the coefficients is interpolation. A -polynomial of degree 4 like @math{W(t)} is uniquely determined by values known -at 5 different points. The points are arbitrary and can be chosen to make the -linear equations come out with a convenient set of steps for quickly isolating -the @m{w_i,w[i]}. - -Squaring follows the same procedure as multiplication, but there's only one -@math{X(t)} and it's evaluated at the 5 points, and those values squared to -give values of @math{W(t)}. The interpolation is then identical, and in fact -the same @code{toom_interpolate_5pts} subroutine is used for both squaring and -multiplying. - -Toom-3 is asymptotically @math{O(N^@W{1.465})}, the exponent being -@m{\log5/\log3,log(5)/log(3)}, representing 5 recursive multiplies of 1/3 the -original size each. This is an improvement over Karatsuba at -@math{O(N^@W{1.585})}, though Toom does more work in the evaluation and -interpolation and so it only realizes its advantage above a certain size. - -Near the crossover between Toom-3 and Karatsuba there's generally a range of -sizes where the difference between the two is small. -@code{MUL_TOOM33_THRESHOLD} is a somewhat arbitrary point in that range and -successive runs of the tune program can give different values due to small -variations in measuring. A graph of time versus size for the two shows the -effect, see @file{tune/README}. - -At the fairly small sizes where the Toom-3 thresholds occur it's worth -remembering that the asymptotic behaviour for Karatsuba and Toom-3 can't be -expected to make accurate predictions, due of course to the big influence of -all sorts of overheads, and the fact that only a few recursions of each are -being performed. Even at large sizes there's a good chance machine dependent -effects like cache architecture will mean actual performance deviates from -what might be predicted. - -The formula given for the Karatsuba algorithm (@pxref{Karatsuba -Multiplication}) has an equivalent for Toom-3 involving only five multiplies, -but this would be complicated and unenlightening. - -An alternate view of Toom-3 can be found in Zuras (@pxref{References}), using -a vector to represent the @math{x} and @math{y} splits and a matrix -multiplication for the evaluation and interpolation stages. The matrix -inverses are not meant to be actually used, and they have elements with values -much greater than in fact arise in the interpolation steps. The diagram shown -for the 3-way is attractive, but again doesn't have to be implemented that way -and for example with a bit of rearrangement just one division by 6 can be -done. - - -@node Toom 4-Way Multiplication, Higher degree Toom'n'half, Toom 3-Way Multiplication, Multiplication Algorithms -@subsection Toom 4-Way Multiplication -@cindex Toom multiplication - -Karatsuba and Toom-3 split the operands into 2 and 3 coefficients, -respectively. Toom-4 analogously splits the operands into 4 coefficients. -Using the notation from the section on Toom-3 multiplication, we form two -polynomials: - -@display -@group -@m{X(t) = x_3t^3 + x_2t^2 + x_1t + x_0, - X(t) = x3*t^3 + x2*t^2 + x1*t + x0} -@m{Y(t) = y_3t^3 + y_2t^2 + y_1t + y_0, - Y(t) = y3*t^3 + y2*t^2 + y1*t + y0} -@end group -@end display - -@math{X(t)} and @math{Y(t)} are evaluated and multiplied at 7 points, giving -values of @math{W(t)} at those points. In GMP the following points are used, - -@quotation -@multitable {@m{t=-1/2,t=inf}M} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM} -@item Point @tab Value -@item @math{t=0} @tab @m{x_0y_0,x0 * y0}, which gives @ms{w,0} immediately -@item @math{t=1/2} @tab @m{(x_3+2x_2+4x_1+8x_0)(y_3+2y_2+4y_1+8y_0),(x3+2*x2+4*x1+8*x0) * (y3+2*y2+4*y1+8*y0)} -@item @math{t=-1/2} @tab @m{(-x_3+2x_2-4x_1+8x_0)(-y_3+2y_2-4y_1+8y_0),(-x3+2*x2-4*x1+8*x0) * (-y3+2*y2-4*y1+8*y0)} -@item @math{t=1} @tab @m{(x_3+x_2+x_1+x_0)(y_3+y_2+y_1+y_0),(x3+x2+x1+x0) * (y3+y2+y1+y0)} -@item @math{t=-1} @tab @m{(-x_3+x_2-x_1+x_0)(-y_3+y_2-y_1+y_0),(-x3+x2-x1+x0) * (-y3+y2-y1+y0)} -@item @math{t=2} @tab @m{(8x_3+4x_2+2x_1+x_0)(8y_3+4y_2+2y_1+y_0),(8*x3+4*x2+2*x1+x0) * (8*y3+4*y2+2*y1+y0)} -@item @m{t=\infty,t=inf} @tab @m{x_3y_3,x3 * y3}, which gives @ms{w,6} immediately -@end multitable -@end quotation - -The number of additions and subtractions for Toom-4 is much larger than for Toom-3. -But several subexpressions occur multiple times, for example @m{x_2+x_0,x2+x0}, occurs -for both @math{t=1} and @math{t=-1}. - -Toom-4 is asymptotically @math{O(N^@W{1.404})}, the exponent being -@m{\log7/\log4,log(7)/log(4)}, representing 7 recursive multiplies of 1/4 the -original size each. - - -@node Higher degree Toom'n'half, FFT Multiplication, Toom 4-Way Multiplication, Multiplication Algorithms -@subsection Higher degree Toom'n'half -@cindex Toom multiplication - -The Toom algorithms described above (@pxref{Toom 3-Way Multiplication}, -@pxref{Toom 4-Way Multiplication}) generalizes to split into an arbitrary -number of pieces. In general a split of two equally long operands into -@math{r} pieces leads to evaluations and pointwise multiplications done at -@m{2r-1,2*r-1} points. To fully exploit symmetries it would be better to have -a multiple of 4 points, that's why for higher degree Toom'n'half is used. - -Toom'n'half means that the existence of one more piece is considered for a -single operand. It can be virtual, i.e. zero, or real, when the two operand -are not exactly balanced. By choosing an even @math{r}, -Toom-@m{r{1\over2},r+1/2} requires @math{2r} points, a multiple of four. - -The four-plets of points include 0, @m{\infty,inf}, +1, -1 and -@m{\pm2^i,+-2^i}, @m{\pm2^{-i},+-2^-i} . Each of them giving shortcuts for the -evaluation phase and for some steps in the interpolation phase. Further tricks -are used to reduce the memory footprint of the whole multiplication algorithm -to a memory buffer equanl in size to the result of the product. - -Current GMP uses both Toom-6'n'half and Toom-8'n'half. - - -@node FFT Multiplication, Other Multiplication, Higher degree Toom'n'half, Multiplication Algorithms -@subsection FFT Multiplication -@cindex FFT multiplication -@cindex Fast Fourier Transform - -At large to very large sizes a Fermat style FFT multiplication is used, -following Sch@"onhage and Strassen (@pxref{References}). Descriptions of FFTs -in various forms can be found in many textbooks, for instance Knuth section -4.3.3 part C or Lipson chapter IX@. A brief description of the form used in -GMP is given here. - -The multiplication done is @m{xy \bmod 2^N+1, x*y mod 2^N+1}, for a given -@math{N}. A full product @m{xy,x*y} is obtained by choosing @m{N \ge -\mathop{\rm bits}(x)+\mathop{\rm bits}(y), N>=bits(x)+bits(y)} and padding -@math{x} and @math{y} with high zero limbs. The modular product is the native -form for the algorithm, so padding to get a full product is unavoidable. - -The algorithm follows a split, evaluate, pointwise multiply, interpolate and -combine similar to that described above for Karatsuba and Toom-3. A @math{k} -parameter controls the split, with an FFT-@math{k} splitting into @math{2^k} -pieces of @math{M=N/2^k} bits each. @math{N} must be a multiple of -@m{2^k\times@code{mp\_bits\_per\_limb}, (2^k)*@nicode{mp_bits_per_limb}} so -the split falls on limb boundaries, avoiding bit shifts in the split and -combine stages. - -The evaluations, pointwise multiplications, and interpolation, are all done -modulo @m{2^{N'}+1, 2^N'+1} where @math{N'} is @math{2M+k+3} rounded up to a -multiple of @math{2^k} and of @code{mp_bits_per_limb}. The results of -interpolation will be the following negacyclic convolution of the input -pieces, and the choice of @math{N'} ensures these sums aren't truncated. -@tex -$$ w_n = \sum_{{i+j = b2^k+n}\atop{b=0,1}} (-1)^b x_i y_j $$ -@end tex -@ifnottex - -@example - --- - \ b -w[n] = / (-1) * x[i] * y[j] - --- - i+j==b*2^k+n - b=0,1 -@end example - -@end ifnottex -The points used for the evaluation are @math{g^i} for @math{i=0} to -@math{2^k-1} where @m{g=2^{2N'/2^k}, g=2^(2N'/2^k)}. @math{g} is a -@m{2^k,2^k'}th root of unity mod @m{2^{N'}+1,2^N'+1}, which produces necessary -cancellations at the interpolation stage, and it's also a power of 2 so the -fast Fourier transforms used for the evaluation and interpolation do only -shifts, adds and negations. - -The pointwise multiplications are done modulo @m{2^{N'}+1, 2^N'+1} and either -recurse into a further FFT or use a plain multiplication (Toom-3, Karatsuba or -basecase), whichever is optimal at the size @math{N'}. The interpolation is -an inverse fast Fourier transform. The resulting set of sums of @m{x_iy_j, -x[i]*y[j]} are added at appropriate offsets to give the final result. - -Squaring is the same, but @math{x} is the only input so it's one transform at -the evaluate stage and the pointwise multiplies are squares. The -interpolation is the same. - -For a mod @math{2^N+1} product, an FFT-@math{k} is an @m{O(N^{k/(k-1)}), -O(N^(k/(k-1)))} algorithm, the exponent representing @math{2^k} recursed -modular multiplies each @m{1/2^{k-1},1/2^(k-1)} the size of the original. -Each successive @math{k} is an asymptotic improvement, but overheads mean each -is only faster at bigger and bigger sizes. In the code, @code{MUL_FFT_TABLE} -and @code{SQR_FFT_TABLE} are the thresholds where each @math{k} is used. Each -new @math{k} effectively swaps some multiplying for some shifts, adds and -overheads. - -A mod @math{2^N+1} product can be formed with a normal -@math{N@cross{}N@rightarrow{}2N} bit multiply plus a subtraction, so an FFT -and Toom-3 etc can be compared directly. A @math{k=4} FFT at -@math{O(N^@W{1.333})} can be expected to be the first faster than Toom-3 at -@math{O(N^@W{1.465})}. In practice this is what's found, with -@code{MUL_FFT_MODF_THRESHOLD} and @code{SQR_FFT_MODF_THRESHOLD} being between -300 and 1000 limbs, depending on the CPU@. So far it's been found that only -very large FFTs recurse into pointwise multiplies above these sizes. - -When an FFT is to give a full product, the change of @math{N} to @math{2N} -doesn't alter the theoretical complexity for a given @math{k}, but for the -purposes of considering where an FFT might be first used it can be assumed -that the FFT is recursing into a normal multiply and that on that basis it's -doing @math{2^k} recursed multiplies each @m{1/2^{k-2},1/2^(k-2)} the size of -the inputs, making it @m{O(N^{k/(k-2)}), O(N^(k/(k-2)))}. This would mean -@math{k=7} at @math{O(N^@W{1.4})} would be the first FFT faster than Toom-3. -In practice @code{MUL_FFT_THRESHOLD} and @code{SQR_FFT_THRESHOLD} have been -found to be in the @math{k=8} range, somewhere between 3000 and 10000 limbs. - -The way @math{N} is split into @math{2^k} pieces and then @math{2M+k+3} is -rounded up to a multiple of @math{2^k} and @code{mp_bits_per_limb} means that -when @math{2^k@ge{}@nicode{mp\_bits\_per\_limb}} the effective @math{N} is a -multiple of @m{2^{2k-1},2^(2k-1)} bits. The @math{+k+3} means some values of -@math{N} just under such a multiple will be rounded to the next. The -complexity calculations above assume that a favourable size is used, meaning -one which isn't padded through rounding, and it's also assumed that the extra -@math{+k+3} bits are negligible at typical FFT sizes. - -The practical effect of the @m{2^{2k-1},2^(2k-1)} constraint is to introduce a -step-effect into measured speeds. For example @math{k=8} will round @math{N} -up to a multiple of 32768 bits, so for a 32-bit limb there'll be 512 limb -groups of sizes for which @code{mpn_mul_n} runs at the same speed. Or for -@math{k=9} groups of 2048 limbs, @math{k=10} groups of 8192 limbs, etc. In -practice it's been found each @math{k} is used at quite small multiples of its -size constraint and so the step effect is quite noticeable in a time versus -size graph. - -The threshold determinations currently measure at the mid-points of size -steps, but this is sub-optimal since at the start of a new step it can happen -that it's better to go back to the previous @math{k} for a while. Something -more sophisticated for @code{MUL_FFT_TABLE} and @code{SQR_FFT_TABLE} will be -needed. - - -@node Other Multiplication, Unbalanced Multiplication, FFT Multiplication, Multiplication Algorithms -@subsection Other Multiplication -@cindex Toom multiplication - -The Toom algorithms described above (@pxref{Toom 3-Way Multiplication}, -@pxref{Toom 4-Way Multiplication}) generalizes to split into an arbitrary -number of pieces, as per Knuth section 4.3.3 algorithm C@. This is not -currently used. The notes here are merely for interest. - -In general a split into @math{r+1} pieces is made, and evaluations and -pointwise multiplications done at @m{2r+1,2*r+1} points. A 4-way split does 7 -pointwise multiplies, 5-way does 9, etc. Asymptotically an @math{(r+1)}-way -algorithm is @m{O(N^{log(2r+1)/log(r+1)}), O(N^(log(2*r+1)/log(r+1)))}. Only -the pointwise multiplications count towards big-@math{O} complexity, but the -time spent in the evaluate and interpolate stages grows with @math{r} and has -a significant practical impact, with the asymptotic advantage of each @math{r} -realized only at bigger and bigger sizes. The overheads grow as -@m{O(Nr),O(N*r)}, whereas in an @math{r=2^k} FFT they grow only as @m{O(N \log -r), O(N*log(r))}. - -Knuth algorithm C evaluates at points 0,1,2,@dots{},@m{2r,2*r}, but exercise 4 -uses @math{-r},@dots{},0,@dots{},@math{r} and the latter saves some small -multiplies in the evaluate stage (or rather trades them for additions), and -has a further saving of nearly half the interpolate steps. The idea is to -separate odd and even final coefficients and then perform algorithm C steps C7 -and C8 on them separately. The divisors at step C7 become @math{j^2} and the -multipliers at C8 become @m{2tj-j^2,2*t*j-j^2}. - -Splitting odd and even parts through positive and negative points can be -thought of as using @math{-1} as a square root of unity. If a 4th root of -unity was available then a further split and speedup would be possible, but no -such root exists for plain integers. Going to complex integers with -@m{i=\sqrt{-1}, i=sqrt(-1)} doesn't help, essentially because in Cartesian -form it takes three real multiplies to do a complex multiply. The existence -of @m{2^k,2^k'}th roots of unity in a suitable ring or field lets the fast -Fourier transform keep splitting and get to @m{O(N \log r), O(N*log(r))}. - -Floating point FFTs use complex numbers approximating Nth roots of unity. -Some processors have special support for such FFTs. But these are not used in -GMP since it's very difficult to guarantee an exact result (to some number of -bits). An occasional difference of 1 in the last bit might not matter to a -typical signal processing algorithm, but is of course of vital importance to -GMP. - - -@node Unbalanced Multiplication, , Other Multiplication, Multiplication Algorithms -@subsection Unbalanced Multiplication -@cindex Unbalanced multiplication - -Multiplication of operands with different sizes, both below -@code{MUL_TOOM22_THRESHOLD} are done with plain schoolbook multiplication -(@pxref{Basecase Multiplication}). - -For really large operands, we invoke FFT directly. - -For operands between these sizes, we use Toom inspired algorithms suggested by -Alberto Zanoni and Marco Bodrato. The idea is to split the operands into -polynomials of different degree. GMP currently splits the smaller operand -onto 2 coefficients, i.e., a polynomial of degree 1, but the larger operand -can be split into 2, 3, or 4 coefficients, i.e., a polynomial of degree 1 to -3. - -@c FIXME: This is mighty ugly, but a cleaner @need triggers texinfo bugs that -@c screws up layout here and there in the rest of the manual. -@c @tex -@c \goodbreak -@c @end tex -@node Division Algorithms, Greatest Common Divisor Algorithms, Multiplication Algorithms, Algorithms -@section Division Algorithms -@cindex Division algorithms - -@menu -* Single Limb Division:: -* Basecase Division:: -* Divide and Conquer Division:: -* Block-Wise Barrett Division:: -* Exact Division:: -* Exact Remainder:: -* Small Quotient Division:: -@end menu - - -@node Single Limb Division, Basecase Division, Division Algorithms, Division Algorithms -@subsection Single Limb Division - -N@cross{}1 division is implemented using repeated 2@cross{}1 divisions from -high to low, either with a hardware divide instruction or a multiplication by -inverse, whichever is best on a given CPU. - -The multiply by inverse follows ``Improved division by invariant integers'' by -M@"oller and Granlund (@pxref{References}) and is implemented as -@code{udiv_qrnnd_preinv} in @file{gmp-impl.h}. The idea is to have a -fixed-point approximation to @math{1/d} (see @code{invert_limb}) and then -multiply by the high limb (plus one bit) of the dividend to get a quotient -@math{q}. With @math{d} normalized (high bit set), @math{q} is no more than 1 -too small. Subtracting @m{qd,q*d} from the dividend gives a remainder, and -reveals whether @math{q} or @math{q-1} is correct. - -The result is a division done with two multiplications and four or five -arithmetic operations. On CPUs with low latency multipliers this can be much -faster than a hardware divide, though the cost of calculating the inverse at -the start may mean it's only better on inputs bigger than say 4 or 5 limbs. - -When a divisor must be normalized, either for the generic C -@code{__udiv_qrnnd_c} or the multiply by inverse, the division performed is -actually @m{a2^k,a*2^k} by @m{d2^k,d*2^k} where @math{a} is the dividend and -@math{k} is the power necessary to have the high bit of @m{d2^k,d*2^k} set. -The bit shifts for the dividend are usually accomplished ``on the fly'' -meaning by extracting the appropriate bits at each step. Done this way the -quotient limbs come out aligned ready to store. When only the remainder is -wanted, an alternative is to take the dividend limbs unshifted and calculate -@m{r = a \bmod d2^k, r = a mod d*2^k} followed by an extra final step @m{r2^k -\bmod d2^k, r*2^k mod d*2^k}. This can help on CPUs with poor bit shifts or -few registers. - -The multiply by inverse can be done two limbs at a time. The calculation is -basically the same, but the inverse is two limbs and the divisor treated as if -padded with a low zero limb. This means more work, since the inverse will -need a 2@cross{}2 multiply, but the four 1@cross{}1s to do that are -independent and can therefore be done partly or wholly in parallel. Likewise -for a 2@cross{}1 calculating @m{qd,q*d}. The net effect is to process two -limbs with roughly the same two multiplies worth of latency that one limb at a -time gives. This extends to 3 or 4 limbs at a time, though the extra work to -apply the inverse will almost certainly soon reach the limits of multiplier -throughput. - -A similar approach in reverse can be taken to process just half a limb at a -time if the divisor is only a half limb. In this case the 1@cross{}1 multiply -for the inverse effectively becomes two @m{{1\over2}\times1, (1/2)x1} for each -limb, which can be a saving on CPUs with a fast half limb multiply, or in fact -if the only multiply is a half limb, and especially if it's not pipelined. - - -@node Basecase Division, Divide and Conquer Division, Single Limb Division, Division Algorithms -@subsection Basecase Division - -Basecase N@cross{}M division is like long division done by hand, but in base -@m{2\GMPraise{@code{mp\_bits\_per\_limb}}, 2^mp_bits_per_limb}. See Knuth -section 4.3.1 algorithm D, and @file{mpn/generic/sb_divrem_mn.c}. - -Briefly stated, while the dividend remains larger than the divisor, a high -quotient limb is formed and the N@cross{}1 product @m{qd,q*d} subtracted at -the top end of the dividend. With a normalized divisor (most significant bit -set), each quotient limb can be formed with a 2@cross{}1 division and a -1@cross{}1 multiplication plus some subtractions. The 2@cross{}1 division is -by the high limb of the divisor and is done either with a hardware divide or a -multiply by inverse (the same as in @ref{Single Limb Division}) whichever is -faster. Such a quotient is sometimes one too big, requiring an addback of the -divisor, but that happens rarely. - -With Q=N@minus{}M being the number of quotient limbs, this is an -@m{O(QM),O(Q*M)} algorithm and will run at a speed similar to a basecase -Q@cross{}M multiplication, differing in fact only in the extra multiply and -divide for each of the Q quotient limbs. - - -@node Divide and Conquer Division, Block-Wise Barrett Division, Basecase Division, Division Algorithms -@subsection Divide and Conquer Division - -For divisors larger than @code{DC_DIV_QR_THRESHOLD}, division is done by dividing. -Or to be precise by a recursive divide and conquer algorithm based on work by -Moenck and Borodin, Jebelean, and Burnikel and Ziegler (@pxref{References}). - -The algorithm consists essentially of recognising that a 2N@cross{}N division -can be done with the basecase division algorithm (@pxref{Basecase Division}), -but using N/2 limbs as a base, not just a single limb. This way the -multiplications that arise are (N/2)@cross{}(N/2) and can take advantage of -Karatsuba and higher multiplication algorithms (@pxref{Multiplication -Algorithms}). The two ``digits'' of the quotient are formed by recursive -N@cross{}(N/2) divisions. - -If the (N/2)@cross{}(N/2) multiplies are done with a basecase multiplication -then the work is about the same as a basecase division, but with more function -call overheads and with some subtractions separated from the multiplies. -These overheads mean that it's only when N/2 is above -@code{MUL_TOOM22_THRESHOLD} that divide and conquer is of use. - -@code{DC_DIV_QR_THRESHOLD} is based on the divisor size N, so it will be somewhere -above twice @code{MUL_TOOM22_THRESHOLD}, but how much above depends on the -CPU@. An optimized @code{mpn_mul_basecase} can lower @code{DC_DIV_QR_THRESHOLD} a -little by offering a ready-made advantage over repeated @code{mpn_submul_1} -calls. - -Divide and conquer is asymptotically @m{O(M(N)\log N),O(M(N)*log(N))} where -@math{M(N)} is the time for an N@cross{}N multiplication done with FFTs. The -actual time is a sum over multiplications of the recursed sizes, as can be -seen near the end of section 2.2 of Burnikel and Ziegler. For example, within -the Toom-3 range, divide and conquer is @m{2.63M(N), 2.63*M(N)}. With higher -algorithms the @math{M(N)} term improves and the multiplier tends to @m{\log -N, log(N)}. In practice, at moderate to large sizes, a 2N@cross{}N division -is about 2 to 4 times slower than an N@cross{}N multiplication. - - -@node Block-Wise Barrett Division, Exact Division, Divide and Conquer Division, Division Algorithms -@subsection Block-Wise Barrett Division - -For the largest divisions, a block-wise Barrett division algorithm is used. -Here, the divisor is inverted to a precision determined by the relative size of -the dividend and divisor. Blocks of quotient limbs are then generated by -multiplying blocks from the dividend by the inverse. - -Our block-wise algorithm computes a smaller inverse than in the plain Barrett -algorithm. For a @math{2n/n} division, the inverse will be just @m{\lceil n/2 -\rceil, ceil(n/2)} limbs. - - -@node Exact Division, Exact Remainder, Block-Wise Barrett Division, Division Algorithms -@subsection Exact Division - - -A so-called exact division is when the dividend is known to be an exact -multiple of the divisor. Jebelean's exact division algorithm uses this -knowledge to make some significant optimizations (@pxref{References}). - -The idea can be illustrated in decimal for example with 368154 divided by -543. Because the low digit of the dividend is 4, the low digit of the -quotient must be 8. This is arrived at from @m{4 \mathord{\times} 7 \bmod 10, -4*7 mod 10}, using the fact 7 is the modular inverse of 3 (the low digit of -the divisor), since @m{3 \mathord{\times} 7 \mathop{\equiv} 1 \bmod 10, 3*7 -@equiv{} 1 mod 10}. So @m{8\mathord{\times}543 = 4344,8*543=4344} can be -subtracted from the dividend leaving 363810. Notice the low digit has become -zero. - -The procedure is repeated at the second digit, with the next quotient digit 7 -(@m{1 \mathord{\times} 7 \bmod 10, 7 @equiv{} 1*7 mod 10}), subtracting -@m{7\mathord{\times}543 = 3801,7*543=3801}, leaving 325800. And finally at -the third digit with quotient digit 6 (@m{8 \mathord{\times} 7 \bmod 10, 8*7 -mod 10}), subtracting @m{6\mathord{\times}543 = 3258,6*543=3258} leaving 0. -So the quotient is 678. - -Notice however that the multiplies and subtractions don't need to extend past -the low three digits of the dividend, since that's enough to determine the -three quotient digits. For the last quotient digit no subtraction is needed -at all. On a 2N@cross{}N division like this one, only about half the work of -a normal basecase division is necessary. - -For an N@cross{}M exact division producing Q=N@minus{}M quotient limbs, the -saving over a normal basecase division is in two parts. Firstly, each of the -Q quotient limbs needs only one multiply, not a 2@cross{}1 divide and -multiply. Secondly, the crossproducts are reduced when @math{Q>M} to -@m{QM-M(M+1)/2,Q*M-M*(M+1)/2}, or when @math{Q@le{}M} to @m{Q(Q-1)/2, -Q*(Q-1)/2}. Notice the savings are complementary. If Q is big then many -divisions are saved, or if Q is small then the crossproducts reduce to a small -number. - -The modular inverse used is calculated efficiently by @code{binvert_limb} in -@file{gmp-impl.h}. This does four multiplies for a 32-bit limb, or six for a -64-bit limb. @file{tune/modlinv.c} has some alternate implementations that -might suit processors better at bit twiddling than multiplying. - -The sub-quadratic exact division described by Jebelean in ``Exact Division -with Karatsuba Complexity'' is not currently implemented. It uses a -rearrangement similar to the divide and conquer for normal division -(@pxref{Divide and Conquer Division}), but operating from low to high. A -further possibility not currently implemented is ``Bidirectional Exact Integer -Division'' by Krandick and Jebelean which forms quotient limbs from both the -high and low ends of the dividend, and can halve once more the number of -crossproducts needed in a 2N@cross{}N division. - -A special case exact division by 3 exists in @code{mpn_divexact_by3}, -supporting Toom-3 multiplication and @code{mpq} canonicalizations. It forms -quotient digits with a multiply by the modular inverse of 3 (which is -@code{0xAA..AAB}) and uses two comparisons to determine a borrow for the next -limb. The multiplications don't need to be on the dependent chain, as long as -the effect of the borrows is applied, which can help chips with pipelined -multipliers. - - -@node Exact Remainder, Small Quotient Division, Exact Division, Division Algorithms -@subsection Exact Remainder -@cindex Exact remainder - -If the exact division algorithm is done with a full subtraction at each stage -and the dividend isn't a multiple of the divisor, then low zero limbs are -produced but with a remainder in the high limbs. For dividend @math{a}, -divisor @math{d}, quotient @math{q}, and @m{b = 2 -\GMPraise{@code{mp\_bits\_per\_limb}}, b = 2^mp_bits_per_limb}, this remainder -@math{r} is of the form -@tex -$$ a = qd + r b^n $$ -@end tex -@ifnottex - -@example -a = q*d + r*b^n -@end example - -@end ifnottex -@math{n} represents the number of zero limbs produced by the subtractions, -that being the number of limbs produced for @math{q}. @math{r} will be in the -range @math{0@le{}r<d} and can be viewed as a remainder, but one shifted up by -a factor of @math{b^n}. - -Carrying out full subtractions at each stage means the same number of cross -products must be done as a normal division, but there's still some single limb -divisions saved. When @math{d} is a single limb some simplifications arise, -providing good speedups on a number of processors. - -The functions @code{mpn_divexact_by3}, @code{mpn_modexact_1_odd} and the -internal @code{mpn_redc_X} functions differ subtly in how they return @math{r}, -leading to some negations in the above formula, but all are essentially the -same. - -@cindex Divisibility algorithm -@cindex Congruence algorithm -Clearly @math{r} is zero when @math{a} is a multiple of @math{d}, and this -leads to divisibility or congruence tests which are potentially more efficient -than a normal division. - -The factor of @math{b^n} on @math{r} can be ignored in a GCD when @math{d} is -odd, hence the use of @code{mpn_modexact_1_odd} by @code{mpn_gcd_1} and -@code{mpz_kronecker_ui} etc (@pxref{Greatest Common Divisor Algorithms}). - -Montgomery's REDC method for modular multiplications uses operands of the form -of @m{xb^{-n}, x*b^-n} and @m{yb^{-n}, y*b^-n} and on calculating @m{(xb^{-n}) -(yb^{-n}), (x*b^-n)*(y*b^-n)} uses the factor of @math{b^n} in the exact -remainder to reach a product in the same form @m{(xy)b^{-n}, (x*y)*b^-n} -(@pxref{Modular Powering Algorithm}). - -Notice that @math{r} generally gives no useful information about the ordinary -remainder @math{a @bmod d} since @math{b^n @bmod d} could be anything. If -however @math{b^n @equiv{} 1 @bmod d}, then @math{r} is the negative of the -ordinary remainder. This occurs whenever @math{d} is a factor of -@math{b^n-1}, as for example with 3 in @code{mpn_divexact_by3}. For a 32 or -64 bit limb other such factors include 5, 17 and 257, but no particular use -has been found for this. - - -@node Small Quotient Division, , Exact Remainder, Division Algorithms -@subsection Small Quotient Division - -An N@cross{}M division where the number of quotient limbs Q=N@minus{}M is -small can be optimized somewhat. - -An ordinary basecase division normalizes the divisor by shifting it to make -the high bit set, shifting the dividend accordingly, and shifting the -remainder back down at the end of the calculation. This is wasteful if only a -few quotient limbs are to be formed. Instead a division of just the top -@m{\rm2Q,2*Q} limbs of the dividend by the top Q limbs of the divisor can be -used to form a trial quotient. This requires only those limbs normalized, not -the whole of the divisor and dividend. - -A multiply and subtract then applies the trial quotient to the M@minus{}Q -unused limbs of the divisor and N@minus{}Q dividend limbs (which includes Q -limbs remaining from the trial quotient division). The starting trial -quotient can be 1 or 2 too big, but all cases of 2 too big and most cases of 1 -too big are detected by first comparing the most significant limbs that will -arise from the subtraction. An addback is done if the quotient still turns -out to be 1 too big. - -This whole procedure is essentially the same as one step of the basecase -algorithm done in a Q limb base, though with the trial quotient test done only -with the high limbs, not an entire Q limb ``digit'' product. The correctness -of this weaker test can be established by following the argument of Knuth -section 4.3.1 exercise 20 but with the @m{v_2 \GMPhat q > b \GMPhat r -+ u_2, v2*q>b*r+u2} condition appropriately relaxed. - - -@need 1000 -@node Greatest Common Divisor Algorithms, Powering Algorithms, Division Algorithms, Algorithms -@section Greatest Common Divisor -@cindex Greatest common divisor algorithms -@cindex GCD algorithms - -@menu -* Binary GCD:: -* Lehmer's Algorithm:: -* Subquadratic GCD:: -* Extended GCD:: -* Jacobi Symbol:: -@end menu - - -@node Binary GCD, Lehmer's Algorithm, Greatest Common Divisor Algorithms, Greatest Common Divisor Algorithms -@subsection Binary GCD - -At small sizes GMP uses an @math{O(N^2)} binary style GCD@. This is described -in many textbooks, for example Knuth section 4.5.2 algorithm B@. It simply -consists of successively reducing odd operands @math{a} and @math{b} using - -@quotation -@math{a,b = @abs{}(a-b),@min{}(a,b)} @* -strip factors of 2 from @math{a} -@end quotation - -The Euclidean GCD algorithm, as per Knuth algorithms E and A, repeatedly -computes the quotient @m{q = \lfloor a/b \rfloor, q = floor(a/b)} and replaces -@math{a,b} by @math{v, u - q v}. The binary algorithm has so far been found to -be faster than the Euclidean algorithm everywhere. One reason the binary -method does well is that the implied quotient at each step is usually small, -so often only one or two subtractions are needed to get the same effect as a -division. Quotients 1, 2 and 3 for example occur 67.7% of the time, see Knuth -section 4.5.3 Theorem E. - -When the implied quotient is large, meaning @math{b} is much smaller than -@math{a}, then a division is worthwhile. This is the basis for the initial -@math{a @bmod b} reductions in @code{mpn_gcd} and @code{mpn_gcd_1} (the latter -for both N@cross{}1 and 1@cross{}1 cases). But after that initial reduction, -big quotients occur too rarely to make it worth checking for them. - -@sp 1 -The final @math{1@cross{}1} GCD in @code{mpn_gcd_1} is done in the generic C -code as described above. For two N-bit operands, the algorithm takes about -0.68 iterations per bit. For optimum performance some attention needs to be -paid to the way the factors of 2 are stripped from @math{a}. - -Firstly it may be noted that in twos complement the number of low zero bits on -@math{a-b} is the same as @math{b-a}, so counting or testing can begin on -@math{a-b} without waiting for @math{@abs{}(a-b)} to be determined. - -A loop stripping low zero bits tends not to branch predict well, since the -condition is data dependent. But on average there's only a few low zeros, so -an option is to strip one or two bits arithmetically then loop for more (as -done for AMD K6). Or use a lookup table to get a count for several bits then -loop for more (as done for AMD K7). An alternative approach is to keep just -one of @math{a} or @math{b} odd and iterate - -@quotation -@math{a,b = @abs{}(a-b), @min{}(a,b)} @* -@math{a = a/2} if even @* -@math{b = b/2} if even -@end quotation - -This requires about 1.25 iterations per bit, but stripping of a single bit at -each step avoids any branching. Repeating the bit strip reduces to about 0.9 -iterations per bit, which may be a worthwhile tradeoff. - -Generally with the above approaches a speed of perhaps 6 cycles per bit can be -achieved, which is still not terribly fast with for instance a 64-bit GCD -taking nearly 400 cycles. It's this sort of time which means it's not usually -advantageous to combine a set of divisibility tests into a GCD. - -Currently, the binary algorithm is used for GCD only when @math{N < 3}. - -@node Lehmer's Algorithm, Subquadratic GCD, Binary GCD, Greatest Common Divisor Algorithms -@comment node-name, next, previous, up -@subsection Lehmer's algorithm - -Lehmer's improvement of the Euclidean algorithms is based on the observation -that the initial part of the quotient sequence depends only on the most -significant parts of the inputs. The variant of Lehmer's algorithm used in GMP -splits off the most significant two limbs, as suggested, e.g., in ``A -Double-Digit Lehmer-Euclid Algorithm'' by Jebelean (@pxref{References}). The -quotients of two double-limb inputs are collected as a 2 by 2 matrix with -single-limb elements. This is done by the function @code{mpn_hgcd2}. The -resulting matrix is applied to the inputs using @code{mpn_mul_1} and -@code{mpn_submul_1}. Each iteration usually reduces the inputs by almost one -limb. In the rare case of a large quotient, no progress can be made by -examining just the most significant two limbs, and the quotient is computed -using plain division. - -The resulting algorithm is asymptotically @math{O(N^2)}, just as the Euclidean -algorithm and the binary algorithm. The quadratic part of the work are -the calls to @code{mpn_mul_1} and @code{mpn_submul_1}. For small sizes, the -linear work is also significant. There are roughly @math{N} calls to the -@code{mpn_hgcd2} function. This function uses a couple of important -optimizations: - -@itemize -@item -It uses the same relaxed notion of correctness as @code{mpn_hgcd} (see next -section). This means that when called with the most significant two limbs of -two large numbers, the returned matrix does not always correspond exactly to -the initial quotient sequence for the two large numbers; the final quotient -may sometimes be one off. - -@item -It takes advantage of the fact the quotients are usually small. The division -operator is not used, since the corresponding assembler instruction is very -slow on most architectures. (This code could probably be improved further, it -uses many branches that are unfriendly to prediction). - -@item -It switches from double-limb calculations to single-limb calculations half-way -through, when the input numbers have been reduced in size from two limbs to -one and a half. - -@end itemize - -@node Subquadratic GCD, Extended GCD, Lehmer's Algorithm, Greatest Common Divisor Algorithms -@subsection Subquadratic GCD - -For inputs larger than @code{GCD_DC_THRESHOLD}, GCD is computed via the HGCD -(Half GCD) function, as a generalization to Lehmer's algorithm. - -Let the inputs @math{a,b} be of size @math{N} limbs each. Put @m{S=\lfloor N/2 -\rfloor + 1, S = floor(N/2) + 1}. Then HGCD(a,b) returns a transformation -matrix @math{T} with non-negative elements, and reduced numbers @math{(c;d) = -T^{-1} (a;b)}. The reduced numbers @math{c,d} must be larger than @math{S} -limbs, while their difference @math{abs(c-d)} must fit in @math{S} limbs. The -matrix elements will also be of size roughly @math{N/2}. - -The HGCD base case uses Lehmer's algorithm, but with the above stop condition -that returns reduced numbers and the corresponding transformation matrix -half-way through. For inputs larger than @code{HGCD_THRESHOLD}, HGCD is -computed recursively, using the divide and conquer algorithm in ``On -Sch@"onhage's algorithm and subquadratic integer GCD computation'' by M@"oller -(@pxref{References}). The recursive algorithm consists of these main -steps. - -@itemize - -@item -Call HGCD recursively, on the most significant @math{N/2} limbs. Apply the -resulting matrix @math{T_1} to the full numbers, reducing them to a size just -above @math{3N/2}. - -@item -Perform a small number of division or subtraction steps to reduce the numbers -to size below @math{3N/2}. This is essential mainly for the unlikely case of -large quotients. - -@item -Call HGCD recursively, on the most significant @math{N/2} limbs of the reduced -numbers. Apply the resulting matrix @math{T_2} to the full numbers, reducing -them to a size just above @math{N/2}. - -@item -Compute @math{T = T_1 T_2}. - -@item -Perform a small number of division and subtraction steps to satisfy the -requirements, and return. -@end itemize - -GCD is then implemented as a loop around HGCD, similarly to Lehmer's -algorithm. Where Lehmer repeatedly chops off the top two limbs, calls -@code{mpn_hgcd2}, and applies the resulting matrix to the full numbers, the -sub-quadratic GCD chops off the most significant third of the limbs (the -proportion is a tuning parameter, and @math{1/3} seems to be more efficient -than, e.g, @math{1/2}), calls @code{mpn_hgcd}, and applies the resulting -matrix. Once the input numbers are reduced to size below -@code{GCD_DC_THRESHOLD}, Lehmer's algorithm is used for the rest of the work. - -The asymptotic running time of both HGCD and GCD is @m{O(M(N)\log N),O(M(N)*log(N))}, -where @math{M(N)} is the time for multiplying two @math{N}-limb numbers. - -@comment node-name, next, previous, up - -@node Extended GCD, Jacobi Symbol, Subquadratic GCD, Greatest Common Divisor Algorithms -@subsection Extended GCD - -The extended GCD function, or GCDEXT, calculates @math{@gcd{}(a,b)} and also -cofactors @math{x} and @math{y} satisfying @m{ax+by=\gcd(a@C{}b), -a*x+b*y=gcd(a@C{}b)}. All the algorithms used for plain GCD are extended to -handle this case. The binary algorithm is used only for single-limb GCDEXT. -Lehmer's algorithm is used for sizes up to @code{GCDEXT_DC_THRESHOLD}. Above -this threshold, GCDEXT is implemented as a loop around HGCD, but with more -book-keeping to keep track of the cofactors. This gives the same asymptotic -running time as for GCD and HGCD, @m{O(M(N)\log N),O(M(N)*log(N))} - -One difference to plain GCD is that while the inputs @math{a} and @math{b} are -reduced as the algorithm proceeds, the cofactors @math{x} and @math{y} grow in -size. This makes the tuning of the chopping-point more difficult. The current -code chops off the most significant half of the inputs for the call to HGCD in -the first iteration, and the most significant two thirds for the remaining -calls. This strategy could surely be improved. Also the stop condition for the -loop, where Lehmer's algorithm is invoked once the inputs are reduced below -@code{GCDEXT_DC_THRESHOLD}, could maybe be improved by taking into account the -current size of the cofactors. - -@node Jacobi Symbol, , Extended GCD, Greatest Common Divisor Algorithms -@subsection Jacobi Symbol -@cindex Jacobi symbol algorithm - -[This section is obsolete. The current Jacobi code actually uses a very -efficient algorithm.] - -@code{mpz_jacobi} and @code{mpz_kronecker} are currently implemented with a -simple binary algorithm similar to that described for the GCDs (@pxref{Binary -GCD}). They're not very fast when both inputs are large. Lehmer's multi-step -improvement or a binary based multi-step algorithm is likely to be better. - -When one operand fits a single limb, and that includes @code{mpz_kronecker_ui} -and friends, an initial reduction is done with either @code{mpn_mod_1} or -@code{mpn_modexact_1_odd}, followed by the binary algorithm on a single limb. -The binary algorithm is well suited to a single limb, and the whole -calculation in this case is quite efficient. - -In all the routines sign changes for the result are accumulated using some bit -twiddling, avoiding table lookups or conditional jumps. - - -@need 1000 -@node Powering Algorithms, Root Extraction Algorithms, Greatest Common Divisor Algorithms, Algorithms -@section Powering Algorithms -@cindex Powering algorithms - -@menu -* Normal Powering Algorithm:: -* Modular Powering Algorithm:: -@end menu - - -@node Normal Powering Algorithm, Modular Powering Algorithm, Powering Algorithms, Powering Algorithms -@subsection Normal Powering - -Normal @code{mpz} or @code{mpf} powering uses a simple binary algorithm, -successively squaring and then multiplying by the base when a 1 bit is seen in -the exponent, as per Knuth section 4.6.3. The ``left to right'' -variant described there is used rather than algorithm A, since it's just as -easy and can be done with somewhat less temporary memory. - - -@node Modular Powering Algorithm, , Normal Powering Algorithm, Powering Algorithms -@subsection Modular Powering - -Modular powering is implemented using a @math{2^k}-ary sliding window -algorithm, as per ``Handbook of Applied Cryptography'' algorithm 14.85 -(@pxref{References}). @math{k} is chosen according to the size of the -exponent. Larger exponents use larger values of @math{k}, the choice being -made to minimize the average number of multiplications that must supplement -the squaring. - -The modular multiplies and squarings use either a simple division or the REDC -method by Montgomery (@pxref{References}). REDC is a little faster, -essentially saving N single limb divisions in a fashion similar to an exact -remainder (@pxref{Exact Remainder}). - - -@node Root Extraction Algorithms, Radix Conversion Algorithms, Powering Algorithms, Algorithms -@section Root Extraction Algorithms -@cindex Root extraction algorithms - -@menu -* Square Root Algorithm:: -* Nth Root Algorithm:: -* Perfect Square Algorithm:: -* Perfect Power Algorithm:: -@end menu - - -@node Square Root Algorithm, Nth Root Algorithm, Root Extraction Algorithms, Root Extraction Algorithms -@subsection Square Root -@cindex Square root algorithm -@cindex Karatsuba square root algorithm - -Square roots are taken using the ``Karatsuba Square Root'' algorithm by Paul -Zimmermann (@pxref{References}). - -An input @math{n} is split into four parts of @math{k} bits each, so with -@math{b=2^k} we have @m{n = a_3b^3 + a_2b^2 + a_1b + a_0, n = a3*b^3 + a2*b^2 -+ a1*b + a0}. Part @ms{a,3} must be ``normalized'' so that either the high or -second highest bit is set. In GMP, @math{k} is kept on a limb boundary and -the input is left shifted (by an even number of bits) to normalize. - -The square root of the high two parts is taken, by recursive application of -the algorithm (bottoming out in a one-limb Newton's method), -@tex -$$ s',r' = \mathop{\rm sqrtrem} \> (a_3b + a_2) $$ -@end tex -@ifnottex - -@example -s1,r1 = sqrtrem (a3*b + a2) -@end example - -@end ifnottex -This is an approximation to the desired root and is extended by a division to -give @math{s},@math{r}, -@tex -$$\eqalign{ -q,u &= \mathop{\rm divrem} \> (r'b + a_1, 2s') \cr -s &= s'b + q \cr -r &= ub + a_0 - q^2 -}$$ -@end tex -@ifnottex - -@example -q,u = divrem (r1*b + a1, 2*s1) -s = s1*b + q -r = u*b + a0 - q^2 -@end example - -@end ifnottex -The normalization requirement on @ms{a,3} means at this point @math{s} is -either correct or 1 too big. @math{r} is negative in the latter case, so -@tex -$$\eqalign{ -\mathop{\rm if} \; r &< 0 \; \mathop{\rm then} \cr -r &\leftarrow r + 2s - 1 \cr -s &\leftarrow s - 1 -}$$ -@end tex -@ifnottex - -@example -if r < 0 then - r = r + 2*s - 1 - s = s - 1 -@end example - -@end ifnottex -The algorithm is expressed in a divide and conquer form, but as noted in the -paper it can also be viewed as a discrete variant of Newton's method, or as a -variation on the schoolboy method (no longer taught) for square roots two -digits at a time. - -If the remainder @math{r} is not required then usually only a few high limbs -of @math{r} and @math{u} need to be calculated to determine whether an -adjustment to @math{s} is required. This optimization is not currently -implemented. - -In the Karatsuba multiplication range this algorithm is @m{O({3\over2} -M(N/2)),O(1.5*M(N/2))}, where @math{M(n)} is the time to multiply two numbers -of @math{n} limbs. In the FFT multiplication range this grows to a bound of -@m{O(6 M(N/2)),O(6*M(N/2))}. In practice a factor of about 1.5 to 1.8 is -found in the Karatsuba and Toom-3 ranges, growing to 2 or 3 in the FFT range. - -The algorithm does all its calculations in integers and the resulting -@code{mpn_sqrtrem} is used for both @code{mpz_sqrt} and @code{mpf_sqrt}. -The extended precision given by @code{mpf_sqrt_ui} is obtained by -padding with zero limbs. - - -@node Nth Root Algorithm, Perfect Square Algorithm, Square Root Algorithm, Root Extraction Algorithms -@subsection Nth Root -@cindex Root extraction algorithm -@cindex Nth root algorithm - -Integer Nth roots are taken using Newton's method with the following -iteration, where @math{A} is the input and @math{n} is the root to be taken. -@tex -$$a_{i+1} = {1\over n} \left({A \over a_i^{n-1}} + (n-1)a_i \right)$$ -@end tex -@ifnottex - -@example - 1 A -a[i+1] = - * ( --------- + (n-1)*a[i] ) - n a[i]^(n-1) -@end example - -@end ifnottex -The initial approximation @m{a_1,a[1]} is generated bitwise by successively -powering a trial root with or without new 1 bits, aiming to be just above the -true root. The iteration converges quadratically when started from a good -approximation. When @math{n} is large more initial bits are needed to get -good convergence. The current implementation is not particularly well -optimized. - - -@node Perfect Square Algorithm, Perfect Power Algorithm, Nth Root Algorithm, Root Extraction Algorithms -@subsection Perfect Square -@cindex Perfect square algorithm - -A significant fraction of non-squares can be quickly identified by checking -whether the input is a quadratic residue modulo small integers. - -@code{mpz_perfect_square_p} first tests the input mod 256, which means just -examining the low byte. Only 44 different values occur for squares mod 256, -so 82.8% of inputs can be immediately identified as non-squares. - -On a 32-bit system similar tests are done mod 9, 5, 7, 13 and 17, for a total -99.25% of inputs identified as non-squares. On a 64-bit system 97 is tested -too, for a total 99.62%. - -These moduli are chosen because they're factors of @math{2^@W{24}-1} (or -@math{2^@W{48}-1} for 64-bits), and such a remainder can be quickly taken just -using additions (see @code{mpn_mod_34lsub1}). - -When nails are in use moduli are instead selected by the @file{gen-psqr.c} -program and applied with an @code{mpn_mod_1}. The same @math{2^@W{24}-1} or -@math{2^@W{48}-1} could be done with nails using some extra bit shifts, but -this is not currently implemented. - -In any case each modulus is applied to the @code{mpn_mod_34lsub1} or -@code{mpn_mod_1} remainder and a table lookup identifies non-squares. By -using a ``modexact'' style calculation, and suitably permuted tables, just one -multiply each is required, see the code for details. Moduli are also combined -to save operations, so long as the lookup tables don't become too big. -@file{gen-psqr.c} does all the pre-calculations. - -A square root must still be taken for any value that passes these tests, to -verify it's really a square and not one of the small fraction of non-squares -that get through (i.e.@: a pseudo-square to all the tested bases). - -Clearly more residue tests could be done, @code{mpz_perfect_square_p} only -uses a compact and efficient set. Big inputs would probably benefit from more -residue testing, small inputs might be better off with less. The assumed -distribution of squares versus non-squares in the input would affect such -considerations. - - -@node Perfect Power Algorithm, , Perfect Square Algorithm, Root Extraction Algorithms -@subsection Perfect Power -@cindex Perfect power algorithm - -Detecting perfect powers is required by some factorization algorithms. -Currently @code{mpz_perfect_power_p} is implemented using repeated Nth root -extractions, though naturally only prime roots need to be considered. -(@xref{Nth Root Algorithm}.) - -If a prime divisor @math{p} with multiplicity @math{e} can be found, then only -roots which are divisors of @math{e} need to be considered, much reducing the -work necessary. To this end divisibility by a set of small primes is checked. - - -@node Radix Conversion Algorithms, Other Algorithms, Root Extraction Algorithms, Algorithms -@section Radix Conversion -@cindex Radix conversion algorithms - -Radix conversions are less important than other algorithms. A program -dominated by conversions should probably use a different data representation. - -@menu -* Binary to Radix:: -* Radix to Binary:: -@end menu - - -@node Binary to Radix, Radix to Binary, Radix Conversion Algorithms, Radix Conversion Algorithms -@subsection Binary to Radix - -Conversions from binary to a power-of-2 radix use a simple and fast -@math{O(N)} bit extraction algorithm. - -Conversions from binary to other radices use one of two algorithms. Sizes -below @code{GET_STR_PRECOMPUTE_THRESHOLD} use a basic @math{O(N^2)} method. -Repeated divisions by @math{b^n} are made, where @math{b} is the radix and -@math{n} is the biggest power that fits in a limb. But instead of simply -using the remainder @math{r} from such divisions, an extra divide step is done -to give a fractional limb representing @math{r/b^n}. The digits of @math{r} -can then be extracted using multiplications by @math{b} rather than divisions. -Special case code is provided for decimal, allowing multiplications by 10 to -optimize to shifts and adds. - -Above @code{GET_STR_PRECOMPUTE_THRESHOLD} a sub-quadratic algorithm is used. -For an input @math{t}, powers @m{b^{n2^i},b^(n*2^i)} of the radix are -calculated, until a power between @math{t} and @m{\sqrt{t},sqrt(t)} is -reached. @math{t} is then divided by that largest power, giving a quotient -which is the digits above that power, and a remainder which is those below. -These two parts are in turn divided by the second highest power, and so on -recursively. When a piece has been divided down to less than -@code{GET_STR_DC_THRESHOLD} limbs, the basecase algorithm described above is -used. - -The advantage of this algorithm is that big divisions can make use of the -sub-quadratic divide and conquer division (@pxref{Divide and Conquer -Division}), and big divisions tend to have less overheads than lots of -separate single limb divisions anyway. But in any case the cost of -calculating the powers @m{b^{n2^i},b^(n*2^i)} must first be overcome. - -@code{GET_STR_PRECOMPUTE_THRESHOLD} and @code{GET_STR_DC_THRESHOLD} represent -the same basic thing, the point where it becomes worth doing a big division to -cut the input in half. @code{GET_STR_PRECOMPUTE_THRESHOLD} includes the cost -of calculating the radix power required, whereas @code{GET_STR_DC_THRESHOLD} -assumes that's already available, which is the case when recursing. - -Since the base case produces digits from least to most significant but they -want to be stored from most to least, it's necessary to calculate in advance -how many digits there will be, or at least be sure not to underestimate that. -For GMP the number of input bits is multiplied by @code{chars_per_bit_exactly} -from @code{mp_bases}, rounding up. The result is either correct or one too -big. - -Examining some of the high bits of the input could increase the chance of -getting the exact number of digits, but an exact result every time would not -be practical, since in general the difference between numbers 100@dots{} and -99@dots{} is only in the last few bits and the work to identify 99@dots{} -might well be almost as much as a full conversion. - -The @math{r/b^n} scheme described above for using multiplications to bring out -digits might be useful for more than a single limb. Some brief experiments -with it on the base case when recursing didn't give a noticeable improvement, -but perhaps that was only due to the implementation. Something similar would -work for the sub-quadratic divisions too, though there would be the cost of -calculating a bigger radix power. - -Another possible improvement for the sub-quadratic part would be to arrange -for radix powers that balanced the sizes of quotient and remainder produced, -i.e.@: the highest power would be an @m{b^{nk},b^(n*k)} approximately equal to -@m{\sqrt{t},sqrt(t)}, not restricted to a @math{2^i} factor. That ought to -smooth out a graph of times against sizes, but may or may not be a net -speedup. - - -@node Radix to Binary, , Binary to Radix, Radix Conversion Algorithms -@subsection Radix to Binary - -@strong{This section needs to be rewritten, it currently describes the -algorithms used before GMP 4.3.} - -Conversions from a power-of-2 radix into binary use a simple and fast -@math{O(N)} bitwise concatenation algorithm. - -Conversions from other radices use one of two algorithms. Sizes below -@code{SET_STR_PRECOMPUTE_THRESHOLD} use a basic @math{O(N^2)} method. Groups -of @math{n} digits are converted to limbs, where @math{n} is the biggest -power of the base @math{b} which will fit in a limb, then those groups are -accumulated into the result by multiplying by @math{b^n} and adding. This -saves multi-precision operations, as per Knuth section 4.4 part E -(@pxref{References}). Some special case code is provided for decimal, giving -the compiler a chance to optimize multiplications by 10. - -Above @code{SET_STR_PRECOMPUTE_THRESHOLD} a sub-quadratic algorithm is used. -First groups of @math{n} digits are converted into limbs. Then adjacent -limbs are combined into limb pairs with @m{xb^n+y,x*b^n+y}, where @math{x} -and @math{y} are the limbs. Adjacent limb pairs are combined into quads -similarly with @m{xb^{2n}+y,x*b^(2n)+y}. This continues until a single block -remains, that being the result. - -The advantage of this method is that the multiplications for each @math{x} are -big blocks, allowing Karatsuba and higher algorithms to be used. But the cost -of calculating the powers @m{b^{n2^i},b^(n*2^i)} must be overcome. -@code{SET_STR_PRECOMPUTE_THRESHOLD} usually ends up quite big, around 5000 digits, and on -some processors much bigger still. - -@code{SET_STR_PRECOMPUTE_THRESHOLD} is based on the input digits (and tuned -for decimal), though it might be better based on a limb count, so as to be -independent of the base. But that sort of count isn't used by the base case -and so would need some sort of initial calculation or estimate. - -The main reason @code{SET_STR_PRECOMPUTE_THRESHOLD} is so much bigger than the -corresponding @code{GET_STR_PRECOMPUTE_THRESHOLD} is that @code{mpn_mul_1} is -much faster than @code{mpn_divrem_1} (often by a factor of 5, or more). - - -@need 1000 -@node Other Algorithms, Assembly Coding, Radix Conversion Algorithms, Algorithms -@section Other Algorithms - -@menu -* Prime Testing Algorithm:: -* Factorial Algorithm:: -* Binomial Coefficients Algorithm:: -* Fibonacci Numbers Algorithm:: -* Lucas Numbers Algorithm:: -* Random Number Algorithms:: -@end menu - - -@node Prime Testing Algorithm, Factorial Algorithm, Other Algorithms, Other Algorithms -@subsection Prime Testing -@cindex Prime testing algorithms - -The primality testing in @code{mpz_probab_prime_p} (@pxref{Number Theoretic -Functions}) first does some trial division by small factors and then uses the -Miller-Rabin probabilistic primality testing algorithm, as described in Knuth -section 4.5.4 algorithm P (@pxref{References}). - -For an odd input @math{n}, and with @math{n = q@GMPmultiply{}2^k+1} where -@math{q} is odd, this algorithm selects a random base @math{x} and tests -whether @math{x^q @bmod{} n} is 1 or @math{-1}, or an @m{x^{q2^j} \bmod n, -x^(q*2^j) mod n} is @math{1}, for @math{1@le{}j@le{}k}. If so then @math{n} -is probably prime, if not then @math{n} is definitely composite. - -Any prime @math{n} will pass the test, but some composites do too. Such -composites are known as strong pseudoprimes to base @math{x}. No @math{n} is -a strong pseudoprime to more than @math{1/4} of all bases (see Knuth exercise -22), hence with @math{x} chosen at random there's no more than a @math{1/4} -chance a ``probable prime'' will in fact be composite. - -In fact strong pseudoprimes are quite rare, making the test much more -powerful than this analysis would suggest, but @math{1/4} is all that's proven -for an arbitrary @math{n}. - - -@node Factorial Algorithm, Binomial Coefficients Algorithm, Prime Testing Algorithm, Other Algorithms -@subsection Factorial -@cindex Factorial algorithm - -Factorials are calculated by a combination of two algorithms. An idea is -shared among them: to compute the odd part of the factorial; a final step -takes account of the power of @math{2} term, by shifting. - -For small @math{n}, the odd factor of @math{n!} is computed with the simple -observation that it is equal to the product of all positive odd numbers -smaller than @math{n} times the odd factor of @m{\lfloor n/2\rfloor!, [n/2]!}, -where @m{\lfloor x\rfloor, [x]} is the integer part of @math{x}, and so on -recursively. The procedure can be best illustrated with an example, - -@quotation -@math{23! = (23.21.19.17.15.13.11.9.7.5.3)(11.9.7.5.3)(5.3)2^{19}} -@end quotation - -Current code collects all the factors in a single list, with a loop and no -recursion, and compute the product, with no special care for repeated chunks. - -When @math{n} is larger, computation pass trough prime sieving. An helper -function is used, as suggested by Peter Luschny: -@tex -$$\mathop{\rm msf}(n) = {n!\over\lfloor n/2\rfloor!^2\cdot2^k} = \prod_{p=3}^{n} -p^{\mathop{\rm L}(p,n)} $$ -@end tex -@ifnottex - -@example - n - ----- - n! | | L(p,n) -msf(n) = -------------- = | | p - [n/2]!^2.2^k p=3 -@end example -@end ifnottex - -Where @math{p} ranges on odd prime numbers. The exponent @math{k} is chosen to -obtain an odd integer number: @math{k} is the number of 1 bits in the binary -representation of @m{\lfloor n/2\rfloor, [n/2]}. The function L@math{(p,n)} -can be defined as zero when @math{p} is composite, and, for any prime -@math{p}, it is computed with: -@tex -$$\mathop{\rm L}(p,n) = \sum_{i>0}\left\lfloor{n\over p^i}\right\rfloor\bmod2 -\leq\log_p(n)$$ -@end tex -@ifnottex - -@example - --- - \ n -L(p,n) = / [---] mod 2 <= log (n) . - --- p^i p - i>0 -@end example -@end ifnottex - -With this helper function, we are able to compute the odd part of @math{n!} -using the recursion implied by @m{n!=\lfloor n/2\rfloor!^2\cdot\mathop{\rm -msf}(n)\cdot2^k , n!=[n/2]!^2*msf(n)*2^k}. The recursion stops using the -small-@math{n} algorithm on some @m{\lfloor n/2^i\rfloor, [n/2^i]}. - -Both the above algorithms use binary splitting to compute the product of many -small factors. At first as many products as possible are accumulated in a -single register, generating a list of factors that fit in a machine word. This -list is then split into halves, and the product is computed recursively. - -Such splitting is more efficient than repeated N@cross{}1 multiplies since it -forms big multiplies, allowing Karatsuba and higher algorithms to be used. -And even below the Karatsuba threshold a big block of work can be more -efficient for the basecase algorithm. - - -@node Binomial Coefficients Algorithm, Fibonacci Numbers Algorithm, Factorial Algorithm, Other Algorithms -@subsection Binomial Coefficients -@cindex Binomial coefficient algorithm - -Binomial coefficients @m{\left({n}\atop{k}\right), C(n@C{}k)} are calculated -by first arranging @math{k @le{} n/2} using @m{\left({n}\atop{k}\right) = -\left({n}\atop{n-k}\right), C(n@C{}k) = C(n@C{}n-k)} if necessary, and then -evaluating the following product simply from @math{i=2} to @math{i=k}. -@tex -$$ \left({n}\atop{k}\right) = (n-k+1) \prod_{i=2}^{k} {{n-k+i} \over i} $$ -@end tex -@ifnottex - -@example - k (n-k+i) -C(n,k) = (n-k+1) * prod ------- - i=2 i -@end example - -@end ifnottex -It's easy to show that each denominator @math{i} will divide the product so -far, so the exact division algorithm is used (@pxref{Exact Division}). - -The numerators @math{n-k+i} and denominators @math{i} are first accumulated -into as many fit a limb, to save multi-precision operations, though for -@code{mpz_bin_ui} this applies only to the divisors, since @math{n} is an -@code{mpz_t} and @math{n-k+i} in general won't fit in a limb at all. - - -@node Fibonacci Numbers Algorithm, Lucas Numbers Algorithm, Binomial Coefficients Algorithm, Other Algorithms -@subsection Fibonacci Numbers -@cindex Fibonacci number algorithm - -The Fibonacci functions @code{mpz_fib_ui} and @code{mpz_fib2_ui} are designed -for calculating isolated @m{F_n,F[n]} or @m{F_n,F[n]},@m{F_{n-1},F[n-1]} -values efficiently. - -For small @math{n}, a table of single limb values in @code{__gmp_fib_table} is -used. On a 32-bit limb this goes up to @m{F_{47},F[47]}, or on a 64-bit limb -up to @m{F_{93},F[93]}. For convenience the table starts at @m{F_{-1},F[-1]}. - -Beyond the table, values are generated with a binary powering algorithm, -calculating a pair @m{F_n,F[n]} and @m{F_{n-1},F[n-1]} working from high to -low across the bits of @math{n}. The formulas used are -@tex -$$\eqalign{ - F_{2k+1} &= 4F_k^2 - F_{k-1}^2 + 2(-1)^k \cr - F_{2k-1} &= F_k^2 + F_{k-1}^2 \cr - F_{2k} &= F_{2k+1} - F_{2k-1} -}$$ -@end tex -@ifnottex - -@example -F[2k+1] = 4*F[k]^2 - F[k-1]^2 + 2*(-1)^k -F[2k-1] = F[k]^2 + F[k-1]^2 - -F[2k] = F[2k+1] - F[2k-1] -@end example - -@end ifnottex -At each step, @math{k} is the high @math{b} bits of @math{n}. If the next bit -of @math{n} is 0 then @m{F_{2k},F[2k]},@m{F_{2k-1},F[2k-1]} is used, or if -it's a 1 then @m{F_{2k+1},F[2k+1]},@m{F_{2k},F[2k]} is used, and the process -repeated until all bits of @math{n} are incorporated. Notice these formulas -require just two squares per bit of @math{n}. - -It'd be possible to handle the first few @math{n} above the single limb table -with simple additions, using the defining Fibonacci recurrence @m{F_{k+1} = -F_k + F_{k-1}, F[k+1]=F[k]+F[k-1]}, but this is not done since it usually -turns out to be faster for only about 10 or 20 values of @math{n}, and -including a block of code for just those doesn't seem worthwhile. If they -really mattered it'd be better to extend the data table. - -Using a table avoids lots of calculations on small numbers, and makes small -@math{n} go fast. A bigger table would make more small @math{n} go fast, it's -just a question of balancing size against desired speed. For GMP the code is -kept compact, with the emphasis primarily on a good powering algorithm. - -@code{mpz_fib2_ui} returns both @m{F_n,F[n]} and @m{F_{n-1},F[n-1]}, but -@code{mpz_fib_ui} is only interested in @m{F_n,F[n]}. In this case the last -step of the algorithm can become one multiply instead of two squares. One of -the following two formulas is used, according as @math{n} is odd or even. -@tex -$$\eqalign{ - F_{2k} &= F_k (F_k + 2F_{k-1}) \cr - F_{2k+1} &= (2F_k + F_{k-1}) (2F_k - F_{k-1}) + 2(-1)^k -}$$ -@end tex -@ifnottex - -@example -F[2k] = F[k]*(F[k]+2F[k-1]) - -F[2k+1] = (2F[k]+F[k-1])*(2F[k]-F[k-1]) + 2*(-1)^k -@end example - -@end ifnottex -@m{F_{2k+1},F[2k+1]} here is the same as above, just rearranged to be a -multiply. For interest, the @m{2(-1)^k, 2*(-1)^k} term both here and above -can be applied just to the low limb of the calculation, without a carry or -borrow into further limbs, which saves some code size. See comments with -@code{mpz_fib_ui} and the internal @code{mpn_fib2_ui} for how this is done. - - -@node Lucas Numbers Algorithm, Random Number Algorithms, Fibonacci Numbers Algorithm, Other Algorithms -@subsection Lucas Numbers -@cindex Lucas number algorithm - -@code{mpz_lucnum2_ui} derives a pair of Lucas numbers from a pair of Fibonacci -numbers with the following simple formulas. -@tex -$$\eqalign{ - L_k &= F_k + 2F_{k-1} \cr - L_{k-1} &= 2F_k - F_{k-1} -}$$ -@end tex -@ifnottex - -@example -L[k] = F[k] + 2*F[k-1] -L[k-1] = 2*F[k] - F[k-1] -@end example - -@end ifnottex -@code{mpz_lucnum_ui} is only interested in @m{L_n,L[n]}, and some work can be -saved. Trailing zero bits on @math{n} can be handled with a single square -each. -@tex -$$ L_{2k} = L_k^2 - 2(-1)^k $$ -@end tex -@ifnottex - -@example -L[2k] = L[k]^2 - 2*(-1)^k -@end example - -@end ifnottex -And the lowest 1 bit can be handled with one multiply of a pair of Fibonacci -numbers, similar to what @code{mpz_fib_ui} does. -@tex -$$ L_{2k+1} = 5F_{k-1} (2F_k + F_{k-1}) - 4(-1)^k $$ -@end tex -@ifnottex - -@example -L[2k+1] = 5*F[k-1]*(2*F[k]+F[k-1]) - 4*(-1)^k -@end example - -@end ifnottex - - -@node Random Number Algorithms, , Lucas Numbers Algorithm, Other Algorithms -@subsection Random Numbers -@cindex Random number algorithms - -For the @code{urandomb} functions, random numbers are generated simply by -concatenating bits produced by the generator. As long as the generator has -good randomness properties this will produce well-distributed @math{N} bit -numbers. - -For the @code{urandomm} functions, random numbers in a range @math{0@le{}R<N} -are generated by taking values @math{R} of @m{\lceil \log_2 N \rceil, -ceil(log2(N))} bits each until one satisfies @math{R<N}. This will normally -require only one or two attempts, but the attempts are limited in case the -generator is somehow degenerate and produces only 1 bits or similar. - -@cindex Mersenne twister algorithm -The Mersenne Twister generator is by Matsumoto and Nishimura -(@pxref{References}). It has a non-repeating period of @math{2^@W{19937}-1}, -which is a Mersenne prime, hence the name of the generator. The state is 624 -words of 32-bits each, which is iterated with one XOR and shift for each -32-bit word generated, making the algorithm very fast. Randomness properties -are also very good and this is the default algorithm used by GMP. - -@cindex Linear congruential algorithm -Linear congruential generators are described in many text books, for instance -Knuth volume 2 (@pxref{References}). With a modulus @math{M} and parameters -@math{A} and @math{C}, an integer state @math{S} is iterated by the formula -@math{S @leftarrow{} A@GMPmultiply{}S+C @bmod{} M}. At each step the new -state is a linear function of the previous, mod @math{M}, hence the name of -the generator. - -In GMP only moduli of the form @math{2^N} are supported, and the current -implementation is not as well optimized as it could be. Overheads are -significant when @math{N} is small, and when @math{N} is large clearly the -multiply at each step will become slow. This is not a big concern, since the -Mersenne Twister generator is better in every respect and is therefore -recommended for all normal applications. - -For both generators the current state can be deduced by observing enough -output and applying some linear algebra (over GF(2) in the case of the -Mersenne Twister). This generally means raw output is unsuitable for -cryptographic applications without further hashing or the like. - - -@node Assembly Coding, , Other Algorithms, Algorithms -@section Assembly Coding -@cindex Assembly coding - -The assembly subroutines in GMP are the most significant source of speed at -small to moderate sizes. At larger sizes algorithm selection becomes more -important, but of course speedups in low level routines will still speed up -everything proportionally. - -Carry handling and widening multiplies that are important for GMP can't be -easily expressed in C@. GCC @code{asm} blocks help a lot and are provided in -@file{longlong.h}, but hand coding low level routines invariably offers a -speedup over generic C by a factor of anything from 2 to 10. - -@menu -* Assembly Code Organisation:: -* Assembly Basics:: -* Assembly Carry Propagation:: -* Assembly Cache Handling:: -* Assembly Functional Units:: -* Assembly Floating Point:: -* Assembly SIMD Instructions:: -* Assembly Software Pipelining:: -* Assembly Loop Unrolling:: -* Assembly Writing Guide:: -@end menu - - -@node Assembly Code Organisation, Assembly Basics, Assembly Coding, Assembly Coding -@subsection Code Organisation -@cindex Assembly code organisation -@cindex Code organisation - -The various @file{mpn} subdirectories contain machine-dependent code, written -in C or assembly. The @file{mpn/generic} subdirectory contains default code, -used when there's no machine-specific version of a particular file. - -Each @file{mpn} subdirectory is for an ISA family. Generally 32-bit and -64-bit variants in a family cannot share code and have separate directories. -Within a family further subdirectories may exist for CPU variants. - -In each directory a @file{nails} subdirectory may exist, holding code with -nails support for that CPU variant. A @code{NAILS_SUPPORT} directive in each -file indicates the nails values the code handles. Nails code only exists -where it's faster, or promises to be faster, than plain code. There's no -effort put into nails if they're not going to enhance a given CPU. - - -@node Assembly Basics, Assembly Carry Propagation, Assembly Code Organisation, Assembly Coding -@subsection Assembly Basics - -@code{mpn_addmul_1} and @code{mpn_submul_1} are the most important routines -for overall GMP performance. All multiplications and divisions come down to -repeated calls to these. @code{mpn_add_n}, @code{mpn_sub_n}, -@code{mpn_lshift} and @code{mpn_rshift} are next most important. - -On some CPUs assembly versions of the internal functions -@code{mpn_mul_basecase} and @code{mpn_sqr_basecase} give significant speedups, -mainly through avoiding function call overheads. They can also potentially -make better use of a wide superscalar processor, as can bigger primitives like -@code{mpn_addmul_2} or @code{mpn_addmul_4}. - -The restrictions on overlaps between sources and destinations -(@pxref{Low-level Functions}) are designed to facilitate a variety of -implementations. For example, knowing @code{mpn_add_n} won't have partly -overlapping sources and destination means reading can be done far ahead of -writing on superscalar processors, and loops can be vectorized on a vector -processor, depending on the carry handling. - - -@node Assembly Carry Propagation, Assembly Cache Handling, Assembly Basics, Assembly Coding -@subsection Carry Propagation -@cindex Assembly carry propagation - -The problem that presents most challenges in GMP is propagating carries from -one limb to the next. In functions like @code{mpn_addmul_1} and -@code{mpn_add_n}, carries are the only dependencies between limb operations. - -On processors with carry flags, a straightforward CISC style @code{adc} is -generally best. AMD K6 @code{mpn_addmul_1} however is an example of an -unusual set of circumstances where a branch works out better. - -On RISC processors generally an add and compare for overflow is used. This -sort of thing can be seen in @file{mpn/generic/aors_n.c}. Some carry -propagation schemes require 4 instructions, meaning at least 4 cycles per -limb, but other schemes may use just 1 or 2. On wide superscalar processors -performance may be completely determined by the number of dependent -instructions between carry-in and carry-out for each limb. - -On vector processors good use can be made of the fact that a carry bit only -very rarely propagates more than one limb. When adding a single bit to a -limb, there's only a carry out if that limb was @code{0xFF@dots{}FF} which on -random data will be only 1 in @m{2\GMPraise{@code{mp\_bits\_per\_limb}}, -2^mp_bits_per_limb}. @file{mpn/cray/add_n.c} is an example of this, it adds -all limbs in parallel, adds one set of carry bits in parallel and then only -rarely needs to fall through to a loop propagating further carries. - -On the x86s, GCC (as of version 2.95.2) doesn't generate particularly good code -for the RISC style idioms that are necessary to handle carry bits in -C@. Often conditional jumps are generated where @code{adc} or @code{sbb} forms -would be better. And so unfortunately almost any loop involving carry bits -needs to be coded in assembly for best results. - - -@node Assembly Cache Handling, Assembly Functional Units, Assembly Carry Propagation, Assembly Coding -@subsection Cache Handling -@cindex Assembly cache handling - -GMP aims to perform well both on operands that fit entirely in L1 cache and -those which don't. - -Basic routines like @code{mpn_add_n} or @code{mpn_lshift} are often used on -large operands, so L2 and main memory performance is important for them. -@code{mpn_mul_1} and @code{mpn_addmul_1} are mostly used for multiply and -square basecases, so L1 performance matters most for them, unless assembly -versions of @code{mpn_mul_basecase} and @code{mpn_sqr_basecase} exist, in -which case the remaining uses are mostly for larger operands. - -For L2 or main memory operands, memory access times will almost certainly be -more than the calculation time. The aim therefore is to maximize memory -throughput, by starting a load of the next cache line while processing the -contents of the previous one. Clearly this is only possible if the chip has a -lock-up free cache or some sort of prefetch instruction. Most current chips -have both these features. - -Prefetching sources combines well with loop unrolling, since a prefetch can be -initiated once per unrolled loop (or more than once if the loop covers more -than one cache line). - -On CPUs without write-allocate caches, prefetching destinations will ensure -individual stores don't go further down the cache hierarchy, limiting -bandwidth. Of course for calculations which are slow anyway, like -@code{mpn_divrem_1}, write-throughs might be fine. - -The distance ahead to prefetch will be determined by memory latency versus -throughput. The aim of course is to have data arriving continuously, at peak -throughput. Some CPUs have limits on the number of fetches or prefetches in -progress. - -If a special prefetch instruction doesn't exist then a plain load can be used, -but in that case care must be taken not to attempt to read past the end of an -operand, since that might produce a segmentation violation. - -Some CPUs or systems have hardware that detects sequential memory accesses and -initiates suitable cache movements automatically, making life easy. - - -@node Assembly Functional Units, Assembly Floating Point, Assembly Cache Handling, Assembly Coding -@subsection Functional Units - -When choosing an approach for an assembly loop, consideration is given to -what operations can execute simultaneously and what throughput can thereby be -achieved. In some cases an algorithm can be tweaked to accommodate available -resources. - -Loop control will generally require a counter and pointer updates, costing as -much as 5 instructions, plus any delays a branch introduces. CPU addressing -modes might reduce pointer updates, perhaps by allowing just one updating -pointer and others expressed as offsets from it, or on CISC chips with all -addressing done with the loop counter as a scaled index. - -The final loop control cost can be amortised by processing several limbs in -each iteration (@pxref{Assembly Loop Unrolling}). This at least ensures loop -control isn't a big fraction the work done. - -Memory throughput is always a limit. If perhaps only one load or one store -can be done per cycle then 3 cycles/limb will the top speed for ``binary'' -operations like @code{mpn_add_n}, and any code achieving that is optimal. - -Integer resources can be freed up by having the loop counter in a float -register, or by pressing the float units into use for some multiplying, -perhaps doing every second limb on the float side (@pxref{Assembly Floating -Point}). - -Float resources can be freed up by doing carry propagation on the integer -side, or even by doing integer to float conversions in integers using bit -twiddling. - - -@node Assembly Floating Point, Assembly SIMD Instructions, Assembly Functional Units, Assembly Coding -@subsection Floating Point -@cindex Assembly floating Point - -Floating point arithmetic is used in GMP for multiplications on CPUs with poor -integer multipliers. It's mostly useful for @code{mpn_mul_1}, -@code{mpn_addmul_1} and @code{mpn_submul_1} on 64-bit machines, and -@code{mpn_mul_basecase} on both 32-bit and 64-bit machines. - -With IEEE 53-bit double precision floats, integer multiplications producing up -to 53 bits will give exact results. Breaking a 64@cross{}64 multiplication -into eight 16@cross{}@math{32@rightarrow{}48} bit pieces is convenient. With -some care though six 21@cross{}@math{32@rightarrow{}53} bit products can be -used, if one of the lower two 21-bit pieces also uses the sign bit. - -For the @code{mpn_mul_1} family of functions on a 64-bit machine, the -invariant single limb is split at the start, into 3 or 4 pieces. Inside the -loop, the bignum operand is split into 32-bit pieces. Fast conversion of -these unsigned 32-bit pieces to floating point is highly machine-dependent. -In some cases, reading the data into the integer unit, zero-extending to -64-bits, then transferring to the floating point unit back via memory is the -only option. - -Converting partial products back to 64-bit limbs is usually best done as a -signed conversion. Since all values are smaller than @m{2^{53},2^53}, signed -and unsigned are the same, but most processors lack unsigned conversions. - -@sp 2 - -Here is a diagram showing 16@cross{}32 bit products for an @code{mpn_mul_1} or -@code{mpn_addmul_1} with a 64-bit limb. The single limb operand V is split -into four 16-bit parts. The multi-limb operand U is split in the loop into -two 32-bit parts. - -@tex -\global\newdimen\GMPbits \global\GMPbits=0.18em -\def\GMPbox#1#2#3{% - \hbox{% - \hbox to 128\GMPbits{\hfil - \vbox{% - \hrule - \hbox to 48\GMPbits {\GMPvrule \hfil$#2$\hfil \vrule}% - \hrule}% - \hskip #1\GMPbits}% - \raise \GMPboxdepth \hbox{\hskip 2em #3}}} -% -\GMPdisplay{% - \vbox{% - \hbox{% - \hbox to 128\GMPbits {\hfil - \vbox{% - \hrule - \hbox to 64\GMPbits{% - \GMPvrule \hfil$v48$\hfil - \vrule \hfil$v32$\hfil - \vrule \hfil$v16$\hfil - \vrule \hfil$v00$\hfil - \vrule} - \hrule}}% - \raise \GMPboxdepth \hbox{\hskip 2em V Operand}} - \vskip 0.5ex - \hbox{% - \hbox to 128\GMPbits {\hfil - \raise \GMPboxdepth \hbox{$\times$\hskip 1.5em}% - \vbox{% - \hrule - \hbox to 64\GMPbits {% - \GMPvrule \hfil$u32$\hfil - \vrule \hfil$u00$\hfil - \vrule}% - \hrule}}% - \raise \GMPboxdepth \hbox{\hskip 2em U Operand (one limb)}}% - \vskip 0.5ex - \hbox{\vbox to 2ex{\hrule width 128\GMPbits}}% - \GMPbox{0}{u00 \times v00}{$p00$\hskip 1.5em 48-bit products}% - \vskip 0.5ex - \GMPbox{16}{u00 \times v16}{$p16$} - \vskip 0.5ex - \GMPbox{32}{u00 \times v32}{$p32$} - \vskip 0.5ex - \GMPbox{48}{u00 \times v48}{$p48$} - \vskip 0.5ex - \GMPbox{32}{u32 \times v00}{$r32$} - \vskip 0.5ex - \GMPbox{48}{u32 \times v16}{$r48$} - \vskip 0.5ex - \GMPbox{64}{u32 \times v32}{$r64$} - \vskip 0.5ex - \GMPbox{80}{u32 \times v48}{$r80$} -}} -@end tex -@ifnottex -@example -@group - +---+---+---+---+ - |v48|v32|v16|v00| V operand - +---+---+---+---+ - - +-------+---+---+ - x | u32 | u00 | U operand (one limb) - +---------------+ - ---------------------------------- - - +-----------+ - | u00 x v00 | p00 48-bit products - +-----------+ - +-----------+ - | u00 x v16 | p16 - +-----------+ - +-----------+ - | u00 x v32 | p32 - +-----------+ - +-----------+ - | u00 x v48 | p48 - +-----------+ - +-----------+ - | u32 x v00 | r32 - +-----------+ - +-----------+ - | u32 x v16 | r48 - +-----------+ - +-----------+ - | u32 x v32 | r64 - +-----------+ -+-----------+ -| u32 x v48 | r80 -+-----------+ -@end group -@end example -@end ifnottex - -@math{p32} and @math{r32} can be summed using floating-point addition, and -likewise @math{p48} and @math{r48}. @math{p00} and @math{p16} can be summed -with @math{r64} and @math{r80} from the previous iteration. - -For each loop then, four 49-bit quantities are transferred to the integer unit, -aligned as follows, - -@tex -% GMPbox here should be 49 bits wide, but use 51 to better show p16+r80' -% crossing into the upper 64 bits. -\def\GMPbox#1#2#3{% - \hbox{% - \hbox to 128\GMPbits {% - \hfil - \vbox{% - \hrule - \hbox to 51\GMPbits {\GMPvrule \hfil$#2$\hfil \vrule}% - \hrule}% - \hskip #1\GMPbits}% - \raise \GMPboxdepth \hbox{\hskip 1.5em $#3$\hfil}% -}} -\newbox\b \setbox\b\hbox{64 bits}% -\newdimen\bw \bw=\wd\b \advance\bw by 2em -\newdimen\x \x=128\GMPbits -\advance\x by -2\bw -\divide\x by4 -\GMPdisplay{% - \vbox{% - \hbox to 128\GMPbits {% - \GMPvrule - \raise 0.5ex \vbox{\hrule \hbox to \x {}}% - \hfil 64 bits\hfil - \raise 0.5ex \vbox{\hrule \hbox to \x {}}% - \vrule - \raise 0.5ex \vbox{\hrule \hbox to \x {}}% - \hfil 64 bits\hfil - \raise 0.5ex \vbox{\hrule \hbox to \x {}}% - \vrule}% - \vskip 0.7ex - \GMPbox{0}{p00+r64'}{i00} - \vskip 0.5ex - \GMPbox{16}{p16+r80'}{i16} - \vskip 0.5ex - \GMPbox{32}{p32+r32}{i32} - \vskip 0.5ex - \GMPbox{48}{p48+r48}{i48} -}} -@end tex -@ifnottex -@example -@group -|-----64bits----|-----64bits----| - +------------+ - | p00 + r64' | i00 - +------------+ - +------------+ - | p16 + r80' | i16 - +------------+ - +------------+ - | p32 + r32 | i32 - +------------+ - +------------+ - | p48 + r48 | i48 - +------------+ -@end group -@end example -@end ifnottex - -The challenge then is to sum these efficiently and add in a carry limb, -generating a low 64-bit result limb and a high 33-bit carry limb (@math{i48} -extends 33 bits into the high half). - - -@node Assembly SIMD Instructions, Assembly Software Pipelining, Assembly Floating Point, Assembly Coding -@subsection SIMD Instructions -@cindex Assembly SIMD - -The single-instruction multiple-data support in current microprocessors is -aimed at signal processing algorithms where each data point can be treated -more or less independently. There's generally not much support for -propagating the sort of carries that arise in GMP. - -SIMD multiplications of say four 16@cross{}16 bit multiplies only do as much -work as one 32@cross{}32 from GMP's point of view, and need some shifts and -adds besides. But of course if say the SIMD form is fully pipelined and uses -less instruction decoding then it may still be worthwhile. - -On the x86 chips, MMX has so far found a use in @code{mpn_rshift} and -@code{mpn_lshift}, and is used in a special case for 16-bit multipliers in the -P55 @code{mpn_mul_1}. SSE2 is used for Pentium 4 @code{mpn_mul_1}, -@code{mpn_addmul_1}, and @code{mpn_submul_1}. - - -@node Assembly Software Pipelining, Assembly Loop Unrolling, Assembly SIMD Instructions, Assembly Coding -@subsection Software Pipelining -@cindex Assembly software pipelining - -Software pipelining consists of scheduling instructions around the branch -point in a loop. For example a loop might issue a load not for use in the -present iteration but the next, thereby allowing extra cycles for the data to -arrive from memory. - -Naturally this is wanted only when doing things like loads or multiplies that -take several cycles to complete, and only where a CPU has multiple functional -units so that other work can be done in the meantime. - -A pipeline with several stages will have a data value in progress at each -stage and each loop iteration moves them along one stage. This is like -juggling. - -If the latency of some instruction is greater than the loop time then it will -be necessary to unroll, so one register has a result ready to use while -another (or multiple others) are still in progress. (@pxref{Assembly Loop -Unrolling}). - - -@node Assembly Loop Unrolling, Assembly Writing Guide, Assembly Software Pipelining, Assembly Coding -@subsection Loop Unrolling -@cindex Assembly loop unrolling - -Loop unrolling consists of replicating code so that several limbs are -processed in each loop. At a minimum this reduces loop overheads by a -corresponding factor, but it can also allow better register usage, for example -alternately using one register combination and then another. Judicious use of -@command{m4} macros can help avoid lots of duplication in the source code. - -Any amount of unrolling can be handled with a loop counter that's decremented -by @math{N} each time, stopping when the remaining count is less than the -further @math{N} the loop will process. Or by subtracting @math{N} at the -start, the termination condition becomes when the counter @math{C} is less -than 0 (and the count of remaining limbs is @math{C+N}). - -Alternately for a power of 2 unroll the loop count and remainder can be -established with a shift and mask. This is convenient if also making a -computed jump into the middle of a large loop. - -The limbs not a multiple of the unrolling can be handled in various ways, for -example - -@itemize @bullet -@item -A simple loop at the end (or the start) to process the excess. Care will be -wanted that it isn't too much slower than the unrolled part. - -@item -A set of binary tests, for example after an 8-limb unrolling, test for 4 more -limbs to process, then a further 2 more or not, and finally 1 more or not. -This will probably take more code space than a simple loop. - -@item -A @code{switch} statement, providing separate code for each possible excess, -for example an 8-limb unrolling would have separate code for 0 remaining, 1 -remaining, etc, up to 7 remaining. This might take a lot of code, but may be -the best way to optimize all cases in combination with a deep pipelined loop. - -@item -A computed jump into the middle of the loop, thus making the first iteration -handle the excess. This should make times smoothly increase with size, which -is attractive, but setups for the jump and adjustments for pointers can be -tricky and could become quite difficult in combination with deep pipelining. -@end itemize - - -@node Assembly Writing Guide, , Assembly Loop Unrolling, Assembly Coding -@subsection Writing Guide -@cindex Assembly writing guide - -This is a guide to writing software pipelined loops for processing limb -vectors in assembly. - -First determine the algorithm and which instructions are needed. Code it -without unrolling or scheduling, to make sure it works. On a 3-operand CPU -try to write each new value to a new register, this will greatly simplify later -steps. - -Then note for each instruction the functional unit and/or issue port -requirements. If an instruction can use either of two units, like U0 or U1 -then make a category ``U0/U1''. Count the total using each unit (or combined -unit), and count all instructions. - -Figure out from those counts the best possible loop time. The goal will be to -find a perfect schedule where instruction latencies are completely hidden. -The total instruction count might be the limiting factor, or perhaps a -particular functional unit. It might be possible to tweak the instructions to -help the limiting factor. - -Suppose the loop time is @math{N}, then make @math{N} issue buckets, with the -final loop branch at the end of the last. Now fill the buckets with dummy -instructions using the functional units desired. Run this to make sure the -intended speed is reached. - -Now replace the dummy instructions with the real instructions from the slow -but correct loop you started with. The first will typically be a load -instruction. Then the instruction using that value is placed in a bucket an -appropriate distance down. Run the loop again, to check it still runs at -target speed. - -Keep placing instructions, frequently measuring the loop. After a few you -will need to wrap around from the last bucket back to the top of the loop. If -you used the new-register for new-value strategy above then there will be no -register conflicts. If not then take care not to clobber something already in -use. Changing registers at this time is very error prone. - -The loop will overlap two or more of the original loop iterations, and the -computation of one vector element result will be started in one iteration of -the new loop, and completed one or several iterations later. - -The final step is to create feed-in and wind-down code for the loop. A good -way to do this is to make a copy (or copies) of the loop at the start and -delete those instructions which don't have valid antecedents, and at the end -replicate and delete those whose results are unwanted (including any further -loads). - -The loop will have a minimum number of limbs loaded and processed, so the -feed-in code must test if the request size is smaller and skip either to a -suitable part of the wind-down or to special code for small sizes. - - -@node Internals, Contributors, Algorithms, Top -@chapter Internals -@cindex Internals - -@strong{This chapter is provided only for informational purposes and the -various internals described here may change in future GMP releases. -Applications expecting to be compatible with future releases should use only -the documented interfaces described in previous chapters.} - -@menu -* Integer Internals:: -* Rational Internals:: -* Float Internals:: -* Raw Output Internals:: -* C++ Interface Internals:: -@end menu - -@node Integer Internals, Rational Internals, Internals, Internals -@section Integer Internals -@cindex Integer internals - -@code{mpz_t} variables represent integers using sign and magnitude, in space -dynamically allocated and reallocated. The fields are as follows. - -@table @asis -@item @code{_mp_size} -The number of limbs, or the negative of that when representing a negative -integer. Zero is represented by @code{_mp_size} set to zero, in which case -the @code{_mp_d} data is unused. - -@item @code{_mp_d} -A pointer to an array of limbs which is the magnitude. These are stored -``little endian'' as per the @code{mpn} functions, so @code{_mp_d[0]} is the -least significant limb and @code{_mp_d[ABS(_mp_size)-1]} is the most -significant. Whenever @code{_mp_size} is non-zero, the most significant limb -is non-zero. - -Currently there's always at least one limb allocated, so for instance -@code{mpz_set_ui} never needs to reallocate, and @code{mpz_get_ui} can fetch -@code{_mp_d[0]} unconditionally (though its value is then only wanted if -@code{_mp_size} is non-zero). - -@item @code{_mp_alloc} -@code{_mp_alloc} is the number of limbs currently allocated at @code{_mp_d}, -and naturally @code{_mp_alloc >= ABS(_mp_size)}. When an @code{mpz} routine -is about to (or might be about to) increase @code{_mp_size}, it checks -@code{_mp_alloc} to see whether there's enough space, and reallocates if not. -@code{MPZ_REALLOC} is generally used for this. -@end table - -The various bitwise logical functions like @code{mpz_and} behave as if -negative values were twos complement. But sign and magnitude is always used -internally, and necessary adjustments are made during the calculations. -Sometimes this isn't pretty, but sign and magnitude are best for other -routines. - -Some internal temporary variables are setup with @code{MPZ_TMP_INIT} and these -have @code{_mp_d} space obtained from @code{TMP_ALLOC} rather than the memory -allocation functions. Care is taken to ensure that these are big enough that -no reallocation is necessary (since it would have unpredictable consequences). - -@code{_mp_size} and @code{_mp_alloc} are @code{int}, although @code{mp_size_t} -is usually a @code{long}. This is done to make the fields just 32 bits on -some 64 bits systems, thereby saving a few bytes of data space but still -providing plenty of range. - - -@node Rational Internals, Float Internals, Integer Internals, Internals -@section Rational Internals -@cindex Rational internals - -@code{mpq_t} variables represent rationals using an @code{mpz_t} numerator and -denominator (@pxref{Integer Internals}). - -The canonical form adopted is denominator positive (and non-zero), no common -factors between numerator and denominator, and zero uniquely represented as -0/1. - -It's believed that casting out common factors at each stage of a calculation -is best in general. A GCD is an @math{O(N^2)} operation so it's better to do -a few small ones immediately than to delay and have to do a big one later. -Knowing the numerator and denominator have no common factors can be used for -example in @code{mpq_mul} to make only two cross GCDs necessary, not four. - -This general approach to common factors is badly sub-optimal in the presence -of simple factorizations or little prospect for cancellation, but GMP has no -way to know when this will occur. As per @ref{Efficiency}, that's left to -applications. The @code{mpq_t} framework might still suit, with -@code{mpq_numref} and @code{mpq_denref} for direct access to the numerator and -denominator, or of course @code{mpz_t} variables can be used directly. - - -@node Float Internals, Raw Output Internals, Rational Internals, Internals -@section Float Internals -@cindex Float internals - -Efficient calculation is the primary aim of GMP floats and the use of whole -limbs and simple rounding facilitates this. - -@code{mpf_t} floats have a variable precision mantissa and a single machine -word signed exponent. The mantissa is represented using sign and magnitude. - -@c FIXME: The arrow heads don't join to the lines exactly. -@tex -\global\newdimen\GMPboxwidth \GMPboxwidth=5em -\global\newdimen\GMPboxheight \GMPboxheight=3ex -\def\centreline{\hbox{\raise 0.8ex \vbox{\hrule \hbox{\hfil}}}} -\GMPdisplay{% -\vbox{% - \hbox to 5\GMPboxwidth {most significant limb \hfil least significant limb} - \vskip 0.7ex - \def\GMPcentreline#1{\hbox{\raise 0.5 ex \vbox{\hrule \hbox to #1 {}}}} - \hbox { - \hbox to 3\GMPboxwidth {% - \setbox 0 = \hbox{@code{\_mp\_exp}}% - \dimen0=3\GMPboxwidth - \advance\dimen0 by -\wd0 - \divide\dimen0 by 2 - \advance\dimen0 by -1em - \setbox1 = \hbox{$\rightarrow$}% - \dimen1=\dimen0 - \advance\dimen1 by -\wd1 - \GMPcentreline{\dimen0}% - \hfil - \box0% - \hfil - \GMPcentreline{\dimen1{}}% - \box1} - \hbox to 2\GMPboxwidth {\hfil @code{\_mp\_d}}} - \vskip 0.5ex - \vbox {% - \hrule - \hbox{% - \vrule height 2ex depth 1ex - \hbox to \GMPboxwidth {}% - \vrule - \hbox to \GMPboxwidth {}% - \vrule - \hbox to \GMPboxwidth {}% - \vrule - \hbox to \GMPboxwidth {}% - \vrule - \hbox to \GMPboxwidth {}% - \vrule} - \hrule - } - \hbox {% - \hbox to 0.8 pt {} - \hbox to 3\GMPboxwidth {% - \hfil $\cdot$} \hbox {$\leftarrow$ radix point\hfil}} - \hbox to 5\GMPboxwidth{% - \setbox 0 = \hbox{@code{\_mp\_size}}% - \dimen0 = 5\GMPboxwidth - \advance\dimen0 by -\wd0 - \divide\dimen0 by 2 - \advance\dimen0 by -1em - \dimen1 = \dimen0 - \setbox1 = \hbox{$\leftarrow$}% - \setbox2 = \hbox{$\rightarrow$}% - \advance\dimen0 by -\wd1 - \advance\dimen1 by -\wd2 - \hbox to 0.3 em {}% - \box1 - \GMPcentreline{\dimen0}% - \hfil - \box0 - \hfil - \GMPcentreline{\dimen1}% - \box2} -}} -@end tex -@ifnottex -@example - most least -significant significant - limb limb - - _mp_d - |---- _mp_exp ---> | - _____ _____ _____ _____ _____ - |_____|_____|_____|_____|_____| - . <------------ radix point - - <-------- _mp_size ---------> -@sp 1 -@end example -@end ifnottex - -@noindent -The fields are as follows. - -@table @asis -@item @code{_mp_size} -The number of limbs currently in use, or the negative of that when -representing a negative value. Zero is represented by @code{_mp_size} and -@code{_mp_exp} both set to zero, and in that case the @code{_mp_d} data is -unused. (In the future @code{_mp_exp} might be undefined when representing -zero.) - -@item @code{_mp_prec} -The precision of the mantissa, in limbs. In any calculation the aim is to -produce @code{_mp_prec} limbs of result (the most significant being non-zero). - -@item @code{_mp_d} -A pointer to the array of limbs which is the absolute value of the mantissa. -These are stored ``little endian'' as per the @code{mpn} functions, so -@code{_mp_d[0]} is the least significant limb and -@code{_mp_d[ABS(_mp_size)-1]} the most significant. - -The most significant limb is always non-zero, but there are no other -restrictions on its value, in particular the highest 1 bit can be anywhere -within the limb. - -@code{_mp_prec+1} limbs are allocated to @code{_mp_d}, the extra limb being -for convenience (see below). There are no reallocations during a calculation, -only in a change of precision with @code{mpf_set_prec}. - -@item @code{_mp_exp} -The exponent, in limbs, determining the location of the implied radix point. -Zero means the radix point is just above the most significant limb. Positive -values mean a radix point offset towards the lower limbs and hence a value -@math{@ge{} 1}, as for example in the diagram above. Negative exponents mean -a radix point further above the highest limb. - -Naturally the exponent can be any value, it doesn't have to fall within the -limbs as the diagram shows, it can be a long way above or a long way below. -Limbs other than those included in the @code{@{_mp_d,_mp_size@}} data -are treated as zero. -@end table - -The @code{_mp_size} and @code{_mp_prec} fields are @code{int}, although the -@code{mp_size_t} type is usually a @code{long}. The @code{_mp_exp} field is -usually @code{long}. This is done to make some fields just 32 bits on some 64 -bits systems, thereby saving a few bytes of data space but still providing -plenty of precision and a very large range. - - -@sp 1 -@noindent -The following various points should be noted. - -@table @asis -@item Low Zeros -The least significant limbs @code{_mp_d[0]} etc can be zero, though such low -zeros can always be ignored. Routines likely to produce low zeros check and -avoid them to save time in subsequent calculations, but for most routines -they're quite unlikely and aren't checked. - -@item Mantissa Size Range -The @code{_mp_size} count of limbs in use can be less than @code{_mp_prec} if -the value can be represented in less. This means low precision values or -small integers stored in a high precision @code{mpf_t} can still be operated -on efficiently. - -@code{_mp_size} can also be greater than @code{_mp_prec}. Firstly a value is -allowed to use all of the @code{_mp_prec+1} limbs available at @code{_mp_d}, -and secondly when @code{mpf_set_prec_raw} lowers @code{_mp_prec} it leaves -@code{_mp_size} unchanged and so the size can be arbitrarily bigger than -@code{_mp_prec}. - -@item Rounding -All rounding is done on limb boundaries. Calculating @code{_mp_prec} limbs -with the high non-zero will ensure the application requested minimum precision -is obtained. - -The use of simple ``trunc'' rounding towards zero is efficient, since there's -no need to examine extra limbs and increment or decrement. - -@item Bit Shifts -Since the exponent is in limbs, there are no bit shifts in basic operations -like @code{mpf_add} and @code{mpf_mul}. When differing exponents are -encountered all that's needed is to adjust pointers to line up the relevant -limbs. - -Of course @code{mpf_mul_2exp} and @code{mpf_div_2exp} will require bit shifts, -but the choice is between an exponent in limbs which requires shifts there, or -one in bits which requires them almost everywhere else. - -@item Use of @code{_mp_prec+1} Limbs -The extra limb on @code{_mp_d} (@code{_mp_prec+1} rather than just -@code{_mp_prec}) helps when an @code{mpf} routine might get a carry from its -operation. @code{mpf_add} for instance will do an @code{mpn_add} of -@code{_mp_prec} limbs. If there's no carry then that's the result, but if -there is a carry then it's stored in the extra limb of space and -@code{_mp_size} becomes @code{_mp_prec+1}. - -Whenever @code{_mp_prec+1} limbs are held in a variable, the low limb is not -needed for the intended precision, only the @code{_mp_prec} high limbs. But -zeroing it out or moving the rest down is unnecessary. Subsequent routines -reading the value will simply take the high limbs they need, and this will be -@code{_mp_prec} if their target has that same precision. This is no more than -a pointer adjustment, and must be checked anyway since the destination -precision can be different from the sources. - -Copy functions like @code{mpf_set} will retain a full @code{_mp_prec+1} limbs -if available. This ensures that a variable which has @code{_mp_size} equal to -@code{_mp_prec+1} will get its full exact value copied. Strictly speaking -this is unnecessary since only @code{_mp_prec} limbs are needed for the -application's requested precision, but it's considered that an @code{mpf_set} -from one variable into another of the same precision ought to produce an exact -copy. - -@item Application Precisions -@code{__GMPF_BITS_TO_PREC} converts an application requested precision to an -@code{_mp_prec}. The value in bits is rounded up to a whole limb then an -extra limb is added since the most significant limb of @code{_mp_d} is only -non-zero and therefore might contain only one bit. - -@code{__GMPF_PREC_TO_BITS} does the reverse conversion, and removes the extra -limb from @code{_mp_prec} before converting to bits. The net effect of -reading back with @code{mpf_get_prec} is simply the precision rounded up to a -multiple of @code{mp_bits_per_limb}. - -Note that the extra limb added here for the high only being non-zero is in -addition to the extra limb allocated to @code{_mp_d}. For example with a -32-bit limb, an application request for 250 bits will be rounded up to 8 -limbs, then an extra added for the high being only non-zero, giving an -@code{_mp_prec} of 9. @code{_mp_d} then gets 10 limbs allocated. Reading -back with @code{mpf_get_prec} will take @code{_mp_prec} subtract 1 limb and -multiply by 32, giving 256 bits. - -Strictly speaking, the fact the high limb has at least one bit means that a -float with, say, 3 limbs of 32-bits each will be holding at least 65 bits, but -for the purposes of @code{mpf_t} it's considered simply to be 64 bits, a nice -multiple of the limb size. -@end table - - -@node Raw Output Internals, C++ Interface Internals, Float Internals, Internals -@section Raw Output Internals -@cindex Raw output internals - -@noindent -@code{mpz_out_raw} uses the following format. - -@tex -\global\newdimen\GMPboxwidth \GMPboxwidth=5em -\global\newdimen\GMPboxheight \GMPboxheight=3ex -\def\centreline{\hbox{\raise 0.8ex \vbox{\hrule \hbox{\hfil}}}} -\GMPdisplay{% -\vbox{% - \def\GMPcentreline#1{\hbox{\raise 0.5 ex \vbox{\hrule \hbox to #1 {}}}} - \vbox {% - \hrule - \hbox{% - \vrule height 2.5ex depth 1.5ex - \hbox to \GMPboxwidth {\hfil size\hfil}% - \vrule - \hbox to 3\GMPboxwidth {\hfil data bytes\hfil}% - \vrule} - \hrule} -}} -@end tex -@ifnottex -@example -+------+------------------------+ -| size | data bytes | -+------+------------------------+ -@end example -@end ifnottex - -The size is 4 bytes written most significant byte first, being the number of -subsequent data bytes, or the twos complement negative of that when a negative -integer is represented. The data bytes are the absolute value of the integer, -written most significant byte first. - -The most significant data byte is always non-zero, so the output is the same -on all systems, irrespective of limb size. - -In GMP 1, leading zero bytes were written to pad the data bytes to a multiple -of the limb size. @code{mpz_inp_raw} will still accept this, for -compatibility. - -The use of ``big endian'' for both the size and data fields is deliberate, it -makes the data easy to read in a hex dump of a file. Unfortunately it also -means that the limb data must be reversed when reading or writing, so neither -a big endian nor little endian system can just read and write @code{_mp_d}. - - -@node C++ Interface Internals, , Raw Output Internals, Internals -@section C++ Interface Internals -@cindex C++ interface internals - -A system of expression templates is used to ensure something like @code{a=b+c} -turns into a simple call to @code{mpz_add} etc. For @code{mpf_class} -the scheme also ensures the precision of the final -destination is used for any temporaries within a statement like -@code{f=w*x+y*z}. These are important features which a naive implementation -cannot provide. - -A simplified description of the scheme follows. The true scheme is -complicated by the fact that expressions have different return types. For -detailed information, refer to the source code. - -To perform an operation, say, addition, we first define a ``function object'' -evaluating it, - -@example -struct __gmp_binary_plus -@{ - static void eval(mpf_t f, const mpf_t g, const mpf_t h) - @{ - mpf_add(f, g, h); - @} -@}; -@end example - -@noindent -And an ``additive expression'' object, - -@example -__gmp_expr<__gmp_binary_expr<mpf_class, mpf_class, __gmp_binary_plus> > -operator+(const mpf_class &f, const mpf_class &g) -@{ - return __gmp_expr - <__gmp_binary_expr<mpf_class, mpf_class, __gmp_binary_plus> >(f, g); -@} -@end example - -The seemingly redundant @code{__gmp_expr<__gmp_binary_expr<@dots{}>>} is used to -encapsulate any possible kind of expression into a single template type. In -fact even @code{mpf_class} etc are @code{typedef} specializations of -@code{__gmp_expr}. - -Next we define assignment of @code{__gmp_expr} to @code{mpf_class}. - -@example -template <class T> -mpf_class & mpf_class::operator=(const __gmp_expr<T> &expr) -@{ - expr.eval(this->get_mpf_t(), this->precision()); - return *this; -@} - -template <class Op> -void __gmp_expr<__gmp_binary_expr<mpf_class, mpf_class, Op> >::eval -(mpf_t f, mp_bitcnt_t precision) -@{ - Op::eval(f, expr.val1.get_mpf_t(), expr.val2.get_mpf_t()); -@} -@end example - -where @code{expr.val1} and @code{expr.val2} are references to the expression's -operands (here @code{expr} is the @code{__gmp_binary_expr} stored within the -@code{__gmp_expr}). - -This way, the expression is actually evaluated only at the time of assignment, -when the required precision (that of @code{f}) is known. Furthermore the -target @code{mpf_t} is now available, thus we can call @code{mpf_add} directly -with @code{f} as the output argument. - -Compound expressions are handled by defining operators taking subexpressions -as their arguments, like this: - -@example -template <class T, class U> -__gmp_expr -<__gmp_binary_expr<__gmp_expr<T>, __gmp_expr<U>, __gmp_binary_plus> > -operator+(const __gmp_expr<T> &expr1, const __gmp_expr<U> &expr2) -@{ - return __gmp_expr - <__gmp_binary_expr<__gmp_expr<T>, __gmp_expr<U>, __gmp_binary_plus> > - (expr1, expr2); -@} -@end example - -And the corresponding specializations of @code{__gmp_expr::eval}: - -@example -template <class T, class U, class Op> -void __gmp_expr -<__gmp_binary_expr<__gmp_expr<T>, __gmp_expr<U>, Op> >::eval -(mpf_t f, mp_bitcnt_t precision) -@{ - // declare two temporaries - mpf_class temp1(expr.val1, precision), temp2(expr.val2, precision); - Op::eval(f, temp1.get_mpf_t(), temp2.get_mpf_t()); -@} -@end example - -The expression is thus recursively evaluated to any level of complexity and -all subexpressions are evaluated to the precision of @code{f}. - - -@node Contributors, References, Internals, Top -@comment node-name, next, previous, up -@appendix Contributors -@cindex Contributors - -Torbj@"orn Granlund wrote the original GMP library and is still the main -developer. Code not explicitly attributed to others, was contributed by -Torbj@"orn. Several other individuals and organizations have contributed -GMP. Here is a list in chronological order on first contribution: - -Gunnar Sj@"odin and Hans Riesel helped with mathematical problems in early -versions of the library. - -Richard Stallman helped with the interface design and revised the first -version of this manual. - -Brian Beuning and Doug Lea helped with testing of early versions of the -library and made creative suggestions. - -John Amanatides of York University in Canada contributed the function -@code{mpz_probab_prime_p}. - -Paul Zimmermann wrote the REDC-based mpz_powm code, the Sch@"onhage-Strassen -FFT multiply code, and the Karatsuba square root code. He also improved the -Toom3 code for GMP 4.2. Paul sparked the development of GMP 2, with his -comparisons between bignum packages. The ECMNET project Paul is organizing -was a driving force behind many of the optimizations in GMP 3. Paul also -wrote the new GMP 4.3 nth root code (with Torbj@"orn). - -Ken Weber (Kent State University, Universidade Federal do Rio Grande do Sul) -contributed now defunct versions of @code{mpz_gcd}, @code{mpz_divexact}, -@code{mpn_gcd}, and @code{mpn_bdivmod}, partially supported by CNPq (Brazil) -grant 301314194-2. - -Per Bothner of Cygnus Support helped to set up GMP to use Cygnus' configure. -He has also made valuable suggestions and tested numerous intermediary -releases. - -Joachim Hollman was involved in the design of the @code{mpf} interface, and in -the @code{mpz} design revisions for version 2. - -Bennet Yee contributed the initial versions of @code{mpz_jacobi} and -@code{mpz_legendre}. - -Andreas Schwab contributed the files @file{mpn/m68k/lshift.S} and -@file{mpn/m68k/rshift.S} (now in @file{.asm} form). - -Robert Harley of Inria, France and David Seal of ARM, England, suggested clever -improvements for population count. Robert also wrote highly optimized -Karatsuba and 3-way Toom multiplication functions for GMP 3, and contributed -the ARM assembly code. - -Torsten Ekedahl of the Mathematical department of Stockholm University provided -significant inspiration during several phases of the GMP development. His -mathematical expertise helped improve several algorithms. - -Linus Nordberg wrote the new configure system based on autoconf and -implemented the new random functions. - -Kevin Ryde worked on a large number of things: optimized x86 code, m4 asm -macros, parameter tuning, speed measuring, the configure system, function -inlining, divisibility tests, bit scanning, Jacobi symbols, Fibonacci and Lucas -number functions, printf and scanf functions, perl interface, demo expression -parser, the algorithms chapter in the manual, @file{gmpasm-mode.el}, and -various miscellaneous improvements elsewhere. - -Kent Boortz made the Mac OS 9 port. - -Steve Root helped write the optimized alpha 21264 assembly code. - -Gerardo Ballabio wrote the @file{gmpxx.h} C++ class interface and the C++ -@code{istream} input routines. - -Jason Moxham rewrote @code{mpz_fac_ui}. - -Pedro Gimeno implemented the Mersenne Twister and made other random number -improvements. - -Niels M@"oller wrote the sub-quadratic GCD, extended GCD and jacobi code, the -quadratic Hensel division code, and (with Torbj@"orn) the new divide and -conquer division code for GMP 4.3. Niels also helped implement the new Toom -multiply code for GMP 4.3 and implemented helper functions to simplify Toom -evaluations for GMP 5.0. He wrote the original version of mpn_mulmod_bnm1, and -he is the main author of the mini-gmp package used for gmp bootstrapping. - -Alberto Zanoni and Marco Bodrato suggested the unbalanced multiply strategy, -and found the optimal strategies for evaluation and interpolation in Toom -multiplication. - -Marco Bodrato helped implement the new Toom multiply code for GMP 4.3 and -implemented most of the new Toom multiply and squaring code for 5.0. -He is the main author of the current mpn_mulmod_bnm1, mpn_mullo_n, and -mpn_sqrlo. Marco also wrote the functions mpn_invert and mpn_invertappr, -and improved the speed of integer root extraction. He is the author of -the current combinatorial functions: binomial, factorial, multifactorial, -primorial. - -David Harvey suggested the internal function @code{mpn_bdiv_dbm1}, implementing -division relevant to Toom multiplication. He also worked on fast assembly -sequences, in particular on a fast AMD64 @code{mpn_mul_basecase}. He wrote -the internal middle product functions @code{mpn_mulmid_basecase}, -@code{mpn_toom42_mulmid}, @code{mpn_mulmid_n} and related helper routines. - -Martin Boij wrote @code{mpn_perfect_power_p}. - -Marc Glisse improved @file{gmpxx.h}: use fewer temporaries (faster), -specializations of @code{numeric_limits} and @code{common_type}, C++11 -features (move constructors, explicit bool conversion, UDL), make the -conversion from @code{mpq_class} to @code{mpz_class} explicit, optimize -operations where one argument is a small compile-time constant, replace -some heap allocations by stack allocations. He also fixed the eofbit -handling of C++ streams, and removed one division from @file{mpq/aors.c}. - -David S Miller wrote assembly code for SPARC T3 and T4. - -Mark Sofroniou cleaned up the types of mul_fft.c, letting it work for huge -operands. - -Ulrich Weigand ported GMP to the powerpc64le ABI. - -(This list is chronological, not ordered after significance. If you have -contributed to GMP but are not listed above, please tell -@email{gmp-devel@@gmplib.org} about the omission!) - -The development of floating point functions of GNU MP 2, were supported in part -by the ESPRIT-BRA (Basic Research Activities) 6846 project POSSO (POlynomial -System SOlving). - -The development of GMP 2, 3, and 4.0 was supported in part by the IDA Center -for Computing Sciences. - -The development of GMP 4.3, 5.0, and 5.1 was supported in part by the Swedish -Foundation for Strategic Research. - -Thanks go to Hans Thorsen for donating an SGI system for the GMP test system -environment. - -@node References, GNU Free Documentation License, Contributors, Top -@comment node-name, next, previous, up -@appendix References -@cindex References - -@c FIXME: In tex, the @uref's are unhyphenated, which is good for clarity, -@c but being long words they upset paragraph formatting (the preceding line -@c can get badly stretched). Would like an conditional @* style line break -@c if the uref is too long to fit on the last line of the paragraph, but it's -@c not clear how to do that. For now explicit @texlinebreak{}s are used on -@c paragraphs that come out bad. - -@section Books - -@itemize @bullet -@item -Jonathan M. Borwein and Peter B. Borwein, ``Pi and the AGM: A Study in -Analytic Number Theory and Computational Complexity'', Wiley, 1998. - -@item -Richard Crandall and Carl Pomerance, ``Prime Numbers: A Computational -Perspective'', 2nd edition, Springer-Verlag, 2005. -@texlinebreak{} @uref{http://www.math.dartmouth.edu/~carlp/} - -@item -Henri Cohen, ``A Course in Computational Algebraic Number Theory'', Graduate -Texts in Mathematics number 138, Springer-Verlag, 1993. -@texlinebreak{} @uref{http://www.math.u-bordeaux.fr/~cohen/} - -@item -Donald E. Knuth, ``The Art of Computer Programming'', volume 2, -``Seminumerical Algorithms'', 3rd edition, Addison-Wesley, 1998. -@texlinebreak{} @uref{http://www-cs-faculty.stanford.edu/~knuth/taocp.html} - -@item -John D. Lipson, ``Elements of Algebra and Algebraic Computing'', -The Benjamin Cummings Publishing Company Inc, 1981. - -@item -Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone, ``Handbook of -Applied Cryptography'', @uref{http://www.cacr.math.uwaterloo.ca/hac/} - -@item -Richard M. Stallman and the GCC Developer Community, ``Using the GNU Compiler -Collection'', Free Software Foundation, 2008, available online -@uref{https://gcc.gnu.org/onlinedocs/}, and in the GCC package -@uref{https://ftp.gnu.org/gnu/gcc/} -@end itemize - -@section Papers - -@itemize @bullet -@item -Yves Bertot, Nicolas Magaud and Paul Zimmermann, ``A Proof of GMP Square -Root'', Journal of Automated Reasoning, volume 29, 2002, pp.@: 225-252. Also -available online as INRIA Research Report 4475, June 2002, -@uref{http://hal.inria.fr/docs/00/07/21/13/PDF/RR-4475.pdf} - -@item -Christoph Burnikel and Joachim Ziegler, ``Fast Recursive Division'', -Max-Planck-Institut fuer Informatik Research Report MPI-I-98-1-022, -@texlinebreak{} @uref{http://data.mpi-sb.mpg.de/internet/reports.nsf/NumberView/1998-1-022} - -@item -Torbj@"orn Granlund and Peter L. Montgomery, ``Division by Invariant Integers -using Multiplication'', in Proceedings of the SIGPLAN PLDI'94 Conference, June -1994. Also available @uref{https://gmplib.org/~tege/divcnst-pldi94.pdf}. - -@item -Niels M@"oller and Torbj@"orn Granlund, ``Improved division by invariant -integers'', IEEE Transactions on Computers, 11 June 2010. -@uref{https://gmplib.org/~tege/division-paper.pdf} - -@item -Torbj@"orn Granlund and Niels M@"oller, ``Division of integers large and -small'', to appear. - -@item -Tudor Jebelean, -``An algorithm for exact division'', -Journal of Symbolic Computation, -volume 15, 1993, pp.@: 169-180. -Research report version available @texlinebreak{} -@uref{ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1992/92-35.ps.gz} - -@item -Tudor Jebelean, ``Exact Division with Karatsuba Complexity - Extended -Abstract'', RISC-Linz technical report 96-31, @texlinebreak{} -@uref{ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1996/96-31.ps.gz} - -@item -Tudor Jebelean, ``Practical Integer Division with Karatsuba Complexity'', -ISSAC 97, pp.@: 339-341. Technical report available @texlinebreak{} -@uref{ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1996/96-29.ps.gz} - -@item -Tudor Jebelean, ``A Generalization of the Binary GCD Algorithm'', ISSAC 93, -pp.@: 111-116. Technical report version available @texlinebreak{} -@uref{ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1993/93-01.ps.gz} - -@item -Tudor Jebelean, ``A Double-Digit Lehmer-Euclid Algorithm for Finding the GCD -of Long Integers'', Journal of Symbolic Computation, volume 19, 1995, -pp.@: 145-157. Technical report version also available @texlinebreak{} -@uref{ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1992/92-69.ps.gz} - -@item -Werner Krandick and Tudor Jebelean, ``Bidirectional Exact Integer Division'', -Journal of Symbolic Computation, volume 21, 1996, pp.@: 441-455. Early -technical report version also available -@uref{ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1994/94-50.ps.gz} - -@item -Makoto Matsumoto and Takuji Nishimura, ``Mersenne Twister: A 623-dimensionally -equidistributed uniform pseudorandom number generator'', ACM Transactions on -Modelling and Computer Simulation, volume 8, January 1998, pp.@: 3-30. -Available online @texlinebreak{} -@uref{http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ARTICLES/mt.ps.gz} (or .pdf) - -@item -R. Moenck and A. Borodin, ``Fast Modular Transforms via Division'', -Proceedings of the 13th Annual IEEE Symposium on Switching and Automata -Theory, October 1972, pp.@: 90-96. Reprinted as ``Fast Modular Transforms'', -Journal of Computer and System Sciences, volume 8, number 3, June 1974, -pp.@: 366-386. - -@item -Niels M@"oller, ``On Sch@"onhage's algorithm and subquadratic integer GCD - computation'', in Mathematics of Computation, volume 77, January 2008, pp.@: - 589-607. - -@item -Peter L. Montgomery, ``Modular Multiplication Without Trial Division'', in -Mathematics of Computation, volume 44, number 170, April 1985. - -@item -Arnold Sch@"onhage and Volker Strassen, ``Schnelle Multiplikation grosser -Zahlen'', Computing 7, 1971, pp.@: 281-292. - -@item -Kenneth Weber, ``The accelerated integer GCD algorithm'', -ACM Transactions on Mathematical Software, -volume 21, number 1, March 1995, pp.@: 111-122. - -@item -Paul Zimmermann, ``Karatsuba Square Root'', INRIA Research Report 3805, -November 1999, @uref{http://hal.inria.fr/inria-00072854/PDF/RR-3805.pdf} - -@item -Paul Zimmermann, ``A Proof of GMP Fast Division and Square Root -Implementations'', @texlinebreak{} -@uref{http://www.loria.fr/~zimmerma/papers/proof-div-sqrt.ps.gz} - -@item -Dan Zuras, ``On Squaring and Multiplying Large Integers'', ARITH-11: IEEE -Symposium on Computer Arithmetic, 1993, pp.@: 260 to 271. Reprinted as ``More -on Multiplying and Squaring Large Integers'', IEEE Transactions on Computers, -volume 43, number 8, August 1994, pp.@: 899-908. -@end itemize - - -@node GNU Free Documentation License, Concept Index, References, Top -@appendix GNU Free Documentation License -@cindex GNU Free Documentation License -@cindex Free Documentation License -@cindex Documentation license -@include fdl-1.3.texi - - -@node Concept Index, Function Index, GNU Free Documentation License, Top -@comment node-name, next, previous, up -@unnumbered Concept Index -@printindex cp - -@node Function Index, , Concept Index, Top -@comment node-name, next, previous, up -@unnumbered Function and Type Index -@printindex fn - -@bye - -@c Local variables: -@c fill-column: 78 -@c compile-command: "make gmp.info" -@c End: diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/isa_abi_headache b/src/plugins/e-acsl/contrib/libgmp/doc/isa_abi_headache deleted file mode 100644 index 7e1430d3d31231f88ebc3b95f681ee78ad0742ef..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/isa_abi_headache +++ /dev/null @@ -1,128 +0,0 @@ -Copyright 2000 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - -Terms Used In This Document: - ISA = Instruction Set Architecture. The instructions the current - processor provides. - ABI = Application Binary Interface. Specifies calling convention, - type sizes, etc. - AR64 = Arithmetic operations are 64-bit using 64-bit instructions - (E.g., addition, subtraction, load, store, of 64-bit integer types - are done with single instructions, not 32 bits at a time.) - Environment = The operating system and compiler. - -GMP is a very complex package to build since its speed is very -sensitive to the ISA and ABI. For example, if the ISA provides 64-bit -instructions, it is crucial that GMP is configured to use them. - -Most environments that run on a 64-bit ISA provide more than one ABI. -Typically one of the supported ABI's is a backward compatible 32-bit -ABI, and one ABI provides 64-bit addressing and `long' (sometimes -known as LP64). But a few environments (IRIX, HP-UX) provide -intermediate ABI's using 32-bit addressing but allow efficient 64-bit -operations through a `long long' type. For the latter to be useful to -GMP, the ABI must allow operations using the native 64-bit -instructions provided by the ISA, and allow passing of 64-bit -quantities atomically. - -The ABI is typically chosen by means of command line options to the -compiler tools (gcc, cc, c89, nm, ar, ld, as). Different environments -use different defaults, but as of this writing (May 2000) the -dominating default is to the plain 32-bit ABI in its most arcane form. - -The GMP 3.0.x approach was to compile using the ABI that gives the -best performance. That places the burden on users to pass special -options to the compiler when they compile their GMP applications. -That approach has its advantages and disadvantages. The main -advantage is that users don't unknowingly get bad GMP performance. -The main disadvantage is that users' compiles (actually links) will -fail unless they pass special compiler options. - -** SPARC - -System vendors often confuse ABI, ISA, and implementation. The worst -case is Solaris, were the unbundled compiler confuses ISA and ABI, and -the options have very confusing names. - - option interpretation - ====== ============== -cc -xarch=v8plus ISA=sparcv9, ABI=V8plus (PTR=32, see below) -gcc -mv8plus ISA=sparcv9, ABI=V8plus (see below) -cc -xarch=v9 ISA=sparcv9, ABI=V9 (implying AR=64, PTR=64) - -It's hard to believe, but the option v8plus really means ISA=V9! - -Solaris releases prior to version 7 running on a V9 CPU fails to -save/restore the upper 32 bits of the `i' and `l' registers. The -`v8plus' option generates code that use as many V9 features as -possible under such circumstances. - -** MIPS - -The IRIX 6 compilers gets things right. They have a clear -understanding of the differences between ABI and ISA. The option -names are descriptive. - - option interpretation - ====== ============== -cc -n32 ABI=n32 (implying AR=64, PTR=32) -gcc -mabi=n32 ABI=n32 (implying AR=64, PTR=32) -cc -64 ABI=64 (implying AR=64, PTR=64) -gcc -mabi=64 ABI=64 (implying AR=64, PTR=64) -cc -mips3 ISA=mips3 -gcc -mips3 ISA=mips3 -cc -mips4 ISA=mips4 -gcc -mips4 ISA=mips4 - -** HP-PA - -HP-UX is somewhat weird, but not as broken as Solaris. - - option interpretation - ====== ============== -cc +DA2.0 ABI=32bit (implying AR=64, PTR=32) -cc +DD64 ABI=64bit (implying AR=64, PTR=64) - -Code performing 64-bit arithmetic in the HP-UX 32-bit is not -compatible with the 64-bit ABI; the former has a calling convention -that passes/returns 64-bit integer quantities as two 32-bit chunks. - -** PowerPC - -While the PowerPC ABI's are capable of supporting 64-bit -registers/operations, the compilers under AIX are similar to Solaris' -cc in that they don't currently provide any 32-bit addressing with -64-bit arithmetic. - - option interpretation - ====== ============== -cc -q64 ABI=64bit (implying AR=64, PTR=64) -gcc -maix64 -mpowerpc64 ABI=64bit (implying AR=64, PTR=64) diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/mdate-sh b/src/plugins/e-acsl/contrib/libgmp/doc/mdate-sh deleted file mode 100755 index e8dfaca1dfe692ea17fc8d0cc291934116b1969c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/mdate-sh +++ /dev/null @@ -1,224 +0,0 @@ -#!/bin/sh -# Get modification time of a file or directory and pretty-print it. - -scriptversion=2010-08-21.06; # UTC - -# Copyright (C) 1995-2014 Free Software Foundation, Inc. -# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to <bug-automake@gnu.org> or send patches to -# <automake-patches@gnu.org>. - -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -fi - -case $1 in - '') - echo "$0: No file. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: mdate-sh [--help] [--version] FILE - -Pretty-print the modification day of FILE, in the format: -1 January 1970 - -Report bugs to <bug-automake@gnu.org>. -EOF - exit $? - ;; - -v | --v*) - echo "mdate-sh $scriptversion" - exit $? - ;; -esac - -error () -{ - echo "$0: $1" >&2 - exit 1 -} - - -# Prevent date giving response in another language. -LANG=C -export LANG -LC_ALL=C -export LC_ALL -LC_TIME=C -export LC_TIME - -# GNU ls changes its time format in response to the TIME_STYLE -# variable. Since we cannot assume 'unset' works, revert this -# variable to its documented default. -if test "${TIME_STYLE+set}" = set; then - TIME_STYLE=posix-long-iso - export TIME_STYLE -fi - -save_arg1=$1 - -# Find out how to get the extended ls output of a file or directory. -if ls -L /dev/null 1>/dev/null 2>&1; then - ls_command='ls -L -l -d' -else - ls_command='ls -l -d' -fi -# Avoid user/group names that might have spaces, when possible. -if ls -n /dev/null 1>/dev/null 2>&1; then - ls_command="$ls_command -n" -fi - -# A 'ls -l' line looks as follows on OS/2. -# drwxrwx--- 0 Aug 11 2001 foo -# This differs from Unix, which adds ownership information. -# drwxrwx--- 2 root root 4096 Aug 11 2001 foo -# -# To find the date, we split the line on spaces and iterate on words -# until we find a month. This cannot work with files whose owner is a -# user named "Jan", or "Feb", etc. However, it's unlikely that '/' -# will be owned by a user whose name is a month. So we first look at -# the extended ls output of the root directory to decide how many -# words should be skipped to get the date. - -# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. -set x`$ls_command /` - -# Find which argument is the month. -month= -command= -until test $month -do - test $# -gt 0 || error "failed parsing '$ls_command /' output" - shift - # Add another shift to the command. - command="$command shift;" - case $1 in - Jan) month=January; nummonth=1;; - Feb) month=February; nummonth=2;; - Mar) month=March; nummonth=3;; - Apr) month=April; nummonth=4;; - May) month=May; nummonth=5;; - Jun) month=June; nummonth=6;; - Jul) month=July; nummonth=7;; - Aug) month=August; nummonth=8;; - Sep) month=September; nummonth=9;; - Oct) month=October; nummonth=10;; - Nov) month=November; nummonth=11;; - Dec) month=December; nummonth=12;; - esac -done - -test -n "$month" || error "failed parsing '$ls_command /' output" - -# Get the extended ls output of the file or directory. -set dummy x`eval "$ls_command \"\\\$save_arg1\""` - -# Remove all preceding arguments -eval $command - -# Because of the dummy argument above, month is in $2. -# -# On a POSIX system, we should have -# -# $# = 5 -# $1 = file size -# $2 = month -# $3 = day -# $4 = year or time -# $5 = filename -# -# On Darwin 7.7.0 and 7.6.0, we have -# -# $# = 4 -# $1 = day -# $2 = month -# $3 = year or time -# $4 = filename - -# Get the month. -case $2 in - Jan) month=January; nummonth=1;; - Feb) month=February; nummonth=2;; - Mar) month=March; nummonth=3;; - Apr) month=April; nummonth=4;; - May) month=May; nummonth=5;; - Jun) month=June; nummonth=6;; - Jul) month=July; nummonth=7;; - Aug) month=August; nummonth=8;; - Sep) month=September; nummonth=9;; - Oct) month=October; nummonth=10;; - Nov) month=November; nummonth=11;; - Dec) month=December; nummonth=12;; -esac - -case $3 in - ???*) day=$1;; - *) day=$3; shift;; -esac - -# Here we have to deal with the problem that the ls output gives either -# the time of day or the year. -case $3 in - *:*) set `date`; eval year=\$$# - case $2 in - Jan) nummonthtod=1;; - Feb) nummonthtod=2;; - Mar) nummonthtod=3;; - Apr) nummonthtod=4;; - May) nummonthtod=5;; - Jun) nummonthtod=6;; - Jul) nummonthtod=7;; - Aug) nummonthtod=8;; - Sep) nummonthtod=9;; - Oct) nummonthtod=10;; - Nov) nummonthtod=11;; - Dec) nummonthtod=12;; - esac - # For the first six month of the year the time notation can also - # be used for files modified in the last year. - if (expr $nummonth \> $nummonthtod) > /dev/null; - then - year=`expr $year - 1` - fi;; - *) year=$3;; -esac - -# The result. -echo $day $month $year - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/projects.html b/src/plugins/e-acsl/contrib/libgmp/doc/projects.html deleted file mode 100644 index 4a105142b0e5fe636633081f680e2a0e7a3956c5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/projects.html +++ /dev/null @@ -1,476 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> - <title>GMP Development Projects</title> - <link rel="shortcut icon" href="favicon.ico"> - <link rel="stylesheet" href="gmp.css"> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -</head> - -<center> - <h1> - GMP Development Projects - </h1> -</center> - -<font size=-1> -<pre> -Copyright 2000-2006, 2008-2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. -</pre> -</font> - -<hr> -<!-- NB. timestamp updated automatically by emacs --> - This file current as of 29 Jan 2014. An up-to-date version is available at - <a href="https://gmplib.org/projects.html">https://gmplib.org/projects.html</a>. - Please send comments about this page to gmp-devel<font>@</font>gmplib.org. - -<p> This file lists projects suitable for volunteers. Please see the - <a href="tasks.html">tasks file</a> for smaller tasks. - -<p> If you want to work on any of the projects below, please let - gmp-devel<font>@</font>gmplib.org know. If you want to help with a project - that already somebody else is working on, you will get in touch through - gmp-devel<font>@</font>gmplib.org. (There are no email addresses of - volunteers below, due to spamming problems.) - -<ul> -<li> <strong>Faster multiplication</strong> - - <ol> - - <li> Work on the algorithm selection code for unbalanced multiplication. - - <li> Implement an FFT variant computing the coefficients mod m different - limb size primes of the form l*2^k+1. i.e., compute m separate FFTs. - The wanted coefficients will at the end be found by lifting with CRT - (Chinese Remainder Theorem). If we let m = 3, i.e., use 3 primes, we - can split the operands into coefficients at limb boundaries, and if - our machine uses b-bit limbs, we can multiply numbers with close to - 2^b limbs without coefficient overflow. For smaller multiplication, - we might perhaps let m = 1, and instead of splitting our operands at - limb boundaries, split them in much smaller pieces. We might also use - 4 or more primes, and split operands into bigger than b-bit chunks. - By using more primes, the gain in shorter transform length, but lose - in having to do more FFTs, but that is a slight total save. We then - lose in more expensive CRT. <br><br> - - <p> [We now have two implementations of this algorithm, one by Tommy - Färnqvist and one by Niels Möller.] - - <li> Work on short products. Our mullo and mulmid are probably K, but we - lack mulhi. - - </ol> - - <p> Another possibility would be an optimized cube. In the basecase that - should definitely be able to save cross-products in a similar fashion to - squaring, but some investigation might be needed for how best to adapt - the higher-order algorithms. Not sure whether cubing or further small - powers have any particularly important uses though. - - -<li> <strong>Assembly routines</strong> - - <p> Write new and improve existing assembly routines. The tests/devel - programs and the tune/speed.c and tune/many.pl programs are useful for - testing and timing the routines you write. See the README files in those - directories for more information. - - <p> Please make sure your new routines are fast for these three situations: - <ol> - <li> Small operands of less than, say, 10 limbs. - <li> Medium size operands, that fit into the cache. - <li> Huge operands that does not fit into the cache. - </ol> - - <p> The most important routines are mpn_addmul_1, mpn_mul_basecase and - mpn_sqr_basecase. The latter two don't exist for all machines, while - mpn_addmul_1 exists for almost all machines. - - <p> Standard techniques for these routines are unrolling, software - pipelining, and specialization for common operand values. For machines - with poor integer multiplication, it is sometimes possible to remedy the - situation using floating-point operations or SIMD operations such as MMX - (x86) (x86), SSE (x86), VMX (PowerPC), VIS (Sparc). - - <p> Using floating-point operations is interesting but somewhat tricky. - Since IEEE double has 53 bit of mantissa, one has to split the operands - in small pieces, so that no intermediates are greater than 2^53. For - 32-bit computers, splitting one operand into 16-bit pieces works. For - 64-bit machines, one operand can be split into 21-bit pieces and the - other into 32-bit pieces. (A 64-bit operand can be split into just three - 21-bit pieces if one allows the split operands to be negative!) - - -<li> <strong>Faster sqrt</strong> - - <p> The current code uses divisions, which are reasonably fast, but it'd be - possible to use only multiplications by computing 1/sqrt(A) using this - iteration: - <pre> - 2 - x = x (3 − A x )/2 - i+1 i i </pre> - The square root can then be computed like this: - <pre> - sqrt(A) = A x - n </pre> - <p> That final multiply might be the full size of the input (though it might - only need the high half of that), so there may or may not be any speedup - overall. - - <p> We should probably allow a special exponent-like parameter, to speed - computations of a precise square root of a small number in mpf and mpfr. - - -<li> <strong>Nth root</strong> - - <p> Improve mpn_rootrem. The current code is not too bad, but its time - complexity is a function of the input, while it is possible to make - the <i>average</i> complexity a function of the output. - - -<li> <strong>Fat binaries</strong> - - <p> Add more functions to the set of fat functions. - - <p> The speed of multiplication is today highly dependent on combination - functions like <code>addlsh1_n</code>. A fat binary will never use any such - functions, since they are classified as optional. Ideally, we should use - them, but making the current compile-time selections of optional functions - become run-time selections for fat binaries. - - <p> If we make fat binaries work really well, we should move away frm tehe - current configure scheme (at least by default) and instead include all code - always. - - -<li> <strong>Exceptions</strong> - - <p> Some sort of scheme for exceptions handling would be desirable. - Presently the only thing documented is that divide by zero in GMP - functions provokes a deliberate machine divide by zero (on those systems - where such a thing exists at least). The global <code>gmp_errno</code> - is not actually documented, except for the old <code>gmp_randinit</code> - function. Being currently just a plain global means it's not - thread-safe. - - <p> The basic choices for exceptions are returning an error code or having a - handler function to be called. The disadvantage of error returns is they - have to be checked, leading to tedious and rarely executed code, and - strictly speaking such a scheme wouldn't be source or binary compatible. - The disadvantage of a handler function is that a <code>longjmp</code> or - similar recovery from it may be difficult. A combination would be - possible, for instance by allowing the handler to return an error code. - - <p> Divide-by-zero, sqrt-of-negative, and similar operand range errors can - normally be detected at the start of functions, so exception handling - would have a clean state. What's worth considering though is that the - GMP function detecting the exception may have been called via some third - party library or self contained application module, and hence have - various bits of state to be cleaned up above it. It'd be highly - desirable for an exceptions scheme to allow for such cleanups. - - <p> The C++ destructor mechanism could help with cleanups both internally and - externally, but being a plain C library we don't want to depend on that. - - <p> A C++ <code>throw</code> might be a good optional extra exceptions - mechanism, perhaps under a build option. For - GCC <code>-fexceptions</code> will add the necessary frame information to - plain C code, or GMP could be compiled as C++. - - <p> Out-of-memory exceptions are expected to be handled by the - <code>mp_set_memory_functions</code> routines, rather than being a - prospective part of divide-by-zero etc. Some similar considerations - apply but what differs is that out-of-memory can arise deep within GMP - internals. Even fundamental routines like <code>mpn_add_n</code> and - <code>mpn_addmul_1</code> can use temporary memory (for instance on Cray - vector systems). Allowing for an error code return would require an - awful lot of checking internally. Perhaps it'd still be worthwhile, but - it'd be a lot of changes and the extra code would probably be rather - rarely executed in normal usages. - - <p> A <code>longjmp</code> recovery for out-of-memory will currently, in - general, lead to memory leaks and may leave GMP variables operated on in - inconsistent states. Maybe it'd be possible to record recovery - information for use by the relevant allocate or reallocate function, but - that too would be a lot of changes. - - <p> One scheme for out-of-memory would be to note that all GMP allocations go - through the <code>mp_set_memory_functions</code> routines. So if the - application has an intended <code>setjmp</code> recovery point it can - record memory activity by GMP and abandon space allocated and variables - initialized after that point. This might be as simple as directing the - allocation functions to a separate pool, but in general would have the - disadvantage of needing application-level bookkeeping on top of the - normal system <code>malloc</code>. An advantage however is that it needs - nothing from GMP itself and on that basis doesn't burden applications not - needing recovery. Note that there's probably some details to be worked - out here about reallocs of existing variables, and perhaps about copying - or swapping between "permanent" and "temporary" variables. - - <p> Applications desiring a fine-grained error control, for instance a - language interpreter, would very possibly not be well served by a scheme - requiring <code>longjmp</code>. Wrapping every GMP function call with a - <code>setjmp</code> would be very inconvenient. - - <p> Another option would be to let <code>mpz_t</code> etc hold a sort of NaN, - a special value indicating an out-of-memory or other failure. This would - be similar to NaNs in mpfr. Unfortunately such a scheme could only be - used by programs prepared to handle such special values, since for - instance a program waiting for some condition to be satisfied could - become an infinite loop if it wasn't also watching for NaNs. The work to - implement this would be significant too, lots of checking of inputs and - intermediate results. And if <code>mpn</code> routines were to - participate in this (which they would have to internally) a lot of new - return values would need to be added, since of course there's no - <code>mpz_t</code> etc structure for them to indicate failure in. - - <p> Stack overflow is another possible exception, but perhaps not one that - can be easily detected in general. On i386 GNU/Linux for instance GCC - normally doesn't generate stack probes for an <code>alloca</code>, but - merely adjusts <code>%esp</code>. A big enough <code>alloca</code> can - miss the stack redzone and hit arbitrary data. GMP stack usage is - normally a function of operand size, which might be enough for some - applications to know they'll be safe. Otherwise a fixed maximum usage - can probably be obtained by building with - <code>--enable-alloca=malloc-reentrant</code> (or - <code>notreentrant</code>). Arranging the default to be - <code>alloca</code> only on blocks up to a certain size and - <code>malloc</code> thereafter might be a better approach and would have - the advantage of not having calculations limited by available stack. - - <p> Actually recovering from stack overflow is of course another problem. It - might be possible to catch a <code>SIGSEGV</code> in the stack redzone - and do something in a <code>sigaltstack</code>, on systems which have - that, but recovery might otherwise not be possible. This is worth - bearing in mind because there's no point worrying about tight and careful - out-of-memory recovery if an out-of-stack is fatal. - - <p> Operand overflow is another exception to be addressed. It's easy for - instance to ask <code>mpz_pow_ui</code> for a result bigger than an - <code>mpz_t</code> can possibly represent. Currently overflows in limb - or byte count calculations will go undetected. Often they'll still end - up asking the memory functions for blocks bigger than available memory, - but that's by no means certain and results are unpredictable in general. - It'd be desirable to tighten up such size calculations. Probably only - selected routines would need checks, if it's assumed say that no input - will be more than half of all memory and hence size additions like say - <code>mpz_mul</code> won't overflow. - - -<li> <strong>Performance Tool</strong> - - <p> It'd be nice to have some sort of tool for getting an overview of - performance. Clearly a great many things could be done, but some primary - uses would be, - - <ol> - <li> Checking speed variations between compilers. - <li> Checking relative performance between systems or CPUs. - </ol> - - <p> A combination of measuring some fundamental routines and some - representative application routines might satisfy these. - - <p> The tune/time.c routines would be the easiest way to get good accurate - measurements on lots of different systems. The high level - <code>speed_measure</code> may or may not suit, but the basic - <code>speed_starttime</code> and <code>speed_endtime</code> would cover - lots of portability and accuracy questions. - - -<li> <strong>Using <code>restrict</code></strong> - - <p> There might be some value in judicious use of C99 style - <code>restrict</code> on various pointers, but this would need some - careful thought about what it implies for the various operand overlaps - permitted in GMP. - - <p> Rumour has it some pre-C99 compilers had <code>restrict</code>, but - expressing tighter (or perhaps looser) requirements. Might be worth - investigating that before using <code>restrict</code> unconditionally. - - <p> Loops are presumably where the greatest benefit would be had, by allowing - the compiler to advance reads ahead of writes, perhaps as part of loop - unrolling. However critical loops are generally coded in assembler, so - there might not be very much to gain. And on Cray systems the explicit - use of <code>_Pragma</code> gives an equivalent effect. - - <p> One thing to note is that Microsoft C headers (on ia64 at least) contain - <code>__declspec(restrict)</code>, so a <code>#define</code> of - <code>restrict</code> should be avoided. It might be wisest to setup a - <code>gmp_restrict</code>. - - -<li> <strong>Prime Testing</strong> - - <p> GMP is not really a number theory library and probably shouldn't have - large amounts of code dedicated to sophisticated prime testing - algorithms, but basic things well-implemented would suit. Tests offering - certainty are probably all too big or too slow (or both!) to justify - inclusion in the main library. Demo programs showing some possibilities - would be good though. - - <p> The present "repetitions" argument to <code>mpz_probab_prime_p</code> is - rather specific to the Miller-Rabin tests of the current implementation. - Better would be some sort of parameter asking perhaps for a maximum - chance 1/2^x of a probable prime in fact being composite. If - applications follow the advice that the present reps gives 1/4^reps - chance then perhaps such a change is unnecessary, but an explicitly - described 1/2^x would allow for changes in the implementation or even for - new proofs about the theory. - - <p> <code>mpz_probab_prime_p</code> always initializes a new - <code>gmp_randstate_t</code> for randomized tests, which unfortunately - means it's not really very random and in particular always runs the same - tests for a given input. Perhaps a new interface could accept an rstate - to use, so successive tests could increase confidence in the result. - - <p> <code>mpn_mod_34lsub1</code> is an obvious and easy improvement to the - trial divisions. And since the various prime factors are constants, the - remainder can be tested with something like -<pre> -#define MP_LIMB_DIVISIBLE_7_P(n) \ - ((n) * MODLIMB_INVERSE_7 <= MP_LIMB_T_MAX/7) -</pre> - Which would help compilers that don't know how to optimize divisions by - constants, and is even an improvement on current gcc 3.2 code. This - technique works for any modulus, see Granlund and Montgomery "Division by - Invariant Integers" section 9. - - <p> The trial divisions are done with primes generated and grouped at - runtime. This could instead be a table of data, with pre-calculated - inverses too. Storing deltas, ie. amounts to add, rather than actual - primes would save space. <code>udiv_qrnnd_preinv</code> style inverses - can be made to exist by adding dummy factors of 2 if necessary. Some - thought needs to be given as to how big such a table should be, based on - how much dividing would be profitable for what sort of size inputs. The - data could be shared by the perfect power testing. - - <p> Jason Moxham points out that if a sqrt(-1) mod N exists then any factor - of N must be == 1 mod 4, saving half the work in trial dividing. (If - x^2==-1 mod N then for a prime factor p we have x^2==-1 mod p and so the - jacobi symbol (-1/p)=1. But also (-1/p)=(-1)^((p-1)/2), hence must have - p==1 mod 4.) But knowing whether sqrt(-1) mod N exists is not too easy. - A strong pseudoprime test can reveal one, so perhaps such a test could be - inserted part way though the dividing. - - <p> Jon Grantham "Frobenius Pseudoprimes" (www.pseudoprime.com) describes a - quadratic pseudoprime test taking about 3x longer than a plain test, but - with only a 1/7710 chance of error (whereas 3 plain Miller-Rabin tests - would offer only (1/4)^3 == 1/64). Such a test needs completely random - parameters to satisfy the theory, though single-limb values would run - faster. It's probably best to do at least one plain Miller-Rabin before - any quadratic tests, since that can identify composites in less total - time. - - <p> Some thought needs to be given to the structure of which tests (trial - division, Miller-Rabin, quadratic) and how many are done, based on what - sort of inputs we expect, with a view to minimizing average time. - - <p> It might be a good idea to break out subroutines for the various tests, - so that an application can combine them in ways it prefers, if sensible - defaults in <code>mpz_probab_prime_p</code> don't suit. In particular - this would let applications skip tests it knew would be unprofitable, - like trial dividing when an input is already known to have no small - factors. - - <p> For small inputs, combinations of theory and explicit search make it - relatively easy to offer certainty. For instance numbers up to 2^32 - could be handled with a strong pseudoprime test and table lookup. But - it's rather doubtful whether a smallnum prime test belongs in a bignum - library. Perhaps if it had other internal uses. - - <p> An <code>mpz_nthprime</code> might be cute, but is almost certainly - impractical for anything but small n. - - -<li> <strong>Intra-Library Calls</strong> - - <p> On various systems, calls within libgmp still go through the PLT, TOC or - other mechanism, which makes the code bigger and slower than it needs to - be. - - <p> The theory would be to have all GMP intra-library calls resolved directly - to the routines in the library. An application wouldn't be able to - replace a routine, the way it can normally, but there seems no good - reason to do that, in normal circumstances. - - <p> The <code>visibility</code> attribute in recent gcc is good for this, - because it lets gcc omit unnecessary GOT pointer setups or whatever if it - finds all calls are local and there's no global data references. - Documented entrypoints would be <code>protected</code>, and purely - internal things not wanted by test programs or anything can be - <code>internal</code>. - - <p> Unfortunately, on i386 it seems <code>protected</code> ends up causing - text segment relocations within libgmp.so, meaning the library code can't - be shared between processes, defeating the purpose of a shared library. - Perhaps this is just a gremlin in binutils (debian packaged - 2.13.90.0.16-1). - - <p> The linker can be told directly (with a link script, or options) to do - the same sort of thing. This doesn't change the code emitted by gcc of - course, but it does mean calls are resolved directly to their targets, - avoiding a PLT entry. - - <p> Keeping symbols private to libgmp.so is probably a good thing in general - too, to stop anyone even attempting to access them. But some - undocumented things will need or want to be kept visible, for use by - mpfr, or the test and tune programs. Libtool has a standard option for - selecting public symbols (used now for libmp). - - -<li> <strong>Math functions for the mpf layer</strong> - - <p> Implement the functions of math.h for the GMP mpf layer! Check the book - "Pi and the AGM" by Borwein and Borwein for ideas how to do this. These - functions are desirable: acos, acosh, asin, asinh, atan, atanh, atan2, - cos, cosh, exp, log, log10, pow, sin, sinh, tan, tanh. - - <p> Note that the <a href="http://mpfr.org">mpfr</a> functions already - provide these functions, and that we usually recommend new programs to use - mpfr instead of mpf. -</ul> -<hr> - -</body> -</html> - -<!-- -Local variables: -eval: (add-hook 'write-file-hooks 'time-stamp) -time-stamp-start: "This file current as of " -time-stamp-format: "%:d %3b %:y" -time-stamp-end: "\\." -time-stamp-line-limit: 50 -End: ---> diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/stamp-vti b/src/plugins/e-acsl/contrib/libgmp/doc/stamp-vti deleted file mode 100644 index e904fe5985e710f68afa147567d9d4b6f355cf16..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/stamp-vti +++ /dev/null @@ -1,4 +0,0 @@ -@set UPDATED 1 November 2015 -@set UPDATED-MONTH November 2015 -@set EDITION 6.1.0 -@set VERSION 6.1.0 diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/tasks.html b/src/plugins/e-acsl/contrib/libgmp/doc/tasks.html deleted file mode 100644 index 9a25bef1a3eb53df3a837eff3a81d9b2a8ffa5d9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/tasks.html +++ /dev/null @@ -1,896 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> - <title>GMP Itemized Development Tasks</title> - <link rel="shortcut icon" href="favicon.ico"> - <link rel="stylesheet" href="gmp.css"> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -</head> - -<center> - <h1> - GMP Itemized Development Tasks - </h1> -</center> - -<font size=-1> -<pre> -Copyright 2000-2004, 2006, 2008, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. -</pre> -</font> - -<hr> -<!-- NB. timestamp updated automatically by emacs --> - This file current as of 29 Jan 2014. An up-to-date version is available at - <a href="https://gmplib.org/tasks.html">https://gmplib.org/tasks.html</a>. - Please send comments about this page to gmp-devel<font>@</font>gmplib.org. - -<p> These are itemized GMP development tasks. Not all the tasks - listed here are suitable for volunteers, but many of them are. - Please see the <a href="projects.html">projects file</a> for more - sizeable projects. - -<p> CAUTION: This file needs updating. Many of the tasks here have -either already been taken care of, or have become irrelevant. - -<h4>Correctness and Completeness</h4> -<ul> -<li> <code>_LONG_LONG_LIMB</code> in gmp.h is not namespace clean. Reported - by Patrick Pelissier. - <br> - We sort of mentioned <code>_LONG_LONG_LIMB</code> in past releases, so - need to be careful about changing it. It used to be a define - applications had to set for long long limb systems, but that in - particular is no longer relevant now that it's established automatically. -<li> The various reuse.c tests need to force reallocation by calling - <code>_mpz_realloc</code> with a small (1 limb) size. -<li> One reuse case is missing from mpX/tests/reuse.c: - <code>mpz_XXX(a,a,a)</code>. -<li> Make the string reading functions allow the `0x' prefix when the base is - explicitly 16. They currently only allow that prefix when the base is - unspecified (zero). -<li> <code>mpf_eq</code> is not always correct, when one operand is - 1000000000... and the other operand is 0111111111..., i.e., extremely - close. There is a special case in <code>mpf_sub</code> for this - situation; put similar code in <code>mpf_eq</code>. [In progress.] -<li> <code>mpf_eq</code> doesn't implement what gmp.texi specifies. It should - not use just whole limbs, but partial limbs. [In progress.] -<li> <code>mpf_set_str</code> doesn't validate it's exponent, for instance - garbage 123.456eX789X is accepted (and an exponent 0 used), and overflow - of a <code>long</code> is not detected. -<li> <code>mpf_add</code> doesn't check for a carry from truncated portions of - the inputs, and in that respect doesn't implement the "infinite precision - followed by truncate" specified in the manual. -<li> Windows DLLs: tests/mpz/reuse.c and tests/mpf/reuse.c initialize global - variables with pointers to <code>mpz_add</code> etc, which doesn't work - when those routines are coming from a DLL (because they're effectively - function pointer global variables themselves). Need to rearrange perhaps - to a set of calls to a test function rather than iterating over an array. -<li> <code>mpz_pow_ui</code>: Detect when the result would be more memory than - a <code>size_t</code> can represent and raise some suitable exception, - probably an alloc call asking for <code>SIZE_T_MAX</code>, and if that - somehow succeeds then an <code>abort</code>. Various size overflows of - this kind are not handled gracefully, probably resulting in segvs. - <br> - In <code>mpz_n_pow_ui</code>, detect when the count of low zero bits - exceeds an <code>unsigned long</code>. There's a (small) chance of this - happening but still having enough memory to represent the value. - Reported by Winfried Dreckmann in for instance <code>mpz_ui_pow_ui (x, - 4UL, 1431655766UL)</code>. -<li> <code>mpf</code>: Detect exponent overflow and raise some exception. - It'd be nice to allow the full <code>mp_exp_t</code> range since that's - how it's been in the past, but maybe dropping one bit would make it - easier to test if e1+e2 goes out of bounds. -</ul> - - - -<h4>Machine Independent Optimization</h4> -<ul> -<li> <code>mpf_cmp</code>: For better cache locality, don't test for low zero - limbs until the high limbs fail to give an ordering. Reduce code size by - turning the three <code>mpn_cmp</code>'s into a single loop stopping when - the end of one operand is reached (and then looking for a non-zero in the - rest of the other). -<li> <code>mpf_mul_2exp</code>, <code>mpf_div_2exp</code>: The use of - <code>mpn_lshift</code> for any size<=prec means repeated - <code>mul_2exp</code> and <code>div_2exp</code> calls accumulate low zero - limbs until size==prec+1 is reached. Those zeros will slow down - subsequent operations, especially if the value is otherwise only small. - If low bits of the low limb are zero, use <code>mpn_rshift</code> so as - to not increase the size. -<li> <code>mpn_dc_sqrtrem</code>, <code>mpn_sqrtrem2</code>: Don't use - <code>mpn_add_1</code> and <code>mpn_sub_1</code> for 1 limb operations, - instead <code>ADDC_LIMB</code> and <code>SUBC_LIMB</code>. -<li> <code>mpn_sqrtrem2</code>: Use plain variables for <code>sp[0]</code> and - <code>rp[0]</code> calculations, so the compiler needn't worry about - aliasing between <code>sp</code> and <code>rp</code>. -<li> <code>mpn_sqrtrem</code>: Some work can be saved in the last step when - the remainder is not required, as noted in Paul's paper. -<li> <code>mpq_add</code>, <code>mpq_sub</code>: The gcd fits a single limb - with high probability and in this case <code>binvert_limb</code> could - be used to calculate the inverse just once for the two exact divisions - "op1.den / gcd" and "op2.den / gcd", rather than letting - <code>mpn_bdiv_q_1</code> do it each time. This would require calling - <code>mpn_pi1_bdiv_q_1</code>. -<li> <code>mpn_gcdext</code>: Don't test <code>count_leading_zeros</code> for - zero, instead check the high bit of the operand and avoid invoking - <code>count_leading_zeros</code>. This is an optimization on all - machines, and significant on machines with slow - <code>count_leading_zeros</code>, though it's possible an already - normalized operand might not be encountered very often. -<li> Rewrite <code>umul_ppmm</code> to use floating-point for generating the - most significant limb (if <code>GMP_LIMB_BITS</code> <= 52 bits). - (Peter Montgomery has some ideas on this subject.) -<li> Improve the default <code>umul_ppmm</code> code in longlong.h: Add partial - products with fewer operations. -<li> Consider inlining <code>mpz_set_ui</code>. This would be both small and - fast, especially for compile-time constants, but would make application - binaries depend on having 1 limb allocated to an <code>mpz_t</code>, - preventing the "lazy" allocation scheme below. -<li> Consider inlining <code>mpz_[cft]div_ui</code> and maybe - <code>mpz_[cft]div_r_ui</code>. A <code>__gmp_divide_by_zero</code> - would be needed for the divide by zero test, unless that could be left to - <code>mpn_mod_1</code> (not sure currently whether all the risc chips - provoke the right exception there if using mul-by-inverse). -<li> Consider inlining: <code>mpz_fits_s*_p</code>. The setups for - <code>LONG_MAX</code> etc would need to go into gmp.h, and on Cray it - might, unfortunately, be necessary to forcibly include <limits.h> - since there's no apparent way to get <code>SHRT_MAX</code> with an - expression (since <code>short</code> and <code>unsigned short</code> can - be different sizes). -<li> <code>mpz_powm</code> and <code>mpz_powm_ui</code> aren't very fast on one - or two limb moduli, due to a lot of function call overheads. These could - perhaps be handled as special cases. -<li> Make sure <code>mpz_powm_ui</code> is never slower than the corresponding - computation using <code>mpz_powm</code>. -<li> <code>mpz_powm</code> REDC should do multiplications by <code>g[]</code> - using the division method when they're small, since the REDC form of a - small multiplier is normally a full size product. Probably would need a - new tuned parameter to say what size multiplier is "small", as a function - of the size of the modulus. -<li> <code>mpn_gcd</code> might be able to be sped up on small to moderate - sizes by improving <code>find_a</code>, possibly just by providing an - alternate implementation for CPUs with slowish - <code>count_leading_zeros</code>. -<li> <code>mpf_set_str</code> produces low zero limbs when a string has a - fraction but is exactly representable, eg. 0.5 in decimal. These could be - stripped to save work in later operations. -<li> <code>mpz_and</code>, <code>mpz_ior</code> and <code>mpz_xor</code> should - use <code>mpn_and_n</code> etc for the benefit of the small number of - targets with native versions of those routines. Need to be careful not to - pass size==0. Is some code sharing possible between the <code>mpz</code> - routines? -<li> <code>mpf_add</code>: Don't do a copy to avoid overlapping operands - unless it's really necessary (currently only sizes are tested, not - whether r really is u or v). -<li> <code>mpf_add</code>: Under the check for v having no effect on the - result, perhaps test for r==u and do nothing in that case, rather than - currently it looks like an <code>MPN_COPY_INCR</code> will be done to - reduce prec+1 limbs to prec. -<li> <code>mpf_div_ui</code>: Instead of padding with low zeros, call - <code>mpn_divrem_1</code> asking for fractional quotient limbs. -<li> <code>mpf_div_ui</code>: Eliminate <code>TMP_ALLOC</code>. When r!=u - there's no overlap and the division can be called on those operands. - When r==u and is prec+1 limbs, then it's an in-place division. If r==u - and not prec+1 limbs, then move the available limbs up to prec+1 and do - an in-place there. -<li> <code>mpf_div_ui</code>: Whether the high quotient limb is zero can be - determined by testing the dividend for high<divisor. When non-zero, the - division can be done on prec dividend limbs instead of prec+1. The result - size is also known before the division, so that can be a tail call (once - the <code>TMP_ALLOC</code> is eliminated). -<li> <code>mpn_divrem_2</code> could usefully accept unnormalized divisors and - shift the dividend on-the-fly, since this should cost nothing on - superscalar processors and avoid the need for temporary copying in - <code>mpn_tdiv_qr</code>. -<li> <code>mpf_sqrt</code>: If r!=u, and if u doesn't need to be padded with - zeros, then there's no need for the tp temporary. -<li> <code>mpq_cmp_ui</code> could form the <code>num1*den2</code> and - <code>num2*den1</code> products limb-by-limb from high to low and look at - each step for values differing by more than the possible carry bit from - the uncalculated portion. -<li> <code>mpq_cmp</code> could do the same high-to-low progressive multiply - and compare. The benefits of karatsuba and higher multiplication - algorithms are lost, but if it's assumed only a few high limbs will be - needed to determine an order then that's fine. -<li> <code>mpn_add_1</code>, <code>mpn_sub_1</code>, <code>mpn_add</code>, - <code>mpn_sub</code>: Internally use <code>__GMPN_ADD_1</code> etc - instead of the functions, so they get inlined on all compilers, not just - gcc and others with <code>inline</code> recognised in gmp.h. - <code>__GMPN_ADD_1</code> etc are meant mostly to support application - inline <code>mpn_add_1</code> etc and if they don't come out good for - internal uses then special forms can be introduced, for instance many - internal uses are in-place. Sometimes a block of code is executed based - on the carry-out, rather than using it arithmetically, and those places - might want to do their own loops entirely. -<li> <code>__gmp_extract_double</code> on 64-bit systems could use just one - bitfield for the mantissa extraction, not two, when endianness permits. - Might depend on the compiler allowing <code>long long</code> bit fields - when that's the only actual 64-bit type. -<li> tal-notreent.c could keep a block of memory permanently allocated. - Currently the last nested <code>TMP_FREE</code> releases all memory, so - there's an allocate and free every time a top-level function using - <code>TMP</code> is called. Would need - <code>mp_set_memory_functions</code> to tell tal-notreent.c to release - any cached memory when changing allocation functions though. -<li> <code>__gmp_tmp_alloc</code> from tal-notreent.c could be partially - inlined. If the current chunk has enough room then a couple of pointers - can be updated. Only if more space is required then a call to some sort - of <code>__gmp_tmp_increase</code> would be needed. The requirement that - <code>TMP_ALLOC</code> is an expression might make the implementation a - bit ugly and/or a bit sub-optimal. -<pre> -#define TMP_ALLOC(n) - ((ROUND_UP(n) > current->end - current->point ? - __gmp_tmp_increase (ROUND_UP (n)) : 0), - current->point += ROUND_UP (n), - current->point - ROUND_UP (n)) -</pre> -<li> <code>__mp_bases</code> has a lot of data for bases which are pretty much - never used. Perhaps the table should just go up to base 16, and have - code to generate data above that, if and when required. Naturally this - assumes the code would be smaller than the data saved. -<li> <code>__mp_bases</code> field <code>big_base_inverted</code> is only used - if <code>USE_PREINV_DIVREM_1</code> is true, and could be omitted - otherwise, to save space. -<li> <code>mpz_get_str</code>, <code>mtox</code>: For power-of-2 bases, which - are of course fast, it seems a little silly to make a second pass over - the <code>mpn_get_str</code> output to convert to ASCII. Perhaps combine - that with the bit extractions. -<li> <code>mpz_gcdext</code>: If the caller requests only the S cofactor (of - A), and A<B, then the code ends up generating the cofactor T (of B) and - deriving S from that. Perhaps it'd be possible to arrange to get S in - the first place by calling <code>mpn_gcdext</code> with A+B,B. This - might only be an advantage if A and B are about the same size. -<li> <code>mpz_n_pow_ui</code> does a good job with small bases and stripping - powers of 2, but it's perhaps a bit too complicated for what it gains. - The simpler <code>mpn_pow_1</code> is a little faster on small exponents. - (Note some of the ugliness in <code>mpz_n_pow_ui</code> is due to - supporting <code>mpn_mul_2</code>.) - <br> - Perhaps the stripping of 2s in <code>mpz_n_pow_ui</code> should be - confined to single limb operands for simplicity and since that's where - the greatest gain would be. - <br> - Ideally <code>mpn_pow_1</code> and <code>mpz_n_pow_ui</code> would be - merged. The reason <code>mpz_n_pow_ui</code> writes to an - <code>mpz_t</code> is that its callers leave it to make a good estimate - of the result size. Callers of <code>mpn_pow_1</code> already know the - size by separate means (<code>mp_bases</code>). -<li> <code>mpz_invert</code> should call <code>mpn_gcdext</code> directly. -</ul> - - -<h4>Machine Dependent Optimization</h4> -<ul> -<li> <code>invert_limb</code> on various processors might benefit from the - little Newton iteration done for alpha and ia64. -<li> Alpha 21264: <code>mpn_addlsh1_n</code> could be implemented with - <code>mpn_addmul_1</code>, since that code at 3.5 is a touch faster than - a separate <code>lshift</code> and <code>add_n</code> at - 1.75+2.125=3.875. Or very likely some specific <code>addlsh1_n</code> - code could beat both. -<li> Alpha 21264: Improve feed-in code for <code>mpn_mul_1</code>, - <code>mpn_addmul_1</code>, and <code>mpn_submul_1</code>. -<li> Alpha 21164: Rewrite <code>mpn_mul_1</code>, <code>mpn_addmul_1</code>, - and <code>mpn_submul_1</code> for the 21164. This should use both integer - multiplies and floating-point multiplies. For the floating-point - operations, the single-limb multiplier should be split into three 21-bit - chunks, or perhaps even better in four 16-bit chunks. Probably possible - to reach 9 cycles/limb. -<li> Alpha: GCC 3.4 will introduce <code>__builtin_ctzl</code>, - <code>__builtin_clzl</code> and <code>__builtin_popcountl</code> using - the corresponding CIX <code>ct</code> instructions, and - <code>__builtin_alpha_cmpbge</code>. These should give GCC more - information about scheduling etc than the <code>asm</code> blocks - currently used in longlong.h and gmp-impl.h. -<li> Alpha Unicos: Apparently there's no <code>alloca</code> on this system, - making <code>configure</code> choose the slower - <code>malloc-reentrant</code> allocation method. Is there a better way? - Maybe variable-length arrays per notes below. -<li> Alpha Unicos 21164, 21264: <code>.align</code> is not used since it pads - with garbage. Does the code get the intended slotting required for the - claimed speeds? <code>.align</code> at the start of a function would - presumably be safe no matter how it pads. -<li> ARM V5: <code>count_leading_zeros</code> can use the <code>clz</code> - instruction. For GCC 3.4 and up, do this via <code>__builtin_clzl</code> - since then gcc knows it's "predicable". -<li> Itanium: GCC 3.4 introduces <code>__builtin_popcount</code> which can be - used instead of an <code>asm</code> block. The builtin should give gcc - more opportunities for scheduling, bundling and predication. - <code>__builtin_ctz</code> similarly (it just uses popcount as per - current longlong.h). -<li> UltraSPARC/64: Optimize <code>mpn_mul_1</code>, <code>mpn_addmul_1</code>, - for s2 < 2^32 (or perhaps for any zero 16-bit s2 chunk). Not sure how - much this can improve the speed, though, since the symmetry that we rely - on is lost. Perhaps we can just gain cycles when s2 < 2^16, or more - accurately, when two 16-bit s2 chunks which are 16 bits apart are zero. -<li> UltraSPARC/64: Write native <code>mpn_submul_1</code>, analogous to - <code>mpn_addmul_1</code>. -<li> UltraSPARC/64: Write <code>umul_ppmm</code>. Using four - "<code>mulx</code>"s either with an asm block or via the generic C code is - about 90 cycles. Try using fp operations, and also try using karatsuba - for just three "<code>mulx</code>"s. -<li> UltraSPARC/32: Rewrite <code>mpn_lshift</code>, <code>mpn_rshift</code>. - Will give 2 cycles/limb. Trivial modifications of mpn/sparc64 should do. -<li> UltraSPARC/32: Write special mpn_Xmul_1 loops for s2 < 2^16. -<li> UltraSPARC/32: Use <code>mulx</code> for <code>umul_ppmm</code> if - possible (see commented out code in longlong.h). This is unlikely to - save more than a couple of cycles, so perhaps isn't worth bothering with. -<li> UltraSPARC/32: On Solaris gcc doesn't give us <code>__sparc_v9__</code> - or anything to indicate V9 support when -mcpu=v9 is selected. See - gcc/config/sol2-sld-64.h. Will need to pass something through from - ./configure to select the right code in longlong.h. (Currently nothing - is lost because <code>mulx</code> for multiplying is commented out.) -<li> UltraSPARC/32: <code>mpn_divexact_1</code> and - <code>mpn_modexact_1c_odd</code> can use a 64-bit inverse and take - 64-bits at a time from the dividend, as per the 32-bit divisor case in - mpn/sparc64/mode1o.c. This must be done in assembler, since the full - 64-bit registers (<code>%gN</code>) are not available from C. -<li> UltraSPARC/32: <code>mpn_divexact_by3c</code> can work 64-bits at a time - using <code>mulx</code>, in assembler. This would be the same as for - sparc64. -<li> UltraSPARC: <code>binvert_limb</code> might save a few cycles from - masking down to just the useful bits at each point in the calculation, - since <code>mulx</code> speed depends on the highest bit set. Either - explicit masks or small types like <code>short</code> and - <code>int</code> ought to work. -<li> Sparc64 HAL R1 <code>popc</code>: This chip reputedly implements - <code>popc</code> properly (see gcc sparc.md). Would need to recognise - it as <code>sparchalr1</code> or something in configure / config.sub / - config.guess. <code>popc_limb</code> in gmp-impl.h could use this (per - commented out code). <code>count_trailing_zeros</code> could use it too. -<li> PA64: Improve <code>mpn_addmul_1</code>, <code>mpn_submul_1</code>, and - <code>mpn_mul_1</code>. The current code runs at 11 cycles/limb. It - should be possible to saturate the cache, which will happen at 8 - cycles/limb (7.5 for mpn_mul_1). Write special loops for s2 < 2^32; - it should be possible to make them run at about 5 cycles/limb. -<li> PPC601: See which of the power or powerpc32 code runs better. Currently - the powerpc32 is used, but only because it's the default for - <code>powerpc*</code>. -<li> PPC630: Rewrite <code>mpn_addmul_1</code>, <code>mpn_submul_1</code>, and - <code>mpn_mul_1</code>. Use both integer and floating-point operations, - possibly two floating-point and one integer limb per loop. Split operands - into four 16-bit chunks for fast fp operations. Should easily reach 9 - cycles/limb (using one int + one fp), but perhaps even 7 cycles/limb - (using one int + two fp). -<li> PPC630: <code>mpn_rshift</code> could do the same sort of unrolled loop - as <code>mpn_lshift</code>. Some judicious use of m4 might let the two - share source code, or with a register to control the loop direction - perhaps even share object code. -<li> Implement <code>mpn_mul_basecase</code> and <code>mpn_sqr_basecase</code> - for important machines. Helping the generic sqr_basecase.c with an - <code>mpn_sqr_diagonal</code> might be enough for some of the RISCs. -<li> POWER2/POWER2SC: Schedule <code>mpn_lshift</code>/<code>mpn_rshift</code>. - Will bring time from 1.75 to 1.25 cycles/limb. -<li> X86: Optimize non-MMX <code>mpn_lshift</code> for shifts by 1. (See - Pentium code.) -<li> X86: Good authority has it that in the past an inline <code>rep - movs</code> would upset GCC register allocation for the whole function. - Is this still true in GCC 3? It uses <code>rep movs</code> itself for - <code>__builtin_memcpy</code>. Examine the code for some simple and - complex functions to find out. Inlining <code>rep movs</code> would be - desirable, it'd be both smaller and faster. -<li> Pentium P54: <code>mpn_lshift</code> and <code>mpn_rshift</code> can come - down from 6.0 c/l to 5.5 or 5.375 by paying attention to pairing after - <code>shrdl</code> and <code>shldl</code>, see mpn/x86/pentium/README. -<li> Pentium P55 MMX: <code>mpn_lshift</code> and <code>mpn_rshift</code> - might benefit from some destination prefetching. -<li> PentiumPro: <code>mpn_divrem_1</code> might be able to use a - mul-by-inverse, hoping for maybe 30 c/l. -<li> K7: <code>mpn_lshift</code> and <code>mpn_rshift</code> might be able to - do something branch-free for unaligned startups, and shaving one insn - from the loop with alternative indexing might save a cycle. -<li> PPC32: Try using fewer registers in the current <code>mpn_lshift</code>. - The pipeline is now extremely deep, perhaps unnecessarily deep. -<li> Fujitsu VPP: Vectorize main functions, perhaps in assembly language. -<li> Fujitsu VPP: Write <code>mpn_mul_basecase</code> and - <code>mpn_sqr_basecase</code>. This should use a "vertical multiplication - method", to avoid carry propagation. splitting one of the operands in - 11-bit chunks. -<li> Pentium: <code>mpn_lshift</code> by 31 should use the special rshift - by 1 code, and vice versa <code>mpn_rshift</code> by 31 should use the - special lshift by 1. This would be best as a jump across to the other - routine, could let both live in lshift.asm and omit rshift.asm on finding - <code>mpn_rshift</code> already provided. -<li> Cray T3E: Experiment with optimization options. In particular, - -hpipeline3 seems promising. We should at least up -O to -O2 or -O3. -<li> Cray: <code>mpn_com</code> and <code>mpn_and_n</code> etc very probably - wants a pragma like <code>MPN_COPY_INCR</code>. -<li> Cray vector systems: <code>mpn_lshift</code>, <code>mpn_rshift</code>, - <code>mpn_popcount</code> and <code>mpn_hamdist</code> are nice and small - and could be inlined to avoid function calls. -<li> Cray: Variable length arrays seem to be faster than the tal-notreent.c - scheme. Not sure why, maybe they merely give the compiler more - information about aliasing (or the lack thereof). Would like to modify - <code>TMP_ALLOC</code> to use them, or introduce a new scheme. Memory - blocks wanted unconditionally are easy enough, those wanted only - sometimes are a problem. Perhaps a special size calculation to ask for a - dummy length 1 when unwanted, or perhaps an inlined subroutine - duplicating code under each conditional. Don't really want to turn - everything into a dog's dinner just because Cray don't offer an - <code>alloca</code>. -<li> Cray: <code>mpn_get_str</code> on power-of-2 bases ought to vectorize. - Does it? <code>bits_per_digit</code> and the inner loop over bits in a - limb might prevent it. Perhaps special cases for binary, octal and hex - would be worthwhile (very possibly for all processors too). -<li> S390: <code>BSWAP_LIMB_FETCH</code> looks like it could be done with - <code>lrvg</code>, as per glibc sysdeps/s390/s390-64/bits/byteswap.h. - This is only for 64-bit mode or something is it, since 32-bit mode has - other code? Also, is it worth using for <code>BSWAP_LIMB</code> too, or - would that mean a store and re-fetch? Presumably that's what comes out - in glibc. -<li> Improve <code>count_leading_zeros</code> for 64-bit machines: - <pre> - if ((x >> 32) == 0) { x <<= 32; cnt += 32; } - if ((x >> 48) == 0) { x <<= 16; cnt += 16; } - ... </pre> -<li> IRIX 6 MIPSpro compiler has an <code>__inline</code> which could perhaps - be used in <code>__GMP_EXTERN_INLINE</code>. What would be the right way - to identify suitable versions of that compiler? -<li> IRIX <code>cc</code> is rumoured to have an <code>_int_mult_upper</code> - (in <code><intrinsics.h></code> like Cray), but it didn't seem to - exist on some IRIX 6.5 systems tried. If it does actually exist - somewhere it would very likely be an improvement over a function call to - umul.asm. -<li> <code>mpn_get_str</code> final divisions by the base with - <code>udiv_qrnd_unnorm</code> could use some sort of multiply-by-inverse - on suitable machines. This ends up happening for decimal by presenting - the compiler with a run-time constant, but the same for other bases would - be good. Perhaps use could be made of the fact base<256. -<li> <code>mpn_umul_ppmm</code>, <code>mpn_udiv_qrnnd</code>: Return a - structure like <code>div_t</code> to avoid going through memory, in - particular helping RISCs that don't do store-to-load forwarding. Clearly - this is only possible if the ABI returns a structure of two - <code>mp_limb_t</code>s in registers. - <br> - On PowerPC, structures are returned in memory on AIX and Darwin. In SVR4 - they're returned in registers, except that draft SVR4 had said memory, so - it'd be prudent to check which is done. We can jam the compiler into the - right mode if we know how, since all this is purely internal to libgmp. - (gcc has an option, though of course gcc doesn't matter since we use - inline asm there.) -</ul> - -<h4>New Functionality</h4> -<ul> -<li> Maybe add <code>mpz_crr</code> (Chinese Remainder Reconstruction). -<li> Let `0b' and `0B' mean binary input everywhere. -<li> <code>mpz_init</code> and <code>mpq_init</code> could do lazy allocation. - Set <code>ALLOC(var)</code> to 0 to indicate nothing allocated, and let - <code>_mpz_realloc</code> do the initial alloc. Set - <code>z->_mp_d</code> to a dummy that <code>mpz_get_ui</code> and - similar can unconditionally fetch from. Niels Möller has had a go at - this. - <br> - The advantages of the lazy scheme would be: - <ul> - <li> Initial allocate would be the size required for the first value - stored, rather than getting 1 limb in <code>mpz_init</code> and then - more or less immediately reallocating. - <li> <code>mpz_init</code> would only store magic values in the - <code>mpz_t</code> fields, and could be inlined. - <li> A fixed initializer could even be used by applications, like - <code>mpz_t z = MPZ_INITIALIZER;</code>, which might be convenient - for globals. - </ul> - The advantages of the current scheme are: - <ul> - <li> <code>mpz_set_ui</code> and other similar routines needn't check the - size allocated and can just store unconditionally. - <li> <code>mpz_set_ui</code> and perhaps others like - <code>mpz_tdiv_r_ui</code> and a prospective - <code>mpz_set_ull</code> could be inlined. - </ul> -<li> Add <code>mpf_out_raw</code> and <code>mpf_inp_raw</code>. Make sure - format is portable between 32-bit and 64-bit machines, and between - little-endian and big-endian machines. A format which MPFR can use too - would be good. -<li> <code>mpn_and_n</code> ... <code>mpn_copyd</code>: Perhaps make the mpn - logops and copys available in gmp.h, either as library functions or - inlines, with the availability of library functions instantiated in the - generated gmp.h at build time. -<li> <code>mpz_set_str</code> etc variants taking string lengths rather than - null-terminators. -<li> <code>mpz_andn</code>, <code>mpz_iorn</code>, <code>mpz_nand</code>, - <code>mpz_nior</code>, <code>mpz_xnor</code> might be useful additions, - if they could share code with the current such functions (which should be - possible). -<li> <code>mpz_and_ui</code> etc might be of use sometimes. Suggested by - Niels Möller. -<li> <code>mpf_set_str</code> and <code>mpf_inp_str</code> could usefully - accept 0x, 0b etc when base==0. Perhaps the exponent could default to - decimal in this case, with a further 0x, 0b etc allowed there. - Eg. 0xFFAA@0x5A. A leading "0" for octal would match the integers, but - probably something like "0.123" ought not mean octal. -<li> <code>GMP_LONG_LONG_LIMB</code> or some such could become a documented - feature of gmp.h, so applications could know whether to - <code>printf</code> a limb using <code>%lu</code> or <code>%Lu</code>. -<li> <code>GMP_PRIdMP_LIMB</code> and similar defines following C99 - <inttypes.h> might be of use to applications printing limbs. But - if <code>GMP_LONG_LONG_LIMB</code> or whatever is added then perhaps this - can easily enough be left to applications. -<li> <code>gmp_printf</code> could accept <code>%b</code> for binary output. - It'd be nice if it worked for plain <code>int</code> etc too, not just - <code>mpz_t</code> etc. -<li> <code>gmp_printf</code> in fact could usefully accept an arbitrary base, - for both integer and float conversions. A base either in the format - string or as a parameter with <code>*</code> should be allowed. Maybe - <code>&13b</code> (b for base) or something like that. -<li> <code>gmp_printf</code> could perhaps accept <code>mpq_t</code> for float - conversions, eg. <code>"%.4Qf"</code>. This would be merely for - convenience, but still might be useful. Rounding would be the same as - for an <code>mpf_t</code> (ie. currently round-to-nearest, but not - actually documented). Alternately, perhaps a separate - <code>mpq_get_str_point</code> or some such might be more use. Suggested - by Pedro Gimeno. -<li> <code>mpz_rscan0</code> or <code>mpz_revscan0</code> or some such - searching towards the low end of an integer might match - <code>mpz_scan0</code> nicely. Likewise for <code>scan1</code>. - Suggested by Roberto Bagnara. -<li> <code>mpz_bit_subset</code> or some such to test whether one integer is a - bitwise subset of another might be of use. Some sort of return value - indicating whether it's a proper or non-proper subset would be good and - wouldn't cost anything in the implementation. Suggested by Roberto - Bagnara. -<li> <code>mpf_get_ld</code>, <code>mpf_set_ld</code>: Conversions between - <code>mpf_t</code> and <code>long double</code>, suggested by Dan - Christensen. Other <code>long double</code> routines might be desirable - too, but <code>mpf</code> would be a start. - <br> - <code>long double</code> is an ANSI-ism, so everything involving it would - need to be suppressed on a K&R compiler. - <br> - There'd be some work to be done by <code>configure</code> to recognise - the format in use, MPFR has a start on this. Often <code>long - double</code> is the same as <code>double</code>, which is easy but - pretty pointless. A single float format detector macro could look at - <code>double</code> then <code>long double</code> - <br> - Sometimes there's a compiler option for the size of a <code>long - double</code>, eg. xlc on AIX can use either 64-bit or 128-bit. It's - probably simplest to regard this as a compiler compatibility issue, and - leave it to users or sysadmins to ensure application and library code is - built the same. -<li> <code>mpz_sqrt_if_perfect_square</code>: When - <code>mpz_perfect_square_p</code> does its tests it calculates a square - root and then discards it. For some applications it might be useful to - return that root. Suggested by Jason Moxham. -<li> <code>mpz_get_ull</code>, <code>mpz_set_ull</code>, - <code>mpz_get_sll</code>, <code>mpz_get_sll</code>: Conversions for - <code>long long</code>. These would aid interoperability, though a - mixture of GMP and <code>long long</code> would probably not be too - common. Since <code>long long</code> is not always available (it's in - C99 and GCC though), disadvantages of using <code>long long</code> in - libgmp.a would be - <ul> - <li> Library contents vary according to the build compiler. - <li> gmp.h would need an ugly <code>#ifdef</code> block to decide if the - application compiler could take the <code>long long</code> - prototypes. - <li> Some sort of <code>LIBGMP_HAS_LONGLONG</code> might be wanted to - indicate whether the functions are available. (Applications using - autoconf could probe the library too.) - </ul> - It'd be possible to defer the need for <code>long long</code> to - application compile time, by having something like - <code>mpz_set_2ui</code> called with two halves of a <code>long - long</code>. Disadvantages of this would be, - <ul> - <li> Bigger code in the application, though perhaps not if a <code>long - long</code> is normally passed as two halves anyway. - <li> <code>mpz_get_ull</code> would be a rather big inline, or would have - to be two function calls. - <li> <code>mpz_get_sll</code> would be a worse inline, and would put the - treatment of <code>-0x10..00</code> into applications (see - <code>mpz_get_si</code> correctness above). - <li> Although having libgmp.a independent of the build compiler is nice, - it sort of sacrifices the capabilities of a good compiler to - uniformity with inferior ones. - </ul> - Plain use of <code>long long</code> is probably the lesser evil, if only - because it makes best use of gcc. In fact perhaps it would suffice to - guarantee <code>long long</code> conversions only when using GCC for both - application and library. That would cover free software, and we can - worry about selected vendor compilers later. - <br> - In C++ the situation is probably clearer, we demand fairly recent C++ so - <code>long long</code> should be available always. We'd probably prefer - to have the C and C++ the same in respect of <code>long long</code> - support, but it would be possible to have it unconditionally in gmpxx.h, - by some means or another. -<li> <code>mpz_strtoz</code> parsing the same as <code>strtol</code>. - Suggested by Alexander Kruppa. -</ul> - - -<h4>Configuration</h4> - -<ul> -<li> Alpha ev7, ev79: Add code to config.guess to detect these. Believe ev7 - will be "3-1307" in the current switch, but need to verify that. (On - OSF, current configfsf.guess identifies ev7 using psrinfo, we need to do - it ourselves for other systems.) -<li> Alpha OSF: Libtool (version 1.5) doesn't seem to recognise this system is - "pic always" and ends up running gcc twice with the same options. This - is wasteful, but harmless. Perhaps a newer libtool will be better. -<li> ARM: <code>umul_ppmm</code> in longlong.h always uses <code>umull</code>, - but is that available only for M series chips or some such? Perhaps it - should be configured in some way. -<li> HPPA: config.guess should recognize 7000, 7100, 7200, and 8x00. -<li> HPPA: gcc 3.2 introduces a <code>-mschedule=7200</code> etc parameter, - which could be driven by an exact hppa cpu type. -<li> Mips: config.guess should say mipsr3000, mipsr4000, mipsr10000, etc. - "hinv -c processor" gives lots of information on Irix. Standard - config.guess appends "el" to indicate endianness, but - <code>AC_C_BIGENDIAN</code> seems the best way to handle that for GMP. -<li> PowerPC: The function descriptor nonsense for AIX is currently driven by - <code>*-*-aix*</code>. It might be more reliable to do some sort of - feature test, examining the compiler output perhaps. It might also be - nice to merge the aix.m4 files into powerpc-defs.m4. -<li> config.m4 is generated only by the configure script, it won't be - regenerated by config.status. Creating it as an <code>AC_OUTPUT</code> - would work, but it might upset "make" to have things like <code>L$</code> - get into the Makefiles through <code>AC_SUBST</code>. - <code>AC_CONFIG_COMMANDS</code> would be the alternative. With some - careful m4 quoting the <code>changequote</code> calls might not be - needed, which might free up the order in which things had to be output. -<li> Automake: Latest automake has a <code>CCAS</code>, <code>CCASFLAGS</code> - scheme. Though we probably wouldn't be using its assembler support we - could try to use those variables in compatible ways. -<li> <code>GMP_LDFLAGS</code> could probably be done with plain - <code>LDFLAGS</code> already used by automake for all linking. But with - a bit of luck the next libtool will pass pretty much all - <code>CFLAGS</code> through to the compiler when linking, making - <code>GMP_LDFLAGS</code> unnecessary. -<li> mpn/Makeasm.am uses <code>-c</code> and <code>-o</code> together in the - .S and .asm rules, but apparently that isn't completely portable (there's - an autoconf <code>AC_PROG_CC_C_O</code> test for it). So far we've not - had problems, but perhaps the rules could be rewritten to use "foo.s" as - the temporary, or to do a suitable "mv" of the result. The only danger - from using foo.s would be if a compile failed and the temporary foo.s - then looked like the primary source. Hopefully if the - <code>SUFFIXES</code> are ordered to have .S and .asm ahead of .s that - wouldn't happen. Might need to check. -</ul> - - -<h4>Random Numbers</h4> -<ul> -<li> <code>_gmp_rand</code> is not particularly fast on the linear - congruential algorithm and could stand various improvements. - <ul> - <li> Make a second seed area within <code>gmp_randstate_t</code> (or - <code>_mp_algdata</code> rather) to save some copying. - <li> Make a special case for a single limb <code>2exp</code> modulus, to - avoid <code>mpn_mul</code> calls. Perhaps the same for two limbs. - <li> Inline the <code>lc</code> code, to avoid a function call and - <code>TMP_ALLOC</code> for every chunk. - <li> Perhaps the <code>2exp</code> and general LC cases should be split, - for clarity (if the general case is retained). - </ul> -<li> <code>gmp_randstate_t</code> used for parameters perhaps should become - <code>gmp_randstate_ptr</code> the same as other types. -<li> Some of the empirical randomness tests could be included in a "make - check". They ought to work everywhere, for a given seed at least. -</ul> - - -<h4>C++</h4> -<ul> -<li> <code>mpz_class(string)</code>, etc: Use the C++ global locale to - identify whitespace. - <br> - <code>mpf_class(string)</code>: Use the C++ global locale decimal point, - rather than the C one. - <br> - Consider making these variant <code>mpz_set_str</code> etc forms - available for <code>mpz_t</code> too, not just <code>mpz_class</code> - etc. -<li> <code>mpq_class operator+=</code>: Don't emit an unnecessary - <code>mpq_set(q,q)</code> before <code>mpz_addmul</code> etc. -<li> Put various bits of gmpxx.h into libgmpxx, to avoid excessive inlining. - Candidates for this would be, - <ul> - <li> <code>mpz_class(const char *)</code>, etc: since they're normally - not fast anyway, and we can hide the exception <code>throw</code>. - <li> <code>mpz_class(string)</code>, etc: to hide the <code>cstr</code> - needed to get to the C conversion function. - <li> <code>mpz_class string, char*</code> etc constructors: likewise to - hide the throws and conversions. - <li> <code>mpz_class::get_str</code>, etc: to hide the <code>char*</code> - to <code>string</code> conversion and free. Perhaps - <code>mpz_get_str</code> can write directly into a - <code>string</code>, to avoid copying. - <br> - Consider making such <code>string</code> returning variants - available for use with plain <code>mpz_t</code> etc too. - </ul> -</ul> - -<h4>Miscellaneous</h4> -<ul> -<li> <code>mpz_gcdext</code> and <code>mpn_gcdext</code> ought to document - what range of values the generated cofactors can take, and preferably - ensure the definition uniquely specifies the cofactors for given inputs. - A basic extended Euclidean algorithm or multi-step variant leads to - |x|<|b| and |y|<|a| or something like that, but there's probably - two solutions under just those restrictions. -<li> demos/factorize.c: use <code>mpz_divisible_ui_p</code> rather than - <code>mpz_tdiv_qr_ui</code>. (Of course dividing multiple primes at a - time would be better still.) -<li> The various test programs use quite a bit of the main - <code>libgmp</code>. This establishes good cross-checks, but it might be - better to use simple reference routines where possible. Where it's not - possible some attention could be paid to the order of the tests, so a - <code>libgmp</code> routine is only used for tests once it seems to be - good. -<li> <code>MUL_FFT_THRESHOLD</code> etc: the FFT thresholds should allow a - return to a previous k at certain sizes. This arises basically due to - the step effect caused by size multiples effectively used for each k. - Looking at a graph makes it fairly clear. -<li> <code>__gmp_doprnt_mpf</code> does a rather unattractive round-to-nearest - on the string returned by <code>mpf_get_str</code>. Perhaps some variant - of <code>mpf_get_str</code> could be made which would better suit. -</ul> - - -<h4>Aids to Development</h4> -<ul> -<li> Add <code>ASSERT</code>s at the start of each user-visible mpz/mpq/mpf - function to check the validity of each <code>mp?_t</code> parameter, in - particular to check they've been <code>mp?_init</code>ed. This might - catch elementary mistakes in user programs. Care would need to be taken - over <code>MPZ_TMP_INIT</code>ed variables used internally. If nothing - else then consistency checks like size<=alloc, ptr not - <code>NULL</code> and ptr+size not wrapping around the address space, - would be possible. A more sophisticated scheme could track - <code>_mp_d</code> pointers and ensure only a valid one is used. Such a - scheme probably wouldn't be reentrant, not without some help from the - system. -<li> tune/time.c could try to determine at runtime whether - <code>getrusage</code> and <code>gettimeofday</code> are reliable. - Currently we pretend in configure that the dodgy m68k netbsd 1.4.1 - <code>getrusage</code> doesn't exist. If a test might take a long time - to run then perhaps cache the result in a file somewhere. -<li> tune/time.c could choose the default precision based on the - <code>speed_unittime</code> determined, independent of the method in use. -<li> Cray vector systems: CPU frequency could be determined from - <code>sysconf(_SC_CLK_TCK)</code>, since it seems to be clock cycle - based. Is this true for all Cray systems? Would like some documentation - or something to confirm. -</ul> - - -<h4>Documentation</h4> -<ul> -<li> <code>mpz_inp_str</code> (etc) doesn't say when it stops reading digits. -<li> <code>mpn_get_str</code> isn't terribly clear about how many digits it - produces. It'd probably be possible to say at most one leading zero, - which is what both it and <code>mpz_get_str</code> currently do. But - want to be careful not to bind ourselves to something that might not suit - another implementation. -<li> <code>va_arg</code> doesn't do the right thing with <code>mpz_t</code> - etc directly, but instead needs a pointer type like <code>MP_INT*</code>. - It'd be good to show how to do this, but we'd either need to document - <code>mpz_ptr</code> and friends, or perhaps fallback on something - slightly nasty with <code>void*</code>. -</ul> - - -<h4>Bright Ideas</h4> - -<p> The following may or may not be feasible, and aren't likely to get done in the -near future, but are at least worth thinking about. - -<ul> -<li> Reorganize longlong.h so that we can inline the operations even for the - system compiler. When there is no such compiler feature, make calls to - stub functions. Write such stub functions for as many machines as - possible. -<li> longlong.h could declare when it's using, or would like to use, - <code>mpn_umul_ppmm</code>, and the corresponding umul.asm file could be - included in libgmp only in that case, the same as is effectively done for - <code>__clz_tab</code>. Likewise udiv.asm and perhaps cntlz.asm. This - would only be a very small space saving, so perhaps not worth the - complexity. -<li> longlong.h could be built at configure time by concatenating or - #including fragments from each directory in the mpn path. This would - select CPU specific macros the same way as CPU specific assembler code. - Code used would no longer depend on cpp predefines, and the current - nested conditionals could be flattened out. -<li> <code>mpz_get_si</code> returns 0x80000000 for -0x100000000, whereas it's - sort of supposed to return the low 31 (or 63) bits. But this is - undocumented, and perhaps not too important. -<li> <code>mpz_init_set*</code> and <code>mpz_realloc</code> could allocate - say an extra 16 limbs over what's needed, so as to reduce the chance of - having to do a reallocate if the <code>mpz_t</code> grows a bit more. - This could only be an option, since it'd badly bloat memory usage in - applications using many small values. -<li> <code>mpq</code> functions could perhaps check for numerator or - denominator equal to 1, on the assumption that integers or - denominator-only values might be expected to occur reasonably often. -<li> <code>count_trailing_zeros</code> is used on more or less uniformly - distributed numbers in a couple of places. For some CPUs - <code>count_trailing_zeros</code> is slow and it's probably worth handling - the frequently occurring 0 to 2 trailing zeros cases specially. -<li> <code>mpf_t</code> might like to let the exponent be undefined when - size==0, instead of requiring it 0 as now. It should be possible to do - size==0 tests before paying attention to the exponent. The advantage is - not needing to set exp in the various places a zero result can arise, - which avoids some tedium but is otherwise perhaps not too important. - Currently <code>mpz_set_f</code> and <code>mpf_cmp_ui</code> depend on - exp==0, maybe elsewhere too. -<li> <code>__gmp_allocate_func</code>: Could use GCC <code>__attribute__ - ((malloc))</code> on this, though don't know if it'd do much. GCC 3.0 - allows that attribute on functions, but not function pointers (see info - node "Attribute Syntax"), so would need a new autoconf test. This can - wait until there's a GCC that supports it. -<li> <code>mpz_add_ui</code> contains two <code>__GMPN_COPY</code>s, one from - <code>mpn_add_1</code> and one from <code>mpn_sub_1</code>. If those two - routines were opened up a bit maybe that code could be shared. When a - copy needs to be done there's no carry to append for the add, and if the - copy is non-empty no high zero for the sub. -</ul> - - -<h4>Old and Obsolete Stuff</h4> - -<p> The following tasks apply to chips or systems that are old and/or obsolete. -It's unlikely anything will be done about them unless anyone is actively using -them. - -<ul> -<li> Sparc32: The integer based udiv_nfp.asm used to be selected by - <code>configure --nfp</code> but that option is gone now that autoconf is - used. The file could go somewhere suitable in the mpn search if any - chips might benefit from it, though it's possible we don't currently - differentiate enough exact cpu types to do this properly. -<li> VAX D and G format <code>double</code> floats are straightforward and - could perhaps be handled directly in <code>__gmp_extract_double</code> - and maybe in <code>mpn_get_d</code>, rather than falling back on the - generic code. (Both formats are detected by <code>configure</code>.) -</ul> - - -<hr> - -</body> -</html> - -<!-- -Local variables: -eval: (add-hook 'write-file-hooks 'time-stamp) -time-stamp-start: "This file current as of " -time-stamp-format: "%:d %3b %:y" -time-stamp-end: "\\." -time-stamp-line-limit: 50 -End: ---> diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/texinfo.tex b/src/plugins/e-acsl/contrib/libgmp/doc/texinfo.tex deleted file mode 100644 index 85f184cc4cbbe2bd2bd347079cd5248212acaea8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/texinfo.tex +++ /dev/null @@ -1,10079 +0,0 @@ -% texinfo.tex -- TeX macros to handle Texinfo files. -% -% Load plain if necessary, i.e., if running under initex. -\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi -% -\def\texinfoversion{2013-02-01.11} -% -% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, -% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, -% 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. -% -% This texinfo.tex file is free software: you can redistribute it and/or -% modify it under the terms of the GNU General Public License as -% published by the Free Software Foundation, either version 3 of the -% License, or (at your option) any later version. -% -% This texinfo.tex file is distributed in the hope that it will be -% useful, but WITHOUT ANY WARRANTY; without even the implied warranty -% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -% General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program. If not, see <http://www.gnu.org/licenses/>. -% -% As a special exception, when this file is read by TeX when processing -% a Texinfo source document, you may use the result without -% restriction. This Exception is an additional permission under section 7 -% of the GNU General Public License, version 3 ("GPLv3"). -% -% Please try the latest version of texinfo.tex before submitting bug -% reports; you can get the latest version from: -% http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or -% http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or -% http://www.gnu.org/software/texinfo/ (the Texinfo home page) -% The texinfo.tex in any given distribution could well be out -% of date, so if that's what you're using, please check. -% -% Send bug reports to bug-texinfo@gnu.org. Please include including a -% complete document in each bug report with which we can reproduce the -% problem. Patches are, of course, greatly appreciated. -% -% To process a Texinfo manual with TeX, it's most reliable to use the -% texi2dvi shell script that comes with the distribution. For a simple -% manual foo.texi, however, you can get away with this: -% tex foo.texi -% texindex foo.?? -% tex foo.texi -% tex foo.texi -% dvips foo.dvi -o # or whatever; this makes foo.ps. -% The extra TeX runs get the cross-reference information correct. -% Sometimes one run after texindex suffices, and sometimes you need more -% than two; texi2dvi does it as many times as necessary. -% -% It is possible to adapt texinfo.tex for other languages, to some -% extent. You can get the existing language-specific files from the -% full Texinfo distribution. -% -% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. - - -\message{Loading texinfo [version \texinfoversion]:} - -% If in a .fmt file, print the version number -% and turn on active characters that we couldn't do earlier because -% they might have appeared in the input file name. -\everyjob{\message{[Texinfo version \texinfoversion]}% - \catcode`+=\active \catcode`\_=\active} - -\chardef\other=12 - -% We never want plain's \outer definition of \+ in Texinfo. -% For @tex, we can use \tabalign. -\let\+ = \relax - -% Save some plain tex macros whose names we will redefine. -\let\ptexb=\b -\let\ptexbullet=\bullet -\let\ptexc=\c -\let\ptexcomma=\, -\let\ptexdot=\. -\let\ptexdots=\dots -\let\ptexend=\end -\let\ptexequiv=\equiv -\let\ptexexclam=\! -\let\ptexfootnote=\footnote -\let\ptexgtr=> -\let\ptexhat=^ -\let\ptexi=\i -\let\ptexindent=\indent -\let\ptexinsert=\insert -\let\ptexlbrace=\{ -\let\ptexless=< -\let\ptexnewwrite\newwrite -\let\ptexnoindent=\noindent -\let\ptexplus=+ -\let\ptexraggedright=\raggedright -\let\ptexrbrace=\} -\let\ptexslash=\/ -\let\ptexstar=\* -\let\ptext=\t -\let\ptextop=\top -{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode - -% If this character appears in an error message or help string, it -% starts a new line in the output. -\newlinechar = `^^J - -% Use TeX 3.0's \inputlineno to get the line number, for better error -% messages, but if we're using an old version of TeX, don't do anything. -% -\ifx\inputlineno\thisisundefined - \let\linenumber = \empty % Pre-3.0. -\else - \def\linenumber{l.\the\inputlineno:\space} -\fi - -% Set up fixed words for English if not already set. -\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi -\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi -\ifx\putworderror\undefined \gdef\putworderror{error}\fi -\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi -\ifx\putwordin\undefined \gdef\putwordin{in}\fi -\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi -\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi -\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi -\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi -\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi -\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi -\ifx\putwordof\undefined \gdef\putwordof{of}\fi -\ifx\putwordon\undefined \gdef\putwordon{on}\fi -\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi -\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi -\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi -\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi -\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi -\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi -\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi -% -\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi -\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi -\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi -\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi -\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi -\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi -\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi -\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi -\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi -\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi -\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi -\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi -% -\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi -\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi -\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi -\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi -\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi - -% Since the category of space is not known, we have to be careful. -\chardef\spacecat = 10 -\def\spaceisspace{\catcode`\ =\spacecat} - -% sometimes characters are active, so we need control sequences. -\chardef\ampChar = `\& -\chardef\colonChar = `\: -\chardef\commaChar = `\, -\chardef\dashChar = `\- -\chardef\dotChar = `\. -\chardef\exclamChar= `\! -\chardef\hashChar = `\# -\chardef\lquoteChar= `\` -\chardef\questChar = `\? -\chardef\rquoteChar= `\' -\chardef\semiChar = `\; -\chardef\slashChar = `\/ -\chardef\underChar = `\_ - -% Ignore a token. -% -\def\gobble#1{} - -% The following is used inside several \edef's. -\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} - -% Hyphenation fixes. -\hyphenation{ - Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script - ap-pen-dix bit-map bit-maps - data-base data-bases eshell fall-ing half-way long-est man-u-script - man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm - par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces - spell-ing spell-ings - stand-alone strong-est time-stamp time-stamps which-ever white-space - wide-spread wrap-around -} - -% Margin to add to right of even pages, to left of odd pages. -\newdimen\bindingoffset -\newdimen\normaloffset -\newdimen\pagewidth \newdimen\pageheight - -% For a final copy, take out the rectangles -% that mark overfull boxes (in case you have decided -% that the text looks ok even though it passes the margin). -% -\def\finalout{\overfullrule=0pt } - -% Sometimes it is convenient to have everything in the transcript file -% and nothing on the terminal. We don't just call \tracingall here, -% since that produces some useless output on the terminal. We also make -% some effort to order the tracing commands to reduce output in the log -% file; cf. trace.sty in LaTeX. -% -\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% -\def\loggingall{% - \tracingstats2 - \tracingpages1 - \tracinglostchars2 % 2 gives us more in etex - \tracingparagraphs1 - \tracingoutput1 - \tracingmacros2 - \tracingrestores1 - \showboxbreadth\maxdimen \showboxdepth\maxdimen - \ifx\eTeXversion\thisisundefined\else % etex gives us more logging - \tracingscantokens1 - \tracingifs1 - \tracinggroups1 - \tracingnesting2 - \tracingassigns1 - \fi - \tracingcommands3 % 3 gives us more in etex - \errorcontextlines16 -}% - -% @errormsg{MSG}. Do the index-like expansions on MSG, but if things -% aren't perfect, it's not the end of the world, being an error message, -% after all. -% -\def\errormsg{\begingroup \indexnofonts \doerrormsg} -\def\doerrormsg#1{\errmessage{#1}} - -% add check for \lastpenalty to plain's definitions. If the last thing -% we did was a \nobreak, we don't want to insert more space. -% -\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount - \removelastskip\penalty-50\smallskip\fi\fi} -\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount - \removelastskip\penalty-100\medskip\fi\fi} -\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount - \removelastskip\penalty-200\bigskip\fi\fi} - -% Do @cropmarks to get crop marks. -% -\newif\ifcropmarks -\let\cropmarks = \cropmarkstrue -% -% Dimensions to add cropmarks at corners. -% Added by P. A. MacKay, 12 Nov. 1986 -% -\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines -\newdimen\cornerlong \cornerlong=1pc -\newdimen\cornerthick \cornerthick=.3pt -\newdimen\topandbottommargin \topandbottommargin=.75in - -% Output a mark which sets \thischapter, \thissection and \thiscolor. -% We dump everything together because we only have one kind of mark. -% This works because we only use \botmark / \topmark, not \firstmark. -% -% A mark contains a subexpression of the \ifcase ... \fi construct. -% \get*marks macros below extract the needed part using \ifcase. -% -% Another complication is to let the user choose whether \thischapter -% (\thissection) refers to the chapter (section) in effect at the top -% of a page, or that at the bottom of a page. The solution is -% described on page 260 of The TeXbook. It involves outputting two -% marks for the sectioning macros, one before the section break, and -% one after. I won't pretend I can describe this better than DEK... -\def\domark{% - \toks0=\expandafter{\lastchapterdefs}% - \toks2=\expandafter{\lastsectiondefs}% - \toks4=\expandafter{\prevchapterdefs}% - \toks6=\expandafter{\prevsectiondefs}% - \toks8=\expandafter{\lastcolordefs}% - \mark{% - \the\toks0 \the\toks2 - \noexpand\or \the\toks4 \the\toks6 - \noexpand\else \the\toks8 - }% -} -% \topmark doesn't work for the very first chapter (after the title -% page or the contents), so we use \firstmark there -- this gets us -% the mark with the chapter defs, unless the user sneaks in, e.g., -% @setcolor (or @url, or @link, etc.) between @contents and the very -% first @chapter. -\def\gettopheadingmarks{% - \ifcase0\topmark\fi - \ifx\thischapter\empty \ifcase0\firstmark\fi \fi -} -\def\getbottomheadingmarks{\ifcase1\botmark\fi} -\def\getcolormarks{\ifcase2\topmark\fi} - -% Avoid "undefined control sequence" errors. -\def\lastchapterdefs{} -\def\lastsectiondefs{} -\def\prevchapterdefs{} -\def\prevsectiondefs{} -\def\lastcolordefs{} - -% Main output routine. -\chardef\PAGE = 255 -\output = {\onepageout{\pagecontents\PAGE}} - -\newbox\headlinebox -\newbox\footlinebox - -% \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions, but you have to call it yourself. -\def\onepageout#1{% - \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi - % - \ifodd\pageno \advance\hoffset by \bindingoffset - \else \advance\hoffset by -\bindingoffset\fi - % - % Do this outside of the \shipout so @code etc. will be expanded in - % the headline as they should be, not taken literally (outputting ''code). - \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi - \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% - \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi - \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% - % - {% - % Have to do this stuff outside the \shipout because we want it to - % take effect in \write's, yet the group defined by the \vbox ends - % before the \shipout runs. - % - \indexdummies % don't expand commands in the output. - \normalturnoffactive % \ in index entries must not stay \, e.g., if - % the page break happens to be in the middle of an example. - % We don't want .vr (or whatever) entries like this: - % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} - % "\acronym" won't work when it's read back in; - % it needs to be - % {\code {{\tt \backslashcurfont }acronym} - \shipout\vbox{% - % Do this early so pdf references go to the beginning of the page. - \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi - % - \ifcropmarks \vbox to \outervsize\bgroup - \hsize = \outerhsize - \vskip-\topandbottommargin - \vtop to0pt{% - \line{\ewtop\hfil\ewtop}% - \nointerlineskip - \line{% - \vbox{\moveleft\cornerthick\nstop}% - \hfill - \vbox{\moveright\cornerthick\nstop}% - }% - \vss}% - \vskip\topandbottommargin - \line\bgroup - \hfil % center the page within the outer (page) hsize. - \ifodd\pageno\hskip\bindingoffset\fi - \vbox\bgroup - \fi - % - \unvbox\headlinebox - \pagebody{#1}% - \ifdim\ht\footlinebox > 0pt - % Only leave this space if the footline is nonempty. - % (We lessened \vsize for it in \oddfootingyyy.) - % The \baselineskip=24pt in plain's \makefootline has no effect. - \vskip 24pt - \unvbox\footlinebox - \fi - % - \ifcropmarks - \egroup % end of \vbox\bgroup - \hfil\egroup % end of (centering) \line\bgroup - \vskip\topandbottommargin plus1fill minus1fill - \boxmaxdepth = \cornerthick - \vbox to0pt{\vss - \line{% - \vbox{\moveleft\cornerthick\nsbot}% - \hfill - \vbox{\moveright\cornerthick\nsbot}% - }% - \nointerlineskip - \line{\ewbot\hfil\ewbot}% - }% - \egroup % \vbox from first cropmarks clause - \fi - }% end of \shipout\vbox - }% end of group with \indexdummies - \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi -} - -\newinsert\margin \dimen\margin=\maxdimen - -\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} -{\catcode`\@ =11 -\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi -% marginal hacks, juha@viisa.uucp (Juha Takala) -\ifvoid\margin\else % marginal info is present - \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi -\dimen@=\dp#1\relax \unvbox#1\relax -\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi -\ifr@ggedbottom \kern-\dimen@ \vfil \fi} -} - -% Here are the rules for the cropmarks. Note that they are -% offset so that the space between them is truly \outerhsize or \outervsize -% (P. A. MacKay, 12 November, 1986) -% -\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} -\def\nstop{\vbox - {\hrule height\cornerthick depth\cornerlong width\cornerthick}} -\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} -\def\nsbot{\vbox - {\hrule height\cornerlong depth\cornerthick width\cornerthick}} - -% Parse an argument, then pass it to #1. The argument is the rest of -% the input line (except we remove a trailing comment). #1 should be a -% macro which expects an ordinary undelimited TeX argument. -% -\def\parsearg{\parseargusing{}} -\def\parseargusing#1#2{% - \def\argtorun{#2}% - \begingroup - \obeylines - \spaceisspace - #1% - \parseargline\empty% Insert the \empty token, see \finishparsearg below. -} - -{\obeylines % - \gdef\parseargline#1^^M{% - \endgroup % End of the group started in \parsearg. - \argremovecomment #1\comment\ArgTerm% - }% -} - -% First remove any @comment, then any @c comment. -\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} -\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} - -% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space. -% -% \argremovec might leave us with trailing space, e.g., -% @end itemize @c foo -% This space token undergoes the same procedure and is eventually removed -% by \finishparsearg. -% -\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} -\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} -\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% - \def\temp{#3}% - \ifx\temp\empty - % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: - \let\temp\finishparsearg - \else - \let\temp\argcheckspaces - \fi - % Put the space token in: - \temp#1 #3\ArgTerm -} - -% If a _delimited_ argument is enclosed in braces, they get stripped; so -% to get _exactly_ the rest of the line, we had to prevent such situation. -% We prepended an \empty token at the very beginning and we expand it now, -% just before passing the control to \argtorun. -% (Similarly, we have to think about #3 of \argcheckspacesY above: it is -% either the null string, or it ends with \^^M---thus there is no danger -% that a pair of braces would be stripped. -% -% But first, we have to remove the trailing space token. -% -\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} - -% \parseargdef\foo{...} -% is roughly equivalent to -% \def\foo{\parsearg\Xfoo} -% \def\Xfoo#1{...} -% -% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my -% favourite TeX trick. --kasal, 16nov03 - -\def\parseargdef#1{% - \expandafter \doparseargdef \csname\string#1\endcsname #1% -} -\def\doparseargdef#1#2{% - \def#2{\parsearg#1}% - \def#1##1% -} - -% Several utility definitions with active space: -{ - \obeyspaces - \gdef\obeyedspace{ } - - % Make each space character in the input produce a normal interword - % space in the output. Don't allow a line break at this space, as this - % is used only in environments like @example, where each line of input - % should produce a line of output anyway. - % - \gdef\sepspaces{\obeyspaces\let =\tie} - - % If an index command is used in an @example environment, any spaces - % therein should become regular spaces in the raw index file, not the - % expansion of \tie (\leavevmode \penalty \@M \ ). - \gdef\unsepspaces{\let =\space} -} - - -\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} - -% Define the framework for environments in texinfo.tex. It's used like this: -% -% \envdef\foo{...} -% \def\Efoo{...} -% -% It's the responsibility of \envdef to insert \begingroup before the -% actual body; @end closes the group after calling \Efoo. \envdef also -% defines \thisenv, so the current environment is known; @end checks -% whether the environment name matches. The \checkenv macro can also be -% used to check whether the current environment is the one expected. -% -% Non-false conditionals (@iftex, @ifset) don't fit into this, so they -% are not treated as environments; they don't open a group. (The -% implementation of @end takes care not to call \endgroup in this -% special case.) - - -% At run-time, environments start with this: -\def\startenvironment#1{\begingroup\def\thisenv{#1}} -% initialize -\let\thisenv\empty - -% ... but they get defined via ``\envdef\foo{...}'': -\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} -\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} - -% Check whether we're in the right environment: -\def\checkenv#1{% - \def\temp{#1}% - \ifx\thisenv\temp - \else - \badenverr - \fi -} - -% Environment mismatch, #1 expected: -\def\badenverr{% - \errhelp = \EMsimple - \errmessage{This command can appear only \inenvironment\temp, - not \inenvironment\thisenv}% -} -\def\inenvironment#1{% - \ifx#1\empty - outside of any environment% - \else - in environment \expandafter\string#1% - \fi -} - -% @end foo executes the definition of \Efoo. -% But first, it executes a specialized version of \checkenv -% -\parseargdef\end{% - \if 1\csname iscond.#1\endcsname - \else - % The general wording of \badenverr may not be ideal. - \expandafter\checkenv\csname#1\endcsname - \csname E#1\endcsname - \endgroup - \fi -} - -\newhelp\EMsimple{Press RETURN to continue.} - - -% Be sure we're in horizontal mode when doing a tie, since we make space -% equivalent to this in @example-like environments. Otherwise, a space -% at the beginning of a line will start with \penalty -- and -% since \penalty is valid in vertical mode, we'd end up putting the -% penalty on the vertical list instead of in the new paragraph. -{\catcode`@ = 11 - % Avoid using \@M directly, because that causes trouble - % if the definition is written into an index file. - \global\let\tiepenalty = \@M - \gdef\tie{\leavevmode\penalty\tiepenalty\ } -} - -% @: forces normal size whitespace following. -\def\:{\spacefactor=1000 } - -% @* forces a line break. -\def\*{\unskip\hfil\break\hbox{}\ignorespaces} - -% @/ allows a line break. -\let\/=\allowbreak - -% @. is an end-of-sentence period. -\def\.{.\spacefactor=\endofsentencespacefactor\space} - -% @! is an end-of-sentence bang. -\def\!{!\spacefactor=\endofsentencespacefactor\space} - -% @? is an end-of-sentence query. -\def\?{?\spacefactor=\endofsentencespacefactor\space} - -% @frenchspacing on|off says whether to put extra space after punctuation. -% -\def\onword{on} -\def\offword{off} -% -\parseargdef\frenchspacing{% - \def\temp{#1}% - \ifx\temp\onword \plainfrenchspacing - \else\ifx\temp\offword \plainnonfrenchspacing - \else - \errhelp = \EMsimple - \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% - \fi\fi -} - -% @w prevents a word break. Without the \leavevmode, @w at the -% beginning of a paragraph, when TeX is still in vertical mode, would -% produce a whole line of output instead of starting the paragraph. -\def\w#1{\leavevmode\hbox{#1}} - -% @group ... @end group forces ... to be all on one page, by enclosing -% it in a TeX vbox. We use \vtop instead of \vbox to construct the box -% to keep its height that of a normal line. According to the rules for -% \topskip (p.114 of the TeXbook), the glue inserted is -% max (\topskip - \ht (first item), 0). If that height is large, -% therefore, no glue is inserted, and the space between the headline and -% the text is small, which looks bad. -% -% Another complication is that the group might be very large. This can -% cause the glue on the previous page to be unduly stretched, because it -% does not have much material. In this case, it's better to add an -% explicit \vfill so that the extra space is at the bottom. The -% threshold for doing this is if the group is more than \vfilllimit -% percent of a page (\vfilllimit can be changed inside of @tex). -% -\newbox\groupbox -\def\vfilllimit{0.7} -% -\envdef\group{% - \ifnum\catcode`\^^M=\active \else - \errhelp = \groupinvalidhelp - \errmessage{@group invalid in context where filling is enabled}% - \fi - \startsavinginserts - % - \setbox\groupbox = \vtop\bgroup - % Do @comment since we are called inside an environment such as - % @example, where each end-of-line in the input causes an - % end-of-line in the output. We don't want the end-of-line after - % the `@group' to put extra space in the output. Since @group - % should appear on a line by itself (according to the Texinfo - % manual), we don't worry about eating any user text. - \comment -} -% -% The \vtop produces a box with normal height and large depth; thus, TeX puts -% \baselineskip glue before it, and (when the next line of text is done) -% \lineskip glue after it. Thus, space below is not quite equal to space -% above. But it's pretty close. -\def\Egroup{% - % To get correct interline space between the last line of the group - % and the first line afterwards, we have to propagate \prevdepth. - \endgraf % Not \par, as it may have been set to \lisppar. - \global\dimen1 = \prevdepth - \egroup % End the \vtop. - % \dimen0 is the vertical size of the group's box. - \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox - % \dimen2 is how much space is left on the page (more or less). - \dimen2 = \pageheight \advance\dimen2 by -\pagetotal - % if the group doesn't fit on the current page, and it's a big big - % group, force a page break. - \ifdim \dimen0 > \dimen2 - \ifdim \pagetotal < \vfilllimit\pageheight - \page - \fi - \fi - \box\groupbox - \prevdepth = \dimen1 - \checkinserts -} -% -% TeX puts in an \escapechar (i.e., `@') at the beginning of the help -% message, so this ends up printing `@group can only ...'. -% -\newhelp\groupinvalidhelp{% -group can only be used in environments such as @example,^^J% -where each line of input produces a line of output.} - -% @need space-in-mils -% forces a page break if there is not space-in-mils remaining. - -\newdimen\mil \mil=0.001in - -\parseargdef\need{% - % Ensure vertical mode, so we don't make a big box in the middle of a - % paragraph. - \par - % - % If the @need value is less than one line space, it's useless. - \dimen0 = #1\mil - \dimen2 = \ht\strutbox - \advance\dimen2 by \dp\strutbox - \ifdim\dimen0 > \dimen2 - % - % Do a \strut just to make the height of this box be normal, so the - % normal leading is inserted relative to the preceding line. - % And a page break here is fine. - \vtop to #1\mil{\strut\vfil}% - % - % TeX does not even consider page breaks if a penalty added to the - % main vertical list is 10000 or more. But in order to see if the - % empty box we just added fits on the page, we must make it consider - % page breaks. On the other hand, we don't want to actually break the - % page after the empty box. So we use a penalty of 9999. - % - % There is an extremely small chance that TeX will actually break the - % page at this \penalty, if there are no other feasible breakpoints in - % sight. (If the user is using lots of big @group commands, which - % almost-but-not-quite fill up a page, TeX will have a hard time doing - % good page breaking, for example.) However, I could not construct an - % example where a page broke at this \penalty; if it happens in a real - % document, then we can reconsider our strategy. - \penalty9999 - % - % Back up by the size of the box, whether we did a page break or not. - \kern -#1\mil - % - % Do not allow a page break right after this kern. - \nobreak - \fi -} - -% @br forces paragraph break (and is undocumented). - -\let\br = \par - -% @page forces the start of a new page. -% -\def\page{\par\vfill\supereject} - -% @exdent text.... -% outputs text on separate line in roman font, starting at standard page margin - -% This records the amount of indent in the innermost environment. -% That's how much \exdent should take out. -\newskip\exdentamount - -% This defn is used inside fill environments such as @defun. -\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} - -% This defn is used inside nofill environments such as @example. -\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount - \leftline{\hskip\leftskip{\rm#1}}}} - -% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current -% paragraph. For more general purposes, use the \margin insertion -% class. WHICH is `l' or `r'. Not documented, written for gawk manual. -% -\newskip\inmarginspacing \inmarginspacing=1cm -\def\strutdepth{\dp\strutbox} -% -\def\doinmargin#1#2{\strut\vadjust{% - \nobreak - \kern-\strutdepth - \vtop to \strutdepth{% - \baselineskip=\strutdepth - \vss - % if you have multiple lines of stuff to put here, you'll need to - % make the vbox yourself of the appropriate size. - \ifx#1l% - \llap{\ignorespaces #2\hskip\inmarginspacing}% - \else - \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% - \fi - \null - }% -}} -\def\inleftmargin{\doinmargin l} -\def\inrightmargin{\doinmargin r} -% -% @inmargin{TEXT [, RIGHT-TEXT]} -% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; -% else use TEXT for both). -% -\def\inmargin#1{\parseinmargin #1,,\finish} -\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \def\lefttext{#1}% have both texts - \def\righttext{#2}% - \else - \def\lefttext{#1}% have only one text - \def\righttext{#1}% - \fi - % - \ifodd\pageno - \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin - \else - \def\temp{\inleftmargin\lefttext}% - \fi - \temp -} - -% @| inserts a changebar to the left of the current line. It should -% surround any changed text. This approach does *not* work if the -% change spans more than two lines of output. To handle that, we would -% have adopt a much more difficult approach (putting marks into the main -% vertical list for the beginning and end of each change). This command -% is not documented, not supported, and doesn't work. -% -\def\|{% - % \vadjust can only be used in horizontal mode. - \leavevmode - % - % Append this vertical mode material after the current line in the output. - \vadjust{% - % We want to insert a rule with the height and depth of the current - % leading; that is exactly what \strutbox is supposed to record. - \vskip-\baselineskip - % - % \vadjust-items are inserted at the left edge of the type. So - % the \llap here moves out into the left-hand margin. - \llap{% - % - % For a thicker or thinner bar, change the `1pt'. - \vrule height\baselineskip width1pt - % - % This is the space between the bar and the text. - \hskip 12pt - }% - }% -} - -% @include FILE -- \input text of FILE. -% -\def\include{\parseargusing\filenamecatcodes\includezzz} -\def\includezzz#1{% - \pushthisfilestack - \def\thisfile{#1}% - {% - \makevalueexpandable % we want to expand any @value in FILE. - \turnoffactive % and allow special characters in the expansion - \indexnofonts % Allow `@@' and other weird things in file names. - \wlog{texinfo.tex: doing @include of #1^^J}% - \edef\temp{\noexpand\input #1 }% - % - % This trickery is to read FILE outside of a group, in case it makes - % definitions, etc. - \expandafter - }\temp - \popthisfilestack -} -\def\filenamecatcodes{% - \catcode`\\=\other - \catcode`~=\other - \catcode`^=\other - \catcode`_=\other - \catcode`|=\other - \catcode`<=\other - \catcode`>=\other - \catcode`+=\other - \catcode`-=\other - \catcode`\`=\other - \catcode`\'=\other -} - -\def\pushthisfilestack{% - \expandafter\pushthisfilestackX\popthisfilestack\StackTerm -} -\def\pushthisfilestackX{% - \expandafter\pushthisfilestackY\thisfile\StackTerm -} -\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% - \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% -} - -\def\popthisfilestack{\errthisfilestackempty} -\def\errthisfilestackempty{\errmessage{Internal error: - the stack of filenames is empty.}} -% -\def\thisfile{} - -% @center line -% outputs that line, centered. -% -\parseargdef\center{% - \ifhmode - \let\centersub\centerH - \else - \let\centersub\centerV - \fi - \centersub{\hfil \ignorespaces#1\unskip \hfil}% - \let\centersub\relax % don't let the definition persist, just in case -} -\def\centerH#1{{% - \hfil\break - \advance\hsize by -\leftskip - \advance\hsize by -\rightskip - \line{#1}% - \break -}} -% -\newcount\centerpenalty -\def\centerV#1{% - % The idea here is the same as in \startdefun, \cartouche, etc.: if - % @center is the first thing after a section heading, we need to wipe - % out the negative parskip inserted by \sectionheading, but still - % prevent a page break here. - \centerpenalty = \lastpenalty - \ifnum\centerpenalty>10000 \vskip\parskip \fi - \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi - \line{\kern\leftskip #1\kern\rightskip}% -} - -% @sp n outputs n lines of vertical space -% -\parseargdef\sp{\vskip #1\baselineskip} - -% @comment ...line which is ignored... -% @c is the same as @comment -% @ignore ... @end ignore is another way to write a comment -% -\def\comment{\begingroup \catcode`\^^M=\other% -\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% -\commentxxx} -{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} -% -\let\c=\comment - -% @paragraphindent NCHARS -% We'll use ems for NCHARS, close enough. -% NCHARS can also be the word `asis' or `none'. -% We cannot feasibly implement @paragraphindent asis, though. -% -\def\asisword{asis} % no translation, these are keywords -\def\noneword{none} -% -\parseargdef\paragraphindent{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \defaultparindent = 0pt - \else - \defaultparindent = #1em - \fi - \fi - \parindent = \defaultparindent -} - -% @exampleindent NCHARS -% We'll use ems for NCHARS like @paragraphindent. -% It seems @exampleindent asis isn't necessary, but -% I preserve it to make it similar to @paragraphindent. -\parseargdef\exampleindent{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \lispnarrowing = 0pt - \else - \lispnarrowing = #1em - \fi - \fi -} - -% @firstparagraphindent WORD -% If WORD is `none', then suppress indentation of the first paragraph -% after a section heading. If WORD is `insert', then do indent at such -% paragraphs. -% -% The paragraph indentation is suppressed or not by calling -% \suppressfirstparagraphindent, which the sectioning commands do. -% We switch the definition of this back and forth according to WORD. -% By default, we suppress indentation. -% -\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} -\def\insertword{insert} -% -\parseargdef\firstparagraphindent{% - \def\temp{#1}% - \ifx\temp\noneword - \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent - \else\ifx\temp\insertword - \let\suppressfirstparagraphindent = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @firstparagraphindent option `\temp'}% - \fi\fi -} - -% Here is how we actually suppress indentation. Redefine \everypar to -% \kern backwards by \parindent, and then reset itself to empty. -% -% We also make \indent itself not actually do anything until the next -% paragraph. -% -\gdef\dosuppressfirstparagraphindent{% - \gdef\indent{% - \restorefirstparagraphindent - \indent - }% - \gdef\noindent{% - \restorefirstparagraphindent - \noindent - }% - \global\everypar = {% - \kern -\parindent - \restorefirstparagraphindent - }% -} - -\gdef\restorefirstparagraphindent{% - \global \let \indent = \ptexindent - \global \let \noindent = \ptexnoindent - \global \everypar = {}% -} - - -% @refill is a no-op. -\let\refill=\relax - -% If working on a large document in chapters, it is convenient to -% be able to disable indexing, cross-referencing, and contents, for test runs. -% This is done with @novalidate (before @setfilename). -% -\newif\iflinks \linkstrue % by default we want the aux files. -\let\novalidate = \linksfalse - -% @setfilename is done at the beginning of every texinfo file. -% So open here the files we need to have open while reading the input. -% This makes it possible to make a .fmt file for texinfo. -\def\setfilename{% - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \iflinks - \tryauxfile - % Open the new aux file. TeX will close it automatically at exit. - \immediate\openout\auxfile=\jobname.aux - \fi % \openindices needs to do some work in any case. - \openindices - \let\setfilename=\comment % Ignore extra @setfilename cmds. - % - % If texinfo.cnf is present on the system, read it. - % Useful for site-wide @afourpaper, etc. - \openin 1 texinfo.cnf - \ifeof 1 \else \input texinfo.cnf \fi - \closein 1 - % - \comment % Ignore the actual filename. -} - -% Called from \setfilename. -% -\def\openindices{% - \newindex{cp}% - \newcodeindex{fn}% - \newcodeindex{vr}% - \newcodeindex{tp}% - \newcodeindex{ky}% - \newcodeindex{pg}% -} - -% @bye. -\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} - - -\message{pdf,} -% adobe `portable' document format -\newcount\tempnum -\newcount\lnkcount -\newtoks\filename -\newcount\filenamelength -\newcount\pgn -\newtoks\toksA -\newtoks\toksB -\newtoks\toksC -\newtoks\toksD -\newbox\boxA -\newcount\countA -\newif\ifpdf -\newif\ifpdfmakepagedest - -% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 -% can be set). So we test for \relax and 0 as well as being undefined. -\ifx\pdfoutput\thisisundefined -\else - \ifx\pdfoutput\relax - \else - \ifcase\pdfoutput - \else - \pdftrue - \fi - \fi -\fi - -% PDF uses PostScript string constants for the names of xref targets, -% for display in the outlines, and in other places. Thus, we have to -% double any backslashes. Otherwise, a name like "\node" will be -% interpreted as a newline (\n), followed by o, d, e. Not good. -% -% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and -% related messages. The final outcome is that it is up to the TeX user -% to double the backslashes and otherwise make the string valid, so -% that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to -% do this reliably, so we use it. - -% #1 is a control sequence in which to do the replacements, -% which we \xdef. -\def\txiescapepdf#1{% - \ifx\pdfescapestring\thisisundefined - % No primitive available; should we give a warning or log? - % Many times it won't matter. - \else - % The expandable \pdfescapestring primitive escapes parentheses, - % backslashes, and other special chars. - \xdef#1{\pdfescapestring{#1}}% - \fi -} - -\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images -with PDF output, and none of those formats could be found. (.eps cannot -be supported due to the design of the PDF format; use regular TeX (DVI -output) for that.)} - -\ifpdf - % - % Color manipulation macros based on pdfcolor.tex, - % except using rgb instead of cmyk; the latter is said to render as a - % very dark gray on-screen and a very dark halftone in print, instead - % of actual black. - \def\rgbDarkRed{0.50 0.09 0.12} - \def\rgbBlack{0 0 0} - % - % k sets the color for filling (usual text, etc.); - % K sets the color for stroking (thin rules, e.g., normal _'s). - \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} - % - % Set color, and create a mark which defines \thiscolor accordingly, - % so that \makeheadline knows which color to restore. - \def\setcolor#1{% - \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% - \domark - \pdfsetcolor{#1}% - } - % - \def\maincolor{\rgbBlack} - \pdfsetcolor{\maincolor} - \edef\thiscolor{\maincolor} - \def\lastcolordefs{} - % - \def\makefootline{% - \baselineskip24pt - \line{\pdfsetcolor{\maincolor}\the\footline}% - } - % - \def\makeheadline{% - \vbox to 0pt{% - \vskip-22.5pt - \line{% - \vbox to8.5pt{}% - % Extract \thiscolor definition from the marks. - \getcolormarks - % Typeset the headline with \maincolor, then restore the color. - \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% - }% - \vss - }% - \nointerlineskip - } - % - % - \pdfcatalog{/PageMode /UseOutlines} - % - % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). - \def\dopdfimage#1#2#3{% - \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% - \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% - % - % pdftex (and the PDF format) support .pdf, .png, .jpg (among - % others). Let's try in that order, PDF first since if - % someone has a scalable image, presumably better to use that than a - % bitmap. - \let\pdfimgext=\empty - \begingroup - \openin 1 #1.pdf \ifeof 1 - \openin 1 #1.PDF \ifeof 1 - \openin 1 #1.png \ifeof 1 - \openin 1 #1.jpg \ifeof 1 - \openin 1 #1.jpeg \ifeof 1 - \openin 1 #1.JPG \ifeof 1 - \errhelp = \nopdfimagehelp - \errmessage{Could not find image file #1 for pdf}% - \else \gdef\pdfimgext{JPG}% - \fi - \else \gdef\pdfimgext{jpeg}% - \fi - \else \gdef\pdfimgext{jpg}% - \fi - \else \gdef\pdfimgext{png}% - \fi - \else \gdef\pdfimgext{PDF}% - \fi - \else \gdef\pdfimgext{pdf}% - \fi - \closein 1 - \endgroup - % - % without \immediate, ancient pdftex seg faults when the same image is - % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) - \ifnum\pdftexversion < 14 - \immediate\pdfimage - \else - \immediate\pdfximage - \fi - \ifdim \wd0 >0pt width \pdfimagewidth \fi - \ifdim \wd2 >0pt height \pdfimageheight \fi - \ifnum\pdftexversion<13 - #1.\pdfimgext - \else - {#1.\pdfimgext}% - \fi - \ifnum\pdftexversion < 14 \else - \pdfrefximage \pdflastximage - \fi} - % - \def\pdfmkdest#1{{% - % We have to set dummies so commands such as @code, and characters - % such as \, aren't expanded when present in a section title. - \indexnofonts - \turnoffactive - \makevalueexpandable - \def\pdfdestname{#1}% - \txiescapepdf\pdfdestname - \safewhatsit{\pdfdest name{\pdfdestname} xyz}% - }} - % - % used to mark target names; must be expandable. - \def\pdfmkpgn#1{#1} - % - % by default, use a color that is dark enough to print on paper as - % nearly black, but still distinguishable for online viewing. - \def\urlcolor{\rgbDarkRed} - \def\linkcolor{\rgbDarkRed} - \def\endlink{\setcolor{\maincolor}\pdfendlink} - % - % Adding outlines to PDF; macros for calculating structure of outlines - % come from Petr Olsak - \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% - \else \csname#1\endcsname \fi} - \def\advancenumber#1{\tempnum=\expnumber{#1}\relax - \advance\tempnum by 1 - \expandafter\xdef\csname#1\endcsname{\the\tempnum}} - % - % #1 is the section text, which is what will be displayed in the - % outline by the pdf viewer. #2 is the pdf expression for the number - % of subentries (or empty, for subsubsections). #3 is the node text, - % which might be empty if this toc entry had no corresponding node. - % #4 is the page number - % - \def\dopdfoutline#1#2#3#4{% - % Generate a link to the node text if that exists; else, use the - % page number. We could generate a destination for the section - % text in the case where a section has no node, but it doesn't - % seem worth the trouble, since most documents are normally structured. - \edef\pdfoutlinedest{#3}% - \ifx\pdfoutlinedest\empty - \def\pdfoutlinedest{#4}% - \else - \txiescapepdf\pdfoutlinedest - \fi - % - % Also escape PDF chars in the display string. - \edef\pdfoutlinetext{#1}% - \txiescapepdf\pdfoutlinetext - % - \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% - } - % - \def\pdfmakeoutlines{% - \begingroup - % Read toc silently, to get counts of subentries for \pdfoutline. - \def\partentry##1##2##3##4{}% ignore parts in the outlines - \def\numchapentry##1##2##3##4{% - \def\thischapnum{##2}% - \def\thissecnum{0}% - \def\thissubsecnum{0}% - }% - \def\numsecentry##1##2##3##4{% - \advancenumber{chap\thischapnum}% - \def\thissecnum{##2}% - \def\thissubsecnum{0}% - }% - \def\numsubsecentry##1##2##3##4{% - \advancenumber{sec\thissecnum}% - \def\thissubsecnum{##2}% - }% - \def\numsubsubsecentry##1##2##3##4{% - \advancenumber{subsec\thissubsecnum}% - }% - \def\thischapnum{0}% - \def\thissecnum{0}% - \def\thissubsecnum{0}% - % - % use \def rather than \let here because we redefine \chapentry et - % al. a second time, below. - \def\appentry{\numchapentry}% - \def\appsecentry{\numsecentry}% - \def\appsubsecentry{\numsubsecentry}% - \def\appsubsubsecentry{\numsubsubsecentry}% - \def\unnchapentry{\numchapentry}% - \def\unnsecentry{\numsecentry}% - \def\unnsubsecentry{\numsubsecentry}% - \def\unnsubsubsecentry{\numsubsubsecentry}% - \readdatafile{toc}% - % - % Read toc second time, this time actually producing the outlines. - % The `-' means take the \expnumber as the absolute number of - % subentries, which we calculated on our first read of the .toc above. - % - % We use the node names as the destinations. - \def\numchapentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% - \def\numsecentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% - \def\numsubsecentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% - \def\numsubsubsecentry##1##2##3##4{% count is always zero - \dopdfoutline{##1}{}{##3}{##4}}% - % - % PDF outlines are displayed using system fonts, instead of - % document fonts. Therefore we cannot use special characters, - % since the encoding is unknown. For example, the eogonek from - % Latin 2 (0xea) gets translated to a | character. Info from - % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. - % - % TODO this right, we have to translate 8-bit characters to - % their "best" equivalent, based on the @documentencoding. Too - % much work for too little return. Just use the ASCII equivalents - % we use for the index sort strings. - % - \indexnofonts - \setupdatafile - % We can have normal brace characters in the PDF outlines, unlike - % Texinfo index files. So set that up. - \def\{{\lbracecharliteral}% - \def\}{\rbracecharliteral}% - \catcode`\\=\active \otherbackslash - \input \tocreadfilename - \endgroup - } - {\catcode`[=1 \catcode`]=2 - \catcode`{=\other \catcode`}=\other - \gdef\lbracecharliteral[{]% - \gdef\rbracecharliteral[}]% - ] - % - \def\skipspaces#1{\def\PP{#1}\def\D{|}% - \ifx\PP\D\let\nextsp\relax - \else\let\nextsp\skipspaces - \addtokens{\filename}{\PP}% - \advance\filenamelength by 1 - \fi - \nextsp} - \def\getfilename#1{% - \filenamelength=0 - % If we don't expand the argument now, \skipspaces will get - % snagged on things like "@value{foo}". - \edef\temp{#1}% - \expandafter\skipspaces\temp|\relax - } - \ifnum\pdftexversion < 14 - \let \startlink \pdfannotlink - \else - \let \startlink \pdfstartlink - \fi - % make a live url in pdf output. - \def\pdfurl#1{% - \begingroup - % it seems we really need yet another set of dummies; have not - % tried to figure out what each command should do in the context - % of @url. for now, just make @/ a no-op, that's the only one - % people have actually reported a problem with. - % - \normalturnoffactive - \def\@{@}% - \let\/=\empty - \makevalueexpandable - % do we want to go so far as to use \indexnofonts instead of just - % special-casing \var here? - \def\var##1{##1}% - % - \leavevmode\setcolor{\urlcolor}% - \startlink attr{/Border [0 0 0]}% - user{/Subtype /Link /A << /S /URI /URI (#1) >>}% - \endgroup} - \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} - \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} - \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} - \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} - \def\maketoks{% - \expandafter\poptoks\the\toksA|ENDTOKS|\relax - \ifx\first0\adn0 - \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 - \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 - \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 - \else - \ifnum0=\countA\else\makelink\fi - \ifx\first.\let\next=\done\else - \let\next=\maketoks - \addtokens{\toksB}{\the\toksD} - \ifx\first,\addtokens{\toksB}{\space}\fi - \fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \next} - \def\makelink{\addtokens{\toksB}% - {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} - \def\pdflink#1{% - \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} - \setcolor{\linkcolor}#1\endlink} - \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} -\else - % non-pdf mode - \let\pdfmkdest = \gobble - \let\pdfurl = \gobble - \let\endlink = \relax - \let\setcolor = \gobble - \let\pdfsetcolor = \gobble - \let\pdfmakeoutlines = \relax -\fi % \ifx\pdfoutput - - -\message{fonts,} - -% Change the current font style to #1, remembering it in \curfontstyle. -% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in -% italics, not bold italics. -% -\def\setfontstyle#1{% - \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. - \csname ten#1\endcsname % change the current font -} - -% Select #1 fonts with the current style. -% -\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} - -\def\rm{\fam=0 \setfontstyle{rm}} -\def\it{\fam=\itfam \setfontstyle{it}} -\def\sl{\fam=\slfam \setfontstyle{sl}} -\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} -\def\tt{\fam=\ttfam \setfontstyle{tt}} - -% Unfortunately, we have to override this for titles and the like, since -% in those cases "rm" is bold. Sigh. -\def\rmisbold{\rm\def\curfontstyle{bf}} - -% Texinfo sort of supports the sans serif font style, which plain TeX does not. -% So we set up a \sf. -\newfam\sffam -\def\sf{\fam=\sffam \setfontstyle{sf}} -\let\li = \sf % Sometimes we call it \li, not \sf. - -% We don't need math for this font style. -\def\ttsl{\setfontstyle{ttsl}} - - -% Set the baselineskip to #1, and the lineskip and strut size -% correspondingly. There is no deep meaning behind these magic numbers -% used as factors; they just match (closely enough) what Knuth defined. -% -\def\lineskipfactor{.08333} -\def\strutheightpercent{.70833} -\def\strutdepthpercent {.29167} -% -% can get a sort of poor man's double spacing by redefining this. -\def\baselinefactor{1} -% -\newdimen\textleading -\def\setleading#1{% - \dimen0 = #1\relax - \normalbaselineskip = \baselinefactor\dimen0 - \normallineskip = \lineskipfactor\normalbaselineskip - \normalbaselines - \setbox\strutbox =\hbox{% - \vrule width0pt height\strutheightpercent\baselineskip - depth \strutdepthpercent \baselineskip - }% -} - -% PDF CMaps. See also LaTeX's t1.cmap. -% -% do nothing with this by default. -\expandafter\let\csname cmapOT1\endcsname\gobble -\expandafter\let\csname cmapOT1IT\endcsname\gobble -\expandafter\let\csname cmapOT1TT\endcsname\gobble - -% if we are producing pdf, and we have \pdffontattr, then define cmaps. -% (\pdffontattr was introduced many years ago, but people still run -% older pdftex's; it's easy to conditionalize, so we do.) -\ifpdf \ifx\pdffontattr\thisisundefined \else - \begingroup - \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. - \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-OT1-0) -%%Title: (TeX-OT1-0 TeX OT1 0) -%%Version: 1.000 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (TeX) -/Ordering (OT1) -/Supplement 0 ->> def -/CMapName /TeX-OT1-0 def -/CMapType 2 def -1 begincodespacerange -<00> <7F> -endcodespacerange -8 beginbfrange -<00> <01> <0393> -<09> <0A> <03A8> -<23> <26> <0023> -<28> <3B> <0028> -<3F> <5B> <003F> -<5D> <5E> <005D> -<61> <7A> <0061> -<7B> <7C> <2013> -endbfrange -40 beginbfchar -<02> <0398> -<03> <039B> -<04> <039E> -<05> <03A0> -<06> <03A3> -<07> <03D2> -<08> <03A6> -<0B> <00660066> -<0C> <00660069> -<0D> <0066006C> -<0E> <006600660069> -<0F> <00660066006C> -<10> <0131> -<11> <0237> -<12> <0060> -<13> <00B4> -<14> <02C7> -<15> <02D8> -<16> <00AF> -<17> <02DA> -<18> <00B8> -<19> <00DF> -<1A> <00E6> -<1B> <0153> -<1C> <00F8> -<1D> <00C6> -<1E> <0152> -<1F> <00D8> -<21> <0021> -<22> <201D> -<27> <2019> -<3C> <00A1> -<3D> <003D> -<3E> <00BF> -<5C> <201C> -<5F> <02D9> -<60> <2018> -<7D> <02DD> -<7E> <007E> -<7F> <00A8> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF - }\endgroup - \expandafter\edef\csname cmapOT1\endcsname#1{% - \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% - }% -% -% \cmapOT1IT - \begingroup - \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. - \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-OT1IT-0) -%%Title: (TeX-OT1IT-0 TeX OT1IT 0) -%%Version: 1.000 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (TeX) -/Ordering (OT1IT) -/Supplement 0 ->> def -/CMapName /TeX-OT1IT-0 def -/CMapType 2 def -1 begincodespacerange -<00> <7F> -endcodespacerange -8 beginbfrange -<00> <01> <0393> -<09> <0A> <03A8> -<25> <26> <0025> -<28> <3B> <0028> -<3F> <5B> <003F> -<5D> <5E> <005D> -<61> <7A> <0061> -<7B> <7C> <2013> -endbfrange -42 beginbfchar -<02> <0398> -<03> <039B> -<04> <039E> -<05> <03A0> -<06> <03A3> -<07> <03D2> -<08> <03A6> -<0B> <00660066> -<0C> <00660069> -<0D> <0066006C> -<0E> <006600660069> -<0F> <00660066006C> -<10> <0131> -<11> <0237> -<12> <0060> -<13> <00B4> -<14> <02C7> -<15> <02D8> -<16> <00AF> -<17> <02DA> -<18> <00B8> -<19> <00DF> -<1A> <00E6> -<1B> <0153> -<1C> <00F8> -<1D> <00C6> -<1E> <0152> -<1F> <00D8> -<21> <0021> -<22> <201D> -<23> <0023> -<24> <00A3> -<27> <2019> -<3C> <00A1> -<3D> <003D> -<3E> <00BF> -<5C> <201C> -<5F> <02D9> -<60> <2018> -<7D> <02DD> -<7E> <007E> -<7F> <00A8> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF - }\endgroup - \expandafter\edef\csname cmapOT1IT\endcsname#1{% - \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% - }% -% -% \cmapOT1TT - \begingroup - \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. - \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-OT1TT-0) -%%Title: (TeX-OT1TT-0 TeX OT1TT 0) -%%Version: 1.000 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (TeX) -/Ordering (OT1TT) -/Supplement 0 ->> def -/CMapName /TeX-OT1TT-0 def -/CMapType 2 def -1 begincodespacerange -<00> <7F> -endcodespacerange -5 beginbfrange -<00> <01> <0393> -<09> <0A> <03A8> -<21> <26> <0021> -<28> <5F> <0028> -<61> <7E> <0061> -endbfrange -32 beginbfchar -<02> <0398> -<03> <039B> -<04> <039E> -<05> <03A0> -<06> <03A3> -<07> <03D2> -<08> <03A6> -<0B> <2191> -<0C> <2193> -<0D> <0027> -<0E> <00A1> -<0F> <00BF> -<10> <0131> -<11> <0237> -<12> <0060> -<13> <00B4> -<14> <02C7> -<15> <02D8> -<16> <00AF> -<17> <02DA> -<18> <00B8> -<19> <00DF> -<1A> <00E6> -<1B> <0153> -<1C> <00F8> -<1D> <00C6> -<1E> <0152> -<1F> <00D8> -<20> <2423> -<27> <2019> -<60> <2018> -<7F> <00A8> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF - }\endgroup - \expandafter\edef\csname cmapOT1TT\endcsname#1{% - \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% - }% -\fi\fi - - -% Set the font macro #1 to the font named \fontprefix#2. -% #3 is the font's design size, #4 is a scale factor, #5 is the CMap -% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). -% Example: -% #1 = \textrm -% #2 = \rmshape -% #3 = 10 -% #4 = \mainmagstep -% #5 = OT1 -% -\def\setfont#1#2#3#4#5{% - \font#1=\fontprefix#2#3 scaled #4 - \csname cmap#5\endcsname#1% -} -% This is what gets called when #5 of \setfont is empty. -\let\cmap\gobble -% -% (end of cmaps) - -% Use cm as the default font prefix. -% To specify the font prefix, you must define \fontprefix -% before you read in texinfo.tex. -\ifx\fontprefix\thisisundefined -\def\fontprefix{cm} -\fi -% Support font families that don't use the same naming scheme as CM. -\def\rmshape{r} -\def\rmbshape{bx} % where the normal face is bold -\def\bfshape{b} -\def\bxshape{bx} -\def\ttshape{tt} -\def\ttbshape{tt} -\def\ttslshape{sltt} -\def\itshape{ti} -\def\itbshape{bxti} -\def\slshape{sl} -\def\slbshape{bxsl} -\def\sfshape{ss} -\def\sfbshape{ss} -\def\scshape{csc} -\def\scbshape{csc} - -% Definitions for a main text size of 11pt. (The default in Texinfo.) -% -\def\definetextfontsizexi{% -% Text fonts (11.2pt, magstep1). -\def\textnominalsize{11pt} -\edef\mainmagstep{\magstephalf} -\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} -\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} -\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} -\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} -\setfont\textsl\slshape{10}{\mainmagstep}{OT1} -\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} -\setfont\textsc\scshape{10}{\mainmagstep}{OT1} -\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} -\font\texti=cmmi10 scaled \mainmagstep -\font\textsy=cmsy10 scaled \mainmagstep -\def\textecsize{1095} - -% A few fonts for @defun names and args. -\setfont\defbf\bfshape{10}{\magstep1}{OT1} -\setfont\deftt\ttshape{10}{\magstep1}{OT1TT} -\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} - -% Fonts for indices, footnotes, small examples (9pt). -\def\smallnominalsize{9pt} -\setfont\smallrm\rmshape{9}{1000}{OT1} -\setfont\smalltt\ttshape{9}{1000}{OT1TT} -\setfont\smallbf\bfshape{10}{900}{OT1} -\setfont\smallit\itshape{9}{1000}{OT1IT} -\setfont\smallsl\slshape{9}{1000}{OT1} -\setfont\smallsf\sfshape{9}{1000}{OT1} -\setfont\smallsc\scshape{10}{900}{OT1} -\setfont\smallttsl\ttslshape{10}{900}{OT1TT} -\font\smalli=cmmi9 -\font\smallsy=cmsy9 -\def\smallecsize{0900} - -% Fonts for small examples (8pt). -\def\smallernominalsize{8pt} -\setfont\smallerrm\rmshape{8}{1000}{OT1} -\setfont\smallertt\ttshape{8}{1000}{OT1TT} -\setfont\smallerbf\bfshape{10}{800}{OT1} -\setfont\smallerit\itshape{8}{1000}{OT1IT} -\setfont\smallersl\slshape{8}{1000}{OT1} -\setfont\smallersf\sfshape{8}{1000}{OT1} -\setfont\smallersc\scshape{10}{800}{OT1} -\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} -\font\smalleri=cmmi8 -\font\smallersy=cmsy8 -\def\smallerecsize{0800} - -% Fonts for title page (20.4pt): -\def\titlenominalsize{20pt} -\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} -\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} -\setfont\titlesl\slbshape{10}{\magstep4}{OT1} -\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} -\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} -\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} -\let\titlebf=\titlerm -\setfont\titlesc\scbshape{10}{\magstep4}{OT1} -\font\titlei=cmmi12 scaled \magstep3 -\font\titlesy=cmsy10 scaled \magstep4 -\def\titleecsize{2074} - -% Chapter (and unnumbered) fonts (17.28pt). -\def\chapnominalsize{17pt} -\setfont\chaprm\rmbshape{12}{\magstep2}{OT1} -\setfont\chapit\itbshape{10}{\magstep3}{OT1IT} -\setfont\chapsl\slbshape{10}{\magstep3}{OT1} -\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} -\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} -\setfont\chapsf\sfbshape{17}{1000}{OT1} -\let\chapbf=\chaprm -\setfont\chapsc\scbshape{10}{\magstep3}{OT1} -\font\chapi=cmmi12 scaled \magstep2 -\font\chapsy=cmsy10 scaled \magstep3 -\def\chapecsize{1728} - -% Section fonts (14.4pt). -\def\secnominalsize{14pt} -\setfont\secrm\rmbshape{12}{\magstep1}{OT1} -\setfont\secit\itbshape{10}{\magstep2}{OT1IT} -\setfont\secsl\slbshape{10}{\magstep2}{OT1} -\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} -\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} -\setfont\secsf\sfbshape{12}{\magstep1}{OT1} -\let\secbf\secrm -\setfont\secsc\scbshape{10}{\magstep2}{OT1} -\font\seci=cmmi12 scaled \magstep1 -\font\secsy=cmsy10 scaled \magstep2 -\def\sececsize{1440} - -% Subsection fonts (13.15pt). -\def\ssecnominalsize{13pt} -\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} -\setfont\ssecit\itbshape{10}{1315}{OT1IT} -\setfont\ssecsl\slbshape{10}{1315}{OT1} -\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} -\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} -\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} -\let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{1315}{OT1} -\font\sseci=cmmi12 scaled \magstephalf -\font\ssecsy=cmsy10 scaled 1315 -\def\ssececsize{1200} - -% Reduced fonts for @acro in text (10pt). -\def\reducednominalsize{10pt} -\setfont\reducedrm\rmshape{10}{1000}{OT1} -\setfont\reducedtt\ttshape{10}{1000}{OT1TT} -\setfont\reducedbf\bfshape{10}{1000}{OT1} -\setfont\reducedit\itshape{10}{1000}{OT1IT} -\setfont\reducedsl\slshape{10}{1000}{OT1} -\setfont\reducedsf\sfshape{10}{1000}{OT1} -\setfont\reducedsc\scshape{10}{1000}{OT1} -\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} -\font\reducedi=cmmi10 -\font\reducedsy=cmsy10 -\def\reducedecsize{1000} - -\textleading = 13.2pt % line spacing for 11pt CM -\textfonts % reset the current fonts -\rm -} % end of 11pt text font size definitions, \definetextfontsizexi - - -% Definitions to make the main text be 10pt Computer Modern, with -% section, chapter, etc., sizes following suit. This is for the GNU -% Press printing of the Emacs 22 manual. Maybe other manuals in the -% future. Used with @smallbook, which sets the leading to 12pt. -% -\def\definetextfontsizex{% -% Text fonts (10pt). -\def\textnominalsize{10pt} -\edef\mainmagstep{1000} -\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} -\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} -\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} -\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} -\setfont\textsl\slshape{10}{\mainmagstep}{OT1} -\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} -\setfont\textsc\scshape{10}{\mainmagstep}{OT1} -\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} -\font\texti=cmmi10 scaled \mainmagstep -\font\textsy=cmsy10 scaled \mainmagstep -\def\textecsize{1000} - -% A few fonts for @defun names and args. -\setfont\defbf\bfshape{10}{\magstephalf}{OT1} -\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} -\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} - -% Fonts for indices, footnotes, small examples (9pt). -\def\smallnominalsize{9pt} -\setfont\smallrm\rmshape{9}{1000}{OT1} -\setfont\smalltt\ttshape{9}{1000}{OT1TT} -\setfont\smallbf\bfshape{10}{900}{OT1} -\setfont\smallit\itshape{9}{1000}{OT1IT} -\setfont\smallsl\slshape{9}{1000}{OT1} -\setfont\smallsf\sfshape{9}{1000}{OT1} -\setfont\smallsc\scshape{10}{900}{OT1} -\setfont\smallttsl\ttslshape{10}{900}{OT1TT} -\font\smalli=cmmi9 -\font\smallsy=cmsy9 -\def\smallecsize{0900} - -% Fonts for small examples (8pt). -\def\smallernominalsize{8pt} -\setfont\smallerrm\rmshape{8}{1000}{OT1} -\setfont\smallertt\ttshape{8}{1000}{OT1TT} -\setfont\smallerbf\bfshape{10}{800}{OT1} -\setfont\smallerit\itshape{8}{1000}{OT1IT} -\setfont\smallersl\slshape{8}{1000}{OT1} -\setfont\smallersf\sfshape{8}{1000}{OT1} -\setfont\smallersc\scshape{10}{800}{OT1} -\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} -\font\smalleri=cmmi8 -\font\smallersy=cmsy8 -\def\smallerecsize{0800} - -% Fonts for title page (20.4pt): -\def\titlenominalsize{20pt} -\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} -\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} -\setfont\titlesl\slbshape{10}{\magstep4}{OT1} -\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} -\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} -\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} -\let\titlebf=\titlerm -\setfont\titlesc\scbshape{10}{\magstep4}{OT1} -\font\titlei=cmmi12 scaled \magstep3 -\font\titlesy=cmsy10 scaled \magstep4 -\def\titleecsize{2074} - -% Chapter fonts (14.4pt). -\def\chapnominalsize{14pt} -\setfont\chaprm\rmbshape{12}{\magstep1}{OT1} -\setfont\chapit\itbshape{10}{\magstep2}{OT1IT} -\setfont\chapsl\slbshape{10}{\magstep2}{OT1} -\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} -\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} -\setfont\chapsf\sfbshape{12}{\magstep1}{OT1} -\let\chapbf\chaprm -\setfont\chapsc\scbshape{10}{\magstep2}{OT1} -\font\chapi=cmmi12 scaled \magstep1 -\font\chapsy=cmsy10 scaled \magstep2 -\def\chapecsize{1440} - -% Section fonts (12pt). -\def\secnominalsize{12pt} -\setfont\secrm\rmbshape{12}{1000}{OT1} -\setfont\secit\itbshape{10}{\magstep1}{OT1IT} -\setfont\secsl\slbshape{10}{\magstep1}{OT1} -\setfont\sectt\ttbshape{12}{1000}{OT1TT} -\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} -\setfont\secsf\sfbshape{12}{1000}{OT1} -\let\secbf\secrm -\setfont\secsc\scbshape{10}{\magstep1}{OT1} -\font\seci=cmmi12 -\font\secsy=cmsy10 scaled \magstep1 -\def\sececsize{1200} - -% Subsection fonts (10pt). -\def\ssecnominalsize{10pt} -\setfont\ssecrm\rmbshape{10}{1000}{OT1} -\setfont\ssecit\itbshape{10}{1000}{OT1IT} -\setfont\ssecsl\slbshape{10}{1000}{OT1} -\setfont\ssectt\ttbshape{10}{1000}{OT1TT} -\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} -\setfont\ssecsf\sfbshape{10}{1000}{OT1} -\let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{1000}{OT1} -\font\sseci=cmmi10 -\font\ssecsy=cmsy10 -\def\ssececsize{1000} - -% Reduced fonts for @acro in text (9pt). -\def\reducednominalsize{9pt} -\setfont\reducedrm\rmshape{9}{1000}{OT1} -\setfont\reducedtt\ttshape{9}{1000}{OT1TT} -\setfont\reducedbf\bfshape{10}{900}{OT1} -\setfont\reducedit\itshape{9}{1000}{OT1IT} -\setfont\reducedsl\slshape{9}{1000}{OT1} -\setfont\reducedsf\sfshape{9}{1000}{OT1} -\setfont\reducedsc\scshape{10}{900}{OT1} -\setfont\reducedttsl\ttslshape{10}{900}{OT1TT} -\font\reducedi=cmmi9 -\font\reducedsy=cmsy9 -\def\reducedecsize{0900} - -\divide\parskip by 2 % reduce space between paragraphs -\textleading = 12pt % line spacing for 10pt CM -\textfonts % reset the current fonts -\rm -} % end of 10pt text font size definitions, \definetextfontsizex - - -% We provide the user-level command -% @fonttextsize 10 -% (or 11) to redefine the text font size. pt is assumed. -% -\def\xiword{11} -\def\xword{10} -\def\xwordpt{10pt} -% -\parseargdef\fonttextsize{% - \def\textsizearg{#1}% - %\wlog{doing @fonttextsize \textsizearg}% - % - % Set \globaldefs so that documents can use this inside @tex, since - % makeinfo 4.8 does not support it, but we need it nonetheless. - % - \begingroup \globaldefs=1 - \ifx\textsizearg\xword \definetextfontsizex - \else \ifx\textsizearg\xiword \definetextfontsizexi - \else - \errhelp=\EMsimple - \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} - \fi\fi - \endgroup -} - - -% In order for the font changes to affect most math symbols and letters, -% we have to define the \textfont of the standard families. Since -% texinfo doesn't allow for producing subscripts and superscripts except -% in the main text, we don't bother to reset \scriptfont and -% \scriptscriptfont (which would also require loading a lot more fonts). -% -\def\resetmathfonts{% - \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy - \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf - \textfont\ttfam=\tentt \textfont\sffam=\tensf -} - -% The font-changing commands redefine the meanings of \tenSTYLE, instead -% of just \STYLE. We do this because \STYLE needs to also set the -% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire -% \tenSTYLE to set the current font. -% -% Each font-changing command also sets the names \lsize (one size lower) -% and \lllsize (three sizes lower). These relative commands are used in -% the LaTeX logo and acronyms. -% -% This all needs generalizing, badly. -% -\def\textfonts{% - \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl - \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc - \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy - \let\tenttsl=\textttsl - \def\curfontsize{text}% - \def\lsize{reduced}\def\lllsize{smaller}% - \resetmathfonts \setleading{\textleading}} -\def\titlefonts{% - \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl - \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc - \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy - \let\tenttsl=\titlettsl - \def\curfontsize{title}% - \def\lsize{chap}\def\lllsize{subsec}% - \resetmathfonts \setleading{27pt}} -\def\titlefont#1{{\titlefonts\rmisbold #1}} -\def\chapfonts{% - \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl - \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc - \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy - \let\tenttsl=\chapttsl - \def\curfontsize{chap}% - \def\lsize{sec}\def\lllsize{text}% - \resetmathfonts \setleading{19pt}} -\def\secfonts{% - \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl - \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc - \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy - \let\tenttsl=\secttsl - \def\curfontsize{sec}% - \def\lsize{subsec}\def\lllsize{reduced}% - \resetmathfonts \setleading{16pt}} -\def\subsecfonts{% - \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl - \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc - \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy - \let\tenttsl=\ssecttsl - \def\curfontsize{ssec}% - \def\lsize{text}\def\lllsize{small}% - \resetmathfonts \setleading{15pt}} -\let\subsubsecfonts = \subsecfonts -\def\reducedfonts{% - \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl - \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc - \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy - \let\tenttsl=\reducedttsl - \def\curfontsize{reduced}% - \def\lsize{small}\def\lllsize{smaller}% - \resetmathfonts \setleading{10.5pt}} -\def\smallfonts{% - \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl - \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc - \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy - \let\tenttsl=\smallttsl - \def\curfontsize{small}% - \def\lsize{smaller}\def\lllsize{smaller}% - \resetmathfonts \setleading{10.5pt}} -\def\smallerfonts{% - \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl - \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc - \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy - \let\tenttsl=\smallerttsl - \def\curfontsize{smaller}% - \def\lsize{smaller}\def\lllsize{smaller}% - \resetmathfonts \setleading{9.5pt}} - -% Fonts for short table of contents. -\setfont\shortcontrm\rmshape{12}{1000}{OT1} -\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 -\setfont\shortcontsl\slshape{12}{1000}{OT1} -\setfont\shortconttt\ttshape{12}{1000}{OT1TT} - -% Define these just so they can be easily changed for other fonts. -\def\angleleft{$\langle$} -\def\angleright{$\rangle$} - -% Set the fonts to use with the @small... environments. -\let\smallexamplefonts = \smallfonts - -% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample -% can fit this many characters: -% 8.5x11=86 smallbook=72 a4=90 a5=69 -% If we use \scriptfonts (8pt), then we can fit this many characters: -% 8.5x11=90+ smallbook=80 a4=90+ a5=77 -% For me, subjectively, the few extra characters that fit aren't worth -% the additional smallness of 8pt. So I'm making the default 9pt. -% -% By the way, for comparison, here's what fits with @example (10pt): -% 8.5x11=71 smallbook=60 a4=75 a5=58 -% --karl, 24jan03. - -% Set up the default fonts, so we can use them for creating boxes. -% -\definetextfontsizexi - - -\message{markup,} - -% Check if we are currently using a typewriter font. Since all the -% Computer Modern typewriter fonts have zero interword stretch (and -% shrink), and it is reasonable to expect all typewriter fonts to have -% this property, we can check that font parameter. -% -\def\ifmonospace{\ifdim\fontdimen3\font=0pt } - -% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will -% define and register \INITMACRO to be called on markup style changes. -% \INITMACRO can check \currentmarkupstyle for the innermost -% style and the set of \ifmarkupSTYLE switches for all styles -% currently in effect. -\newif\ifmarkupvar -\newif\ifmarkupsamp -\newif\ifmarkupkey -%\newif\ifmarkupfile % @file == @samp. -%\newif\ifmarkupoption % @option == @samp. -\newif\ifmarkupcode -\newif\ifmarkupkbd -%\newif\ifmarkupenv % @env == @code. -%\newif\ifmarkupcommand % @command == @code. -\newif\ifmarkuptex % @tex (and part of @math, for now). -\newif\ifmarkupexample -\newif\ifmarkupverb -\newif\ifmarkupverbatim - -\let\currentmarkupstyle\empty - -\def\setupmarkupstyle#1{% - \csname markup#1true\endcsname - \def\currentmarkupstyle{#1}% - \markupstylesetup -} - -\let\markupstylesetup\empty - -\def\defmarkupstylesetup#1{% - \expandafter\def\expandafter\markupstylesetup - \expandafter{\markupstylesetup #1}% - \def#1% -} - -% Markup style setup for left and right quotes. -\defmarkupstylesetup\markupsetuplq{% - \expandafter\let\expandafter \temp - \csname markupsetuplq\currentmarkupstyle\endcsname - \ifx\temp\relax \markupsetuplqdefault \else \temp \fi -} - -\defmarkupstylesetup\markupsetuprq{% - \expandafter\let\expandafter \temp - \csname markupsetuprq\currentmarkupstyle\endcsname - \ifx\temp\relax \markupsetuprqdefault \else \temp \fi -} - -{ -\catcode`\'=\active -\catcode`\`=\active - -\gdef\markupsetuplqdefault{\let`\lq} -\gdef\markupsetuprqdefault{\let'\rq} - -\gdef\markupsetcodequoteleft{\let`\codequoteleft} -\gdef\markupsetcodequoteright{\let'\codequoteright} -} - -\let\markupsetuplqcode \markupsetcodequoteleft -\let\markupsetuprqcode \markupsetcodequoteright -% -\let\markupsetuplqexample \markupsetcodequoteleft -\let\markupsetuprqexample \markupsetcodequoteright -% -\let\markupsetuplqkbd \markupsetcodequoteleft -\let\markupsetuprqkbd \markupsetcodequoteright -% -\let\markupsetuplqsamp \markupsetcodequoteleft -\let\markupsetuprqsamp \markupsetcodequoteright -% -\let\markupsetuplqverb \markupsetcodequoteleft -\let\markupsetuprqverb \markupsetcodequoteright -% -\let\markupsetuplqverbatim \markupsetcodequoteleft -\let\markupsetuprqverbatim \markupsetcodequoteright - -% Allow an option to not use regular directed right quote/apostrophe -% (char 0x27), but instead the undirected quote from cmtt (char 0x0d). -% The undirected quote is ugly, so don't make it the default, but it -% works for pasting with more pdf viewers (at least evince), the -% lilypond developers report. xpdf does work with the regular 0x27. -% -\def\codequoteright{% - \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax - \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax - '% - \else \char'15 \fi - \else \char'15 \fi -} -% -% and a similar option for the left quote char vs. a grave accent. -% Modern fonts display ASCII 0x60 as a grave accent, so some people like -% the code environments to do likewise. -% -\def\codequoteleft{% - \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax - \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax - % [Knuth] pp. 380,381,391 - % \relax disables Spanish ligatures ?` and !` of \tt font. - \relax`% - \else \char'22 \fi - \else \char'22 \fi -} - -% Commands to set the quote options. -% -\parseargdef\codequoteundirected{% - \def\temp{#1}% - \ifx\temp\onword - \expandafter\let\csname SETtxicodequoteundirected\endcsname - = t% - \else\ifx\temp\offword - \expandafter\let\csname SETtxicodequoteundirected\endcsname - = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% - \fi\fi -} -% -\parseargdef\codequotebacktick{% - \def\temp{#1}% - \ifx\temp\onword - \expandafter\let\csname SETtxicodequotebacktick\endcsname - = t% - \else\ifx\temp\offword - \expandafter\let\csname SETtxicodequotebacktick\endcsname - = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% - \fi\fi -} - -% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. -\def\noligaturesquoteleft{\relax\lq} - -% Count depth in font-changes, for error checks -\newcount\fontdepth \fontdepth=0 - -% Font commands. - -% #1 is the font command (\sl or \it), #2 is the text to slant. -% If we are in a monospaced environment, however, 1) always use \ttsl, -% and 2) do not add an italic correction. -\def\dosmartslant#1#2{% - \ifusingtt - {{\ttsl #2}\let\next=\relax}% - {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% - \next -} -\def\smartslanted{\dosmartslant\sl} -\def\smartitalic{\dosmartslant\it} - -% Output an italic correction unless \next (presumed to be the following -% character) is such as not to need one. -\def\smartitaliccorrection{% - \ifx\next,% - \else\ifx\next-% - \else\ifx\next.% - \else\ptexslash - \fi\fi\fi - \aftersmartic -} - -% Unconditional use \ttsl, and no ic. @var is set to this for defuns. -\def\ttslanted#1{{\ttsl #1}} - -% @cite is like \smartslanted except unconditionally use \sl. We never want -% ttsl for book titles, do we? -\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} - -\def\aftersmartic{} -\def\var#1{% - \let\saveaftersmartic = \aftersmartic - \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% - \smartslanted{#1}% -} - -\let\i=\smartitalic -\let\slanted=\smartslanted -\let\dfn=\smartslanted -\let\emph=\smartitalic - -% Explicit font changes: @r, @sc, undocumented @ii. -\def\r#1{{\rm #1}} % roman font -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font - -% @b, explicit bold. Also @strong. -\def\b#1{{\bf #1}} -\let\strong=\b - -% @sansserif, explicit sans. -\def\sansserif#1{{\sf #1}} - -% We can't just use \exhyphenpenalty, because that only has effect at -% the end of a paragraph. Restore normal hyphenation at the end of the -% group within which \nohyphenation is presumably called. -% -\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} -\def\restorehyphenation{\hyphenchar\font = `- } - -% Set sfcode to normal for the chars that usually have another value. -% Can't use plain's \frenchspacing because it uses the `\x notation, and -% sometimes \x has an active definition that messes things up. -% -\catcode`@=11 - \def\plainfrenchspacing{% - \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m - \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m - \def\endofsentencespacefactor{1000}% for @. and friends - } - \def\plainnonfrenchspacing{% - \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 - \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 - \def\endofsentencespacefactor{3000}% for @. and friends - } -\catcode`@=\other -\def\endofsentencespacefactor{3000}% default - -% @t, explicit typewriter. -\def\t#1{% - {\tt \rawbackslash \plainfrenchspacing #1}% - \null -} - -% @samp. -\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} - -% @indicateurl is \samp, that is, with quotes. -\let\indicateurl=\samp - -% @code (and similar) prints in typewriter, but with spaces the same -% size as normal in the surrounding text, without hyphenation, etc. -% This is a subroutine for that. -\def\tclose#1{% - {% - % Change normal interword space to be same as for the current font. - \spaceskip = \fontdimen2\font - % - % Switch to typewriter. - \tt - % - % But `\ ' produces the large typewriter interword space. - \def\ {{\spaceskip = 0pt{} }}% - % - % Turn off hyphenation. - \nohyphenation - % - \rawbackslash - \plainfrenchspacing - #1% - }% - \null % reset spacefactor to 1000 -} - -% We *must* turn on hyphenation at `-' and `_' in @code. -% Otherwise, it is too hard to avoid overfull hboxes -% in the Emacs manual, the Library manual, etc. -% -% Unfortunately, TeX uses one parameter (\hyphenchar) to control -% both hyphenation at - and hyphenation within words. -% We must therefore turn them both off (\tclose does that) -% and arrange explicitly to hyphenate at a dash. -% -- rms. -{ - \catcode`\-=\active \catcode`\_=\active - \catcode`\'=\active \catcode`\`=\active - \global\let'=\rq \global\let`=\lq % default definitions - % - \global\def\code{\begingroup - \setupmarkupstyle{code}% - % The following should really be moved into \setupmarkupstyle handlers. - \catcode\dashChar=\active \catcode\underChar=\active - \ifallowcodebreaks - \let-\codedash - \let_\codeunder - \else - \let-\normaldash - \let_\realunder - \fi - \codex - } -} - -\def\codex #1{\tclose{#1}\endgroup} - -\def\normaldash{-} -\def\codedash{-\discretionary{}{}{}} -\def\codeunder{% - % this is all so @math{@code{var_name}+1} can work. In math mode, _ - % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) - % will therefore expand the active definition of _, which is us - % (inside @code that is), therefore an endless loop. - \ifusingtt{\ifmmode - \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. - \else\normalunderscore \fi - \discretionary{}{}{}}% - {\_}% -} - -% An additional complication: the above will allow breaks after, e.g., -% each of the four underscores in __typeof__. This is bad. -% @allowcodebreaks provides a document-level way to turn breaking at - -% and _ on and off. -% -\newif\ifallowcodebreaks \allowcodebreakstrue - -\def\keywordtrue{true} -\def\keywordfalse{false} - -\parseargdef\allowcodebreaks{% - \def\txiarg{#1}% - \ifx\txiarg\keywordtrue - \allowcodebreakstrue - \else\ifx\txiarg\keywordfalse - \allowcodebreaksfalse - \else - \errhelp = \EMsimple - \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% - \fi\fi -} - -% For @command, @env, @file, @option quotes seem unnecessary, -% so use \code rather than \samp. -\let\command=\code -\let\env=\code -\let\file=\code -\let\option=\code - -% @uref (abbreviation for `urlref') takes an optional (comma-separated) -% second argument specifying the text to display and an optional third -% arg as text to display instead of (rather than in addition to) the url -% itself. First (mandatory) arg is the url. -% (This \urefnobreak definition isn't used now, leaving it for a while -% for comparison.) -\def\urefnobreak#1{\dourefnobreak #1,,,\finish} -\def\dourefnobreak#1,#2,#3,#4\finish{\begingroup - \unsepspaces - \pdfurl{#1}% - \setbox0 = \hbox{\ignorespaces #3}% - \ifdim\wd0 > 0pt - \unhbox0 % third arg given, show only that - \else - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \ifpdf - \unhbox0 % PDF: 2nd arg given, show only it - \else - \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url - \fi - \else - \code{#1}% only url given, so show it - \fi - \fi - \endlink -\endgroup} - -% This \urefbreak definition is the active one. -\def\urefbreak{\begingroup \urefcatcodes \dourefbreak} -\let\uref=\urefbreak -\def\dourefbreak#1{\urefbreakfinish #1,,,\finish} -\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example - \unsepspaces - \pdfurl{#1}% - \setbox0 = \hbox{\ignorespaces #3}% - \ifdim\wd0 > 0pt - \unhbox0 % third arg given, show only that - \else - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \ifpdf - \unhbox0 % PDF: 2nd arg given, show only it - \else - \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url - \fi - \else - \urefcode{#1}% only url given, so show it - \fi - \fi - \endlink -\endgroup} - -% Allow line breaks around only a few characters (only). -\def\urefcatcodes{% - \catcode\ampChar=\active \catcode\dotChar=\active - \catcode\hashChar=\active \catcode\questChar=\active - \catcode\slashChar=\active -} -{ - \urefcatcodes - % - \global\def\urefcode{\begingroup - \setupmarkupstyle{code}% - \urefcatcodes - \let&\urefcodeamp - \let.\urefcodedot - \let#\urefcodehash - \let?\urefcodequest - \let/\urefcodeslash - \codex - } - % - % By default, they are just regular characters. - \global\def&{\normalamp} - \global\def.{\normaldot} - \global\def#{\normalhash} - \global\def?{\normalquest} - \global\def/{\normalslash} -} - -% we put a little stretch before and after the breakable chars, to help -% line breaking of long url's. The unequal skips make look better in -% cmtt at least, especially for dots. -\def\urefprestretch{\urefprebreak \hskip0pt plus.13em } -\def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } -% -\def\urefcodeamp{\urefprestretch \&\urefpoststretch} -\def\urefcodedot{\urefprestretch .\urefpoststretch} -\def\urefcodehash{\urefprestretch \#\urefpoststretch} -\def\urefcodequest{\urefprestretch ?\urefpoststretch} -\def\urefcodeslash{\futurelet\next\urefcodeslashfinish} -{ - \catcode`\/=\active - \global\def\urefcodeslashfinish{% - \urefprestretch \slashChar - % Allow line break only after the final / in a sequence of - % slashes, to avoid line break between the slashes in http://. - \ifx\next/\else \urefpoststretch \fi - } -} - -% One more complication: by default we'll break after the special -% characters, but some people like to break before the special chars, so -% allow that. Also allow no breaking at all, for manual control. -% -\parseargdef\urefbreakstyle{% - \def\txiarg{#1}% - \ifx\txiarg\wordnone - \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} - \else\ifx\txiarg\wordbefore - \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} - \else\ifx\txiarg\wordafter - \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} - \else - \errhelp = \EMsimple - \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% - \fi\fi\fi -} -\def\wordafter{after} -\def\wordbefore{before} -\def\wordnone{none} - -\urefbreakstyle after - -% @url synonym for @uref, since that's how everyone uses it. -% -\let\url=\uref - -% rms does not like angle brackets --karl, 17may97. -% So now @email is just like @uref, unless we are pdf. -% -%\def\email#1{\angleleft{\tt #1}\angleright} -\ifpdf - \def\email#1{\doemail#1,,\finish} - \def\doemail#1,#2,#3\finish{\begingroup - \unsepspaces - \pdfurl{mailto:#1}% - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi - \endlink - \endgroup} -\else - \let\email=\uref -\fi - -% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), -% `example' (@kbd uses ttsl only inside of @example and friends), -% or `code' (@kbd uses normal tty font always). -\parseargdef\kbdinputstyle{% - \def\txiarg{#1}% - \ifx\txiarg\worddistinct - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% - \else\ifx\txiarg\wordexample - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% - \else\ifx\txiarg\wordcode - \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% - \else - \errhelp = \EMsimple - \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% - \fi\fi\fi -} -\def\worddistinct{distinct} -\def\wordexample{example} -\def\wordcode{code} - -% Default is `distinct'. -\kbdinputstyle distinct - -% @kbd is like @code, except that if the argument is just one @key command, -% then @kbd has no effect. -\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} - -\def\xkey{\key} -\def\kbdsub#1#2#3\par{% - \def\one{#1}\def\three{#3}\def\threex{??}% - \ifx\one\xkey\ifx\threex\three \key{#2}% - \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi - \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi -} - -% definition of @key that produces a lozenge. Doesn't adjust to text size. -%\setfont\keyrm\rmshape{8}{1000}{OT1} -%\font\keysy=cmsy9 -%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% -% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% -% \vbox{\hrule\kern-0.4pt -% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% -% \kern-0.4pt\hrule}% -% \kern-.06em\raise0.4pt\hbox{\angleright}}}} - -% definition of @key with no lozenge. If the current font is already -% monospace, don't change it; that way, we respect @kbdinputstyle. But -% if it isn't monospace, then use \tt. -% -\def\key#1{{\setupmarkupstyle{key}% - \nohyphenation - \ifmonospace\else\tt\fi - #1}\null} - -% @clicksequence{File @click{} Open ...} -\def\clicksequence#1{\begingroup #1\endgroup} - -% @clickstyle @arrow (by default) -\parseargdef\clickstyle{\def\click{#1}} -\def\click{\arrow} - -% Typeset a dimension, e.g., `in' or `pt'. The only reason for the -% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. -% -\def\dmn#1{\thinspace #1} - -% @l was never documented to mean ``switch to the Lisp font'', -% and it is not used as such in any manual I can find. We need it for -% Polish suppressed-l. --karl, 22sep96. -%\def\l#1{{\li #1}\null} - -% @acronym for "FBI", "NATO", and the like. -% We print this one point size smaller, since it's intended for -% all-uppercase. -% -\def\acronym#1{\doacronym #1,,\finish} -\def\doacronym#1,#2,#3\finish{% - {\selectfonts\lsize #1}% - \def\temp{#2}% - \ifx\temp\empty \else - \space ({\unsepspaces \ignorespaces \temp \unskip})% - \fi - \null % reset \spacefactor=1000 -} - -% @abbr for "Comput. J." and the like. -% No font change, but don't do end-of-sentence spacing. -% -\def\abbr#1{\doabbr #1,,\finish} -\def\doabbr#1,#2,#3\finish{% - {\plainfrenchspacing #1}% - \def\temp{#2}% - \ifx\temp\empty \else - \space ({\unsepspaces \ignorespaces \temp \unskip})% - \fi - \null % reset \spacefactor=1000 -} - -% @asis just yields its argument. Used with @table, for example. -% -\def\asis#1{#1} - -% @math outputs its argument in math mode. -% -% One complication: _ usually means subscripts, but it could also mean -% an actual _ character, as in @math{@var{some_variable} + 1}. So make -% _ active, and distinguish by seeing if the current family is \slfam, -% which is what @var uses. -{ - \catcode`\_ = \active - \gdef\mathunderscore{% - \catcode`\_=\active - \def_{\ifnum\fam=\slfam \_\else\sb\fi}% - } -} -% Another complication: we want \\ (and @\) to output a math (or tt) \. -% FYI, plain.tex uses \\ as a temporary control sequence (for no -% particular reason), but this is not advertised and we don't care. -% -% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. -\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} -% -\def\math{% - \tex - \mathunderscore - \let\\ = \mathbackslash - \mathactive - % make the texinfo accent commands work in math mode - \let\"=\ddot - \let\'=\acute - \let\==\bar - \let\^=\hat - \let\`=\grave - \let\u=\breve - \let\v=\check - \let\~=\tilde - \let\dotaccent=\dot - $\finishmath -} -\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. - -% Some active characters (such as <) are spaced differently in math. -% We have to reset their definitions in case the @math was an argument -% to a command which sets the catcodes (such as @item or @section). -% -{ - \catcode`^ = \active - \catcode`< = \active - \catcode`> = \active - \catcode`+ = \active - \catcode`' = \active - \gdef\mathactive{% - \let^ = \ptexhat - \let< = \ptexless - \let> = \ptexgtr - \let+ = \ptexplus - \let' = \ptexquoteright - } -} - -% ctrl is no longer a Texinfo command, but leave this definition for fun. -\def\ctrl #1{{\tt \rawbackslash \hat}#1} - -% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. -% Ignore unless FMTNAME == tex; then it is like @iftex and @tex, -% except specified as a normal braced arg, so no newlines to worry about. -% -\def\outfmtnametex{tex} -% -\long\def\inlinefmt#1{\doinlinefmt #1,\finish} -\long\def\doinlinefmt#1,#2,\finish{% - \def\inlinefmtname{#1}% - \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi -} -% For raw, must switch into @tex before parsing the argument, to avoid -% setting catcodes prematurely. Doing it this way means that, for -% example, @inlineraw{html, foo{bar} gets a parse error instead of being -% ignored. But this isn't important because if people want a literal -% *right* brace they would have to use a command anyway, so they may as -% well use a command to get a left brace too. We could re-use the -% delimiter character idea from \verb, but it seems like overkill. -% -\long\def\inlineraw{\tex \doinlineraw} -\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} -\def\doinlinerawtwo#1,#2,\finish{% - \def\inlinerawname{#1}% - \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi - \endgroup % close group opened by \tex. -} - - -\message{glyphs,} -% and logos. - -% @@ prints an @, as does @atchar{}. -\def\@{\char64 } -\let\atchar=\@ - -% @{ @} @lbracechar{} @rbracechar{} all generate brace characters. -% Unless we're in typewriter, use \ecfont because the CM text fonts do -% not have braces, and we don't want to switch into math. -\def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} -\def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} -\let\{=\mylbrace \let\lbracechar=\{ -\let\}=\myrbrace \let\rbracechar=\} -\begingroup - % Definitions to produce \{ and \} commands for indices, - % and @{ and @} for the aux/toc files. - \catcode`\{ = \other \catcode`\} = \other - \catcode`\[ = 1 \catcode`\] = 2 - \catcode`\! = 0 \catcode`\\ = \other - !gdef!lbracecmd[\{]% - !gdef!rbracecmd[\}]% - !gdef!lbraceatcmd[@{]% - !gdef!rbraceatcmd[@}]% -!endgroup - -% @comma{} to avoid , parsing problems. -\let\comma = , - -% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent -% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. -\let\, = \ptexc -\let\dotaccent = \ptexdot -\def\ringaccent#1{{\accent23 #1}} -\let\tieaccent = \ptext -\let\ubaraccent = \ptexb -\let\udotaccent = \d - -% Other special characters: @questiondown @exclamdown @ordf @ordm -% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. -\def\questiondown{?`} -\def\exclamdown{!`} -\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} -\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} - -% Dotless i and dotless j, used for accents. -\def\imacro{i} -\def\jmacro{j} -\def\dotless#1{% - \def\temp{#1}% - \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi - \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi - \else \errmessage{@dotless can be used only with i or j}% - \fi\fi -} - -% The \TeX{} logo, as in plain, but resetting the spacing so that a -% period following counts as ending a sentence. (Idea found in latex.) -% -\edef\TeX{\TeX \spacefactor=1000 } - -% @LaTeX{} logo. Not quite the same results as the definition in -% latex.ltx, since we use a different font for the raised A; it's most -% convenient for us to use an explicitly smaller font, rather than using -% the \scriptstyle font (since we don't reset \scriptstyle and -% \scriptscriptstyle). -% -\def\LaTeX{% - L\kern-.36em - {\setbox0=\hbox{T}% - \vbox to \ht0{\hbox{% - \ifx\textnominalsize\xwordpt - % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. - % Revert to plain's \scriptsize, which is 7pt. - \count255=\the\fam $\fam\count255 \scriptstyle A$% - \else - % For 11pt, we can use our lllsize. - \selectfonts\lllsize A% - \fi - }% - \vss - }}% - \kern-.15em - \TeX -} - -% Some math mode symbols. -\def\bullet{$\ptexbullet$} -\def\geq{\ifmmode \ge\else $\ge$\fi} -\def\leq{\ifmmode \le\else $\le$\fi} -\def\minus{\ifmmode -\else $-$\fi} - -% @dots{} outputs an ellipsis using the current font. -% We do .5em per period so that it has the same spacing in the cm -% typewriter fonts as three actual period characters; on the other hand, -% in other typewriter fonts three periods are wider than 1.5em. So do -% whichever is larger. -% -\def\dots{% - \leavevmode - \setbox0=\hbox{...}% get width of three periods - \ifdim\wd0 > 1.5em - \dimen0 = \wd0 - \else - \dimen0 = 1.5em - \fi - \hbox to \dimen0{% - \hskip 0pt plus.25fil - .\hskip 0pt plus1fil - .\hskip 0pt plus1fil - .\hskip 0pt plus.5fil - }% -} - -% @enddots{} is an end-of-sentence ellipsis. -% -\def\enddots{% - \dots - \spacefactor=\endofsentencespacefactor -} - -% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. -% -% Since these characters are used in examples, they should be an even number of -% \tt widths. Each \tt character is 1en, so two makes it 1em. -% -\def\point{$\star$} -\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} -\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} -\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} -\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} -\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} - -% The @error{} command. -% Adapted from the TeXbook's \boxit. -% -\newbox\errorbox -% -{\tentt \global\dimen0 = 3em}% Width of the box. -\dimen2 = .55pt % Thickness of rules -% The text. (`r' is open on the right, `e' somewhat less so on the left.) -\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} -% -\setbox\errorbox=\hbox to \dimen0{\hfil - \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. - \advance\hsize by -2\dimen2 % Rules. - \vbox{% - \hrule height\dimen2 - \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. - \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. - \kern3pt\vrule width\dimen2}% Space to right. - \hrule height\dimen2} - \hfil} -% -\def\error{\leavevmode\lower.7ex\copy\errorbox} - -% @pounds{} is a sterling sign, which Knuth put in the CM italic font. -% -\def\pounds{{\it\$}} - -% @euro{} comes from a separate font, depending on the current style. -% We use the free feym* fonts from the eurosym package by Henrik -% Theiling, which support regular, slanted, bold and bold slanted (and -% "outlined" (blackboard board, sort of) versions, which we don't need). -% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. -% -% Although only regular is the truly official Euro symbol, we ignore -% that. The Euro is designed to be slightly taller than the regular -% font height. -% -% feymr - regular -% feymo - slanted -% feybr - bold -% feybo - bold slanted -% -% There is no good (free) typewriter version, to my knowledge. -% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. -% Hmm. -% -% Also doesn't work in math. Do we need to do math with euro symbols? -% Hope not. -% -% -\def\euro{{\eurofont e}} -\def\eurofont{% - % We set the font at each command, rather than predefining it in - % \textfonts and the other font-switching commands, so that - % installations which never need the symbol don't have to have the - % font installed. - % - % There is only one designed size (nominal 10pt), so we always scale - % that to the current nominal size. - % - % By the way, simply using "at 1em" works for cmr10 and the like, but - % does not work for cmbx10 and other extended/shrunken fonts. - % - \def\eurosize{\csname\curfontsize nominalsize\endcsname}% - % - \ifx\curfontstyle\bfstylename - % bold: - \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize - \else - % regular: - \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize - \fi - \thiseurofont -} - -% Glyphs from the EC fonts. We don't use \let for the aliases, because -% sometimes we redefine the original macro, and the alias should reflect -% the redefinition. -% -% Use LaTeX names for the Icelandic letters. -\def\DH{{\ecfont \char"D0}} % Eth -\def\dh{{\ecfont \char"F0}} % eth -\def\TH{{\ecfont \char"DE}} % Thorn -\def\th{{\ecfont \char"FE}} % thorn -% -\def\guillemetleft{{\ecfont \char"13}} -\def\guillemotleft{\guillemetleft} -\def\guillemetright{{\ecfont \char"14}} -\def\guillemotright{\guillemetright} -\def\guilsinglleft{{\ecfont \char"0E}} -\def\guilsinglright{{\ecfont \char"0F}} -\def\quotedblbase{{\ecfont \char"12}} -\def\quotesinglbase{{\ecfont \char"0D}} -% -% This positioning is not perfect (see the ogonek LaTeX package), but -% we have the precomposed glyphs for the most common cases. We put the -% tests to use those glyphs in the single \ogonek macro so we have fewer -% dummy definitions to worry about for index entries, etc. -% -% ogonek is also used with other letters in Lithuanian (IOU), but using -% the precomposed glyphs for those is not so easy since they aren't in -% the same EC font. -\def\ogonek#1{{% - \def\temp{#1}% - \ifx\temp\macrocharA\Aogonek - \else\ifx\temp\macrochara\aogonek - \else\ifx\temp\macrocharE\Eogonek - \else\ifx\temp\macrochare\eogonek - \else - \ecfont \setbox0=\hbox{#1}% - \ifdim\ht0=1ex\accent"0C #1% - \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% - \fi - \fi\fi\fi\fi - }% -} -\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} -\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} -\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} -\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} -% -% Use the ec* fonts (cm-super in outline format) for non-CM glyphs. -\def\ecfont{% - % We can't distinguish serif/sans and italic/slanted, but this - % is used for crude hacks anyway (like adding French and German - % quotes to documents typeset with CM, where we lose kerning), so - % hopefully nobody will notice/care. - \edef\ecsize{\csname\curfontsize ecsize\endcsname}% - \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% - \ifmonospace - % typewriter: - \font\thisecfont = ectt\ecsize \space at \nominalsize - \else - \ifx\curfontstyle\bfstylename - % bold: - \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize - \else - % regular: - \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize - \fi - \fi - \thisecfont -} - -% @registeredsymbol - R in a circle. The font for the R should really -% be smaller yet, but lllsize is the best we can do for now. -% Adapted from the plain.tex definition of \copyright. -% -\def\registeredsymbol{% - $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% - \hfil\crcr\Orb}}% - }$% -} - -% @textdegree - the normal degrees sign. -% -\def\textdegree{$^\circ$} - -% Laurent Siebenmann reports \Orb undefined with: -% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 -% so we'll define it if necessary. -% -\ifx\Orb\thisisundefined -\def\Orb{\mathhexbox20D} -\fi - -% Quotes. -\chardef\quotedblleft="5C -\chardef\quotedblright=`\" -\chardef\quoteleft=`\` -\chardef\quoteright=`\' - - -\message{page headings,} - -\newskip\titlepagetopglue \titlepagetopglue = 1.5in -\newskip\titlepagebottomglue \titlepagebottomglue = 2pc - -% First the title page. Must do @settitle before @titlepage. -\newif\ifseenauthor -\newif\iffinishedtitlepage - -% Do an implicit @contents or @shortcontents after @end titlepage if the -% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. -% -\newif\ifsetcontentsaftertitlepage - \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue -\newif\ifsetshortcontentsaftertitlepage - \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue - -\parseargdef\shorttitlepage{% - \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% - \endgroup\page\hbox{}\page} - -\envdef\titlepage{% - % Open one extra group, as we want to close it in the middle of \Etitlepage. - \begingroup - \parindent=0pt \textfonts - % Leave some space at the very top of the page. - \vglue\titlepagetopglue - % No rule at page bottom unless we print one at the top with @title. - \finishedtitlepagetrue - % - % Most title ``pages'' are actually two pages long, with space - % at the top of the second. We don't want the ragged left on the second. - \let\oldpage = \page - \def\page{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - \let\page = \oldpage - \page - \null - }% -} - -\def\Etitlepage{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - % It is important to do the page break before ending the group, - % because the headline and footline are only empty inside the group. - % If we use the new definition of \page, we always get a blank page - % after the title page, which we certainly don't want. - \oldpage - \endgroup - % - % Need this before the \...aftertitlepage checks so that if they are - % in effect the toc pages will come out with page numbers. - \HEADINGSon - % - % If they want short, they certainly want long too. - \ifsetshortcontentsaftertitlepage - \shortcontents - \contents - \global\let\shortcontents = \relax - \global\let\contents = \relax - \fi - % - \ifsetcontentsaftertitlepage - \contents - \global\let\contents = \relax - \global\let\shortcontents = \relax - \fi -} - -\def\finishtitlepage{% - \vskip4pt \hrule height 2pt width \hsize - \vskip\titlepagebottomglue - \finishedtitlepagetrue -} - -% Settings used for typesetting titles: no hyphenation, no indentation, -% don't worry much about spacing, ragged right. This should be used -% inside a \vbox, and fonts need to be set appropriately first. Because -% it is always used for titles, nothing else, we call \rmisbold. \par -% should be specified before the end of the \vbox, since a vbox is a group. -% -\def\raggedtitlesettings{% - \rmisbold - \hyphenpenalty=10000 - \parindent=0pt - \tolerance=5000 - \ptexraggedright -} - -% Macros to be used within @titlepage: - -\let\subtitlerm=\tenrm -\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} - -\parseargdef\title{% - \checkenv\titlepage - \vbox{\titlefonts \raggedtitlesettings #1\par}% - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt width \hsize \vskip4pt -} - -\parseargdef\subtitle{% - \checkenv\titlepage - {\subtitlefont \rightline{#1}}% -} - -% @author should come last, but may come many times. -% It can also be used inside @quotation. -% -\parseargdef\author{% - \def\temp{\quotation}% - \ifx\thisenv\temp - \def\quotationauthor{#1}% printed in \Equotation. - \else - \checkenv\titlepage - \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi - {\secfonts\rmisbold \leftline{#1}}% - \fi -} - - -% Set up page headings and footings. - -\let\thispage=\folio - -\newtoks\evenheadline % headline on even pages -\newtoks\oddheadline % headline on odd pages -\newtoks\evenfootline % footline on even pages -\newtoks\oddfootline % footline on odd pages - -% Now make TeX use those variables -\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline - \else \the\evenheadline \fi}} -\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline - \else \the\evenfootline \fi}\HEADINGShook} -\let\HEADINGShook=\relax - -% Commands to set those variables. -% For example, this is what @headings on does -% @evenheading @thistitle|@thispage|@thischapter -% @oddheading @thischapter|@thispage|@thistitle -% @evenfooting @thisfile|| -% @oddfooting ||@thisfile - - -\def\evenheading{\parsearg\evenheadingxxx} -\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} -\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\def\oddheading{\parsearg\oddheadingxxx} -\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} -\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% - -\def\evenfooting{\parsearg\evenfootingxxx} -\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} -\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\def\oddfooting{\parsearg\oddfootingxxx} -\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} -\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% - \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% - % - % Leave some space for the footline. Hopefully ok to assume - % @evenfooting will not be used by itself. - \global\advance\pageheight by -12pt - \global\advance\vsize by -12pt -} - -\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} - -% @evenheadingmarks top \thischapter <- chapter at the top of a page -% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page -% -% The same set of arguments for: -% -% @oddheadingmarks -% @evenfootingmarks -% @oddfootingmarks -% @everyheadingmarks -% @everyfootingmarks - -\def\evenheadingmarks{\headingmarks{even}{heading}} -\def\oddheadingmarks{\headingmarks{odd}{heading}} -\def\evenfootingmarks{\headingmarks{even}{footing}} -\def\oddfootingmarks{\headingmarks{odd}{footing}} -\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} - \headingmarks{odd}{heading}{#1} } -\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} - \headingmarks{odd}{footing}{#1} } -% #1 = even/odd, #2 = heading/footing, #3 = top/bottom. -\def\headingmarks#1#2#3 {% - \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname - \global\expandafter\let\csname get#1#2marks\endcsname \temp -} - -\everyheadingmarks bottom -\everyfootingmarks bottom - -% @headings double turns headings on for double-sided printing. -% @headings single turns headings on for single-sided printing. -% @headings off turns them off. -% @headings on same as @headings double, retained for compatibility. -% @headings after turns on double-sided headings after this page. -% @headings doubleafter turns on double-sided headings after this page. -% @headings singleafter turns on single-sided headings after this page. -% By default, they are off at the start of a document, -% and turned `on' after @end titlepage. - -\def\headings #1 {\csname HEADINGS#1\endcsname} - -\def\headingsoff{% non-global headings elimination - \evenheadline={\hfil}\evenfootline={\hfil}% - \oddheadline={\hfil}\oddfootline={\hfil}% -} - -\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting -\HEADINGSoff % it's the default - -% When we turn headings on, set the page number to 1. -% For double-sided printing, put current file name in lower left corner, -% chapter name on inside top of right hand pages, document -% title on inside top of left hand pages, and page numbers on outside top -% edge of all pages. -\def\HEADINGSdouble{% -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} -\let\contentsalignmacro = \chappager - -% For single-sided printing, chapter title goes across top left of page, -% page number on top right. -\def\HEADINGSsingle{% -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} -\def\HEADINGSon{\HEADINGSdouble} - -\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} -\let\HEADINGSdoubleafter=\HEADINGSafter -\def\HEADINGSdoublex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} - -\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} -\def\HEADINGSsinglex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} - -% Subroutines used in generating headings -% This produces Day Month Year style of output. -% Only define if not already defined, in case a txi-??.tex file has set -% up a different format (e.g., txi-cs.tex does this). -\ifx\today\thisisundefined -\def\today{% - \number\day\space - \ifcase\month - \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr - \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug - \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec - \fi - \space\number\year} -\fi - -% @settitle line... specifies the title of the document, for headings. -% It generates no output of its own. -\def\thistitle{\putwordNoTitle} -\def\settitle{\parsearg{\gdef\thistitle}} - - -\message{tables,} -% Tables -- @table, @ftable, @vtable, @item(x). - -% default indentation of table text -\newdimen\tableindent \tableindent=.8in -% default indentation of @itemize and @enumerate text -\newdimen\itemindent \itemindent=.3in -% margin between end of table item and start of table text. -\newdimen\itemmargin \itemmargin=.1in - -% used internally for \itemindent minus \itemmargin -\newdimen\itemmax - -% Note @table, @ftable, and @vtable define @item, @itemx, etc., with -% these defs. -% They also define \itemindex -% to index the item name in whatever manner is desired (perhaps none). - -\newif\ifitemxneedsnegativevskip - -\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} - -\def\internalBitem{\smallbreak \parsearg\itemzzz} -\def\internalBitemx{\itemxpar \parsearg\itemzzz} - -\def\itemzzz #1{\begingroup % - \advance\hsize by -\rightskip - \advance\hsize by -\tableindent - \setbox0=\hbox{\itemindicate{#1}}% - \itemindex{#1}% - \nobreak % This prevents a break before @itemx. - % - % If the item text does not fit in the space we have, put it on a line - % by itself, and do not allow a page break either before or after that - % line. We do not start a paragraph here because then if the next - % command is, e.g., @kindex, the whatsit would get put into the - % horizontal list on a line by itself, resulting in extra blank space. - \ifdim \wd0>\itemmax - % - % Make this a paragraph so we get the \parskip glue and wrapping, - % but leave it ragged-right. - \begingroup - \advance\leftskip by-\tableindent - \advance\hsize by\tableindent - \advance\rightskip by0pt plus1fil\relax - \leavevmode\unhbox0\par - \endgroup - % - % We're going to be starting a paragraph, but we don't want the - % \parskip glue -- logically it's part of the @item we just started. - \nobreak \vskip-\parskip - % - % Stop a page break at the \parskip glue coming up. However, if - % what follows is an environment such as @example, there will be no - % \parskip glue; then the negative vskip we just inserted would - % cause the example and the item to crash together. So we use this - % bizarre value of 10001 as a signal to \aboveenvbreak to insert - % \parskip glue after all. Section titles are handled this way also. - % - \penalty 10001 - \endgroup - \itemxneedsnegativevskipfalse - \else - % The item text fits into the space. Start a paragraph, so that the - % following text (if any) will end up on the same line. - \noindent - % Do this with kerns and \unhbox so that if there is a footnote in - % the item text, it can migrate to the main vertical list and - % eventually be printed. - \nobreak\kern-\tableindent - \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 - \unhbox0 - \nobreak\kern\dimen0 - \endgroup - \itemxneedsnegativevskiptrue - \fi -} - -\def\item{\errmessage{@item while not in a list environment}} -\def\itemx{\errmessage{@itemx while not in a list environment}} - -% @table, @ftable, @vtable. -\envdef\table{% - \let\itemindex\gobble - \tablecheck{table}% -} -\envdef\ftable{% - \def\itemindex ##1{\doind {fn}{\code{##1}}}% - \tablecheck{ftable}% -} -\envdef\vtable{% - \def\itemindex ##1{\doind {vr}{\code{##1}}}% - \tablecheck{vtable}% -} -\def\tablecheck#1{% - \ifnum \the\catcode`\^^M=\active - \endgroup - \errmessage{This command won't work in this context; perhaps the problem is - that we are \inenvironment\thisenv}% - \def\next{\doignore{#1}}% - \else - \let\next\tablex - \fi - \next -} -\def\tablex#1{% - \def\itemindicate{#1}% - \parsearg\tabley -} -\def\tabley#1{% - {% - \makevalueexpandable - \edef\temp{\noexpand\tablez #1\space\space\space}% - \expandafter - }\temp \endtablez -} -\def\tablez #1 #2 #3 #4\endtablez{% - \aboveenvbreak - \ifnum 0#1>0 \advance \leftskip by #1\mil \fi - \ifnum 0#2>0 \tableindent=#2\mil \fi - \ifnum 0#3>0 \advance \rightskip by #3\mil \fi - \itemmax=\tableindent - \advance \itemmax by -\itemmargin - \advance \leftskip by \tableindent - \exdentamount=\tableindent - \parindent = 0pt - \parskip = \smallskipamount - \ifdim \parskip=0pt \parskip=2pt \fi - \let\item = \internalBitem - \let\itemx = \internalBitemx -} -\def\Etable{\endgraf\afterenvbreak} -\let\Eftable\Etable -\let\Evtable\Etable -\let\Eitemize\Etable -\let\Eenumerate\Etable - -% This is the counter used by @enumerate, which is really @itemize - -\newcount \itemno - -\envdef\itemize{\parsearg\doitemize} - -\def\doitemize#1{% - \aboveenvbreak - \itemmax=\itemindent - \advance\itemmax by -\itemmargin - \advance\leftskip by \itemindent - \exdentamount=\itemindent - \parindent=0pt - \parskip=\smallskipamount - \ifdim\parskip=0pt \parskip=2pt \fi - % - % Try typesetting the item mark that if the document erroneously says - % something like @itemize @samp (intending @table), there's an error - % right away at the @itemize. It's not the best error message in the - % world, but it's better than leaving it to the @item. This means if - % the user wants an empty mark, they have to say @w{} not just @w. - \def\itemcontents{#1}% - \setbox0 = \hbox{\itemcontents}% - % - % @itemize with no arg is equivalent to @itemize @bullet. - \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi - % - \let\item=\itemizeitem -} - -% Definition of @item while inside @itemize and @enumerate. -% -\def\itemizeitem{% - \advance\itemno by 1 % for enumerations - {\let\par=\endgraf \smallbreak}% reasonable place to break - {% - % If the document has an @itemize directly after a section title, a - % \nobreak will be last on the list, and \sectionheading will have - % done a \vskip-\parskip. In that case, we don't want to zero - % parskip, or the item text will crash with the heading. On the - % other hand, when there is normal text preceding the item (as there - % usually is), we do want to zero parskip, or there would be too much - % space. In that case, we won't have a \nobreak before. At least - % that's the theory. - \ifnum\lastpenalty<10000 \parskip=0in \fi - \noindent - \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% - % - \vadjust{\penalty 1200}}% not good to break after first line of item. - \flushcr -} - -% \splitoff TOKENS\endmark defines \first to be the first token in -% TOKENS, and \rest to be the remainder. -% -\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% - -% Allow an optional argument of an uppercase letter, lowercase letter, -% or number, to specify the first label in the enumerated list. No -% argument is the same as `1'. -% -\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} -\def\enumeratey #1 #2\endenumeratey{% - % If we were given no argument, pretend we were given `1'. - \def\thearg{#1}% - \ifx\thearg\empty \def\thearg{1}\fi - % - % Detect if the argument is a single token. If so, it might be a - % letter. Otherwise, the only valid thing it can be is a number. - % (We will always have one token, because of the test we just made. - % This is a good thing, since \splitoff doesn't work given nothing at - % all -- the first parameter is undelimited.) - \expandafter\splitoff\thearg\endmark - \ifx\rest\empty - % Only one token in the argument. It could still be anything. - % A ``lowercase letter'' is one whose \lccode is nonzero. - % An ``uppercase letter'' is one whose \lccode is both nonzero, and - % not equal to itself. - % Otherwise, we assume it's a number. - % - % We need the \relax at the end of the \ifnum lines to stop TeX from - % continuing to look for a <number>. - % - \ifnum\lccode\expandafter`\thearg=0\relax - \numericenumerate % a number (we hope) - \else - % It's a letter. - \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax - \lowercaseenumerate % lowercase letter - \else - \uppercaseenumerate % uppercase letter - \fi - \fi - \else - % Multiple tokens in the argument. We hope it's a number. - \numericenumerate - \fi -} - -% An @enumerate whose labels are integers. The starting integer is -% given in \thearg. -% -\def\numericenumerate{% - \itemno = \thearg - \startenumeration{\the\itemno}% -} - -% The starting (lowercase) letter is in \thearg. -\def\lowercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more lowercase letters in @enumerate; get a bigger - alphabet}% - \fi - \char\lccode\itemno - }% -} - -% The starting (uppercase) letter is in \thearg. -\def\uppercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more uppercase letters in @enumerate; get a bigger - alphabet} - \fi - \char\uccode\itemno - }% -} - -% Call \doitemize, adding a period to the first argument and supplying the -% common last two arguments. Also subtract one from the initial value in -% \itemno, since @item increments \itemno. -% -\def\startenumeration#1{% - \advance\itemno by -1 - \doitemize{#1.}\flushcr -} - -% @alphaenumerate and @capsenumerate are abbreviations for giving an arg -% to @enumerate. -% -\def\alphaenumerate{\enumerate{a}} -\def\capsenumerate{\enumerate{A}} -\def\Ealphaenumerate{\Eenumerate} -\def\Ecapsenumerate{\Eenumerate} - - -% @multitable macros -% Amy Hendrickson, 8/18/94, 3/6/96 -% -% @multitable ... @end multitable will make as many columns as desired. -% Contents of each column will wrap at width given in preamble. Width -% can be specified either with sample text given in a template line, -% or in percent of \hsize, the current width of text on page. - -% Table can continue over pages but will only break between lines. - -% To make preamble: -% -% Either define widths of columns in terms of percent of \hsize: -% @multitable @columnfractions .25 .3 .45 -% @item ... -% -% Numbers following @columnfractions are the percent of the total -% current hsize to be used for each column. You may use as many -% columns as desired. - - -% Or use a template: -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item ... -% using the widest term desired in each column. - -% Each new table line starts with @item, each subsequent new column -% starts with @tab. Empty columns may be produced by supplying @tab's -% with nothing between them for as many times as empty columns are needed, -% ie, @tab@tab@tab will produce two empty columns. - -% @item, @tab do not need to be on their own lines, but it will not hurt -% if they are. - -% Sample multitable: - -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item first col stuff @tab second col stuff @tab third col -% @item -% first col stuff -% @tab -% second col stuff -% @tab -% third col -% @item first col stuff @tab second col stuff -% @tab Many paragraphs of text may be used in any column. -% -% They will wrap at the width determined by the template. -% @item@tab@tab This will be in third column. -% @end multitable - -% Default dimensions may be reset by user. -% @multitableparskip is vertical space between paragraphs in table. -% @multitableparindent is paragraph indent in table. -% @multitablecolmargin is horizontal space to be left between columns. -% @multitablelinespace is space to leave between table items, baseline -% to baseline. -% 0pt means it depends on current normal line spacing. -% -\newskip\multitableparskip -\newskip\multitableparindent -\newdimen\multitablecolspace -\newskip\multitablelinespace -\multitableparskip=0pt -\multitableparindent=6pt -\multitablecolspace=12pt -\multitablelinespace=0pt - -% Macros used to set up halign preamble: -% -\let\endsetuptable\relax -\def\xendsetuptable{\endsetuptable} -\let\columnfractions\relax -\def\xcolumnfractions{\columnfractions} -\newif\ifsetpercent - -% #1 is the @columnfraction, usually a decimal number like .5, but might -% be just 1. We just use it, whatever it is. -% -\def\pickupwholefraction#1 {% - \global\advance\colcount by 1 - \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% - \setuptable -} - -\newcount\colcount -\def\setuptable#1{% - \def\firstarg{#1}% - \ifx\firstarg\xendsetuptable - \let\go = \relax - \else - \ifx\firstarg\xcolumnfractions - \global\setpercenttrue - \else - \ifsetpercent - \let\go\pickupwholefraction - \else - \global\advance\colcount by 1 - \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a - % separator; typically that is always in the input, anyway. - \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% - \fi - \fi - \ifx\go\pickupwholefraction - % Put the argument back for the \pickupwholefraction call, so - % we'll always have a period there to be parsed. - \def\go{\pickupwholefraction#1}% - \else - \let\go = \setuptable - \fi% - \fi - \go -} - -% multitable-only commands. -% -% @headitem starts a heading row, which we typeset in bold. -% Assignments have to be global since we are inside the implicit group -% of an alignment entry. \everycr resets \everytab so we don't have to -% undo it ourselves. -\def\headitemfont{\b}% for people to use in the template row; not changeable -\def\headitem{% - \checkenv\multitable - \crcr - \global\everytab={\bf}% can't use \headitemfont since the parsing differs - \the\everytab % for the first item -}% -% -% A \tab used to include \hskip1sp. But then the space in a template -% line is not enough. That is bad. So let's go back to just `&' until -% we again encounter the problem the 1sp was intended to solve. -% --karl, nathan@acm.org, 20apr99. -\def\tab{\checkenv\multitable &\the\everytab}% - -% @multitable ... @end multitable definitions: -% -\newtoks\everytab % insert after every tab. -% -\envdef\multitable{% - \vskip\parskip - \startsavinginserts - % - % @item within a multitable starts a normal row. - % We use \def instead of \let so that if one of the multitable entries - % contains an @itemize, we don't choke on the \item (seen as \crcr aka - % \endtemplate) expanding \doitemize. - \def\item{\crcr}% - % - \tolerance=9500 - \hbadness=9500 - \setmultitablespacing - \parskip=\multitableparskip - \parindent=\multitableparindent - \overfullrule=0pt - \global\colcount=0 - % - \everycr = {% - \noalign{% - \global\everytab={}% - \global\colcount=0 % Reset the column counter. - % Check for saved footnotes, etc. - \checkinserts - % Keeps underfull box messages off when table breaks over pages. - %\filbreak - % Maybe so, but it also creates really weird page breaks when the - % table breaks over pages. Wouldn't \vfil be better? Wait until the - % problem manifests itself, so it can be fixed for real --karl. - }% - }% - % - \parsearg\domultitable -} -\def\domultitable#1{% - % To parse everything between @multitable and @item: - \setuptable#1 \endsetuptable - % - % This preamble sets up a generic column definition, which will - % be used as many times as user calls for columns. - % \vtop will set a single line and will also let text wrap and - % continue for many paragraphs if desired. - \halign\bgroup &% - \global\advance\colcount by 1 - \multistrut - \vtop{% - % Use the current \colcount to find the correct column width: - \hsize=\expandafter\csname col\the\colcount\endcsname - % - % In order to keep entries from bumping into each other - % we will add a \leftskip of \multitablecolspace to all columns after - % the first one. - % - % If a template has been used, we will add \multitablecolspace - % to the width of each template entry. - % - % If the user has set preamble in terms of percent of \hsize we will - % use that dimension as the width of the column, and the \leftskip - % will keep entries from bumping into each other. Table will start at - % left margin and final column will justify at right margin. - % - % Make sure we don't inherit \rightskip from the outer environment. - \rightskip=0pt - \ifnum\colcount=1 - % The first column will be indented with the surrounding text. - \advance\hsize by\leftskip - \else - \ifsetpercent \else - % If user has not set preamble in terms of percent of \hsize - % we will advance \hsize by \multitablecolspace. - \advance\hsize by \multitablecolspace - \fi - % In either case we will make \leftskip=\multitablecolspace: - \leftskip=\multitablecolspace - \fi - % Ignoring space at the beginning and end avoids an occasional spurious - % blank line, when TeX decides to break the line at the space before the - % box from the multistrut, so the strut ends up on a line by itself. - % For example: - % @multitable @columnfractions .11 .89 - % @item @code{#} - % @tab Legal holiday which is valid in major parts of the whole country. - % Is automatically provided with highlighting sequences respectively - % marking characters. - \noindent\ignorespaces##\unskip\multistrut - }\cr -} -\def\Emultitable{% - \crcr - \egroup % end the \halign - \global\setpercentfalse -} - -\def\setmultitablespacing{% - \def\multistrut{\strut}% just use the standard line spacing - % - % Compute \multitablelinespace (if not defined by user) for use in - % \multitableparskip calculation. We used define \multistrut based on - % this, but (ironically) that caused the spacing to be off. - % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. -\ifdim\multitablelinespace=0pt -\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip -\global\advance\multitablelinespace by-\ht0 -\fi -% Test to see if parskip is larger than space between lines of -% table. If not, do nothing. -% If so, set to same dimension as multitablelinespace. -\ifdim\multitableparskip>\multitablelinespace -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller - % than skip between lines in the table. -\fi% -\ifdim\multitableparskip=0pt -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller - % than skip between lines in the table. -\fi} - - -\message{conditionals,} - -% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, -% @ifnotxml always succeed. They currently do nothing; we don't -% attempt to check whether the conditionals are properly nested. But we -% have to remember that they are conditionals, so that @end doesn't -% attempt to close an environment group. -% -\def\makecond#1{% - \expandafter\let\csname #1\endcsname = \relax - \expandafter\let\csname iscond.#1\endcsname = 1 -} -\makecond{iftex} -\makecond{ifnotdocbook} -\makecond{ifnothtml} -\makecond{ifnotinfo} -\makecond{ifnotplaintext} -\makecond{ifnotxml} - -% Ignore @ignore, @ifhtml, @ifinfo, and the like. -% -\def\direntry{\doignore{direntry}} -\def\documentdescription{\doignore{documentdescription}} -\def\docbook{\doignore{docbook}} -\def\html{\doignore{html}} -\def\ifdocbook{\doignore{ifdocbook}} -\def\ifhtml{\doignore{ifhtml}} -\def\ifinfo{\doignore{ifinfo}} -\def\ifnottex{\doignore{ifnottex}} -\def\ifplaintext{\doignore{ifplaintext}} -\def\ifxml{\doignore{ifxml}} -\def\ignore{\doignore{ignore}} -\def\menu{\doignore{menu}} -\def\xml{\doignore{xml}} - -% Ignore text until a line `@end #1', keeping track of nested conditionals. -% -% A count to remember the depth of nesting. -\newcount\doignorecount - -\def\doignore#1{\begingroup - % Scan in ``verbatim'' mode: - \obeylines - \catcode`\@ = \other - \catcode`\{ = \other - \catcode`\} = \other - % - % Make sure that spaces turn into tokens that match what \doignoretext wants. - \spaceisspace - % - % Count number of #1's that we've seen. - \doignorecount = 0 - % - % Swallow text until we reach the matching `@end #1'. - \dodoignore{#1}% -} - -{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. - \obeylines % - % - \gdef\dodoignore#1{% - % #1 contains the command name as a string, e.g., `ifinfo'. - % - % Define a command to find the next `@end #1'. - \long\def\doignoretext##1^^M@end #1{% - \doignoretextyyy##1^^M@#1\_STOP_}% - % - % And this command to find another #1 command, at the beginning of a - % line. (Otherwise, we would consider a line `@c @ifset', for - % example, to count as an @ifset for nesting.) - \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% - % - % And now expand that command. - \doignoretext ^^M% - }% -} - -\def\doignoreyyy#1{% - \def\temp{#1}% - \ifx\temp\empty % Nothing found. - \let\next\doignoretextzzz - \else % Found a nested condition, ... - \advance\doignorecount by 1 - \let\next\doignoretextyyy % ..., look for another. - % If we're here, #1 ends with ^^M\ifinfo (for example). - \fi - \next #1% the token \_STOP_ is present just after this macro. -} - -% We have to swallow the remaining "\_STOP_". -% -\def\doignoretextzzz#1{% - \ifnum\doignorecount = 0 % We have just found the outermost @end. - \let\next\enddoignore - \else % Still inside a nested condition. - \advance\doignorecount by -1 - \let\next\doignoretext % Look for the next @end. - \fi - \next -} - -% Finish off ignored text. -{ \obeylines% - % Ignore anything after the last `@end #1'; this matters in verbatim - % environments, where otherwise the newline after an ignored conditional - % would result in a blank line in the output. - \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% -} - - -% @set VAR sets the variable VAR to an empty value. -% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. -% -% Since we want to separate VAR from REST-OF-LINE (which might be -% empty), we can't just use \parsearg; we have to insert a space of our -% own to delimit the rest of the line, and then take it out again if we -% didn't need it. -% We rely on the fact that \parsearg sets \catcode`\ =10. -% -\parseargdef\set{\setyyy#1 \endsetyyy} -\def\setyyy#1 #2\endsetyyy{% - {% - \makevalueexpandable - \def\temp{#2}% - \edef\next{\gdef\makecsname{SET#1}}% - \ifx\temp\empty - \next{}% - \else - \setzzz#2\endsetzzz - \fi - }% -} -% Remove the trailing space \setxxx inserted. -\def\setzzz#1 \endsetzzz{\next{#1}} - -% @clear VAR clears (i.e., unsets) the variable VAR. -% -\parseargdef\clear{% - {% - \makevalueexpandable - \global\expandafter\let\csname SET#1\endcsname=\relax - }% -} - -% @value{foo} gets the text saved in variable foo. -\def\value{\begingroup\makevalueexpandable\valuexxx} -\def\valuexxx#1{\expandablevalue{#1}\endgroup} -{ - \catcode`\- = \active \catcode`\_ = \active - % - \gdef\makevalueexpandable{% - \let\value = \expandablevalue - % We don't want these characters active, ... - \catcode`\-=\other \catcode`\_=\other - % ..., but we might end up with active ones in the argument if - % we're called from @code, as @code{@value{foo-bar_}}, though. - % So \let them to their normal equivalents. - \let-\normaldash \let_\normalunderscore - } -} - -% We have this subroutine so that we can handle at least some @value's -% properly in indexes (we call \makevalueexpandable in \indexdummies). -% The command has to be fully expandable (if the variable is set), since -% the result winds up in the index file. This means that if the -% variable's value contains other Texinfo commands, it's almost certain -% it will fail (although perhaps we could fix that with sufficient work -% to do a one-level expansion on the result, instead of complete). -% -\def\expandablevalue#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - {[No value for ``#1'']}% - \message{Variable `#1', used in @value, is not set.}% - \else - \csname SET#1\endcsname - \fi -} - -% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined -% with @set. -% -% To get special treatment of `@end ifset,' call \makeond and the redefine. -% -\makecond{ifset} -\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} -\def\doifset#1#2{% - {% - \makevalueexpandable - \let\next=\empty - \expandafter\ifx\csname SET#2\endcsname\relax - #1% If not set, redefine \next. - \fi - \expandafter - }\next -} -\def\ifsetfail{\doignore{ifset}} - -% @ifclear VAR ... @end executes the `...' iff VAR has never been -% defined with @set, or has been undefined with @clear. -% -% The `\else' inside the `\doifset' parameter is a trick to reuse the -% above code: if the variable is not set, do nothing, if it is set, -% then redefine \next to \ifclearfail. -% -\makecond{ifclear} -\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} -\def\ifclearfail{\doignore{ifclear}} - -% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written -% without the @) is in fact defined. We can only feasibly check at the -% TeX level, so something like `mathcode' is going to considered -% defined even though it is not a Texinfo command. -% -\makecond{ifcommanddefined} -\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} -% -\def\doifcmddefined#1#2{{% - \makevalueexpandable - \let\next=\empty - \expandafter\ifx\csname #2\endcsname\relax - #1% If not defined, \let\next as above. - \fi - \expandafter - }\next -} -\def\ifcmddefinedfail{\doignore{ifcommanddefined}} - -% @ifcommandnotdefined CMD ... handled similar to @ifclear above. -\makecond{ifcommandnotdefined} -\def\ifcommandnotdefined{% - \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} -\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} - -% Set the `txicommandconditionals' variable, so documents have a way to -% test if the @ifcommand...defined conditionals are available. -\set txicommandconditionals - -% @dircategory CATEGORY -- specify a category of the dir file -% which this file should belong to. Ignore this in TeX. -\let\dircategory=\comment - -% @defininfoenclose. -\let\definfoenclose=\comment - - -\message{indexing,} -% Index generation facilities - -% Define \newwrite to be identical to plain tex's \newwrite -% except not \outer, so it can be used within macros and \if's. -\edef\newwrite{\makecsname{ptexnewwrite}} - -% \newindex {foo} defines an index named foo. -% It automatically defines \fooindex such that -% \fooindex ...rest of line... puts an entry in the index foo. -% It also defines \fooindfile to be the number of the output channel for -% the file that accumulates this index. The file's extension is foo. -% The name of an index should be no more than 2 characters long -% for the sake of vms. -% -\def\newindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 % Open the file - \fi - \expandafter\xdef\csname#1index\endcsname{% % Define @#1index - \noexpand\doindex{#1}} -} - -% @defindex foo == \newindex{foo} -% -\def\defindex{\parsearg\newindex} - -% Define @defcodeindex, like @defindex except put all entries in @code. -% -\def\defcodeindex{\parsearg\newcodeindex} -% -\def\newcodeindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 - \fi - \expandafter\xdef\csname#1index\endcsname{% - \noexpand\docodeindex{#1}}% -} - - -% @synindex foo bar makes index foo feed into index bar. -% Do this instead of @defindex foo if you don't want it as a separate index. -% -% @syncodeindex foo bar similar, but put all entries made for index foo -% inside @code. -% -\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} -\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} - -% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), -% #3 the target index (bar). -\def\dosynindex#1#2#3{% - % Only do \closeout if we haven't already done it, else we'll end up - % closing the target index. - \expandafter \ifx\csname donesynindex#2\endcsname \relax - % The \closeout helps reduce unnecessary open files; the limit on the - % Acorn RISC OS is a mere 16 files. - \expandafter\closeout\csname#2indfile\endcsname - \expandafter\let\csname donesynindex#2\endcsname = 1 - \fi - % redefine \fooindfile: - \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname - \expandafter\let\csname#2indfile\endcsname=\temp - % redefine \fooindex: - \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% -} - -% Define \doindex, the driver for all \fooindex macros. -% Argument #1 is generated by the calling \fooindex macro, -% and it is "foo", the name of the index. - -% \doindex just uses \parsearg; it calls \doind for the actual work. -% This is because \doind is more useful to call from other macros. - -% There is also \dosubind {index}{topic}{subtopic} -% which makes an entry in a two-level index such as the operation index. - -\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} -\def\singleindexer #1{\doind{\indexname}{#1}} - -% like the previous two, but they put @code around the argument. -\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} -\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} - -% Take care of Texinfo commands that can appear in an index entry. -% Since there are some commands we want to expand, and others we don't, -% we have to laboriously prevent expansion for those that we don't. -% -\def\indexdummies{% - \escapechar = `\\ % use backslash in output files. - \def\@{@}% change to @@ when we switch to @ as escape char in index files. - \def\ {\realbackslash\space }% - % - % Need these unexpandable (because we define \tt as a dummy) - % definitions when @{ or @} appear in index entry text. Also, more - % complicated, when \tex is in effect and \{ is a \delimiter again. - % We can't use \lbracecmd and \rbracecmd because texindex assumes - % braces and backslashes are used only as delimiters. Perhaps we - % should define @lbrace and @rbrace commands a la @comma. - \def\{{{\tt\char123}}% - \def\}{{\tt\char125}}% - % - % I don't entirely understand this, but when an index entry is - % generated from a macro call, the \endinput which \scanmacro inserts - % causes processing to be prematurely terminated. This is, - % apparently, because \indexsorttmp is fully expanded, and \endinput - % is an expandable command. The redefinition below makes \endinput - % disappear altogether for that purpose -- although logging shows that - % processing continues to some further point. On the other hand, it - % seems \endinput does not hurt in the printed index arg, since that - % is still getting written without apparent harm. - % - % Sample source (mac-idx3.tex, reported by Graham Percival to - % help-texinfo, 22may06): - % @macro funindex {WORD} - % @findex xyz - % @end macro - % ... - % @funindex commtest - % - % The above is not enough to reproduce the bug, but it gives the flavor. - % - % Sample whatsit resulting: - % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} - % - % So: - \let\endinput = \empty - % - % Do the redefinitions. - \commondummies -} - -% For the aux and toc files, @ is the escape character. So we want to -% redefine everything using @ as the escape character (instead of -% \realbackslash, still used for index files). When everything uses @, -% this will be simpler. -% -\def\atdummies{% - \def\@{@@}% - \def\ {@ }% - \let\{ = \lbraceatcmd - \let\} = \rbraceatcmd - % - % Do the redefinitions. - \commondummies - \otherbackslash -} - -% Called from \indexdummies and \atdummies. -% -\def\commondummies{% - % - % \definedummyword defines \#1 as \string\#1\space, thus effectively - % preventing its expansion. This is used only for control words, - % not control letters, because the \space would be incorrect for - % control characters, but is needed to separate the control word - % from whatever follows. - % - % For control letters, we have \definedummyletter, which omits the - % space. - % - % These can be used both for control words that take an argument and - % those that do not. If it is followed by {arg} in the input, then - % that will dutifully get written to the index (or wherever). - % - \def\definedummyword ##1{\def##1{\string##1\space}}% - \def\definedummyletter##1{\def##1{\string##1}}% - \let\definedummyaccent\definedummyletter - % - \commondummiesnofonts - % - \definedummyletter\_% - \definedummyletter\-% - % - % Non-English letters. - \definedummyword\AA - \definedummyword\AE - \definedummyword\DH - \definedummyword\L - \definedummyword\O - \definedummyword\OE - \definedummyword\TH - \definedummyword\aa - \definedummyword\ae - \definedummyword\dh - \definedummyword\exclamdown - \definedummyword\l - \definedummyword\o - \definedummyword\oe - \definedummyword\ordf - \definedummyword\ordm - \definedummyword\questiondown - \definedummyword\ss - \definedummyword\th - % - % Although these internal commands shouldn't show up, sometimes they do. - \definedummyword\bf - \definedummyword\gtr - \definedummyword\hat - \definedummyword\less - \definedummyword\sf - \definedummyword\sl - \definedummyword\tclose - \definedummyword\tt - % - \definedummyword\LaTeX - \definedummyword\TeX - % - % Assorted special characters. - \definedummyword\arrow - \definedummyword\bullet - \definedummyword\comma - \definedummyword\copyright - \definedummyword\registeredsymbol - \definedummyword\dots - \definedummyword\enddots - \definedummyword\entrybreak - \definedummyword\equiv - \definedummyword\error - \definedummyword\euro - \definedummyword\expansion - \definedummyword\geq - \definedummyword\guillemetleft - \definedummyword\guillemetright - \definedummyword\guilsinglleft - \definedummyword\guilsinglright - \definedummyword\lbracechar - \definedummyword\leq - \definedummyword\minus - \definedummyword\ogonek - \definedummyword\pounds - \definedummyword\point - \definedummyword\print - \definedummyword\quotedblbase - \definedummyword\quotedblleft - \definedummyword\quotedblright - \definedummyword\quoteleft - \definedummyword\quoteright - \definedummyword\quotesinglbase - \definedummyword\rbracechar - \definedummyword\result - \definedummyword\textdegree - % - % We want to disable all macros so that they are not expanded by \write. - \macrolist - % - \normalturnoffactive - % - % Handle some cases of @value -- where it does not contain any - % (non-fully-expandable) commands. - \makevalueexpandable -} - -% \commondummiesnofonts: common to \commondummies and \indexnofonts. -% -\def\commondummiesnofonts{% - % Control letters and accents. - \definedummyletter\!% - \definedummyaccent\"% - \definedummyaccent\'% - \definedummyletter\*% - \definedummyaccent\,% - \definedummyletter\.% - \definedummyletter\/% - \definedummyletter\:% - \definedummyaccent\=% - \definedummyletter\?% - \definedummyaccent\^% - \definedummyaccent\`% - \definedummyaccent\~% - \definedummyword\u - \definedummyword\v - \definedummyword\H - \definedummyword\dotaccent - \definedummyword\ogonek - \definedummyword\ringaccent - \definedummyword\tieaccent - \definedummyword\ubaraccent - \definedummyword\udotaccent - \definedummyword\dotless - % - % Texinfo font commands. - \definedummyword\b - \definedummyword\i - \definedummyword\r - \definedummyword\sansserif - \definedummyword\sc - \definedummyword\slanted - \definedummyword\t - % - % Commands that take arguments. - \definedummyword\abbr - \definedummyword\acronym - \definedummyword\anchor - \definedummyword\cite - \definedummyword\code - \definedummyword\command - \definedummyword\dfn - \definedummyword\dmn - \definedummyword\email - \definedummyword\emph - \definedummyword\env - \definedummyword\file - \definedummyword\image - \definedummyword\indicateurl - \definedummyword\inforef - \definedummyword\kbd - \definedummyword\key - \definedummyword\math - \definedummyword\option - \definedummyword\pxref - \definedummyword\ref - \definedummyword\samp - \definedummyword\strong - \definedummyword\tie - \definedummyword\uref - \definedummyword\url - \definedummyword\var - \definedummyword\verb - \definedummyword\w - \definedummyword\xref -} - -% \indexnofonts is used when outputting the strings to sort the index -% by, and when constructing control sequence names. It eliminates all -% control sequences and just writes whatever the best ASCII sort string -% would be for a given command (usually its argument). -% -\def\indexnofonts{% - % Accent commands should become @asis. - \def\definedummyaccent##1{\let##1\asis}% - % We can just ignore other control letters. - \def\definedummyletter##1{\let##1\empty}% - % All control words become @asis by default; overrides below. - \let\definedummyword\definedummyaccent - % - \commondummiesnofonts - % - % Don't no-op \tt, since it isn't a user-level command - % and is used in the definitions of the active chars like <, >, |, etc. - % Likewise with the other plain tex font commands. - %\let\tt=\asis - % - \def\ { }% - \def\@{@}% - \def\_{\normalunderscore}% - \def\-{}% @- shouldn't affect sorting - % - % Unfortunately, texindex is not prepared to handle braces in the - % content at all. So for index sorting, we map @{ and @} to strings - % starting with |, since that ASCII character is between ASCII { and }. - \def\{{|a}% - \def\lbracechar{|a}% - % - \def\}{|b}% - \def\rbracechar{|b}% - % - % Non-English letters. - \def\AA{AA}% - \def\AE{AE}% - \def\DH{DZZ}% - \def\L{L}% - \def\OE{OE}% - \def\O{O}% - \def\TH{ZZZ}% - \def\aa{aa}% - \def\ae{ae}% - \def\dh{dzz}% - \def\exclamdown{!}% - \def\l{l}% - \def\oe{oe}% - \def\ordf{a}% - \def\ordm{o}% - \def\o{o}% - \def\questiondown{?}% - \def\ss{ss}% - \def\th{zzz}% - % - \def\LaTeX{LaTeX}% - \def\TeX{TeX}% - % - % Assorted special characters. - % (The following {} will end up in the sort string, but that's ok.) - \def\arrow{->}% - \def\bullet{bullet}% - \def\comma{,}% - \def\copyright{copyright}% - \def\dots{...}% - \def\enddots{...}% - \def\equiv{==}% - \def\error{error}% - \def\euro{euro}% - \def\expansion{==>}% - \def\geq{>=}% - \def\guillemetleft{<<}% - \def\guillemetright{>>}% - \def\guilsinglleft{<}% - \def\guilsinglright{>}% - \def\leq{<=}% - \def\minus{-}% - \def\point{.}% - \def\pounds{pounds}% - \def\print{-|}% - \def\quotedblbase{"}% - \def\quotedblleft{"}% - \def\quotedblright{"}% - \def\quoteleft{`}% - \def\quoteright{'}% - \def\quotesinglbase{,}% - \def\registeredsymbol{R}% - \def\result{=>}% - \def\textdegree{o}% - % - \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax - \else \indexlquoteignore \fi - % - % We need to get rid of all macros, leaving only the arguments (if present). - % Of course this is not nearly correct, but it is the best we can do for now. - % makeinfo does not expand macros in the argument to @deffn, which ends up - % writing an index entry, and texindex isn't prepared for an index sort entry - % that starts with \. - % - % Since macro invocations are followed by braces, we can just redefine them - % to take a single TeX argument. The case of a macro invocation that - % goes to end-of-line is not handled. - % - \macrolist -} - -% Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us -% ignore left quotes in the sort term. -{\catcode`\`=\active - \gdef\indexlquoteignore{\let`=\empty}} - -\let\indexbackslash=0 %overridden during \printindex. -\let\SETmarginindex=\relax % put index entries in margin (undocumented)? - -% Most index entries go through here, but \dosubind is the general case. -% #1 is the index name, #2 is the entry text. -\def\doind#1#2{\dosubind{#1}{#2}{}} - -% Workhorse for all \fooindexes. -% #1 is name of index, #2 is stuff to put there, #3 is subentry -- -% empty if called from \doind, as we usually are (the main exception -% is with most defuns, which call us directly). -% -\def\dosubind#1#2#3{% - \iflinks - {% - % Store the main index entry text (including the third arg). - \toks0 = {#2}% - % If third arg is present, precede it with a space. - \def\thirdarg{#3}% - \ifx\thirdarg\empty \else - \toks0 = \expandafter{\the\toks0 \space #3}% - \fi - % - \edef\writeto{\csname#1indfile\endcsname}% - % - \safewhatsit\dosubindwrite - }% - \fi -} - -% Write the entry in \toks0 to the index file: -% -\def\dosubindwrite{% - % Put the index entry in the margin if desired. - \ifx\SETmarginindex\relax\else - \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% - \fi - % - % Remember, we are within a group. - \indexdummies % Must do this here, since \bf, etc expand at this stage - \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now - % so it will be output as is; and it will print as backslash. - % - % Process the index entry with all font commands turned off, to - % get the string to sort by. - {\indexnofonts - \edef\temp{\the\toks0}% need full expansion - \xdef\indexsorttmp{\temp}% - }% - % - % Set up the complete index entry, with both the sort key and - % the original text, including any font commands. We write - % three arguments to \entry to the .?? file (four in the - % subentry case), texindex reduces to two when writing the .??s - % sorted result. - \edef\temp{% - \write\writeto{% - \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% - }% - \temp -} - -% Take care of unwanted page breaks/skips around a whatsit: -% -% If a skip is the last thing on the list now, preserve it -% by backing up by \lastskip, doing the \write, then inserting -% the skip again. Otherwise, the whatsit generated by the -% \write or \pdfdest will make \lastskip zero. The result is that -% sequences like this: -% @end defun -% @tindex whatever -% @defun ... -% will have extra space inserted, because the \medbreak in the -% start of the @defun won't see the skip inserted by the @end of -% the previous defun. -% -% But don't do any of this if we're not in vertical mode. We -% don't want to do a \vskip and prematurely end a paragraph. -% -% Avoid page breaks due to these extra skips, too. -% -% But wait, there is a catch there: -% We'll have to check whether \lastskip is zero skip. \ifdim is not -% sufficient for this purpose, as it ignores stretch and shrink parts -% of the skip. The only way seems to be to check the textual -% representation of the skip. -% -% The following is almost like \def\zeroskipmacro{0.0pt} except that -% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). -% -\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} -% -\newskip\whatsitskip -\newcount\whatsitpenalty -% -% ..., ready, GO: -% -\def\safewhatsit#1{\ifhmode - #1% - \else - % \lastskip and \lastpenalty cannot both be nonzero simultaneously. - \whatsitskip = \lastskip - \edef\lastskipmacro{\the\lastskip}% - \whatsitpenalty = \lastpenalty - % - % If \lastskip is nonzero, that means the last item was a - % skip. And since a skip is discardable, that means this - % -\whatsitskip glue we're inserting is preceded by a - % non-discardable item, therefore it is not a potential - % breakpoint, therefore no \nobreak needed. - \ifx\lastskipmacro\zeroskipmacro - \else - \vskip-\whatsitskip - \fi - % - #1% - % - \ifx\lastskipmacro\zeroskipmacro - % If \lastskip was zero, perhaps the last item was a penalty, and - % perhaps it was >=10000, e.g., a \nobreak. In that case, we want - % to re-insert the same penalty (values >10000 are used for various - % signals); since we just inserted a non-discardable item, any - % following glue (such as a \parskip) would be a breakpoint. For example: - % @deffn deffn-whatever - % @vindex index-whatever - % Description. - % would allow a break between the index-whatever whatsit - % and the "Description." paragraph. - \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi - \else - % On the other hand, if we had a nonzero \lastskip, - % this make-up glue would be preceded by a non-discardable item - % (the whatsit from the \write), so we must insert a \nobreak. - \nobreak\vskip\whatsitskip - \fi -\fi} - -% The index entry written in the file actually looks like -% \entry {sortstring}{page}{topic} -% or -% \entry {sortstring}{page}{topic}{subtopic} -% The texindex program reads in these files and writes files -% containing these kinds of lines: -% \initial {c} -% before the first topic whose initial is c -% \entry {topic}{pagelist} -% for a topic that is used without subtopics -% \primary {topic} -% for the beginning of a topic that is used with subtopics -% \secondary {subtopic}{pagelist} -% for each subtopic. - -% Define the user-accessible indexing commands -% @findex, @vindex, @kindex, @cindex. - -\def\findex {\fnindex} -\def\kindex {\kyindex} -\def\cindex {\cpindex} -\def\vindex {\vrindex} -\def\tindex {\tpindex} -\def\pindex {\pgindex} - -\def\cindexsub {\begingroup\obeylines\cindexsub} -{\obeylines % -\gdef\cindexsub "#1" #2^^M{\endgroup % -\dosubind{cp}{#2}{#1}}} - -% Define the macros used in formatting output of the sorted index material. - -% @printindex causes a particular index (the ??s file) to get printed. -% It does not print any chapter heading (usually an @unnumbered). -% -\parseargdef\printindex{\begingroup - \dobreak \chapheadingskip{10000}% - % - \smallfonts \rm - \tolerance = 9500 - \plainfrenchspacing - \everypar = {}% don't want the \kern\-parindent from indentation suppression. - % - % See if the index file exists and is nonempty. - % Change catcode of @ here so that if the index file contains - % \initial {@} - % as its first line, TeX doesn't complain about mismatched braces - % (because it thinks @} is a control sequence). - \catcode`\@ = 11 - \openin 1 \jobname.#1s - \ifeof 1 - % \enddoublecolumns gets confused if there is no text in the index, - % and it loses the chapter title and the aux file entries for the - % index. The easiest way to prevent this problem is to make sure - % there is some text. - \putwordIndexNonexistent - \else - % - % If the index file exists but is empty, then \openin leaves \ifeof - % false. We have to make TeX try to read something from the file, so - % it can discover if there is anything in it. - \read 1 to \temp - \ifeof 1 - \putwordIndexIsEmpty - \else - % Index files are almost Texinfo source, but we use \ as the escape - % character. It would be better to use @, but that's too big a change - % to make right now. - \def\indexbackslash{\backslashcurfont}% - \catcode`\\ = 0 - \escapechar = `\\ - \begindoublecolumns - \input \jobname.#1s - \enddoublecolumns - \fi - \fi - \closein 1 -\endgroup} - -% These macros are used by the sorted index file itself. -% Change them to control the appearance of the index. - -\def\initial#1{{% - % Some minor font changes for the special characters. - \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt - % - % Remove any glue we may have, we'll be inserting our own. - \removelastskip - % - % We like breaks before the index initials, so insert a bonus. - \nobreak - \vskip 0pt plus 3\baselineskip - \penalty 0 - \vskip 0pt plus -3\baselineskip - % - % Typeset the initial. Making this add up to a whole number of - % baselineskips increases the chance of the dots lining up from column - % to column. It still won't often be perfect, because of the stretch - % we need before each entry, but it's better. - % - % No shrink because it confuses \balancecolumns. - \vskip 1.67\baselineskip plus .5\baselineskip - \leftline{\secbf #1}% - % Do our best not to break after the initial. - \nobreak - \vskip .33\baselineskip plus .1\baselineskip -}} - -% \entry typesets a paragraph consisting of the text (#1), dot leaders, and -% then page number (#2) flushed to the right margin. It is used for index -% and table of contents entries. The paragraph is indented by \leftskip. -% -% A straightforward implementation would start like this: -% \def\entry#1#2{... -% But this freezes the catcodes in the argument, and can cause problems to -% @code, which sets - active. This problem was fixed by a kludge--- -% ``-'' was active throughout whole index, but this isn't really right. -% The right solution is to prevent \entry from swallowing the whole text. -% --kasal, 21nov03 -\def\entry{% - \begingroup - % - % Start a new paragraph if necessary, so our assignments below can't - % affect previous text. - \par - % - % Do not fill out the last line with white space. - \parfillskip = 0in - % - % No extra space above this paragraph. - \parskip = 0in - % - % Do not prefer a separate line ending with a hyphen to fewer lines. - \finalhyphendemerits = 0 - % - % \hangindent is only relevant when the entry text and page number - % don't both fit on one line. In that case, bob suggests starting the - % dots pretty far over on the line. Unfortunately, a large - % indentation looks wrong when the entry text itself is broken across - % lines. So we use a small indentation and put up with long leaders. - % - % \hangafter is reset to 1 (which is the value we want) at the start - % of each paragraph, so we need not do anything with that. - \hangindent = 2em - % - % When the entry text needs to be broken, just fill out the first line - % with blank space. - \rightskip = 0pt plus1fil - % - % A bit of stretch before each entry for the benefit of balancing - % columns. - \vskip 0pt plus1pt - % - % When reading the text of entry, convert explicit line breaks - % from @* into spaces. The user might give these in long section - % titles, for instance. - \def\*{\unskip\space\ignorespaces}% - \def\entrybreak{\hfil\break}% - % - % Swallow the left brace of the text (first parameter): - \afterassignment\doentry - \let\temp = -} -\def\entrybreak{\unskip\space\ignorespaces}% -\def\doentry{% - \bgroup % Instead of the swallowed brace. - \noindent - \aftergroup\finishentry - % And now comes the text of the entry. -} -\def\finishentry#1{% - % #1 is the page number. - % - % The following is kludged to not output a line of dots in the index if - % there are no page numbers. The next person who breaks this will be - % cursed by a Unix daemon. - \setbox\boxA = \hbox{#1}% - \ifdim\wd\boxA = 0pt - \ % - \else - % - % If we must, put the page number on a line of its own, and fill out - % this line with blank space. (The \hfil is overwhelmed with the - % fill leaders glue in \indexdotfill if the page number does fit.) - \hfil\penalty50 - \null\nobreak\indexdotfill % Have leaders before the page number. - % - % The `\ ' here is removed by the implicit \unskip that TeX does as - % part of (the primitive) \par. Without it, a spurious underfull - % \hbox ensues. - \ifpdf - \pdfgettoks#1.% - \ \the\toksA - \else - \ #1% - \fi - \fi - \par - \endgroup -} - -% Like plain.tex's \dotfill, except uses up at least 1 em. -\def\indexdotfill{\cleaders - \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} - -\def\primary #1{\line{#1\hfil}} - -\newskip\secondaryindent \secondaryindent=0.5cm -\def\secondary#1#2{{% - \parfillskip=0in - \parskip=0in - \hangindent=1in - \hangafter=1 - \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill - \ifpdf - \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. - \else - #2 - \fi - \par -}} - -% Define two-column mode, which we use to typeset indexes. -% Adapted from the TeXbook, page 416, which is to say, -% the manmac.tex format used to print the TeXbook itself. -\catcode`\@=11 - -\newbox\partialpage -\newdimen\doublecolumnhsize - -\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns - % Grab any single-column material above us. - \output = {% - % - % Here is a possibility not foreseen in manmac: if we accumulate a - % whole lot of material, we might end up calling this \output - % routine twice in a row (see the doublecol-lose test, which is - % essentially a couple of indexes with @setchapternewpage off). In - % that case we just ship out what is in \partialpage with the normal - % output routine. Generally, \partialpage will be empty when this - % runs and this will be a no-op. See the indexspread.tex test case. - \ifvoid\partialpage \else - \onepageout{\pagecontents\partialpage}% - \fi - % - \global\setbox\partialpage = \vbox{% - % Unvbox the main output page. - \unvbox\PAGE - \kern-\topskip \kern\baselineskip - }% - }% - \eject % run that output routine to set \partialpage - % - % Use the double-column output routine for subsequent pages. - \output = {\doublecolumnout}% - % - % Change the page size parameters. We could do this once outside this - % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 - % format, but then we repeat the same computation. Repeating a couple - % of assignments once per index is clearly meaningless for the - % execution time, so we may as well do it in one place. - % - % First we halve the line length, less a little for the gutter between - % the columns. We compute the gutter based on the line length, so it - % changes automatically with the paper format. The magic constant - % below is chosen so that the gutter has the same value (well, +-<1pt) - % as it did when we hard-coded it. - % - % We put the result in a separate register, \doublecolumhsize, so we - % can restore it in \pagesofar, after \hsize itself has (potentially) - % been clobbered. - % - \doublecolumnhsize = \hsize - \advance\doublecolumnhsize by -.04154\hsize - \divide\doublecolumnhsize by 2 - \hsize = \doublecolumnhsize - % - % Double the \vsize as well. (We don't need a separate register here, - % since nobody clobbers \vsize.) - \vsize = 2\vsize -} - -% The double-column output routine for all double-column pages except -% the last. -% -\def\doublecolumnout{% - \splittopskip=\topskip \splitmaxdepth=\maxdepth - % Get the available space for the double columns -- the normal - % (undoubled) page height minus any material left over from the - % previous page. - \dimen@ = \vsize - \divide\dimen@ by 2 - \advance\dimen@ by -\ht\partialpage - % - % box0 will be the left-hand column, box2 the right. - \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ - \onepageout\pagesofar - \unvbox255 - \penalty\outputpenalty -} -% -% Re-output the contents of the output page -- any previous material, -% followed by the two boxes we just split, in box0 and box2. -\def\pagesofar{% - \unvbox\partialpage - % - \hsize = \doublecolumnhsize - \wd0=\hsize \wd2=\hsize - \hbox to\pagewidth{\box0\hfil\box2}% -} -% -% All done with double columns. -\def\enddoublecolumns{% - % The following penalty ensures that the page builder is exercised - % _before_ we change the output routine. This is necessary in the - % following situation: - % - % The last section of the index consists only of a single entry. - % Before this section, \pagetotal is less than \pagegoal, so no - % break occurs before the last section starts. However, the last - % section, consisting of \initial and the single \entry, does not - % fit on the page and has to be broken off. Without the following - % penalty the page builder will not be exercised until \eject - % below, and by that time we'll already have changed the output - % routine to the \balancecolumns version, so the next-to-last - % double-column page will be processed with \balancecolumns, which - % is wrong: The two columns will go to the main vertical list, with - % the broken-off section in the recent contributions. As soon as - % the output routine finishes, TeX starts reconsidering the page - % break. The two columns and the broken-off section both fit on the - % page, because the two columns now take up only half of the page - % goal. When TeX sees \eject from below which follows the final - % section, it invokes the new output routine that we've set after - % \balancecolumns below; \onepageout will try to fit the two columns - % and the final section into the vbox of \pageheight (see - % \pagebody), causing an overfull box. - % - % Note that glue won't work here, because glue does not exercise the - % page builder, unlike penalties (see The TeXbook, pp. 280-281). - \penalty0 - % - \output = {% - % Split the last of the double-column material. Leave it on the - % current page, no automatic page break. - \balancecolumns - % - % If we end up splitting too much material for the current page, - % though, there will be another page break right after this \output - % invocation ends. Having called \balancecolumns once, we do not - % want to call it again. Therefore, reset \output to its normal - % definition right away. (We hope \balancecolumns will never be - % called on to balance too much material, but if it is, this makes - % the output somewhat more palatable.) - \global\output = {\onepageout{\pagecontents\PAGE}}% - }% - \eject - \endgroup % started in \begindoublecolumns - % - % \pagegoal was set to the doubled \vsize above, since we restarted - % the current page. We're now back to normal single-column - % typesetting, so reset \pagegoal to the normal \vsize (after the - % \endgroup where \vsize got restored). - \pagegoal = \vsize -} -% -% Called at the end of the double column material. -\def\balancecolumns{% - \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. - \dimen@ = \ht0 - \advance\dimen@ by \topskip - \advance\dimen@ by-\baselineskip - \divide\dimen@ by 2 % target to split to - %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% - \splittopskip = \topskip - % Loop until we get a decent breakpoint. - {% - \vbadness = 10000 - \loop - \global\setbox3 = \copy0 - \global\setbox1 = \vsplit3 to \dimen@ - \ifdim\ht3>\dimen@ - \global\advance\dimen@ by 1pt - \repeat - }% - %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% - \setbox0=\vbox to\dimen@{\unvbox1}% - \setbox2=\vbox to\dimen@{\unvbox3}% - % - \pagesofar -} -\catcode`\@ = \other - - -\message{sectioning,} -% Chapters, sections, etc. - -% Let's start with @part. -\outer\parseargdef\part{\partzzz{#1}} -\def\partzzz#1{% - \chapoddpage - \null - \vskip.3\vsize % move it down on the page a bit - \begingroup - \noindent \titlefonts\rmisbold #1\par % the text - \let\lastnode=\empty % no node to associate with - \writetocentry{part}{#1}{}% but put it in the toc - \headingsoff % no headline or footline on the part page - \chapoddpage - \endgroup -} - -% \unnumberedno is an oxymoron. But we count the unnumbered -% sections so that we can refer to them unambiguously in the pdf -% outlines by their "section number". We avoid collisions with chapter -% numbers by starting them at 10000. (If a document ever has 10000 -% chapters, we're in trouble anyway, I'm sure.) -\newcount\unnumberedno \unnumberedno = 10000 -\newcount\chapno -\newcount\secno \secno=0 -\newcount\subsecno \subsecno=0 -\newcount\subsubsecno \subsubsecno=0 - -% This counter is funny since it counts through charcodes of letters A, B, ... -\newcount\appendixno \appendixno = `\@ -% -% \def\appendixletter{\char\the\appendixno} -% We do the following ugly conditional instead of the above simple -% construct for the sake of pdftex, which needs the actual -% letter in the expansion, not just typeset. -% -\def\appendixletter{% - \ifnum\appendixno=`A A% - \else\ifnum\appendixno=`B B% - \else\ifnum\appendixno=`C C% - \else\ifnum\appendixno=`D D% - \else\ifnum\appendixno=`E E% - \else\ifnum\appendixno=`F F% - \else\ifnum\appendixno=`G G% - \else\ifnum\appendixno=`H H% - \else\ifnum\appendixno=`I I% - \else\ifnum\appendixno=`J J% - \else\ifnum\appendixno=`K K% - \else\ifnum\appendixno=`L L% - \else\ifnum\appendixno=`M M% - \else\ifnum\appendixno=`N N% - \else\ifnum\appendixno=`O O% - \else\ifnum\appendixno=`P P% - \else\ifnum\appendixno=`Q Q% - \else\ifnum\appendixno=`R R% - \else\ifnum\appendixno=`S S% - \else\ifnum\appendixno=`T T% - \else\ifnum\appendixno=`U U% - \else\ifnum\appendixno=`V V% - \else\ifnum\appendixno=`W W% - \else\ifnum\appendixno=`X X% - \else\ifnum\appendixno=`Y Y% - \else\ifnum\appendixno=`Z Z% - % The \the is necessary, despite appearances, because \appendixletter is - % expanded while writing the .toc file. \char\appendixno is not - % expandable, thus it is written literally, thus all appendixes come out - % with the same letter (or @) in the toc without it. - \else\char\the\appendixno - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} - -% Each @chapter defines these (using marks) as the number+name, number -% and name of the chapter. Page headings and footings can use -% these. @section does likewise. -\def\thischapter{} -\def\thischapternum{} -\def\thischaptername{} -\def\thissection{} -\def\thissectionnum{} -\def\thissectionname{} - -\newcount\absseclevel % used to calculate proper heading level -\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count - -% @raisesections: treat @section as chapter, @subsection as section, etc. -\def\raisesections{\global\advance\secbase by -1} -\let\up=\raisesections % original BFox name - -% @lowersections: treat @chapter as section, @section as subsection, etc. -\def\lowersections{\global\advance\secbase by 1} -\let\down=\lowersections % original BFox name - -% we only have subsub. -\chardef\maxseclevel = 3 -% -% A numbered section within an unnumbered changes to unnumbered too. -% To achieve this, remember the "biggest" unnum. sec. we are currently in: -\chardef\unnlevel = \maxseclevel -% -% Trace whether the current chapter is an appendix or not: -% \chapheadtype is "N" or "A", unnumbered chapters are ignored. -\def\chapheadtype{N} - -% Choose a heading macro -% #1 is heading type -% #2 is heading level -% #3 is text for heading -\def\genhead#1#2#3{% - % Compute the abs. sec. level: - \absseclevel=#2 - \advance\absseclevel by \secbase - % Make sure \absseclevel doesn't fall outside the range: - \ifnum \absseclevel < 0 - \absseclevel = 0 - \else - \ifnum \absseclevel > 3 - \absseclevel = 3 - \fi - \fi - % The heading type: - \def\headtype{#1}% - \if \headtype U% - \ifnum \absseclevel < \unnlevel - \chardef\unnlevel = \absseclevel - \fi - \else - % Check for appendix sections: - \ifnum \absseclevel = 0 - \edef\chapheadtype{\headtype}% - \else - \if \headtype A\if \chapheadtype N% - \errmessage{@appendix... within a non-appendix chapter}% - \fi\fi - \fi - % Check for numbered within unnumbered: - \ifnum \absseclevel > \unnlevel - \def\headtype{U}% - \else - \chardef\unnlevel = 3 - \fi - \fi - % Now print the heading: - \if \headtype U% - \ifcase\absseclevel - \unnumberedzzz{#3}% - \or \unnumberedseczzz{#3}% - \or \unnumberedsubseczzz{#3}% - \or \unnumberedsubsubseczzz{#3}% - \fi - \else - \if \headtype A% - \ifcase\absseclevel - \appendixzzz{#3}% - \or \appendixsectionzzz{#3}% - \or \appendixsubseczzz{#3}% - \or \appendixsubsubseczzz{#3}% - \fi - \else - \ifcase\absseclevel - \chapterzzz{#3}% - \or \seczzz{#3}% - \or \numberedsubseczzz{#3}% - \or \numberedsubsubseczzz{#3}% - \fi - \fi - \fi - \suppressfirstparagraphindent -} - -% an interface: -\def\numhead{\genhead N} -\def\apphead{\genhead A} -\def\unnmhead{\genhead U} - -% @chapter, @appendix, @unnumbered. Increment top-level counter, reset -% all lower-level sectioning counters to zero. -% -% Also set \chaplevelprefix, which we prepend to @float sequence numbers -% (e.g., figures), q.v. By default (before any chapter), that is empty. -\let\chaplevelprefix = \empty -% -\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz -\def\chapterzzz#1{% - % section resetting is \global in case the chapter is in a group, such - % as an @include file. - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\chapno by 1 - % - % Used for \float. - \gdef\chaplevelprefix{\the\chapno.}% - \resetallfloatnos - % - % \putwordChapter can contain complex things in translations. - \toks0=\expandafter{\putwordChapter}% - \message{\the\toks0 \space \the\chapno}% - % - % Write the actual heading. - \chapmacro{#1}{Ynumbered}{\the\chapno}% - % - % So @section and the like are numbered underneath this chapter. - \global\let\section = \numberedsec - \global\let\subsection = \numberedsubsec - \global\let\subsubsection = \numberedsubsubsec -} - -\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz -% -\def\appendixzzz#1{% - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\appendixno by 1 - \gdef\chaplevelprefix{\appendixletter.}% - \resetallfloatnos - % - % \putwordAppendix can contain complex things in translations. - \toks0=\expandafter{\putwordAppendix}% - \message{\the\toks0 \space \appendixletter}% - % - \chapmacro{#1}{Yappendix}{\appendixletter}% - % - \global\let\section = \appendixsec - \global\let\subsection = \appendixsubsec - \global\let\subsubsection = \appendixsubsubsec -} - -% normally unnmhead0 calls unnumberedzzz: -\outer\parseargdef\unnumbered{\unnmhead0{#1}} -\def\unnumberedzzz#1{% - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\unnumberedno by 1 - % - % Since an unnumbered has no number, no prefix for figures. - \global\let\chaplevelprefix = \empty - \resetallfloatnos - % - % This used to be simply \message{#1}, but TeX fully expands the - % argument to \message. Therefore, if #1 contained @-commands, TeX - % expanded them. For example, in `@unnumbered The @cite{Book}', TeX - % expanded @cite (which turns out to cause errors because \cite is meant - % to be executed, not expanded). - % - % Anyway, we don't want the fully-expanded definition of @cite to appear - % as a result of the \message, we just want `@cite' itself. We use - % \the<toks register> to achieve this: TeX expands \the<toks> only once, - % simply yielding the contents of <toks register>. (We also do this for - % the toc entries.) - \toks0 = {#1}% - \message{(\the\toks0)}% - % - \chapmacro{#1}{Ynothing}{\the\unnumberedno}% - % - \global\let\section = \unnumberedsec - \global\let\subsection = \unnumberedsubsec - \global\let\subsubsection = \unnumberedsubsubsec -} - -% @centerchap is like @unnumbered, but the heading is centered. -\outer\parseargdef\centerchap{% - % Well, we could do the following in a group, but that would break - % an assumption that \chapmacro is called at the outermost level. - % Thus we are safer this way: --kasal, 24feb04 - \let\centerparametersmaybe = \centerparameters - \unnmhead0{#1}% - \let\centerparametersmaybe = \relax -} - -% @top is like @unnumbered. -\let\top\unnumbered - -% Sections. -% -\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz -\def\seczzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% -} - -% normally calls appendixsectionzzz: -\outer\parseargdef\appendixsection{\apphead1{#1}} -\def\appendixsectionzzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% -} -\let\appendixsec\appendixsection - -% normally calls unnumberedseczzz: -\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} -\def\unnumberedseczzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% -} - -% Subsections. -% -% normally calls numberedsubseczzz: -\outer\parseargdef\numberedsubsec{\numhead2{#1}} -\def\numberedsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% -} - -% normally calls appendixsubseczzz: -\outer\parseargdef\appendixsubsec{\apphead2{#1}} -\def\appendixsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Yappendix}% - {\appendixletter.\the\secno.\the\subsecno}% -} - -% normally calls unnumberedsubseczzz: -\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} -\def\unnumberedsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Ynothing}% - {\the\unnumberedno.\the\secno.\the\subsecno}% -} - -% Subsubsections. -% -% normally numberedsubsubseczzz: -\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} -\def\numberedsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Ynumbered}% - {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -% normally appendixsubsubseczzz: -\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} -\def\appendixsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Yappendix}% - {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -% normally unnumberedsubsubseczzz: -\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} -\def\unnumberedsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Ynothing}% - {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -% These macros control what the section commands do, according -% to what kind of chapter we are in (ordinary, appendix, or unnumbered). -% Define them by default for a numbered chapter. -\let\section = \numberedsec -\let\subsection = \numberedsubsec -\let\subsubsection = \numberedsubsubsec - -% Define @majorheading, @heading and @subheading - -\def\majorheading{% - {\advance\chapheadingskip by 10pt \chapbreak }% - \parsearg\chapheadingzzz -} - -\def\chapheading{\chapbreak \parsearg\chapheadingzzz} -\def\chapheadingzzz#1{% - \vbox{\chapfonts \raggedtitlesettings #1\par}% - \nobreak\bigskip \nobreak - \suppressfirstparagraphindent -} - -% @heading, @subheading, @subsubheading. -\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} -\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} -\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} - -% These macros generate a chapter, section, etc. heading only -% (including whitespace, linebreaking, etc. around it), -% given all the information in convenient, parsed form. - -% Args are the skip and penalty (usually negative) -\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} - -% Parameter controlling skip before chapter headings (if needed) -\newskip\chapheadingskip - -% Define plain chapter starts, and page on/off switching for it. -\def\chapbreak{\dobreak \chapheadingskip {-4000}} -\def\chappager{\par\vfill\supereject} -% Because \domark is called before \chapoddpage, the filler page will -% get the headings for the next chapter, which is wrong. But we don't -% care -- we just disable all headings on the filler page. -\def\chapoddpage{% - \chappager - \ifodd\pageno \else - \begingroup - \headingsoff - \null - \chappager - \endgroup - \fi -} - -\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} - -\def\CHAPPAGoff{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chapbreak -\global\let\pagealignmacro=\chappager} - -\def\CHAPPAGon{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chappager -\global\let\pagealignmacro=\chappager -\global\def\HEADINGSon{\HEADINGSsingle}} - -\def\CHAPPAGodd{% -\global\let\contentsalignmacro = \chapoddpage -\global\let\pchapsepmacro=\chapoddpage -\global\let\pagealignmacro=\chapoddpage -\global\def\HEADINGSon{\HEADINGSdouble}} - -\CHAPPAGon - -% Chapter opening. -% -% #1 is the text, #2 is the section type (Ynumbered, Ynothing, -% Yappendix, Yomitfromtoc), #3 the chapter number. -% -% To test against our argument. -\def\Ynothingkeyword{Ynothing} -\def\Yomitfromtockeyword{Yomitfromtoc} -\def\Yappendixkeyword{Yappendix} -% -\def\chapmacro#1#2#3{% - % Insert the first mark before the heading break (see notes for \domark). - \let\prevchapterdefs=\lastchapterdefs - \let\prevsectiondefs=\lastsectiondefs - \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% - \gdef\thissection{}}% - % - \def\temptype{#2}% - \ifx\temptype\Ynothingkeyword - \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% - \gdef\thischapter{\thischaptername}}% - \else\ifx\temptype\Yomitfromtockeyword - \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% - \gdef\thischapter{}}% - \else\ifx\temptype\Yappendixkeyword - \toks0={#1}% - \xdef\lastchapterdefs{% - \gdef\noexpand\thischaptername{\the\toks0}% - \gdef\noexpand\thischapternum{\appendixletter}% - % \noexpand\putwordAppendix avoids expanding indigestible - % commands in some of the translations. - \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} - \noexpand\thischapternum: - \noexpand\thischaptername}% - }% - \else - \toks0={#1}% - \xdef\lastchapterdefs{% - \gdef\noexpand\thischaptername{\the\toks0}% - \gdef\noexpand\thischapternum{\the\chapno}% - % \noexpand\putwordChapter avoids expanding indigestible - % commands in some of the translations. - \gdef\noexpand\thischapter{\noexpand\putwordChapter{} - \noexpand\thischapternum: - \noexpand\thischaptername}% - }% - \fi\fi\fi - % - % Output the mark. Pass it through \safewhatsit, to take care of - % the preceding space. - \safewhatsit\domark - % - % Insert the chapter heading break. - \pchapsepmacro - % - % Now the second mark, after the heading break. No break points - % between here and the heading. - \let\prevchapterdefs=\lastchapterdefs - \let\prevsectiondefs=\lastsectiondefs - \domark - % - {% - \chapfonts \rmisbold - % - % Have to define \lastsection before calling \donoderef, because the - % xref code eventually uses it. On the other hand, it has to be called - % after \pchapsepmacro, or the headline will change too soon. - \gdef\lastsection{#1}% - % - % Only insert the separating space if we have a chapter/appendix - % number, and don't print the unnumbered ``number''. - \ifx\temptype\Ynothingkeyword - \setbox0 = \hbox{}% - \def\toctype{unnchap}% - \else\ifx\temptype\Yomitfromtockeyword - \setbox0 = \hbox{}% contents like unnumbered, but no toc entry - \def\toctype{omit}% - \else\ifx\temptype\Yappendixkeyword - \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% - \def\toctype{app}% - \else - \setbox0 = \hbox{#3\enspace}% - \def\toctype{numchap}% - \fi\fi\fi - % - % Write the toc entry for this chapter. Must come before the - % \donoderef, because we include the current node name in the toc - % entry, and \donoderef resets it to empty. - \writetocentry{\toctype}{#1}{#3}% - % - % For pdftex, we have to write out the node definition (aka, make - % the pdfdest) after any page break, but before the actual text has - % been typeset. If the destination for the pdf outline is after the - % text, then jumping from the outline may wind up with the text not - % being visible, for instance under high magnification. - \donoderef{#2}% - % - % Typeset the actual heading. - \nobreak % Avoid page breaks at the interline glue. - \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe - \unhbox0 #1\par}% - }% - \nobreak\bigskip % no page break after a chapter title - \nobreak -} - -% @centerchap -- centered and unnumbered. -\let\centerparametersmaybe = \relax -\def\centerparameters{% - \advance\rightskip by 3\rightskip - \leftskip = \rightskip - \parfillskip = 0pt -} - - -% I don't think this chapter style is supported any more, so I'm not -% updating it with the new noderef stuff. We'll see. --karl, 11aug03. -% -\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} -% -\def\unnchfopen #1{% - \chapoddpage - \vbox{\chapfonts \raggedtitlesettings #1\par}% - \nobreak\bigskip\nobreak -} -\def\chfopen #1#2{\chapoddpage {\chapfonts -\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% -\par\penalty 5000 % -} -\def\centerchfopen #1{% - \chapoddpage - \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% - \nobreak\bigskip \nobreak -} -\def\CHAPFopen{% - \global\let\chapmacro=\chfopen - \global\let\centerchapmacro=\centerchfopen} - - -% Section titles. These macros combine the section number parts and -% call the generic \sectionheading to do the printing. -% -\newskip\secheadingskip -\def\secheadingbreak{\dobreak \secheadingskip{-1000}} - -% Subsection titles. -\newskip\subsecheadingskip -\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} - -% Subsubsection titles. -\def\subsubsecheadingskip{\subsecheadingskip} -\def\subsubsecheadingbreak{\subsecheadingbreak} - - -% Print any size, any type, section title. -% -% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is -% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the -% section number. -% -\def\seckeyword{sec} -% -\def\sectionheading#1#2#3#4{% - {% - \checkenv{}% should not be in an environment. - % - % Switch to the right set of fonts. - \csname #2fonts\endcsname \rmisbold - % - \def\sectionlevel{#2}% - \def\temptype{#3}% - % - % Insert first mark before the heading break (see notes for \domark). - \let\prevsectiondefs=\lastsectiondefs - \ifx\temptype\Ynothingkeyword - \ifx\sectionlevel\seckeyword - \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% - \gdef\thissection{\thissectionname}}% - \fi - \else\ifx\temptype\Yomitfromtockeyword - % Don't redefine \thissection. - \else\ifx\temptype\Yappendixkeyword - \ifx\sectionlevel\seckeyword - \toks0={#1}% - \xdef\lastsectiondefs{% - \gdef\noexpand\thissectionname{\the\toks0}% - \gdef\noexpand\thissectionnum{#4}% - % \noexpand\putwordSection avoids expanding indigestible - % commands in some of the translations. - \gdef\noexpand\thissection{\noexpand\putwordSection{} - \noexpand\thissectionnum: - \noexpand\thissectionname}% - }% - \fi - \else - \ifx\sectionlevel\seckeyword - \toks0={#1}% - \xdef\lastsectiondefs{% - \gdef\noexpand\thissectionname{\the\toks0}% - \gdef\noexpand\thissectionnum{#4}% - % \noexpand\putwordSection avoids expanding indigestible - % commands in some of the translations. - \gdef\noexpand\thissection{\noexpand\putwordSection{} - \noexpand\thissectionnum: - \noexpand\thissectionname}% - }% - \fi - \fi\fi\fi - % - % Go into vertical mode. Usually we'll already be there, but we - % don't want the following whatsit to end up in a preceding paragraph - % if the document didn't happen to have a blank line. - \par - % - % Output the mark. Pass it through \safewhatsit, to take care of - % the preceding space. - \safewhatsit\domark - % - % Insert space above the heading. - \csname #2headingbreak\endcsname - % - % Now the second mark, after the heading break. No break points - % between here and the heading. - \let\prevsectiondefs=\lastsectiondefs - \domark - % - % Only insert the space after the number if we have a section number. - \ifx\temptype\Ynothingkeyword - \setbox0 = \hbox{}% - \def\toctype{unn}% - \gdef\lastsection{#1}% - \else\ifx\temptype\Yomitfromtockeyword - % for @headings -- no section number, don't include in toc, - % and don't redefine \lastsection. - \setbox0 = \hbox{}% - \def\toctype{omit}% - \let\sectionlevel=\empty - \else\ifx\temptype\Yappendixkeyword - \setbox0 = \hbox{#4\enspace}% - \def\toctype{app}% - \gdef\lastsection{#1}% - \else - \setbox0 = \hbox{#4\enspace}% - \def\toctype{num}% - \gdef\lastsection{#1}% - \fi\fi\fi - % - % Write the toc entry (before \donoderef). See comments in \chapmacro. - \writetocentry{\toctype\sectionlevel}{#1}{#4}% - % - % Write the node reference (= pdf destination for pdftex). - % Again, see comments in \chapmacro. - \donoderef{#3}% - % - % Interline glue will be inserted when the vbox is completed. - % That glue will be a valid breakpoint for the page, since it'll be - % preceded by a whatsit (usually from the \donoderef, or from the - % \writetocentry if there was no node). We don't want to allow that - % break, since then the whatsits could end up on page n while the - % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. - \nobreak - % - % Output the actual section heading. - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright - \hangindent=\wd0 % zero if no section number - \unhbox0 #1}% - }% - % Add extra space after the heading -- half of whatever came above it. - % Don't allow stretch, though. - \kern .5 \csname #2headingskip\endcsname - % - % Do not let the kern be a potential breakpoint, as it would be if it - % was followed by glue. - \nobreak - % - % We'll almost certainly start a paragraph next, so don't let that - % glue accumulate. (Not a breakpoint because it's preceded by a - % discardable item.) However, when a paragraph is not started next - % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out - % or the negative glue will cause weirdly wrong output, typically - % obscuring the section heading with something else. - \vskip-\parskip - % - % This is so the last item on the main vertical list is a known - % \penalty > 10000, so \startdefun, etc., can recognize the situation - % and do the needful. - \penalty 10001 -} - - -\message{toc,} -% Table of contents. -\newwrite\tocfile - -% Write an entry to the toc file, opening it if necessary. -% Called from @chapter, etc. -% -% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} -% We append the current node name (if any) and page number as additional -% arguments for the \{chap,sec,...}entry macros which will eventually -% read this. The node name is used in the pdf outlines as the -% destination to jump to. -% -% We open the .toc file for writing here instead of at @setfilename (or -% any other fixed time) so that @contents can be anywhere in the document. -% But if #1 is `omit', then we don't do anything. This is used for the -% table of contents chapter openings themselves. -% -\newif\iftocfileopened -\def\omitkeyword{omit}% -% -\def\writetocentry#1#2#3{% - \edef\writetoctype{#1}% - \ifx\writetoctype\omitkeyword \else - \iftocfileopened\else - \immediate\openout\tocfile = \jobname.toc - \global\tocfileopenedtrue - \fi - % - \iflinks - {\atdummies - \edef\temp{% - \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% - \temp - }% - \fi - \fi - % - % Tell \shipout to create a pdf destination on each page, if we're - % writing pdf. These are used in the table of contents. We can't - % just write one on every page because the title pages are numbered - % 1 and 2 (the page numbers aren't printed), and so are the first - % two pages of the document. Thus, we'd have two destinations named - % `1', and two named `2'. - \ifpdf \global\pdfmakepagedesttrue \fi -} - - -% These characters do not print properly in the Computer Modern roman -% fonts, so we must take special care. This is more or less redundant -% with the Texinfo input format setup at the end of this file. -% -\def\activecatcodes{% - \catcode`\"=\active - \catcode`\$=\active - \catcode`\<=\active - \catcode`\>=\active - \catcode`\\=\active - \catcode`\^=\active - \catcode`\_=\active - \catcode`\|=\active - \catcode`\~=\active -} - - -% Read the toc file, which is essentially Texinfo input. -\def\readtocfile{% - \setupdatafile - \activecatcodes - \input \tocreadfilename -} - -\newskip\contentsrightmargin \contentsrightmargin=1in -\newcount\savepageno -\newcount\lastnegativepageno \lastnegativepageno = -1 - -% Prepare to read what we've written to \tocfile. -% -\def\startcontents#1{% - % If @setchapternewpage on, and @headings double, the contents should - % start on an odd page, unlike chapters. Thus, we maintain - % \contentsalignmacro in parallel with \pagealignmacro. - % From: Torbjorn Granlund <tege@matematik.su.se> - \contentsalignmacro - \immediate\closeout\tocfile - % - % Don't need to put `Contents' or `Short Contents' in the headline. - % It is abundantly clear what they are. - \chapmacro{#1}{Yomitfromtoc}{}% - % - \savepageno = \pageno - \begingroup % Set up to handle contents files properly. - \raggedbottom % Worry more about breakpoints than the bottom. - \advance\hsize by -\contentsrightmargin % Don't use the full line length. - % - % Roman numerals for page numbers. - \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi -} - -% redefined for the two-volume lispref. We always output on -% \jobname.toc even if this is redefined. -% -\def\tocreadfilename{\jobname.toc} - -% Normal (long) toc. -% -\def\contents{% - \startcontents{\putwordTOC}% - \openin 1 \tocreadfilename\space - \ifeof 1 \else - \readtocfile - \fi - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \ifeof 1 \else - \pdfmakeoutlines - \fi - \closein 1 - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} - -% And just the chapters. -\def\summarycontents{% - \startcontents{\putwordShortTOC}% - % - \let\partentry = \shortpartentry - \let\numchapentry = \shortchapentry - \let\appentry = \shortchapentry - \let\unnchapentry = \shortunnchapentry - % We want a true roman here for the page numbers. - \secfonts - \let\rm=\shortcontrm \let\bf=\shortcontbf - \let\sl=\shortcontsl \let\tt=\shortconttt - \rm - \hyphenpenalty = 10000 - \advance\baselineskip by 1pt % Open it up a little. - \def\numsecentry##1##2##3##4{} - \let\appsecentry = \numsecentry - \let\unnsecentry = \numsecentry - \let\numsubsecentry = \numsecentry - \let\appsubsecentry = \numsecentry - \let\unnsubsecentry = \numsecentry - \let\numsubsubsecentry = \numsecentry - \let\appsubsubsecentry = \numsecentry - \let\unnsubsubsecentry = \numsecentry - \openin 1 \tocreadfilename\space - \ifeof 1 \else - \readtocfile - \fi - \closein 1 - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} -\let\shortcontents = \summarycontents - -% Typeset the label for a chapter or appendix for the short contents. -% The arg is, e.g., `A' for an appendix, or `3' for a chapter. -% -\def\shortchaplabel#1{% - % This space should be enough, since a single number is .5em, and the - % widest letter (M) is 1em, at least in the Computer Modern fonts. - % But use \hss just in case. - % (This space doesn't include the extra space that gets added after - % the label; that gets put in by \shortchapentry above.) - % - % We'd like to right-justify chapter numbers, but that looks strange - % with appendix letters. And right-justifying numbers and - % left-justifying letters looks strange when there is less than 10 - % chapters. Have to read the whole toc once to know how many chapters - % there are before deciding ... - \hbox to 1em{#1\hss}% -} - -% These macros generate individual entries in the table of contents. -% The first argument is the chapter or section name. -% The last argument is the page number. -% The arguments in between are the chapter number, section number, ... - -% Parts, in the main contents. Replace the part number, which doesn't -% exist, with an empty box. Let's hope all the numbers have the same width. -% Also ignore the page number, which is conventionally not printed. -\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} -\def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} -% -% Parts, in the short toc. -\def\shortpartentry#1#2#3#4{% - \penalty-300 - \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip - \shortchapentry{{\bf #1}}{\numeralbox}{}{}% -} - -% Chapters, in the main contents. -\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} -% -% Chapters, in the short toc. -% See comments in \dochapentry re vbox and related settings. -\def\shortchapentry#1#2#3#4{% - \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% -} - -% Appendices, in the main contents. -% Need the word Appendix, and a fixed-size box. -% -\def\appendixbox#1{% - % We use M since it's probably the widest letter. - \setbox0 = \hbox{\putwordAppendix{} M}% - \hbox to \wd0{\putwordAppendix{} #1\hss}} -% -\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} - -% Unnumbered chapters. -\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} -\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} - -% Sections. -\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} -\let\appsecentry=\numsecentry -\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} - -% Subsections. -\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} -\let\appsubsecentry=\numsubsecentry -\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} - -% And subsubsections. -\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} -\let\appsubsubsecentry=\numsubsubsecentry -\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} - -% This parameter controls the indentation of the various levels. -% Same as \defaultparindent. -\newdimen\tocindent \tocindent = 15pt - -% Now for the actual typesetting. In all these, #1 is the text and #2 is the -% page number. -% -% If the toc has to be broken over pages, we want it to be at chapters -% if at all possible; hence the \penalty. -\def\dochapentry#1#2{% - \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip - \begingroup - \chapentryfonts - \tocentry{#1}{\dopageno\bgroup#2\egroup}% - \endgroup - \nobreak\vskip .25\baselineskip plus.1\baselineskip -} - -\def\dosecentry#1#2{\begingroup - \secentryfonts \leftskip=\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsecentry#1#2{\begingroup - \subsecentryfonts \leftskip=2\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsubsecentry#1#2{\begingroup - \subsubsecentryfonts \leftskip=3\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -% We use the same \entry macro as for the index entries. -\let\tocentry = \entry - -% Space between chapter (or whatever) number and the title. -\def\labelspace{\hskip1em \relax} - -\def\dopageno#1{{\rm #1}} -\def\doshortpageno#1{{\rm #1}} - -\def\chapentryfonts{\secfonts \rm} -\def\secentryfonts{\textfonts} -\def\subsecentryfonts{\textfonts} -\def\subsubsecentryfonts{\textfonts} - - -\message{environments,} -% @foo ... @end foo. - -% @tex ... @end tex escapes into raw TeX temporarily. -% One exception: @ is still an escape character, so that @end tex works. -% But \@ or @@ will get a plain @ character. - -\envdef\tex{% - \setupmarkupstyle{tex}% - \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 - \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 - \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie - \catcode `\%=14 - \catcode `\+=\other - \catcode `\"=\other - \catcode `\|=\other - \catcode `\<=\other - \catcode `\>=\other - \catcode`\`=\other - \catcode`\'=\other - \escapechar=`\\ - % - % ' is active in math mode (mathcode"8000). So reset it, and all our - % other math active characters (just in case), to plain's definitions. - \mathactive - % - \let\b=\ptexb - \let\bullet=\ptexbullet - \let\c=\ptexc - \let\,=\ptexcomma - \let\.=\ptexdot - \let\dots=\ptexdots - \let\equiv=\ptexequiv - \let\!=\ptexexclam - \let\i=\ptexi - \let\indent=\ptexindent - \let\noindent=\ptexnoindent - \let\{=\ptexlbrace - \let\+=\tabalign - \let\}=\ptexrbrace - \let\/=\ptexslash - \let\*=\ptexstar - \let\t=\ptext - \expandafter \let\csname top\endcsname=\ptextop % outer - \let\frenchspacing=\plainfrenchspacing - % - \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% - \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% - \def\@{@}% -} -% There is no need to define \Etex. - -% Define @lisp ... @end lisp. -% @lisp environment forms a group so it can rebind things, -% including the definition of @end lisp (which normally is erroneous). - -% Amount to narrow the margins by for @lisp. -\newskip\lispnarrowing \lispnarrowing=0.4in - -% This is the definition that ^^M gets inside @lisp, @example, and other -% such environments. \null is better than a space, since it doesn't -% have any width. -\def\lisppar{\null\endgraf} - -% This space is always present above and below environments. -\newskip\envskipamount \envskipamount = 0pt - -% Make spacing and below environment symmetrical. We use \parskip here -% to help in doing that, since in @example-like environments \parskip -% is reset to zero; thus the \afterenvbreak inserts no space -- but the -% start of the next paragraph will insert \parskip. -% -\def\aboveenvbreak{{% - % =10000 instead of <10000 because of a special case in \itemzzz and - % \sectionheading, q.v. - \ifnum \lastpenalty=10000 \else - \advance\envskipamount by \parskip - \endgraf - \ifdim\lastskip<\envskipamount - \removelastskip - % it's not a good place to break if the last penalty was \nobreak - % or better ... - \ifnum\lastpenalty<10000 \penalty-50 \fi - \vskip\envskipamount - \fi - \fi -}} - -\let\afterenvbreak = \aboveenvbreak - -% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will -% also clear it, so that its embedded environments do the narrowing again. -\let\nonarrowing=\relax - -% @cartouche ... @end cartouche: draw rectangle w/rounded corners around -% environment contents. -\font\circle=lcircle10 -\newdimen\circthick -\newdimen\cartouter\newdimen\cartinner -\newskip\normbskip\newskip\normpskip\newskip\normlskip -\circthick=\fontdimen8\circle -% -\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth -\def\ctr{{\hskip 6pt\circle\char'010}} -\def\cbl{{\circle\char'012\hskip -6pt}} -\def\cbr{{\hskip 6pt\circle\char'011}} -\def\carttop{\hbox to \cartouter{\hskip\lskip - \ctl\leaders\hrule height\circthick\hfil\ctr - \hskip\rskip}} -\def\cartbot{\hbox to \cartouter{\hskip\lskip - \cbl\leaders\hrule height\circthick\hfil\cbr - \hskip\rskip}} -% -\newskip\lskip\newskip\rskip - -\envdef\cartouche{% - \ifhmode\par\fi % can't be in the midst of a paragraph. - \startsavinginserts - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt % we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18.4pt % allow for 3pt kerns on either - % side, and for 6pt waste from - % each corner char, and rule thickness - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing = t% - % - % If this cartouche directly follows a sectioning command, we need the - % \parskip glue (backspaced over by default) or the cartouche can - % collide with the section heading. - \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi - % - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \kern3pt - \hsize=\cartinner - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip - \comment % For explanation, see the end of def\group. -} -\def\Ecartouche{% - \ifhmode\par\fi - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup - \checkinserts -} - - -% This macro is called at the beginning of all the @example variants, -% inside a group. -\newdimen\nonfillparindent -\def\nonfillstart{% - \aboveenvbreak - \hfuzz = 12pt % Don't be fussy - \sepspaces % Make spaces be word-separators rather than space tokens. - \let\par = \lisppar % don't ignore blank lines - \obeylines % each line of input is a line of output - \parskip = 0pt - % Turn off paragraph indentation but redefine \indent to emulate - % the normal \indent. - \nonfillparindent=\parindent - \parindent = 0pt - \let\indent\nonfillindent - % - \emergencystretch = 0pt % don't try to avoid overfull boxes - \ifx\nonarrowing\relax - \advance \leftskip by \lispnarrowing - \exdentamount=\lispnarrowing - \else - \let\nonarrowing = \relax - \fi - \let\exdent=\nofillexdent -} - -\begingroup -\obeyspaces -% We want to swallow spaces (but not other tokens) after the fake -% @indent in our nonfill-environments, where spaces are normally -% active and set to @tie, resulting in them not being ignored after -% @indent. -\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% -\gdef\nonfillindentcheck{% -\ifx\temp % -\expandafter\nonfillindentgobble% -\else% -\leavevmode\nonfillindentbox% -\fi% -}% -\endgroup -\def\nonfillindentgobble#1{\nonfillindent} -\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} - -% If you want all examples etc. small: @set dispenvsize small. -% If you want even small examples the full size: @set dispenvsize nosmall. -% This affects the following displayed environments: -% @example, @display, @format, @lisp -% -\def\smallword{small} -\def\nosmallword{nosmall} -\let\SETdispenvsize\relax -\def\setnormaldispenv{% - \ifx\SETdispenvsize\smallword - % end paragraph for sake of leading, in case document has no blank - % line. This is redundant with what happens in \aboveenvbreak, but - % we need to do it before changing the fonts, and it's inconvenient - % to change the fonts afterward. - \ifnum \lastpenalty=10000 \else \endgraf \fi - \smallexamplefonts \rm - \fi -} -\def\setsmalldispenv{% - \ifx\SETdispenvsize\nosmallword - \else - \ifnum \lastpenalty=10000 \else \endgraf \fi - \smallexamplefonts \rm - \fi -} - -% We often define two environments, @foo and @smallfoo. -% Let's do it in one command. #1 is the env name, #2 the definition. -\def\makedispenvdef#1#2{% - \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% - \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% - \expandafter\let\csname E#1\endcsname \afterenvbreak - \expandafter\let\csname Esmall#1\endcsname \afterenvbreak -} - -% Define two environment synonyms (#1 and #2) for an environment. -\def\maketwodispenvdef#1#2#3{% - \makedispenvdef{#1}{#3}% - \makedispenvdef{#2}{#3}% -} -% -% @lisp: indented, narrowed, typewriter font; -% @example: same as @lisp. -% -% @smallexample and @smalllisp: use smaller fonts. -% Originally contributed by Pavel@xerox. -% -\maketwodispenvdef{lisp}{example}{% - \nonfillstart - \tt\setupmarkupstyle{example}% - \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. - \gobble % eat return -} -% @display/@smalldisplay: same as @lisp except keep current font. -% -\makedispenvdef{display}{% - \nonfillstart - \gobble -} - -% @format/@smallformat: same as @display except don't narrow margins. -% -\makedispenvdef{format}{% - \let\nonarrowing = t% - \nonfillstart - \gobble -} - -% @flushleft: same as @format, but doesn't obey \SETdispenvsize. -\envdef\flushleft{% - \let\nonarrowing = t% - \nonfillstart - \gobble -} -\let\Eflushleft = \afterenvbreak - -% @flushright. -% -\envdef\flushright{% - \let\nonarrowing = t% - \nonfillstart - \advance\leftskip by 0pt plus 1fill\relax - \gobble -} -\let\Eflushright = \afterenvbreak - - -% @raggedright does more-or-less normal line breaking but no right -% justification. From plain.tex. -\envdef\raggedright{% - \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax -} -\let\Eraggedright\par - -\envdef\raggedleft{% - \parindent=0pt \leftskip0pt plus2em - \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt - \hbadness=10000 % Last line will usually be underfull, so turn off - % badness reporting. -} -\let\Eraggedleft\par - -\envdef\raggedcenter{% - \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em - \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt - \hbadness=10000 % Last line will usually be underfull, so turn off - % badness reporting. -} -\let\Eraggedcenter\par - - -% @quotation does normal linebreaking (hence we can't use \nonfillstart) -% and narrows the margins. We keep \parskip nonzero in general, since -% we're doing normal filling. So, when using \aboveenvbreak and -% \afterenvbreak, temporarily make \parskip 0. -% -\makedispenvdef{quotation}{\quotationstart} -% -\def\quotationstart{% - \indentedblockstart % same as \indentedblock, but increase right margin too. - \ifx\nonarrowing\relax - \advance\rightskip by \lispnarrowing - \fi - \parsearg\quotationlabel -} - -% We have retained a nonzero parskip for the environment, since we're -% doing normal filling. -% -\def\Equotation{% - \par - \ifx\quotationauthor\thisisundefined\else - % indent a bit. - \leftline{\kern 2\leftskip \sl ---\quotationauthor}% - \fi - {\parskip=0pt \afterenvbreak}% -} -\def\Esmallquotation{\Equotation} - -% If we're given an argument, typeset it in bold with a colon after. -\def\quotationlabel#1{% - \def\temp{#1}% - \ifx\temp\empty \else - {\bf #1: }% - \fi -} - -% @indentedblock is like @quotation, but indents only on the left and -% has no optional argument. -% -\makedispenvdef{indentedblock}{\indentedblockstart} -% -\def\indentedblockstart{% - {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip - \parindent=0pt - % - % @cartouche defines \nonarrowing to inhibit narrowing at next level down. - \ifx\nonarrowing\relax - \advance\leftskip by \lispnarrowing - \exdentamount = \lispnarrowing - \else - \let\nonarrowing = \relax - \fi -} - -% Keep a nonzero parskip for the environment, since we're doing normal filling. -% -\def\Eindentedblock{% - \par - {\parskip=0pt \afterenvbreak}% -} -\def\Esmallindentedblock{\Eindentedblock} - - -% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} -% If we want to allow any <char> as delimiter, -% we need the curly braces so that makeinfo sees the @verb command, eg: -% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org -% -% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. -% -% [Knuth] p.344; only we need to do the other characters Texinfo sets -% active too. Otherwise, they get lost as the first character on a -% verbatim line. -\def\dospecials{% - \do\ \do\\\do\{\do\}\do\$\do\&% - \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% - \do\<\do\>\do\|\do\@\do+\do\"% - % Don't do the quotes -- if we do, @set txicodequoteundirected and - % @set txicodequotebacktick will not have effect on @verb and - % @verbatim, and ?` and !` ligatures won't get disabled. - %\do\`\do\'% -} -% -% [Knuth] p. 380 -\def\uncatcodespecials{% - \def\do##1{\catcode`##1=\other}\dospecials} -% -% Setup for the @verb command. -% -% Eight spaces for a tab -\begingroup - \catcode`\^^I=\active - \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} -\endgroup -% -\def\setupverb{% - \tt % easiest (and conventionally used) font for verbatim - \def\par{\leavevmode\endgraf}% - \setupmarkupstyle{verb}% - \tabeightspaces - % Respect line breaks, - % print special symbols as themselves, and - % make each space count - % must do in this order: - \obeylines \uncatcodespecials \sepspaces -} - -% Setup for the @verbatim environment -% -% Real tab expansion. -\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount -% -% We typeset each line of the verbatim in an \hbox, so we can handle -% tabs. The \global is in case the verbatim line starts with an accent, -% or some other command that starts with a begin-group. Otherwise, the -% entire \verbbox would disappear at the corresponding end-group, before -% it is typeset. Meanwhile, we can't have nested verbatim commands -% (can we?), so the \global won't be overwriting itself. -\newbox\verbbox -\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} -% -\begingroup - \catcode`\^^I=\active - \gdef\tabexpand{% - \catcode`\^^I=\active - \def^^I{\leavevmode\egroup - \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab - \divide\dimen\verbbox by\tabw - \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw - \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw - \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox - }% - } -\endgroup - -% start the verbatim environment. -\def\setupverbatim{% - \let\nonarrowing = t% - \nonfillstart - \tt % easiest (and conventionally used) font for verbatim - % The \leavevmode here is for blank lines. Otherwise, we would - % never \starttabox and the \egroup would end verbatim mode. - \def\par{\leavevmode\egroup\box\verbbox\endgraf}% - \tabexpand - \setupmarkupstyle{verbatim}% - % Respect line breaks, - % print special symbols as themselves, and - % make each space count. - % Must do in this order: - \obeylines \uncatcodespecials \sepspaces - \everypar{\starttabbox}% -} - -% Do the @verb magic: verbatim text is quoted by unique -% delimiter characters. Before first delimiter expect a -% right brace, after last delimiter expect closing brace: -% -% \def\doverb'{'<char>#1<char>'}'{#1} -% -% [Knuth] p. 382; only eat outer {} -\begingroup - \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other - \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] -\endgroup -% -\def\verb{\begingroup\setupverb\doverb} -% -% -% Do the @verbatim magic: define the macro \doverbatim so that -% the (first) argument ends when '@end verbatim' is reached, ie: -% -% \def\doverbatim#1@end verbatim{#1} -% -% For Texinfo it's a lot easier than for LaTeX, -% because texinfo's \verbatim doesn't stop at '\end{verbatim}': -% we need not redefine '\', '{' and '}'. -% -% Inspired by LaTeX's verbatim command set [latex.ltx] -% -\begingroup - \catcode`\ =\active - \obeylines % - % ignore everything up to the first ^^M, that's the newline at the end - % of the @verbatim input line itself. Otherwise we get an extra blank - % line in the output. - \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% - % We really want {...\end verbatim} in the body of the macro, but - % without the active space; thus we have to use \xdef and \gobble. -\endgroup -% -\envdef\verbatim{% - \setupverbatim\doverbatim -} -\let\Everbatim = \afterenvbreak - - -% @verbatiminclude FILE - insert text of file in verbatim environment. -% -\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} -% -\def\doverbatiminclude#1{% - {% - \makevalueexpandable - \setupverbatim - \indexnofonts % Allow `@@' and other weird things in file names. - \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% - \input #1 - \afterenvbreak - }% -} - -% @copying ... @end copying. -% Save the text away for @insertcopying later. -% -% We save the uninterpreted tokens, rather than creating a box. -% Saving the text in a box would be much easier, but then all the -% typesetting commands (@smallbook, font changes, etc.) have to be done -% beforehand -- and a) we want @copying to be done first in the source -% file; b) letting users define the frontmatter in as flexible order as -% possible is very desirable. -% -\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} -\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} -% -\def\insertcopying{% - \begingroup - \parindent = 0pt % paragraph indentation looks wrong on title page - \scanexp\copyingtext - \endgroup -} - - -\message{defuns,} -% @defun etc. - -\newskip\defbodyindent \defbodyindent=.4in -\newskip\defargsindent \defargsindent=50pt -\newskip\deflastargmargin \deflastargmargin=18pt -\newcount\defunpenalty - -% Start the processing of @deffn: -\def\startdefun{% - \ifnum\lastpenalty<10000 - \medbreak - \defunpenalty=10003 % Will keep this @deffn together with the - % following @def command, see below. - \else - % If there are two @def commands in a row, we'll have a \nobreak, - % which is there to keep the function description together with its - % header. But if there's nothing but headers, we need to allow a - % break somewhere. Check specifically for penalty 10002, inserted - % by \printdefunline, instead of 10000, since the sectioning - % commands also insert a nobreak penalty, and we don't want to allow - % a break between a section heading and a defun. - % - % As a further refinement, we avoid "club" headers by signalling - % with penalty of 10003 after the very first @deffn in the - % sequence (see above), and penalty of 10002 after any following - % @def command. - \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi - % - % Similarly, after a section heading, do not allow a break. - % But do insert the glue. - \medskip % preceded by discardable penalty, so not a breakpoint - \fi - % - \parindent=0in - \advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent -} - -\def\dodefunx#1{% - % First, check whether we are in the right environment: - \checkenv#1% - % - % As above, allow line break if we have multiple x headers in a row. - % It's not a great place, though. - \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi - % - % And now, it's time to reuse the body of the original defun: - \expandafter\gobbledefun#1% -} -\def\gobbledefun#1\startdefun{} - -% \printdefunline \deffnheader{text} -% -\def\printdefunline#1#2{% - \begingroup - % call \deffnheader: - #1#2 \endheader - % common ending: - \interlinepenalty = 10000 - \advance\rightskip by 0pt plus 1fil\relax - \endgraf - \nobreak\vskip -\parskip - \penalty\defunpenalty % signal to \startdefun and \dodefunx - % Some of the @defun-type tags do not enable magic parentheses, - % rendering the following check redundant. But we don't optimize. - \checkparencounts - \endgroup -} - -\def\Edefun{\endgraf\medbreak} - -% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; -% the only thing remaining is to define \deffnheader. -% -\def\makedefun#1{% - \expandafter\let\csname E#1\endcsname = \Edefun - \edef\temp{\noexpand\domakedefun - \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% - \temp -} - -% \domakedefun \deffn \deffnx \deffnheader -% -% Define \deffn and \deffnx, without parameters. -% \deffnheader has to be defined explicitly. -% -\def\domakedefun#1#2#3{% - \envdef#1{% - \startdefun - \doingtypefnfalse % distinguish typed functions from all else - \parseargusing\activeparens{\printdefunline#3}% - }% - \def#2{\dodefunx#1}% - \def#3% -} - -\newif\ifdoingtypefn % doing typed function? -\newif\ifrettypeownline % typeset return type on its own line? - -% @deftypefnnewline on|off says whether the return type of typed functions -% are printed on their own line. This affects @deftypefn, @deftypefun, -% @deftypeop, and @deftypemethod. -% -\parseargdef\deftypefnnewline{% - \def\temp{#1}% - \ifx\temp\onword - \expandafter\let\csname SETtxideftypefnnl\endcsname - = \empty - \else\ifx\temp\offword - \expandafter\let\csname SETtxideftypefnnl\endcsname - = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @txideftypefnnl value `\temp', - must be on|off}% - \fi\fi -} - -% Untyped functions: - -% @deffn category name args -\makedefun{deffn}{\deffngeneral{}} - -% @deffn category class name args -\makedefun{defop}#1 {\defopon{#1\ \putwordon}} - -% \defopon {category on}class name args -\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } - -% \deffngeneral {subind}category name args -% -\def\deffngeneral#1#2 #3 #4\endheader{% - % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. - \dosubind{fn}{\code{#3}}{#1}% - \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% -} - -% Typed functions: - -% @deftypefn category type name args -\makedefun{deftypefn}{\deftypefngeneral{}} - -% @deftypeop category class type name args -\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} - -% \deftypeopon {category on}class type name args -\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } - -% \deftypefngeneral {subind}category type name args -% -\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% - \dosubind{fn}{\code{#4}}{#1}% - \doingtypefntrue - \defname{#2}{#3}{#4}\defunargs{#5\unskip}% -} - -% Typed variables: - -% @deftypevr category type var args -\makedefun{deftypevr}{\deftypecvgeneral{}} - -% @deftypecv category class type var args -\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} - -% \deftypecvof {category of}class type var args -\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } - -% \deftypecvgeneral {subind}category type var args -% -\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% - \dosubind{vr}{\code{#4}}{#1}% - \defname{#2}{#3}{#4}\defunargs{#5\unskip}% -} - -% Untyped variables: - -% @defvr category var args -\makedefun{defvr}#1 {\deftypevrheader{#1} {} } - -% @defcv category class var args -\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} - -% \defcvof {category of}class var args -\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } - -% Types: - -% @deftp category name args -\makedefun{deftp}#1 #2 #3\endheader{% - \doind{tp}{\code{#2}}% - \defname{#1}{}{#2}\defunargs{#3\unskip}% -} - -% Remaining @defun-like shortcuts: -\makedefun{defun}{\deffnheader{\putwordDeffunc} } -\makedefun{defmac}{\deffnheader{\putwordDefmac} } -\makedefun{defspec}{\deffnheader{\putwordDefspec} } -\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } -\makedefun{defvar}{\defvrheader{\putwordDefvar} } -\makedefun{defopt}{\defvrheader{\putwordDefopt} } -\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } -\makedefun{defmethod}{\defopon\putwordMethodon} -\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} -\makedefun{defivar}{\defcvof\putwordInstanceVariableof} -\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} - -% \defname, which formats the name of the @def (not the args). -% #1 is the category, such as "Function". -% #2 is the return type, if any. -% #3 is the function name. -% -% We are followed by (but not passed) the arguments, if any. -% -\def\defname#1#2#3{% - \par - % Get the values of \leftskip and \rightskip as they were outside the @def... - \advance\leftskip by -\defbodyindent - % - % Determine if we are typesetting the return type of a typed function - % on a line by itself. - \rettypeownlinefalse - \ifdoingtypefn % doing a typed function specifically? - % then check user option for putting return type on its own line: - \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else - \rettypeownlinetrue - \fi - \fi - % - % How we'll format the category name. Putting it in brackets helps - % distinguish it from the body text that may end up on the next line - % just below it. - \def\temp{#1}% - \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} - % - % Figure out line sizes for the paragraph shape. We'll always have at - % least two. - \tempnum = 2 - % - % The first line needs space for \box0; but if \rightskip is nonzero, - % we need only space for the part of \box0 which exceeds it: - \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip - % - % If doing a return type on its own line, we'll have another line. - \ifrettypeownline - \advance\tempnum by 1 - \def\maybeshapeline{0in \hsize}% - \else - \def\maybeshapeline{}% - \fi - % - % The continuations: - \dimen2=\hsize \advance\dimen2 by -\defargsindent - % - % The final paragraph shape: - \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 - % - % Put the category name at the right margin. - \noindent - \hbox to 0pt{% - \hfil\box0 \kern-\hsize - % \hsize has to be shortened this way: - \kern\leftskip - % Intentionally do not respect \rightskip, since we need the space. - }% - % - % Allow all lines to be underfull without complaint: - \tolerance=10000 \hbadness=10000 - \exdentamount=\defbodyindent - {% - % defun fonts. We use typewriter by default (used to be bold) because: - % . we're printing identifiers, they should be in tt in principle. - % . in languages with many accents, such as Czech or French, it's - % common to leave accents off identifiers. The result looks ok in - % tt, but exceedingly strange in rm. - % . we don't want -- and --- to be treated as ligatures. - % . this still does not fix the ?` and !` ligatures, but so far no - % one has made identifiers using them :). - \df \tt - \def\temp{#2}% text of the return type - \ifx\temp\empty\else - \tclose{\temp}% typeset the return type - \ifrettypeownline - % put return type on its own line; prohibit line break following: - \hfil\vadjust{\nobreak}\break - \else - \space % type on same line, so just followed by a space - \fi - \fi % no return type - #3% output function name - }% - {\rm\enskip}% hskip 0.5 em of \tenrm - % - \boldbrax - % arguments will be output next, if any. -} - -% Print arguments in slanted roman (not ttsl), inconsistently with using -% tt for the name. This is because literal text is sometimes needed in -% the argument list (groff manual), and ttsl and tt are not very -% distinguishable. Prevent hyphenation at `-' chars. -% -\def\defunargs#1{% - % use sl by default (not ttsl), - % tt for the names. - \df \sl \hyphenchar\font=0 - % - % On the other hand, if an argument has two dashes (for instance), we - % want a way to get ttsl. We used to recommend @var for that, so - % leave the code in, but it's strange for @var to lead to typewriter. - % Nowadays we recommend @code, since the difference between a ttsl hyphen - % and a tt hyphen is pretty tiny. @code also disables ?` !`. - \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% - #1% - \sl\hyphenchar\font=45 -} - -% We want ()&[] to print specially on the defun line. -% -\def\activeparens{% - \catcode`\(=\active \catcode`\)=\active - \catcode`\[=\active \catcode`\]=\active - \catcode`\&=\active -} - -% Make control sequences which act like normal parenthesis chars. -\let\lparen = ( \let\rparen = ) - -% Be sure that we always have a definition for `(', etc. For example, -% if the fn name has parens in it, \boldbrax will not be in effect yet, -% so TeX would otherwise complain about undefined control sequence. -{ - \activeparens - \global\let(=\lparen \global\let)=\rparen - \global\let[=\lbrack \global\let]=\rbrack - \global\let& = \& - - \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} - \gdef\magicamp{\let&=\amprm} -} - -\newcount\parencount - -% If we encounter &foo, then turn on ()-hacking afterwards -\newif\ifampseen -\def\amprm#1 {\ampseentrue{\bf\ }} - -\def\parenfont{% - \ifampseen - % At the first level, print parens in roman, - % otherwise use the default font. - \ifnum \parencount=1 \rm \fi - \else - % The \sf parens (in \boldbrax) actually are a little bolder than - % the contained text. This is especially needed for [ and ] . - \sf - \fi -} -\def\infirstlevel#1{% - \ifampseen - \ifnum\parencount=1 - #1% - \fi - \fi -} -\def\bfafterword#1 {#1 \bf} - -\def\opnr{% - \global\advance\parencount by 1 - {\parenfont(}% - \infirstlevel \bfafterword -} -\def\clnr{% - {\parenfont)}% - \infirstlevel \sl - \global\advance\parencount by -1 -} - -\newcount\brackcount -\def\lbrb{% - \global\advance\brackcount by 1 - {\bf[}% -} -\def\rbrb{% - {\bf]}% - \global\advance\brackcount by -1 -} - -\def\checkparencounts{% - \ifnum\parencount=0 \else \badparencount \fi - \ifnum\brackcount=0 \else \badbrackcount \fi -} -% these should not use \errmessage; the glibc manual, at least, actually -% has such constructs (when documenting function pointers). -\def\badparencount{% - \message{Warning: unbalanced parentheses in @def...}% - \global\parencount=0 -} -\def\badbrackcount{% - \message{Warning: unbalanced square brackets in @def...}% - \global\brackcount=0 -} - - -\message{macros,} -% @macro. - -% To do this right we need a feature of e-TeX, \scantokens, -% which we arrange to emulate with a temporary file in ordinary TeX. -\ifx\eTeXversion\thisisundefined - \newwrite\macscribble - \def\scantokens#1{% - \toks0={#1}% - \immediate\openout\macscribble=\jobname.tmp - \immediate\write\macscribble{\the\toks0}% - \immediate\closeout\macscribble - \input \jobname.tmp - } -\fi - -\def\scanmacro#1{\begingroup - \newlinechar`\^^M - \let\xeatspaces\eatspaces - % - % Undo catcode changes of \startcontents and \doprintindex - % When called from @insertcopying or (short)caption, we need active - % backslash to get it printed correctly. Previously, we had - % \catcode`\\=\other instead. We'll see whether a problem appears - % with macro expansion. --kasal, 19aug04 - \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ - % - % ... and for \example: - \spaceisspace - % - % The \empty here causes a following catcode 5 newline to be eaten as - % part of reading whitespace after a control sequence. It does not - % eat a catcode 13 newline. There's no good way to handle the two - % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX - % would then have different behavior). See the Macro Details node in - % the manual for the workaround we recommend for macros and - % line-oriented commands. - % - \scantokens{#1\empty}% -\endgroup} - -\def\scanexp#1{% - \edef\temp{\noexpand\scanmacro{#1}}% - \temp -} - -\newcount\paramno % Count of parameters -\newtoks\macname % Macro name -\newif\ifrecursive % Is it recursive? - -% List of all defined macros in the form -% \definedummyword\macro1\definedummyword\macro2... -% Currently is also contains all @aliases; the list can be split -% if there is a need. -\def\macrolist{} - -% Add the macro to \macrolist -\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} -\def\addtomacrolistxxx#1{% - \toks0 = \expandafter{\macrolist\definedummyword#1}% - \xdef\macrolist{\the\toks0}% -} - -% Utility routines. -% This does \let #1 = #2, with \csnames; that is, -% \let \csname#1\endcsname = \csname#2\endcsname -% (except of course we have to play expansion games). -% -\def\cslet#1#2{% - \expandafter\let - \csname#1\expandafter\endcsname - \csname#2\endcsname -} - -% Trim leading and trailing spaces off a string. -% Concepts from aro-bend problem 15 (see CTAN). -{\catcode`\@=11 -\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} -\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} -\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} -\def\unbrace#1{#1} -\unbrace{\gdef\trim@@@ #1 } #2@{#1} -} - -% Trim a single trailing ^^M off a string. -{\catcode`\^^M=\other \catcode`\Q=3% -\gdef\eatcr #1{\eatcra #1Q^^MQ}% -\gdef\eatcra#1^^MQ{\eatcrb#1Q}% -\gdef\eatcrb#1Q#2Q{#1}% -} - -% Macro bodies are absorbed as an argument in a context where -% all characters are catcode 10, 11 or 12, except \ which is active -% (as in normal texinfo). It is necessary to change the definition of \ -% to recognize macro arguments; this is the job of \mbodybackslash. -% -% Non-ASCII encodings make 8-bit characters active, so un-activate -% them to avoid their expansion. Must do this non-globally, to -% confine the change to the current group. -% -% It's necessary to have hard CRs when the macro is executed. This is -% done by making ^^M (\endlinechar) catcode 12 when reading the macro -% body, and then making it the \newlinechar in \scanmacro. -% -\def\scanctxt{% used as subroutine - \catcode`\"=\other - \catcode`\+=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\@=\other - \catcode`\^=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\~=\other - \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi -} - -\def\scanargctxt{% used for copying and captions, not macros. - \scanctxt - \catcode`\\=\other - \catcode`\^^M=\other -} - -\def\macrobodyctxt{% used for @macro definitions - \scanctxt - \catcode`\{=\other - \catcode`\}=\other - \catcode`\^^M=\other - \usembodybackslash -} - -\def\macroargctxt{% used when scanning invocations - \scanctxt - \catcode`\\=0 -} -% why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" -% for the single characters \ { }. Thus, we end up with the "commands" -% that would be written @\ @{ @} in a Texinfo document. -% -% We already have @{ and @}. For @\, we define it here, and only for -% this purpose, to produce a typewriter backslash (so, the @\ that we -% define for @math can't be used with @macro calls): -% -\def\\{\normalbackslash}% -% -% We would like to do this for \, too, since that is what makeinfo does. -% But it is not possible, because Texinfo already has a command @, for a -% cedilla accent. Documents must use @comma{} instead. -% -% \anythingelse will almost certainly be an error of some kind. - - -% \mbodybackslash is the definition of \ in @macro bodies. -% It maps \foo\ => \csname macarg.foo\endcsname => #N -% where N is the macro parameter number. -% We define \csname macarg.\endcsname to be \realbackslash, so -% \\ in macro replacement text gets you a backslash. -% -{\catcode`@=0 @catcode`@\=@active - @gdef@usembodybackslash{@let\=@mbodybackslash} - @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} -} -\expandafter\def\csname macarg.\endcsname{\realbackslash} - -\def\margbackslash#1{\char`\#1 } - -\def\macro{\recursivefalse\parsearg\macroxxx} -\def\rmacro{\recursivetrue\parsearg\macroxxx} - -\def\macroxxx#1{% - \getargs{#1}% now \macname is the macname and \argl the arglist - \ifx\argl\empty % no arguments - \paramno=0\relax - \else - \expandafter\parsemargdef \argl;% - \if\paramno>256\relax - \ifx\eTeXversion\thisisundefined - \errhelp = \EMsimple - \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} - \fi - \fi - \fi - \if1\csname ismacro.\the\macname\endcsname - \message{Warning: redefining \the\macname}% - \else - \expandafter\ifx\csname \the\macname\endcsname \relax - \else \errmessage{Macro name \the\macname\space already defined}\fi - \global\cslet{macsave.\the\macname}{\the\macname}% - \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% - \addtomacrolist{\the\macname}% - \fi - \begingroup \macrobodyctxt - \ifrecursive \expandafter\parsermacbody - \else \expandafter\parsemacbody - \fi} - -\parseargdef\unmacro{% - \if1\csname ismacro.#1\endcsname - \global\cslet{#1}{macsave.#1}% - \global\expandafter\let \csname ismacro.#1\endcsname=0% - % Remove the macro name from \macrolist: - \begingroup - \expandafter\let\csname#1\endcsname \relax - \let\definedummyword\unmacrodo - \xdef\macrolist{\macrolist}% - \endgroup - \else - \errmessage{Macro #1 not defined}% - \fi -} - -% Called by \do from \dounmacro on each macro. The idea is to omit any -% macro definitions that have been changed to \relax. -% -\def\unmacrodo#1{% - \ifx #1\relax - % remove this - \else - \noexpand\definedummyword \noexpand#1% - \fi -} - -% This makes use of the obscure feature that if the last token of a -% <parameter list> is #, then the preceding argument is delimited by -% an opening brace, and that opening brace is not consumed. -\def\getargs#1{\getargsxxx#1{}} -\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} -\def\getmacname#1 #2\relax{\macname={#1}} -\def\getmacargs#1{\def\argl{#1}} - -% For macro processing make @ a letter so that we can make Texinfo private macro names. -\edef\texiatcatcode{\the\catcode`\@} -\catcode `@=11\relax - -% Parse the optional {params} list. Set up \paramno and \paramlist -% so \defmacro knows what to do. Define \macarg.BLAH for each BLAH -% in the params list to some hook where the argument si to be expanded. If -% there are less than 10 arguments that hook is to be replaced by ##N where N -% is the position in that list, that is to say the macro arguments are to be -% defined `a la TeX in the macro body. -% -% That gets used by \mbodybackslash (above). -% -% We need to get `macro parameter char #' into several definitions. -% The technique used is stolen from LaTeX: let \hash be something -% unexpandable, insert that wherever you need a #, and then redefine -% it to # just before using the token list produced. -% -% The same technique is used to protect \eatspaces till just before -% the macro is used. -% -% If there are 10 or more arguments, a different technique is used, where the -% hook remains in the body, and when macro is to be expanded the body is -% processed again to replace the arguments. -% -% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the -% argument N value and then \edef the body (nothing else will expand because of -% the catcode regime underwhich the body was input). -% -% If you compile with TeX (not eTeX), and you have macros with 10 or more -% arguments, you need that no macro has more than 256 arguments, otherwise an -% error is produced. -\def\parsemargdef#1;{% - \paramno=0\def\paramlist{}% - \let\hash\relax - \let\xeatspaces\relax - \parsemargdefxxx#1,;,% - % In case that there are 10 or more arguments we parse again the arguments - % list to set new definitions for the \macarg.BLAH macros corresponding to - % each BLAH argument. It was anyhow needed to parse already once this list - % in order to count the arguments, and as macros with at most 9 arguments - % are by far more frequent than macro with 10 or more arguments, defining - % twice the \macarg.BLAH macros does not cost too much processing power. - \ifnum\paramno<10\relax\else - \paramno0\relax - \parsemmanyargdef@@#1,;,% 10 or more arguments - \fi -} -\def\parsemargdefxxx#1,{% - \if#1;\let\next=\relax - \else \let\next=\parsemargdefxxx - \advance\paramno by 1 - \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname - {\xeatspaces{\hash\the\paramno}}% - \edef\paramlist{\paramlist\hash\the\paramno,}% - \fi\next} - -\def\parsemmanyargdef@@#1,{% - \if#1;\let\next=\relax - \else - \let\next=\parsemmanyargdef@@ - \edef\tempb{\eatspaces{#1}}% - \expandafter\def\expandafter\tempa - \expandafter{\csname macarg.\tempb\endcsname}% - % Note that we need some extra \noexpand\noexpand, this is because we - % don't want \the to be expanded in the \parsermacbody as it uses an - % \xdef . - \expandafter\edef\tempa - {\noexpand\noexpand\noexpand\the\toks\the\paramno}% - \advance\paramno by 1\relax - \fi\next} - -% These two commands read recursive and nonrecursive macro bodies. -% (They're different since rec and nonrec macros end differently.) -% - -\catcode `\@\texiatcatcode -\long\def\parsemacbody#1@end macro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% -\long\def\parsermacbody#1@end rmacro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% -\catcode `\@=11\relax - -\let\endargs@\relax -\let\nil@\relax -\def\nilm@{\nil@}% -\long\def\nillm@{\nil@}% - -% This macro is expanded during the Texinfo macro expansion, not during its -% definition. It gets all the arguments values and assigns them to macros -% macarg.ARGNAME -% -% #1 is the macro name -% #2 is the list of argument names -% #3 is the list of argument values -\def\getargvals@#1#2#3{% - \def\macargdeflist@{}% - \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. - \def\paramlist{#2,\nil@}% - \def\macroname{#1}% - \begingroup - \macroargctxt - \def\argvaluelist{#3,\nil@}% - \def\@tempa{#3}% - \ifx\@tempa\empty - \setemptyargvalues@ - \else - \getargvals@@ - \fi -} - -% -\def\getargvals@@{% - \ifx\paramlist\nilm@ - % Some sanity check needed here that \argvaluelist is also empty. - \ifx\argvaluelist\nillm@ - \else - \errhelp = \EMsimple - \errmessage{Too many arguments in macro `\macroname'!}% - \fi - \let\next\macargexpandinbody@ - \else - \ifx\argvaluelist\nillm@ - % No more arguments values passed to macro. Set remaining named-arg - % macros to empty. - \let\next\setemptyargvalues@ - \else - % pop current arg name into \@tempb - \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% - \expandafter\@tempa\expandafter{\paramlist}% - % pop current argument value into \@tempc - \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% - \expandafter\@tempa\expandafter{\argvaluelist}% - % Here \@tempb is the current arg name and \@tempc is the current arg value. - % First place the new argument macro definition into \@tempd - \expandafter\macname\expandafter{\@tempc}% - \expandafter\let\csname macarg.\@tempb\endcsname\relax - \expandafter\def\expandafter\@tempe\expandafter{% - \csname macarg.\@tempb\endcsname}% - \edef\@tempd{\long\def\@tempe{\the\macname}}% - \push@\@tempd\macargdeflist@ - \let\next\getargvals@@ - \fi - \fi - \next -} - -\def\push@#1#2{% - \expandafter\expandafter\expandafter\def - \expandafter\expandafter\expandafter#2% - \expandafter\expandafter\expandafter{% - \expandafter#1#2}% -} - -% Replace arguments by their values in the macro body, and place the result -% in macro \@tempa -\def\macvalstoargs@{% - % To do this we use the property that token registers that are \the'ed - % within an \edef expand only once. So we are going to place all argument - % values into respective token registers. - % - % First we save the token context, and initialize argument numbering. - \begingroup - \paramno0\relax - % Then, for each argument number #N, we place the corresponding argument - % value into a new token list register \toks#N - \expandafter\putargsintokens@\saveparamlist@,;,% - % Then, we expand the body so that argument are replaced by their - % values. The trick for values not to be expanded themselves is that they - % are within tokens and that tokens expand only once in an \edef . - \edef\@tempc{\csname mac.\macroname .body\endcsname}% - % Now we restore the token stack pointer to free the token list registers - % which we have used, but we make sure that expanded body is saved after - % group. - \expandafter - \endgroup - \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% - } - -\def\macargexpandinbody@{% - %% Define the named-macro outside of this group and then close this group. - \expandafter - \endgroup - \macargdeflist@ - % First the replace in body the macro arguments by their values, the result - % is in \@tempa . - \macvalstoargs@ - % Then we point at the \norecurse or \gobble (for recursive) macro value - % with \@tempb . - \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname - % Depending on whether it is recursive or not, we need some tailing - % \egroup . - \ifx\@tempb\gobble - \let\@tempc\relax - \else - \let\@tempc\egroup - \fi - % And now we do the real job: - \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% - \@tempd -} - -\def\putargsintokens@#1,{% - \if#1;\let\next\relax - \else - \let\next\putargsintokens@ - % First we allocate the new token list register, and give it a temporary - % alias \@tempb . - \toksdef\@tempb\the\paramno - % Then we place the argument value into that token list register. - \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname - \expandafter\@tempb\expandafter{\@tempa}% - \advance\paramno by 1\relax - \fi - \next -} - -% Save the token stack pointer into macro #1 -\def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} -% Restore the token stack pointer from number in macro #1 -\def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} -% newtoks that can be used non \outer . -\def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} - -% Tailing missing arguments are set to empty -\def\setemptyargvalues@{% - \ifx\paramlist\nilm@ - \let\next\macargexpandinbody@ - \else - \expandafter\setemptyargvaluesparser@\paramlist\endargs@ - \let\next\setemptyargvalues@ - \fi - \next -} - -\def\setemptyargvaluesparser@#1,#2\endargs@{% - \expandafter\def\expandafter\@tempa\expandafter{% - \expandafter\def\csname macarg.#1\endcsname{}}% - \push@\@tempa\macargdeflist@ - \def\paramlist{#2}% -} - -% #1 is the element target macro -% #2 is the list macro -% #3,#4\endargs@ is the list value -\def\pop@#1#2#3,#4\endargs@{% - \def#1{#3}% - \def#2{#4}% -} -\long\def\longpop@#1#2#3,#4\endargs@{% - \long\def#1{#3}% - \long\def#2{#4}% -} - -% This defines a Texinfo @macro. There are eight cases: recursive and -% nonrecursive macros of zero, one, up to nine, and many arguments. -% Much magic with \expandafter here. -% \xdef is used so that macro definitions will survive the file -% they're defined in; @include reads the file inside a group. -% -\def\defmacro{% - \let\hash=##% convert placeholders to macro parameter chars - \ifrecursive - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\scanmacro{\temp}}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup\noexpand\scanmacro{\temp}}% - \else - \ifnum\paramno<10\relax % at most 9 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{\egroup\noexpand\scanmacro{\temp}}% - \else % 10 or more - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\getargvals@{\the\macname}{\argl}% - }% - \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp - \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble - \fi - \fi - \else - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \else % at most 9 - \ifnum\paramno<10\relax - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \expandafter\noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \else % 10 or more: - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\getargvals@{\the\macname}{\argl}% - }% - \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp - \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse - \fi - \fi - \fi} - -\catcode `\@\texiatcatcode\relax - -\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} - -% \braceorline decides whether the next nonwhitespace character is a -% {. If so it reads up to the closing }, if not, it reads the whole -% line. Whatever was read is then fed to the next control sequence -% as an argument (by \parsebrace or \parsearg). -% -\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} -\def\braceorlinexxx{% - \ifx\nchar\bgroup\else - \expandafter\parsearg - \fi \macnamexxx} - - -% @alias. -% We need some trickery to remove the optional spaces around the equal -% sign. Make them active and then expand them all to nothing. -% -\def\alias{\parseargusing\obeyspaces\aliasxxx} -\def\aliasxxx #1{\aliasyyy#1\relax} -\def\aliasyyy #1=#2\relax{% - {% - \expandafter\let\obeyedspace=\empty - \addtomacrolist{#1}% - \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% - }% - \next -} - - -\message{cross references,} - -\newwrite\auxfile -\newif\ifhavexrefs % True if xref values are known. -\newif\ifwarnedxrefs % True if we warned once that they aren't known. - -% @inforef is relatively simple. -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{% - \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} - -% @node's only job in TeX is to define \lastnode, which is used in -% cross-references. The @node line might or might not have commas, and -% might or might not have spaces before the first comma, like: -% @node foo , bar , ... -% We don't want such trailing spaces in the node name. -% -\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} -% -% also remove a trailing comma, in case of something like this: -% @node Help-Cross, , , Cross-refs -\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} -\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} - -\let\nwnode=\node -\let\lastnode=\empty - -% Write a cross-reference definition for the current node. #1 is the -% type (Ynumbered, Yappendix, Ynothing). -% -\def\donoderef#1{% - \ifx\lastnode\empty\else - \setref{\lastnode}{#1}% - \global\let\lastnode=\empty - \fi -} - -% @anchor{NAME} -- define xref target at arbitrary point. -% -\newcount\savesfregister -% -\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} -\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} -\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} - -% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an -% anchor), which consists of three parts: -% 1) NAME-title - the current sectioning name taken from \lastsection, -% or the anchor name. -% 2) NAME-snt - section number and type, passed as the SNT arg, or -% empty for anchors. -% 3) NAME-pg - the page number. -% -% This is called from \donoderef, \anchor, and \dofloat. In the case of -% floats, there is an additional part, which is not written here: -% 4) NAME-lof - the text as it should appear in a @listoffloats. -% -\def\setref#1#2{% - \pdfmkdest{#1}% - \iflinks - {% - \atdummies % preserve commands, but don't expand them - \edef\writexrdef##1##2{% - \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef - ##1}{##2}}% these are parameters of \writexrdef - }% - \toks0 = \expandafter{\lastsection}% - \immediate \writexrdef{title}{\the\toks0 }% - \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. - \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout - }% - \fi -} - -% @xrefautosectiontitle on|off says whether @section(ing) names are used -% automatically in xrefs, if the third arg is not explicitly specified. -% This was provided as a "secret" @set xref-automatic-section-title -% variable, now it's official. -% -\parseargdef\xrefautomaticsectiontitle{% - \def\temp{#1}% - \ifx\temp\onword - \expandafter\let\csname SETxref-automatic-section-title\endcsname - = \empty - \else\ifx\temp\offword - \expandafter\let\csname SETxref-automatic-section-title\endcsname - = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', - must be on|off}% - \fi\fi -} - -% -% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is -% the node name, #2 the name of the Info cross-reference, #3 the printed -% node name, #4 the name of the Info file, #5 the name of the printed -% manual. All but the node name can be omitted. -% -\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} -\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} -\def\ref#1{\xrefX[#1,,,,,,,]} -% -\newbox\toprefbox -\newbox\printedrefnamebox -\newbox\infofilenamebox -\newbox\printedmanualbox -% -\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup - \unsepspaces - % - % Get args without leading/trailing spaces. - \def\printedrefname{\ignorespaces #3}% - \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% - % - \def\infofilename{\ignorespaces #4}% - \setbox\infofilenamebox = \hbox{\infofilename\unskip}% - % - \def\printedmanual{\ignorespaces #5}% - \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% - % - % If the printed reference name (arg #3) was not explicitly given in - % the @xref, figure out what we want to use. - \ifdim \wd\printedrefnamebox = 0pt - % No printed node name was explicitly given. - \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax - % Not auto section-title: use node name inside the square brackets. - \def\printedrefname{\ignorespaces #1}% - \else - % Auto section-title: use chapter/section title inside - % the square brackets if we have it. - \ifdim \wd\printedmanualbox > 0pt - % It is in another manual, so we don't have it; use node name. - \def\printedrefname{\ignorespaces #1}% - \else - \ifhavexrefs - % We (should) know the real title if we have the xref values. - \def\printedrefname{\refx{#1-title}{}}% - \else - % Otherwise just copy the Info node name. - \def\printedrefname{\ignorespaces #1}% - \fi% - \fi - \fi - \fi - % - % Make link in pdf output. - \ifpdf - {\indexnofonts - \turnoffactive - \makevalueexpandable - % This expands tokens, so do it after making catcode changes, so _ - % etc. don't get their TeX definitions. This ignores all spaces in - % #4, including (wrongly) those in the middle of the filename. - \getfilename{#4}% - % - % This (wrongly) does not take account of leading or trailing - % spaces in #1, which should be ignored. - \edef\pdfxrefdest{#1}% - \ifx\pdfxrefdest\empty - \def\pdfxrefdest{Top}% no empty targets - \else - \txiescapepdf\pdfxrefdest % escape PDF special chars - \fi - % - \leavevmode - \startlink attr{/Border [0 0 0]}% - \ifnum\filenamelength>0 - goto file{\the\filename.pdf} name{\pdfxrefdest}% - \else - goto name{\pdfmkpgn{\pdfxrefdest}}% - \fi - }% - \setcolor{\linkcolor}% - \fi - % - % Float references are printed completely differently: "Figure 1.2" - % instead of "[somenode], p.3". We distinguish them by the - % LABEL-title being set to a magic string. - {% - % Have to otherify everything special to allow the \csname to - % include an _ in the xref name, etc. - \indexnofonts - \turnoffactive - \expandafter\global\expandafter\let\expandafter\Xthisreftitle - \csname XR#1-title\endcsname - }% - \iffloat\Xthisreftitle - % If the user specified the print name (third arg) to the ref, - % print it instead of our usual "Figure 1.2". - \ifdim\wd\printedrefnamebox = 0pt - \refx{#1-snt}{}% - \else - \printedrefname - \fi - % - % If the user also gave the printed manual name (fifth arg), append - % "in MANUALNAME". - \ifdim \wd\printedmanualbox > 0pt - \space \putwordin{} \cite{\printedmanual}% - \fi - \else - % node/anchor (non-float) references. - % - % If we use \unhbox to print the node names, TeX does not insert - % empty discretionaries after hyphens, which means that it will not - % find a line break at a hyphen in a node names. Since some manuals - % are best written with fairly long node names, containing hyphens, - % this is a loss. Therefore, we give the text of the node name - % again, so it is as if TeX is seeing it for the first time. - % - \ifdim \wd\printedmanualbox > 0pt - % Cross-manual reference with a printed manual name. - % - \crossmanualxref{\cite{\printedmanual\unskip}}% - % - \else\ifdim \wd\infofilenamebox > 0pt - % Cross-manual reference with only an info filename (arg 4), no - % printed manual name (arg 5). This is essentially the same as - % the case above; we output the filename, since we have nothing else. - % - \crossmanualxref{\code{\infofilename\unskip}}% - % - \else - % Reference within this manual. - % - % _ (for example) has to be the character _ for the purposes of the - % control sequence corresponding to the node, but it has to expand - % into the usual \leavevmode...\vrule stuff for purposes of - % printing. So we \turnoffactive for the \refx-snt, back on for the - % printing, back off for the \refx-pg. - {\turnoffactive - % Only output a following space if the -snt ref is nonempty; for - % @unnumbered and @anchor, it won't be. - \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% - \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi - }% - % output the `[mynode]' via the macro below so it can be overridden. - \xrefprintnodename\printedrefname - % - % But we always want a comma and a space: - ,\space - % - % output the `page 3'. - \turnoffactive \putwordpage\tie\refx{#1-pg}{}% - \fi\fi - \fi - \endlink -\endgroup} - -% Output a cross-manual xref to #1. Used just above (twice). -% -% Only include the text "Section ``foo'' in" if the foo is neither -% missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply -% "see The Foo Manual", the idea being to refer to the whole manual. -% -% But, this being TeX, we can't easily compare our node name against the -% string "Top" while ignoring the possible spaces before and after in -% the input. By adding the arbitrary 7sp below, we make it much less -% likely that a real node name would have the same width as "Top" (e.g., -% in a monospaced font). Hopefully it will never happen in practice. -% -% For the same basic reason, we retypeset the "Top" at every -% reference, since the current font is indeterminate. -% -\def\crossmanualxref#1{% - \setbox\toprefbox = \hbox{Top\kern7sp}% - \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% - \ifdim \wd2 > 7sp % nonempty? - \ifdim \wd2 = \wd\toprefbox \else % same as Top? - \putwordSection{} ``\printedrefname'' \putwordin{}\space - \fi - \fi - #1% -} - -% This macro is called from \xrefX for the `[nodename]' part of xref -% output. It's a separate macro only so it can be changed more easily, -% since square brackets don't work well in some documents. Particularly -% one that Bob is working on :). -% -\def\xrefprintnodename#1{[#1]} - -% Things referred to by \setref. -% -\def\Ynothing{} -\def\Yomitfromtoc{} -\def\Ynumbered{% - \ifnum\secno=0 - \putwordChapter@tie \the\chapno - \else \ifnum\subsecno=0 - \putwordSection@tie \the\chapno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno - \else - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} -\def\Yappendix{% - \ifnum\secno=0 - \putwordAppendix@tie @char\the\appendixno{}% - \else \ifnum\subsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno - \else - \putwordSection@tie - @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} - -% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. -% If its value is nonempty, SUFFIX is output afterward. -% -\def\refx#1#2{% - {% - \indexnofonts - \otherbackslash - \expandafter\global\expandafter\let\expandafter\thisrefX - \csname XR#1\endcsname - }% - \ifx\thisrefX\relax - % If not defined, say something at least. - \angleleft un\-de\-fined\angleright - \iflinks - \ifhavexrefs - {\toks0 = {#1}% avoid expansion of possibly-complex value - \message{\linenumber Undefined cross reference `\the\toks0'.}}% - \else - \ifwarnedxrefs\else - \global\warnedxrefstrue - \message{Cross reference values unknown; you must run TeX again.}% - \fi - \fi - \fi - \else - % It's defined, so just use it. - \thisrefX - \fi - #2% Output the suffix in any case. -} - -% This is the macro invoked by entries in the aux file. Usually it's -% just a \def (we prepend XR to the control sequence name to avoid -% collisions). But if this is a float type, we have more work to do. -% -\def\xrdef#1#2{% - {% The node name might contain 8-bit characters, which in our current - % implementation are changed to commands like @'e. Don't let these - % mess up the control sequence name. - \indexnofonts - \turnoffactive - \xdef\safexrefname{#1}% - }% - % - \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref - % - % Was that xref control sequence that we just defined for a float? - \expandafter\iffloat\csname XR\safexrefname\endcsname - % it was a float, and we have the (safe) float type in \iffloattype. - \expandafter\let\expandafter\floatlist - \csname floatlist\iffloattype\endcsname - % - % Is this the first time we've seen this float type? - \expandafter\ifx\floatlist\relax - \toks0 = {\do}% yes, so just \do - \else - % had it before, so preserve previous elements in list. - \toks0 = \expandafter{\floatlist\do}% - \fi - % - % Remember this xref in the control sequence \floatlistFLOATTYPE, - % for later use in \listoffloats. - \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 - {\safexrefname}}% - \fi -} - -% Read the last existing aux file, if any. No error if none exists. -% -\def\tryauxfile{% - \openin 1 \jobname.aux - \ifeof 1 \else - \readdatafile{aux}% - \global\havexrefstrue - \fi - \closein 1 -} - -\def\setupdatafile{% - \catcode`\^^@=\other - \catcode`\^^A=\other - \catcode`\^^B=\other - \catcode`\^^C=\other - \catcode`\^^D=\other - \catcode`\^^E=\other - \catcode`\^^F=\other - \catcode`\^^G=\other - \catcode`\^^H=\other - \catcode`\^^K=\other - \catcode`\^^L=\other - \catcode`\^^N=\other - \catcode`\^^P=\other - \catcode`\^^Q=\other - \catcode`\^^R=\other - \catcode`\^^S=\other - \catcode`\^^T=\other - \catcode`\^^U=\other - \catcode`\^^V=\other - \catcode`\^^W=\other - \catcode`\^^X=\other - \catcode`\^^Z=\other - \catcode`\^^[=\other - \catcode`\^^\=\other - \catcode`\^^]=\other - \catcode`\^^^=\other - \catcode`\^^_=\other - % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. - % in xref tags, i.e., node names. But since ^^e4 notation isn't - % supported in the main text, it doesn't seem desirable. Furthermore, - % that is not enough: for node names that actually contain a ^ - % character, we would end up writing a line like this: 'xrdef {'hat - % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first - % argument, and \hat is not an expandable control sequence. It could - % all be worked out, but why? Either we support ^^ or we don't. - % - % The other change necessary for this was to define \auxhat: - % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter - % and then to call \auxhat in \setq. - % - \catcode`\^=\other - % - % Special characters. Should be turned off anyway, but... - \catcode`\~=\other - \catcode`\[=\other - \catcode`\]=\other - \catcode`\"=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\$=\other - \catcode`\#=\other - \catcode`\&=\other - \catcode`\%=\other - \catcode`+=\other % avoid \+ for paranoia even though we've turned it off - % - % This is to support \ in node names and titles, since the \ - % characters end up in a \csname. It's easier than - % leaving it active and making its active definition an actual \ - % character. What I don't understand is why it works in the *value* - % of the xrdef. Seems like it should be a catcode12 \, and that - % should not typeset properly. But it works, so I'm moving on for - % now. --karl, 15jan04. - \catcode`\\=\other - % - % Make the characters 128-255 be printing characters. - {% - \count1=128 - \def\loop{% - \catcode\count1=\other - \advance\count1 by 1 - \ifnum \count1<256 \loop \fi - }% - }% - % - % @ is our escape character in .aux files, and we need braces. - \catcode`\{=1 - \catcode`\}=2 - \catcode`\@=0 -} - -\def\readdatafile#1{% -\begingroup - \setupdatafile - \input\jobname.#1 -\endgroup} - - -\message{insertions,} -% including footnotes. - -\newcount \footnoteno - -% The trailing space in the following definition for supereject is -% vital for proper filling; pages come out unaligned when you do a -% pagealignmacro call if that space before the closing brace is -% removed. (Generally, numeric constants should always be followed by a -% space to prevent strange expansion errors.) -\def\supereject{\par\penalty -20000\footnoteno =0 } - -% @footnotestyle is meaningful for Info output only. -\let\footnotestyle=\comment - -{\catcode `\@=11 -% -% Auto-number footnotes. Otherwise like plain. -\gdef\footnote{% - \let\indent=\ptexindent - \let\noindent=\ptexnoindent - \global\advance\footnoteno by \@ne - \edef\thisfootno{$^{\the\footnoteno}$}% - % - % In case the footnote comes at the end of a sentence, preserve the - % extra spacing after we do the footnote number. - \let\@sf\empty - \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi - % - % Remove inadvertent blank space before typesetting the footnote number. - \unskip - \thisfootno\@sf - \dofootnote -}% - -% Don't bother with the trickery in plain.tex to not require the -% footnote text as a parameter. Our footnotes don't need to be so general. -% -% Oh yes, they do; otherwise, @ifset (and anything else that uses -% \parseargline) fails inside footnotes because the tokens are fixed when -% the footnote is read. --karl, 16nov96. -% -\gdef\dofootnote{% - \insert\footins\bgroup - % We want to typeset this text as a normal paragraph, even if the - % footnote reference occurs in (for example) a display environment. - % So reset some parameters. - \hsize=\pagewidth - \interlinepenalty\interfootnotelinepenalty - \splittopskip\ht\strutbox % top baseline for broken footnotes - \splitmaxdepth\dp\strutbox - \floatingpenalty\@MM - \leftskip\z@skip - \rightskip\z@skip - \spaceskip\z@skip - \xspaceskip\z@skip - \parindent\defaultparindent - % - \smallfonts \rm - % - % Because we use hanging indentation in footnotes, a @noindent appears - % to exdent this text, so make it be a no-op. makeinfo does not use - % hanging indentation so @noindent can still be needed within footnote - % text after an @example or the like (not that this is good style). - \let\noindent = \relax - % - % Hang the footnote text off the number. Use \everypar in case the - % footnote extends for more than one paragraph. - \everypar = {\hang}% - \textindent{\thisfootno}% - % - % Don't crash into the line above the footnote text. Since this - % expands into a box, it must come within the paragraph, lest it - % provide a place where TeX can split the footnote. - \footstrut - % - % Invoke rest of plain TeX footnote routine. - \futurelet\next\fo@t -} -}%end \catcode `\@=11 - -% In case a @footnote appears in a vbox, save the footnote text and create -% the real \insert just after the vbox finished. Otherwise, the insertion -% would be lost. -% Similarly, if a @footnote appears inside an alignment, save the footnote -% text to a box and make the \insert when a row of the table is finished. -% And the same can be done for other insert classes. --kasal, 16nov03. - -% Replace the \insert primitive by a cheating macro. -% Deeper inside, just make sure that the saved insertions are not spilled -% out prematurely. -% -\def\startsavinginserts{% - \ifx \insert\ptexinsert - \let\insert\saveinsert - \else - \let\checkinserts\relax - \fi -} - -% This \insert replacement works for both \insert\footins{foo} and -% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. -% -\def\saveinsert#1{% - \edef\next{\noexpand\savetobox \makeSAVEname#1}% - \afterassignment\next - % swallow the left brace - \let\temp = -} -\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} -\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} - -\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} - -\def\placesaveins#1{% - \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname - {\box#1}% -} - -% eat @SAVE -- beware, all of them have catcode \other: -{ - \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) - \gdef\gobblesave @SAVE{} -} - -% initialization: -\def\newsaveins #1{% - \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% - \next -} -\def\newsaveinsX #1{% - \csname newbox\endcsname #1% - \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts - \checksaveins #1}% -} - -% initialize: -\let\checkinserts\empty -\newsaveins\footins -\newsaveins\margin - - -% @image. We use the macros from epsf.tex to support this. -% If epsf.tex is not installed and @image is used, we complain. -% -% Check for and read epsf.tex up front. If we read it only at @image -% time, we might be inside a group, and then its definitions would get -% undone and the next image would fail. -\openin 1 = epsf.tex -\ifeof 1 \else - % Do not bother showing banner with epsf.tex v2.7k (available in - % doc/epsf.tex and on ctan). - \def\epsfannounce{\toks0 = }% - \input epsf.tex -\fi -\closein 1 -% -% We will only complain once about lack of epsf.tex. -\newif\ifwarnednoepsf -\newhelp\noepsfhelp{epsf.tex must be installed for images to - work. It is also included in the Texinfo distribution, or you can get - it from ftp://tug.org/tex/epsf.tex.} -% -\def\image#1{% - \ifx\epsfbox\thisisundefined - \ifwarnednoepsf \else - \errhelp = \noepsfhelp - \errmessage{epsf.tex not found, images will be ignored}% - \global\warnednoepsftrue - \fi - \else - \imagexxx #1,,,,,\finish - \fi -} -% -% Arguments to @image: -% #1 is (mandatory) image filename; we tack on .eps extension. -% #2 is (optional) width, #3 is (optional) height. -% #4 is (ignored optional) html alt text. -% #5 is (ignored optional) extension. -% #6 is just the usual extra ignored arg for parsing stuff. -\newif\ifimagevmode -\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup - \catcode`\^^M = 5 % in case we're inside an example - \normalturnoffactive % allow _ et al. in names - % If the image is by itself, center it. - \ifvmode - \imagevmodetrue - \else \ifx\centersub\centerV - % for @center @image, we need a vbox so we can have our vertical space - \imagevmodetrue - \vbox\bgroup % vbox has better behavior than vtop herev - \fi\fi - % - \ifimagevmode - \nobreak\medskip - % Usually we'll have text after the image which will insert - % \parskip glue, so insert it here too to equalize the space - % above and below. - \nobreak\vskip\parskip - \nobreak - \fi - % - % Leave vertical mode so that indentation from an enclosing - % environment such as @quotation is respected. - % However, if we're at the top level, we don't want the - % normal paragraph indentation. - % On the other hand, if we are in the case of @center @image, we don't - % want to start a paragraph, which will create a hsize-width box and - % eradicate the centering. - \ifx\centersub\centerV\else \noindent \fi - % - % Output the image. - \ifpdf - \dopdfimage{#1}{#2}{#3}% - \else - % \epsfbox itself resets \epsf?size at each figure. - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi - \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi - \epsfbox{#1.eps}% - \fi - % - \ifimagevmode - \medskip % space after a standalone image - \fi - \ifx\centersub\centerV \egroup \fi -\endgroup} - - -% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, -% etc. We don't actually implement floating yet, we always include the -% float "here". But it seemed the best name for the future. -% -\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} - -% There may be a space before second and/or third parameter; delete it. -\def\eatcommaspace#1, {#1,} - -% #1 is the optional FLOATTYPE, the text label for this float, typically -% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, -% this float will not be numbered and cannot be referred to. -% -% #2 is the optional xref label. Also must be present for the float to -% be referable. -% -% #3 is the optional positioning argument; for now, it is ignored. It -% will somehow specify the positions allowed to float to (here, top, bottom). -% -% We keep a separate counter for each FLOATTYPE, which we reset at each -% chapter-level command. -\let\resetallfloatnos=\empty -% -\def\dofloat#1,#2,#3,#4\finish{% - \let\thiscaption=\empty - \let\thisshortcaption=\empty - % - % don't lose footnotes inside @float. - % - % BEWARE: when the floats start float, we have to issue warning whenever an - % insert appears inside a float which could possibly float. --kasal, 26may04 - % - \startsavinginserts - % - % We can't be used inside a paragraph. - \par - % - \vtop\bgroup - \def\floattype{#1}% - \def\floatlabel{#2}% - \def\floatloc{#3}% we do nothing with this yet. - % - \ifx\floattype\empty - \let\safefloattype=\empty - \else - {% - % the floattype might have accents or other special characters, - % but we need to use it in a control sequence name. - \indexnofonts - \turnoffactive - \xdef\safefloattype{\floattype}% - }% - \fi - % - % If label is given but no type, we handle that as the empty type. - \ifx\floatlabel\empty \else - % We want each FLOATTYPE to be numbered separately (Figure 1, - % Table 1, Figure 2, ...). (And if no label, no number.) - % - \expandafter\getfloatno\csname\safefloattype floatno\endcsname - \global\advance\floatno by 1 - % - {% - % This magic value for \lastsection is output by \setref as the - % XREFLABEL-title value. \xrefX uses it to distinguish float - % labels (which have a completely different output format) from - % node and anchor labels. And \xrdef uses it to construct the - % lists of floats. - % - \edef\lastsection{\floatmagic=\safefloattype}% - \setref{\floatlabel}{Yfloat}% - }% - \fi - % - % start with \parskip glue, I guess. - \vskip\parskip - % - % Don't suppress indentation if a float happens to start a section. - \restorefirstparagraphindent -} - -% we have these possibilities: -% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap -% @float Foo,lbl & no caption: Foo 1.1 -% @float Foo & @caption{Cap}: Foo: Cap -% @float Foo & no caption: Foo -% @float ,lbl & Caption{Cap}: 1.1: Cap -% @float ,lbl & no caption: 1.1 -% @float & @caption{Cap}: Cap -% @float & no caption: -% -\def\Efloat{% - \let\floatident = \empty - % - % In all cases, if we have a float type, it comes first. - \ifx\floattype\empty \else \def\floatident{\floattype}\fi - % - % If we have an xref label, the number comes next. - \ifx\floatlabel\empty \else - \ifx\floattype\empty \else % if also had float type, need tie first. - \appendtomacro\floatident{\tie}% - \fi - % the number. - \appendtomacro\floatident{\chaplevelprefix\the\floatno}% - \fi - % - % Start the printed caption with what we've constructed in - % \floatident, but keep it separate; we need \floatident again. - \let\captionline = \floatident - % - \ifx\thiscaption\empty \else - \ifx\floatident\empty \else - \appendtomacro\captionline{: }% had ident, so need a colon between - \fi - % - % caption text. - \appendtomacro\captionline{\scanexp\thiscaption}% - \fi - % - % If we have anything to print, print it, with space before. - % Eventually this needs to become an \insert. - \ifx\captionline\empty \else - \vskip.5\parskip - \captionline - % - % Space below caption. - \vskip\parskip - \fi - % - % If have an xref label, write the list of floats info. Do this - % after the caption, to avoid chance of it being a breakpoint. - \ifx\floatlabel\empty \else - % Write the text that goes in the lof to the aux file as - % \floatlabel-lof. Besides \floatident, we include the short - % caption if specified, else the full caption if specified, else nothing. - {% - \atdummies - % - % since we read the caption text in the macro world, where ^^M - % is turned into a normal character, we have to scan it back, so - % we don't write the literal three characters "^^M" into the aux file. - \scanexp{% - \xdef\noexpand\gtemp{% - \ifx\thisshortcaption\empty - \thiscaption - \else - \thisshortcaption - \fi - }% - }% - \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident - \ifx\gtemp\empty \else : \gtemp \fi}}% - }% - \fi - \egroup % end of \vtop - % - % place the captured inserts - % - % BEWARE: when the floats start floating, we have to issue warning - % whenever an insert appears inside a float which could possibly - % float. --kasal, 26may04 - % - \checkinserts -} - -% Append the tokens #2 to the definition of macro #1, not expanding either. -% -\def\appendtomacro#1#2{% - \expandafter\def\expandafter#1\expandafter{#1#2}% -} - -% @caption, @shortcaption -% -\def\caption{\docaption\thiscaption} -\def\shortcaption{\docaption\thisshortcaption} -\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} -\def\defcaption#1#2{\egroup \def#1{#2}} - -% The parameter is the control sequence identifying the counter we are -% going to use. Create it if it doesn't exist and assign it to \floatno. -\def\getfloatno#1{% - \ifx#1\relax - % Haven't seen this figure type before. - \csname newcount\endcsname #1% - % - % Remember to reset this floatno at the next chap. - \expandafter\gdef\expandafter\resetallfloatnos - \expandafter{\resetallfloatnos #1=0 }% - \fi - \let\floatno#1% -} - -% \setref calls this to get the XREFLABEL-snt value. We want an @xref -% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we -% first read the @float command. -% -\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% - -% Magic string used for the XREFLABEL-title value, so \xrefX can -% distinguish floats from other xref types. -\def\floatmagic{!!float!!} - -% #1 is the control sequence we are passed; we expand into a conditional -% which is true if #1 represents a float ref. That is, the magic -% \lastsection value which we \setref above. -% -\def\iffloat#1{\expandafter\doiffloat#1==\finish} -% -% #1 is (maybe) the \floatmagic string. If so, #2 will be the -% (safe) float type for this float. We set \iffloattype to #2. -% -\def\doiffloat#1=#2=#3\finish{% - \def\temp{#1}% - \def\iffloattype{#2}% - \ifx\temp\floatmagic -} - -% @listoffloats FLOATTYPE - print a list of floats like a table of contents. -% -\parseargdef\listoffloats{% - \def\floattype{#1}% floattype - {% - % the floattype might have accents or other special characters, - % but we need to use it in a control sequence name. - \indexnofonts - \turnoffactive - \xdef\safefloattype{\floattype}% - }% - % - % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. - \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax - \ifhavexrefs - % if the user said @listoffloats foo but never @float foo. - \message{\linenumber No `\safefloattype' floats to list.}% - \fi - \else - \begingroup - \leftskip=\tocindent % indent these entries like a toc - \let\do=\listoffloatsdo - \csname floatlist\safefloattype\endcsname - \endgroup - \fi -} - -% This is called on each entry in a list of floats. We're passed the -% xref label, in the form LABEL-title, which is how we save it in the -% aux file. We strip off the -title and look up \XRLABEL-lof, which -% has the text we're supposed to typeset here. -% -% Figures without xref labels will not be included in the list (since -% they won't appear in the aux file). -% -\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} -\def\listoffloatsdoentry#1-title\finish{{% - % Can't fully expand XR#1-lof because it can contain anything. Just - % pass the control sequence. On the other hand, XR#1-pg is just the - % page number, and we want to fully expand that so we can get a link - % in pdf output. - \toksA = \expandafter{\csname XR#1-lof\endcsname}% - % - % use the same \entry macro we use to generate the TOC and index. - \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% - \writeentry -}} - - -\message{localization,} - -% For single-language documents, @documentlanguage is usually given very -% early, just after @documentencoding. Single argument is the language -% (de) or locale (de_DE) abbreviation. -% -{ - \catcode`\_ = \active - \globaldefs=1 -\parseargdef\documentlanguage{\begingroup - \let_=\normalunderscore % normal _ character for filenames - \tex % read txi-??.tex file in plain TeX. - % Read the file by the name they passed if it exists. - \openin 1 txi-#1.tex - \ifeof 1 - \documentlanguagetrywithoutunderscore{#1_\finish}% - \else - \globaldefs = 1 % everything in the txi-LL files needs to persist - \input txi-#1.tex - \fi - \closein 1 - \endgroup % end raw TeX -\endgroup} -% -% If they passed de_DE, and txi-de_DE.tex doesn't exist, -% try txi-de.tex. -% -\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% - \openin 1 txi-#1.tex - \ifeof 1 - \errhelp = \nolanghelp - \errmessage{Cannot read language file txi-#1.tex}% - \else - \globaldefs = 1 % everything in the txi-LL files needs to persist - \input txi-#1.tex - \fi - \closein 1 -} -}% end of special _ catcode -% -\newhelp\nolanghelp{The given language definition file cannot be found or -is empty. Maybe you need to install it? Putting it in the current -directory should work if nowhere else does.} - -% This macro is called from txi-??.tex files; the first argument is the -% \language name to set (without the "\lang@" prefix), the second and -% third args are \{left,right}hyphenmin. -% -% The language names to pass are determined when the format is built. -% See the etex.log file created at that time, e.g., -% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. -% -% With TeX Live 2008, etex now includes hyphenation patterns for all -% available languages. This means we can support hyphenation in -% Texinfo, at least to some extent. (This still doesn't solve the -% accented characters problem.) -% -\catcode`@=11 -\def\txisetlanguage#1#2#3{% - % do not set the language if the name is undefined in the current TeX. - \expandafter\ifx\csname lang@#1\endcsname \relax - \message{no patterns for #1}% - \else - \global\language = \csname lang@#1\endcsname - \fi - % but there is no harm in adjusting the hyphenmin values regardless. - \global\lefthyphenmin = #2\relax - \global\righthyphenmin = #3\relax -} - -% Helpers for encodings. -% Set the catcode of characters 128 through 255 to the specified number. -% -\def\setnonasciicharscatcode#1{% - \count255=128 - \loop\ifnum\count255<256 - \global\catcode\count255=#1\relax - \advance\count255 by 1 - \repeat -} - -\def\setnonasciicharscatcodenonglobal#1{% - \count255=128 - \loop\ifnum\count255<256 - \catcode\count255=#1\relax - \advance\count255 by 1 - \repeat -} - -% @documentencoding sets the definition of non-ASCII characters -% according to the specified encoding. -% -\parseargdef\documentencoding{% - % Encoding being declared for the document. - \def\declaredencoding{\csname #1.enc\endcsname}% - % - % Supported encodings: names converted to tokens in order to be able - % to compare them with \ifx. - \def\ascii{\csname US-ASCII.enc\endcsname}% - \def\latnine{\csname ISO-8859-15.enc\endcsname}% - \def\latone{\csname ISO-8859-1.enc\endcsname}% - \def\lattwo{\csname ISO-8859-2.enc\endcsname}% - \def\utfeight{\csname UTF-8.enc\endcsname}% - % - \ifx \declaredencoding \ascii - \asciichardefs - % - \else \ifx \declaredencoding \lattwo - \setnonasciicharscatcode\active - \lattwochardefs - % - \else \ifx \declaredencoding \latone - \setnonasciicharscatcode\active - \latonechardefs - % - \else \ifx \declaredencoding \latnine - \setnonasciicharscatcode\active - \latninechardefs - % - \else \ifx \declaredencoding \utfeight - \setnonasciicharscatcode\active - \utfeightchardefs - % - \else - \message{Unknown document encoding #1, ignoring.}% - % - \fi % utfeight - \fi % latnine - \fi % latone - \fi % lattwo - \fi % ascii -} - -% A message to be logged when using a character that isn't available -% the default font encoding (OT1). -% -\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} - -% Take account of \c (plain) vs. \, (Texinfo) difference. -\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} - -% First, make active non-ASCII characters in order for them to be -% correctly categorized when TeX reads the replacement text of -% macros containing the character definitions. -\setnonasciicharscatcode\active -% -% Latin1 (ISO-8859-1) character definitions. -\def\latonechardefs{% - \gdef^^a0{\tie} - \gdef^^a1{\exclamdown} - \gdef^^a2{\missingcharmsg{CENT SIGN}} - \gdef^^a3{{\pounds}} - \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} - \gdef^^a5{\missingcharmsg{YEN SIGN}} - \gdef^^a6{\missingcharmsg{BROKEN BAR}} - \gdef^^a7{\S} - \gdef^^a8{\"{}} - \gdef^^a9{\copyright} - \gdef^^aa{\ordf} - \gdef^^ab{\guillemetleft} - \gdef^^ac{$\lnot$} - \gdef^^ad{\-} - \gdef^^ae{\registeredsymbol} - \gdef^^af{\={}} - % - \gdef^^b0{\textdegree} - \gdef^^b1{$\pm$} - \gdef^^b2{$^2$} - \gdef^^b3{$^3$} - \gdef^^b4{\'{}} - \gdef^^b5{$\mu$} - \gdef^^b6{\P} - % - \gdef^^b7{$^.$} - \gdef^^b8{\cedilla\ } - \gdef^^b9{$^1$} - \gdef^^ba{\ordm} - % - \gdef^^bb{\guillemetright} - \gdef^^bc{$1\over4$} - \gdef^^bd{$1\over2$} - \gdef^^be{$3\over4$} - \gdef^^bf{\questiondown} - % - \gdef^^c0{\`A} - \gdef^^c1{\'A} - \gdef^^c2{\^A} - \gdef^^c3{\~A} - \gdef^^c4{\"A} - \gdef^^c5{\ringaccent A} - \gdef^^c6{\AE} - \gdef^^c7{\cedilla C} - \gdef^^c8{\`E} - \gdef^^c9{\'E} - \gdef^^ca{\^E} - \gdef^^cb{\"E} - \gdef^^cc{\`I} - \gdef^^cd{\'I} - \gdef^^ce{\^I} - \gdef^^cf{\"I} - % - \gdef^^d0{\DH} - \gdef^^d1{\~N} - \gdef^^d2{\`O} - \gdef^^d3{\'O} - \gdef^^d4{\^O} - \gdef^^d5{\~O} - \gdef^^d6{\"O} - \gdef^^d7{$\times$} - \gdef^^d8{\O} - \gdef^^d9{\`U} - \gdef^^da{\'U} - \gdef^^db{\^U} - \gdef^^dc{\"U} - \gdef^^dd{\'Y} - \gdef^^de{\TH} - \gdef^^df{\ss} - % - \gdef^^e0{\`a} - \gdef^^e1{\'a} - \gdef^^e2{\^a} - \gdef^^e3{\~a} - \gdef^^e4{\"a} - \gdef^^e5{\ringaccent a} - \gdef^^e6{\ae} - \gdef^^e7{\cedilla c} - \gdef^^e8{\`e} - \gdef^^e9{\'e} - \gdef^^ea{\^e} - \gdef^^eb{\"e} - \gdef^^ec{\`{\dotless i}} - \gdef^^ed{\'{\dotless i}} - \gdef^^ee{\^{\dotless i}} - \gdef^^ef{\"{\dotless i}} - % - \gdef^^f0{\dh} - \gdef^^f1{\~n} - \gdef^^f2{\`o} - \gdef^^f3{\'o} - \gdef^^f4{\^o} - \gdef^^f5{\~o} - \gdef^^f6{\"o} - \gdef^^f7{$\div$} - \gdef^^f8{\o} - \gdef^^f9{\`u} - \gdef^^fa{\'u} - \gdef^^fb{\^u} - \gdef^^fc{\"u} - \gdef^^fd{\'y} - \gdef^^fe{\th} - \gdef^^ff{\"y} -} - -% Latin9 (ISO-8859-15) encoding character definitions. -\def\latninechardefs{% - % Encoding is almost identical to Latin1. - \latonechardefs - % - \gdef^^a4{\euro} - \gdef^^a6{\v S} - \gdef^^a8{\v s} - \gdef^^b4{\v Z} - \gdef^^b8{\v z} - \gdef^^bc{\OE} - \gdef^^bd{\oe} - \gdef^^be{\"Y} -} - -% Latin2 (ISO-8859-2) character definitions. -\def\lattwochardefs{% - \gdef^^a0{\tie} - \gdef^^a1{\ogonek{A}} - \gdef^^a2{\u{}} - \gdef^^a3{\L} - \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} - \gdef^^a5{\v L} - \gdef^^a6{\'S} - \gdef^^a7{\S} - \gdef^^a8{\"{}} - \gdef^^a9{\v S} - \gdef^^aa{\cedilla S} - \gdef^^ab{\v T} - \gdef^^ac{\'Z} - \gdef^^ad{\-} - \gdef^^ae{\v Z} - \gdef^^af{\dotaccent Z} - % - \gdef^^b0{\textdegree} - \gdef^^b1{\ogonek{a}} - \gdef^^b2{\ogonek{ }} - \gdef^^b3{\l} - \gdef^^b4{\'{}} - \gdef^^b5{\v l} - \gdef^^b6{\'s} - \gdef^^b7{\v{}} - \gdef^^b8{\cedilla\ } - \gdef^^b9{\v s} - \gdef^^ba{\cedilla s} - \gdef^^bb{\v t} - \gdef^^bc{\'z} - \gdef^^bd{\H{}} - \gdef^^be{\v z} - \gdef^^bf{\dotaccent z} - % - \gdef^^c0{\'R} - \gdef^^c1{\'A} - \gdef^^c2{\^A} - \gdef^^c3{\u A} - \gdef^^c4{\"A} - \gdef^^c5{\'L} - \gdef^^c6{\'C} - \gdef^^c7{\cedilla C} - \gdef^^c8{\v C} - \gdef^^c9{\'E} - \gdef^^ca{\ogonek{E}} - \gdef^^cb{\"E} - \gdef^^cc{\v E} - \gdef^^cd{\'I} - \gdef^^ce{\^I} - \gdef^^cf{\v D} - % - \gdef^^d0{\DH} - \gdef^^d1{\'N} - \gdef^^d2{\v N} - \gdef^^d3{\'O} - \gdef^^d4{\^O} - \gdef^^d5{\H O} - \gdef^^d6{\"O} - \gdef^^d7{$\times$} - \gdef^^d8{\v R} - \gdef^^d9{\ringaccent U} - \gdef^^da{\'U} - \gdef^^db{\H U} - \gdef^^dc{\"U} - \gdef^^dd{\'Y} - \gdef^^de{\cedilla T} - \gdef^^df{\ss} - % - \gdef^^e0{\'r} - \gdef^^e1{\'a} - \gdef^^e2{\^a} - \gdef^^e3{\u a} - \gdef^^e4{\"a} - \gdef^^e5{\'l} - \gdef^^e6{\'c} - \gdef^^e7{\cedilla c} - \gdef^^e8{\v c} - \gdef^^e9{\'e} - \gdef^^ea{\ogonek{e}} - \gdef^^eb{\"e} - \gdef^^ec{\v e} - \gdef^^ed{\'{\dotless{i}}} - \gdef^^ee{\^{\dotless{i}}} - \gdef^^ef{\v d} - % - \gdef^^f0{\dh} - \gdef^^f1{\'n} - \gdef^^f2{\v n} - \gdef^^f3{\'o} - \gdef^^f4{\^o} - \gdef^^f5{\H o} - \gdef^^f6{\"o} - \gdef^^f7{$\div$} - \gdef^^f8{\v r} - \gdef^^f9{\ringaccent u} - \gdef^^fa{\'u} - \gdef^^fb{\H u} - \gdef^^fc{\"u} - \gdef^^fd{\'y} - \gdef^^fe{\cedilla t} - \gdef^^ff{\dotaccent{}} -} - -% UTF-8 character definitions. -% -% This code to support UTF-8 is based on LaTeX's utf8.def, with some -% changes for Texinfo conventions. It is included here under the GPL by -% permission from Frank Mittelbach and the LaTeX team. -% -\newcount\countUTFx -\newcount\countUTFy -\newcount\countUTFz - -\gdef\UTFviiiTwoOctets#1#2{\expandafter - \UTFviiiDefined\csname u8:#1\string #2\endcsname} -% -\gdef\UTFviiiThreeOctets#1#2#3{\expandafter - \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} -% -\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter - \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} - -\gdef\UTFviiiDefined#1{% - \ifx #1\relax - \message{\linenumber Unicode char \string #1 not defined for Texinfo}% - \else - \expandafter #1% - \fi -} - -\begingroup - \catcode`\~13 - \catcode`\"12 - - \def\UTFviiiLoop{% - \global\catcode\countUTFx\active - \uccode`\~\countUTFx - \uppercase\expandafter{\UTFviiiTmp}% - \advance\countUTFx by 1 - \ifnum\countUTFx < \countUTFy - \expandafter\UTFviiiLoop - \fi} - - \countUTFx = "C2 - \countUTFy = "E0 - \def\UTFviiiTmp{% - \xdef~{\noexpand\UTFviiiTwoOctets\string~}} - \UTFviiiLoop - - \countUTFx = "E0 - \countUTFy = "F0 - \def\UTFviiiTmp{% - \xdef~{\noexpand\UTFviiiThreeOctets\string~}} - \UTFviiiLoop - - \countUTFx = "F0 - \countUTFy = "F4 - \def\UTFviiiTmp{% - \xdef~{\noexpand\UTFviiiFourOctets\string~}} - \UTFviiiLoop -\endgroup - -\begingroup - \catcode`\"=12 - \catcode`\<=12 - \catcode`\.=12 - \catcode`\,=12 - \catcode`\;=12 - \catcode`\!=12 - \catcode`\~=13 - - \gdef\DeclareUnicodeCharacter#1#2{% - \countUTFz = "#1\relax - %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% - \begingroup - \parseXMLCharref - \def\UTFviiiTwoOctets##1##2{% - \csname u8:##1\string ##2\endcsname}% - \def\UTFviiiThreeOctets##1##2##3{% - \csname u8:##1\string ##2\string ##3\endcsname}% - \def\UTFviiiFourOctets##1##2##3##4{% - \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% - \expandafter\expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter - \gdef\UTFviiiTmp{#2}% - \endgroup} - - \gdef\parseXMLCharref{% - \ifnum\countUTFz < "A0\relax - \errhelp = \EMsimple - \errmessage{Cannot define Unicode char value < 00A0}% - \else\ifnum\countUTFz < "800\relax - \parseUTFviiiA,% - \parseUTFviiiB C\UTFviiiTwoOctets.,% - \else\ifnum\countUTFz < "10000\relax - \parseUTFviiiA;% - \parseUTFviiiA,% - \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% - \else - \parseUTFviiiA;% - \parseUTFviiiA,% - \parseUTFviiiA!% - \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% - \fi\fi\fi - } - - \gdef\parseUTFviiiA#1{% - \countUTFx = \countUTFz - \divide\countUTFz by 64 - \countUTFy = \countUTFz - \multiply\countUTFz by 64 - \advance\countUTFx by -\countUTFz - \advance\countUTFx by 128 - \uccode `#1\countUTFx - \countUTFz = \countUTFy} - - \gdef\parseUTFviiiB#1#2#3#4{% - \advance\countUTFz by "#10\relax - \uccode `#3\countUTFz - \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} -\endgroup - -\def\utfeightchardefs{% - \DeclareUnicodeCharacter{00A0}{\tie} - \DeclareUnicodeCharacter{00A1}{\exclamdown} - \DeclareUnicodeCharacter{00A3}{\pounds} - \DeclareUnicodeCharacter{00A8}{\"{ }} - \DeclareUnicodeCharacter{00A9}{\copyright} - \DeclareUnicodeCharacter{00AA}{\ordf} - \DeclareUnicodeCharacter{00AB}{\guillemetleft} - \DeclareUnicodeCharacter{00AD}{\-} - \DeclareUnicodeCharacter{00AE}{\registeredsymbol} - \DeclareUnicodeCharacter{00AF}{\={ }} - - \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} - \DeclareUnicodeCharacter{00B4}{\'{ }} - \DeclareUnicodeCharacter{00B8}{\cedilla{ }} - \DeclareUnicodeCharacter{00BA}{\ordm} - \DeclareUnicodeCharacter{00BB}{\guillemetright} - \DeclareUnicodeCharacter{00BF}{\questiondown} - - \DeclareUnicodeCharacter{00C0}{\`A} - \DeclareUnicodeCharacter{00C1}{\'A} - \DeclareUnicodeCharacter{00C2}{\^A} - \DeclareUnicodeCharacter{00C3}{\~A} - \DeclareUnicodeCharacter{00C4}{\"A} - \DeclareUnicodeCharacter{00C5}{\AA} - \DeclareUnicodeCharacter{00C6}{\AE} - \DeclareUnicodeCharacter{00C7}{\cedilla{C}} - \DeclareUnicodeCharacter{00C8}{\`E} - \DeclareUnicodeCharacter{00C9}{\'E} - \DeclareUnicodeCharacter{00CA}{\^E} - \DeclareUnicodeCharacter{00CB}{\"E} - \DeclareUnicodeCharacter{00CC}{\`I} - \DeclareUnicodeCharacter{00CD}{\'I} - \DeclareUnicodeCharacter{00CE}{\^I} - \DeclareUnicodeCharacter{00CF}{\"I} - - \DeclareUnicodeCharacter{00D0}{\DH} - \DeclareUnicodeCharacter{00D1}{\~N} - \DeclareUnicodeCharacter{00D2}{\`O} - \DeclareUnicodeCharacter{00D3}{\'O} - \DeclareUnicodeCharacter{00D4}{\^O} - \DeclareUnicodeCharacter{00D5}{\~O} - \DeclareUnicodeCharacter{00D6}{\"O} - \DeclareUnicodeCharacter{00D8}{\O} - \DeclareUnicodeCharacter{00D9}{\`U} - \DeclareUnicodeCharacter{00DA}{\'U} - \DeclareUnicodeCharacter{00DB}{\^U} - \DeclareUnicodeCharacter{00DC}{\"U} - \DeclareUnicodeCharacter{00DD}{\'Y} - \DeclareUnicodeCharacter{00DE}{\TH} - \DeclareUnicodeCharacter{00DF}{\ss} - - \DeclareUnicodeCharacter{00E0}{\`a} - \DeclareUnicodeCharacter{00E1}{\'a} - \DeclareUnicodeCharacter{00E2}{\^a} - \DeclareUnicodeCharacter{00E3}{\~a} - \DeclareUnicodeCharacter{00E4}{\"a} - \DeclareUnicodeCharacter{00E5}{\aa} - \DeclareUnicodeCharacter{00E6}{\ae} - \DeclareUnicodeCharacter{00E7}{\cedilla{c}} - \DeclareUnicodeCharacter{00E8}{\`e} - \DeclareUnicodeCharacter{00E9}{\'e} - \DeclareUnicodeCharacter{00EA}{\^e} - \DeclareUnicodeCharacter{00EB}{\"e} - \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} - \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} - \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} - \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} - - \DeclareUnicodeCharacter{00F0}{\dh} - \DeclareUnicodeCharacter{00F1}{\~n} - \DeclareUnicodeCharacter{00F2}{\`o} - \DeclareUnicodeCharacter{00F3}{\'o} - \DeclareUnicodeCharacter{00F4}{\^o} - \DeclareUnicodeCharacter{00F5}{\~o} - \DeclareUnicodeCharacter{00F6}{\"o} - \DeclareUnicodeCharacter{00F8}{\o} - \DeclareUnicodeCharacter{00F9}{\`u} - \DeclareUnicodeCharacter{00FA}{\'u} - \DeclareUnicodeCharacter{00FB}{\^u} - \DeclareUnicodeCharacter{00FC}{\"u} - \DeclareUnicodeCharacter{00FD}{\'y} - \DeclareUnicodeCharacter{00FE}{\th} - \DeclareUnicodeCharacter{00FF}{\"y} - - \DeclareUnicodeCharacter{0100}{\=A} - \DeclareUnicodeCharacter{0101}{\=a} - \DeclareUnicodeCharacter{0102}{\u{A}} - \DeclareUnicodeCharacter{0103}{\u{a}} - \DeclareUnicodeCharacter{0104}{\ogonek{A}} - \DeclareUnicodeCharacter{0105}{\ogonek{a}} - \DeclareUnicodeCharacter{0106}{\'C} - \DeclareUnicodeCharacter{0107}{\'c} - \DeclareUnicodeCharacter{0108}{\^C} - \DeclareUnicodeCharacter{0109}{\^c} - \DeclareUnicodeCharacter{0118}{\ogonek{E}} - \DeclareUnicodeCharacter{0119}{\ogonek{e}} - \DeclareUnicodeCharacter{010A}{\dotaccent{C}} - \DeclareUnicodeCharacter{010B}{\dotaccent{c}} - \DeclareUnicodeCharacter{010C}{\v{C}} - \DeclareUnicodeCharacter{010D}{\v{c}} - \DeclareUnicodeCharacter{010E}{\v{D}} - - \DeclareUnicodeCharacter{0112}{\=E} - \DeclareUnicodeCharacter{0113}{\=e} - \DeclareUnicodeCharacter{0114}{\u{E}} - \DeclareUnicodeCharacter{0115}{\u{e}} - \DeclareUnicodeCharacter{0116}{\dotaccent{E}} - \DeclareUnicodeCharacter{0117}{\dotaccent{e}} - \DeclareUnicodeCharacter{011A}{\v{E}} - \DeclareUnicodeCharacter{011B}{\v{e}} - \DeclareUnicodeCharacter{011C}{\^G} - \DeclareUnicodeCharacter{011D}{\^g} - \DeclareUnicodeCharacter{011E}{\u{G}} - \DeclareUnicodeCharacter{011F}{\u{g}} - - \DeclareUnicodeCharacter{0120}{\dotaccent{G}} - \DeclareUnicodeCharacter{0121}{\dotaccent{g}} - \DeclareUnicodeCharacter{0124}{\^H} - \DeclareUnicodeCharacter{0125}{\^h} - \DeclareUnicodeCharacter{0128}{\~I} - \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} - \DeclareUnicodeCharacter{012A}{\=I} - \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} - \DeclareUnicodeCharacter{012C}{\u{I}} - \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} - - \DeclareUnicodeCharacter{0130}{\dotaccent{I}} - \DeclareUnicodeCharacter{0131}{\dotless{i}} - \DeclareUnicodeCharacter{0132}{IJ} - \DeclareUnicodeCharacter{0133}{ij} - \DeclareUnicodeCharacter{0134}{\^J} - \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} - \DeclareUnicodeCharacter{0139}{\'L} - \DeclareUnicodeCharacter{013A}{\'l} - - \DeclareUnicodeCharacter{0141}{\L} - \DeclareUnicodeCharacter{0142}{\l} - \DeclareUnicodeCharacter{0143}{\'N} - \DeclareUnicodeCharacter{0144}{\'n} - \DeclareUnicodeCharacter{0147}{\v{N}} - \DeclareUnicodeCharacter{0148}{\v{n}} - \DeclareUnicodeCharacter{014C}{\=O} - \DeclareUnicodeCharacter{014D}{\=o} - \DeclareUnicodeCharacter{014E}{\u{O}} - \DeclareUnicodeCharacter{014F}{\u{o}} - - \DeclareUnicodeCharacter{0150}{\H{O}} - \DeclareUnicodeCharacter{0151}{\H{o}} - \DeclareUnicodeCharacter{0152}{\OE} - \DeclareUnicodeCharacter{0153}{\oe} - \DeclareUnicodeCharacter{0154}{\'R} - \DeclareUnicodeCharacter{0155}{\'r} - \DeclareUnicodeCharacter{0158}{\v{R}} - \DeclareUnicodeCharacter{0159}{\v{r}} - \DeclareUnicodeCharacter{015A}{\'S} - \DeclareUnicodeCharacter{015B}{\'s} - \DeclareUnicodeCharacter{015C}{\^S} - \DeclareUnicodeCharacter{015D}{\^s} - \DeclareUnicodeCharacter{015E}{\cedilla{S}} - \DeclareUnicodeCharacter{015F}{\cedilla{s}} - - \DeclareUnicodeCharacter{0160}{\v{S}} - \DeclareUnicodeCharacter{0161}{\v{s}} - \DeclareUnicodeCharacter{0162}{\cedilla{t}} - \DeclareUnicodeCharacter{0163}{\cedilla{T}} - \DeclareUnicodeCharacter{0164}{\v{T}} - - \DeclareUnicodeCharacter{0168}{\~U} - \DeclareUnicodeCharacter{0169}{\~u} - \DeclareUnicodeCharacter{016A}{\=U} - \DeclareUnicodeCharacter{016B}{\=u} - \DeclareUnicodeCharacter{016C}{\u{U}} - \DeclareUnicodeCharacter{016D}{\u{u}} - \DeclareUnicodeCharacter{016E}{\ringaccent{U}} - \DeclareUnicodeCharacter{016F}{\ringaccent{u}} - - \DeclareUnicodeCharacter{0170}{\H{U}} - \DeclareUnicodeCharacter{0171}{\H{u}} - \DeclareUnicodeCharacter{0174}{\^W} - \DeclareUnicodeCharacter{0175}{\^w} - \DeclareUnicodeCharacter{0176}{\^Y} - \DeclareUnicodeCharacter{0177}{\^y} - \DeclareUnicodeCharacter{0178}{\"Y} - \DeclareUnicodeCharacter{0179}{\'Z} - \DeclareUnicodeCharacter{017A}{\'z} - \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} - \DeclareUnicodeCharacter{017C}{\dotaccent{z}} - \DeclareUnicodeCharacter{017D}{\v{Z}} - \DeclareUnicodeCharacter{017E}{\v{z}} - - \DeclareUnicodeCharacter{01C4}{D\v{Z}} - \DeclareUnicodeCharacter{01C5}{D\v{z}} - \DeclareUnicodeCharacter{01C6}{d\v{z}} - \DeclareUnicodeCharacter{01C7}{LJ} - \DeclareUnicodeCharacter{01C8}{Lj} - \DeclareUnicodeCharacter{01C9}{lj} - \DeclareUnicodeCharacter{01CA}{NJ} - \DeclareUnicodeCharacter{01CB}{Nj} - \DeclareUnicodeCharacter{01CC}{nj} - \DeclareUnicodeCharacter{01CD}{\v{A}} - \DeclareUnicodeCharacter{01CE}{\v{a}} - \DeclareUnicodeCharacter{01CF}{\v{I}} - - \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} - \DeclareUnicodeCharacter{01D1}{\v{O}} - \DeclareUnicodeCharacter{01D2}{\v{o}} - \DeclareUnicodeCharacter{01D3}{\v{U}} - \DeclareUnicodeCharacter{01D4}{\v{u}} - - \DeclareUnicodeCharacter{01E2}{\={\AE}} - \DeclareUnicodeCharacter{01E3}{\={\ae}} - \DeclareUnicodeCharacter{01E6}{\v{G}} - \DeclareUnicodeCharacter{01E7}{\v{g}} - \DeclareUnicodeCharacter{01E8}{\v{K}} - \DeclareUnicodeCharacter{01E9}{\v{k}} - - \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} - \DeclareUnicodeCharacter{01F1}{DZ} - \DeclareUnicodeCharacter{01F2}{Dz} - \DeclareUnicodeCharacter{01F3}{dz} - \DeclareUnicodeCharacter{01F4}{\'G} - \DeclareUnicodeCharacter{01F5}{\'g} - \DeclareUnicodeCharacter{01F8}{\`N} - \DeclareUnicodeCharacter{01F9}{\`n} - \DeclareUnicodeCharacter{01FC}{\'{\AE}} - \DeclareUnicodeCharacter{01FD}{\'{\ae}} - \DeclareUnicodeCharacter{01FE}{\'{\O}} - \DeclareUnicodeCharacter{01FF}{\'{\o}} - - \DeclareUnicodeCharacter{021E}{\v{H}} - \DeclareUnicodeCharacter{021F}{\v{h}} - - \DeclareUnicodeCharacter{0226}{\dotaccent{A}} - \DeclareUnicodeCharacter{0227}{\dotaccent{a}} - \DeclareUnicodeCharacter{0228}{\cedilla{E}} - \DeclareUnicodeCharacter{0229}{\cedilla{e}} - \DeclareUnicodeCharacter{022E}{\dotaccent{O}} - \DeclareUnicodeCharacter{022F}{\dotaccent{o}} - - \DeclareUnicodeCharacter{0232}{\=Y} - \DeclareUnicodeCharacter{0233}{\=y} - \DeclareUnicodeCharacter{0237}{\dotless{j}} - - \DeclareUnicodeCharacter{02DB}{\ogonek{ }} - - \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} - \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} - \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} - \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} - \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} - \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} - \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} - \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} - \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} - \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} - \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} - \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} - - \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} - \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} - - \DeclareUnicodeCharacter{1E20}{\=G} - \DeclareUnicodeCharacter{1E21}{\=g} - \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} - \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} - \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} - \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} - \DeclareUnicodeCharacter{1E26}{\"H} - \DeclareUnicodeCharacter{1E27}{\"h} - - \DeclareUnicodeCharacter{1E30}{\'K} - \DeclareUnicodeCharacter{1E31}{\'k} - \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} - \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} - \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} - \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} - \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} - \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} - \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} - \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} - \DeclareUnicodeCharacter{1E3E}{\'M} - \DeclareUnicodeCharacter{1E3F}{\'m} - - \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} - \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} - \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} - \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} - \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} - \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} - \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} - \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} - \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} - \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} - - \DeclareUnicodeCharacter{1E54}{\'P} - \DeclareUnicodeCharacter{1E55}{\'p} - \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} - \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} - \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} - \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} - \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} - \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} - \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} - \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} - - \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} - \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} - \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} - \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} - \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} - \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} - \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} - \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} - \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} - \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} - - \DeclareUnicodeCharacter{1E7C}{\~V} - \DeclareUnicodeCharacter{1E7D}{\~v} - \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} - \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} - - \DeclareUnicodeCharacter{1E80}{\`W} - \DeclareUnicodeCharacter{1E81}{\`w} - \DeclareUnicodeCharacter{1E82}{\'W} - \DeclareUnicodeCharacter{1E83}{\'w} - \DeclareUnicodeCharacter{1E84}{\"W} - \DeclareUnicodeCharacter{1E85}{\"w} - \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} - \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} - \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} - \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} - \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} - \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} - \DeclareUnicodeCharacter{1E8C}{\"X} - \DeclareUnicodeCharacter{1E8D}{\"x} - \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} - \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} - - \DeclareUnicodeCharacter{1E90}{\^Z} - \DeclareUnicodeCharacter{1E91}{\^z} - \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} - \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} - \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} - \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} - \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} - \DeclareUnicodeCharacter{1E97}{\"t} - \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} - \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} - - \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} - \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} - - \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} - \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} - \DeclareUnicodeCharacter{1EBC}{\~E} - \DeclareUnicodeCharacter{1EBD}{\~e} - - \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} - \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} - \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} - \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} - - \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} - \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} - - \DeclareUnicodeCharacter{1EF2}{\`Y} - \DeclareUnicodeCharacter{1EF3}{\`y} - \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} - - \DeclareUnicodeCharacter{1EF8}{\~Y} - \DeclareUnicodeCharacter{1EF9}{\~y} - - \DeclareUnicodeCharacter{2013}{--} - \DeclareUnicodeCharacter{2014}{---} - \DeclareUnicodeCharacter{2018}{\quoteleft} - \DeclareUnicodeCharacter{2019}{\quoteright} - \DeclareUnicodeCharacter{201A}{\quotesinglbase} - \DeclareUnicodeCharacter{201C}{\quotedblleft} - \DeclareUnicodeCharacter{201D}{\quotedblright} - \DeclareUnicodeCharacter{201E}{\quotedblbase} - \DeclareUnicodeCharacter{2022}{\bullet} - \DeclareUnicodeCharacter{2026}{\dots} - \DeclareUnicodeCharacter{2039}{\guilsinglleft} - \DeclareUnicodeCharacter{203A}{\guilsinglright} - \DeclareUnicodeCharacter{20AC}{\euro} - - \DeclareUnicodeCharacter{2192}{\expansion} - \DeclareUnicodeCharacter{21D2}{\result} - - \DeclareUnicodeCharacter{2212}{\minus} - \DeclareUnicodeCharacter{2217}{\point} - \DeclareUnicodeCharacter{2261}{\equiv} -}% end of \utfeightchardefs - - -% US-ASCII character definitions. -\def\asciichardefs{% nothing need be done - \relax -} - -% Make non-ASCII characters printable again for compatibility with -% existing Texinfo documents that may use them, even without declaring a -% document encoding. -% -\setnonasciicharscatcode \other - - -\message{formatting,} - -\newdimen\defaultparindent \defaultparindent = 15pt - -\chapheadingskip = 15pt plus 4pt minus 2pt -\secheadingskip = 12pt plus 3pt minus 2pt -\subsecheadingskip = 9pt plus 2pt minus 2pt - -% Prevent underfull vbox error messages. -\vbadness = 10000 - -% Don't be very finicky about underfull hboxes, either. -\hbadness = 6666 - -% Following George Bush, get rid of widows and orphans. -\widowpenalty=10000 -\clubpenalty=10000 - -% Use TeX 3.0's \emergencystretch to help line breaking, but if we're -% using an old version of TeX, don't do anything. We want the amount of -% stretch added to depend on the line length, hence the dependence on -% \hsize. We call this whenever the paper size is set. -% -\def\setemergencystretch{% - \ifx\emergencystretch\thisisundefined - % Allow us to assign to \emergencystretch anyway. - \def\emergencystretch{\dimen0}% - \else - \emergencystretch = .15\hsize - \fi -} - -% Parameters in order: 1) textheight; 2) textwidth; -% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; -% 7) physical page height; 8) physical page width. -% -% We also call \setleading{\textleading}, so the caller should define -% \textleading. The caller should also set \parskip. -% -\def\internalpagesizes#1#2#3#4#5#6#7#8{% - \voffset = #3\relax - \topskip = #6\relax - \splittopskip = \topskip - % - \vsize = #1\relax - \advance\vsize by \topskip - \outervsize = \vsize - \advance\outervsize by 2\topandbottommargin - \pageheight = \vsize - % - \hsize = #2\relax - \outerhsize = \hsize - \advance\outerhsize by 0.5in - \pagewidth = \hsize - % - \normaloffset = #4\relax - \bindingoffset = #5\relax - % - \ifpdf - \pdfpageheight #7\relax - \pdfpagewidth #8\relax - % if we don't reset these, they will remain at "1 true in" of - % whatever layout pdftex was dumped with. - \pdfhorigin = 1 true in - \pdfvorigin = 1 true in - \fi - % - \setleading{\textleading} - % - \parindent = \defaultparindent - \setemergencystretch -} - -% @letterpaper (the default). -\def\letterpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % If page is nothing but text, make it come out even. - \internalpagesizes{607.2pt}{6in}% that's 46 lines - {\voffset}{.25in}% - {\bindingoffset}{36pt}% - {11in}{8.5in}% -}} - -% Use @smallbook to reset parameters for 7x9.25 trim size. -\def\smallbook{{\globaldefs = 1 - \parskip = 2pt plus 1pt - \textleading = 12pt - % - \internalpagesizes{7.5in}{5in}% - {-.2in}{0in}% - {\bindingoffset}{16pt}% - {9.25in}{7in}% - % - \lispnarrowing = 0.3in - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = .5cm -}} - -% Use @smallerbook to reset parameters for 6x9 trim size. -% (Just testing, parameters still in flux.) -\def\smallerbook{{\globaldefs = 1 - \parskip = 1.5pt plus 1pt - \textleading = 12pt - % - \internalpagesizes{7.4in}{4.8in}% - {-.2in}{-.4in}% - {0pt}{14pt}% - {9in}{6in}% - % - \lispnarrowing = 0.25in - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = .4cm -}} - -% Use @afourpaper to print on European A4 paper. -\def\afourpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % Double-side printing via postscript on Laserjet 4050 - % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. - % To change the settings for a different printer or situation, adjust - % \normaloffset until the front-side and back-side texts align. Then - % do the same for \bindingoffset. You can set these for testing in - % your texinfo source file like this: - % @tex - % \global\normaloffset = -6mm - % \global\bindingoffset = 10mm - % @end tex - \internalpagesizes{673.2pt}{160mm}% that's 51 lines - {\voffset}{\hoffset}% - {\bindingoffset}{44pt}% - {297mm}{210mm}% - % - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = 5mm -}} - -% Use @afivepaper to print on European A5 paper. -% From romildo@urano.iceb.ufop.br, 2 July 2000. -% He also recommends making @example and @lisp be small. -\def\afivepaper{{\globaldefs = 1 - \parskip = 2pt plus 1pt minus 0.1pt - \textleading = 12.5pt - % - \internalpagesizes{160mm}{120mm}% - {\voffset}{\hoffset}% - {\bindingoffset}{8pt}% - {210mm}{148mm}% - % - \lispnarrowing = 0.2in - \tolerance = 800 - \hfuzz = 1.2pt - \contentsrightmargin = 0pt - \defbodyindent = 2mm - \tableindent = 12mm -}} - -% A specific text layout, 24x15cm overall, intended for A4 paper. -\def\afourlatex{{\globaldefs = 1 - \afourpaper - \internalpagesizes{237mm}{150mm}% - {\voffset}{4.6mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - % - % Must explicitly reset to 0 because we call \afourpaper. - \globaldefs = 0 -}} - -% Use @afourwide to print on A4 paper in landscape format. -\def\afourwide{{\globaldefs = 1 - \afourpaper - \internalpagesizes{241mm}{165mm}% - {\voffset}{-2.95mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - \globaldefs = 0 -}} - -% @pagesizes TEXTHEIGHT[,TEXTWIDTH] -% Perhaps we should allow setting the margins, \topskip, \parskip, -% and/or leading, also. Or perhaps we should compute them somehow. -% -\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} -\def\pagesizesyyy#1,#2,#3\finish{{% - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi - \globaldefs = 1 - % - \parskip = 3pt plus 2pt minus 1pt - \setleading{\textleading}% - % - \dimen0 = #1\relax - \advance\dimen0 by \voffset - % - \dimen2 = \hsize - \advance\dimen2 by \normaloffset - % - \internalpagesizes{#1}{\hsize}% - {\voffset}{\normaloffset}% - {\bindingoffset}{44pt}% - {\dimen0}{\dimen2}% -}} - -% Set default to letter. -% -\letterpaper - - -\message{and turning on texinfo input format.} - -\def^^L{\par} % remove \outer, so ^L can appear in an @comment - -% DEL is a comment character, in case @c does not suffice. -\catcode`\^^? = 14 - -% Define macros to output various characters with catcode for normal text. -\catcode`\"=\other \def\normaldoublequote{"} -\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix -\catcode`\+=\other \def\normalplus{+} -\catcode`\<=\other \def\normalless{<} -\catcode`\>=\other \def\normalgreater{>} -\catcode`\^=\other \def\normalcaret{^} -\catcode`\_=\other \def\normalunderscore{_} -\catcode`\|=\other \def\normalverticalbar{|} -\catcode`\~=\other \def\normaltilde{~} - -% This macro is used to make a character print one way in \tt -% (where it can probably be output as-is), and another way in other fonts, -% where something hairier probably needs to be done. -% -% #1 is what to print if we are indeed using \tt; #2 is what to print -% otherwise. Since all the Computer Modern typewriter fonts have zero -% interword stretch (and shrink), and it is reasonable to expect all -% typewriter fonts to have this, we can check that font parameter. -% -\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} - -% Same as above, but check for italic font. Actually this also catches -% non-italic slanted fonts since it is impossible to distinguish them from -% italic fonts. But since this is only used by $ and it uses \sl anyway -% this is not a problem. -\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} - -% Turn off all special characters except @ -% (and those which the user can use as if they were ordinary). -% Most of these we simply print from the \tt font, but for some, we can -% use math or other variants that look better in normal text. - -\catcode`\"=\active -\def\activedoublequote{{\tt\char34}} -\let"=\activedoublequote -\catcode`\~=\active -\def~{{\tt\char126}} -\chardef\hat=`\^ -\catcode`\^=\active -\def^{{\tt \hat}} - -\catcode`\_=\active -\def_{\ifusingtt\normalunderscore\_} -\let\realunder=_ -% Subroutine for the previous macro. -\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } - -\catcode`\|=\active -\def|{{\tt\char124}} -\chardef \less=`\< -\catcode`\<=\active -\def<{{\tt \less}} -\chardef \gtr=`\> -\catcode`\>=\active -\def>{{\tt \gtr}} -\catcode`\+=\active -\def+{{\tt \char 43}} -\catcode`\$=\active -\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix - -% If a .fmt file is being used, characters that might appear in a file -% name cannot be active until we have parsed the command line. -% So turn them off again, and have \everyjob (or @setfilename) turn them on. -% \otherifyactive is called near the end of this file. -\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} - -% Used sometimes to turn off (effectively) the active characters even after -% parsing them. -\def\turnoffactive{% - \normalturnoffactive - \otherbackslash -} - -\catcode`\@=0 - -% \backslashcurfont outputs one backslash character in current font, -% as in \char`\\. -\global\chardef\backslashcurfont=`\\ -\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work - -% \realbackslash is an actual character `\' with catcode other, and -% \doublebackslash is two of them (for the pdf outlines). -{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} - -% In texinfo, backslash is an active character; it prints the backslash -% in fixed width font. -\catcode`\\=\active % @ for escape char from now on. - -% The story here is that in math mode, the \char of \backslashcurfont -% ends up printing the roman \ from the math symbol font (because \char -% in math mode uses the \mathcode, and plain.tex sets -% \mathcode`\\="026E). It seems better for @backslashchar{} to always -% print a typewriter backslash, hence we use an explicit \mathchar, -% which is the decimal equivalent of "715c (class 7, e.g., use \fam; -% ignored family value; char position "5C). We can't use " for the -% usual hex value because it has already been made active. -@def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} -@let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. - -% On startup, @fixbackslash assigns: -% @let \ = @normalbackslash -% \rawbackslash defines an active \ to do \backslashcurfont. -% \otherbackslash defines an active \ to be a literal `\' character with -% catcode other. We switch back and forth between these. -@gdef@rawbackslash{@let\=@backslashcurfont} -@gdef@otherbackslash{@let\=@realbackslash} - -% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of -% the literal character `\'. Also revert - to its normal character, in -% case the active - from code has slipped in. -% -{@catcode`- = @active - @gdef@normalturnoffactive{% - @let-=@normaldash - @let"=@normaldoublequote - @let$=@normaldollar %$ font-lock fix - @let+=@normalplus - @let<=@normalless - @let>=@normalgreater - @let\=@normalbackslash - @let^=@normalcaret - @let_=@normalunderscore - @let|=@normalverticalbar - @let~=@normaltilde - @markupsetuplqdefault - @markupsetuprqdefault - @unsepspaces - } -} - -% Make _ and + \other characters, temporarily. -% This is canceled by @fixbackslash. -@otherifyactive - -% If a .fmt file is being used, we don't want the `\input texinfo' to show up. -% That is what \eatinput is for; after that, the `\' should revert to printing -% a backslash. -% -@gdef@eatinput input texinfo{@fixbackslash} -@global@let\ = @eatinput - -% On the other hand, perhaps the file did not have a `\input texinfo'. Then -% the first `\' in the file would cause an error. This macro tries to fix -% that, assuming it is called before the first `\' could plausibly occur. -% Also turn back on active characters that might appear in the input -% file name, in case not using a pre-dumped format. -% -@gdef@fixbackslash{% - @ifx\@eatinput @let\ = @normalbackslash @fi - @catcode`+=@active - @catcode`@_=@active -} - -% Say @foo, not \foo, in error messages. -@escapechar = `@@ - -% These (along with & and #) are made active for url-breaking, so need -% active definitions as the normal characters. -@def@normaldot{.} -@def@normalquest{?} -@def@normalslash{/} - -% These look ok in all fonts, so just make them not special. -% @hashchar{} gets its own user-level command, because of #line. -@catcode`@& = @other @def@normalamp{&} -@catcode`@# = @other @def@normalhash{#} -@catcode`@% = @other @def@normalpercent{%} - -@let @hashchar = @normalhash - -@c Finally, make ` and ' active, so that txicodequoteundirected and -@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we -@c don't make ` and ' active, @code will not get them as active chars. -@c Do this last of all since we use ` in the previous @catcode assignments. -@catcode`@'=@active -@catcode`@`=@active -@markupsetuplqdefault -@markupsetuprqdefault - -@c Local variables: -@c eval: (add-hook 'write-file-hooks 'time-stamp) -@c page-delimiter: "^\\\\message" -@c time-stamp-start: "def\\\\texinfoversion{" -@c time-stamp-format: "%:y-%02m-%02d.%02H" -@c time-stamp-end: "}" -@c End: - -@c vim:sw=2: - -@ignore - arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 -@end ignore diff --git a/src/plugins/e-acsl/contrib/libgmp/doc/version.texi b/src/plugins/e-acsl/contrib/libgmp/doc/version.texi deleted file mode 100644 index e904fe5985e710f68afa147567d9d4b6f355cf16..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/doc/version.texi +++ /dev/null @@ -1,4 +0,0 @@ -@set UPDATED 1 November 2015 -@set UPDATED-MONTH November 2015 -@set EDITION 6.1.0 -@set VERSION 6.1.0 diff --git a/src/plugins/e-acsl/contrib/libgmp/errno.c b/src/plugins/e-acsl/contrib/libgmp/errno.c deleted file mode 100644 index d3c02ef4b82e8a370bc9a10f1cbba7736e710576..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/errno.c +++ /dev/null @@ -1,70 +0,0 @@ -/* gmp_errno, __gmp_exception -- exception handling and reporting. - - THE FUNCTIONS IN THIS FILE, APART FROM gmp_errno, ARE FOR INTERNAL USE - ONLY. THEY'RE ALMOST CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR - DISAPPEAR COMPLETELY IN FUTURE GNU MP RELEASES. - -Copyright 2000, 2001, 2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdlib.h> -#include "gmp.h" -#include "gmp-impl.h" - -int gmp_errno = 0; - - -/* The deliberate divide by zero triggers an exception on most systems. On - those where it doesn't, for example power and powerpc, use abort instead. - - Enhancement: Perhaps raise(SIGFPE) (or the same with kill()) would be - better than abort. Perhaps it'd be possible to get the BSD style - FPE_INTDIV_TRAP parameter in there too. */ - -void -__gmp_exception (int error_bit) -{ - gmp_errno |= error_bit; - __gmp_junk = 10 / __gmp_0; - abort (); -} - - -/* These functions minimize the amount of code required in functions raising - exceptions. Since they're "noreturn" and don't take any parameters, a - test and call might even come out as a simple conditional jump. */ -void -__gmp_sqrt_of_negative (void) -{ - __gmp_exception (GMP_ERROR_SQRT_OF_NEGATIVE); -} -void -__gmp_divide_by_zero (void) -{ - __gmp_exception (GMP_ERROR_DIVISION_BY_ZERO); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/extract-dbl.c b/src/plugins/e-acsl/contrib/libgmp/extract-dbl.c deleted file mode 100644 index a6e7bf946813af0649f456a7200c876dae7d0a8f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/extract-dbl.c +++ /dev/null @@ -1,311 +0,0 @@ -/* __gmp_extract_double -- convert from double to array of mp_limb_t. - -Copyright 1996, 1999-2002, 2006, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#ifdef XDEBUG -#undef _GMP_IEEE_FLOATS -#endif - -#ifndef _GMP_IEEE_FLOATS -#define _GMP_IEEE_FLOATS 0 -#endif - -/* Extract a non-negative double in d. */ - -int -__gmp_extract_double (mp_ptr rp, double d) -{ - long exp; - unsigned sc; -#ifdef _LONG_LONG_LIMB -#define BITS_PER_PART 64 /* somewhat bogus */ - unsigned long long int manl; -#else -#define BITS_PER_PART GMP_LIMB_BITS - unsigned long int manh, manl; -#endif - - /* BUGS - - 1. Should handle Inf and NaN in IEEE specific code. - 2. Handle Inf and NaN also in default code, to avoid hangs. - 3. Generalize to handle all GMP_LIMB_BITS >= 32. - 4. This lits is incomplete and misspelled. - */ - - ASSERT (d >= 0.0); - - if (d == 0.0) - { - MPN_ZERO (rp, LIMBS_PER_DOUBLE); - return 0; - } - -#if _GMP_IEEE_FLOATS - { -#if defined (__alpha) && __GNUC__ == 2 && __GNUC_MINOR__ == 8 - /* Work around alpha-specific bug in GCC 2.8.x. */ - volatile -#endif - union ieee_double_extract x; - x.d = d; - exp = x.s.exp; -#if BITS_PER_PART == 64 /* generalize this to BITS_PER_PART > BITS_IN_MANTISSA */ - manl = (((mp_limb_t) 1 << 63) - | ((mp_limb_t) x.s.manh << 43) | ((mp_limb_t) x.s.manl << 11)); - if (exp == 0) - { - /* Denormalized number. Don't try to be clever about this, - since it is not an important case to make fast. */ - exp = 1; - do - { - manl = manl << 1; - exp--; - } - while ((manl & GMP_LIMB_HIGHBIT) == 0); - } -#endif -#if BITS_PER_PART == 32 - manh = ((mp_limb_t) 1 << 31) | (x.s.manh << 11) | (x.s.manl >> 21); - manl = x.s.manl << 11; - if (exp == 0) - { - /* Denormalized number. Don't try to be clever about this, - since it is not an important case to make fast. */ - exp = 1; - do - { - manh = (manh << 1) | (manl >> 31); - manl = manl << 1; - exp--; - } - while ((manh & GMP_LIMB_HIGHBIT) == 0); - } -#endif -#if BITS_PER_PART != 32 && BITS_PER_PART != 64 - You need to generalize the code above to handle this. -#endif - exp -= 1022; /* Remove IEEE bias. */ - } -#else - { - /* Unknown (or known to be non-IEEE) double format. */ - exp = 0; - if (d >= 1.0) - { - ASSERT_ALWAYS (d * 0.5 != d); - - while (d >= 32768.0) - { - d *= (1.0 / 65536.0); - exp += 16; - } - while (d >= 1.0) - { - d *= 0.5; - exp += 1; - } - } - else if (d < 0.5) - { - while (d < (1.0 / 65536.0)) - { - d *= 65536.0; - exp -= 16; - } - while (d < 0.5) - { - d *= 2.0; - exp -= 1; - } - } - - d *= (4.0 * ((unsigned long int) 1 << (BITS_PER_PART - 2))); -#if BITS_PER_PART == 64 - manl = d; -#endif -#if BITS_PER_PART == 32 - manh = d; - manl = (d - manh) * (4.0 * ((unsigned long int) 1 << (BITS_PER_PART - 2))); -#endif - } -#endif /* IEEE */ - - sc = (unsigned) (exp + 64 * GMP_NUMB_BITS) % GMP_NUMB_BITS; - - /* We add something here to get rounding right. */ - exp = (exp + 64 * GMP_NUMB_BITS) / GMP_NUMB_BITS - 64 * GMP_NUMB_BITS / GMP_NUMB_BITS + 1; - -#if BITS_PER_PART == 64 && LIMBS_PER_DOUBLE == 2 -#if GMP_NAIL_BITS == 0 - if (sc != 0) - { - rp[1] = manl >> (GMP_LIMB_BITS - sc); - rp[0] = manl << sc; - } - else - { - rp[1] = manl; - rp[0] = 0; - exp--; - } -#else - if (sc > GMP_NAIL_BITS) - { - rp[1] = manl >> (GMP_LIMB_BITS - sc); - rp[0] = (manl << (sc - GMP_NAIL_BITS)) & GMP_NUMB_MASK; - } - else - { - if (sc == 0) - { - rp[1] = manl >> GMP_NAIL_BITS; - rp[0] = (manl << GMP_NUMB_BITS - GMP_NAIL_BITS) & GMP_NUMB_MASK; - exp--; - } - else - { - rp[1] = manl >> (GMP_LIMB_BITS - sc); - rp[0] = (manl >> (GMP_NAIL_BITS - sc)) & GMP_NUMB_MASK; - } - } -#endif -#endif - -#if BITS_PER_PART == 64 && LIMBS_PER_DOUBLE == 3 - if (sc > GMP_NAIL_BITS) - { - rp[2] = manl >> (GMP_LIMB_BITS - sc); - rp[1] = (manl << sc - GMP_NAIL_BITS) & GMP_NUMB_MASK; - if (sc >= 2 * GMP_NAIL_BITS) - rp[0] = 0; - else - rp[0] = (manl << GMP_NUMB_BITS - GMP_NAIL_BITS + sc) & GMP_NUMB_MASK; - } - else - { - if (sc == 0) - { - rp[2] = manl >> GMP_NAIL_BITS; - rp[1] = (manl << GMP_NUMB_BITS - GMP_NAIL_BITS) & GMP_NUMB_MASK; - rp[0] = 0; - exp--; - } - else - { - rp[2] = manl >> (GMP_LIMB_BITS - sc); - rp[1] = (manl >> GMP_NAIL_BITS - sc) & GMP_NUMB_MASK; - rp[0] = (manl << GMP_NUMB_BITS - GMP_NAIL_BITS + sc) & GMP_NUMB_MASK; - } - } -#endif - -#if BITS_PER_PART == 32 && LIMBS_PER_DOUBLE == 3 -#if GMP_NAIL_BITS == 0 - if (sc != 0) - { - rp[2] = manh >> (GMP_LIMB_BITS - sc); - rp[1] = (manh << sc) | (manl >> (GMP_LIMB_BITS - sc)); - rp[0] = manl << sc; - } - else - { - rp[2] = manh; - rp[1] = manl; - rp[0] = 0; - exp--; - } -#else - if (sc > GMP_NAIL_BITS) - { - rp[2] = (manh >> (GMP_LIMB_BITS - sc)); - rp[1] = ((manh << (sc - GMP_NAIL_BITS)) | - (manl >> (GMP_LIMB_BITS - sc + GMP_NAIL_BITS))) & GMP_NUMB_MASK; - if (sc >= 2 * GMP_NAIL_BITS) - rp[0] = (manl << sc - 2 * GMP_NAIL_BITS) & GMP_NUMB_MASK; - else - rp[0] = manl >> (2 * GMP_NAIL_BITS - sc) & GMP_NUMB_MASK; - } - else - { - if (sc == 0) - { - rp[2] = manh >> GMP_NAIL_BITS; - rp[1] = ((manh << GMP_NUMB_BITS - GMP_NAIL_BITS) | (manl >> 2 * GMP_NAIL_BITS)) & GMP_NUMB_MASK; - rp[0] = (manl << GMP_NUMB_BITS - 2 * GMP_NAIL_BITS) & GMP_NUMB_MASK; - exp--; - } - else - { - rp[2] = (manh >> (GMP_LIMB_BITS - sc)); - rp[1] = (manh >> (GMP_NAIL_BITS - sc)) & GMP_NUMB_MASK; - rp[0] = ((manh << (GMP_NUMB_BITS - GMP_NAIL_BITS + sc)) - | (manl >> (GMP_LIMB_BITS - (GMP_NUMB_BITS - GMP_NAIL_BITS + sc)))) & GMP_NUMB_MASK; - } - } -#endif -#endif - -#if BITS_PER_PART == 32 && LIMBS_PER_DOUBLE > 3 - if (sc == 0) - { - int i; - - for (i = LIMBS_PER_DOUBLE - 1; i >= 0; i--) - { - rp[i] = manh >> (BITS_PER_ULONG - GMP_NUMB_BITS); - manh = ((manh << GMP_NUMB_BITS) - | (manl >> (BITS_PER_ULONG - GMP_NUMB_BITS))); - manl = manl << GMP_NUMB_BITS; - } - exp--; - } - else - { - int i; - - rp[LIMBS_PER_DOUBLE - 1] = (manh >> (GMP_LIMB_BITS - sc)); - manh = (manh << sc) | (manl >> (GMP_LIMB_BITS - sc)); - manl = (manl << sc); - for (i = LIMBS_PER_DOUBLE - 2; i >= 0; i--) - { - rp[i] = manh >> (BITS_PER_ULONG - GMP_NUMB_BITS); - manh = ((manh << GMP_NUMB_BITS) - | (manl >> (BITS_PER_ULONG - GMP_NUMB_BITS))); - manl = manl << GMP_NUMB_BITS; - } - } -#endif - - return exp; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/gen-bases.c b/src/plugins/e-acsl/contrib/libgmp/gen-bases.c deleted file mode 100644 index 4d4b0db8aceda483427fee7350535d25782092bb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/gen-bases.c +++ /dev/null @@ -1,251 +0,0 @@ -/* Generate mp_bases data. - -Copyright 1991, 1993, 1994, 1996, 2000, 2002, 2004, 2011, 2012 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "bootstrap.c" - - -int chars_per_limb; -mpz_t big_base; -int normalization_steps; -mpz_t big_base_inverted; - -mpz_t t; - -#define POW2_P(n) (((n) & ((n) - 1)) == 0) - -unsigned int -ulog2 (unsigned int x) -{ - unsigned int i; - for (i = 0; x != 0; i++) - x >>= 1; - return i; -} - -void -generate (int limb_bits, int nail_bits, int base) -{ - int numb_bits = limb_bits - nail_bits; - - mpz_set_ui (t, 1L); - mpz_mul_2exp (t, t, numb_bits); - mpz_set_ui (big_base, 1L); - chars_per_limb = 0; - for (;;) - { - mpz_mul_ui (big_base, big_base, (long) base); - if (mpz_cmp (big_base, t) > 0) - break; - chars_per_limb++; - } - - mpz_ui_pow_ui (big_base, (long) base, (long) chars_per_limb); - - normalization_steps = limb_bits - mpz_sizeinbase (big_base, 2); - - mpz_set_ui (t, 1L); - mpz_mul_2exp (t, t, 2*limb_bits - normalization_steps); - mpz_tdiv_q (big_base_inverted, t, big_base); - mpz_set_ui (t, 1L); - mpz_mul_2exp (t, t, limb_bits); - mpz_sub (big_base_inverted, big_base_inverted, t); -} - -void -header (int limb_bits, int nail_bits) -{ - int numb_bits = limb_bits - nail_bits; - - generate (limb_bits, nail_bits, 10); - - printf ("/* This file generated by gen-bases.c - DO NOT EDIT. */\n"); - printf ("\n"); - printf ("#if GMP_NUMB_BITS != %d\n", numb_bits); - printf ("Error, error, this data is for %d bits\n", numb_bits); - printf ("#endif\n"); - printf ("\n"); - printf ("/* mp_bases[10] data, as literal values */\n"); - printf ("#define MP_BASES_CHARS_PER_LIMB_10 %d\n", chars_per_limb); - printf ("#define MP_BASES_BIG_BASE_10 CNST_LIMB(0x"); - mpz_out_str (stdout, 16, big_base); - printf (")\n"); - printf ("#define MP_BASES_BIG_BASE_INVERTED_10 CNST_LIMB(0x"); - mpz_out_str (stdout, 16, big_base_inverted); - printf (")\n"); - printf ("#define MP_BASES_NORMALIZATION_STEPS_10 %d\n", normalization_steps); -} - - -#define EXTRA 16 - -/* Compute log(2)/log(b) as a fixnum. */ -void -mp_2logb (mpz_t r, int bi, int prec) -{ - mpz_t t, t2, two, b; - int i; - - mpz_init_set_ui (t, 1); - mpz_mul_2exp (t, t, prec+EXTRA); - - mpz_init (t2); - - mpz_init_set_ui (two, 2); - mpz_mul_2exp (two, two, prec+EXTRA); - - mpz_set_ui (r, 0); - - mpz_init_set_ui (b, bi); - mpz_mul_2exp (b, b, prec+EXTRA); - - for (i = prec-1; i >= 0; i--) - { - mpz_mul_2exp (b, b, prec+EXTRA); - mpz_sqrt (b, b); - - mpz_mul (t2, t, b); - mpz_tdiv_q_2exp (t2, t2, prec+EXTRA); - - if (mpz_cmp (t2, two) < 0) /* not too large? */ - { - mpz_setbit (r, i); /* set next less significant bit */ - mpz_set (t, t2); /* new value acceptable */ - } - } - - mpz_clear (t); - mpz_clear (t2); - mpz_clear (two); - mpz_clear (b); -} - -void -table (int limb_bits, int nail_bits) -{ - int numb_bits = limb_bits - nail_bits; - int base; - mpz_t r, t, logb2, log2b; - - mpz_init (r); - mpz_init (t); - mpz_init (logb2); - mpz_init (log2b); - - printf ("/* This file generated by gen-bases.c - DO NOT EDIT. */\n"); - printf ("\n"); - printf ("#include \"gmp.h\"\n"); - printf ("#include \"gmp-impl.h\"\n"); - printf ("\n"); - printf ("#if GMP_NUMB_BITS != %d\n", numb_bits); - printf ("Error, error, this data is for %d bits\n", numb_bits); - printf ("#endif\n"); - printf ("\n"); - puts ("const struct bases mp_bases[257] =\n{"); - puts (" /* 0 */ { 0, 0, 0, 0, 0 },"); - puts (" /* 1 */ { 0, 0, 0, 0, 0 },"); - for (base = 2; base <= 256; base++) - { - generate (limb_bits, nail_bits, base); - mp_2logb (r, base, limb_bits + 8); - mpz_tdiv_q_2exp (logb2, r, 8); - mpz_set_ui (t, 1); - mpz_mul_2exp (t, t, 2*limb_bits + 5); - mpz_sub_ui (t, t, 1); - mpz_add_ui (r, r, 1); - mpz_tdiv_q (log2b, t, r); - - printf (" /* %3u */ { ", base); - if (POW2_P (base)) - { - mpz_set_ui (big_base, ulog2 (base) - 1); - mpz_set_ui (big_base_inverted, 0); - } - - printf ("%u,", chars_per_limb); - printf (" CNST_LIMB(0x"); - mpz_out_str (stdout, 16, logb2); - printf ("), CNST_LIMB(0x"); - mpz_out_str (stdout, 16, log2b); - printf ("), CNST_LIMB(0x"); - mpz_out_str (stdout, 16, big_base); - printf ("), CNST_LIMB(0x"); - mpz_out_str (stdout, 16, big_base_inverted); - printf (") },\n"); - } - - puts ("};"); - - mpz_clear (r); - mpz_clear (t); - mpz_clear (logb2); - mpz_clear (log2b); - -} - -int -main (int argc, char **argv) -{ - int limb_bits, nail_bits; - - mpz_init (big_base); - mpz_init (big_base_inverted); - mpz_init (t); - - if (argc != 4) - { - fprintf (stderr, "Usage: gen-bases <header|table> <limbbits> <nailbits>\n"); - exit (1); - } - - limb_bits = atoi (argv[2]); - nail_bits = atoi (argv[3]); - - if (limb_bits <= 0 - || nail_bits < 0 - || nail_bits >= limb_bits) - { - fprintf (stderr, "Invalid limb/nail bits: %d %d\n", - limb_bits, nail_bits); - exit (1); - } - - if (strcmp (argv[1], "header") == 0) - header (limb_bits, nail_bits); - else if (strcmp (argv[1], "table") == 0) - table (limb_bits, nail_bits); - else - { - fprintf (stderr, "Invalid header/table choice: %s\n", argv[1]); - exit (1); - } - - return 0; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/gen-fac.c b/src/plugins/e-acsl/contrib/libgmp/gen-fac.c deleted file mode 100644 index 932b7259334e748d7ad168b1c69e7131fb375344..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/gen-fac.c +++ /dev/null @@ -1,285 +0,0 @@ -/* Generate data for combinatorics: fac_ui, bin_uiui, ... - -Copyright 2002, 2011-2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> -#include <stdlib.h> - -#include "bootstrap.c" - -int -mpz_remove_twos (mpz_t x) -{ - mp_bitcnt_t r = mpz_scan1(x, 0); - mpz_tdiv_q_2exp (x, x, r); - return r; -} - -/* returns 0 on success */ -int -gen_consts (int numb, int nail, int limb) -{ - mpz_t x, mask, y, last; - unsigned long a, b; - unsigned long ofl, ofe; - - printf ("/* This file is automatically generated by gen-fac.c */\n\n"); - printf ("#if GMP_NUMB_BITS != %d\n", numb); - printf ("Error , error this data is for %d GMP_NUMB_BITS only\n", numb); - printf ("#endif\n"); -#if 0 - printf ("#if GMP_LIMB_BITS != %d\n", limb); - printf ("Error , error this data is for %d GMP_LIMB_BITS only\n", limb); - printf ("#endif\n"); -#endif - - printf - ("/* This table is 0!,1!,2!,3!,...,n! where n! has <= GMP_NUMB_BITS bits */\n"); - printf - ("#define ONE_LIMB_FACTORIAL_TABLE CNST_LIMB(0x1),CNST_LIMB(0x1"); - mpz_init_set_ui (x, 1); - mpz_init (last); - for (b = 2;; b++) - { - mpz_mul_ui (x, x, b); /* so b!=a */ - if (mpz_sizeinbase (x, 2) > numb) - break; - printf ("),CNST_LIMB(0x"); - mpz_out_str (stdout, 16, x); - } - printf (")\n"); - - printf - ("\n/* This table is 0!,1!,2!/2,3!/2,...,n!/2^sn where n!/2^sn is an */\n"); - printf - ("/* odd integer for each n, and n!/2^sn has <= GMP_NUMB_BITS bits */\n"); - printf - ("#define ONE_LIMB_ODD_FACTORIAL_TABLE CNST_LIMB(0x1),CNST_LIMB(0x1),CNST_LIMB(0x1"); - mpz_set_ui (x, 1); - for (b = 3;; b++) - { - for (a = b; (a & 1) == 0; a >>= 1); - mpz_swap (last, x); - mpz_mul_ui (x, last, a); - if (mpz_sizeinbase (x, 2) > numb) - break; - printf ("),CNST_LIMB(0x"); - mpz_out_str (stdout, 16, x); - } - printf (")\n"); - printf - ("#define ODD_FACTORIAL_TABLE_MAX CNST_LIMB(0x"); - mpz_out_str (stdout, 16, last); - printf (")\n"); - - ofl = b - 1; - printf - ("#define ODD_FACTORIAL_TABLE_LIMIT (%lu)\n", ofl); - mpz_init2 (mask, numb + 1); - mpz_setbit (mask, numb); - mpz_sub_ui (mask, mask, 1); - printf - ("\n/* Previous table, continued, values modulo 2^GMP_NUMB_BITS */\n"); - printf - ("#define ONE_LIMB_ODD_FACTORIAL_EXTTABLE CNST_LIMB(0x"); - mpz_and (x, x, mask); - mpz_out_str (stdout, 16, x); - mpz_init (y); - mpz_bin_uiui (y, b, b/2); - b++; - for (;; b++) - { - for (a = b; (a & 1) == 0; a >>= 1); - if (a == b) { - mpz_divexact_ui (y, y, a/2+1); - mpz_mul_ui (y, y, a); - } else - mpz_mul_2exp (y, y, 1); - if (mpz_sizeinbase (y, 2) > numb) - break; - mpz_mul_ui (x, x, a); - mpz_and (x, x, mask); - printf ("),CNST_LIMB(0x"); - mpz_out_str (stdout, 16, x); - } - printf (")\n"); - ofe = b - 1; - printf - ("#define ODD_FACTORIAL_EXTTABLE_LIMIT (%lu)\n", ofe); - - printf - ("\n/* This table is 1!!,3!!,...,(2n+1)!! where (2n+1)!! has <= GMP_NUMB_BITS bits */\n"); - printf - ("#define ONE_LIMB_ODD_DOUBLEFACTORIAL_TABLE CNST_LIMB(0x1"); - mpz_set_ui (x, 1); - for (b = 3;; b+=2) - { - mpz_swap (last, x); - mpz_mul_ui (x, last, b); - if (mpz_sizeinbase (x, 2) > numb) - break; - printf ("),CNST_LIMB(0x"); - mpz_out_str (stdout, 16, x); - } - printf (")\n"); - printf - ("#define ODD_DOUBLEFACTORIAL_TABLE_MAX CNST_LIMB(0x"); - mpz_out_str (stdout, 16, last); - printf (")\n"); - - printf - ("#define ODD_DOUBLEFACTORIAL_TABLE_LIMIT (%lu)\n", b - 2); - - printf - ("\n/* This table x_1, x_2,... contains values s.t. x_n^n has <= GMP_NUMB_BITS bits */\n"); - printf - ("#define NTH_ROOT_NUMB_MASK_TABLE (GMP_NUMB_MASK"); - for (b = 2;b <= 8; b++) - { - mpz_root (x, mask, b); - printf ("),CNST_LIMB(0x"); - mpz_out_str (stdout, 16, x); - } - printf (")\n"); - - mpz_add_ui (mask, mask, 1); - printf - ("\n/* This table contains inverses of odd factorials, modulo 2^GMP_NUMB_BITS */\n"); - printf - ("\n/* It begins with (2!/2)^-1=1 */\n"); - printf - ("#define ONE_LIMB_ODD_FACTORIAL_INVERSES_TABLE CNST_LIMB(0x1"); - mpz_set_ui (x, 1); - for (b = 3;b <= ofe - 2; b++) - { - for (a = b; (a & 1) == 0; a >>= 1); - mpz_mul_ui (x, x, a); - mpz_invert (y, x, mask); - printf ("),CNST_LIMB(0x"); - mpz_out_str (stdout, 16, y); - } - printf (")\n"); - - ofe = (ofe / 16 + 1) * 16; - - printf - ("\n/* This table contains 2n-popc(2n) for small n */\n"); - printf - ("\n/* It begins with 2-1=1 (n=1) */\n"); - printf - ("#define TABLE_2N_MINUS_POPC_2N 1"); - for (b = 4; b <= ofe; b += 2) - { - mpz_set_ui (x, b); - printf (",%lu",b - mpz_popcount (x)); - } - printf ("\n"); - printf - ("#define TABLE_LIMIT_2N_MINUS_POPC_2N %lu\n", ofe + 1); - - - ofl = (ofl + 1) / 2; - printf - ("#define ODD_CENTRAL_BINOMIAL_OFFSET (%lu)\n", ofl); - printf - ("\n/* This table contains binomial(2k,k)/2^t */\n"); - printf - ("\n/* It begins with ODD_CENTRAL_BINOMIAL_TABLE_MIN */\n"); - printf - ("#define ONE_LIMB_ODD_CENTRAL_BINOMIAL_TABLE "); - for (b = ofl;; b++) - { - mpz_bin_uiui (x, 2 * b, b); - mpz_remove_twos (x); - if (mpz_sizeinbase (x, 2) > numb) - break; - if (b != ofl) - printf ("),"); - printf("CNST_LIMB(0x"); - mpz_out_str (stdout, 16, x); - } - printf (")\n"); - - ofe = b - 1; - printf - ("#define ODD_CENTRAL_BINOMIAL_TABLE_LIMIT (%lu)\n", ofe); - - printf - ("\n/* This table contains the inverses of elements in the previous table. */\n"); - printf - ("#define ONE_LIMB_ODD_CENTRAL_BINOMIAL_INVERSE_TABLE CNST_LIMB(0x"); - for (b = ofl; b <= ofe; b++) - { - mpz_bin_uiui (x, 2 * b, b); - mpz_remove_twos (x); - mpz_invert (x, x, mask); - mpz_out_str (stdout, 16, x); - if (b != ofe) - printf ("),CNST_LIMB(0x"); - } - printf (")\n"); - - printf - ("\n/* This table contains the values t in the formula binomial(2k,k)/2^t */\n"); - printf - ("#define CENTRAL_BINOMIAL_2FAC_TABLE "); - for (b = ofl; b <= ofe; b++) - { - mpz_bin_uiui (x, 2 * b, b); - printf ("%d", mpz_remove_twos (x)); - if (b != ofe) - printf (","); - } - printf ("\n"); - - return 0; -} - -int -main (int argc, char *argv[]) -{ - int nail_bits, limb_bits, numb_bits; - - if (argc != 3) - { - fprintf (stderr, "Usage: gen-fac limbbits nailbits\n"); - exit (1); - } - limb_bits = atoi (argv[1]); - nail_bits = atoi (argv[2]); - numb_bits = limb_bits - nail_bits; - if (limb_bits < 2 || nail_bits < 0 || numb_bits < 1) - { - fprintf (stderr, "Invalid limb/nail bits %d,%d\n", limb_bits, - nail_bits); - exit (1); - } - gen_consts (numb_bits, nail_bits, limb_bits); - return 0; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/gen-fib.c b/src/plugins/e-acsl/contrib/libgmp/gen-fib.c deleted file mode 100644 index 647a6bb972eec5f0e433bd49e509cbab2f4a29e5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/gen-fib.c +++ /dev/null @@ -1,156 +0,0 @@ -/* Generate Fibonacci table data. - -Copyright 2001, 2002, 2004, 2012, 2014, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> -#include "bootstrap.c" - -mpz_t *f; -int fnum, fib_limit, luc_limit; - -void -generate (int numb_bits) -{ - mpz_t limit, l; - int falloc, i; - - mpz_init2 (limit, numb_bits + 1); - mpz_setbit (limit, numb_bits); - - /* fib(2n) > 2^n, so use 2n as a limit for the table size */ - falloc = 2 * numb_bits; - f = (mpz_t*) xmalloc (falloc * sizeof (*f)); - - mpz_init_set_ui (f[0], 1L); /* F[-1] */ - mpz_init_set_ui (f[1], 0L); /* F[0] */ - - mpz_init (l); - - for (i = 2; ; i++) - { - assert (i < falloc); - - /* F[i] = F[i-1] + F[i-2] */ - mpz_init (f[i]); - mpz_add (f[i], f[i-1], f[i-2]); - if (mpz_cmp (f[i], limit) >= 0) - break; - - fnum = i+1; - fib_limit = i-1; - - /* L[i] = F[i]+2*F[i-1] */ - mpz_add (l, f[i], f[i-1]); - mpz_add (l, l, f[i-1]); - - if (mpz_cmp (l, limit) < 0) - luc_limit = i-1; - } - - mpz_clear (limit); -} - - -void -header (int numb_bits) -{ - printf ("/* This file generated by gen-fib.c - DO NOT EDIT. */\n"); - printf ("\n"); - printf ("#if GMP_NUMB_BITS != %d\n", numb_bits); - printf ("Error, error, this data is for %d bits\n", numb_bits); - printf ("#endif\n"); - printf ("\n"); - printf ("#define FIB_TABLE_LIMIT %d\n", fib_limit); - printf ("#define FIB_TABLE_LUCNUM_LIMIT %d\n", luc_limit); -} - -void -table (int numb_bits) -{ - int i; - - printf ("/* This file generated by gen-fib.c - DO NOT EDIT. */\n"); - printf ("\n"); - printf ("#include \"gmp.h\"\n"); - printf ("#include \"gmp-impl.h\"\n"); - printf ("\n"); - printf ("#if GMP_NUMB_BITS != %d\n", numb_bits); - printf ("Error, error, this data is for %d bits\n", numb_bits); - printf ("#endif\n"); - printf ("\n"); - printf ("const mp_limb_t\n"); - printf ("__gmp_fib_table[FIB_TABLE_LIMIT+2] = {\n"); - - for (i = 0; i < fnum; i++) - { - printf (" CNST_LIMB (0x"); - mpz_out_str (stdout, 16, f[i]); - printf ("), /* %d */\n", i-1); - } - printf ("};\n"); -} - -int -main (int argc, char *argv[]) -{ - int limb_bits, nail_bits, numb_bits; - - if (argc != 4) - { - fprintf (stderr, "Usage: gen-fib <header|table> <limbbits> <nailbits>\n"); - exit (1); - } - - limb_bits = atoi (argv[2]); - nail_bits = atoi (argv[3]); - - if (limb_bits <= 0 - || nail_bits < 0 - || nail_bits >= limb_bits) - { - fprintf (stderr, "Invalid limb/nail bits: %d %d\n", - limb_bits, nail_bits); - exit (1); - } - numb_bits = limb_bits - nail_bits; - - generate (numb_bits); - - if (strcmp (argv[1], "header") == 0) - header (numb_bits); - else if (strcmp (argv[1], "table") == 0) - table (numb_bits); - else - { - fprintf (stderr, "Invalid header/table choice: %s\n", argv[1]); - exit (1); - } - - return 0; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/gen-jacobitab.c b/src/plugins/e-acsl/contrib/libgmp/gen-jacobitab.c deleted file mode 100644 index 537994b3b27d1996e992fcdd2e732dc3920602e6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/gen-jacobitab.c +++ /dev/null @@ -1,128 +0,0 @@ -/* gen-jacobi.c - - Contributed to the GNU project by Niels Möller. - -Copyright 2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* Generate the lookup table needed for fast left-to-right computation - of the Jacobi symbol. */ - -#include <assert.h> -#include <stdio.h> -#include <stdlib.h> - -static const struct -{ - unsigned char a; - unsigned char b; -} decode_table[13] = { - /* 0 */ { 0, 1 }, - /* 1 */ { 0, 3 }, - /* 2 */ { 1, 1 }, - /* 3 */ { 1, 3 }, - /* 4 */ { 2, 1 }, - /* 5 */ { 2, 3 }, - /* 6 */ { 3, 1 }, - /* 7 */ { 3, 3 }, /* d = 1 */ - /* 8 */ { 1, 0 }, - /* 9 */ { 1, 2 }, - /* 10 */ { 3, 0 }, - /* 11 */ { 3, 2 }, - /* 12 */ { 3, 3 }, /* d = 0 */ - -}; -#define JACOBI_A(bits) (decode_table[(bits)>>1].a) -#define JACOBI_B(bits) (decode_table[(bits)>>1].b) - -#define JACOBI_E(bits) ((bits) & 1) -#define JACOBI_D(bits) (((bits)>>1) == 7) /* Gives 0 for don't care states. */ - -static unsigned -encode (unsigned a, unsigned b, unsigned d) -{ - unsigned i; - - assert (d < 2); - assert (a < 4); - assert (b < 4); - assert ( (a | b ) & 1); - - if (a == 3 && b == 3) - return d ? 7 : 12; - - for (i = 0; i < 12; i++) - if (decode_table[i].a == a - && decode_table[i].b == b) - return i; - - abort (); -} - -int -main (int argc, char **argv) -{ - unsigned bits; - - for (bits = 0; bits < 208; bits++) - { - unsigned e, a, b, d_old, d, q; - - if (bits && !(bits & 0xf)) - printf("\n"); - - q = bits & 3; - d = (bits >> 2) & 1; - - e = JACOBI_E (bits >> 3); - a = JACOBI_A (bits >> 3); - b = JACOBI_B (bits >> 3); - d_old = JACOBI_D (bits >> 3); - - if (d != d_old && a == 3 && b == 3) - e ^= 1; - - if (d == 1) - { - if (b == 2) - e ^= (q & (a >> 1)) ^ (q >> 1); - a = (a - q * b) & 3; - } - else - { - if (a == 2) - e ^= (q & (b >> 1)) ^ (q >> 1); - b = (b - q * a) & 3; - } - - printf("%2d,", (encode (a, b, d) << 1) | e); - } - printf("\n"); - - return 0; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/gen-psqr.c b/src/plugins/e-acsl/contrib/libgmp/gen-psqr.c deleted file mode 100644 index a5054c627235c95dd57517e3831b1376919ea01b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/gen-psqr.c +++ /dev/null @@ -1,585 +0,0 @@ -/* Generate perfect square testing data. - -Copyright 2002-2004, 2012, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> -#include <stdlib.h> - -#include "bootstrap.c" - - -/* The aim of this program is to choose either mpn_mod_34lsub1 or mpn_mod_1 - (plus a PERFSQR_PP modulus), and generate tables indicating quadratic - residues and non-residues modulo small factors of that modulus. - - For the usual 32 or 64 bit cases mpn_mod_34lsub1 gets used. That - function exists specifically because 2^24-1 and 2^48-1 have nice sets of - prime factors. For other limb sizes it's considered, but if it doesn't - have good factors then mpn_mod_1 will be used instead. - - When mpn_mod_1 is used, the modulus PERFSQR_PP is created from a - selection of small primes, chosen to fill PERFSQR_MOD_BITS of a limb, - with that bit count chosen so (2*GMP_LIMB_BITS)*2^PERFSQR_MOD_BITS <= - GMP_LIMB_MAX, allowing PERFSQR_MOD_IDX in mpn/generic/perfsqr.c to do its - calculation within a single limb. - - In either case primes can be combined to make divisors. The table data - then effectively indicates remainders which are quadratic residues mod - all the primes. This sort of combining reduces the number of steps - needed after mpn_mod_34lsub1 or mpn_mod_1, saving code size and time. - Nothing is gained or lost in terms of detections, the same total fraction - of non-residues will be identified. - - Nothing particularly sophisticated is attempted for combining factors to - make divisors. This is probably a kind of knapsack problem so it'd be - too hard to attempt anything completely general. For the usual 32 and 64 - bit limbs we get a good enough result just pairing the biggest and - smallest which fit together, repeatedly. - - Another aim is to get powerful combinations, ie. divisors which identify - biggest fraction of non-residues, and have those run first. Again for - the usual 32 and 64 bits it seems good enough just to pair for big - divisors then sort according to the resulting fraction of non-residues - identified. - - Also in this program, a table sq_res_0x100 of residues modulo 256 is - generated. This simply fills bits into limbs of the appropriate - build-time GMP_LIMB_BITS each. - -*/ - - -/* Normally we aren't using const in gen*.c programs, so as not to have to - bother figuring out if it works, but using it with f_cmp_divisor and - f_cmp_fraction avoids warnings from the qsort calls. */ - -/* Same tests as gmp.h. */ -#if defined (__STDC__) \ - || defined (__cplusplus) \ - || defined (_AIX) \ - || defined (__DECC) \ - || (defined (__mips) && defined (_SYSTYPE_SVR4)) \ - || defined (_MSC_VER) \ - || defined (_WIN32) -#define HAVE_CONST 1 -#endif - -#if ! HAVE_CONST -#define const -#endif - - -mpz_t *sq_res_0x100; /* table of limbs */ -int nsq_res_0x100; /* elements in sq_res_0x100 array */ -int sq_res_0x100_num; /* squares in sq_res_0x100 */ -double sq_res_0x100_fraction; /* sq_res_0x100_num / 256 */ - -int mod34_bits; /* 3*GMP_NUMB_BITS/4 */ -int mod_bits; /* bits from PERFSQR_MOD_34 or MOD_PP */ -int max_divisor; /* all divisors <= max_divisor */ -int max_divisor_bits; /* ceil(log2(max_divisor)) */ -double total_fraction; /* of squares */ -mpz_t pp; /* product of primes, or 0 if mod_34lsub1 used */ -mpz_t pp_norm; /* pp shifted so NUMB high bit set */ -mpz_t pp_inverted; /* invert_limb style inverse */ -mpz_t mod_mask; /* 2^mod_bits-1 */ -char mod34_excuse[128]; /* why mod_34lsub1 not used (if it's not) */ - -/* raw list of divisors of 2^mod34_bits-1 or pp, just to show in a comment */ -struct rawfactor_t { - int divisor; - int multiplicity; -}; -struct rawfactor_t *rawfactor; -int nrawfactor; - -/* factors of 2^mod34_bits-1 or pp and associated data, after combining etc */ -struct factor_t { - int divisor; - mpz_t inverse; /* 1/divisor mod 2^mod_bits */ - mpz_t mask; /* indicating squares mod divisor */ - double fraction; /* squares/total */ -}; -struct factor_t *factor; -int nfactor; /* entries in use in factor array */ -int factor_alloc; /* entries allocated to factor array */ - - -int -f_cmp_divisor (const void *parg, const void *qarg) -{ - const struct factor_t *p, *q; - p = (const struct factor_t *) parg; - q = (const struct factor_t *) qarg; - if (p->divisor > q->divisor) - return 1; - else if (p->divisor < q->divisor) - return -1; - else - return 0; -} - -int -f_cmp_fraction (const void *parg, const void *qarg) -{ - const struct factor_t *p, *q; - p = (const struct factor_t *) parg; - q = (const struct factor_t *) qarg; - if (p->fraction > q->fraction) - return 1; - else if (p->fraction < q->fraction) - return -1; - else - return 0; -} - -/* Remove array[idx] by copying the remainder down, and adjust narray - accordingly. */ -#define COLLAPSE_ELEMENT(array, idx, narray) \ - do { \ - memmove (&(array)[idx], \ - &(array)[idx+1], \ - ((narray)-((idx)+1)) * sizeof (array[0])); \ - (narray)--; \ - } while (0) - - -/* return n*2^p mod m */ -int -mul_2exp_mod (int n, int p, int m) -{ - while (--p >= 0) - n = (2 * n) % m; - return n; -} - -/* return -n mod m */ -int -neg_mod (int n, int m) -{ - assert (n >= 0 && n < m); - return (n == 0 ? 0 : m-n); -} - -/* Set "mask" to a value such that "mask & (1<<idx)" is non-zero if - "-(idx<<mod_bits)" can be a square modulo m. */ -void -square_mask (mpz_t mask, int m) -{ - int p, i, r, idx; - - p = mul_2exp_mod (1, mod_bits, m); - p = neg_mod (p, m); - - mpz_set_ui (mask, 0L); - for (i = 0; i < m; i++) - { - r = (i * i) % m; - idx = (r * p) % m; - mpz_setbit (mask, (unsigned long) idx); - } -} - -void -generate_sq_res_0x100 (int limb_bits) -{ - int i, res; - - nsq_res_0x100 = (0x100 + limb_bits - 1) / limb_bits; - sq_res_0x100 = (mpz_t *) xmalloc (nsq_res_0x100 * sizeof (*sq_res_0x100)); - - for (i = 0; i < nsq_res_0x100; i++) - mpz_init_set_ui (sq_res_0x100[i], 0L); - - for (i = 0; i < 0x100; i++) - { - res = (i * i) % 0x100; - mpz_setbit (sq_res_0x100[res / limb_bits], - (unsigned long) (res % limb_bits)); - } - - sq_res_0x100_num = 0; - for (i = 0; i < nsq_res_0x100; i++) - sq_res_0x100_num += mpz_popcount (sq_res_0x100[i]); - sq_res_0x100_fraction = (double) sq_res_0x100_num / 256.0; -} - -void -generate_mod (int limb_bits, int nail_bits) -{ - int numb_bits = limb_bits - nail_bits; - int i, divisor; - - mpz_init_set_ui (pp, 0L); - mpz_init_set_ui (pp_norm, 0L); - mpz_init_set_ui (pp_inverted, 0L); - - /* no more than limb_bits many factors in a one limb modulus (and of - course in reality nothing like that many) */ - factor_alloc = limb_bits; - factor = (struct factor_t *) xmalloc (factor_alloc * sizeof (*factor)); - rawfactor = (struct rawfactor_t *) xmalloc (factor_alloc * sizeof (*rawfactor)); - - if (numb_bits % 4 != 0) - { - strcpy (mod34_excuse, "GMP_NUMB_BITS % 4 != 0"); - goto use_pp; - } - - max_divisor = 2*limb_bits; - max_divisor_bits = log2_ceil (max_divisor); - - if (numb_bits / 4 < max_divisor_bits) - { - /* Wind back to one limb worth of max_divisor, if that will let us use - mpn_mod_34lsub1. */ - max_divisor = limb_bits; - max_divisor_bits = log2_ceil (max_divisor); - - if (numb_bits / 4 < max_divisor_bits) - { - strcpy (mod34_excuse, "GMP_NUMB_BITS / 4 too small"); - goto use_pp; - } - } - - { - /* Can use mpn_mod_34lsub1, find small factors of 2^mod34_bits-1. */ - mpz_t m, q, r; - int multiplicity; - - mod34_bits = (numb_bits / 4) * 3; - - /* mpn_mod_34lsub1 returns a full limb value, PERFSQR_MOD_34 folds it at - the mod34_bits mark, adding the two halves for a remainder of at most - mod34_bits+1 many bits */ - mod_bits = mod34_bits + 1; - - mpz_init_set_ui (m, 1L); - mpz_mul_2exp (m, m, mod34_bits); - mpz_sub_ui (m, m, 1L); - - mpz_init (q); - mpz_init (r); - - for (i = 3; i <= max_divisor; i+=2) - { - if (! isprime (i)) - continue; - - mpz_tdiv_qr_ui (q, r, m, (unsigned long) i); - if (mpz_sgn (r) != 0) - continue; - - /* if a repeated prime is found it's used as an i^n in one factor */ - divisor = 1; - multiplicity = 0; - do - { - if (divisor > max_divisor / i) - break; - multiplicity++; - mpz_set (m, q); - mpz_tdiv_qr_ui (q, r, m, (unsigned long) i); - } - while (mpz_sgn (r) == 0); - - assert (nrawfactor < factor_alloc); - rawfactor[nrawfactor].divisor = i; - rawfactor[nrawfactor].multiplicity = multiplicity; - nrawfactor++; - } - - mpz_clear (m); - mpz_clear (q); - mpz_clear (r); - } - - if (nrawfactor <= 2) - { - mpz_t new_pp; - - sprintf (mod34_excuse, "only %d small factor%s", - nrawfactor, nrawfactor == 1 ? "" : "s"); - - use_pp: - /* reset to two limbs of max_divisor, in case the mpn_mod_34lsub1 code - tried with just one */ - max_divisor = 2*limb_bits; - max_divisor_bits = log2_ceil (max_divisor); - - mpz_init (new_pp); - nrawfactor = 0; - mod_bits = MIN (numb_bits, limb_bits - max_divisor_bits); - - /* one copy of each small prime */ - mpz_set_ui (pp, 1L); - for (i = 3; i <= max_divisor; i+=2) - { - if (! isprime (i)) - continue; - - mpz_mul_ui (new_pp, pp, (unsigned long) i); - if (mpz_sizeinbase (new_pp, 2) > mod_bits) - break; - mpz_set (pp, new_pp); - - assert (nrawfactor < factor_alloc); - rawfactor[nrawfactor].divisor = i; - rawfactor[nrawfactor].multiplicity = 1; - nrawfactor++; - } - - /* Plus an extra copy of one or more of the primes selected, if that - still fits in max_divisor and the total in mod_bits. Usually only - 3 or 5 will be candidates */ - for (i = nrawfactor-1; i >= 0; i--) - { - if (rawfactor[i].divisor > max_divisor / rawfactor[i].divisor) - continue; - mpz_mul_ui (new_pp, pp, (unsigned long) rawfactor[i].divisor); - if (mpz_sizeinbase (new_pp, 2) > mod_bits) - continue; - mpz_set (pp, new_pp); - - rawfactor[i].multiplicity++; - } - - mod_bits = mpz_sizeinbase (pp, 2); - - mpz_set (pp_norm, pp); - while (mpz_sizeinbase (pp_norm, 2) < numb_bits) - mpz_add (pp_norm, pp_norm, pp_norm); - - mpz_preinv_invert (pp_inverted, pp_norm, numb_bits); - - mpz_clear (new_pp); - } - - /* start the factor array */ - for (i = 0; i < nrawfactor; i++) - { - int j; - assert (nfactor < factor_alloc); - factor[nfactor].divisor = 1; - for (j = 0; j < rawfactor[i].multiplicity; j++) - factor[nfactor].divisor *= rawfactor[i].divisor; - nfactor++; - } - - combine: - /* Combine entries in the factor array. Combine the smallest entry with - the biggest one that will fit with it (ie. under max_divisor), then - repeat that with the new smallest entry. */ - qsort (factor, nfactor, sizeof (factor[0]), f_cmp_divisor); - for (i = nfactor-1; i >= 1; i--) - { - if (factor[i].divisor <= max_divisor / factor[0].divisor) - { - factor[0].divisor *= factor[i].divisor; - COLLAPSE_ELEMENT (factor, i, nfactor); - goto combine; - } - } - - total_fraction = 1.0; - for (i = 0; i < nfactor; i++) - { - mpz_init (factor[i].inverse); - mpz_invert_ui_2exp (factor[i].inverse, - (unsigned long) factor[i].divisor, - (unsigned long) mod_bits); - - mpz_init (factor[i].mask); - square_mask (factor[i].mask, factor[i].divisor); - - /* fraction of possible squares */ - factor[i].fraction = (double) mpz_popcount (factor[i].mask) - / factor[i].divisor; - - /* total fraction of possible squares */ - total_fraction *= factor[i].fraction; - } - - /* best tests first (ie. smallest fraction) */ - qsort (factor, nfactor, sizeof (factor[0]), f_cmp_fraction); -} - -void -print (int limb_bits, int nail_bits) -{ - int i; - mpz_t mhi, mlo; - - printf ("/* This file generated by gen-psqr.c - DO NOT EDIT. */\n"); - printf ("\n"); - - printf ("#if GMP_LIMB_BITS != %d || GMP_NAIL_BITS != %d\n", - limb_bits, nail_bits); - printf ("Error, error, this data is for %d bit limb and %d bit nail\n", - limb_bits, nail_bits); - printf ("#endif\n"); - printf ("\n"); - - printf ("/* Non-zero bit indicates a quadratic residue mod 0x100.\n"); - printf (" This test identifies %.2f%% as non-squares (%d/256). */\n", - (1.0 - sq_res_0x100_fraction) * 100.0, - 0x100 - sq_res_0x100_num); - printf ("static const mp_limb_t\n"); - printf ("sq_res_0x100[%d] = {\n", nsq_res_0x100); - for (i = 0; i < nsq_res_0x100; i++) - { - printf (" CNST_LIMB(0x"); - mpz_out_str (stdout, 16, sq_res_0x100[i]); - printf ("),\n"); - } - printf ("};\n"); - printf ("\n"); - - if (mpz_sgn (pp) != 0) - { - printf ("/* mpn_mod_34lsub1 not used due to %s */\n", mod34_excuse); - printf ("/* PERFSQR_PP = "); - } - else - printf ("/* 2^%d-1 = ", mod34_bits); - for (i = 0; i < nrawfactor; i++) - { - if (i != 0) - printf (" * "); - printf ("%d", rawfactor[i].divisor); - if (rawfactor[i].multiplicity != 1) - printf ("^%d", rawfactor[i].multiplicity); - } - printf (" %s*/\n", mpz_sgn (pp) == 0 ? "... " : ""); - - printf ("#define PERFSQR_MOD_BITS %d\n", mod_bits); - if (mpz_sgn (pp) != 0) - { - printf ("#define PERFSQR_PP CNST_LIMB(0x"); - mpz_out_str (stdout, 16, pp); - printf (")\n"); - printf ("#define PERFSQR_PP_NORM CNST_LIMB(0x"); - mpz_out_str (stdout, 16, pp_norm); - printf (")\n"); - printf ("#define PERFSQR_PP_INVERTED CNST_LIMB(0x"); - mpz_out_str (stdout, 16, pp_inverted); - printf (")\n"); - } - printf ("\n"); - - mpz_init (mhi); - mpz_init (mlo); - - printf ("/* This test identifies %.2f%% as non-squares. */\n", - (1.0 - total_fraction) * 100.0); - printf ("#define PERFSQR_MOD_TEST(up, usize) \\\n"); - printf (" do { \\\n"); - printf (" mp_limb_t r; \\\n"); - if (mpz_sgn (pp) != 0) - printf (" PERFSQR_MOD_PP (r, up, usize); \\\n"); - else - printf (" PERFSQR_MOD_34 (r, up, usize); \\\n"); - - for (i = 0; i < nfactor; i++) - { - printf (" \\\n"); - printf (" /* %5.2f%% */ \\\n", - (1.0 - factor[i].fraction) * 100.0); - - printf (" PERFSQR_MOD_%d (r, CNST_LIMB(%2d), CNST_LIMB(0x", - factor[i].divisor <= limb_bits ? 1 : 2, - factor[i].divisor); - mpz_out_str (stdout, 16, factor[i].inverse); - printf ("), \\\n"); - printf (" CNST_LIMB(0x"); - - if ( factor[i].divisor <= limb_bits) - { - mpz_out_str (stdout, 16, factor[i].mask); - } - else - { - mpz_tdiv_r_2exp (mlo, factor[i].mask, (unsigned long) limb_bits); - mpz_tdiv_q_2exp (mhi, factor[i].mask, (unsigned long) limb_bits); - mpz_out_str (stdout, 16, mhi); - printf ("), CNST_LIMB(0x"); - mpz_out_str (stdout, 16, mlo); - } - printf (")); \\\n"); - } - - printf (" } while (0)\n"); - printf ("\n"); - - printf ("/* Grand total sq_res_0x100 and PERFSQR_MOD_TEST, %.2f%% non-squares. */\n", - (1.0 - (total_fraction * 44.0/256.0)) * 100.0); - printf ("\n"); - - printf ("/* helper for tests/mpz/t-perfsqr.c */\n"); - printf ("#define PERFSQR_DIVISORS { 256,"); - for (i = 0; i < nfactor; i++) - printf (" %d,", factor[i].divisor); - printf (" }\n"); - - - mpz_clear (mhi); - mpz_clear (mlo); -} - -int -main (int argc, char *argv[]) -{ - int limb_bits, nail_bits; - - if (argc != 3) - { - fprintf (stderr, "Usage: gen-psqr <limbbits> <nailbits>\n"); - exit (1); - } - - limb_bits = atoi (argv[1]); - nail_bits = atoi (argv[2]); - - if (limb_bits <= 0 - || nail_bits < 0 - || nail_bits >= limb_bits) - { - fprintf (stderr, "Invalid limb/nail bits: %d %d\n", - limb_bits, nail_bits); - exit (1); - } - - generate_sq_res_0x100 (limb_bits); - generate_mod (limb_bits, nail_bits); - - print (limb_bits, nail_bits); - - return 0; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/gen-trialdivtab.c b/src/plugins/e-acsl/contrib/libgmp/gen-trialdivtab.c deleted file mode 100644 index f1babefacc2e7afbe7b2b9f5a438bab551f96148..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/gen-trialdivtab.c +++ /dev/null @@ -1,300 +0,0 @@ -/* gen-trialdivtab.c - - Contributed to the GNU project by Torbjorn Granlund. - -Copyright 2009, 2012, 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* - Generate tables for fast, division-free trial division for GMP. - - There is one main table, ptab. It contains primes, multiplied together, and - several types of pre-computed inverses. It refers to tables of the type - dtab, via the last two indices. That table contains the individual primes in - the range, except that the primes are not actually included in the table (see - the P macro; it sneakingly excludes the primes themselves). Instead, the - dtab tables contains tuples for each prime (modular-inverse, limit) used for - divisibility checks. - - This interface is not intended for division of very many primes, since then - other algorithms apply. -*/ - -#include <stdlib.h> -#include <stdio.h> -#include "bootstrap.c" - -int sumspills (mpz_t, mpz_t *, int); -void mpn_mod_1s_4p_cps (mpz_t [7], mpz_t); - -int limb_bits; - -mpz_t B; - -int -main (int argc, char *argv[]) -{ - unsigned long t, p; - mpz_t ppp, acc, inv, gmp_numb_max, tmp, Bhalf; - mpz_t pre[7]; - int i; - int start_p, end_p, interval_start, interval_end, omitted_p; - const char *endtok; - int stop; - int np, start_idx; - - if (argc < 2) - { - fprintf (stderr, "usage: %s bits endprime\n", argv[0]); - exit (1); - } - - limb_bits = atoi (argv[1]); - - end_p = 1290; /* default end prime */ - if (argc == 3) - end_p = atoi (argv[2]); - - printf ("#if GMP_LIMB_BITS != %d\n", limb_bits); - printf ("#error This table is for GMP_LIMB_BITS = %d\n", limb_bits); - printf ("#endif\n\n"); - - printf ("#if GMP_NAIL_BITS != 0\n"); - printf ("#error This table does not support nails\n"); - printf ("#endif\n\n"); - - for (i = 0; i < 7; i++) - mpz_init (pre[i]); - - mpz_init_set_ui (gmp_numb_max, 1); - mpz_mul_2exp (gmp_numb_max, gmp_numb_max, limb_bits); - mpz_sub_ui (gmp_numb_max, gmp_numb_max, 1); - - mpz_init (tmp); - mpz_init (inv); - - mpz_init_set_ui (B, 1); mpz_mul_2exp (B, B, limb_bits); - mpz_init_set_ui (Bhalf, 1); mpz_mul_2exp (Bhalf, Bhalf, limb_bits - 1); - - start_p = 3; - - mpz_init_set_ui (ppp, 1); - mpz_init (acc); - interval_start = start_p; - omitted_p = 3; - interval_end = 0; - -/* printf ("static struct gmp_primes_dtab gmp_primes_dtab[] = {\n"); */ - - printf ("#ifdef WANT_dtab\n"); - - for (t = start_p; t <= end_p; t += 2) - { - if (! isprime (t)) - continue; - - mpz_mul_ui (acc, ppp, t); - stop = mpz_cmp (acc, Bhalf) >= 0; - if (!stop) - { - mpn_mod_1s_4p_cps (pre, acc); - stop = sumspills (acc, pre + 2, 5); - } - - if (stop) - { - for (p = interval_start; p <= interval_end; p += 2) - { - if (! isprime (p)) - continue; - - printf (" P(%d,", (int) p); - mpz_invert_ui_2exp (inv, p, limb_bits); - printf ("CNST_LIMB(0x"); mpz_out_str (stdout, 16, inv); printf ("),"); - - mpz_tdiv_q_ui (tmp, gmp_numb_max, p); - printf ("CNST_LIMB(0x"); mpz_out_str (stdout, 16, tmp); - printf (")),\n"); - } - mpz_set_ui (ppp, t); - interval_start = t; - omitted_p = t; - } - else - { - mpz_set (ppp, acc); - } - interval_end = t; - } - printf ("#define SMALLEST_OMITTED_PRIME %d\n", (int) omitted_p); - printf ("#endif\n"); - - printf ("#ifdef WANT_ptab\n"); - -/* printf ("static struct gmp_primes_ptab gmp_primes_ptab[] = {\n"); */ - - endtok = ""; - - mpz_set_ui (ppp, 1); - interval_start = start_p; - interval_end = 0; - np = 0; - start_idx = 0; - for (t = start_p; t <= end_p; t += 2) - { - if (! isprime (t)) - continue; - - mpz_mul_ui (acc, ppp, t); - - stop = mpz_cmp (acc, Bhalf) >= 0; - if (!stop) - { - mpn_mod_1s_4p_cps (pre, acc); - stop = sumspills (acc, pre + 2, 5); - } - - if (stop) - { - mpn_mod_1s_4p_cps (pre, ppp); - printf ("%s", endtok); - printf (" {CNST_LIMB(0x"); mpz_out_str (stdout, 16, ppp); - printf ("),{CNST_LIMB(0x"); mpz_out_str (stdout, 16, pre[0]); - printf ("),%d", (int) PTR(pre[1])[0]); - for (i = 0; i < 5; i++) - { - printf (","); - printf ("CNST_LIMB(0x"); mpz_out_str (stdout, 16, pre[2 + i]); - printf (")"); - } - printf ("},"); - printf ("%d,", start_idx); - printf ("%d}", np - start_idx); - - endtok = ",\n"; - mpz_set_ui (ppp, t); - interval_start = t; - start_idx = np; - } - else - { - mpz_set (ppp, acc); - } - interval_end = t; - np++; - } - - printf ("\n"); - printf ("#endif\n"); - - return 0; -} - -unsigned long -mpz_log2 (mpz_t x) -{ - return mpz_sgn (x) ? mpz_sizeinbase (x, 2) : 0; -} - -void -mpn_mod_1s_4p_cps (mpz_t cps[7], mpz_t bparm) -{ - mpz_t b, bi; - mpz_t B1modb, B2modb, B3modb, B4modb, B5modb; - mpz_t t; - int cnt; - - mpz_init_set (b, bparm); - - cnt = limb_bits - mpz_log2 (b); - - mpz_init (bi); - mpz_init (t); - mpz_init (B1modb); - mpz_init (B2modb); - mpz_init (B3modb); - mpz_init (B4modb); - mpz_init (B5modb); - - mpz_set_ui (t, 1); - mpz_mul_2exp (t, t, limb_bits - cnt); - mpz_sub (t, t, b); - mpz_mul_2exp (t, t, limb_bits); - mpz_tdiv_q (bi, t, b); /* bi = B^2/b, except msb */ - - mpz_set_ui (t, 1); - mpz_mul_2exp (t, t, limb_bits); /* t = B */ - mpz_tdiv_r (B1modb, t, b); - - mpz_mul_2exp (t, B1modb, limb_bits); - mpz_tdiv_r (B2modb, t, b); - - mpz_mul_2exp (t, B2modb, limb_bits); - mpz_tdiv_r (B3modb, t, b); - - mpz_mul_2exp (t, B3modb, limb_bits); - mpz_tdiv_r (B4modb, t, b); - - mpz_mul_2exp (t, B4modb, limb_bits); - mpz_tdiv_r (B5modb, t, b); - - mpz_set (cps[0], bi); - mpz_set_ui (cps[1], cnt); - mpz_tdiv_q_2exp (cps[2], B1modb, 0); - mpz_tdiv_q_2exp (cps[3], B2modb, 0); - mpz_tdiv_q_2exp (cps[4], B3modb, 0); - mpz_tdiv_q_2exp (cps[5], B4modb, 0); - mpz_tdiv_q_2exp (cps[6], B5modb, 0); - - mpz_clear (b); - mpz_clear (bi); - mpz_clear (t); - mpz_clear (B1modb); - mpz_clear (B2modb); - mpz_clear (B3modb); - mpz_clear (B4modb); - mpz_clear (B5modb); -} - -int -sumspills (mpz_t ppp, mpz_t *a, int n) -{ - mpz_t s; - int i, ret; - - mpz_init_set (s, a[0]); - - for (i = 1; i < n; i++) - { - mpz_add (s, s, a[i]); - } - ret = mpz_cmp (s, B) >= 0; - mpz_clear (s); - - return ret; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/gmp-h.in b/src/plugins/e-acsl/contrib/libgmp/gmp-h.in deleted file mode 100644 index 8329e78c15acb42ca4467895d253dab149f0f647..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/gmp-h.in +++ /dev/null @@ -1,2333 +0,0 @@ -/* Definitions for GNU multiple precision functions. -*- mode: c -*- - -Copyright 1991, 1993-1997, 1999-2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#ifndef __GMP_H__ - -#if defined (__cplusplus) -#include <iosfwd> /* for std::istream, std::ostream, std::string */ -#include <cstdio> -#endif - - -/* Instantiated by configure. */ -#if ! defined (__GMP_WITHIN_CONFIGURE) -#define __GMP_HAVE_HOST_CPU_FAMILY_power @HAVE_HOST_CPU_FAMILY_power@ -#define __GMP_HAVE_HOST_CPU_FAMILY_powerpc @HAVE_HOST_CPU_FAMILY_powerpc@ -#define GMP_LIMB_BITS @GMP_LIMB_BITS@ -#define GMP_NAIL_BITS @GMP_NAIL_BITS@ -#endif -#define GMP_NUMB_BITS (GMP_LIMB_BITS - GMP_NAIL_BITS) -#define GMP_NUMB_MASK ((~ __GMP_CAST (mp_limb_t, 0)) >> GMP_NAIL_BITS) -#define GMP_NUMB_MAX GMP_NUMB_MASK -#define GMP_NAIL_MASK (~ GMP_NUMB_MASK) - - -/* The following (everything under ifndef __GNU_MP__) must be identical in - gmp.h and mp.h to allow both to be included in an application or during - the library build. */ -#ifndef __GNU_MP__ -#define __GNU_MP__ 5 - -#include <stddef.h> /* for size_t */ -#include <limits.h> - -/* Instantiated by configure. */ -#if ! defined (__GMP_WITHIN_CONFIGURE) -@DEFN_LONG_LONG_LIMB@ -#define __GMP_LIBGMP_DLL @LIBGMP_DLL@ -#endif - - -/* __GMP_DECLSPEC supports Windows DLL versions of libgmp, and is empty in - all other circumstances. - - When compiling objects for libgmp, __GMP_DECLSPEC is an export directive, - or when compiling for an application it's an import directive. The two - cases are differentiated by __GMP_WITHIN_GMP defined by the GMP Makefiles - (and not defined from an application). - - __GMP_DECLSPEC_XX is similarly used for libgmpxx. __GMP_WITHIN_GMPXX - indicates when building libgmpxx, and in that case libgmpxx functions are - exports, but libgmp functions which might get called are imports. - - Libtool DLL_EXPORT define is not used. - - There's no attempt to support GMP built both static and DLL. Doing so - would mean applications would have to tell us which of the two is going - to be used when linking, and that seems very tedious and error prone if - using GMP by hand, and equally tedious from a package since autoconf and - automake don't give much help. - - __GMP_DECLSPEC is required on all documented global functions and - variables, the various internals in gmp-impl.h etc can be left unadorned. - But internals used by the test programs or speed measuring programs - should have __GMP_DECLSPEC, and certainly constants or variables must - have it or the wrong address will be resolved. - - In gcc __declspec can go at either the start or end of a prototype. - - In Microsoft C __declspec must go at the start, or after the type like - void __declspec(...) *foo()". There's no __dllexport or anything to - guard against someone foolish #defining dllexport. _export used to be - available, but no longer. - - In Borland C _export still exists, but needs to go after the type, like - "void _export foo();". Would have to change the __GMP_DECLSPEC syntax to - make use of that. Probably more trouble than it's worth. */ - -#if defined (__GNUC__) -#define __GMP_DECLSPEC_EXPORT __declspec(__dllexport__) -#define __GMP_DECLSPEC_IMPORT __declspec(__dllimport__) -#endif -#if defined (_MSC_VER) || defined (__BORLANDC__) -#define __GMP_DECLSPEC_EXPORT __declspec(dllexport) -#define __GMP_DECLSPEC_IMPORT __declspec(dllimport) -#endif -#ifdef __WATCOMC__ -#define __GMP_DECLSPEC_EXPORT __export -#define __GMP_DECLSPEC_IMPORT __import -#endif -#ifdef __IBMC__ -#define __GMP_DECLSPEC_EXPORT _Export -#define __GMP_DECLSPEC_IMPORT _Import -#endif - -#if __GMP_LIBGMP_DLL -#ifdef __GMP_WITHIN_GMP -/* compiling to go into a DLL libgmp */ -#define __GMP_DECLSPEC __GMP_DECLSPEC_EXPORT -#else -/* compiling to go into an application which will link to a DLL libgmp */ -#define __GMP_DECLSPEC __GMP_DECLSPEC_IMPORT -#endif -#else -/* all other cases */ -#define __GMP_DECLSPEC -#endif - - -#ifdef __GMP_SHORT_LIMB -typedef unsigned int mp_limb_t; -typedef int mp_limb_signed_t; -#else -#ifdef _LONG_LONG_LIMB -typedef unsigned long long int mp_limb_t; -typedef long long int mp_limb_signed_t; -#else -typedef unsigned long int mp_limb_t; -typedef long int mp_limb_signed_t; -#endif -#endif -typedef unsigned long int mp_bitcnt_t; - -/* For reference, note that the name __mpz_struct gets into C++ mangled - function names, which means although the "__" suggests an internal, we - must leave this name for binary compatibility. */ -typedef struct -{ - int _mp_alloc; /* Number of *limbs* allocated and pointed - to by the _mp_d field. */ - int _mp_size; /* abs(_mp_size) is the number of limbs the - last field points to. If _mp_size is - negative this is a negative number. */ - mp_limb_t *_mp_d; /* Pointer to the limbs. */ -} __mpz_struct; - -#endif /* __GNU_MP__ */ - - -typedef __mpz_struct MP_INT; /* gmp 1 source compatibility */ -typedef __mpz_struct mpz_t[1]; - -typedef mp_limb_t * mp_ptr; -typedef const mp_limb_t * mp_srcptr; -#if defined (_CRAY) && ! defined (_CRAYMPP) -/* plain `int' is much faster (48 bits) */ -#define __GMP_MP_SIZE_T_INT 1 -typedef int mp_size_t; -typedef int mp_exp_t; -#else -#define __GMP_MP_SIZE_T_INT 0 -typedef long int mp_size_t; -typedef long int mp_exp_t; -#endif - -typedef struct -{ - __mpz_struct _mp_num; - __mpz_struct _mp_den; -} __mpq_struct; - -typedef __mpq_struct MP_RAT; /* gmp 1 source compatibility */ -typedef __mpq_struct mpq_t[1]; - -typedef struct -{ - int _mp_prec; /* Max precision, in number of `mp_limb_t's. - Set by mpf_init and modified by - mpf_set_prec. The area pointed to by the - _mp_d field contains `prec' + 1 limbs. */ - int _mp_size; /* abs(_mp_size) is the number of limbs the - last field points to. If _mp_size is - negative this is a negative number. */ - mp_exp_t _mp_exp; /* Exponent, in the base of `mp_limb_t'. */ - mp_limb_t *_mp_d; /* Pointer to the limbs. */ -} __mpf_struct; - -/* typedef __mpf_struct MP_FLOAT; */ -typedef __mpf_struct mpf_t[1]; - -/* Available random number generation algorithms. */ -typedef enum -{ - GMP_RAND_ALG_DEFAULT = 0, - GMP_RAND_ALG_LC = GMP_RAND_ALG_DEFAULT /* Linear congruential. */ -} gmp_randalg_t; - -/* Random state struct. */ -typedef struct -{ - mpz_t _mp_seed; /* _mp_d member points to state of the generator. */ - gmp_randalg_t _mp_alg; /* Currently unused. */ - union { - void *_mp_lc; /* Pointer to function pointers structure. */ - } _mp_algdata; -} __gmp_randstate_struct; -typedef __gmp_randstate_struct gmp_randstate_t[1]; - -/* Types for function declarations in gmp files. */ -/* ??? Should not pollute user name space with these ??? */ -typedef const __mpz_struct *mpz_srcptr; -typedef __mpz_struct *mpz_ptr; -typedef const __mpf_struct *mpf_srcptr; -typedef __mpf_struct *mpf_ptr; -typedef const __mpq_struct *mpq_srcptr; -typedef __mpq_struct *mpq_ptr; - - -/* This is not wanted in mp.h, so put it outside the __GNU_MP__ common - section. */ -#if __GMP_LIBGMP_DLL -#ifdef __GMP_WITHIN_GMPXX -/* compiling to go into a DLL libgmpxx */ -#define __GMP_DECLSPEC_XX __GMP_DECLSPEC_EXPORT -#else -/* compiling to go into a application which will link to a DLL libgmpxx */ -#define __GMP_DECLSPEC_XX __GMP_DECLSPEC_IMPORT -#endif -#else -/* all other cases */ -#define __GMP_DECLSPEC_XX -#endif - - -#ifndef __MPN -#define __MPN(x) __gmpn_##x -#endif - -/* For reference, "defined(EOF)" cannot be used here. In g++ 2.95.4, - <iostream> defines EOF but not FILE. */ -#if defined (FILE) \ - || defined (H_STDIO) \ - || defined (_H_STDIO) /* AIX */ \ - || defined (_STDIO_H) /* glibc, Sun, SCO */ \ - || defined (_STDIO_H_) /* BSD, OSF */ \ - || defined (__STDIO_H) /* Borland */ \ - || defined (__STDIO_H__) /* IRIX */ \ - || defined (_STDIO_INCLUDED) /* HPUX */ \ - || defined (__dj_include_stdio_h_) /* DJGPP */ \ - || defined (_FILE_DEFINED) /* Microsoft */ \ - || defined (__STDIO__) /* Apple MPW MrC */ \ - || defined (_MSL_STDIO_H) /* Metrowerks */ \ - || defined (_STDIO_H_INCLUDED) /* QNX4 */ \ - || defined (_ISO_STDIO_ISO_H) /* Sun C++ */ \ - || defined (__STDIO_LOADED) /* VMS */ -#define _GMP_H_HAVE_FILE 1 -#endif - -/* In ISO C, if a prototype involving "struct obstack *" is given without - that structure defined, then the struct is scoped down to just the - prototype, causing a conflict if it's subsequently defined for real. So - only give prototypes if we've got obstack.h. */ -#if defined (_OBSTACK_H) /* glibc <obstack.h> */ -#define _GMP_H_HAVE_OBSTACK 1 -#endif - -/* The prototypes for gmp_vprintf etc are provided only if va_list is defined, - via an application having included <stdarg.h>. Usually va_list is a typedef - so can't be tested directly, but C99 specifies that va_start is a macro. - - <stdio.h> will define some sort of va_list for vprintf and vfprintf, but - let's not bother trying to use that since it's not standard and since - application uses for gmp_vprintf etc will almost certainly require the - whole <stdarg.h> anyway. */ - -#ifdef va_start -#define _GMP_H_HAVE_VA_LIST 1 -#endif - -/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */ -#if defined (__GNUC__) && defined (__GNUC_MINOR__) -#define __GMP_GNUC_PREREQ(maj, min) \ - ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) -#else -#define __GMP_GNUC_PREREQ(maj, min) 0 -#endif - -/* "pure" is in gcc 2.96 and up, see "(gcc)Function Attributes". Basically - it means a function does nothing but examine its arguments and memory - (global or via arguments) to generate a return value, but changes nothing - and has no side-effects. __GMP_NO_ATTRIBUTE_CONST_PURE lets - tune/common.c etc turn this off when trying to write timing loops. */ -#if __GMP_GNUC_PREREQ (2,96) && ! defined (__GMP_NO_ATTRIBUTE_CONST_PURE) -#define __GMP_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -#define __GMP_ATTRIBUTE_PURE -#endif - - -/* __GMP_CAST allows us to use static_cast in C++, so our macros are clean - to "g++ -Wold-style-cast". - - Casts in "extern inline" code within an extern "C" block don't induce - these warnings, so __GMP_CAST only needs to be used on documented - macros. */ - -#ifdef __cplusplus -#define __GMP_CAST(type, expr) (static_cast<type> (expr)) -#else -#define __GMP_CAST(type, expr) ((type) (expr)) -#endif - - -/* An empty "throw ()" means the function doesn't throw any C++ exceptions, - this can save some stack frame info in applications. - - Currently it's given only on functions which never divide-by-zero etc, - don't allocate memory, and are expected to never need to allocate memory. - This leaves open the possibility of a C++ throw from a future GMP - exceptions scheme. - - mpz_set_ui etc are omitted to leave open the lazy allocation scheme - described in doc/tasks.html. mpz_get_d etc are omitted to leave open - exceptions for float overflows. - - Note that __GMP_NOTHROW must be given on any inlines the same as on their - prototypes (for g++ at least, where they're used together). Note also - that g++ 3.0 demands that __GMP_NOTHROW is before other attributes like - __GMP_ATTRIBUTE_PURE. */ - -#if defined (__cplusplus) -#define __GMP_NOTHROW throw () -#else -#define __GMP_NOTHROW -#endif - - -/* PORTME: What other compilers have a useful "extern inline"? "static - inline" would be an acceptable substitute if the compiler (or linker) - discards unused statics. */ - - /* gcc has __inline__ in all modes, including strict ansi. Give a prototype - for an inline too, so as to correctly specify "dllimport" on windows, in - case the function is called rather than inlined. - GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 - inline semantics, unless -fgnu89-inline is used. */ -#ifdef __GNUC__ -#if (defined __GNUC_STDC_INLINE__) || (__GNUC__ == 4 && __GNUC_MINOR__ == 2) \ - || (defined __GNUC_GNU_INLINE__ && defined __cplusplus) -#define __GMP_EXTERN_INLINE extern __inline__ __attribute__ ((__gnu_inline__)) -#else -#define __GMP_EXTERN_INLINE extern __inline__ -#endif -#define __GMP_INLINE_PROTOTYPES 1 -#endif - -/* DEC C (eg. version 5.9) supports "static __inline foo()", even in -std1 - strict ANSI mode. Inlining is done even when not optimizing (ie. -O0 - mode, which is the default), but an unnecessary local copy of foo is - emitted unless -O is used. "extern __inline" is accepted, but the - "extern" appears to be ignored, ie. it becomes a plain global function - but which is inlined within its file. Don't know if all old versions of - DEC C supported __inline, but as a start let's do the right thing for - current versions. */ -#ifdef __DECC -#define __GMP_EXTERN_INLINE static __inline -#endif - -/* SCO OpenUNIX 8 cc supports "static inline foo()" but not in -Xc strict - ANSI mode (__STDC__ is 1 in that mode). Inlining only actually takes - place under -O. Without -O "foo" seems to be emitted whether it's used - or not, which is wasteful. "extern inline foo()" isn't useful, the - "extern" is apparently ignored, so foo is inlined if possible but also - emitted as a global, which causes multiple definition errors when - building a shared libgmp. */ -#ifdef __SCO_VERSION__ -#if __SCO_VERSION__ > 400000000 && __STDC__ != 1 \ - && ! defined (__GMP_EXTERN_INLINE) -#define __GMP_EXTERN_INLINE static inline -#endif -#endif - -/* Microsoft's C compiler accepts __inline */ -#ifdef _MSC_VER -#define __GMP_EXTERN_INLINE __inline -#endif - -/* Recent enough Sun C compilers want "inline" */ -#if defined (__SUNPRO_C) && __SUNPRO_C >= 0x560 \ - && ! defined (__GMP_EXTERN_INLINE) -#define __GMP_EXTERN_INLINE inline -#endif - -/* Somewhat older Sun C compilers want "static inline" */ -#if defined (__SUNPRO_C) && __SUNPRO_C >= 0x540 \ - && ! defined (__GMP_EXTERN_INLINE) -#define __GMP_EXTERN_INLINE static inline -#endif - - -/* C++ always has "inline" and since it's a normal feature the linker should - discard duplicate non-inlined copies, or if it doesn't then that's a - problem for everyone, not just GMP. */ -#if defined (__cplusplus) && ! defined (__GMP_EXTERN_INLINE) -#define __GMP_EXTERN_INLINE inline -#endif - -/* Don't do any inlining within a configure run, since if the compiler ends - up emitting copies of the code into the object file it can end up - demanding the various support routines (like mpn_popcount) for linking, - making the "alloca" test and perhaps others fail. And on hppa ia64 a - pre-release gcc 3.2 was seen not respecting the "extern" in "extern - __inline__", triggering this problem too. */ -#if defined (__GMP_WITHIN_CONFIGURE) && ! __GMP_WITHIN_CONFIGURE_INLINE -#undef __GMP_EXTERN_INLINE -#endif - -/* By default, don't give a prototype when there's going to be an inline - version. Note in particular that Cray C++ objects to the combination of - prototype and inline. */ -#ifdef __GMP_EXTERN_INLINE -#ifndef __GMP_INLINE_PROTOTYPES -#define __GMP_INLINE_PROTOTYPES 0 -#endif -#else -#define __GMP_INLINE_PROTOTYPES 1 -#endif - - -#define __GMP_ABS(x) ((x) >= 0 ? (x) : -(x)) -#define __GMP_MAX(h,i) ((h) > (i) ? (h) : (i)) - - -/* __builtin_expect is in gcc 3.0, and not in 2.95. */ -#if __GMP_GNUC_PREREQ (3,0) -#define __GMP_LIKELY(cond) __builtin_expect ((cond) != 0, 1) -#define __GMP_UNLIKELY(cond) __builtin_expect ((cond) != 0, 0) -#else -#define __GMP_LIKELY(cond) (cond) -#define __GMP_UNLIKELY(cond) (cond) -#endif - -#ifdef _CRAY -#define __GMP_CRAY_Pragma(str) _Pragma (str) -#else -#define __GMP_CRAY_Pragma(str) -#endif - - -/* Allow direct user access to numerator and denominator of an mpq_t object. */ -#define mpq_numref(Q) (&((Q)->_mp_num)) -#define mpq_denref(Q) (&((Q)->_mp_den)) - - -#if defined (__cplusplus) -extern "C" { -using std::FILE; -#endif - -#define mp_set_memory_functions __gmp_set_memory_functions -__GMP_DECLSPEC void mp_set_memory_functions (void *(*) (size_t), - void *(*) (void *, size_t, size_t), - void (*) (void *, size_t)) __GMP_NOTHROW; - -#define mp_get_memory_functions __gmp_get_memory_functions -__GMP_DECLSPEC void mp_get_memory_functions (void *(**) (size_t), - void *(**) (void *, size_t, size_t), - void (**) (void *, size_t)) __GMP_NOTHROW; - -#define mp_bits_per_limb __gmp_bits_per_limb -__GMP_DECLSPEC extern const int mp_bits_per_limb; - -#define gmp_errno __gmp_errno -__GMP_DECLSPEC extern int gmp_errno; - -#define gmp_version __gmp_version -__GMP_DECLSPEC extern const char * const gmp_version; - - -/**************** Random number routines. ****************/ - -/* obsolete */ -#define gmp_randinit __gmp_randinit -__GMP_DECLSPEC void gmp_randinit (gmp_randstate_t, gmp_randalg_t, ...); - -#define gmp_randinit_default __gmp_randinit_default -__GMP_DECLSPEC void gmp_randinit_default (gmp_randstate_t); - -#define gmp_randinit_lc_2exp __gmp_randinit_lc_2exp -__GMP_DECLSPEC void gmp_randinit_lc_2exp (gmp_randstate_t, mpz_srcptr, unsigned long int, mp_bitcnt_t); - -#define gmp_randinit_lc_2exp_size __gmp_randinit_lc_2exp_size -__GMP_DECLSPEC int gmp_randinit_lc_2exp_size (gmp_randstate_t, mp_bitcnt_t); - -#define gmp_randinit_mt __gmp_randinit_mt -__GMP_DECLSPEC void gmp_randinit_mt (gmp_randstate_t); - -#define gmp_randinit_set __gmp_randinit_set -__GMP_DECLSPEC void gmp_randinit_set (gmp_randstate_t, const __gmp_randstate_struct *); - -#define gmp_randseed __gmp_randseed -__GMP_DECLSPEC void gmp_randseed (gmp_randstate_t, mpz_srcptr); - -#define gmp_randseed_ui __gmp_randseed_ui -__GMP_DECLSPEC void gmp_randseed_ui (gmp_randstate_t, unsigned long int); - -#define gmp_randclear __gmp_randclear -__GMP_DECLSPEC void gmp_randclear (gmp_randstate_t); - -#define gmp_urandomb_ui __gmp_urandomb_ui -__GMP_DECLSPEC unsigned long gmp_urandomb_ui (gmp_randstate_t, unsigned long); - -#define gmp_urandomm_ui __gmp_urandomm_ui -__GMP_DECLSPEC unsigned long gmp_urandomm_ui (gmp_randstate_t, unsigned long); - - -/**************** Formatted output routines. ****************/ - -#define gmp_asprintf __gmp_asprintf -__GMP_DECLSPEC int gmp_asprintf (char **, const char *, ...); - -#define gmp_fprintf __gmp_fprintf -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC int gmp_fprintf (FILE *, const char *, ...); -#endif - -#define gmp_obstack_printf __gmp_obstack_printf -#if defined (_GMP_H_HAVE_OBSTACK) -__GMP_DECLSPEC int gmp_obstack_printf (struct obstack *, const char *, ...); -#endif - -#define gmp_obstack_vprintf __gmp_obstack_vprintf -#if defined (_GMP_H_HAVE_OBSTACK) && defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_obstack_vprintf (struct obstack *, const char *, va_list); -#endif - -#define gmp_printf __gmp_printf -__GMP_DECLSPEC int gmp_printf (const char *, ...); - -#define gmp_snprintf __gmp_snprintf -__GMP_DECLSPEC int gmp_snprintf (char *, size_t, const char *, ...); - -#define gmp_sprintf __gmp_sprintf -__GMP_DECLSPEC int gmp_sprintf (char *, const char *, ...); - -#define gmp_vasprintf __gmp_vasprintf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vasprintf (char **, const char *, va_list); -#endif - -#define gmp_vfprintf __gmp_vfprintf -#if defined (_GMP_H_HAVE_FILE) && defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vfprintf (FILE *, const char *, va_list); -#endif - -#define gmp_vprintf __gmp_vprintf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vprintf (const char *, va_list); -#endif - -#define gmp_vsnprintf __gmp_vsnprintf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vsnprintf (char *, size_t, const char *, va_list); -#endif - -#define gmp_vsprintf __gmp_vsprintf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vsprintf (char *, const char *, va_list); -#endif - - -/**************** Formatted input routines. ****************/ - -#define gmp_fscanf __gmp_fscanf -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC int gmp_fscanf (FILE *, const char *, ...); -#endif - -#define gmp_scanf __gmp_scanf -__GMP_DECLSPEC int gmp_scanf (const char *, ...); - -#define gmp_sscanf __gmp_sscanf -__GMP_DECLSPEC int gmp_sscanf (const char *, const char *, ...); - -#define gmp_vfscanf __gmp_vfscanf -#if defined (_GMP_H_HAVE_FILE) && defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vfscanf (FILE *, const char *, va_list); -#endif - -#define gmp_vscanf __gmp_vscanf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vscanf (const char *, va_list); -#endif - -#define gmp_vsscanf __gmp_vsscanf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vsscanf (const char *, const char *, va_list); -#endif - - -/**************** Integer (i.e. Z) routines. ****************/ - -#define _mpz_realloc __gmpz_realloc -#define mpz_realloc __gmpz_realloc -__GMP_DECLSPEC void *_mpz_realloc (mpz_ptr, mp_size_t); - -#define mpz_abs __gmpz_abs -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_abs) -__GMP_DECLSPEC void mpz_abs (mpz_ptr, mpz_srcptr); -#endif - -#define mpz_add __gmpz_add -__GMP_DECLSPEC void mpz_add (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_add_ui __gmpz_add_ui -__GMP_DECLSPEC void mpz_add_ui (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_addmul __gmpz_addmul -__GMP_DECLSPEC void mpz_addmul (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_addmul_ui __gmpz_addmul_ui -__GMP_DECLSPEC void mpz_addmul_ui (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_and __gmpz_and -__GMP_DECLSPEC void mpz_and (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_array_init __gmpz_array_init -__GMP_DECLSPEC void mpz_array_init (mpz_ptr, mp_size_t, mp_size_t); - -#define mpz_bin_ui __gmpz_bin_ui -__GMP_DECLSPEC void mpz_bin_ui (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_bin_uiui __gmpz_bin_uiui -__GMP_DECLSPEC void mpz_bin_uiui (mpz_ptr, unsigned long int, unsigned long int); - -#define mpz_cdiv_q __gmpz_cdiv_q -__GMP_DECLSPEC void mpz_cdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_cdiv_q_2exp __gmpz_cdiv_q_2exp -__GMP_DECLSPEC void mpz_cdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); - -#define mpz_cdiv_q_ui __gmpz_cdiv_q_ui -__GMP_DECLSPEC unsigned long int mpz_cdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_cdiv_qr __gmpz_cdiv_qr -__GMP_DECLSPEC void mpz_cdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_cdiv_qr_ui __gmpz_cdiv_qr_ui -__GMP_DECLSPEC unsigned long int mpz_cdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_cdiv_r __gmpz_cdiv_r -__GMP_DECLSPEC void mpz_cdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_cdiv_r_2exp __gmpz_cdiv_r_2exp -__GMP_DECLSPEC void mpz_cdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); - -#define mpz_cdiv_r_ui __gmpz_cdiv_r_ui -__GMP_DECLSPEC unsigned long int mpz_cdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_cdiv_ui __gmpz_cdiv_ui -__GMP_DECLSPEC unsigned long int mpz_cdiv_ui (mpz_srcptr, unsigned long int) __GMP_ATTRIBUTE_PURE; - -#define mpz_clear __gmpz_clear -__GMP_DECLSPEC void mpz_clear (mpz_ptr); - -#define mpz_clears __gmpz_clears -__GMP_DECLSPEC void mpz_clears (mpz_ptr, ...); - -#define mpz_clrbit __gmpz_clrbit -__GMP_DECLSPEC void mpz_clrbit (mpz_ptr, mp_bitcnt_t); - -#define mpz_cmp __gmpz_cmp -__GMP_DECLSPEC int mpz_cmp (mpz_srcptr, mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_cmp_d __gmpz_cmp_d -__GMP_DECLSPEC int mpz_cmp_d (mpz_srcptr, double) __GMP_ATTRIBUTE_PURE; - -#define _mpz_cmp_si __gmpz_cmp_si -__GMP_DECLSPEC int _mpz_cmp_si (mpz_srcptr, signed long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define _mpz_cmp_ui __gmpz_cmp_ui -__GMP_DECLSPEC int _mpz_cmp_ui (mpz_srcptr, unsigned long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_cmpabs __gmpz_cmpabs -__GMP_DECLSPEC int mpz_cmpabs (mpz_srcptr, mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_cmpabs_d __gmpz_cmpabs_d -__GMP_DECLSPEC int mpz_cmpabs_d (mpz_srcptr, double) __GMP_ATTRIBUTE_PURE; - -#define mpz_cmpabs_ui __gmpz_cmpabs_ui -__GMP_DECLSPEC int mpz_cmpabs_ui (mpz_srcptr, unsigned long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_com __gmpz_com -__GMP_DECLSPEC void mpz_com (mpz_ptr, mpz_srcptr); - -#define mpz_combit __gmpz_combit -__GMP_DECLSPEC void mpz_combit (mpz_ptr, mp_bitcnt_t); - -#define mpz_congruent_p __gmpz_congruent_p -__GMP_DECLSPEC int mpz_congruent_p (mpz_srcptr, mpz_srcptr, mpz_srcptr) __GMP_ATTRIBUTE_PURE; - -#define mpz_congruent_2exp_p __gmpz_congruent_2exp_p -__GMP_DECLSPEC int mpz_congruent_2exp_p (mpz_srcptr, mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_congruent_ui_p __gmpz_congruent_ui_p -__GMP_DECLSPEC int mpz_congruent_ui_p (mpz_srcptr, unsigned long, unsigned long) __GMP_ATTRIBUTE_PURE; - -#define mpz_divexact __gmpz_divexact -__GMP_DECLSPEC void mpz_divexact (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_divexact_ui __gmpz_divexact_ui -__GMP_DECLSPEC void mpz_divexact_ui (mpz_ptr, mpz_srcptr, unsigned long); - -#define mpz_divisible_p __gmpz_divisible_p -__GMP_DECLSPEC int mpz_divisible_p (mpz_srcptr, mpz_srcptr) __GMP_ATTRIBUTE_PURE; - -#define mpz_divisible_ui_p __gmpz_divisible_ui_p -__GMP_DECLSPEC int mpz_divisible_ui_p (mpz_srcptr, unsigned long) __GMP_ATTRIBUTE_PURE; - -#define mpz_divisible_2exp_p __gmpz_divisible_2exp_p -__GMP_DECLSPEC int mpz_divisible_2exp_p (mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_dump __gmpz_dump -__GMP_DECLSPEC void mpz_dump (mpz_srcptr); - -#define mpz_export __gmpz_export -__GMP_DECLSPEC void *mpz_export (void *, size_t *, int, size_t, int, size_t, mpz_srcptr); - -#define mpz_fac_ui __gmpz_fac_ui -__GMP_DECLSPEC void mpz_fac_ui (mpz_ptr, unsigned long int); - -#define mpz_2fac_ui __gmpz_2fac_ui -__GMP_DECLSPEC void mpz_2fac_ui (mpz_ptr, unsigned long int); - -#define mpz_mfac_uiui __gmpz_mfac_uiui -__GMP_DECLSPEC void mpz_mfac_uiui (mpz_ptr, unsigned long int, unsigned long int); - -#define mpz_primorial_ui __gmpz_primorial_ui -__GMP_DECLSPEC void mpz_primorial_ui (mpz_ptr, unsigned long int); - -#define mpz_fdiv_q __gmpz_fdiv_q -__GMP_DECLSPEC void mpz_fdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_fdiv_q_2exp __gmpz_fdiv_q_2exp -__GMP_DECLSPEC void mpz_fdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); - -#define mpz_fdiv_q_ui __gmpz_fdiv_q_ui -__GMP_DECLSPEC unsigned long int mpz_fdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_fdiv_qr __gmpz_fdiv_qr -__GMP_DECLSPEC void mpz_fdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_fdiv_qr_ui __gmpz_fdiv_qr_ui -__GMP_DECLSPEC unsigned long int mpz_fdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_fdiv_r __gmpz_fdiv_r -__GMP_DECLSPEC void mpz_fdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_fdiv_r_2exp __gmpz_fdiv_r_2exp -__GMP_DECLSPEC void mpz_fdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); - -#define mpz_fdiv_r_ui __gmpz_fdiv_r_ui -__GMP_DECLSPEC unsigned long int mpz_fdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_fdiv_ui __gmpz_fdiv_ui -__GMP_DECLSPEC unsigned long int mpz_fdiv_ui (mpz_srcptr, unsigned long int) __GMP_ATTRIBUTE_PURE; - -#define mpz_fib_ui __gmpz_fib_ui -__GMP_DECLSPEC void mpz_fib_ui (mpz_ptr, unsigned long int); - -#define mpz_fib2_ui __gmpz_fib2_ui -__GMP_DECLSPEC void mpz_fib2_ui (mpz_ptr, mpz_ptr, unsigned long int); - -#define mpz_fits_sint_p __gmpz_fits_sint_p -__GMP_DECLSPEC int mpz_fits_sint_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_fits_slong_p __gmpz_fits_slong_p -__GMP_DECLSPEC int mpz_fits_slong_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_fits_sshort_p __gmpz_fits_sshort_p -__GMP_DECLSPEC int mpz_fits_sshort_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_fits_uint_p __gmpz_fits_uint_p -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_uint_p) -__GMP_DECLSPEC int mpz_fits_uint_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_fits_ulong_p __gmpz_fits_ulong_p -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_ulong_p) -__GMP_DECLSPEC int mpz_fits_ulong_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_fits_ushort_p __gmpz_fits_ushort_p -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_ushort_p) -__GMP_DECLSPEC int mpz_fits_ushort_p (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_gcd __gmpz_gcd -__GMP_DECLSPEC void mpz_gcd (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_gcd_ui __gmpz_gcd_ui -__GMP_DECLSPEC unsigned long int mpz_gcd_ui (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_gcdext __gmpz_gcdext -__GMP_DECLSPEC void mpz_gcdext (mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_get_d __gmpz_get_d -__GMP_DECLSPEC double mpz_get_d (mpz_srcptr) __GMP_ATTRIBUTE_PURE; - -#define mpz_get_d_2exp __gmpz_get_d_2exp -__GMP_DECLSPEC double mpz_get_d_2exp (signed long int *, mpz_srcptr); - -#define mpz_get_si __gmpz_get_si -__GMP_DECLSPEC /* signed */ long int mpz_get_si (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_get_str __gmpz_get_str -__GMP_DECLSPEC char *mpz_get_str (char *, int, mpz_srcptr); - -#define mpz_get_ui __gmpz_get_ui -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_get_ui) -__GMP_DECLSPEC unsigned long int mpz_get_ui (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_getlimbn __gmpz_getlimbn -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_getlimbn) -__GMP_DECLSPEC mp_limb_t mpz_getlimbn (mpz_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_hamdist __gmpz_hamdist -__GMP_DECLSPEC mp_bitcnt_t mpz_hamdist (mpz_srcptr, mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_import __gmpz_import -__GMP_DECLSPEC void mpz_import (mpz_ptr, size_t, int, size_t, int, size_t, const void *); - -#define mpz_init __gmpz_init -__GMP_DECLSPEC void mpz_init (mpz_ptr); - -#define mpz_init2 __gmpz_init2 -__GMP_DECLSPEC void mpz_init2 (mpz_ptr, mp_bitcnt_t); - -#define mpz_inits __gmpz_inits -__GMP_DECLSPEC void mpz_inits (mpz_ptr, ...); - -#define mpz_init_set __gmpz_init_set -__GMP_DECLSPEC void mpz_init_set (mpz_ptr, mpz_srcptr); - -#define mpz_init_set_d __gmpz_init_set_d -__GMP_DECLSPEC void mpz_init_set_d (mpz_ptr, double); - -#define mpz_init_set_si __gmpz_init_set_si -__GMP_DECLSPEC void mpz_init_set_si (mpz_ptr, signed long int); - -#define mpz_init_set_str __gmpz_init_set_str -__GMP_DECLSPEC int mpz_init_set_str (mpz_ptr, const char *, int); - -#define mpz_init_set_ui __gmpz_init_set_ui -__GMP_DECLSPEC void mpz_init_set_ui (mpz_ptr, unsigned long int); - -#define mpz_inp_raw __gmpz_inp_raw -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpz_inp_raw (mpz_ptr, FILE *); -#endif - -#define mpz_inp_str __gmpz_inp_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpz_inp_str (mpz_ptr, FILE *, int); -#endif - -#define mpz_invert __gmpz_invert -__GMP_DECLSPEC int mpz_invert (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_ior __gmpz_ior -__GMP_DECLSPEC void mpz_ior (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_jacobi __gmpz_jacobi -__GMP_DECLSPEC int mpz_jacobi (mpz_srcptr, mpz_srcptr) __GMP_ATTRIBUTE_PURE; - -#define mpz_kronecker mpz_jacobi /* alias */ - -#define mpz_kronecker_si __gmpz_kronecker_si -__GMP_DECLSPEC int mpz_kronecker_si (mpz_srcptr, long) __GMP_ATTRIBUTE_PURE; - -#define mpz_kronecker_ui __gmpz_kronecker_ui -__GMP_DECLSPEC int mpz_kronecker_ui (mpz_srcptr, unsigned long) __GMP_ATTRIBUTE_PURE; - -#define mpz_si_kronecker __gmpz_si_kronecker -__GMP_DECLSPEC int mpz_si_kronecker (long, mpz_srcptr) __GMP_ATTRIBUTE_PURE; - -#define mpz_ui_kronecker __gmpz_ui_kronecker -__GMP_DECLSPEC int mpz_ui_kronecker (unsigned long, mpz_srcptr) __GMP_ATTRIBUTE_PURE; - -#define mpz_lcm __gmpz_lcm -__GMP_DECLSPEC void mpz_lcm (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_lcm_ui __gmpz_lcm_ui -__GMP_DECLSPEC void mpz_lcm_ui (mpz_ptr, mpz_srcptr, unsigned long); - -#define mpz_legendre mpz_jacobi /* alias */ - -#define mpz_lucnum_ui __gmpz_lucnum_ui -__GMP_DECLSPEC void mpz_lucnum_ui (mpz_ptr, unsigned long int); - -#define mpz_lucnum2_ui __gmpz_lucnum2_ui -__GMP_DECLSPEC void mpz_lucnum2_ui (mpz_ptr, mpz_ptr, unsigned long int); - -#define mpz_millerrabin __gmpz_millerrabin -__GMP_DECLSPEC int mpz_millerrabin (mpz_srcptr, int) __GMP_ATTRIBUTE_PURE; - -#define mpz_mod __gmpz_mod -__GMP_DECLSPEC void mpz_mod (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_mod_ui mpz_fdiv_r_ui /* same as fdiv_r because divisor unsigned */ - -#define mpz_mul __gmpz_mul -__GMP_DECLSPEC void mpz_mul (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_mul_2exp __gmpz_mul_2exp -__GMP_DECLSPEC void mpz_mul_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); - -#define mpz_mul_si __gmpz_mul_si -__GMP_DECLSPEC void mpz_mul_si (mpz_ptr, mpz_srcptr, long int); - -#define mpz_mul_ui __gmpz_mul_ui -__GMP_DECLSPEC void mpz_mul_ui (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_neg __gmpz_neg -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_neg) -__GMP_DECLSPEC void mpz_neg (mpz_ptr, mpz_srcptr); -#endif - -#define mpz_nextprime __gmpz_nextprime -__GMP_DECLSPEC void mpz_nextprime (mpz_ptr, mpz_srcptr); - -#define mpz_out_raw __gmpz_out_raw -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpz_out_raw (FILE *, mpz_srcptr); -#endif - -#define mpz_out_str __gmpz_out_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpz_out_str (FILE *, int, mpz_srcptr); -#endif - -#define mpz_perfect_power_p __gmpz_perfect_power_p -__GMP_DECLSPEC int mpz_perfect_power_p (mpz_srcptr) __GMP_ATTRIBUTE_PURE; - -#define mpz_perfect_square_p __gmpz_perfect_square_p -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_perfect_square_p) -__GMP_DECLSPEC int mpz_perfect_square_p (mpz_srcptr) __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_popcount __gmpz_popcount -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_popcount) -__GMP_DECLSPEC mp_bitcnt_t mpz_popcount (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_pow_ui __gmpz_pow_ui -__GMP_DECLSPEC void mpz_pow_ui (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_powm __gmpz_powm -__GMP_DECLSPEC void mpz_powm (mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr); - -#define mpz_powm_sec __gmpz_powm_sec -__GMP_DECLSPEC void mpz_powm_sec (mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr); - -#define mpz_powm_ui __gmpz_powm_ui -__GMP_DECLSPEC void mpz_powm_ui (mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr); - -#define mpz_probab_prime_p __gmpz_probab_prime_p -__GMP_DECLSPEC int mpz_probab_prime_p (mpz_srcptr, int) __GMP_ATTRIBUTE_PURE; - -#define mpz_random __gmpz_random -__GMP_DECLSPEC void mpz_random (mpz_ptr, mp_size_t); - -#define mpz_random2 __gmpz_random2 -__GMP_DECLSPEC void mpz_random2 (mpz_ptr, mp_size_t); - -#define mpz_realloc2 __gmpz_realloc2 -__GMP_DECLSPEC void mpz_realloc2 (mpz_ptr, mp_bitcnt_t); - -#define mpz_remove __gmpz_remove -__GMP_DECLSPEC mp_bitcnt_t mpz_remove (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_root __gmpz_root -__GMP_DECLSPEC int mpz_root (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_rootrem __gmpz_rootrem -__GMP_DECLSPEC void mpz_rootrem (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_rrandomb __gmpz_rrandomb -__GMP_DECLSPEC void mpz_rrandomb (mpz_ptr, gmp_randstate_t, mp_bitcnt_t); - -#define mpz_scan0 __gmpz_scan0 -__GMP_DECLSPEC mp_bitcnt_t mpz_scan0 (mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_scan1 __gmpz_scan1 -__GMP_DECLSPEC mp_bitcnt_t mpz_scan1 (mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_set __gmpz_set -__GMP_DECLSPEC void mpz_set (mpz_ptr, mpz_srcptr); - -#define mpz_set_d __gmpz_set_d -__GMP_DECLSPEC void mpz_set_d (mpz_ptr, double); - -#define mpz_set_f __gmpz_set_f -__GMP_DECLSPEC void mpz_set_f (mpz_ptr, mpf_srcptr); - -#define mpz_set_q __gmpz_set_q -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_set_q) -__GMP_DECLSPEC void mpz_set_q (mpz_ptr, mpq_srcptr); -#endif - -#define mpz_set_si __gmpz_set_si -__GMP_DECLSPEC void mpz_set_si (mpz_ptr, signed long int); - -#define mpz_set_str __gmpz_set_str -__GMP_DECLSPEC int mpz_set_str (mpz_ptr, const char *, int); - -#define mpz_set_ui __gmpz_set_ui -__GMP_DECLSPEC void mpz_set_ui (mpz_ptr, unsigned long int); - -#define mpz_setbit __gmpz_setbit -__GMP_DECLSPEC void mpz_setbit (mpz_ptr, mp_bitcnt_t); - -#define mpz_size __gmpz_size -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_size) -__GMP_DECLSPEC size_t mpz_size (mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_sizeinbase __gmpz_sizeinbase -__GMP_DECLSPEC size_t mpz_sizeinbase (mpz_srcptr, int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_sqrt __gmpz_sqrt -__GMP_DECLSPEC void mpz_sqrt (mpz_ptr, mpz_srcptr); - -#define mpz_sqrtrem __gmpz_sqrtrem -__GMP_DECLSPEC void mpz_sqrtrem (mpz_ptr, mpz_ptr, mpz_srcptr); - -#define mpz_sub __gmpz_sub -__GMP_DECLSPEC void mpz_sub (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_sub_ui __gmpz_sub_ui -__GMP_DECLSPEC void mpz_sub_ui (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_ui_sub __gmpz_ui_sub -__GMP_DECLSPEC void mpz_ui_sub (mpz_ptr, unsigned long int, mpz_srcptr); - -#define mpz_submul __gmpz_submul -__GMP_DECLSPEC void mpz_submul (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_submul_ui __gmpz_submul_ui -__GMP_DECLSPEC void mpz_submul_ui (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_swap __gmpz_swap -__GMP_DECLSPEC void mpz_swap (mpz_ptr, mpz_ptr) __GMP_NOTHROW; - -#define mpz_tdiv_ui __gmpz_tdiv_ui -__GMP_DECLSPEC unsigned long int mpz_tdiv_ui (mpz_srcptr, unsigned long int) __GMP_ATTRIBUTE_PURE; - -#define mpz_tdiv_q __gmpz_tdiv_q -__GMP_DECLSPEC void mpz_tdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_tdiv_q_2exp __gmpz_tdiv_q_2exp -__GMP_DECLSPEC void mpz_tdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); - -#define mpz_tdiv_q_ui __gmpz_tdiv_q_ui -__GMP_DECLSPEC unsigned long int mpz_tdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_tdiv_qr __gmpz_tdiv_qr -__GMP_DECLSPEC void mpz_tdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_tdiv_qr_ui __gmpz_tdiv_qr_ui -__GMP_DECLSPEC unsigned long int mpz_tdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_tdiv_r __gmpz_tdiv_r -__GMP_DECLSPEC void mpz_tdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_tdiv_r_2exp __gmpz_tdiv_r_2exp -__GMP_DECLSPEC void mpz_tdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); - -#define mpz_tdiv_r_ui __gmpz_tdiv_r_ui -__GMP_DECLSPEC unsigned long int mpz_tdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int); - -#define mpz_tstbit __gmpz_tstbit -__GMP_DECLSPEC int mpz_tstbit (mpz_srcptr, mp_bitcnt_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_ui_pow_ui __gmpz_ui_pow_ui -__GMP_DECLSPEC void mpz_ui_pow_ui (mpz_ptr, unsigned long int, unsigned long int); - -#define mpz_urandomb __gmpz_urandomb -__GMP_DECLSPEC void mpz_urandomb (mpz_ptr, gmp_randstate_t, mp_bitcnt_t); - -#define mpz_urandomm __gmpz_urandomm -__GMP_DECLSPEC void mpz_urandomm (mpz_ptr, gmp_randstate_t, mpz_srcptr); - -#define mpz_xor __gmpz_xor -#define mpz_eor __gmpz_xor -__GMP_DECLSPEC void mpz_xor (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_limbs_read __gmpz_limbs_read -__GMP_DECLSPEC mp_srcptr mpz_limbs_read (mpz_srcptr); - -#define mpz_limbs_write __gmpz_limbs_write -__GMP_DECLSPEC mp_ptr mpz_limbs_write (mpz_ptr, mp_size_t); - -#define mpz_limbs_modify __gmpz_limbs_modify -__GMP_DECLSPEC mp_ptr mpz_limbs_modify (mpz_ptr, mp_size_t); - -#define mpz_limbs_finish __gmpz_limbs_finish -__GMP_DECLSPEC void mpz_limbs_finish (mpz_ptr, mp_size_t); - -#define mpz_roinit_n __gmpz_roinit_n -__GMP_DECLSPEC mpz_srcptr mpz_roinit_n (mpz_ptr, mp_srcptr, mp_size_t); - -#define MPZ_ROINIT_N(xp, xs) {{0, (xs),(xp) }} - -/**************** Rational (i.e. Q) routines. ****************/ - -#define mpq_abs __gmpq_abs -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpq_abs) -__GMP_DECLSPEC void mpq_abs (mpq_ptr, mpq_srcptr); -#endif - -#define mpq_add __gmpq_add -__GMP_DECLSPEC void mpq_add (mpq_ptr, mpq_srcptr, mpq_srcptr); - -#define mpq_canonicalize __gmpq_canonicalize -__GMP_DECLSPEC void mpq_canonicalize (mpq_ptr); - -#define mpq_clear __gmpq_clear -__GMP_DECLSPEC void mpq_clear (mpq_ptr); - -#define mpq_clears __gmpq_clears -__GMP_DECLSPEC void mpq_clears (mpq_ptr, ...); - -#define mpq_cmp __gmpq_cmp -__GMP_DECLSPEC int mpq_cmp (mpq_srcptr, mpq_srcptr) __GMP_ATTRIBUTE_PURE; - -#define _mpq_cmp_si __gmpq_cmp_si -__GMP_DECLSPEC int _mpq_cmp_si (mpq_srcptr, long, unsigned long) __GMP_ATTRIBUTE_PURE; - -#define _mpq_cmp_ui __gmpq_cmp_ui -__GMP_DECLSPEC int _mpq_cmp_ui (mpq_srcptr, unsigned long int, unsigned long int) __GMP_ATTRIBUTE_PURE; - -#define mpq_cmp_z __gmpq_cmp_z -__GMP_DECLSPEC int mpq_cmp_z (mpq_srcptr, mpz_srcptr) __GMP_ATTRIBUTE_PURE; - -#define mpq_div __gmpq_div -__GMP_DECLSPEC void mpq_div (mpq_ptr, mpq_srcptr, mpq_srcptr); - -#define mpq_div_2exp __gmpq_div_2exp -__GMP_DECLSPEC void mpq_div_2exp (mpq_ptr, mpq_srcptr, mp_bitcnt_t); - -#define mpq_equal __gmpq_equal -__GMP_DECLSPEC int mpq_equal (mpq_srcptr, mpq_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpq_get_num __gmpq_get_num -__GMP_DECLSPEC void mpq_get_num (mpz_ptr, mpq_srcptr); - -#define mpq_get_den __gmpq_get_den -__GMP_DECLSPEC void mpq_get_den (mpz_ptr, mpq_srcptr); - -#define mpq_get_d __gmpq_get_d -__GMP_DECLSPEC double mpq_get_d (mpq_srcptr) __GMP_ATTRIBUTE_PURE; - -#define mpq_get_str __gmpq_get_str -__GMP_DECLSPEC char *mpq_get_str (char *, int, mpq_srcptr); - -#define mpq_init __gmpq_init -__GMP_DECLSPEC void mpq_init (mpq_ptr); - -#define mpq_inits __gmpq_inits -__GMP_DECLSPEC void mpq_inits (mpq_ptr, ...); - -#define mpq_inp_str __gmpq_inp_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpq_inp_str (mpq_ptr, FILE *, int); -#endif - -#define mpq_inv __gmpq_inv -__GMP_DECLSPEC void mpq_inv (mpq_ptr, mpq_srcptr); - -#define mpq_mul __gmpq_mul -__GMP_DECLSPEC void mpq_mul (mpq_ptr, mpq_srcptr, mpq_srcptr); - -#define mpq_mul_2exp __gmpq_mul_2exp -__GMP_DECLSPEC void mpq_mul_2exp (mpq_ptr, mpq_srcptr, mp_bitcnt_t); - -#define mpq_neg __gmpq_neg -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpq_neg) -__GMP_DECLSPEC void mpq_neg (mpq_ptr, mpq_srcptr); -#endif - -#define mpq_out_str __gmpq_out_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpq_out_str (FILE *, int, mpq_srcptr); -#endif - -#define mpq_set __gmpq_set -__GMP_DECLSPEC void mpq_set (mpq_ptr, mpq_srcptr); - -#define mpq_set_d __gmpq_set_d -__GMP_DECLSPEC void mpq_set_d (mpq_ptr, double); - -#define mpq_set_den __gmpq_set_den -__GMP_DECLSPEC void mpq_set_den (mpq_ptr, mpz_srcptr); - -#define mpq_set_f __gmpq_set_f -__GMP_DECLSPEC void mpq_set_f (mpq_ptr, mpf_srcptr); - -#define mpq_set_num __gmpq_set_num -__GMP_DECLSPEC void mpq_set_num (mpq_ptr, mpz_srcptr); - -#define mpq_set_si __gmpq_set_si -__GMP_DECLSPEC void mpq_set_si (mpq_ptr, signed long int, unsigned long int); - -#define mpq_set_str __gmpq_set_str -__GMP_DECLSPEC int mpq_set_str (mpq_ptr, const char *, int); - -#define mpq_set_ui __gmpq_set_ui -__GMP_DECLSPEC void mpq_set_ui (mpq_ptr, unsigned long int, unsigned long int); - -#define mpq_set_z __gmpq_set_z -__GMP_DECLSPEC void mpq_set_z (mpq_ptr, mpz_srcptr); - -#define mpq_sub __gmpq_sub -__GMP_DECLSPEC void mpq_sub (mpq_ptr, mpq_srcptr, mpq_srcptr); - -#define mpq_swap __gmpq_swap -__GMP_DECLSPEC void mpq_swap (mpq_ptr, mpq_ptr) __GMP_NOTHROW; - - -/**************** Float (i.e. F) routines. ****************/ - -#define mpf_abs __gmpf_abs -__GMP_DECLSPEC void mpf_abs (mpf_ptr, mpf_srcptr); - -#define mpf_add __gmpf_add -__GMP_DECLSPEC void mpf_add (mpf_ptr, mpf_srcptr, mpf_srcptr); - -#define mpf_add_ui __gmpf_add_ui -__GMP_DECLSPEC void mpf_add_ui (mpf_ptr, mpf_srcptr, unsigned long int); -#define mpf_ceil __gmpf_ceil -__GMP_DECLSPEC void mpf_ceil (mpf_ptr, mpf_srcptr); - -#define mpf_clear __gmpf_clear -__GMP_DECLSPEC void mpf_clear (mpf_ptr); - -#define mpf_clears __gmpf_clears -__GMP_DECLSPEC void mpf_clears (mpf_ptr, ...); - -#define mpf_cmp __gmpf_cmp -__GMP_DECLSPEC int mpf_cmp (mpf_srcptr, mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_cmp_z __gmpf_cmp_z -__GMP_DECLSPEC int mpf_cmp_z (mpf_srcptr, mpz_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_cmp_d __gmpf_cmp_d -__GMP_DECLSPEC int mpf_cmp_d (mpf_srcptr, double) __GMP_ATTRIBUTE_PURE; - -#define mpf_cmp_si __gmpf_cmp_si -__GMP_DECLSPEC int mpf_cmp_si (mpf_srcptr, signed long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_cmp_ui __gmpf_cmp_ui -__GMP_DECLSPEC int mpf_cmp_ui (mpf_srcptr, unsigned long int) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_div __gmpf_div -__GMP_DECLSPEC void mpf_div (mpf_ptr, mpf_srcptr, mpf_srcptr); - -#define mpf_div_2exp __gmpf_div_2exp -__GMP_DECLSPEC void mpf_div_2exp (mpf_ptr, mpf_srcptr, mp_bitcnt_t); - -#define mpf_div_ui __gmpf_div_ui -__GMP_DECLSPEC void mpf_div_ui (mpf_ptr, mpf_srcptr, unsigned long int); - -#define mpf_dump __gmpf_dump -__GMP_DECLSPEC void mpf_dump (mpf_srcptr); - -#define mpf_eq __gmpf_eq -__GMP_DECLSPEC int mpf_eq (mpf_srcptr, mpf_srcptr, mp_bitcnt_t) __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_sint_p __gmpf_fits_sint_p -__GMP_DECLSPEC int mpf_fits_sint_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_slong_p __gmpf_fits_slong_p -__GMP_DECLSPEC int mpf_fits_slong_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_sshort_p __gmpf_fits_sshort_p -__GMP_DECLSPEC int mpf_fits_sshort_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_uint_p __gmpf_fits_uint_p -__GMP_DECLSPEC int mpf_fits_uint_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_ulong_p __gmpf_fits_ulong_p -__GMP_DECLSPEC int mpf_fits_ulong_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_ushort_p __gmpf_fits_ushort_p -__GMP_DECLSPEC int mpf_fits_ushort_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_floor __gmpf_floor -__GMP_DECLSPEC void mpf_floor (mpf_ptr, mpf_srcptr); - -#define mpf_get_d __gmpf_get_d -__GMP_DECLSPEC double mpf_get_d (mpf_srcptr) __GMP_ATTRIBUTE_PURE; - -#define mpf_get_d_2exp __gmpf_get_d_2exp -__GMP_DECLSPEC double mpf_get_d_2exp (signed long int *, mpf_srcptr); - -#define mpf_get_default_prec __gmpf_get_default_prec -__GMP_DECLSPEC mp_bitcnt_t mpf_get_default_prec (void) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_get_prec __gmpf_get_prec -__GMP_DECLSPEC mp_bitcnt_t mpf_get_prec (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_get_si __gmpf_get_si -__GMP_DECLSPEC long mpf_get_si (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_get_str __gmpf_get_str -__GMP_DECLSPEC char *mpf_get_str (char *, mp_exp_t *, int, size_t, mpf_srcptr); - -#define mpf_get_ui __gmpf_get_ui -__GMP_DECLSPEC unsigned long mpf_get_ui (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_init __gmpf_init -__GMP_DECLSPEC void mpf_init (mpf_ptr); - -#define mpf_init2 __gmpf_init2 -__GMP_DECLSPEC void mpf_init2 (mpf_ptr, mp_bitcnt_t); - -#define mpf_inits __gmpf_inits -__GMP_DECLSPEC void mpf_inits (mpf_ptr, ...); - -#define mpf_init_set __gmpf_init_set -__GMP_DECLSPEC void mpf_init_set (mpf_ptr, mpf_srcptr); - -#define mpf_init_set_d __gmpf_init_set_d -__GMP_DECLSPEC void mpf_init_set_d (mpf_ptr, double); - -#define mpf_init_set_si __gmpf_init_set_si -__GMP_DECLSPEC void mpf_init_set_si (mpf_ptr, signed long int); - -#define mpf_init_set_str __gmpf_init_set_str -__GMP_DECLSPEC int mpf_init_set_str (mpf_ptr, const char *, int); - -#define mpf_init_set_ui __gmpf_init_set_ui -__GMP_DECLSPEC void mpf_init_set_ui (mpf_ptr, unsigned long int); - -#define mpf_inp_str __gmpf_inp_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpf_inp_str (mpf_ptr, FILE *, int); -#endif - -#define mpf_integer_p __gmpf_integer_p -__GMP_DECLSPEC int mpf_integer_p (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_mul __gmpf_mul -__GMP_DECLSPEC void mpf_mul (mpf_ptr, mpf_srcptr, mpf_srcptr); - -#define mpf_mul_2exp __gmpf_mul_2exp -__GMP_DECLSPEC void mpf_mul_2exp (mpf_ptr, mpf_srcptr, mp_bitcnt_t); - -#define mpf_mul_ui __gmpf_mul_ui -__GMP_DECLSPEC void mpf_mul_ui (mpf_ptr, mpf_srcptr, unsigned long int); - -#define mpf_neg __gmpf_neg -__GMP_DECLSPEC void mpf_neg (mpf_ptr, mpf_srcptr); - -#define mpf_out_str __gmpf_out_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpf_out_str (FILE *, int, size_t, mpf_srcptr); -#endif - -#define mpf_pow_ui __gmpf_pow_ui -__GMP_DECLSPEC void mpf_pow_ui (mpf_ptr, mpf_srcptr, unsigned long int); - -#define mpf_random2 __gmpf_random2 -__GMP_DECLSPEC void mpf_random2 (mpf_ptr, mp_size_t, mp_exp_t); - -#define mpf_reldiff __gmpf_reldiff -__GMP_DECLSPEC void mpf_reldiff (mpf_ptr, mpf_srcptr, mpf_srcptr); - -#define mpf_set __gmpf_set -__GMP_DECLSPEC void mpf_set (mpf_ptr, mpf_srcptr); - -#define mpf_set_d __gmpf_set_d -__GMP_DECLSPEC void mpf_set_d (mpf_ptr, double); - -#define mpf_set_default_prec __gmpf_set_default_prec -__GMP_DECLSPEC void mpf_set_default_prec (mp_bitcnt_t) __GMP_NOTHROW; - -#define mpf_set_prec __gmpf_set_prec -__GMP_DECLSPEC void mpf_set_prec (mpf_ptr, mp_bitcnt_t); - -#define mpf_set_prec_raw __gmpf_set_prec_raw -__GMP_DECLSPEC void mpf_set_prec_raw (mpf_ptr, mp_bitcnt_t) __GMP_NOTHROW; - -#define mpf_set_q __gmpf_set_q -__GMP_DECLSPEC void mpf_set_q (mpf_ptr, mpq_srcptr); - -#define mpf_set_si __gmpf_set_si -__GMP_DECLSPEC void mpf_set_si (mpf_ptr, signed long int); - -#define mpf_set_str __gmpf_set_str -__GMP_DECLSPEC int mpf_set_str (mpf_ptr, const char *, int); - -#define mpf_set_ui __gmpf_set_ui -__GMP_DECLSPEC void mpf_set_ui (mpf_ptr, unsigned long int); - -#define mpf_set_z __gmpf_set_z -__GMP_DECLSPEC void mpf_set_z (mpf_ptr, mpz_srcptr); - -#define mpf_size __gmpf_size -__GMP_DECLSPEC size_t mpf_size (mpf_srcptr) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_sqrt __gmpf_sqrt -__GMP_DECLSPEC void mpf_sqrt (mpf_ptr, mpf_srcptr); - -#define mpf_sqrt_ui __gmpf_sqrt_ui -__GMP_DECLSPEC void mpf_sqrt_ui (mpf_ptr, unsigned long int); - -#define mpf_sub __gmpf_sub -__GMP_DECLSPEC void mpf_sub (mpf_ptr, mpf_srcptr, mpf_srcptr); - -#define mpf_sub_ui __gmpf_sub_ui -__GMP_DECLSPEC void mpf_sub_ui (mpf_ptr, mpf_srcptr, unsigned long int); - -#define mpf_swap __gmpf_swap -__GMP_DECLSPEC void mpf_swap (mpf_ptr, mpf_ptr) __GMP_NOTHROW; - -#define mpf_trunc __gmpf_trunc -__GMP_DECLSPEC void mpf_trunc (mpf_ptr, mpf_srcptr); - -#define mpf_ui_div __gmpf_ui_div -__GMP_DECLSPEC void mpf_ui_div (mpf_ptr, unsigned long int, mpf_srcptr); - -#define mpf_ui_sub __gmpf_ui_sub -__GMP_DECLSPEC void mpf_ui_sub (mpf_ptr, unsigned long int, mpf_srcptr); - -#define mpf_urandomb __gmpf_urandomb -__GMP_DECLSPEC void mpf_urandomb (mpf_t, gmp_randstate_t, mp_bitcnt_t); - - -/************ Low level positive-integer (i.e. N) routines. ************/ - -/* This is ugly, but we need to make user calls reach the prefixed function. */ - -#define mpn_add __MPN(add) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_add) -__GMP_DECLSPEC mp_limb_t mpn_add (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); -#endif - -#define mpn_add_1 __MPN(add_1) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_add_1) -__GMP_DECLSPEC mp_limb_t mpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) __GMP_NOTHROW; -#endif - -#define mpn_add_n __MPN(add_n) -__GMP_DECLSPEC mp_limb_t mpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); - -#define mpn_addmul_1 __MPN(addmul_1) -__GMP_DECLSPEC mp_limb_t mpn_addmul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_cmp __MPN(cmp) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_cmp) -__GMP_DECLSPEC int mpn_cmp (mp_srcptr, mp_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpn_zero_p __MPN(zero_p) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_zero_p) -__GMP_DECLSPEC int mpn_zero_p (mp_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpn_divexact_1 __MPN(divexact_1) -__GMP_DECLSPEC void mpn_divexact_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_divexact_by3(dst,src,size) \ - mpn_divexact_by3c (dst, src, size, __GMP_CAST (mp_limb_t, 0)) - -#define mpn_divexact_by3c __MPN(divexact_by3c) -__GMP_DECLSPEC mp_limb_t mpn_divexact_by3c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_divmod_1(qp,np,nsize,dlimb) \ - mpn_divrem_1 (qp, __GMP_CAST (mp_size_t, 0), np, nsize, dlimb) - -#define mpn_divrem __MPN(divrem) -__GMP_DECLSPEC mp_limb_t mpn_divrem (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t); - -#define mpn_divrem_1 __MPN(divrem_1) -__GMP_DECLSPEC mp_limb_t mpn_divrem_1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_divrem_2 __MPN(divrem_2) -__GMP_DECLSPEC mp_limb_t mpn_divrem_2 (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr); - -#define mpn_div_qr_1 __MPN(div_qr_1) -__GMP_DECLSPEC mp_limb_t mpn_div_qr_1 (mp_ptr, mp_limb_t *, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_div_qr_2 __MPN(div_qr_2) -__GMP_DECLSPEC mp_limb_t mpn_div_qr_2 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); - -#define mpn_gcd __MPN(gcd) -__GMP_DECLSPEC mp_size_t mpn_gcd (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t); - -#define mpn_gcd_1 __MPN(gcd_1) -__GMP_DECLSPEC mp_limb_t mpn_gcd_1 (mp_srcptr, mp_size_t, mp_limb_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_gcdext_1 __MPN(gcdext_1) -__GMP_DECLSPEC mp_limb_t mpn_gcdext_1 (mp_limb_signed_t *, mp_limb_signed_t *, mp_limb_t, mp_limb_t); - -#define mpn_gcdext __MPN(gcdext) -__GMP_DECLSPEC mp_size_t mpn_gcdext (mp_ptr, mp_ptr, mp_size_t *, mp_ptr, mp_size_t, mp_ptr, mp_size_t); - -#define mpn_get_str __MPN(get_str) -__GMP_DECLSPEC size_t mpn_get_str (unsigned char *, int, mp_ptr, mp_size_t); - -#define mpn_hamdist __MPN(hamdist) -__GMP_DECLSPEC mp_bitcnt_t mpn_hamdist (mp_srcptr, mp_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpn_lshift __MPN(lshift) -__GMP_DECLSPEC mp_limb_t mpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int); - -#define mpn_mod_1 __MPN(mod_1) -__GMP_DECLSPEC mp_limb_t mpn_mod_1 (mp_srcptr, mp_size_t, mp_limb_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_mul __MPN(mul) -__GMP_DECLSPEC mp_limb_t mpn_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); - -#define mpn_mul_1 __MPN(mul_1) -__GMP_DECLSPEC mp_limb_t mpn_mul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_mul_n __MPN(mul_n) -__GMP_DECLSPEC void mpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); - -#define mpn_sqr __MPN(sqr) -__GMP_DECLSPEC void mpn_sqr (mp_ptr, mp_srcptr, mp_size_t); - -#define mpn_neg __MPN(neg) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_neg) -__GMP_DECLSPEC mp_limb_t mpn_neg (mp_ptr, mp_srcptr, mp_size_t); -#endif - -#define mpn_com __MPN(com) -__GMP_DECLSPEC void mpn_com (mp_ptr, mp_srcptr, mp_size_t); - -#define mpn_perfect_square_p __MPN(perfect_square_p) -__GMP_DECLSPEC int mpn_perfect_square_p (mp_srcptr, mp_size_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_perfect_power_p __MPN(perfect_power_p) -__GMP_DECLSPEC int mpn_perfect_power_p (mp_srcptr, mp_size_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_popcount __MPN(popcount) -__GMP_DECLSPEC mp_bitcnt_t mpn_popcount (mp_srcptr, mp_size_t) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpn_pow_1 __MPN(pow_1) -__GMP_DECLSPEC mp_size_t mpn_pow_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr); - -/* undocumented now, but retained here for upward compatibility */ -#define mpn_preinv_mod_1 __MPN(preinv_mod_1) -__GMP_DECLSPEC mp_limb_t mpn_preinv_mod_1 (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_random __MPN(random) -__GMP_DECLSPEC void mpn_random (mp_ptr, mp_size_t); - -#define mpn_random2 __MPN(random2) -__GMP_DECLSPEC void mpn_random2 (mp_ptr, mp_size_t); - -#define mpn_rshift __MPN(rshift) -__GMP_DECLSPEC mp_limb_t mpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int); - -#define mpn_scan0 __MPN(scan0) -__GMP_DECLSPEC mp_bitcnt_t mpn_scan0 (mp_srcptr, mp_bitcnt_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_scan1 __MPN(scan1) -__GMP_DECLSPEC mp_bitcnt_t mpn_scan1 (mp_srcptr, mp_bitcnt_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_set_str __MPN(set_str) -__GMP_DECLSPEC mp_size_t mpn_set_str (mp_ptr, const unsigned char *, size_t, int); - -#define mpn_sizeinbase __MPN(sizeinbase) -__GMP_DECLSPEC size_t mpn_sizeinbase (mp_srcptr, mp_size_t, int); - -#define mpn_sqrtrem __MPN(sqrtrem) -__GMP_DECLSPEC mp_size_t mpn_sqrtrem (mp_ptr, mp_ptr, mp_srcptr, mp_size_t); - -#define mpn_sub __MPN(sub) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_sub) -__GMP_DECLSPEC mp_limb_t mpn_sub (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); -#endif - -#define mpn_sub_1 __MPN(sub_1) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_sub_1) -__GMP_DECLSPEC mp_limb_t mpn_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) __GMP_NOTHROW; -#endif - -#define mpn_sub_n __MPN(sub_n) -__GMP_DECLSPEC mp_limb_t mpn_sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); - -#define mpn_submul_1 __MPN(submul_1) -__GMP_DECLSPEC mp_limb_t mpn_submul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_tdiv_qr __MPN(tdiv_qr) -__GMP_DECLSPEC void mpn_tdiv_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); - -#define mpn_and_n __MPN(and_n) -__GMP_DECLSPEC void mpn_and_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#define mpn_andn_n __MPN(andn_n) -__GMP_DECLSPEC void mpn_andn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#define mpn_nand_n __MPN(nand_n) -__GMP_DECLSPEC void mpn_nand_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#define mpn_ior_n __MPN(ior_n) -__GMP_DECLSPEC void mpn_ior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#define mpn_iorn_n __MPN(iorn_n) -__GMP_DECLSPEC void mpn_iorn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#define mpn_nior_n __MPN(nior_n) -__GMP_DECLSPEC void mpn_nior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#define mpn_xor_n __MPN(xor_n) -__GMP_DECLSPEC void mpn_xor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#define mpn_xnor_n __MPN(xnor_n) -__GMP_DECLSPEC void mpn_xnor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); - -#define mpn_copyi __MPN(copyi) -__GMP_DECLSPEC void mpn_copyi (mp_ptr, mp_srcptr, mp_size_t); -#define mpn_copyd __MPN(copyd) -__GMP_DECLSPEC void mpn_copyd (mp_ptr, mp_srcptr, mp_size_t); -#define mpn_zero __MPN(zero) -__GMP_DECLSPEC void mpn_zero (mp_ptr, mp_size_t); - -#define mpn_cnd_add_n __MPN(cnd_add_n) -__GMP_DECLSPEC mp_limb_t mpn_cnd_add_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#define mpn_cnd_sub_n __MPN(cnd_sub_n) -__GMP_DECLSPEC mp_limb_t mpn_cnd_sub_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); - -#define mpn_sec_add_1 __MPN(sec_add_1) -__GMP_DECLSPEC mp_limb_t mpn_sec_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr); -#define mpn_sec_add_1_itch __MPN(sec_add_1_itch) -__GMP_DECLSPEC mp_size_t mpn_sec_add_1_itch (mp_size_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_sec_sub_1 __MPN(sec_sub_1) -__GMP_DECLSPEC mp_limb_t mpn_sec_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr); -#define mpn_sec_sub_1_itch __MPN(sec_sub_1_itch) -__GMP_DECLSPEC mp_size_t mpn_sec_sub_1_itch (mp_size_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_cnd_swap __MPN(cnd_swap) -__GMP_DECLSPEC void mpn_cnd_swap (mp_limb_t, volatile mp_limb_t *, volatile mp_limb_t *, mp_size_t); - -#define mpn_sec_mul __MPN(sec_mul) -__GMP_DECLSPEC void mpn_sec_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_sec_mul_itch __MPN(sec_mul_itch) -__GMP_DECLSPEC mp_size_t mpn_sec_mul_itch (mp_size_t, mp_size_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_sec_sqr __MPN(sec_sqr) -__GMP_DECLSPEC void mpn_sec_sqr (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_sec_sqr_itch __MPN(sec_sqr_itch) -__GMP_DECLSPEC mp_size_t mpn_sec_sqr_itch (mp_size_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_sec_powm __MPN(sec_powm) -__GMP_DECLSPEC void mpn_sec_powm (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_bitcnt_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_sec_powm_itch __MPN(sec_powm_itch) -__GMP_DECLSPEC mp_size_t mpn_sec_powm_itch (mp_size_t, mp_bitcnt_t, mp_size_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_sec_tabselect __MPN(sec_tabselect) -__GMP_DECLSPEC void mpn_sec_tabselect (volatile mp_limb_t *, volatile const mp_limb_t *, mp_size_t, mp_size_t, mp_size_t); - -#define mpn_sec_div_qr __MPN(sec_div_qr) -__GMP_DECLSPEC mp_limb_t mpn_sec_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_sec_div_qr_itch __MPN(sec_div_qr_itch) -__GMP_DECLSPEC mp_size_t mpn_sec_div_qr_itch (mp_size_t, mp_size_t) __GMP_ATTRIBUTE_PURE; -#define mpn_sec_div_r __MPN(sec_div_r) -__GMP_DECLSPEC void mpn_sec_div_r (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_sec_div_r_itch __MPN(sec_div_r_itch) -__GMP_DECLSPEC mp_size_t mpn_sec_div_r_itch (mp_size_t, mp_size_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_sec_invert __MPN(sec_invert) -__GMP_DECLSPEC int mpn_sec_invert (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_bitcnt_t, mp_ptr); -#define mpn_sec_invert_itch __MPN(sec_invert_itch) -__GMP_DECLSPEC mp_size_t mpn_sec_invert_itch (mp_size_t) __GMP_ATTRIBUTE_PURE; - - -/**************** mpz inlines ****************/ - -/* The following are provided as inlines where possible, but always exist as - library functions too, for binary compatibility. - - Within gmp itself this inlining generally isn't relied on, since it - doesn't get done for all compilers, whereas if something is worth - inlining then it's worth arranging always. - - There are two styles of inlining here. When the same bit of code is - wanted for the inline as for the library version, then __GMP_FORCE_foo - arranges for that code to be emitted and the __GMP_EXTERN_INLINE - directive suppressed, eg. mpz_fits_uint_p. When a different bit of code - is wanted for the inline than for the library version, then - __GMP_FORCE_foo arranges the inline to be suppressed, eg. mpz_abs. */ - -#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpz_abs) -__GMP_EXTERN_INLINE void -mpz_abs (mpz_ptr __gmp_w, mpz_srcptr __gmp_u) -{ - if (__gmp_w != __gmp_u) - mpz_set (__gmp_w, __gmp_u); - __gmp_w->_mp_size = __GMP_ABS (__gmp_w->_mp_size); -} -#endif - -#if GMP_NAIL_BITS == 0 -#define __GMPZ_FITS_UTYPE_P(z,maxval) \ - mp_size_t __gmp_n = z->_mp_size; \ - mp_ptr __gmp_p = z->_mp_d; \ - return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= maxval)); -#else -#define __GMPZ_FITS_UTYPE_P(z,maxval) \ - mp_size_t __gmp_n = z->_mp_size; \ - mp_ptr __gmp_p = z->_mp_d; \ - return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= maxval) \ - || (__gmp_n == 2 && __gmp_p[1] <= ((mp_limb_t) maxval >> GMP_NUMB_BITS))); -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_uint_p) -#if ! defined (__GMP_FORCE_mpz_fits_uint_p) -__GMP_EXTERN_INLINE -#endif -int -mpz_fits_uint_p (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - __GMPZ_FITS_UTYPE_P (__gmp_z, UINT_MAX); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_ulong_p) -#if ! defined (__GMP_FORCE_mpz_fits_ulong_p) -__GMP_EXTERN_INLINE -#endif -int -mpz_fits_ulong_p (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - __GMPZ_FITS_UTYPE_P (__gmp_z, ULONG_MAX); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_ushort_p) -#if ! defined (__GMP_FORCE_mpz_fits_ushort_p) -__GMP_EXTERN_INLINE -#endif -int -mpz_fits_ushort_p (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - __GMPZ_FITS_UTYPE_P (__gmp_z, USHRT_MAX); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_get_ui) -#if ! defined (__GMP_FORCE_mpz_get_ui) -__GMP_EXTERN_INLINE -#endif -unsigned long -mpz_get_ui (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - mp_ptr __gmp_p = __gmp_z->_mp_d; - mp_size_t __gmp_n = __gmp_z->_mp_size; - mp_limb_t __gmp_l = __gmp_p[0]; - /* This is a "#if" rather than a plain "if" so as to avoid gcc warnings - about "<< GMP_NUMB_BITS" exceeding the type size, and to avoid Borland - C++ 6.0 warnings about condition always true for something like - "ULONG_MAX < GMP_NUMB_MASK". */ -#if GMP_NAIL_BITS == 0 || defined (_LONG_LONG_LIMB) - /* limb==long and no nails, or limb==longlong, one limb is enough */ - return (__gmp_n != 0 ? __gmp_l : 0); -#else - /* limb==long and nails, need two limbs when available */ - __gmp_n = __GMP_ABS (__gmp_n); - if (__gmp_n <= 1) - return (__gmp_n != 0 ? __gmp_l : 0); - else - return __gmp_l + (__gmp_p[1] << GMP_NUMB_BITS); -#endif -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_getlimbn) -#if ! defined (__GMP_FORCE_mpz_getlimbn) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpz_getlimbn (mpz_srcptr __gmp_z, mp_size_t __gmp_n) __GMP_NOTHROW -{ - mp_limb_t __gmp_result = 0; - if (__GMP_LIKELY (__gmp_n >= 0 && __gmp_n < __GMP_ABS (__gmp_z->_mp_size))) - __gmp_result = __gmp_z->_mp_d[__gmp_n]; - return __gmp_result; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpz_neg) -__GMP_EXTERN_INLINE void -mpz_neg (mpz_ptr __gmp_w, mpz_srcptr __gmp_u) -{ - if (__gmp_w != __gmp_u) - mpz_set (__gmp_w, __gmp_u); - __gmp_w->_mp_size = - __gmp_w->_mp_size; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_perfect_square_p) -#if ! defined (__GMP_FORCE_mpz_perfect_square_p) -__GMP_EXTERN_INLINE -#endif -int -mpz_perfect_square_p (mpz_srcptr __gmp_a) -{ - mp_size_t __gmp_asize; - int __gmp_result; - - __gmp_asize = __gmp_a->_mp_size; - __gmp_result = (__gmp_asize >= 0); /* zero is a square, negatives are not */ - if (__GMP_LIKELY (__gmp_asize > 0)) - __gmp_result = mpn_perfect_square_p (__gmp_a->_mp_d, __gmp_asize); - return __gmp_result; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_popcount) -#if ! defined (__GMP_FORCE_mpz_popcount) -__GMP_EXTERN_INLINE -#endif -mp_bitcnt_t -mpz_popcount (mpz_srcptr __gmp_u) __GMP_NOTHROW -{ - mp_size_t __gmp_usize; - mp_bitcnt_t __gmp_result; - - __gmp_usize = __gmp_u->_mp_size; - __gmp_result = (__gmp_usize < 0 ? ULONG_MAX : 0); - if (__GMP_LIKELY (__gmp_usize > 0)) - __gmp_result = mpn_popcount (__gmp_u->_mp_d, __gmp_usize); - return __gmp_result; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_set_q) -#if ! defined (__GMP_FORCE_mpz_set_q) -__GMP_EXTERN_INLINE -#endif -void -mpz_set_q (mpz_ptr __gmp_w, mpq_srcptr __gmp_u) -{ - mpz_tdiv_q (__gmp_w, mpq_numref (__gmp_u), mpq_denref (__gmp_u)); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_size) -#if ! defined (__GMP_FORCE_mpz_size) -__GMP_EXTERN_INLINE -#endif -size_t -mpz_size (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - return __GMP_ABS (__gmp_z->_mp_size); -} -#endif - - -/**************** mpq inlines ****************/ - -#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpq_abs) -__GMP_EXTERN_INLINE void -mpq_abs (mpq_ptr __gmp_w, mpq_srcptr __gmp_u) -{ - if (__gmp_w != __gmp_u) - mpq_set (__gmp_w, __gmp_u); - __gmp_w->_mp_num._mp_size = __GMP_ABS (__gmp_w->_mp_num._mp_size); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpq_neg) -__GMP_EXTERN_INLINE void -mpq_neg (mpq_ptr __gmp_w, mpq_srcptr __gmp_u) -{ - if (__gmp_w != __gmp_u) - mpq_set (__gmp_w, __gmp_u); - __gmp_w->_mp_num._mp_size = - __gmp_w->_mp_num._mp_size; -} -#endif - - -/**************** mpn inlines ****************/ - -/* The comments with __GMPN_ADD_1 below apply here too. - - The test for FUNCTION returning 0 should predict well. If it's assumed - {yp,ysize} will usually have a random number of bits then the high limb - won't be full and a carry out will occur a good deal less than 50% of the - time. - - ysize==0 isn't a documented feature, but is used internally in a few - places. - - Producing cout last stops it using up a register during the main part of - the calculation, though gcc (as of 3.0) on an "if (mpn_add (...))" - doesn't seem able to move the true and false legs of the conditional up - to the two places cout is generated. */ - -#define __GMPN_AORS(cout, wp, xp, xsize, yp, ysize, FUNCTION, TEST) \ - do { \ - mp_size_t __gmp_i; \ - mp_limb_t __gmp_x; \ - \ - /* ASSERT ((ysize) >= 0); */ \ - /* ASSERT ((xsize) >= (ysize)); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE2_P (wp, xsize, xp, xsize)); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE2_P (wp, xsize, yp, ysize)); */ \ - \ - __gmp_i = (ysize); \ - if (__gmp_i != 0) \ - { \ - if (FUNCTION (wp, xp, yp, __gmp_i)) \ - { \ - do \ - { \ - if (__gmp_i >= (xsize)) \ - { \ - (cout) = 1; \ - goto __gmp_done; \ - } \ - __gmp_x = (xp)[__gmp_i]; \ - } \ - while (TEST); \ - } \ - } \ - if ((wp) != (xp)) \ - __GMPN_COPY_REST (wp, xp, xsize, __gmp_i); \ - (cout) = 0; \ - __gmp_done: \ - ; \ - } while (0) - -#define __GMPN_ADD(cout, wp, xp, xsize, yp, ysize) \ - __GMPN_AORS (cout, wp, xp, xsize, yp, ysize, mpn_add_n, \ - (((wp)[__gmp_i++] = (__gmp_x + 1) & GMP_NUMB_MASK) == 0)) -#define __GMPN_SUB(cout, wp, xp, xsize, yp, ysize) \ - __GMPN_AORS (cout, wp, xp, xsize, yp, ysize, mpn_sub_n, \ - (((wp)[__gmp_i++] = (__gmp_x - 1) & GMP_NUMB_MASK), __gmp_x == 0)) - - -/* The use of __gmp_i indexing is designed to ensure a compile time src==dst - remains nice and clear to the compiler, so that __GMPN_COPY_REST can - disappear, and the load/add/store gets a chance to become a - read-modify-write on CISC CPUs. - - Alternatives: - - Using a pair of pointers instead of indexing would be possible, but gcc - isn't able to recognise compile-time src==dst in that case, even when the - pointers are incremented more or less together. Other compilers would - very likely have similar difficulty. - - gcc could use "if (__builtin_constant_p(src==dst) && src==dst)" or - similar to detect a compile-time src==dst. This works nicely on gcc - 2.95.x, it's not good on gcc 3.0 where __builtin_constant_p(p==p) seems - to be always false, for a pointer p. But the current code form seems - good enough for src==dst anyway. - - gcc on x86 as usual doesn't give particularly good flags handling for the - carry/borrow detection. It's tempting to want some multi instruction asm - blocks to help it, and this was tried, but in truth there's only a few - instructions to save and any gain is all too easily lost by register - juggling setting up for the asm. */ - -#if GMP_NAIL_BITS == 0 -#define __GMPN_AORS_1(cout, dst, src, n, v, OP, CB) \ - do { \ - mp_size_t __gmp_i; \ - mp_limb_t __gmp_x, __gmp_r; \ - \ - /* ASSERT ((n) >= 1); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, n)); */ \ - \ - __gmp_x = (src)[0]; \ - __gmp_r = __gmp_x OP (v); \ - (dst)[0] = __gmp_r; \ - if (CB (__gmp_r, __gmp_x, (v))) \ - { \ - (cout) = 1; \ - for (__gmp_i = 1; __gmp_i < (n);) \ - { \ - __gmp_x = (src)[__gmp_i]; \ - __gmp_r = __gmp_x OP 1; \ - (dst)[__gmp_i] = __gmp_r; \ - ++__gmp_i; \ - if (!CB (__gmp_r, __gmp_x, 1)) \ - { \ - if ((src) != (dst)) \ - __GMPN_COPY_REST (dst, src, n, __gmp_i); \ - (cout) = 0; \ - break; \ - } \ - } \ - } \ - else \ - { \ - if ((src) != (dst)) \ - __GMPN_COPY_REST (dst, src, n, 1); \ - (cout) = 0; \ - } \ - } while (0) -#endif - -#if GMP_NAIL_BITS >= 1 -#define __GMPN_AORS_1(cout, dst, src, n, v, OP, CB) \ - do { \ - mp_size_t __gmp_i; \ - mp_limb_t __gmp_x, __gmp_r; \ - \ - /* ASSERT ((n) >= 1); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, n)); */ \ - \ - __gmp_x = (src)[0]; \ - __gmp_r = __gmp_x OP (v); \ - (dst)[0] = __gmp_r & GMP_NUMB_MASK; \ - if (__gmp_r >> GMP_NUMB_BITS != 0) \ - { \ - (cout) = 1; \ - for (__gmp_i = 1; __gmp_i < (n);) \ - { \ - __gmp_x = (src)[__gmp_i]; \ - __gmp_r = __gmp_x OP 1; \ - (dst)[__gmp_i] = __gmp_r & GMP_NUMB_MASK; \ - ++__gmp_i; \ - if (__gmp_r >> GMP_NUMB_BITS == 0) \ - { \ - if ((src) != (dst)) \ - __GMPN_COPY_REST (dst, src, n, __gmp_i); \ - (cout) = 0; \ - break; \ - } \ - } \ - } \ - else \ - { \ - if ((src) != (dst)) \ - __GMPN_COPY_REST (dst, src, n, 1); \ - (cout) = 0; \ - } \ - } while (0) -#endif - -#define __GMPN_ADDCB(r,x,y) ((r) < (y)) -#define __GMPN_SUBCB(r,x,y) ((x) < (y)) - -#define __GMPN_ADD_1(cout, dst, src, n, v) \ - __GMPN_AORS_1(cout, dst, src, n, v, +, __GMPN_ADDCB) -#define __GMPN_SUB_1(cout, dst, src, n, v) \ - __GMPN_AORS_1(cout, dst, src, n, v, -, __GMPN_SUBCB) - - -/* Compare {xp,size} and {yp,size}, setting "result" to positive, zero or - negative. size==0 is allowed. On random data usually only one limb will - need to be examined to get a result, so it's worth having it inline. */ -#define __GMPN_CMP(result, xp, yp, size) \ - do { \ - mp_size_t __gmp_i; \ - mp_limb_t __gmp_x, __gmp_y; \ - \ - /* ASSERT ((size) >= 0); */ \ - \ - (result) = 0; \ - __gmp_i = (size); \ - while (--__gmp_i >= 0) \ - { \ - __gmp_x = (xp)[__gmp_i]; \ - __gmp_y = (yp)[__gmp_i]; \ - if (__gmp_x != __gmp_y) \ - { \ - /* Cannot use __gmp_x - __gmp_y, may overflow an "int" */ \ - (result) = (__gmp_x > __gmp_y ? 1 : -1); \ - break; \ - } \ - } \ - } while (0) - - -#if defined (__GMPN_COPY) && ! defined (__GMPN_COPY_REST) -#define __GMPN_COPY_REST(dst, src, size, start) \ - do { \ - /* ASSERT ((start) >= 0); */ \ - /* ASSERT ((start) <= (size)); */ \ - __GMPN_COPY ((dst)+(start), (src)+(start), (size)-(start)); \ - } while (0) -#endif - -/* Copy {src,size} to {dst,size}, starting at "start". This is designed to - keep the indexing dst[j] and src[j] nice and simple for __GMPN_ADD_1, - __GMPN_ADD, etc. */ -#if ! defined (__GMPN_COPY_REST) -#define __GMPN_COPY_REST(dst, src, size, start) \ - do { \ - mp_size_t __gmp_j; \ - /* ASSERT ((size) >= 0); */ \ - /* ASSERT ((start) >= 0); */ \ - /* ASSERT ((start) <= (size)); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, size)); */ \ - __GMP_CRAY_Pragma ("_CRI ivdep"); \ - for (__gmp_j = (start); __gmp_j < (size); __gmp_j++) \ - (dst)[__gmp_j] = (src)[__gmp_j]; \ - } while (0) -#endif - -/* Enhancement: Use some of the smarter code from gmp-impl.h. Maybe use - mpn_copyi if there's a native version, and if we don't mind demanding - binary compatibility for it (on targets which use it). */ - -#if ! defined (__GMPN_COPY) -#define __GMPN_COPY(dst, src, size) __GMPN_COPY_REST (dst, src, size, 0) -#endif - - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_add) -#if ! defined (__GMP_FORCE_mpn_add) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_add (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) -{ - mp_limb_t __gmp_c; - __GMPN_ADD (__gmp_c, __gmp_wp, __gmp_xp, __gmp_xsize, __gmp_yp, __gmp_ysize); - return __gmp_c; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_add_1) -#if ! defined (__GMP_FORCE_mpn_add_1) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_add_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) __GMP_NOTHROW -{ - mp_limb_t __gmp_c; - __GMPN_ADD_1 (__gmp_c, __gmp_dst, __gmp_src, __gmp_size, __gmp_n); - return __gmp_c; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_cmp) -#if ! defined (__GMP_FORCE_mpn_cmp) -__GMP_EXTERN_INLINE -#endif -int -mpn_cmp (mp_srcptr __gmp_xp, mp_srcptr __gmp_yp, mp_size_t __gmp_size) __GMP_NOTHROW -{ - int __gmp_result; - __GMPN_CMP (__gmp_result, __gmp_xp, __gmp_yp, __gmp_size); - return __gmp_result; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_zero_p) -#if ! defined (__GMP_FORCE_mpn_zero_p) -__GMP_EXTERN_INLINE -#endif -int -mpn_zero_p (mp_srcptr __gmp_p, mp_size_t __gmp_n) __GMP_NOTHROW -{ - /* if (__GMP_LIKELY (__gmp_n > 0)) */ - do { - if (__gmp_p[--__gmp_n] != 0) - return 0; - } while (__gmp_n != 0); - return 1; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_sub) -#if ! defined (__GMP_FORCE_mpn_sub) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_sub (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) -{ - mp_limb_t __gmp_c; - __GMPN_SUB (__gmp_c, __gmp_wp, __gmp_xp, __gmp_xsize, __gmp_yp, __gmp_ysize); - return __gmp_c; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_sub_1) -#if ! defined (__GMP_FORCE_mpn_sub_1) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_sub_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) __GMP_NOTHROW -{ - mp_limb_t __gmp_c; - __GMPN_SUB_1 (__gmp_c, __gmp_dst, __gmp_src, __gmp_size, __gmp_n); - return __gmp_c; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_neg) -#if ! defined (__GMP_FORCE_mpn_neg) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_neg (mp_ptr __gmp_rp, mp_srcptr __gmp_up, mp_size_t __gmp_n) -{ - while (*__gmp_up == 0) /* Low zero limbs are unchanged by negation. */ - { - *__gmp_rp = 0; - if (!--__gmp_n) /* All zero */ - return 0; - ++__gmp_up; ++__gmp_rp; - } - - *__gmp_rp = (- *__gmp_up) & GMP_NUMB_MASK; - - if (--__gmp_n) /* Higher limbs get complemented. */ - mpn_com (++__gmp_rp, ++__gmp_up, __gmp_n); - - return 1; -} -#endif - -#if defined (__cplusplus) -} -#endif - - -/* Allow faster testing for negative, zero, and positive. */ -#define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0) -#define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0) -#define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0) - -/* When using GCC, optimize certain common comparisons. */ -#if defined (__GNUC__) && __GNUC__ >= 2 -#define mpz_cmp_ui(Z,UI) \ - (__builtin_constant_p (UI) && (UI) == 0 \ - ? mpz_sgn (Z) : _mpz_cmp_ui (Z,UI)) -#define mpz_cmp_si(Z,SI) \ - (__builtin_constant_p ((SI) >= 0) && (SI) >= 0 \ - ? mpz_cmp_ui (Z, __GMP_CAST (unsigned long, SI)) \ - : _mpz_cmp_si (Z,SI)) -#define mpq_cmp_ui(Q,NUI,DUI) \ - (__builtin_constant_p (NUI) && (NUI) == 0 ? mpq_sgn (Q) \ - : __builtin_constant_p ((NUI) == (DUI)) && (NUI) == (DUI) \ - ? mpz_cmp (mpq_numref (Q), mpq_denref (Q)) \ - : _mpq_cmp_ui (Q,NUI,DUI)) -#define mpq_cmp_si(q,n,d) \ - (__builtin_constant_p ((n) >= 0) && (n) >= 0 \ - ? mpq_cmp_ui (q, __GMP_CAST (unsigned long, n), d) \ - : _mpq_cmp_si (q, n, d)) -#else -#define mpz_cmp_ui(Z,UI) _mpz_cmp_ui (Z,UI) -#define mpz_cmp_si(Z,UI) _mpz_cmp_si (Z,UI) -#define mpq_cmp_ui(Q,NUI,DUI) _mpq_cmp_ui (Q,NUI,DUI) -#define mpq_cmp_si(q,n,d) _mpq_cmp_si(q,n,d) -#endif - - -/* Using "&" rather than "&&" means these can come out branch-free. Every - mpz_t has at least one limb allocated, so fetching the low limb is always - allowed. */ -#define mpz_odd_p(z) (((z)->_mp_size != 0) & __GMP_CAST (int, (z)->_mp_d[0])) -#define mpz_even_p(z) (! mpz_odd_p (z)) - - -/**************** C++ routines ****************/ - -#ifdef __cplusplus -__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpz_srcptr); -__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpq_srcptr); -__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpf_srcptr); -__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpz_ptr); -__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpq_ptr); -__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpf_ptr); -#endif - - -/* Source-level compatibility with GMP 2 and earlier. */ -#define mpn_divmod(qp,np,nsize,dp,dsize) \ - mpn_divrem (qp, __GMP_CAST (mp_size_t, 0), np, nsize, dp, dsize) - -/* Source-level compatibility with GMP 1. */ -#define mpz_mdiv mpz_fdiv_q -#define mpz_mdivmod mpz_fdiv_qr -#define mpz_mmod mpz_fdiv_r -#define mpz_mdiv_ui mpz_fdiv_q_ui -#define mpz_mdivmod_ui(q,r,n,d) \ - (((r) == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d)) -#define mpz_mmod_ui(r,n,d) \ - (((r) == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d)) - -/* Useful synonyms, but not quite compatible with GMP 1. */ -#define mpz_div mpz_fdiv_q -#define mpz_divmod mpz_fdiv_qr -#define mpz_div_ui mpz_fdiv_q_ui -#define mpz_divmod_ui mpz_fdiv_qr_ui -#define mpz_div_2exp mpz_fdiv_q_2exp -#define mpz_mod_2exp mpz_fdiv_r_2exp - -enum -{ - GMP_ERROR_NONE = 0, - GMP_ERROR_UNSUPPORTED_ARGUMENT = 1, - GMP_ERROR_DIVISION_BY_ZERO = 2, - GMP_ERROR_SQRT_OF_NEGATIVE = 4, - GMP_ERROR_INVALID_ARGUMENT = 8 -}; - -/* Define CC and CFLAGS which were used to build this version of GMP */ -#define __GMP_CC "@CC@" -#define __GMP_CFLAGS "@CFLAGS@" - -/* Major version number is the value of __GNU_MP__ too, above and in mp.h. */ -#define __GNU_MP_VERSION 6 -#define __GNU_MP_VERSION_MINOR 1 -#define __GNU_MP_VERSION_PATCHLEVEL 0 -#define __GNU_MP_RELEASE (__GNU_MP_VERSION * 10000 + __GNU_MP_VERSION_MINOR * 100 + __GNU_MP_VERSION_PATCHLEVEL) - -#define __GMP_H__ -#endif /* __GMP_H__ */ diff --git a/src/plugins/e-acsl/contrib/libgmp/gmp-impl.h b/src/plugins/e-acsl/contrib/libgmp/gmp-impl.h deleted file mode 100644 index 24214a604780525d375800b7c1f71883b9335b73..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/gmp-impl.h +++ /dev/null @@ -1,5220 +0,0 @@ -/* Include file for internal GNU MP types and definitions. - - THE CONTENTS OF THIS FILE ARE FOR INTERNAL USE AND ARE ALMOST CERTAIN TO - BE SUBJECT TO INCOMPATIBLE CHANGES IN FUTURE GNU MP RELEASES. - -Copyright 1991, 1993-1997, 1999-2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -/* __GMP_DECLSPEC must be given on any global data that will be accessed - from outside libgmp, meaning from the test or development programs, or - from libgmpxx. Failing to do this will result in an incorrect address - being used for the accesses. On functions __GMP_DECLSPEC makes calls - from outside libgmp more efficient, but they'll still work fine without - it. */ - - -#ifndef __GMP_IMPL_H__ -#define __GMP_IMPL_H__ - -#if defined _CRAY -#include <intrinsics.h> /* for _popcnt */ -#endif - -/* For INT_MAX, etc. We used to avoid it because of a bug (on solaris, - gcc 2.95 under -mcpu=ultrasparc in ABI=32 ends up getting wrong - values (the ABI=64 values)), but it should be safe now. - - On Cray vector systems, however, we need the system limits.h since sizes - of signed and unsigned types can differ there, depending on compiler - options (eg. -hnofastmd), making our SHRT_MAX etc expressions fail. For - reference, int can be 46 or 64 bits, whereas uint is always 64 bits; and - short can be 24, 32, 46 or 64 bits, and different for ushort. */ - -#include <limits.h> - -/* For fat.h and other fat binary stuff. - No need for __GMP_ATTRIBUTE_PURE or __GMP_NOTHROW, since functions - declared this way are only used to set function pointers in __gmpn_cpuvec, - they're not called directly. */ -#define DECL_add_n(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t) -#define DECL_addlsh1_n(name) \ - DECL_add_n (name) -#define DECL_addlsh2_n(name) \ - DECL_add_n (name) -#define DECL_addmul_1(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) -#define DECL_addmul_2(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr) -#define DECL_bdiv_dbm1c(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t) -#define DECL_cnd_add_n(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t) -#define DECL_cnd_sub_n(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t) -#define DECL_com(name) \ - __GMP_DECLSPEC void name (mp_ptr, mp_srcptr, mp_size_t) -#define DECL_copyd(name) \ - __GMP_DECLSPEC void name (mp_ptr, mp_srcptr, mp_size_t) -#define DECL_copyi(name) \ - DECL_copyd (name) -#define DECL_divexact_1(name) \ - __GMP_DECLSPEC void name (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) -#define DECL_divexact_by3c(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) -#define DECL_divrem_1(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t) -#define DECL_gcd_1(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_srcptr, mp_size_t, mp_limb_t) -#define DECL_lshift(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_ptr, mp_srcptr, mp_size_t, unsigned) -#define DECL_lshiftc(name) \ - DECL_lshift (name) -#define DECL_mod_1(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_srcptr, mp_size_t, mp_limb_t) -#define DECL_mod_1_1p(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_srcptr, mp_size_t, mp_limb_t, const mp_limb_t []) -#define DECL_mod_1_1p_cps(name) \ - __GMP_DECLSPEC void name (mp_limb_t cps[], mp_limb_t b) -#define DECL_mod_1s_2p(name) \ - DECL_mod_1_1p (name) -#define DECL_mod_1s_2p_cps(name) \ - DECL_mod_1_1p_cps (name) -#define DECL_mod_1s_4p(name) \ - DECL_mod_1_1p (name) -#define DECL_mod_1s_4p_cps(name) \ - DECL_mod_1_1p_cps (name) -#define DECL_mod_34lsub1(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_srcptr, mp_size_t) -#define DECL_modexact_1c_odd(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t) -#define DECL_mul_1(name) \ - DECL_addmul_1 (name) -#define DECL_mul_basecase(name) \ - __GMP_DECLSPEC void name (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t) -#define DECL_mullo_basecase(name) \ - __GMP_DECLSPEC void name (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t) -#define DECL_preinv_divrem_1(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t, int) -#define DECL_preinv_mod_1(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t) -#define DECL_redc_1(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) -#define DECL_redc_2(name) \ - __GMP_DECLSPEC mp_limb_t name (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_srcptr) -#define DECL_rshift(name) \ - DECL_lshift (name) -#define DECL_sqr_basecase(name) \ - __GMP_DECLSPEC void name (mp_ptr, mp_srcptr, mp_size_t) -#define DECL_sub_n(name) \ - DECL_add_n (name) -#define DECL_sublsh1_n(name) \ - DECL_add_n (name) -#define DECL_submul_1(name) \ - DECL_addmul_1 (name) - -#if ! defined (__GMP_WITHIN_CONFIGURE) -#include "config.h" -#include "gmp-mparam.h" -#include "fib_table.h" -#include "fac_table.h" -#include "mp_bases.h" -#if WANT_FAT_BINARY -#include "fat.h" -#endif -#endif - -#if HAVE_INTTYPES_H /* for uint_least32_t */ -# include <inttypes.h> -#else -# if HAVE_STDINT_H -# include <stdint.h> -# endif -#endif - -#ifdef __cplusplus -#include <cstring> /* for strlen */ -#include <string> /* for std::string */ -#endif - - -#ifndef WANT_TMP_DEBUG /* for TMP_ALLOC_LIMBS_2 and others */ -#define WANT_TMP_DEBUG 0 -#endif - -/* The following tries to get a good version of alloca. The tests are - adapted from autoconf AC_FUNC_ALLOCA, with a couple of additions. - Whether this succeeds is tested by GMP_FUNC_ALLOCA and HAVE_ALLOCA will - be setup appropriately. - - ifndef alloca - a cpp define might already exist. - glibc <stdlib.h> includes <alloca.h> which uses GCC __builtin_alloca. - HP cc +Olibcalls adds a #define of alloca to __builtin_alloca. - - GCC __builtin_alloca - preferred whenever available. - - _AIX pragma - IBM compilers need a #pragma in "each module that needs to - use alloca". Pragma indented to protect pre-ANSI cpp's. _IBMR2 was - used in past versions of GMP, retained still in case it matters. - - The autoconf manual says this pragma needs to be at the start of a C - file, apart from comments and preprocessor directives. Is that true? - xlc on aix 4.xxx doesn't seem to mind it being after prototypes etc - from gmp.h. -*/ - -#ifndef alloca -# ifdef __GNUC__ -# define alloca __builtin_alloca -# else -# ifdef __DECC -# define alloca(x) __ALLOCA(x) -# else -# ifdef _MSC_VER -# include <malloc.h> -# define alloca _alloca -# else -# if HAVE_ALLOCA_H -# include <alloca.h> -# else -# if defined (_AIX) || defined (_IBMR2) - #pragma alloca -# else - char *alloca (); -# endif -# endif -# endif -# endif -# endif -#endif - - -/* if not provided by gmp-mparam.h */ -#ifndef GMP_LIMB_BYTES -#define GMP_LIMB_BYTES SIZEOF_MP_LIMB_T -#endif -#ifndef GMP_LIMB_BITS -#define GMP_LIMB_BITS (8 * SIZEOF_MP_LIMB_T) -#endif - -#define BITS_PER_ULONG (8 * SIZEOF_UNSIGNED_LONG) - - -/* gmp_uint_least32_t is an unsigned integer type with at least 32 bits. */ -#if HAVE_UINT_LEAST32_T -typedef uint_least32_t gmp_uint_least32_t; -#else -#if SIZEOF_UNSIGNED_SHORT >= 4 -typedef unsigned short gmp_uint_least32_t; -#else -#if SIZEOF_UNSIGNED >= 4 -typedef unsigned gmp_uint_least32_t; -#else -typedef unsigned long gmp_uint_least32_t; -#endif -#endif -#endif - - -/* gmp_intptr_t, for pointer to integer casts */ -#if HAVE_INTPTR_T -typedef intptr_t gmp_intptr_t; -#else /* fallback */ -typedef size_t gmp_intptr_t; -#endif - - -/* pre-inverse types for truncating division and modulo */ -typedef struct {mp_limb_t inv32;} gmp_pi1_t; -typedef struct {mp_limb_t inv21, inv32, inv53;} gmp_pi2_t; - - -/* "const" basically means a function does nothing but examine its arguments - and give a return value, it doesn't read or write any memory (neither - global nor pointed to by arguments), and has no other side-effects. This - is more restrictive than "pure". See info node "(gcc)Function - Attributes". __GMP_NO_ATTRIBUTE_CONST_PURE lets tune/common.c etc turn - this off when trying to write timing loops. */ -#if HAVE_ATTRIBUTE_CONST && ! defined (__GMP_NO_ATTRIBUTE_CONST_PURE) -#define ATTRIBUTE_CONST __attribute__ ((const)) -#else -#define ATTRIBUTE_CONST -#endif - -#if HAVE_ATTRIBUTE_NORETURN -#define ATTRIBUTE_NORETURN __attribute__ ((noreturn)) -#else -#define ATTRIBUTE_NORETURN -#endif - -/* "malloc" means a function behaves like malloc in that the pointer it - returns doesn't alias anything. */ -#if HAVE_ATTRIBUTE_MALLOC -#define ATTRIBUTE_MALLOC __attribute__ ((malloc)) -#else -#define ATTRIBUTE_MALLOC -#endif - - -#if ! HAVE_STRCHR -#define strchr(s,c) index(s,c) -#endif - -#if ! HAVE_MEMSET -#define memset(p, c, n) \ - do { \ - ASSERT ((n) >= 0); \ - char *__memset__p = (p); \ - int __i; \ - for (__i = 0; __i < (n); __i++) \ - __memset__p[__i] = (c); \ - } while (0) -#endif - -/* va_copy is standard in C99, and gcc provides __va_copy when in strict C89 - mode. Falling back to a memcpy will give maximum portability, since it - works no matter whether va_list is a pointer, struct or array. */ -#if ! defined (va_copy) && defined (__va_copy) -#define va_copy(dst,src) __va_copy(dst,src) -#endif -#if ! defined (va_copy) -#define va_copy(dst,src) \ - do { memcpy (&(dst), &(src), sizeof (va_list)); } while (0) -#endif - - -/* HAVE_HOST_CPU_alpha_CIX is 1 on an alpha with the CIX instructions - (ie. ctlz, ctpop, cttz). */ -#if HAVE_HOST_CPU_alphaev67 || HAVE_HOST_CPU_alphaev68 \ - || HAVE_HOST_CPU_alphaev7 -#define HAVE_HOST_CPU_alpha_CIX 1 -#endif - - -#if defined (__cplusplus) -extern "C" { -#endif - - -/* Usage: TMP_DECL; - TMP_MARK; - ptr = TMP_ALLOC (bytes); - TMP_FREE; - - Small allocations should use TMP_SALLOC, big allocations should use - TMP_BALLOC. Allocations that might be small or big should use TMP_ALLOC. - - Functions that use just TMP_SALLOC should use TMP_SDECL, TMP_SMARK, and - TMP_SFREE. - - TMP_DECL just declares a variable, but might be empty and so must be last - in a list of variables. TMP_MARK must be done before any TMP_ALLOC. - TMP_ALLOC(0) is not allowed. TMP_FREE doesn't need to be done if a - TMP_MARK was made, but then no TMP_ALLOCs. */ - -/* The alignment in bytes, used for TMP_ALLOCed blocks, when alloca or - __gmp_allocate_func doesn't already determine it. Currently TMP_ALLOC - isn't used for "double"s, so that's not in the union. */ -union tmp_align_t { - mp_limb_t l; - char *p; -}; -#define __TMP_ALIGN sizeof (union tmp_align_t) - -/* Return "a" rounded upwards to a multiple of "m", if it isn't already. - "a" must be an unsigned type. - This is designed for use with a compile-time constant "m". - The POW2 case is expected to be usual, and gcc 3.0 and up recognises - "(-(8*n))%8" or the like is always zero, which means the rounding up in - the WANT_TMP_NOTREENTRANT version of TMP_ALLOC below will be a noop. */ -#define ROUND_UP_MULTIPLE(a,m) \ - (POW2_P(m) ? (a) + (-(a))%(m) \ - : (a)+(m)-1 - (((a)+(m)-1) % (m))) - -#if defined (WANT_TMP_ALLOCA) || defined (WANT_TMP_REENTRANT) -struct tmp_reentrant_t { - struct tmp_reentrant_t *next; - size_t size; /* bytes, including header */ -}; -__GMP_DECLSPEC void *__gmp_tmp_reentrant_alloc (struct tmp_reentrant_t **, size_t) ATTRIBUTE_MALLOC; -__GMP_DECLSPEC void __gmp_tmp_reentrant_free (struct tmp_reentrant_t *); -#endif - -#if WANT_TMP_ALLOCA -#define TMP_SDECL -#define TMP_DECL struct tmp_reentrant_t *__tmp_marker -#define TMP_SMARK -#define TMP_MARK __tmp_marker = 0 -#define TMP_SALLOC(n) alloca(n) -#define TMP_BALLOC(n) __gmp_tmp_reentrant_alloc (&__tmp_marker, n) -/* The peculiar stack allocation limit here is chosen for efficient asm. */ -#define TMP_ALLOC(n) \ - (LIKELY ((n) <= 0x7f00) ? TMP_SALLOC(n) : TMP_BALLOC(n)) -#define TMP_SFREE -#define TMP_FREE \ - do { \ - if (UNLIKELY (__tmp_marker != 0)) \ - __gmp_tmp_reentrant_free (__tmp_marker); \ - } while (0) -#endif - -#if WANT_TMP_REENTRANT -#define TMP_SDECL TMP_DECL -#define TMP_DECL struct tmp_reentrant_t *__tmp_marker -#define TMP_SMARK TMP_MARK -#define TMP_MARK __tmp_marker = 0 -#define TMP_SALLOC(n) TMP_ALLOC(n) -#define TMP_BALLOC(n) TMP_ALLOC(n) -#define TMP_ALLOC(n) __gmp_tmp_reentrant_alloc (&__tmp_marker, n) -#define TMP_SFREE TMP_FREE -#define TMP_FREE __gmp_tmp_reentrant_free (__tmp_marker) -#endif - -#if WANT_TMP_NOTREENTRANT -struct tmp_marker -{ - struct tmp_stack *which_chunk; - void *alloc_point; -}; -__GMP_DECLSPEC void *__gmp_tmp_alloc (unsigned long) ATTRIBUTE_MALLOC; -__GMP_DECLSPEC void __gmp_tmp_mark (struct tmp_marker *); -__GMP_DECLSPEC void __gmp_tmp_free (struct tmp_marker *); -#define TMP_SDECL TMP_DECL -#define TMP_DECL struct tmp_marker __tmp_marker -#define TMP_SMARK TMP_MARK -#define TMP_MARK __gmp_tmp_mark (&__tmp_marker) -#define TMP_SALLOC(n) TMP_ALLOC(n) -#define TMP_BALLOC(n) TMP_ALLOC(n) -#define TMP_ALLOC(n) \ - __gmp_tmp_alloc (ROUND_UP_MULTIPLE ((unsigned long) (n), __TMP_ALIGN)) -#define TMP_SFREE TMP_FREE -#define TMP_FREE __gmp_tmp_free (&__tmp_marker) -#endif - -#if WANT_TMP_DEBUG -/* See tal-debug.c for some comments. */ -struct tmp_debug_t { - struct tmp_debug_entry_t *list; - const char *file; - int line; -}; -struct tmp_debug_entry_t { - struct tmp_debug_entry_t *next; - void *block; - size_t size; -}; -__GMP_DECLSPEC void __gmp_tmp_debug_mark (const char *, int, struct tmp_debug_t **, - struct tmp_debug_t *, - const char *, const char *); -__GMP_DECLSPEC void *__gmp_tmp_debug_alloc (const char *, int, int, - struct tmp_debug_t **, const char *, - size_t) ATTRIBUTE_MALLOC; -__GMP_DECLSPEC void __gmp_tmp_debug_free (const char *, int, int, - struct tmp_debug_t **, - const char *, const char *); -#define TMP_SDECL TMP_DECL_NAME(__tmp_xmarker, "__tmp_marker") -#define TMP_DECL TMP_DECL_NAME(__tmp_xmarker, "__tmp_marker") -#define TMP_SMARK TMP_MARK_NAME(__tmp_xmarker, "__tmp_marker") -#define TMP_MARK TMP_MARK_NAME(__tmp_xmarker, "__tmp_marker") -#define TMP_SFREE TMP_FREE_NAME(__tmp_xmarker, "__tmp_marker") -#define TMP_FREE TMP_FREE_NAME(__tmp_xmarker, "__tmp_marker") -/* The marker variable is designed to provoke an uninitialized variable - warning from the compiler if TMP_FREE is used without a TMP_MARK. - __tmp_marker_inscope does the same for TMP_ALLOC. Runtime tests pick - these things up too. */ -#define TMP_DECL_NAME(marker, marker_name) \ - int marker; \ - int __tmp_marker_inscope; \ - const char *__tmp_marker_name = marker_name; \ - struct tmp_debug_t __tmp_marker_struct; \ - /* don't demand NULL, just cast a zero */ \ - struct tmp_debug_t *__tmp_marker = (struct tmp_debug_t *) 0 -#define TMP_MARK_NAME(marker, marker_name) \ - do { \ - marker = 1; \ - __tmp_marker_inscope = 1; \ - __gmp_tmp_debug_mark (ASSERT_FILE, ASSERT_LINE, \ - &__tmp_marker, &__tmp_marker_struct, \ - __tmp_marker_name, marker_name); \ - } while (0) -#define TMP_SALLOC(n) TMP_ALLOC(n) -#define TMP_BALLOC(n) TMP_ALLOC(n) -#define TMP_ALLOC(size) \ - __gmp_tmp_debug_alloc (ASSERT_FILE, ASSERT_LINE, \ - __tmp_marker_inscope, \ - &__tmp_marker, __tmp_marker_name, size) -#define TMP_FREE_NAME(marker, marker_name) \ - do { \ - __gmp_tmp_debug_free (ASSERT_FILE, ASSERT_LINE, \ - marker, &__tmp_marker, \ - __tmp_marker_name, marker_name); \ - } while (0) -#endif /* WANT_TMP_DEBUG */ - - -/* Allocating various types. */ -#define TMP_ALLOC_TYPE(n,type) ((type *) TMP_ALLOC ((n) * sizeof (type))) -#define TMP_SALLOC_TYPE(n,type) ((type *) TMP_SALLOC ((n) * sizeof (type))) -#define TMP_BALLOC_TYPE(n,type) ((type *) TMP_BALLOC ((n) * sizeof (type))) -#define TMP_ALLOC_LIMBS(n) TMP_ALLOC_TYPE(n,mp_limb_t) -#define TMP_SALLOC_LIMBS(n) TMP_SALLOC_TYPE(n,mp_limb_t) -#define TMP_BALLOC_LIMBS(n) TMP_BALLOC_TYPE(n,mp_limb_t) -#define TMP_ALLOC_MP_PTRS(n) TMP_ALLOC_TYPE(n,mp_ptr) -#define TMP_SALLOC_MP_PTRS(n) TMP_SALLOC_TYPE(n,mp_ptr) -#define TMP_BALLOC_MP_PTRS(n) TMP_BALLOC_TYPE(n,mp_ptr) - -/* It's more efficient to allocate one block than many. This is certainly - true of the malloc methods, but it can even be true of alloca if that - involves copying a chunk of stack (various RISCs), or a call to a stack - bounds check (mingw). In any case, when debugging keep separate blocks - so a redzoning malloc debugger can protect each individually. */ -#define TMP_ALLOC_LIMBS_2(xp,xsize, yp,ysize) \ - do { \ - if (WANT_TMP_DEBUG) \ - { \ - (xp) = TMP_ALLOC_LIMBS (xsize); \ - (yp) = TMP_ALLOC_LIMBS (ysize); \ - } \ - else \ - { \ - (xp) = TMP_ALLOC_LIMBS ((xsize) + (ysize)); \ - (yp) = (xp) + (xsize); \ - } \ - } while (0) -#define TMP_ALLOC_LIMBS_3(xp,xsize, yp,ysize, zp,zsize) \ - do { \ - if (WANT_TMP_DEBUG) \ - { \ - (xp) = TMP_ALLOC_LIMBS (xsize); \ - (yp) = TMP_ALLOC_LIMBS (ysize); \ - (zp) = TMP_ALLOC_LIMBS (zsize); \ - } \ - else \ - { \ - (xp) = TMP_ALLOC_LIMBS ((xsize) + (ysize) + (zsize)); \ - (yp) = (xp) + (xsize); \ - (zp) = (yp) + (ysize); \ - } \ - } while (0) - -/* From gmp.h, nicer names for internal use. */ -#define CRAY_Pragma(str) __GMP_CRAY_Pragma(str) -#define MPN_CMP(result, xp, yp, size) __GMPN_CMP(result, xp, yp, size) -#define LIKELY(cond) __GMP_LIKELY(cond) -#define UNLIKELY(cond) __GMP_UNLIKELY(cond) - -#define ABS(x) ((x) >= 0 ? (x) : -(x)) -#define NEG_CAST(T,x) (- (__GMP_CAST (T, (x) + 1) - 1)) -#define ABS_CAST(T,x) ((x) >= 0 ? __GMP_CAST (T, x) : NEG_CAST (T,x)) -#undef MIN -#define MIN(l,o) ((l) < (o) ? (l) : (o)) -#undef MAX -#define MAX(h,i) ((h) > (i) ? (h) : (i)) -#define numberof(x) (sizeof (x) / sizeof ((x)[0])) - -/* Field access macros. */ -#define SIZ(x) ((x)->_mp_size) -#define ABSIZ(x) ABS (SIZ (x)) -#define PTR(x) ((x)->_mp_d) -#define EXP(x) ((x)->_mp_exp) -#define PREC(x) ((x)->_mp_prec) -#define ALLOC(x) ((x)->_mp_alloc) -#define NUM(x) mpq_numref(x) -#define DEN(x) mpq_denref(x) - -/* n-1 inverts any low zeros and the lowest one bit. If n&(n-1) leaves zero - then that lowest one bit must have been the only bit set. n==0 will - return true though, so avoid that. */ -#define POW2_P(n) (((n) & ((n) - 1)) == 0) - -/* This is intended for constant THRESHOLDs only, where the compiler - can completely fold the result. */ -#define LOG2C(n) \ - (((n) >= 0x1) + ((n) >= 0x2) + ((n) >= 0x4) + ((n) >= 0x8) + \ - ((n) >= 0x10) + ((n) >= 0x20) + ((n) >= 0x40) + ((n) >= 0x80) + \ - ((n) >= 0x100) + ((n) >= 0x200) + ((n) >= 0x400) + ((n) >= 0x800) + \ - ((n) >= 0x1000) + ((n) >= 0x2000) + ((n) >= 0x4000) + ((n) >= 0x8000)) - -#define MP_LIMB_T_MAX (~ (mp_limb_t) 0) - -/* Must cast ULONG_MAX etc to unsigned long etc, since they might not be - unsigned on a K&R compiler. In particular the HP-UX 10 bundled K&R cc - treats the plain decimal values in <limits.h> as signed. */ -#define ULONG_HIGHBIT (ULONG_MAX ^ ((unsigned long) ULONG_MAX >> 1)) -#define UINT_HIGHBIT (UINT_MAX ^ ((unsigned) UINT_MAX >> 1)) -#define USHRT_HIGHBIT (USHRT_MAX ^ ((unsigned short) USHRT_MAX >> 1)) -#define GMP_LIMB_HIGHBIT (MP_LIMB_T_MAX ^ (MP_LIMB_T_MAX >> 1)) - -#if __GMP_MP_SIZE_T_INT -#define MP_SIZE_T_MAX INT_MAX -#define MP_SIZE_T_MIN INT_MIN -#else -#define MP_SIZE_T_MAX LONG_MAX -#define MP_SIZE_T_MIN LONG_MIN -#endif - -/* mp_exp_t is the same as mp_size_t */ -#define MP_EXP_T_MAX MP_SIZE_T_MAX -#define MP_EXP_T_MIN MP_SIZE_T_MIN - -#define LONG_HIGHBIT LONG_MIN -#define INT_HIGHBIT INT_MIN -#define SHRT_HIGHBIT SHRT_MIN - - -#define GMP_NUMB_HIGHBIT (CNST_LIMB(1) << (GMP_NUMB_BITS-1)) - -#if GMP_NAIL_BITS == 0 -#define GMP_NAIL_LOWBIT CNST_LIMB(0) -#else -#define GMP_NAIL_LOWBIT (CNST_LIMB(1) << GMP_NUMB_BITS) -#endif - -#if GMP_NAIL_BITS != 0 -/* Set various *_THRESHOLD values to be used for nails. Thus we avoid using - code that has not yet been qualified. */ - -#undef DC_DIV_QR_THRESHOLD -#define DC_DIV_QR_THRESHOLD 50 - -#undef DIVREM_1_NORM_THRESHOLD -#undef DIVREM_1_UNNORM_THRESHOLD -#undef MOD_1_NORM_THRESHOLD -#undef MOD_1_UNNORM_THRESHOLD -#undef USE_PREINV_DIVREM_1 -#undef DIVREM_2_THRESHOLD -#undef DIVEXACT_1_THRESHOLD -#define DIVREM_1_NORM_THRESHOLD MP_SIZE_T_MAX /* no preinv */ -#define DIVREM_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* no preinv */ -#define MOD_1_NORM_THRESHOLD MP_SIZE_T_MAX /* no preinv */ -#define MOD_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* no preinv */ -#define USE_PREINV_DIVREM_1 0 /* no preinv */ -#define DIVREM_2_THRESHOLD MP_SIZE_T_MAX /* no preinv */ - -/* mpn/generic/mul_fft.c is not nails-capable. */ -#undef MUL_FFT_THRESHOLD -#undef SQR_FFT_THRESHOLD -#define MUL_FFT_THRESHOLD MP_SIZE_T_MAX -#define SQR_FFT_THRESHOLD MP_SIZE_T_MAX -#endif - -/* Swap macros. */ - -#define MP_LIMB_T_SWAP(x, y) \ - do { \ - mp_limb_t __mp_limb_t_swap__tmp = (x); \ - (x) = (y); \ - (y) = __mp_limb_t_swap__tmp; \ - } while (0) -#define MP_SIZE_T_SWAP(x, y) \ - do { \ - mp_size_t __mp_size_t_swap__tmp = (x); \ - (x) = (y); \ - (y) = __mp_size_t_swap__tmp; \ - } while (0) - -#define MP_PTR_SWAP(x, y) \ - do { \ - mp_ptr __mp_ptr_swap__tmp = (x); \ - (x) = (y); \ - (y) = __mp_ptr_swap__tmp; \ - } while (0) -#define MP_SRCPTR_SWAP(x, y) \ - do { \ - mp_srcptr __mp_srcptr_swap__tmp = (x); \ - (x) = (y); \ - (y) = __mp_srcptr_swap__tmp; \ - } while (0) - -#define MPN_PTR_SWAP(xp,xs, yp,ys) \ - do { \ - MP_PTR_SWAP (xp, yp); \ - MP_SIZE_T_SWAP (xs, ys); \ - } while(0) -#define MPN_SRCPTR_SWAP(xp,xs, yp,ys) \ - do { \ - MP_SRCPTR_SWAP (xp, yp); \ - MP_SIZE_T_SWAP (xs, ys); \ - } while(0) - -#define MPZ_PTR_SWAP(x, y) \ - do { \ - mpz_ptr __mpz_ptr_swap__tmp = (x); \ - (x) = (y); \ - (y) = __mpz_ptr_swap__tmp; \ - } while (0) -#define MPZ_SRCPTR_SWAP(x, y) \ - do { \ - mpz_srcptr __mpz_srcptr_swap__tmp = (x); \ - (x) = (y); \ - (y) = __mpz_srcptr_swap__tmp; \ - } while (0) - -#define MPQ_PTR_SWAP(x, y) \ - do { \ - mpq_ptr __mpq_ptr_swap__tmp = (x); \ - (x) = (y); \ - (y) = __mpq_ptr_swap__tmp; \ - } while (0) -#define MPQ_SRCPTR_SWAP(x, y) \ - do { \ - mpq_srcptr __mpq_srcptr_swap__tmp = (x); \ - (x) = (y); \ - (y) = __mpq_srcptr_swap__tmp; \ - } while (0) - - -/* Enhancement: __gmp_allocate_func could have "__attribute__ ((malloc))", - but current gcc (3.0) doesn't seem to support that. */ -__GMP_DECLSPEC extern void * (*__gmp_allocate_func) (size_t); -__GMP_DECLSPEC extern void * (*__gmp_reallocate_func) (void *, size_t, size_t); -__GMP_DECLSPEC extern void (*__gmp_free_func) (void *, size_t); - -__GMP_DECLSPEC void *__gmp_default_allocate (size_t); -__GMP_DECLSPEC void *__gmp_default_reallocate (void *, size_t, size_t); -__GMP_DECLSPEC void __gmp_default_free (void *, size_t); - -#define __GMP_ALLOCATE_FUNC_TYPE(n,type) \ - ((type *) (*__gmp_allocate_func) ((n) * sizeof (type))) -#define __GMP_ALLOCATE_FUNC_LIMBS(n) __GMP_ALLOCATE_FUNC_TYPE (n, mp_limb_t) - -#define __GMP_REALLOCATE_FUNC_TYPE(p, old_size, new_size, type) \ - ((type *) (*__gmp_reallocate_func) \ - (p, (old_size) * sizeof (type), (new_size) * sizeof (type))) -#define __GMP_REALLOCATE_FUNC_LIMBS(p, old_size, new_size) \ - __GMP_REALLOCATE_FUNC_TYPE(p, old_size, new_size, mp_limb_t) - -#define __GMP_FREE_FUNC_TYPE(p,n,type) (*__gmp_free_func) (p, (n) * sizeof (type)) -#define __GMP_FREE_FUNC_LIMBS(p,n) __GMP_FREE_FUNC_TYPE (p, n, mp_limb_t) - -#define __GMP_REALLOCATE_FUNC_MAYBE(ptr, oldsize, newsize) \ - do { \ - if ((oldsize) != (newsize)) \ - (ptr) = (*__gmp_reallocate_func) (ptr, oldsize, newsize); \ - } while (0) - -#define __GMP_REALLOCATE_FUNC_MAYBE_TYPE(ptr, oldsize, newsize, type) \ - do { \ - if ((oldsize) != (newsize)) \ - (ptr) = (type *) (*__gmp_reallocate_func) \ - (ptr, (oldsize) * sizeof (type), (newsize) * sizeof (type)); \ - } while (0) - - -/* Dummy for non-gcc, code involving it will go dead. */ -#if ! defined (__GNUC__) || __GNUC__ < 2 -#define __builtin_constant_p(x) 0 -#endif - - -/* In gcc 2.96 and up on i386, tail calls are optimized to jumps if the - stack usage is compatible. __attribute__ ((regparm (N))) helps by - putting leading parameters in registers, avoiding extra stack. - - regparm cannot be used with calls going through the PLT, because the - binding code there may clobber the registers (%eax, %edx, %ecx) used for - the regparm parameters. Calls to local (ie. static) functions could - still use this, if we cared to differentiate locals and globals. - - On athlon-unknown-freebsd4.9 with gcc 3.3.3, regparm cannot be used with - -p or -pg profiling, since that version of gcc doesn't realize the - .mcount calls will clobber the parameter registers. Other systems are - ok, like debian with glibc 2.3.2 (mcount doesn't clobber), but we don't - bother to try to detect this. regparm is only an optimization so we just - disable it when profiling (profiling being a slowdown anyway). */ - -#if HAVE_HOST_CPU_FAMILY_x86 && __GMP_GNUC_PREREQ (2,96) && ! defined (PIC) \ - && ! WANT_PROFILING_PROF && ! WANT_PROFILING_GPROF -#define USE_LEADING_REGPARM 1 -#else -#define USE_LEADING_REGPARM 0 -#endif - -/* Macros for altering parameter order according to regparm usage. */ -#if USE_LEADING_REGPARM -#define REGPARM_2_1(a,b,x) x,a,b -#define REGPARM_3_1(a,b,c,x) x,a,b,c -#define REGPARM_ATTR(n) __attribute__ ((regparm (n))) -#else -#define REGPARM_2_1(a,b,x) a,b,x -#define REGPARM_3_1(a,b,c,x) a,b,c,x -#define REGPARM_ATTR(n) -#endif - - -/* ASM_L gives a local label for a gcc asm block, for use when temporary - local labels like "1:" might not be available, which is the case for - instance on the x86s (the SCO assembler doesn't support them). - - The label generated is made unique by including "%=" which is a unique - number for each insn. This ensures the same name can be used in multiple - asm blocks, perhaps via a macro. Since jumps between asm blocks are not - allowed there's no need for a label to be usable outside a single - block. */ - -#define ASM_L(name) LSYM_PREFIX "asm_%=_" #name - - -#if defined (__GNUC__) && HAVE_HOST_CPU_FAMILY_x86 -#if 0 -/* FIXME: Check that these actually improve things. - FIXME: Need a cld after each std. - FIXME: Can't have inputs in clobbered registers, must describe them as - dummy outputs, and add volatile. */ -#define MPN_COPY_INCR(DST, SRC, N) \ - __asm__ ("cld\n\trep\n\tmovsl" : : \ - "D" (DST), "S" (SRC), "c" (N) : \ - "cx", "di", "si", "memory") -#define MPN_COPY_DECR(DST, SRC, N) \ - __asm__ ("std\n\trep\n\tmovsl" : : \ - "D" ((DST) + (N) - 1), "S" ((SRC) + (N) - 1), "c" (N) : \ - "cx", "di", "si", "memory") -#endif -#endif - - -__GMP_DECLSPEC void __gmpz_aorsmul_1 (REGPARM_3_1 (mpz_ptr, mpz_srcptr, mp_limb_t, mp_size_t)) REGPARM_ATTR(1); -#define mpz_aorsmul_1(w,u,v,sub) __gmpz_aorsmul_1 (REGPARM_3_1 (w, u, v, sub)) - -#define mpz_n_pow_ui __gmpz_n_pow_ui -__GMP_DECLSPEC void mpz_n_pow_ui (mpz_ptr, mp_srcptr, mp_size_t, unsigned long); - - -#define mpn_addmul_1c __MPN(addmul_1c) -__GMP_DECLSPEC mp_limb_t mpn_addmul_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); - -#ifndef mpn_addmul_2 /* if not done with cpuvec in a fat binary */ -#define mpn_addmul_2 __MPN(addmul_2) -__GMP_DECLSPEC mp_limb_t mpn_addmul_2 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); -#endif - -#define mpn_addmul_3 __MPN(addmul_3) -__GMP_DECLSPEC mp_limb_t mpn_addmul_3 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); - -#define mpn_addmul_4 __MPN(addmul_4) -__GMP_DECLSPEC mp_limb_t mpn_addmul_4 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); - -#define mpn_addmul_5 __MPN(addmul_5) -__GMP_DECLSPEC mp_limb_t mpn_addmul_5 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); - -#define mpn_addmul_6 __MPN(addmul_6) -__GMP_DECLSPEC mp_limb_t mpn_addmul_6 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); - -#define mpn_addmul_7 __MPN(addmul_7) -__GMP_DECLSPEC mp_limb_t mpn_addmul_7 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); - -#define mpn_addmul_8 __MPN(addmul_8) -__GMP_DECLSPEC mp_limb_t mpn_addmul_8 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); - -/* Alternative entry point in mpn_addmul_2 for the benefit of mpn_sqr_basecase. */ -#define mpn_addmul_2s __MPN(addmul_2s) -__GMP_DECLSPEC mp_limb_t mpn_addmul_2s (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); - -/* mpn_addlsh1_n(c,a,b,n), when it exists, sets {c,n} to {a,n}+2*{b,n}, and - returns the carry out (0, 1 or 2). Use _ip1 when a=c. */ -#ifndef mpn_addlsh1_n /* if not done with cpuvec in a fat binary */ -#define mpn_addlsh1_n __MPN(addlsh1_n) -__GMP_DECLSPEC mp_limb_t mpn_addlsh1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#endif -#define mpn_addlsh1_nc __MPN(addlsh1_nc) -__GMP_DECLSPEC mp_limb_t mpn_addlsh1_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); -#if HAVE_NATIVE_mpn_addlsh1_n && ! HAVE_NATIVE_mpn_addlsh1_n_ip1 -#define mpn_addlsh1_n_ip1(dst,src,n) mpn_addlsh1_n(dst,dst,src,n) -#define HAVE_NATIVE_mpn_addlsh1_n_ip1 1 -#else -#define mpn_addlsh1_n_ip1 __MPN(addlsh1_n_ip1) -__GMP_DECLSPEC mp_limb_t mpn_addlsh1_n_ip1 (mp_ptr, mp_srcptr, mp_size_t); -#endif -#if HAVE_NATIVE_mpn_addlsh1_nc && ! HAVE_NATIVE_mpn_addlsh1_nc_ip1 -#define mpn_addlsh1_nc_ip1(dst,src,n,c) mpn_addlsh1_nc(dst,dst,src,n,c) -#define HAVE_NATIVE_mpn_addlsh1_nc_ip1 1 -#else -#define mpn_addlsh1_nc_ip1 __MPN(addlsh1_nc_ip1) -__GMP_DECLSPEC mp_limb_t mpn_addlsh1_nc_ip1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); -#endif - -#ifndef mpn_addlsh2_n /* if not done with cpuvec in a fat binary */ -/* mpn_addlsh2_n(c,a,b,n), when it exists, sets {c,n} to {a,n}+4*{b,n}, and - returns the carry out (0, ..., 4). Use _ip1 when a=c. */ -#define mpn_addlsh2_n __MPN(addlsh2_n) -__GMP_DECLSPEC mp_limb_t mpn_addlsh2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#endif -#define mpn_addlsh2_nc __MPN(addlsh2_nc) -__GMP_DECLSPEC mp_limb_t mpn_addlsh2_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); -#if HAVE_NATIVE_mpn_addlsh2_n && ! HAVE_NATIVE_mpn_addlsh2_n_ip1 -#define mpn_addlsh2_n_ip1(dst,src,n) mpn_addlsh2_n(dst,dst,src,n) -#define HAVE_NATIVE_mpn_addlsh2_n_ip1 1 -#else -#define mpn_addlsh2_n_ip1 __MPN(addlsh2_n_ip1) -__GMP_DECLSPEC mp_limb_t mpn_addlsh2_n_ip1 (mp_ptr, mp_srcptr, mp_size_t); -#endif -#if HAVE_NATIVE_mpn_addlsh2_nc && ! HAVE_NATIVE_mpn_addlsh2_nc_ip1 -#define mpn_addlsh2_nc_ip1(dst,src,n,c) mpn_addlsh2_nc(dst,dst,src,n,c) -#define HAVE_NATIVE_mpn_addlsh2_nc_ip1 1 -#else -#define mpn_addlsh2_nc_ip1 __MPN(addlsh2_nc_ip1) -__GMP_DECLSPEC mp_limb_t mpn_addlsh2_nc_ip1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); -#endif - -/* mpn_addlsh_n(c,a,b,n,k), when it exists, sets {c,n} to {a,n}+2^k*{b,n}, and - returns the carry out (0, ..., 2^k). Use _ip1 when a=c. */ -#define mpn_addlsh_n __MPN(addlsh_n) -__GMP_DECLSPEC mp_limb_t mpn_addlsh_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int); -#define mpn_addlsh_nc __MPN(addlsh_nc) -__GMP_DECLSPEC mp_limb_t mpn_addlsh_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int, mp_limb_t); -#if HAVE_NATIVE_mpn_addlsh_n && ! HAVE_NATIVE_mpn_addlsh_n_ip1 -#define mpn_addlsh_n_ip1(dst,src,n,s) mpn_addlsh_n(dst,dst,src,n,s) -#define HAVE_NATIVE_mpn_addlsh_n_ip1 1 -#else -#define mpn_addlsh_n_ip1 __MPN(addlsh_n_ip1) - __GMP_DECLSPEC mp_limb_t mpn_addlsh_n_ip1 (mp_ptr, mp_srcptr, mp_size_t, unsigned int); -#endif -#if HAVE_NATIVE_mpn_addlsh_nc && ! HAVE_NATIVE_mpn_addlsh_nc_ip1 -#define mpn_addlsh_nc_ip1(dst,src,n,s,c) mpn_addlsh_nc(dst,dst,src,n,s,c) -#define HAVE_NATIVE_mpn_addlsh_nc_ip1 1 -#else -#define mpn_addlsh_nc_ip1 __MPN(addlsh_nc_ip1) -__GMP_DECLSPEC mp_limb_t mpn_addlsh_nc_ip1 (mp_ptr, mp_srcptr, mp_size_t, unsigned int, mp_limb_t); -#endif - -#ifndef mpn_sublsh1_n /* if not done with cpuvec in a fat binary */ -/* mpn_sublsh1_n(c,a,b,n), when it exists, sets {c,n} to {a,n}-2*{b,n}, and - returns the borrow out (0, 1 or 2). Use _ip1 when a=c. */ -#define mpn_sublsh1_n __MPN(sublsh1_n) -__GMP_DECLSPEC mp_limb_t mpn_sublsh1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#endif -#define mpn_sublsh1_nc __MPN(sublsh1_nc) -__GMP_DECLSPEC mp_limb_t mpn_sublsh1_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); -#if HAVE_NATIVE_mpn_sublsh1_n && ! HAVE_NATIVE_mpn_sublsh1_n_ip1 -#define mpn_sublsh1_n_ip1(dst,src,n) mpn_sublsh1_n(dst,dst,src,n) -#define HAVE_NATIVE_mpn_sublsh1_n_ip1 1 -#else -#define mpn_sublsh1_n_ip1 __MPN(sublsh1_n_ip1) -__GMP_DECLSPEC mp_limb_t mpn_sublsh1_n_ip1 (mp_ptr, mp_srcptr, mp_size_t); -#endif -#if HAVE_NATIVE_mpn_sublsh1_nc && ! HAVE_NATIVE_mpn_sublsh1_nc_ip1 -#define mpn_sublsh1_nc_ip1(dst,src,n,c) mpn_sublsh1_nc(dst,dst,src,n,c) -#define HAVE_NATIVE_mpn_sublsh1_nc_ip1 1 -#else -#define mpn_sublsh1_nc_ip1 __MPN(sublsh1_nc_ip1) -__GMP_DECLSPEC mp_limb_t mpn_sublsh1_nc_ip1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); -#endif - -/* mpn_rsblsh1_n(c,a,b,n), when it exists, sets {c,n} to 2*{b,n}-{a,n}, and - returns the carry out (-1, 0, 1). */ -#define mpn_rsblsh1_n __MPN(rsblsh1_n) -__GMP_DECLSPEC mp_limb_signed_t mpn_rsblsh1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#define mpn_rsblsh1_nc __MPN(rsblsh1_nc) -__GMP_DECLSPEC mp_limb_signed_t mpn_rsblsh1_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); - -/* mpn_sublsh2_n(c,a,b,n), when it exists, sets {c,n} to {a,n}-4*{b,n}, and - returns the borrow out (0, ..., 4). Use _ip1 when a=c. */ -#define mpn_sublsh2_n __MPN(sublsh2_n) -__GMP_DECLSPEC mp_limb_t mpn_sublsh2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#define mpn_sublsh2_nc __MPN(sublsh2_nc) -__GMP_DECLSPEC mp_limb_t mpn_sublsh2_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); -#if HAVE_NATIVE_mpn_sublsh2_n && ! HAVE_NATIVE_mpn_sublsh2_n_ip1 -#define mpn_sublsh2_n_ip1(dst,src,n) mpn_sublsh2_n(dst,dst,src,n) -#define HAVE_NATIVE_mpn_sublsh2_n_ip1 1 -#else -#define mpn_sublsh2_n_ip1 __MPN(sublsh2_n_ip1) -__GMP_DECLSPEC mp_limb_t mpn_sublsh2_n_ip1 (mp_ptr, mp_srcptr, mp_size_t); -#endif -#if HAVE_NATIVE_mpn_sublsh2_nc && ! HAVE_NATIVE_mpn_sublsh2_nc_ip1 -#define mpn_sublsh2_nc_ip1(dst,src,n,c) mpn_sublsh2_nc(dst,dst,src,n,c) -#define HAVE_NATIVE_mpn_sublsh2_nc_ip1 1 -#else -#define mpn_sublsh2_nc_ip1 __MPN(sublsh2_nc_ip1) -__GMP_DECLSPEC mp_limb_t mpn_sublsh2_nc_ip1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); -#endif - -/* mpn_sublsh_n(c,a,b,n,k), when it exists, sets {c,n} to {a,n}-2^k*{b,n}, and - returns the carry out (0, ..., 2^k). Use _ip1 when a=c. */ -#define mpn_sublsh_n __MPN(sublsh_n) -__GMP_DECLSPEC mp_limb_t mpn_sublsh_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int); -#if HAVE_NATIVE_mpn_sublsh_n && ! HAVE_NATIVE_mpn_sublsh_n_ip1 -#define mpn_sublsh_n_ip1(dst,src,n,s) mpn_sublsh_n(dst,dst,src,n,s) -#define HAVE_NATIVE_mpn_sublsh_n_ip1 1 -#else -#define mpn_sublsh_n_ip1 __MPN(sublsh_n_ip1) -__GMP_DECLSPEC mp_limb_t mpn_sublsh_n_ip1 (mp_ptr, mp_srcptr, mp_size_t, unsigned int); -#endif -#if HAVE_NATIVE_mpn_sublsh_nc && ! HAVE_NATIVE_mpn_sublsh_nc_ip1 -#define mpn_sublsh_nc_ip1(dst,src,n,s,c) mpn_sublsh_nc(dst,dst,src,n,s,c) -#define HAVE_NATIVE_mpn_sublsh_nc_ip1 1 -#else -#define mpn_sublsh_nc_ip1 __MPN(sublsh_nc_ip1) -__GMP_DECLSPEC mp_limb_t mpn_sublsh_nc_ip1 (mp_ptr, mp_srcptr, mp_size_t, unsigned int, mp_limb_t); -#endif - -/* mpn_rsblsh2_n(c,a,b,n), when it exists, sets {c,n} to 4*{b,n}-{a,n}, and - returns the carry out (-1, ..., 3). */ -#define mpn_rsblsh2_n __MPN(rsblsh2_n) -__GMP_DECLSPEC mp_limb_signed_t mpn_rsblsh2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#define mpn_rsblsh2_nc __MPN(rsblsh2_nc) -__GMP_DECLSPEC mp_limb_signed_t mpn_rsblsh2_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); - -/* mpn_rsblsh_n(c,a,b,n,k), when it exists, sets {c,n} to 2^k*{b,n}-{a,n}, and - returns the carry out (-1, 0, ..., 2^k-1). */ -#define mpn_rsblsh_n __MPN(rsblsh_n) -__GMP_DECLSPEC mp_limb_signed_t mpn_rsblsh_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int); -#define mpn_rsblsh_nc __MPN(rsblsh_nc) -__GMP_DECLSPEC mp_limb_signed_t mpn_rsblsh_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int, mp_limb_t); - -/* mpn_rsh1add_n(c,a,b,n), when it exists, sets {c,n} to ({a,n} + {b,n}) >> 1, - and returns the bit rshifted out (0 or 1). */ -#define mpn_rsh1add_n __MPN(rsh1add_n) -__GMP_DECLSPEC mp_limb_t mpn_rsh1add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#define mpn_rsh1add_nc __MPN(rsh1add_nc) -__GMP_DECLSPEC mp_limb_t mpn_rsh1add_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); - -/* mpn_rsh1sub_n(c,a,b,n), when it exists, sets {c,n} to ({a,n} - {b,n}) >> 1, - and returns the bit rshifted out (0 or 1). If there's a borrow from the - subtract, it's stored as a 1 in the high bit of c[n-1], like a twos - complement negative. */ -#define mpn_rsh1sub_n __MPN(rsh1sub_n) -__GMP_DECLSPEC mp_limb_t mpn_rsh1sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#define mpn_rsh1sub_nc __MPN(rsh1sub_nc) -__GMP_DECLSPEC mp_limb_t mpn_rsh1sub_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); - -#ifndef mpn_lshiftc /* if not done with cpuvec in a fat binary */ -#define mpn_lshiftc __MPN(lshiftc) -__GMP_DECLSPEC mp_limb_t mpn_lshiftc (mp_ptr, mp_srcptr, mp_size_t, unsigned int); -#endif - -#define mpn_add_err1_n __MPN(add_err1_n) -__GMP_DECLSPEC mp_limb_t mpn_add_err1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_add_err2_n __MPN(add_err2_n) -__GMP_DECLSPEC mp_limb_t mpn_add_err2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_add_err3_n __MPN(add_err3_n) -__GMP_DECLSPEC mp_limb_t mpn_add_err3_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_sub_err1_n __MPN(sub_err1_n) -__GMP_DECLSPEC mp_limb_t mpn_sub_err1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_sub_err2_n __MPN(sub_err2_n) -__GMP_DECLSPEC mp_limb_t mpn_sub_err2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_sub_err3_n __MPN(sub_err3_n) -__GMP_DECLSPEC mp_limb_t mpn_sub_err3_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_add_n_sub_n __MPN(add_n_sub_n) -__GMP_DECLSPEC mp_limb_t mpn_add_n_sub_n (mp_ptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); - -#define mpn_add_n_sub_nc __MPN(add_n_sub_nc) -__GMP_DECLSPEC mp_limb_t mpn_add_n_sub_nc (mp_ptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_addaddmul_1msb0 __MPN(addaddmul_1msb0) -__GMP_DECLSPEC mp_limb_t mpn_addaddmul_1msb0 (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); - -#define mpn_divrem_1c __MPN(divrem_1c) -__GMP_DECLSPEC mp_limb_t mpn_divrem_1c (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); - -#define mpn_dump __MPN(dump) -__GMP_DECLSPEC void mpn_dump (mp_srcptr, mp_size_t); - -#define mpn_fib2_ui __MPN(fib2_ui) -__GMP_DECLSPEC mp_size_t mpn_fib2_ui (mp_ptr, mp_ptr, unsigned long); - -/* Remap names of internal mpn functions. */ -#define __clz_tab __MPN(clz_tab) -#define mpn_udiv_w_sdiv __MPN(udiv_w_sdiv) - -#define mpn_jacobi_base __MPN(jacobi_base) -__GMP_DECLSPEC int mpn_jacobi_base (mp_limb_t, mp_limb_t, int) ATTRIBUTE_CONST; - -#define mpn_jacobi_2 __MPN(jacobi_2) -__GMP_DECLSPEC int mpn_jacobi_2 (mp_srcptr, mp_srcptr, unsigned); - -#define mpn_jacobi_n __MPN(jacobi_n) -__GMP_DECLSPEC int mpn_jacobi_n (mp_ptr, mp_ptr, mp_size_t, unsigned); - -#define mpn_mod_1c __MPN(mod_1c) -__GMP_DECLSPEC mp_limb_t mpn_mod_1c (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_mul_1c __MPN(mul_1c) -__GMP_DECLSPEC mp_limb_t mpn_mul_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); - -#define mpn_mul_2 __MPN(mul_2) -__GMP_DECLSPEC mp_limb_t mpn_mul_2 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); - -#define mpn_mul_3 __MPN(mul_3) -__GMP_DECLSPEC mp_limb_t mpn_mul_3 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); - -#define mpn_mul_4 __MPN(mul_4) -__GMP_DECLSPEC mp_limb_t mpn_mul_4 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); - -#define mpn_mul_5 __MPN(mul_5) -__GMP_DECLSPEC mp_limb_t mpn_mul_5 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); - -#define mpn_mul_6 __MPN(mul_6) -__GMP_DECLSPEC mp_limb_t mpn_mul_6 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); - -#ifndef mpn_mul_basecase /* if not done with cpuvec in a fat binary */ -#define mpn_mul_basecase __MPN(mul_basecase) -__GMP_DECLSPEC void mpn_mul_basecase (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); -#endif - -#define mpn_mullo_n __MPN(mullo_n) -__GMP_DECLSPEC void mpn_mullo_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); - -#ifndef mpn_mullo_basecase /* if not done with cpuvec in a fat binary */ -#define mpn_mullo_basecase __MPN(mullo_basecase) -__GMP_DECLSPEC void mpn_mullo_basecase (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -#endif - -#ifndef mpn_sqr_basecase /* if not done with cpuvec in a fat binary */ -#define mpn_sqr_basecase __MPN(sqr_basecase) -__GMP_DECLSPEC void mpn_sqr_basecase (mp_ptr, mp_srcptr, mp_size_t); -#endif - -#define mpn_sqrlo __MPN(sqrlo) -__GMP_DECLSPEC void mpn_sqrlo (mp_ptr, mp_srcptr, mp_size_t); - -#define mpn_sqrlo_basecase __MPN(sqrlo_basecase) -__GMP_DECLSPEC void mpn_sqrlo_basecase (mp_ptr, mp_srcptr, mp_size_t); - -#define mpn_mulmid_basecase __MPN(mulmid_basecase) -__GMP_DECLSPEC void mpn_mulmid_basecase (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); - -#define mpn_mulmid_n __MPN(mulmid_n) -__GMP_DECLSPEC void mpn_mulmid_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); - -#define mpn_mulmid __MPN(mulmid) -__GMP_DECLSPEC void mpn_mulmid (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); - -#define mpn_submul_1c __MPN(submul_1c) -__GMP_DECLSPEC mp_limb_t mpn_submul_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); - -#ifndef mpn_redc_1 /* if not done with cpuvec in a fat binary */ -#define mpn_redc_1 __MPN(redc_1) -__GMP_DECLSPEC mp_limb_t mpn_redc_1 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); -#endif - -#ifndef mpn_redc_2 /* if not done with cpuvec in a fat binary */ -#define mpn_redc_2 __MPN(redc_2) -__GMP_DECLSPEC mp_limb_t mpn_redc_2 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); -#endif - -#define mpn_redc_n __MPN(redc_n) -__GMP_DECLSPEC void mpn_redc_n (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); - - -#ifndef mpn_mod_1_1p_cps /* if not done with cpuvec in a fat binary */ -#define mpn_mod_1_1p_cps __MPN(mod_1_1p_cps) -__GMP_DECLSPEC void mpn_mod_1_1p_cps (mp_limb_t [4], mp_limb_t); -#endif -#ifndef mpn_mod_1_1p /* if not done with cpuvec in a fat binary */ -#define mpn_mod_1_1p __MPN(mod_1_1p) -__GMP_DECLSPEC mp_limb_t mpn_mod_1_1p (mp_srcptr, mp_size_t, mp_limb_t, const mp_limb_t [4]) __GMP_ATTRIBUTE_PURE; -#endif - -#ifndef mpn_mod_1s_2p_cps /* if not done with cpuvec in a fat binary */ -#define mpn_mod_1s_2p_cps __MPN(mod_1s_2p_cps) -__GMP_DECLSPEC void mpn_mod_1s_2p_cps (mp_limb_t [5], mp_limb_t); -#endif -#ifndef mpn_mod_1s_2p /* if not done with cpuvec in a fat binary */ -#define mpn_mod_1s_2p __MPN(mod_1s_2p) -__GMP_DECLSPEC mp_limb_t mpn_mod_1s_2p (mp_srcptr, mp_size_t, mp_limb_t, const mp_limb_t [5]) __GMP_ATTRIBUTE_PURE; -#endif - -#ifndef mpn_mod_1s_3p_cps /* if not done with cpuvec in a fat binary */ -#define mpn_mod_1s_3p_cps __MPN(mod_1s_3p_cps) -__GMP_DECLSPEC void mpn_mod_1s_3p_cps (mp_limb_t [6], mp_limb_t); -#endif -#ifndef mpn_mod_1s_3p /* if not done with cpuvec in a fat binary */ -#define mpn_mod_1s_3p __MPN(mod_1s_3p) -__GMP_DECLSPEC mp_limb_t mpn_mod_1s_3p (mp_srcptr, mp_size_t, mp_limb_t, const mp_limb_t [6]) __GMP_ATTRIBUTE_PURE; -#endif - -#ifndef mpn_mod_1s_4p_cps /* if not done with cpuvec in a fat binary */ -#define mpn_mod_1s_4p_cps __MPN(mod_1s_4p_cps) -__GMP_DECLSPEC void mpn_mod_1s_4p_cps (mp_limb_t [7], mp_limb_t); -#endif -#ifndef mpn_mod_1s_4p /* if not done with cpuvec in a fat binary */ -#define mpn_mod_1s_4p __MPN(mod_1s_4p) -__GMP_DECLSPEC mp_limb_t mpn_mod_1s_4p (mp_srcptr, mp_size_t, mp_limb_t, const mp_limb_t [7]) __GMP_ATTRIBUTE_PURE; -#endif - -#define mpn_bc_mulmod_bnm1 __MPN(bc_mulmod_bnm1) -__GMP_DECLSPEC void mpn_bc_mulmod_bnm1 (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_mulmod_bnm1 __MPN(mulmod_bnm1) -__GMP_DECLSPEC void mpn_mulmod_bnm1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_mulmod_bnm1_next_size __MPN(mulmod_bnm1_next_size) -__GMP_DECLSPEC mp_size_t mpn_mulmod_bnm1_next_size (mp_size_t) ATTRIBUTE_CONST; -static inline mp_size_t -mpn_mulmod_bnm1_itch (mp_size_t rn, mp_size_t an, mp_size_t bn) { - mp_size_t n, itch; - n = rn >> 1; - itch = rn + 4 + - (an > n ? (bn > n ? rn : n) : 0); - return itch; -} - -#define mpn_sqrmod_bnm1 __MPN(sqrmod_bnm1) -__GMP_DECLSPEC void mpn_sqrmod_bnm1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_sqrmod_bnm1_next_size __MPN(sqrmod_bnm1_next_size) -__GMP_DECLSPEC mp_size_t mpn_sqrmod_bnm1_next_size (mp_size_t) ATTRIBUTE_CONST; -static inline mp_size_t -mpn_sqrmod_bnm1_itch (mp_size_t rn, mp_size_t an) { - mp_size_t n, itch; - n = rn >> 1; - itch = rn + 3 + - (an > n ? an : 0); - return itch; -} - -typedef __gmp_randstate_struct *gmp_randstate_ptr; -typedef const __gmp_randstate_struct *gmp_randstate_srcptr; - -/* Pseudo-random number generator function pointers structure. */ -typedef struct { - void (*randseed_fn) (gmp_randstate_t, mpz_srcptr); - void (*randget_fn) (gmp_randstate_t, mp_ptr, unsigned long int); - void (*randclear_fn) (gmp_randstate_t); - void (*randiset_fn) (gmp_randstate_ptr, gmp_randstate_srcptr); -} gmp_randfnptr_t; - -/* Macro to obtain a void pointer to the function pointers structure. */ -#define RNG_FNPTR(rstate) ((rstate)->_mp_algdata._mp_lc) - -/* Macro to obtain a pointer to the generator's state. - When used as a lvalue the rvalue needs to be cast to mp_ptr. */ -#define RNG_STATE(rstate) ((rstate)->_mp_seed->_mp_d) - -/* Write a given number of random bits to rp. */ -#define _gmp_rand(rp, state, bits) \ - do { \ - gmp_randstate_ptr __rstate = (state); \ - (*((gmp_randfnptr_t *) RNG_FNPTR (__rstate))->randget_fn) \ - (__rstate, rp, bits); \ - } while (0) - -__GMP_DECLSPEC void __gmp_randinit_mt_noseed (gmp_randstate_t); - - -/* __gmp_rands is the global state for the old-style random functions, and - is also used in the test programs (hence the __GMP_DECLSPEC). - - There's no seeding here, so mpz_random etc will generate the same - sequence every time. This is not unlike the C library random functions - if you don't seed them, so perhaps it's acceptable. Digging up a seed - from /dev/random or the like would work on many systems, but might - encourage a false confidence, since it'd be pretty much impossible to do - something that would work reliably everywhere. In any case the new style - functions are recommended to applications which care about randomness, so - the old functions aren't too important. */ - -__GMP_DECLSPEC extern char __gmp_rands_initialized; -__GMP_DECLSPEC extern gmp_randstate_t __gmp_rands; - -#define RANDS \ - ((__gmp_rands_initialized ? 0 \ - : (__gmp_rands_initialized = 1, \ - __gmp_randinit_mt_noseed (__gmp_rands), 0)), \ - __gmp_rands) - -/* this is used by the test programs, to free memory */ -#define RANDS_CLEAR() \ - do { \ - if (__gmp_rands_initialized) \ - { \ - __gmp_rands_initialized = 0; \ - gmp_randclear (__gmp_rands); \ - } \ - } while (0) - - -/* For a threshold between algorithms A and B, size>=thresh is where B - should be used. Special value MP_SIZE_T_MAX means only ever use A, or - value 0 means only ever use B. The tests for these special values will - be compile-time constants, so the compiler should be able to eliminate - the code for the unwanted algorithm. */ - -#if ! defined (__GNUC__) || __GNUC__ < 2 -#define ABOVE_THRESHOLD(size,thresh) \ - ((thresh) == 0 \ - || ((thresh) != MP_SIZE_T_MAX \ - && (size) >= (thresh))) -#else -#define ABOVE_THRESHOLD(size,thresh) \ - ((__builtin_constant_p (thresh) && (thresh) == 0) \ - || (!(__builtin_constant_p (thresh) && (thresh) == MP_SIZE_T_MAX) \ - && (size) >= (thresh))) -#endif -#define BELOW_THRESHOLD(size,thresh) (! ABOVE_THRESHOLD (size, thresh)) - -#define MPN_TOOM22_MUL_MINSIZE 4 -#define MPN_TOOM2_SQR_MINSIZE 4 - -#define MPN_TOOM33_MUL_MINSIZE 17 -#define MPN_TOOM3_SQR_MINSIZE 17 - -#define MPN_TOOM44_MUL_MINSIZE 30 -#define MPN_TOOM4_SQR_MINSIZE 30 - -#define MPN_TOOM6H_MUL_MINSIZE 46 -#define MPN_TOOM6_SQR_MINSIZE 46 - -#define MPN_TOOM8H_MUL_MINSIZE 86 -#define MPN_TOOM8_SQR_MINSIZE 86 - -#define MPN_TOOM32_MUL_MINSIZE 10 -#define MPN_TOOM42_MUL_MINSIZE 10 -#define MPN_TOOM43_MUL_MINSIZE 25 -#define MPN_TOOM53_MUL_MINSIZE 17 -#define MPN_TOOM54_MUL_MINSIZE 31 -#define MPN_TOOM63_MUL_MINSIZE 49 - -#define MPN_TOOM42_MULMID_MINSIZE 4 - -#define mpn_sqr_diagonal __MPN(sqr_diagonal) -__GMP_DECLSPEC void mpn_sqr_diagonal (mp_ptr, mp_srcptr, mp_size_t); - -#define mpn_sqr_diag_addlsh1 __MPN(sqr_diag_addlsh1) -__GMP_DECLSPEC void mpn_sqr_diag_addlsh1 (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); - -#define mpn_toom_interpolate_5pts __MPN(toom_interpolate_5pts) -__GMP_DECLSPEC void mpn_toom_interpolate_5pts (mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_size_t, int, mp_limb_t); - -enum toom6_flags {toom6_all_pos = 0, toom6_vm1_neg = 1, toom6_vm2_neg = 2}; -#define mpn_toom_interpolate_6pts __MPN(toom_interpolate_6pts) -__GMP_DECLSPEC void mpn_toom_interpolate_6pts (mp_ptr, mp_size_t, enum toom6_flags, mp_ptr, mp_ptr, mp_ptr, mp_size_t); - -enum toom7_flags { toom7_w1_neg = 1, toom7_w3_neg = 2 }; -#define mpn_toom_interpolate_7pts __MPN(toom_interpolate_7pts) -__GMP_DECLSPEC void mpn_toom_interpolate_7pts (mp_ptr, mp_size_t, enum toom7_flags, mp_ptr, mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_ptr); - -#define mpn_toom_interpolate_8pts __MPN(toom_interpolate_8pts) -__GMP_DECLSPEC void mpn_toom_interpolate_8pts (mp_ptr, mp_size_t, mp_ptr, mp_ptr, mp_size_t, mp_ptr); - -#define mpn_toom_interpolate_12pts __MPN(toom_interpolate_12pts) -__GMP_DECLSPEC void mpn_toom_interpolate_12pts (mp_ptr, mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_size_t, int, mp_ptr); - -#define mpn_toom_interpolate_16pts __MPN(toom_interpolate_16pts) -__GMP_DECLSPEC void mpn_toom_interpolate_16pts (mp_ptr, mp_ptr, mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_size_t, int, mp_ptr); - -#define mpn_toom_couple_handling __MPN(toom_couple_handling) -__GMP_DECLSPEC void mpn_toom_couple_handling (mp_ptr, mp_size_t, mp_ptr, int, mp_size_t, int, int); - -#define mpn_toom_eval_dgr3_pm1 __MPN(toom_eval_dgr3_pm1) -__GMP_DECLSPEC int mpn_toom_eval_dgr3_pm1 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_size_t, mp_ptr); - -#define mpn_toom_eval_dgr3_pm2 __MPN(toom_eval_dgr3_pm2) -__GMP_DECLSPEC int mpn_toom_eval_dgr3_pm2 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_size_t, mp_ptr); - -#define mpn_toom_eval_pm1 __MPN(toom_eval_pm1) -__GMP_DECLSPEC int mpn_toom_eval_pm1 (mp_ptr, mp_ptr, unsigned, mp_srcptr, mp_size_t, mp_size_t, mp_ptr); - -#define mpn_toom_eval_pm2 __MPN(toom_eval_pm2) -__GMP_DECLSPEC int mpn_toom_eval_pm2 (mp_ptr, mp_ptr, unsigned, mp_srcptr, mp_size_t, mp_size_t, mp_ptr); - -#define mpn_toom_eval_pm2exp __MPN(toom_eval_pm2exp) -__GMP_DECLSPEC int mpn_toom_eval_pm2exp (mp_ptr, mp_ptr, unsigned, mp_srcptr, mp_size_t, mp_size_t, unsigned, mp_ptr); - -#define mpn_toom_eval_pm2rexp __MPN(toom_eval_pm2rexp) -__GMP_DECLSPEC int mpn_toom_eval_pm2rexp (mp_ptr, mp_ptr, unsigned, mp_srcptr, mp_size_t, mp_size_t, unsigned, mp_ptr); - -#define mpn_toom22_mul __MPN(toom22_mul) -__GMP_DECLSPEC void mpn_toom22_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom32_mul __MPN(toom32_mul) -__GMP_DECLSPEC void mpn_toom32_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom42_mul __MPN(toom42_mul) -__GMP_DECLSPEC void mpn_toom42_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom52_mul __MPN(toom52_mul) -__GMP_DECLSPEC void mpn_toom52_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom62_mul __MPN(toom62_mul) -__GMP_DECLSPEC void mpn_toom62_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom2_sqr __MPN(toom2_sqr) -__GMP_DECLSPEC void mpn_toom2_sqr (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom33_mul __MPN(toom33_mul) -__GMP_DECLSPEC void mpn_toom33_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom43_mul __MPN(toom43_mul) -__GMP_DECLSPEC void mpn_toom43_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom53_mul __MPN(toom53_mul) -__GMP_DECLSPEC void mpn_toom53_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom54_mul __MPN(toom54_mul) -__GMP_DECLSPEC void mpn_toom54_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom63_mul __MPN(toom63_mul) -__GMP_DECLSPEC void mpn_toom63_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom3_sqr __MPN(toom3_sqr) -__GMP_DECLSPEC void mpn_toom3_sqr (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom44_mul __MPN(toom44_mul) -__GMP_DECLSPEC void mpn_toom44_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom4_sqr __MPN(toom4_sqr) -__GMP_DECLSPEC void mpn_toom4_sqr (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom6h_mul __MPN(toom6h_mul) -__GMP_DECLSPEC void mpn_toom6h_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom6_sqr __MPN(toom6_sqr) -__GMP_DECLSPEC void mpn_toom6_sqr (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom8h_mul __MPN(toom8h_mul) -__GMP_DECLSPEC void mpn_toom8h_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom8_sqr __MPN(toom8_sqr) -__GMP_DECLSPEC void mpn_toom8_sqr (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_toom42_mulmid __MPN(toom42_mulmid) -__GMP_DECLSPEC void mpn_toom42_mulmid (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_fft_best_k __MPN(fft_best_k) -__GMP_DECLSPEC int mpn_fft_best_k (mp_size_t, int) ATTRIBUTE_CONST; - -#define mpn_mul_fft __MPN(mul_fft) -__GMP_DECLSPEC mp_limb_t mpn_mul_fft (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, int); - -#define mpn_mul_fft_full __MPN(mul_fft_full) -__GMP_DECLSPEC void mpn_mul_fft_full (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); - -#define mpn_nussbaumer_mul __MPN(nussbaumer_mul) -__GMP_DECLSPEC void mpn_nussbaumer_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); - -#define mpn_fft_next_size __MPN(fft_next_size) -__GMP_DECLSPEC mp_size_t mpn_fft_next_size (mp_size_t, int) ATTRIBUTE_CONST; - -#define mpn_div_qr_1n_pi1 __MPN(div_qr_1n_pi1) - __GMP_DECLSPEC mp_limb_t mpn_div_qr_1n_pi1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t, mp_limb_t); - -#define mpn_div_qr_2n_pi1 __MPN(div_qr_2n_pi1) - __GMP_DECLSPEC mp_limb_t mpn_div_qr_2n_pi1 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t, mp_limb_t); - -#define mpn_div_qr_2u_pi1 __MPN(div_qr_2u_pi1) - __GMP_DECLSPEC mp_limb_t mpn_div_qr_2u_pi1 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t, int, mp_limb_t); - -#define mpn_sbpi1_div_qr __MPN(sbpi1_div_qr) -__GMP_DECLSPEC mp_limb_t mpn_sbpi1_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_sbpi1_div_q __MPN(sbpi1_div_q) -__GMP_DECLSPEC mp_limb_t mpn_sbpi1_div_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_sbpi1_divappr_q __MPN(sbpi1_divappr_q) -__GMP_DECLSPEC mp_limb_t mpn_sbpi1_divappr_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_dcpi1_div_qr __MPN(dcpi1_div_qr) -__GMP_DECLSPEC mp_limb_t mpn_dcpi1_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, gmp_pi1_t *); -#define mpn_dcpi1_div_qr_n __MPN(dcpi1_div_qr_n) -__GMP_DECLSPEC mp_limb_t mpn_dcpi1_div_qr_n (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, gmp_pi1_t *, mp_ptr); - -#define mpn_dcpi1_div_q __MPN(dcpi1_div_q) -__GMP_DECLSPEC mp_limb_t mpn_dcpi1_div_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, gmp_pi1_t *); - -#define mpn_dcpi1_divappr_q __MPN(dcpi1_divappr_q) -__GMP_DECLSPEC mp_limb_t mpn_dcpi1_divappr_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, gmp_pi1_t *); -#define mpn_dcpi1_divappr_q_n __MPN(dcpi1_divappr_q_n) -__GMP_DECLSPEC mp_limb_t mpn_dcpi1_divappr_q_n (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, gmp_pi1_t *, mp_ptr); - -#define mpn_mu_div_qr __MPN(mu_div_qr) -__GMP_DECLSPEC mp_limb_t mpn_mu_div_qr (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_mu_div_qr_itch __MPN(mu_div_qr_itch) -__GMP_DECLSPEC mp_size_t mpn_mu_div_qr_itch (mp_size_t, mp_size_t, int) ATTRIBUTE_CONST; -#define mpn_mu_div_qr_choose_in __MPN(mu_div_qr_choose_in) -__GMP_DECLSPEC mp_size_t mpn_mu_div_qr_choose_in (mp_size_t, mp_size_t, int); - -#define mpn_preinv_mu_div_qr __MPN(preinv_mu_div_qr) -__GMP_DECLSPEC mp_limb_t mpn_preinv_mu_div_qr (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_preinv_mu_div_qr_itch __MPN(preinv_mu_div_qr_itch) -__GMP_DECLSPEC mp_size_t mpn_preinv_mu_div_qr_itch (mp_size_t, mp_size_t, mp_size_t) ATTRIBUTE_CONST; - -#define mpn_mu_divappr_q __MPN(mu_divappr_q) -__GMP_DECLSPEC mp_limb_t mpn_mu_divappr_q (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_mu_divappr_q_itch __MPN(mu_divappr_q_itch) -__GMP_DECLSPEC mp_size_t mpn_mu_divappr_q_itch (mp_size_t, mp_size_t, int) ATTRIBUTE_CONST; -#define mpn_mu_divappr_q_choose_in __MPN(mu_divappr_q_choose_in) -__GMP_DECLSPEC mp_size_t mpn_mu_divappr_q_choose_in (mp_size_t, mp_size_t, int); - -#define mpn_preinv_mu_divappr_q __MPN(preinv_mu_divappr_q) -__GMP_DECLSPEC mp_limb_t mpn_preinv_mu_divappr_q (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_mu_div_q __MPN(mu_div_q) -__GMP_DECLSPEC mp_limb_t mpn_mu_div_q (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_mu_div_q_itch __MPN(mu_div_q_itch) -__GMP_DECLSPEC mp_size_t mpn_mu_div_q_itch (mp_size_t, mp_size_t, int) ATTRIBUTE_CONST; - -#define mpn_div_q __MPN(div_q) -__GMP_DECLSPEC void mpn_div_q (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - -#define mpn_invert __MPN(invert) -__GMP_DECLSPEC void mpn_invert (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_invert_itch(n) mpn_invertappr_itch(n) - -#define mpn_ni_invertappr __MPN(ni_invertappr) -__GMP_DECLSPEC mp_limb_t mpn_ni_invertappr (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_invertappr __MPN(invertappr) -__GMP_DECLSPEC mp_limb_t mpn_invertappr (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_invertappr_itch(n) (2 * (n)) - -#define mpn_binvert __MPN(binvert) -__GMP_DECLSPEC void mpn_binvert (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_binvert_itch __MPN(binvert_itch) -__GMP_DECLSPEC mp_size_t mpn_binvert_itch (mp_size_t) ATTRIBUTE_CONST; - -#define mpn_bdiv_q_1 __MPN(bdiv_q_1) -__GMP_DECLSPEC mp_limb_t mpn_bdiv_q_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_pi1_bdiv_q_1 __MPN(pi1_bdiv_q_1) -__GMP_DECLSPEC mp_limb_t mpn_pi1_bdiv_q_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t, int); - -#define mpn_sbpi1_bdiv_qr __MPN(sbpi1_bdiv_qr) -__GMP_DECLSPEC mp_limb_t mpn_sbpi1_bdiv_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_sbpi1_bdiv_q __MPN(sbpi1_bdiv_q) -__GMP_DECLSPEC void mpn_sbpi1_bdiv_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_dcpi1_bdiv_qr __MPN(dcpi1_bdiv_qr) -__GMP_DECLSPEC mp_limb_t mpn_dcpi1_bdiv_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); -#define mpn_dcpi1_bdiv_qr_n_itch __MPN(dcpi1_bdiv_qr_n_itch) -__GMP_DECLSPEC mp_size_t mpn_dcpi1_bdiv_qr_n_itch (mp_size_t) ATTRIBUTE_CONST; - -#define mpn_dcpi1_bdiv_qr_n __MPN(dcpi1_bdiv_qr_n) -__GMP_DECLSPEC mp_limb_t mpn_dcpi1_bdiv_qr_n (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr); -#define mpn_dcpi1_bdiv_q __MPN(dcpi1_bdiv_q) -__GMP_DECLSPEC void mpn_dcpi1_bdiv_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_dcpi1_bdiv_q_n __MPN(dcpi1_bdiv_q_n) -__GMP_DECLSPEC void mpn_dcpi1_bdiv_q_n (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr); -#define mpn_dcpi1_bdiv_q_n_itch __MPN(dcpi1_bdiv_q_n_itch) -__GMP_DECLSPEC mp_size_t mpn_dcpi1_bdiv_q_n_itch (mp_size_t) ATTRIBUTE_CONST; - -#define mpn_mu_bdiv_qr __MPN(mu_bdiv_qr) -__GMP_DECLSPEC mp_limb_t mpn_mu_bdiv_qr (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_mu_bdiv_qr_itch __MPN(mu_bdiv_qr_itch) -__GMP_DECLSPEC mp_size_t mpn_mu_bdiv_qr_itch (mp_size_t, mp_size_t) ATTRIBUTE_CONST; - -#define mpn_mu_bdiv_q __MPN(mu_bdiv_q) -__GMP_DECLSPEC void mpn_mu_bdiv_q (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_mu_bdiv_q_itch __MPN(mu_bdiv_q_itch) -__GMP_DECLSPEC mp_size_t mpn_mu_bdiv_q_itch (mp_size_t, mp_size_t) ATTRIBUTE_CONST; - -#define mpn_bdiv_qr __MPN(bdiv_qr) -__GMP_DECLSPEC mp_limb_t mpn_bdiv_qr (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_bdiv_qr_itch __MPN(bdiv_qr_itch) -__GMP_DECLSPEC mp_size_t mpn_bdiv_qr_itch (mp_size_t, mp_size_t) ATTRIBUTE_CONST; - -#define mpn_bdiv_q __MPN(bdiv_q) -__GMP_DECLSPEC void mpn_bdiv_q (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_bdiv_q_itch __MPN(bdiv_q_itch) -__GMP_DECLSPEC mp_size_t mpn_bdiv_q_itch (mp_size_t, mp_size_t) ATTRIBUTE_CONST; - -#define mpn_divexact __MPN(divexact) -__GMP_DECLSPEC void mpn_divexact (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); -#define mpn_divexact_itch __MPN(divexact_itch) -__GMP_DECLSPEC mp_size_t mpn_divexact_itch (mp_size_t, mp_size_t) ATTRIBUTE_CONST; - -#ifndef mpn_bdiv_dbm1c /* if not done with cpuvec in a fat binary */ -#define mpn_bdiv_dbm1c __MPN(bdiv_dbm1c) -__GMP_DECLSPEC mp_limb_t mpn_bdiv_dbm1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); -#endif - -#define mpn_bdiv_dbm1(dst, src, size, divisor) \ - mpn_bdiv_dbm1c (dst, src, size, divisor, __GMP_CAST (mp_limb_t, 0)) - -#define mpn_powm __MPN(powm) -__GMP_DECLSPEC void mpn_powm (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_powlo __MPN(powlo) -__GMP_DECLSPEC void mpn_powlo (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_size_t, mp_ptr); - -#define mpn_sec_pi1_div_qr __MPN(sec_pi1_div_qr) -__GMP_DECLSPEC mp_limb_t mpn_sec_pi1_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr); -#define mpn_sec_pi1_div_r __MPN(sec_pi1_div_r) -__GMP_DECLSPEC void mpn_sec_pi1_div_r (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr); - - -/* Override mpn_addlsh1_n, mpn_addlsh2_n, mpn_sublsh1_n, etc with mpn_addlsh_n, - etc when !HAVE_NATIVE the former but HAVE_NATIVE_ the latter. We then lie - and say these macros represent native functions, but leave a trace by using - the value 2 rather than 1. */ - -#if HAVE_NATIVE_mpn_addlsh_n && ! HAVE_NATIVE_mpn_addlsh1_n -#undef mpn_addlsh1_n -#define mpn_addlsh1_n(a,b,c,d) mpn_addlsh_n(a,b,c,d,1) -#define HAVE_NATIVE_mpn_addlsh1_n 2 -#endif - -#if HAVE_NATIVE_mpn_addlsh_n && ! HAVE_NATIVE_mpn_addlsh2_n -#undef mpn_addlsh2_n -#define mpn_addlsh2_n(a,b,c,d) mpn_addlsh_n(a,b,c,d,2) -#define HAVE_NATIVE_mpn_addlsh2_n 2 -#endif - -#if HAVE_NATIVE_mpn_sublsh_n && ! HAVE_NATIVE_mpn_sublsh1_n -#undef mpn_sublsh1_n -#define mpn_sublsh1_n(a,b,c,d) mpn_sublsh_n(a,b,c,d,1) -#define HAVE_NATIVE_mpn_sublsh1_n 2 -#endif - -#if HAVE_NATIVE_mpn_sublsh_n && ! HAVE_NATIVE_mpn_sublsh2_n -#undef mpn_sublsh2_n -#define mpn_sublsh2_n(a,b,c,d) mpn_sublsh_n(a,b,c,d,2) -#define HAVE_NATIVE_mpn_sublsh2_n 2 -#endif - -#if HAVE_NATIVE_mpn_rsblsh_n && ! HAVE_NATIVE_mpn_rsblsh1_n -#undef mpn_rsblsh1_n -#define mpn_rsblsh1_n(a,b,c,d) mpn_rsblsh_n(a,b,c,d,1) -#define HAVE_NATIVE_mpn_rsblsh1_n 2 -#endif - -#if HAVE_NATIVE_mpn_rsblsh_n && ! HAVE_NATIVE_mpn_rsblsh2_n -#undef mpn_rsblsh2_n -#define mpn_rsblsh2_n(a,b,c,d) mpn_rsblsh_n(a,b,c,d,2) -#define HAVE_NATIVE_mpn_rsblsh2_n 2 -#endif - - -#ifndef DIVEXACT_BY3_METHOD -#if GMP_NUMB_BITS % 2 == 0 && ! defined (HAVE_NATIVE_mpn_divexact_by3c) -#define DIVEXACT_BY3_METHOD 0 /* default to using mpn_bdiv_dbm1c */ -#else -#define DIVEXACT_BY3_METHOD 1 -#endif -#endif - -#if DIVEXACT_BY3_METHOD == 0 -#undef mpn_divexact_by3 -#define mpn_divexact_by3(dst,src,size) \ - (3 & mpn_bdiv_dbm1 (dst, src, size, __GMP_CAST (mp_limb_t, GMP_NUMB_MASK / 3))) -/* override mpn_divexact_by3c defined in gmp.h */ -/* -#undef mpn_divexact_by3c -#define mpn_divexact_by3c(dst,src,size,cy) \ - (3 & mpn_bdiv_dbm1c (dst, src, size, __GMP_CAST (mp_limb_t, GMP_NUMB_MASK / 3, GMP_NUMB_MASK / 3 * cy))) -*/ -#endif - -#if GMP_NUMB_BITS % 4 == 0 -#define mpn_divexact_by5(dst,src,size) \ - (7 & 3 * mpn_bdiv_dbm1 (dst, src, size, __GMP_CAST (mp_limb_t, GMP_NUMB_MASK / 5))) -#endif - -#if GMP_NUMB_BITS % 3 == 0 -#define mpn_divexact_by7(dst,src,size) \ - (7 & 1 * mpn_bdiv_dbm1 (dst, src, size, __GMP_CAST (mp_limb_t, GMP_NUMB_MASK / 7))) -#endif - -#if GMP_NUMB_BITS % 6 == 0 -#define mpn_divexact_by9(dst,src,size) \ - (15 & 7 * mpn_bdiv_dbm1 (dst, src, size, __GMP_CAST (mp_limb_t, GMP_NUMB_MASK / 9))) -#endif - -#if GMP_NUMB_BITS % 10 == 0 -#define mpn_divexact_by11(dst,src,size) \ - (15 & 5 * mpn_bdiv_dbm1 (dst, src, size, __GMP_CAST (mp_limb_t, GMP_NUMB_MASK / 11))) -#endif - -#if GMP_NUMB_BITS % 12 == 0 -#define mpn_divexact_by13(dst,src,size) \ - (15 & 3 * mpn_bdiv_dbm1 (dst, src, size, __GMP_CAST (mp_limb_t, GMP_NUMB_MASK / 13))) -#endif - -#if GMP_NUMB_BITS % 4 == 0 -#define mpn_divexact_by15(dst,src,size) \ - (15 & 1 * mpn_bdiv_dbm1 (dst, src, size, __GMP_CAST (mp_limb_t, GMP_NUMB_MASK / 15))) -#endif - -#define mpz_divexact_gcd __gmpz_divexact_gcd -__GMP_DECLSPEC void mpz_divexact_gcd (mpz_ptr, mpz_srcptr, mpz_srcptr); - -#define mpz_prodlimbs __gmpz_prodlimbs -__GMP_DECLSPEC mp_size_t mpz_prodlimbs (mpz_ptr, mp_ptr, mp_size_t); - -#define mpz_oddfac_1 __gmpz_oddfac_1 -__GMP_DECLSPEC void mpz_oddfac_1 (mpz_ptr, mp_limb_t, unsigned); - -#define mpz_inp_str_nowhite __gmpz_inp_str_nowhite -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpz_inp_str_nowhite (mpz_ptr, FILE *, int, int, size_t); -#endif - -#define mpn_divisible_p __MPN(divisible_p) -__GMP_DECLSPEC int mpn_divisible_p (mp_srcptr, mp_size_t, mp_srcptr, mp_size_t) __GMP_ATTRIBUTE_PURE; - -#define mpn_rootrem __MPN(rootrem) -__GMP_DECLSPEC mp_size_t mpn_rootrem (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_broot __MPN(broot) -__GMP_DECLSPEC void mpn_broot (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_broot_invm1 __MPN(broot_invm1) -__GMP_DECLSPEC void mpn_broot_invm1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); - -#define mpn_brootinv __MPN(brootinv) -__GMP_DECLSPEC void mpn_brootinv (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr); - -#define mpn_bsqrt __MPN(bsqrt) -__GMP_DECLSPEC void mpn_bsqrt (mp_ptr, mp_srcptr, mp_bitcnt_t, mp_ptr); - -#define mpn_bsqrtinv __MPN(bsqrtinv) -__GMP_DECLSPEC int mpn_bsqrtinv (mp_ptr, mp_srcptr, mp_bitcnt_t, mp_ptr); - -#if defined (_CRAY) -#define MPN_COPY_INCR(dst, src, n) \ - do { \ - int __i; /* Faster on some Crays with plain int */ \ - _Pragma ("_CRI ivdep"); \ - for (__i = 0; __i < (n); __i++) \ - (dst)[__i] = (src)[__i]; \ - } while (0) -#endif - -/* used by test programs, hence __GMP_DECLSPEC */ -#ifndef mpn_copyi /* if not done with cpuvec in a fat binary */ -#define mpn_copyi __MPN(copyi) -__GMP_DECLSPEC void mpn_copyi (mp_ptr, mp_srcptr, mp_size_t); -#endif - -#if ! defined (MPN_COPY_INCR) && HAVE_NATIVE_mpn_copyi -#define MPN_COPY_INCR(dst, src, size) \ - do { \ - ASSERT ((size) >= 0); \ - ASSERT (MPN_SAME_OR_INCR_P (dst, src, size)); \ - mpn_copyi (dst, src, size); \ - } while (0) -#endif - -/* Copy N limbs from SRC to DST incrementing, N==0 allowed. */ -#if ! defined (MPN_COPY_INCR) -#define MPN_COPY_INCR(dst, src, n) \ - do { \ - ASSERT ((n) >= 0); \ - ASSERT (MPN_SAME_OR_INCR_P (dst, src, n)); \ - if ((n) != 0) \ - { \ - mp_size_t __n = (n) - 1; \ - mp_ptr __dst = (dst); \ - mp_srcptr __src = (src); \ - mp_limb_t __x; \ - __x = *__src++; \ - if (__n != 0) \ - { \ - do \ - { \ - *__dst++ = __x; \ - __x = *__src++; \ - } \ - while (--__n); \ - } \ - *__dst++ = __x; \ - } \ - } while (0) -#endif - - -#if defined (_CRAY) -#define MPN_COPY_DECR(dst, src, n) \ - do { \ - int __i; /* Faster on some Crays with plain int */ \ - _Pragma ("_CRI ivdep"); \ - for (__i = (n) - 1; __i >= 0; __i--) \ - (dst)[__i] = (src)[__i]; \ - } while (0) -#endif - -/* used by test programs, hence __GMP_DECLSPEC */ -#ifndef mpn_copyd /* if not done with cpuvec in a fat binary */ -#define mpn_copyd __MPN(copyd) -__GMP_DECLSPEC void mpn_copyd (mp_ptr, mp_srcptr, mp_size_t); -#endif - -#if ! defined (MPN_COPY_DECR) && HAVE_NATIVE_mpn_copyd -#define MPN_COPY_DECR(dst, src, size) \ - do { \ - ASSERT ((size) >= 0); \ - ASSERT (MPN_SAME_OR_DECR_P (dst, src, size)); \ - mpn_copyd (dst, src, size); \ - } while (0) -#endif - -/* Copy N limbs from SRC to DST decrementing, N==0 allowed. */ -#if ! defined (MPN_COPY_DECR) -#define MPN_COPY_DECR(dst, src, n) \ - do { \ - ASSERT ((n) >= 0); \ - ASSERT (MPN_SAME_OR_DECR_P (dst, src, n)); \ - if ((n) != 0) \ - { \ - mp_size_t __n = (n) - 1; \ - mp_ptr __dst = (dst) + __n; \ - mp_srcptr __src = (src) + __n; \ - mp_limb_t __x; \ - __x = *__src--; \ - if (__n != 0) \ - { \ - do \ - { \ - *__dst-- = __x; \ - __x = *__src--; \ - } \ - while (--__n); \ - } \ - *__dst-- = __x; \ - } \ - } while (0) -#endif - - -#ifndef MPN_COPY -#define MPN_COPY(d,s,n) \ - do { \ - ASSERT (MPN_SAME_OR_SEPARATE_P (d, s, n)); \ - MPN_COPY_INCR (d, s, n); \ - } while (0) -#endif - - -/* Set {dst,size} to the limbs of {src,size} in reverse order. */ -#define MPN_REVERSE(dst, src, size) \ - do { \ - mp_ptr __dst = (dst); \ - mp_size_t __size = (size); \ - mp_srcptr __src = (src) + __size - 1; \ - mp_size_t __i; \ - ASSERT ((size) >= 0); \ - ASSERT (! MPN_OVERLAP_P (dst, size, src, size)); \ - CRAY_Pragma ("_CRI ivdep"); \ - for (__i = 0; __i < __size; __i++) \ - { \ - *__dst = *__src; \ - __dst++; \ - __src--; \ - } \ - } while (0) - - -/* Zero n limbs at dst. - - For power and powerpc we want an inline stu/bdnz loop for zeroing. On - ppc630 for instance this is optimal since it can sustain only 1 store per - cycle. - - gcc 2.95.x (for powerpc64 -maix64, or powerpc32) doesn't recognise the - "for" loop in the generic code below can become stu/bdnz. The do/while - here helps it get to that. The same caveat about plain -mpowerpc64 mode - applies here as to __GMPN_COPY_INCR in gmp.h. - - xlc 3.1 already generates stu/bdnz from the generic C, and does so from - this loop too. - - Enhancement: GLIBC does some trickery with dcbz to zero whole cache lines - at a time. MPN_ZERO isn't all that important in GMP, so it might be more - trouble than it's worth to do the same, though perhaps a call to memset - would be good when on a GNU system. */ - -#if HAVE_HOST_CPU_FAMILY_power || HAVE_HOST_CPU_FAMILY_powerpc -#define MPN_FILL(dst, n, f) \ - do { \ - mp_ptr __dst = (dst) - 1; \ - mp_size_t __n = (n); \ - ASSERT (__n > 0); \ - do \ - *++__dst = (f); \ - while (--__n); \ - } while (0) -#endif - -#ifndef MPN_FILL -#define MPN_FILL(dst, n, f) \ - do { \ - mp_ptr __dst = (dst); \ - mp_size_t __n = (n); \ - ASSERT (__n > 0); \ - do \ - *__dst++ = (f); \ - while (--__n); \ - } while (0) -#endif - -#define MPN_ZERO(dst, n) \ - do { \ - ASSERT ((n) >= 0); \ - if ((n) != 0) \ - MPN_FILL (dst, n, CNST_LIMB (0)); \ - } while (0) - -/* On the x86s repe/scasl doesn't seem useful, since it takes many cycles to - start up and would need to strip a lot of zeros before it'd be faster - than a simple cmpl loop. Here are some times in cycles for - std/repe/scasl/cld and cld/repe/scasl (the latter would be for stripping - low zeros). - - std cld - P5 18 16 - P6 46 38 - K6 36 13 - K7 21 20 -*/ -#ifndef MPN_NORMALIZE -#define MPN_NORMALIZE(DST, NLIMBS) \ - do { \ - while ((NLIMBS) > 0) \ - { \ - if ((DST)[(NLIMBS) - 1] != 0) \ - break; \ - (NLIMBS)--; \ - } \ - } while (0) -#endif -#ifndef MPN_NORMALIZE_NOT_ZERO -#define MPN_NORMALIZE_NOT_ZERO(DST, NLIMBS) \ - do { \ - while (1) \ - { \ - ASSERT ((NLIMBS) >= 1); \ - if ((DST)[(NLIMBS) - 1] != 0) \ - break; \ - (NLIMBS)--; \ - } \ - } while (0) -#endif - -/* Strip least significant zero limbs from {ptr,size} by incrementing ptr - and decrementing size. low should be ptr[0], and will be the new ptr[0] - on returning. The number in {ptr,size} must be non-zero, ie. size!=0 and - somewhere a non-zero limb. */ -#define MPN_STRIP_LOW_ZEROS_NOT_ZERO(ptr, size, low) \ - do { \ - ASSERT ((size) >= 1); \ - ASSERT ((low) == (ptr)[0]); \ - \ - while ((low) == 0) \ - { \ - (size)--; \ - ASSERT ((size) >= 1); \ - (ptr)++; \ - (low) = *(ptr); \ - } \ - } while (0) - -/* Initialize X of type mpz_t with space for NLIMBS limbs. X should be a - temporary variable; it will be automatically cleared out at function - return. We use __x here to make it possible to accept both mpz_ptr and - mpz_t arguments. */ -#define MPZ_TMP_INIT(X, NLIMBS) \ - do { \ - mpz_ptr __x = (X); \ - ASSERT ((NLIMBS) >= 1); \ - __x->_mp_alloc = (NLIMBS); \ - __x->_mp_d = TMP_ALLOC_LIMBS (NLIMBS); \ - } while (0) - -#if WANT_ASSERT -static inline void * -_mpz_newalloc (mpz_ptr z, mp_size_t n) -{ - void * res = _mpz_realloc(z,n); - /* If we are checking the code, force a random change to limbs. */ - ((mp_ptr) res)[0] = ~ ((mp_ptr) res)[ALLOC (z) - 1]; - return res; -} -#else -#define _mpz_newalloc _mpz_realloc -#endif -/* Realloc for an mpz_t WHAT if it has less than NEEDED limbs. */ -#define MPZ_REALLOC(z,n) (UNLIKELY ((n) > ALLOC(z)) \ - ? (mp_ptr) _mpz_realloc(z,n) \ - : PTR(z)) -#define MPZ_NEWALLOC(z,n) (UNLIKELY ((n) > ALLOC(z)) \ - ? (mp_ptr) _mpz_newalloc(z,n) \ - : PTR(z)) - -#define MPZ_EQUAL_1_P(z) (SIZ(z)==1 && PTR(z)[0] == 1) - - -/* MPN_FIB2_SIZE(n) is the size in limbs required by mpn_fib2_ui for fp and - f1p. - - From Knuth vol 1 section 1.2.8, F[n] = phi^n/sqrt(5) rounded to the - nearest integer, where phi=(1+sqrt(5))/2 is the golden ratio. So the - number of bits required is n*log_2((1+sqrt(5))/2) = n*0.6942419. - - The multiplier used is 23/32=0.71875 for efficient calculation on CPUs - without good floating point. There's +2 for rounding up, and a further - +2 since at the last step x limbs are doubled into a 2x+1 limb region - whereas the actual F[2k] value might be only 2x-1 limbs. - - Note that a division is done first, since on a 32-bit system it's at - least conceivable to go right up to n==ULONG_MAX. (F[2^32-1] would be - about 380Mbytes, plus temporary workspace of about 1.2Gbytes here and - whatever a multiply of two 190Mbyte numbers takes.) - - Enhancement: When GMP_NUMB_BITS is not a power of 2 the division could be - worked into the multiplier. */ - -#define MPN_FIB2_SIZE(n) \ - ((mp_size_t) ((n) / 32 * 23 / GMP_NUMB_BITS) + 4) - - -/* FIB_TABLE(n) returns the Fibonacci number F[n]. Must have n in the range - -1 <= n <= FIB_TABLE_LIMIT (that constant in fib_table.h). - - FIB_TABLE_LUCNUM_LIMIT (in fib_table.h) is the largest n for which L[n] = - F[n] + 2*F[n-1] fits in a limb. */ - -__GMP_DECLSPEC extern const mp_limb_t __gmp_fib_table[]; -#define FIB_TABLE(n) (__gmp_fib_table[(n)+1]) - -extern const mp_limb_t __gmp_oddfac_table[]; -extern const mp_limb_t __gmp_odd2fac_table[]; -extern const unsigned char __gmp_fac2cnt_table[]; -extern const mp_limb_t __gmp_limbroots_table[]; - -/* n^log <= GMP_NUMB_MAX, a limb can store log factors less than n */ -static inline unsigned -log_n_max (mp_limb_t n) -{ - unsigned log; - for (log = 8; n > __gmp_limbroots_table[log - 1]; log--); - return log; -} - -#define SIEVESIZE 512 /* FIXME: Allow gmp_init_primesieve to choose */ -typedef struct -{ - unsigned long d; /* current index in s[] */ - unsigned long s0; /* number corresponding to s[0] */ - unsigned long sqrt_s0; /* misnomer for sqrt(s[SIEVESIZE-1]) */ - unsigned char s[SIEVESIZE + 1]; /* sieve table */ -} gmp_primesieve_t; - -#define gmp_init_primesieve __gmp_init_primesieve -__GMP_DECLSPEC void gmp_init_primesieve (gmp_primesieve_t *); - -#define gmp_nextprime __gmp_nextprime -__GMP_DECLSPEC unsigned long int gmp_nextprime (gmp_primesieve_t *); - -#define gmp_primesieve __gmp_primesieve -__GMP_DECLSPEC mp_limb_t gmp_primesieve (mp_ptr, mp_limb_t); - - -#ifndef MUL_TOOM22_THRESHOLD -#define MUL_TOOM22_THRESHOLD 30 -#endif - -#ifndef MUL_TOOM33_THRESHOLD -#define MUL_TOOM33_THRESHOLD 100 -#endif - -#ifndef MUL_TOOM44_THRESHOLD -#define MUL_TOOM44_THRESHOLD 300 -#endif - -#ifndef MUL_TOOM6H_THRESHOLD -#define MUL_TOOM6H_THRESHOLD 350 -#endif - -#ifndef SQR_TOOM6_THRESHOLD -#define SQR_TOOM6_THRESHOLD MUL_TOOM6H_THRESHOLD -#endif - -#ifndef MUL_TOOM8H_THRESHOLD -#define MUL_TOOM8H_THRESHOLD 450 -#endif - -#ifndef SQR_TOOM8_THRESHOLD -#define SQR_TOOM8_THRESHOLD MUL_TOOM8H_THRESHOLD -#endif - -#ifndef MUL_TOOM32_TO_TOOM43_THRESHOLD -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 100 -#endif - -#ifndef MUL_TOOM32_TO_TOOM53_THRESHOLD -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 110 -#endif - -#ifndef MUL_TOOM42_TO_TOOM53_THRESHOLD -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 100 -#endif - -#ifndef MUL_TOOM42_TO_TOOM63_THRESHOLD -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 110 -#endif - -#ifndef MUL_TOOM43_TO_TOOM54_THRESHOLD -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 150 -#endif - -/* MUL_TOOM22_THRESHOLD_LIMIT is the maximum for MUL_TOOM22_THRESHOLD. In a - normal build MUL_TOOM22_THRESHOLD is a constant and we use that. In a fat - binary or tune program build MUL_TOOM22_THRESHOLD is a variable and a - separate hard limit will have been defined. Similarly for TOOM3. */ -#ifndef MUL_TOOM22_THRESHOLD_LIMIT -#define MUL_TOOM22_THRESHOLD_LIMIT MUL_TOOM22_THRESHOLD -#endif -#ifndef MUL_TOOM33_THRESHOLD_LIMIT -#define MUL_TOOM33_THRESHOLD_LIMIT MUL_TOOM33_THRESHOLD -#endif -#ifndef MULLO_BASECASE_THRESHOLD_LIMIT -#define MULLO_BASECASE_THRESHOLD_LIMIT MULLO_BASECASE_THRESHOLD -#endif -#ifndef SQRLO_BASECASE_THRESHOLD_LIMIT -#define SQRLO_BASECASE_THRESHOLD_LIMIT SQRLO_BASECASE_THRESHOLD -#endif -#ifndef SQRLO_DC_THRESHOLD_LIMIT -#define SQRLO_DC_THRESHOLD_LIMIT SQRLO_DC_THRESHOLD -#endif - -/* SQR_BASECASE_THRESHOLD is where mpn_sqr_basecase should take over from - mpn_mul_basecase. Default is to use mpn_sqr_basecase from 0. (Note that we - certainly always want it if there's a native assembler mpn_sqr_basecase.) - - If it turns out that mpn_toom2_sqr becomes faster than mpn_mul_basecase - before mpn_sqr_basecase does, then SQR_BASECASE_THRESHOLD is the toom2 - threshold and SQR_TOOM2_THRESHOLD is 0. This oddity arises more or less - because SQR_TOOM2_THRESHOLD represents the size up to which mpn_sqr_basecase - should be used, and that may be never. */ - -#ifndef SQR_BASECASE_THRESHOLD -#define SQR_BASECASE_THRESHOLD 0 /* never use mpn_mul_basecase */ -#endif - -#ifndef SQR_TOOM2_THRESHOLD -#define SQR_TOOM2_THRESHOLD 50 -#endif - -#ifndef SQR_TOOM3_THRESHOLD -#define SQR_TOOM3_THRESHOLD 120 -#endif - -#ifndef SQR_TOOM4_THRESHOLD -#define SQR_TOOM4_THRESHOLD 400 -#endif - -/* See comments above about MUL_TOOM33_THRESHOLD_LIMIT. */ -#ifndef SQR_TOOM3_THRESHOLD_LIMIT -#define SQR_TOOM3_THRESHOLD_LIMIT SQR_TOOM3_THRESHOLD -#endif - -#ifndef MULMID_TOOM42_THRESHOLD -#define MULMID_TOOM42_THRESHOLD MUL_TOOM22_THRESHOLD -#endif - -#ifndef MULLO_BASECASE_THRESHOLD -#define MULLO_BASECASE_THRESHOLD 0 /* never use mpn_mul_basecase */ -#endif - -#ifndef MULLO_DC_THRESHOLD -#define MULLO_DC_THRESHOLD (2*MUL_TOOM22_THRESHOLD) -#endif - -#ifndef MULLO_MUL_N_THRESHOLD -#define MULLO_MUL_N_THRESHOLD (2*MUL_FFT_THRESHOLD) -#endif - -#ifndef SQRLO_BASECASE_THRESHOLD -#define SQRLO_BASECASE_THRESHOLD 0 /* never use mpn_sqr_basecase */ -#endif - -#ifndef SQRLO_DC_THRESHOLD -#define SQRLO_DC_THRESHOLD (MULLO_DC_THRESHOLD) -#endif - -#ifndef SQRLO_SQR_THRESHOLD -#define SQRLO_SQR_THRESHOLD (MULLO_MUL_N_THRESHOLD) -#endif - -#ifndef DC_DIV_QR_THRESHOLD -#define DC_DIV_QR_THRESHOLD (2*MUL_TOOM22_THRESHOLD) -#endif - -#ifndef DC_DIVAPPR_Q_THRESHOLD -#define DC_DIVAPPR_Q_THRESHOLD 200 -#endif - -#ifndef DC_BDIV_QR_THRESHOLD -#define DC_BDIV_QR_THRESHOLD (2*MUL_TOOM22_THRESHOLD) -#endif - -#ifndef DC_BDIV_Q_THRESHOLD -#define DC_BDIV_Q_THRESHOLD 180 -#endif - -#ifndef DIVEXACT_JEB_THRESHOLD -#define DIVEXACT_JEB_THRESHOLD 25 -#endif - -#ifndef INV_MULMOD_BNM1_THRESHOLD -#define INV_MULMOD_BNM1_THRESHOLD (4*MULMOD_BNM1_THRESHOLD) -#endif - -#ifndef INV_APPR_THRESHOLD -#define INV_APPR_THRESHOLD INV_NEWTON_THRESHOLD -#endif - -#ifndef INV_NEWTON_THRESHOLD -#define INV_NEWTON_THRESHOLD 200 -#endif - -#ifndef BINV_NEWTON_THRESHOLD -#define BINV_NEWTON_THRESHOLD 300 -#endif - -#ifndef MU_DIVAPPR_Q_THRESHOLD -#define MU_DIVAPPR_Q_THRESHOLD 2000 -#endif - -#ifndef MU_DIV_QR_THRESHOLD -#define MU_DIV_QR_THRESHOLD 2000 -#endif - -#ifndef MUPI_DIV_QR_THRESHOLD -#define MUPI_DIV_QR_THRESHOLD 200 -#endif - -#ifndef MU_BDIV_Q_THRESHOLD -#define MU_BDIV_Q_THRESHOLD 2000 -#endif - -#ifndef MU_BDIV_QR_THRESHOLD -#define MU_BDIV_QR_THRESHOLD 2000 -#endif - -#ifndef MULMOD_BNM1_THRESHOLD -#define MULMOD_BNM1_THRESHOLD 16 -#endif - -#ifndef SQRMOD_BNM1_THRESHOLD -#define SQRMOD_BNM1_THRESHOLD 16 -#endif - -#ifndef MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD -#define MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD (INV_MULMOD_BNM1_THRESHOLD/2) -#endif - -#if HAVE_NATIVE_mpn_addmul_2 || HAVE_NATIVE_mpn_redc_2 - -#ifndef REDC_1_TO_REDC_2_THRESHOLD -#define REDC_1_TO_REDC_2_THRESHOLD 15 -#endif -#ifndef REDC_2_TO_REDC_N_THRESHOLD -#define REDC_2_TO_REDC_N_THRESHOLD 100 -#endif - -#else - -#ifndef REDC_1_TO_REDC_N_THRESHOLD -#define REDC_1_TO_REDC_N_THRESHOLD 100 -#endif - -#endif /* HAVE_NATIVE_mpn_addmul_2 || HAVE_NATIVE_mpn_redc_2 */ - - -/* First k to use for an FFT modF multiply. A modF FFT is an order - log(2^k)/log(2^(k-1)) algorithm, so k=3 is merely 1.5 like karatsuba, - whereas k=4 is 1.33 which is faster than toom3 at 1.485. */ -#define FFT_FIRST_K 4 - -/* Threshold at which FFT should be used to do a modF NxN -> N multiply. */ -#ifndef MUL_FFT_MODF_THRESHOLD -#define MUL_FFT_MODF_THRESHOLD (MUL_TOOM33_THRESHOLD * 3) -#endif -#ifndef SQR_FFT_MODF_THRESHOLD -#define SQR_FFT_MODF_THRESHOLD (SQR_TOOM3_THRESHOLD * 3) -#endif - -/* Threshold at which FFT should be used to do an NxN -> 2N multiply. This - will be a size where FFT is using k=7 or k=8, since an FFT-k used for an - NxN->2N multiply and not recursing into itself is an order - log(2^k)/log(2^(k-2)) algorithm, so it'll be at least k=7 at 1.39 which - is the first better than toom3. */ -#ifndef MUL_FFT_THRESHOLD -#define MUL_FFT_THRESHOLD (MUL_FFT_MODF_THRESHOLD * 10) -#endif -#ifndef SQR_FFT_THRESHOLD -#define SQR_FFT_THRESHOLD (SQR_FFT_MODF_THRESHOLD * 10) -#endif - -/* Table of thresholds for successive modF FFT "k"s. The first entry is - where FFT_FIRST_K+1 should be used, the second FFT_FIRST_K+2, - etc. See mpn_fft_best_k(). */ -#ifndef MUL_FFT_TABLE -#define MUL_FFT_TABLE \ - { MUL_TOOM33_THRESHOLD * 4, /* k=5 */ \ - MUL_TOOM33_THRESHOLD * 8, /* k=6 */ \ - MUL_TOOM33_THRESHOLD * 16, /* k=7 */ \ - MUL_TOOM33_THRESHOLD * 32, /* k=8 */ \ - MUL_TOOM33_THRESHOLD * 96, /* k=9 */ \ - MUL_TOOM33_THRESHOLD * 288, /* k=10 */ \ - 0 } -#endif -#ifndef SQR_FFT_TABLE -#define SQR_FFT_TABLE \ - { SQR_TOOM3_THRESHOLD * 4, /* k=5 */ \ - SQR_TOOM3_THRESHOLD * 8, /* k=6 */ \ - SQR_TOOM3_THRESHOLD * 16, /* k=7 */ \ - SQR_TOOM3_THRESHOLD * 32, /* k=8 */ \ - SQR_TOOM3_THRESHOLD * 96, /* k=9 */ \ - SQR_TOOM3_THRESHOLD * 288, /* k=10 */ \ - 0 } -#endif - -struct fft_table_nk -{ - unsigned int n:27; - unsigned int k:5; -}; - -#ifndef FFT_TABLE_ATTRS -#define FFT_TABLE_ATTRS static const -#endif - -#define MPN_FFT_TABLE_SIZE 16 - - -#ifndef DC_DIV_QR_THRESHOLD -#define DC_DIV_QR_THRESHOLD (3 * MUL_TOOM22_THRESHOLD) -#endif - -#ifndef GET_STR_DC_THRESHOLD -#define GET_STR_DC_THRESHOLD 18 -#endif - -#ifndef GET_STR_PRECOMPUTE_THRESHOLD -#define GET_STR_PRECOMPUTE_THRESHOLD 35 -#endif - -#ifndef SET_STR_DC_THRESHOLD -#define SET_STR_DC_THRESHOLD 750 -#endif - -#ifndef SET_STR_PRECOMPUTE_THRESHOLD -#define SET_STR_PRECOMPUTE_THRESHOLD 2000 -#endif - -#ifndef FAC_ODD_THRESHOLD -#define FAC_ODD_THRESHOLD 35 -#endif - -#ifndef FAC_DSC_THRESHOLD -#define FAC_DSC_THRESHOLD 400 -#endif - -/* Return non-zero if xp,xsize and yp,ysize overlap. - If xp+xsize<=yp there's no overlap, or if yp+ysize<=xp there's no - overlap. If both these are false, there's an overlap. */ -#define MPN_OVERLAP_P(xp, xsize, yp, ysize) \ - ((xp) + (xsize) > (yp) && (yp) + (ysize) > (xp)) -#define MEM_OVERLAP_P(xp, xsize, yp, ysize) \ - ( (char *) (xp) + (xsize) > (char *) (yp) \ - && (char *) (yp) + (ysize) > (char *) (xp)) - -/* Return non-zero if xp,xsize and yp,ysize are either identical or not - overlapping. Return zero if they're partially overlapping. */ -#define MPN_SAME_OR_SEPARATE_P(xp, yp, size) \ - MPN_SAME_OR_SEPARATE2_P(xp, size, yp, size) -#define MPN_SAME_OR_SEPARATE2_P(xp, xsize, yp, ysize) \ - ((xp) == (yp) || ! MPN_OVERLAP_P (xp, xsize, yp, ysize)) - -/* Return non-zero if dst,dsize and src,ssize are either identical or - overlapping in a way suitable for an incrementing/decrementing algorithm. - Return zero if they're partially overlapping in an unsuitable fashion. */ -#define MPN_SAME_OR_INCR2_P(dst, dsize, src, ssize) \ - ((dst) <= (src) || ! MPN_OVERLAP_P (dst, dsize, src, ssize)) -#define MPN_SAME_OR_INCR_P(dst, src, size) \ - MPN_SAME_OR_INCR2_P(dst, size, src, size) -#define MPN_SAME_OR_DECR2_P(dst, dsize, src, ssize) \ - ((dst) >= (src) || ! MPN_OVERLAP_P (dst, dsize, src, ssize)) -#define MPN_SAME_OR_DECR_P(dst, src, size) \ - MPN_SAME_OR_DECR2_P(dst, size, src, size) - - -/* ASSERT() is a private assertion checking scheme, similar to <assert.h>. - ASSERT() does the check only if WANT_ASSERT is selected, ASSERT_ALWAYS() - does it always. Generally assertions are meant for development, but - might help when looking for a problem later too. */ - -#ifdef __LINE__ -#define ASSERT_LINE __LINE__ -#else -#define ASSERT_LINE -1 -#endif - -#ifdef __FILE__ -#define ASSERT_FILE __FILE__ -#else -#define ASSERT_FILE "" -#endif - -__GMP_DECLSPEC void __gmp_assert_header (const char *, int); -__GMP_DECLSPEC void __gmp_assert_fail (const char *, int, const char *) ATTRIBUTE_NORETURN; - -#define ASSERT_FAIL(expr) __gmp_assert_fail (ASSERT_FILE, ASSERT_LINE, #expr) - -#define ASSERT_ALWAYS(expr) \ - do { \ - if (UNLIKELY (!(expr))) \ - ASSERT_FAIL (expr); \ - } while (0) - -#if WANT_ASSERT -#define ASSERT(expr) ASSERT_ALWAYS (expr) -#else -#define ASSERT(expr) do {} while (0) -#endif - - -/* ASSERT_CARRY checks the expression is non-zero, and ASSERT_NOCARRY checks - that it's zero. In both cases if assertion checking is disabled the - expression is still evaluated. These macros are meant for use with - routines like mpn_add_n() where the return value represents a carry or - whatever that should or shouldn't occur in some context. For example, - ASSERT_NOCARRY (mpn_add_n (rp, s1p, s2p, size)); */ -#if WANT_ASSERT -#define ASSERT_CARRY(expr) ASSERT_ALWAYS ((expr) != 0) -#define ASSERT_NOCARRY(expr) ASSERT_ALWAYS ((expr) == 0) -#else -#define ASSERT_CARRY(expr) (expr) -#define ASSERT_NOCARRY(expr) (expr) -#endif - - -/* ASSERT_CODE includes code when assertion checking is wanted. This is the - same as writing "#if WANT_ASSERT", but more compact. */ -#if WANT_ASSERT -#define ASSERT_CODE(expr) expr -#else -#define ASSERT_CODE(expr) -#endif - - -/* Test that an mpq_t is in fully canonical form. This can be used as - protection on routines like mpq_equal which give wrong results on - non-canonical inputs. */ -#if WANT_ASSERT -#define ASSERT_MPQ_CANONICAL(q) \ - do { \ - ASSERT (q->_mp_den._mp_size > 0); \ - if (q->_mp_num._mp_size == 0) \ - { \ - /* zero should be 0/1 */ \ - ASSERT (mpz_cmp_ui (mpq_denref(q), 1L) == 0); \ - } \ - else \ - { \ - /* no common factors */ \ - mpz_t __g; \ - mpz_init (__g); \ - mpz_gcd (__g, mpq_numref(q), mpq_denref(q)); \ - ASSERT (mpz_cmp_ui (__g, 1) == 0); \ - mpz_clear (__g); \ - } \ - } while (0) -#else -#define ASSERT_MPQ_CANONICAL(q) do {} while (0) -#endif - -/* Check that the nail parts are zero. */ -#define ASSERT_ALWAYS_LIMB(limb) \ - do { \ - mp_limb_t __nail = (limb) & GMP_NAIL_MASK; \ - ASSERT_ALWAYS (__nail == 0); \ - } while (0) -#define ASSERT_ALWAYS_MPN(ptr, size) \ - do { \ - /* let whole loop go dead when no nails */ \ - if (GMP_NAIL_BITS != 0) \ - { \ - mp_size_t __i; \ - for (__i = 0; __i < (size); __i++) \ - ASSERT_ALWAYS_LIMB ((ptr)[__i]); \ - } \ - } while (0) -#if WANT_ASSERT -#define ASSERT_LIMB(limb) ASSERT_ALWAYS_LIMB (limb) -#define ASSERT_MPN(ptr, size) ASSERT_ALWAYS_MPN (ptr, size) -#else -#define ASSERT_LIMB(limb) do {} while (0) -#define ASSERT_MPN(ptr, size) do {} while (0) -#endif - - -/* Assert that an mpn region {ptr,size} is zero, or non-zero. - size==0 is allowed, and in that case {ptr,size} considered to be zero. */ -#if WANT_ASSERT -#define ASSERT_MPN_ZERO_P(ptr,size) \ - do { \ - mp_size_t __i; \ - ASSERT ((size) >= 0); \ - for (__i = 0; __i < (size); __i++) \ - ASSERT ((ptr)[__i] == 0); \ - } while (0) -#define ASSERT_MPN_NONZERO_P(ptr,size) \ - do { \ - mp_size_t __i; \ - int __nonzero = 0; \ - ASSERT ((size) >= 0); \ - for (__i = 0; __i < (size); __i++) \ - if ((ptr)[__i] != 0) \ - { \ - __nonzero = 1; \ - break; \ - } \ - ASSERT (__nonzero); \ - } while (0) -#else -#define ASSERT_MPN_ZERO_P(ptr,size) do {} while (0) -#define ASSERT_MPN_NONZERO_P(ptr,size) do {} while (0) -#endif - - -#if ! HAVE_NATIVE_mpn_com -#undef mpn_com -#define mpn_com(d,s,n) \ - do { \ - mp_ptr __d = (d); \ - mp_srcptr __s = (s); \ - mp_size_t __n = (n); \ - ASSERT (__n >= 1); \ - ASSERT (MPN_SAME_OR_SEPARATE_P (__d, __s, __n)); \ - do \ - *__d++ = (~ *__s++) & GMP_NUMB_MASK; \ - while (--__n); \ - } while (0) -#endif - -#define MPN_LOGOPS_N_INLINE(rp, up, vp, n, operation) \ - do { \ - mp_srcptr __up = (up); \ - mp_srcptr __vp = (vp); \ - mp_ptr __rp = (rp); \ - mp_size_t __n = (n); \ - mp_limb_t __a, __b; \ - ASSERT (__n > 0); \ - ASSERT (MPN_SAME_OR_SEPARATE_P (__rp, __up, __n)); \ - ASSERT (MPN_SAME_OR_SEPARATE_P (__rp, __vp, __n)); \ - __up += __n; \ - __vp += __n; \ - __rp += __n; \ - __n = -__n; \ - do { \ - __a = __up[__n]; \ - __b = __vp[__n]; \ - __rp[__n] = operation; \ - } while (++__n); \ - } while (0) - - -#if ! HAVE_NATIVE_mpn_and_n -#undef mpn_and_n -#define mpn_and_n(rp, up, vp, n) \ - MPN_LOGOPS_N_INLINE (rp, up, vp, n, __a & __b) -#endif - -#if ! HAVE_NATIVE_mpn_andn_n -#undef mpn_andn_n -#define mpn_andn_n(rp, up, vp, n) \ - MPN_LOGOPS_N_INLINE (rp, up, vp, n, __a & ~__b) -#endif - -#if ! HAVE_NATIVE_mpn_nand_n -#undef mpn_nand_n -#define mpn_nand_n(rp, up, vp, n) \ - MPN_LOGOPS_N_INLINE (rp, up, vp, n, ~(__a & __b) & GMP_NUMB_MASK) -#endif - -#if ! HAVE_NATIVE_mpn_ior_n -#undef mpn_ior_n -#define mpn_ior_n(rp, up, vp, n) \ - MPN_LOGOPS_N_INLINE (rp, up, vp, n, __a | __b) -#endif - -#if ! HAVE_NATIVE_mpn_iorn_n -#undef mpn_iorn_n -#define mpn_iorn_n(rp, up, vp, n) \ - MPN_LOGOPS_N_INLINE (rp, up, vp, n, (__a | ~__b) & GMP_NUMB_MASK) -#endif - -#if ! HAVE_NATIVE_mpn_nior_n -#undef mpn_nior_n -#define mpn_nior_n(rp, up, vp, n) \ - MPN_LOGOPS_N_INLINE (rp, up, vp, n, ~(__a | __b) & GMP_NUMB_MASK) -#endif - -#if ! HAVE_NATIVE_mpn_xor_n -#undef mpn_xor_n -#define mpn_xor_n(rp, up, vp, n) \ - MPN_LOGOPS_N_INLINE (rp, up, vp, n, __a ^ __b) -#endif - -#if ! HAVE_NATIVE_mpn_xnor_n -#undef mpn_xnor_n -#define mpn_xnor_n(rp, up, vp, n) \ - MPN_LOGOPS_N_INLINE (rp, up, vp, n, ~(__a ^ __b) & GMP_NUMB_MASK) -#endif - -#define mpn_trialdiv __MPN(trialdiv) -__GMP_DECLSPEC mp_limb_t mpn_trialdiv (mp_srcptr, mp_size_t, mp_size_t, int *); - -#define mpn_remove __MPN(remove) -__GMP_DECLSPEC mp_bitcnt_t mpn_remove (mp_ptr, mp_size_t *, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_bitcnt_t); - - -/* ADDC_LIMB sets w=x+y and cout to 0 or 1 for a carry from that addition. */ -#if GMP_NAIL_BITS == 0 -#define ADDC_LIMB(cout, w, x, y) \ - do { \ - mp_limb_t __x = (x); \ - mp_limb_t __y = (y); \ - mp_limb_t __w = __x + __y; \ - (w) = __w; \ - (cout) = __w < __x; \ - } while (0) -#else -#define ADDC_LIMB(cout, w, x, y) \ - do { \ - mp_limb_t __w; \ - ASSERT_LIMB (x); \ - ASSERT_LIMB (y); \ - __w = (x) + (y); \ - (w) = __w & GMP_NUMB_MASK; \ - (cout) = __w >> GMP_NUMB_BITS; \ - } while (0) -#endif - -/* SUBC_LIMB sets w=x-y and cout to 0 or 1 for a borrow from that - subtract. */ -#if GMP_NAIL_BITS == 0 -#define SUBC_LIMB(cout, w, x, y) \ - do { \ - mp_limb_t __x = (x); \ - mp_limb_t __y = (y); \ - mp_limb_t __w = __x - __y; \ - (w) = __w; \ - (cout) = __w > __x; \ - } while (0) -#else -#define SUBC_LIMB(cout, w, x, y) \ - do { \ - mp_limb_t __w = (x) - (y); \ - (w) = __w & GMP_NUMB_MASK; \ - (cout) = __w >> (GMP_LIMB_BITS-1); \ - } while (0) -#endif - - -/* MPN_INCR_U does {ptr,size} += n, MPN_DECR_U does {ptr,size} -= n, both - expecting no carry (or borrow) from that. - - The size parameter is only for the benefit of assertion checking. In a - normal build it's unused and the carry/borrow is just propagated as far - as it needs to go. - - On random data, usually only one or two limbs of {ptr,size} get updated, - so there's no need for any sophisticated looping, just something compact - and sensible. - - FIXME: Switch all code from mpn_{incr,decr}_u to MPN_{INCR,DECR}_U, - declaring their operand sizes, then remove the former. This is purely - for the benefit of assertion checking. */ - -#if defined (__GNUC__) && GMP_NAIL_BITS == 0 && ! defined (NO_ASM) \ - && (defined(HAVE_HOST_CPU_FAMILY_x86) || defined(HAVE_HOST_CPU_FAMILY_x86_64)) \ - && ! WANT_ASSERT -/* Better flags handling than the generic C gives on i386, saving a few - bytes of code and maybe a cycle or two. */ - -#define MPN_IORD_U(ptr, incr, aors) \ - do { \ - mp_ptr __ptr_dummy; \ - if (__builtin_constant_p (incr) && (incr) == 0) \ - { \ - } \ - else if (__builtin_constant_p (incr) && (incr) == 1) \ - { \ - __asm__ __volatile__ \ - ("\n" ASM_L(top) ":\n" \ - "\t" aors "\t$1, (%0)\n" \ - "\tlea\t%c2(%0), %0\n" \ - "\tjc\t" ASM_L(top) \ - : "=r" (__ptr_dummy) \ - : "0" (ptr), "n" (sizeof(mp_limb_t)) \ - : "memory"); \ - } \ - else \ - { \ - __asm__ __volatile__ \ - ( aors "\t%2, (%0)\n" \ - "\tjnc\t" ASM_L(done) "\n" \ - ASM_L(top) ":\n" \ - "\t" aors "\t$1, %c3(%0)\n" \ - "\tlea\t%c3(%0), %0\n" \ - "\tjc\t" ASM_L(top) "\n" \ - ASM_L(done) ":\n" \ - : "=r" (__ptr_dummy) \ - : "0" (ptr), \ - "ri" ((mp_limb_t) (incr)), "n" (sizeof(mp_limb_t)) \ - : "memory"); \ - } \ - } while (0) - -#if GMP_LIMB_BITS == 32 -#define MPN_INCR_U(ptr, size, incr) MPN_IORD_U (ptr, incr, "addl") -#define MPN_DECR_U(ptr, size, incr) MPN_IORD_U (ptr, incr, "subl") -#endif -#if GMP_LIMB_BITS == 64 -#define MPN_INCR_U(ptr, size, incr) MPN_IORD_U (ptr, incr, "addq") -#define MPN_DECR_U(ptr, size, incr) MPN_IORD_U (ptr, incr, "subq") -#endif -#define mpn_incr_u(ptr, incr) MPN_INCR_U (ptr, 0, incr) -#define mpn_decr_u(ptr, incr) MPN_DECR_U (ptr, 0, incr) -#endif - -#if GMP_NAIL_BITS == 0 -#ifndef mpn_incr_u -#define mpn_incr_u(p,incr) \ - do { \ - mp_limb_t __x; \ - mp_ptr __p = (p); \ - if (__builtin_constant_p (incr) && (incr) == 1) \ - { \ - while (++(*(__p++)) == 0) \ - ; \ - } \ - else \ - { \ - __x = *__p + (incr); \ - *__p = __x; \ - if (__x < (incr)) \ - while (++(*(++__p)) == 0) \ - ; \ - } \ - } while (0) -#endif -#ifndef mpn_decr_u -#define mpn_decr_u(p,incr) \ - do { \ - mp_limb_t __x; \ - mp_ptr __p = (p); \ - if (__builtin_constant_p (incr) && (incr) == 1) \ - { \ - while ((*(__p++))-- == 0) \ - ; \ - } \ - else \ - { \ - __x = *__p; \ - *__p = __x - (incr); \ - if (__x < (incr)) \ - while ((*(++__p))-- == 0) \ - ; \ - } \ - } while (0) -#endif -#endif - -#if GMP_NAIL_BITS >= 1 -#ifndef mpn_incr_u -#define mpn_incr_u(p,incr) \ - do { \ - mp_limb_t __x; \ - mp_ptr __p = (p); \ - if (__builtin_constant_p (incr) && (incr) == 1) \ - { \ - do \ - { \ - __x = (*__p + 1) & GMP_NUMB_MASK; \ - *__p++ = __x; \ - } \ - while (__x == 0); \ - } \ - else \ - { \ - __x = (*__p + (incr)); \ - *__p++ = __x & GMP_NUMB_MASK; \ - if (__x >> GMP_NUMB_BITS != 0) \ - { \ - do \ - { \ - __x = (*__p + 1) & GMP_NUMB_MASK; \ - *__p++ = __x; \ - } \ - while (__x == 0); \ - } \ - } \ - } while (0) -#endif -#ifndef mpn_decr_u -#define mpn_decr_u(p,incr) \ - do { \ - mp_limb_t __x; \ - mp_ptr __p = (p); \ - if (__builtin_constant_p (incr) && (incr) == 1) \ - { \ - do \ - { \ - __x = *__p; \ - *__p++ = (__x - 1) & GMP_NUMB_MASK; \ - } \ - while (__x == 0); \ - } \ - else \ - { \ - __x = *__p - (incr); \ - *__p++ = __x & GMP_NUMB_MASK; \ - if (__x >> GMP_NUMB_BITS != 0) \ - { \ - do \ - { \ - __x = *__p; \ - *__p++ = (__x - 1) & GMP_NUMB_MASK; \ - } \ - while (__x == 0); \ - } \ - } \ - } while (0) -#endif -#endif - -#ifndef MPN_INCR_U -#if WANT_ASSERT -#define MPN_INCR_U(ptr, size, n) \ - do { \ - ASSERT ((size) >= 1); \ - ASSERT_NOCARRY (mpn_add_1 (ptr, ptr, size, n)); \ - } while (0) -#else -#define MPN_INCR_U(ptr, size, n) mpn_incr_u (ptr, n) -#endif -#endif - -#ifndef MPN_DECR_U -#if WANT_ASSERT -#define MPN_DECR_U(ptr, size, n) \ - do { \ - ASSERT ((size) >= 1); \ - ASSERT_NOCARRY (mpn_sub_1 (ptr, ptr, size, n)); \ - } while (0) -#else -#define MPN_DECR_U(ptr, size, n) mpn_decr_u (ptr, n) -#endif -#endif - - -/* Structure for conversion between internal binary format and strings. */ -struct bases -{ - /* Number of digits in the conversion base that always fits in an mp_limb_t. - For example, for base 10 on a machine where an mp_limb_t has 32 bits this - is 9, since 10**9 is the largest number that fits into an mp_limb_t. */ - int chars_per_limb; - - /* log(2)/log(conversion_base) */ - mp_limb_t logb2; - - /* log(conversion_base)/log(2) */ - mp_limb_t log2b; - - /* base**chars_per_limb, i.e. the biggest number that fits a word, built by - factors of base. Exception: For 2, 4, 8, etc, big_base is log2(base), - i.e. the number of bits used to represent each digit in the base. */ - mp_limb_t big_base; - - /* A GMP_LIMB_BITS bit approximation to 1/big_base, represented as a - fixed-point number. Instead of dividing by big_base an application can - choose to multiply by big_base_inverted. */ - mp_limb_t big_base_inverted; -}; - -#define mp_bases __MPN(bases) -__GMP_DECLSPEC extern const struct bases mp_bases[257]; - - -/* Compute the number of digits in base for nbits bits, making sure the result - is never too small. The two variants of the macro implement the same - function; the GT2 variant below works just for bases > 2. */ -#define DIGITS_IN_BASE_FROM_BITS(res, nbits, b) \ - do { \ - mp_limb_t _ph, _dummy; \ - size_t _nbits = (nbits); \ - umul_ppmm (_ph, _dummy, mp_bases[b].logb2, _nbits); \ - _ph += (_dummy + _nbits < _dummy); \ - res = _ph + 1; \ - } while (0) -#define DIGITS_IN_BASEGT2_FROM_BITS(res, nbits, b) \ - do { \ - mp_limb_t _ph, _dummy; \ - size_t _nbits = (nbits); \ - umul_ppmm (_ph, _dummy, mp_bases[b].logb2 + 1, _nbits); \ - res = _ph + 1; \ - } while (0) - -/* For power of 2 bases this is exact. For other bases the result is either - exact or one too big. - - To be exact always it'd be necessary to examine all the limbs of the - operand, since numbers like 100..000 and 99...999 generally differ only - in the lowest limb. It'd be possible to examine just a couple of high - limbs to increase the probability of being exact, but that doesn't seem - worth bothering with. */ - -#define MPN_SIZEINBASE(result, ptr, size, base) \ - do { \ - int __lb_base, __cnt; \ - size_t __totbits; \ - \ - ASSERT ((size) >= 0); \ - ASSERT ((base) >= 2); \ - ASSERT ((base) < numberof (mp_bases)); \ - \ - /* Special case for X == 0. */ \ - if ((size) == 0) \ - (result) = 1; \ - else \ - { \ - /* Calculate the total number of significant bits of X. */ \ - count_leading_zeros (__cnt, (ptr)[(size)-1]); \ - __totbits = (size_t) (size) * GMP_NUMB_BITS - (__cnt - GMP_NAIL_BITS);\ - \ - if (POW2_P (base)) \ - { \ - __lb_base = mp_bases[base].big_base; \ - (result) = (__totbits + __lb_base - 1) / __lb_base; \ - } \ - else \ - { \ - DIGITS_IN_BASEGT2_FROM_BITS (result, __totbits, base); \ - } \ - } \ - } while (0) - -#define MPN_SIZEINBASE_2EXP(result, ptr, size, base2exp) \ - do { \ - int __cnt; \ - mp_bitcnt_t __totbits; \ - ASSERT ((size) > 0); \ - ASSERT ((ptr)[(size)-1] != 0); \ - count_leading_zeros (__cnt, (ptr)[(size)-1]); \ - __totbits = (mp_bitcnt_t) (size) * GMP_NUMB_BITS - (__cnt - GMP_NAIL_BITS); \ - (result) = (__totbits + (base2exp)-1) / (base2exp); \ - } while (0) - - -/* bit count to limb count, rounding up */ -#define BITS_TO_LIMBS(n) (((n) + (GMP_NUMB_BITS - 1)) / GMP_NUMB_BITS) - -/* MPN_SET_UI sets an mpn (ptr, cnt) to given ui. MPZ_FAKE_UI creates fake - mpz_t from ui. The zp argument must have room for LIMBS_PER_ULONG limbs - in both cases (LIMBS_PER_ULONG is also defined here.) */ -#if BITS_PER_ULONG <= GMP_NUMB_BITS /* need one limb per ulong */ - -#define LIMBS_PER_ULONG 1 -#define MPN_SET_UI(zp, zn, u) \ - (zp)[0] = (u); \ - (zn) = ((zp)[0] != 0); -#define MPZ_FAKE_UI(z, zp, u) \ - (zp)[0] = (u); \ - PTR (z) = (zp); \ - SIZ (z) = ((zp)[0] != 0); \ - ASSERT_CODE (ALLOC (z) = 1); - -#else /* need two limbs per ulong */ - -#define LIMBS_PER_ULONG 2 -#define MPN_SET_UI(zp, zn, u) \ - (zp)[0] = (u) & GMP_NUMB_MASK; \ - (zp)[1] = (u) >> GMP_NUMB_BITS; \ - (zn) = ((zp)[1] != 0 ? 2 : (zp)[0] != 0 ? 1 : 0); -#define MPZ_FAKE_UI(z, zp, u) \ - (zp)[0] = (u) & GMP_NUMB_MASK; \ - (zp)[1] = (u) >> GMP_NUMB_BITS; \ - SIZ (z) = ((zp)[1] != 0 ? 2 : (zp)[0] != 0 ? 1 : 0); \ - PTR (z) = (zp); \ - ASSERT_CODE (ALLOC (z) = 2); - -#endif - - -#if HAVE_HOST_CPU_FAMILY_x86 -#define TARGET_REGISTER_STARVED 1 -#else -#define TARGET_REGISTER_STARVED 0 -#endif - - -/* LIMB_HIGHBIT_TO_MASK(n) examines the high bit of a limb value and turns 1 - or 0 there into a limb 0xFF..FF or 0 respectively. - - On most CPUs this is just an arithmetic right shift by GMP_LIMB_BITS-1, - but C99 doesn't guarantee signed right shifts are arithmetic, so we have - a little compile-time test and a fallback to a "? :" form. The latter is - necessary for instance on Cray vector systems. - - Recent versions of gcc (eg. 3.3) will in fact optimize a "? :" like this - to an arithmetic right shift anyway, but it's good to get the desired - shift on past versions too (in particular since an important use of - LIMB_HIGHBIT_TO_MASK is in udiv_qrnnd_preinv). */ - -#define LIMB_HIGHBIT_TO_MASK(n) \ - (((mp_limb_signed_t) -1 >> 1) < 0 \ - ? (mp_limb_signed_t) (n) >> (GMP_LIMB_BITS - 1) \ - : (n) & GMP_LIMB_HIGHBIT ? MP_LIMB_T_MAX : CNST_LIMB(0)) - - -/* Use a library function for invert_limb, if available. */ -#define mpn_invert_limb __MPN(invert_limb) -__GMP_DECLSPEC mp_limb_t mpn_invert_limb (mp_limb_t) ATTRIBUTE_CONST; -#if ! defined (invert_limb) && HAVE_NATIVE_mpn_invert_limb -#define invert_limb(invxl,xl) \ - do { \ - (invxl) = mpn_invert_limb (xl); \ - } while (0) -#endif - -#ifndef invert_limb -#define invert_limb(invxl,xl) \ - do { \ - mp_limb_t _dummy; \ - ASSERT ((xl) != 0); \ - udiv_qrnnd (invxl, _dummy, ~(xl), ~CNST_LIMB(0), xl); \ - } while (0) -#endif - -#define invert_pi1(dinv, d1, d0) \ - do { \ - mp_limb_t _v, _p, _t1, _t0, _mask; \ - invert_limb (_v, d1); \ - _p = (d1) * _v; \ - _p += (d0); \ - if (_p < (d0)) \ - { \ - _v--; \ - _mask = -(mp_limb_t) (_p >= (d1)); \ - _p -= (d1); \ - _v += _mask; \ - _p -= _mask & (d1); \ - } \ - umul_ppmm (_t1, _t0, d0, _v); \ - _p += _t1; \ - if (_p < _t1) \ - { \ - _v--; \ - if (UNLIKELY (_p >= (d1))) \ - { \ - if (_p > (d1) || _t0 >= (d0)) \ - _v--; \ - } \ - } \ - (dinv).inv32 = _v; \ - } while (0) - - -/* udiv_qrnnd_preinv -- Based on work by Niels Möller and Torbjörn Granlund. - We write things strangely below, to help gcc. A more straightforward - version: - _r = (nl) - _qh * (d); - _t = _r + (d); - if (_r >= _ql) - { - _qh--; - _r = _t; - } - For one operation shorter critical path, one may want to use this form: - _p = _qh * (d) - _s = (nl) + (d); - _r = (nl) - _p; - _t = _s - _p; - if (_r >= _ql) - { - _qh--; - _r = _t; - } -*/ -#define udiv_qrnnd_preinv(q, r, nh, nl, d, di) \ - do { \ - mp_limb_t _qh, _ql, _r, _mask; \ - umul_ppmm (_qh, _ql, (nh), (di)); \ - if (__builtin_constant_p (nl) && (nl) == 0) \ - { \ - _qh += (nh) + 1; \ - _r = - _qh * (d); \ - _mask = -(mp_limb_t) (_r > _ql); /* both > and >= are OK */ \ - _qh += _mask; \ - _r += _mask & (d); \ - } \ - else \ - { \ - add_ssaaaa (_qh, _ql, _qh, _ql, (nh) + 1, (nl)); \ - _r = (nl) - _qh * (d); \ - _mask = -(mp_limb_t) (_r > _ql); /* both > and >= are OK */ \ - _qh += _mask; \ - _r += _mask & (d); \ - if (UNLIKELY (_r >= (d))) \ - { \ - _r -= (d); \ - _qh++; \ - } \ - } \ - (r) = _r; \ - (q) = _qh; \ - } while (0) - -/* Dividing (NH, NL) by D, returning the remainder only. Unlike - udiv_qrnnd_preinv, works also for the case NH == D, where the - quotient doesn't quite fit in a single limb. */ -#define udiv_rnnd_preinv(r, nh, nl, d, di) \ - do { \ - mp_limb_t _qh, _ql, _r, _mask; \ - umul_ppmm (_qh, _ql, (nh), (di)); \ - if (__builtin_constant_p (nl) && (nl) == 0) \ - { \ - _r = ~(_qh + (nh)) * (d); \ - _mask = -(mp_limb_t) (_r > _ql); /* both > and >= are OK */ \ - _r += _mask & (d); \ - } \ - else \ - { \ - add_ssaaaa (_qh, _ql, _qh, _ql, (nh) + 1, (nl)); \ - _r = (nl) - _qh * (d); \ - _mask = -(mp_limb_t) (_r > _ql); /* both > and >= are OK */ \ - _r += _mask & (d); \ - if (UNLIKELY (_r >= (d))) \ - _r -= (d); \ - } \ - (r) = _r; \ - } while (0) - -/* Compute quotient the quotient and remainder for n / d. Requires d - >= B^2 / 2 and n < d B. di is the inverse - - floor ((B^3 - 1) / (d0 + d1 B)) - B. - - NOTE: Output variables are updated multiple times. Only some inputs - and outputs may overlap. -*/ -#define udiv_qr_3by2(q, r1, r0, n2, n1, n0, d1, d0, dinv) \ - do { \ - mp_limb_t _q0, _t1, _t0, _mask; \ - umul_ppmm ((q), _q0, (n2), (dinv)); \ - add_ssaaaa ((q), _q0, (q), _q0, (n2), (n1)); \ - \ - /* Compute the two most significant limbs of n - q'd */ \ - (r1) = (n1) - (d1) * (q); \ - sub_ddmmss ((r1), (r0), (r1), (n0), (d1), (d0)); \ - umul_ppmm (_t1, _t0, (d0), (q)); \ - sub_ddmmss ((r1), (r0), (r1), (r0), _t1, _t0); \ - (q)++; \ - \ - /* Conditionally adjust q and the remainders */ \ - _mask = - (mp_limb_t) ((r1) >= _q0); \ - (q) += _mask; \ - add_ssaaaa ((r1), (r0), (r1), (r0), _mask & (d1), _mask & (d0)); \ - if (UNLIKELY ((r1) >= (d1))) \ - { \ - if ((r1) > (d1) || (r0) >= (d0)) \ - { \ - (q)++; \ - sub_ddmmss ((r1), (r0), (r1), (r0), (d1), (d0)); \ - } \ - } \ - } while (0) - -#ifndef mpn_preinv_divrem_1 /* if not done with cpuvec in a fat binary */ -#define mpn_preinv_divrem_1 __MPN(preinv_divrem_1) -__GMP_DECLSPEC mp_limb_t mpn_preinv_divrem_1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t, int); -#endif - - -/* USE_PREINV_DIVREM_1 is whether to use mpn_preinv_divrem_1, as opposed to the - plain mpn_divrem_1. The default is yes, since the few CISC chips where - preinv is not good have defines saying so. */ -#ifndef USE_PREINV_DIVREM_1 -#define USE_PREINV_DIVREM_1 1 -#endif - -#if USE_PREINV_DIVREM_1 -#define MPN_DIVREM_OR_PREINV_DIVREM_1(qp,xsize,ap,size,d,dinv,shift) \ - mpn_preinv_divrem_1 (qp, xsize, ap, size, d, dinv, shift) -#else -#define MPN_DIVREM_OR_PREINV_DIVREM_1(qp,xsize,ap,size,d,dinv,shift) \ - mpn_divrem_1 (qp, xsize, ap, size, d) -#endif - -#ifndef PREINV_MOD_1_TO_MOD_1_THRESHOLD -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 10 -#endif - -/* This selection may seem backwards. The reason mpn_mod_1 typically takes - over for larger sizes is that it uses the mod_1_1 function. */ -#define MPN_MOD_OR_PREINV_MOD_1(src,size,divisor,inverse) \ - (BELOW_THRESHOLD (size, PREINV_MOD_1_TO_MOD_1_THRESHOLD) \ - ? mpn_preinv_mod_1 (src, size, divisor, inverse) \ - : mpn_mod_1 (src, size, divisor)) - - -#ifndef mpn_mod_34lsub1 /* if not done with cpuvec in a fat binary */ -#define mpn_mod_34lsub1 __MPN(mod_34lsub1) -__GMP_DECLSPEC mp_limb_t mpn_mod_34lsub1 (mp_srcptr, mp_size_t) __GMP_ATTRIBUTE_PURE; -#endif - - -/* DIVEXACT_1_THRESHOLD is at what size to use mpn_divexact_1, as opposed to - plain mpn_divrem_1. Likewise BMOD_1_TO_MOD_1_THRESHOLD for - mpn_modexact_1_odd against plain mpn_mod_1. On most CPUs divexact and - modexact are faster at all sizes, so the defaults are 0. Those CPUs - where this is not right have a tuned threshold. */ -#ifndef DIVEXACT_1_THRESHOLD -#define DIVEXACT_1_THRESHOLD 0 -#endif -#ifndef BMOD_1_TO_MOD_1_THRESHOLD -#define BMOD_1_TO_MOD_1_THRESHOLD 10 -#endif - -#define MPN_DIVREM_OR_DIVEXACT_1(rp, up, n, d) \ - do { \ - if (BELOW_THRESHOLD (n, DIVEXACT_1_THRESHOLD)) \ - ASSERT_NOCARRY (mpn_divrem_1 (rp, (mp_size_t) 0, up, n, d)); \ - else \ - { \ - ASSERT (mpn_mod_1 (up, n, d) == 0); \ - mpn_divexact_1 (rp, up, n, d); \ - } \ - } while (0) - -#ifndef mpn_modexact_1c_odd /* if not done with cpuvec in a fat binary */ -#define mpn_modexact_1c_odd __MPN(modexact_1c_odd) -__GMP_DECLSPEC mp_limb_t mpn_modexact_1c_odd (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t) __GMP_ATTRIBUTE_PURE; -#endif - -#if HAVE_NATIVE_mpn_modexact_1_odd -#define mpn_modexact_1_odd __MPN(modexact_1_odd) -__GMP_DECLSPEC mp_limb_t mpn_modexact_1_odd (mp_srcptr, mp_size_t, mp_limb_t) __GMP_ATTRIBUTE_PURE; -#else -#define mpn_modexact_1_odd(src,size,divisor) \ - mpn_modexact_1c_odd (src, size, divisor, CNST_LIMB(0)) -#endif - -#define MPN_MOD_OR_MODEXACT_1_ODD(src,size,divisor) \ - (BELOW_THRESHOLD (size, BMOD_1_TO_MOD_1_THRESHOLD) \ - ? mpn_modexact_1_odd (src, size, divisor) \ - : mpn_mod_1 (src, size, divisor)) - -/* binvert_limb() sets inv to the multiplicative inverse of n modulo - 2^GMP_NUMB_BITS, ie. satisfying inv*n == 1 mod 2^GMP_NUMB_BITS. - n must be odd (otherwise such an inverse doesn't exist). - - This is not to be confused with invert_limb(), which is completely - different. - - The table lookup gives an inverse with the low 8 bits valid, and each - multiply step doubles the number of bits. See Jebelean "An algorithm for - exact division" end of section 4 (reference in gmp.texi). - - Possible enhancement: Could use UHWtype until the last step, if half-size - multiplies are faster (might help under _LONG_LONG_LIMB). - - Alternative: As noted in Granlund and Montgomery "Division by Invariant - Integers using Multiplication" (reference in gmp.texi), n itself gives a - 3-bit inverse immediately, and could be used instead of a table lookup. - A 4-bit inverse can be obtained effectively from xoring bits 1 and 2 into - bit 3, for instance with (((n + 2) & 4) << 1) ^ n. */ - -#define binvert_limb_table __gmp_binvert_limb_table -__GMP_DECLSPEC extern const unsigned char binvert_limb_table[128]; - -#define binvert_limb(inv,n) \ - do { \ - mp_limb_t __n = (n); \ - mp_limb_t __inv; \ - ASSERT ((__n & 1) == 1); \ - \ - __inv = binvert_limb_table[(__n/2) & 0x7F]; /* 8 */ \ - if (GMP_NUMB_BITS > 8) __inv = 2 * __inv - __inv * __inv * __n; \ - if (GMP_NUMB_BITS > 16) __inv = 2 * __inv - __inv * __inv * __n; \ - if (GMP_NUMB_BITS > 32) __inv = 2 * __inv - __inv * __inv * __n; \ - \ - if (GMP_NUMB_BITS > 64) \ - { \ - int __invbits = 64; \ - do { \ - __inv = 2 * __inv - __inv * __inv * __n; \ - __invbits *= 2; \ - } while (__invbits < GMP_NUMB_BITS); \ - } \ - \ - ASSERT ((__inv * __n & GMP_NUMB_MASK) == 1); \ - (inv) = __inv & GMP_NUMB_MASK; \ - } while (0) -#define modlimb_invert binvert_limb /* backward compatibility */ - -/* Multiplicative inverse of 3, modulo 2^GMP_NUMB_BITS. - Eg. 0xAAAAAAAB for 32 bits, 0xAAAAAAAAAAAAAAAB for 64 bits. - GMP_NUMB_MAX/3*2+1 is right when GMP_NUMB_BITS is even, but when it's odd - we need to start from GMP_NUMB_MAX>>1. */ -#define MODLIMB_INVERSE_3 (((GMP_NUMB_MAX >> (GMP_NUMB_BITS % 2)) / 3) * 2 + 1) - -/* ceil(GMP_NUMB_MAX/3) and ceil(2*GMP_NUMB_MAX/3). - These expressions work because GMP_NUMB_MAX%3 != 0 for all GMP_NUMB_BITS. */ -#define GMP_NUMB_CEIL_MAX_DIV3 (GMP_NUMB_MAX / 3 + 1) -#define GMP_NUMB_CEIL_2MAX_DIV3 ((GMP_NUMB_MAX>>1) / 3 + 1 + GMP_NUMB_HIGHBIT) - - -/* Set r to -a mod d. a>=d is allowed. Can give r>d. All should be limbs. - - It's not clear whether this is the best way to do this calculation. - Anything congruent to -a would be fine for the one limb congruence - tests. */ - -#define NEG_MOD(r, a, d) \ - do { \ - ASSERT ((d) != 0); \ - ASSERT_LIMB (a); \ - ASSERT_LIMB (d); \ - \ - if ((a) <= (d)) \ - { \ - /* small a is reasonably likely */ \ - (r) = (d) - (a); \ - } \ - else \ - { \ - unsigned __twos; \ - mp_limb_t __dnorm; \ - count_leading_zeros (__twos, d); \ - __twos -= GMP_NAIL_BITS; \ - __dnorm = (d) << __twos; \ - (r) = ((a) <= __dnorm ? __dnorm : 2*__dnorm) - (a); \ - } \ - \ - ASSERT_LIMB (r); \ - } while (0) - -/* A bit mask of all the least significant zero bits of n, or -1 if n==0. */ -#define LOW_ZEROS_MASK(n) (((n) & -(n)) - 1) - - -/* ULONG_PARITY sets "p" to 1 if there's an odd number of 1 bits in "n", or - to 0 if there's an even number. "n" should be an unsigned long and "p" - an int. */ - -#if defined (__GNUC__) && ! defined (NO_ASM) && HAVE_HOST_CPU_alpha_CIX -#define ULONG_PARITY(p, n) \ - do { \ - int __p; \ - __asm__ ("ctpop %1, %0" : "=r" (__p) : "r" (n)); \ - (p) = __p & 1; \ - } while (0) -#endif - -/* Cray intrinsic _popcnt. */ -#ifdef _CRAY -#define ULONG_PARITY(p, n) \ - do { \ - (p) = _popcnt (n) & 1; \ - } while (0) -#endif - -#if defined (__GNUC__) && ! defined (__INTEL_COMPILER) \ - && ! defined (NO_ASM) && defined (__ia64) -/* unsigned long is either 32 or 64 bits depending on the ABI, zero extend - to a 64 bit unsigned long long for popcnt */ -#define ULONG_PARITY(p, n) \ - do { \ - unsigned long long __n = (unsigned long) (n); \ - int __p; \ - __asm__ ("popcnt %0 = %1" : "=r" (__p) : "r" (__n)); \ - (p) = __p & 1; \ - } while (0) -#endif - -#if defined (__GNUC__) && ! defined (__INTEL_COMPILER) \ - && ! defined (NO_ASM) && HAVE_HOST_CPU_FAMILY_x86 -#if __GMP_GNUC_PREREQ (3,1) -#define __GMP_qm "=Qm" -#define __GMP_q "=Q" -#else -#define __GMP_qm "=qm" -#define __GMP_q "=q" -#endif -#define ULONG_PARITY(p, n) \ - do { \ - char __p; \ - unsigned long __n = (n); \ - __n ^= (__n >> 16); \ - __asm__ ("xorb %h1, %b1\n\t" \ - "setpo %0" \ - : __GMP_qm (__p), __GMP_q (__n) \ - : "1" (__n)); \ - (p) = __p; \ - } while (0) -#endif - -#if ! defined (ULONG_PARITY) -#define ULONG_PARITY(p, n) \ - do { \ - unsigned long __n = (n); \ - int __p = 0; \ - do \ - { \ - __p ^= 0x96696996L >> (__n & 0x1F); \ - __n >>= 5; \ - } \ - while (__n != 0); \ - \ - (p) = __p & 1; \ - } while (0) -#endif - - -/* 3 cycles on 604 or 750 since shifts and rlwimi's can pair. gcc (as of - version 3.1 at least) doesn't seem to know how to generate rlwimi for - anything other than bit-fields, so use "asm". */ -#if defined (__GNUC__) && ! defined (NO_ASM) \ - && HAVE_HOST_CPU_FAMILY_powerpc && GMP_LIMB_BITS == 32 -#define BSWAP_LIMB(dst, src) \ - do { \ - mp_limb_t __bswapl_src = (src); \ - mp_limb_t __tmp1 = __bswapl_src >> 24; /* low byte */ \ - mp_limb_t __tmp2 = __bswapl_src << 24; /* high byte */ \ - __asm__ ("rlwimi %0, %2, 24, 16, 23" /* 2nd low */ \ - : "=r" (__tmp1) : "0" (__tmp1), "r" (__bswapl_src)); \ - __asm__ ("rlwimi %0, %2, 8, 8, 15" /* 3nd high */ \ - : "=r" (__tmp2) : "0" (__tmp2), "r" (__bswapl_src)); \ - (dst) = __tmp1 | __tmp2; /* whole */ \ - } while (0) -#endif - -/* bswap is available on i486 and up and is fast. A combination rorw $8 / - roll $16 / rorw $8 is used in glibc for plain i386 (and in the linux - kernel with xchgb instead of rorw), but this is not done here, because - i386 means generic x86 and mixing word and dword operations will cause - partial register stalls on P6 chips. */ -#if defined (__GNUC__) && ! defined (NO_ASM) \ - && HAVE_HOST_CPU_FAMILY_x86 && ! HAVE_HOST_CPU_i386 \ - && GMP_LIMB_BITS == 32 -#define BSWAP_LIMB(dst, src) \ - do { \ - __asm__ ("bswap %0" : "=r" (dst) : "0" (src)); \ - } while (0) -#endif - -#if defined (__GNUC__) && ! defined (NO_ASM) \ - && defined (__amd64__) && GMP_LIMB_BITS == 64 -#define BSWAP_LIMB(dst, src) \ - do { \ - __asm__ ("bswap %q0" : "=r" (dst) : "0" (src)); \ - } while (0) -#endif - -#if defined (__GNUC__) && ! defined (__INTEL_COMPILER) \ - && ! defined (NO_ASM) && defined (__ia64) && GMP_LIMB_BITS == 64 -#define BSWAP_LIMB(dst, src) \ - do { \ - __asm__ ("mux1 %0 = %1, @rev" : "=r" (dst) : "r" (src)); \ - } while (0) -#endif - -/* As per glibc. */ -#if defined (__GNUC__) && ! defined (NO_ASM) \ - && HAVE_HOST_CPU_FAMILY_m68k && GMP_LIMB_BITS == 32 -#define BSWAP_LIMB(dst, src) \ - do { \ - mp_limb_t __bswapl_src = (src); \ - __asm__ ("ror%.w %#8, %0\n\t" \ - "swap %0\n\t" \ - "ror%.w %#8, %0" \ - : "=d" (dst) \ - : "0" (__bswapl_src)); \ - } while (0) -#endif - -#if ! defined (BSWAP_LIMB) -#if GMP_LIMB_BITS == 8 -#define BSWAP_LIMB(dst, src) \ - do { (dst) = (src); } while (0) -#endif -#if GMP_LIMB_BITS == 16 -#define BSWAP_LIMB(dst, src) \ - do { \ - (dst) = ((src) << 8) + ((src) >> 8); \ - } while (0) -#endif -#if GMP_LIMB_BITS == 32 -#define BSWAP_LIMB(dst, src) \ - do { \ - (dst) = \ - ((src) << 24) \ - + (((src) & 0xFF00) << 8) \ - + (((src) >> 8) & 0xFF00) \ - + ((src) >> 24); \ - } while (0) -#endif -#if GMP_LIMB_BITS == 64 -#define BSWAP_LIMB(dst, src) \ - do { \ - (dst) = \ - ((src) << 56) \ - + (((src) & 0xFF00) << 40) \ - + (((src) & 0xFF0000) << 24) \ - + (((src) & 0xFF000000) << 8) \ - + (((src) >> 8) & 0xFF000000) \ - + (((src) >> 24) & 0xFF0000) \ - + (((src) >> 40) & 0xFF00) \ - + ((src) >> 56); \ - } while (0) -#endif -#endif - -#if ! defined (BSWAP_LIMB) -#define BSWAP_LIMB(dst, src) \ - do { \ - mp_limb_t __bswapl_src = (src); \ - mp_limb_t __dstl = 0; \ - int __i; \ - for (__i = 0; __i < GMP_LIMB_BYTES; __i++) \ - { \ - __dstl = (__dstl << 8) | (__bswapl_src & 0xFF); \ - __bswapl_src >>= 8; \ - } \ - (dst) = __dstl; \ - } while (0) -#endif - - -/* Apparently lwbrx might be slow on some PowerPC chips, so restrict it to - those we know are fast. */ -#if defined (__GNUC__) && ! defined (NO_ASM) \ - && GMP_LIMB_BITS == 32 && HAVE_LIMB_BIG_ENDIAN \ - && (HAVE_HOST_CPU_powerpc604 \ - || HAVE_HOST_CPU_powerpc604e \ - || HAVE_HOST_CPU_powerpc750 \ - || HAVE_HOST_CPU_powerpc7400) -#define BSWAP_LIMB_FETCH(limb, src) \ - do { \ - mp_srcptr __blf_src = (src); \ - mp_limb_t __limb; \ - __asm__ ("lwbrx %0, 0, %1" \ - : "=r" (__limb) \ - : "r" (__blf_src), \ - "m" (*__blf_src)); \ - (limb) = __limb; \ - } while (0) -#endif - -#if ! defined (BSWAP_LIMB_FETCH) -#define BSWAP_LIMB_FETCH(limb, src) BSWAP_LIMB (limb, *(src)) -#endif - - -/* On the same basis that lwbrx might be slow, restrict stwbrx to those we - know are fast. FIXME: Is this necessary? */ -#if defined (__GNUC__) && ! defined (NO_ASM) \ - && GMP_LIMB_BITS == 32 && HAVE_LIMB_BIG_ENDIAN \ - && (HAVE_HOST_CPU_powerpc604 \ - || HAVE_HOST_CPU_powerpc604e \ - || HAVE_HOST_CPU_powerpc750 \ - || HAVE_HOST_CPU_powerpc7400) -#define BSWAP_LIMB_STORE(dst, limb) \ - do { \ - mp_ptr __dst = (dst); \ - mp_limb_t __limb = (limb); \ - __asm__ ("stwbrx %1, 0, %2" \ - : "=m" (*__dst) \ - : "r" (__limb), \ - "r" (__dst)); \ - } while (0) -#endif - -#if ! defined (BSWAP_LIMB_STORE) -#define BSWAP_LIMB_STORE(dst, limb) BSWAP_LIMB (*(dst), limb) -#endif - - -/* Byte swap limbs from {src,size} and store at {dst,size}. */ -#define MPN_BSWAP(dst, src, size) \ - do { \ - mp_ptr __dst = (dst); \ - mp_srcptr __src = (src); \ - mp_size_t __size = (size); \ - mp_size_t __i; \ - ASSERT ((size) >= 0); \ - ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, size)); \ - CRAY_Pragma ("_CRI ivdep"); \ - for (__i = 0; __i < __size; __i++) \ - { \ - BSWAP_LIMB_FETCH (*__dst, __src); \ - __dst++; \ - __src++; \ - } \ - } while (0) - -/* Byte swap limbs from {dst,size} and store in reverse order at {src,size}. */ -#define MPN_BSWAP_REVERSE(dst, src, size) \ - do { \ - mp_ptr __dst = (dst); \ - mp_size_t __size = (size); \ - mp_srcptr __src = (src) + __size - 1; \ - mp_size_t __i; \ - ASSERT ((size) >= 0); \ - ASSERT (! MPN_OVERLAP_P (dst, size, src, size)); \ - CRAY_Pragma ("_CRI ivdep"); \ - for (__i = 0; __i < __size; __i++) \ - { \ - BSWAP_LIMB_FETCH (*__dst, __src); \ - __dst++; \ - __src--; \ - } \ - } while (0) - - -/* No processor claiming to be SPARC v9 compliant seems to - implement the POPC instruction. Disable pattern for now. */ -#if 0 -#if defined __GNUC__ && defined __sparc_v9__ && GMP_LIMB_BITS == 64 -#define popc_limb(result, input) \ - do { \ - DItype __res; \ - __asm__ ("popc %1,%0" : "=r" (result) : "rI" (input)); \ - } while (0) -#endif -#endif - -#if defined (__GNUC__) && ! defined (NO_ASM) && HAVE_HOST_CPU_alpha_CIX -#define popc_limb(result, input) \ - do { \ - __asm__ ("ctpop %1, %0" : "=r" (result) : "r" (input)); \ - } while (0) -#endif - -/* Cray intrinsic. */ -#ifdef _CRAY -#define popc_limb(result, input) \ - do { \ - (result) = _popcnt (input); \ - } while (0) -#endif - -#if defined (__GNUC__) && ! defined (__INTEL_COMPILER) \ - && ! defined (NO_ASM) && defined (__ia64) && GMP_LIMB_BITS == 64 -#define popc_limb(result, input) \ - do { \ - __asm__ ("popcnt %0 = %1" : "=r" (result) : "r" (input)); \ - } while (0) -#endif - -/* Cool population count of an mp_limb_t. - You have to figure out how this works, We won't tell you! - - The constants could also be expressed as: - 0x55... = [2^N / 3] = [(2^N-1)/3] - 0x33... = [2^N / 5] = [(2^N-1)/5] - 0x0f... = [2^N / 17] = [(2^N-1)/17] - (N is GMP_LIMB_BITS, [] denotes truncation.) */ - -#if ! defined (popc_limb) && GMP_LIMB_BITS == 8 -#define popc_limb(result, input) \ - do { \ - mp_limb_t __x = (input); \ - __x -= (__x >> 1) & MP_LIMB_T_MAX/3; \ - __x = ((__x >> 2) & MP_LIMB_T_MAX/5) + (__x & MP_LIMB_T_MAX/5); \ - __x = ((__x >> 4) + __x); \ - (result) = __x & 0x0f; \ - } while (0) -#endif - -#if ! defined (popc_limb) && GMP_LIMB_BITS == 16 -#define popc_limb(result, input) \ - do { \ - mp_limb_t __x = (input); \ - __x -= (__x >> 1) & MP_LIMB_T_MAX/3; \ - __x = ((__x >> 2) & MP_LIMB_T_MAX/5) + (__x & MP_LIMB_T_MAX/5); \ - __x = ((__x >> 4) + __x) & MP_LIMB_T_MAX/17; \ - __x = ((__x >> 8) + __x); \ - (result) = __x & 0xff; \ - } while (0) -#endif - -#if ! defined (popc_limb) && GMP_LIMB_BITS == 32 -#define popc_limb(result, input) \ - do { \ - mp_limb_t __x = (input); \ - __x -= (__x >> 1) & MP_LIMB_T_MAX/3; \ - __x = ((__x >> 2) & MP_LIMB_T_MAX/5) + (__x & MP_LIMB_T_MAX/5); \ - __x = ((__x >> 4) + __x) & MP_LIMB_T_MAX/17; \ - __x = ((__x >> 8) + __x); \ - __x = ((__x >> 16) + __x); \ - (result) = __x & 0xff; \ - } while (0) -#endif - -#if ! defined (popc_limb) && GMP_LIMB_BITS == 64 -#define popc_limb(result, input) \ - do { \ - mp_limb_t __x = (input); \ - __x -= (__x >> 1) & MP_LIMB_T_MAX/3; \ - __x = ((__x >> 2) & MP_LIMB_T_MAX/5) + (__x & MP_LIMB_T_MAX/5); \ - __x = ((__x >> 4) + __x) & MP_LIMB_T_MAX/17; \ - __x = ((__x >> 8) + __x); \ - __x = ((__x >> 16) + __x); \ - __x = ((__x >> 32) + __x); \ - (result) = __x & 0xff; \ - } while (0) -#endif - - -/* Define stuff for longlong.h. */ -#if HAVE_ATTRIBUTE_MODE -typedef unsigned int UQItype __attribute__ ((mode (QI))); -typedef int SItype __attribute__ ((mode (SI))); -typedef unsigned int USItype __attribute__ ((mode (SI))); -typedef int DItype __attribute__ ((mode (DI))); -typedef unsigned int UDItype __attribute__ ((mode (DI))); -#else -typedef unsigned char UQItype; -typedef long SItype; -typedef unsigned long USItype; -#if HAVE_LONG_LONG -typedef long long int DItype; -typedef unsigned long long int UDItype; -#else /* Assume `long' gives us a wide enough type. Needed for hppa2.0w. */ -typedef long int DItype; -typedef unsigned long int UDItype; -#endif -#endif - -typedef mp_limb_t UWtype; -typedef unsigned int UHWtype; -#define W_TYPE_SIZE GMP_LIMB_BITS - -/* Define ieee_double_extract and _GMP_IEEE_FLOATS. - - Bit field packing is "implementation defined" according to C99, which - leaves us at the compiler's mercy here. For some systems packing is - defined in the ABI (eg. x86). In any case so far it seems universal that - little endian systems pack from low to high, and big endian from high to - low within the given type. - - Within the fields we rely on the integer endianness being the same as the - float endianness, this is true everywhere we know of and it'd be a fairly - strange system that did anything else. */ - -#if HAVE_DOUBLE_IEEE_LITTLE_SWAPPED -#define _GMP_IEEE_FLOATS 1 -union ieee_double_extract -{ - struct - { - gmp_uint_least32_t manh:20; - gmp_uint_least32_t exp:11; - gmp_uint_least32_t sig:1; - gmp_uint_least32_t manl:32; - } s; - double d; -}; -#endif - -#if HAVE_DOUBLE_IEEE_LITTLE_ENDIAN -#define _GMP_IEEE_FLOATS 1 -union ieee_double_extract -{ - struct - { - gmp_uint_least32_t manl:32; - gmp_uint_least32_t manh:20; - gmp_uint_least32_t exp:11; - gmp_uint_least32_t sig:1; - } s; - double d; -}; -#endif - -#if HAVE_DOUBLE_IEEE_BIG_ENDIAN -#define _GMP_IEEE_FLOATS 1 -union ieee_double_extract -{ - struct - { - gmp_uint_least32_t sig:1; - gmp_uint_least32_t exp:11; - gmp_uint_least32_t manh:20; - gmp_uint_least32_t manl:32; - } s; - double d; -}; -#endif - -#if HAVE_DOUBLE_VAX_D -union double_extract -{ - struct - { - gmp_uint_least32_t man3:7; /* highest 7 bits */ - gmp_uint_least32_t exp:8; /* excess-128 exponent */ - gmp_uint_least32_t sig:1; - gmp_uint_least32_t man2:16; - gmp_uint_least32_t man1:16; - gmp_uint_least32_t man0:16; /* lowest 16 bits */ - } s; - double d; -}; -#endif - -/* Use (4.0 * ...) instead of (2.0 * ...) to work around buggy compilers - that don't convert ulong->double correctly (eg. SunOS 4 native cc). */ -#define MP_BASE_AS_DOUBLE (4.0 * ((mp_limb_t) 1 << (GMP_NUMB_BITS - 2))) -/* Maximum number of limbs it will take to store any `double'. - We assume doubles have 53 mantissa bits. */ -#define LIMBS_PER_DOUBLE ((53 + GMP_NUMB_BITS - 2) / GMP_NUMB_BITS + 1) - -__GMP_DECLSPEC int __gmp_extract_double (mp_ptr, double); - -#define mpn_get_d __gmpn_get_d -__GMP_DECLSPEC double mpn_get_d (mp_srcptr, mp_size_t, mp_size_t, long) __GMP_ATTRIBUTE_PURE; - - -/* DOUBLE_NAN_INF_ACTION executes code a_nan if x is a NaN, or executes - a_inf if x is an infinity. Both are considered unlikely values, for - branch prediction. */ - -#if _GMP_IEEE_FLOATS -#define DOUBLE_NAN_INF_ACTION(x, a_nan, a_inf) \ - do { \ - union ieee_double_extract u; \ - u.d = (x); \ - if (UNLIKELY (u.s.exp == 0x7FF)) \ - { \ - if (u.s.manl == 0 && u.s.manh == 0) \ - { a_inf; } \ - else \ - { a_nan; } \ - } \ - } while (0) -#endif - -#if HAVE_DOUBLE_VAX_D || HAVE_DOUBLE_VAX_G || HAVE_DOUBLE_CRAY_CFP -/* no nans or infs in these formats */ -#define DOUBLE_NAN_INF_ACTION(x, a_nan, a_inf) \ - do { } while (0) -#endif - -#ifndef DOUBLE_NAN_INF_ACTION -/* Unknown format, try something generic. - NaN should be "unordered", so x!=x. - Inf should be bigger than DBL_MAX. */ -#define DOUBLE_NAN_INF_ACTION(x, a_nan, a_inf) \ - do { \ - { \ - if (UNLIKELY ((x) != (x))) \ - { a_nan; } \ - else if (UNLIKELY ((x) > DBL_MAX || (x) < -DBL_MAX)) \ - { a_inf; } \ - } \ - } while (0) -#endif - -/* On m68k, x86 and amd64, gcc (and maybe other compilers) can hold doubles - in the coprocessor, which means a bigger exponent range than normal, and - depending on the rounding mode, a bigger mantissa than normal. (See - "Disappointments" in the gcc manual.) FORCE_DOUBLE stores and fetches - "d" through memory to force any rounding and overflows to occur. - - On amd64, and on x86s with SSE2, gcc (depending on options) uses the xmm - registers, where there's no such extra precision and no need for the - FORCE_DOUBLE. We don't bother to detect this since the present uses for - FORCE_DOUBLE are only in test programs and default generic C code. - - Not quite sure that an "automatic volatile" will use memory, but it does - in gcc. An asm("":"=m"(d):"0"(d)) can't be used to trick gcc, since - apparently matching operands like "0" are only allowed on a register - output. gcc 3.4 warns about this, though in fact it and past versions - seem to put the operand through memory as hoped. */ - -#if (HAVE_HOST_CPU_FAMILY_m68k || HAVE_HOST_CPU_FAMILY_x86 \ - || defined (__amd64__)) -#define FORCE_DOUBLE(d) \ - do { volatile double __gmp_force = (d); (d) = __gmp_force; } while (0) -#else -#define FORCE_DOUBLE(d) do { } while (0) -#endif - - -__GMP_DECLSPEC extern const unsigned char __gmp_digit_value_tab[]; - -__GMP_DECLSPEC extern int __gmp_junk; -__GMP_DECLSPEC extern const int __gmp_0; -__GMP_DECLSPEC void __gmp_exception (int) ATTRIBUTE_NORETURN; -__GMP_DECLSPEC void __gmp_divide_by_zero (void) ATTRIBUTE_NORETURN; -__GMP_DECLSPEC void __gmp_sqrt_of_negative (void) ATTRIBUTE_NORETURN; -__GMP_DECLSPEC void __gmp_invalid_operation (void) ATTRIBUTE_NORETURN; -#define GMP_ERROR(code) __gmp_exception (code) -#define DIVIDE_BY_ZERO __gmp_divide_by_zero () -#define SQRT_OF_NEGATIVE __gmp_sqrt_of_negative () - -#if defined _LONG_LONG_LIMB -#define CNST_LIMB(C) ((mp_limb_t) C##LL) -#else /* not _LONG_LONG_LIMB */ -#define CNST_LIMB(C) ((mp_limb_t) C##L) -#endif /* _LONG_LONG_LIMB */ - -/* Stuff used by mpn/generic/perfsqr.c and mpz/prime_p.c */ -#if GMP_NUMB_BITS == 2 -#define PP 0x3 /* 3 */ -#define PP_FIRST_OMITTED 5 -#endif -#if GMP_NUMB_BITS == 4 -#define PP 0xF /* 3 x 5 */ -#define PP_FIRST_OMITTED 7 -#endif -#if GMP_NUMB_BITS == 8 -#define PP 0x69 /* 3 x 5 x 7 */ -#define PP_FIRST_OMITTED 11 -#endif -#if GMP_NUMB_BITS == 16 -#define PP 0x3AA7 /* 3 x 5 x 7 x 11 x 13 */ -#define PP_FIRST_OMITTED 17 -#endif -#if GMP_NUMB_BITS == 32 -#define PP 0xC0CFD797L /* 3 x 5 x 7 x 11 x ... x 29 */ -#define PP_INVERTED 0x53E5645CL -#define PP_FIRST_OMITTED 31 -#endif -#if GMP_NUMB_BITS == 64 -#define PP CNST_LIMB(0xE221F97C30E94E1D) /* 3 x 5 x 7 x 11 x ... x 53 */ -#define PP_INVERTED CNST_LIMB(0x21CFE6CFC938B36B) -#define PP_FIRST_OMITTED 59 -#endif -#ifndef PP_FIRST_OMITTED -#define PP_FIRST_OMITTED 3 -#endif - -/* BIT1 means a result value in bit 1 (second least significant bit), with a - zero bit representing +1 and a one bit representing -1. Bits other than - bit 1 are garbage. These are meant to be kept in "int"s, and casts are - used to ensure the expressions are "int"s even if a and/or b might be - other types. - - JACOBI_TWOS_U_BIT1 and JACOBI_RECIP_UU_BIT1 are used in mpn_jacobi_base - and their speed is important. Expressions are used rather than - conditionals to accumulate sign changes, which effectively means XORs - instead of conditional JUMPs. */ - -/* (a/0), with a signed; is 1 if a=+/-1, 0 otherwise */ -#define JACOBI_S0(a) (((a) == 1) | ((a) == -1)) - -/* (a/0), with a unsigned; is 1 if a=+/-1, 0 otherwise */ -#define JACOBI_U0(a) ((a) == 1) - -/* FIXME: JACOBI_LS0 and JACOBI_0LS are the same, so delete one and - come up with a better name. */ - -/* (a/0), with a given by low and size; - is 1 if a=+/-1, 0 otherwise */ -#define JACOBI_LS0(alow,asize) \ - (((asize) == 1 || (asize) == -1) && (alow) == 1) - -/* (a/0), with a an mpz_t; - fetch of low limb always valid, even if size is zero */ -#define JACOBI_Z0(a) JACOBI_LS0 (PTR(a)[0], SIZ(a)) - -/* (0/b), with b unsigned; is 1 if b=1, 0 otherwise */ -#define JACOBI_0U(b) ((b) == 1) - -/* (0/b), with b unsigned; is 1 if b=+/-1, 0 otherwise */ -#define JACOBI_0S(b) ((b) == 1 || (b) == -1) - -/* (0/b), with b given by low and size; is 1 if b=+/-1, 0 otherwise */ -#define JACOBI_0LS(blow,bsize) \ - (((bsize) == 1 || (bsize) == -1) && (blow) == 1) - -/* Convert a bit1 to +1 or -1. */ -#define JACOBI_BIT1_TO_PN(result_bit1) \ - (1 - ((int) (result_bit1) & 2)) - -/* (2/b), with b unsigned and odd; - is (-1)^((b^2-1)/8) which is 1 if b==1,7mod8 or -1 if b==3,5mod8 and - hence obtained from (b>>1)^b */ -#define JACOBI_TWO_U_BIT1(b) \ - ((int) (((b) >> 1) ^ (b))) - -/* (2/b)^twos, with b unsigned and odd */ -#define JACOBI_TWOS_U_BIT1(twos, b) \ - ((int) ((twos) << 1) & JACOBI_TWO_U_BIT1 (b)) - -/* (2/b)^twos, with b unsigned and odd */ -#define JACOBI_TWOS_U(twos, b) \ - (JACOBI_BIT1_TO_PN (JACOBI_TWOS_U_BIT1 (twos, b))) - -/* (-1/b), with b odd (signed or unsigned); - is (-1)^((b-1)/2) */ -#define JACOBI_N1B_BIT1(b) \ - ((int) (b)) - -/* (a/b) effect due to sign of a: signed/unsigned, b odd; - is (-1/b) if a<0, or +1 if a>=0 */ -#define JACOBI_ASGN_SU_BIT1(a, b) \ - ((((a) < 0) << 1) & JACOBI_N1B_BIT1(b)) - -/* (a/b) effect due to sign of b: signed/signed; - is -1 if a and b both negative, +1 otherwise */ -#define JACOBI_BSGN_SS_BIT1(a, b) \ - ((((a)<0) & ((b)<0)) << 1) - -/* (a/b) effect due to sign of b: signed/mpz; - is -1 if a and b both negative, +1 otherwise */ -#define JACOBI_BSGN_SZ_BIT1(a, b) \ - JACOBI_BSGN_SS_BIT1 (a, SIZ(b)) - -/* (a/b) effect due to sign of b: mpz/signed; - is -1 if a and b both negative, +1 otherwise */ -#define JACOBI_BSGN_ZS_BIT1(a, b) \ - JACOBI_BSGN_SZ_BIT1 (b, a) - -/* (a/b) reciprocity to switch to (b/a), a,b both unsigned and odd; - is (-1)^((a-1)*(b-1)/4), which means +1 if either a,b==1mod4, or -1 if - both a,b==3mod4, achieved in bit 1 by a&b. No ASSERT()s about a,b odd - because this is used in a couple of places with only bit 1 of a or b - valid. */ -#define JACOBI_RECIP_UU_BIT1(a, b) \ - ((int) ((a) & (b))) - -/* Strip low zero limbs from {b_ptr,b_size} by incrementing b_ptr and - decrementing b_size. b_low should be b_ptr[0] on entry, and will be - updated for the new b_ptr. result_bit1 is updated according to the - factors of 2 stripped, as per (a/2). */ -#define JACOBI_STRIP_LOW_ZEROS(result_bit1, a, b_ptr, b_size, b_low) \ - do { \ - ASSERT ((b_size) >= 1); \ - ASSERT ((b_low) == (b_ptr)[0]); \ - \ - while (UNLIKELY ((b_low) == 0)) \ - { \ - (b_size)--; \ - ASSERT ((b_size) >= 1); \ - (b_ptr)++; \ - (b_low) = *(b_ptr); \ - \ - ASSERT (((a) & 1) != 0); \ - if ((GMP_NUMB_BITS % 2) == 1) \ - (result_bit1) ^= JACOBI_TWO_U_BIT1(a); \ - } \ - } while (0) - -/* Set a_rem to {a_ptr,a_size} reduced modulo b, either using mod_1 or - modexact_1_odd, but in either case leaving a_rem<b. b must be odd and - unsigned. modexact_1_odd effectively calculates -a mod b, and - result_bit1 is adjusted for the factor of -1. - - The way mpn_modexact_1_odd sometimes bases its remainder on a_size and - sometimes on a_size-1 means if GMP_NUMB_BITS is odd we can't know what - factor to introduce into result_bit1, so for that case use mpn_mod_1 - unconditionally. - - FIXME: mpn_modexact_1_odd is more efficient, so some way to get it used - for odd GMP_NUMB_BITS would be good. Perhaps it could mung its result, - or not skip a divide step, or something. */ - -#define JACOBI_MOD_OR_MODEXACT_1_ODD(result_bit1, a_rem, a_ptr, a_size, b) \ - do { \ - mp_srcptr __a_ptr = (a_ptr); \ - mp_size_t __a_size = (a_size); \ - mp_limb_t __b = (b); \ - \ - ASSERT (__a_size >= 1); \ - ASSERT (__b & 1); \ - \ - if ((GMP_NUMB_BITS % 2) != 0 \ - || ABOVE_THRESHOLD (__a_size, BMOD_1_TO_MOD_1_THRESHOLD)) \ - { \ - (a_rem) = mpn_mod_1 (__a_ptr, __a_size, __b); \ - } \ - else \ - { \ - (result_bit1) ^= JACOBI_N1B_BIT1 (__b); \ - (a_rem) = mpn_modexact_1_odd (__a_ptr, __a_size, __b); \ - } \ - } while (0) - -/* State for the Jacobi computation using Lehmer. */ -#define jacobi_table __gmp_jacobi_table -__GMP_DECLSPEC extern const unsigned char jacobi_table[208]; - -/* Bit layout for the initial state. b must be odd. - - 3 2 1 0 - +--+--+--+--+ - |a1|a0|b1| s| - +--+--+--+--+ - - */ -static inline unsigned -mpn_jacobi_init (unsigned a, unsigned b, unsigned s) -{ - ASSERT (b & 1); - ASSERT (s <= 1); - return ((a & 3) << 2) + (b & 2) + s; -} - -static inline int -mpn_jacobi_finish (unsigned bits) -{ - /* (a, b) = (1,0) or (0,1) */ - ASSERT ( (bits & 14) == 0); - - return 1-2*(bits & 1); -} - -static inline unsigned -mpn_jacobi_update (unsigned bits, unsigned denominator, unsigned q) -{ - /* FIXME: Could halve table size by not including the e bit in the - * index, and instead xor when updating. Then the lookup would be - * like - * - * bits ^= table[((bits & 30) << 2) + (denominator << 2) + q]; - */ - - ASSERT (bits < 26); - ASSERT (denominator < 2); - ASSERT (q < 4); - - /* For almost all calls, denominator is constant and quite often q - is constant too. So use addition rather than or, so the compiler - can put the constant part can into the offset of an indexed - addressing instruction. - - With constant denominator, the below table lookup is compiled to - - C Constant q = 1, constant denominator = 1 - movzbl table+5(%eax,8), %eax - - or - - C q in %edx, constant denominator = 1 - movzbl table+4(%edx,%eax,8), %eax - - One could maintain the state preshifted 3 bits, to save a shift - here, but at least on x86, that's no real saving. - */ - return bits = jacobi_table[(bits << 3) + (denominator << 2) + q]; -} - -/* Matrix multiplication */ -#define mpn_matrix22_mul __MPN(matrix22_mul) -__GMP_DECLSPEC void mpn_matrix22_mul (mp_ptr, mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_srcptr, mp_srcptr, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_matrix22_mul_strassen __MPN(matrix22_mul_strassen) -__GMP_DECLSPEC void mpn_matrix22_mul_strassen (mp_ptr, mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_srcptr, mp_srcptr, mp_srcptr, mp_size_t, mp_ptr); -#define mpn_matrix22_mul_itch __MPN(matrix22_mul_itch) -__GMP_DECLSPEC mp_size_t mpn_matrix22_mul_itch (mp_size_t, mp_size_t) ATTRIBUTE_CONST; - -#ifndef MATRIX22_STRASSEN_THRESHOLD -#define MATRIX22_STRASSEN_THRESHOLD 30 -#endif - -/* HGCD definitions */ - -/* Extract one numb, shifting count bits left - ________ ________ - |___xh___||___xl___| - |____r____| - >count < - - The count includes any nail bits, so it should work fine if count - is computed using count_leading_zeros. If GMP_NAIL_BITS > 0, all of - xh, xl and r include nail bits. Must have 0 < count < GMP_LIMB_BITS. - - FIXME: Omit masking with GMP_NUMB_MASK, and let callers do that for - those calls where the count high bits of xh may be non-zero. -*/ - -#define MPN_EXTRACT_NUMB(count, xh, xl) \ - ((((xh) << ((count) - GMP_NAIL_BITS)) & GMP_NUMB_MASK) | \ - ((xl) >> (GMP_LIMB_BITS - (count)))) - - -/* The matrix non-negative M = (u, u'; v,v') keeps track of the - reduction (a;b) = M (alpha; beta) where alpha, beta are smaller - than a, b. The determinant must always be one, so that M has an - inverse (v', -u'; -v, u). Elements always fit in GMP_NUMB_BITS - 1 - bits. */ -struct hgcd_matrix1 -{ - mp_limb_t u[2][2]; -}; - -#define mpn_hgcd2 __MPN (hgcd2) -__GMP_DECLSPEC int mpn_hgcd2 (mp_limb_t, mp_limb_t, mp_limb_t, mp_limb_t, struct hgcd_matrix1 *); - -#define mpn_hgcd_mul_matrix1_vector __MPN (hgcd_mul_matrix1_vector) -__GMP_DECLSPEC mp_size_t mpn_hgcd_mul_matrix1_vector (const struct hgcd_matrix1 *, mp_ptr, mp_srcptr, mp_ptr, mp_size_t); - -#define mpn_matrix22_mul1_inverse_vector __MPN (matrix22_mul1_inverse_vector) -__GMP_DECLSPEC mp_size_t mpn_matrix22_mul1_inverse_vector (const struct hgcd_matrix1 *, mp_ptr, mp_srcptr, mp_ptr, mp_size_t); - -#define mpn_hgcd2_jacobi __MPN (hgcd2_jacobi) -__GMP_DECLSPEC int mpn_hgcd2_jacobi (mp_limb_t, mp_limb_t, mp_limb_t, mp_limb_t, struct hgcd_matrix1 *, unsigned *); - -struct hgcd_matrix -{ - mp_size_t alloc; /* for sanity checking only */ - mp_size_t n; - mp_ptr p[2][2]; -}; - -#define MPN_HGCD_MATRIX_INIT_ITCH(n) (4 * ((n+1)/2 + 1)) - -#define mpn_hgcd_matrix_init __MPN (hgcd_matrix_init) -__GMP_DECLSPEC void mpn_hgcd_matrix_init (struct hgcd_matrix *, mp_size_t, mp_ptr); - -#define mpn_hgcd_matrix_update_q __MPN (hgcd_matrix_update_q) -__GMP_DECLSPEC void mpn_hgcd_matrix_update_q (struct hgcd_matrix *, mp_srcptr, mp_size_t, unsigned, mp_ptr); - -#define mpn_hgcd_matrix_mul_1 __MPN (hgcd_matrix_mul_1) -__GMP_DECLSPEC void mpn_hgcd_matrix_mul_1 (struct hgcd_matrix *, const struct hgcd_matrix1 *, mp_ptr); - -#define mpn_hgcd_matrix_mul __MPN (hgcd_matrix_mul) -__GMP_DECLSPEC void mpn_hgcd_matrix_mul (struct hgcd_matrix *, const struct hgcd_matrix *, mp_ptr); - -#define mpn_hgcd_matrix_adjust __MPN (hgcd_matrix_adjust) -__GMP_DECLSPEC mp_size_t mpn_hgcd_matrix_adjust (const struct hgcd_matrix *, mp_size_t, mp_ptr, mp_ptr, mp_size_t, mp_ptr); - -#define mpn_hgcd_step __MPN(hgcd_step) -__GMP_DECLSPEC mp_size_t mpn_hgcd_step (mp_size_t, mp_ptr, mp_ptr, mp_size_t, struct hgcd_matrix *, mp_ptr); - -#define mpn_hgcd_reduce __MPN(hgcd_reduce) -__GMP_DECLSPEC mp_size_t mpn_hgcd_reduce (struct hgcd_matrix *, mp_ptr, mp_ptr, mp_size_t, mp_size_t, mp_ptr); - -#define mpn_hgcd_reduce_itch __MPN(hgcd_reduce_itch) -__GMP_DECLSPEC mp_size_t mpn_hgcd_reduce_itch (mp_size_t, mp_size_t) ATTRIBUTE_CONST; - -#define mpn_hgcd_itch __MPN (hgcd_itch) -__GMP_DECLSPEC mp_size_t mpn_hgcd_itch (mp_size_t) ATTRIBUTE_CONST; - -#define mpn_hgcd __MPN (hgcd) -__GMP_DECLSPEC mp_size_t mpn_hgcd (mp_ptr, mp_ptr, mp_size_t, struct hgcd_matrix *, mp_ptr); - -#define mpn_hgcd_appr_itch __MPN (hgcd_appr_itch) -__GMP_DECLSPEC mp_size_t mpn_hgcd_appr_itch (mp_size_t) ATTRIBUTE_CONST; - -#define mpn_hgcd_appr __MPN (hgcd_appr) -__GMP_DECLSPEC int mpn_hgcd_appr (mp_ptr, mp_ptr, mp_size_t, struct hgcd_matrix *, mp_ptr); - -#define mpn_hgcd_jacobi __MPN (hgcd_jacobi) -__GMP_DECLSPEC mp_size_t mpn_hgcd_jacobi (mp_ptr, mp_ptr, mp_size_t, struct hgcd_matrix *, unsigned *, mp_ptr); - -typedef void gcd_subdiv_step_hook(void *, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, int); - -/* Needs storage for the quotient */ -#define MPN_GCD_SUBDIV_STEP_ITCH(n) (n) - -#define mpn_gcd_subdiv_step __MPN(gcd_subdiv_step) -__GMP_DECLSPEC mp_size_t mpn_gcd_subdiv_step (mp_ptr, mp_ptr, mp_size_t, mp_size_t, gcd_subdiv_step_hook *, void *, mp_ptr); - -struct gcdext_ctx -{ - /* Result parameters. */ - mp_ptr gp; - mp_size_t gn; - mp_ptr up; - mp_size_t *usize; - - /* Cofactors updated in each step. */ - mp_size_t un; - mp_ptr u0, u1, tp; -}; - -#define mpn_gcdext_hook __MPN (gcdext_hook) -gcd_subdiv_step_hook mpn_gcdext_hook; - -#define MPN_GCDEXT_LEHMER_N_ITCH(n) (4*(n) + 3) - -#define mpn_gcdext_lehmer_n __MPN(gcdext_lehmer_n) -__GMP_DECLSPEC mp_size_t mpn_gcdext_lehmer_n (mp_ptr, mp_ptr, mp_size_t *, mp_ptr, mp_ptr, mp_size_t, mp_ptr); - -/* 4*(an + 1) + 4*(bn + 1) + an */ -#define MPN_GCDEXT_LEHMER_ITCH(an, bn) (5*(an) + 4*(bn) + 8) - -#ifndef HGCD_THRESHOLD -#define HGCD_THRESHOLD 400 -#endif - -#ifndef HGCD_APPR_THRESHOLD -#define HGCD_APPR_THRESHOLD 400 -#endif - -#ifndef HGCD_REDUCE_THRESHOLD -#define HGCD_REDUCE_THRESHOLD 1000 -#endif - -#ifndef GCD_DC_THRESHOLD -#define GCD_DC_THRESHOLD 1000 -#endif - -#ifndef GCDEXT_DC_THRESHOLD -#define GCDEXT_DC_THRESHOLD 600 -#endif - -/* Definitions for mpn_set_str and mpn_get_str */ -struct powers -{ - mp_ptr p; /* actual power value */ - mp_size_t n; /* # of limbs at p */ - mp_size_t shift; /* weight of lowest limb, in limb base B */ - size_t digits_in_base; /* number of corresponding digits */ - int base; -}; -typedef struct powers powers_t; -#define mpn_dc_set_str_powtab_alloc(n) ((n) + GMP_LIMB_BITS) -#define mpn_dc_set_str_itch(n) ((n) + GMP_LIMB_BITS) -#define mpn_dc_get_str_powtab_alloc(n) ((n) + 2 * GMP_LIMB_BITS) -#define mpn_dc_get_str_itch(n) ((n) + GMP_LIMB_BITS) - -#define mpn_dc_set_str __MPN(dc_set_str) -__GMP_DECLSPEC mp_size_t mpn_dc_set_str (mp_ptr, const unsigned char *, size_t, const powers_t *, mp_ptr); -#define mpn_bc_set_str __MPN(bc_set_str) -__GMP_DECLSPEC mp_size_t mpn_bc_set_str (mp_ptr, const unsigned char *, size_t, int); -#define mpn_set_str_compute_powtab __MPN(set_str_compute_powtab) -__GMP_DECLSPEC void mpn_set_str_compute_powtab (powers_t *, mp_ptr, mp_size_t, int); - - -/* __GMPF_BITS_TO_PREC applies a minimum 53 bits, rounds upwards to a whole - limb and adds an extra limb. __GMPF_PREC_TO_BITS drops that extra limb, - hence giving back the user's size in bits rounded up. Notice that - converting prec->bits->prec gives an unchanged value. */ -#define __GMPF_BITS_TO_PREC(n) \ - ((mp_size_t) ((__GMP_MAX (53, n) + 2 * GMP_NUMB_BITS - 1) / GMP_NUMB_BITS)) -#define __GMPF_PREC_TO_BITS(n) \ - ((mp_bitcnt_t) (n) * GMP_NUMB_BITS - GMP_NUMB_BITS) - -__GMP_DECLSPEC extern mp_size_t __gmp_default_fp_limb_precision; - -/* Compute the number of base-b digits corresponding to nlimbs limbs, rounding - down. */ -#define DIGITS_IN_BASE_PER_LIMB(res, nlimbs, b) \ - do { \ - mp_limb_t _ph, _dummy; \ - umul_ppmm (_ph, _dummy, \ - mp_bases[b].logb2, GMP_NUMB_BITS * (mp_limb_t) (nlimbs));\ - res = _ph; \ - } while (0) - -/* Compute the number of limbs corresponding to ndigits base-b digits, rounding - up. */ -#define LIMBS_PER_DIGIT_IN_BASE(res, ndigits, b) \ - do { \ - mp_limb_t _ph, _dummy; \ - umul_ppmm (_ph, _dummy, mp_bases[b].log2b, (mp_limb_t) (ndigits)); \ - res = 8 * _ph / GMP_NUMB_BITS + 2; \ - } while (0) - - -/* Set n to the number of significant digits an mpf of the given _mp_prec - field, in the given base. This is a rounded up value, designed to ensure - there's enough digits to reproduce all the guaranteed part of the value. - - There are prec many limbs, but the high might be only "1" so forget it - and just count prec-1 limbs into chars. +1 rounds that upwards, and a - further +1 is because the limbs usually won't fall on digit boundaries. - - FIXME: If base is a power of 2 and the bits per digit divides - GMP_LIMB_BITS then the +2 is unnecessary. This happens always for - base==2, and in base==16 with the current 32 or 64 bit limb sizes. */ - -#define MPF_SIGNIFICANT_DIGITS(n, base, prec) \ - do { \ - size_t rawn; \ - ASSERT (base >= 2 && base < numberof (mp_bases)); \ - DIGITS_IN_BASE_PER_LIMB (rawn, (prec) - 1, base); \ - n = rawn + 2; \ - } while (0) - - -/* Decimal point string, from the current C locale. Needs <langinfo.h> for - nl_langinfo and constants, preferably with _GNU_SOURCE defined to get - DECIMAL_POINT from glibc, and needs <locale.h> for localeconv, each under - their respective #if HAVE_FOO_H. - - GLIBC recommends nl_langinfo because getting only one facet can be - faster, apparently. */ - -/* DECIMAL_POINT seems to need _GNU_SOURCE defined to get it from glibc. */ -#if HAVE_NL_LANGINFO && defined (DECIMAL_POINT) -#define GMP_DECIMAL_POINT (nl_langinfo (DECIMAL_POINT)) -#endif -/* RADIXCHAR is deprecated, still in unix98 or some such. */ -#if HAVE_NL_LANGINFO && defined (RADIXCHAR) && ! defined (GMP_DECIMAL_POINT) -#define GMP_DECIMAL_POINT (nl_langinfo (RADIXCHAR)) -#endif -/* localeconv is slower since it returns all locale stuff */ -#if HAVE_LOCALECONV && ! defined (GMP_DECIMAL_POINT) -#define GMP_DECIMAL_POINT (localeconv()->decimal_point) -#endif -#if ! defined (GMP_DECIMAL_POINT) -#define GMP_DECIMAL_POINT (".") -#endif - - -#define DOPRNT_CONV_FIXED 1 -#define DOPRNT_CONV_SCIENTIFIC 2 -#define DOPRNT_CONV_GENERAL 3 - -#define DOPRNT_JUSTIFY_NONE 0 -#define DOPRNT_JUSTIFY_LEFT 1 -#define DOPRNT_JUSTIFY_RIGHT 2 -#define DOPRNT_JUSTIFY_INTERNAL 3 - -#define DOPRNT_SHOWBASE_YES 1 -#define DOPRNT_SHOWBASE_NO 2 -#define DOPRNT_SHOWBASE_NONZERO 3 - -struct doprnt_params_t { - int base; /* negative for upper case */ - int conv; /* choices above */ - const char *expfmt; /* exponent format */ - int exptimes4; /* exponent multiply by 4 */ - char fill; /* character */ - int justify; /* choices above */ - int prec; /* prec field, or -1 for all digits */ - int showbase; /* choices above */ - int showpoint; /* if radix point always shown */ - int showtrailing; /* if trailing zeros wanted */ - char sign; /* '+', ' ', or '\0' */ - int width; /* width field */ -}; - -#if _GMP_H_HAVE_VA_LIST - -typedef int (*doprnt_format_t) (void *, const char *, va_list); -typedef int (*doprnt_memory_t) (void *, const char *, size_t); -typedef int (*doprnt_reps_t) (void *, int, int); -typedef int (*doprnt_final_t) (void *); - -struct doprnt_funs_t { - doprnt_format_t format; - doprnt_memory_t memory; - doprnt_reps_t reps; - doprnt_final_t final; /* NULL if not required */ -}; - -extern const struct doprnt_funs_t __gmp_fprintf_funs; -extern const struct doprnt_funs_t __gmp_sprintf_funs; -extern const struct doprnt_funs_t __gmp_snprintf_funs; -extern const struct doprnt_funs_t __gmp_obstack_printf_funs; -extern const struct doprnt_funs_t __gmp_ostream_funs; - -/* "buf" is a __gmp_allocate_func block of "alloc" many bytes. The first - "size" of these have been written. "alloc > size" is maintained, so - there's room to store a '\0' at the end. "result" is where the - application wants the final block pointer. */ -struct gmp_asprintf_t { - char **result; - char *buf; - size_t size; - size_t alloc; -}; - -#define GMP_ASPRINTF_T_INIT(d, output) \ - do { \ - (d).result = (output); \ - (d).alloc = 256; \ - (d).buf = (char *) (*__gmp_allocate_func) ((d).alloc); \ - (d).size = 0; \ - } while (0) - -/* If a realloc is necessary, use twice the size actually required, so as to - avoid repeated small reallocs. */ -#define GMP_ASPRINTF_T_NEED(d, n) \ - do { \ - size_t alloc, newsize, newalloc; \ - ASSERT ((d)->alloc >= (d)->size + 1); \ - \ - alloc = (d)->alloc; \ - newsize = (d)->size + (n); \ - if (alloc <= newsize) \ - { \ - newalloc = 2*newsize; \ - (d)->alloc = newalloc; \ - (d)->buf = __GMP_REALLOCATE_FUNC_TYPE ((d)->buf, \ - alloc, newalloc, char); \ - } \ - } while (0) - -__GMP_DECLSPEC int __gmp_asprintf_memory (struct gmp_asprintf_t *, const char *, size_t); -__GMP_DECLSPEC int __gmp_asprintf_reps (struct gmp_asprintf_t *, int, int); -__GMP_DECLSPEC int __gmp_asprintf_final (struct gmp_asprintf_t *); - -/* buf is where to write the next output, and size is how much space is left - there. If the application passed size==0 then that's what we'll have - here, and nothing at all should be written. */ -struct gmp_snprintf_t { - char *buf; - size_t size; -}; - -/* Add the bytes printed by the call to the total retval, or bail out on an - error. */ -#define DOPRNT_ACCUMULATE(call) \ - do { \ - int __ret; \ - __ret = call; \ - if (__ret == -1) \ - goto error; \ - retval += __ret; \ - } while (0) -#define DOPRNT_ACCUMULATE_FUN(fun, params) \ - do { \ - ASSERT ((fun) != NULL); \ - DOPRNT_ACCUMULATE ((*(fun)) params); \ - } while (0) - -#define DOPRNT_FORMAT(fmt, ap) \ - DOPRNT_ACCUMULATE_FUN (funs->format, (data, fmt, ap)) -#define DOPRNT_MEMORY(ptr, len) \ - DOPRNT_ACCUMULATE_FUN (funs->memory, (data, ptr, len)) -#define DOPRNT_REPS(c, n) \ - DOPRNT_ACCUMULATE_FUN (funs->reps, (data, c, n)) - -#define DOPRNT_STRING(str) DOPRNT_MEMORY (str, strlen (str)) - -#define DOPRNT_REPS_MAYBE(c, n) \ - do { \ - if ((n) != 0) \ - DOPRNT_REPS (c, n); \ - } while (0) -#define DOPRNT_MEMORY_MAYBE(ptr, len) \ - do { \ - if ((len) != 0) \ - DOPRNT_MEMORY (ptr, len); \ - } while (0) - -__GMP_DECLSPEC int __gmp_doprnt (const struct doprnt_funs_t *, void *, const char *, va_list); -__GMP_DECLSPEC int __gmp_doprnt_integer (const struct doprnt_funs_t *, void *, const struct doprnt_params_t *, const char *); - -#define __gmp_doprnt_mpf __gmp_doprnt_mpf2 -__GMP_DECLSPEC int __gmp_doprnt_mpf (const struct doprnt_funs_t *, void *, const struct doprnt_params_t *, const char *, mpf_srcptr); - -__GMP_DECLSPEC int __gmp_replacement_vsnprintf (char *, size_t, const char *, va_list); -#endif /* _GMP_H_HAVE_VA_LIST */ - - -typedef int (*gmp_doscan_scan_t) (void *, const char *, ...); -typedef void *(*gmp_doscan_step_t) (void *, int); -typedef int (*gmp_doscan_get_t) (void *); -typedef int (*gmp_doscan_unget_t) (int, void *); - -struct gmp_doscan_funs_t { - gmp_doscan_scan_t scan; - gmp_doscan_step_t step; - gmp_doscan_get_t get; - gmp_doscan_unget_t unget; -}; -extern const struct gmp_doscan_funs_t __gmp_fscanf_funs; -extern const struct gmp_doscan_funs_t __gmp_sscanf_funs; - -#if _GMP_H_HAVE_VA_LIST -__GMP_DECLSPEC int __gmp_doscan (const struct gmp_doscan_funs_t *, void *, const char *, va_list); -#endif - - -/* For testing and debugging. */ -#define MPZ_CHECK_FORMAT(z) \ - do { \ - ASSERT_ALWAYS (SIZ(z) == 0 || PTR(z)[ABSIZ(z) - 1] != 0); \ - ASSERT_ALWAYS (ALLOC(z) >= ABSIZ(z)); \ - ASSERT_ALWAYS_MPN (PTR(z), ABSIZ(z)); \ - } while (0) - -#define MPQ_CHECK_FORMAT(q) \ - do { \ - MPZ_CHECK_FORMAT (mpq_numref (q)); \ - MPZ_CHECK_FORMAT (mpq_denref (q)); \ - ASSERT_ALWAYS (SIZ(mpq_denref(q)) >= 1); \ - \ - if (SIZ(mpq_numref(q)) == 0) \ - { \ - /* should have zero as 0/1 */ \ - ASSERT_ALWAYS (SIZ(mpq_denref(q)) == 1 \ - && PTR(mpq_denref(q))[0] == 1); \ - } \ - else \ - { \ - /* should have no common factors */ \ - mpz_t g; \ - mpz_init (g); \ - mpz_gcd (g, mpq_numref(q), mpq_denref(q)); \ - ASSERT_ALWAYS (mpz_cmp_ui (g, 1) == 0); \ - mpz_clear (g); \ - } \ - } while (0) - -#define MPF_CHECK_FORMAT(f) \ - do { \ - ASSERT_ALWAYS (PREC(f) >= __GMPF_BITS_TO_PREC(53)); \ - ASSERT_ALWAYS (ABSIZ(f) <= PREC(f)+1); \ - if (SIZ(f) == 0) \ - ASSERT_ALWAYS (EXP(f) == 0); \ - if (SIZ(f) != 0) \ - ASSERT_ALWAYS (PTR(f)[ABSIZ(f) - 1] != 0); \ - } while (0) - - -/* Enhancement: The "mod" and "gcd_1" functions below could have - __GMP_ATTRIBUTE_PURE, but currently (gcc 3.3) that's not supported on - function pointers, only actual functions. It probably doesn't make much - difference to the gmp code, since hopefully we arrange calls so there's - no great need for the compiler to move things around. */ - -#if WANT_FAT_BINARY && (HAVE_HOST_CPU_FAMILY_x86 || HAVE_HOST_CPU_FAMILY_x86_64) -/* NOTE: The function pointers in this struct are also in CPUVEC_FUNCS_LIST - in mpn/x86/x86-defs.m4 and mpn/x86_64/x86_64-defs.m4. Be sure to update - those when changing here. */ -struct cpuvec_t { - DECL_add_n ((*add_n)); - DECL_addlsh1_n ((*addlsh1_n)); - DECL_addlsh2_n ((*addlsh2_n)); - DECL_addmul_1 ((*addmul_1)); - DECL_addmul_2 ((*addmul_2)); - DECL_bdiv_dbm1c ((*bdiv_dbm1c)); - DECL_cnd_add_n ((*cnd_add_n)); - DECL_cnd_sub_n ((*cnd_sub_n)); - DECL_com ((*com)); - DECL_copyd ((*copyd)); - DECL_copyi ((*copyi)); - DECL_divexact_1 ((*divexact_1)); - DECL_divrem_1 ((*divrem_1)); - DECL_gcd_1 ((*gcd_1)); - DECL_lshift ((*lshift)); - DECL_lshiftc ((*lshiftc)); - DECL_mod_1 ((*mod_1)); - DECL_mod_1_1p ((*mod_1_1p)); - DECL_mod_1_1p_cps ((*mod_1_1p_cps)); - DECL_mod_1s_2p ((*mod_1s_2p)); - DECL_mod_1s_2p_cps ((*mod_1s_2p_cps)); - DECL_mod_1s_4p ((*mod_1s_4p)); - DECL_mod_1s_4p_cps ((*mod_1s_4p_cps)); - DECL_mod_34lsub1 ((*mod_34lsub1)); - DECL_modexact_1c_odd ((*modexact_1c_odd)); - DECL_mul_1 ((*mul_1)); - DECL_mul_basecase ((*mul_basecase)); - DECL_mullo_basecase ((*mullo_basecase)); - DECL_preinv_divrem_1 ((*preinv_divrem_1)); - DECL_preinv_mod_1 ((*preinv_mod_1)); - DECL_redc_1 ((*redc_1)); - DECL_redc_2 ((*redc_2)); - DECL_rshift ((*rshift)); - DECL_sqr_basecase ((*sqr_basecase)); - DECL_sub_n ((*sub_n)); - DECL_sublsh1_n ((*sublsh1_n)); - DECL_submul_1 ((*submul_1)); - mp_size_t mul_toom22_threshold; - mp_size_t mul_toom33_threshold; - mp_size_t sqr_toom2_threshold; - mp_size_t sqr_toom3_threshold; - mp_size_t bmod_1_to_mod_1_threshold; -}; -__GMP_DECLSPEC extern struct cpuvec_t __gmpn_cpuvec; -__GMP_DECLSPEC extern int __gmpn_cpuvec_initialized; -#endif /* x86 fat binary */ - -__GMP_DECLSPEC void __gmpn_cpuvec_init (void); - -/* Get a threshold "field" from __gmpn_cpuvec, running __gmpn_cpuvec_init() - if that hasn't yet been done (to establish the right values). */ -#define CPUVEC_THRESHOLD(field) \ - ((LIKELY (__gmpn_cpuvec_initialized) ? 0 : (__gmpn_cpuvec_init (), 0)), \ - __gmpn_cpuvec.field) - - -#if HAVE_NATIVE_mpn_add_nc -#define mpn_add_nc __MPN(add_nc) -__GMP_DECLSPEC mp_limb_t mpn_add_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); -#else -static inline -mp_limb_t -mpn_add_nc (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n, mp_limb_t ci) -{ - mp_limb_t co; - co = mpn_add_n (rp, up, vp, n); - co += mpn_add_1 (rp, rp, n, ci); - return co; -} -#endif - -#if HAVE_NATIVE_mpn_sub_nc -#define mpn_sub_nc __MPN(sub_nc) -__GMP_DECLSPEC mp_limb_t mpn_sub_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); -#else -static inline mp_limb_t -mpn_sub_nc (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n, mp_limb_t ci) -{ - mp_limb_t co; - co = mpn_sub_n (rp, up, vp, n); - co += mpn_sub_1 (rp, rp, n, ci); - return co; -} -#endif - -#if TUNE_PROGRAM_BUILD -/* Some extras wanted when recompiling some .c files for use by the tune - program. Not part of a normal build. - - It's necessary to keep these thresholds as #defines (just to an - identically named variable), since various defaults are established based - on #ifdef in the .c files. For some this is not so (the defaults are - instead established above), but all are done this way for consistency. */ - -#undef MUL_TOOM22_THRESHOLD -#define MUL_TOOM22_THRESHOLD mul_toom22_threshold -extern mp_size_t mul_toom22_threshold; - -#undef MUL_TOOM33_THRESHOLD -#define MUL_TOOM33_THRESHOLD mul_toom33_threshold -extern mp_size_t mul_toom33_threshold; - -#undef MUL_TOOM44_THRESHOLD -#define MUL_TOOM44_THRESHOLD mul_toom44_threshold -extern mp_size_t mul_toom44_threshold; - -#undef MUL_TOOM6H_THRESHOLD -#define MUL_TOOM6H_THRESHOLD mul_toom6h_threshold -extern mp_size_t mul_toom6h_threshold; - -#undef MUL_TOOM8H_THRESHOLD -#define MUL_TOOM8H_THRESHOLD mul_toom8h_threshold -extern mp_size_t mul_toom8h_threshold; - -#undef MUL_TOOM32_TO_TOOM43_THRESHOLD -#define MUL_TOOM32_TO_TOOM43_THRESHOLD mul_toom32_to_toom43_threshold -extern mp_size_t mul_toom32_to_toom43_threshold; - -#undef MUL_TOOM32_TO_TOOM53_THRESHOLD -#define MUL_TOOM32_TO_TOOM53_THRESHOLD mul_toom32_to_toom53_threshold -extern mp_size_t mul_toom32_to_toom53_threshold; - -#undef MUL_TOOM42_TO_TOOM53_THRESHOLD -#define MUL_TOOM42_TO_TOOM53_THRESHOLD mul_toom42_to_toom53_threshold -extern mp_size_t mul_toom42_to_toom53_threshold; - -#undef MUL_TOOM42_TO_TOOM63_THRESHOLD -#define MUL_TOOM42_TO_TOOM63_THRESHOLD mul_toom42_to_toom63_threshold -extern mp_size_t mul_toom42_to_toom63_threshold; - -#undef MUL_TOOM43_TO_TOOM54_THRESHOLD -#define MUL_TOOM43_TO_TOOM54_THRESHOLD mul_toom43_to_toom54_threshold; -extern mp_size_t mul_toom43_to_toom54_threshold; - -#undef MUL_FFT_THRESHOLD -#define MUL_FFT_THRESHOLD mul_fft_threshold -extern mp_size_t mul_fft_threshold; - -#undef MUL_FFT_MODF_THRESHOLD -#define MUL_FFT_MODF_THRESHOLD mul_fft_modf_threshold -extern mp_size_t mul_fft_modf_threshold; - -#undef MUL_FFT_TABLE -#define MUL_FFT_TABLE { 0 } - -#undef MUL_FFT_TABLE3 -#define MUL_FFT_TABLE3 { {0,0} } - -/* A native mpn_sqr_basecase is not tuned and SQR_BASECASE_THRESHOLD should - remain as zero (always use it). */ -#if ! HAVE_NATIVE_mpn_sqr_basecase -#undef SQR_BASECASE_THRESHOLD -#define SQR_BASECASE_THRESHOLD sqr_basecase_threshold -extern mp_size_t sqr_basecase_threshold; -#endif - -#if TUNE_PROGRAM_BUILD_SQR -#undef SQR_TOOM2_THRESHOLD -#define SQR_TOOM2_THRESHOLD SQR_TOOM2_MAX_GENERIC -#else -#undef SQR_TOOM2_THRESHOLD -#define SQR_TOOM2_THRESHOLD sqr_toom2_threshold -extern mp_size_t sqr_toom2_threshold; -#endif - -#undef SQR_TOOM3_THRESHOLD -#define SQR_TOOM3_THRESHOLD sqr_toom3_threshold -extern mp_size_t sqr_toom3_threshold; - -#undef SQR_TOOM4_THRESHOLD -#define SQR_TOOM4_THRESHOLD sqr_toom4_threshold -extern mp_size_t sqr_toom4_threshold; - -#undef SQR_TOOM6_THRESHOLD -#define SQR_TOOM6_THRESHOLD sqr_toom6_threshold -extern mp_size_t sqr_toom6_threshold; - -#undef SQR_TOOM8_THRESHOLD -#define SQR_TOOM8_THRESHOLD sqr_toom8_threshold -extern mp_size_t sqr_toom8_threshold; - -#undef SQR_FFT_THRESHOLD -#define SQR_FFT_THRESHOLD sqr_fft_threshold -extern mp_size_t sqr_fft_threshold; - -#undef SQR_FFT_MODF_THRESHOLD -#define SQR_FFT_MODF_THRESHOLD sqr_fft_modf_threshold -extern mp_size_t sqr_fft_modf_threshold; - -#undef SQR_FFT_TABLE -#define SQR_FFT_TABLE { 0 } - -#undef SQR_FFT_TABLE3 -#define SQR_FFT_TABLE3 { {0,0} } - -#undef MULLO_BASECASE_THRESHOLD -#define MULLO_BASECASE_THRESHOLD mullo_basecase_threshold -extern mp_size_t mullo_basecase_threshold; - -#undef MULLO_DC_THRESHOLD -#define MULLO_DC_THRESHOLD mullo_dc_threshold -extern mp_size_t mullo_dc_threshold; - -#undef MULLO_MUL_N_THRESHOLD -#define MULLO_MUL_N_THRESHOLD mullo_mul_n_threshold -extern mp_size_t mullo_mul_n_threshold; - -#undef SQRLO_BASECASE_THRESHOLD -#define SQRLO_BASECASE_THRESHOLD sqrlo_basecase_threshold -extern mp_size_t sqrlo_basecase_threshold; - -#undef SQRLO_DC_THRESHOLD -#define SQRLO_DC_THRESHOLD sqrlo_dc_threshold -extern mp_size_t sqrlo_dc_threshold; - -#undef SQRLO_SQR_THRESHOLD -#define SQRLO_SQR_THRESHOLD sqrlo_sqr_threshold -extern mp_size_t sqrlo_sqr_threshold; - -#undef MULMID_TOOM42_THRESHOLD -#define MULMID_TOOM42_THRESHOLD mulmid_toom42_threshold -extern mp_size_t mulmid_toom42_threshold; - -#undef DIV_QR_2_PI2_THRESHOLD -#define DIV_QR_2_PI2_THRESHOLD div_qr_2_pi2_threshold -extern mp_size_t div_qr_2_pi2_threshold; - -#undef DC_DIV_QR_THRESHOLD -#define DC_DIV_QR_THRESHOLD dc_div_qr_threshold -extern mp_size_t dc_div_qr_threshold; - -#undef DC_DIVAPPR_Q_THRESHOLD -#define DC_DIVAPPR_Q_THRESHOLD dc_divappr_q_threshold -extern mp_size_t dc_divappr_q_threshold; - -#undef DC_BDIV_Q_THRESHOLD -#define DC_BDIV_Q_THRESHOLD dc_bdiv_q_threshold -extern mp_size_t dc_bdiv_q_threshold; - -#undef DC_BDIV_QR_THRESHOLD -#define DC_BDIV_QR_THRESHOLD dc_bdiv_qr_threshold -extern mp_size_t dc_bdiv_qr_threshold; - -#undef MU_DIV_QR_THRESHOLD -#define MU_DIV_QR_THRESHOLD mu_div_qr_threshold -extern mp_size_t mu_div_qr_threshold; - -#undef MU_DIVAPPR_Q_THRESHOLD -#define MU_DIVAPPR_Q_THRESHOLD mu_divappr_q_threshold -extern mp_size_t mu_divappr_q_threshold; - -#undef MUPI_DIV_QR_THRESHOLD -#define MUPI_DIV_QR_THRESHOLD mupi_div_qr_threshold -extern mp_size_t mupi_div_qr_threshold; - -#undef MU_BDIV_QR_THRESHOLD -#define MU_BDIV_QR_THRESHOLD mu_bdiv_qr_threshold -extern mp_size_t mu_bdiv_qr_threshold; - -#undef MU_BDIV_Q_THRESHOLD -#define MU_BDIV_Q_THRESHOLD mu_bdiv_q_threshold -extern mp_size_t mu_bdiv_q_threshold; - -#undef INV_MULMOD_BNM1_THRESHOLD -#define INV_MULMOD_BNM1_THRESHOLD inv_mulmod_bnm1_threshold -extern mp_size_t inv_mulmod_bnm1_threshold; - -#undef INV_NEWTON_THRESHOLD -#define INV_NEWTON_THRESHOLD inv_newton_threshold -extern mp_size_t inv_newton_threshold; - -#undef INV_APPR_THRESHOLD -#define INV_APPR_THRESHOLD inv_appr_threshold -extern mp_size_t inv_appr_threshold; - -#undef BINV_NEWTON_THRESHOLD -#define BINV_NEWTON_THRESHOLD binv_newton_threshold -extern mp_size_t binv_newton_threshold; - -#undef REDC_1_TO_REDC_2_THRESHOLD -#define REDC_1_TO_REDC_2_THRESHOLD redc_1_to_redc_2_threshold -extern mp_size_t redc_1_to_redc_2_threshold; - -#undef REDC_2_TO_REDC_N_THRESHOLD -#define REDC_2_TO_REDC_N_THRESHOLD redc_2_to_redc_n_threshold -extern mp_size_t redc_2_to_redc_n_threshold; - -#undef REDC_1_TO_REDC_N_THRESHOLD -#define REDC_1_TO_REDC_N_THRESHOLD redc_1_to_redc_n_threshold -extern mp_size_t redc_1_to_redc_n_threshold; - -#undef MATRIX22_STRASSEN_THRESHOLD -#define MATRIX22_STRASSEN_THRESHOLD matrix22_strassen_threshold -extern mp_size_t matrix22_strassen_threshold; - -#undef HGCD_THRESHOLD -#define HGCD_THRESHOLD hgcd_threshold -extern mp_size_t hgcd_threshold; - -#undef HGCD_APPR_THRESHOLD -#define HGCD_APPR_THRESHOLD hgcd_appr_threshold -extern mp_size_t hgcd_appr_threshold; - -#undef HGCD_REDUCE_THRESHOLD -#define HGCD_REDUCE_THRESHOLD hgcd_reduce_threshold -extern mp_size_t hgcd_reduce_threshold; - -#undef GCD_DC_THRESHOLD -#define GCD_DC_THRESHOLD gcd_dc_threshold -extern mp_size_t gcd_dc_threshold; - -#undef GCDEXT_DC_THRESHOLD -#define GCDEXT_DC_THRESHOLD gcdext_dc_threshold -extern mp_size_t gcdext_dc_threshold; - -#undef DIV_QR_1N_PI1_METHOD -#define DIV_QR_1N_PI1_METHOD div_qr_1n_pi1_method -extern int div_qr_1n_pi1_method; - -#undef DIV_QR_1_NORM_THRESHOLD -#define DIV_QR_1_NORM_THRESHOLD div_qr_1_norm_threshold -extern mp_size_t div_qr_1_norm_threshold; - -#undef DIV_QR_1_UNNORM_THRESHOLD -#define DIV_QR_1_UNNORM_THRESHOLD div_qr_1_unnorm_threshold -extern mp_size_t div_qr_1_unnorm_threshold; - -#undef DIVREM_1_NORM_THRESHOLD -#define DIVREM_1_NORM_THRESHOLD divrem_1_norm_threshold -extern mp_size_t divrem_1_norm_threshold; - -#undef DIVREM_1_UNNORM_THRESHOLD -#define DIVREM_1_UNNORM_THRESHOLD divrem_1_unnorm_threshold -extern mp_size_t divrem_1_unnorm_threshold; - -#undef MOD_1_NORM_THRESHOLD -#define MOD_1_NORM_THRESHOLD mod_1_norm_threshold -extern mp_size_t mod_1_norm_threshold; - -#undef MOD_1_UNNORM_THRESHOLD -#define MOD_1_UNNORM_THRESHOLD mod_1_unnorm_threshold -extern mp_size_t mod_1_unnorm_threshold; - -#undef MOD_1_1P_METHOD -#define MOD_1_1P_METHOD mod_1_1p_method -extern int mod_1_1p_method; - -#undef MOD_1N_TO_MOD_1_1_THRESHOLD -#define MOD_1N_TO_MOD_1_1_THRESHOLD mod_1n_to_mod_1_1_threshold -extern mp_size_t mod_1n_to_mod_1_1_threshold; - -#undef MOD_1U_TO_MOD_1_1_THRESHOLD -#define MOD_1U_TO_MOD_1_1_THRESHOLD mod_1u_to_mod_1_1_threshold -extern mp_size_t mod_1u_to_mod_1_1_threshold; - -#undef MOD_1_1_TO_MOD_1_2_THRESHOLD -#define MOD_1_1_TO_MOD_1_2_THRESHOLD mod_1_1_to_mod_1_2_threshold -extern mp_size_t mod_1_1_to_mod_1_2_threshold; - -#undef MOD_1_2_TO_MOD_1_4_THRESHOLD -#define MOD_1_2_TO_MOD_1_4_THRESHOLD mod_1_2_to_mod_1_4_threshold -extern mp_size_t mod_1_2_to_mod_1_4_threshold; - -#undef PREINV_MOD_1_TO_MOD_1_THRESHOLD -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD preinv_mod_1_to_mod_1_threshold -extern mp_size_t preinv_mod_1_to_mod_1_threshold; - -#if ! UDIV_PREINV_ALWAYS -#undef DIVREM_2_THRESHOLD -#define DIVREM_2_THRESHOLD divrem_2_threshold -extern mp_size_t divrem_2_threshold; -#endif - -#undef MULMOD_BNM1_THRESHOLD -#define MULMOD_BNM1_THRESHOLD mulmod_bnm1_threshold -extern mp_size_t mulmod_bnm1_threshold; - -#undef SQRMOD_BNM1_THRESHOLD -#define SQRMOD_BNM1_THRESHOLD sqrmod_bnm1_threshold -extern mp_size_t sqrmod_bnm1_threshold; - -#undef GET_STR_DC_THRESHOLD -#define GET_STR_DC_THRESHOLD get_str_dc_threshold -extern mp_size_t get_str_dc_threshold; - -#undef GET_STR_PRECOMPUTE_THRESHOLD -#define GET_STR_PRECOMPUTE_THRESHOLD get_str_precompute_threshold -extern mp_size_t get_str_precompute_threshold; - -#undef SET_STR_DC_THRESHOLD -#define SET_STR_DC_THRESHOLD set_str_dc_threshold -extern mp_size_t set_str_dc_threshold; - -#undef SET_STR_PRECOMPUTE_THRESHOLD -#define SET_STR_PRECOMPUTE_THRESHOLD set_str_precompute_threshold -extern mp_size_t set_str_precompute_threshold; - -#undef FAC_ODD_THRESHOLD -#define FAC_ODD_THRESHOLD fac_odd_threshold -extern mp_size_t fac_odd_threshold; - -#undef FAC_DSC_THRESHOLD -#define FAC_DSC_THRESHOLD fac_dsc_threshold -extern mp_size_t fac_dsc_threshold; - -#undef FFT_TABLE_ATTRS -#define FFT_TABLE_ATTRS -extern mp_size_t mpn_fft_table[2][MPN_FFT_TABLE_SIZE]; -#define FFT_TABLE3_SIZE 2000 /* generous space for tuning */ -extern struct fft_table_nk mpn_fft_table3[2][FFT_TABLE3_SIZE]; - -/* Sizes the tune program tests up to, used in a couple of recompilations. */ -#undef MUL_TOOM22_THRESHOLD_LIMIT -#undef MUL_TOOM33_THRESHOLD_LIMIT -#undef MULLO_BASECASE_THRESHOLD_LIMIT -#undef SQRLO_BASECASE_THRESHOLD_LIMIT -#undef SQRLO_DC_THRESHOLD_LIMIT -#undef SQR_TOOM3_THRESHOLD_LIMIT -#define SQR_TOOM2_MAX_GENERIC 200 -#define MUL_TOOM22_THRESHOLD_LIMIT 700 -#define MUL_TOOM33_THRESHOLD_LIMIT 700 -#define SQR_TOOM3_THRESHOLD_LIMIT 400 -#define MUL_TOOM44_THRESHOLD_LIMIT 1000 -#define SQR_TOOM4_THRESHOLD_LIMIT 1000 -#define MUL_TOOM6H_THRESHOLD_LIMIT 1100 -#define SQR_TOOM6_THRESHOLD_LIMIT 1100 -#define MUL_TOOM8H_THRESHOLD_LIMIT 1200 -#define SQR_TOOM8_THRESHOLD_LIMIT 1200 -#define MULLO_BASECASE_THRESHOLD_LIMIT 200 -#define SQRLO_BASECASE_THRESHOLD_LIMIT 200 -#define SQRLO_DC_THRESHOLD_LIMIT 400 -#define GET_STR_THRESHOLD_LIMIT 150 -#define FAC_DSC_THRESHOLD_LIMIT 2048 - -#endif /* TUNE_PROGRAM_BUILD */ - -#if defined (__cplusplus) -} -#endif - -/* FIXME: Make these itch functions less conservative. Also consider making - them dependent on just 'an', and compute the allocation directly from 'an' - instead of via n. */ - -/* toom22/toom2: Scratch need is 2*(an + k), k is the recursion depth. - k is ths smallest k such that - ceil(an/2^k) < MUL_TOOM22_THRESHOLD. - which implies that - k = bitsize of floor ((an-1)/(MUL_TOOM22_THRESHOLD-1)) - = 1 + floor (log_2 (floor ((an-1)/(MUL_TOOM22_THRESHOLD-1)))) -*/ -#define mpn_toom22_mul_itch(an, bn) \ - (2 * ((an) + GMP_NUMB_BITS)) -#define mpn_toom2_sqr_itch(an) \ - (2 * ((an) + GMP_NUMB_BITS)) - -/* toom33/toom3: Scratch need is 5an/2 + 10k, k is the recursion depth. - We use 3an + C, so that we can use a smaller constant. - */ -#define mpn_toom33_mul_itch(an, bn) \ - (3 * (an) + GMP_NUMB_BITS) -#define mpn_toom3_sqr_itch(an) \ - (3 * (an) + GMP_NUMB_BITS) - -/* toom33/toom3: Scratch need is 8an/3 + 13k, k is the recursion depth. - We use 3an + C, so that we can use a smaller constant. - */ -#define mpn_toom44_mul_itch(an, bn) \ - (3 * (an) + GMP_NUMB_BITS) -#define mpn_toom4_sqr_itch(an) \ - (3 * (an) + GMP_NUMB_BITS) - -#define mpn_toom6_sqr_itch(n) \ - (((n) - SQR_TOOM6_THRESHOLD)*2 + \ - MAX(SQR_TOOM6_THRESHOLD*2 + GMP_NUMB_BITS*6, \ - mpn_toom4_sqr_itch(SQR_TOOM6_THRESHOLD))) - -#define MUL_TOOM6H_MIN \ - ((MUL_TOOM6H_THRESHOLD > MUL_TOOM44_THRESHOLD) ? \ - MUL_TOOM6H_THRESHOLD : MUL_TOOM44_THRESHOLD) -#define mpn_toom6_mul_n_itch(n) \ - (((n) - MUL_TOOM6H_MIN)*2 + \ - MAX(MUL_TOOM6H_MIN*2 + GMP_NUMB_BITS*6, \ - mpn_toom44_mul_itch(MUL_TOOM6H_MIN,MUL_TOOM6H_MIN))) - -static inline mp_size_t -mpn_toom6h_mul_itch (mp_size_t an, mp_size_t bn) { - mp_size_t estimatedN; - estimatedN = (an + bn) / (size_t) 10 + 1; - return mpn_toom6_mul_n_itch (estimatedN * 6); -} - -#define mpn_toom8_sqr_itch(n) \ - ((((n)*15)>>3) - ((SQR_TOOM8_THRESHOLD*15)>>3) + \ - MAX(((SQR_TOOM8_THRESHOLD*15)>>3) + GMP_NUMB_BITS*6, \ - mpn_toom6_sqr_itch(SQR_TOOM8_THRESHOLD))) - -#define MUL_TOOM8H_MIN \ - ((MUL_TOOM8H_THRESHOLD > MUL_TOOM6H_MIN) ? \ - MUL_TOOM8H_THRESHOLD : MUL_TOOM6H_MIN) -#define mpn_toom8_mul_n_itch(n) \ - ((((n)*15)>>3) - ((MUL_TOOM8H_MIN*15)>>3) + \ - MAX(((MUL_TOOM8H_MIN*15)>>3) + GMP_NUMB_BITS*6, \ - mpn_toom6_mul_n_itch(MUL_TOOM8H_MIN))) - -static inline mp_size_t -mpn_toom8h_mul_itch (mp_size_t an, mp_size_t bn) { - mp_size_t estimatedN; - estimatedN = (an + bn) / (size_t) 14 + 1; - return mpn_toom8_mul_n_itch (estimatedN * 8); -} - -static inline mp_size_t -mpn_toom32_mul_itch (mp_size_t an, mp_size_t bn) -{ - mp_size_t n = 1 + (2 * an >= 3 * bn ? (an - 1) / (size_t) 3 : (bn - 1) >> 1); - mp_size_t itch = 2 * n + 1; - - return itch; -} - -static inline mp_size_t -mpn_toom42_mul_itch (mp_size_t an, mp_size_t bn) -{ - mp_size_t n = an >= 2 * bn ? (an + 3) >> 2 : (bn + 1) >> 1; - return 6 * n + 3; -} - -static inline mp_size_t -mpn_toom43_mul_itch (mp_size_t an, mp_size_t bn) -{ - mp_size_t n = 1 + (3 * an >= 4 * bn ? (an - 1) >> 2 : (bn - 1) / (size_t) 3); - - return 6*n + 4; -} - -static inline mp_size_t -mpn_toom52_mul_itch (mp_size_t an, mp_size_t bn) -{ - mp_size_t n = 1 + (2 * an >= 5 * bn ? (an - 1) / (size_t) 5 : (bn - 1) >> 1); - return 6*n + 4; -} - -static inline mp_size_t -mpn_toom53_mul_itch (mp_size_t an, mp_size_t bn) -{ - mp_size_t n = 1 + (3 * an >= 5 * bn ? (an - 1) / (size_t) 5 : (bn - 1) / (size_t) 3); - return 10 * n + 10; -} - -static inline mp_size_t -mpn_toom62_mul_itch (mp_size_t an, mp_size_t bn) -{ - mp_size_t n = 1 + (an >= 3 * bn ? (an - 1) / (size_t) 6 : (bn - 1) >> 1); - return 10 * n + 10; -} - -static inline mp_size_t -mpn_toom63_mul_itch (mp_size_t an, mp_size_t bn) -{ - mp_size_t n = 1 + (an >= 2 * bn ? (an - 1) / (size_t) 6 : (bn - 1) / (size_t) 3); - return 9 * n + 3; -} - -static inline mp_size_t -mpn_toom54_mul_itch (mp_size_t an, mp_size_t bn) -{ - mp_size_t n = 1 + (4 * an >= 5 * bn ? (an - 1) / (size_t) 5 : (bn - 1) / (size_t) 4); - return 9 * n + 3; -} - -/* let S(n) = space required for input size n, - then S(n) = 3 floor(n/2) + 1 + S(floor(n/2)). */ -#define mpn_toom42_mulmid_itch(n) \ - (3 * (n) + GMP_NUMB_BITS) - -#if 0 -#define mpn_fft_mul mpn_mul_fft_full -#else -#define mpn_fft_mul mpn_nussbaumer_mul -#endif - -#ifdef __cplusplus - -/* A little helper for a null-terminated __gmp_allocate_func string. - The destructor ensures it's freed even if an exception is thrown. - The len field is needed by the destructor, and can be used by anyone else - to avoid a second strlen pass over the data. - - Since our input is a C string, using strlen is correct. Perhaps it'd be - more C++-ish style to use std::char_traits<char>::length, but char_traits - isn't available in gcc 2.95.4. */ - -class gmp_allocated_string { - public: - char *str; - size_t len; - gmp_allocated_string(char *arg) - { - str = arg; - len = std::strlen (str); - } - ~gmp_allocated_string() - { - (*__gmp_free_func) (str, len+1); - } -}; - -std::istream &__gmpz_operator_in_nowhite (std::istream &, mpz_ptr, char); -int __gmp_istream_set_base (std::istream &, char &, bool &, bool &); -void __gmp_istream_set_digits (std::string &, std::istream &, char &, bool &, int); -void __gmp_doprnt_params_from_ios (struct doprnt_params_t *, std::ios &); -std::ostream& __gmp_doprnt_integer_ostream (std::ostream &, struct doprnt_params_t *, char *); -extern const struct doprnt_funs_t __gmp_asprintf_funs_noformat; - -#endif /* __cplusplus */ - -#endif /* __GMP_IMPL_H__ */ diff --git a/src/plugins/e-acsl/contrib/libgmp/gmpxx.h b/src/plugins/e-acsl/contrib/libgmp/gmpxx.h deleted file mode 100644 index 58e87005442b2c8de5bc015ff18862c0da33796d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/gmpxx.h +++ /dev/null @@ -1,3434 +0,0 @@ -/* gmpxx.h -- C++ class wrapper for GMP types. -*- C++ -*- - -Copyright 2001-2003, 2006, 2008, 2011, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#ifndef __GMP_PLUSPLUS__ -#define __GMP_PLUSPLUS__ - -#include <iosfwd> - -#include <cstring> /* for strlen */ -#include <limits> /* numeric_limits */ -#include <utility> -#include <algorithm> /* swap */ -#include <string> -#include <stdexcept> -#include <cfloat> -#include <gmp.h> - -// wrapper for gcc's __builtin_constant_p -// __builtin_constant_p has been in gcc since forever, -// but g++-3.4 miscompiles it. -#if __GMP_GNUC_PREREQ(4, 2) -#define __GMPXX_CONSTANT(X) __builtin_constant_p(X) -#else -#define __GMPXX_CONSTANT(X) false -#endif -#define __GMPXX_CONSTANT_TRUE(X) (__GMPXX_CONSTANT(X) && (X)) - -// Use C++11 features -#ifndef __GMPXX_USE_CXX11 -#if __cplusplus >= 201103L -#define __GMPXX_USE_CXX11 1 -#else -#define __GMPXX_USE_CXX11 0 -#endif -#endif - -#if __GMPXX_USE_CXX11 -#define __GMPXX_NOEXCEPT noexcept -#include <type_traits> // for common_type -#else -#define __GMPXX_NOEXCEPT -#endif - -// Max allocations for plain types when converted to GMP types -#if GMP_NAIL_BITS != 0 && ! defined _LONG_LONG_LIMB -#define __GMPZ_ULI_LIMBS 2 -#else -#define __GMPZ_ULI_LIMBS 1 -#endif - -#define __GMPXX_BITS_TO_LIMBS(n) (((n) + (GMP_NUMB_BITS - 1)) / GMP_NUMB_BITS) -#define __GMPZ_DBL_LIMBS __GMPXX_BITS_TO_LIMBS(DBL_MAX_EXP)+1 -#define __GMPQ_NUM_DBL_LIMBS __GMPZ_DBL_LIMBS -#define __GMPQ_DEN_DBL_LIMBS __GMPXX_BITS_TO_LIMBS(DBL_MANT_DIG+1-DBL_MIN_EXP)+1 -// The final +1s are a security margin. The current implementation of -// mpq_set_d seems to need it for the denominator. - -inline void __mpz_set_ui_safe(mpz_ptr p, unsigned long l) -{ - p->_mp_size = (l != 0); - p->_mp_d[0] = l & GMP_NUMB_MASK; -#if __GMPZ_ULI_LIMBS > 1 - l >>= GMP_NUMB_BITS; - p->_mp_d[1] = l; - p->_mp_size += (l != 0); -#endif -} - -inline void __mpz_set_si_safe(mpz_ptr p, long l) -{ - if(l < 0) - { - __mpz_set_ui_safe(p, -static_cast<unsigned long>(l)); - mpz_neg(p, p); - } - else - __mpz_set_ui_safe(p, l); - // Note: we know the high bit of l is 0 so we could do slightly better -} - -// Fake temporary variables -#define __GMPXX_TMPZ_UI \ - mpz_t temp; \ - mp_limb_t limbs[__GMPZ_ULI_LIMBS]; \ - temp->_mp_d = limbs; \ - __mpz_set_ui_safe (temp, l) -#define __GMPXX_TMPZ_SI \ - mpz_t temp; \ - mp_limb_t limbs[__GMPZ_ULI_LIMBS]; \ - temp->_mp_d = limbs; \ - __mpz_set_si_safe (temp, l) -#define __GMPXX_TMPZ_D \ - mpz_t temp; \ - mp_limb_t limbs[__GMPZ_DBL_LIMBS]; \ - temp->_mp_d = limbs; \ - temp->_mp_alloc = __GMPZ_DBL_LIMBS; \ - mpz_set_d (temp, d) - -#define __GMPXX_TMPQ_UI \ - mpq_t temp; \ - mp_limb_t limbs[__GMPZ_ULI_LIMBS+1]; \ - mpq_numref(temp)->_mp_d = limbs; \ - __mpz_set_ui_safe (mpq_numref(temp), l); \ - mpq_denref(temp)->_mp_d = limbs + __GMPZ_ULI_LIMBS; \ - mpq_denref(temp)->_mp_size = 1; \ - mpq_denref(temp)->_mp_d[0] = 1 -#define __GMPXX_TMPQ_SI \ - mpq_t temp; \ - mp_limb_t limbs[__GMPZ_ULI_LIMBS+1]; \ - mpq_numref(temp)->_mp_d = limbs; \ - __mpz_set_si_safe (mpq_numref(temp), l); \ - mpq_denref(temp)->_mp_d = limbs + __GMPZ_ULI_LIMBS; \ - mpq_denref(temp)->_mp_size = 1; \ - mpq_denref(temp)->_mp_d[0] = 1 -#define __GMPXX_TMPQ_D \ - mpq_t temp; \ - mp_limb_t limbs[__GMPQ_NUM_DBL_LIMBS + __GMPQ_DEN_DBL_LIMBS]; \ - mpq_numref(temp)->_mp_d = limbs; \ - mpq_numref(temp)->_mp_alloc = __GMPQ_NUM_DBL_LIMBS; \ - mpq_denref(temp)->_mp_d = limbs + __GMPQ_NUM_DBL_LIMBS; \ - mpq_denref(temp)->_mp_alloc = __GMPQ_DEN_DBL_LIMBS; \ - mpq_set_d (temp, d) - -inline unsigned long __gmpxx_abs_ui (signed long l) -{ - return l >= 0 ? static_cast<unsigned long>(l) - : -static_cast<unsigned long>(l); -} - -/**************** Function objects ****************/ -/* Any evaluation of a __gmp_expr ends up calling one of these functions - all intermediate functions being inline, the evaluation should optimize - to a direct call to the relevant function, thus yielding no overhead - over the C interface. */ - -struct __gmp_unary_plus -{ - static void eval(mpz_ptr z, mpz_srcptr w) { mpz_set(z, w); } - static void eval(mpq_ptr q, mpq_srcptr r) { mpq_set(q, r); } - static void eval(mpf_ptr f, mpf_srcptr g) { mpf_set(f, g); } -}; - -struct __gmp_unary_minus -{ - static void eval(mpz_ptr z, mpz_srcptr w) { mpz_neg(z, w); } - static void eval(mpq_ptr q, mpq_srcptr r) { mpq_neg(q, r); } - static void eval(mpf_ptr f, mpf_srcptr g) { mpf_neg(f, g); } -}; - -struct __gmp_unary_com -{ - static void eval(mpz_ptr z, mpz_srcptr w) { mpz_com(z, w); } -}; - -struct __gmp_binary_plus -{ - static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) - { mpz_add(z, w, v); } - - static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) - { - // Ideally, those checks should happen earlier so that the tree - // generated for a+0+b would just be sum(a,b). - if (__GMPXX_CONSTANT(l) && l == 0) - { - if (z != w) mpz_set(z, w); - } - else - mpz_add_ui(z, w, l); - } - static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) - { eval(z, w, l); } - static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) - { - if (l >= 0) - eval(z, w, static_cast<unsigned long>(l)); - else - mpz_sub_ui(z, w, -static_cast<unsigned long>(l)); - } - static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) - { eval(z, w, l); } - static void eval(mpz_ptr z, mpz_srcptr w, double d) - { __GMPXX_TMPZ_D; mpz_add (z, w, temp); } - static void eval(mpz_ptr z, double d, mpz_srcptr w) - { eval(z, w, d); } - - static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s) - { mpq_add(q, r, s); } - - static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l) - { - if (__GMPXX_CONSTANT(l) && l == 0) - { - if (q != r) mpq_set(q, r); - } - else - { - if (q == r) - mpz_addmul_ui(mpq_numref(q), mpq_denref(q), l); - else - { - mpz_mul_ui(mpq_numref(q), mpq_denref(r), l); - mpz_add(mpq_numref(q), mpq_numref(q), mpq_numref(r)); - mpz_set(mpq_denref(q), mpq_denref(r)); - } - } - } - static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r) - { eval(q, r, l); } - static inline void eval(mpq_ptr q, mpq_srcptr r, signed long int l); - // defined after __gmp_binary_minus - static void eval(mpq_ptr q, signed long int l, mpq_srcptr r) - { eval(q, r, l); } - static void eval(mpq_ptr q, mpq_srcptr r, double d) - { __GMPXX_TMPQ_D; mpq_add (q, r, temp); } - static void eval(mpq_ptr q, double d, mpq_srcptr r) - { eval(q, r, d); } - - static void eval(mpq_ptr q, mpq_srcptr r, mpz_srcptr z) - { - if (q == r) - mpz_addmul(mpq_numref(q), mpq_denref(q), z); - else - { - mpz_mul(mpq_numref(q), mpq_denref(r), z); - mpz_add(mpq_numref(q), mpq_numref(q), mpq_numref(r)); - mpz_set(mpq_denref(q), mpq_denref(r)); - } - } - static void eval(mpq_ptr q, mpz_srcptr z, mpq_srcptr r) - { eval(q, r, z); } - - static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) - { mpf_add(f, g, h); } - - static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) - { mpf_add_ui(f, g, l); } - static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) - { mpf_add_ui(f, g, l); } - static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) - { - if (l >= 0) - mpf_add_ui(f, g, l); - else - mpf_sub_ui(f, g, -static_cast<unsigned long>(l)); - } - static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) - { eval(f, g, l); } - static void eval(mpf_ptr f, mpf_srcptr g, double d) - { - mpf_t temp; - mpf_init2(temp, 8*sizeof(double)); - mpf_set_d(temp, d); - mpf_add(f, g, temp); - mpf_clear(temp); - } - static void eval(mpf_ptr f, double d, mpf_srcptr g) - { eval(f, g, d); } -}; - -struct __gmp_binary_minus -{ - static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) - { mpz_sub(z, w, v); } - - static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) - { - if (__GMPXX_CONSTANT(l) && l == 0) - { - if (z != w) mpz_set(z, w); - } - else - mpz_sub_ui(z, w, l); - } - static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) - { - if (__GMPXX_CONSTANT(l) && l == 0) - { - mpz_neg(z, w); - } - else - mpz_ui_sub(z, l, w); - } - static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) - { - if (l >= 0) - eval(z, w, static_cast<unsigned long>(l)); - else - mpz_add_ui(z, w, -static_cast<unsigned long>(l)); - } - static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) - { - if (l >= 0) - eval(z, static_cast<unsigned long>(l), w); - else - { - mpz_add_ui(z, w, -static_cast<unsigned long>(l)); - mpz_neg(z, z); - } - } - static void eval(mpz_ptr z, mpz_srcptr w, double d) - { __GMPXX_TMPZ_D; mpz_sub (z, w, temp); } - static void eval(mpz_ptr z, double d, mpz_srcptr w) - { __GMPXX_TMPZ_D; mpz_sub (z, temp, w); } - - static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s) - { mpq_sub(q, r, s); } - - static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l) - { - if (__GMPXX_CONSTANT(l) && l == 0) - { - if (q != r) mpq_set(q, r); - } - else - { - if (q == r) - mpz_submul_ui(mpq_numref(q), mpq_denref(q), l); - else - { - mpz_mul_ui(mpq_numref(q), mpq_denref(r), l); - mpz_sub(mpq_numref(q), mpq_numref(r), mpq_numref(q)); - mpz_set(mpq_denref(q), mpq_denref(r)); - } - } - } - static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r) - { eval(q, r, l); mpq_neg(q, q); } - static void eval(mpq_ptr q, mpq_srcptr r, signed long int l) - { - if (l >= 0) - eval(q, r, static_cast<unsigned long>(l)); - else - __gmp_binary_plus::eval(q, r, -static_cast<unsigned long>(l)); - } - static void eval(mpq_ptr q, signed long int l, mpq_srcptr r) - { eval(q, r, l); mpq_neg(q, q); } - static void eval(mpq_ptr q, mpq_srcptr r, double d) - { __GMPXX_TMPQ_D; mpq_sub (q, r, temp); } - static void eval(mpq_ptr q, double d, mpq_srcptr r) - { __GMPXX_TMPQ_D; mpq_sub (q, temp, r); } - - static void eval(mpq_ptr q, mpq_srcptr r, mpz_srcptr z) - { - if (q == r) - mpz_submul(mpq_numref(q), mpq_denref(q), z); - else - { - mpz_mul(mpq_numref(q), mpq_denref(r), z); - mpz_sub(mpq_numref(q), mpq_numref(r), mpq_numref(q)); - mpz_set(mpq_denref(q), mpq_denref(r)); - } - } - static void eval(mpq_ptr q, mpz_srcptr z, mpq_srcptr r) - { eval(q, r, z); mpq_neg(q, q); } - - static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) - { mpf_sub(f, g, h); } - - static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) - { mpf_sub_ui(f, g, l); } - static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) - { mpf_ui_sub(f, l, g); } - static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) - { - if (l >= 0) - mpf_sub_ui(f, g, l); - else - mpf_add_ui(f, g, -static_cast<unsigned long>(l)); - } - static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) - { - if (l >= 0) - mpf_sub_ui(f, g, l); - else - mpf_add_ui(f, g, -static_cast<unsigned long>(l)); - mpf_neg(f, f); - } - static void eval(mpf_ptr f, mpf_srcptr g, double d) - { - mpf_t temp; - mpf_init2(temp, 8*sizeof(double)); - mpf_set_d(temp, d); - mpf_sub(f, g, temp); - mpf_clear(temp); - } - static void eval(mpf_ptr f, double d, mpf_srcptr g) - { - mpf_t temp; - mpf_init2(temp, 8*sizeof(double)); - mpf_set_d(temp, d); - mpf_sub(f, temp, g); - mpf_clear(temp); - } -}; - -// defined here so it can reference __gmp_binary_minus -inline void -__gmp_binary_plus::eval(mpq_ptr q, mpq_srcptr r, signed long int l) -{ - if (l >= 0) - eval(q, r, static_cast<unsigned long>(l)); - else - __gmp_binary_minus::eval(q, r, -static_cast<unsigned long>(l)); -} - -struct __gmp_binary_lshift -{ - static void eval(mpz_ptr z, mpz_srcptr w, mp_bitcnt_t l) - { - if (__GMPXX_CONSTANT(l) && (l == 0)) - { - if (z != w) mpz_set(z, w); - } - else - mpz_mul_2exp(z, w, l); - } - static void eval(mpq_ptr q, mpq_srcptr r, mp_bitcnt_t l) - { - if (__GMPXX_CONSTANT(l) && (l == 0)) - { - if (q != r) mpq_set(q, r); - } - else - mpq_mul_2exp(q, r, l); - } - static void eval(mpf_ptr f, mpf_srcptr g, mp_bitcnt_t l) - { mpf_mul_2exp(f, g, l); } -}; - -struct __gmp_binary_rshift -{ - static void eval(mpz_ptr z, mpz_srcptr w, mp_bitcnt_t l) - { - if (__GMPXX_CONSTANT(l) && (l == 0)) - { - if (z != w) mpz_set(z, w); - } - else - mpz_fdiv_q_2exp(z, w, l); - } - static void eval(mpq_ptr q, mpq_srcptr r, mp_bitcnt_t l) - { - if (__GMPXX_CONSTANT(l) && (l == 0)) - { - if (q != r) mpq_set(q, r); - } - else - mpq_div_2exp(q, r, l); - } - static void eval(mpf_ptr f, mpf_srcptr g, mp_bitcnt_t l) - { mpf_div_2exp(f, g, l); } -}; - -struct __gmp_binary_multiplies -{ - static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) - { mpz_mul(z, w, v); } - - static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) - { -// gcc-3.3 doesn't have __builtin_ctzl. Don't bother optimizing for old gcc. -#if __GMP_GNUC_PREREQ(3, 4) - if (__GMPXX_CONSTANT(l) && (l & (l-1)) == 0) - { - if (l == 0) - { - z->_mp_size = 0; - } - else - { - __gmp_binary_lshift::eval(z, w, __builtin_ctzl(l)); - } - } - else -#endif - mpz_mul_ui(z, w, l); - } - static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) - { eval(z, w, l); } - static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) - { - if (__GMPXX_CONSTANT_TRUE(l >= 0)) - eval(z, w, static_cast<unsigned long>(l)); - else if (__GMPXX_CONSTANT_TRUE(l <= 0)) - { - eval(z, w, -static_cast<unsigned long>(l)); - mpz_neg(z, z); - } - else - mpz_mul_si (z, w, l); - } - static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) - { eval(z, w, l); } - static void eval(mpz_ptr z, mpz_srcptr w, double d) - { __GMPXX_TMPZ_D; mpz_mul (z, w, temp); } - static void eval(mpz_ptr z, double d, mpz_srcptr w) - { eval(z, w, d); } - - static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s) - { mpq_mul(q, r, s); } - - static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l) - { -#if __GMP_GNUC_PREREQ(3, 4) - if (__GMPXX_CONSTANT(l) && (l & (l-1)) == 0) - { - if (l == 0) - { - mpq_set_ui(q, 0, 1); - } - else - { - __gmp_binary_lshift::eval(q, r, __builtin_ctzl(l)); - } - } - else -#endif - { - __GMPXX_TMPQ_UI; - mpq_mul (q, r, temp); - } - } - static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r) - { eval(q, r, l); } - static void eval(mpq_ptr q, mpq_srcptr r, signed long int l) - { - if (__GMPXX_CONSTANT_TRUE(l >= 0)) - eval(q, r, static_cast<unsigned long>(l)); - else if (__GMPXX_CONSTANT_TRUE(l <= 0)) - { - eval(q, r, -static_cast<unsigned long>(l)); - mpq_neg(q, q); - } - else - { - __GMPXX_TMPQ_SI; - mpq_mul (q, r, temp); - } - } - static void eval(mpq_ptr q, signed long int l, mpq_srcptr r) - { eval(q, r, l); } - static void eval(mpq_ptr q, mpq_srcptr r, double d) - { __GMPXX_TMPQ_D; mpq_mul (q, r, temp); } - static void eval(mpq_ptr q, double d, mpq_srcptr r) - { eval(q, r, d); } - - static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) - { mpf_mul(f, g, h); } - - static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) - { mpf_mul_ui(f, g, l); } - static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) - { mpf_mul_ui(f, g, l); } - static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) - { - if (l >= 0) - mpf_mul_ui(f, g, l); - else - { - mpf_mul_ui(f, g, -static_cast<unsigned long>(l)); - mpf_neg(f, f); - } - } - static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) - { eval(f, g, l); } - static void eval(mpf_ptr f, mpf_srcptr g, double d) - { - mpf_t temp; - mpf_init2(temp, 8*sizeof(double)); - mpf_set_d(temp, d); - mpf_mul(f, g, temp); - mpf_clear(temp); - } - static void eval(mpf_ptr f, double d, mpf_srcptr g) - { eval(f, g, d); } -}; - -struct __gmp_binary_divides -{ - static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) - { mpz_tdiv_q(z, w, v); } - - static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) - { -#if __GMP_GNUC_PREREQ(3, 4) - // Don't optimize division by 0... - if (__GMPXX_CONSTANT(l) && (l & (l-1)) == 0 && l != 0) - { - if (l == 1) - { - if (z != w) mpz_set(z, w); - } - else - mpz_tdiv_q_2exp(z, w, __builtin_ctzl(l)); - // warning: do not use rshift (fdiv) - } - else -#endif - mpz_tdiv_q_ui(z, w, l); - } - static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) - { - if (mpz_sgn(w) >= 0) - { - if (mpz_fits_ulong_p(w)) - mpz_set_ui(z, l / mpz_get_ui(w)); - else - mpz_set_ui(z, 0); - } - else - { - mpz_neg(z, w); - if (mpz_fits_ulong_p(z)) - { - mpz_set_ui(z, l / mpz_get_ui(z)); - mpz_neg(z, z); - } - else - mpz_set_ui(z, 0); - } - } - static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) - { - if (l >= 0) - eval(z, w, static_cast<unsigned long>(l)); - else - { - eval(z, w, -static_cast<unsigned long>(l)); - mpz_neg(z, z); - } - } - static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) - { - if (mpz_fits_slong_p(w)) - mpz_set_si(z, l / mpz_get_si(w)); - else - { - /* if w is bigger than a long then the quotient must be zero, unless - l==LONG_MIN and w==-LONG_MIN in which case the quotient is -1 */ - mpz_set_si (z, (mpz_cmpabs_ui (w, __gmpxx_abs_ui(l)) == 0 ? -1 : 0)); - } - } - static void eval(mpz_ptr z, mpz_srcptr w, double d) - { __GMPXX_TMPZ_D; mpz_tdiv_q (z, w, temp); } - static void eval(mpz_ptr z, double d, mpz_srcptr w) - { __GMPXX_TMPZ_D; mpz_tdiv_q (z, temp, w); } - - static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s) - { mpq_div(q, r, s); } - - static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l) - { -#if __GMP_GNUC_PREREQ(3, 4) - if (__GMPXX_CONSTANT(l) && (l & (l-1)) == 0 && l != 0) - __gmp_binary_rshift::eval(q, r, __builtin_ctzl(l)); - else -#endif - { - __GMPXX_TMPQ_UI; - mpq_div (q, r, temp); - } - } - static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r) - { __GMPXX_TMPQ_UI; mpq_div (q, temp, r); } - static void eval(mpq_ptr q, mpq_srcptr r, signed long int l) - { - if (__GMPXX_CONSTANT_TRUE(l >= 0)) - eval(q, r, static_cast<unsigned long>(l)); - else if (__GMPXX_CONSTANT_TRUE(l <= 0)) - { - eval(q, r, -static_cast<unsigned long>(l)); - mpq_neg(q, q); - } - else - { - __GMPXX_TMPQ_SI; - mpq_div (q, r, temp); - } - } - static void eval(mpq_ptr q, signed long int l, mpq_srcptr r) - { __GMPXX_TMPQ_SI; mpq_div (q, temp, r); } - static void eval(mpq_ptr q, mpq_srcptr r, double d) - { __GMPXX_TMPQ_D; mpq_div (q, r, temp); } - static void eval(mpq_ptr q, double d, mpq_srcptr r) - { __GMPXX_TMPQ_D; mpq_div (q, temp, r); } - - static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) - { mpf_div(f, g, h); } - - static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) - { mpf_div_ui(f, g, l); } - static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) - { mpf_ui_div(f, l, g); } - static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) - { - if (l >= 0) - mpf_div_ui(f, g, l); - else - { - mpf_div_ui(f, g, -static_cast<unsigned long>(l)); - mpf_neg(f, f); - } - } - static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) - { - if (l >= 0) - mpf_ui_div(f, l, g); - else - { - mpf_ui_div(f, -static_cast<unsigned long>(l), g); - mpf_neg(f, f); - } - } - static void eval(mpf_ptr f, mpf_srcptr g, double d) - { - mpf_t temp; - mpf_init2(temp, 8*sizeof(double)); - mpf_set_d(temp, d); - mpf_div(f, g, temp); - mpf_clear(temp); - } - static void eval(mpf_ptr f, double d, mpf_srcptr g) - { - mpf_t temp; - mpf_init2(temp, 8*sizeof(double)); - mpf_set_d(temp, d); - mpf_div(f, temp, g); - mpf_clear(temp); - } -}; - -struct __gmp_binary_modulus -{ - static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) - { mpz_tdiv_r(z, w, v); } - - static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) - { mpz_tdiv_r_ui(z, w, l); } - static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) - { - if (mpz_sgn(w) >= 0) - { - if (mpz_fits_ulong_p(w)) - mpz_set_ui(z, l % mpz_get_ui(w)); - else - mpz_set_ui(z, l); - } - else - { - mpz_neg(z, w); - if (mpz_fits_ulong_p(z)) - mpz_set_ui(z, l % mpz_get_ui(z)); - else - mpz_set_ui(z, l); - } - } - static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) - { - mpz_tdiv_r_ui (z, w, __gmpxx_abs_ui(l)); - } - static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) - { - if (mpz_fits_slong_p(w)) - mpz_set_si(z, l % mpz_get_si(w)); - else - { - /* if w is bigger than a long then the remainder is l unchanged, - unless l==LONG_MIN and w==-LONG_MIN in which case it's 0 */ - mpz_set_si (z, mpz_cmpabs_ui (w, __gmpxx_abs_ui(l)) == 0 ? 0 : l); - } - } - static void eval(mpz_ptr z, mpz_srcptr w, double d) - { __GMPXX_TMPZ_D; mpz_tdiv_r (z, w, temp); } - static void eval(mpz_ptr z, double d, mpz_srcptr w) - { __GMPXX_TMPZ_D; mpz_tdiv_r (z, temp, w); } -}; - -struct __gmp_binary_and -{ - static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) - { mpz_and(z, w, v); } - - static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) - { __GMPXX_TMPZ_UI; mpz_and (z, w, temp); } - static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) - { eval(z, w, l); } - static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) - { __GMPXX_TMPZ_SI; mpz_and (z, w, temp); } - static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) - { eval(z, w, l); } - static void eval(mpz_ptr z, mpz_srcptr w, double d) - { __GMPXX_TMPZ_D; mpz_and (z, w, temp); } - static void eval(mpz_ptr z, double d, mpz_srcptr w) - { eval(z, w, d); } -}; - -struct __gmp_binary_ior -{ - static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) - { mpz_ior(z, w, v); } - static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) - { __GMPXX_TMPZ_UI; mpz_ior (z, w, temp); } - static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) - { eval(z, w, l); } - static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) - { __GMPXX_TMPZ_SI; mpz_ior (z, w, temp); } - static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) - { eval(z, w, l); } - static void eval(mpz_ptr z, mpz_srcptr w, double d) - { __GMPXX_TMPZ_D; mpz_ior (z, w, temp); } - static void eval(mpz_ptr z, double d, mpz_srcptr w) - { eval(z, w, d); } -}; - -struct __gmp_binary_xor -{ - static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) - { mpz_xor(z, w, v); } - static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) - { __GMPXX_TMPZ_UI; mpz_xor (z, w, temp); } - static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) - { eval(z, w, l); } - static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) - { __GMPXX_TMPZ_SI; mpz_xor (z, w, temp); } - static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) - { eval(z, w, l); } - static void eval(mpz_ptr z, mpz_srcptr w, double d) - { __GMPXX_TMPZ_D; mpz_xor (z, w, temp); } - static void eval(mpz_ptr z, double d, mpz_srcptr w) - { eval(z, w, d); } -}; - -struct __gmp_cmp_function -{ - static int eval(mpz_srcptr z, mpz_srcptr w) { return mpz_cmp(z, w); } - - static int eval(mpz_srcptr z, unsigned long int l) - { return mpz_cmp_ui(z, l); } - static int eval(unsigned long int l, mpz_srcptr z) - { return -mpz_cmp_ui(z, l); } - static int eval(mpz_srcptr z, signed long int l) - { return mpz_cmp_si(z, l); } - static int eval(signed long int l, mpz_srcptr z) - { return -mpz_cmp_si(z, l); } - static int eval(mpz_srcptr z, double d) - { return mpz_cmp_d(z, d); } - static int eval(double d, mpz_srcptr z) - { return -mpz_cmp_d(z, d); } - - static int eval(mpq_srcptr q, mpq_srcptr r) { return mpq_cmp(q, r); } - - static int eval(mpq_srcptr q, unsigned long int l) - { return mpq_cmp_ui(q, l, 1); } - static int eval(unsigned long int l, mpq_srcptr q) - { return -mpq_cmp_ui(q, l, 1); } - static int eval(mpq_srcptr q, signed long int l) - { return mpq_cmp_si(q, l, 1); } - static int eval(signed long int l, mpq_srcptr q) - { return -mpq_cmp_si(q, l, 1); } - static int eval(mpq_srcptr q, double d) - { __GMPXX_TMPQ_D; return mpq_cmp (q, temp); } - static int eval(double d, mpq_srcptr q) - { __GMPXX_TMPQ_D; return mpq_cmp (temp, q); } - static int eval(mpq_srcptr q, mpz_srcptr z) - { return mpq_cmp_z(q, z); } - static int eval(mpz_srcptr z, mpq_srcptr q) - { return -mpq_cmp_z(q, z); } - - static int eval(mpf_srcptr f, mpf_srcptr g) { return mpf_cmp(f, g); } - - static int eval(mpf_srcptr f, unsigned long int l) - { return mpf_cmp_ui(f, l); } - static int eval(unsigned long int l, mpf_srcptr f) - { return -mpf_cmp_ui(f, l); } - static int eval(mpf_srcptr f, signed long int l) - { return mpf_cmp_si(f, l); } - static int eval(signed long int l, mpf_srcptr f) - { return -mpf_cmp_si(f, l); } - static int eval(mpf_srcptr f, double d) - { return mpf_cmp_d(f, d); } - static int eval(double d, mpf_srcptr f) - { return -mpf_cmp_d(f, d); } - static int eval(mpf_srcptr f, mpz_srcptr z) - { return mpf_cmp_z(f, z); } - static int eval(mpz_srcptr z, mpf_srcptr f) - { return -mpf_cmp_z(f, z); } - static int eval(mpf_srcptr f, mpq_srcptr q) - { - mpf_t qf; - mpf_init(qf); /* Should we use the precision of f? */ - mpf_set_q(qf, q); - int ret = eval(f, qf); - mpf_clear(qf); - return ret; - } - static int eval(mpq_srcptr q, mpf_srcptr f) - { return -eval(f, q); } -}; - -struct __gmp_binary_equal -{ - static bool eval(mpz_srcptr z, mpz_srcptr w) { return mpz_cmp(z, w) == 0; } - - static bool eval(mpz_srcptr z, unsigned long int l) - { return mpz_cmp_ui(z, l) == 0; } - static bool eval(unsigned long int l, mpz_srcptr z) - { return eval(z, l); } - static bool eval(mpz_srcptr z, signed long int l) - { return mpz_cmp_si(z, l) == 0; } - static bool eval(signed long int l, mpz_srcptr z) - { return eval(z, l); } - static bool eval(mpz_srcptr z, double d) - { return mpz_cmp_d(z, d) == 0; } - static bool eval(double d, mpz_srcptr z) - { return eval(z, d); } - - static bool eval(mpq_srcptr q, mpq_srcptr r) - { return mpq_equal(q, r) != 0; } - - static bool eval(mpq_srcptr q, unsigned long int l) - { return mpq_cmp_ui(q, l, 1) == 0; } - static bool eval(unsigned long int l, mpq_srcptr q) - { return eval(q, l); } - static bool eval(mpq_srcptr q, signed long int l) - { return mpq_cmp_si(q, l, 1) == 0; } - static bool eval(signed long int l, mpq_srcptr q) - { return eval(q, l); } - static bool eval(mpq_srcptr q, double d) - { __GMPXX_TMPQ_D; return mpq_equal (q, temp) != 0; } - static bool eval(double d, mpq_srcptr q) - { return eval(q, d); } - static bool eval(mpq_srcptr q, mpz_srcptr z) - { return mpq_cmp_z(q, z) == 0; } - static bool eval(mpz_srcptr z, mpq_srcptr q) - { return eval(q, z); } - - static bool eval(mpf_srcptr f, mpf_srcptr g) { return mpf_cmp(f, g) == 0; } - - static bool eval(mpf_srcptr f, unsigned long int l) - { return mpf_cmp_ui(f, l) == 0; } - static bool eval(unsigned long int l, mpf_srcptr f) - { return eval(f, l); } - static bool eval(mpf_srcptr f, signed long int l) - { return mpf_cmp_si(f, l) == 0; } - static bool eval(signed long int l, mpf_srcptr f) - { return eval(f, l); } - static bool eval(mpf_srcptr f, double d) - { return mpf_cmp_d(f, d) == 0; } - static bool eval(double d, mpf_srcptr f) - { return eval(f, d); } - static bool eval(mpf_srcptr f, mpz_srcptr z) - { return mpf_cmp_z(f, z) == 0; } - static bool eval(mpz_srcptr z, mpf_srcptr f) - { return eval(f, z); } - static bool eval(mpf_srcptr f, mpq_srcptr q) - { return __gmp_cmp_function::eval(f, q) == 0; } - static bool eval(mpq_srcptr q, mpf_srcptr f) - { return eval(f, q); } -}; - -struct __gmp_binary_less -{ - static bool eval(mpz_srcptr z, mpz_srcptr w) { return mpz_cmp(z, w) < 0; } - - static bool eval(mpz_srcptr z, unsigned long int l) - { return mpz_cmp_ui(z, l) < 0; } - static bool eval(unsigned long int l, mpz_srcptr z) - { return mpz_cmp_ui(z, l) > 0; } - static bool eval(mpz_srcptr z, signed long int l) - { return mpz_cmp_si(z, l) < 0; } - static bool eval(signed long int l, mpz_srcptr z) - { return mpz_cmp_si(z, l) > 0; } - static bool eval(mpz_srcptr z, double d) - { return mpz_cmp_d(z, d) < 0; } - static bool eval(double d, mpz_srcptr z) - { return mpz_cmp_d(z, d) > 0; } - - static bool eval(mpq_srcptr q, mpq_srcptr r) { return mpq_cmp(q, r) < 0; } - - static bool eval(mpq_srcptr q, unsigned long int l) - { return mpq_cmp_ui(q, l, 1) < 0; } - static bool eval(unsigned long int l, mpq_srcptr q) - { return mpq_cmp_ui(q, l, 1) > 0; } - static bool eval(mpq_srcptr q, signed long int l) - { return mpq_cmp_si(q, l, 1) < 0; } - static bool eval(signed long int l, mpq_srcptr q) - { return mpq_cmp_si(q, l, 1) > 0; } - static bool eval(mpq_srcptr q, double d) - { __GMPXX_TMPQ_D; return mpq_cmp (q, temp) < 0; } - static bool eval(double d, mpq_srcptr q) - { __GMPXX_TMPQ_D; return mpq_cmp (temp, q) < 0; } - static bool eval(mpq_srcptr q, mpz_srcptr z) - { return mpq_cmp_z(q, z) < 0; } - static bool eval(mpz_srcptr z, mpq_srcptr q) - { return mpq_cmp_z(q, z) > 0; } - - static bool eval(mpf_srcptr f, mpf_srcptr g) { return mpf_cmp(f, g) < 0; } - - static bool eval(mpf_srcptr f, unsigned long int l) - { return mpf_cmp_ui(f, l) < 0; } - static bool eval(unsigned long int l, mpf_srcptr f) - { return mpf_cmp_ui(f, l) > 0; } - static bool eval(mpf_srcptr f, signed long int l) - { return mpf_cmp_si(f, l) < 0; } - static bool eval(signed long int l, mpf_srcptr f) - { return mpf_cmp_si(f, l) > 0; } - static bool eval(mpf_srcptr f, double d) - { return mpf_cmp_d(f, d) < 0; } - static bool eval(double d, mpf_srcptr f) - { return mpf_cmp_d(f, d) > 0; } - static bool eval(mpf_srcptr f, mpz_srcptr z) - { return mpf_cmp_z(f, z) < 0; } - static bool eval(mpz_srcptr z, mpf_srcptr f) - { return mpf_cmp_z(f, z) > 0; } - static bool eval(mpf_srcptr f, mpq_srcptr q) - { return __gmp_cmp_function::eval(f, q) < 0; } - static bool eval(mpq_srcptr q, mpf_srcptr f) - { return __gmp_cmp_function::eval(q, f) < 0; } -}; - -struct __gmp_binary_greater -{ - template <class T, class U> - static inline bool eval(T t, U u) { return __gmp_binary_less::eval(u, t); } -}; - -struct __gmp_unary_increment -{ - static void eval(mpz_ptr z) { mpz_add_ui(z, z, 1); } - static void eval(mpq_ptr q) - { mpz_add(mpq_numref(q), mpq_numref(q), mpq_denref(q)); } - static void eval(mpf_ptr f) { mpf_add_ui(f, f, 1); } -}; - -struct __gmp_unary_decrement -{ - static void eval(mpz_ptr z) { mpz_sub_ui(z, z, 1); } - static void eval(mpq_ptr q) - { mpz_sub(mpq_numref(q), mpq_numref(q), mpq_denref(q)); } - static void eval(mpf_ptr f) { mpf_sub_ui(f, f, 1); } -}; - -struct __gmp_abs_function -{ - static void eval(mpz_ptr z, mpz_srcptr w) { mpz_abs(z, w); } - static void eval(mpq_ptr q, mpq_srcptr r) { mpq_abs(q, r); } - static void eval(mpf_ptr f, mpf_srcptr g) { mpf_abs(f, g); } -}; - -struct __gmp_trunc_function -{ - static void eval(mpf_ptr f, mpf_srcptr g) { mpf_trunc(f, g); } -}; - -struct __gmp_floor_function -{ - static void eval(mpf_ptr f, mpf_srcptr g) { mpf_floor(f, g); } -}; - -struct __gmp_ceil_function -{ - static void eval(mpf_ptr f, mpf_srcptr g) { mpf_ceil(f, g); } -}; - -struct __gmp_sqrt_function -{ - static void eval(mpz_ptr z, mpz_srcptr w) { mpz_sqrt(z, w); } - static void eval(mpf_ptr f, mpf_srcptr g) { mpf_sqrt(f, g); } -}; - -struct __gmp_hypot_function -{ - static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) - { - mpf_t temp; - mpf_init2(temp, mpf_get_prec(f)); - mpf_mul(temp, g, g); - mpf_mul(f, h, h); - mpf_add(f, f, temp); - mpf_sqrt(f, f); - mpf_clear(temp); - } - - static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) - { - mpf_t temp; - mpf_init2(temp, mpf_get_prec(f)); - mpf_mul(temp, g, g); - mpf_set_ui(f, l); - mpf_mul_ui(f, f, l); - mpf_add(f, f, temp); - mpf_clear(temp); - mpf_sqrt(f, f); - } - static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) - { eval(f, g, l); } - static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) - { eval(f, g, __gmpxx_abs_ui(l)); } - static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) - { eval(f, g, l); } - static void eval(mpf_ptr f, mpf_srcptr g, double d) - { - mpf_t temp; - mpf_init2(temp, mpf_get_prec(f)); - mpf_mul(temp, g, g); - mpf_set_d(f, d); - mpf_mul(f, f, f); - mpf_add(f, f, temp); - mpf_sqrt(f, f); - mpf_clear(temp); - } - static void eval(mpf_ptr f, double d, mpf_srcptr g) - { eval(f, g, d); } -}; - -struct __gmp_sgn_function -{ - static int eval(mpz_srcptr z) { return mpz_sgn(z); } - static int eval(mpq_srcptr q) { return mpq_sgn(q); } - static int eval(mpf_srcptr f) { return mpf_sgn(f); } -}; - -struct __gmp_gcd_function -{ - static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) - { mpz_gcd(z, w, v); } - static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) - { mpz_gcd_ui(z, w, l); } - static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) - { eval(z, w, l); } - static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) - { eval(z, w, __gmpxx_abs_ui(l)); } - static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) - { eval(z, w, l); } - static void eval(mpz_ptr z, mpz_srcptr w, double d) - { __GMPXX_TMPZ_D; mpz_gcd (z, w, temp); } - static void eval(mpz_ptr z, double d, mpz_srcptr w) - { eval(z, w, d); } -}; - -struct __gmp_lcm_function -{ - static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) - { mpz_lcm(z, w, v); } - static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) - { mpz_lcm_ui(z, w, l); } - static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) - { eval(z, w, l); } - static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) - { eval(z, w, __gmpxx_abs_ui(l)); } - static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) - { eval(z, w, l); } - static void eval(mpz_ptr z, mpz_srcptr w, double d) - { __GMPXX_TMPZ_D; mpz_lcm (z, w, temp); } - static void eval(mpz_ptr z, double d, mpz_srcptr w) - { eval(z, w, d); } -}; - -struct __gmp_rand_function -{ - static void eval(mpz_ptr z, gmp_randstate_t s, mp_bitcnt_t l) - { mpz_urandomb(z, s, l); } - static void eval(mpz_ptr z, gmp_randstate_t s, mpz_srcptr w) - { mpz_urandomm(z, s, w); } - static void eval(mpf_ptr f, gmp_randstate_t s, mp_bitcnt_t prec) - { mpf_urandomb(f, s, prec); } -}; - - -/**************** Auxiliary classes ****************/ - -/* this is much the same as gmp_allocated_string in gmp-impl.h - since gmp-impl.h is not publicly available, I redefine it here - I use a different name to avoid possible clashes */ - -extern "C" { - typedef void (*__gmp_freefunc_t) (void *, size_t); -} -struct __gmp_alloc_cstring -{ - char *str; - __gmp_alloc_cstring(char *s) { str = s; } - ~__gmp_alloc_cstring() - { - __gmp_freefunc_t freefunc; - mp_get_memory_functions (NULL, NULL, &freefunc); - (*freefunc) (str, std::strlen(str)+1); - } -}; - - -// general expression template class -template <class T, class U> -class __gmp_expr; - - -// templates for resolving expression types -template <class T> -struct __gmp_resolve_ref -{ - typedef T ref_type; -}; - -template <class T, class U> -struct __gmp_resolve_ref<__gmp_expr<T, U> > -{ - typedef const __gmp_expr<T, U> & ref_type; -}; - - -template <class T, class U = T> -struct __gmp_resolve_expr; - -template <> -struct __gmp_resolve_expr<mpz_t> -{ - typedef mpz_t value_type; - typedef mpz_ptr ptr_type; - typedef mpz_srcptr srcptr_type; -}; - -template <> -struct __gmp_resolve_expr<mpq_t> -{ - typedef mpq_t value_type; - typedef mpq_ptr ptr_type; - typedef mpq_srcptr srcptr_type; -}; - -template <> -struct __gmp_resolve_expr<mpf_t> -{ - typedef mpf_t value_type; - typedef mpf_ptr ptr_type; - typedef mpf_srcptr srcptr_type; -}; - -template <> -struct __gmp_resolve_expr<mpz_t, mpq_t> -{ - typedef mpq_t value_type; -}; - -template <> -struct __gmp_resolve_expr<mpq_t, mpz_t> -{ - typedef mpq_t value_type; -}; - -template <> -struct __gmp_resolve_expr<mpz_t, mpf_t> -{ - typedef mpf_t value_type; -}; - -template <> -struct __gmp_resolve_expr<mpf_t, mpz_t> -{ - typedef mpf_t value_type; -}; - -template <> -struct __gmp_resolve_expr<mpq_t, mpf_t> -{ - typedef mpf_t value_type; -}; - -template <> -struct __gmp_resolve_expr<mpf_t, mpq_t> -{ - typedef mpf_t value_type; -}; - -#if __GMPXX_USE_CXX11 -namespace std { - template <class T, class U, class V, class W> - struct common_type <__gmp_expr<T, U>, __gmp_expr<V, W> > - { - private: - typedef typename __gmp_resolve_expr<T, V>::value_type X; - public: - typedef __gmp_expr<X, X> type; - }; - - template <class T, class U> - struct common_type <__gmp_expr<T, U> > - { - typedef __gmp_expr<T, T> type; - }; - -#define __GMPXX_DECLARE_COMMON_TYPE(typ) \ - template <class T, class U> \ - struct common_type <__gmp_expr<T, U>, typ > \ - { \ - typedef __gmp_expr<T, T> type; \ - }; \ - \ - template <class T, class U> \ - struct common_type <typ, __gmp_expr<T, U> > \ - { \ - typedef __gmp_expr<T, T> type; \ - } - - __GMPXX_DECLARE_COMMON_TYPE(signed char); - __GMPXX_DECLARE_COMMON_TYPE(unsigned char); - __GMPXX_DECLARE_COMMON_TYPE(signed int); - __GMPXX_DECLARE_COMMON_TYPE(unsigned int); - __GMPXX_DECLARE_COMMON_TYPE(signed short int); - __GMPXX_DECLARE_COMMON_TYPE(unsigned short int); - __GMPXX_DECLARE_COMMON_TYPE(signed long int); - __GMPXX_DECLARE_COMMON_TYPE(unsigned long int); - __GMPXX_DECLARE_COMMON_TYPE(float); - __GMPXX_DECLARE_COMMON_TYPE(double); -#undef __GMPXX_DECLARE_COMMON_TYPE -} -#endif - -// classes for evaluating unary and binary expressions -template <class T, class Op> -struct __gmp_unary_expr -{ - typename __gmp_resolve_ref<T>::ref_type val; - - __gmp_unary_expr(const T &v) : val(v) { } -private: - __gmp_unary_expr(); -}; - -template <class T, class U, class Op> -struct __gmp_binary_expr -{ - typename __gmp_resolve_ref<T>::ref_type val1; - typename __gmp_resolve_ref<U>::ref_type val2; - - __gmp_binary_expr(const T &v1, const U &v2) : val1(v1), val2(v2) { } -private: - __gmp_binary_expr(); -}; - - - -/**************** Macros for in-class declarations ****************/ -/* This is just repetitive code that is easier to maintain if it's written - only once */ - -#define __GMPP_DECLARE_COMPOUND_OPERATOR(fun) \ - template <class T, class U> \ - __gmp_expr<value_type, value_type> & fun(const __gmp_expr<T, U> &); - -#define __GMPN_DECLARE_COMPOUND_OPERATOR(fun) \ - __gmp_expr & fun(signed char); \ - __gmp_expr & fun(unsigned char); \ - __gmp_expr & fun(signed int); \ - __gmp_expr & fun(unsigned int); \ - __gmp_expr & fun(signed short int); \ - __gmp_expr & fun(unsigned short int); \ - __gmp_expr & fun(signed long int); \ - __gmp_expr & fun(unsigned long int); \ - __gmp_expr & fun(float); \ - __gmp_expr & fun(double); \ - /* __gmp_expr & fun(long double); */ - -#define __GMP_DECLARE_COMPOUND_OPERATOR(fun) \ -__GMPP_DECLARE_COMPOUND_OPERATOR(fun) \ -__GMPN_DECLARE_COMPOUND_OPERATOR(fun) - -#define __GMP_DECLARE_COMPOUND_OPERATOR_UI(fun) \ - __gmp_expr & fun(mp_bitcnt_t); - -#define __GMP_DECLARE_INCREMENT_OPERATOR(fun) \ - inline __gmp_expr & fun(); \ - inline __gmp_expr fun(int); - -#define __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS \ - __gmp_expr(signed char c) { init_si(c); } \ - __gmp_expr(unsigned char c) { init_ui(c); } \ - __gmp_expr(signed int i) { init_si(i); } \ - __gmp_expr(unsigned int i) { init_ui(i); } \ - __gmp_expr(signed short int s) { init_si(s); } \ - __gmp_expr(unsigned short int s) { init_ui(s); } \ - __gmp_expr(signed long int l) { init_si(l); } \ - __gmp_expr(unsigned long int l) { init_ui(l); } \ - __gmp_expr(float f) { init_d(f); } \ - __gmp_expr(double d) { init_d(d); } - -#define __GMPXX_DEFINE_ARITHMETIC_ASSIGNMENTS \ - __gmp_expr & operator=(signed char c) { assign_si(c); return *this; } \ - __gmp_expr & operator=(unsigned char c) { assign_ui(c); return *this; } \ - __gmp_expr & operator=(signed int i) { assign_si(i); return *this; } \ - __gmp_expr & operator=(unsigned int i) { assign_ui(i); return *this; } \ - __gmp_expr & operator=(signed short int s) { assign_si(s); return *this; } \ - __gmp_expr & operator=(unsigned short int s) { assign_ui(s); return *this; } \ - __gmp_expr & operator=(signed long int l) { assign_si(l); return *this; } \ - __gmp_expr & operator=(unsigned long int l) { assign_ui(l); return *this; } \ - __gmp_expr & operator=(float f) { assign_d(f); return *this; } \ - __gmp_expr & operator=(double d) { assign_d(d); return *this; } - -/**************** mpz_class -- wrapper for mpz_t ****************/ - -template <> -class __gmp_expr<mpz_t, mpz_t> -{ -private: - typedef mpz_t value_type; - value_type mp; - - // Helper functions used for all arithmetic types - void assign_ui(unsigned long l) - { - if (__GMPXX_CONSTANT_TRUE(l == 0)) - mp->_mp_size = 0; - else - mpz_set_ui(mp, l); - } - void assign_si(signed long l) - { - if (__GMPXX_CONSTANT_TRUE(l >= 0)) - assign_ui(l); - else if (__GMPXX_CONSTANT_TRUE(l <= 0)) - { - assign_ui(-static_cast<unsigned long>(l)); - mpz_neg(mp, mp); - } - else - mpz_set_si(mp, l); - } - void assign_d (double d) - { - mpz_set_d (mp, d); - } - - void init_ui(unsigned long l) - { - if (__GMPXX_CONSTANT_TRUE(l == 0)) - mpz_init(mp); - else - mpz_init_set_ui(mp, l); - } - void init_si(signed long l) - { - if (__GMPXX_CONSTANT_TRUE(l >= 0)) - init_ui(l); - else if (__GMPXX_CONSTANT_TRUE(l <= 0)) - { - init_ui(-static_cast<unsigned long>(l)); - mpz_neg(mp, mp); - } - else - mpz_init_set_si(mp, l); - } - void init_d (double d) - { - mpz_init_set_d (mp, d); - } - -public: - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } - - // constructors and destructor - __gmp_expr() { mpz_init(mp); } - - __gmp_expr(const __gmp_expr &z) { mpz_init_set(mp, z.mp); } -#if __GMPXX_USE_CXX11 - __gmp_expr(__gmp_expr &&z) - { *mp = *z.mp; mpz_init(z.mp); } -#endif - template <class T> - __gmp_expr(const __gmp_expr<mpz_t, T> &expr) - { mpz_init(mp); __gmp_set_expr(mp, expr); } - template <class T, class U> - explicit __gmp_expr(const __gmp_expr<T, U> &expr) - { mpz_init(mp); __gmp_set_expr(mp, expr); } - - __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS - - explicit __gmp_expr(const char *s, int base = 0) - { - if (mpz_init_set_str (mp, s, base) != 0) - { - mpz_clear (mp); - throw std::invalid_argument ("mpz_set_str"); - } - } - explicit __gmp_expr(const std::string &s, int base = 0) - { - if (mpz_init_set_str(mp, s.c_str(), base) != 0) - { - mpz_clear (mp); - throw std::invalid_argument ("mpz_set_str"); - } - } - - explicit __gmp_expr(mpz_srcptr z) { mpz_init_set(mp, z); } - - ~__gmp_expr() { mpz_clear(mp); } - - void swap(__gmp_expr& z) __GMPXX_NOEXCEPT { std::swap(*mp, *z.mp); } - - // assignment operators - __gmp_expr & operator=(const __gmp_expr &z) - { mpz_set(mp, z.mp); return *this; } -#if __GMPXX_USE_CXX11 - __gmp_expr & operator=(__gmp_expr &&z) noexcept - { swap(z); return *this; } -#endif - template <class T, class U> - __gmp_expr<value_type, value_type> & operator=(const __gmp_expr<T, U> &expr) - { __gmp_set_expr(mp, expr); return *this; } - - __GMPXX_DEFINE_ARITHMETIC_ASSIGNMENTS - - __gmp_expr & operator=(const char *s) - { - if (mpz_set_str (mp, s, 0) != 0) - throw std::invalid_argument ("mpz_set_str"); - return *this; - } - __gmp_expr & operator=(const std::string &s) - { - if (mpz_set_str(mp, s.c_str(), 0) != 0) - throw std::invalid_argument ("mpz_set_str"); - return *this; - } - - // string input/output functions - int set_str(const char *s, int base) - { return mpz_set_str(mp, s, base); } - int set_str(const std::string &s, int base) - { return mpz_set_str(mp, s.c_str(), base); } - std::string get_str(int base = 10) const - { - __gmp_alloc_cstring temp(mpz_get_str(0, base, mp)); - return std::string(temp.str); - } - - // conversion functions - mpz_srcptr __get_mp() const { return mp; } - mpz_ptr __get_mp() { return mp; } - mpz_srcptr get_mpz_t() const { return mp; } - mpz_ptr get_mpz_t() { return mp; } - - signed long int get_si() const { return mpz_get_si(mp); } - unsigned long int get_ui() const { return mpz_get_ui(mp); } - double get_d() const { return mpz_get_d(mp); } - - // bool fits_schar_p() const { return mpz_fits_schar_p(mp); } - // bool fits_uchar_p() const { return mpz_fits_uchar_p(mp); } - bool fits_sint_p() const { return mpz_fits_sint_p(mp); } - bool fits_uint_p() const { return mpz_fits_uint_p(mp); } - bool fits_sshort_p() const { return mpz_fits_sshort_p(mp); } - bool fits_ushort_p() const { return mpz_fits_ushort_p(mp); } - bool fits_slong_p() const { return mpz_fits_slong_p(mp); } - bool fits_ulong_p() const { return mpz_fits_ulong_p(mp); } - // bool fits_float_p() const { return mpz_fits_float_p(mp); } - // bool fits_double_p() const { return mpz_fits_double_p(mp); } - // bool fits_ldouble_p() const { return mpz_fits_ldouble_p(mp); } - -#if __GMPXX_USE_CXX11 - explicit operator bool() const { return mp->_mp_size != 0; } -#endif - - // member operators - __GMP_DECLARE_COMPOUND_OPERATOR(operator+=) - __GMP_DECLARE_COMPOUND_OPERATOR(operator-=) - __GMP_DECLARE_COMPOUND_OPERATOR(operator*=) - __GMP_DECLARE_COMPOUND_OPERATOR(operator/=) - __GMP_DECLARE_COMPOUND_OPERATOR(operator%=) - - __GMP_DECLARE_COMPOUND_OPERATOR(operator&=) - __GMP_DECLARE_COMPOUND_OPERATOR(operator|=) - __GMP_DECLARE_COMPOUND_OPERATOR(operator^=) - - __GMP_DECLARE_COMPOUND_OPERATOR_UI(operator<<=) - __GMP_DECLARE_COMPOUND_OPERATOR_UI(operator>>=) - - __GMP_DECLARE_INCREMENT_OPERATOR(operator++) - __GMP_DECLARE_INCREMENT_OPERATOR(operator--) -}; - -typedef __gmp_expr<mpz_t, mpz_t> mpz_class; - - -/**************** mpq_class -- wrapper for mpq_t ****************/ - -template <> -class __gmp_expr<mpq_t, mpq_t> -{ -private: - typedef mpq_t value_type; - value_type mp; - - // Helper functions used for all arithmetic types - void assign_ui(unsigned long l) { mpq_set_ui(mp, l, 1); } - void assign_si(signed long l) - { - if (__GMPXX_CONSTANT_TRUE(l >= 0)) - assign_ui(l); - else - mpq_set_si(mp, l, 1); - } - void assign_d (double d) { mpq_set_d (mp, d); } - - void init_ui(unsigned long l) { mpq_init(mp); get_num() = l; } - void init_si(signed long l) { mpq_init(mp); get_num() = l; } - void init_d (double d) { mpq_init(mp); assign_d (d); } - -public: - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } - void canonicalize() { mpq_canonicalize(mp); } - - // constructors and destructor - __gmp_expr() { mpq_init(mp); } - - __gmp_expr(const __gmp_expr &q) - { - mpz_init_set(mpq_numref(mp), mpq_numref(q.mp)); - mpz_init_set(mpq_denref(mp), mpq_denref(q.mp)); - } -#if __GMPXX_USE_CXX11 - __gmp_expr(__gmp_expr &&q) - { *mp = *q.mp; mpq_init(q.mp); } -#endif - template <class T> - __gmp_expr(const __gmp_expr<mpz_t, T> &expr) - { mpq_init(mp); __gmp_set_expr(mp, expr); } - template <class T> - __gmp_expr(const __gmp_expr<mpq_t, T> &expr) - { mpq_init(mp); __gmp_set_expr(mp, expr); } - template <class T, class U> - explicit __gmp_expr(const __gmp_expr<T, U> &expr) - { mpq_init(mp); __gmp_set_expr(mp, expr); } - - __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS - - explicit __gmp_expr(const char *s, int base = 0) - { - mpq_init (mp); - // If s is the literal 0, we meant to call another constructor. - // If s just happens to evaluate to 0, we would crash, so whatever. - if (s == 0) - { - // Don't turn mpq_class(0,0) into 0 - mpz_set_si(mpq_denref(mp), base); - } - else if (mpq_set_str(mp, s, base) != 0) - { - mpq_clear (mp); - throw std::invalid_argument ("mpq_set_str"); - } - } - explicit __gmp_expr(const std::string &s, int base = 0) - { - mpq_init(mp); - if (mpq_set_str (mp, s.c_str(), base) != 0) - { - mpq_clear (mp); - throw std::invalid_argument ("mpq_set_str"); - } - } - explicit __gmp_expr(mpq_srcptr q) - { - mpz_init_set(mpq_numref(mp), mpq_numref(q)); - mpz_init_set(mpq_denref(mp), mpq_denref(q)); - } - - __gmp_expr(const mpz_class &num, const mpz_class &den) - { - mpz_init_set(mpq_numref(mp), num.get_mpz_t()); - mpz_init_set(mpq_denref(mp), den.get_mpz_t()); - } - - ~__gmp_expr() { mpq_clear(mp); } - - void swap(__gmp_expr& q) __GMPXX_NOEXCEPT { std::swap(*mp, *q.mp); } - - // assignment operators - __gmp_expr & operator=(const __gmp_expr &q) - { mpq_set(mp, q.mp); return *this; } -#if __GMPXX_USE_CXX11 - __gmp_expr & operator=(__gmp_expr &&q) noexcept - { swap(q); return *this; } - __gmp_expr & operator=(mpz_class &&z) noexcept - { get_num() = std::move(z); get_den() = 1u; return *this; } -#endif - template <class T, class U> - __gmp_expr<value_type, value_type> & operator=(const __gmp_expr<T, U> &expr) - { __gmp_set_expr(mp, expr); return *this; } - - __GMPXX_DEFINE_ARITHMETIC_ASSIGNMENTS - - __gmp_expr & operator=(const char *s) - { - if (mpq_set_str (mp, s, 0) != 0) - throw std::invalid_argument ("mpq_set_str"); - return *this; - } - __gmp_expr & operator=(const std::string &s) - { - if (mpq_set_str(mp, s.c_str(), 0) != 0) - throw std::invalid_argument ("mpq_set_str"); - return *this; - } - - // string input/output functions - int set_str(const char *s, int base) - { return mpq_set_str(mp, s, base); } - int set_str(const std::string &s, int base) - { return mpq_set_str(mp, s.c_str(), base); } - std::string get_str(int base = 10) const - { - __gmp_alloc_cstring temp(mpq_get_str(0, base, mp)); - return std::string(temp.str); - } - - // conversion functions - - // casting a reference to an mpz_t to mpz_class & is a dirty hack, - // but works because the internal representation of mpz_class is - // exactly an mpz_t - const mpz_class & get_num() const - { return reinterpret_cast<const mpz_class &>(*mpq_numref(mp)); } - mpz_class & get_num() - { return reinterpret_cast<mpz_class &>(*mpq_numref(mp)); } - const mpz_class & get_den() const - { return reinterpret_cast<const mpz_class &>(*mpq_denref(mp)); } - mpz_class & get_den() - { return reinterpret_cast<mpz_class &>(*mpq_denref(mp)); } - - mpq_srcptr __get_mp() const { return mp; } - mpq_ptr __get_mp() { return mp; } - mpq_srcptr get_mpq_t() const { return mp; } - mpq_ptr get_mpq_t() { return mp; } - - mpz_srcptr get_num_mpz_t() const { return mpq_numref(mp); } - mpz_ptr get_num_mpz_t() { return mpq_numref(mp); } - mpz_srcptr get_den_mpz_t() const { return mpq_denref(mp); } - mpz_ptr get_den_mpz_t() { return mpq_denref(mp); } - - double get_d() const { return mpq_get_d(mp); } - -#if __GMPXX_USE_CXX11 - explicit operator bool() const { return mpq_numref(mp)->_mp_size != 0; } -#endif - - // compound assignments - __GMP_DECLARE_COMPOUND_OPERATOR(operator+=) - __GMP_DECLARE_COMPOUND_OPERATOR(operator-=) - __GMP_DECLARE_COMPOUND_OPERATOR(operator*=) - __GMP_DECLARE_COMPOUND_OPERATOR(operator/=) - - __GMP_DECLARE_COMPOUND_OPERATOR_UI(operator<<=) - __GMP_DECLARE_COMPOUND_OPERATOR_UI(operator>>=) - - __GMP_DECLARE_INCREMENT_OPERATOR(operator++) - __GMP_DECLARE_INCREMENT_OPERATOR(operator--) -}; - -typedef __gmp_expr<mpq_t, mpq_t> mpq_class; - - -/**************** mpf_class -- wrapper for mpf_t ****************/ - -template <> -class __gmp_expr<mpf_t, mpf_t> -{ -private: - typedef mpf_t value_type; - value_type mp; - - // Helper functions used for all arithmetic types - void assign_ui(unsigned long l) { mpf_set_ui(mp, l); } - void assign_si(signed long l) - { - if (__GMPXX_CONSTANT_TRUE(l >= 0)) - assign_ui(l); - else - mpf_set_si(mp, l); - } - void assign_d (double d) { mpf_set_d (mp, d); } - - void init_ui(unsigned long l) - { - if (__GMPXX_CONSTANT_TRUE(l == 0)) - mpf_init(mp); - else - mpf_init_set_ui(mp, l); - } - void init_si(signed long l) - { - if (__GMPXX_CONSTANT_TRUE(l >= 0)) - init_ui(l); - else - mpf_init_set_si(mp, l); - } - void init_d (double d) { mpf_init_set_d (mp, d); } - -public: - mp_bitcnt_t get_prec() const { return mpf_get_prec(mp); } - - void set_prec(mp_bitcnt_t prec) { mpf_set_prec(mp, prec); } - void set_prec_raw(mp_bitcnt_t prec) { mpf_set_prec_raw(mp, prec); } - - // constructors and destructor - __gmp_expr() { mpf_init(mp); } - - __gmp_expr(const __gmp_expr &f) - { mpf_init2(mp, f.get_prec()); mpf_set(mp, f.mp); } -#if __GMPXX_USE_CXX11 - __gmp_expr(__gmp_expr &&f) - { *mp = *f.mp; mpf_init2(f.mp, get_prec()); } -#endif - __gmp_expr(const __gmp_expr &f, mp_bitcnt_t prec) - { mpf_init2(mp, prec); mpf_set(mp, f.mp); } - template <class T, class U> - __gmp_expr(const __gmp_expr<T, U> &expr) - { mpf_init2(mp, expr.get_prec()); __gmp_set_expr(mp, expr); } - template <class T, class U> - __gmp_expr(const __gmp_expr<T, U> &expr, mp_bitcnt_t prec) - { mpf_init2(mp, prec); __gmp_set_expr(mp, expr); } - - __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS - - __gmp_expr(signed char c, mp_bitcnt_t prec) - { mpf_init2(mp, prec); mpf_set_si(mp, c); } - __gmp_expr(unsigned char c, mp_bitcnt_t prec) - { mpf_init2(mp, prec); mpf_set_ui(mp, c); } - - __gmp_expr(signed int i, mp_bitcnt_t prec) - { mpf_init2(mp, prec); mpf_set_si(mp, i); } - __gmp_expr(unsigned int i, mp_bitcnt_t prec) - { mpf_init2(mp, prec); mpf_set_ui(mp, i); } - - __gmp_expr(signed short int s, mp_bitcnt_t prec) - { mpf_init2(mp, prec); mpf_set_si(mp, s); } - __gmp_expr(unsigned short int s, mp_bitcnt_t prec) - { mpf_init2(mp, prec); mpf_set_ui(mp, s); } - - __gmp_expr(signed long int l, mp_bitcnt_t prec) - { mpf_init2(mp, prec); mpf_set_si(mp, l); } - __gmp_expr(unsigned long int l, mp_bitcnt_t prec) - { mpf_init2(mp, prec); mpf_set_ui(mp, l); } - - __gmp_expr(float f, mp_bitcnt_t prec) - { mpf_init2(mp, prec); mpf_set_d(mp, f); } - __gmp_expr(double d, mp_bitcnt_t prec) - { mpf_init2(mp, prec); mpf_set_d(mp, d); } - // __gmp_expr(long double ld) { mpf_init_set_d(mp, ld); } - // __gmp_expr(long double ld, mp_bitcnt_t prec) - // { mpf_init2(mp, prec); mpf_set_d(mp, ld); } - - explicit __gmp_expr(const char *s) - { - if (mpf_init_set_str (mp, s, 0) != 0) - { - mpf_clear (mp); - throw std::invalid_argument ("mpf_set_str"); - } - } - __gmp_expr(const char *s, mp_bitcnt_t prec, int base = 0) - { - mpf_init2(mp, prec); - if (mpf_set_str(mp, s, base) != 0) - { - mpf_clear (mp); - throw std::invalid_argument ("mpf_set_str"); - } - } - explicit __gmp_expr(const std::string &s) - { - if (mpf_init_set_str(mp, s.c_str(), 0) != 0) - { - mpf_clear (mp); - throw std::invalid_argument ("mpf_set_str"); - } - } - __gmp_expr(const std::string &s, mp_bitcnt_t prec, int base = 0) - { - mpf_init2(mp, prec); - if (mpf_set_str(mp, s.c_str(), base) != 0) - { - mpf_clear (mp); - throw std::invalid_argument ("mpf_set_str"); - } - } - - explicit __gmp_expr(mpf_srcptr f) - { mpf_init2(mp, mpf_get_prec(f)); mpf_set(mp, f); } - __gmp_expr(mpf_srcptr f, mp_bitcnt_t prec) - { mpf_init2(mp, prec); mpf_set(mp, f); } - - ~__gmp_expr() { mpf_clear(mp); } - - void swap(__gmp_expr& f) __GMPXX_NOEXCEPT { std::swap(*mp, *f.mp); } - - // assignment operators - __gmp_expr & operator=(const __gmp_expr &f) - { mpf_set(mp, f.mp); return *this; } -#if __GMPXX_USE_CXX11 - __gmp_expr & operator=(__gmp_expr &&f) noexcept - { swap(f); return *this; } -#endif - template <class T, class U> - __gmp_expr<value_type, value_type> & operator=(const __gmp_expr<T, U> &expr) - { __gmp_set_expr(mp, expr); return *this; } - - __GMPXX_DEFINE_ARITHMETIC_ASSIGNMENTS - - __gmp_expr & operator=(const char *s) - { - if (mpf_set_str (mp, s, 0) != 0) - throw std::invalid_argument ("mpf_set_str"); - return *this; - } - __gmp_expr & operator=(const std::string &s) - { - if (mpf_set_str(mp, s.c_str(), 0) != 0) - throw std::invalid_argument ("mpf_set_str"); - return *this; - } - - // string input/output functions - int set_str(const char *s, int base) - { return mpf_set_str(mp, s, base); } - int set_str(const std::string &s, int base) - { return mpf_set_str(mp, s.c_str(), base); } - std::string get_str(mp_exp_t &expo, int base = 10, size_t size = 0) const - { - __gmp_alloc_cstring temp(mpf_get_str(0, &expo, base, size, mp)); - return std::string(temp.str); - } - - // conversion functions - mpf_srcptr __get_mp() const { return mp; } - mpf_ptr __get_mp() { return mp; } - mpf_srcptr get_mpf_t() const { return mp; } - mpf_ptr get_mpf_t() { return mp; } - - signed long int get_si() const { return mpf_get_si(mp); } - unsigned long int get_ui() const { return mpf_get_ui(mp); } - double get_d() const { return mpf_get_d(mp); } - - // bool fits_schar_p() const { return mpf_fits_schar_p(mp); } - // bool fits_uchar_p() const { return mpf_fits_uchar_p(mp); } - bool fits_sint_p() const { return mpf_fits_sint_p(mp); } - bool fits_uint_p() const { return mpf_fits_uint_p(mp); } - bool fits_sshort_p() const { return mpf_fits_sshort_p(mp); } - bool fits_ushort_p() const { return mpf_fits_ushort_p(mp); } - bool fits_slong_p() const { return mpf_fits_slong_p(mp); } - bool fits_ulong_p() const { return mpf_fits_ulong_p(mp); } - // bool fits_float_p() const { return mpf_fits_float_p(mp); } - // bool fits_double_p() const { return mpf_fits_double_p(mp); } - // bool fits_ldouble_p() const { return mpf_fits_ldouble_p(mp); } - -#if __GMPXX_USE_CXX11 - explicit operator bool() const { return mp->_mp_size != 0; } -#endif - - // compound assignments - __GMP_DECLARE_COMPOUND_OPERATOR(operator+=) - __GMP_DECLARE_COMPOUND_OPERATOR(operator-=) - __GMP_DECLARE_COMPOUND_OPERATOR(operator*=) - __GMP_DECLARE_COMPOUND_OPERATOR(operator/=) - - __GMP_DECLARE_COMPOUND_OPERATOR_UI(operator<<=) - __GMP_DECLARE_COMPOUND_OPERATOR_UI(operator>>=) - - __GMP_DECLARE_INCREMENT_OPERATOR(operator++) - __GMP_DECLARE_INCREMENT_OPERATOR(operator--) -}; - -typedef __gmp_expr<mpf_t, mpf_t> mpf_class; - - - -/**************** User-defined literals ****************/ - -#if __GMPXX_USE_CXX11 -inline mpz_class operator"" _mpz(const char* s) -{ - return mpz_class(s); -} - -inline mpq_class operator"" _mpq(const char* s) -{ - mpq_class q; - q.get_num() = s; - return q; -} - -inline mpf_class operator"" _mpf(const char* s) -{ - return mpf_class(s); -} -#endif - -/**************** I/O operators ****************/ - -// these should (and will) be provided separately - -template <class T, class U> -inline std::ostream & operator<< -(std::ostream &o, const __gmp_expr<T, U> &expr) -{ - __gmp_expr<T, T> const& temp(expr); - return o << temp.__get_mp(); -} - -template <class T> -inline std::istream & operator>>(std::istream &i, __gmp_expr<T, T> &expr) -{ - return i >> expr.__get_mp(); -} - -/* -// you might want to uncomment this -inline std::istream & operator>>(std::istream &i, mpq_class &q) -{ - i >> q.get_mpq_t(); - q.canonicalize(); - return i; -} -*/ - - -/**************** Functions for type conversion ****************/ - -inline void __gmp_set_expr(mpz_ptr z, const mpz_class &w) -{ - mpz_set(z, w.get_mpz_t()); -} - -template <class T> -inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr<mpz_t, T> &expr) -{ - expr.eval(z); -} - -template <class T> -inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr<mpq_t, T> &expr) -{ - mpq_class const& temp(expr); - mpz_set_q(z, temp.get_mpq_t()); -} - -template <class T> -inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr<mpf_t, T> &expr) -{ - mpf_class const& temp(expr); - mpz_set_f(z, temp.get_mpf_t()); -} - -inline void __gmp_set_expr(mpq_ptr q, const mpz_class &z) -{ - mpq_set_z(q, z.get_mpz_t()); -} - -template <class T> -inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr<mpz_t, T> &expr) -{ - __gmp_set_expr(mpq_numref(q), expr); - mpz_set_ui(mpq_denref(q), 1); -} - -inline void __gmp_set_expr(mpq_ptr q, const mpq_class &r) -{ - mpq_set(q, r.get_mpq_t()); -} - -template <class T> -inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr<mpq_t, T> &expr) -{ - expr.eval(q); -} - -template <class T> -inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr<mpf_t, T> &expr) -{ - mpf_class const& temp(expr); - mpq_set_f(q, temp.get_mpf_t()); -} - -template <class T> -inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr<mpz_t, T> &expr) -{ - mpz_class const& temp(expr); - mpf_set_z(f, temp.get_mpz_t()); -} - -template <class T> -inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr<mpq_t, T> &expr) -{ - mpq_class const& temp(expr); - mpf_set_q(f, temp.get_mpq_t()); -} - -inline void __gmp_set_expr(mpf_ptr f, const mpf_class &g) -{ - mpf_set(f, g.get_mpf_t()); -} - -template <class T> -inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr<mpf_t, T> &expr) -{ - expr.eval(f); -} - - -/* Temporary objects */ - -template <class T> -class __gmp_temp -{ - __gmp_expr<T, T> val; - public: - template<class U, class V> - __gmp_temp(U const& u, V) : val (u) {} - typename __gmp_resolve_expr<T>::srcptr_type - __get_mp() const { return val.__get_mp(); } -}; - -template <> -class __gmp_temp <mpf_t> -{ - mpf_class val; - public: - template<class U> - __gmp_temp(U const& u, mpf_ptr res) : val (u, mpf_get_prec(res)) {} - mpf_srcptr __get_mp() const { return val.__get_mp(); } -}; - -/**************** Specializations of __gmp_expr ****************/ -/* The eval() method of __gmp_expr<T, U> evaluates the corresponding - expression and assigns the result to its argument, which is either an - mpz_t, mpq_t, or mpf_t as specified by the T argument. - Compound expressions are evaluated recursively (temporaries are created - to hold intermediate values), while for simple expressions the eval() - method of the appropriate function object (available as the Op argument - of either __gmp_unary_expr<T, Op> or __gmp_binary_expr<T, U, Op>) is - called. */ - - -/**************** Unary expressions ****************/ -/* cases: - - simple: argument is mp*_class, that is, __gmp_expr<T, T> - - compound: argument is __gmp_expr<T, U> (with U not equal to T) */ - - -// simple expressions - -template <class T, class Op> -class __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, T>, Op> > -{ -private: - typedef __gmp_expr<T, T> val_type; - - __gmp_unary_expr<val_type, Op> expr; -public: - explicit __gmp_expr(const val_type &val) : expr(val) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { Op::eval(p, expr.val.__get_mp()); } - const val_type & get_val() const { return expr.val; } - mp_bitcnt_t get_prec() const { return expr.val.get_prec(); } -}; - - -// simple expressions, U is a built-in numerical type - -template <class T, class U, class Op> -class __gmp_expr<T, __gmp_unary_expr<U, Op> > -{ -private: - typedef U val_type; - - __gmp_unary_expr<val_type, Op> expr; -public: - explicit __gmp_expr(const val_type &val) : expr(val) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { Op::eval(p, expr.val); } - const val_type & get_val() const { return expr.val; } - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } -}; - - -// compound expressions - -template <class T, class U, class Op> -class __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, Op> > -{ -private: - typedef __gmp_expr<T, U> val_type; - - __gmp_unary_expr<val_type, Op> expr; -public: - explicit __gmp_expr(const val_type &val) : expr(val) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { expr.val.eval(p); Op::eval(p, p); } - const val_type & get_val() const { return expr.val; } - mp_bitcnt_t get_prec() const { return expr.val.get_prec(); } -}; - - -/**************** Binary expressions ****************/ -/* simple: - - arguments are both mp*_class - - one argument is mp*_class, one is a built-in type - compound: - - one is mp*_class, one is __gmp_expr<T, U> - - one is __gmp_expr<T, U>, one is built-in - - both arguments are __gmp_expr<...> */ - - -// simple expressions - -template <class T, class Op> -class __gmp_expr -<T, __gmp_binary_expr<__gmp_expr<T, T>, __gmp_expr<T, T>, Op> > -{ -private: - typedef __gmp_expr<T, T> val1_type; - typedef __gmp_expr<T, T> val2_type; - - __gmp_binary_expr<val1_type, val2_type, Op> expr; -public: - __gmp_expr(const val1_type &val1, const val2_type &val2) - : expr(val1, val2) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { Op::eval(p, expr.val1.__get_mp(), expr.val2.__get_mp()); } - const val1_type & get_val1() const { return expr.val1; } - const val2_type & get_val2() const { return expr.val2; } - mp_bitcnt_t get_prec() const - { - mp_bitcnt_t prec1 = expr.val1.get_prec(), - prec2 = expr.val2.get_prec(); - return (prec1 > prec2) ? prec1 : prec2; - } -}; - - -// simple expressions, U is a built-in numerical type - -template <class T, class U, class Op> -class __gmp_expr<T, __gmp_binary_expr<__gmp_expr<T, T>, U, Op> > -{ -private: - typedef __gmp_expr<T, T> val1_type; - typedef U val2_type; - - __gmp_binary_expr<val1_type, val2_type, Op> expr; -public: - __gmp_expr(const val1_type &val1, const val2_type &val2) - : expr(val1, val2) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { Op::eval(p, expr.val1.__get_mp(), expr.val2); } - const val1_type & get_val1() const { return expr.val1; } - const val2_type & get_val2() const { return expr.val2; } - mp_bitcnt_t get_prec() const { return expr.val1.get_prec(); } -}; - -template <class T, class U, class Op> -class __gmp_expr<T, __gmp_binary_expr<U, __gmp_expr<T, T>, Op> > -{ -private: - typedef U val1_type; - typedef __gmp_expr<T, T> val2_type; - - __gmp_binary_expr<val1_type, val2_type, Op> expr; -public: - __gmp_expr(const val1_type &val1, const val2_type &val2) - : expr(val1, val2) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { Op::eval(p, expr.val1, expr.val2.__get_mp()); } - const val1_type & get_val1() const { return expr.val1; } - const val2_type & get_val2() const { return expr.val2; } - mp_bitcnt_t get_prec() const { return expr.val2.get_prec(); } -}; - - -// compound expressions, one argument is a subexpression - -template <class T, class U, class V, class Op> -class __gmp_expr -<T, __gmp_binary_expr<__gmp_expr<T, T>, __gmp_expr<U, V>, Op> > -{ -private: - typedef __gmp_expr<T, T> val1_type; - typedef __gmp_expr<U, V> val2_type; - - __gmp_binary_expr<val1_type, val2_type, Op> expr; -public: - __gmp_expr(const val1_type &val1, const val2_type &val2) - : expr(val1, val2) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { - if(p != expr.val1.__get_mp()) - { - __gmp_set_expr(p, expr.val2); - Op::eval(p, expr.val1.__get_mp(), p); - } - else - { - __gmp_temp<T> temp(expr.val2, p); - Op::eval(p, expr.val1.__get_mp(), temp.__get_mp()); - } - } - const val1_type & get_val1() const { return expr.val1; } - const val2_type & get_val2() const { return expr.val2; } - mp_bitcnt_t get_prec() const - { - mp_bitcnt_t prec1 = expr.val1.get_prec(), - prec2 = expr.val2.get_prec(); - return (prec1 > prec2) ? prec1 : prec2; - } -}; - -template <class T, class U, class V, class Op> -class __gmp_expr -<T, __gmp_binary_expr<__gmp_expr<U, V>, __gmp_expr<T, T>, Op> > -{ -private: - typedef __gmp_expr<U, V> val1_type; - typedef __gmp_expr<T, T> val2_type; - - __gmp_binary_expr<val1_type, val2_type, Op> expr; -public: - __gmp_expr(const val1_type &val1, const val2_type &val2) - : expr(val1, val2) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { - if(p != expr.val2.__get_mp()) - { - __gmp_set_expr(p, expr.val1); - Op::eval(p, p, expr.val2.__get_mp()); - } - else - { - __gmp_temp<T> temp(expr.val1, p); - Op::eval(p, temp.__get_mp(), expr.val2.__get_mp()); - } - } - const val1_type & get_val1() const { return expr.val1; } - const val2_type & get_val2() const { return expr.val2; } - mp_bitcnt_t get_prec() const - { - mp_bitcnt_t prec1 = expr.val1.get_prec(), - prec2 = expr.val2.get_prec(); - return (prec1 > prec2) ? prec1 : prec2; - } -}; - -template <class T, class U, class Op> -class __gmp_expr -<T, __gmp_binary_expr<__gmp_expr<T, T>, __gmp_expr<T, U>, Op> > -{ -private: - typedef __gmp_expr<T, T> val1_type; - typedef __gmp_expr<T, U> val2_type; - - __gmp_binary_expr<val1_type, val2_type, Op> expr; -public: - __gmp_expr(const val1_type &val1, const val2_type &val2) - : expr(val1, val2) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { - if(p != expr.val1.__get_mp()) - { - __gmp_set_expr(p, expr.val2); - Op::eval(p, expr.val1.__get_mp(), p); - } - else - { - __gmp_temp<T> temp(expr.val2, p); - Op::eval(p, expr.val1.__get_mp(), temp.__get_mp()); - } - } - const val1_type & get_val1() const { return expr.val1; } - const val2_type & get_val2() const { return expr.val2; } - mp_bitcnt_t get_prec() const - { - mp_bitcnt_t prec1 = expr.val1.get_prec(), - prec2 = expr.val2.get_prec(); - return (prec1 > prec2) ? prec1 : prec2; - } -}; - -template <class T, class U, class Op> -class __gmp_expr -<T, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<T, T>, Op> > -{ -private: - typedef __gmp_expr<T, U> val1_type; - typedef __gmp_expr<T, T> val2_type; - - __gmp_binary_expr<val1_type, val2_type, Op> expr; -public: - __gmp_expr(const val1_type &val1, const val2_type &val2) - : expr(val1, val2) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { - if(p != expr.val2.__get_mp()) - { - __gmp_set_expr(p, expr.val1); - Op::eval(p, p, expr.val2.__get_mp()); - } - else - { - __gmp_temp<T> temp(expr.val1, p); - Op::eval(p, temp.__get_mp(), expr.val2.__get_mp()); - } - } - const val1_type & get_val1() const { return expr.val1; } - const val2_type & get_val2() const { return expr.val2; } - mp_bitcnt_t get_prec() const - { - mp_bitcnt_t prec1 = expr.val1.get_prec(), - prec2 = expr.val2.get_prec(); - return (prec1 > prec2) ? prec1 : prec2; - } -}; - - -// one argument is a subexpression, one is a built-in - -template <class T, class U, class V, class Op> -class __gmp_expr<T, __gmp_binary_expr<__gmp_expr<T, U>, V, Op> > -{ -private: - typedef __gmp_expr<T, U> val1_type; - typedef V val2_type; - - __gmp_binary_expr<val1_type, val2_type, Op> expr; -public: - __gmp_expr(const val1_type &val1, const val2_type &val2) - : expr(val1, val2) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { - expr.val1.eval(p); - Op::eval(p, p, expr.val2); - } - const val1_type & get_val1() const { return expr.val1; } - const val2_type & get_val2() const { return expr.val2; } - mp_bitcnt_t get_prec() const { return expr.val1.get_prec(); } -}; - -template <class T, class U, class V, class Op> -class __gmp_expr<T, __gmp_binary_expr<U, __gmp_expr<T, V>, Op> > -{ -private: - typedef U val1_type; - typedef __gmp_expr<T, V> val2_type; - - __gmp_binary_expr<val1_type, val2_type, Op> expr; -public: - __gmp_expr(const val1_type &val1, const val2_type &val2) - : expr(val1, val2) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { - expr.val2.eval(p); - Op::eval(p, expr.val1, p); - } - const val1_type & get_val1() const { return expr.val1; } - const val2_type & get_val2() const { return expr.val2; } - mp_bitcnt_t get_prec() const { return expr.val2.get_prec(); } -}; - - -// both arguments are subexpressions - -template <class T, class U, class V, class W, class Op> -class __gmp_expr -<T, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, Op> > -{ -private: - typedef __gmp_expr<T, U> val1_type; - typedef __gmp_expr<V, W> val2_type; - - __gmp_binary_expr<val1_type, val2_type, Op> expr; -public: - __gmp_expr(const val1_type &val1, const val2_type &val2) - : expr(val1, val2) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { - __gmp_temp<T> temp2(expr.val2, p); - expr.val1.eval(p); - Op::eval(p, p, temp2.__get_mp()); - } - const val1_type & get_val1() const { return expr.val1; } - const val2_type & get_val2() const { return expr.val2; } - mp_bitcnt_t get_prec() const - { - mp_bitcnt_t prec1 = expr.val1.get_prec(), - prec2 = expr.val2.get_prec(); - return (prec1 > prec2) ? prec1 : prec2; - } -}; - -template <class T, class U, class V, class W, class Op> -class __gmp_expr -<T, __gmp_binary_expr<__gmp_expr<U, V>, __gmp_expr<T, W>, Op> > -{ -private: - typedef __gmp_expr<U, V> val1_type; - typedef __gmp_expr<T, W> val2_type; - - __gmp_binary_expr<val1_type, val2_type, Op> expr; -public: - __gmp_expr(const val1_type &val1, const val2_type &val2) - : expr(val1, val2) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { - __gmp_temp<T> temp1(expr.val1, p); - expr.val2.eval(p); - Op::eval(p, temp1.__get_mp(), p); - } - const val1_type & get_val1() const { return expr.val1; } - const val2_type & get_val2() const { return expr.val2; } - mp_bitcnt_t get_prec() const - { - mp_bitcnt_t prec1 = expr.val1.get_prec(), - prec2 = expr.val2.get_prec(); - return (prec1 > prec2) ? prec1 : prec2; - } -}; - -template <class T, class U, class V, class Op> -class __gmp_expr -<T, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<T, V>, Op> > -{ -private: - typedef __gmp_expr<T, U> val1_type; - typedef __gmp_expr<T, V> val2_type; - - __gmp_binary_expr<val1_type, val2_type, Op> expr; -public: - __gmp_expr(const val1_type &val1, const val2_type &val2) - : expr(val1, val2) { } - void eval(typename __gmp_resolve_expr<T>::ptr_type p) const - { - __gmp_temp<T> temp2(expr.val2, p); - expr.val1.eval(p); - Op::eval(p, p, temp2.__get_mp()); - } - const val1_type & get_val1() const { return expr.val1; } - const val2_type & get_val2() const { return expr.val2; } - mp_bitcnt_t get_prec() const - { - mp_bitcnt_t prec1 = expr.val1.get_prec(), - prec2 = expr.val2.get_prec(); - return (prec1 > prec2) ? prec1 : prec2; - } -}; - - -/**************** Special cases ****************/ - -/* Some operations (i.e., add and subtract) with mixed mpz/mpq arguments - can be done directly without first converting the mpz to mpq. - Appropriate specializations of __gmp_expr are required. */ - - -#define __GMPZQ_DEFINE_EXPR(eval_fun) \ - \ -template <> \ -class __gmp_expr<mpq_t, __gmp_binary_expr<mpz_class, mpq_class, eval_fun> > \ -{ \ -private: \ - typedef mpz_class val1_type; \ - typedef mpq_class val2_type; \ - \ - __gmp_binary_expr<val1_type, val2_type, eval_fun> expr; \ -public: \ - __gmp_expr(const val1_type &val1, const val2_type &val2) \ - : expr(val1, val2) { } \ - void eval(mpq_ptr q) const \ - { eval_fun::eval(q, expr.val1.get_mpz_t(), expr.val2.get_mpq_t()); } \ - const val1_type & get_val1() const { return expr.val1; } \ - const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ -}; \ - \ -template <> \ -class __gmp_expr<mpq_t, __gmp_binary_expr<mpq_class, mpz_class, eval_fun> > \ -{ \ -private: \ - typedef mpq_class val1_type; \ - typedef mpz_class val2_type; \ - \ - __gmp_binary_expr<val1_type, val2_type, eval_fun> expr; \ -public: \ - __gmp_expr(const val1_type &val1, const val2_type &val2) \ - : expr(val1, val2) { } \ - void eval(mpq_ptr q) const \ - { eval_fun::eval(q, expr.val1.get_mpq_t(), expr.val2.get_mpz_t()); } \ - const val1_type & get_val1() const { return expr.val1; } \ - const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ -}; \ - \ -template <class T> \ -class __gmp_expr \ -<mpq_t, __gmp_binary_expr<mpz_class, __gmp_expr<mpq_t, T>, eval_fun> > \ -{ \ -private: \ - typedef mpz_class val1_type; \ - typedef __gmp_expr<mpq_t, T> val2_type; \ - \ - __gmp_binary_expr<val1_type, val2_type, eval_fun> expr; \ -public: \ - __gmp_expr(const val1_type &val1, const val2_type &val2) \ - : expr(val1, val2) { } \ - void eval(mpq_ptr q) const \ - { \ - mpq_class temp(expr.val2); \ - eval_fun::eval(q, expr.val1.get_mpz_t(), temp.get_mpq_t()); \ - } \ - const val1_type & get_val1() const { return expr.val1; } \ - const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ -}; \ - \ -template <class T> \ -class __gmp_expr \ -<mpq_t, __gmp_binary_expr<mpq_class, __gmp_expr<mpz_t, T>, eval_fun> > \ -{ \ -private: \ - typedef mpq_class val1_type; \ - typedef __gmp_expr<mpz_t, T> val2_type; \ - \ - __gmp_binary_expr<val1_type, val2_type, eval_fun> expr; \ -public: \ - __gmp_expr(const val1_type &val1, const val2_type &val2) \ - : expr(val1, val2) { } \ - void eval(mpq_ptr q) const \ - { \ - mpz_class temp(expr.val2); \ - eval_fun::eval(q, expr.val1.get_mpq_t(), temp.get_mpz_t()); \ - } \ - const val1_type & get_val1() const { return expr.val1; } \ - const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ -}; \ - \ -template <class T> \ -class __gmp_expr \ -<mpq_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, mpq_class, eval_fun> > \ -{ \ -private: \ - typedef __gmp_expr<mpz_t, T> val1_type; \ - typedef mpq_class val2_type; \ - \ - __gmp_binary_expr<val1_type, val2_type, eval_fun> expr; \ -public: \ - __gmp_expr(const val1_type &val1, const val2_type &val2) \ - : expr(val1, val2) { } \ - void eval(mpq_ptr q) const \ - { \ - mpz_class temp(expr.val1); \ - eval_fun::eval(q, temp.get_mpz_t(), expr.val2.get_mpq_t()); \ - } \ - const val1_type & get_val1() const { return expr.val1; } \ - const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ -}; \ - \ -template <class T> \ -class __gmp_expr \ -<mpq_t, __gmp_binary_expr<__gmp_expr<mpq_t, T>, mpz_class, eval_fun> > \ -{ \ -private: \ - typedef __gmp_expr<mpq_t, T> val1_type; \ - typedef mpz_class val2_type; \ - \ - __gmp_binary_expr<val1_type, val2_type, eval_fun> expr; \ -public: \ - __gmp_expr(const val1_type &val1, const val2_type &val2) \ - : expr(val1, val2) { } \ - void eval(mpq_ptr q) const \ - { \ - mpq_class temp(expr.val1); \ - eval_fun::eval(q, temp.get_mpq_t(), expr.val2.get_mpz_t()); \ - } \ - const val1_type & get_val1() const { return expr.val1; } \ - const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ -}; \ - \ -template <class T, class U> \ -class __gmp_expr<mpq_t, __gmp_binary_expr \ -<__gmp_expr<mpz_t, T>, __gmp_expr<mpq_t, U>, eval_fun> > \ -{ \ -private: \ - typedef __gmp_expr<mpz_t, T> val1_type; \ - typedef __gmp_expr<mpq_t, U> val2_type; \ - \ - __gmp_binary_expr<val1_type, val2_type, eval_fun> expr; \ -public: \ - __gmp_expr(const val1_type &val1, const val2_type &val2) \ - : expr(val1, val2) { } \ - void eval(mpq_ptr q) const \ - { \ - mpz_class temp1(expr.val1); \ - expr.val2.eval(q); \ - eval_fun::eval(q, temp1.get_mpz_t(), q); \ - } \ - const val1_type & get_val1() const { return expr.val1; } \ - const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ -}; \ - \ -template <class T, class U> \ -class __gmp_expr<mpq_t, __gmp_binary_expr \ -<__gmp_expr<mpq_t, T>, __gmp_expr<mpz_t, U>, eval_fun> > \ -{ \ -private: \ - typedef __gmp_expr<mpq_t, T> val1_type; \ - typedef __gmp_expr<mpz_t, U> val2_type; \ - \ - __gmp_binary_expr<val1_type, val2_type, eval_fun> expr; \ -public: \ - __gmp_expr(const val1_type &val1, const val2_type &val2) \ - : expr(val1, val2) { } \ - void eval(mpq_ptr q) const \ - { \ - mpz_class temp2(expr.val2); \ - expr.val1.eval(q); \ - eval_fun::eval(q, q, temp2.get_mpz_t()); \ - } \ - const val1_type & get_val1() const { return expr.val1; } \ - const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ -}; - - -__GMPZQ_DEFINE_EXPR(__gmp_binary_plus) -__GMPZQ_DEFINE_EXPR(__gmp_binary_minus) - - - -/**************** Macros for defining functions ****************/ -/* Results of operators and functions are instances of __gmp_expr<T, U>. - T determines the numerical type of the expression: it can be either - mpz_t, mpq_t, or mpf_t. When the arguments of a binary - expression have different numerical types, __gmp_resolve_expr is used - to determine the "larger" type. - U is either __gmp_unary_expr<V, Op> or __gmp_binary_expr<V, W, Op>, - where V and W are the arguments' types -- they can in turn be - expressions, thus allowing to build compound expressions to any - degree of complexity. - Op is a function object that must have an eval() method accepting - appropriate arguments. - Actual evaluation of a __gmp_expr<T, U> object is done when it gets - assigned to an mp*_class ("lazy" evaluation): this is done by calling - its eval() method. */ - - -// non-member unary operators and functions - -#define __GMP_DEFINE_UNARY_FUNCTION(fun, eval_fun) \ - \ -template <class T, class U> \ -inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, eval_fun> > \ -fun(const __gmp_expr<T, U> &expr) \ -{ \ - return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, eval_fun> >(expr); \ -} - -#define __GMP_DEFINE_UNARY_TYPE_FUNCTION(type, fun, eval_fun) \ - \ -template <class T, class U> \ -inline type fun(const __gmp_expr<T, U> &expr) \ -{ \ - __gmp_expr<T, T> const& temp(expr); \ - return eval_fun::eval(temp.__get_mp()); \ -} - - -// non-member binary operators and functions - -#define __GMPP_DEFINE_BINARY_FUNCTION(fun, eval_fun) \ - \ -template <class T, class U, class V, class W> \ -inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, \ -__gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, eval_fun> > \ -fun(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) \ -{ \ - return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, \ - __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, eval_fun> > \ - (expr1, expr2); \ -} - -#define __GMPNN_DEFINE_BINARY_FUNCTION(fun, eval_fun, type, bigtype) \ - \ -template <class T, class U> \ -inline __gmp_expr \ -<T, __gmp_binary_expr<__gmp_expr<T, U>, bigtype, eval_fun> > \ -fun(const __gmp_expr<T, U> &expr, type t) \ -{ \ - return __gmp_expr \ - <T, __gmp_binary_expr<__gmp_expr<T, U>, bigtype, eval_fun> >(expr, t); \ -} \ - \ -template <class T, class U> \ -inline __gmp_expr \ -<T, __gmp_binary_expr<bigtype, __gmp_expr<T, U>, eval_fun> > \ -fun(type t, const __gmp_expr<T, U> &expr) \ -{ \ - return __gmp_expr \ - <T, __gmp_binary_expr<bigtype, __gmp_expr<T, U>, eval_fun> >(t, expr); \ -} - -#define __GMPNS_DEFINE_BINARY_FUNCTION(fun, eval_fun, type) \ -__GMPNN_DEFINE_BINARY_FUNCTION(fun, eval_fun, type, signed long int) - -#define __GMPNU_DEFINE_BINARY_FUNCTION(fun, eval_fun, type) \ -__GMPNN_DEFINE_BINARY_FUNCTION(fun, eval_fun, type, unsigned long int) - -#define __GMPND_DEFINE_BINARY_FUNCTION(fun, eval_fun, type) \ -__GMPNN_DEFINE_BINARY_FUNCTION(fun, eval_fun, type, double) - -#define __GMPNLD_DEFINE_BINARY_FUNCTION(fun, eval_fun, type) \ -__GMPNN_DEFINE_BINARY_FUNCTION(fun, eval_fun, type, long double) - -#define __GMPN_DEFINE_BINARY_FUNCTION(fun, eval_fun) \ -__GMPNS_DEFINE_BINARY_FUNCTION(fun, eval_fun, signed char) \ -__GMPNU_DEFINE_BINARY_FUNCTION(fun, eval_fun, unsigned char) \ -__GMPNS_DEFINE_BINARY_FUNCTION(fun, eval_fun, signed int) \ -__GMPNU_DEFINE_BINARY_FUNCTION(fun, eval_fun, unsigned int) \ -__GMPNS_DEFINE_BINARY_FUNCTION(fun, eval_fun, signed short int) \ -__GMPNU_DEFINE_BINARY_FUNCTION(fun, eval_fun, unsigned short int) \ -__GMPNS_DEFINE_BINARY_FUNCTION(fun, eval_fun, signed long int) \ -__GMPNU_DEFINE_BINARY_FUNCTION(fun, eval_fun, unsigned long int) \ -__GMPND_DEFINE_BINARY_FUNCTION(fun, eval_fun, float) \ -__GMPND_DEFINE_BINARY_FUNCTION(fun, eval_fun, double) \ -/* __GMPNLD_DEFINE_BINARY_FUNCTION(fun, eval_fun, long double) */ - -#define __GMP_DEFINE_BINARY_FUNCTION(fun, eval_fun) \ -__GMPP_DEFINE_BINARY_FUNCTION(fun, eval_fun) \ -__GMPN_DEFINE_BINARY_FUNCTION(fun, eval_fun) - - -#define __GMP_DEFINE_BINARY_FUNCTION_UI(fun, eval_fun) \ - \ -template <class T, class U> \ -inline __gmp_expr \ -<T, __gmp_binary_expr<__gmp_expr<T, U>, mp_bitcnt_t, eval_fun> > \ -fun(const __gmp_expr<T, U> &expr, mp_bitcnt_t l) \ -{ \ - return __gmp_expr<T, __gmp_binary_expr \ - <__gmp_expr<T, U>, mp_bitcnt_t, eval_fun> >(expr, l); \ -} - - -#define __GMPP_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun) \ - \ -template <class T, class U, class V, class W> \ -inline type fun(const __gmp_expr<T, U> &expr1, \ - const __gmp_expr<V, W> &expr2) \ -{ \ - __gmp_expr<T, T> const& temp1(expr1); \ - __gmp_expr<V, V> const& temp2(expr2); \ - return eval_fun::eval(temp1.__get_mp(), temp2.__get_mp()); \ -} - -#define __GMPNN_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, \ - type2, bigtype) \ - \ -template <class T, class U> \ -inline type fun(const __gmp_expr<T, U> &expr, type2 t) \ -{ \ - __gmp_expr<T, T> const& temp(expr); \ - return eval_fun::eval(temp.__get_mp(), static_cast<bigtype>(t)); \ -} \ - \ -template <class T, class U> \ -inline type fun(type2 t, const __gmp_expr<T, U> &expr) \ -{ \ - __gmp_expr<T, T> const& temp(expr); \ - return eval_fun::eval(static_cast<bigtype>(t), temp.__get_mp()); \ -} - -#define __GMPNS_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, type2) \ -__GMPNN_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, \ - type2, signed long int) - -#define __GMPNU_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, type2) \ -__GMPNN_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, \ - type2, unsigned long int) - -#define __GMPND_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, type2) \ -__GMPNN_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, type2, double) - -#define __GMPNLD_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, type2) \ -__GMPNN_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, type2, long double) - -#define __GMPN_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun) \ -__GMPNS_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, signed char) \ -__GMPNU_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, unsigned char) \ -__GMPNS_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, signed int) \ -__GMPNU_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, unsigned int) \ -__GMPNS_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, signed short int) \ -__GMPNU_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, unsigned short int) \ -__GMPNS_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, signed long int) \ -__GMPNU_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, unsigned long int) \ -__GMPND_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, float) \ -__GMPND_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, double) \ -/* __GMPNLD_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun, long double) */ - -#define __GMP_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun) \ -__GMPP_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun) \ -__GMPN_DEFINE_BINARY_TYPE_FUNCTION(type, fun, eval_fun) - - -// member operators - -#define __GMPP_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun) \ - \ -template <class T, class U> \ -inline type##_class & type##_class::fun(const __gmp_expr<T, U> &expr) \ -{ \ - __gmp_set_expr(mp, __gmp_expr<type##_t, __gmp_binary_expr \ - <type##_class, __gmp_expr<T, U>, eval_fun> >(*this, expr)); \ - return *this; \ -} - -#define __GMPNN_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, \ - type2, bigtype) \ - \ -inline type##_class & type##_class::fun(type2 t) \ -{ \ - __gmp_set_expr(mp, __gmp_expr<type##_t, __gmp_binary_expr \ - <type##_class, bigtype, eval_fun> >(*this, t)); \ - return *this; \ -} - -#define __GMPNS_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, type2) \ -__GMPNN_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, \ - type2, signed long int) - -#define __GMPNU_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, type2) \ -__GMPNN_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, \ - type2, unsigned long int) - -#define __GMPND_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, type2) \ -__GMPNN_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, type2, double) - -#define __GMPNLD_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, type2) \ -__GMPNN_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, type2, long double) - -#define __GMPN_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun) \ -__GMPNS_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, signed char) \ -__GMPNU_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, unsigned char) \ -__GMPNS_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, signed int) \ -__GMPNU_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, unsigned int) \ -__GMPNS_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, signed short int) \ -__GMPNU_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, unsigned short int) \ -__GMPNS_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, signed long int) \ -__GMPNU_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, unsigned long int) \ -__GMPND_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, float) \ -__GMPND_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, double) \ -/* __GMPNLD_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun, long double) */ - -#define __GMP_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun) \ -__GMPP_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun) \ -__GMPN_DEFINE_COMPOUND_OPERATOR(type, fun, eval_fun) - -#define __GMPZ_DEFINE_COMPOUND_OPERATOR(fun, eval_fun) \ -__GMP_DEFINE_COMPOUND_OPERATOR(mpz, fun, eval_fun) - -#define __GMPQ_DEFINE_COMPOUND_OPERATOR(fun, eval_fun) \ -__GMP_DEFINE_COMPOUND_OPERATOR(mpq, fun, eval_fun) - -#define __GMPF_DEFINE_COMPOUND_OPERATOR(fun, eval_fun) \ -__GMP_DEFINE_COMPOUND_OPERATOR(mpf, fun, eval_fun) - - - -#define __GMP_DEFINE_COMPOUND_OPERATOR_UI(type, fun, eval_fun) \ - \ -inline type##_class & type##_class::fun(mp_bitcnt_t l) \ -{ \ - __gmp_set_expr(mp, __gmp_expr<type##_t, __gmp_binary_expr \ - <type##_class, mp_bitcnt_t, eval_fun> >(*this, l)); \ - return *this; \ -} - -#define __GMPZ_DEFINE_COMPOUND_OPERATOR_UI(fun, eval_fun) \ -__GMP_DEFINE_COMPOUND_OPERATOR_UI(mpz, fun, eval_fun) - -#define __GMPQ_DEFINE_COMPOUND_OPERATOR_UI(fun, eval_fun) \ -__GMP_DEFINE_COMPOUND_OPERATOR_UI(mpq, fun, eval_fun) - -#define __GMPF_DEFINE_COMPOUND_OPERATOR_UI(fun, eval_fun) \ -__GMP_DEFINE_COMPOUND_OPERATOR_UI(mpf, fun, eval_fun) - - - -#define __GMP_DEFINE_INCREMENT_OPERATOR(type, fun, eval_fun) \ - \ -inline type##_class & type##_class::fun() \ -{ \ - eval_fun::eval(mp); \ - return *this; \ -} \ - \ -inline type##_class type##_class::fun(int) \ -{ \ - type##_class temp(*this); \ - eval_fun::eval(mp); \ - return temp; \ -} - -#define __GMPZ_DEFINE_INCREMENT_OPERATOR(fun, eval_fun) \ -__GMP_DEFINE_INCREMENT_OPERATOR(mpz, fun, eval_fun) - -#define __GMPQ_DEFINE_INCREMENT_OPERATOR(fun, eval_fun) \ -__GMP_DEFINE_INCREMENT_OPERATOR(mpq, fun, eval_fun) - -#define __GMPF_DEFINE_INCREMENT_OPERATOR(fun, eval_fun) \ -__GMP_DEFINE_INCREMENT_OPERATOR(mpf, fun, eval_fun) - - - -/**************** Arithmetic operators and functions ****************/ - -// non-member operators and functions - -__GMP_DEFINE_UNARY_FUNCTION(operator+, __gmp_unary_plus) -__GMP_DEFINE_UNARY_FUNCTION(operator-, __gmp_unary_minus) -__GMP_DEFINE_UNARY_FUNCTION(operator~, __gmp_unary_com) - -__GMP_DEFINE_BINARY_FUNCTION(operator+, __gmp_binary_plus) -__GMP_DEFINE_BINARY_FUNCTION(operator-, __gmp_binary_minus) -__GMP_DEFINE_BINARY_FUNCTION(operator*, __gmp_binary_multiplies) -__GMP_DEFINE_BINARY_FUNCTION(operator/, __gmp_binary_divides) -__GMP_DEFINE_BINARY_FUNCTION(operator%, __gmp_binary_modulus) -__GMP_DEFINE_BINARY_FUNCTION(operator&, __gmp_binary_and) -__GMP_DEFINE_BINARY_FUNCTION(operator|, __gmp_binary_ior) -__GMP_DEFINE_BINARY_FUNCTION(operator^, __gmp_binary_xor) - -__GMP_DEFINE_BINARY_FUNCTION_UI(operator<<, __gmp_binary_lshift) -__GMP_DEFINE_BINARY_FUNCTION_UI(operator>>, __gmp_binary_rshift) - -__GMP_DEFINE_BINARY_TYPE_FUNCTION(bool, operator==, __gmp_binary_equal) -__GMP_DEFINE_BINARY_TYPE_FUNCTION(bool, operator!=, ! __gmp_binary_equal) -__GMP_DEFINE_BINARY_TYPE_FUNCTION(bool, operator<, __gmp_binary_less) -__GMP_DEFINE_BINARY_TYPE_FUNCTION(bool, operator<=, ! __gmp_binary_greater) -__GMP_DEFINE_BINARY_TYPE_FUNCTION(bool, operator>, __gmp_binary_greater) -__GMP_DEFINE_BINARY_TYPE_FUNCTION(bool, operator>=, ! __gmp_binary_less) - -__GMP_DEFINE_UNARY_FUNCTION(abs, __gmp_abs_function) -__GMP_DEFINE_UNARY_FUNCTION(trunc, __gmp_trunc_function) -__GMP_DEFINE_UNARY_FUNCTION(floor, __gmp_floor_function) -__GMP_DEFINE_UNARY_FUNCTION(ceil, __gmp_ceil_function) -__GMP_DEFINE_UNARY_FUNCTION(sqrt, __gmp_sqrt_function) -__GMP_DEFINE_BINARY_FUNCTION(hypot, __gmp_hypot_function) -__GMP_DEFINE_BINARY_FUNCTION(gcd, __gmp_gcd_function) -__GMP_DEFINE_BINARY_FUNCTION(lcm, __gmp_lcm_function) - -__GMP_DEFINE_UNARY_TYPE_FUNCTION(int, sgn, __gmp_sgn_function) -__GMP_DEFINE_BINARY_TYPE_FUNCTION(int, cmp, __gmp_cmp_function) - -template <class T> -void swap(__gmp_expr<T, T>& x, __gmp_expr<T, T>& y) __GMPXX_NOEXCEPT -{ x.swap(y); } - -// member operators for mpz_class - -__GMPZ_DEFINE_COMPOUND_OPERATOR(operator+=, __gmp_binary_plus) -__GMPZ_DEFINE_COMPOUND_OPERATOR(operator-=, __gmp_binary_minus) -__GMPZ_DEFINE_COMPOUND_OPERATOR(operator*=, __gmp_binary_multiplies) -__GMPZ_DEFINE_COMPOUND_OPERATOR(operator/=, __gmp_binary_divides) -__GMPZ_DEFINE_COMPOUND_OPERATOR(operator%=, __gmp_binary_modulus) - -__GMPZ_DEFINE_COMPOUND_OPERATOR(operator&=, __gmp_binary_and) -__GMPZ_DEFINE_COMPOUND_OPERATOR(operator|=, __gmp_binary_ior) -__GMPZ_DEFINE_COMPOUND_OPERATOR(operator^=, __gmp_binary_xor) - -__GMPZ_DEFINE_COMPOUND_OPERATOR_UI(operator<<=, __gmp_binary_lshift) -__GMPZ_DEFINE_COMPOUND_OPERATOR_UI(operator>>=, __gmp_binary_rshift) - -__GMPZ_DEFINE_INCREMENT_OPERATOR(operator++, __gmp_unary_increment) -__GMPZ_DEFINE_INCREMENT_OPERATOR(operator--, __gmp_unary_decrement) - -// member operators for mpq_class - -__GMPQ_DEFINE_COMPOUND_OPERATOR(operator+=, __gmp_binary_plus) -__GMPQ_DEFINE_COMPOUND_OPERATOR(operator-=, __gmp_binary_minus) -__GMPQ_DEFINE_COMPOUND_OPERATOR(operator*=, __gmp_binary_multiplies) -__GMPQ_DEFINE_COMPOUND_OPERATOR(operator/=, __gmp_binary_divides) - -__GMPQ_DEFINE_COMPOUND_OPERATOR_UI(operator<<=, __gmp_binary_lshift) -__GMPQ_DEFINE_COMPOUND_OPERATOR_UI(operator>>=, __gmp_binary_rshift) - -__GMPQ_DEFINE_INCREMENT_OPERATOR(operator++, __gmp_unary_increment) -__GMPQ_DEFINE_INCREMENT_OPERATOR(operator--, __gmp_unary_decrement) - -// member operators for mpf_class - -__GMPF_DEFINE_COMPOUND_OPERATOR(operator+=, __gmp_binary_plus) -__GMPF_DEFINE_COMPOUND_OPERATOR(operator-=, __gmp_binary_minus) -__GMPF_DEFINE_COMPOUND_OPERATOR(operator*=, __gmp_binary_multiplies) -__GMPF_DEFINE_COMPOUND_OPERATOR(operator/=, __gmp_binary_divides) - -__GMPF_DEFINE_COMPOUND_OPERATOR_UI(operator<<=, __gmp_binary_lshift) -__GMPF_DEFINE_COMPOUND_OPERATOR_UI(operator>>=, __gmp_binary_rshift) - -__GMPF_DEFINE_INCREMENT_OPERATOR(operator++, __gmp_unary_increment) -__GMPF_DEFINE_INCREMENT_OPERATOR(operator--, __gmp_unary_decrement) - - - -/**************** Class wrapper for gmp_randstate_t ****************/ - -class __gmp_urandomb_value { }; -class __gmp_urandomm_value { }; - -template <> -class __gmp_expr<mpz_t, __gmp_urandomb_value> -{ -private: - __gmp_randstate_struct *state; - mp_bitcnt_t bits; -public: - __gmp_expr(gmp_randstate_t s, mp_bitcnt_t l) : state(s), bits(l) { } - void eval(mpz_ptr z) const { __gmp_rand_function::eval(z, state, bits); } - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } -}; - -template <> -class __gmp_expr<mpz_t, __gmp_urandomm_value> -{ -private: - __gmp_randstate_struct *state; - mpz_class range; -public: - __gmp_expr(gmp_randstate_t s, const mpz_class &z) : state(s), range(z) { } - void eval(mpz_ptr z) const - { __gmp_rand_function::eval(z, state, range.get_mpz_t()); } - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } -}; - -template <> -class __gmp_expr<mpf_t, __gmp_urandomb_value> -{ -private: - __gmp_randstate_struct *state; - mp_bitcnt_t bits; -public: - __gmp_expr(gmp_randstate_t s, mp_bitcnt_t l) : state(s), bits(l) { } - void eval(mpf_ptr f) const - { - __gmp_rand_function::eval(f, state, - (bits>0) ? bits : mpf_get_prec(f)); - } - mp_bitcnt_t get_prec() const - { - if (bits == 0) - return mpf_get_default_prec(); - else - return bits; - } -}; - -extern "C" { - typedef void __gmp_randinit_default_t (gmp_randstate_t); - typedef void __gmp_randinit_lc_2exp_t (gmp_randstate_t, mpz_srcptr, unsigned long int, mp_bitcnt_t); - typedef int __gmp_randinit_lc_2exp_size_t (gmp_randstate_t, mp_bitcnt_t); -} - -class gmp_randclass -{ -private: - gmp_randstate_t state; - - // copy construction and assignment not allowed - gmp_randclass(const gmp_randclass &); - void operator=(const gmp_randclass &); -public: - // constructors and destructor - gmp_randclass(gmp_randalg_t alg, unsigned long int size) - { - switch (alg) - { - case GMP_RAND_ALG_LC: // no other cases for now - default: - gmp_randinit(state, alg, size); - break; - } - } - - // gmp_randinit_default - gmp_randclass(__gmp_randinit_default_t* f) { f(state); } - - // gmp_randinit_lc_2exp - gmp_randclass(__gmp_randinit_lc_2exp_t* f, - mpz_class z, unsigned long int l1, mp_bitcnt_t l2) - { f(state, z.get_mpz_t(), l1, l2); } - - // gmp_randinit_lc_2exp_size - gmp_randclass(__gmp_randinit_lc_2exp_size_t* f, - mp_bitcnt_t size) - { - if (f (state, size) == 0) - throw std::length_error ("gmp_randinit_lc_2exp_size"); - } - - ~gmp_randclass() { gmp_randclear(state); } - - // initialize - void seed(); // choose a random seed some way (?) - void seed(unsigned long int s) { gmp_randseed_ui(state, s); } - void seed(const mpz_class &z) { gmp_randseed(state, z.get_mpz_t()); } - - // get random number - __gmp_expr<mpz_t, __gmp_urandomb_value> get_z_bits(mp_bitcnt_t l) - { return __gmp_expr<mpz_t, __gmp_urandomb_value>(state, l); } - __gmp_expr<mpz_t, __gmp_urandomb_value> get_z_bits(const mpz_class &z) - { return get_z_bits(z.get_ui()); } - // FIXME: z.get_bitcnt_t() ? - - __gmp_expr<mpz_t, __gmp_urandomm_value> get_z_range(const mpz_class &z) - { return __gmp_expr<mpz_t, __gmp_urandomm_value>(state, z); } - - __gmp_expr<mpf_t, __gmp_urandomb_value> get_f(mp_bitcnt_t prec = 0) - { return __gmp_expr<mpf_t, __gmp_urandomb_value>(state, prec); } -}; - - -/**************** Specialize std::numeric_limits ****************/ - -namespace std { - template <> class numeric_limits<mpz_class> - { - public: - static const bool is_specialized = true; - static mpz_class min() { return mpz_class(); } - static mpz_class max() { return mpz_class(); } - static mpz_class lowest() { return mpz_class(); } - static const int digits = 0; - static const int digits10 = 0; - static const int max_digits10 = 0; - static const bool is_signed = true; - static const bool is_integer = true; - static const bool is_exact = true; - static const int radix = 2; - static mpz_class epsilon() { return mpz_class(); } - static mpz_class round_error() { return mpz_class(); } - static const int min_exponent = 0; - static const int min_exponent10 = 0; - static const int max_exponent = 0; - static const int max_exponent10 = 0; - static const bool has_infinity = false; - static const bool has_quiet_NaN = false; - static const bool has_signaling_NaN = false; - static const float_denorm_style has_denorm = denorm_absent; - static const bool has_denorm_loss = false; - static mpz_class infinity() { return mpz_class(); } - static mpz_class quiet_NaN() { return mpz_class(); } - static mpz_class signaling_NaN() { return mpz_class(); } - static mpz_class denorm_min() { return mpz_class(); } - static const bool is_iec559 = false; - static const bool is_bounded = false; - static const bool is_modulo = false; - static const bool traps = false; - static const bool tinyness_before = false; - static const float_round_style round_style = round_toward_zero; - }; - - template <> class numeric_limits<mpq_class> - { - public: - static const bool is_specialized = true; - static mpq_class min() { return mpq_class(); } - static mpq_class max() { return mpq_class(); } - static mpq_class lowest() { return mpq_class(); } - static const int digits = 0; - static const int digits10 = 0; - static const int max_digits10 = 0; - static const bool is_signed = true; - static const bool is_integer = false; - static const bool is_exact = true; - static const int radix = 2; - static mpq_class epsilon() { return mpq_class(); } - static mpq_class round_error() { return mpq_class(); } - static const int min_exponent = 0; - static const int min_exponent10 = 0; - static const int max_exponent = 0; - static const int max_exponent10 = 0; - static const bool has_infinity = false; - static const bool has_quiet_NaN = false; - static const bool has_signaling_NaN = false; - static const float_denorm_style has_denorm = denorm_absent; - static const bool has_denorm_loss = false; - static mpq_class infinity() { return mpq_class(); } - static mpq_class quiet_NaN() { return mpq_class(); } - static mpq_class signaling_NaN() { return mpq_class(); } - static mpq_class denorm_min() { return mpq_class(); } - static const bool is_iec559 = false; - static const bool is_bounded = false; - static const bool is_modulo = false; - static const bool traps = false; - static const bool tinyness_before = false; - static const float_round_style round_style = round_toward_zero; - }; - - template <> class numeric_limits<mpf_class> - { - public: - static const bool is_specialized = true; - static mpf_class min() { return mpf_class(); } - static mpf_class max() { return mpf_class(); } - static mpf_class lowest() { return mpf_class(); } - static const int digits = 0; - static const int digits10 = 0; - static const int max_digits10 = 0; - static const bool is_signed = true; - static const bool is_integer = false; - static const bool is_exact = false; - static const int radix = 2; - static mpf_class epsilon() { return mpf_class(); } - static mpf_class round_error() { return mpf_class(); } - static const int min_exponent = 0; - static const int min_exponent10 = 0; - static const int max_exponent = 0; - static const int max_exponent10 = 0; - static const bool has_infinity = false; - static const bool has_quiet_NaN = false; - static const bool has_signaling_NaN = false; - static const float_denorm_style has_denorm = denorm_absent; - static const bool has_denorm_loss = false; - static mpf_class infinity() { return mpf_class(); } - static mpf_class quiet_NaN() { return mpf_class(); } - static mpf_class signaling_NaN() { return mpf_class(); } - static mpf_class denorm_min() { return mpf_class(); } - static const bool is_iec559 = false; - static const bool is_bounded = false; - static const bool is_modulo = false; - static const bool traps = false; - static const bool tinyness_before = false; - static const float_round_style round_style = round_indeterminate; - }; -} - - -/**************** #undef all private macros ****************/ - -#undef __GMPP_DECLARE_COMPOUND_OPERATOR -#undef __GMPN_DECLARE_COMPOUND_OPERATOR -#undef __GMP_DECLARE_COMPOUND_OPERATOR -#undef __GMP_DECLARE_COMPOUND_OPERATOR_UI -#undef __GMP_DECLARE_INCREMENT_OPERATOR -#undef __GMPXX_DEFINE_ARITHMETIC_CONSTRUCTORS -#undef __GMPXX_DEFINE_ARITHMETIC_ASSIGNMENTS - -#undef __GMPZQ_DEFINE_EXPR - -#undef __GMP_DEFINE_UNARY_FUNCTION -#undef __GMP_DEFINE_UNARY_TYPE_FUNCTION - -#undef __GMPP_DEFINE_BINARY_FUNCTION -#undef __GMPNN_DEFINE_BINARY_FUNCTION -#undef __GMPNS_DEFINE_BINARY_FUNCTION -#undef __GMPNU_DEFINE_BINARY_FUNCTION -#undef __GMPND_DEFINE_BINARY_FUNCTION -#undef __GMPNLD_DEFINE_BINARY_FUNCTION -#undef __GMPN_DEFINE_BINARY_FUNCTION -#undef __GMP_DEFINE_BINARY_FUNCTION - -#undef __GMP_DEFINE_BINARY_FUNCTION_UI - -#undef __GMPP_DEFINE_BINARY_TYPE_FUNCTION -#undef __GMPNN_DEFINE_BINARY_TYPE_FUNCTION -#undef __GMPNS_DEFINE_BINARY_TYPE_FUNCTION -#undef __GMPNU_DEFINE_BINARY_TYPE_FUNCTION -#undef __GMPND_DEFINE_BINARY_TYPE_FUNCTION -#undef __GMPNLD_DEFINE_BINARY_TYPE_FUNCTION -#undef __GMPN_DEFINE_BINARY_TYPE_FUNCTION -#undef __GMP_DEFINE_BINARY_TYPE_FUNCTION - -#undef __GMPZ_DEFINE_COMPOUND_OPERATOR - -#undef __GMPP_DEFINE_COMPOUND_OPERATOR -#undef __GMPNN_DEFINE_COMPOUND_OPERATOR -#undef __GMPNS_DEFINE_COMPOUND_OPERATOR -#undef __GMPNU_DEFINE_COMPOUND_OPERATOR -#undef __GMPND_DEFINE_COMPOUND_OPERATOR -#undef __GMPNLD_DEFINE_COMPOUND_OPERATOR -#undef __GMPN_DEFINE_COMPOUND_OPERATOR -#undef __GMP_DEFINE_COMPOUND_OPERATOR - -#undef __GMPQ_DEFINE_COMPOUND_OPERATOR -#undef __GMPF_DEFINE_COMPOUND_OPERATOR - -#undef __GMP_DEFINE_COMPOUND_OPERATOR_UI -#undef __GMPZ_DEFINE_COMPOUND_OPERATOR_UI -#undef __GMPQ_DEFINE_COMPOUND_OPERATOR_UI -#undef __GMPF_DEFINE_COMPOUND_OPERATOR_UI - -#undef __GMP_DEFINE_INCREMENT_OPERATOR -#undef __GMPZ_DEFINE_INCREMENT_OPERATOR -#undef __GMPQ_DEFINE_INCREMENT_OPERATOR -#undef __GMPF_DEFINE_INCREMENT_OPERATOR - -#undef __GMPXX_CONSTANT_TRUE -#undef __GMPXX_CONSTANT - -#endif /* __GMP_PLUSPLUS__ */ diff --git a/src/plugins/e-acsl/contrib/libgmp/install-sh b/src/plugins/e-acsl/contrib/libgmp/install-sh deleted file mode 100755 index 0b0fdcbba69ab6dd05ca162a5328828d46ab1d54..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/install-sh +++ /dev/null @@ -1,501 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2013-12-25.23; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# 'make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -tab=' ' -nl=' -' -IFS=" $tab$nl" - -# Set DOITPROG to "echo" to test this script. - -doit=${DOITPROG-} -doit_exec=${doit:-exec} - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -is_target_a_directory=possibly - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) - is_target_a_directory=always - dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; - - -T) is_target_a_directory=never;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -# We allow the use of options -d and -T together, by making -d -# take the precedence; this is for compatibility with GNU install. - -if test -n "$dir_arg"; then - if test -n "$dst_arg"; then - echo "$0: target directory not allowed when installing a directory." >&2 - exit 1 - fi -fi - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call 'install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - if test $# -gt 1 || test "$is_target_a_directory" = always; then - if test ! -d "$dst_arg"; then - echo "$0: $dst_arg: Is not a directory." >&2 - exit 1 - fi - fi -fi - -if test -z "$dir_arg"; then - do_exit='(exit $ret); exit $ret' - trap "ret=129; $do_exit" 1 - trap "ret=130; $do_exit" 2 - trap "ret=141; $do_exit" 13 - trap "ret=143; $do_exit" 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names problematic for 'test' and other utilities. - case $src in - -* | [=\(\)!]) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - dst=$dst_arg - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test "$is_target_a_directory" = never; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - dstdir=`dirname "$dst"` - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - [-=\(\)!]*) prefix='./';; - *) prefix='';; - esac - - oIFS=$IFS - IFS=/ - set -f - set fnord $dstdir - shift - set +f - IFS=$oIFS - - prefixes= - - for d - do - test X"$d" = X && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - set +f && - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/src/plugins/e-acsl/contrib/libgmp/invalid.c b/src/plugins/e-acsl/contrib/libgmp/invalid.c deleted file mode 100644 index 81d6720c0ddc5e1e0667a3bb9c998aaef43a2bd7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/invalid.c +++ /dev/null @@ -1,83 +0,0 @@ -/* __gmp_invalid_operation -- invalid floating point operation. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "config.h" - -#include <signal.h> -#include <stdlib.h> - -#if HAVE_UNISTD_H -#include <unistd.h> /* for getpid */ -#endif - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Incidentally, kill is not available on mingw, but that's ok, it has raise - and we'll be using that. */ -#if ! HAVE_RAISE -#define raise(sig) kill (getpid(), sig) -#endif - - -/* __gmp_invalid_operation is for an invalid floating point operation, like - mpz_set_d on a NaN or Inf. It's done as a subroutine to minimize code in - places raising an exception. - - feraiseexcept(FE_INVALID) is not used here, since unfortunately on most - systems it would require libm. - - Alternatives: - - It might be possible to check whether a hardware "invalid operation" trap - is enabled or not before raising a signal. This would require all - callers to be prepared to continue with some bogus result. Bogus returns - are bad, but presumably an application disabling the trap is prepared for - that. - - On some systems (eg. BSD) the signal handler can find out the reason for - a SIGFPE (overflow, invalid, div-by-zero, etc). Perhaps we could get - that into our raise too. - - i386 GLIBC implements feraiseexcept(FE_INVALID) with an asm fdiv 0/0. - That would both respect the exceptions mask and give a reason code in a - BSD signal. */ - -void -__gmp_invalid_operation (void) -{ - raise (SIGFPE); - abort (); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/longlong.h b/src/plugins/e-acsl/contrib/libgmp/longlong.h deleted file mode 100644 index fde5277032c9c9262309a4e0cb3fa325c523e819..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/longlong.h +++ /dev/null @@ -1,2215 +0,0 @@ -/* longlong.h -- definitions for mixed size 32/64 bit arithmetic. - -Copyright 1991-1994, 1996, 1997, 1999-2005, 2007-2009, 2011-2015 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* You have to define the following before including this file: - - UWtype -- An unsigned type, default type for operations (typically a "word") - UHWtype -- An unsigned type, at least half the size of UWtype - UDWtype -- An unsigned type, at least twice as large a UWtype - W_TYPE_SIZE -- size in bits of UWtype - - SItype, USItype -- Signed and unsigned 32 bit types - DItype, UDItype -- Signed and unsigned 64 bit types - - On a 32 bit machine UWtype should typically be USItype; - on a 64 bit machine, UWtype should typically be UDItype. - - Optionally, define: - - LONGLONG_STANDALONE -- Avoid code that needs machine-dependent support files - NO_ASM -- Disable inline asm - - - CAUTION! Using this version of longlong.h outside of GMP is not safe. You - need to include gmp.h and gmp-impl.h, or certain things might not work as - expected. -*/ - -#define __BITS4 (W_TYPE_SIZE / 4) -#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2)) -#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1)) -#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2)) - -/* This is used to make sure no undesirable sharing between different libraries - that use this file takes place. */ -#ifndef __MPN -#define __MPN(x) __##x -#endif - -/* Define auxiliary asm macros. - - 1) umul_ppmm(high_prod, low_prod, multiplier, multiplicand) multiplies two - UWtype integers MULTIPLIER and MULTIPLICAND, and generates a two UWtype - word product in HIGH_PROD and LOW_PROD. - - 2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a - UDWtype product. This is just a variant of umul_ppmm. - - 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator, - denominator) divides a UDWtype, composed by the UWtype integers - HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient - in QUOTIENT and the remainder in REMAINDER. HIGH_NUMERATOR must be less - than DENOMINATOR for correct operation. If, in addition, the most - significant bit of DENOMINATOR must be 1, then the pre-processor symbol - UDIV_NEEDS_NORMALIZATION is defined to 1. - - 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator, - denominator). Like udiv_qrnnd but the numbers are signed. The quotient - is rounded towards 0. - - 5) count_leading_zeros(count, x) counts the number of zero-bits from the - msb to the first non-zero bit in the UWtype X. This is the number of - steps X needs to be shifted left to set the msb. Undefined for X == 0, - unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value. - - 6) count_trailing_zeros(count, x) like count_leading_zeros, but counts - from the least significant end. - - 7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1, - high_addend_2, low_addend_2) adds two UWtype integers, composed by - HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2 - respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow - (i.e. carry out) is not stored anywhere, and is lost. - - 8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend, - high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers, - composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and - LOW_SUBTRAHEND_2 respectively. The result is placed in HIGH_DIFFERENCE - and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere, - and is lost. - - If any of these macros are left undefined for a particular CPU, - C macros are used. - - - Notes: - - For add_ssaaaa the two high and two low addends can both commute, but - unfortunately gcc only supports one "%" commutative in each asm block. - This has always been so but is only documented in recent versions - (eg. pre-release 3.3). Having two or more "%"s can cause an internal - compiler error in certain rare circumstances. - - Apparently it was only the last "%" that was ever actually respected, so - the code has been updated to leave just that. Clearly there's a free - choice whether high or low should get it, if there's a reason to favour - one over the other. Also obviously when the constraints on the two - operands are identical there's no benefit to the reloader in any "%" at - all. - - */ - -/* The CPUs come in alphabetical order below. - - Please add support for more CPUs here, or improve the current support - for the CPUs below! */ - - -/* count_leading_zeros_gcc_clz is count_leading_zeros implemented with gcc - 3.4 __builtin_clzl or __builtin_clzll, according to our limb size. - Similarly count_trailing_zeros_gcc_ctz using __builtin_ctzl or - __builtin_ctzll. - - These builtins are only used when we check what code comes out, on some - chips they're merely libgcc calls, where we will instead want an inline - in that case (either asm or generic C). - - These builtins are better than an asm block of the same insn, since an - asm block doesn't give gcc any information about scheduling or resource - usage. We keep an asm block for use on prior versions of gcc though. - - For reference, __builtin_ffs existed in gcc prior to __builtin_clz, but - it's not used (for count_leading_zeros) because it generally gives extra - code to ensure the result is 0 when the input is 0, which we don't need - or want. */ - -#ifdef _LONG_LONG_LIMB -#define count_leading_zeros_gcc_clz(count,x) \ - do { \ - ASSERT ((x) != 0); \ - (count) = __builtin_clzll (x); \ - } while (0) -#else -#define count_leading_zeros_gcc_clz(count,x) \ - do { \ - ASSERT ((x) != 0); \ - (count) = __builtin_clzl (x); \ - } while (0) -#endif - -#ifdef _LONG_LONG_LIMB -#define count_trailing_zeros_gcc_ctz(count,x) \ - do { \ - ASSERT ((x) != 0); \ - (count) = __builtin_ctzll (x); \ - } while (0) -#else -#define count_trailing_zeros_gcc_ctz(count,x) \ - do { \ - ASSERT ((x) != 0); \ - (count) = __builtin_ctzl (x); \ - } while (0) -#endif - - -/* FIXME: The macros using external routines like __MPN(count_leading_zeros) - don't need to be under !NO_ASM */ -#if ! defined (NO_ASM) - -#if defined (__alpha) && W_TYPE_SIZE == 64 -/* Most alpha-based machines, except Cray systems. */ -#if defined (__GNUC__) -#if __GMP_GNUC_PREREQ (3,3) -#define umul_ppmm(ph, pl, m0, m1) \ - do { \ - UDItype __m0 = (m0), __m1 = (m1); \ - (ph) = __builtin_alpha_umulh (__m0, __m1); \ - (pl) = __m0 * __m1; \ - } while (0) -#else -#define umul_ppmm(ph, pl, m0, m1) \ - do { \ - UDItype __m0 = (m0), __m1 = (m1); \ - __asm__ ("umulh %r1,%2,%0" \ - : "=r" (ph) \ - : "%rJ" (__m0), "rI" (__m1)); \ - (pl) = __m0 * __m1; \ - } while (0) -#endif -#define UMUL_TIME 18 -#else /* ! __GNUC__ */ -#include <machine/builtins.h> -#define umul_ppmm(ph, pl, m0, m1) \ - do { \ - UDItype __m0 = (m0), __m1 = (m1); \ - (ph) = __UMULH (__m0, __m1); \ - (pl) = __m0 * __m1; \ - } while (0) -#endif -#ifndef LONGLONG_STANDALONE -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { UWtype __di; \ - __di = __MPN(invert_limb) (d); \ - udiv_qrnnd_preinv (q, r, n1, n0, d, __di); \ - } while (0) -#define UDIV_PREINV_ALWAYS 1 -#define UDIV_NEEDS_NORMALIZATION 1 -#define UDIV_TIME 220 -#endif /* LONGLONG_STANDALONE */ - -/* clz_tab is required in all configurations, since mpn/alpha/cntlz.asm - always goes into libgmp.so, even when not actually used. */ -#define COUNT_LEADING_ZEROS_NEED_CLZ_TAB - -#if defined (__GNUC__) && HAVE_HOST_CPU_alpha_CIX -#define count_leading_zeros(COUNT,X) \ - __asm__("ctlz %1,%0" : "=r"(COUNT) : "r"(X)) -#define count_trailing_zeros(COUNT,X) \ - __asm__("cttz %1,%0" : "=r"(COUNT) : "r"(X)) -#endif /* clz/ctz using cix */ - -#if ! defined (count_leading_zeros) \ - && defined (__GNUC__) && ! defined (LONGLONG_STANDALONE) -/* ALPHA_CMPBGE_0 gives "cmpbge $31,src,dst", ie. test src bytes == 0. - "$31" is written explicitly in the asm, since an "r" constraint won't - select reg 31. There seems no need to worry about "r31" syntax for cray, - since gcc itself (pre-release 3.4) emits just $31 in various places. */ -#define ALPHA_CMPBGE_0(dst, src) \ - do { asm ("cmpbge $31, %1, %0" : "=r" (dst) : "r" (src)); } while (0) -/* Zero bytes are turned into bits with cmpbge, a __clz_tab lookup counts - them, locating the highest non-zero byte. A second __clz_tab lookup - counts the leading zero bits in that byte, giving the result. */ -#define count_leading_zeros(count, x) \ - do { \ - UWtype __clz__b, __clz__c, __clz__x = (x); \ - ALPHA_CMPBGE_0 (__clz__b, __clz__x); /* zero bytes */ \ - __clz__b = __clz_tab [(__clz__b >> 1) ^ 0x7F]; /* 8 to 1 byte */ \ - __clz__b = __clz__b * 8 - 7; /* 57 to 1 shift */ \ - __clz__x >>= __clz__b; \ - __clz__c = __clz_tab [__clz__x]; /* 8 to 1 bit */ \ - __clz__b = 65 - __clz__b; \ - (count) = __clz__b - __clz__c; \ - } while (0) -#define COUNT_LEADING_ZEROS_NEED_CLZ_TAB -#endif /* clz using cmpbge */ - -#if ! defined (count_leading_zeros) && ! defined (LONGLONG_STANDALONE) -#if HAVE_ATTRIBUTE_CONST -long __MPN(count_leading_zeros) (UDItype) __attribute__ ((const)); -#else -long __MPN(count_leading_zeros) (UDItype); -#endif -#define count_leading_zeros(count, x) \ - ((count) = __MPN(count_leading_zeros) (x)) -#endif /* clz using mpn */ -#endif /* __alpha */ - -#if defined (__AVR) && W_TYPE_SIZE == 8 -#define umul_ppmm(ph, pl, m0, m1) \ - do { \ - unsigned short __p = (unsigned short) (m0) * (m1); \ - (ph) = __p >> 8; \ - (pl) = __p; \ - } while (0) -#endif /* AVR */ - -#if defined (_CRAY) && W_TYPE_SIZE == 64 -#include <intrinsics.h> -#define UDIV_PREINV_ALWAYS 1 -#define UDIV_NEEDS_NORMALIZATION 1 -#define UDIV_TIME 220 -long __MPN(count_leading_zeros) (UDItype); -#define count_leading_zeros(count, x) \ - ((count) = _leadz ((UWtype) (x))) -#if defined (_CRAYIEEE) /* I.e., Cray T90/ieee, T3D, and T3E */ -#define umul_ppmm(ph, pl, m0, m1) \ - do { \ - UDItype __m0 = (m0), __m1 = (m1); \ - (ph) = _int_mult_upper (__m0, __m1); \ - (pl) = __m0 * __m1; \ - } while (0) -#ifndef LONGLONG_STANDALONE -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { UWtype __di; \ - __di = __MPN(invert_limb) (d); \ - udiv_qrnnd_preinv (q, r, n1, n0, d, __di); \ - } while (0) -#endif /* LONGLONG_STANDALONE */ -#endif /* _CRAYIEEE */ -#endif /* _CRAY */ - -#if defined (__ia64) && W_TYPE_SIZE == 64 -/* This form encourages gcc (pre-release 3.4 at least) to emit predicated - "sub r=r,r" and "sub r=r,r,1", giving a 2 cycle latency. The generic - code using "al<bl" arithmetically comes out making an actual 0 or 1 in a - register, which takes an extra cycle. */ -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - do { \ - UWtype __x; \ - __x = (al) - (bl); \ - if ((al) < (bl)) \ - (sh) = (ah) - (bh) - 1; \ - else \ - (sh) = (ah) - (bh); \ - (sl) = __x; \ - } while (0) -#if defined (__GNUC__) && ! defined (__INTEL_COMPILER) -/* Do both product parts in assembly, since that gives better code with - all gcc versions. Some callers will just use the upper part, and in - that situation we waste an instruction, but not any cycles. */ -#define umul_ppmm(ph, pl, m0, m1) \ - __asm__ ("xma.hu %0 = %2, %3, f0\n\txma.l %1 = %2, %3, f0" \ - : "=&f" (ph), "=f" (pl) \ - : "f" (m0), "f" (m1)) -#define UMUL_TIME 14 -#define count_leading_zeros(count, x) \ - do { \ - UWtype _x = (x), _y, _a, _c; \ - __asm__ ("mux1 %0 = %1, @rev" : "=r" (_y) : "r" (_x)); \ - __asm__ ("czx1.l %0 = %1" : "=r" (_a) : "r" (-_y | _y)); \ - _c = (_a - 1) << 3; \ - _x >>= _c; \ - if (_x >= 1 << 4) \ - _x >>= 4, _c += 4; \ - if (_x >= 1 << 2) \ - _x >>= 2, _c += 2; \ - _c += _x >> 1; \ - (count) = W_TYPE_SIZE - 1 - _c; \ - } while (0) -/* similar to what gcc does for __builtin_ffs, but 0 based rather than 1 - based, and we don't need a special case for x==0 here */ -#define count_trailing_zeros(count, x) \ - do { \ - UWtype __ctz_x = (x); \ - __asm__ ("popcnt %0 = %1" \ - : "=r" (count) \ - : "r" ((__ctz_x-1) & ~__ctz_x)); \ - } while (0) -#endif -#if defined (__INTEL_COMPILER) -#include <ia64intrin.h> -#define umul_ppmm(ph, pl, m0, m1) \ - do { \ - UWtype __m0 = (m0), __m1 = (m1); \ - ph = _m64_xmahu (__m0, __m1, 0); \ - pl = __m0 * __m1; \ - } while (0) -#endif -#ifndef LONGLONG_STANDALONE -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { UWtype __di; \ - __di = __MPN(invert_limb) (d); \ - udiv_qrnnd_preinv (q, r, n1, n0, d, __di); \ - } while (0) -#define UDIV_PREINV_ALWAYS 1 -#define UDIV_NEEDS_NORMALIZATION 1 -#endif -#define UDIV_TIME 220 -#endif - - -#if defined (__GNUC__) - -/* We sometimes need to clobber "cc" with gcc2, but that would not be - understood by gcc1. Use cpp to avoid major code duplication. */ -#if __GNUC__ < 2 -#define __CLOBBER_CC -#define __AND_CLOBBER_CC -#else /* __GNUC__ >= 2 */ -#define __CLOBBER_CC : "cc" -#define __AND_CLOBBER_CC , "cc" -#endif /* __GNUC__ < 2 */ - -#if (defined (__a29k__) || defined (_AM29K)) && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("add %1,%4,%5\n\taddc %0,%2,%3" \ - : "=r" (sh), "=&r" (sl) \ - : "r" (ah), "rI" (bh), "%r" (al), "rI" (bl)) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("sub %1,%4,%5\n\tsubc %0,%2,%3" \ - : "=r" (sh), "=&r" (sl) \ - : "r" (ah), "rI" (bh), "r" (al), "rI" (bl)) -#define umul_ppmm(xh, xl, m0, m1) \ - do { \ - USItype __m0 = (m0), __m1 = (m1); \ - __asm__ ("multiplu %0,%1,%2" \ - : "=r" (xl) \ - : "r" (__m0), "r" (__m1)); \ - __asm__ ("multmu %0,%1,%2" \ - : "=r" (xh) \ - : "r" (__m0), "r" (__m1)); \ - } while (0) -#define udiv_qrnnd(q, r, n1, n0, d) \ - __asm__ ("dividu %0,%3,%4" \ - : "=r" (q), "=q" (r) \ - : "1" (n1), "r" (n0), "r" (d)) -#define count_leading_zeros(count, x) \ - __asm__ ("clz %0,%1" \ - : "=r" (count) \ - : "r" (x)) -#define COUNT_LEADING_ZEROS_0 32 -#endif /* __a29k__ */ - -#if defined (__arc__) -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("add.f\t%1, %4, %5\n\tadc\t%0, %2, %3" \ - : "=r" (sh), \ - "=&r" (sl) \ - : "r" ((USItype) (ah)), \ - "rIJ" ((USItype) (bh)), \ - "%r" ((USItype) (al)), \ - "rIJ" ((USItype) (bl))) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("sub.f\t%1, %4, %5\n\tsbc\t%0, %2, %3" \ - : "=r" (sh), \ - "=&r" (sl) \ - : "r" ((USItype) (ah)), \ - "rIJ" ((USItype) (bh)), \ - "r" ((USItype) (al)), \ - "rIJ" ((USItype) (bl))) -#endif - -#if defined (__arm__) && (defined (__thumb2__) || !defined (__thumb__)) \ - && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("adds\t%1, %4, %5\n\tadc\t%0, %2, %3" \ - : "=r" (sh), "=&r" (sl) \ - : "r" (ah), "rI" (bh), "%r" (al), "rI" (bl) __CLOBBER_CC) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - do { \ - if (__builtin_constant_p (al)) \ - { \ - if (__builtin_constant_p (ah)) \ - __asm__ ("rsbs\t%1, %5, %4\n\trsc\t%0, %3, %2" \ - : "=r" (sh), "=&r" (sl) \ - : "rI" (ah), "r" (bh), "rI" (al), "r" (bl) __CLOBBER_CC); \ - else \ - __asm__ ("rsbs\t%1, %5, %4\n\tsbc\t%0, %2, %3" \ - : "=r" (sh), "=&r" (sl) \ - : "r" (ah), "rI" (bh), "rI" (al), "r" (bl) __CLOBBER_CC); \ - } \ - else if (__builtin_constant_p (ah)) \ - { \ - if (__builtin_constant_p (bl)) \ - __asm__ ("subs\t%1, %4, %5\n\trsc\t%0, %3, %2" \ - : "=r" (sh), "=&r" (sl) \ - : "rI" (ah), "r" (bh), "r" (al), "rI" (bl) __CLOBBER_CC); \ - else \ - __asm__ ("rsbs\t%1, %5, %4\n\trsc\t%0, %3, %2" \ - : "=r" (sh), "=&r" (sl) \ - : "rI" (ah), "r" (bh), "rI" (al), "r" (bl) __CLOBBER_CC); \ - } \ - else if (__builtin_constant_p (bl)) \ - { \ - if (__builtin_constant_p (bh)) \ - __asm__ ("subs\t%1, %4, %5\n\tsbc\t%0, %2, %3" \ - : "=r" (sh), "=&r" (sl) \ - : "r" (ah), "rI" (bh), "r" (al), "rI" (bl) __CLOBBER_CC); \ - else \ - __asm__ ("subs\t%1, %4, %5\n\trsc\t%0, %3, %2" \ - : "=r" (sh), "=&r" (sl) \ - : "rI" (ah), "r" (bh), "r" (al), "rI" (bl) __CLOBBER_CC); \ - } \ - else /* only bh might be a constant */ \ - __asm__ ("subs\t%1, %4, %5\n\tsbc\t%0, %2, %3" \ - : "=r" (sh), "=&r" (sl) \ - : "r" (ah), "rI" (bh), "r" (al), "rI" (bl) __CLOBBER_CC);\ - } while (0) -#if defined (__ARM_ARCH_2__) || defined (__ARM_ARCH_2A__) \ - || defined (__ARM_ARCH_3__) -#define umul_ppmm(xh, xl, a, b) \ - do { \ - register USItype __t0, __t1, __t2; \ - __asm__ ("%@ Inlined umul_ppmm\n" \ - " mov %2, %5, lsr #16\n" \ - " mov %0, %6, lsr #16\n" \ - " bic %3, %5, %2, lsl #16\n" \ - " bic %4, %6, %0, lsl #16\n" \ - " mul %1, %3, %4\n" \ - " mul %4, %2, %4\n" \ - " mul %3, %0, %3\n" \ - " mul %0, %2, %0\n" \ - " adds %3, %4, %3\n" \ - " addcs %0, %0, #65536\n" \ - " adds %1, %1, %3, lsl #16\n" \ - " adc %0, %0, %3, lsr #16" \ - : "=&r" ((USItype) (xh)), "=r" ((USItype) (xl)), \ - "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \ - : "r" ((USItype) (a)), "r" ((USItype) (b)) __CLOBBER_CC); \ - } while (0) -#define UMUL_TIME 20 -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { UWtype __r; \ - (q) = __MPN(udiv_qrnnd) (&__r, (n1), (n0), (d)); \ - (r) = __r; \ - } while (0) -extern UWtype __MPN(udiv_qrnnd) (UWtype *, UWtype, UWtype, UWtype); -#define UDIV_TIME 200 -#else /* ARMv4 or newer */ -#define umul_ppmm(xh, xl, a, b) \ - __asm__ ("umull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b)) -#define UMUL_TIME 5 -#define smul_ppmm(xh, xl, a, b) \ - __asm__ ("smull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b)) -#ifndef LONGLONG_STANDALONE -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { UWtype __di; \ - __di = __MPN(invert_limb) (d); \ - udiv_qrnnd_preinv (q, r, n1, n0, d, __di); \ - } while (0) -#define UDIV_PREINV_ALWAYS 1 -#define UDIV_NEEDS_NORMALIZATION 1 -#define UDIV_TIME 70 -#endif /* LONGLONG_STANDALONE */ -#endif /* defined(__ARM_ARCH_2__) ... */ -#define count_leading_zeros(count, x) count_leading_zeros_gcc_clz(count, x) -#define count_trailing_zeros(count, x) count_trailing_zeros_gcc_ctz(count, x) -#define COUNT_LEADING_ZEROS_0 32 -#endif /* __arm__ */ - -#if defined (__aarch64__) && W_TYPE_SIZE == 64 -/* FIXME: Extend the immediate range for the low word by using both - ADDS and SUBS, since they set carry in the same way. */ -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("adds\t%1, %x4, %5\n\tadc\t%0, %x2, %x3" \ - : "=r" (sh), "=&r" (sl) \ - : "rZ" ((UDItype)(ah)), "rZ" ((UDItype)(bh)), \ - "%r" ((UDItype)(al)), "rI" ((UDItype)(bl)) __CLOBBER_CC) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subs\t%1, %x4, %5\n\tsbc\t%0, %x2, %x3" \ - : "=r,r" (sh), "=&r,&r" (sl) \ - : "rZ,rZ" ((UDItype)(ah)), "rZ,rZ" ((UDItype)(bh)), \ - "r,Z" ((UDItype)(al)), "rI,r" ((UDItype)(bl)) __CLOBBER_CC) -#define umul_ppmm(ph, pl, m0, m1) \ - do { \ - UDItype __m0 = (m0), __m1 = (m1); \ - __asm__ ("umulh\t%0, %1, %2" : "=r" (ph) : "r" (__m0), "r" (__m1)); \ - (pl) = __m0 * __m1; \ - } while (0) -#define count_leading_zeros(count, x) count_leading_zeros_gcc_clz(count, x) -#define count_trailing_zeros(count, x) count_trailing_zeros_gcc_ctz(count, x) -#define COUNT_LEADING_ZEROS_0 64 -#endif /* __aarch64__ */ - -#if defined (__clipper__) && W_TYPE_SIZE == 32 -#define umul_ppmm(w1, w0, u, v) \ - ({union {UDItype __ll; \ - struct {USItype __l, __h;} __i; \ - } __x; \ - __asm__ ("mulwux %2,%0" \ - : "=r" (__x.__ll) \ - : "%0" ((USItype)(u)), "r" ((USItype)(v))); \ - (w1) = __x.__i.__h; (w0) = __x.__i.__l;}) -#define smul_ppmm(w1, w0, u, v) \ - ({union {DItype __ll; \ - struct {SItype __l, __h;} __i; \ - } __x; \ - __asm__ ("mulwx %2,%0" \ - : "=r" (__x.__ll) \ - : "%0" ((SItype)(u)), "r" ((SItype)(v))); \ - (w1) = __x.__i.__h; (w0) = __x.__i.__l;}) -#define __umulsidi3(u, v) \ - ({UDItype __w; \ - __asm__ ("mulwux %2,%0" \ - : "=r" (__w) : "%0" ((USItype)(u)), "r" ((USItype)(v))); \ - __w; }) -#endif /* __clipper__ */ - -/* Fujitsu vector computers. */ -#if defined (__uxp__) && W_TYPE_SIZE == 32 -#define umul_ppmm(ph, pl, u, v) \ - do { \ - union {UDItype __ll; \ - struct {USItype __h, __l;} __i; \ - } __x; \ - __asm__ ("mult.lu %1,%2,%0" : "=r" (__x.__ll) : "%r" (u), "rK" (v));\ - (ph) = __x.__i.__h; \ - (pl) = __x.__i.__l; \ - } while (0) -#define smul_ppmm(ph, pl, u, v) \ - do { \ - union {UDItype __ll; \ - struct {USItype __h, __l;} __i; \ - } __x; \ - __asm__ ("mult.l %1,%2,%0" : "=r" (__x.__ll) : "%r" (u), "rK" (v)); \ - (ph) = __x.__i.__h; \ - (pl) = __x.__i.__l; \ - } while (0) -#endif - -#if defined (__gmicro__) && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("add.w %5,%1\n\taddx %3,%0" \ - : "=g" (sh), "=&g" (sl) \ - : "0" ((USItype)(ah)), "g" ((USItype)(bh)), \ - "%1" ((USItype)(al)), "g" ((USItype)(bl))) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("sub.w %5,%1\n\tsubx %3,%0" \ - : "=g" (sh), "=&g" (sl) \ - : "0" ((USItype)(ah)), "g" ((USItype)(bh)), \ - "1" ((USItype)(al)), "g" ((USItype)(bl))) -#define umul_ppmm(ph, pl, m0, m1) \ - __asm__ ("mulx %3,%0,%1" \ - : "=g" (ph), "=r" (pl) \ - : "%0" ((USItype)(m0)), "g" ((USItype)(m1))) -#define udiv_qrnnd(q, r, nh, nl, d) \ - __asm__ ("divx %4,%0,%1" \ - : "=g" (q), "=r" (r) \ - : "1" ((USItype)(nh)), "0" ((USItype)(nl)), "g" ((USItype)(d))) -#define count_leading_zeros(count, x) \ - __asm__ ("bsch/1 %1,%0" \ - : "=g" (count) : "g" ((USItype)(x)), "0" ((USItype)0)) -#endif - -#if defined (__hppa) && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("add%I5 %5,%r4,%1\n\taddc %r2,%r3,%0" \ - : "=r" (sh), "=&r" (sl) \ - : "rM" (ah), "rM" (bh), "%rM" (al), "rI" (bl)) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("sub%I4 %4,%r5,%1\n\tsubb %r2,%r3,%0" \ - : "=r" (sh), "=&r" (sl) \ - : "rM" (ah), "rM" (bh), "rI" (al), "rM" (bl)) -#if defined (_PA_RISC1_1) -#define umul_ppmm(wh, wl, u, v) \ - do { \ - union {UDItype __ll; \ - struct {USItype __h, __l;} __i; \ - } __x; \ - __asm__ ("xmpyu %1,%2,%0" : "=*f" (__x.__ll) : "*f" (u), "*f" (v)); \ - (wh) = __x.__i.__h; \ - (wl) = __x.__i.__l; \ - } while (0) -#define UMUL_TIME 8 -#define UDIV_TIME 60 -#else -#define UMUL_TIME 40 -#define UDIV_TIME 80 -#endif -#define count_leading_zeros(count, x) \ - do { \ - USItype __tmp; \ - __asm__ ( \ - "ldi 1,%0\n" \ -" extru,= %1,15,16,%%r0 ; Bits 31..16 zero?\n" \ -" extru,tr %1,15,16,%1 ; No. Shift down, skip add.\n" \ -" ldo 16(%0),%0 ; Yes. Perform add.\n" \ -" extru,= %1,23,8,%%r0 ; Bits 15..8 zero?\n" \ -" extru,tr %1,23,8,%1 ; No. Shift down, skip add.\n" \ -" ldo 8(%0),%0 ; Yes. Perform add.\n" \ -" extru,= %1,27,4,%%r0 ; Bits 7..4 zero?\n" \ -" extru,tr %1,27,4,%1 ; No. Shift down, skip add.\n" \ -" ldo 4(%0),%0 ; Yes. Perform add.\n" \ -" extru,= %1,29,2,%%r0 ; Bits 3..2 zero?\n" \ -" extru,tr %1,29,2,%1 ; No. Shift down, skip add.\n" \ -" ldo 2(%0),%0 ; Yes. Perform add.\n" \ -" extru %1,30,1,%1 ; Extract bit 1.\n" \ -" sub %0,%1,%0 ; Subtract it.\n" \ - : "=r" (count), "=r" (__tmp) : "1" (x)); \ - } while (0) -#endif /* hppa */ - -/* These macros are for ABI=2.0w. In ABI=2.0n they can't be used, since GCC - (3.2) puts longlong into two adjacent 32-bit registers. Presumably this - is just a case of no direct support for 2.0n but treating it like 1.0. */ -#if defined (__hppa) && W_TYPE_SIZE == 64 && ! defined (_LONG_LONG_LIMB) -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("add%I5 %5,%r4,%1\n\tadd,dc %r2,%r3,%0" \ - : "=r" (sh), "=&r" (sl) \ - : "rM" (ah), "rM" (bh), "%rM" (al), "rI" (bl)) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("sub%I4 %4,%r5,%1\n\tsub,db %r2,%r3,%0" \ - : "=r" (sh), "=&r" (sl) \ - : "rM" (ah), "rM" (bh), "rI" (al), "rM" (bl)) -#endif /* hppa */ - -#if (defined (__i370__) || defined (__s390__) || defined (__mvs__)) && W_TYPE_SIZE == 32 -#if defined (__zarch__) || defined (HAVE_HOST_CPU_s390_zarch) -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - do { \ -/* if (__builtin_constant_p (bl)) \ - __asm__ ("alfi\t%1,%o5\n\talcr\t%0,%3" \ - : "=r" (sh), "=&r" (sl) \ - : "0" (ah), "r" (bh), "%1" (al), "n" (bl) __CLOBBER_CC);\ - else \ -*/ __asm__ ("alr\t%1,%5\n\talcr\t%0,%3" \ - : "=r" (sh), "=&r" (sl) \ - : "0" (ah), "r" (bh), "%1" (al), "r" (bl)__CLOBBER_CC); \ - } while (0) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - do { \ -/* if (__builtin_constant_p (bl)) \ - __asm__ ("slfi\t%1,%o5\n\tslbr\t%0,%3" \ - : "=r" (sh), "=&r" (sl) \ - : "0" (ah), "r" (bh), "1" (al), "n" (bl) __CLOBBER_CC); \ - else \ -*/ __asm__ ("slr\t%1,%5\n\tslbr\t%0,%3" \ - : "=r" (sh), "=&r" (sl) \ - : "0" (ah), "r" (bh), "1" (al), "r" (bl) __CLOBBER_CC); \ - } while (0) -#if __GMP_GNUC_PREREQ (4,5) -#define umul_ppmm(xh, xl, m0, m1) \ - do { \ - union {UDItype __ll; \ - struct {USItype __h, __l;} __i; \ - } __x; \ - __x.__ll = (UDItype) (m0) * (UDItype) (m1); \ - (xh) = __x.__i.__h; (xl) = __x.__i.__l; \ - } while (0) -#else -#if 0 -/* FIXME: this fails if gcc knows about the 64-bit registers. Use only - with a new enough processor pretending we have 32-bit registers. */ -#define umul_ppmm(xh, xl, m0, m1) \ - do { \ - union {UDItype __ll; \ - struct {USItype __h, __l;} __i; \ - } __x; \ - __asm__ ("mlr\t%0,%2" \ - : "=r" (__x.__ll) \ - : "%0" (m0), "r" (m1)); \ - (xh) = __x.__i.__h; (xl) = __x.__i.__l; \ - } while (0) -#else -#define umul_ppmm(xh, xl, m0, m1) \ - do { \ - /* When we have 64-bit regs and gcc is aware of that, we cannot simply use - DImode for the product, since that would be allocated to a single 64-bit - register, whereas mlr uses the low 32-bits of an even-odd register pair. - */ \ - register USItype __r0 __asm__ ("0"); \ - register USItype __r1 __asm__ ("1") = (m0); \ - __asm__ ("mlr\t%0,%3" \ - : "=r" (__r0), "=r" (__r1) \ - : "r" (__r1), "r" (m1)); \ - (xh) = __r0; (xl) = __r1; \ - } while (0) -#endif /* if 0 */ -#endif -#if 0 -/* FIXME: this fails if gcc knows about the 64-bit registers. Use only - with a new enough processor pretending we have 32-bit registers. */ -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { \ - union {UDItype __ll; \ - struct {USItype __h, __l;} __i; \ - } __x; \ - __x.__i.__h = n1; __x.__i.__l = n0; \ - __asm__ ("dlr\t%0,%2" \ - : "=r" (__x.__ll) \ - : "0" (__x.__ll), "r" (d)); \ - (q) = __x.__i.__l; (r) = __x.__i.__h; \ - } while (0) -#else -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { \ - register USItype __r0 __asm__ ("0") = (n1); \ - register USItype __r1 __asm__ ("1") = (n0); \ - __asm__ ("dlr\t%0,%4" \ - : "=r" (__r0), "=r" (__r1) \ - : "r" (__r0), "r" (__r1), "r" (d)); \ - (q) = __r1; (r) = __r0; \ - } while (0) -#endif /* if 0 */ -#else /* if __zarch__ */ -/* FIXME: this fails if gcc knows about the 64-bit registers. */ -#define smul_ppmm(xh, xl, m0, m1) \ - do { \ - union {DItype __ll; \ - struct {USItype __h, __l;} __i; \ - } __x; \ - __asm__ ("mr\t%0,%2" \ - : "=r" (__x.__ll) \ - : "%0" (m0), "r" (m1)); \ - (xh) = __x.__i.__h; (xl) = __x.__i.__l; \ - } while (0) -/* FIXME: this fails if gcc knows about the 64-bit registers. */ -#define sdiv_qrnnd(q, r, n1, n0, d) \ - do { \ - union {DItype __ll; \ - struct {USItype __h, __l;} __i; \ - } __x; \ - __x.__i.__h = n1; __x.__i.__l = n0; \ - __asm__ ("dr\t%0,%2" \ - : "=r" (__x.__ll) \ - : "0" (__x.__ll), "r" (d)); \ - (q) = __x.__i.__l; (r) = __x.__i.__h; \ - } while (0) -#endif /* if __zarch__ */ -#endif - -#if defined (__s390x__) && W_TYPE_SIZE == 64 -/* We need to cast operands with register constraints, otherwise their types - will be assumed to be SImode by gcc. For these machines, such operations - will insert a value into the low 32 bits, and leave the high 32 bits with - garbage. */ -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - do { \ - __asm__ ("algr\t%1,%5\n\talcgr\t%0,%3" \ - : "=r" (sh), "=&r" (sl) \ - : "0" ((UDItype)(ah)), "r" ((UDItype)(bh)), \ - "%1" ((UDItype)(al)), "r" ((UDItype)(bl)) __CLOBBER_CC); \ - } while (0) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - do { \ - __asm__ ("slgr\t%1,%5\n\tslbgr\t%0,%3" \ - : "=r" (sh), "=&r" (sl) \ - : "0" ((UDItype)(ah)), "r" ((UDItype)(bh)), \ - "1" ((UDItype)(al)), "r" ((UDItype)(bl)) __CLOBBER_CC); \ - } while (0) -#define umul_ppmm(xh, xl, m0, m1) \ - do { \ - union {unsigned int __attribute__ ((mode(TI))) __ll; \ - struct {UDItype __h, __l;} __i; \ - } __x; \ - __asm__ ("mlgr\t%0,%2" \ - : "=r" (__x.__ll) \ - : "%0" ((UDItype)(m0)), "r" ((UDItype)(m1))); \ - (xh) = __x.__i.__h; (xl) = __x.__i.__l; \ - } while (0) -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { \ - union {unsigned int __attribute__ ((mode(TI))) __ll; \ - struct {UDItype __h, __l;} __i; \ - } __x; \ - __x.__i.__h = n1; __x.__i.__l = n0; \ - __asm__ ("dlgr\t%0,%2" \ - : "=r" (__x.__ll) \ - : "0" (__x.__ll), "r" ((UDItype)(d))); \ - (q) = __x.__i.__l; (r) = __x.__i.__h; \ - } while (0) -#if 0 /* FIXME: Enable for z10 (?) */ -#define count_leading_zeros(cnt, x) \ - do { \ - union {unsigned int __attribute__ ((mode(TI))) __ll; \ - struct {UDItype __h, __l;} __i; \ - } __clr_cnt; \ - __asm__ ("flogr\t%0,%1" \ - : "=r" (__clr_cnt.__ll) \ - : "r" (x) __CLOBBER_CC); \ - (cnt) = __clr_cnt.__i.__h; \ - } while (0) -#endif -#endif - -/* On x86 and x86_64, every asm implicitly clobbers "flags" and "fpsr", - so we don't need __CLOBBER_CC. */ -#if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addl %5,%k1\n\tadcl %3,%k0" \ - : "=r" (sh), "=&r" (sl) \ - : "0" ((USItype)(ah)), "g" ((USItype)(bh)), \ - "%1" ((USItype)(al)), "g" ((USItype)(bl))) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subl %5,%k1\n\tsbbl %3,%k0" \ - : "=r" (sh), "=&r" (sl) \ - : "0" ((USItype)(ah)), "g" ((USItype)(bh)), \ - "1" ((USItype)(al)), "g" ((USItype)(bl))) -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("mull %3" \ - : "=a" (w0), "=d" (w1) \ - : "%0" ((USItype)(u)), "rm" ((USItype)(v))) -#define udiv_qrnnd(q, r, n1, n0, dx) /* d renamed to dx avoiding "=d" */\ - __asm__ ("divl %4" /* stringification in K&R C */ \ - : "=a" (q), "=d" (r) \ - : "0" ((USItype)(n0)), "1" ((USItype)(n1)), "rm" ((USItype)(dx))) - -#if HAVE_HOST_CPU_i586 || HAVE_HOST_CPU_pentium || HAVE_HOST_CPU_pentiummmx -/* Pentium bsrl takes between 10 and 72 cycles depending where the most - significant 1 bit is, hence the use of the following alternatives. bsfl - is slow too, between 18 and 42 depending where the least significant 1 - bit is, so let the generic count_trailing_zeros below make use of the - count_leading_zeros here too. */ - -#if HAVE_HOST_CPU_pentiummmx && ! defined (LONGLONG_STANDALONE) -/* The following should be a fixed 14 or 15 cycles, but possibly plus an L1 - cache miss reading from __clz_tab. For P55 it's favoured over the float - below so as to avoid mixing MMX and x87, since the penalty for switching - between the two is about 100 cycles. - - The asm block sets __shift to -3 if the high 24 bits are clear, -2 for - 16, -1 for 8, or 0 otherwise. This could be written equivalently as - follows, but as of gcc 2.95.2 it results in conditional jumps. - - __shift = -(__n < 0x1000000); - __shift -= (__n < 0x10000); - __shift -= (__n < 0x100); - - The middle two sbbl and cmpl's pair, and with luck something gcc - generates might pair with the first cmpl and the last sbbl. The "32+1" - constant could be folded into __clz_tab[], but it doesn't seem worth - making a different table just for that. */ - -#define count_leading_zeros(c,n) \ - do { \ - USItype __n = (n); \ - USItype __shift; \ - __asm__ ("cmpl $0x1000000, %1\n" \ - "sbbl %0, %0\n" \ - "cmpl $0x10000, %1\n" \ - "sbbl $0, %0\n" \ - "cmpl $0x100, %1\n" \ - "sbbl $0, %0\n" \ - : "=&r" (__shift) : "r" (__n)); \ - __shift = __shift*8 + 24 + 1; \ - (c) = 32 + 1 - __shift - __clz_tab[__n >> __shift]; \ - } while (0) -#define COUNT_LEADING_ZEROS_NEED_CLZ_TAB -#define COUNT_LEADING_ZEROS_0 31 /* n==0 indistinguishable from n==1 */ - -#else /* ! pentiummmx || LONGLONG_STANDALONE */ -/* The following should be a fixed 14 cycles or so. Some scheduling - opportunities should be available between the float load/store too. This - sort of code is used in gcc 3 for __builtin_ffs (with "n&-n") and is - apparently suggested by the Intel optimizing manual (don't know exactly - where). gcc 2.95 or up will be best for this, so the "double" is - correctly aligned on the stack. */ -#define count_leading_zeros(c,n) \ - do { \ - union { \ - double d; \ - unsigned a[2]; \ - } __u; \ - ASSERT ((n) != 0); \ - __u.d = (UWtype) (n); \ - (c) = 0x3FF + 31 - (__u.a[1] >> 20); \ - } while (0) -#define COUNT_LEADING_ZEROS_0 (0x3FF + 31) -#endif /* pentiummx */ - -#else /* ! pentium */ - -#if __GMP_GNUC_PREREQ (3,4) /* using bsrl */ -#define count_leading_zeros(count,x) count_leading_zeros_gcc_clz(count,x) -#endif /* gcc clz */ - -/* On P6, gcc prior to 3.0 generates a partial register stall for - __cbtmp^31, due to using "xorb $31" instead of "xorl $31", the former - being 1 code byte smaller. "31-__cbtmp" is a workaround, probably at the - cost of one extra instruction. Do this for "i386" too, since that means - generic x86. */ -#if ! defined (count_leading_zeros) && __GNUC__ < 3 \ - && (HAVE_HOST_CPU_i386 \ - || HAVE_HOST_CPU_i686 \ - || HAVE_HOST_CPU_pentiumpro \ - || HAVE_HOST_CPU_pentium2 \ - || HAVE_HOST_CPU_pentium3) -#define count_leading_zeros(count, x) \ - do { \ - USItype __cbtmp; \ - ASSERT ((x) != 0); \ - __asm__ ("bsrl %1,%0" : "=r" (__cbtmp) : "rm" ((USItype)(x))); \ - (count) = 31 - __cbtmp; \ - } while (0) -#endif /* gcc<3 asm bsrl */ - -#ifndef count_leading_zeros -#define count_leading_zeros(count, x) \ - do { \ - USItype __cbtmp; \ - ASSERT ((x) != 0); \ - __asm__ ("bsrl %1,%0" : "=r" (__cbtmp) : "rm" ((USItype)(x))); \ - (count) = __cbtmp ^ 31; \ - } while (0) -#endif /* asm bsrl */ - -#if __GMP_GNUC_PREREQ (3,4) /* using bsfl */ -#define count_trailing_zeros(count,x) count_trailing_zeros_gcc_ctz(count,x) -#endif /* gcc ctz */ - -#ifndef count_trailing_zeros -#define count_trailing_zeros(count, x) \ - do { \ - ASSERT ((x) != 0); \ - __asm__ ("bsfl %1,%k0" : "=r" (count) : "rm" ((USItype)(x))); \ - } while (0) -#endif /* asm bsfl */ - -#endif /* ! pentium */ - -#ifndef UMUL_TIME -#define UMUL_TIME 10 -#endif -#ifndef UDIV_TIME -#define UDIV_TIME 40 -#endif -#endif /* 80x86 */ - -#if defined (__amd64__) && W_TYPE_SIZE == 64 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addq %5,%q1\n\tadcq %3,%q0" \ - : "=r" (sh), "=&r" (sl) \ - : "0" ((UDItype)(ah)), "rme" ((UDItype)(bh)), \ - "%1" ((UDItype)(al)), "rme" ((UDItype)(bl))) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subq %5,%q1\n\tsbbq %3,%q0" \ - : "=r" (sh), "=&r" (sl) \ - : "0" ((UDItype)(ah)), "rme" ((UDItype)(bh)), \ - "1" ((UDItype)(al)), "rme" ((UDItype)(bl))) -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("mulq %3" \ - : "=a" (w0), "=d" (w1) \ - : "%0" ((UDItype)(u)), "rm" ((UDItype)(v))) -#define udiv_qrnnd(q, r, n1, n0, dx) /* d renamed to dx avoiding "=d" */\ - __asm__ ("divq %4" /* stringification in K&R C */ \ - : "=a" (q), "=d" (r) \ - : "0" ((UDItype)(n0)), "1" ((UDItype)(n1)), "rm" ((UDItype)(dx))) -/* bsrq destination must be a 64-bit register, hence UDItype for __cbtmp. */ -#define count_leading_zeros(count, x) \ - do { \ - UDItype __cbtmp; \ - ASSERT ((x) != 0); \ - __asm__ ("bsrq %1,%0" : "=r" (__cbtmp) : "rm" ((UDItype)(x))); \ - (count) = __cbtmp ^ 63; \ - } while (0) -/* bsfq destination must be a 64-bit register, "%q0" forces this in case - count is only an int. */ -#define count_trailing_zeros(count, x) \ - do { \ - ASSERT ((x) != 0); \ - __asm__ ("bsfq %1,%q0" : "=r" (count) : "rm" ((UDItype)(x))); \ - } while (0) -#endif /* __amd64__ */ - -#if defined (__i860__) && W_TYPE_SIZE == 32 -#define rshift_rhlc(r,h,l,c) \ - __asm__ ("shr %3,r0,r0\;shrd %1,%2,%0" \ - "=r" (r) : "r" (h), "r" (l), "rn" (c)) -#endif /* i860 */ - -#if defined (__i960__) && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("cmpo 1,0\;addc %5,%4,%1\;addc %3,%2,%0" \ - : "=r" (sh), "=&r" (sl) \ - : "dI" (ah), "dI" (bh), "%dI" (al), "dI" (bl)) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("cmpo 0,0\;subc %5,%4,%1\;subc %3,%2,%0" \ - : "=r" (sh), "=&r" (sl) \ - : "dI" (ah), "dI" (bh), "dI" (al), "dI" (bl)) -#define umul_ppmm(w1, w0, u, v) \ - ({union {UDItype __ll; \ - struct {USItype __l, __h;} __i; \ - } __x; \ - __asm__ ("emul %2,%1,%0" \ - : "=d" (__x.__ll) : "%dI" (u), "dI" (v)); \ - (w1) = __x.__i.__h; (w0) = __x.__i.__l;}) -#define __umulsidi3(u, v) \ - ({UDItype __w; \ - __asm__ ("emul %2,%1,%0" : "=d" (__w) : "%dI" (u), "dI" (v)); \ - __w; }) -#define udiv_qrnnd(q, r, nh, nl, d) \ - do { \ - union {UDItype __ll; \ - struct {USItype __l, __h;} __i; \ - } __nn; \ - __nn.__i.__h = (nh); __nn.__i.__l = (nl); \ - __asm__ ("ediv %d,%n,%0" \ - : "=d" (__rq.__ll) : "dI" (__nn.__ll), "dI" (d)); \ - (r) = __rq.__i.__l; (q) = __rq.__i.__h; \ - } while (0) -#define count_leading_zeros(count, x) \ - do { \ - USItype __cbtmp; \ - __asm__ ("scanbit %1,%0" : "=r" (__cbtmp) : "r" (x)); \ - (count) = __cbtmp ^ 31; \ - } while (0) -#define COUNT_LEADING_ZEROS_0 (-32) /* sic */ -#if defined (__i960mx) /* what is the proper symbol to test??? */ -#define rshift_rhlc(r,h,l,c) \ - do { \ - union {UDItype __ll; \ - struct {USItype __l, __h;} __i; \ - } __nn; \ - __nn.__i.__h = (h); __nn.__i.__l = (l); \ - __asm__ ("shre %2,%1,%0" : "=d" (r) : "dI" (__nn.__ll), "dI" (c)); \ - } -#endif /* i960mx */ -#endif /* i960 */ - -#if (defined (__mc68000__) || defined (__mc68020__) || defined(mc68020) \ - || defined (__m68k__) || defined (__mc5200__) || defined (__mc5206e__) \ - || defined (__mc5307__)) && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("add%.l %5,%1\n\taddx%.l %3,%0" \ - : "=d" (sh), "=&d" (sl) \ - : "0" ((USItype)(ah)), "d" ((USItype)(bh)), \ - "%1" ((USItype)(al)), "g" ((USItype)(bl))) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("sub%.l %5,%1\n\tsubx%.l %3,%0" \ - : "=d" (sh), "=&d" (sl) \ - : "0" ((USItype)(ah)), "d" ((USItype)(bh)), \ - "1" ((USItype)(al)), "g" ((USItype)(bl))) -/* The '020, '030, '040 and CPU32 have 32x32->64 and 64/32->32q-32r. */ -#if defined (__mc68020__) || defined(mc68020) \ - || defined (__mc68030__) || defined (mc68030) \ - || defined (__mc68040__) || defined (mc68040) \ - || defined (__mcpu32__) || defined (mcpu32) \ - || defined (__NeXT__) -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("mulu%.l %3,%1:%0" \ - : "=d" (w0), "=d" (w1) \ - : "%0" ((USItype)(u)), "dmi" ((USItype)(v))) -#define UMUL_TIME 45 -#define udiv_qrnnd(q, r, n1, n0, d) \ - __asm__ ("divu%.l %4,%1:%0" \ - : "=d" (q), "=d" (r) \ - : "0" ((USItype)(n0)), "1" ((USItype)(n1)), "dmi" ((USItype)(d))) -#define UDIV_TIME 90 -#define sdiv_qrnnd(q, r, n1, n0, d) \ - __asm__ ("divs%.l %4,%1:%0" \ - : "=d" (q), "=d" (r) \ - : "0" ((USItype)(n0)), "1" ((USItype)(n1)), "dmi" ((USItype)(d))) -#else /* for other 68k family members use 16x16->32 multiplication */ -#define umul_ppmm(xh, xl, a, b) \ - do { USItype __umul_tmp1, __umul_tmp2; \ - __asm__ ("| Inlined umul_ppmm\n" \ -" move%.l %5,%3\n" \ -" move%.l %2,%0\n" \ -" move%.w %3,%1\n" \ -" swap %3\n" \ -" swap %0\n" \ -" mulu%.w %2,%1\n" \ -" mulu%.w %3,%0\n" \ -" mulu%.w %2,%3\n" \ -" swap %2\n" \ -" mulu%.w %5,%2\n" \ -" add%.l %3,%2\n" \ -" jcc 1f\n" \ -" add%.l %#0x10000,%0\n" \ -"1: move%.l %2,%3\n" \ -" clr%.w %2\n" \ -" swap %2\n" \ -" swap %3\n" \ -" clr%.w %3\n" \ -" add%.l %3,%1\n" \ -" addx%.l %2,%0\n" \ -" | End inlined umul_ppmm" \ - : "=&d" (xh), "=&d" (xl), \ - "=d" (__umul_tmp1), "=&d" (__umul_tmp2) \ - : "%2" ((USItype)(a)), "d" ((USItype)(b))); \ - } while (0) -#define UMUL_TIME 100 -#define UDIV_TIME 400 -#endif /* not mc68020 */ -/* The '020, '030, '040 and '060 have bitfield insns. - GCC 3.4 defines __mc68020__ when in CPU32 mode, check for __mcpu32__ to - exclude bfffo on that chip (bitfield insns not available). */ -#if (defined (__mc68020__) || defined (mc68020) \ - || defined (__mc68030__) || defined (mc68030) \ - || defined (__mc68040__) || defined (mc68040) \ - || defined (__mc68060__) || defined (mc68060) \ - || defined (__NeXT__)) \ - && ! defined (__mcpu32__) -#define count_leading_zeros(count, x) \ - __asm__ ("bfffo %1{%b2:%b2},%0" \ - : "=d" (count) \ - : "od" ((USItype) (x)), "n" (0)) -#define COUNT_LEADING_ZEROS_0 32 -#endif -#endif /* mc68000 */ - -#if defined (__m88000__) && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addu.co %1,%r4,%r5\n\taddu.ci %0,%r2,%r3" \ - : "=r" (sh), "=&r" (sl) \ - : "rJ" (ah), "rJ" (bh), "%rJ" (al), "rJ" (bl)) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subu.co %1,%r4,%r5\n\tsubu.ci %0,%r2,%r3" \ - : "=r" (sh), "=&r" (sl) \ - : "rJ" (ah), "rJ" (bh), "rJ" (al), "rJ" (bl)) -#define count_leading_zeros(count, x) \ - do { \ - USItype __cbtmp; \ - __asm__ ("ff1 %0,%1" : "=r" (__cbtmp) : "r" (x)); \ - (count) = __cbtmp ^ 31; \ - } while (0) -#define COUNT_LEADING_ZEROS_0 63 /* sic */ -#if defined (__m88110__) -#define umul_ppmm(wh, wl, u, v) \ - do { \ - union {UDItype __ll; \ - struct {USItype __h, __l;} __i; \ - } __x; \ - __asm__ ("mulu.d %0,%1,%2" : "=r" (__x.__ll) : "r" (u), "r" (v)); \ - (wh) = __x.__i.__h; \ - (wl) = __x.__i.__l; \ - } while (0) -#define udiv_qrnnd(q, r, n1, n0, d) \ - ({union {UDItype __ll; \ - struct {USItype __h, __l;} __i; \ - } __x, __q; \ - __x.__i.__h = (n1); __x.__i.__l = (n0); \ - __asm__ ("divu.d %0,%1,%2" \ - : "=r" (__q.__ll) : "r" (__x.__ll), "r" (d)); \ - (r) = (n0) - __q.__l * (d); (q) = __q.__l; }) -#define UMUL_TIME 5 -#define UDIV_TIME 25 -#else -#define UMUL_TIME 17 -#define UDIV_TIME 150 -#endif /* __m88110__ */ -#endif /* __m88000__ */ - -#if defined (__mips) && W_TYPE_SIZE == 32 -#if __GMP_GNUC_PREREQ (4,4) -#define umul_ppmm(w1, w0, u, v) \ - do { \ - UDItype __ll = (UDItype)(u) * (v); \ - w1 = __ll >> 32; \ - w0 = __ll; \ - } while (0) -#endif -#if !defined (umul_ppmm) && __GMP_GNUC_PREREQ (2,7) && !defined (__clang__) -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("multu %2,%3" : "=l" (w0), "=h" (w1) : "d" (u), "d" (v)) -#endif -#if !defined (umul_ppmm) -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("multu %2,%3\n\tmflo %0\n\tmfhi %1" \ - : "=d" (w0), "=d" (w1) : "d" (u), "d" (v)) -#endif -#define UMUL_TIME 10 -#define UDIV_TIME 100 -#endif /* __mips */ - -#if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64 -#if __GMP_GNUC_PREREQ (4,4) -#define umul_ppmm(w1, w0, u, v) \ - do { \ - typedef unsigned int __ll_UTItype __attribute__((mode(TI))); \ - __ll_UTItype __ll = (__ll_UTItype)(u) * (v); \ - w1 = __ll >> 64; \ - w0 = __ll; \ - } while (0) -#endif -#if !defined (umul_ppmm) && __GMP_GNUC_PREREQ (2,7) && !defined (__clang__) -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("dmultu %2,%3" \ - : "=l" (w0), "=h" (w1) \ - : "d" ((UDItype)(u)), "d" ((UDItype)(v))) -#endif -#if !defined (umul_ppmm) -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("dmultu %2,%3\n\tmflo %0\n\tmfhi %1" \ - : "=d" (w0), "=d" (w1) \ - : "d" ((UDItype)(u)), "d" ((UDItype)(v))) -#endif -#define UMUL_TIME 20 -#define UDIV_TIME 140 -#endif /* __mips */ - -#if defined (__mmix__) && W_TYPE_SIZE == 64 -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("MULU %0,%2,%3" : "=r" (w0), "=z" (w1) : "r" (u), "r" (v)) -#endif - -#if defined (__ns32000__) && W_TYPE_SIZE == 32 -#define umul_ppmm(w1, w0, u, v) \ - ({union {UDItype __ll; \ - struct {USItype __l, __h;} __i; \ - } __x; \ - __asm__ ("meid %2,%0" \ - : "=g" (__x.__ll) \ - : "%0" ((USItype)(u)), "g" ((USItype)(v))); \ - (w1) = __x.__i.__h; (w0) = __x.__i.__l;}) -#define __umulsidi3(u, v) \ - ({UDItype __w; \ - __asm__ ("meid %2,%0" \ - : "=g" (__w) \ - : "%0" ((USItype)(u)), "g" ((USItype)(v))); \ - __w; }) -#define udiv_qrnnd(q, r, n1, n0, d) \ - ({union {UDItype __ll; \ - struct {USItype __l, __h;} __i; \ - } __x; \ - __x.__i.__h = (n1); __x.__i.__l = (n0); \ - __asm__ ("deid %2,%0" \ - : "=g" (__x.__ll) \ - : "0" (__x.__ll), "g" ((USItype)(d))); \ - (r) = __x.__i.__l; (q) = __x.__i.__h; }) -#define count_trailing_zeros(count,x) \ - do { \ - __asm__ ("ffsd %2,%0" \ - : "=r" (count) \ - : "0" ((USItype) 0), "r" ((USItype) (x))); \ - } while (0) -#endif /* __ns32000__ */ - -/* In the past we had a block of various #defines tested - _ARCH_PPC - AIX - _ARCH_PWR - AIX - __powerpc__ - gcc - __POWERPC__ - BEOS - __ppc__ - Darwin - PPC - old gcc, GNU/Linux, SysV - The plain PPC test was not good for vxWorks, since PPC is defined on all - CPUs there (eg. m68k too), as a constant one is expected to compare - CPU_FAMILY against. - - At any rate, this was pretty unattractive and a bit fragile. The use of - HAVE_HOST_CPU_FAMILY is designed to cut through it all and be sure of - getting the desired effect. - - ENHANCE-ME: We should test _IBMR2 here when we add assembly support for - the system vendor compilers. (Is that vendor compilers with inline asm, - or what?) */ - -#if (HAVE_HOST_CPU_FAMILY_power || HAVE_HOST_CPU_FAMILY_powerpc) \ - && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - do { \ - if (__builtin_constant_p (bh) && (bh) == 0) \ - __asm__ ("add%I4c %1,%3,%4\n\taddze %0,%2" \ - : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl)); \ - else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \ - __asm__ ("add%I4c %1,%3,%4\n\taddme %0,%2" \ - : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl)); \ - else \ - __asm__ ("add%I5c %1,%4,%5\n\tadde %0,%2,%3" \ - : "=r" (sh), "=&r" (sl) \ - : "r" (ah), "r" (bh), "%r" (al), "rI" (bl)); \ - } while (0) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - do { \ - if (__builtin_constant_p (ah) && (ah) == 0) \ - __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2" \ - : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ - else if (__builtin_constant_p (ah) && (ah) == ~(USItype) 0) \ - __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2" \ - : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ - else if (__builtin_constant_p (bh) && (bh) == 0) \ - __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2" \ - : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ - else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \ - __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2" \ - : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ - else \ - __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \ - } while (0) -#define count_leading_zeros(count, x) \ - __asm__ ("cntlzw %0,%1" : "=r" (count) : "r" (x)) -#define COUNT_LEADING_ZEROS_0 32 -#if HAVE_HOST_CPU_FAMILY_powerpc -#if __GMP_GNUC_PREREQ (4,4) -#define umul_ppmm(w1, w0, u, v) \ - do { \ - UDItype __ll = (UDItype)(u) * (v); \ - w1 = __ll >> 32; \ - w0 = __ll; \ - } while (0) -#endif -#if !defined (umul_ppmm) -#define umul_ppmm(ph, pl, m0, m1) \ - do { \ - USItype __m0 = (m0), __m1 = (m1); \ - __asm__ ("mulhwu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ - (pl) = __m0 * __m1; \ - } while (0) -#endif -#define UMUL_TIME 15 -#define smul_ppmm(ph, pl, m0, m1) \ - do { \ - SItype __m0 = (m0), __m1 = (m1); \ - __asm__ ("mulhw %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ - (pl) = __m0 * __m1; \ - } while (0) -#define SMUL_TIME 14 -#define UDIV_TIME 120 -#else -#define UMUL_TIME 8 -#define smul_ppmm(xh, xl, m0, m1) \ - __asm__ ("mul %0,%2,%3" : "=r" (xh), "=q" (xl) : "r" (m0), "r" (m1)) -#define SMUL_TIME 4 -#define sdiv_qrnnd(q, r, nh, nl, d) \ - __asm__ ("div %0,%2,%4" : "=r" (q), "=q" (r) : "r" (nh), "1" (nl), "r" (d)) -#define UDIV_TIME 100 -#endif -#endif /* 32-bit POWER architecture variants. */ - -/* We should test _IBMR2 here when we add assembly support for the system - vendor compilers. */ -#if HAVE_HOST_CPU_FAMILY_powerpc && W_TYPE_SIZE == 64 -#if !defined (_LONG_LONG_LIMB) -/* _LONG_LONG_LIMB is ABI=mode32 where adde operates on 32-bit values. So - use adde etc only when not _LONG_LONG_LIMB. */ -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - do { \ - if (__builtin_constant_p (bh) && (bh) == 0) \ - __asm__ ("add%I4c %1,%3,%4\n\taddze %0,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" ((UDItype)(ah)), \ - "%r" ((UDItype)(al)), "rI" ((UDItype)(bl))); \ - else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ - __asm__ ("add%I4c %1,%3,%4\n\taddme %0,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" ((UDItype)(ah)), \ - "%r" ((UDItype)(al)), "rI" ((UDItype)(bl))); \ - else \ - __asm__ ("add%I5c %1,%4,%5\n\tadde %0,%2,%3" \ - : "=r" (sh), "=&r" (sl) \ - : "r" ((UDItype)(ah)), "r" ((UDItype)(bh)), \ - "%r" ((UDItype)(al)), "rI" ((UDItype)(bl))); \ - } while (0) -/* We use "*rI" for the constant operand here, since with just "I", gcc barfs. - This might seem strange, but gcc folds away the dead code late. */ -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - do { \ - if (__builtin_constant_p (bl) && bl > -0x8000 && bl <= 0x8000) { \ - if (__builtin_constant_p (ah) && (ah) == 0) \ - __asm__ ("addic %1,%3,%4\n\tsubfze %0,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" ((UDItype)(bh)), \ - "rI" ((UDItype)(al)), "*rI" (-((UDItype)(bl)))); \ - else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0) \ - __asm__ ("addic %1,%3,%4\n\tsubfme %0,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" ((UDItype)(bh)), \ - "rI" ((UDItype)(al)), "*rI" (-((UDItype)(bl)))); \ - else if (__builtin_constant_p (bh) && (bh) == 0) \ - __asm__ ("addic %1,%3,%4\n\taddme %0,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" ((UDItype)(ah)), \ - "rI" ((UDItype)(al)), "*rI" (-((UDItype)(bl)))); \ - else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ - __asm__ ("addic %1,%3,%4\n\taddze %0,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" ((UDItype)(ah)), \ - "rI" ((UDItype)(al)), "*rI" (-((UDItype)(bl)))); \ - else \ - __asm__ ("addic %1,%4,%5\n\tsubfe %0,%3,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" ((UDItype)(ah)), "r" ((UDItype)(bh)), \ - "rI" ((UDItype)(al)), "*rI" (-((UDItype)(bl)))); \ - } else { \ - if (__builtin_constant_p (ah) && (ah) == 0) \ - __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" ((UDItype)(bh)), \ - "rI" ((UDItype)(al)), "r" ((UDItype)(bl))); \ - else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0) \ - __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" ((UDItype)(bh)), \ - "rI" ((UDItype)(al)), "r" ((UDItype)(bl))); \ - else if (__builtin_constant_p (bh) && (bh) == 0) \ - __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" ((UDItype)(ah)), \ - "rI" ((UDItype)(al)), "r" ((UDItype)(bl))); \ - else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ - __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" ((UDItype)(ah)), \ - "rI" ((UDItype)(al)), "r" ((UDItype)(bl))); \ - else \ - __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" ((UDItype)(ah)), "r" ((UDItype)(bh)), \ - "rI" ((UDItype)(al)), "r" ((UDItype)(bl))); \ - } \ - } while (0) -#endif /* ! _LONG_LONG_LIMB */ -#define count_leading_zeros(count, x) \ - __asm__ ("cntlzd %0,%1" : "=r" (count) : "r" (x)) -#define COUNT_LEADING_ZEROS_0 64 -#if 0 && __GMP_GNUC_PREREQ (4,4) /* Disable, this results in libcalls! */ -#define umul_ppmm(w1, w0, u, v) \ - do { \ - typedef unsigned int __ll_UTItype __attribute__((mode(TI))); \ - __ll_UTItype __ll = (__ll_UTItype)(u) * (v); \ - w1 = __ll >> 64; \ - w0 = __ll; \ - } while (0) -#endif -#if !defined (umul_ppmm) -#define umul_ppmm(ph, pl, m0, m1) \ - do { \ - UDItype __m0 = (m0), __m1 = (m1); \ - __asm__ ("mulhdu %0,%1,%2" : "=r" (ph) : "%r" (__m0), "r" (__m1)); \ - (pl) = __m0 * __m1; \ - } while (0) -#endif -#define UMUL_TIME 15 -#define smul_ppmm(ph, pl, m0, m1) \ - do { \ - DItype __m0 = (m0), __m1 = (m1); \ - __asm__ ("mulhd %0,%1,%2" : "=r" (ph) : "%r" (__m0), "r" (__m1)); \ - (pl) = __m0 * __m1; \ - } while (0) -#define SMUL_TIME 14 /* ??? */ -#define UDIV_TIME 120 /* ??? */ -#endif /* 64-bit PowerPC. */ - -#if defined (__pyr__) && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addw %5,%1\n\taddwc %3,%0" \ - : "=r" (sh), "=&r" (sl) \ - : "0" ((USItype)(ah)), "g" ((USItype)(bh)), \ - "%1" ((USItype)(al)), "g" ((USItype)(bl))) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subw %5,%1\n\tsubwb %3,%0" \ - : "=r" (sh), "=&r" (sl) \ - : "0" ((USItype)(ah)), "g" ((USItype)(bh)), \ - "1" ((USItype)(al)), "g" ((USItype)(bl))) -/* This insn works on Pyramids with AP, XP, or MI CPUs, but not with SP. */ -#define umul_ppmm(w1, w0, u, v) \ - ({union {UDItype __ll; \ - struct {USItype __h, __l;} __i; \ - } __x; \ - __asm__ ("movw %1,%R0\n\tuemul %2,%0" \ - : "=&r" (__x.__ll) \ - : "g" ((USItype) (u)), "g" ((USItype)(v))); \ - (w1) = __x.__i.__h; (w0) = __x.__i.__l;}) -#endif /* __pyr__ */ - -#if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("a %1,%5\n\tae %0,%3" \ - : "=r" (sh), "=&r" (sl) \ - : "0" ((USItype)(ah)), "r" ((USItype)(bh)), \ - "%1" ((USItype)(al)), "r" ((USItype)(bl))) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("s %1,%5\n\tse %0,%3" \ - : "=r" (sh), "=&r" (sl) \ - : "0" ((USItype)(ah)), "r" ((USItype)(bh)), \ - "1" ((USItype)(al)), "r" ((USItype)(bl))) -#define smul_ppmm(ph, pl, m0, m1) \ - __asm__ ( \ - "s r2,r2\n" \ -" mts r10,%2\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" m r2,%3\n" \ -" cas %0,r2,r0\n" \ -" mfs r10,%1" \ - : "=r" (ph), "=r" (pl) \ - : "%r" ((USItype)(m0)), "r" ((USItype)(m1)) \ - : "r2") -#define UMUL_TIME 20 -#define UDIV_TIME 200 -#define count_leading_zeros(count, x) \ - do { \ - if ((x) >= 0x10000) \ - __asm__ ("clz %0,%1" \ - : "=r" (count) : "r" ((USItype)(x) >> 16)); \ - else \ - { \ - __asm__ ("clz %0,%1" \ - : "=r" (count) : "r" ((USItype)(x))); \ - (count) += 16; \ - } \ - } while (0) -#endif /* RT/ROMP */ - -#if (defined (__SH2__) || defined (__SH3__) || defined (__SH4__)) && W_TYPE_SIZE == 32 -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("dmulu.l %2,%3\n\tsts macl,%1\n\tsts mach,%0" \ - : "=r" (w1), "=r" (w0) : "r" (u), "r" (v) : "macl", "mach") -#define UMUL_TIME 5 -#endif - -#if defined (__sparc__) && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addcc %r4,%5,%1\n\taddx %r2,%3,%0" \ - : "=r" (sh), "=&r" (sl) \ - : "rJ" (ah), "rI" (bh),"%rJ" (al), "rI" (bl) \ - __CLOBBER_CC) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subcc %r4,%5,%1\n\tsubx %r2,%3,%0" \ - : "=r" (sh), "=&r" (sl) \ - : "rJ" (ah), "rI" (bh), "rJ" (al), "rI" (bl) \ - __CLOBBER_CC) -/* FIXME: When gcc -mcpu=v9 is used on solaris, gcc/config/sol2-sld-64.h - doesn't define anything to indicate that to us, it only sets __sparcv8. */ -#if defined (__sparc_v9__) || defined (__sparcv9) -/* Perhaps we should use floating-point operations here? */ -#if 0 -/* Triggers a bug making mpz/tests/t-gcd.c fail. - Perhaps we simply need explicitly zero-extend the inputs? */ -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("mulx %2,%3,%%g1; srl %%g1,0,%1; srlx %%g1,32,%0" : \ - "=r" (w1), "=r" (w0) : "r" (u), "r" (v) : "g1") -#else -/* Use v8 umul until above bug is fixed. */ -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("umul %2,%3,%1;rd %%y,%0" : "=r" (w1), "=r" (w0) : "r" (u), "r" (v)) -#endif -/* Use a plain v8 divide for v9. */ -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { \ - USItype __q; \ - __asm__ ("mov %1,%%y;nop;nop;nop;udiv %2,%3,%0" \ - : "=r" (__q) : "r" (n1), "r" (n0), "r" (d)); \ - (r) = (n0) - __q * (d); \ - (q) = __q; \ - } while (0) -#else -#if defined (__sparc_v8__) /* gcc normal */ \ - || defined (__sparcv8) /* gcc solaris */ \ - || HAVE_HOST_CPU_supersparc -/* Don't match immediate range because, 1) it is not often useful, - 2) the 'I' flag thinks of the range as a 13 bit signed interval, - while we want to match a 13 bit interval, sign extended to 32 bits, - but INTERPRETED AS UNSIGNED. */ -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("umul %2,%3,%1;rd %%y,%0" : "=r" (w1), "=r" (w0) : "r" (u), "r" (v)) -#define UMUL_TIME 5 - -#if HAVE_HOST_CPU_supersparc -#define UDIV_TIME 60 /* SuperSPARC timing */ -#else -/* Don't use this on SuperSPARC because its udiv only handles 53 bit - dividends and will trap to the kernel for the rest. */ -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { \ - USItype __q; \ - __asm__ ("mov %1,%%y;nop;nop;nop;udiv %2,%3,%0" \ - : "=r" (__q) : "r" (n1), "r" (n0), "r" (d)); \ - (r) = (n0) - __q * (d); \ - (q) = __q; \ - } while (0) -#define UDIV_TIME 25 -#endif /* HAVE_HOST_CPU_supersparc */ - -#else /* ! __sparc_v8__ */ -#if defined (__sparclite__) -/* This has hardware multiply but not divide. It also has two additional - instructions scan (ffs from high bit) and divscc. */ -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("umul %2,%3,%1;rd %%y,%0" : "=r" (w1), "=r" (w0) : "r" (u), "r" (v)) -#define UMUL_TIME 5 -#define udiv_qrnnd(q, r, n1, n0, d) \ - __asm__ ("! Inlined udiv_qrnnd\n" \ -" wr %%g0,%2,%%y ! Not a delayed write for sparclite\n" \ -" tst %%g0\n" \ -" divscc %3,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%%g1\n" \ -" divscc %%g1,%4,%0\n" \ -" rd %%y,%1\n" \ -" bl,a 1f\n" \ -" add %1,%4,%1\n" \ -"1: ! End of inline udiv_qrnnd" \ - : "=r" (q), "=r" (r) : "r" (n1), "r" (n0), "rI" (d) \ - : "%g1" __AND_CLOBBER_CC) -#define UDIV_TIME 37 -#define count_leading_zeros(count, x) \ - __asm__ ("scan %1,1,%0" : "=r" (count) : "r" (x)) -/* Early sparclites return 63 for an argument of 0, but they warn that future - implementations might change this. Therefore, leave COUNT_LEADING_ZEROS_0 - undefined. */ -#endif /* __sparclite__ */ -#endif /* __sparc_v8__ */ -#endif /* __sparc_v9__ */ -/* Default to sparc v7 versions of umul_ppmm and udiv_qrnnd. */ -#ifndef umul_ppmm -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("! Inlined umul_ppmm\n" \ -" wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr\n" \ -" sra %3,31,%%g2 ! Don't move this insn\n" \ -" and %2,%%g2,%%g2 ! Don't move this insn\n" \ -" andcc %%g0,0,%%g1 ! Don't move this insn\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,%3,%%g1\n" \ -" mulscc %%g1,0,%%g1\n" \ -" add %%g1,%%g2,%0\n" \ -" rd %%y,%1" \ - : "=r" (w1), "=r" (w0) : "%rI" (u), "r" (v) \ - : "%g1", "%g2" __AND_CLOBBER_CC) -#define UMUL_TIME 39 /* 39 instructions */ -#endif -#ifndef udiv_qrnnd -#ifndef LONGLONG_STANDALONE -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { UWtype __r; \ - (q) = __MPN(udiv_qrnnd) (&__r, (n1), (n0), (d)); \ - (r) = __r; \ - } while (0) -extern UWtype __MPN(udiv_qrnnd) (UWtype *, UWtype, UWtype, UWtype); -#ifndef UDIV_TIME -#define UDIV_TIME 140 -#endif -#endif /* LONGLONG_STANDALONE */ -#endif /* udiv_qrnnd */ -#endif /* __sparc__ */ - -#if defined (__sparc__) && W_TYPE_SIZE == 64 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ( \ - "addcc %r4,%5,%1\n" \ - " addccc %r6,%7,%%g0\n" \ - " addc %r2,%3,%0" \ - : "=r" (sh), "=&r" (sl) \ - : "rJ" ((UDItype)(ah)), "rI" ((UDItype)(bh)), \ - "%rJ" ((UDItype)(al)), "rI" ((UDItype)(bl)), \ - "%rJ" ((UDItype)(al) >> 32), "rI" ((UDItype)(bl) >> 32) \ - __CLOBBER_CC) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ( \ - "subcc %r4,%5,%1\n" \ - " subccc %r6,%7,%%g0\n" \ - " subc %r2,%3,%0" \ - : "=r" (sh), "=&r" (sl) \ - : "rJ" ((UDItype)(ah)), "rI" ((UDItype)(bh)), \ - "rJ" ((UDItype)(al)), "rI" ((UDItype)(bl)), \ - "rJ" ((UDItype)(al) >> 32), "rI" ((UDItype)(bl) >> 32) \ - __CLOBBER_CC) -#if __VIS__ >= 0x300 -#undef add_ssaaaa -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ( \ - "addcc %r4, %5, %1\n" \ - " addxc %r2, %r3, %0" \ - : "=r" (sh), "=&r" (sl) \ - : "rJ" ((UDItype)(ah)), "rJ" ((UDItype)(bh)), \ - "%rJ" ((UDItype)(al)), "rI" ((UDItype)(bl)) __CLOBBER_CC) -#define umul_ppmm(ph, pl, m0, m1) \ - do { \ - UDItype __m0 = (m0), __m1 = (m1); \ - (pl) = __m0 * __m1; \ - __asm__ ("umulxhi\t%2, %1, %0" \ - : "=r" (ph) \ - : "%r" (__m0), "r" (__m1)); \ - } while (0) -#define count_leading_zeros(count, x) \ - __asm__ ("lzd\t%1,%0" : "=r" (count) : "r" (x)) -/* Needed by count_leading_zeros_32 in sparc64.h. */ -#define COUNT_LEADING_ZEROS_NEED_CLZ_TAB -#endif -#endif - -#if (defined (__vax) || defined (__vax__)) && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addl2 %5,%1\n\tadwc %3,%0" \ - : "=g" (sh), "=&g" (sl) \ - : "0" ((USItype)(ah)), "g" ((USItype)(bh)), \ - "%1" ((USItype)(al)), "g" ((USItype)(bl))) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subl2 %5,%1\n\tsbwc %3,%0" \ - : "=g" (sh), "=&g" (sl) \ - : "0" ((USItype)(ah)), "g" ((USItype)(bh)), \ - "1" ((USItype)(al)), "g" ((USItype)(bl))) -#define smul_ppmm(xh, xl, m0, m1) \ - do { \ - union {UDItype __ll; \ - struct {USItype __l, __h;} __i; \ - } __x; \ - USItype __m0 = (m0), __m1 = (m1); \ - __asm__ ("emul %1,%2,$0,%0" \ - : "=g" (__x.__ll) : "g" (__m0), "g" (__m1)); \ - (xh) = __x.__i.__h; (xl) = __x.__i.__l; \ - } while (0) -#define sdiv_qrnnd(q, r, n1, n0, d) \ - do { \ - union {DItype __ll; \ - struct {SItype __l, __h;} __i; \ - } __x; \ - __x.__i.__h = n1; __x.__i.__l = n0; \ - __asm__ ("ediv %3,%2,%0,%1" \ - : "=g" (q), "=g" (r) : "g" (__x.__ll), "g" (d)); \ - } while (0) -#if 0 -/* FIXME: This instruction appears to be unimplemented on some systems (vax - 8800 maybe). */ -#define count_trailing_zeros(count,x) \ - do { \ - __asm__ ("ffs 0, 31, %1, %0" \ - : "=g" (count) \ - : "g" ((USItype) (x))); \ - } while (0) -#endif -#endif /* vax */ - -#if defined (__z8000__) && W_TYPE_SIZE == 16 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("add %H1,%H5\n\tadc %H0,%H3" \ - : "=r" (sh), "=&r" (sl) \ - : "0" ((unsigned int)(ah)), "r" ((unsigned int)(bh)), \ - "%1" ((unsigned int)(al)), "rQR" ((unsigned int)(bl))) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("sub %H1,%H5\n\tsbc %H0,%H3" \ - : "=r" (sh), "=&r" (sl) \ - : "0" ((unsigned int)(ah)), "r" ((unsigned int)(bh)), \ - "1" ((unsigned int)(al)), "rQR" ((unsigned int)(bl))) -#define umul_ppmm(xh, xl, m0, m1) \ - do { \ - union {long int __ll; \ - struct {unsigned int __h, __l;} __i; \ - } __x; \ - unsigned int __m0 = (m0), __m1 = (m1); \ - __asm__ ("mult %S0,%H3" \ - : "=r" (__x.__i.__h), "=r" (__x.__i.__l) \ - : "%1" (m0), "rQR" (m1)); \ - (xh) = __x.__i.__h; (xl) = __x.__i.__l; \ - (xh) += ((((signed int) __m0 >> 15) & __m1) \ - + (((signed int) __m1 >> 15) & __m0)); \ - } while (0) -#endif /* __z8000__ */ - -#endif /* __GNUC__ */ - -#endif /* NO_ASM */ - - -/* FIXME: "sidi" here is highly doubtful, should sometimes be "diti". */ -#if !defined (umul_ppmm) && defined (__umulsidi3) -#define umul_ppmm(ph, pl, m0, m1) \ - { \ - UDWtype __ll = __umulsidi3 (m0, m1); \ - ph = (UWtype) (__ll >> W_TYPE_SIZE); \ - pl = (UWtype) __ll; \ - } -#endif - -#if !defined (__umulsidi3) -#define __umulsidi3(u, v) \ - ({UWtype __hi, __lo; \ - umul_ppmm (__hi, __lo, u, v); \ - ((UDWtype) __hi << W_TYPE_SIZE) | __lo; }) -#endif - - -#if defined (__cplusplus) -#define __longlong_h_C "C" -#else -#define __longlong_h_C -#endif - -/* Use mpn_umul_ppmm or mpn_udiv_qrnnd functions, if they exist. The "_r" - forms have "reversed" arguments, meaning the pointer is last, which - sometimes allows better parameter passing, in particular on 64-bit - hppa. */ - -#define mpn_umul_ppmm __MPN(umul_ppmm) -extern __longlong_h_C UWtype mpn_umul_ppmm (UWtype *, UWtype, UWtype); - -#if ! defined (umul_ppmm) && HAVE_NATIVE_mpn_umul_ppmm \ - && ! defined (LONGLONG_STANDALONE) -#define umul_ppmm(wh, wl, u, v) \ - do { \ - UWtype __umul_ppmm__p0; \ - (wh) = mpn_umul_ppmm (&__umul_ppmm__p0, (UWtype) (u), (UWtype) (v));\ - (wl) = __umul_ppmm__p0; \ - } while (0) -#endif - -#define mpn_umul_ppmm_r __MPN(umul_ppmm_r) -extern __longlong_h_C UWtype mpn_umul_ppmm_r (UWtype, UWtype, UWtype *); - -#if ! defined (umul_ppmm) && HAVE_NATIVE_mpn_umul_ppmm_r \ - && ! defined (LONGLONG_STANDALONE) -#define umul_ppmm(wh, wl, u, v) \ - do { \ - UWtype __umul_p0; \ - (wh) = mpn_umul_ppmm_r ((UWtype) (u), (UWtype) (v), &__umul_p0); \ - (wl) = __umul_p0; \ - } while (0) -#endif - -#define mpn_udiv_qrnnd __MPN(udiv_qrnnd) -extern __longlong_h_C UWtype mpn_udiv_qrnnd (UWtype *, UWtype, UWtype, UWtype); - -#if ! defined (udiv_qrnnd) && HAVE_NATIVE_mpn_udiv_qrnnd \ - && ! defined (LONGLONG_STANDALONE) -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { \ - UWtype __udiv_qrnnd_r; \ - (q) = mpn_udiv_qrnnd (&__udiv_qrnnd_r, \ - (UWtype) (n1), (UWtype) (n0), (UWtype) d); \ - (r) = __udiv_qrnnd_r; \ - } while (0) -#endif - -#define mpn_udiv_qrnnd_r __MPN(udiv_qrnnd_r) -extern __longlong_h_C UWtype mpn_udiv_qrnnd_r (UWtype, UWtype, UWtype, UWtype *); - -#if ! defined (udiv_qrnnd) && HAVE_NATIVE_mpn_udiv_qrnnd_r \ - && ! defined (LONGLONG_STANDALONE) -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { \ - UWtype __udiv_qrnnd_r; \ - (q) = mpn_udiv_qrnnd_r ((UWtype) (n1), (UWtype) (n0), (UWtype) d, \ - &__udiv_qrnnd_r); \ - (r) = __udiv_qrnnd_r; \ - } while (0) -#endif - - -/* If this machine has no inline assembler, use C macros. */ - -#if !defined (add_ssaaaa) -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - do { \ - UWtype __x; \ - __x = (al) + (bl); \ - (sh) = (ah) + (bh) + (__x < (al)); \ - (sl) = __x; \ - } while (0) -#endif - -#if !defined (sub_ddmmss) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - do { \ - UWtype __x; \ - __x = (al) - (bl); \ - (sh) = (ah) - (bh) - ((al) < (bl)); \ - (sl) = __x; \ - } while (0) -#endif - -/* If we lack umul_ppmm but have smul_ppmm, define umul_ppmm in terms of - smul_ppmm. */ -#if !defined (umul_ppmm) && defined (smul_ppmm) -#define umul_ppmm(w1, w0, u, v) \ - do { \ - UWtype __w1; \ - UWtype __xm0 = (u), __xm1 = (v); \ - smul_ppmm (__w1, w0, __xm0, __xm1); \ - (w1) = __w1 + (-(__xm0 >> (W_TYPE_SIZE - 1)) & __xm1) \ - + (-(__xm1 >> (W_TYPE_SIZE - 1)) & __xm0); \ - } while (0) -#endif - -/* If we still don't have umul_ppmm, define it using plain C. - - For reference, when this code is used for squaring (ie. u and v identical - expressions), gcc recognises __x1 and __x2 are the same and generates 3 - multiplies, not 4. The subsequent additions could be optimized a bit, - but the only place GMP currently uses such a square is mpn_sqr_basecase, - and chips obliged to use this generic C umul will have plenty of worse - performance problems than a couple of extra instructions on the diagonal - of sqr_basecase. */ - -#if !defined (umul_ppmm) -#define umul_ppmm(w1, w0, u, v) \ - do { \ - UWtype __x0, __x1, __x2, __x3; \ - UHWtype __ul, __vl, __uh, __vh; \ - UWtype __u = (u), __v = (v); \ - \ - __ul = __ll_lowpart (__u); \ - __uh = __ll_highpart (__u); \ - __vl = __ll_lowpart (__v); \ - __vh = __ll_highpart (__v); \ - \ - __x0 = (UWtype) __ul * __vl; \ - __x1 = (UWtype) __ul * __vh; \ - __x2 = (UWtype) __uh * __vl; \ - __x3 = (UWtype) __uh * __vh; \ - \ - __x1 += __ll_highpart (__x0);/* this can't give carry */ \ - __x1 += __x2; /* but this indeed can */ \ - if (__x1 < __x2) /* did we get it? */ \ - __x3 += __ll_B; /* yes, add it in the proper pos. */ \ - \ - (w1) = __x3 + __ll_highpart (__x1); \ - (w0) = (__x1 << W_TYPE_SIZE/2) + __ll_lowpart (__x0); \ - } while (0) -#endif - -/* If we don't have smul_ppmm, define it using umul_ppmm (which surely will - exist in one form or another. */ -#if !defined (smul_ppmm) -#define smul_ppmm(w1, w0, u, v) \ - do { \ - UWtype __w1; \ - UWtype __xm0 = (u), __xm1 = (v); \ - umul_ppmm (__w1, w0, __xm0, __xm1); \ - (w1) = __w1 - (-(__xm0 >> (W_TYPE_SIZE - 1)) & __xm1) \ - - (-(__xm1 >> (W_TYPE_SIZE - 1)) & __xm0); \ - } while (0) -#endif - -/* Define this unconditionally, so it can be used for debugging. */ -#define __udiv_qrnnd_c(q, r, n1, n0, d) \ - do { \ - UWtype __d1, __d0, __q1, __q0, __r1, __r0, __m; \ - \ - ASSERT ((d) != 0); \ - ASSERT ((n1) < (d)); \ - \ - __d1 = __ll_highpart (d); \ - __d0 = __ll_lowpart (d); \ - \ - __q1 = (n1) / __d1; \ - __r1 = (n1) - __q1 * __d1; \ - __m = __q1 * __d0; \ - __r1 = __r1 * __ll_B | __ll_highpart (n0); \ - if (__r1 < __m) \ - { \ - __q1--, __r1 += (d); \ - if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\ - if (__r1 < __m) \ - __q1--, __r1 += (d); \ - } \ - __r1 -= __m; \ - \ - __q0 = __r1 / __d1; \ - __r0 = __r1 - __q0 * __d1; \ - __m = __q0 * __d0; \ - __r0 = __r0 * __ll_B | __ll_lowpart (n0); \ - if (__r0 < __m) \ - { \ - __q0--, __r0 += (d); \ - if (__r0 >= (d)) \ - if (__r0 < __m) \ - __q0--, __r0 += (d); \ - } \ - __r0 -= __m; \ - \ - (q) = __q1 * __ll_B | __q0; \ - (r) = __r0; \ - } while (0) - -/* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through - __udiv_w_sdiv (defined in libgcc or elsewhere). */ -#if !defined (udiv_qrnnd) && defined (sdiv_qrnnd) -#define udiv_qrnnd(q, r, nh, nl, d) \ - do { \ - UWtype __r; \ - (q) = __MPN(udiv_w_sdiv) (&__r, nh, nl, d); \ - (r) = __r; \ - } while (0) -__GMP_DECLSPEC UWtype __MPN(udiv_w_sdiv) (UWtype *, UWtype, UWtype, UWtype); -#endif - -/* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c. */ -#if !defined (udiv_qrnnd) -#define UDIV_NEEDS_NORMALIZATION 1 -#define udiv_qrnnd __udiv_qrnnd_c -#endif - -#if !defined (count_leading_zeros) -#define count_leading_zeros(count, x) \ - do { \ - UWtype __xr = (x); \ - UWtype __a; \ - \ - if (W_TYPE_SIZE == 32) \ - { \ - __a = __xr < ((UWtype) 1 << 2*__BITS4) \ - ? (__xr < ((UWtype) 1 << __BITS4) ? 1 : __BITS4 + 1) \ - : (__xr < ((UWtype) 1 << 3*__BITS4) ? 2*__BITS4 + 1 \ - : 3*__BITS4 + 1); \ - } \ - else \ - { \ - for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8) \ - if (((__xr >> __a) & 0xff) != 0) \ - break; \ - ++__a; \ - } \ - \ - (count) = W_TYPE_SIZE + 1 - __a - __clz_tab[__xr >> __a]; \ - } while (0) -/* This version gives a well-defined value for zero. */ -#define COUNT_LEADING_ZEROS_0 (W_TYPE_SIZE - 1) -#define COUNT_LEADING_ZEROS_NEED_CLZ_TAB -#define COUNT_LEADING_ZEROS_SLOW -#endif - -/* clz_tab needed by mpn/x86/pentium/mod_1.asm in a fat binary */ -#if HAVE_HOST_CPU_FAMILY_x86 && WANT_FAT_BINARY -#define COUNT_LEADING_ZEROS_NEED_CLZ_TAB -#endif - -#ifdef COUNT_LEADING_ZEROS_NEED_CLZ_TAB -extern const unsigned char __GMP_DECLSPEC __clz_tab[129]; -#endif - -#if !defined (count_trailing_zeros) -#if !defined (COUNT_LEADING_ZEROS_SLOW) -/* Define count_trailing_zeros using an asm count_leading_zeros. */ -#define count_trailing_zeros(count, x) \ - do { \ - UWtype __ctz_x = (x); \ - UWtype __ctz_c; \ - ASSERT (__ctz_x != 0); \ - count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x); \ - (count) = W_TYPE_SIZE - 1 - __ctz_c; \ - } while (0) -#else -/* Define count_trailing_zeros in plain C, assuming small counts are common. - We use clz_tab without ado, since the C count_leading_zeros above will have - pulled it in. */ -#define count_trailing_zeros(count, x) \ - do { \ - UWtype __ctz_x = (x); \ - int __ctz_c; \ - \ - if (LIKELY ((__ctz_x & 0xff) != 0)) \ - (count) = __clz_tab[__ctz_x & -__ctz_x] - 2; \ - else \ - { \ - for (__ctz_c = 8 - 2; __ctz_c < W_TYPE_SIZE - 2; __ctz_c += 8) \ - { \ - __ctz_x >>= 8; \ - if (LIKELY ((__ctz_x & 0xff) != 0)) \ - break; \ - } \ - \ - (count) = __ctz_c + __clz_tab[__ctz_x & -__ctz_x]; \ - } \ - } while (0) -#endif -#endif - -#ifndef UDIV_NEEDS_NORMALIZATION -#define UDIV_NEEDS_NORMALIZATION 0 -#endif - -/* Whether udiv_qrnnd is actually implemented with udiv_qrnnd_preinv, and - that hence the latter should always be used. */ -#ifndef UDIV_PREINV_ALWAYS -#define UDIV_PREINV_ALWAYS 0 -#endif - -/* Give defaults for UMUL_TIME and UDIV_TIME. */ -#ifndef UMUL_TIME -#define UMUL_TIME 1 -#endif - -#ifndef UDIV_TIME -#define UDIV_TIME UMUL_TIME -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/ltmain.sh b/src/plugins/e-acsl/contrib/libgmp/ltmain.sh deleted file mode 100644 index 0f0a2da3f9dd10627626bf9725b332d95f314393..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/ltmain.sh +++ /dev/null @@ -1,11147 +0,0 @@ -#! /bin/sh -## DO NOT EDIT - This file generated from ./build-aux/ltmain.in -## by inline-source v2014-01-03.01 - -# libtool (GNU libtool) 2.4.6 -# Provide generalized library-building support services. -# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 - -# Copyright (C) 1996-2015 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. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - - -PROGRAM=libtool -PACKAGE=libtool -VERSION=2.4.6 -package_revision=2.4.6 - - -## ------ ## -## Usage. ## -## ------ ## - -# Run './libtool --help' for help with using this script from the -# command line. - - -## ------------------------------- ## -## User overridable command paths. ## -## ------------------------------- ## - -# After configure completes, it has a better idea of some of the -# shell tools we need than the defaults used by the functions shared -# with bootstrap, so set those here where they can still be over- -# ridden by the user, but otherwise take precedence. - -: ${AUTOCONF="autoconf"} -: ${AUTOMAKE="automake"} - - -## -------------------------- ## -## Source external libraries. ## -## -------------------------- ## - -# Much of our low-level functionality needs to be sourced from external -# libraries, which are installed to $pkgauxdir. - -# Set a version string for this script. -scriptversion=2015-01-20.17; # UTC - -# General shell script boiler plate, and helper functions. -# Written by Gary V. Vaughan, 2004 - -# Copyright (C) 2004-2015 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. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. - -# As a special exception to the GNU General Public License, if you distribute -# this file as part of a program or library that is built using GNU Libtool, -# you may include this file under the same distribution terms that you use -# for the rest of that program. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Please report bugs or propose patches to gary@gnu.org. - - -## ------ ## -## Usage. ## -## ------ ## - -# Evaluate this file near the top of your script to gain access to -# the functions and variables defined here: -# -# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh -# -# If you need to override any of the default environment variable -# settings, do that before evaluating this file. - - -## -------------------- ## -## Shell normalisation. ## -## -------------------- ## - -# Some shells need a little help to be as Bourne compatible as possible. -# Before doing anything else, make sure all that help has been provided! - -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac -fi - -# NLS nuisances: We save the old values in case they are required later. -_G_user_locale= -_G_safe_locale= -for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test set = \"\${$_G_var+set}\"; then - save_$_G_var=\$$_G_var - $_G_var=C - export $_G_var - _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" - _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" - fi" -done - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Make sure IFS has a sensible default -sp=' ' -nl=' -' -IFS="$sp $nl" - -# There are apparently some retarded systems that use ';' as a PATH separator! -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - - -## ------------------------- ## -## Locate command utilities. ## -## ------------------------- ## - - -# func_executable_p FILE -# ---------------------- -# Check that FILE is an executable regular file. -func_executable_p () -{ - test -f "$1" && test -x "$1" -} - - -# func_path_progs PROGS_LIST CHECK_FUNC [PATH] -# -------------------------------------------- -# Search for either a program that responds to --version with output -# containing "GNU", or else returned by CHECK_FUNC otherwise, by -# trying all the directories in PATH with each of the elements of -# PROGS_LIST. -# -# CHECK_FUNC should accept the path to a candidate program, and -# set $func_check_prog_result if it truncates its output less than -# $_G_path_prog_max characters. -func_path_progs () -{ - _G_progs_list=$1 - _G_check_func=$2 - _G_PATH=${3-"$PATH"} - - _G_path_prog_max=0 - _G_path_prog_found=false - _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} - for _G_dir in $_G_PATH; do - IFS=$_G_save_IFS - test -z "$_G_dir" && _G_dir=. - for _G_prog_name in $_G_progs_list; do - for _exeext in '' .EXE; do - _G_path_prog=$_G_dir/$_G_prog_name$_exeext - func_executable_p "$_G_path_prog" || continue - case `"$_G_path_prog" --version 2>&1` in - *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; - *) $_G_check_func $_G_path_prog - func_path_progs_result=$func_check_prog_result - ;; - esac - $_G_path_prog_found && break 3 - done - done - done - IFS=$_G_save_IFS - test -z "$func_path_progs_result" && { - echo "no acceptable sed could be found in \$PATH" >&2 - exit 1 - } -} - - -# We want to be able to use the functions in this file before configure -# has figured out where the best binaries are kept, which means we have -# to search for them ourselves - except when the results are already set -# where we skip the searches. - -# Unless the user overrides by setting SED, search the path for either GNU -# sed, or the sed that truncates its output the least. -test -z "$SED" && { - _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for _G_i in 1 2 3 4 5 6 7; do - _G_sed_script=$_G_sed_script$nl$_G_sed_script - done - echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed - _G_sed_script= - - func_check_prog_sed () - { - _G_path_prog=$1 - - _G_count=0 - printf 0123456789 >conftest.in - while : - do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo '' >> conftest.nl - "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break - diff conftest.out conftest.nl >/dev/null 2>&1 || break - _G_count=`expr $_G_count + 1` - if test "$_G_count" -gt "$_G_path_prog_max"; then - # Best one so far, save it but keep looking for a better one - func_check_prog_result=$_G_path_prog - _G_path_prog_max=$_G_count - fi - # 10*(2^10) chars as input seems more than enough - test 10 -lt "$_G_count" && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out - } - - func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin - rm -f conftest.sed - SED=$func_path_progs_result -} - - -# Unless the user overrides by setting GREP, search the path for either GNU -# grep, or the grep that truncates its output the least. -test -z "$GREP" && { - func_check_prog_grep () - { - _G_path_prog=$1 - - _G_count=0 - _G_path_prog_max=0 - printf 0123456789 >conftest.in - while : - do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo 'GREP' >> conftest.nl - "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break - diff conftest.out conftest.nl >/dev/null 2>&1 || break - _G_count=`expr $_G_count + 1` - if test "$_G_count" -gt "$_G_path_prog_max"; then - # Best one so far, save it but keep looking for a better one - func_check_prog_result=$_G_path_prog - _G_path_prog_max=$_G_count - fi - # 10*(2^10) chars as input seems more than enough - test 10 -lt "$_G_count" && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out - } - - func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin - GREP=$func_path_progs_result -} - - -## ------------------------------- ## -## User overridable command paths. ## -## ------------------------------- ## - -# All uppercase variable names are used for environment variables. These -# variables can be overridden by the user before calling a script that -# uses them if a suitable command of that name is not already available -# in the command search PATH. - -: ${CP="cp -f"} -: ${ECHO="printf %s\n"} -: ${EGREP="$GREP -E"} -: ${FGREP="$GREP -F"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} - - -## -------------------- ## -## Useful sed snippets. ## -## -------------------- ## - -sed_dirname='s|/[^/]*$||' -sed_basename='s|^.*/||' - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s|\([`"$\\]\)|\\\1|g' - -# Same as above, but do not quote variable references. -sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' - -# Sed substitution that converts a w32 file name or path -# that contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - -# Re-'\' parameter expansions in output of sed_double_quote_subst that -# were '\'-ed in input to the same. If an odd number of '\' preceded a -# '$' in input to sed_double_quote_subst, that '$' was protected from -# expansion. Since each input '\' is now two '\'s, look for any number -# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. -_G_bs='\\' -_G_bs2='\\\\' -_G_bs4='\\\\\\\\' -_G_dollar='\$' -sed_double_backslash="\ - s/$_G_bs4/&\\ -/g - s/^$_G_bs2$_G_dollar/$_G_bs&/ - s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g - s/\n//g" - - -## ----------------- ## -## Global variables. ## -## ----------------- ## - -# Except for the global variables explicitly listed below, the following -# functions in the '^func_' namespace, and the '^require_' namespace -# variables initialised in the 'Resource management' section, sourcing -# this file will not pollute your global namespace with anything -# else. There's no portable way to scope variables in Bourne shell -# though, so actually running these functions will sometimes place -# results into a variable named after the function, and often use -# temporary variables in the '^_G_' namespace. If you are careful to -# avoid using those namespaces casually in your sourcing script, things -# should continue to work as you expect. And, of course, you can freely -# overwrite any of the functions or variables defined here before -# calling anything to customize them. - -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -# Allow overriding, eg assuming that you follow the convention of -# putting '$debug_cmd' at the start of all your functions, you can get -# bash to show function call trace with: -# -# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name -debug_cmd=${debug_cmd-":"} -exit_cmd=: - -# By convention, finish your script with: -# -# exit $exit_status -# -# so that you can set exit_status to non-zero if you want to indicate -# something went wrong during execution without actually bailing out at -# the point of failure. -exit_status=$EXIT_SUCCESS - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath=$0 - -# The name of this program. -progname=`$ECHO "$progpath" |$SED "$sed_basename"` - -# Make sure we have an absolute progpath for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` - progdir=`cd "$progdir" && pwd` - progpath=$progdir/$progname - ;; - *) - _G_IFS=$IFS - IFS=${PATH_SEPARATOR-:} - for progdir in $PATH; do - IFS=$_G_IFS - test -x "$progdir/$progname" && break - done - IFS=$_G_IFS - test -n "$progdir" || progdir=`pwd` - progpath=$progdir/$progname - ;; -esac - - -## ----------------- ## -## Standard options. ## -## ----------------- ## - -# The following options affect the operation of the functions defined -# below, and should be set appropriately depending on run-time para- -# meters passed on the command line. - -opt_dry_run=false -opt_quiet=false -opt_verbose=false - -# Categories 'all' and 'none' are always available. Append any others -# you will pass as the first argument to func_warning from your own -# code. -warning_categories= - -# By default, display warnings according to 'opt_warning_types'. Set -# 'warning_func' to ':' to elide all warnings, or func_fatal_error to -# treat the next displayed warning as a fatal error. -warning_func=func_warn_and_continue - -# Set to 'all' to display all warnings, 'none' to suppress all -# warnings, or a space delimited list of some subset of -# 'warning_categories' to display only the listed warnings. -opt_warning_types=all - - -## -------------------- ## -## Resource management. ## -## -------------------- ## - -# This section contains definitions for functions that each ensure a -# particular resource (a file, or a non-empty configuration variable for -# example) is available, and if appropriate to extract default values -# from pertinent package files. Call them using their associated -# 'require_*' variable to ensure that they are executed, at most, once. -# -# It's entirely deliberate that calling these functions can set -# variables that don't obey the namespace limitations obeyed by the rest -# of this file, in order that that they be as useful as possible to -# callers. - - -# require_term_colors -# ------------------- -# Allow display of bold text on terminals that support it. -require_term_colors=func_require_term_colors -func_require_term_colors () -{ - $debug_cmd - - test -t 1 && { - # COLORTERM and USE_ANSI_COLORS environment variables take - # precedence, because most terminfo databases neglect to describe - # whether color sequences are supported. - test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} - - if test 1 = "$USE_ANSI_COLORS"; then - # Standard ANSI escape sequences - tc_reset='[0m' - tc_bold='[1m'; tc_standout='[7m' - tc_red='[31m'; tc_green='[32m' - tc_blue='[34m'; tc_cyan='[36m' - else - # Otherwise trust the terminfo database after all. - test -n "`tput sgr0 2>/dev/null`" && { - tc_reset=`tput sgr0` - test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` - tc_standout=$tc_bold - test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` - test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` - test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` - test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` - test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` - } - fi - } - - require_term_colors=: -} - - -## ----------------- ## -## Function library. ## -## ----------------- ## - -# This section contains a variety of useful functions to call in your -# scripts. Take note of the portable wrappers for features provided by -# some modern shells, which will fall back to slower equivalents on -# less featureful shells. - - -# func_append VAR VALUE -# --------------------- -# Append VALUE onto the existing contents of VAR. - - # We should try to minimise forks, especially on Windows where they are - # unreasonably slow, so skip the feature probes when bash or zsh are - # being used: - if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then - : ${_G_HAVE_ARITH_OP="yes"} - : ${_G_HAVE_XSI_OPS="yes"} - # The += operator was introduced in bash 3.1 - case $BASH_VERSION in - [12].* | 3.0 | 3.0*) ;; - *) - : ${_G_HAVE_PLUSEQ_OP="yes"} - ;; - esac - fi - - # _G_HAVE_PLUSEQ_OP - # Can be empty, in which case the shell is probed, "yes" if += is - # useable or anything else if it does not work. - test -z "$_G_HAVE_PLUSEQ_OP" \ - && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ - && _G_HAVE_PLUSEQ_OP=yes - -if test yes = "$_G_HAVE_PLUSEQ_OP" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_append () - { - $debug_cmd - - eval "$1+=\$2" - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_append () - { - $debug_cmd - - eval "$1=\$$1\$2" - } -fi - - -# func_append_quoted VAR VALUE -# ---------------------------- -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -if test yes = "$_G_HAVE_PLUSEQ_OP"; then - eval 'func_append_quoted () - { - $debug_cmd - - func_quote_for_eval "$2" - eval "$1+=\\ \$func_quote_for_eval_result" - }' -else - func_append_quoted () - { - $debug_cmd - - func_quote_for_eval "$2" - eval "$1=\$$1\\ \$func_quote_for_eval_result" - } -fi - - -# func_append_uniq VAR VALUE -# -------------------------- -# Append unique VALUE onto the existing contents of VAR, assuming -# entries are delimited by the first character of VALUE. For example: -# -# func_append_uniq options " --another-option option-argument" -# -# will only append to $options if " --another-option option-argument " -# is not already present somewhere in $options already (note spaces at -# each end implied by leading space in second argument). -func_append_uniq () -{ - $debug_cmd - - eval _G_current_value='`$ECHO $'$1'`' - _G_delim=`expr "$2" : '\(.\)'` - - case $_G_delim$_G_current_value$_G_delim in - *"$2$_G_delim"*) ;; - *) func_append "$@" ;; - esac -} - - -# func_arith TERM... -# ------------------ -# Set func_arith_result to the result of evaluating TERMs. - test -z "$_G_HAVE_ARITH_OP" \ - && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ - && _G_HAVE_ARITH_OP=yes - -if test yes = "$_G_HAVE_ARITH_OP"; then - eval 'func_arith () - { - $debug_cmd - - func_arith_result=$(( $* )) - }' -else - func_arith () - { - $debug_cmd - - func_arith_result=`expr "$@"` - } -fi - - -# func_basename FILE -# ------------------ -# Set func_basename_result to FILE with everything up to and including -# the last / stripped. -if test yes = "$_G_HAVE_XSI_OPS"; then - # If this shell supports suffix pattern removal, then use it to avoid - # forking. Hide the definitions single quotes in case the shell chokes - # on unsupported syntax... - _b='func_basename_result=${1##*/}' - _d='case $1 in - */*) func_dirname_result=${1%/*}$2 ;; - * ) func_dirname_result=$3 ;; - esac' - -else - # ...otherwise fall back to using sed. - _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' - _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` - if test "X$func_dirname_result" = "X$1"; then - func_dirname_result=$3 - else - func_append func_dirname_result "$2" - fi' -fi - -eval 'func_basename () -{ - $debug_cmd - - '"$_b"' -}' - - -# func_dirname FILE APPEND NONDIR_REPLACEMENT -# ------------------------------------------- -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -eval 'func_dirname () -{ - $debug_cmd - - '"$_d"' -}' - - -# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT -# -------------------------------------------------------- -# Perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# For efficiency, we do not delegate to the functions above but instead -# duplicate the functionality here. -eval 'func_dirname_and_basename () -{ - $debug_cmd - - '"$_b"' - '"$_d"' -}' - - -# func_echo ARG... -# ---------------- -# Echo program name prefixed message. -func_echo () -{ - $debug_cmd - - _G_message=$* - - func_echo_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_IFS - $ECHO "$progname: $_G_line" - done - IFS=$func_echo_IFS -} - - -# func_echo_all ARG... -# -------------------- -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - - -# func_echo_infix_1 INFIX ARG... -# ------------------------------ -# Echo program name, followed by INFIX on the first line, with any -# additional lines not showing INFIX. -func_echo_infix_1 () -{ - $debug_cmd - - $require_term_colors - - _G_infix=$1; shift - _G_indent=$_G_infix - _G_prefix="$progname: $_G_infix: " - _G_message=$* - - # Strip color escape sequences before counting printable length - for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" - do - test -n "$_G_tc" && { - _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` - _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` - } - done - _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes - - func_echo_infix_1_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_infix_1_IFS - $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 - _G_prefix=$_G_indent - done - IFS=$func_echo_infix_1_IFS -} - - -# func_error ARG... -# ----------------- -# Echo program name prefixed message to standard error. -func_error () -{ - $debug_cmd - - $require_term_colors - - func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 -} - - -# func_fatal_error ARG... -# ----------------------- -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - $debug_cmd - - func_error "$*" - exit $EXIT_FAILURE -} - - -# func_grep EXPRESSION FILENAME -# ----------------------------- -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $debug_cmd - - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_len STRING -# --------------- -# Set func_len_result to the length of STRING. STRING may not -# start with a hyphen. - test -z "$_G_HAVE_XSI_OPS" \ - && (eval 'x=a/b/c; - test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ - && _G_HAVE_XSI_OPS=yes - -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_len () - { - $debug_cmd - - func_len_result=${#1} - }' -else - func_len () - { - $debug_cmd - - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` - } -fi - - -# func_mkdir_p DIRECTORY-PATH -# --------------------------- -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - $debug_cmd - - _G_directory_path=$1 - _G_dir_list= - - if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then - - # Protect directory names starting with '-' - case $_G_directory_path in - -*) _G_directory_path=./$_G_directory_path ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$_G_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - _G_dir_list=$_G_directory_path:$_G_dir_list - - # If the last portion added has no slash in it, the list is done - case $_G_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` - done - _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` - - func_mkdir_p_IFS=$IFS; IFS=: - for _G_dir in $_G_dir_list; do - IFS=$func_mkdir_p_IFS - # mkdir can fail with a 'File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$_G_dir" 2>/dev/null || : - done - IFS=$func_mkdir_p_IFS - - # Bail out if we (or some other process) failed to create a directory. - test -d "$_G_directory_path" || \ - func_fatal_error "Failed to create '$1'" - fi -} - - -# func_mktempdir [BASENAME] -# ------------------------- -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, BASENAME is the basename for that directory. -func_mktempdir () -{ - $debug_cmd - - _G_template=${TMPDIR-/tmp}/${1-$progname} - - if test : = "$opt_dry_run"; then - # Return a directory name, but don't create it in dry-run mode - _G_tmpdir=$_G_template-$$ - else - - # If mktemp works, use that first and foremost - _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` - - if test ! -d "$_G_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - _G_tmpdir=$_G_template-${RANDOM-0}$$ - - func_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$_G_tmpdir" - umask $func_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$_G_tmpdir" || \ - func_fatal_error "cannot create temporary directory '$_G_tmpdir'" - fi - - $ECHO "$_G_tmpdir" -} - - -# func_normal_abspath PATH -# ------------------------ -# Remove doubled-up and trailing slashes, "." path components, -# and cancel out any ".." path components in PATH after making -# it an absolute path. -func_normal_abspath () -{ - $debug_cmd - - # These SED scripts presuppose an absolute path with a trailing slash. - _G_pathcar='s|^/\([^/]*\).*$|\1|' - _G_pathcdr='s|^/[^/]*||' - _G_removedotparts=':dotsl - s|/\./|/|g - t dotsl - s|/\.$|/|' - _G_collapseslashes='s|/\{1,\}|/|g' - _G_finalslash='s|/*$|/|' - - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` - while :; do - # Processed it all yet? - if test / = "$func_normal_abspath_tpath"; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result"; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in - "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} - - -# func_notquiet ARG... -# -------------------- -# Echo program name prefixed message only when not in quiet mode. -func_notquiet () -{ - $debug_cmd - - $opt_quiet || func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - - -# func_relative_path SRCDIR DSTDIR -# -------------------------------- -# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. -func_relative_path () -{ - $debug_cmd - - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break - ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break - ;; - *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=$func_dirname_result - if test -z "$func_relative_path_tlibdir"; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result - ;; - esac - done - - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test -n "$func_stripname_result"; then - func_append func_relative_path_result "/$func_stripname_result" - fi - - # Normalisation. If bindir is libdir, return '.' else relative path. - if test -n "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - fi - - test -n "$func_relative_path_result" || func_relative_path_result=. - - : -} - - -# func_quote_for_eval ARG... -# -------------------------- -# Aesthetically quote ARGs to be evaled later. -# This function returns two values: -# i) func_quote_for_eval_result -# double-quoted, suitable for a subsequent eval -# ii) func_quote_for_eval_unquoted_result -# has all characters that are still active within double -# quotes backslashified. -func_quote_for_eval () -{ - $debug_cmd - - func_quote_for_eval_unquoted_result= - func_quote_for_eval_result= - while test 0 -lt $#; do - case $1 in - *[\\\`\"\$]*) - _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; - *) - _G_unquoted_arg=$1 ;; - esac - if test -n "$func_quote_for_eval_unquoted_result"; then - func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" - else - func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" - fi - - case $_G_unquoted_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and variable expansion - # for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_quoted_arg=\"$_G_unquoted_arg\" - ;; - *) - _G_quoted_arg=$_G_unquoted_arg - ;; - esac - - if test -n "$func_quote_for_eval_result"; then - func_append func_quote_for_eval_result " $_G_quoted_arg" - else - func_append func_quote_for_eval_result "$_G_quoted_arg" - fi - shift - done -} - - -# func_quote_for_expand ARG -# ------------------------- -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - $debug_cmd - - case $1 in - *[\\\`\"]*) - _G_arg=`$ECHO "$1" | $SED \ - -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; - *) - _G_arg=$1 ;; - esac - - case $_G_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_arg=\"$_G_arg\" - ;; - esac - - func_quote_for_expand_result=$_G_arg -} - - -# func_stripname PREFIX SUFFIX NAME -# --------------------------------- -# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_stripname () - { - $debug_cmd - - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary variable first. - func_stripname_result=$3 - func_stripname_result=${func_stripname_result#"$1"} - func_stripname_result=${func_stripname_result%"$2"} - }' -else - func_stripname () - { - $debug_cmd - - case $2 in - .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; - *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; - esac - } -fi - - -# func_show_eval CMD [FAIL_EXP] -# ----------------------------- -# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - $debug_cmd - - _G_cmd=$1 - _G_fail_exp=${2-':'} - - func_quote_for_expand "$_G_cmd" - eval "func_notquiet $func_quote_for_expand_result" - - $opt_dry_run || { - eval "$_G_cmd" - _G_status=$? - if test 0 -ne "$_G_status"; then - eval "(exit $_G_status); $_G_fail_exp" - fi - } -} - - -# func_show_eval_locale CMD [FAIL_EXP] -# ------------------------------------ -# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - $debug_cmd - - _G_cmd=$1 - _G_fail_exp=${2-':'} - - $opt_quiet || { - func_quote_for_expand "$_G_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - $opt_dry_run || { - eval "$_G_user_locale - $_G_cmd" - _G_status=$? - eval "$_G_safe_locale" - if test 0 -ne "$_G_status"; then - eval "(exit $_G_status); $_G_fail_exp" - fi - } -} - - -# func_tr_sh -# ---------- -# Turn $1 into a string suitable for a shell variable name. -# Result is stored in $func_tr_sh_result. All characters -# not in the set a-zA-Z0-9_ are replaced with '_'. Further, -# if $1 begins with a digit, a '_' is prepended as well. -func_tr_sh () -{ - $debug_cmd - - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac -} - - -# func_verbose ARG... -# ------------------- -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $debug_cmd - - $opt_verbose && func_echo "$*" - - : -} - - -# func_warn_and_continue ARG... -# ----------------------------- -# Echo program name prefixed warning message to standard error. -func_warn_and_continue () -{ - $debug_cmd - - $require_term_colors - - func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 -} - - -# func_warning CATEGORY ARG... -# ---------------------------- -# Echo program name prefixed warning message to standard error. Warning -# messages can be filtered according to CATEGORY, where this function -# elides messages where CATEGORY is not listed in the global variable -# 'opt_warning_types'. -func_warning () -{ - $debug_cmd - - # CATEGORY must be in the warning_categories list! - case " $warning_categories " in - *" $1 "*) ;; - *) func_internal_error "invalid warning category '$1'" ;; - esac - - _G_category=$1 - shift - - case " $opt_warning_types " in - *" $_G_category "*) $warning_func ${1+"$@"} ;; - esac -} - - -# func_sort_ver VER1 VER2 -# ----------------------- -# 'sort -V' is not generally available. -# Note this deviates from the version comparison in automake -# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a -# but this should suffice as we won't be specifying old -# version formats or redundant trailing .0 in bootstrap.conf. -# If we did want full compatibility then we should probably -# use m4_version_compare from autoconf. -func_sort_ver () -{ - $debug_cmd - - printf '%s\n%s\n' "$1" "$2" \ - | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n -} - -# func_lt_ver PREV CURR -# --------------------- -# Return true if PREV and CURR are in the correct order according to -# func_sort_ver, otherwise false. Use it like this: -# -# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." -func_lt_ver () -{ - $debug_cmd - - test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` -} - - -# Local variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" -# time-stamp-time-zone: "UTC" -# End: -#! /bin/sh - -# Set a version string for this script. -scriptversion=2014-01-07.03; # UTC - -# A portable, pluggable option parser for Bourne shell. -# Written by Gary V. Vaughan, 2010 - -# Copyright (C) 2010-2015 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. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Please report bugs or propose patches to gary@gnu.org. - - -## ------ ## -## Usage. ## -## ------ ## - -# This file is a library for parsing options in your shell scripts along -# with assorted other useful supporting features that you can make use -# of too. -# -# For the simplest scripts you might need only: -# -# #!/bin/sh -# . relative/path/to/funclib.sh -# . relative/path/to/options-parser -# scriptversion=1.0 -# func_options ${1+"$@"} -# eval set dummy "$func_options_result"; shift -# ...rest of your script... -# -# In order for the '--version' option to work, you will need to have a -# suitably formatted comment like the one at the top of this file -# starting with '# Written by ' and ending with '# warranty; '. -# -# For '-h' and '--help' to work, you will also need a one line -# description of your script's purpose in a comment directly above the -# '# Written by ' line, like the one at the top of this file. -# -# The default options also support '--debug', which will turn on shell -# execution tracing (see the comment above debug_cmd below for another -# use), and '--verbose' and the func_verbose function to allow your script -# to display verbose messages only when your user has specified -# '--verbose'. -# -# After sourcing this file, you can plug processing for additional -# options by amending the variables from the 'Configuration' section -# below, and following the instructions in the 'Option parsing' -# section further down. - -## -------------- ## -## Configuration. ## -## -------------- ## - -# You should override these variables in your script after sourcing this -# file so that they reflect the customisations you have added to the -# option parser. - -# The usage line for option parsing errors and the start of '-h' and -# '--help' output messages. You can embed shell variables for delayed -# expansion at the time the message is displayed, but you will need to -# quote other shell meta-characters carefully to prevent them being -# expanded when the contents are evaled. -usage='$progpath [OPTION]...' - -# Short help message in response to '-h' and '--help'. Add to this or -# override it after sourcing this library to reflect the full set of -# options your script accepts. -usage_message="\ - --debug enable verbose shell tracing - -W, --warnings=CATEGORY - report the warnings falling in CATEGORY [all] - -v, --verbose verbosely report processing - --version print version information and exit - -h, --help print short or long help message and exit -" - -# Additional text appended to 'usage_message' in response to '--help'. -long_help_message=" -Warning categories include: - 'all' show all warnings - 'none' turn off all the warnings - 'error' warnings are treated as fatal errors" - -# Help message printed before fatal option parsing errors. -fatal_help="Try '\$progname --help' for more information." - - - -## ------------------------- ## -## Hook function management. ## -## ------------------------- ## - -# This section contains functions for adding, removing, and running hooks -# to the main code. A hook is just a named list of of function, that can -# be run in order later on. - -# func_hookable FUNC_NAME -# ----------------------- -# Declare that FUNC_NAME will run hooks added with -# 'func_add_hook FUNC_NAME ...'. -func_hookable () -{ - $debug_cmd - - func_append hookable_fns " $1" -} - - -# func_add_hook FUNC_NAME HOOK_FUNC -# --------------------------------- -# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must -# first have been declared "hookable" by a call to 'func_hookable'. -func_add_hook () -{ - $debug_cmd - - case " $hookable_fns " in - *" $1 "*) ;; - *) func_fatal_error "'$1' does not accept hook functions." ;; - esac - - eval func_append ${1}_hooks '" $2"' -} - - -# func_remove_hook FUNC_NAME HOOK_FUNC -# ------------------------------------ -# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. -func_remove_hook () -{ - $debug_cmd - - eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' -} - - -# func_run_hooks FUNC_NAME [ARG]... -# --------------------------------- -# Run all hook functions registered to FUNC_NAME. -# It is assumed that the list of hook functions contains nothing more -# than a whitespace-delimited list of legal shell function names, and -# no effort is wasted trying to catch shell meta-characters or preserve -# whitespace. -func_run_hooks () -{ - $debug_cmd - - case " $hookable_fns " in - *" $1 "*) ;; - *) func_fatal_error "'$1' does not support hook funcions.n" ;; - esac - - eval _G_hook_fns=\$$1_hooks; shift - - for _G_hook in $_G_hook_fns; do - eval $_G_hook '"$@"' - - # store returned options list back into positional - # parameters for next 'cmd' execution. - eval _G_hook_result=\$${_G_hook}_result - eval set dummy "$_G_hook_result"; shift - done - - func_quote_for_eval ${1+"$@"} - func_run_hooks_result=$func_quote_for_eval_result -} - - - -## --------------- ## -## Option parsing. ## -## --------------- ## - -# In order to add your own option parsing hooks, you must accept the -# full positional parameter list in your hook function, remove any -# options that you action, and then pass back the remaining unprocessed -# options in '<hooked_function_name>_result', escaped suitably for -# 'eval'. Like this: -# -# my_options_prep () -# { -# $debug_cmd -# -# # Extend the existing usage message. -# usage_message=$usage_message' -# -s, --silent don'\''t print informational messages -# ' -# -# func_quote_for_eval ${1+"$@"} -# my_options_prep_result=$func_quote_for_eval_result -# } -# func_add_hook func_options_prep my_options_prep -# -# -# my_silent_option () -# { -# $debug_cmd -# -# # Note that for efficiency, we parse as many options as we can -# # recognise in a loop before passing the remainder back to the -# # caller on the first unrecognised argument we encounter. -# while test $# -gt 0; do -# opt=$1; shift -# case $opt in -# --silent|-s) opt_silent=: ;; -# # Separate non-argument short options: -# -s*) func_split_short_opt "$_G_opt" -# set dummy "$func_split_short_opt_name" \ -# "-$func_split_short_opt_arg" ${1+"$@"} -# shift -# ;; -# *) set dummy "$_G_opt" "$*"; shift; break ;; -# esac -# done -# -# func_quote_for_eval ${1+"$@"} -# my_silent_option_result=$func_quote_for_eval_result -# } -# func_add_hook func_parse_options my_silent_option -# -# -# my_option_validation () -# { -# $debug_cmd -# -# $opt_silent && $opt_verbose && func_fatal_help "\ -# '--silent' and '--verbose' options are mutually exclusive." -# -# func_quote_for_eval ${1+"$@"} -# my_option_validation_result=$func_quote_for_eval_result -# } -# func_add_hook func_validate_options my_option_validation -# -# You'll alse need to manually amend $usage_message to reflect the extra -# options you parse. It's preferable to append if you can, so that -# multiple option parsing hooks can be added safely. - - -# func_options [ARG]... -# --------------------- -# All the functions called inside func_options are hookable. See the -# individual implementations for details. -func_hookable func_options -func_options () -{ - $debug_cmd - - func_options_prep ${1+"$@"} - eval func_parse_options \ - ${func_options_prep_result+"$func_options_prep_result"} - eval func_validate_options \ - ${func_parse_options_result+"$func_parse_options_result"} - - eval func_run_hooks func_options \ - ${func_validate_options_result+"$func_validate_options_result"} - - # save modified positional parameters for caller - func_options_result=$func_run_hooks_result -} - - -# func_options_prep [ARG]... -# -------------------------- -# All initialisations required before starting the option parse loop. -# Note that when calling hook functions, we pass through the list of -# positional parameters. If a hook function modifies that list, and -# needs to propogate that back to rest of this script, then the complete -# modified list must be put in 'func_run_hooks_result' before -# returning. -func_hookable func_options_prep -func_options_prep () -{ - $debug_cmd - - # Option defaults: - opt_verbose=false - opt_warning_types= - - func_run_hooks func_options_prep ${1+"$@"} - - # save modified positional parameters for caller - func_options_prep_result=$func_run_hooks_result -} - - -# func_parse_options [ARG]... -# --------------------------- -# The main option parsing loop. -func_hookable func_parse_options -func_parse_options () -{ - $debug_cmd - - func_parse_options_result= - - # this just eases exit handling - while test $# -gt 0; do - # Defer to hook functions for initial option parsing, so they - # get priority in the event of reusing an option name. - func_run_hooks func_parse_options ${1+"$@"} - - # Adjust func_parse_options positional parameters to match - eval set dummy "$func_run_hooks_result"; shift - - # Break out of the loop if we already parsed every option. - test $# -gt 0 || break - - _G_opt=$1 - shift - case $_G_opt in - --debug|-x) debug_cmd='set -x' - func_echo "enabling shell trace mode" - $debug_cmd - ;; - - --no-warnings|--no-warning|--no-warn) - set dummy --warnings none ${1+"$@"} - shift - ;; - - --warnings|--warning|-W) - test $# = 0 && func_missing_arg $_G_opt && break - case " $warning_categories $1" in - *" $1 "*) - # trailing space prevents matching last $1 above - func_append_uniq opt_warning_types " $1" - ;; - *all) - opt_warning_types=$warning_categories - ;; - *none) - opt_warning_types=none - warning_func=: - ;; - *error) - opt_warning_types=$warning_categories - warning_func=func_fatal_error - ;; - *) - func_fatal_error \ - "unsupported warning category: '$1'" - ;; - esac - shift - ;; - - --verbose|-v) opt_verbose=: ;; - --version) func_version ;; - -\?|-h) func_usage ;; - --help) func_help ;; - - # Separate optargs to long options (plugins may need this): - --*=*) func_split_equals "$_G_opt" - set dummy "$func_split_equals_lhs" \ - "$func_split_equals_rhs" ${1+"$@"} - shift - ;; - - # Separate optargs to short options: - -W*) - func_split_short_opt "$_G_opt" - set dummy "$func_split_short_opt_name" \ - "$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-v*|-x*) - func_split_short_opt "$_G_opt" - set dummy "$func_split_short_opt_name" \ - "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) break ;; - -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; - *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; - esac - done - - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - func_parse_options_result=$func_quote_for_eval_result -} - - -# func_validate_options [ARG]... -# ------------------------------ -# Perform any sanity checks on option settings and/or unconsumed -# arguments. -func_hookable func_validate_options -func_validate_options () -{ - $debug_cmd - - # Display all warnings if -W was not given. - test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" - - func_run_hooks func_validate_options ${1+"$@"} - - # Bail if the options were screwed! - $exit_cmd $EXIT_FAILURE - - # save modified positional parameters for caller - func_validate_options_result=$func_run_hooks_result -} - - - -## ----------------- ## -## Helper functions. ## -## ----------------- ## - -# This section contains the helper functions used by the rest of the -# hookable option parser framework in ascii-betical order. - - -# func_fatal_help ARG... -# ---------------------- -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - $debug_cmd - - eval \$ECHO \""Usage: $usage"\" - eval \$ECHO \""$fatal_help"\" - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - - -# func_help -# --------- -# Echo long help message to standard output and exit. -func_help () -{ - $debug_cmd - - func_usage_message - $ECHO "$long_help_message" - exit 0 -} - - -# func_missing_arg ARGNAME -# ------------------------ -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - $debug_cmd - - func_error "Missing argument for '$1'." - exit_cmd=exit -} - - -# func_split_equals STRING -# ------------------------ -# Set func_split_equals_lhs and func_split_equals_rhs shell variables after -# splitting STRING at the '=' sign. -test -z "$_G_HAVE_XSI_OPS" \ - && (eval 'x=a/b/c; - test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ - && _G_HAVE_XSI_OPS=yes - -if test yes = "$_G_HAVE_XSI_OPS" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_split_equals () - { - $debug_cmd - - func_split_equals_lhs=${1%%=*} - func_split_equals_rhs=${1#*=} - test "x$func_split_equals_lhs" = "x$1" \ - && func_split_equals_rhs= - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_split_equals () - { - $debug_cmd - - func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` - func_split_equals_rhs= - test "x$func_split_equals_lhs" = "x$1" \ - || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` - } -fi #func_split_equals - - -# func_split_short_opt SHORTOPT -# ----------------------------- -# Set func_split_short_opt_name and func_split_short_opt_arg shell -# variables after splitting SHORTOPT after the 2nd character. -if test yes = "$_G_HAVE_XSI_OPS" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_split_short_opt () - { - $debug_cmd - - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"} - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_split_short_opt () - { - $debug_cmd - - func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` - func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` - } -fi #func_split_short_opt - - -# func_usage -# ---------- -# Echo short help message to standard output and exit. -func_usage () -{ - $debug_cmd - - func_usage_message - $ECHO "Run '$progname --help |${PAGER-more}' for full usage" - exit 0 -} - - -# func_usage_message -# ------------------ -# Echo short help message to standard output. -func_usage_message () -{ - $debug_cmd - - eval \$ECHO \""Usage: $usage"\" - echo - $SED -n 's|^# || - /^Written by/{ - x;p;x - } - h - /^Written by/q' < "$progpath" - echo - eval \$ECHO \""$usage_message"\" -} - - -# func_version -# ------------ -# Echo version message to standard output and exit. -func_version () -{ - $debug_cmd - - printf '%s\n' "$progname $scriptversion" - $SED -n ' - /(C)/!b go - :more - /\./!{ - N - s|\n# | | - b more - } - :go - /^# Written by /,/# warranty; / { - s|^# || - s|^# *$|| - s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| - p - } - /^# Written by / { - s|^# || - p - } - /^warranty; /q' < "$progpath" - - exit $? -} - - -# Local variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" -# time-stamp-time-zone: "UTC" -# End: - -# Set a version string. -scriptversion='(GNU libtool) 2.4.6' - - -# func_echo ARG... -# ---------------- -# Libtool also displays the current mode in messages, so override -# funclib.sh func_echo with this custom definition. -func_echo () -{ - $debug_cmd - - _G_message=$* - - func_echo_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_IFS - $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" - done - IFS=$func_echo_IFS -} - - -# func_warning ARG... -# ------------------- -# Libtool warnings are not categorized, so override funclib.sh -# func_warning with this simpler definition. -func_warning () -{ - $debug_cmd - - $warning_func ${1+"$@"} -} - - -## ---------------- ## -## Options parsing. ## -## ---------------- ## - -# Hook in the functions to make sure our own options are parsed during -# the option parsing loop. - -usage='$progpath [OPTION]... [MODE-ARG]...' - -# Short help message in response to '-h'. -usage_message="Options: - --config show all configuration variables - --debug enable verbose shell tracing - -n, --dry-run display commands without modifying any files - --features display basic configuration information and exit - --mode=MODE use operation mode MODE - --no-warnings equivalent to '-Wnone' - --preserve-dup-deps don't remove duplicate dependency libraries - --quiet, --silent don't print informational messages - --tag=TAG use configuration variables from tag TAG - -v, --verbose print more informational messages than default - --version print version information - -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] - -h, --help, --help-all print short, long, or detailed help message -" - -# Additional text appended to 'usage_message' in response to '--help'. -func_help () -{ - $debug_cmd - - func_usage_message - $ECHO "$long_help_message - -MODE must be one of the following: - - clean remove files from the build directory - compile compile a source file into a libtool object - execute automatically set library path, then run a program - finish complete the installation of libtool libraries - install install libraries or executables - link create a library or an executable - uninstall remove libraries from an installed directory - -MODE-ARGS vary depending on the MODE. When passed as first option, -'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. -Try '$progname --help --mode=MODE' for a more detailed description of MODE. - -When reporting a bug, please describe a test case to reproduce it and -include the following information: - - host-triplet: $host - shell: $SHELL - compiler: $LTCC - compiler flags: $LTCFLAGS - linker: $LD (gnu? $with_gnu_ld) - version: $progname (GNU libtool) 2.4.6 - automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` - autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` - -Report bugs to <bug-libtool@gnu.org>. -GNU libtool home page: <http://www.gnu.org/software/libtool/>. -General help using GNU software: <http://www.gnu.org/gethelp/>." - exit 0 -} - - -# func_lo2o OBJECT-NAME -# --------------------- -# Transform OBJECT-NAME from a '.lo' suffix to the platform specific -# object suffix. - -lo2o=s/\\.lo\$/.$objext/ -o2lo=s/\\.$objext\$/.lo/ - -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_lo2o () - { - case $1 in - *.lo) func_lo2o_result=${1%.lo}.$objext ;; - * ) func_lo2o_result=$1 ;; - esac - }' - - # func_xform LIBOBJ-OR-SOURCE - # --------------------------- - # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) - # suffix to a '.lo' libtool-object suffix. - eval 'func_xform () - { - func_xform_result=${1%.*}.lo - }' -else - # ...otherwise fall back to using sed. - func_lo2o () - { - func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` - } - - func_xform () - { - func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` - } -fi - - -# func_fatal_configuration ARG... -# ------------------------------- -# Echo program name prefixed message to standard error, followed by -# a configuration failure hint, and exit. -func_fatal_configuration () -{ - func__fatal_error ${1+"$@"} \ - "See the $PACKAGE documentation for more information." \ - "Fatal configuration error." -} - - -# func_config -# ----------- -# Display the configuration for all the tags in this script. -func_config () -{ - re_begincf='^# ### BEGIN LIBTOOL' - re_endcf='^# ### END LIBTOOL' - - # Default configuration. - $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" - - # Now print the configurations for the tags. - for tagname in $taglist; do - $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" - done - - exit $? -} - - -# func_features -# ------------- -# Display the features supported by this script. -func_features () -{ - echo "host: $host" - if test yes = "$build_libtool_libs"; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test yes = "$build_old_libs"; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - - exit $? -} - - -# func_enable_tag TAGNAME -# ----------------------- -# Verify that TAGNAME is valid, and either flag an error and exit, or -# enable the TAGNAME tag. We also add TAGNAME to the global $taglist -# variable here. -func_enable_tag () -{ - # Global variable: - tagname=$1 - - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf=/$re_begincf/,/$re_endcf/p - - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac - - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; - *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - - -# func_check_version_match -# ------------------------ -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -# libtool_options_prep [ARG]... -# ----------------------------- -# Preparation for options parsed by libtool. -libtool_options_prep () -{ - $debug_mode - - # Option defaults: - opt_config=false - opt_dlopen= - opt_dry_run=false - opt_help=false - opt_mode= - opt_preserve_dup_deps=false - opt_quiet=false - - nonopt= - preserve_args= - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - esac - - # Pass back the list of options. - func_quote_for_eval ${1+"$@"} - libtool_options_prep_result=$func_quote_for_eval_result -} -func_add_hook func_options_prep libtool_options_prep - - -# libtool_parse_options [ARG]... -# --------------------------------- -# Provide handling for libtool specific options. -libtool_parse_options () -{ - $debug_cmd - - # Perform our own loop to consume as many options as possible in - # each iteration. - while test $# -gt 0; do - _G_opt=$1 - shift - case $_G_opt in - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - - --config) func_config ;; - - --dlopen|-dlopen) - opt_dlopen="${opt_dlopen+$opt_dlopen -}$1" - shift - ;; - - --preserve-dup-deps) - opt_preserve_dup_deps=: ;; - - --features) func_features ;; - - --finish) set dummy --mode finish ${1+"$@"}; shift ;; - - --help) opt_help=: ;; - - --help-all) opt_help=': help-all' ;; - - --mode) test $# = 0 && func_missing_arg $_G_opt && break - opt_mode=$1 - case $1 in - # Valid mode arguments: - clean|compile|execute|finish|install|link|relink|uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $_G_opt" - exit_cmd=exit - break - ;; - esac - shift - ;; - - --no-silent|--no-quiet) - opt_quiet=false - func_append preserve_args " $_G_opt" - ;; - - --no-warnings|--no-warning|--no-warn) - opt_warning=false - func_append preserve_args " $_G_opt" - ;; - - --no-verbose) - opt_verbose=false - func_append preserve_args " $_G_opt" - ;; - - --silent|--quiet) - opt_quiet=: - opt_verbose=false - func_append preserve_args " $_G_opt" - ;; - - --tag) test $# = 0 && func_missing_arg $_G_opt && break - opt_tag=$1 - func_append preserve_args " $_G_opt $1" - func_enable_tag "$1" - shift - ;; - - --verbose|-v) opt_quiet=false - opt_verbose=: - func_append preserve_args " $_G_opt" - ;; - - # An option not handled by this hook function: - *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; - esac - done - - - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - libtool_parse_options_result=$func_quote_for_eval_result -} -func_add_hook func_parse_options libtool_parse_options - - - -# libtool_validate_options [ARG]... -# --------------------------------- -# Perform any sanity checks on option settings and/or unconsumed -# arguments. -libtool_validate_options () -{ - # save first non-option argument - if test 0 -lt $#; then - nonopt=$1 - shift - fi - - # preserve --debug - test : = "$debug_cmd" || func_append preserve_args " --debug" - - case $host in - # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 - # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 - *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac - - $opt_help || { - # Sanity checks first: - func_check_version_match - - test yes != "$build_libtool_libs" \ - && test yes != "$build_old_libs" \ - && func_fatal_configuration "not configured to build any kind of library" - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test execute != "$opt_mode"; then - func_error "unrecognized option '-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help=$help - help="Try '$progname --help --mode=$opt_mode' for more information." - } - - # Pass back the unparsed argument list - func_quote_for_eval ${1+"$@"} - libtool_validate_options_result=$func_quote_for_eval_result -} -func_add_hook func_validate_options libtool_validate_options - - -# Process options as early as possible so that --help and --version -# can return quickly. -func_options ${1+"$@"} -eval set dummy "$func_options_result"; shift - - - -## ----------- ## -## Main. ## -## ----------- ## - -magic='%%%MAGIC variable%%%' -magic_exe='%%%MAGIC EXE variable%%%' - -# Global variables. -extracted_archives= -extracted_serial=0 - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# func_generated_by_libtool -# True iff stdin has been generated by Libtool. This function is only -# a basic sanity check; it will hardly flush out determined imposters. -func_generated_by_libtool_p () -{ - $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_p file -# True iff FILE is a libtool '.la' library or '.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool '.la' library or '.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if 'file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case $lalib_p_line in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test yes = "$lalib_p" -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - test -f "$1" && - $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $debug_cmd - - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$sp$nl - eval cmd=\"$cmd\" - IFS=$save_ifs - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# 'FILE.' does not work on cygwin managed mounts. -func_source () -{ - $debug_cmd - - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_resolve_sysroot PATH -# Replace a leading = in PATH with a sysroot. Store the result into -# func_resolve_sysroot_result -func_resolve_sysroot () -{ - func_resolve_sysroot_result=$1 - case $func_resolve_sysroot_result in - =*) - func_stripname '=' '' "$func_resolve_sysroot_result" - func_resolve_sysroot_result=$lt_sysroot$func_stripname_result - ;; - esac -} - -# func_replace_sysroot PATH -# If PATH begins with the sysroot, replace it with = and -# store the result into func_replace_sysroot_result. -func_replace_sysroot () -{ - case $lt_sysroot:$1 in - ?*:"$lt_sysroot"*) - func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result='='$func_stripname_result - ;; - *) - # Including no sysroot. - func_replace_sysroot_result=$1 - ;; - esac -} - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $debug_cmd - - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case "$@ " in - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with '--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=$1 - if test yes = "$build_libtool_libs"; then - write_lobj=\'$2\' - else - write_lobj=none - fi - - if test yes = "$build_old_libs"; then - write_oldobj=\'$3\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T <<EOF -# $write_libobj - a libtool object file -# Generated by $PROGRAM (GNU $PACKAGE) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# Name of the PIC object. -pic_object=$write_lobj - -# Name of the non-PIC object -non_pic_object=$write_oldobj - -EOF - $MV "${write_libobj}T" "$write_libobj" - } -} - - -################################################## -# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # -################################################## - -# func_convert_core_file_wine_to_w32 ARG -# Helper function used by file name conversion functions when $build is *nix, -# and $host is mingw, cygwin, or some other w32 environment. Relies on a -# correctly configured wine environment available, with the winepath program -# in $build's $PATH. -# -# ARG is the $build file name to be converted to w32 format. -# Result is available in $func_convert_core_file_wine_to_w32_result, and will -# be empty on error (or when ARG is empty) -func_convert_core_file_wine_to_w32 () -{ - $debug_cmd - - func_convert_core_file_wine_to_w32_result=$1 - if test -n "$1"; then - # Unfortunately, winepath does not exit with a non-zero error code, so we - # are forced to check the contents of stdout. On the other hand, if the - # command is not found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both error code of - # zero AND non-empty stdout, which explains the odd construction: - func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then - func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$sed_naive_backslashify"` - else - func_convert_core_file_wine_to_w32_result= - fi - fi -} -# end: func_convert_core_file_wine_to_w32 - - -# func_convert_core_path_wine_to_w32 ARG -# Helper function used by path conversion functions when $build is *nix, and -# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly -# configured wine environment available, with the winepath program in $build's -# $PATH. Assumes ARG has no leading or trailing path separator characters. -# -# ARG is path to be converted from $build format to win32. -# Result is available in $func_convert_core_path_wine_to_w32_result. -# Unconvertible file (directory) names in ARG are skipped; if no directory names -# are convertible, then the result may be empty. -func_convert_core_path_wine_to_w32 () -{ - $debug_cmd - - # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result= - if test -n "$1"; then - oldIFS=$IFS - IFS=: - for func_convert_core_path_wine_to_w32_f in $1; do - IFS=$oldIFS - func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" - if test -n "$func_convert_core_file_wine_to_w32_result"; then - if test -z "$func_convert_core_path_wine_to_w32_result"; then - func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result - else - func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" - fi - fi - done - IFS=$oldIFS - fi -} -# end: func_convert_core_path_wine_to_w32 - - -# func_cygpath ARGS... -# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when -# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) -# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or -# (2), returns the Cygwin file name or path in func_cygpath_result (input -# file name or path is assumed to be in w32 format, as previously converted -# from $build's *nix or MSYS format). In case (3), returns the w32 file name -# or path in func_cygpath_result (input file name or path is assumed to be in -# Cygwin format). Returns an empty string on error. -# -# ARGS are passed to cygpath, with the last one being the file name or path to -# be converted. -# -# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH -# environment variable; do not put it in $PATH. -func_cygpath () -{ - $debug_cmd - - if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then - func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` - if test "$?" -ne 0; then - # on failure, ensure result is empty - func_cygpath_result= - fi - else - func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" - fi -} -#end: func_cygpath - - -# func_convert_core_msys_to_w32 ARG -# Convert file name or path ARG from MSYS format to w32 format. Return -# result in func_convert_core_msys_to_w32_result. -func_convert_core_msys_to_w32 () -{ - $debug_cmd - - # awkward: cmd appends spaces to result - func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` -} -#end: func_convert_core_msys_to_w32 - - -# func_convert_file_check ARG1 ARG2 -# Verify that ARG1 (a file name in $build format) was converted to $host -# format in ARG2. Otherwise, emit an error message, but continue (resetting -# func_to_host_file_result to ARG1). -func_convert_file_check () -{ - $debug_cmd - - if test -z "$2" && test -n "$1"; then - func_error "Could not determine host file name corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_file_result=$1 - fi -} -# end func_convert_file_check - - -# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH -# Verify that FROM_PATH (a path in $build format) was converted to $host -# format in TO_PATH. Otherwise, emit an error message, but continue, resetting -# func_to_host_file_result to a simplistic fallback value (see below). -func_convert_path_check () -{ - $debug_cmd - - if test -z "$4" && test -n "$3"; then - func_error "Could not determine the host path corresponding to" - func_error " '$3'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This is a deliberately simplistic "conversion" and - # should not be "improved". See libtool.info. - if test "x$1" != "x$2"; then - lt_replace_pathsep_chars="s|$1|$2|g" - func_to_host_path_result=`echo "$3" | - $SED -e "$lt_replace_pathsep_chars"` - else - func_to_host_path_result=$3 - fi - fi -} -# end func_convert_path_check - - -# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG -# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT -# and appending REPL if ORIG matches BACKPAT. -func_convert_path_front_back_pathsep () -{ - $debug_cmd - - case $4 in - $1 ) func_to_host_path_result=$3$func_to_host_path_result - ;; - esac - case $4 in - $2 ) func_append func_to_host_path_result "$3" - ;; - esac -} -# end func_convert_path_front_back_pathsep - - -################################################## -# $build to $host FILE NAME CONVERSION FUNCTIONS # -################################################## -# invoked via '$to_host_file_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# Result will be available in $func_to_host_file_result. - - -# func_to_host_file ARG -# Converts the file name ARG from $build format to $host format. Return result -# in func_to_host_file_result. -func_to_host_file () -{ - $debug_cmd - - $to_host_file_cmd "$1" -} -# end func_to_host_file - - -# func_to_tool_file ARG LAZY -# converts the file name ARG from $build format to toolchain format. Return -# result in func_to_tool_file_result. If the conversion in use is listed -# in (the comma separated) LAZY, no conversion takes place. -func_to_tool_file () -{ - $debug_cmd - - case ,$2, in - *,"$to_tool_file_cmd",*) - func_to_tool_file_result=$1 - ;; - *) - $to_tool_file_cmd "$1" - func_to_tool_file_result=$func_to_host_file_result - ;; - esac -} -# end func_to_tool_file - - -# func_convert_file_noop ARG -# Copy ARG to func_to_host_file_result. -func_convert_file_noop () -{ - func_to_host_file_result=$1 -} -# end func_convert_file_noop - - -# func_convert_file_msys_to_w32 ARG -# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_file_result. -func_convert_file_msys_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_to_host_file_result=$func_convert_core_msys_to_w32_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_w32 - - -# func_convert_file_cygwin_to_w32 ARG -# Convert file name ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_file_cygwin_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - # because $build is cygwin, we call "the" cygpath in $PATH; no need to use - # LT_CYGPATH in this case. - func_to_host_file_result=`cygpath -m "$1"` - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_cygwin_to_w32 - - -# func_convert_file_nix_to_w32 ARG -# Convert file name ARG from *nix to w32 format. Requires a wine environment -# and a working winepath. Returns result in func_to_host_file_result. -func_convert_file_nix_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_file_wine_to_w32 "$1" - func_to_host_file_result=$func_convert_core_file_wine_to_w32_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_w32 - - -# func_convert_file_msys_to_cygwin ARG -# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_file_msys_to_cygwin () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_cygpath -u "$func_convert_core_msys_to_w32_result" - func_to_host_file_result=$func_cygpath_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_cygwin - - -# func_convert_file_nix_to_cygwin ARG -# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed -# in a wine environment, working winepath, and LT_CYGPATH set. Returns result -# in func_to_host_file_result. -func_convert_file_nix_to_cygwin () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. - func_convert_core_file_wine_to_w32 "$1" - func_cygpath -u "$func_convert_core_file_wine_to_w32_result" - func_to_host_file_result=$func_cygpath_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_cygwin - - -############################################# -# $build to $host PATH CONVERSION FUNCTIONS # -############################################# -# invoked via '$to_host_path_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# The result will be available in $func_to_host_path_result. -# -# Path separators are also converted from $build format to $host format. If -# ARG begins or ends with a path separator character, it is preserved (but -# converted to $host format) on output. -# -# All path conversion functions are named using the following convention: -# file name conversion function : func_convert_file_X_to_Y () -# path conversion function : func_convert_path_X_to_Y () -# where, for any given $build/$host combination the 'X_to_Y' value is the -# same. If conversion functions are added for new $build/$host combinations, -# the two new functions must follow this pattern, or func_init_to_host_path_cmd -# will break. - - -# func_init_to_host_path_cmd -# Ensures that function "pointer" variable $to_host_path_cmd is set to the -# appropriate value, based on the value of $to_host_file_cmd. -to_host_path_cmd= -func_init_to_host_path_cmd () -{ - $debug_cmd - - if test -z "$to_host_path_cmd"; then - func_stripname 'func_convert_file_' '' "$to_host_file_cmd" - to_host_path_cmd=func_convert_path_$func_stripname_result - fi -} - - -# func_to_host_path ARG -# Converts the path ARG from $build format to $host format. Return result -# in func_to_host_path_result. -func_to_host_path () -{ - $debug_cmd - - func_init_to_host_path_cmd - $to_host_path_cmd "$1" -} -# end func_to_host_path - - -# func_convert_path_noop ARG -# Copy ARG to func_to_host_path_result. -func_convert_path_noop () -{ - func_to_host_path_result=$1 -} -# end func_convert_path_noop - - -# func_convert_path_msys_to_w32 ARG -# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_path_result. -func_convert_path_msys_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # Remove leading and trailing path separator characters from ARG. MSYS - # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; - # and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result=$func_convert_core_msys_to_w32_result - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_msys_to_w32 - - -# func_convert_path_cygwin_to_w32 ARG -# Convert path ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_path_cygwin_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_cygwin_to_w32 - - -# func_convert_path_nix_to_w32 ARG -# Convert path ARG from *nix to w32 format. Requires a wine environment and -# a working winepath. Returns result in func_to_host_file_result. -func_convert_path_nix_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result=$func_convert_core_path_wine_to_w32_result - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_nix_to_w32 - - -# func_convert_path_msys_to_cygwin ARG -# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_path_msys_to_cygwin () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_msys_to_w32_result" - func_to_host_path_result=$func_cygpath_result - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_msys_to_cygwin - - -# func_convert_path_nix_to_cygwin ARG -# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a -# a wine environment, working winepath, and LT_CYGPATH set. Returns result in -# func_to_host_file_result. -func_convert_path_nix_to_cygwin () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" - func_to_host_path_result=$func_cygpath_result - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_nix_to_cygwin - - -# func_dll_def_p FILE -# True iff FILE is a Windows DLL '.def' file. -# Keep in sync with _LT_DLL_DEF_P in libtool.m4 -func_dll_def_p () -{ - $debug_cmd - - func_dll_def_p_tmp=`$SED -n \ - -e 's/^[ ]*//' \ - -e '/^\(;.*\)*$/d' \ - -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ - -e q \ - "$1"` - test DEF = "$func_dll_def_p_tmp" -} - - -# func_mode_compile arg... -func_mode_compile () -{ - $debug_cmd - - # Get the compilation command and the source file. - base_compile= - srcfile=$nonopt # always keep a non-empty value in "srcfile" - suppress_opt=yes - suppress_output= - arg_mode=normal - libobj= - later= - pie_flag= - - for arg - do - case $arg_mode in - arg ) - # do not "continue". Instead, add this to base_compile - lastarg=$arg - arg_mode=normal - ;; - - target ) - libobj=$arg - arg_mode=normal - continue - ;; - - normal ) - # Accept any command-line options. - case $arg in - -o) - test -n "$libobj" && \ - func_fatal_error "you cannot specify '-o' more than once" - arg_mode=target - continue - ;; - - -pie | -fpie | -fPIE) - func_append pie_flag " $arg" - continue - ;; - - -shared | -static | -prefer-pic | -prefer-non-pic) - func_append later " $arg" - continue - ;; - - -no-suppress) - suppress_opt=no - continue - ;; - - -Xcompiler) - arg_mode=arg # the next one goes into the "base_compile" arg list - continue # The current "srcfile" will either be retained or - ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - lastarg= - save_ifs=$IFS; IFS=, - for arg in $args; do - IFS=$save_ifs - func_append_quoted lastarg "$arg" - done - IFS=$save_ifs - func_stripname ' ' '' "$lastarg" - lastarg=$func_stripname_result - - # Add the arguments to base_compile. - func_append base_compile " $lastarg" - continue - ;; - - *) - # Accept the current argument as the source file. - # The previous "srcfile" becomes the current argument. - # - lastarg=$srcfile - srcfile=$arg - ;; - esac # case $arg - ;; - esac # case $arg_mode - - # Aesthetically quote the previous argument. - func_append_quoted base_compile "$lastarg" - done # for arg - - case $arg_mode in - arg) - func_fatal_error "you must specify an argument for -Xcompile" - ;; - target) - func_fatal_error "you must specify a target with '-o'" - ;; - *) - # Get the name of the library object. - test -z "$libobj" && { - func_basename "$srcfile" - libobj=$func_basename_result - } - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - case $libobj in - *.[cCFSifmso] | \ - *.ada | *.adb | *.ads | *.asm | \ - *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ - *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) - func_xform "$libobj" - libobj=$func_xform_result - ;; - esac - - case $libobj in - *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; - *) - func_fatal_error "cannot determine name of library object from '$libobj'" - ;; - esac - - func_infer_tag $base_compile - - for arg in $later; do - case $arg in - -shared) - test yes = "$build_libtool_libs" \ - || func_fatal_configuration "cannot build a shared library" - build_old_libs=no - continue - ;; - - -static) - build_libtool_libs=no - build_old_libs=yes - continue - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - esac - done - - func_quote_for_eval "$libobj" - test "X$libobj" != "X$func_quote_for_eval_result" \ - && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && func_warning "libobj name '$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname=$func_basename_result - xdir=$func_dirname_result - lobj=$xdir$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test yes = "$build_old_libs"; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test no = "$compiler_c_o"; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext - lockfile=$output_obj.lock - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test yes = "$need_locks"; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test warn = "$need_locks"; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - func_append removelist " $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - func_append removelist " $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 - srcfile=$func_to_tool_file_result - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test yes = "$build_libtool_libs"; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test no != "$pic_mode"; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - func_append command " -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test warn = "$need_locks" && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test yes = "$suppress_opt"; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test yes = "$build_old_libs"; then - if test yes != "$pic_mode"; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test yes = "$compiler_c_o"; then - func_append command " -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - func_append command "$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test warn = "$need_locks" && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test no != "$need_locks"; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { - test compile = "$opt_mode" && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $opt_mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to build PIC objects only - -prefer-non-pic try to build non-PIC objects only - -shared do not build a '.o' file suitable for static linking - -static only build a '.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler - -COMPILE-COMMAND is a command to be used in creating a 'standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix '.c' with the -library object suffix, '.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to '-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the '--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the 'install' or 'cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -bindir BINDIR specify path to binaries directory (for systems where - libraries must be found in the PATH setting at runtime) - -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE use a list of object files found in FILE to specify objects - -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -Wc,FLAG - -Xcompiler FLAG pass linker-specific FLAG directly to the compiler - -Wl,FLAG - -Xlinker FLAG pass linker-specific FLAG directly to the linker - -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) - -All other options (arguments beginning with '-') are ignored. - -Every other argument is treated as a filename. Files ending in '.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in '.la', then a libtool library is created, -only library objects ('.lo' files) may be specified, and '-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created -using 'ar' and 'ranlib', or on Windows using 'lib'. - -If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode '$opt_mode'" - ;; - esac - - echo - $ECHO "Try '$progname --help' for more information about other modes." -} - -# Now that we've collected a possible --mode arg, show help if necessary -if $opt_help; then - if test : = "$opt_help"; then - func_mode_help - else - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - func_mode_help - done - } | $SED -n '1p; 2,$s/^Usage:/ or: /p' - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - echo - func_mode_help - done - } | - $SED '1d - /^When reporting/,/^Report/{ - H - d - } - $x - /information about other modes/d - /more detailed .*MODE/d - s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' - fi - exit $? -fi - - -# func_mode_execute arg... -func_mode_execute () -{ - $debug_cmd - - # The first argument is the command name. - cmd=$nonopt - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $opt_dlopen; do - test -f "$file" \ - || func_fatal_help "'$file' is not a file" - - dir= - case $file in - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "'$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "'$file' was not linked with '-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir=$func_dirname_result - - if test -f "$dir/$objdir/$dlname"; then - func_append dir "/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir=$func_dirname_result - ;; - - *) - func_warning "'-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir=$absdir - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic=$magic - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -* | *.la | *.lo ) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file=$progdir/$program - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file=$progdir/$program - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_append_quoted args "$file" - done - - if $opt_dry_run; then - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - else - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd=\$cmd$args - fi -} - -test execute = "$opt_mode" && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $debug_cmd - - libs= - libdirs= - admincmds= - - for opt in "$nonopt" ${1+"$@"} - do - if test -d "$opt"; then - func_append libdirs " $opt" - - elif test -f "$opt"; then - if func_lalib_unsafe_p "$opt"; then - func_append libs " $opt" - else - func_warning "'$opt' is not a valid libtool archive" - fi - - else - func_fatal_error "invalid argument '$opt'" - fi - done - - if test -n "$libs"; then - if test -n "$lt_sysroot"; then - sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` - sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" - else - sysroot_cmd= - fi - - # Remove sysroot references - if $opt_dry_run; then - for lib in $libs; do - echo "removing references to $lt_sysroot and '=' prefixes from $lib" - done - else - tmpdir=`func_mktempdir` - for lib in $libs; do - $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ - > $tmpdir/tmp-la - mv -f $tmpdir/tmp-la $lib - done - ${RM}r "$tmpdir" - fi - fi - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || func_append admincmds " - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_quiet && exit $EXIT_SUCCESS - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the '-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the '$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the '$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the '$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" - fi - echo - - echo "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" - echo "pages." - ;; - *) - echo "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - echo "----------------------------------------------------------------------" - fi - exit $EXIT_SUCCESS -} - -test finish = "$opt_mode" && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $debug_cmd - - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || - # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac - then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - func_append install_prog "$func_quote_for_eval_result" - install_shared_prog=$install_prog - case " $install_prog " in - *[\\\ /]cp\ *) install_cp=: ;; - *) install_cp=false ;; - esac - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=false - stripme= - no_mode=: - for arg - do - arg2= - if test -n "$dest"; then - func_append files " $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=: ;; - -f) - if $install_cp; then :; else - prev=$arg - fi - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - if test X-m = "X$prev" && test -n "$install_override_mode"; then - arg2=$install_override_mode - no_mode=false - fi - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - func_append install_prog " $func_quote_for_eval_result" - if test -n "$arg2"; then - func_quote_for_eval "$arg2" - fi - func_append install_shared_prog " $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the '$prev' option requires an argument" - - if test -n "$install_override_mode" && $no_mode; then - if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - func_append install_shared_prog " -m $func_quote_for_eval_result" - fi - fi - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=: - if $isdir; then - destdir=$dest - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir=$func_dirname_result - destname=$func_basename_result - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "'$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "'$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic=$magic - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - func_append staticlibs " $file" - ;; - - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "'$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) func_append current_libdirs " $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) func_append future_libdirs " $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir=$func_dirname_result - func_append dir "$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking '$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname=$1 - shift - - srcname=$realname - test -n "$relink_command" && srcname=${realname}T - - # Install the shared library and build the symlinks. - func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme=$stripme - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme= - ;; - esac - ;; - os2*) - case $realname in - *_dll.a) - tstripme= - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try 'ln -sf' first, because the 'ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib=$destdir/$realname - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name=$func_basename_result - instname=$dir/${name}i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && func_append staticlibs " $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile=$destdir/$destname - else - func_basename "$file" - destfile=$func_basename_result - destfile=$destdir/$destfile - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest=$destfile - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to '$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test yes = "$build_old_libs"; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile=$destdir/$destname - else - func_basename "$file" - destfile=$func_basename_result - destfile=$destdir/$destfile - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext= - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=.exe - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script '$wrapper'" - - finalize=: - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "'$lib' has not been installed in '$libdir'" - finalize=false - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test no = "$fast_install" && test -n "$relink_command"; then - $opt_dry_run || { - if $finalize; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file=$func_basename_result - outputname=$tmpdir/$file - # Replace the output file specification. - relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_quiet || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink '$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file=$outputname - else - func_warning "cannot relink '$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name=$func_basename_result - - # Set up the ranlib parameters. - oldlib=$destdir/$name - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $tool_oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run '$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test install = "$opt_mode" && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $debug_cmd - - my_outputname=$1 - my_originator=$2 - my_pic_p=${3-false} - my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms=${my_outputname}S.c - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist=$output_objdir/$my_outputname.nm - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) -#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" -#endif - -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE -/* DATA imports from DLLs on WIN32 can't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined __osf__ -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) - -/* External symbol declarations for the compiler. */\ -" - - if test yes = "$dlself"; then - func_verbose "generating symbol list for '$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_to_tool_file "$progfile" func_convert_file_msys_to_w32 - func_verbose "extracting global C symbols from '$func_to_tool_file_result'" - $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols=$output_objdir/$outputname.exp - $opt_dry_run || { - $RM $export_symbols - eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from '$dlprefile'" - func_basename "$dlprefile" - name=$func_basename_result - case $host in - *cygwin* | *mingw* | *cegcc* ) - # if an import library, we need to obtain dlname - if func_win32_import_lib_p "$dlprefile"; then - func_tr_sh "$dlprefile" - eval "curr_lafile=\$libfile_$func_tr_sh_result" - dlprefile_dlbasename= - if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then - # Use subshell, to avoid clobbering current variable values - dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` - if test -n "$dlprefile_dlname"; then - func_basename "$dlprefile_dlname" - dlprefile_dlbasename=$func_basename_result - else - # no lafile. user explicitly requested -dlpreopen <import library>. - $sharedlib_from_linklib_cmd "$dlprefile" - dlprefile_dlbasename=$sharedlib_from_linklib_result - fi - fi - $opt_dry_run || { - if test -n "$dlprefile_dlbasename"; then - eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' - else - func_warning "Could not compute DLL name from $name" - eval '$ECHO ": $name " >> "$nlist"' - fi - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | - $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" - } - else # not an import lib - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - fi - ;; - *) - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - ;; - esac - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 </dev/null >/dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - func_show_eval '$RM "${nlist}I"' - if test -n "$global_symbol_to_import"; then - eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' - fi - - echo >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -extern LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[];\ -" - - if test -s "$nlist"I; then - echo >> "$output_objdir/$my_dlsyms" "\ -static void lt_syminit(void) -{ - LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; - for (; symbol->name; ++symbol) - {" - $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" - echo >> "$output_objdir/$my_dlsyms" "\ - } -}" - fi - echo >> "$output_objdir/$my_dlsyms" "\ -LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{ {\"$my_originator\", (void *) 0}," - - if test -s "$nlist"I; then - echo >> "$output_objdir/$my_dlsyms" "\ - {\"@INIT@\", (void *) <_syminit}," - fi - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - echo >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - $my_pic_p && pic_flag_for_symtable=" $pic_flag" - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) func_append symtab_cflags " $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' - - # Transform the symbol file into the correct name. - symfileobj=$output_objdir/${my_outputname}S.$objext - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for '$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` - fi -} - -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $debug_cmd - - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $debug_cmd - - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -# Despite the name, also deal with 64 bit binaries. -func_win32_libid () -{ - $debug_cmd - - win32_libid_type=unknown - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - case $nm_interface in - "MS dumpbin") - if func_cygming_ms_implib_p "$1" || - func_cygming_gnu_implib_p "$1" - then - win32_nmres=import - else - win32_nmres= - fi - ;; - *) - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $SED -n -e ' - 1,100{ - / I /{ - s|.*|import| - p - q - } - }'` - ;; - esac - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - -# func_cygming_dll_for_implib ARG -# -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib () -{ - $debug_cmd - - sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` -} - -# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs -# -# The is the core of a fallback implementation of a -# platform-specific function to extract the name of the -# DLL associated with the specified import library LIBNAME. -# -# SECTION_NAME is either .idata$6 or .idata$7, depending -# on the platform and compiler that created the implib. -# -# Echos the name of the DLL associated with the -# specified import library. -func_cygming_dll_for_implib_fallback_core () -{ - $debug_cmd - - match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` - $OBJDUMP -s --section "$1" "$2" 2>/dev/null | - $SED '/^Contents of section '"$match_literal"':/{ - # Place marker at beginning of archive member dllname section - s/.*/====MARK====/ - p - d - } - # These lines can sometimes be longer than 43 characters, but - # are always uninteresting - /:[ ]*file format pe[i]\{,1\}-/d - /^In archive [^:]*:/d - # Ensure marker is printed - /^====MARK====/p - # Remove all lines with less than 43 characters - /^.\{43\}/!d - # From remaining lines, remove first 43 characters - s/^.\{43\}//' | - $SED -n ' - # Join marker and all lines until next marker into a single line - /^====MARK====/ b para - H - $ b para - b - :para - x - s/\n//g - # Remove the marker - s/^====MARK====// - # Remove trailing dots and whitespace - s/[\. \t]*$// - # Print - /./p' | - # we now have a list, one entry per line, of the stringified - # contents of the appropriate section of all members of the - # archive that possess that section. Heuristic: eliminate - # all those that have a first or second character that is - # a '.' (that is, objdump's representation of an unprintable - # character.) This should work for all archives with less than - # 0x302f exports -- but will fail for DLLs whose name actually - # begins with a literal '.' or a single character followed by - # a '.'. - # - # Of those that remain, print the first one. - $SED -e '/^\./d;/^.\./d;q' -} - -# func_cygming_dll_for_implib_fallback ARG -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# -# This fallback implementation is for use when $DLLTOOL -# does not support the --identify-strict option. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib_fallback () -{ - $debug_cmd - - if func_cygming_gnu_implib_p "$1"; then - # binutils import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` - elif func_cygming_ms_implib_p "$1"; then - # ms-generated import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` - else - # unknown - sharedlib_from_linklib_result= - fi -} - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $debug_cmd - - f_ex_an_ar_dir=$1; shift - f_ex_an_ar_oldlib=$1 - if test yes = "$lock_old_archive_extraction"; then - lockfile=$f_ex_an_ar_oldlib.lock - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - fi - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ - 'stat=$?; rm -f "$lockfile"; exit $stat' - if test yes = "$lock_old_archive_extraction"; then - $opt_dry_run || rm -f "$lockfile" - fi - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $debug_cmd - - my_gentop=$1; shift - my_oldlibs=${1+"$@"} - my_oldobjs= - my_xlib= - my_xabs= - my_xdir= - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib=$func_basename_result - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir=$my_gentop/$my_xlib_u - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - func_basename "$darwin_archive" - darwin_base_archive=$func_basename_result - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches; do - func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" - $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" - cd "unfat-$$/$darwin_base_archive-$darwin_arch" - func_extract_an_archive "`pwd`" "$darwin_base_archive" - cd "$darwin_curdir" - $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` - done - - func_extract_archives_result=$my_oldobjs -} - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory where it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=${1-no} - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - file=\"\$0\"" - - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` - $ECHO "\ - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - ECHO=\"$qECHO\" - fi - -# Very basic option parsing. These options are (a) specific to -# the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ that is used only on -# windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options that match -# this pattern). -# -# There are only two supported options: --lt-debug and -# --lt-dump-script. There is, deliberately, no --lt-help. -# -# The first argument to this parsing function should be the -# script's $0 value, followed by "$@". -lt_option_debug= -func_parse_lt_options () -{ - lt_script_arg0=\$0 - shift - for lt_opt - do - case \"\$lt_opt\" in - --lt-debug) lt_option_debug=1 ;; - --lt-dump-script) - lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` - test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. - lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` - cat \"\$lt_dump_D/\$lt_dump_F\" - exit 0 - ;; - --lt-*) - \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 - exit 1 - ;; - esac - done - - # Print the debug banner immediately: - if test -n \"\$lt_option_debug\"; then - echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 - fi -} - -# Used when --lt-debug. Prints its arguments to stdout -# (redirection is the responsibility of the caller) -func_lt_dump_args () -{ - lt_dump_args_N=1; - for lt_arg - do - \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" - lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` - done -} - -# Core function for launching the target application -func_exec_program_core () -{ -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 -} - -# A function to encapsulate launching the target application -# Strips options in the --lt-* namespace from \$@ and -# launches target application with the remaining arguments. -func_exec_program () -{ - case \" \$* \" in - *\\ --lt-*) - for lt_wr_arg - do - case \$lt_wr_arg in - --lt-*) ;; - *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; - esac - shift - done ;; - esac - func_exec_program_core \${1+\"\$@\"} -} - - # Parse options - func_parse_lt_options \"\$0\" \${1+\"\$@\"} - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` - done - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test yes = "$fast_install"; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - \$ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # fixup the dll searchpath if we need to. - # - # Fix the DLL searchpath if we need to. Do this before prepending - # to shlibpath, because on Windows, both are PATH and uninstalled - # libraries must come first. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - # Export our shlibpath_var if we have one. - if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` - - export $shlibpath_var -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. - func_exec_program \${1+\"\$@\"} - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} - - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat <<EOF - -/* $cwrappersource - temporary wrapper executable for $objdir/$outputname - Generated by $PROGRAM (GNU $PACKAGE) $VERSION - - The $output program cannot be directly executed until all the libtool - libraries that it depends on are installed. - - This wrapper executable should never be moved out of the build directory. - If it is, it will not operate correctly. -*/ -EOF - cat <<"EOF" -#ifdef _MSC_VER -# define _CRT_SECURE_NO_DEPRECATE 1 -#endif -#include <stdio.h> -#include <stdlib.h> -#ifdef _MSC_VER -# include <direct.h> -# include <process.h> -# include <io.h> -#else -# include <unistd.h> -# include <stdint.h> -# ifdef __CYGWIN__ -# include <io.h> -# endif -#endif -#include <malloc.h> -#include <stdarg.h> -#include <assert.h> -#include <string.h> -#include <ctype.h> -#include <errno.h> -#include <fcntl.h> -#include <sys/stat.h> - -#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) - -/* declarations of non-ANSI functions */ -#if defined __MINGW32__ -# ifdef __STRICT_ANSI__ -int _putenv (const char *); -# endif -#elif defined __CYGWIN__ -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -/* #elif defined other_platform || defined ... */ -#endif - -/* portability defines, excluding path handling macros */ -#if defined _MSC_VER -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -# define S_IXUSR _S_IEXEC -#elif defined __MINGW32__ -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -#elif defined __CYGWIN__ -# define HAVE_SETENV -# define FOPEN_WB "wb" -/* #elif defined other platforms ... */ -#endif - -#if defined PATH_MAX -# define LT_PATHMAX PATH_MAX -#elif defined MAXPATHLEN -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -/* path handling portability macros */ -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ - defined __OS2__ -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free (stale); stale = 0; } \ -} while (0) - -#if defined LT_DEBUGWRAPPER -static int lt_debug = 1; -#else -static int lt_debug = 0; -#endif - -const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_debugprintf (const char *file, int line, const char *fmt, ...); -void lt_fatal (const char *file, int line, const char *message, ...); -static const char *nonnull (const char *s); -static const char *nonempty (const char *s); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); -char **prepare_spawn (char **argv); -void lt_dump_script (FILE *f); -EOF - - cat <<EOF -#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) -# define externally_visible volatile -#else -# define externally_visible __attribute__((externally_visible)) volatile -#endif -externally_visible const char * MAGIC_EXE = "$magic_exe"; -const char * LIB_PATH_VARNAME = "$shlibpath_var"; -EOF - - if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - func_to_host_path "$temp_rpath" - cat <<EOF -const char * LIB_PATH_VALUE = "$func_to_host_path_result"; -EOF - else - cat <<"EOF" -const char * LIB_PATH_VALUE = ""; -EOF - fi - - if test -n "$dllsearchpath"; then - func_to_host_path "$dllsearchpath:" - cat <<EOF -const char * EXE_PATH_VARNAME = "PATH"; -const char * EXE_PATH_VALUE = "$func_to_host_path_result"; -EOF - else - cat <<"EOF" -const char * EXE_PATH_VARNAME = ""; -const char * EXE_PATH_VALUE = ""; -EOF - fi - - if test yes = "$fast_install"; then - cat <<EOF -const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ -EOF - else - cat <<EOF -const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ -EOF - fi - - - cat <<"EOF" - -#define LTWRAPPER_OPTION_PREFIX "--lt-" - -static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; -static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; -static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; - -int -main (int argc, char *argv[]) -{ - char **newargz; - int newargc; - char *tmp_pathspec; - char *actual_cwrapper_path; - char *actual_cwrapper_name; - char *target_name; - char *lt_argv_zero; - int rval = 127; - - int i; - - program_name = (char *) xstrdup (base_name (argv[0])); - newargz = XMALLOC (char *, (size_t) argc + 1); - - /* very simple arg parsing; don't want to rely on getopt - * also, copy all non cwrapper options to newargz, except - * argz[0], which is handled differently - */ - newargc=0; - for (i = 1; i < argc; i++) - { - if (STREQ (argv[i], dumpscript_opt)) - { -EOF - case $host in - *mingw* | *cygwin* ) - # make stdout use "unix" line endings - echo " setmode(1,_O_BINARY);" - ;; - esac - - cat <<"EOF" - lt_dump_script (stdout); - return 0; - } - if (STREQ (argv[i], debug_opt)) - { - lt_debug = 1; - continue; - } - if (STREQ (argv[i], ltwrapper_option_prefix)) - { - /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX - namespace, but it is not one of the ones we know about and - have already dealt with, above (inluding dump-script), then - report an error. Otherwise, targets might begin to believe - they are allowed to use options in the LTWRAPPER_OPTION_PREFIX - namespace. The first time any user complains about this, we'll - need to make LTWRAPPER_OPTION_PREFIX a configure-time option - or a configure.ac-settable value. - */ - lt_fatal (__FILE__, __LINE__, - "unrecognized %s option: '%s'", - ltwrapper_option_prefix, argv[i]); - } - /* otherwise ... */ - newargz[++newargc] = xstrdup (argv[i]); - } - newargz[++newargc] = NULL; - -EOF - cat <<EOF - /* The GNU banner must be the first non-error debug message */ - lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); -EOF - cat <<"EOF" - lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); - lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); - - tmp_pathspec = find_executable (argv[0]); - if (tmp_pathspec == NULL) - lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); - lt_debugprintf (__FILE__, __LINE__, - "(main) found exe (before symlink chase) at: %s\n", - tmp_pathspec); - - actual_cwrapper_path = chase_symlinks (tmp_pathspec); - lt_debugprintf (__FILE__, __LINE__, - "(main) found exe (after symlink chase) at: %s\n", - actual_cwrapper_path); - XFREE (tmp_pathspec); - - actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); - strendzap (actual_cwrapper_path, actual_cwrapper_name); - - /* wrapper name transforms */ - strendzap (actual_cwrapper_name, ".exe"); - tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); - XFREE (actual_cwrapper_name); - actual_cwrapper_name = tmp_pathspec; - tmp_pathspec = 0; - - /* target_name transforms -- use actual target program name; might have lt- prefix */ - target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); - strendzap (target_name, ".exe"); - tmp_pathspec = lt_extend_str (target_name, ".exe", 1); - XFREE (target_name); - target_name = tmp_pathspec; - tmp_pathspec = 0; - - lt_debugprintf (__FILE__, __LINE__, - "(main) libtool target name: %s\n", - target_name); -EOF - - cat <<EOF - newargz[0] = - XMALLOC (char, (strlen (actual_cwrapper_path) + - strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); - strcpy (newargz[0], actual_cwrapper_path); - strcat (newargz[0], "$objdir"); - strcat (newargz[0], "/"); -EOF - - cat <<"EOF" - /* stop here, and copy so we don't have to do this twice */ - tmp_pathspec = xstrdup (newargz[0]); - - /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ - strcat (newargz[0], actual_cwrapper_name); - - /* DO want the lt- prefix here if it exists, so use target_name */ - lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); - XFREE (tmp_pathspec); - tmp_pathspec = NULL; -EOF - - case $host_os in - mingw*) - cat <<"EOF" - { - char* p; - while ((p = strchr (newargz[0], '\\')) != NULL) - { - *p = '/'; - } - while ((p = strchr (lt_argv_zero, '\\')) != NULL) - { - *p = '/'; - } - } -EOF - ;; - esac - - cat <<"EOF" - XFREE (target_name); - XFREE (actual_cwrapper_path); - XFREE (actual_cwrapper_name); - - lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ - lt_setenv ("DUALCASE", "1"); /* for MSK sh */ - /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must - be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) - because on Windows, both *_VARNAMEs are PATH but uninstalled - libraries must come first. */ - lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); - lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); - - lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", - nonnull (lt_argv_zero)); - for (i = 0; i < newargc; i++) - { - lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", - i, nonnull (newargz[i])); - } - -EOF - - case $host_os in - mingw*) - cat <<"EOF" - /* execv doesn't actually work on mingw as expected on unix */ - newargz = prepare_spawn (newargz); - rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); - if (rval == -1) - { - /* failed to start process */ - lt_debugprintf (__FILE__, __LINE__, - "(main) failed to launch target \"%s\": %s\n", - lt_argv_zero, nonnull (strerror (errno))); - return 127; - } - return rval; -EOF - ;; - *) - cat <<"EOF" - execv (lt_argv_zero, newargz); - return rval; /* =127, but avoids unused variable warning */ -EOF - ;; - esac - - cat <<"EOF" -} - -void * -xmalloc (size_t num) -{ - void *p = (void *) malloc (num); - if (!p) - lt_fatal (__FILE__, __LINE__, "memory exhausted"); - - return p; -} - -char * -xstrdup (const char *string) -{ - return string ? strcpy ((char *) xmalloc (strlen (string) + 1), - string) : NULL; -} - -const char * -base_name (const char *name) -{ - const char *base; - -#if defined HAVE_DOS_BASED_FILE_SYSTEM - /* Skip over the disk name in MSDOS pathnames. */ - if (isalpha ((unsigned char) name[0]) && name[1] == ':') - name += 2; -#endif - - for (base = name; *name; name++) - if (IS_DIR_SEPARATOR (*name)) - base = name + 1; - return base; -} - -int -check_executable (const char *path) -{ - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if ((stat (path, &st) >= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - size_t tmp_len; - char *concat_name; - - lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", - nonempty (wrapper)); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined HAVE_DOS_BASED_FILE_SYSTEM - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined HAVE_DOS_BASED_FILE_SYSTEM - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = (size_t) (q - p); - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - lt_debugprintf (__FILE__, __LINE__, - "checking path component for symlinks: %s\n", - tmp_pathspec); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - lt_fatal (__FILE__, __LINE__, - "error accessing file \"%s\": %s", - tmp_pathspec, nonnull (strerror (errno))); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal (__FILE__, __LINE__, - "could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (STREQ (str, pat)) - *str = '\0'; - } - return str; -} - -void -lt_debugprintf (const char *file, int line, const char *fmt, ...) -{ - va_list args; - if (lt_debug) - { - (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); - } -} - -static void -lt_error_core (int exit_status, const char *file, - int line, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *file, int line, const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); - va_end (ap); -} - -static const char * -nonnull (const char *s) -{ - return s ? s : "(null)"; -} - -static const char * -nonempty (const char *s) -{ - return (s && !*s) ? "(empty)" : nonnull (s); -} - -void -lt_setenv (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_setenv) setting '%s' to '%s'\n", - nonnull (name), nonnull (value)); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - size_t len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - size_t orig_value_len = strlen (orig_value); - size_t add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - size_t len = strlen (new_value); - while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[--len] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -EOF - case $host_os in - mingw*) - cat <<"EOF" - -/* Prepares an argument vector before calling spawn(). - Note that spawn() does not by itself call the command interpreter - (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : - ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&v); - v.dwPlatformId == VER_PLATFORM_WIN32_NT; - }) ? "cmd.exe" : "command.com"). - Instead it simply concatenates the arguments, separated by ' ', and calls - CreateProcess(). We must quote the arguments since Win32 CreateProcess() - interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a - special way: - - Space and tab are interpreted as delimiters. They are not treated as - delimiters if they are surrounded by double quotes: "...". - - Unescaped double quotes are removed from the input. Their only effect is - that within double quotes, space and tab are treated like normal - characters. - - Backslashes not followed by double quotes are not special. - - But 2*n+1 backslashes followed by a double quote become - n backslashes followed by a double quote (n >= 0): - \" -> " - \\\" -> \" - \\\\\" -> \\" - */ -#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -char ** -prepare_spawn (char **argv) -{ - size_t argc; - char **new_argv; - size_t i; - - /* Count number of arguments. */ - for (argc = 0; argv[argc] != NULL; argc++) - ; - - /* Allocate new argument vector. */ - new_argv = XMALLOC (char *, argc + 1); - - /* Put quoted arguments into the new argument vector. */ - for (i = 0; i < argc; i++) - { - const char *string = argv[i]; - - if (string[0] == '\0') - new_argv[i] = xstrdup ("\"\""); - else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) - { - int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); - size_t length; - unsigned int backslashes; - const char *s; - char *quoted_string; - char *p; - - length = 0; - backslashes = 0; - if (quote_around) - length++; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - length += backslashes + 1; - length++; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - length += backslashes + 1; - - quoted_string = XMALLOC (char, length + 1); - - p = quoted_string; - backslashes = 0; - if (quote_around) - *p++ = '"'; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - { - unsigned int j; - for (j = backslashes + 1; j > 0; j--) - *p++ = '\\'; - } - *p++ = c; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - { - unsigned int j; - for (j = backslashes; j > 0; j--) - *p++ = '\\'; - *p++ = '"'; - } - *p = '\0'; - - new_argv[i] = quoted_string; - } - else - new_argv[i] = (char *) string; - } - new_argv[argc] = NULL; - - return new_argv; -} -EOF - ;; - esac - - cat <<"EOF" -void lt_dump_script (FILE* f) -{ -EOF - func_emit_wrapper yes | - $SED -n -e ' -s/^\(.\{79\}\)\(..*\)/\1\ -\2/ -h -s/\([\\"]\)/\\\1/g -s/$/\\n/ -s/\([^\n]*\).*/ fputs ("\1", f);/p -g -D' - cat <<"EOF" -} -EOF -} -# end: func_emit_cwrapperexe_src - -# func_win32_import_lib_p ARG -# True if ARG is an import lib, as indicated by $file_magic_cmd -func_win32_import_lib_p () -{ - $debug_cmd - - case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in - *import*) : ;; - *) false ;; - esac -} - -# func_suncc_cstd_abi -# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! -# Several compiler flags select an ABI that is incompatible with the -# Cstd library. Avoid specifying it if any are in CXXFLAGS. -func_suncc_cstd_abi () -{ - $debug_cmd - - case " $compile_command " in - *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) - suncc_use_cstd_abi=no - ;; - *) - suncc_use_cstd_abi=yes - ;; - esac -} - -# func_mode_link arg... -func_mode_link () -{ - $debug_cmd - - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # what system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll that has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - bindir= - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - os2dllname= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=false - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module=$wl-single_module - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test yes != "$build_libtool_libs" \ - && func_fatal_configuration "cannot build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg=$1 - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - bindir) - bindir=$arg - prev= - continue - ;; - dlfiles|dlprefiles) - $preload || { - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=: - } - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test no = "$dlself"; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test dlprefiles = "$prev"; then - dlself=yes - elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test dlfiles = "$prev"; then - func_append dlfiles " $arg" - else - func_append dlprefiles " $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols=$arg - test -f "$arg" \ - || func_fatal_error "symbol file '$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex=$arg - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) func_append deplibs " $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir=$arg - prev= - continue - ;; - mllvm) - # Clang does not use LLVM to link, so we can simply discard any - # '-mllvm $arg' options when doing the link step. - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# func_append moreargs " $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test none = "$pic_object" && - test none = "$non_pic_object"; then - func_fatal_error "cannot find name of object for '$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - if test none != "$pic_object"; then - # Prepend the subdirectory the object is found in. - pic_object=$xdir$pic_object - - if test dlfiles = "$prev"; then - if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test dlprefiles = "$prev"; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg=$pic_object - fi - - # Non-PIC object. - if test none != "$non_pic_object"; then - # Prepend the subdirectory the object is found in. - non_pic_object=$xdir$non_pic_object - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test none = "$pic_object"; then - arg=$non_pic_object - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object=$pic_object - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "'$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file '$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - os2dllname) - os2dllname=$arg - prev= - continue - ;; - precious_regex) - precious_files_regex=$arg - prev= - continue - ;; - release) - release=-$arg - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test rpath = "$prev"; then - case "$rpath " in - *" $arg "*) ;; - *) func_append rpath " $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) func_append xrpath " $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds=$arg - prev= - continue - ;; - weak) - func_append weak_libs " $arg" - prev= - continue - ;; - xcclinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg=$arg - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "'-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -bindir) - prev=bindir - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test X-export-symbols = "X$arg"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname "-L" '' "$arg" - if test -z "$func_stripname_result"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between '-L' and '$1'" - else - func_fatal_error "need path for '-L' option" - fi - fi - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of '$dir'" - dir=$absdir - ;; - esac - case "$deplibs " in - *" -L$dir "* | *" $arg "*) - # Will only happen for absolute or sysroot arguments - ;; - *) - # Preserve sysroot, but never include relative directories - case $dir in - [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; - *) func_append deplibs " -L$dir" ;; - esac - func_append lib_search_path " $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) func_append dllsearchpath ":$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test X-lc = "X$arg" || test X-lm = "X$arg"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test X-lc = "X$arg" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) - # Do not include libc due to us having libc/libc_r. - test X-lc = "X$arg" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - func_append deplibs " System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test X-lc = "X$arg" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test X-lc = "X$arg" && continue - ;; - esac - elif test X-lc_r = "X$arg"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - func_append deplibs " $arg" - continue - ;; - - -mllvm) - prev=mllvm - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot|--sysroot) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) func_append new_inherited_linker_flags " $arg" ;; - esac - continue - ;; - - -multi_module) - single_module=$wl-multi_module - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "'-no-install' is ignored for $host" - func_warning "assuming '-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -os2dllname) - prev=os2dllname - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - =*) - func_stripname '=' '' "$dir" - dir=$lt_sysroot$func_stripname_result - ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs=$IFS; IFS=, - for flag in $args; do - IFS=$save_ifs - func_quote_for_eval "$flag" - func_append arg " $func_quote_for_eval_result" - func_append compiler_flags " $func_quote_for_eval_result" - done - IFS=$save_ifs - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs=$IFS; IFS=, - for flag in $args; do - IFS=$save_ifs - func_quote_for_eval "$flag" - func_append arg " $wl$func_quote_for_eval_result" - func_append compiler_flags " $wl$func_quote_for_eval_result" - func_append linker_flags " $func_quote_for_eval_result" - done - IFS=$save_ifs - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - - # Flags to be passed through unchanged, with rationale: - # -64, -mips[0-9] enable 64-bit mode for the SGI compiler - # -r[0-9][0-9]* specify processor for the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler - # +DA*, +DD* enable 64-bit mode for the HP compiler - # -q* compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* architecture-specific flags for GCC - # -F/path path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* profiling flags for GCC - # -fstack-protector* stack protector flags for GCC - # @file GCC response files - # -tp=* Portland pgcc target processor selection - # --sysroot=* for sysroot support - # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization - # -stdlib=* select c++ std lib with clang - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - func_append compile_command " $arg" - func_append finalize_command " $arg" - func_append compiler_flags " $arg" - continue - ;; - - -Z*) - if test os2 = "`expr $host : '.*\(os2\)'`"; then - # OS/2 uses -Zxxx to specify OS/2-specific options - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case $arg in - -Zlinker | -Zstack) - prev=xcompiler - ;; - esac - continue - else - # Otherwise treat like 'Some other compiler flag' below - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - fi - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - - *.$objext) - # A standard object. - func_append objs " $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test none = "$pic_object" && - test none = "$non_pic_object"; then - func_fatal_error "cannot find name of object for '$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - test none = "$pic_object" || { - # Prepend the subdirectory the object is found in. - pic_object=$xdir$pic_object - - if test dlfiles = "$prev"; then - if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test dlprefiles = "$prev"; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg=$pic_object - } - - # Non-PIC object. - if test none != "$non_pic_object"; then - # Prepend the subdirectory the object is found in. - non_pic_object=$xdir$non_pic_object - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test none = "$pic_object"; then - arg=$non_pic_object - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object=$pic_object - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "'$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - func_append deplibs " $arg" - func_append old_deplibs " $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - func_resolve_sysroot "$arg" - if test dlfiles = "$prev"; then - # This library was specified with -dlopen. - func_append dlfiles " $func_resolve_sysroot_result" - prev= - elif test dlprefiles = "$prev"; then - # The library was specified with -dlpreopen. - func_append dlprefiles " $func_resolve_sysroot_result" - prev= - else - func_append deplibs " $func_resolve_sysroot_result" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the '$prevarg' option requires an argument" - - if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname=$func_basename_result - libobjs_save=$libobjs - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - # Definition is injected by LT_CONFIG during libtool generation. - func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" - - func_dirname "$output" "/" "" - output_objdir=$func_dirname_result$objdir - func_to_tool_file "$output_objdir/" - tool_output_objdir=$func_to_tool_file_result - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_preserve_dup_deps; then - case "$libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append libs " $deplib" - done - - if test lib = "$linkmode"; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; - esac - func_append pre_post_deps " $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=false - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test lib,link = "$linkmode,$pass"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs=$tmp_deplibs - fi - - if test lib,link = "$linkmode,$pass" || - test prog,scan = "$linkmode,$pass"; then - libs=$deplibs - deplibs= - fi - if test prog = "$linkmode"; then - case $pass in - dlopen) libs=$dlfiles ;; - dlpreopen) libs=$dlprefiles ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi - if test lib,dlpreopen = "$linkmode,$pass"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - func_resolve_sysroot "$lib" - case $lib in - *.la) func_source "$func_resolve_sysroot_result" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - func_basename "$deplib" - deplib_base=$func_basename_result - case " $weak_libs " in - *" $deplib_base "*) ;; - *) func_append deplibs " $deplib" ;; - esac - done - done - libs=$dlprefiles - fi - if test dlopen = "$pass"; then - # Collect dlpreopened libraries - save_deplibs=$deplibs - deplibs= - fi - - for deplib in $libs; do - lib= - found=false - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append compiler_flags " $deplib" - if test lib = "$linkmode"; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test lib != "$linkmode" && test prog != "$linkmode"; then - func_warning "'-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test lib = "$linkmode"; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib=$searchdir/lib$name$search_ext - if test -f "$lib"; then - if test .la = "$search_ext"; then - found=: - else - found=false - fi - break 2 - fi - done - done - if $found; then - # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll=$l - done - if test "X$ll" = "X$old_library"; then # only static version available - found=false - func_dirname "$lib" "" "." - ladir=$func_dirname_result - lib=$ladir/$old_library - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - else - # deplib doesn't seem to be a libtool library - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - ;; # -l - *.ltframework) - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test lib = "$linkmode"; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test conv = "$pass" && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - prog) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - continue - fi - if test scan = "$pass"; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - *) - func_warning "'-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test link = "$pass"; then - func_stripname '-R' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) - func_resolve_sysroot "$deplib" - lib=$func_resolve_sysroot_result - ;; - *.$libext) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=false - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=: - fi - ;; - pass_all) - valid_a_lib=: - ;; - esac - if $valid_a_lib; then - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - else - echo - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because the file extensions .$libext of this argument makes me believe" - echo "*** that it is just a static archive that I should not use here." - fi - ;; - esac - continue - ;; - prog) - if test link != "$pass"; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - elif test prog = "$linkmode"; then - if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - func_append newdlprefiles " $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append newdlfiles " $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=: - continue - ;; - esac # case $deplib - - $found || test -f "$lib" \ - || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "'$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir=$func_dirname_result - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test lib,link = "$linkmode,$pass" || - test prog,scan = "$linkmode,$pass" || - { test prog != "$linkmode" && test lib != "$linkmode"; }; then - test -n "$dlopen" && func_append dlfiles " $dlopen" - test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" - fi - - if test conv = "$pass"; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for '$lib'" - fi - # It is a libtool convenience library, so add in its objects. - func_append convenience " $ladir/$objdir/$old_library" - func_append old_convenience " $ladir/$objdir/$old_library" - elif test prog != "$linkmode" && test lib != "$linkmode"; then - func_fatal_error "'$lib' is not a convenience library" - fi - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - if test -n "$old_library" && - { test yes = "$prefer_static_libs" || - test built,no = "$prefer_static_libs,$installed"; }; then - linklib=$old_library - else - for l in $old_library $library_names; do - linklib=$l - done - fi - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for '$lib'" - fi - - # This library was specified with -dlopen. - if test dlopen = "$pass"; then - test -z "$libdir" \ - && func_fatal_error "cannot -dlopen a convenience library: '$lib'" - if test -z "$dlname" || - test yes != "$dlopen_support" || - test no = "$build_libtool_libs" - then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - func_append dlprefiles " $lib $dependency_libs" - else - func_append newdlfiles " $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of '$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir=$ladir - fi - ;; - esac - func_basename "$lib" - laname=$func_basename_result - - # Find the relevant object directory and library name. - if test yes = "$installed"; then - if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library '$lib' was moved." - dir=$ladir - absdir=$abs_ladir - libdir=$abs_ladir - else - dir=$lt_sysroot$libdir - absdir=$lt_sysroot$libdir - fi - test yes = "$hardcode_automatic" && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir=$ladir - absdir=$abs_ladir - # Remove this search path later - func_append notinst_path " $abs_ladir" - else - dir=$ladir/$objdir - absdir=$abs_ladir/$objdir - # Remove this search path later - func_append notinst_path " $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test dlpreopen = "$pass"; then - if test -z "$libdir" && test prog = "$linkmode"; then - func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" - fi - case $host in - # special handling for platforms with PE-DLLs. - *cygwin* | *mingw* | *cegcc* ) - # Linker will automatically link against shared library if both - # static and shared are present. Therefore, ensure we extract - # symbols from the import library if a shared library is present - # (otherwise, the dlopen module name will be incorrect). We do - # this by putting the import library name into $newdlprefiles. - # We recover the dlopen module name by 'saving' the la file - # name in a special purpose variable, and (later) extracting the - # dlname from the la file. - if test -n "$dlname"; then - func_tr_sh "$dir/$linklib" - eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" - func_append newdlprefiles " $dir/$linklib" - else - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - fi - ;; - * ) - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - func_append newdlprefiles " $dir/$dlname" - else - func_append newdlprefiles " $dir/$linklib" - fi - ;; - esac - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test lib = "$linkmode"; then - deplibs="$dir/$old_library $deplibs" - elif test prog,link = "$linkmode,$pass"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test prog = "$linkmode" && test link != "$pass"; then - func_append newlib_search_path " $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=false - if test no != "$link_all_deplibs" || test -z "$library_names" || - test no = "$build_libtool_libs"; then - linkalldeplibs=: - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - esac - # Need to link against all dependency_libs? - if $linkalldeplibs; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test prog,link = "$linkmode,$pass"; then - if test -n "$library_names" && - { { test no = "$prefer_static_libs" || - test built,yes = "$prefer_static_libs,$installed"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then - # Make sure the rpath contains only unique directories. - case $temp_rpath: in - *"$absdir:"*) ;; - *) func_append temp_rpath "$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if $alldeplibs && - { test pass_all = "$deplibs_check_method" || - { test yes = "$build_libtool_libs" && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test built = "$use_static_libs" && test yes = "$installed"; then - use_static_libs=no - fi - if test -n "$library_names" && - { test no = "$use_static_libs" || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc* | *os2*) - # No point in relinking DLLs because paths are not encoded - func_append notinst_deplibs " $lib" - need_relink=no - ;; - *) - if test no = "$installed"; then - func_append notinst_deplibs " $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule= - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule=$dlpremoduletest - break - fi - done - if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then - echo - if test prog = "$linkmode"; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test lib = "$linkmode" && - test yes = "$hardcode_into_libs"; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname=$1 - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname=$dlname - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc* | *os2*) - func_arith $current - $age - major=$func_arith_result - versuffix=-$major - ;; - esac - eval soname=\"$soname_spec\" - else - soname=$realname - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot=$soname - func_basename "$soroot" - soname=$func_basename_result - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from '$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for '$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test prog = "$linkmode" || test relink != "$opt_mode"; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test no = "$hardcode_direct"; then - add=$dir/$linklib - case $host in - *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; - *-*-sysv4*uw2*) add_dir=-L$dir ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir=-L$dir ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we cannot - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library"; then - echo - echo "*** And there doesn't seem to be a static archive available" - echo "*** The link will probably fail, sorry" - else - add=$dir/$old_library - fi - elif test -n "$old_library"; then - add=$dir/$old_library - fi - fi - esac - elif test no = "$hardcode_minus_L"; then - case $host in - *-*-sunos*) add_shlibpath=$dir ;; - esac - add_dir=-L$dir - add=-l$name - elif test no = "$hardcode_shlibpath_var"; then - add_shlibpath=$dir - add=-l$name - else - lib_linked=no - fi - ;; - relink) - if test yes = "$hardcode_direct" && - test no = "$hardcode_direct_absolute"; then - add=$dir/$linklib - elif test yes = "$hardcode_minus_L"; then - add_dir=-L$absdir - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add=-l$name - elif test yes = "$hardcode_shlibpath_var"; then - add_shlibpath=$dir - add=-l$name - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test yes != "$lib_linked"; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) func_append compile_shlibpath "$add_shlibpath:" ;; - esac - fi - if test prog = "$linkmode"; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test yes != "$hardcode_direct" && - test yes != "$hardcode_minus_L" && - test yes = "$hardcode_shlibpath_var"; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - fi - fi - fi - - if test prog = "$linkmode" || test relink = "$opt_mode"; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test yes = "$hardcode_direct" && - test no = "$hardcode_direct_absolute"; then - add=$libdir/$linklib - elif test yes = "$hardcode_minus_L"; then - add_dir=-L$libdir - add=-l$name - elif test yes = "$hardcode_shlibpath_var"; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - add=-l$name - elif test yes = "$hardcode_automatic"; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib"; then - add=$inst_prefix_dir$libdir/$linklib - else - add=$libdir/$linklib - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir=-L$libdir - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add=-l$name - fi - - if test prog = "$linkmode"; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test prog = "$linkmode"; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test unsupported != "$hardcode_direct"; then - test -n "$old_library" && linklib=$old_library - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test yes = "$build_libtool_libs"; then - # Not a shared library - if test pass_all != "$deplibs_check_method"; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo - $ECHO "*** Warning: This system cannot link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test yes = "$module"; then - echo "*** But as you try to build a module library, libtool will still create " - echo "*** a static module, that should work as long as the dlopening application" - echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using 'nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** 'nm' from GNU binutils and a full rebuild may help." - fi - if test no = "$build_old_libs"; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test lib = "$linkmode"; then - if test -n "$dependency_libs" && - { test yes != "$hardcode_into_libs" || - test yes = "$build_old_libs" || - test yes = "$link_static"; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) func_append xrpath " $temp_xrpath";; - esac;; - *) func_append temp_deplibs " $libdir";; - esac - done - dependency_libs=$temp_deplibs - fi - - func_append newlib_search_path " $absdir" - # Link against this library - test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result";; - *) func_resolve_sysroot "$deplib" ;; - esac - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $func_resolve_sysroot_result "*) - func_append specialdeplibs " $func_resolve_sysroot_result" ;; - esac - fi - func_append tmp_libs " $func_resolve_sysroot_result" - done - - if test no != "$link_all_deplibs"; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path=$deplib ;; - *.la) - func_resolve_sysroot "$deplib" - deplib=$func_resolve_sysroot_result - func_dirname "$deplib" "" "." - dir=$func_dirname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of '$dir'" - absdir=$dir - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names"; then - for tmp in $deplibrary_names; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl"; then - depdepl=$absdir/$objdir/$depdepl - darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" - func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" - path= - fi - fi - ;; - *) - path=-L$absdir/$objdir - ;; - esac - else - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "'$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "'$deplib' seems to be moved" - - path=-L$absdir - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test link = "$pass"; then - if test prog = "$linkmode"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs=$newdependency_libs - if test dlpreopen = "$pass"; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test dlopen != "$pass"; then - test conv = "$pass" || { - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) func_append lib_search_path " $dir" ;; - esac - done - newlib_search_path= - } - - if test prog,link = "$linkmode,$pass"; then - vars="compile_deplibs finalize_deplibs" - else - vars=deplibs - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) func_append tmp_libs " $deplib" ;; - esac - ;; - *) func_append tmp_libs " $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - - # Add Sun CC postdeps if required: - test CXX = "$tagname" && { - case $host_os in - linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C++ 5.9 - func_suncc_cstd_abi - - if test no != "$suncc_use_cstd_abi"; then - func_append postdeps ' -library=Cstd -library=Crun' - fi - ;; - esac - ;; - - solaris*) - func_cc_basename "$CC" - case $func_cc_basename_result in - CC* | sunCC*) - func_suncc_cstd_abi - - if test no != "$suncc_use_cstd_abi"; then - func_append postdeps ' -library=Cstd -library=Crun' - fi - ;; - esac - ;; - esac - } - - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i= - ;; - esac - if test -n "$i"; then - func_append tmp_libs " $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test prog = "$linkmode"; then - dlfiles=$newdlfiles - fi - if test prog = "$linkmode" || test lib = "$linkmode"; then - dlprefiles=$newdlprefiles - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - func_warning "'-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "'-l' and '-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "'-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "'-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "'-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "'-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "'-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs=$output - func_append objs "$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form 'libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test no = "$module" \ - && func_fatal_help "libtool library '$output' must begin with 'lib'" - - if test no != "$need_lib_prefix"; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test pass_all != "$deplibs_check_method"; then - func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" - else - echo - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - func_append libobjs " $objs" - fi - fi - - test no = "$dlself" \ - || func_warning "'-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test 1 -lt "$#" \ - && func_warning "ignoring multiple '-rpath's for a libtool library" - - install_libdir=$1 - - oldlibs= - if test -z "$rpath"; then - if test yes = "$build_libtool_libs"; then - # Building a libtool convenience library. - # Some compilers have problems with a '.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "'-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "'-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs=$IFS; IFS=: - set dummy $vinfo 0 0 0 - shift - IFS=$save_ifs - - test -n "$7" && \ - func_fatal_help "too many parameters to '-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major=$1 - number_minor=$2 - number_revision=$3 - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # that has an extra 1 added just for fun - # - case $version_type in - # correct linux to gnu/linux during the next big refactor - darwin|freebsd-elf|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age=$number_minor - revision=$number_revision - ;; - freebsd-aout|qnx|sunos) - current=$number_major - revision=$number_minor - age=0 - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age=$number_minor - revision=$number_minor - lt_irix_increment=no - ;; - esac - ;; - no) - current=$1 - revision=$2 - age=$3 - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT '$current' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION '$revision' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE '$age' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE '$age' is greater than the current interface number '$current'" - func_fatal_error "'$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - # On Darwin other compilers - case $CC in - nagfor*) - verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" - ;; - *) - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - esac - ;; - - freebsd-aout) - major=.$current - versuffix=.$current.$revision - ;; - - freebsd-elf) - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - ;; - - irix | nonstopux) - if test no = "$lt_irix_increment"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring=$verstring_prefix$major.$revision - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test 0 -ne "$loop"; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring=$verstring_prefix$major.$iface:$verstring - done - - # Before this point, $major must not contain '.'. - major=.$major - versuffix=$major.$revision - ;; - - linux) # correct to gnu/linux during the next big refactor - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=.$current.$age.$revision - verstring=$current.$age.$revision - - # Add in all the interfaces that we are compatible with. - loop=$age - while test 0 -ne "$loop"; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring=$verstring:$iface.0 - done - - # Make executables depend on our current version. - func_append verstring ":$current.0" - ;; - - qnx) - major=.$current - versuffix=.$current - ;; - - sco) - major=.$current - versuffix=.$current - ;; - - sunos) - major=.$current - versuffix=.$current.$revision - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 file systems. - func_arith $current - $age - major=$func_arith_result - versuffix=-$major - ;; - - *) - func_fatal_configuration "unknown library version type '$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring=0.0 - ;; - esac - if test no = "$need_version"; then - versuffix= - else - versuffix=.0.0 - fi - fi - - # Remove version info from name if versioning should be avoided - if test yes,no = "$avoid_version,$need_version"; then - major= - versuffix= - verstring= - fi - - # Check to see if the archive will have undefined symbols. - if test yes = "$allow_undefined"; then - if test unsupported = "$allow_undefined_flag"; then - if test yes = "$build_old_libs"; then - func_warning "undefined symbols not allowed in $host shared libraries; building static only" - build_libtool_libs=no - else - func_fatal_error "can't build $host shared library unless -no-undefined is specified" - fi - fi - else - # Don't allow undefined symbols. - allow_undefined_flag=$no_undefined_flag - fi - - fi - - func_generate_dlsyms "$libname" "$libname" : - func_append libobjs " $symfileobj" - test " " = "$libobjs" && libobjs= - - if test relink != "$opt_mode"; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) - if test -n "$precious_files_regex"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - func_append removelist " $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then - func_append oldlibs " $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` - # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` - # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - func_replace_sysroot "$libdir" - func_append temp_xrpath " -R$func_replace_sysroot_result" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles=$dlfiles - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) func_append dlfiles " $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles=$dlprefiles - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) func_append dlprefiles " $lib" ;; - esac - done - - if test yes = "$build_libtool_libs"; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - func_append deplibs " System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test yes = "$build_libtool_need_lc"; then - func_append deplibs " -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release= - versuffix= - major= - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c <<EOF - int main() { return 0; } -EOF - $opt_dry_run || $RM conftest - if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then - ldd_output=`ldd conftest` - for i in $deplibs; do - case $i in - -l*) - func_stripname -l '' "$i" - name=$func_stripname_result - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $i "*) - func_append newdeplibs " $i" - i= - ;; - esac - fi - if test -n "$i"; then - libname=`eval "\\$ECHO \"$libname_spec\""` - deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` - set dummy $deplib_matches; shift - deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then - func_append newdeplibs " $i" - else - droppeddeps=yes - echo - $ECHO "*** Warning: dynamic linker does not accept needed library $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which I believe you do not have" - echo "*** because a test_compile did reveal that the linker did not use it for" - echo "*** its dynamic dependency list that programs get resolved with at runtime." - fi - fi - ;; - *) - func_append newdeplibs " $i" - ;; - esac - done - else - # Error occurred in the first compile. Let's try to salvage - # the situation: Compile a separate program for each library. - for i in $deplibs; do - case $i in - -l*) - func_stripname -l '' "$i" - name=$func_stripname_result - $opt_dry_run || $RM conftest - if $LTCC $LTCFLAGS -o conftest conftest.c $i; then - ldd_output=`ldd conftest` - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $i "*) - func_append newdeplibs " $i" - i= - ;; - esac - fi - if test -n "$i"; then - libname=`eval "\\$ECHO \"$libname_spec\""` - deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` - set dummy $deplib_matches; shift - deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then - func_append newdeplibs " $i" - else - droppeddeps=yes - echo - $ECHO "*** Warning: dynamic linker does not accept needed library $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because a test_compile did reveal that the linker did not use this one" - echo "*** as a dynamic dependency that programs can get resolved with at runtime." - fi - fi - else - droppeddeps=yes - echo - $ECHO "*** Warning! Library $i is needed by this library but I was not able to" - echo "*** make it link in! You will probably need to install it or some" - echo "*** library that it depends on before this library will be fully" - echo "*** functional. Installing it before continuing would be even better." - fi - ;; - *) - func_append newdeplibs " $i" - ;; - esac - done - fi - ;; - file_magic*) - set dummy $deplibs_check_method; shift - file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $a_deplib "*) - func_append newdeplibs " $a_deplib" - a_deplib= - ;; - esac - fi - if test -n "$a_deplib"; then - libname=`eval "\\$ECHO \"$libname_spec\""` - if test -n "$file_magic_glob"; then - libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` - else - libnameglob=$libname - fi - test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - if test yes = "$want_nocaseglob"; then - shopt -s nocaseglob - potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` - $nocaseglob - else - potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` - fi - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib=$potent_lib - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | $SED 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; - *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib= - break 2 - fi - done - done - fi - if test -n "$a_deplib"; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib"; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $a_deplib "*) - func_append newdeplibs " $a_deplib" - a_deplib= - ;; - esac - fi - if test -n "$a_deplib"; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib=$potent_lib # see symlink-check above in file_magic test - if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib= - break 2 - fi - done - done - fi - if test -n "$a_deplib"; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib"; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs= - tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - for i in $predeps $postdeps; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` - done - fi - case $tmp_deplibs in - *[!\ \ ]*) - echo - if test none = "$deplibs_check_method"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." - else - echo "*** Warning: inter-library dependencies are not known to be supported." - fi - echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - ;; - esac - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - if test yes = "$droppeddeps"; then - if test yes = "$module"; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using 'nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** 'nm' from GNU binutils and a full rebuild may help." - fi - if test no = "$build_old_libs"; then - oldlibs=$output_objdir/$libname.$libext - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - echo "*** The inter-library dependencies that have been dropped here will be" - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - - if test no = "$allow_undefined"; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" - echo "*** it was explicitly requested with -no-undefined," - echo "*** libtool will only create a static version of it." - if test no = "$build_old_libs"; then - oldlibs=$output_objdir/$libname.$libext - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - deplibs=$new_libs - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test yes = "$build_libtool_libs"; then - # Remove $wl instances when linking with ld. - # FIXME: should test the right _cmds variable. - case $archive_cmds in - *\$LD\ *) wl= ;; - esac - if test yes = "$hardcode_into_libs"; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath=$finalize_rpath - test relink = "$opt_mode" || rpath=$compile_rpath$rpath - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - func_replace_sysroot "$libdir" - libdir=$func_replace_sysroot_result - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append dep_rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath=$finalize_shlibpath - test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname=$1 - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname=$realname - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib=$output_objdir/$realname - linknames= - for link - do - func_append linknames " $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols=$output_objdir/$libname.uexp - func_append delfiles " $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - func_dll_def_p "$export_symbols" || { - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols=$export_symbols - export_symbols= - always_export_symbols=yes - } - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for '$libname.la'" - export_symbols=$output_objdir/$libname.exp - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs=$IFS; IFS='~' - for cmd1 in $cmds; do - IFS=$save_ifs - # Take the normal branch if the nm_file_list_spec branch - # doesn't work or if tool conversion is not needed. - case $nm_file_list_spec~$to_tool_file_cmd in - *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) - try_normal_branch=yes - eval cmd=\"$cmd1\" - func_len " $cmd" - len=$func_len_result - ;; - *) - try_normal_branch=no - ;; - esac - if test yes = "$try_normal_branch" \ - && { test "$len" -lt "$max_cmd_len" \ - || test "$max_cmd_len" -le -1; } - then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - elif test -n "$nm_file_list_spec"; then - func_basename "$output" - output_la=$func_basename_result - save_libobjs=$libobjs - save_output=$output - output=$output_objdir/$output_la.nm - func_to_tool_file "$output" - libobjs=$nm_file_list_spec$func_to_tool_file_result - func_append delfiles " $output" - func_verbose "creating $NM input file list: $output" - for obj in $save_libobjs; do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > "$output" - eval cmd=\"$cmd1\" - func_show_eval "$cmd" 'exit $?' - output=$save_output - libobjs=$save_libobjs - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS=$save_ifs - if test -n "$export_symbols_regex" && test : != "$skipped_export"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols=$export_symbols - test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test : != "$skipped_export" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for '$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands, which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - func_append tmp_deplibs " $test_deplib" - ;; - esac - done - deplibs=$tmp_deplibs - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test yes = "$compiler_needs_object" && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - func_append linker_flags " $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test relink = "$opt_mode"; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test yes = "$module" && test -n "$module_cmds"; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test : != "$skipped_export" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - func_basename "$output" - output_la=$func_basename_result - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then - output=$output_objdir/$output_la.lnkscript - func_verbose "creating GNU ld script: $output" - echo 'INPUT (' > $output - for obj in $save_libobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - echo ')' >> $output - func_append delfiles " $output" - func_to_tool_file "$output" - output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then - output=$output_objdir/$output_la.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test yes = "$compiler_needs_object"; then - firstobj="$1 " - shift - fi - for obj - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - func_append delfiles " $output" - func_to_tool_file "$output" - output=$firstobj\"$file_list_spec$func_to_tool_file_result\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-$k.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test -z "$objlist" || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test 1 -eq "$k"; then - # The first file doesn't have a previous command to add. - reload_objs=$objlist - eval concat_cmds=\"$reload_cmds\" - else - # All subsequent reloadable object files will link in - # the last one created. - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-$k.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-$k.$objext - objlist=" $obj" - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds$reload_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - func_append delfiles " $output" - - else - output= - fi - - ${skipped_export-false} && { - func_verbose "generating symbol list for '$libname.la'" - export_symbols=$output_objdir/$libname.exp - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - } - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs=$IFS; IFS='~' - for cmd in $concat_cmds; do - IFS=$save_ifs - $opt_quiet || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS=$save_ifs - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - ${skipped_export-false} && { - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols=$export_symbols - test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for '$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands, which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - } - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test yes = "$module" && test -n "$module_cmds"; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs=$IFS; IFS='~' - for cmd in $cmds; do - IFS=$sp$nl - eval cmd=\"$cmd\" - IFS=$save_ifs - $opt_quiet || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS=$save_ifs - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test yes = "$module" || test yes = "$export_dynamic"; then - # On all known operating systems, these are identical. - dlname=$soname - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - func_warning "'-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "'-l' and '-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "'-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "'-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "'-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "'-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object '$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj=$output - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # if reload_cmds runs $LD directly, get rid of -Wl from - # whole_archive_flag_spec and hope we can get by with turning comma - # into space. - case $reload_cmds in - *\$LD[\ \$]*) wl= ;; - esac - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` - reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags - else - gentop=$output_objdir/${obj}x - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # If we're not building shared, we need to use non_pic_objs - test yes = "$build_libtool_libs" || libobjs=$non_pic_objects - - # Create the old-style object. - reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs - - output=$obj - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - test yes = "$build_libtool_libs" || { - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - } - - if test -n "$pic_flag" || test default != "$pic_mode"; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output=$libobj - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "'-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "'-release' is ignored for programs" - - $preload \ - && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ - && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test CXX = "$tagname"; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - func_append compile_command " $wl-bind_at_load" - func_append finalize_command " $wl-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - compile_deplibs=$new_libs - - - func_append compile_command " $compile_deplibs" - func_append finalize_command " $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) func_append dllsearchpath ":$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath=$rpath - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) func_append finalize_perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath=$rpath - - if test -n "$libobjs" && test yes = "$build_old_libs"; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" false - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=: - case $host in - *cegcc* | *mingw32ce*) - # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=false - ;; - *cygwin* | *mingw* ) - test yes = "$build_libtool_libs" || wrappers_required=false - ;; - *) - if test no = "$need_relink" || test yes != "$build_libtool_libs"; then - wrappers_required=false - fi - ;; - esac - $wrappers_required || { - # Replace the output file specification. - compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command=$compile_command$compile_rpath - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.$objext"; then - func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' - fi - - exit $exit_status - } - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - func_append rpath "$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test yes = "$no_install"; then - # We don't need to create a wrapper script. - link_command=$compile_var$compile_command$compile_rpath - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - exit $EXIT_SUCCESS - fi - - case $hardcode_action,$fast_install in - relink,*) - # Fast installation is not supported - link_command=$compile_var$compile_command$compile_rpath - relink_command=$finalize_var$finalize_command$finalize_rpath - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "'$output' will be relinked during installation" - ;; - *,yes) - link_command=$finalize_var$compile_command$finalize_rpath - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - ;; - *,no) - link_command=$compile_var$compile_command$compile_rpath - relink_command=$finalize_var$finalize_command$finalize_rpath - ;; - *,needless) - link_command=$finalize_var$compile_command$finalize_rpath - relink_command= - ;; - esac - - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output_objdir/$outputname" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource=$output_path/$objdir/lt-$output_name.c - cwrapper=$output_path/$output_name.exe - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host"; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - case $build_libtool_libs in - convenience) - oldobjs="$libobjs_save $symfileobj" - addlibs=$convenience - build_libtool_libs=no - ;; - module) - oldobjs=$libobjs_save - addlibs=$old_convenience - build_libtool_libs=no - ;; - *) - oldobjs="$old_deplibs $non_pic_objects" - $preload && test -f "$symfileobj" \ - && func_append oldobjs " $symfileobj" - addlibs=$old_convenience - ;; - esac - - if test -n "$addlibs"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $addlibs - func_append oldobjs " $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append oldobjs " $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - echo "copying selected object files to avoid basename conflicts..." - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase=$func_basename_result - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - func_append oldobjs " $gentop/$newobj" - ;; - *) func_append oldobjs " $obj" ;; - esac - done - fi - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - elif test -n "$archiver_list_spec"; then - func_verbose "using command file archive linking..." - for obj in $oldobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > $output_objdir/$libname.libcmd - func_to_tool_file "$output_objdir/$libname.libcmd" - oldobjs=" $archiver_list_spec$func_to_tool_file_result" - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj"; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test -z "$oldobjs"; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test yes = "$build_old_libs" && old_library=$libname.$libext - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test yes = "$hardcode_automatic"; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test yes = "$installed"; then - if test -z "$install_libdir"; then - break - fi - output=$output_objdir/${outputname}i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name=$func_basename_result - func_resolve_sysroot "$deplib" - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` - test -z "$libdir" && \ - func_fatal_error "'$deplib' is not a valid libtool archive" - func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" - ;; - -L*) - func_stripname -L '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -L$func_replace_sysroot_result" - ;; - -R*) - func_stripname -R '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -R$func_replace_sysroot_result" - ;; - *) func_append newdependency_libs " $deplib" ;; - esac - done - dependency_libs=$newdependency_libs - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name=$func_basename_result - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "'$lib' is not a valid libtool archive" - func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" - ;; - *) func_append newdlfiles " $lib" ;; - esac - done - dlfiles=$newdlfiles - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name=$func_basename_result - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "'$lib' is not a valid libtool archive" - func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" - ;; - esac - done - dlprefiles=$newdlprefiles - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlfiles " $abs" - done - dlfiles=$newdlfiles - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlprefiles " $abs" - done - dlprefiles=$newdlprefiles - fi - $RM $output - # place dlname in correct position for cygwin - # In fact, it would be nice if we could use this code for all target - # systems that can't hard-code library paths into their executables - # and that have no shared library path variable independent of PATH, - # but it turns out we can't easily determine that from inspecting - # libtool variables, so we have to hard-code the OSs to which it - # applies here; at the moment, that means platforms that use the PE - # object format with DLL files. See the long comment at the top of - # tests/bindir.at for full details. - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) - # If a -bindir argument was supplied, place the dll there. - if test -n "$bindir"; then - func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result/$dlname - else - # Otherwise fall back on heuristic. - tdlname=../bin/$dlname - fi - ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that cannot go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test no,yes = "$installed,$need_relink"; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -if test link = "$opt_mode" || test relink = "$opt_mode"; then - func_mode_link ${1+"$@"} -fi - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $debug_cmd - - RM=$nonopt - files= - rmforce=false - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic=$magic - - for arg - do - case $arg in - -f) func_append RM " $arg"; rmforce=: ;; - -*) func_append RM " $arg" ;; - *) func_append files " $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - for file in $files; do - func_dirname "$file" "" "." - dir=$func_dirname_result - if test . = "$dir"; then - odir=$objdir - else - odir=$dir/$objdir - fi - func_basename "$file" - name=$func_basename_result - test uninstall = "$opt_mode" && odir=$dir - - # Remember odir for removal later, being careful to avoid duplicates - if test clean = "$opt_mode"; then - case " $rmdirs " in - *" $odir "*) ;; - *) func_append rmdirs " $odir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif $rmforce; then - continue - fi - - rmfiles=$file - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - func_append rmfiles " $odir/$n" - done - test -n "$old_library" && func_append rmfiles " $odir/$old_library" - - case $opt_mode in - clean) - case " $library_names " in - *" $dlname "*) ;; - *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; - esac - test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && test none != "$pic_object"; then - func_append rmfiles " $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && test none != "$non_pic_object"; then - func_append rmfiles " $dir/$non_pic_object" - fi - fi - ;; - - *) - if test clean = "$opt_mode"; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - func_append rmfiles " $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - func_append rmfiles " $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - func_append rmfiles " $odir/$name $odir/${name}S.$objext" - if test yes = "$fast_install" && test -n "$relink_command"; then - func_append rmfiles " $odir/lt-$name" - fi - if test "X$noexename" != "X$name"; then - func_append rmfiles " $odir/lt-$noexename.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - - # Try to remove the $objdir's in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then - func_mode_uninstall ${1+"$@"} -fi - -test -z "$opt_mode" && { - help=$generic_help - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode '$opt_mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# where we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: diff --git a/src/plugins/e-acsl/contrib/libgmp/memory.c b/src/plugins/e-acsl/contrib/libgmp/memory.c deleted file mode 100644 index 4475f37de37418d7e8b2ddbc39a04f042a912793..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/memory.c +++ /dev/null @@ -1,146 +0,0 @@ -/* Memory allocation routines. - -Copyright 1991, 1993, 1994, 2000-2002, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> -#include <stdlib.h> /* for malloc, realloc, free */ - -#include "gmp.h" -#include "gmp-impl.h" - - -void * (*__gmp_allocate_func) (size_t) = __gmp_default_allocate; -void * (*__gmp_reallocate_func) (void *, size_t, size_t) = __gmp_default_reallocate; -void (*__gmp_free_func) (void *, size_t) = __gmp_default_free; - - -/* Default allocation functions. In case of failure to allocate/reallocate - an error message is written to stderr and the program aborts. */ - -void * -__gmp_default_allocate (size_t size) -{ - void *ret; -#ifdef DEBUG - size_t req_size = size; - size += 2 * GMP_LIMB_BYTES; -#endif - ret = malloc (size); - if (ret == 0) - { - fprintf (stderr, "GNU MP: Cannot allocate memory (size=%lu)\n", (long) size); - abort (); - } - -#ifdef DEBUG - { - mp_ptr p = ret; - p++; - p[-1] = (0xdeadbeef << 31) + 0xdeafdeed; - if (req_size % GMP_LIMB_BYTES == 0) - p[req_size / GMP_LIMB_BYTES] = ~((0xdeadbeef << 31) + 0xdeafdeed); - ret = p; - } -#endif - return ret; -} - -void * -__gmp_default_reallocate (void *oldptr, size_t old_size, size_t new_size) -{ - void *ret; - -#ifdef DEBUG - size_t req_size = new_size; - - if (old_size != 0) - { - mp_ptr p = oldptr; - if (p[-1] != (0xdeadbeef << 31) + 0xdeafdeed) - { - fprintf (stderr, "gmp: (realloc) data clobbered before allocation block\n"); - abort (); - } - if (old_size % GMP_LIMB_BYTES == 0) - if (p[old_size / GMP_LIMB_BYTES] != ~((0xdeadbeef << 31) + 0xdeafdeed)) - { - fprintf (stderr, "gmp: (realloc) data clobbered after allocation block\n"); - abort (); - } - oldptr = p - 1; - } - - new_size += 2 * GMP_LIMB_BYTES; -#endif - - ret = realloc (oldptr, new_size); - if (ret == 0) - { - fprintf (stderr, "GNU MP: Cannot reallocate memory (old_size=%lu new_size=%lu)\n", (long) old_size, (long) new_size); - abort (); - } - -#ifdef DEBUG - { - mp_ptr p = ret; - p++; - p[-1] = (0xdeadbeef << 31) + 0xdeafdeed; - if (req_size % GMP_LIMB_BYTES == 0) - p[req_size / GMP_LIMB_BYTES] = ~((0xdeadbeef << 31) + 0xdeafdeed); - ret = p; - } -#endif - return ret; -} - -void -__gmp_default_free (void *blk_ptr, size_t blk_size) -{ -#ifdef DEBUG - { - mp_ptr p = blk_ptr; - if (blk_size != 0) - { - if (p[-1] != (0xdeadbeef << 31) + 0xdeafdeed) - { - fprintf (stderr, "gmp: (free) data clobbered before allocation block\n"); - abort (); - } - if (blk_size % GMP_LIMB_BYTES == 0) - if (p[blk_size / GMP_LIMB_BYTES] != ~((0xdeadbeef << 31) + 0xdeafdeed)) - { - fprintf (stderr, "gmp: (free) data clobbered after allocation block\n"); - abort (); - } - } - blk_ptr = p - 1; - } -#endif - free (blk_ptr); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/missing b/src/plugins/e-acsl/contrib/libgmp/missing deleted file mode 100755 index f62bbae306c7e1bc28896aab8fe7bfb700a9a33e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/missing +++ /dev/null @@ -1,215 +0,0 @@ -#! /bin/sh -# Common wrapper for a few potentially missing GNU programs. - -scriptversion=2013-10-28.13; # UTC - -# Copyright (C) 1996-2014 Free Software Foundation, Inc. -# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try '$0 --help' for more information" - exit 1 -fi - -case $1 in - - --is-lightweight) - # Used by our autoconf macros to check whether the available missing - # script is modern enough. - exit 0 - ;; - - --run) - # Back-compat with the calling convention used by older automake. - shift - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due -to PROGRAM being missing or too old. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - -Supported PROGRAM values: - aclocal autoconf autoheader autom4te automake makeinfo - bison yacc flex lex help2man - -Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and -'g' are ignored when checking the name. - -Send bug reports to <bug-automake@gnu.org>." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: unknown '$1' option" - echo 1>&2 "Try '$0 --help' for more information" - exit 1 - ;; - -esac - -# Run the given program, remember its exit status. -"$@"; st=$? - -# If it succeeded, we are done. -test $st -eq 0 && exit 0 - -# Also exit now if we it failed (or wasn't found), and '--version' was -# passed; such an option is passed most likely to detect whether the -# program is present and works. -case $2 in --version|--help) exit $st;; esac - -# Exit code 63 means version mismatch. This often happens when the user -# tries to use an ancient version of a tool on a file that requires a -# minimum version. -if test $st -eq 63; then - msg="probably too old" -elif test $st -eq 127; then - # Program was missing. - msg="missing on your system" -else - # Program was found and executed, but failed. Give up. - exit $st -fi - -perl_URL=http://www.perl.org/ -flex_URL=http://flex.sourceforge.net/ -gnu_software_URL=http://www.gnu.org/software - -program_details () -{ - case $1 in - aclocal|automake) - echo "The '$1' program is part of the GNU Automake package:" - echo "<$gnu_software_URL/automake>" - echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" - echo "<$gnu_software_URL/autoconf>" - echo "<$gnu_software_URL/m4/>" - echo "<$perl_URL>" - ;; - autoconf|autom4te|autoheader) - echo "The '$1' program is part of the GNU Autoconf package:" - echo "<$gnu_software_URL/autoconf/>" - echo "It also requires GNU m4 and Perl in order to run:" - echo "<$gnu_software_URL/m4/>" - echo "<$perl_URL>" - ;; - esac -} - -give_advice () -{ - # Normalize program name to check for. - normalized_program=`echo "$1" | sed ' - s/^gnu-//; t - s/^gnu//; t - s/^g//; t'` - - printf '%s\n' "'$1' is $msg." - - configure_deps="'configure.ac' or m4 files included by 'configure.ac'" - case $normalized_program in - autoconf*) - echo "You should only need it if you modified 'configure.ac'," - echo "or m4 files included by it." - program_details 'autoconf' - ;; - autoheader*) - echo "You should only need it if you modified 'acconfig.h' or" - echo "$configure_deps." - program_details 'autoheader' - ;; - automake*) - echo "You should only need it if you modified 'Makefile.am' or" - echo "$configure_deps." - program_details 'automake' - ;; - aclocal*) - echo "You should only need it if you modified 'acinclude.m4' or" - echo "$configure_deps." - program_details 'aclocal' - ;; - autom4te*) - echo "You might have modified some maintainer files that require" - echo "the 'autom4te' program to be rebuilt." - program_details 'autom4te' - ;; - bison*|yacc*) - echo "You should only need it if you modified a '.y' file." - echo "You may want to install the GNU Bison package:" - echo "<$gnu_software_URL/bison/>" - ;; - lex*|flex*) - echo "You should only need it if you modified a '.l' file." - echo "You may want to install the Fast Lexical Analyzer package:" - echo "<$flex_URL>" - ;; - help2man*) - echo "You should only need it if you modified a dependency" \ - "of a man page." - echo "You may want to install the GNU Help2man package:" - echo "<$gnu_software_URL/help2man/>" - ;; - makeinfo*) - echo "You should only need it if you modified a '.texi' file, or" - echo "any other file indirectly affecting the aspect of the manual." - echo "You might want to install the Texinfo package:" - echo "<$gnu_software_URL/texinfo/>" - echo "The spurious makeinfo call might also be the consequence of" - echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" - echo "want to install GNU make:" - echo "<$gnu_software_URL/make/>" - ;; - *) - echo "You might have modified some files without having the proper" - echo "tools for further handling them. Check the 'README' file, it" - echo "often tells you about the needed prerequisites for installing" - echo "this package. You may also peek at any GNU archive site, in" - echo "case some other package contains this missing '$1' program." - ;; - esac -} - -give_advice "$1" | sed -e '1s/^/WARNING: /' \ - -e '2,$s/^/ /' >&2 - -# Propagate the correct exit status (expected to be 127 for a program -# not found, 63 for a program that failed due to version mismatch). -exit $st - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/src/plugins/e-acsl/contrib/libgmp/mp_bpl.c b/src/plugins/e-acsl/contrib/libgmp/mp_bpl.c deleted file mode 100644 index 6328057965dd8e866eeb4a15532c15e407b0cd47..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mp_bpl.c +++ /dev/null @@ -1,35 +0,0 @@ -/* -Copyright 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -const int mp_bits_per_limb = GMP_LIMB_BITS; -const int __gmp_0 = 0; -int __gmp_junk; diff --git a/src/plugins/e-acsl/contrib/libgmp/mp_clz_tab.c b/src/plugins/e-acsl/contrib/libgmp/mp_clz_tab.c deleted file mode 100644 index 7c9227e8b32395b2fe3c6b043c3ce6421a38f4ea..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mp_clz_tab.c +++ /dev/null @@ -1,49 +0,0 @@ -/* __clz_tab -- support for longlong.h - - THE CONTENTS OF THIS FILE ARE FOR INTERNAL USE AND MAY CHANGE - INCOMPATIBLY OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 1991, 1993, 1994, 1996, 1997, 2000, 2001 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifdef COUNT_LEADING_ZEROS_NEED_CLZ_TAB -const -unsigned char __clz_tab[129] = -{ - 1,2,3,3,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 9 -}; -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mp_dv_tab.c b/src/plugins/e-acsl/contrib/libgmp/mp_dv_tab.c deleted file mode 100644 index c6d74eb3f2965e8261611abdf9b4b71a022c351f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mp_dv_tab.c +++ /dev/null @@ -1,78 +0,0 @@ -/* __gmp_digit_value_tab -- support for mp*_set_str - - THE CONTENTS OF THIS FILE ARE FOR INTERNAL USE AND MAY CHANGE - INCOMPATIBLY OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2003, 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* Table to be indexed by character, to get its numerical value. Assumes ASCII - character set. - - First part of table supports common usages, where 'A' and 'a' have the same - value; this supports bases 2..36 - - At offset 208, values for bases 37..62 start. Here, 'A' has the value 10 - (in decimal) and 'a' has the value 36. */ - -#define X 0xff -const unsigned char __gmp_digit_value_tab[] = -{ - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, X, X, X, X, X, X, - X,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, - 25,26,27,28,29,30,31,32,33,34,35,X, X, X, X, X, - X,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, - 25,26,27,28,29,30,31,32,33,34,35,X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, X, X, X, X, X, X, - X,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, - 25,26,27,28,29,30,31,32,33,34,35,X, X, X, X, X, - X,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50, - 51,52,53,54,55,56,57,58,59,60,61,X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, - X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X -}; diff --git a/src/plugins/e-acsl/contrib/libgmp/mp_get_fns.c b/src/plugins/e-acsl/contrib/libgmp/mp_get_fns.c deleted file mode 100644 index c77980fbeb6ffa26f94bc220f3fde2d9af554834..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mp_get_fns.c +++ /dev/null @@ -1,48 +0,0 @@ -/* mp_get_memory_functions -- Get the allocate, reallocate, and free functions. - -Copyright 2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" - -void -mp_get_memory_functions (void *(**alloc_func) (size_t), - void *(**realloc_func) (void *, size_t, size_t), - void (**free_func) (void *, size_t)) __GMP_NOTHROW -{ - if (alloc_func != NULL) - *alloc_func = __gmp_allocate_func; - - if (realloc_func != NULL) - *realloc_func = __gmp_reallocate_func; - - if (free_func != NULL) - *free_func = __gmp_free_func; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mp_minv_tab.c b/src/plugins/e-acsl/contrib/libgmp/mp_minv_tab.c deleted file mode 100644 index 522bd0184bfe6a638e9fc5eeb6feb340e3ffbcc3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mp_minv_tab.c +++ /dev/null @@ -1,59 +0,0 @@ -/* A table of data supporting binvert_limb(). - - THE CONTENTS OF THIS FILE ARE FOR INTERNAL USE AND MAY CHANGE - INCOMPATIBLY OR DISAPPEAR IN A FUTURE GNU MP RELEASE. */ - -/* -Copyright 2000 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* binvert_limb_table[i] is the multiplicative inverse of 2*i+1 mod 256, - ie. (binvert_limb_table[i] * (2*i+1)) % 256 == 1 */ - -const unsigned char binvert_limb_table[128] = { - 0x01, 0xAB, 0xCD, 0xB7, 0x39, 0xA3, 0xC5, 0xEF, - 0xF1, 0x1B, 0x3D, 0xA7, 0x29, 0x13, 0x35, 0xDF, - 0xE1, 0x8B, 0xAD, 0x97, 0x19, 0x83, 0xA5, 0xCF, - 0xD1, 0xFB, 0x1D, 0x87, 0x09, 0xF3, 0x15, 0xBF, - 0xC1, 0x6B, 0x8D, 0x77, 0xF9, 0x63, 0x85, 0xAF, - 0xB1, 0xDB, 0xFD, 0x67, 0xE9, 0xD3, 0xF5, 0x9F, - 0xA1, 0x4B, 0x6D, 0x57, 0xD9, 0x43, 0x65, 0x8F, - 0x91, 0xBB, 0xDD, 0x47, 0xC9, 0xB3, 0xD5, 0x7F, - 0x81, 0x2B, 0x4D, 0x37, 0xB9, 0x23, 0x45, 0x6F, - 0x71, 0x9B, 0xBD, 0x27, 0xA9, 0x93, 0xB5, 0x5F, - 0x61, 0x0B, 0x2D, 0x17, 0x99, 0x03, 0x25, 0x4F, - 0x51, 0x7B, 0x9D, 0x07, 0x89, 0x73, 0x95, 0x3F, - 0x41, 0xEB, 0x0D, 0xF7, 0x79, 0xE3, 0x05, 0x2F, - 0x31, 0x5B, 0x7D, 0xE7, 0x69, 0x53, 0x75, 0x1F, - 0x21, 0xCB, 0xED, 0xD7, 0x59, 0xC3, 0xE5, 0x0F, - 0x11, 0x3B, 0x5D, 0xC7, 0x49, 0x33, 0x55, 0xFF -}; diff --git a/src/plugins/e-acsl/contrib/libgmp/mp_set_fns.c b/src/plugins/e-acsl/contrib/libgmp/mp_set_fns.c deleted file mode 100644 index 7be60066b9fdc6cd1f5b7a4bbe3482e0957822fb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mp_set_fns.c +++ /dev/null @@ -1,50 +0,0 @@ -/* mp_set_memory_functions -- Set the allocate, reallocate, and free functions - for use by the mp package. - -Copyright 1991, 1993, 1994, 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mp_set_memory_functions (void *(*alloc_func) (size_t), - void *(*realloc_func) (void *, size_t, size_t), - void (*free_func) (void *, size_t)) __GMP_NOTHROW -{ - if (alloc_func == 0) - alloc_func = __gmp_default_allocate; - if (realloc_func == 0) - realloc_func = __gmp_default_reallocate; - if (free_func == 0) - free_func = __gmp_default_free; - - __gmp_allocate_func = alloc_func; - __gmp_reallocate_func = realloc_func; - __gmp_free_func = free_func; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/Makefile.am b/src/plugins/e-acsl/contrib/libgmp/mpf/Makefile.am deleted file mode 100644 index ff7e48faf7ca59d641020ad8d0cab6c28d309b62..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/Makefile.am +++ /dev/null @@ -1,47 +0,0 @@ -## Process this file with automake to generate Makefile.in - -# Copyright 1996, 1998-2002 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - - -AM_CPPFLAGS = -D__GMP_WITHIN_GMP -I$(top_srcdir) - -noinst_LTLIBRARIES = libmpf.la -libmpf_la_SOURCES = \ - init.c init2.c inits.c set.c set_ui.c set_si.c set_str.c set_d.c set_z.c \ - set_q.c iset.c iset_ui.c iset_si.c iset_str.c iset_d.c clear.c clears.c \ - get_str.c dump.c size.c eq.c reldiff.c sqrt.c random2.c inp_str.c out_str.c \ - add.c add_ui.c sub.c sub_ui.c ui_sub.c mul.c mul_ui.c div.c div_ui.c \ - cmp.c cmp_d.c cmp_z.c cmp_si.c cmp_ui.c mul_2exp.c div_2exp.c abs.c neg.c get_d.c \ - get_d_2exp.c set_dfl_prec.c set_prc.c set_prc_raw.c get_dfl_prec.c get_prc.c \ - ui_div.c sqrt_ui.c \ - pow_ui.c urandomb.c swap.c get_si.c get_ui.c int_p.c \ - ceilfloor.c trunc.c \ - fits_sint.c fits_slong.c fits_sshort.c \ - fits_uint.c fits_ulong.c fits_ushort.c \ - fits_s.h fits_u.h diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/Makefile.in b/src/plugins/e-acsl/contrib/libgmp/mpf/Makefile.in deleted file mode 100644 index 8acf3891c66b873000c5473b7c9e51237973e3af..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/Makefile.in +++ /dev/null @@ -1,662 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# Copyright 1996, 1998-2002 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = mpf -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libmpf_la_LIBADD = -am_libmpf_la_OBJECTS = init.lo init2.lo inits.lo set.lo set_ui.lo \ - set_si.lo set_str.lo set_d.lo set_z.lo set_q.lo iset.lo \ - iset_ui.lo iset_si.lo iset_str.lo iset_d.lo clear.lo clears.lo \ - get_str.lo dump.lo size.lo eq.lo reldiff.lo sqrt.lo random2.lo \ - inp_str.lo out_str.lo add.lo add_ui.lo sub.lo sub_ui.lo \ - ui_sub.lo mul.lo mul_ui.lo div.lo div_ui.lo cmp.lo cmp_d.lo \ - cmp_z.lo cmp_si.lo cmp_ui.lo mul_2exp.lo div_2exp.lo abs.lo \ - neg.lo get_d.lo get_d_2exp.lo set_dfl_prec.lo set_prc.lo \ - set_prc_raw.lo get_dfl_prec.lo get_prc.lo ui_div.lo sqrt_ui.lo \ - pow_ui.lo urandomb.lo swap.lo get_si.lo get_ui.lo int_p.lo \ - ceilfloor.lo trunc.lo fits_sint.lo fits_slong.lo \ - fits_sshort.lo fits_uint.lo fits_ulong.lo fits_ushort.lo -libmpf_la_OBJECTS = $(am_libmpf_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = -am__depfiles_maybe = -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libmpf_la_SOURCES) -DIST_SOURCES = $(libmpf_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ABI = @ABI@ -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AS = @AS@ -ASMFLAGS = @ASMFLAGS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CALLING_CONVENTIONS_OBJS = @CALLING_CONVENTIONS_OBJS@ -CC = @CC@ -CCAS = @CCAS@ -CC_FOR_BUILD = @CC_FOR_BUILD@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPP_FOR_BUILD = @CPP_FOR_BUILD@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFN_LONG_LONG_LIMB = @DEFN_LONG_LONG_LIMB@ -DEFS = @DEFS@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ -FGREP = @FGREP@ -GMP_LDFLAGS = @GMP_LDFLAGS@ -GMP_LIMB_BITS = @GMP_LIMB_BITS@ -GMP_NAIL_BITS = @GMP_NAIL_BITS@ -GREP = @GREP@ -HAVE_CLOCK_01 = @HAVE_CLOCK_01@ -HAVE_CPUTIME_01 = @HAVE_CPUTIME_01@ -HAVE_GETRUSAGE_01 = @HAVE_GETRUSAGE_01@ -HAVE_GETTIMEOFDAY_01 = @HAVE_GETTIMEOFDAY_01@ -HAVE_HOST_CPU_FAMILY_power = @HAVE_HOST_CPU_FAMILY_power@ -HAVE_HOST_CPU_FAMILY_powerpc = @HAVE_HOST_CPU_FAMILY_powerpc@ -HAVE_SIGACTION_01 = @HAVE_SIGACTION_01@ -HAVE_SIGALTSTACK_01 = @HAVE_SIGALTSTACK_01@ -HAVE_SIGSTACK_01 = @HAVE_SIGSTACK_01@ -HAVE_STACK_T_01 = @HAVE_STACK_T_01@ -HAVE_SYS_RESOURCE_H_01 = @HAVE_SYS_RESOURCE_H_01@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBCURSES = @LIBCURSES@ -LIBGMPXX_LDFLAGS = @LIBGMPXX_LDFLAGS@ -LIBGMP_DLL = @LIBGMP_DLL@ -LIBGMP_LDFLAGS = @LIBGMP_LDFLAGS@ -LIBM = @LIBM@ -LIBM_FOR_BUILD = @LIBM_FOR_BUILD@ -LIBOBJS = @LIBOBJS@ -LIBREADLINE = @LIBREADLINE@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -M4 = @M4@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SPEED_CYCLECOUNTER_OBJ = @SPEED_CYCLECOUNTER_OBJ@ -STRIP = @STRIP@ -TAL_OBJECT = @TAL_OBJECT@ -TUNE_LIBS = @TUNE_LIBS@ -TUNE_SQR_OBJ = @TUNE_SQR_OBJ@ -U_FOR_BUILD = @U_FOR_BUILD@ -VERSION = @VERSION@ -WITH_READLINE_01 = @WITH_READLINE_01@ -YACC = @YACC@ -YFLAGS = @YFLAGS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__leading_dot = @am__leading_dot@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -gmp_srclinks = @gmp_srclinks@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -mpn_objects = @mpn_objects@ -mpn_objs_in_libgmp = @mpn_objs_in_libgmp@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AM_CPPFLAGS = -D__GMP_WITHIN_GMP -I$(top_srcdir) -noinst_LTLIBRARIES = libmpf.la -libmpf_la_SOURCES = \ - init.c init2.c inits.c set.c set_ui.c set_si.c set_str.c set_d.c set_z.c \ - set_q.c iset.c iset_ui.c iset_si.c iset_str.c iset_d.c clear.c clears.c \ - get_str.c dump.c size.c eq.c reldiff.c sqrt.c random2.c inp_str.c out_str.c \ - add.c add_ui.c sub.c sub_ui.c ui_sub.c mul.c mul_ui.c div.c div_ui.c \ - cmp.c cmp_d.c cmp_z.c cmp_si.c cmp_ui.c mul_2exp.c div_2exp.c abs.c neg.c get_d.c \ - get_d_2exp.c set_dfl_prec.c set_prc.c set_prc_raw.c get_dfl_prec.c get_prc.c \ - ui_div.c sqrt_ui.c \ - pow_ui.c urandomb.c swap.c get_si.c get_ui.c int_p.c \ - ceilfloor.c trunc.c \ - fits_sint.c fits_slong.c fits_sshort.c \ - fits_uint.c fits_ulong.c fits_ushort.c \ - fits_s.h fits_u.h - -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --ignore-deps mpf/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu --ignore-deps mpf/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libmpf.la: $(libmpf_la_OBJECTS) $(libmpf_la_DEPENDENCIES) $(EXTRA_libmpf_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libmpf_la_OBJECTS) $(libmpf_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -.c.o: - $(AM_V_CC)$(COMPILE) -c -o $@ $< - -.c.obj: - $(AM_V_CC)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: - $(AM_V_CC)$(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ - ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/abs.c b/src/plugins/e-acsl/contrib/libgmp/mpf/abs.c deleted file mode 100644 index a2bde2a4f8570525fa8b913c3b131654a23897af..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/abs.c +++ /dev/null @@ -1,59 +0,0 @@ -/* mpf_abs -- Compute the absolute value of a float. - -Copyright 1993-1995, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_abs (mpf_ptr r, mpf_srcptr u) -{ - mp_size_t size; - - size = ABS (u->_mp_size); - if (r != u) - { - mp_size_t prec; - mp_ptr rp, up; - - prec = r->_mp_prec + 1; /* lie not to lose precision in assignment */ - rp = r->_mp_d; - up = u->_mp_d; - - if (size > prec) - { - up += size - prec; - size = prec; - } - - MPN_COPY (rp, up, size); - r->_mp_exp = u->_mp_exp; - } - r->_mp_size = size; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/add.c b/src/plugins/e-acsl/contrib/libgmp/mpf/add.c deleted file mode 100644 index d2a5c097c57805c015b73c8fa34d81514806f567..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/add.c +++ /dev/null @@ -1,184 +0,0 @@ -/* mpf_add -- Add two floats. - -Copyright 1993, 1994, 1996, 2000, 2001, 2005 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_add (mpf_ptr r, mpf_srcptr u, mpf_srcptr v) -{ - mp_srcptr up, vp; - mp_ptr rp, tp; - mp_size_t usize, vsize, rsize; - mp_size_t prec; - mp_exp_t uexp; - mp_size_t ediff; - mp_limb_t cy; - int negate; - TMP_DECL; - - usize = u->_mp_size; - vsize = v->_mp_size; - - /* Handle special cases that don't work in generic code below. */ - if (usize == 0) - { - set_r_v_maybe: - if (r != v) - mpf_set (r, v); - return; - } - if (vsize == 0) - { - v = u; - goto set_r_v_maybe; - } - - /* If signs of U and V are different, perform subtraction. */ - if ((usize ^ vsize) < 0) - { - __mpf_struct v_negated; - v_negated._mp_size = -vsize; - v_negated._mp_exp = v->_mp_exp; - v_negated._mp_d = v->_mp_d; - mpf_sub (r, u, &v_negated); - return; - } - - TMP_MARK; - - /* Signs are now known to be the same. */ - negate = usize < 0; - - /* Make U be the operand with the largest exponent. */ - if (u->_mp_exp < v->_mp_exp) - { - mpf_srcptr t; - t = u; u = v; v = t; - usize = u->_mp_size; - vsize = v->_mp_size; - } - - usize = ABS (usize); - vsize = ABS (vsize); - up = u->_mp_d; - vp = v->_mp_d; - rp = r->_mp_d; - prec = r->_mp_prec; - uexp = u->_mp_exp; - ediff = u->_mp_exp - v->_mp_exp; - - /* If U extends beyond PREC, ignore the part that does. */ - if (usize > prec) - { - up += usize - prec; - usize = prec; - } - - /* If V extends beyond PREC, ignore the part that does. - Note that this may make vsize negative. */ - if (vsize + ediff > prec) - { - vp += vsize + ediff - prec; - vsize = prec - ediff; - } - -#if 0 - /* Locate the least significant non-zero limb in (the needed parts - of) U and V, to simplify the code below. */ - while (up[0] == 0) - up++, usize--; - while (vp[0] == 0) - vp++, vsize--; -#endif - - /* Allocate temp space for the result. Allocate - just vsize + ediff later??? */ - tp = TMP_ALLOC_LIMBS (prec); - - if (ediff >= prec) - { - /* V completely cancelled. */ - if (rp != up) - MPN_COPY_INCR (rp, up, usize); - rsize = usize; - } - else - { - /* uuuu | uuuu | uuuu | uuuu | uuuu */ - /* vvvvvvv | vv | vvvvv | v | vv */ - - if (usize > ediff) - { - /* U and V partially overlaps. */ - if (vsize + ediff <= usize) - { - /* uuuu */ - /* v */ - mp_size_t size; - size = usize - ediff - vsize; - MPN_COPY (tp, up, size); - cy = mpn_add (tp + size, up + size, usize - size, vp, vsize); - rsize = usize; - } - else - { - /* uuuu */ - /* vvvvv */ - mp_size_t size; - size = vsize + ediff - usize; - MPN_COPY (tp, vp, size); - cy = mpn_add (tp + size, up, usize, vp + size, usize - ediff); - rsize = vsize + ediff; - } - } - else - { - /* uuuu */ - /* vv */ - mp_size_t size; - size = vsize + ediff - usize; - MPN_COPY (tp, vp, vsize); - MPN_ZERO (tp + vsize, ediff - usize); - MPN_COPY (tp + size, up, usize); - cy = 0; - rsize = size + usize; - } - - MPN_COPY (rp, tp, rsize); - rp[rsize] = cy; - rsize += cy; - uexp += cy; - } - - r->_mp_size = negate ? -rsize : rsize; - r->_mp_exp = uexp; - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/add_ui.c b/src/plugins/e-acsl/contrib/libgmp/mpf/add_ui.c deleted file mode 100644 index b1e57d04c1eb61f659a35de30d9643c1cca111ba..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/add_ui.c +++ /dev/null @@ -1,153 +0,0 @@ -/* mpf_add_ui -- Add a float and an unsigned integer. - -Copyright 1993, 1994, 1996, 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_add_ui (mpf_ptr sum, mpf_srcptr u, unsigned long int v) -{ - mp_srcptr up = u->_mp_d; - mp_ptr sump = sum->_mp_d; - mp_size_t usize, sumsize; - mp_size_t prec = sum->_mp_prec; - mp_exp_t uexp = u->_mp_exp; - - usize = u->_mp_size; - if (usize <= 0) - { - if (usize == 0) - { - mpf_set_ui (sum, v); - return; - } - else - { - __mpf_struct u_negated; - u_negated._mp_size = -usize; - u_negated._mp_exp = u->_mp_exp; - u_negated._mp_d = u->_mp_d; - mpf_sub_ui (sum, &u_negated, v); - sum->_mp_size = -(sum->_mp_size); - return; - } - } - - if (v == 0) - { - sum_is_u: - if (u != sum) - { - sumsize = MIN (usize, prec + 1); - MPN_COPY (sum->_mp_d, up + usize - sumsize, sumsize); - sum->_mp_size = sumsize; - sum->_mp_exp = u->_mp_exp; - } - return; - } - - if (uexp > 0) - { - /* U >= 1. */ - if (uexp > prec) - { - /* U >> V, V is not part of final result. */ - goto sum_is_u; - } - else - { - /* U's "limb point" is somewhere between the first limb - and the PREC:th limb. - Both U and V are part of the final result. */ - if (uexp > usize) - { - /* uuuuuu0000. */ - /* + v. */ - /* We begin with moving U to the top of SUM, to handle - samevar(U,SUM). */ - MPN_COPY_DECR (sump + uexp - usize, up, usize); - sump[0] = v; - MPN_ZERO (sump + 1, uexp - usize - 1); -#if 0 /* What is this??? */ - if (sum == u) - MPN_COPY (sum->_mp_d, sump, uexp); -#endif - sum->_mp_size = uexp; - sum->_mp_exp = uexp; - } - else - { - /* uuuuuu.uuuu */ - /* + v. */ - mp_limb_t cy_limb; - if (usize > prec) - { - /* Ignore excess limbs in U. */ - up += usize - prec; - usize -= usize - prec; /* Eq. usize = prec */ - } - if (sump != up) - MPN_COPY_INCR (sump, up, usize - uexp); - cy_limb = mpn_add_1 (sump + usize - uexp, up + usize - uexp, - uexp, (mp_limb_t) v); - sump[usize] = cy_limb; - sum->_mp_size = usize + cy_limb; - sum->_mp_exp = uexp + cy_limb; - } - } - } - else - { - /* U < 1, so V > U for sure. */ - /* v. */ - /* .0000uuuu */ - if ((-uexp) >= prec) - { - sump[0] = v; - sum->_mp_size = 1; - sum->_mp_exp = 1; - } - else - { - if (usize + (-uexp) + 1 > prec) - { - /* Ignore excess limbs in U. */ - up += usize + (-uexp) + 1 - prec; - usize -= usize + (-uexp) + 1 - prec; - } - if (sump != up) - MPN_COPY_INCR (sump, up, usize); - MPN_ZERO (sump + usize, -uexp); - sump[usize + (-uexp)] = v; - sum->_mp_size = usize + (-uexp) + 1; - sum->_mp_exp = 1; - } - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/ceilfloor.c b/src/plugins/e-acsl/contrib/libgmp/mpf/ceilfloor.c deleted file mode 100644 index 302e2b8ae5a845ab298ceed94661c48b3fe7f6e9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/ceilfloor.c +++ /dev/null @@ -1,126 +0,0 @@ -/* mpf_ceil, mpf_floor -- round an mpf to an integer. - -Copyright 2001, 2004, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* dir==1 for ceil, dir==-1 for floor - - Notice the use of prec+1 ensures mpf_ceil and mpf_floor are equivalent to - mpf_set if u is already an integer. */ - -static void __gmpf_ceil_or_floor (REGPARM_2_1 (mpf_ptr, mpf_srcptr, int)) REGPARM_ATTR (1); -#define mpf_ceil_or_floor(r,u,dir) __gmpf_ceil_or_floor (REGPARM_2_1 (r, u, dir)) - -REGPARM_ATTR (1) static void -mpf_ceil_or_floor (mpf_ptr r, mpf_srcptr u, int dir) -{ - mp_ptr rp, up, p; - mp_size_t size, asize, prec; - mp_exp_t exp; - - size = SIZ(u); - if (size == 0) - { - zero: - SIZ(r) = 0; - EXP(r) = 0; - return; - } - - rp = PTR(r); - exp = EXP(u); - if (exp <= 0) - { - /* u is only a fraction */ - if ((size ^ dir) < 0) - goto zero; - rp[0] = 1; - EXP(r) = 1; - SIZ(r) = dir; - return; - } - EXP(r) = exp; - - up = PTR(u); - asize = ABS (size); - up += asize; - - /* skip fraction part of u */ - asize = MIN (asize, exp); - - /* don't lose precision in the copy */ - prec = PREC (r) + 1; - - /* skip excess over target precision */ - asize = MIN (asize, prec); - - up -= asize; - - if ((size ^ dir) >= 0) - { - /* rounding direction matches sign, must increment if ignored part is - non-zero */ - for (p = PTR(u); p != up; p++) - { - if (*p != 0) - { - if (mpn_add_1 (rp, up, asize, CNST_LIMB(1))) - { - /* was all 0xFF..FFs, which have become zeros, giving just - a carry */ - rp[0] = 1; - asize = 1; - EXP(r)++; - } - SIZ(r) = (size >= 0 ? asize : -asize); - return; - } - } - } - - SIZ(r) = (size >= 0 ? asize : -asize); - if (rp != up) - MPN_COPY_INCR (rp, up, asize); -} - - -void -mpf_ceil (mpf_ptr r, mpf_srcptr u) -{ - mpf_ceil_or_floor (r, u, 1); -} - -void -mpf_floor (mpf_ptr r, mpf_srcptr u) -{ - mpf_ceil_or_floor (r, u, -1); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/clear.c b/src/plugins/e-acsl/contrib/libgmp/mpf/clear.c deleted file mode 100644 index 9ff2dd336fe121576908bfb2d37ff8b2eb0411d3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/clear.c +++ /dev/null @@ -1,39 +0,0 @@ -/* mpf_clear -- de-allocate the space occupied by the dynamic digit space of - an integer. - -Copyright 1993-1995, 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_clear (mpf_ptr x) -{ - __GMP_FREE_FUNC_LIMBS (PTR(x), PREC(x) + 1); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/clears.c b/src/plugins/e-acsl/contrib/libgmp/mpf/clears.c deleted file mode 100644 index 68a4cbebdc176a9adc7dae89c7688f605230e243..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/clears.c +++ /dev/null @@ -1,49 +0,0 @@ -/* mpf_clears() -- Clear multiple mpf_t variables. - -Copyright 2009, 2014, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdarg.h> -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_clears (mpf_ptr x, ...) -{ - va_list ap; - - va_start (ap, x); - - while (x != NULL) - { - __GMP_FREE_FUNC_LIMBS (PTR(x), PREC(x) + 1); - x = va_arg (ap, mpf_ptr); - } - - va_end (ap); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/cmp.c b/src/plugins/e-acsl/contrib/libgmp/mpf/cmp.c deleted file mode 100644 index 0c066721827171326003c2e0ff5d1933b23d4fda..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/cmp.c +++ /dev/null @@ -1,114 +0,0 @@ -/* mpf_cmp -- Compare two floats. - -Copyright 1993, 1994, 1996, 2001, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -mpf_cmp (mpf_srcptr u, mpf_srcptr v) __GMP_NOTHROW -{ - mp_srcptr up, vp; - mp_size_t usize, vsize; - mp_exp_t uexp, vexp; - int cmp; - int usign; - - usize = SIZ(u); - vsize = SIZ(v); - usign = usize >= 0 ? 1 : -1; - - /* 1. Are the signs different? */ - if ((usize ^ vsize) >= 0) - { - /* U and V are both non-negative or both negative. */ - if (usize == 0) - /* vsize >= 0 */ - return -(vsize != 0); - if (vsize == 0) - /* usize >= 0 */ - return usize != 0; - /* Fall out. */ - } - else - { - /* Either U or V is negative, but not both. */ - return usign; - } - - /* U and V have the same sign and are both non-zero. */ - - uexp = EXP(u); - vexp = EXP(v); - - /* 2. Are the exponents different? */ - if (uexp > vexp) - return usign; - if (uexp < vexp) - return -usign; - - usize = ABS (usize); - vsize = ABS (vsize); - - up = PTR (u); - vp = PTR (v); - -#define STRICT_MPF_NORMALIZATION 0 -#if ! STRICT_MPF_NORMALIZATION - /* Ignore zeroes at the low end of U and V. */ - do { - mp_limb_t tl; - tl = up[0]; - MPN_STRIP_LOW_ZEROS_NOT_ZERO (up, usize, tl); - tl = vp[0]; - MPN_STRIP_LOW_ZEROS_NOT_ZERO (vp, vsize, tl); - } while (0); -#endif - - if (usize > vsize) - { - cmp = mpn_cmp (up + usize - vsize, vp, vsize); - /* if (cmp == 0) */ - /* return usign; */ - ++cmp; - } - else if (vsize > usize) - { - cmp = mpn_cmp (up, vp + vsize - usize, usize); - /* if (cmp == 0) */ - /* return -usign; */ - } - else - { - cmp = mpn_cmp (up, vp, usize); - if (cmp == 0) - return 0; - } - return cmp > 0 ? usign : -usign; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/cmp_d.c b/src/plugins/e-acsl/contrib/libgmp/mpf/cmp_d.c deleted file mode 100644 index 52893a781ecc1ad441d5e710b448adc5748b9f28..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/cmp_d.c +++ /dev/null @@ -1,60 +0,0 @@ -/* mpf_cmp_d -- compare mpf and double. - -Copyright 2001, 2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "config.h" - -#if HAVE_FLOAT_H -#include <float.h> /* for DBL_MAX */ -#endif - -#include "gmp.h" -#include "gmp-impl.h" - -int -mpf_cmp_d (mpf_srcptr f, double d) -{ - mp_limb_t darray[LIMBS_PER_DOUBLE]; - mpf_t df; - - /* d=NaN has no sensible return value, so raise an exception. - d=Inf or -Inf is always bigger than z. */ - DOUBLE_NAN_INF_ACTION (d, - __gmp_invalid_operation (), - return (d < 0.0 ? 1 : -1)); - - if (d == 0.0) - return SIZ(f); - - PTR(df) = darray; - SIZ(df) = (d >= 0.0 ? LIMBS_PER_DOUBLE : -LIMBS_PER_DOUBLE); - EXP(df) = __gmp_extract_double (darray, ABS(d)); - - return mpf_cmp (f, df); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/cmp_si.c b/src/plugins/e-acsl/contrib/libgmp/mpf/cmp_si.c deleted file mode 100644 index 3bf98211ddb6a3ef40995bf90f034aa336e38b65..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/cmp_si.c +++ /dev/null @@ -1,110 +0,0 @@ -/* mpf_cmp_si -- Compare a float with a signed integer. - -Copyright 1993-1995, 1999-2002, 2004, 2012, 2015 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -mpf_cmp_si (mpf_srcptr u, long int vval) __GMP_NOTHROW -{ - mp_srcptr up; - mp_size_t usize; - mp_exp_t uexp; - mp_limb_t ulimb; - int usign; - unsigned long abs_vval; - - usize = SIZ (u); - - /* 1. Are the signs different? */ - if ((usize < 0) == (vval < 0)) /* don't use xor, type size may differ */ - { - /* U and V are both non-negative or both negative. */ - if (usize == 0) - /* vval >= 0 */ - return -(vval != 0); - if (vval == 0) - /* usize >= 0 */ - return usize != 0; - /* Fall out. */ - } - else - { - /* Either U or V is negative, but not both. */ - return usize >= 0 ? 1 : -1; - } - - /* U and V have the same sign and are both non-zero. */ - - /* 2. Are the exponents different (V's exponent == 1)? */ - uexp = EXP (u); - usign = usize >= 0 ? 1 : -1; - usize = ABS (usize); - abs_vval = ABS_CAST (unsigned long, vval); - -#if GMP_NAIL_BITS != 0 - if (uexp != 1 + (abs_vval > GMP_NUMB_MAX)) - return (uexp < 1 + (abs_vval > GMP_NUMB_MAX)) ? -usign : usign; -#else - if (uexp != 1) - return (uexp < 1) ? -usign : usign; -#endif - - up = PTR (u); - - ASSERT (usize > 0); - ulimb = up[--usize]; -#if GMP_NAIL_BITS != 0 - if (uexp == 2) - { - if ((ulimb >> GMP_NAIL_BITS) != 0) - return usign; - ulimb = (ulimb << GMP_NUMB_BITS); - if (usize != 0) ulimb |= up[--usize]; - } -#endif - - /* 3. Compare the most significant mantissa limb with V. */ - if (ulimb != abs_vval) - return (ulimb < abs_vval) ? -usign : usign; - - /* Ignore zeroes at the low end of U. */ - for (; *up == 0; ++up) - --usize; - - /* 4. Now, if the number of limbs are different, we have a difference - since we have made sure the trailing limbs are not zero. */ - if (usize > 0) - return usign; - - /* Wow, we got zero even if we tried hard to avoid it. */ - return 0; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/cmp_ui.c b/src/plugins/e-acsl/contrib/libgmp/mpf/cmp_ui.c deleted file mode 100644 index 198eb21e5173fbf222d1c4372f2824542ed0b3b8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/cmp_ui.c +++ /dev/null @@ -1,88 +0,0 @@ -/* mpf_cmp_ui -- Compare a float with an unsigned integer. - -Copyright 1993-1995, 1999, 2001, 2002, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -mpf_cmp_ui (mpf_srcptr u, unsigned long int vval) __GMP_NOTHROW -{ - mp_srcptr up; - mp_size_t usize; - mp_exp_t uexp; - mp_limb_t ulimb; - - usize = SIZ (u); - - /* 1. Is U negative? */ - if (usize < 0) - return -1; - /* We rely on usize being non-negative in the code that follows. */ - - if (vval == 0) - return usize != 0; - - /* 2. Are the exponents different (V's exponent == 1)? */ - uexp = EXP (u); - -#if GMP_NAIL_BITS != 0 - if (uexp != 1 + (vval > GMP_NUMB_MAX)) - return (uexp < 1 + (vval > GMP_NUMB_MAX)) ? -1 : 1; -#else - if (uexp != 1) - return (uexp < 1) ? -1 : 1; -#endif - - up = PTR (u); - - ASSERT (usize > 0); - ulimb = up[--usize]; -#if GMP_NAIL_BITS != 0 - if (uexp == 2) - { - if ((ulimb >> GMP_NAIL_BITS) != 0) - return 1; - ulimb = (ulimb << GMP_NUMB_BITS); - if (usize != 0) ulimb |= up[--usize]; - } -#endif - - /* 3. Compare the most significant mantissa limb with V. */ - if (ulimb != vval) - return (ulimb < vval) ? -1 : 1; - - /* Ignore zeroes at the low end of U. */ - for (; *up == 0; ++up) - --usize; - - /* 4. Now, if the number of limbs are different, we have a difference - since we have made sure the trailing limbs are not zero. */ - return (usize > 0); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/cmp_z.c b/src/plugins/e-acsl/contrib/libgmp/mpf/cmp_z.c deleted file mode 100644 index e9c1559d6a85db888e9b399c8b90544db0e5f00c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/cmp_z.c +++ /dev/null @@ -1,46 +0,0 @@ -/* mpf_cmp_z -- Compare a float with an integer. - -Copyright 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -mpf_cmp_z (mpf_srcptr u, mpz_srcptr v) __GMP_NOTHROW -{ - mpf_t vf; - mp_size_t size; - - SIZ (vf) = size = SIZ (v); - EXP (vf) = size = ABS (size); - /* PREC (vf) = size; */ - PTR (vf) = PTR (v); - - return mpf_cmp (u, vf); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/div.c b/src/plugins/e-acsl/contrib/libgmp/mpf/div.c deleted file mode 100644 index af38cb8698fc4c748f1fdf439fa74dde674b4639..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/div.c +++ /dev/null @@ -1,138 +0,0 @@ -/* mpf_div -- Divide two floats. - -Copyright 1993, 1994, 1996, 2000-2002, 2004, 2005, 2010, 2012 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Not done: - - No attempt is made to identify an overlap u==v. The result will be - correct (1.0), but a full actual division is done whereas of course - x/x==1 needs no work. Such a call is not a sensible thing to make, and - it's left to an application to notice and optimize if it might arise - somehow through pointer aliasing or whatever. - - Enhancements: - - The high quotient limb is non-zero when high{up,vsize} >= {vp,vsize}. We - could make that comparison and use qsize==prec instead of qsize==prec+1, - to save one limb in the division. - - If r==u but the size is enough bigger than prec that there won't be an - overlap between quotient and dividend in mpn_div_q, then we can avoid - copying up,usize. This would only arise from a prec reduced with - mpf_set_prec_raw and will be pretty unusual, but might be worthwhile if - it could be worked into the copy_u decision cleanly. */ - -void -mpf_div (mpf_ptr r, mpf_srcptr u, mpf_srcptr v) -{ - mp_srcptr up, vp; - mp_ptr rp, tp, new_vp; - mp_size_t usize, vsize, rsize, prospective_rsize, tsize, zeros; - mp_size_t sign_quotient, prec, high_zero, chop; - mp_exp_t rexp; - int copy_u; - TMP_DECL; - - usize = SIZ(u); - vsize = SIZ(v); - - if (UNLIKELY (vsize == 0)) - DIVIDE_BY_ZERO; - - if (usize == 0) - { - SIZ(r) = 0; - EXP(r) = 0; - return; - } - - sign_quotient = usize ^ vsize; - usize = ABS (usize); - vsize = ABS (vsize); - prec = PREC(r); - - TMP_MARK; - rexp = EXP(u) - EXP(v) + 1; - - rp = PTR(r); - up = PTR(u); - vp = PTR(v); - - prospective_rsize = usize - vsize + 1; /* quot from using given u,v sizes */ - rsize = prec + 1; /* desired quot */ - - zeros = rsize - prospective_rsize; /* padding u to give rsize */ - copy_u = (zeros > 0 || rp == up); /* copy u if overlap or padding */ - - chop = MAX (-zeros, 0); /* negative zeros means shorten u */ - up += chop; - usize -= chop; - zeros += chop; /* now zeros >= 0 */ - - tsize = usize + zeros; /* size for possible copy of u */ - - /* copy and possibly extend u if necessary */ - if (copy_u) - { - tp = TMP_ALLOC_LIMBS (tsize + 1); /* +1 for mpn_div_q's scratch needs */ - MPN_ZERO (tp, zeros); - MPN_COPY (tp+zeros, up, usize); - up = tp; - usize = tsize; - } - else - { - tp = TMP_ALLOC_LIMBS (usize + 1); - } - - /* ensure divisor doesn't overlap quotient */ - if (rp == vp) - { - new_vp = TMP_ALLOC_LIMBS (vsize); - MPN_COPY (new_vp, vp, vsize); - vp = new_vp; - } - - ASSERT (usize-vsize+1 == rsize); - mpn_div_q (rp, up, usize, vp, vsize, tp); - - /* strip possible zero high limb */ - high_zero = (rp[rsize-1] == 0); - rsize -= high_zero; - rexp -= high_zero; - - SIZ(r) = sign_quotient >= 0 ? rsize : -rsize; - EXP(r) = rexp; - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/div_2exp.c b/src/plugins/e-acsl/contrib/libgmp/mpf/div_2exp.c deleted file mode 100644 index fef81520503d04ffff7f9c74fdd8c6ac361f8865..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/div_2exp.c +++ /dev/null @@ -1,139 +0,0 @@ -/* mpf_div_2exp -- Divide a float by 2^n. - -Copyright 1993, 1994, 1996, 2000-2002, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Multiples of GMP_NUMB_BITS in exp simply mean an amount subtracted from - EXP(u) to set EXP(r). The remainder exp%GMP_NUMB_BITS is then a right - shift for the limb data. - - If exp%GMP_NUMB_BITS == 0 then there's no shifting, we effectively just - do an mpz_set with changed EXP(r). Like mpz_set we take prec+1 limbs in - this case. Although just prec would suffice, it's nice to have - mpf_div_2exp with exp==0 come out the same as mpz_set. - - When shifting we take up to prec many limbs from the input. Our shift is - cy = mpn_rshift (PTR(r)+1, PTR(u)+k, ...), where k is the number of low - limbs dropped from u, and the carry out is stored to PTR(r)[0]. We don't - try to work extra bits from PTR(u)[k-1] (when k>=1 makes it available) - into that low carry limb. Just prec limbs (with the high non-zero) from - the input is enough bits for the application requested precision, no need - to do extra work. - - If r==u the shift will have overlapping operands. When k>=1 (ie. when - usize > prec), the overlap is in the style supported by rshift (ie. dst - <= src). - - But when r==u and k==0 (ie. usize <= prec), we would have an invalid - overlap (mpn_rshift (rp+1, rp, ...)). In this case we must instead use - mpn_lshift (PTR(r), PTR(u), size, NUMB-shift). An lshift by NUMB-shift - bits gives identical data of course, it's just its overlap restrictions - which differ. - - In both shift cases, the resulting data is abs_usize+1 limbs. "adj" is - used to add +1 to that size if the high is non-zero (it may of course - have become zero by the shifting). EXP(u) is the exponent just above - those abs_usize+1 limbs, so it gets -1+adj, which means -1 if the high is - zero, or no change if the high is non-zero. - - Enhancements: - - The way mpn_lshift is used means successive mpf_div_2exp calls on the - same operand will accumulate low zero limbs, until prec+1 limbs is - reached. This is wasteful for subsequent operations. When abs_usize <= - prec, we should test the low exp%GMP_NUMB_BITS many bits of PTR(u)[0], - ie. those which would be shifted out by an mpn_rshift. If they're zero - then use that mpn_rshift. */ - -void -mpf_div_2exp (mpf_ptr r, mpf_srcptr u, mp_bitcnt_t exp) -{ - mp_srcptr up; - mp_ptr rp = r->_mp_d; - mp_size_t usize; - mp_size_t abs_usize; - mp_size_t prec = r->_mp_prec; - mp_exp_t uexp = u->_mp_exp; - - usize = u->_mp_size; - - if (UNLIKELY (usize == 0)) - { - r->_mp_size = 0; - r->_mp_exp = 0; - return; - } - - abs_usize = ABS (usize); - up = u->_mp_d; - - if (exp % GMP_NUMB_BITS == 0) - { - prec++; /* retain more precision here as we don't need - to account for carry-out here */ - if (abs_usize > prec) - { - up += abs_usize - prec; - abs_usize = prec; - } - if (rp != up) - MPN_COPY_INCR (rp, up, abs_usize); - r->_mp_exp = uexp - exp / GMP_NUMB_BITS; - } - else - { - mp_limb_t cy_limb; - mp_size_t adj; - if (abs_usize > prec) - { - up += abs_usize - prec; - abs_usize = prec; - /* Use mpn_rshift since mpn_lshift operates downwards, and we - therefore would clobber part of U before using that part, in case - R is the same variable as U. */ - cy_limb = mpn_rshift (rp + 1, up, abs_usize, exp % GMP_NUMB_BITS); - rp[0] = cy_limb; - adj = rp[abs_usize] != 0; - } - else - { - cy_limb = mpn_lshift (rp, up, abs_usize, - GMP_NUMB_BITS - exp % GMP_NUMB_BITS); - rp[abs_usize] = cy_limb; - adj = cy_limb != 0; - } - - abs_usize += adj; - r->_mp_exp = uexp - exp / GMP_NUMB_BITS - 1 + adj; - } - r->_mp_size = usize >= 0 ? abs_usize : -abs_usize; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/div_ui.c b/src/plugins/e-acsl/contrib/libgmp/mpf/div_ui.c deleted file mode 100644 index 9be7e680bef68441d8b26cc39ff6309d9d5006ee..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/div_ui.c +++ /dev/null @@ -1,111 +0,0 @@ -/* mpf_div_ui -- Divide a float with an unsigned integer. - -Copyright 1993, 1994, 1996, 2000-2002, 2004, 2005, 2012 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -mpf_div_ui (mpf_ptr r, mpf_srcptr u, unsigned long int v) -{ - mp_srcptr up; - mp_ptr rp, tp, rtp; - mp_size_t usize; - mp_size_t rsize, tsize; - mp_size_t sign_quotient; - mp_size_t prec; - mp_limb_t q_limb; - mp_exp_t rexp; - TMP_DECL; - -#if BITS_PER_ULONG > GMP_NUMB_BITS /* avoid warnings about shift amount */ - if (v > GMP_NUMB_MAX) - { - mpf_t vf; - mp_limb_t vl[2]; - SIZ(vf) = 2; - EXP(vf) = 2; - PTR(vf) = vl; - vl[0] = v & GMP_NUMB_MASK; - vl[1] = v >> GMP_NUMB_BITS; - mpf_div (r, u, vf); - return; - } -#endif - - if (UNLIKELY (v == 0)) - DIVIDE_BY_ZERO; - - usize = u->_mp_size; - - if (usize == 0) - { - r->_mp_size = 0; - r->_mp_exp = 0; - return; - } - - sign_quotient = usize; - usize = ABS (usize); - prec = r->_mp_prec; - - TMP_MARK; - - rp = r->_mp_d; - up = u->_mp_d; - - tsize = 1 + prec; - tp = TMP_ALLOC_LIMBS (tsize + 1); - - if (usize > tsize) - { - up += usize - tsize; - usize = tsize; - rtp = tp; - } - else - { - MPN_ZERO (tp, tsize - usize); - rtp = tp + (tsize - usize); - } - - /* Move the dividend to the remainder. */ - MPN_COPY (rtp, up, usize); - - mpn_divmod_1 (rp, tp, tsize, (mp_limb_t) v); - q_limb = rp[tsize - 1]; - - rsize = tsize - (q_limb == 0); - rexp = u->_mp_exp - (q_limb == 0); - r->_mp_size = sign_quotient >= 0 ? rsize : -rsize; - r->_mp_exp = rexp; - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/dump.c b/src/plugins/e-acsl/contrib/libgmp/mpf/dump.c deleted file mode 100644 index af671059237b89c12b90a5edc532ba14fd57cb91..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/dump.c +++ /dev/null @@ -1,53 +0,0 @@ -/* mpf_dump -- Dump a float to stdout. - - THIS IS AN INTERNAL FUNCTION WITH A MUTABLE INTERFACE. IT IS NOT SAFE TO - CALL THIS FUNCTION DIRECTLY. IN FACT, IT IS ALMOST GUARANTEED THAT THIS - FUNCTION WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - - -Copyright 1993-1995, 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> -#include <string.h> /* for strlen */ -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_dump (mpf_srcptr u) -{ - mp_exp_t exp; - char *str; - - str = mpf_get_str (0, &exp, 10, 0, u); - if (str[0] == '-') - printf ("-0.%se%ld\n", str + 1, exp); - else - printf ("0.%se%ld\n", str, exp); - (*__gmp_free_func) (str, strlen (str) + 1); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/eq.c b/src/plugins/e-acsl/contrib/libgmp/mpf/eq.c deleted file mode 100644 index 30c6befd0615e6189aadf9e195005aaec6630d17..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/eq.c +++ /dev/null @@ -1,150 +0,0 @@ -/* mpf_eq -- Compare two floats up to a specified bit #. - -Copyright 1993, 1995, 1996, 2001, 2002, 2008, 2009, 2012 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -int -mpf_eq (mpf_srcptr u, mpf_srcptr v, mp_bitcnt_t n_bits) -{ - mp_srcptr up, vp, p; - mp_size_t usize, vsize, minsize, maxsize, n_limbs, i, size; - mp_exp_t uexp, vexp; - mp_limb_t diff; - int cnt; - - uexp = u->_mp_exp; - vexp = v->_mp_exp; - - usize = u->_mp_size; - vsize = v->_mp_size; - - /* 1. Are the signs different? */ - if ((usize ^ vsize) >= 0) - { - /* U and V are both non-negative or both negative. */ - if (usize == 0) - return vsize == 0; - if (vsize == 0) - return 0; - - /* Fall out. */ - } - else - { - /* Either U or V is negative, but not both. */ - return 0; - } - - /* U and V have the same sign and are both non-zero. */ - - /* 2. Are the exponents different? */ - if (uexp != vexp) - return 0; - - usize = ABS (usize); - vsize = ABS (vsize); - - up = u->_mp_d; - vp = v->_mp_d; - - up += usize; /* point just above most significant limb */ - vp += vsize; /* point just above most significant limb */ - - count_leading_zeros (cnt, up[-1]); - if ((vp[-1] >> (GMP_LIMB_BITS - 1 - cnt)) != 1) - return 0; /* msb positions different */ - - n_bits += cnt - GMP_NAIL_BITS; - n_limbs = (n_bits + GMP_NUMB_BITS - 1) / GMP_NUMB_BITS; - - usize = MIN (usize, n_limbs); - vsize = MIN (vsize, n_limbs); - -#if 0 - /* Ignore zeros at the low end of U and V. */ - while (up[0] == 0) - up++, usize--; - while (vp[0] == 0) - vp++, vsize--; -#endif - - minsize = MIN (usize, vsize); - maxsize = usize + vsize - minsize; - - up -= minsize; /* point at most significant common limb */ - vp -= minsize; /* point at most significant common limb */ - - /* Compare the most significant part which has explicit limbs for U and V. */ - for (i = minsize - 1; i > 0; i--) - { - if (up[i] != vp[i]) - return 0; - } - - n_bits -= (maxsize - 1) * GMP_NUMB_BITS; - - size = maxsize - minsize; - if (size != 0) - { - if (up[0] != vp[0]) - return 0; - - /* Now either U or V has its limbs consumed, i.e, continues with an - infinite number of implicit zero limbs. Check that the other operand - has just zeros in the corresponding, relevant part. */ - - if (usize > vsize) - p = up - size; - else - p = vp - size; - - for (i = size - 1; i > 0; i--) - { - if (p[i] != 0) - return 0; - } - - diff = p[0]; - } - else - { - /* Both U or V has its limbs consumed. */ - - diff = up[0] ^ vp[0]; - } - - if (n_bits < GMP_NUMB_BITS) - diff >>= GMP_NUMB_BITS - n_bits; - - return diff == 0; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_s.h b/src/plugins/e-acsl/contrib/libgmp/mpf/fits_s.h deleted file mode 100644 index 25f323e255c6919a53eaf1d1764f998bddbdbc47..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_s.h +++ /dev/null @@ -1,72 +0,0 @@ -/* mpf_fits_s*_p -- test whether an mpf fits a C signed type. - -Copyright 2001, 2002, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Notice this is equivalent to mpz_set_f + mpz_fits_s*_p. */ - -int -FUNCTION (mpf_srcptr f) __GMP_NOTHROW -{ - mp_size_t fs, fn; - mp_srcptr fp; - mp_exp_t exp; - mp_limb_t fl; - - exp = EXP(f); - if (exp < 1) - return 1; /* -1 < f < 1 truncates to zero, so fits */ - - fs = SIZ (f); - fp = PTR(f); - fn = ABS (fs); - - if (exp == 1) - { - fl = fp[fn-1]; - } -#if GMP_NAIL_BITS != 0 - else if (exp == 2 && MAXIMUM > GMP_NUMB_MAX) - { - fl = fp[fn-1]; - if ((fl >> GMP_NAIL_BITS) != 0) - return 0; - fl = (fl << GMP_NUMB_BITS); - if (fn >= 2) - fl |= fp[fn-2]; - } -#endif - else - return 0; - - return fl <= (fs >= 0 ? (mp_limb_t) MAXIMUM : - (mp_limb_t) MINIMUM); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_sint.c b/src/plugins/e-acsl/contrib/libgmp/mpf/fits_sint.c deleted file mode 100644 index 26ace07c38021d78bdb683f2efa1599d9fd28ef7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_sint.c +++ /dev/null @@ -1,36 +0,0 @@ -/* mpf_fits_sint_p -- test whether an mpf fits an int. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#define FUNCTION mpf_fits_sint_p -#define MAXIMUM INT_MAX -#define MINIMUM INT_MIN - -#include "fits_s.h" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_slong.c b/src/plugins/e-acsl/contrib/libgmp/mpf/fits_slong.c deleted file mode 100644 index 25db68c47d4582046e8840c343fec38184d48889..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_slong.c +++ /dev/null @@ -1,36 +0,0 @@ -/* mpf_fits_slong_p -- test whether an mpf fits a long. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#define FUNCTION mpf_fits_slong_p -#define MAXIMUM LONG_MAX -#define MINIMUM LONG_MIN - -#include "fits_s.h" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_sshort.c b/src/plugins/e-acsl/contrib/libgmp/mpf/fits_sshort.c deleted file mode 100644 index 3bfc5a4a3450a4e56749be4fdff43aa30b044826..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_sshort.c +++ /dev/null @@ -1,36 +0,0 @@ -/* mpf_fits_sshort_p -- test whether an mpf fits a short. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#define FUNCTION mpf_fits_sshort_p -#define MAXIMUM SHRT_MAX -#define MINIMUM SHRT_MIN - -#include "fits_s.h" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_u.h b/src/plugins/e-acsl/contrib/libgmp/mpf/fits_u.h deleted file mode 100644 index be7a271b2faabd5d983e699dbc240c7609b7783c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_u.h +++ /dev/null @@ -1,74 +0,0 @@ -/* mpf_fits_u*_p -- test whether an mpf fits a C unsigned type. - -Copyright 2001, 2002, 2013, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Notice this is equivalent to mpz_set_f + mpz_fits_u*_p. */ - -int -FUNCTION (mpf_srcptr f) __GMP_NOTHROW -{ - mp_size_t fn; - mp_srcptr fp; - mp_exp_t exp; - mp_limb_t fl; - - exp = EXP(f); - if (exp < 1) - return 1; /* -1 < f < 1 truncates to zero, so fits */ - - fn = SIZ(f); - if (fn < 0) /* zero catched by exp == 0 */ - return 0; /* negatives don't fit */ - - fp = PTR(f); - - if (exp == 1) - { - fl = fp[fn-1]; - } -#if GMP_NAIL_BITS != 0 - else if (exp == 2 && MAXIMUM > GMP_NUMB_MAX) - { - fl = fp[fn-1]; - if ((fl >> GMP_NAIL_BITS) != 0) - return 0; - fl = (fl << GMP_NUMB_BITS); - if (fn >= 2) - fl |= fp[fn-2]; - } -#endif - else - return 0; - - return fl <= MAXIMUM; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_uint.c b/src/plugins/e-acsl/contrib/libgmp/mpf/fits_uint.c deleted file mode 100644 index 4b107b04d8983e8957a825728e73a55525a08c47..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_uint.c +++ /dev/null @@ -1,35 +0,0 @@ -/* mpf_fits_uint_p -- test whether an mpf fits an unsigned int. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#define FUNCTION mpf_fits_uint_p -#define MAXIMUM UINT_MAX - -#include "fits_u.h" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_ulong.c b/src/plugins/e-acsl/contrib/libgmp/mpf/fits_ulong.c deleted file mode 100644 index 1db688ce4c6f75c06d14647c9884fc5bb0ed8991..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_ulong.c +++ /dev/null @@ -1,35 +0,0 @@ -/* mpf_fits_ulong_p -- test whether an mpf fits an unsigned long. - -Copyright 2001, 2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#define FUNCTION mpf_fits_ulong_p -#define MAXIMUM ULONG_MAX - -#include "fits_u.h" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_ushort.c b/src/plugins/e-acsl/contrib/libgmp/mpf/fits_ushort.c deleted file mode 100644 index 76a3fd9d528dccd54e1a36da670a733751406577..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/fits_ushort.c +++ /dev/null @@ -1,35 +0,0 @@ -/* mpf_fits_ushort_p -- test whether an mpf fits an unsigned short. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#define FUNCTION mpf_fits_ushort_p -#define MAXIMUM USHRT_MAX - -#include "fits_u.h" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/get_d.c b/src/plugins/e-acsl/contrib/libgmp/mpf/get_d.c deleted file mode 100644 index 8f6f9bbea1dea7c5b605416c21984e7408153671..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/get_d.c +++ /dev/null @@ -1,47 +0,0 @@ -/* double mpf_get_d (mpf_t src) -- return SRC truncated to a double. - -Copyright 1996, 2001-2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -double -mpf_get_d (mpf_srcptr src) -{ - mp_size_t size, abs_size; - long exp; - - size = SIZ (src); - if (UNLIKELY (size == 0)) - return 0.0; - - abs_size = ABS (size); - exp = (EXP (src) - abs_size) * GMP_NUMB_BITS; - return mpn_get_d (PTR (src), abs_size, size, exp); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/get_d_2exp.c b/src/plugins/e-acsl/contrib/libgmp/mpf/get_d_2exp.c deleted file mode 100644 index 17ce229f2511f9f2d0b3c8299da9b8fccd6a5349..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/get_d_2exp.c +++ /dev/null @@ -1,61 +0,0 @@ -/* double mpf_get_d_2exp (signed long int *exp, mpf_t src). - -Copyright 2001-2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -double -mpf_get_d_2exp (signed long int *exp2, mpf_srcptr src) -{ - mp_size_t size, abs_size; - mp_srcptr ptr; - int cnt; - long exp; - - size = SIZ(src); - if (UNLIKELY (size == 0)) - { - *exp2 = 0; - return 0.0; - } - - ptr = PTR(src); - abs_size = ABS (size); - count_leading_zeros (cnt, ptr[abs_size - 1]); - cnt -= GMP_NAIL_BITS; - - exp = EXP(src) * GMP_NUMB_BITS - cnt; - *exp2 = exp; - - return mpn_get_d (ptr, abs_size, (mp_size_t) 0, - (long) - (abs_size * GMP_NUMB_BITS - cnt)); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/get_dfl_prec.c b/src/plugins/e-acsl/contrib/libgmp/mpf/get_dfl_prec.c deleted file mode 100644 index 9a773d83acb68d93862b1ebe5585dc2160c352ed..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/get_dfl_prec.c +++ /dev/null @@ -1,39 +0,0 @@ -/* mpf_get_default_prec -- return default precision in bits. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -mp_bitcnt_t -mpf_get_default_prec (void) __GMP_NOTHROW -{ - return __GMPF_PREC_TO_BITS (__gmp_default_fp_limb_precision); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/get_prc.c b/src/plugins/e-acsl/contrib/libgmp/mpf/get_prc.c deleted file mode 100644 index 3b3283a48c5bc84afb9efc74458f13fed6137bbb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/get_prc.c +++ /dev/null @@ -1,38 +0,0 @@ -/* mpf_get_prec(x) -- Return the precision in bits of x. - -Copyright 1996, 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -mp_bitcnt_t -mpf_get_prec (mpf_srcptr x) __GMP_NOTHROW -{ - return __GMPF_PREC_TO_BITS (x->_mp_prec); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/get_si.c b/src/plugins/e-acsl/contrib/libgmp/mpf/get_si.c deleted file mode 100644 index 5b63dbd4256bc66540595158223c92f166e59889..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/get_si.c +++ /dev/null @@ -1,87 +0,0 @@ -/* mpf_get_si -- mpf to long conversion - -Copyright 2001, 2002, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Any fraction bits are truncated, meaning simply discarded. - - For values bigger than a long, the low bits are returned, like - mpz_get_si, but this isn't documented. - - Notice this is equivalent to mpz_set_f + mpz_get_si. - - - Implementation: - - fl is established in basically the same way as for mpf_get_ui, see that - code for explanations of the conditions. - - However unlike mpf_get_ui we need an explicit return 0 for exp<=0. When - f is a negative fraction (ie. size<0 and exp<=0) we can't let fl==0 go - through to the zany final "~ ((fl - 1) & LONG_MAX)", that would give - -0x80000000 instead of the desired 0. */ - -long -mpf_get_si (mpf_srcptr f) __GMP_NOTHROW -{ - mp_exp_t exp; - mp_size_t size, abs_size; - mp_srcptr fp; - mp_limb_t fl; - - exp = EXP (f); - size = SIZ (f); - fp = PTR (f); - - /* fraction alone truncates to zero - this also covers zero, since we have exp==0 for zero */ - if (exp <= 0) - return 0L; - - /* there are some limbs above the radix point */ - - fl = 0; - abs_size = ABS (size); - if (abs_size >= exp) - fl = fp[abs_size-exp]; - -#if BITS_PER_ULONG > GMP_NUMB_BITS - if (exp > 1 && abs_size+1 >= exp) - fl |= fp[abs_size - exp + 1] << GMP_NUMB_BITS; -#endif - - if (size > 0) - return fl & LONG_MAX; - else - /* this form necessary to correctly handle -0x80..00 */ - return -1 - (long) ((fl - 1) & LONG_MAX); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/get_str.c b/src/plugins/e-acsl/contrib/libgmp/mpf/get_str.c deleted file mode 100644 index 682819daaabbd0160b7af705adf13ad441a72013..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/get_str.c +++ /dev/null @@ -1,324 +0,0 @@ -/* mpf_get_str (digit_ptr, exp, base, n_digits, a) -- Convert the floating - point number A to a base BASE number and store N_DIGITS raw digits at - DIGIT_PTR, and the base BASE exponent in the word pointed to by EXP. For - example, the number 3.1416 would be returned as "31416" in DIGIT_PTR and - 1 in EXP. - -Copyright 1993-1997, 2000-2003, 2005, 2006, 2011, 2015 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdlib.h> /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" /* for count_leading_zeros */ - -/* Could use some more work. - - 1. Allocation is excessive. Try to combine areas. Perhaps use result - string area for temp limb space? - 2. We generate up to two limbs of extra digits. This is because we don't - check the exact number of bits in the input operand, and from that - compute an accurate exponent (variable e in the code). It would be - cleaner and probably somewhat faster to change this. -*/ - -/* Compute base^exp and return the most significant prec limbs in rp[]. - Put the count of omitted low limbs in *ign. - Return the actual size (which might be less than prec). - Allocation of rp[] and the temporary tp[] should be 2*prec+2 limbs. */ -static mp_size_t -mpn_pow_1_highpart (mp_ptr rp, mp_size_t *ignp, - mp_limb_t base, unsigned long exp, - mp_size_t prec, mp_ptr tp) -{ - mp_size_t ign; /* counts number of ignored low limbs in r */ - mp_size_t off; /* keeps track of offset where value starts */ - mp_ptr passed_rp = rp; - mp_size_t rn; - int cnt; - int i; - - if (exp == 0) - { - rp[0] = 1; - *ignp = 0; - return 1; - } - - rp[0] = base; - rn = 1; - off = 0; - ign = 0; - count_leading_zeros (cnt, exp); - for (i = GMP_LIMB_BITS - cnt - 2; i >= 0; i--) - { - mpn_sqr (tp, rp + off, rn); - rn = 2 * rn; - rn -= tp[rn - 1] == 0; - ign <<= 1; - - off = 0; - if (rn > prec) - { - ign += rn - prec; - off = rn - prec; - rn = prec; - } - MP_PTR_SWAP (rp, tp); - - if (((exp >> i) & 1) != 0) - { - mp_limb_t cy; - cy = mpn_mul_1 (rp, rp + off, rn, base); - rp[rn] = cy; - rn += cy != 0; - off = 0; - } - } - - if (rn > prec) - { - ASSERT (rn == prec + 1); - - ign += rn - prec; - rp += rn - prec; - rn = prec; - } - - /* With somewhat less than 50% probability, we can skip this copy. */ - if (passed_rp != rp + off) - MPN_COPY_INCR (passed_rp, rp + off, rn); - *ignp = ign; - return rn; -} - -char * -mpf_get_str (char *dbuf, mp_exp_t *exp, int base, size_t n_digits, mpf_srcptr u) -{ - mp_exp_t ue; - mp_size_t n_limbs_needed; - size_t max_digits; - mp_ptr up, pp, tp; - mp_size_t un, pn, tn; - unsigned char *tstr; - mp_exp_t exp_in_base; - size_t n_digits_computed; - mp_size_t i; - const char *num_to_text; - size_t alloc_size = 0; - char *dp; - TMP_DECL; - - up = PTR(u); - un = ABSIZ(u); - ue = EXP(u); - - if (base >= 0) - { - num_to_text = "0123456789abcdefghijklmnopqrstuvwxyz"; - if (base <= 1) - base = 10; - else if (base > 36) - { - num_to_text = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - if (base > 62) - return NULL; - } - } - else - { - base = -base; - if (base <= 1) - base = 10; - else if (base > 36) - return NULL; - num_to_text = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - } - - MPF_SIGNIFICANT_DIGITS (max_digits, base, PREC(u)); - if (n_digits == 0 || n_digits > max_digits) - n_digits = max_digits; - - if (dbuf == 0) - { - /* We didn't get a string from the user. Allocate one (and return - a pointer to it) with space for `-' and terminating null. */ - alloc_size = n_digits + 2; - dbuf = (char *) (*__gmp_allocate_func) (n_digits + 2); - } - - if (un == 0) - { - *exp = 0; - *dbuf = 0; - n_digits = 0; - goto done; - } - - TMP_MARK; - - /* Allocate temporary digit space. We can't put digits directly in the user - area, since we generate more digits than requested. (We allocate - 2 * GMP_LIMB_BITS extra bytes because of the digit block nature of the - conversion.) */ - tstr = (unsigned char *) TMP_ALLOC (n_digits + 2 * GMP_LIMB_BITS + 3); - - LIMBS_PER_DIGIT_IN_BASE (n_limbs_needed, n_digits, base); - - if (un > n_limbs_needed) - { - up += un - n_limbs_needed; - un = n_limbs_needed; - } - - TMP_ALLOC_LIMBS_2 (pp, 2 * n_limbs_needed + 4, - tp, 2 * n_limbs_needed + 4); - - if (ue <= n_limbs_needed) - { - /* We need to multiply number by base^n to get an n_digits integer part. */ - mp_size_t n_more_limbs_needed, ign, off; - unsigned long e; - - n_more_limbs_needed = n_limbs_needed - ue; - DIGITS_IN_BASE_PER_LIMB (e, n_more_limbs_needed, base); - - pn = mpn_pow_1_highpart (pp, &ign, (mp_limb_t) base, e, n_limbs_needed + 1, tp); - if (un > pn) - mpn_mul (tp, up, un, pp, pn); /* FIXME: mpn_mul_highpart */ - else - mpn_mul (tp, pp, pn, up, un); /* FIXME: mpn_mul_highpart */ - tn = un + pn; - tn -= tp[tn - 1] == 0; - off = un - ue - ign; - if (off < 0) - { - MPN_COPY_DECR (tp - off, tp, tn); - MPN_ZERO (tp, -off); - tn -= off; - off = 0; - } - n_digits_computed = mpn_get_str (tstr, base, tp + off, tn - off); - - exp_in_base = n_digits_computed - e; - } - else - { - /* We need to divide number by base^n to get an n_digits integer part. */ - mp_size_t n_less_limbs_needed, ign, off, xn; - unsigned long e; - mp_ptr dummyp, xp; - - n_less_limbs_needed = ue - n_limbs_needed; - DIGITS_IN_BASE_PER_LIMB (e, n_less_limbs_needed, base); - - pn = mpn_pow_1_highpart (pp, &ign, (mp_limb_t) base, e, n_limbs_needed + 1, tp); - - xn = n_limbs_needed + (n_less_limbs_needed-ign); - xp = TMP_ALLOC_LIMBS (xn); - off = xn - un; - MPN_ZERO (xp, off); - MPN_COPY (xp + off, up, un); - - dummyp = TMP_ALLOC_LIMBS (pn); - mpn_tdiv_qr (tp, dummyp, (mp_size_t) 0, xp, xn, pp, pn); - tn = xn - pn + 1; - tn -= tp[tn - 1] == 0; - n_digits_computed = mpn_get_str (tstr, base, tp, tn); - - exp_in_base = n_digits_computed + e; - } - - /* We should normally have computed too many digits. Round the result - at the point indicated by n_digits. */ - if (n_digits_computed > n_digits) - { - size_t i; - /* Round the result. */ - if (tstr[n_digits] * 2 >= base) - { - n_digits_computed = n_digits; - for (i = n_digits - 1;; i--) - { - unsigned int x; - x = ++(tstr[i]); - if (x != base) - break; - n_digits_computed--; - if (i == 0) - { - /* We had something like `bbbbbbb...bd', where 2*d >= base - and `b' denotes digit with significance base - 1. - This rounds up to `1', increasing the exponent. */ - tstr[0] = 1; - n_digits_computed = 1; - exp_in_base++; - break; - } - } - } - } - - /* We might have fewer digits than requested as a result of rounding above, - (i.e. 0.999999 => 1.0) or because we have a number that simply doesn't - need many digits in this base (e.g., 0.125 in base 10). */ - if (n_digits > n_digits_computed) - n_digits = n_digits_computed; - - /* Remove trailing 0. There can be many zeros. */ - while (n_digits != 0 && tstr[n_digits - 1] == 0) - n_digits--; - - dp = dbuf + (SIZ(u) < 0); - - /* Translate to ASCII and copy to result string. */ - for (i = 0; i < n_digits; i++) - dp[i] = num_to_text[tstr[i]]; - dp[n_digits] = 0; - - *exp = exp_in_base; - - if (SIZ(u) < 0) - { - dbuf[0] = '-'; - n_digits++; - } - - TMP_FREE; - - done: - /* If the string was alloced then resize it down to the actual space - required. */ - if (alloc_size != 0) - { - __GMP_REALLOCATE_FUNC_MAYBE_TYPE (dbuf, alloc_size, n_digits + 1, char); - } - - return dbuf; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/get_ui.c b/src/plugins/e-acsl/contrib/libgmp/mpf/get_ui.c deleted file mode 100644 index eb9b30e69c066e8a94f8b7a6742a170ef0dd79f9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/get_ui.c +++ /dev/null @@ -1,102 +0,0 @@ -/* mpf_get_ui -- mpf to ulong conversion - -Copyright 2001, 2002, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Any fraction bits are truncated, meaning simply discarded. - - For values bigger than a ulong, the low bits are returned (the low - absolute value bits actually), like mpz_get_ui, but this isn't - documented. - - Notice this is equivalent to mpz_set_f + mpz_get_ui. - - - Implementation: - - The limb just above the radix point for us to extract is ptr[size-exp]. - - We need to check that the size-exp index falls in our available data - range, 0 to size-1 inclusive. We test this without risk of an overflow - involving exp by requiring size>=exp (giving size-exp >= 0) and exp>0 - (giving size-exp <= size-1). - - Notice if size==0 there's no fetch, since of course size>=exp and exp>0 - can only be true if size>0. So there's no special handling for size==0, - it comes out as 0 the same as any other time we have no data at our - target index. - - For nails, the second limb above the radix point is also required, this - is ptr[size-exp+1]. - - Again we need to check that size-exp+1 falls in our data range, 0 to - size-1 inclusive. We test without risk of overflow by requiring - size+1>=exp (giving size-exp+1 >= 0) and exp>1 (giving size-exp+1 <= - size-1). - - And again if size==0 these second fetch conditions are not satisfied - either since size+1>=exp and exp>1 are only true if size>0. - - The code is arranged with exp>0 wrapping the exp>1 test since exp>1 is - mis-compiled by alpha gcc prior to version 3.4. It re-writes it as - exp-1>0, which is incorrect when exp==MP_EXP_T_MIN. By having exp>0 - tested first we ensure MP_EXP_T_MIN doesn't reach exp>1. */ - -unsigned long -mpf_get_ui (mpf_srcptr f) __GMP_NOTHROW -{ - mp_size_t size; - mp_exp_t exp; - mp_srcptr fp; - mp_limb_t fl; - - exp = EXP (f); - size = SIZ (f); - fp = PTR (f); - - fl = 0; - if (exp > 0) - { - /* there are some limbs above the radix point */ - - size = ABS (size); - if (size >= exp) - fl = fp[size-exp]; - -#if BITS_PER_ULONG > GMP_NUMB_BITS - if (exp > 1 && size+1 >= exp) - fl += (fp[size-exp+1] << GMP_NUMB_BITS); -#endif - } - - return (unsigned long) fl; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/init.c b/src/plugins/e-acsl/contrib/libgmp/mpf/init.c deleted file mode 100644 index 0e428d3d44c193d30a37203ecdfbf515835dc95b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/init.c +++ /dev/null @@ -1,42 +0,0 @@ -/* mpf_init() -- Make a new multiple precision number with value 0. - -Copyright 1993-1995, 2000, 2001, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_init (mpf_ptr r) -{ - mp_size_t prec = __gmp_default_fp_limb_precision; - r->_mp_size = 0; - r->_mp_exp = 0; - r->_mp_prec = prec; - r->_mp_d = __GMP_ALLOCATE_FUNC_LIMBS (prec + 1); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/init2.c b/src/plugins/e-acsl/contrib/libgmp/mpf/init2.c deleted file mode 100644 index 72c872608853d4aa258429e221e95531cf9dfb5b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/init2.c +++ /dev/null @@ -1,44 +0,0 @@ -/* mpf_init2() -- Make a new multiple precision number with value 0. - -Copyright 1993-1995, 2000, 2001, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_init2 (mpf_ptr r, mp_bitcnt_t prec_in_bits) -{ - mp_size_t prec; - - prec = __GMPF_BITS_TO_PREC (prec_in_bits); - r->_mp_size = 0; - r->_mp_exp = 0; - r->_mp_prec = prec; - r->_mp_d = __GMP_ALLOCATE_FUNC_LIMBS (prec + 1); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/inits.c b/src/plugins/e-acsl/contrib/libgmp/mpf/inits.c deleted file mode 100644 index db7cacc42580058fd08fb977e1a282075e085cf8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/inits.c +++ /dev/null @@ -1,49 +0,0 @@ -/* mpf_inits() -- Initialize multiple mpf_t variables and set them to 0. - -Copyright 2009, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdarg.h> -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_inits (mpf_ptr x, ...) -{ - va_list ap; - - va_start (ap, x); - - while (x != NULL) - { - mpf_init (x); - x = va_arg (ap, mpf_ptr); - } - - va_end (ap); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/inp_str.c b/src/plugins/e-acsl/contrib/libgmp/mpf/inp_str.c deleted file mode 100644 index 45cc34cebbabd6cf5c2247db2e1440269f400889..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/inp_str.c +++ /dev/null @@ -1,93 +0,0 @@ -/* mpf_inp_str(dest_float, stream, base) -- Input a number in base - BASE from stdio stream STREAM and store the result in DEST_FLOAT. - -Copyright 1996, 2000-2002, 2005 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> -#include <ctype.h> -#include "gmp.h" -#include "gmp-impl.h" - -size_t -mpf_inp_str (mpf_ptr rop, FILE *stream, int base) -{ - char *str; - size_t alloc_size, str_size; - int c; - int res; - size_t nread; - - if (stream == 0) - stream = stdin; - - alloc_size = 100; - str = (char *) (*__gmp_allocate_func) (alloc_size); - str_size = 0; - nread = 0; - - /* Skip whitespace. */ - do - { - c = getc (stream); - nread++; - } - while (isspace (c)); - - for (;;) - { - if (str_size >= alloc_size) - { - size_t old_alloc_size = alloc_size; - alloc_size = alloc_size * 3 / 2; - str = (char *) (*__gmp_reallocate_func) (str, old_alloc_size, alloc_size); - } - if (c == EOF || isspace (c)) - break; - str[str_size++] = c; - c = getc (stream); - } - ungetc (c, stream); - nread--; - - if (str_size >= alloc_size) - { - size_t old_alloc_size = alloc_size; - alloc_size = alloc_size * 3 / 2; - str = (char *) (*__gmp_reallocate_func) (str, old_alloc_size, alloc_size); - } - str[str_size] = 0; - - res = mpf_set_str (rop, str, base); - (*__gmp_free_func) (str, alloc_size); - - if (res == -1) - return 0; /* error */ - - return str_size + nread; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/int_p.c b/src/plugins/e-acsl/contrib/libgmp/mpf/int_p.c deleted file mode 100644 index e0e337d2f8fa8260eee17780a46ea25d921ae00c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/int_p.c +++ /dev/null @@ -1,56 +0,0 @@ -/* mpf_integer_p -- test whether an mpf is an integer */ - -/* -Copyright 2001, 2002, 2014-2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -int -mpf_integer_p (mpf_srcptr f) __GMP_NOTHROW -{ - mp_srcptr fp; - mp_exp_t exp; - mp_size_t size; - - size = SIZ (f); - exp = EXP (f); - if (exp <= 0) - return (size == 0); /* zero is an integer, - others have only fraction limbs */ - size = ABS (size); - - /* Ignore zeroes at the low end of F. */ - for (fp = PTR (f); *fp == 0; ++fp) - --size; - - /* no fraction limbs */ - return size <= exp; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/iset.c b/src/plugins/e-acsl/contrib/libgmp/mpf/iset.c deleted file mode 100644 index 246f367488bee4a9764059eabefb29dcd98f8cf5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/iset.c +++ /dev/null @@ -1,62 +0,0 @@ -/* mpf_init_set -- Initialize a float and assign it from another float. - -Copyright 1993-1995, 2000, 2001, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_init_set (mpf_ptr r, mpf_srcptr s) -{ - mp_ptr rp, sp; - mp_size_t ssize, size; - mp_size_t prec; - - prec = __gmp_default_fp_limb_precision; - r->_mp_d = __GMP_ALLOCATE_FUNC_LIMBS (prec + 1); - r->_mp_prec = prec; - - prec++; /* lie not to lose precision in assignment */ - ssize = s->_mp_size; - size = ABS (ssize); - - rp = r->_mp_d; - sp = s->_mp_d; - - if (size > prec) - { - sp += size - prec; - size = prec; - } - - r->_mp_exp = s->_mp_exp; - r->_mp_size = ssize >= 0 ? size : -size; - - MPN_COPY (rp, sp, size); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/iset_d.c b/src/plugins/e-acsl/contrib/libgmp/mpf/iset_d.c deleted file mode 100644 index e3492e3617935057f81650e4e17369dd899ed9f6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/iset_d.c +++ /dev/null @@ -1,42 +0,0 @@ -/* mpf_init_set_d -- Initialize a float and assign it from a double. - -Copyright 1993-1995, 2000, 2001, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_init_set_d (mpf_ptr r, double val) -{ - mp_size_t prec = __gmp_default_fp_limb_precision; - r->_mp_prec = prec; - r->_mp_d = __GMP_ALLOCATE_FUNC_LIMBS (prec + 1); - - mpf_set_d (r, val); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/iset_si.c b/src/plugins/e-acsl/contrib/libgmp/mpf/iset_si.c deleted file mode 100644 index 179f80c91511b46533cbed3c644cc0c6a3ea9247..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/iset_si.c +++ /dev/null @@ -1,58 +0,0 @@ -/* mpf_init_set_si() -- Initialize a float and assign it from a signed int. - -Copyright 1993-1995, 2000, 2001, 2003, 2004, 2012 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_init_set_si (mpf_ptr r, long int val) -{ - mp_size_t prec = __gmp_default_fp_limb_precision; - mp_size_t size; - mp_limb_t vl; - - r->_mp_prec = prec; - r->_mp_d = __GMP_ALLOCATE_FUNC_LIMBS (prec + 1); - - vl = (mp_limb_t) ABS_CAST (unsigned long int, val); - - r->_mp_d[0] = vl & GMP_NUMB_MASK; - size = vl != 0; - -#if BITS_PER_ULONG > GMP_NUMB_BITS - vl >>= GMP_NUMB_BITS; - r->_mp_d[1] = vl; - size += (vl != 0); -#endif - - r->_mp_exp = size; - r->_mp_size = val >= 0 ? size : -size; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/iset_str.c b/src/plugins/e-acsl/contrib/libgmp/mpf/iset_str.c deleted file mode 100644 index 5cb429176856f4e38e0e7d6d0026d2c2a2516546..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/iset_str.c +++ /dev/null @@ -1,44 +0,0 @@ -/* mpf_init_set_str -- Initialize a float and assign it from a string. - -Copyright 1995, 1996, 2000, 2001, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -mpf_init_set_str (mpf_ptr r, const char *s, int base) -{ - mp_size_t prec = __gmp_default_fp_limb_precision; - r->_mp_size = 0; - r->_mp_exp = 0; - r->_mp_prec = prec; - r->_mp_d = __GMP_ALLOCATE_FUNC_LIMBS (prec + 1); - - return mpf_set_str (r, s, base); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/iset_ui.c b/src/plugins/e-acsl/contrib/libgmp/mpf/iset_ui.c deleted file mode 100644 index 3f48cbd685cd66549f6965e80c0049f5d411c5e6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/iset_ui.c +++ /dev/null @@ -1,53 +0,0 @@ -/* mpf_init_set_ui() -- Initialize a float and assign it from an unsigned int. - -Copyright 1993-1995, 2000, 2001, 2003, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_init_set_ui (mpf_ptr r, unsigned long int val) -{ - mp_size_t prec = __gmp_default_fp_limb_precision; - mp_size_t size; - - r->_mp_prec = prec; - r->_mp_d = __GMP_ALLOCATE_FUNC_LIMBS (prec + 1); - r->_mp_d[0] = val & GMP_NUMB_MASK; - size = (val != 0); - -#if BITS_PER_ULONG > GMP_NUMB_BITS - val >>= GMP_NUMB_BITS; - r->_mp_d[1] = val; - size += (val != 0); -#endif - - r->_mp_size = size; - r->_mp_exp = size; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/mul.c b/src/plugins/e-acsl/contrib/libgmp/mpf/mul.c deleted file mode 100644 index 5bde28c4b2f6497a5c44a712905fa7e630894266..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/mul.c +++ /dev/null @@ -1,97 +0,0 @@ -/* mpf_mul -- Multiply two floats. - -Copyright 1993, 1994, 1996, 2001, 2005 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_mul (mpf_ptr r, mpf_srcptr u, mpf_srcptr v) -{ - mp_srcptr up, vp; - mp_size_t usize, vsize; - mp_size_t sign_product; - mp_size_t prec = r->_mp_prec; - - usize = u->_mp_size; - vsize = v->_mp_size; - sign_product = usize ^ vsize; - - usize = ABS (usize); - vsize = ABS (vsize); - - up = u->_mp_d; - vp = v->_mp_d; - if (usize > prec) - { - up += usize - prec; - usize = prec; - } - if (vsize > prec) - { - vp += vsize - prec; - vsize = prec; - } - - if (usize == 0 || vsize == 0) - { - r->_mp_size = 0; - r->_mp_exp = 0; /* ??? */ - } - else - { - mp_size_t rsize; - mp_limb_t cy_limb; - mp_ptr rp, tp; - mp_size_t adj; - TMP_DECL; - - TMP_MARK; - rsize = usize + vsize; - tp = TMP_ALLOC_LIMBS (rsize); - cy_limb = (usize >= vsize - ? mpn_mul (tp, up, usize, vp, vsize) - : mpn_mul (tp, vp, vsize, up, usize)); - - adj = cy_limb == 0; - rsize -= adj; - prec++; - if (rsize > prec) - { - tp += rsize - prec; - rsize = prec; - } - rp = r->_mp_d; - MPN_COPY (rp, tp, rsize); - r->_mp_exp = u->_mp_exp + v->_mp_exp - adj; - r->_mp_size = sign_product >= 0 ? rsize : -rsize; - - TMP_FREE; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/mul_2exp.c b/src/plugins/e-acsl/contrib/libgmp/mpf/mul_2exp.c deleted file mode 100644 index 83df2176d3b6fbb4e0f96ff52422de59d820b701..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/mul_2exp.c +++ /dev/null @@ -1,133 +0,0 @@ -/* mpf_mul_2exp -- Multiply a float by 2^n. - -Copyright 1993, 1994, 1996, 2000-2002, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Multiples of GMP_NUMB_BITS in exp simply mean an amount added to EXP(u) - to set EXP(r). The remainder exp%GMP_NUMB_BITS is then a left shift for - the limb data. - - If exp%GMP_NUMB_BITS == 0 then there's no shifting, we effectively just - do an mpz_set with changed EXP(r). Like mpz_set we take prec+1 limbs in - this case. Although just prec would suffice, it's nice to have - mpf_mul_2exp with exp==0 come out the same as mpz_set. - - When shifting we take up to prec many limbs from the input. Our shift is - cy = mpn_lshift (PTR(r), PTR(u)+k, size, ...), where k is the number of - low limbs dropped from u, and the carry out is stored to PTR(r)[size]. - - It may be noted that the low limb PTR(r)[0] doesn't incorporate bits from - PTR(u)[k-1] (when k>=1 makes that limb available). Taking just prec - limbs from the input (with the high non-zero) is enough bits for the - application requested precision, there's no need for extra work. - - If r==u the shift will have overlapping operands. When k==0 (ie. when - usize <= prec), the overlap is supported by lshift (ie. dst == src). - - But when r==u and k>=1 (ie. usize > prec), we would have an invalid - overlap (ie. mpn_lshift (rp, rp+k, ...)). In this case we must instead - use mpn_rshift (PTR(r)+1, PTR(u)+k, size, NUMB-shift) with the carry out - stored to PTR(r)[0]. An rshift by NUMB-shift bits like this gives - identical data, it's just its overlap restrictions which differ. - - Enhancements: - - The way mpn_lshift is used means successive mpf_mul_2exp calls on the - same operand will accumulate low zero limbs, until prec+1 limbs is - reached. This is wasteful for subsequent operations. When abs_usize <= - prec, we should test the low exp%GMP_NUMB_BITS many bits of PTR(u)[0], - ie. those which would be shifted out by an mpn_rshift. If they're zero - then use that mpn_rshift. */ - -void -mpf_mul_2exp (mpf_ptr r, mpf_srcptr u, mp_bitcnt_t exp) -{ - mp_srcptr up; - mp_ptr rp = r->_mp_d; - mp_size_t usize; - mp_size_t abs_usize; - mp_size_t prec = r->_mp_prec; - mp_exp_t uexp = u->_mp_exp; - - usize = u->_mp_size; - - if (UNLIKELY (usize == 0)) - { - r->_mp_size = 0; - r->_mp_exp = 0; - return; - } - - abs_usize = ABS (usize); - up = u->_mp_d; - - if (exp % GMP_NUMB_BITS == 0) - { - prec++; /* retain more precision here as we don't need - to account for carry-out here */ - if (abs_usize > prec) - { - up += abs_usize - prec; - abs_usize = prec; - } - if (rp != up) - MPN_COPY_INCR (rp, up, abs_usize); - r->_mp_exp = uexp + exp / GMP_NUMB_BITS; - } - else - { - mp_limb_t cy_limb; - mp_size_t adj; - if (abs_usize > prec) - { - up += abs_usize - prec; - abs_usize = prec; - /* Use mpn_rshift since mpn_lshift operates downwards, and we - therefore would clobber part of U before using that part, in case - R is the same variable as U. */ - cy_limb = mpn_rshift (rp + 1, up, abs_usize, - GMP_NUMB_BITS - exp % GMP_NUMB_BITS); - rp[0] = cy_limb; - adj = rp[abs_usize] != 0; - } - else - { - cy_limb = mpn_lshift (rp, up, abs_usize, exp % GMP_NUMB_BITS); - rp[abs_usize] = cy_limb; - adj = cy_limb != 0; - } - - abs_usize += adj; - r->_mp_exp = uexp + exp / GMP_NUMB_BITS + adj; - } - r->_mp_size = usize >= 0 ? abs_usize : -abs_usize; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/mul_ui.c b/src/plugins/e-acsl/contrib/libgmp/mpf/mul_ui.c deleted file mode 100644 index 031b2fe06fea8d328c0dd221343cc7d7baba2a55..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/mul_ui.c +++ /dev/null @@ -1,182 +0,0 @@ -/* mpf_mul_ui -- Multiply a float and an unsigned integer. - -Copyright 1993, 1994, 1996, 2001, 2003, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* The core operation is a multiply of PREC(r) limbs from u by v, producing - either PREC(r) or PREC(r)+1 result limbs. If u is shorter than PREC(r), - then we take only as much as it has. If u is longer we incorporate a - carry from the lower limbs. - - If u has just 1 extra limb, then the carry to add is high(up[0]*v). That - is of course what mpn_mul_1 would do if it was called with PREC(r)+1 - limbs of input. - - If u has more than 1 extra limb, then there can be a further carry bit - out of lower uncalculated limbs (the way the low of one product adds to - the high of the product below it). This is of course what an mpn_mul_1 - would do if it was called with the full u operand. But we instead work - downwards explicitly, until a carry occurs or until a value other than - GMP_NUMB_MAX occurs (that being the only value a carry bit can propagate - across). - - The carry determination normally requires two umul_ppmm's, only rarely - will GMP_NUMB_MAX occur and require further products. - - The carry limb is conveniently added into the mul_1 using mpn_mul_1c when - that function exists, otherwise a subsequent mpn_add_1 is needed. - - Clearly when mpn_mul_1c is used the carry must be calculated first. But - this is also the case when add_1 is used, since if r==u and ABSIZ(r) > - PREC(r) then the mpn_mul_1 overwrites the low part of the input. - - A reuse r==u with size > prec can occur from a size PREC(r)+1 in the - usual way, or it can occur from an mpf_set_prec_raw leaving a bigger - sized value. In both cases we can end up calling mpn_mul_1 with - overlapping src and dst regions, but this will be with dst < src and such - an overlap is permitted. - - Not done: - - No attempt is made to determine in advance whether the result will be - PREC(r) or PREC(r)+1 limbs. If it's going to be PREC(r)+1 then we could - take one less limb from u and generate just PREC(r), that of course - satisfying application requested precision. But any test counting bits - or forming the high product would almost certainly take longer than the - incremental cost of an extra limb in mpn_mul_1. - - Enhancements: - - Repeated mpf_mul_ui's with an even v will accumulate low zero bits on the - result, leaving low zero limbs after a while, which it might be nice to - strip to save work in subsequent operations. Calculating the low limb - explicitly would let us direct mpn_mul_1 to put the balance at rp when - the low is zero (instead of normally rp+1). But it's not clear whether - this would be worthwhile. Explicit code for the low limb will probably - be slower than having it done in mpn_mul_1, so we need to consider how - often a zero will be stripped and how much that's likely to save - later. */ - -void -mpf_mul_ui (mpf_ptr r, mpf_srcptr u, unsigned long int v) -{ - mp_srcptr up; - mp_size_t usize; - mp_size_t size; - mp_size_t prec, excess; - mp_limb_t cy_limb, vl, cbit, cin; - mp_ptr rp; - - usize = u->_mp_size; - if (UNLIKELY (v == 0) || UNLIKELY (usize == 0)) - { - r->_mp_size = 0; - r->_mp_exp = 0; - return; - } - -#if BITS_PER_ULONG > GMP_NUMB_BITS /* avoid warnings about shift amount */ - if (v > GMP_NUMB_MAX) - { - mpf_t vf; - mp_limb_t vp[2]; - vp[0] = v & GMP_NUMB_MASK; - vp[1] = v >> GMP_NUMB_BITS; - PTR(vf) = vp; - SIZ(vf) = 2; - ASSERT_CODE (PREC(vf) = 2); - EXP(vf) = 2; - mpf_mul (r, u, vf); - return; - } -#endif - - size = ABS (usize); - prec = r->_mp_prec; - up = u->_mp_d; - vl = v; - excess = size - prec; - cin = 0; - - if (excess > 0) - { - /* up is bigger than desired rp, shorten it to prec limbs and - determine a carry-in */ - - mp_limb_t vl_shifted = vl << GMP_NAIL_BITS; - mp_limb_t hi, lo, next_lo, sum; - mp_size_t i; - - /* high limb of top product */ - i = excess - 1; - umul_ppmm (cin, lo, up[i], vl_shifted); - - /* and carry bit out of products below that, if any */ - for (;;) - { - i--; - if (i < 0) - break; - - umul_ppmm (hi, next_lo, up[i], vl_shifted); - lo >>= GMP_NAIL_BITS; - ADDC_LIMB (cbit, sum, hi, lo); - cin += cbit; - lo = next_lo; - - /* Continue only if the sum is GMP_NUMB_MAX. GMP_NUMB_MAX is the - only value a carry from below can propagate across. If we've - just seen the carry out (ie. cbit!=0) then sum!=GMP_NUMB_MAX, - so this test stops us for that case too. */ - if (LIKELY (sum != GMP_NUMB_MAX)) - break; - } - - up += excess; - size = prec; - } - - rp = r->_mp_d; -#if HAVE_NATIVE_mpn_mul_1c - cy_limb = mpn_mul_1c (rp, up, size, vl, cin); -#else - cy_limb = mpn_mul_1 (rp, up, size, vl); - __GMPN_ADD_1 (cbit, rp, rp, size, cin); - cy_limb += cbit; -#endif - rp[size] = cy_limb; - cy_limb = cy_limb != 0; - r->_mp_exp = u->_mp_exp + cy_limb; - size += cy_limb; - r->_mp_size = usize >= 0 ? size : -size; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/neg.c b/src/plugins/e-acsl/contrib/libgmp/mpf/neg.c deleted file mode 100644 index 553018f306a99294037335baecfba88180a04523..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/neg.c +++ /dev/null @@ -1,62 +0,0 @@ -/* mpf_neg -- Negate a float. - -Copyright 1993-1995, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_neg (mpf_ptr r, mpf_srcptr u) -{ - mp_size_t size; - - size = -u->_mp_size; - if (r != u) - { - mp_size_t prec; - mp_size_t asize; - mp_ptr rp, up; - - prec = r->_mp_prec + 1; /* lie not to lose precision in assignment */ - asize = ABS (size); - rp = r->_mp_d; - up = u->_mp_d; - - if (asize > prec) - { - up += asize - prec; - asize = prec; - } - - MPN_COPY (rp, up, asize); - r->_mp_exp = u->_mp_exp; - size = size >= 0 ? asize : -asize; - } - r->_mp_size = size; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/out_str.c b/src/plugins/e-acsl/contrib/libgmp/mpf/out_str.c deleted file mode 100644 index 200da7480637bb8d6ff2ec6580edcb95cb2a2736..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/out_str.c +++ /dev/null @@ -1,117 +0,0 @@ -/* mpf_out_str (stream, base, n_digits, op) -- Print N_DIGITS digits from - the float OP to STREAM in base BASE. Return the number of characters - written, or 0 if an error occurred. - -Copyright 1996, 1997, 2001, 2002, 2005, 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define _GNU_SOURCE /* for DECIMAL_POINT in langinfo.h */ - -#include "config.h" - -#include <stdio.h> -#include <string.h> - -#if HAVE_LANGINFO_H -#include <langinfo.h> /* for nl_langinfo */ -#endif - -#if HAVE_LOCALE_H -#include <locale.h> /* for localeconv */ -#endif - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -size_t -mpf_out_str (FILE *stream, int base, size_t n_digits, mpf_srcptr op) -{ - char *str; - mp_exp_t exp; - size_t written; - TMP_DECL; - - TMP_MARK; - - if (base == 0) - base = 10; - if (n_digits == 0) - MPF_SIGNIFICANT_DIGITS (n_digits, base, op->_mp_prec); - - if (stream == 0) - stream = stdout; - - /* Consider these changes: - * Don't allocate memory here for huge n_digits; pass NULL to mpf_get_str. - * Make mpf_get_str allocate extra space when passed NULL, to avoid - allocating two huge string buffers. - * Implement more/other allocation reductions tricks. */ - - str = (char *) TMP_ALLOC (n_digits + 2); /* extra for minus sign and \0 */ - - mpf_get_str (str, &exp, base, n_digits, op); - n_digits = strlen (str); - - written = 0; - - /* Write sign */ - if (str[0] == '-') - { - str++; - fputc ('-', stream); - written = 1; - n_digits--; - } - - { - const char *point = GMP_DECIMAL_POINT; - size_t pointlen = strlen (point); - putc ('0', stream); - fwrite (point, 1, pointlen, stream); - written += pointlen + 1; - } - - /* Write mantissa */ - { - size_t fwret; - fwret = fwrite (str, 1, n_digits, stream); - written += fwret; - } - - /* Write exponent */ - { - int fpret; - fpret = fprintf (stream, (base <= 10 ? "e%ld" : "@%ld"), exp); - written += fpret; - } - - TMP_FREE; - return ferror (stream) ? 0 : written; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/pow_ui.c b/src/plugins/e-acsl/contrib/libgmp/mpf/pow_ui.c deleted file mode 100644 index 6d0528bedb20162425b208bab369670c4ca9d99f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/pow_ui.c +++ /dev/null @@ -1,84 +0,0 @@ -/* mpf_pow_ui -- Compute b^e. - -Copyright 1998, 1999, 2001, 2012, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* This uses a plain right-to-left square-and-multiply algorithm. - - FIXME: When popcount(e) is not too small, it would probably speed things up - to use a k-ary sliding window algorithm. */ - -void -mpf_pow_ui (mpf_ptr r, mpf_srcptr b, unsigned long int e) -{ - mpf_t t; - int cnt; - - if (e <= 1) - { - if (e == 0) - mpf_set_ui (r, 1); - else - mpf_set (r, b); - return; - } - - count_leading_zeros (cnt, (mp_limb_t) e); - cnt = GMP_LIMB_BITS - 1 - cnt; - - /* Increase computation precision as a function of the exponent. Adding - log2(popcount(e) + log2(e)) bits should be sufficient, but we add log2(e), - i.e. much more. With mpf's rounding of precision to whole limbs, this - will be excessive only when limbs are artificially small. */ - mpf_init2 (t, mpf_get_prec (r) + cnt); - - mpf_set (t, b); /* consume most significant bit */ - while (--cnt > 0) - { - mpf_mul (t, t, t); - if ((e >> cnt) & 1) - mpf_mul (t, t, b); - } - - /* Do the last iteration specially in order to save a copy operation. */ - if (e & 1) - { - mpf_mul (t, t, t); - mpf_mul (r, t, b); - } - else - { - mpf_mul (r, t, t); - } - - mpf_clear (t); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/random2.c b/src/plugins/e-acsl/contrib/libgmp/mpf/random2.c deleted file mode 100644 index 4d7f37e976dcd76af05c2f780a1fd16a9bfdf097..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/random2.c +++ /dev/null @@ -1,67 +0,0 @@ -/* mpf_random2 -- Generate a positive random mpf_t of specified size, with - long runs of consecutive ones and zeros in the binary representation. - Intended for testing of other MP routines. - -Copyright 1995, 1996, 2001-2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -void -mpf_random2 (mpf_ptr x, mp_size_t xs, mp_exp_t exp) -{ - mp_size_t xn; - mp_size_t prec; - mp_limb_t elimb; - - xn = ABS (xs); - prec = PREC(x); - - if (xn == 0) - { - EXP(x) = 0; - SIZ(x) = 0; - return; - } - - if (xn > prec + 1) - xn = prec + 1; - - /* General random mantissa. */ - mpn_random2 (PTR(x), xn); - - /* Generate random exponent. */ - _gmp_rand (&elimb, RANDS, GMP_NUMB_BITS); - exp = ABS (exp); - exp = elimb % (2 * exp + 1) - exp; - - EXP(x) = exp; - SIZ(x) = xs < 0 ? -xn : xn; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/reldiff.c b/src/plugins/e-acsl/contrib/libgmp/mpf/reldiff.c deleted file mode 100644 index f49da081665cc0b4609e42c30599e79c8e01735a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/reldiff.c +++ /dev/null @@ -1,65 +0,0 @@ -/* mpf_reldiff -- Generate the relative difference of two floats. - -Copyright 1996, 2001, 2004, 2005 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* The precision we use for d = x-y is based on what mpf_div will want from - the dividend. It calls mpn_div_q to produce a quotient of rprec+1 limbs. - So rprec+1 == dsize - xsize + 1, hence dprec = rprec+xsize. */ - -void -mpf_reldiff (mpf_t rdiff, mpf_srcptr x, mpf_srcptr y) -{ - if (UNLIKELY (SIZ(x) == 0)) - { - mpf_set_ui (rdiff, (unsigned long int) (mpf_sgn (y) != 0)); - } - else - { - mp_size_t dprec; - mpf_t d; - TMP_DECL; - - TMP_MARK; - dprec = PREC(rdiff) + ABSIZ(x); - ASSERT (PREC(rdiff)+1 == dprec - ABSIZ(x) + 1); - - PREC(d) = dprec; - PTR(d) = TMP_ALLOC_LIMBS (dprec + 1); - - mpf_sub (d, x, y); - SIZ(d) = ABSIZ(d); - mpf_div (rdiff, d, x); - - TMP_FREE; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/set.c b/src/plugins/e-acsl/contrib/libgmp/mpf/set.c deleted file mode 100644 index ec8161d779f4cd491124223856c0ba14cab1c813..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/set.c +++ /dev/null @@ -1,56 +0,0 @@ -/* mpf_set -- Assign a float from another float. - -Copyright 1993-1995, 2001, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_set (mpf_ptr r, mpf_srcptr u) -{ - mp_ptr rp, up; - mp_size_t size, asize; - mp_size_t prec; - - prec = r->_mp_prec + 1; /* lie not to lose precision in assignment */ - size = u->_mp_size; - asize = ABS (size); - rp = r->_mp_d; - up = u->_mp_d; - - if (asize > prec) - { - up += asize - prec; - asize = prec; - } - - r->_mp_exp = u->_mp_exp; - r->_mp_size = size >= 0 ? asize : -asize; - MPN_COPY_INCR (rp, up, asize); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/set_d.c b/src/plugins/e-acsl/contrib/libgmp/mpf/set_d.c deleted file mode 100644 index 100194d116752391b946de03b234d22b5f7b35f2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/set_d.c +++ /dev/null @@ -1,60 +0,0 @@ -/* mpf_set_d -- Assign a float from a double. - -Copyright 1993-1996, 2001, 2003, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "config.h" - -#if HAVE_FLOAT_H -#include <float.h> /* for DBL_MAX */ -#endif - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_set_d (mpf_ptr r, double d) -{ - int negative; - - DOUBLE_NAN_INF_ACTION (d, - __gmp_invalid_operation (), - __gmp_invalid_operation ()); - - if (UNLIKELY (d == 0)) - { - SIZ(r) = 0; - EXP(r) = 0; - return; - } - negative = d < 0; - d = ABS (d); - - SIZ(r) = negative ? -LIMBS_PER_DOUBLE : LIMBS_PER_DOUBLE; - EXP(r) = __gmp_extract_double (PTR(r), d); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/set_dfl_prec.c b/src/plugins/e-acsl/contrib/libgmp/mpf/set_dfl_prec.c deleted file mode 100644 index 04c9a5513544a241f0427bbf3c6d675e33fb43bf..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/set_dfl_prec.c +++ /dev/null @@ -1,40 +0,0 @@ -/* mpf_set_default_prec -- - -Copyright 1993-1995, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -mp_size_t __gmp_default_fp_limb_precision = __GMPF_BITS_TO_PREC (53); - -void -mpf_set_default_prec (mp_bitcnt_t prec_in_bits) __GMP_NOTHROW -{ - __gmp_default_fp_limb_precision = __GMPF_BITS_TO_PREC (prec_in_bits); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/set_prc.c b/src/plugins/e-acsl/contrib/libgmp/mpf/set_prc.c deleted file mode 100644 index 30ba06c6e657286a01e6d69c54e105c78a803a5b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/set_prc.c +++ /dev/null @@ -1,69 +0,0 @@ -/* mpf_set_prec(x) -- Change the precision of x. - -Copyright 1993-1995, 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* A full new_prec+1 limbs are always retained, even though just new_prec - would satisfy the requested precision. If size==new_prec+1 then - certainly new_prec+1 should be kept since no copying is needed in that - case. If just new_prec was kept for size>new_prec+1 it'd be a bit - inconsistent. */ - -void -mpf_set_prec (mpf_ptr x, mp_bitcnt_t new_prec_in_bits) -{ - mp_size_t old_prec, new_prec, new_prec_plus1; - mp_size_t size, sign; - mp_ptr xp; - - new_prec = __GMPF_BITS_TO_PREC (new_prec_in_bits); - old_prec = PREC(x); - - /* do nothing if already the right precision */ - if (new_prec == old_prec) - return; - - PREC(x) = new_prec; - new_prec_plus1 = new_prec + 1; - - /* retain most significant limbs */ - sign = SIZ(x); - size = ABS (sign); - xp = PTR(x); - if (size > new_prec_plus1) - { - SIZ(x) = (sign >= 0 ? new_prec_plus1 : -new_prec_plus1); - MPN_COPY_INCR (xp, xp + size - new_prec_plus1, new_prec_plus1); - } - - PTR(x) = __GMP_REALLOCATE_FUNC_LIMBS (xp, old_prec+1, new_prec_plus1); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/set_prc_raw.c b/src/plugins/e-acsl/contrib/libgmp/mpf/set_prc_raw.c deleted file mode 100644 index 779944229948b5daa2bb6d71891a0d2a388591a6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/set_prc_raw.c +++ /dev/null @@ -1,40 +0,0 @@ -/* mpf_set_prec_raw(x,bits) -- Change the precision of x without changing - allocation. For proper operation, the original precision need to be reset - sooner or later. - -Copyright 1996, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_set_prec_raw (mpf_ptr x, mp_bitcnt_t prec_in_bits) __GMP_NOTHROW -{ - x->_mp_prec = __GMPF_BITS_TO_PREC (prec_in_bits); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/set_q.c b/src/plugins/e-acsl/contrib/libgmp/mpf/set_q.c deleted file mode 100644 index c5739b2abecea4105b6e09db0f87452cb06c050d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/set_q.c +++ /dev/null @@ -1,155 +0,0 @@ -/* mpf_set_q (mpf_t rop, mpq_t op) -- Convert the rational op to the float rop. - -Copyright 1996, 1999, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* As usual the aim is to produce PREC(r) limbs, with the high non-zero. - The basic mpn_tdiv_qr produces a quotient of nsize-dsize+1 limbs, with - either the high or second highest limb non-zero. We arrange for - nsize-dsize+1 to equal prec+1, hence giving either prec or prec+1 result - limbs at PTR(r). - - nsize-dsize+1 == prec+1 is achieved by adjusting num(q), either dropping - low limbs if it's too big, or padding with low zeros if it's too small. - The full given den(q) is always used. - - We cannot truncate den(q), because even when it's much bigger than prec - the last limbs can still influence the final quotient. Often they don't, - but we leave optimization of that to a prospective quotient-only mpn - division. - - Not done: - - If den(q) is a power of 2 then we may end up with low zero limbs on the - result. But nothing is done about this, since it should be unlikely on - random data, and can be left to an application to call mpf_div_2exp if it - might occur with any frequency. - - Enhancements: - - The high quotient limb is non-zero when high{np,dsize} >= {dp,dsize}. We - could make that comparison and use qsize==prec instead of qsize==prec+1, - to save one limb in the division. - - Future: - - If/when mpn_tdiv_qr supports its qxn parameter we can use that instead of - padding n with zeros in temporary space. - - If/when a quotient-only division exists it can be used here immediately. - remp is only to satisfy mpn_tdiv_qr, the remainder is not used. */ - -void -mpf_set_q (mpf_t r, mpq_srcptr q) -{ - mp_srcptr np, dp; - mp_size_t prec, nsize, dsize, qsize, prospective_qsize, tsize, zeros; - mp_size_t sign_quotient, high_zero; - mp_ptr qp, tp, remp; - mp_exp_t exp; - TMP_DECL; - - ASSERT (SIZ(&q->_mp_den) > 0); /* canonical q */ - - nsize = SIZ (&q->_mp_num); - dsize = SIZ (&q->_mp_den); - - if (UNLIKELY (nsize == 0)) - { - SIZ (r) = 0; - EXP (r) = 0; - return; - } - - TMP_MARK; - - prec = PREC (r); - qp = PTR (r); - - sign_quotient = nsize; - nsize = ABS (nsize); - np = PTR (&q->_mp_num); - dp = PTR (&q->_mp_den); - - prospective_qsize = nsize - dsize + 1; /* q from using given n,d sizes */ - exp = prospective_qsize; /* ie. number of integer limbs */ - qsize = prec + 1; /* desired q */ - - zeros = qsize - prospective_qsize; /* n zeros to get desired qsize */ - tsize = nsize + zeros; /* possible copy of n */ - - if (WANT_TMP_DEBUG) - { - /* separate alloc blocks, for malloc debugging */ - remp = TMP_ALLOC_LIMBS (dsize); - tp = NULL; - if (zeros > 0) - tp = TMP_ALLOC_LIMBS (tsize); - } - else - { - /* one alloc with a conditionalized size, for efficiency */ - mp_size_t size = dsize + (zeros > 0 ? tsize : 0); - remp = TMP_ALLOC_LIMBS (size); - tp = remp + dsize; - } - - if (zeros > 0) - { - /* pad n with zeros into temporary space */ - MPN_ZERO (tp, zeros); - MPN_COPY (tp+zeros, np, nsize); - np = tp; - nsize = tsize; - } - else - { - /* shorten n to get desired qsize */ - nsize += zeros; - np -= zeros; - } - - ASSERT (nsize-dsize+1 == qsize); - mpn_tdiv_qr (qp, remp, (mp_size_t) 0, np, nsize, dp, dsize); - - /* strip possible zero high limb */ - high_zero = (qp[qsize-1] == 0); - qsize -= high_zero; - exp -= high_zero; - - EXP (r) = exp; - SIZ (r) = sign_quotient >= 0 ? qsize : -qsize; - - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/set_si.c b/src/plugins/e-acsl/contrib/libgmp/mpf/set_si.c deleted file mode 100644 index 9c47c7511ffcfca3e2da5ec47b5efd3e1f40e539..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/set_si.c +++ /dev/null @@ -1,53 +0,0 @@ -/* mpf_set_si() -- Assign a float from a signed int. - -Copyright 1993-1995, 2000-2002, 2004, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_set_si (mpf_ptr dest, long val) -{ - mp_size_t size; - mp_limb_t vl; - - vl = (mp_limb_t) ABS_CAST (unsigned long int, val); - - dest->_mp_d[0] = vl & GMP_NUMB_MASK; - size = vl != 0; - -#if BITS_PER_ULONG > GMP_NUMB_BITS - vl >>= GMP_NUMB_BITS; - dest->_mp_d[1] = vl; - size += (vl != 0); -#endif - - dest->_mp_exp = size; - dest->_mp_size = val >= 0 ? size : -size; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/set_str.c b/src/plugins/e-acsl/contrib/libgmp/mpf/set_str.c deleted file mode 100644 index 9053accadeb15c0a6b937aa3ed0a4022f1b47b9e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/set_str.c +++ /dev/null @@ -1,402 +0,0 @@ -/* mpf_set_str (dest, string, base) -- Convert the string STRING - in base BASE to a float in dest. If BASE is zero, the leading characters - of STRING is used to figure out the base. - -Copyright 1993-1997, 2000-2003, 2005, 2007, 2008, 2011, 2013 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* - This still needs work, as suggested by some FIXME comments. - 1. Don't depend on superfluous mantissa digits. - 2. Allocate temp space more cleverly. - 3. Use mpn_div_q instead of mpn_lshift+mpn_divrem. -*/ - -#define _GNU_SOURCE /* for DECIMAL_POINT in langinfo.h */ - -#include "config.h" - -#include <stdlib.h> -#include <string.h> -#include <ctype.h> - -#if HAVE_LANGINFO_H -#include <langinfo.h> /* for nl_langinfo */ -#endif - -#if HAVE_LOCALE_H -#include <locale.h> /* for localeconv */ -#endif - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -#define digit_value_tab __gmp_digit_value_tab - -/* Compute base^exp and return the most significant prec limbs in rp[]. - Put the count of omitted low limbs in *ign. - Return the actual size (which might be less than prec). */ -static mp_size_t -mpn_pow_1_highpart (mp_ptr rp, mp_size_t *ignp, - mp_limb_t base, mp_exp_t exp, - mp_size_t prec, mp_ptr tp) -{ - mp_size_t ign; /* counts number of ignored low limbs in r */ - mp_size_t off; /* keeps track of offset where value starts */ - mp_ptr passed_rp = rp; - mp_size_t rn; - int cnt; - int i; - - rp[0] = base; - rn = 1; - off = 0; - ign = 0; - count_leading_zeros (cnt, exp); - for (i = GMP_LIMB_BITS - cnt - 2; i >= 0; i--) - { - mpn_sqr (tp, rp + off, rn); - rn = 2 * rn; - rn -= tp[rn - 1] == 0; - ign <<= 1; - - off = 0; - if (rn > prec) - { - ign += rn - prec; - off = rn - prec; - rn = prec; - } - MP_PTR_SWAP (rp, tp); - - if (((exp >> i) & 1) != 0) - { - mp_limb_t cy; - cy = mpn_mul_1 (rp, rp + off, rn, base); - rp[rn] = cy; - rn += cy != 0; - off = 0; - } - } - - if (rn > prec) - { - ign += rn - prec; - rp += rn - prec; - rn = prec; - } - - MPN_COPY_INCR (passed_rp, rp + off, rn); - *ignp = ign; - return rn; -} - -int -mpf_set_str (mpf_ptr x, const char *str, int base) -{ - size_t str_size; - char *s, *begs; - size_t i, j; - int c; - int negative; - char *dotpos = 0; - const char *expptr; - int exp_base; - const char *point = GMP_DECIMAL_POINT; - size_t pointlen = strlen (point); - const unsigned char *digit_value; - TMP_DECL; - - c = (unsigned char) *str; - - /* Skip whitespace. */ - while (isspace (c)) - c = (unsigned char) *++str; - - negative = 0; - if (c == '-') - { - negative = 1; - c = (unsigned char) *++str; - } - - /* Default base to decimal. */ - if (base == 0) - base = 10; - - exp_base = base; - - if (base < 0) - { - exp_base = 10; - base = -base; - } - - digit_value = digit_value_tab; - if (base > 36) - { - /* For bases > 36, use the collating sequence - 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz. */ - digit_value += 208; - if (base > 62) - return -1; /* too large base */ - } - - /* Require at least one digit, possibly after an initial decimal point. */ - if (digit_value[c] >= base) - { - /* not a digit, must be a decimal point */ - for (i = 0; i < pointlen; i++) - if (str[i] != point[i]) - return -1; - if (digit_value[(unsigned char) str[pointlen]] >= base) - return -1; - } - - /* Locate exponent part of the input. Look from the right of the string, - since the exponent is usually a lot shorter than the mantissa. */ - expptr = NULL; - str_size = strlen (str); - for (i = str_size - 1; i > 0; i--) - { - c = (unsigned char) str[i]; - if (c == '@' || (base <= 10 && (c == 'e' || c == 'E'))) - { - expptr = str + i + 1; - str_size = i; - break; - } - } - - TMP_MARK; - s = begs = (char *) TMP_ALLOC (str_size + 1); - - /* Loop through mantissa, converting it from ASCII to raw byte values. */ - for (i = 0; i < str_size; i++) - { - c = (unsigned char) *str; - if (!isspace (c)) - { - int dig; - - for (j = 0; j < pointlen; j++) - if (str[j] != point[j]) - goto not_point; - if (1) - { - if (dotpos != 0) - { - /* already saw a decimal point, another is invalid */ - TMP_FREE; - return -1; - } - dotpos = s; - str += pointlen - 1; - i += pointlen - 1; - } - else - { - not_point: - dig = digit_value[c]; - if (dig >= base) - { - TMP_FREE; - return -1; - } - *s++ = dig; - } - } - c = (unsigned char) *++str; - } - - str_size = s - begs; - - { - long exp_in_base; - mp_size_t ra, ma, rn, mn; - int cnt; - mp_ptr mp, tp, rp; - mp_exp_t exp_in_limbs; - mp_size_t prec = PREC(x) + 1; - int divflag; - mp_size_t madj, radj; - -#if 0 - size_t n_chars_needed; - - /* This breaks things like 0.000...0001. To safely ignore superfluous - digits, we need to skip over leading zeros. */ - /* Just consider the relevant leading digits of the mantissa. */ - LIMBS_PER_DIGIT_IN_BASE (n_chars_needed, prec, base); - if (str_size > n_chars_needed) - str_size = n_chars_needed; -#endif - - LIMBS_PER_DIGIT_IN_BASE (ma, str_size, base); - mp = TMP_ALLOC_LIMBS (ma); - mn = mpn_set_str (mp, (unsigned char *) begs, str_size, base); - - if (mn == 0) - { - SIZ(x) = 0; - EXP(x) = 0; - TMP_FREE; - return 0; - } - - madj = 0; - /* Ignore excess limbs in MP,MSIZE. */ - if (mn > prec) - { - madj = mn - prec; - mp += mn - prec; - mn = prec; - } - - if (expptr != 0) - { - /* Scan and convert the exponent, in base exp_base. */ - long dig, minus, plusminus; - c = (unsigned char) *expptr; - minus = -(long) (c == '-'); - plusminus = minus | -(long) (c == '+'); - expptr -= plusminus; /* conditional increment */ - c = (unsigned char) *expptr++; - dig = digit_value[c]; - if (dig >= exp_base) - { - TMP_FREE; - return -1; - } - exp_in_base = dig; - c = (unsigned char) *expptr++; - dig = digit_value[c]; - while (dig < exp_base) - { - exp_in_base = exp_in_base * exp_base; - exp_in_base += dig; - c = (unsigned char) *expptr++; - dig = digit_value[c]; - } - exp_in_base = (exp_in_base ^ minus) - minus; /* conditional negation */ - } - else - exp_in_base = 0; - if (dotpos != 0) - exp_in_base -= s - dotpos; - divflag = exp_in_base < 0; - exp_in_base = ABS (exp_in_base); - - if (exp_in_base == 0) - { - MPN_COPY (PTR(x), mp, mn); - SIZ(x) = negative ? -mn : mn; - EXP(x) = mn + madj; - TMP_FREE; - return 0; - } - - ra = 2 * (prec + 1); - rp = TMP_ALLOC_LIMBS (ra); - tp = TMP_ALLOC_LIMBS (ra); - rn = mpn_pow_1_highpart (rp, &radj, (mp_limb_t) base, exp_in_base, prec, tp); - - if (divflag) - { -#if 0 - /* FIXME: Should use mpn_div_q here. */ - ... - mpn_div_q (tp, mp, mn, rp, rn, scratch); - ... -#else - mp_ptr qp; - mp_limb_t qlimb; - if (mn < rn) - { - /* Pad out MP,MSIZE for current divrem semantics. */ - mp_ptr tmp = TMP_ALLOC_LIMBS (rn + 1); - MPN_ZERO (tmp, rn - mn); - MPN_COPY (tmp + rn - mn, mp, mn); - mp = tmp; - madj -= rn - mn; - mn = rn; - } - if ((rp[rn - 1] & GMP_NUMB_HIGHBIT) == 0) - { - mp_limb_t cy; - count_leading_zeros (cnt, rp[rn - 1]); - cnt -= GMP_NAIL_BITS; - mpn_lshift (rp, rp, rn, cnt); - cy = mpn_lshift (mp, mp, mn, cnt); - if (cy) - mp[mn++] = cy; - } - - qp = TMP_ALLOC_LIMBS (prec + 1); - qlimb = mpn_divrem (qp, prec - (mn - rn), mp, mn, rp, rn); - tp = qp; - exp_in_limbs = qlimb + (mn - rn) + (madj - radj); - rn = prec; - if (qlimb != 0) - { - tp[prec] = qlimb; - /* Skip the least significant limb not to overrun the destination - variable. */ - tp++; - } -#endif - } - else - { - tp = TMP_ALLOC_LIMBS (rn + mn); - if (rn > mn) - mpn_mul (tp, rp, rn, mp, mn); - else - mpn_mul (tp, mp, mn, rp, rn); - rn += mn; - rn -= tp[rn - 1] == 0; - exp_in_limbs = rn + madj + radj; - - if (rn > prec) - { - tp += rn - prec; - rn = prec; - exp_in_limbs += 0; - } - } - - MPN_COPY (PTR(x), tp, rn); - SIZ(x) = negative ? -rn : rn; - EXP(x) = exp_in_limbs; - TMP_FREE; - return 0; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/set_ui.c b/src/plugins/e-acsl/contrib/libgmp/mpf/set_ui.c deleted file mode 100644 index 617bce13c148ac05a8a5c34e9e6944b9c87aa6f1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/set_ui.c +++ /dev/null @@ -1,49 +0,0 @@ -/* mpf_set_ui() -- Assign a float from an unsigned int. - -Copyright 1993-1995, 2001, 2002, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_set_ui (mpf_ptr f, unsigned long val) -{ - mp_size_t size; - - f->_mp_d[0] = val & GMP_NUMB_MASK; - size = val != 0; - -#if BITS_PER_ULONG > GMP_NUMB_BITS - val >>= GMP_NUMB_BITS; - f->_mp_d[1] = val; - size += (val != 0); -#endif - - f->_mp_exp = f->_mp_size = size; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/set_z.c b/src/plugins/e-acsl/contrib/libgmp/mpf/set_z.c deleted file mode 100644 index fe91904563d04f296e4da5f75283a1842c5cbcd3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/set_z.c +++ /dev/null @@ -1,57 +0,0 @@ -/* mpf_set_z -- Assign a float from an integer. - -Copyright 1996, 2001, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_set_z (mpf_ptr r, mpz_srcptr u) -{ - mp_ptr rp, up; - mp_size_t size, asize; - mp_size_t prec; - - prec = PREC (r) + 1; - size = SIZ (u); - asize = ABS (size); - rp = PTR (r); - up = PTR (u); - - EXP (r) = asize; - - if (asize > prec) - { - up += asize - prec; - asize = prec; - } - - SIZ (r) = size >= 0 ? asize : -asize; - MPN_COPY (rp, up, asize); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/size.c b/src/plugins/e-acsl/contrib/libgmp/mpf/size.c deleted file mode 100644 index c6b22b64cc3f9a951411e2c6dcd7ac9470282243..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/size.c +++ /dev/null @@ -1,39 +0,0 @@ -/* mpf_size(x) -- return the number of limbs currently used by the - value of the float X. - -Copyright 1993-1995, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -size_t -mpf_size (mpf_srcptr f) __GMP_NOTHROW -{ - return __GMP_ABS (f->_mp_size); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/sqrt.c b/src/plugins/e-acsl/contrib/libgmp/mpf/sqrt.c deleted file mode 100644 index 44502244e24e0e47ac42d8b5da19a7705b3a0b0c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/sqrt.c +++ /dev/null @@ -1,113 +0,0 @@ -/* mpf_sqrt -- Compute the square root of a float. - -Copyright 1993, 1994, 1996, 2000, 2001, 2004, 2005, 2012 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" - - -/* As usual, the aim is to produce PREC(r) limbs of result, with the high - limb non-zero. This is accomplished by applying mpn_sqrtrem to either - 2*prec or 2*prec-1 limbs, both such sizes resulting in prec limbs. - - The choice between 2*prec or 2*prec-1 limbs is based on the input - exponent. With b=2^GMP_NUMB_BITS the limb base then we can think of - effectively taking out a factor b^(2k), for suitable k, to get to an - integer input of the desired size ready for mpn_sqrtrem. It must be an - even power taken out, ie. an even number of limbs, so the square root - gives factor b^k and the radix point is still on a limb boundary. So if - EXP(r) is even we'll get an even number of input limbs 2*prec, or if - EXP(r) is odd we get an odd number 2*prec-1. - - Further limbs below the 2*prec or 2*prec-1 used don't affect the result - and are simply truncated. This can be seen by considering an integer x, - with s=floor(sqrt(x)). s is the unique integer satisfying s^2 <= x < - (s+1)^2. Notice that adding a fraction part to x (ie. some further bits) - doesn't change the inequality, s remains the unique solution. Working - suitable factors of 2 into this argument lets it apply to an intended - precision at any position for any x, not just the integer binary point. - - If the input is smaller than 2*prec or 2*prec-1, then we just pad with - zeros, that of course being our usual interpretation of short inputs. - The effect is to extend the root beyond the size of the input (for - instance into fractional limbs if u is an integer). */ - -void -mpf_sqrt (mpf_ptr r, mpf_srcptr u) -{ - mp_size_t usize; - mp_ptr up, tp; - mp_size_t prec, tsize; - mp_exp_t uexp, expodd; - TMP_DECL; - - usize = u->_mp_size; - if (UNLIKELY (usize <= 0)) - { - if (usize < 0) - SQRT_OF_NEGATIVE; - r->_mp_size = 0; - r->_mp_exp = 0; - return; - } - - TMP_MARK; - - uexp = u->_mp_exp; - prec = r->_mp_prec; - up = u->_mp_d; - - expodd = (uexp & 1); - tsize = 2 * prec - expodd; - r->_mp_size = prec; - r->_mp_exp = (uexp + expodd) / 2; /* ceil(uexp/2) */ - - /* root size is ceil(tsize/2), this will be our desired "prec" limbs */ - ASSERT ((tsize + 1) / 2 == prec); - - tp = TMP_ALLOC_LIMBS (tsize); - - if (usize > tsize) - { - up += usize - tsize; - usize = tsize; - MPN_COPY (tp, up, tsize); - } - else - { - MPN_ZERO (tp, tsize - usize); - MPN_COPY (tp + (tsize - usize), up, usize); - } - - mpn_sqrtrem (r->_mp_d, NULL, tp, tsize); - - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/sqrt_ui.c b/src/plugins/e-acsl/contrib/libgmp/mpf/sqrt_ui.c deleted file mode 100644 index f390e2425b812d3ea4a93102c1d33348ee0bb5d0..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/sqrt_ui.c +++ /dev/null @@ -1,109 +0,0 @@ -/* mpf_sqrt_ui -- Compute the square root of an unsigned integer. - -Copyright 1993, 1994, 1996, 2000, 2001, 2004, 2005, 2015 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" - - -/* As usual the aim is to produce PREC(r) limbs of result with the high limb - non-zero. That high limb will end up floor(sqrt(u)), and limbs below are - produced by padding the input with zeros, two for each desired result - limb, being 2*(prec-1) for a total 2*prec-1 limbs passed to mpn_sqrtrem. - The way mpn_sqrtrem calculates floor(sqrt(x)) ensures the root is correct - to the intended accuracy, ie. truncated to prec limbs. - - With nails, u might be two limbs, in which case a total 2*prec limbs is - passed to mpn_sqrtrem (still giving a prec limb result). If uhigh is - zero we adjust back to 2*prec-1, since mpn_sqrtrem requires the high - non-zero. 2*prec limbs are always allocated, even when uhigh is zero, so - the store of uhigh can be done without a conditional. - - u==0 is a special case so the rest of the code can assume the result is - non-zero (ie. will have a non-zero high limb on the result). - - Not done: - - No attempt is made to identify perfect squares. It's considered this can - be left to an application if it might occur with any frequency. As it - stands, mpn_sqrtrem does its normal amount of work on a perfect square - followed by zero limbs, though of course only an mpn_sqrtrem1 would be - actually needed. We also end up leaving our mpf result with lots of low - trailing zeros, slowing down subsequent operations. - - We're not aware of any optimizations that can be made using the fact the - input has lots of trailing zeros (apart from the perfect square - case). */ - - -/* 1 if we (might) need two limbs for u */ -#define U2 (GMP_NUMB_BITS < BITS_PER_ULONG) - -void -mpf_sqrt_ui (mpf_ptr r, unsigned long int u) -{ - mp_size_t rsize, zeros; - mp_ptr tp; - mp_size_t prec; - TMP_DECL; - - if (UNLIKELY (u <= 1)) - { - SIZ (r) = EXP (r) = u; - *PTR (r) = u; - return; - } - - TMP_MARK; - - prec = PREC (r); - zeros = 2 * prec - 2; - rsize = zeros + 1 + U2; - - tp = TMP_ALLOC_LIMBS (rsize); - - MPN_ZERO (tp, zeros); - tp[zeros] = u & GMP_NUMB_MASK; - -#if U2 - { - mp_limb_t uhigh = u >> GMP_NUMB_BITS; - tp[zeros + 1] = uhigh; - rsize -= (uhigh == 0); - } -#endif - - mpn_sqrtrem (PTR (r), NULL, tp, rsize); - - SIZ (r) = prec; - EXP (r) = 1; - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/sub.c b/src/plugins/e-acsl/contrib/libgmp/mpf/sub.c deleted file mode 100644 index 5fb9ab60cb80b6abbbf96a56bb1baddacfa491ab..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/sub.c +++ /dev/null @@ -1,396 +0,0 @@ -/* mpf_sub -- Subtract two floats. - -Copyright 1993-1996, 1999-2002, 2004, 2005, 2011, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_sub (mpf_ptr r, mpf_srcptr u, mpf_srcptr v) -{ - mp_srcptr up, vp; - mp_ptr rp, tp; - mp_size_t usize, vsize, rsize; - mp_size_t prec; - mp_exp_t exp; - mp_size_t ediff; - int negate; - TMP_DECL; - - usize = SIZ (u); - vsize = SIZ (v); - - /* Handle special cases that don't work in generic code below. */ - if (usize == 0) - { - mpf_neg (r, v); - return; - } - if (vsize == 0) - { - if (r != u) - mpf_set (r, u); - return; - } - - /* If signs of U and V are different, perform addition. */ - if ((usize ^ vsize) < 0) - { - __mpf_struct v_negated; - v_negated._mp_size = -vsize; - v_negated._mp_exp = EXP (v); - v_negated._mp_d = PTR (v); - mpf_add (r, u, &v_negated); - return; - } - - TMP_MARK; - - /* Signs are now known to be the same. */ - negate = usize < 0; - - /* Make U be the operand with the largest exponent. */ - if (EXP (u) < EXP (v)) - { - mpf_srcptr t; - t = u; u = v; v = t; - negate ^= 1; - usize = SIZ (u); - vsize = SIZ (v); - } - - usize = ABS (usize); - vsize = ABS (vsize); - up = PTR (u); - vp = PTR (v); - rp = PTR (r); - prec = PREC (r) + 1; - exp = EXP (u); - ediff = exp - EXP (v); - - /* If ediff is 0 or 1, we might have a situation where the operands are - extremely close. We need to scan the operands from the most significant - end ignore the initial parts that are equal. */ - if (ediff <= 1) - { - if (ediff == 0) - { - /* Skip leading limbs in U and V that are equal. */ - /* This loop normally exits immediately. Optimize for that. */ - while (up[usize - 1] == vp[vsize - 1]) - { - usize--; - vsize--; - exp--; - - if (usize == 0) - { - /* u cancels high limbs of v, result is rest of v */ - negate ^= 1; - cancellation: - /* strip high zeros before truncating to prec */ - while (vsize != 0 && vp[vsize - 1] == 0) - { - vsize--; - exp--; - } - if (vsize > prec) - { - vp += vsize - prec; - vsize = prec; - } - MPN_COPY_INCR (rp, vp, vsize); - rsize = vsize; - goto done; - } - if (vsize == 0) - { - vp = up; - vsize = usize; - goto cancellation; - } - } - - if (up[usize - 1] < vp[vsize - 1]) - { - /* For simplicity, swap U and V. Note that since the loop above - wouldn't have exited unless up[usize - 1] and vp[vsize - 1] - were non-equal, this if-statement catches all cases where U - is smaller than V. */ - MPN_SRCPTR_SWAP (up,usize, vp,vsize); - negate ^= 1; - /* negating ediff not necessary since it is 0. */ - } - - /* Check for - x+1 00000000 ... - x ffffffff ... */ - if (up[usize - 1] != vp[vsize - 1] + 1) - goto general_case; - usize--; - vsize--; - exp--; - } - else /* ediff == 1 */ - { - /* Check for - 1 00000000 ... - 0 ffffffff ... */ - - if (up[usize - 1] != 1 || vp[vsize - 1] != GMP_NUMB_MAX - || (usize >= 2 && up[usize - 2] != 0)) - goto general_case; - - usize--; - exp--; - } - - /* Skip sequences of 00000000/ffffffff */ - while (vsize != 0 && usize != 0 && up[usize - 1] == 0 - && vp[vsize - 1] == GMP_NUMB_MAX) - { - usize--; - vsize--; - exp--; - } - - if (usize == 0) - { - while (vsize != 0 && vp[vsize - 1] == GMP_NUMB_MAX) - { - vsize--; - exp--; - } - } - else if (usize > prec - 1) - { - up += usize - (prec - 1); - usize = prec - 1; - } - if (vsize > prec - 1) - { - vp += vsize - (prec - 1); - vsize = prec - 1; - } - - tp = TMP_ALLOC_LIMBS (prec); - { - mp_limb_t cy_limb; - if (vsize == 0) - { - MPN_COPY (tp, up, usize); - tp[usize] = 1; - rsize = usize + 1; - exp++; - goto normalized; - } - if (usize == 0) - { - cy_limb = mpn_neg (tp, vp, vsize); - rsize = vsize; - } - else if (usize >= vsize) - { - /* uuuu */ - /* vv */ - mp_size_t size; - size = usize - vsize; - MPN_COPY (tp, up, size); - cy_limb = mpn_sub_n (tp + size, up + size, vp, vsize); - rsize = usize; - } - else /* (usize < vsize) */ - { - /* uuuu */ - /* vvvvvvv */ - mp_size_t size; - size = vsize - usize; - cy_limb = mpn_neg (tp, vp, size); - cy_limb = mpn_sub_nc (tp + size, up, vp + size, usize, cy_limb); - rsize = vsize; - } - if (cy_limb == 0) - { - tp[rsize] = 1; - rsize++; - exp++; - goto normalized; - } - goto normalize; - } - } - -general_case: - /* If U extends beyond PREC, ignore the part that does. */ - if (usize > prec) - { - up += usize - prec; - usize = prec; - } - - /* If V extends beyond PREC, ignore the part that does. - Note that this may make vsize negative. */ - if (vsize + ediff > prec) - { - vp += vsize + ediff - prec; - vsize = prec - ediff; - } - - if (ediff >= prec) - { - /* V completely cancelled. */ - if (rp != up) - MPN_COPY (rp, up, usize); - rsize = usize; - } - else - { - /* Allocate temp space for the result. Allocate - just vsize + ediff later??? */ - tp = TMP_ALLOC_LIMBS (prec); - - /* Locate the least significant non-zero limb in (the needed - parts of) U and V, to simplify the code below. */ - for (;;) - { - if (vsize == 0) - { - MPN_COPY (rp, up, usize); - rsize = usize; - goto done; - } - if (vp[0] != 0) - break; - vp++, vsize--; - } - for (;;) - { - if (usize == 0) - { - MPN_COPY (rp, vp, vsize); - rsize = vsize; - negate ^= 1; - goto done; - } - if (up[0] != 0) - break; - up++, usize--; - } - - /* uuuu | uuuu | uuuu | uuuu | uuuu */ - /* vvvvvvv | vv | vvvvv | v | vv */ - - if (usize > ediff) - { - /* U and V partially overlaps. */ - if (ediff == 0) - { - /* Have to compare the leading limbs of u and v - to determine whether to compute u - v or v - u. */ - if (usize >= vsize) - { - /* uuuu */ - /* vv */ - mp_size_t size; - size = usize - vsize; - MPN_COPY (tp, up, size); - mpn_sub_n (tp + size, up + size, vp, vsize); - rsize = usize; - } - else /* (usize < vsize) */ - { - /* uuuu */ - /* vvvvvvv */ - mp_size_t size; - size = vsize - usize; - ASSERT_CARRY (mpn_neg (tp, vp, size)); - mpn_sub_nc (tp + size, up, vp + size, usize, CNST_LIMB (1)); - rsize = vsize; - } - } - else - { - if (vsize + ediff <= usize) - { - /* uuuu */ - /* v */ - mp_size_t size; - size = usize - ediff - vsize; - MPN_COPY (tp, up, size); - mpn_sub (tp + size, up + size, usize - size, vp, vsize); - rsize = usize; - } - else - { - /* uuuu */ - /* vvvvv */ - mp_size_t size; - rsize = vsize + ediff; - size = rsize - usize; - ASSERT_CARRY (mpn_neg (tp, vp, size)); - mpn_sub (tp + size, up, usize, vp + size, usize - ediff); - /* Should we use sub_nc then sub_1? */ - MPN_DECR_U (tp + size, usize, CNST_LIMB (1)); - } - } - } - else - { - /* uuuu */ - /* vv */ - mp_size_t size, i; - size = vsize + ediff - usize; - ASSERT_CARRY (mpn_neg (tp, vp, vsize)); - for (i = vsize; i < size; i++) - tp[i] = GMP_NUMB_MAX; - mpn_sub_1 (tp + size, up, usize, (mp_limb_t) 1); - rsize = size + usize; - } - - normalize: - /* Full normalize. Optimize later. */ - while (rsize != 0 && tp[rsize - 1] == 0) - { - rsize--; - exp--; - } - normalized: - MPN_COPY (rp, tp, rsize); - } - - done: - TMP_FREE; - if (rsize == 0) { - SIZ (r) = 0; - EXP (r) = 0; - } else { - SIZ (r) = negate ? -rsize : rsize; - EXP (r) = exp; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/sub_ui.c b/src/plugins/e-acsl/contrib/libgmp/mpf/sub_ui.c deleted file mode 100644 index cf9b88eb004e69e9bcb34eb288de30371d8b125c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/sub_ui.c +++ /dev/null @@ -1,51 +0,0 @@ -/* mpf_sub_ui -- Subtract an unsigned integer from a float. - -Copyright 1993, 1994, 1996, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_sub_ui (mpf_ptr sum, mpf_srcptr u, unsigned long int v) -{ - __mpf_struct vv; - mp_limb_t vl; - - if (v == 0) - { - mpf_set (sum, u); - return; - } - - vl = v; - vv._mp_size = 1; - vv._mp_d = &vl; - vv._mp_exp = 1; - mpf_sub (sum, u, &vv); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/swap.c b/src/plugins/e-acsl/contrib/libgmp/mpf/swap.c deleted file mode 100644 index a370652876386e774a607aed4ebe3d7b571af5ac..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/swap.c +++ /dev/null @@ -1,57 +0,0 @@ -/* mpf_swap (U, V) -- Swap U and V. - -Copyright 1997, 1998, 2000, 2001, 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_swap (mpf_ptr u, mpf_ptr v) __GMP_NOTHROW -{ - mp_ptr tptr; - mp_size_t tprec; - mp_size_t tsiz; - mp_exp_t texp; - - tprec = PREC(u); - PREC(u) = PREC(v); - PREC(v) = tprec; - - tsiz = SIZ(u); - SIZ(u) = SIZ(v); - SIZ(v) = tsiz; - - texp = EXP(u); - EXP(u) = EXP(v); - EXP(v) = texp; - - tptr = PTR(u); - PTR(u) = PTR(v); - PTR(v) = tptr; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/trunc.c b/src/plugins/e-acsl/contrib/libgmp/mpf/trunc.c deleted file mode 100644 index 5f94f7aec85cc73f2bd05f11cf6df6aa743fbe79..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/trunc.c +++ /dev/null @@ -1,75 +0,0 @@ -/* mpf_trunc -- truncate an mpf to an integer. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Notice the use of prec+1 ensures mpf_trunc is equivalent to mpf_set if u - is already an integer. */ - -void -mpf_trunc (mpf_ptr r, mpf_srcptr u) -{ - mp_ptr rp; - mp_srcptr up; - mp_size_t size, asize, prec; - mp_exp_t exp; - - exp = EXP(u); - size = SIZ(u); - if (size == 0 || exp <= 0) - { - /* u is only a fraction */ - SIZ(r) = 0; - EXP(r) = 0; - return; - } - - up = PTR(u); - EXP(r) = exp; - asize = ABS (size); - up += asize; - - /* skip fraction part of u */ - asize = MIN (asize, exp); - - /* don't lose precision in the copy */ - prec = PREC(r) + 1; - - /* skip excess over target precision */ - asize = MIN (asize, prec); - - up -= asize; - rp = PTR(r); - SIZ(r) = (size >= 0 ? asize : -asize); - if (rp != up) - MPN_COPY_INCR (rp, up, asize); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/ui_div.c b/src/plugins/e-acsl/contrib/libgmp/mpf/ui_div.c deleted file mode 100644 index ceb881ebcc2807ca07944d5a5a867823df5e9cd5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/ui_div.c +++ /dev/null @@ -1,128 +0,0 @@ -/* mpf_ui_div -- Divide an unsigned integer with a float. - -Copyright 1993-1996, 2000-2002, 2004, 2005, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -void -mpf_ui_div (mpf_ptr r, unsigned long int u, mpf_srcptr v) -{ - mp_srcptr vp; - mp_ptr rp, tp, remp, new_vp; - mp_size_t vsize; - mp_size_t rsize, prospective_rsize, zeros, tsize, high_zero; - mp_size_t sign_quotient; - mp_size_t prec; - mp_exp_t rexp; - TMP_DECL; - - vsize = v->_mp_size; - sign_quotient = vsize; - - if (UNLIKELY (vsize == 0)) - DIVIDE_BY_ZERO; - - if (UNLIKELY (u == 0)) - { - r->_mp_size = 0; - r->_mp_exp = 0; - return; - } - - vsize = ABS (vsize); - prec = r->_mp_prec; - - TMP_MARK; - rexp = 1 - v->_mp_exp + 1; - - rp = r->_mp_d; - vp = v->_mp_d; - - prospective_rsize = 1 - vsize + 1; /* quot from using given u,v sizes */ - rsize = prec + 1; /* desired quot size */ - - zeros = rsize - prospective_rsize; /* padding u to give rsize */ - tsize = 1 + zeros; /* u with zeros */ - - if (WANT_TMP_DEBUG) - { - /* separate alloc blocks, for malloc debugging */ - remp = TMP_ALLOC_LIMBS (vsize); - tp = TMP_ALLOC_LIMBS (tsize); - new_vp = NULL; - if (rp == vp) - new_vp = TMP_ALLOC_LIMBS (vsize); - } - else - { - /* one alloc with calculated size, for efficiency */ - mp_size_t size = vsize + tsize + (rp == vp ? vsize : 0); - remp = TMP_ALLOC_LIMBS (size); - tp = remp + vsize; - new_vp = tp + tsize; - } - - /* ensure divisor doesn't overlap quotient */ - if (rp == vp) - { - MPN_COPY (new_vp, vp, vsize); - vp = new_vp; - } - - MPN_ZERO (tp, tsize-1); - - tp[tsize - 1] = u & GMP_NUMB_MASK; -#if BITS_PER_ULONG > GMP_NUMB_BITS - if (u > GMP_NUMB_MAX) - { - /* tsize-vsize+1 == rsize, so tsize >= rsize. rsize == prec+1 >= 2, - so tsize >= 2, hence there's room for 2-limb u with nails */ - ASSERT (tsize >= 2); - tp[tsize - 1] = u >> GMP_NUMB_BITS; - tp[tsize - 2] = u & GMP_NUMB_MASK; - rexp++; - } -#endif - - ASSERT (tsize-vsize+1 == rsize); - mpn_tdiv_qr (rp, remp, (mp_size_t) 0, tp, tsize, vp, vsize); - - /* strip possible zero high limb */ - high_zero = (rp[rsize-1] == 0); - rsize -= high_zero; - rexp -= high_zero; - - r->_mp_size = sign_quotient >= 0 ? rsize : -rsize; - r->_mp_exp = rexp; - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/ui_sub.c b/src/plugins/e-acsl/contrib/libgmp/mpf/ui_sub.c deleted file mode 100644 index 710502466225644151e8012cda6012b753274dda..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/ui_sub.c +++ /dev/null @@ -1,282 +0,0 @@ -/* mpf_ui_sub -- Subtract a float from an unsigned long int. - -Copyright 1993-1996, 2001, 2002, 2005, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_ui_sub (mpf_ptr r, unsigned long int u, mpf_srcptr v) -{ -#if 1 - __mpf_struct uu; - mp_limb_t ul; - - if (u == 0) - { - mpf_neg (r, v); - return; - } - - ul = u; - uu._mp_size = 1; - uu._mp_d = &ul; - uu._mp_exp = 1; - mpf_sub (r, &uu, v); - -#else - mp_srcptr up, vp; - mp_ptr rp, tp; - mp_size_t usize, vsize, rsize; - mp_size_t prec; - mp_exp_t uexp; - mp_size_t ediff; - int negate; - mp_limb_t ulimb; - TMP_DECL; - - vsize = v->_mp_size; - - /* Handle special cases that don't work in generic code below. */ - if (u == 0) - { - mpf_neg (r, v); - return; - } - if (vsize == 0) - { - mpf_set_ui (r, u); - return; - } - - /* If signs of U and V are different, perform addition. */ - if (vsize < 0) - { - __mpf_struct v_negated; - v_negated._mp_size = -vsize; - v_negated._mp_exp = v->_mp_exp; - v_negated._mp_d = v->_mp_d; - mpf_add_ui (r, &v_negated, u); - return; - } - - /* Signs are now known to be the same. */ - ASSERT (vsize > 0); - ulimb = u; - /* Make U be the operand with the largest exponent. */ - negate = 1 < v->_mp_exp; - prec = r->_mp_prec + negate; - rp = r->_mp_d; - if (negate) - { - usize = vsize; - vsize = 1; - up = v->_mp_d; - vp = &ulimb; - uexp = v->_mp_exp; - ediff = uexp - 1; - - /* If U extends beyond PREC, ignore the part that does. */ - if (usize > prec) - { - up += usize - prec; - usize = prec; - } - ASSERT (ediff > 0); - } - else - { - vp = v->_mp_d; - ediff = 1 - v->_mp_exp; - /* Ignore leading limbs in U and V that are equal. Doing - this helps increase the precision of the result. */ - if (ediff == 0 && ulimb == vp[vsize - 1]) - { - usize = 0; - vsize--; - uexp = 0; - /* Note that V might now have leading zero limbs. - In that case we have to adjust uexp. */ - for (;;) - { - if (vsize == 0) { - rsize = 0; - uexp = 0; - goto done; - } - if ( vp[vsize - 1] != 0) - break; - vsize--, uexp--; - } - } - else - { - usize = 1; - uexp = 1; - up = &ulimb; - } - ASSERT (usize <= prec); - } - - if (ediff >= prec) - { - /* V completely cancelled. */ - if (rp != up) - MPN_COPY (rp, up, usize); - rsize = usize; - } - else - { - /* If V extends beyond PREC, ignore the part that does. - Note that this can make vsize neither zero nor negative. */ - if (vsize + ediff > prec) - { - vp += vsize + ediff - prec; - vsize = prec - ediff; - } - - /* Locate the least significant non-zero limb in (the needed - parts of) U and V, to simplify the code below. */ - ASSERT (vsize > 0); - for (;;) - { - if (vp[0] != 0) - break; - vp++, vsize--; - if (vsize == 0) - { - MPN_COPY (rp, up, usize); - rsize = usize; - goto done; - } - } - for (;;) - { - if (usize == 0) - { - MPN_COPY (rp, vp, vsize); - rsize = vsize; - negate ^= 1; - goto done; - } - if (up[0] != 0) - break; - up++, usize--; - } - - ASSERT (usize > 0 && vsize > 0); - TMP_MARK; - - tp = TMP_ALLOC_LIMBS (prec); - - /* uuuu | uuuu | uuuu | uuuu | uuuu */ - /* vvvvvvv | vv | vvvvv | v | vv */ - - if (usize > ediff) - { - /* U and V partially overlaps. */ - if (ediff == 0) - { - ASSERT (usize == 1 && vsize >= 1 && ulimb == *up); /* usize is 1>ediff, vsize >= 1 */ - if (1 < vsize) - { - /* u */ - /* vvvvvvv */ - rsize = vsize; - vsize -= 1; - /* mpn_cmp (up, vp + vsize - usize, usize) > 0 */ - if (ulimb > vp[vsize]) - { - tp[vsize] = ulimb - vp[vsize] - 1; - ASSERT_CARRY (mpn_neg (tp, vp, vsize)); - } - else - { - /* vvvvvvv */ /* Swap U and V. */ - /* u */ - MPN_COPY (tp, vp, vsize); - tp[vsize] = vp[vsize] - ulimb; - negate = 1; - } - } - else /* vsize == usize == 1 */ - { - /* u */ - /* v */ - rsize = 1; - negate = ulimb < vp[0]; - tp[0] = negate ? vp[0] - ulimb: ulimb - vp[0]; - } - } - else - { - ASSERT (vsize + ediff <= usize); - ASSERT (vsize == 1 && usize >= 2 && ulimb == *vp); - { - /* uuuu */ - /* v */ - mp_size_t size; - size = usize - ediff - 1; - MPN_COPY (tp, up, size); - ASSERT_NOCARRY (mpn_sub_1 (tp + size, up + size, usize - size, ulimb)); - rsize = usize; - } - /* Other cases are not possible */ - /* uuuu */ - /* vvvvv */ - } - } - else - { - /* uuuu */ - /* vv */ - mp_size_t size, i; - ASSERT_CARRY (mpn_neg (tp, vp, vsize)); - rsize = vsize + ediff; - size = rsize - usize; - for (i = vsize; i < size; i++) - tp[i] = GMP_NUMB_MAX; - ASSERT_NOCARRY (mpn_sub_1 (tp + size, up, usize, CNST_LIMB (1))); - } - - /* Full normalize. Optimize later. */ - while (rsize != 0 && tp[rsize - 1] == 0) - { - rsize--; - uexp--; - } - MPN_COPY (rp, tp, rsize); - TMP_FREE; - } - - done: - r->_mp_size = negate ? -rsize : rsize; - r->_mp_exp = uexp; -#endif -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpf/urandomb.c b/src/plugins/e-acsl/contrib/libgmp/mpf/urandomb.c deleted file mode 100644 index 72271e8762ad12e1bdca3f04a09eb037fd062d9c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpf/urandomb.c +++ /dev/null @@ -1,69 +0,0 @@ -/* mpf_urandomb (rop, state, nbits) -- Generate a uniform pseudorandom - real number between 0 (inclusive) and 1 (exclusive) of size NBITS, - using STATE as the random state previously initialized by a call to - gmp_randinit(). - -Copyright 1999-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpf_urandomb (mpf_t rop, gmp_randstate_t rstate, mp_bitcnt_t nbits) -{ - mp_ptr rp; - mp_size_t nlimbs; - mp_exp_t exp; - mp_size_t prec; - - rp = PTR (rop); - nlimbs = BITS_TO_LIMBS (nbits); - prec = PREC (rop); - - if (nlimbs > prec + 1 || nlimbs == 0) - { - nlimbs = prec + 1; - nbits = nlimbs * GMP_NUMB_BITS; - } - - _gmp_rand (rp, rstate, nbits); - - /* If nbits isn't a multiple of GMP_NUMB_BITS, shift up. */ - if (nbits % GMP_NUMB_BITS != 0) - mpn_lshift (rp, rp, nlimbs, GMP_NUMB_BITS - nbits % GMP_NUMB_BITS); - - exp = 0; - while (nlimbs != 0 && rp[nlimbs - 1] == 0) - { - nlimbs--; - exp--; - } - EXP (rop) = exp; - SIZ (rop) = nlimbs; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/Makeasm.am b/src/plugins/e-acsl/contrib/libgmp/mpn/Makeasm.am deleted file mode 100644 index 5d7306c221ec8d1604fe7b65e105caba252a231d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/Makeasm.am +++ /dev/null @@ -1,118 +0,0 @@ -## Automake asm file rules. - -# Copyright 1996, 1998-2002 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - - -# COMPILE minus CC. -# -COMPILE_FLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(ASMFLAGS) - -# Flags used for preprocessing (in ansi2knr rules). -# -PREPROCESS_FLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) - - -# Recent versions of automake (1.5 and up for instance) append automake -# generated suffixes to this $(SUFFIXES) list. This is essential for us, -# since .c must come after .s, .S and .asm. If .c is before .s, for -# instance, then in the mpn directory "make" will see add_n.c mentioned in -# an explicit rule (the ansi2knr stuff) and decide it must have add_n.c, -# even if add_n.c doesn't exist but add_n.s does. See GNU make -# documentation "(make)Implicit Rule Search", part 5c. -# -# On IRIX 6 native make this doesn't work properly though. Somehow .c -# remains ahead of .s, perhaps because .c.s is a builtin rule. .asm works -# fine though, and mpn/mips3 uses this. -# -SUFFIXES = .s .S .asm - - -# .s assembler, no preprocessing. -# -.s.o: - $(CCAS) $(COMPILE_FLAGS) `test -f '$<' || echo '$(srcdir)/'`$< -.s.obj: - $(CCAS) $(COMPILE_FLAGS) `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` -.s.lo: - $(LIBTOOL) --mode=compile --tag=CC $(CCAS) $(COMPILE_FLAGS) `test -f '$<' || echo '$(srcdir)/'`$< - - -# can be overridden during development, eg. "make RM_TMP=: mul_1.lo" -RM_TMP = rm -f - - -# .S assembler, preprocessed with cpp. -# -# It's necessary to run $(CPP) separately, since it seems not all compilers -# recognise .S files, in particular "cc" on HP-UX 10 and 11 doesn't (and -# will silently do nothing if given a .S). -# -# For .lo we need a helper script, as described below for .asm.lo. -# -.S.o: - $(CPP) $(PREPROCESS_FLAGS) `test -f '$<' || echo '$(srcdir)/'`$< | grep -v '^#' >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - $(RM_TMP) tmp-$*.s -.S.obj: - $(CPP) $(PREPROCESS_FLAGS) `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` | grep -v '^#' >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - $(RM_TMP) tmp-$*.s -.S.lo: - $(LIBTOOL) --mode=compile --tag=CC $(top_srcdir)/mpn/cpp-ccas --cpp="$(CPP) $(PREPROCESS_FLAGS)" $(CCAS) $(COMPILE_FLAGS) `test -f '$<' || echo '$(srcdir)/'`$< - - -# .asm assembler, preprocessed with m4. -# -# .o and .obj are non-PIC and just need m4 followed by a compile. -# -# .lo is a bit tricky. Libtool (as of version 1.5) has foo.lo as a little -# text file, and .libs/foo.o and foo.o as the PIC and non-PIC objects, -# respectively. It'd be asking for lots of trouble to try to create foo.lo -# ourselves, so instead arrange to invoke libtool like a --mode=compile, but -# with a special m4-ccas script which first m4 preprocesses, then compiles. -# --tag=CC is necessary since foo.asm is otherwise unknown to libtool. -# -# Libtool adds -DPIC when building a shared object and the .asm files look -# for that. But it should be noted that the other PIC flags are on occasion -# important too, in particular FreeBSD 2.2.8 gas 1.92.3 requires -k before -# it accepts PIC constructs like @GOT, and gcc adds that flag only under -# -fPIC. (Later versions of gas are happy to accept PIC stuff any time.) -# -.asm.o: - $(M4) -DOPERATION_$* `test -f '$<' || echo '$(srcdir)/'`$< >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - $(RM_TMP) tmp-$*.s -.asm.obj: - $(M4) -DOPERATION_$* `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - $(RM_TMP) tmp-$*.s -.asm.lo: - $(LIBTOOL) --mode=compile --tag=CC $(top_srcdir)/mpn/m4-ccas --m4="$(M4)" $(CCAS) $(COMPILE_FLAGS) `test -f '$<' || echo '$(srcdir)/'`$< diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/Makefile.am b/src/plugins/e-acsl/contrib/libgmp/mpn/Makefile.am deleted file mode 100644 index fc54483ee5fe0b9d8ab18a9e2f9441f041d65741..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/Makefile.am +++ /dev/null @@ -1,59 +0,0 @@ -## Process this file with automake to generate Makefile.in - -# Copyright 1996, 1998-2002, 2005, 2011, 2013 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - - -AM_CPPFLAGS = -D__GMP_WITHIN_GMP -I$(top_srcdir) \ - -DOPERATION_`echo $* | sed 's/_$$//'` - -OFILES = @mpn_objects@ - -noinst_LTLIBRARIES = libmpn.la -nodist_libmpn_la_SOURCES = fib_table.c mp_bases.c -libmpn_la_LIBADD = $(OFILES) -libmpn_la_DEPENDENCIES = $(OFILES) - -TARG_DIST = alpha arm arm64 cray generic ia64 lisp m68k m88k \ - minithres mips32 mips64 pa32 pa64 power powerpc32 powerpc64 \ - s390_32 s390_64 sh sparc32 sparc64 thumb vax x86 x86_64 - -EXTRA_DIST = asm-defs.m4 cpp-ccas m4-ccas $(TARG_DIST) - - -# These are BUILT_SOURCES at the top-level, so normally they're built before -# recursing into this directory. -# -fib_table.c: - cd ..; $(MAKE) $(AM_MAKEFLAGS) mpn/fib_table.c -mp_bases.c: - cd ..; $(MAKE) $(AM_MAKEFLAGS) mpn/mp_bases.c -perfsqr.h: - cd ..; $(MAKE) $(AM_MAKEFLAGS) mpn/perfsqr.h - -include Makeasm.am diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/Makefile.in b/src/plugins/e-acsl/contrib/libgmp/mpn/Makefile.in deleted file mode 100644 index b5c431076e6cda0ff39698feb667af214754789d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/Makefile.in +++ /dev/null @@ -1,772 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# Copyright 1996, 1998-2002, 2005, 2011, 2013 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - -# Copyright 1996, 1998-2002 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = mpn -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -am__DEPENDENCIES_1 = -nodist_libmpn_la_OBJECTS = fib_table.lo mp_bases.lo -libmpn_la_OBJECTS = $(nodist_libmpn_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = -am__depfiles_maybe = -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(nodist_libmpn_la_SOURCES) -DIST_SOURCES = -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makeasm.am $(srcdir)/Makefile.in README -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ABI = @ABI@ -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AS = @AS@ -ASMFLAGS = @ASMFLAGS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CALLING_CONVENTIONS_OBJS = @CALLING_CONVENTIONS_OBJS@ -CC = @CC@ -CCAS = @CCAS@ -CC_FOR_BUILD = @CC_FOR_BUILD@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPP_FOR_BUILD = @CPP_FOR_BUILD@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFN_LONG_LONG_LIMB = @DEFN_LONG_LONG_LIMB@ -DEFS = @DEFS@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ -FGREP = @FGREP@ -GMP_LDFLAGS = @GMP_LDFLAGS@ -GMP_LIMB_BITS = @GMP_LIMB_BITS@ -GMP_NAIL_BITS = @GMP_NAIL_BITS@ -GREP = @GREP@ -HAVE_CLOCK_01 = @HAVE_CLOCK_01@ -HAVE_CPUTIME_01 = @HAVE_CPUTIME_01@ -HAVE_GETRUSAGE_01 = @HAVE_GETRUSAGE_01@ -HAVE_GETTIMEOFDAY_01 = @HAVE_GETTIMEOFDAY_01@ -HAVE_HOST_CPU_FAMILY_power = @HAVE_HOST_CPU_FAMILY_power@ -HAVE_HOST_CPU_FAMILY_powerpc = @HAVE_HOST_CPU_FAMILY_powerpc@ -HAVE_SIGACTION_01 = @HAVE_SIGACTION_01@ -HAVE_SIGALTSTACK_01 = @HAVE_SIGALTSTACK_01@ -HAVE_SIGSTACK_01 = @HAVE_SIGSTACK_01@ -HAVE_STACK_T_01 = @HAVE_STACK_T_01@ -HAVE_SYS_RESOURCE_H_01 = @HAVE_SYS_RESOURCE_H_01@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBCURSES = @LIBCURSES@ -LIBGMPXX_LDFLAGS = @LIBGMPXX_LDFLAGS@ -LIBGMP_DLL = @LIBGMP_DLL@ -LIBGMP_LDFLAGS = @LIBGMP_LDFLAGS@ -LIBM = @LIBM@ -LIBM_FOR_BUILD = @LIBM_FOR_BUILD@ -LIBOBJS = @LIBOBJS@ -LIBREADLINE = @LIBREADLINE@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -M4 = @M4@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SPEED_CYCLECOUNTER_OBJ = @SPEED_CYCLECOUNTER_OBJ@ -STRIP = @STRIP@ -TAL_OBJECT = @TAL_OBJECT@ -TUNE_LIBS = @TUNE_LIBS@ -TUNE_SQR_OBJ = @TUNE_SQR_OBJ@ -U_FOR_BUILD = @U_FOR_BUILD@ -VERSION = @VERSION@ -WITH_READLINE_01 = @WITH_READLINE_01@ -YACC = @YACC@ -YFLAGS = @YFLAGS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__leading_dot = @am__leading_dot@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -gmp_srclinks = @gmp_srclinks@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -mpn_objects = @mpn_objects@ -mpn_objs_in_libgmp = @mpn_objs_in_libgmp@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AM_CPPFLAGS = -D__GMP_WITHIN_GMP -I$(top_srcdir) \ - -DOPERATION_`echo $* | sed 's/_$$//'` - -OFILES = @mpn_objects@ -noinst_LTLIBRARIES = libmpn.la -nodist_libmpn_la_SOURCES = fib_table.c mp_bases.c -libmpn_la_LIBADD = $(OFILES) -libmpn_la_DEPENDENCIES = $(OFILES) -TARG_DIST = alpha arm arm64 cray generic ia64 lisp m68k m88k \ - minithres mips32 mips64 pa32 pa64 power powerpc32 powerpc64 \ - s390_32 s390_64 sh sparc32 sparc64 thumb vax x86 x86_64 - -EXTRA_DIST = asm-defs.m4 cpp-ccas m4-ccas $(TARG_DIST) - -# COMPILE minus CC. -# -COMPILE_FLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(ASMFLAGS) - - -# Flags used for preprocessing (in ansi2knr rules). -# -PREPROCESS_FLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) - - -# Recent versions of automake (1.5 and up for instance) append automake -# generated suffixes to this $(SUFFIXES) list. This is essential for us, -# since .c must come after .s, .S and .asm. If .c is before .s, for -# instance, then in the mpn directory "make" will see add_n.c mentioned in -# an explicit rule (the ansi2knr stuff) and decide it must have add_n.c, -# even if add_n.c doesn't exist but add_n.s does. See GNU make -# documentation "(make)Implicit Rule Search", part 5c. -# -# On IRIX 6 native make this doesn't work properly though. Somehow .c -# remains ahead of .s, perhaps because .c.s is a builtin rule. .asm works -# fine though, and mpn/mips3 uses this. -# -SUFFIXES = .s .S .asm - -# can be overridden during development, eg. "make RM_TMP=: mul_1.lo" -RM_TMP = rm -f -all: all-am - -.SUFFIXES: -.SUFFIXES: .s .S .asm .c .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makeasm.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --ignore-deps mpn/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu --ignore-deps mpn/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; -$(srcdir)/Makeasm.am $(am__empty): - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libmpn.la: $(libmpn_la_OBJECTS) $(libmpn_la_DEPENDENCIES) $(EXTRA_libmpn_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libmpn_la_OBJECTS) $(libmpn_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -.c.o: - $(AM_V_CC)$(COMPILE) -c -o $@ $< - -.c.obj: - $(AM_V_CC)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: - $(AM_V_CC)$(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ - ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am - -.PRECIOUS: Makefile - - -# These are BUILT_SOURCES at the top-level, so normally they're built before -# recursing into this directory. -# -fib_table.c: - cd ..; $(MAKE) $(AM_MAKEFLAGS) mpn/fib_table.c -mp_bases.c: - cd ..; $(MAKE) $(AM_MAKEFLAGS) mpn/mp_bases.c -perfsqr.h: - cd ..; $(MAKE) $(AM_MAKEFLAGS) mpn/perfsqr.h - -# .s assembler, no preprocessing. -# -.s.o: - $(CCAS) $(COMPILE_FLAGS) `test -f '$<' || echo '$(srcdir)/'`$< -.s.obj: - $(CCAS) $(COMPILE_FLAGS) `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` -.s.lo: - $(LIBTOOL) --mode=compile --tag=CC $(CCAS) $(COMPILE_FLAGS) `test -f '$<' || echo '$(srcdir)/'`$< - -# .S assembler, preprocessed with cpp. -# -# It's necessary to run $(CPP) separately, since it seems not all compilers -# recognise .S files, in particular "cc" on HP-UX 10 and 11 doesn't (and -# will silently do nothing if given a .S). -# -# For .lo we need a helper script, as described below for .asm.lo. -# -.S.o: - $(CPP) $(PREPROCESS_FLAGS) `test -f '$<' || echo '$(srcdir)/'`$< | grep -v '^#' >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - $(RM_TMP) tmp-$*.s -.S.obj: - $(CPP) $(PREPROCESS_FLAGS) `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` | grep -v '^#' >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - $(RM_TMP) tmp-$*.s -.S.lo: - $(LIBTOOL) --mode=compile --tag=CC $(top_srcdir)/mpn/cpp-ccas --cpp="$(CPP) $(PREPROCESS_FLAGS)" $(CCAS) $(COMPILE_FLAGS) `test -f '$<' || echo '$(srcdir)/'`$< - -# .asm assembler, preprocessed with m4. -# -# .o and .obj are non-PIC and just need m4 followed by a compile. -# -# .lo is a bit tricky. Libtool (as of version 1.5) has foo.lo as a little -# text file, and .libs/foo.o and foo.o as the PIC and non-PIC objects, -# respectively. It'd be asking for lots of trouble to try to create foo.lo -# ourselves, so instead arrange to invoke libtool like a --mode=compile, but -# with a special m4-ccas script which first m4 preprocesses, then compiles. -# --tag=CC is necessary since foo.asm is otherwise unknown to libtool. -# -# Libtool adds -DPIC when building a shared object and the .asm files look -# for that. But it should be noted that the other PIC flags are on occasion -# important too, in particular FreeBSD 2.2.8 gas 1.92.3 requires -k before -# it accepts PIC constructs like @GOT, and gcc adds that flag only under -# -fPIC. (Later versions of gas are happy to accept PIC stuff any time.) -# -.asm.o: - $(M4) -DOPERATION_$* `test -f '$<' || echo '$(srcdir)/'`$< >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - $(RM_TMP) tmp-$*.s -.asm.obj: - $(M4) -DOPERATION_$* `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - $(RM_TMP) tmp-$*.s -.asm.lo: - $(LIBTOOL) --mode=compile --tag=CC $(top_srcdir)/mpn/m4-ccas --m4="$(M4)" $(CCAS) $(COMPILE_FLAGS) `test -f '$<' || echo '$(srcdir)/'`$< - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/README b/src/plugins/e-acsl/contrib/libgmp/mpn/README deleted file mode 100644 index bc046be7322ce8c056ff468fdd8657ae65f3d71f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/README +++ /dev/null @@ -1,44 +0,0 @@ -Copyright 1996, 1999 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - -This directory contains all code for the mpn layer of GMP. - -Most subdirectories contain machine-dependent code, written in assembly or C. -The `generic' subdirectory contains default code, used when there is no -machine-dependent replacement for a particular machine. - -There is one subdirectory for each ISA family. Note that e.g., 32-bit SPARC -and 64-bit SPARC are very different ISA's, and thus cannot share any code. - -A particular compile will only use code from one subdirectory, and the -`generic' subdirectory. The ISA-specific subdirectories contain hierachies of -directories for various architecture variants and implementations; the -top-most level contains code that runs correctly on all variants. diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/README b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/README deleted file mode 100644 index 09c2f040473f4abd1b8e9b7490678dcb5581ce31..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/README +++ /dev/null @@ -1,208 +0,0 @@ -Copyright 1996, 1997, 1999-2005 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - -This directory contains mpn functions optimized for DEC Alpha processors. - -ALPHA ASSEMBLY RULES AND REGULATIONS - -The `.prologue N' pseudo op marks the end of instruction that needs special -handling by unwinding. It also says whether $27 is really needed for computing -the gp. The `.mask M' pseudo op says which registers are saved on the stack, -and at what offset in the frame. - -Cray T3 code is very very different... - -"$6" / "$f6" etc is the usual syntax for registers, but on Unicos instead "r6" -/ "f6" is required. We use the "r6" / "f6" forms, and have m4 defines expand -them to "$6" or "$f6" where necessary. - -"0x" introduces a hex constant in gas and DEC as, but on Unicos "^X" is -required. The X() macro accommodates this difference. - -"cvttqc" is required by DEC as, "cvttq/c" is required by Unicos, and gas will -accept either. We use cvttqc and have an m4 define expand to cvttq/c where -necessary. - -"not" as an alias for "ornot r31, ..." is available in gas and DEC as, but not -the Unicos assembler. The full "ornot" must be used. - -"unop" is not available in Unicos. We make an m4 define to the usual "ldq_u -r31,0(r30)", and in fact use that define on all systems since it comes out the -same. - -"!literal!123" etc explicit relocations as per Tru64 4.0 are apparently not -available in older alpha assemblers (including gas prior to 2.12), according to -the GCC manual, so the assembler macro forms must be used (eg. ldgp). - - - -RELEVANT OPTIMIZATION ISSUES - -EV4 - -1. This chip has very limited store bandwidth. The on-chip L1 cache is write- - through, and a cache line is transferred from the store buffer to the off- - chip L2 in as much 15 cycles on most systems. This delay hurts mpn_add_n, - mpn_sub_n, mpn_lshift, and mpn_rshift. - -2. Pairing is possible between memory instructions and integer arithmetic - instructions. - -3. mulq and umulh are documented to have a latency of 23 cycles, but 2 of these - cycles are pipelined. Thus, multiply instructions can be issued at a rate - of one each 21st cycle. - -EV5 - -1. The memory bandwidth of this chip is good, both for loads and stores. The - L1 cache can handle two loads or one store per cycle, but two cycles after a - store, no ld can issue. - -2. mulq has a latency of 12 cycles and an issue rate of 1 each 8th cycle. - umulh has a latency of 14 cycles and an issue rate of 1 each 10th cycle. - (Note that published documentation gets these numbers slightly wrong.) - -3. mpn_add_n. With 4-fold unrolling, we need 37 instructions, whereof 12 - are memory operations. This will take at least - ceil(37/2) [dual issue] + 1 [taken branch] = 19 cycles - We have 12 memory cycles, plus 4 after-store conflict cycles, or 16 data - cache cycles, which should be completely hidden in the 19 issue cycles. - The computation is inherently serial, with these dependencies: - - ldq ldq - \ /\ - (or) addq | - |\ / \ | - | addq cmpult - \ | | - cmpult | - \ / - or - - I.e., 3 operations are needed between carry-in and carry-out, making 12 - cycles the absolute minimum for the 4 limbs. We could replace the `or' with - a cmoveq/cmovne, which could issue one cycle earlier that the `or', but that - might waste a cycle on EV4. The total depth remain unaffected, since cmov - has a latency of 2 cycles. - - addq - / \ - addq cmpult - | \ - cmpult -> cmovne - - Montgomery has a slightly different way of computing carry that requires one - less instruction, but has depth 4 (instead of the current 3). Since the code - is currently instruction issue bound, Montgomery's idea should save us 1/2 - cycle per limb, or bring us down to a total of 17 cycles or 4.25 cycles/limb. - Unfortunately, this method will not be good for the EV6. - -4. addmul_1 and friends: We previously had a scheme for splitting the single- - limb operand in 21-bits chunks and the multi-limb operand in 32-bit chunks, - and then use FP operations for every 2nd multiply, and integer operations - for every 2nd multiply. - - But it seems much better to split the single-limb operand in 16-bit chunks, - since we save many integer shifts and adds that way. See powerpc64/README - for some more details. - -EV6 - -Here we have a really parallel pipeline, capable of issuing up to 4 integer -instructions per cycle. In actual practice, it is never possible to sustain -more than 3.5 integer insns/cycle due to rename register shortage. One integer -multiply instruction can issue each cycle. To get optimal speed, we need to -pretend we are vectorizing the code, i.e., minimize the depth of recurrences. - -There are two dependencies to watch out for. 1) Address arithmetic -dependencies, and 2) carry propagation dependencies. - -We can avoid serializing due to address arithmetic by unrolling loops, so that -addresses don't depend heavily on an index variable. Avoiding serializing -because of carry propagation is trickier; the ultimate performance of the code -will be determined of the number of latency cycles it takes from accepting -carry-in to a vector point until we can generate carry-out. - -Most integer instructions can execute in either the L0, U0, L1, or U1 -pipelines. Shifts only execute in U0 and U1, and multiply only in U1. - -CMOV instructions split into two internal instructions, CMOV1 and CMOV2. CMOV -split the mapping process (see pg 2-26 in cmpwrgd.pdf), suggesting the CMOV -should always be placed as the last instruction of an aligned 4 instruction -block, or perhaps simply avoided. - -Perhaps the most important issue is the latency between the L0/U0 and L1/U1 -clusters; a result obtained on either cluster has an extra cycle of latency for -consumers in the opposite cluster. Because of the dynamic nature of the -implementation, it is hard to predict where an instruction will execute. - - - -REFERENCES - -"Alpha Architecture Handbook", version 4, Compaq, October 1998, order number -EC-QD2KC-TE. - -"Alpha 21164 Microprocessor Hardware Reference Manual", Compaq, December 1998, -order number EC-QP99C-TE. - -"Alpha 21264/EV67 Microprocessor Hardware Reference Manual", revision 1.4, -Compaq, September 2000, order number DS-0028B-TE. - -"Compiler Writer's Guide for the Alpha 21264", Compaq, June 1999, order number -EC-RJ66A-TE. - -All of the above are available online from - - http://ftp.digital.com/pub/Digital/info/semiconductor/literature/dsc-library.html - ftp://ftp.compaq.com/pub/products/alphaCPUdocs - -"Tru64 Unix Assembly Language Programmer's Guide", Compaq, March 1996, part -number AA-PS31D-TE. - -"Digital UNIX Calling Standard for Alpha Systems", Digital Equipment Corp, -March 1996, part number AA-PY8AC-TE. - -The above are available online, - - http://h30097.www3.hp.com/docs/pub_page/V40F_DOCS.HTM - -(Dunno what h30097 means in this URL, but if it moves try searching for "tru64 -online documentation" from the main www.hp.com page.) - - - ----------------- -Local variables: -mode: text -fill-column: 79 -End: diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/add_n.asm deleted file mode 100644 index bc572a57a90feb3c0b5c8d0ca68cf5e582ba4b8c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/add_n.asm +++ /dev/null @@ -1,164 +0,0 @@ -dnl Alpha mpn_add_n -- Add two limb vectors of the same length > 0 and -dnl store sum in a third limb vector. - -dnl Copyright 1995, 1999, 2000, 2005, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: ? -C EV5: 4.75 -C EV6: 3 - -dnl INPUT PARAMETERS -dnl res_ptr r16 -dnl s1_ptr r17 -dnl s2_ptr r18 -dnl size r19 - -ASM_START() -PROLOGUE(mpn_add_nc) - bis r20,r31,r25 - br L(com) -EPILOGUE() -PROLOGUE(mpn_add_n) - bis r31,r31,r25 C clear cy -L(com): subq r19,4,r19 C decr loop cnt - blt r19,$Lend2 C if less than 4 limbs, goto 2nd loop -C Start software pipeline for 1st loop - ldq r0,0(r18) - ldq r4,0(r17) - ldq r1,8(r18) - ldq r5,8(r17) - addq r17,32,r17 C update s1_ptr - addq r0,r4,r28 C 1st main add - ldq r2,16(r18) - addq r25,r28,r20 C 1st carry add - ldq r3,24(r18) - cmpult r28,r4,r8 C compute cy from last add - ldq r6,-16(r17) - cmpult r20,r28,r25 C compute cy from last add - ldq r7,-8(r17) - bis r8,r25,r25 C combine cy from the two adds - subq r19,4,r19 C decr loop cnt - addq r1,r5,r28 C 2nd main add - addq r18,32,r18 C update s2_ptr - addq r28,r25,r21 C 2nd carry add - cmpult r28,r5,r8 C compute cy from last add - blt r19,$Lend1 C if less than 4 limbs remain, jump -C 1st loop handles groups of 4 limbs in a software pipeline - ALIGN(16) -$Loop: cmpult r21,r28,r25 C compute cy from last add - ldq r0,0(r18) - bis r8,r25,r25 C combine cy from the two adds - ldq r1,8(r18) - addq r2,r6,r28 C 3rd main add - ldq r4,0(r17) - addq r28,r25,r22 C 3rd carry add - ldq r5,8(r17) - cmpult r28,r6,r8 C compute cy from last add - cmpult r22,r28,r25 C compute cy from last add - stq r20,0(r16) - bis r8,r25,r25 C combine cy from the two adds - stq r21,8(r16) - addq r3,r7,r28 C 4th main add - addq r28,r25,r23 C 4th carry add - cmpult r28,r7,r8 C compute cy from last add - cmpult r23,r28,r25 C compute cy from last add - addq r17,32,r17 C update s1_ptr - bis r8,r25,r25 C combine cy from the two adds - addq r16,32,r16 C update res_ptr - addq r0,r4,r28 C 1st main add - ldq r2,16(r18) - addq r25,r28,r20 C 1st carry add - ldq r3,24(r18) - cmpult r28,r4,r8 C compute cy from last add - ldq r6,-16(r17) - cmpult r20,r28,r25 C compute cy from last add - ldq r7,-8(r17) - bis r8,r25,r25 C combine cy from the two adds - subq r19,4,r19 C decr loop cnt - stq r22,-16(r16) - addq r1,r5,r28 C 2nd main add - stq r23,-8(r16) - addq r25,r28,r21 C 2nd carry add - addq r18,32,r18 C update s2_ptr - cmpult r28,r5,r8 C compute cy from last add - bge r19,$Loop -C Finish software pipeline for 1st loop -$Lend1: cmpult r21,r28,r25 C compute cy from last add - bis r8,r25,r25 C combine cy from the two adds - addq r2,r6,r28 C 3rd main add - addq r28,r25,r22 C 3rd carry add - cmpult r28,r6,r8 C compute cy from last add - cmpult r22,r28,r25 C compute cy from last add - stq r20,0(r16) - bis r8,r25,r25 C combine cy from the two adds - stq r21,8(r16) - addq r3,r7,r28 C 4th main add - addq r28,r25,r23 C 4th carry add - cmpult r28,r7,r8 C compute cy from last add - cmpult r23,r28,r25 C compute cy from last add - bis r8,r25,r25 C combine cy from the two adds - addq r16,32,r16 C update res_ptr - stq r22,-16(r16) - stq r23,-8(r16) -$Lend2: addq r19,4,r19 C restore loop cnt - beq r19,$Lret -C Start software pipeline for 2nd loop - ldq r0,0(r18) - ldq r4,0(r17) - subq r19,1,r19 - beq r19,$Lend0 -C 2nd loop handles remaining 1-3 limbs - ALIGN(16) -$Loop0: addq r0,r4,r28 C main add - ldq r0,8(r18) - cmpult r28,r4,r8 C compute cy from last add - ldq r4,8(r17) - addq r28,r25,r20 C carry add - addq r18,8,r18 - addq r17,8,r17 - stq r20,0(r16) - cmpult r20,r28,r25 C compute cy from last add - subq r19,1,r19 C decr loop cnt - bis r8,r25,r25 C combine cy from the two adds - addq r16,8,r16 - bne r19,$Loop0 -$Lend0: addq r0,r4,r28 C main add - addq r28,r25,r20 C carry add - cmpult r28,r4,r8 C compute cy from last add - cmpult r20,r28,r25 C compute cy from last add - stq r20,0(r16) - bis r8,r25,r25 C combine cy from the two adds - -$Lret: bis r25,r31,r0 C return cy - ret r31,(r26),1 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/addmul_1.asm deleted file mode 100644 index c4e6834b615713ffb543d28ce3d1fdfdf7807334..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/addmul_1.asm +++ /dev/null @@ -1,99 +0,0 @@ -dnl Alpha mpn_addmul_1 -- Multiply a limb vector with a limb and add the -dnl result to a second limb vector. - -dnl Copyright 1992, 1994, 1995, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: 42 -C EV5: 18 -C EV6: 7 - -C INPUT PARAMETERS -C rp r16 -C up r17 -C n r18 -C vl r19 - - -ASM_START() -PROLOGUE(mpn_addmul_1) - ldq r2,0(r17) C r2 = s1_limb - addq r17,8,r17 C s1_ptr++ - subq r18,1,r18 C size-- - mulq r2,r19,r3 C r3 = prod_low - ldq r5,0(r16) C r5 = *res_ptr - umulh r2,r19,r0 C r0 = prod_high - beq r18,$Lend1 C jump if size was == 1 - ldq r2,0(r17) C r2 = s1_limb - addq r17,8,r17 C s1_ptr++ - subq r18,1,r18 C size-- - addq r5,r3,r3 - cmpult r3,r5,r4 - stq r3,0(r16) - addq r16,8,r16 C res_ptr++ - beq r18,$Lend2 C jump if size was == 2 - - ALIGN(8) -$Loop: mulq r2,r19,r3 C r3 = prod_low - ldq r5,0(r16) C r5 = *res_ptr - addq r4,r0,r0 C cy_limb = cy_limb + 'cy' - subq r18,1,r18 C size-- - umulh r2,r19,r4 C r4 = cy_limb - ldq r2,0(r17) C r2 = s1_limb - addq r17,8,r17 C s1_ptr++ - addq r3,r0,r3 C r3 = cy_limb + prod_low - cmpult r3,r0,r0 C r0 = carry from (cy_limb + prod_low) - addq r5,r3,r3 - cmpult r3,r5,r5 - stq r3,0(r16) - addq r16,8,r16 C res_ptr++ - addq r5,r0,r0 C combine carries - bne r18,$Loop - -$Lend2: mulq r2,r19,r3 C r3 = prod_low - ldq r5,0(r16) C r5 = *res_ptr - addq r4,r0,r0 C cy_limb = cy_limb + 'cy' - umulh r2,r19,r4 C r4 = cy_limb - addq r3,r0,r3 C r3 = cy_limb + prod_low - cmpult r3,r0,r0 C r0 = carry from (cy_limb + prod_low) - addq r5,r3,r3 - cmpult r3,r5,r5 - stq r3,0(r16) - addq r5,r0,r0 C combine carries - addq r4,r0,r0 C cy_limb = prod_high + cy - ret r31,(r26),1 -$Lend1: addq r5,r3,r3 - cmpult r3,r5,r5 - stq r3,0(r16) - addq r0,r5,r0 - ret r31,(r26),1 -EPILOGUE(mpn_addmul_1) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/alpha-defs.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/alpha-defs.m4 deleted file mode 100644 index af34c9294c9671c052b3a91b52d7344356a0349a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/alpha-defs.m4 +++ /dev/null @@ -1,107 +0,0 @@ -divert(-1) - -dnl m4 macros for Alpha assembler. - -dnl Copyright 2003, 2004 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl Usage: ASSERT([reg] [,code]) -dnl -dnl Require that the given reg is non-zero after executing the test code. -dnl For example, -dnl -dnl ASSERT(r8, -dnl ` cmpult r16, r17, r8') -dnl -dnl If the register argument is empty then nothing is tested, the code is -dnl just executed. This can be used for setups required by later ASSERTs. -dnl If the code argument is omitted then the register is just tested, with -dnl no special setup code. - -define(ASSERT, -m4_assert_numargs_range(1,2) -m4_assert_defined(`WANT_ASSERT') -`ifelse(WANT_ASSERT,1, -`ifelse(`$2',,,`$2') -ifelse(`$1',,, -` bne $1, L(ASSERTok`'ASSERT_label_counter) - .long 0 C halt -L(ASSERTok`'ASSERT_label_counter): -define(`ASSERT_label_counter',eval(ASSERT_label_counter+1)) -') -')') -define(`ASSERT_label_counter',1) - - -dnl Usage: bigend(`code') -dnl -dnl Emit the given code only for a big-endian system, like Unicos. This -dnl can be used for instance for extra stuff needed by extwl. - -define(bigend, -m4_assert_numargs(1) -`ifdef(`HAVE_LIMB_BIG_ENDIAN',`$1', -`ifdef(`HAVE_LIMB_LITTLE_ENDIAN',`', -`m4_error(`Cannot assemble, unknown limb endianness')')')') - - -dnl Usage: bwx_available_p -dnl -dnl Evaluate to 1 if the BWX byte memory instructions are available, or to -dnl 0 if not. -dnl -dnl Listing the chips which do have BWX means anything we haven't looked at -dnl will use safe non-BWX code. The only targets without BWX currently are -dnl plain alpha (ie. ev4) and alphaev5. - -define(bwx_available_p, -m4_assert_numargs(-1) -`m4_ifdef_anyof_p( - `HAVE_HOST_CPU_alphaev56', - `HAVE_HOST_CPU_alphapca56', - `HAVE_HOST_CPU_alphapca57', - `HAVE_HOST_CPU_alphaev6', - `HAVE_HOST_CPU_alphaev67', - `HAVE_HOST_CPU_alphaev68', - `HAVE_HOST_CPU_alphaev69', - `HAVE_HOST_CPU_alphaev7', - `HAVE_HOST_CPU_alphaev79')') - - -dnl Usage: unop -dnl -dnl The Cray Unicos assembler lacks unop, so give the equivalent ldq_u -dnl explicitly. - -define(unop, -m4_assert_numargs(-1) -`ldq_u r31, 0(r30)') - - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/aorslsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/aorslsh1_n.asm deleted file mode 100644 index 9525e669db2a39a6bea39188fbd388a9271f8bda..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/aorslsh1_n.asm +++ /dev/null @@ -1,164 +0,0 @@ -dnl Alpha mpn_addlsh1_n/mpn_sublsh1_n -- rp[] = up[] +- (vp[] << 1). - -dnl Copyright 2003, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: ? -C EV5: 6.25 -C EV6: 4.5 - -define(`rp',`r16') -define(`up',`r17') -define(`vp',`r18') -define(`n', `r19') - -define(`u0', `r8') -define(`u1', `r1') -define(`v0', `r4') -define(`v1', `r5') - -define(`cy0', `r0') -define(`cy1', `r20') -define(`cy', `r22') -define(`rr', `r24') -define(`ps', `r25') -define(`sl', `r28') - -ifdef(`OPERATION_addlsh1_n',` - define(ADDSUB, addq) - define(CARRY, `cmpult $1,$2,$3') - define(func, mpn_addlsh1_n) -') -ifdef(`OPERATION_sublsh1_n',` - define(ADDSUB, subq) - define(CARRY, `cmpult $2,$1,$3') - define(func, mpn_sublsh1_n) -') - -MULFUNC_PROLOGUE(mpn_addlsh1_n mpn_sublsh1_n) - -ASM_START() -PROLOGUE(func) - and n, 2, cy0 - blbs n, L(bx1) -L(bx0): ldq v1, 0(vp) - ldq u1, 0(up) - nop - bne cy0, L(b10) - -L(b00): lda vp, 48(vp) - lda up, -16(up) - lda rp, -8(rp) - br r31, L(lo0) - -L(b10): lda vp, 32(vp) - lda rp, 8(rp) - lda cy0, 0(r31) - br r31, L(lo2) - -L(bx1): ldq v0, 0(vp) - ldq u0, 0(up) - lda cy1, 0(r31) - beq cy0, L(b01) - -L(b11): lda vp, 40(vp) - lda up, -24(up) - lda rp, 16(rp) - br r31, L(lo3) - -L(b01): lda n, -4(n) - ble n, L(end) - lda vp, 24(vp) - lda up, -8(up) - - ALIGN(16) -L(top): addq v0, v0, sl C left shift vlimb - ldq v1, -16(vp) - ADDSUB u0, sl, ps C ulimb + (vlimb << 1) - cmplt v0, r31, cy0 C carry out #1 - ldq u1, 16(up) - ADDSUB ps, cy1, rr C consume carry from previous operation - CARRY( ps, u0, cy) C carry out #2 - stq rr, 0(rp) - addq cy, cy0, cy0 C combine carry out #1 and #2 - CARRY( rr, ps, cy) C carry out #3 - addq cy, cy0, cy0 C final carry out - lda vp, 32(vp) C bookkeeping -L(lo0): addq v1, v1, sl - ldq v0, -40(vp) - ADDSUB u1, sl, ps - cmplt v1, r31, cy1 - ldq u0, 24(up) - ADDSUB ps, cy0, rr - CARRY( ps, u1, cy) - stq rr, 8(rp) - addq cy, cy1, cy1 - CARRY( rr, ps, cy) - addq cy, cy1, cy1 - lda rp, 32(rp) C bookkeeping -L(lo3): addq v0, v0, sl - ldq v1, -32(vp) - ADDSUB u0, sl, ps - cmplt v0, r31, cy0 - ldq u1, 32(up) - ADDSUB ps, cy1, rr - CARRY( ps, u0, cy) - stq rr, -16(rp) - addq cy, cy0, cy0 - CARRY( rr, ps, cy) - addq cy, cy0, cy0 - lda up, 32(up) C bookkeeping -L(lo2): addq v1, v1, sl - ldq v0, -24(vp) - ADDSUB u1, sl, ps - cmplt v1, r31, cy1 - ldq u0, 8(up) - ADDSUB ps, cy0, rr - CARRY( ps, u1, cy) - stq rr, -8(rp) - addq cy, cy1, cy1 - CARRY( rr, ps, cy) - addq cy, cy1, cy1 - lda n, -4(n) C bookkeeping - bgt n, L(top) - -L(end): addq v0, v0, sl - ADDSUB u0, sl, ps - ADDSUB ps, cy1, rr - cmplt v0, r31, cy0 - CARRY( ps, u0, cy) - stq rr, 0(rp) - addq cy, cy0, cy0 - CARRY( rr, ps, cy) - addq cy, cy0, r0 - ret r31,(r26),1 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/aorslsh2_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/aorslsh2_n.asm deleted file mode 100644 index bdee1d6d021df04745d468a50769e894d73f2895..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/aorslsh2_n.asm +++ /dev/null @@ -1,167 +0,0 @@ -dnl Alpha mpn_addlsh2_n/mpn_sublsh2_n -- rp[] = up[] +- (vp[] << 2). - -dnl Copyright 2003, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: ? -C EV5: 6 -C EV6: 3.75 - -C TODO -C * Tune to reach 3.5 c/l on ev6 and 5.75 c/l on ev5. - -define(`rp',`r16') -define(`up',`r17') -define(`vp',`r18') -define(`n', `r19') - -define(`u0', `r8') -define(`u1', `r1') -define(`v0', `r4') -define(`v1', `r5') - -define(`cy0', `r0') -define(`cy1', `r20') -define(`cy', `r22') -define(`rr', `r24') -define(`ps', `r25') -define(`sl', `r28') - -ifdef(`OPERATION_addlsh2_n',` - define(ADDSUB, addq) - define(CARRY, `cmpult $1,$2,$3') - define(func, mpn_addlsh2_n) -') -ifdef(`OPERATION_sublsh2_n',` - define(ADDSUB, subq) - define(CARRY, `cmpult $2,$1,$3') - define(func, mpn_sublsh2_n) -') - -MULFUNC_PROLOGUE(mpn_addlsh2_n mpn_sublsh2_n) - -ASM_START() -PROLOGUE(func) - and n, 2, cy0 - blbs n, L(bx1) -L(bx0): ldq v1, 0(vp) - ldq u1, 0(up) - bis r31, r31, r2 - bne cy0, L(b10) - -L(b00): lda vp, 48(vp) - lda up, -16(up) - lda rp, -8(rp) - s4addq v1, r31, sl - br r31, L(lo0) - -L(b10): lda vp, 32(vp) - lda rp, 8(rp) - lda cy0, 0(r31) - br r31, L(lo2) - -L(bx1): ldq v0, 0(vp) - ldq u0, 0(up) - lda cy1, 0(r31) - bis r31, r31, r3 - nop - beq cy0, L(b01) - -L(b11): lda vp, 40(vp) - lda up, -24(up) - lda rp, 16(rp) - br r31, L(lo3) - -L(b01): lda n, -4(n) - ble n, L(end) - lda vp, 24(vp) - lda up, -8(up) - - ALIGN(16) -L(top): s4addq v0, r3, sl C combined vlimb - ldq v1, -16(vp) - ADDSUB u0, sl, ps C ulimb + (vlimb << 1) - ldq u1, 16(up) - srl v0, 62, r2 C high v bits - ADDSUB ps, cy1, rr C consume carry from previous operation - CARRY( ps, u0, cy0) C carry out #2 - stq rr, 0(rp) - CARRY( rr, ps, cy) C carry out #3 - lda vp, 32(vp) C bookkeeping - addq cy, cy0, cy0 C final carry out - s4addq v1, r2, sl -L(lo0): ldq v0, -40(vp) - ADDSUB u1, sl, ps - ldq u0, 24(up) - srl v1, 62, r3 - ADDSUB ps, cy0, rr - CARRY( ps, u1, cy1) - stq rr, 8(rp) - CARRY( rr, ps, cy) - lda rp, 32(rp) C bookkeeping - addq cy, cy1, cy1 -L(lo3): s4addq v0, r3, sl - ldq v1, -32(vp) - ADDSUB u0, sl, ps - ldq u1, 32(up) - srl v0, 62, r2 - ADDSUB ps, cy1, rr - CARRY( ps, u0, cy0) - stq rr, -16(rp) - CARRY( rr, ps, cy) - lda up, 32(up) C bookkeeping - addq cy, cy0, cy0 -L(lo2): s4addq v1, r2, sl - ldq v0, -24(vp) - ADDSUB u1, sl, ps - ldq u0, 8(up) - srl v1, 62, r3 - ADDSUB ps, cy0, rr - CARRY( ps, u1, cy1) - stq rr, -8(rp) - CARRY( rr, ps, cy) - lda n, -4(n) C bookkeeping - addq cy, cy1, cy1 - bgt n, L(top) - -L(end): s4addq v0, r3, sl - ADDSUB u0, sl, ps - srl v0, 62, r2 - ADDSUB ps, cy1, rr - CARRY( ps, u0, cy0) - stq rr, 0(rp) - CARRY( rr, ps, cy) - addq cy, cy0, cy0 - addq cy0, r2, r0 - - ret r31,(r26),1 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/bdiv_dbm1c.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/bdiv_dbm1c.asm deleted file mode 100644 index 472966ca98e4159170edf3dabb915bc4e172a425..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/bdiv_dbm1c.asm +++ /dev/null @@ -1,282 +0,0 @@ -dnl Alpha mpn_bdiv_dbm1c. - -dnl Copyright 2008 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: 42 -C EV5: 18 -C EV6: 3 - -C TODO -C * Try less unrolling, 2-way should give the same performance. -C * Optimize feed-in and wind-down code, for speed, and perhaps further for -C code size. -C * This runs optimally given the algorithm, r8 is on a 3 operation recurrency -C path. We have not tried very hard to find a better algorithm. Perhaps -C it would be a good task for the GNU superoptimizer. - -C INPUT PARAMETERS -define(`rp', `r16') -define(`up', `r17') -define(`n', `r18') -define(`bd', `r19') -define(`cy', `r19') - - -ASM_START() -PROLOGUE(mpn_bdiv_dbm1c) - mov r20, r8 - - ldq r24, 0(r17) - and r18, 3, r28 - lda r18, -4(r18) - beq r28, L(b0) - cmpeq r28, 1, r21 - bne r21, L(b1) - cmpeq r28, 2, r21 - bne r21, L(b2) - - -L(b3): ldq r2, 8(r17) - ldq r3, 16(r17) - bgt r18, L(gt3) - - mulq r24, r19, r5 C U1 - umulh r24, r19, r21 C U1 - mulq r2, r19, r6 C U1 - umulh r2, r19, r22 C U1 - mulq r3, r19, r7 C U1 - umulh r3, r19, r23 C U1 - lda r16, -32(r16) - br L(cj3) - -L(gt3): ldq r0, 24(r17) - mulq r24, r19, r5 C U1 - umulh r24, r19, r21 C U1 - ldq r1, 32(r17) - mulq r2, r19, r6 C U1 - umulh r2, r19, r22 C U1 - ldq r2, 40(r17) - mulq r3, r19, r7 C U1 - umulh r3, r19, r23 C U1 - ldq r3, 48(r17) - lda r18, -4(r18) - lda r17, 56(r17) - mulq r0, r19, r4 C U1 - bgt r18, L(L3) - - br L(cj7) - - -L(b2): ldq r3, 8(r17) - bgt r18, L(gt2) - - mulq r24, r19, r6 C U1 - umulh r24, r19, r22 C U1 - mulq r3, r19, r7 C U1 - umulh r3, r19, r23 C U1 - lda r16, -40(r16) - br L(cj2) - -L(gt2): ldq r0, 16(r17) - ldq r1, 24(r17) - mulq r24, r19, r6 C U1 - umulh r24, r19, r22 C U1 - ldq r2, 32(r17) - mulq r3, r19, r7 C U1 - umulh r3, r19, r23 C U1 - ldq r3, 40(r17) - lda r18, -4(r18) - lda r17, 48(r17) - mulq r0, r19, r4 C U1 - umulh r0, r19, r20 C U1 - lda r16, -8(r16) - bgt r18, L(gt6) - - mulq r1, r19, r5 C U1 - br L(cj6) - -L(gt6): ldq r0, 0(r17) - mulq r1, r19, r5 C U1 - br L(L2) - - -L(b1): bgt r18, L(gt1) - - mulq r24, r19, r7 C U1 - umulh r24, r19, r23 C U1 - lda r16, -48(r16) - br L(cj1) - -L(gt1): ldq r0, 8(r17) - ldq r1, 16(r17) - ldq r2, 24(r17) - mulq r24, r19, r7 C U1 - umulh r24, r19, r23 C U1 - ldq r3, 32(r17) - lda r18, -4(r18) - lda r17, 40(r17) - mulq r0, r19, r4 C U1 - umulh r0, r19, r20 C U1 - lda r16, -16(r16) - bgt r18, L(gt5) - - mulq r1, r19, r5 C U1 - umulh r1, r19, r21 C U1 - mulq r2, r19, r6 C U1 - br L(cj5) - -L(gt5): ldq r0, 0(r17) - mulq r1, r19, r5 C U1 - umulh r1, r19, r21 C U1 - ldq r1, 8(r17) - mulq r2, r19, r6 C U1 - br L(L1) - - -L(b0): ldq r1, 8(r17) - ldq r2, 16(r17) - ldq r3, 24(r17) - lda r17, 32(r17) - lda r16, -24(r16) - mulq r24, r19, r4 C U1 - umulh r24, r19, r20 C U1 - bgt r18, L(gt4) - - mulq r1, r19, r5 C U1 - umulh r1, r19, r21 C U1 - mulq r2, r19, r6 C U1 - umulh r2, r19, r22 C U1 - mulq r3, r19, r7 C U1 - br L(cj4) - -L(gt4): ldq r0, 0(r17) - mulq r1, r19, r5 C U1 - umulh r1, r19, r21 C U1 - ldq r1, 8(r17) - mulq r2, r19, r6 C U1 - umulh r2, r19, r22 C U1 - ldq r2, 16(r17) - mulq r3, r19, r7 C U1 - br L(L0) - -C *** MAIN LOOP START *** - ALIGN(16) -L(top): mulq r0, r19, r4 C U1 - subq r8, r28, r8 -L(L3): umulh r0, r19, r20 C U1 - cmpult r8, r5, r28 - ldq r0, 0(r17) - subq r8, r5, r8 - addq r21, r28, r28 - stq r8, 0(r16) - - mulq r1, r19, r5 C U1 - subq r8, r28, r8 -L(L2): umulh r1, r19, r21 C U1 - cmpult r8, r6, r28 - ldq r1, 8(r17) - subq r8, r6, r8 - addq r22, r28, r28 - stq r8, 8(r16) - - mulq r2, r19, r6 C U1 - subq r8, r28, r8 -L(L1): umulh r2, r19, r22 C U1 - cmpult r8, r7, r28 - ldq r2, 16(r17) - subq r8, r7, r8 - addq r23, r28, r28 - stq r8, 16(r16) - - mulq r3, r19, r7 C U1 - subq r8, r28, r8 -L(L0): umulh r3, r19, r23 C U1 - cmpult r8, r4, r28 - ldq r3, 24(r17) - subq r8, r4, r8 - addq r20, r28, r28 - stq r8, 24(r16) - - lda r18, -4(r18) - lda r17, 32(r17) - lda r16, 32(r16) - bgt r18, L(top) -C *** MAIN LOOP END *** - - mulq r0, r19, r4 C U1 - subq r8, r28, r8 -L(cj7): umulh r0, r19, r20 C U1 - cmpult r8, r5, r28 - subq r8, r5, r8 - addq r21, r28, r28 - stq r8, 0(r16) - mulq r1, r19, r5 C U1 - subq r8, r28, r8 -L(cj6): umulh r1, r19, r21 C U1 - cmpult r8, r6, r28 - subq r8, r6, r8 - addq r22, r28, r28 - stq r8, 8(r16) - mulq r2, r19, r6 C U1 - subq r8, r28, r8 -L(cj5): umulh r2, r19, r22 C U1 - cmpult r8, r7, r28 - subq r8, r7, r8 - addq r23, r28, r28 - stq r8, 16(r16) - mulq r3, r19, r7 C U1 - subq r8, r28, r8 -L(cj4): umulh r3, r19, r23 C U1 - cmpult r8, r4, r28 - subq r8, r4, r8 - addq r20, r28, r28 - stq r8, 24(r16) - subq r8, r28, r8 -L(cj3): cmpult r8, r5, r28 - subq r8, r5, r8 - addq r21, r28, r28 - stq r8, 32(r16) - subq r8, r28, r8 -L(cj2): cmpult r8, r6, r28 - subq r8, r6, r8 - addq r22, r28, r28 - stq r8, 40(r16) - subq r8, r28, r8 -L(cj1): cmpult r8, r7, r28 - subq r8, r7, r8 - addq r23, r28, r28 - stq r8, 48(r16) - subq r8, r28, r0 - ret r31, (r26), 1 - -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/cntlz.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/cntlz.asm deleted file mode 100644 index 25af19b1316773823e058035ae170b5dc1dc8cef..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/cntlz.asm +++ /dev/null @@ -1,55 +0,0 @@ -dnl Alpha auxiliary for longlong.h's count_leading_zeros - -dnl Copyright 1997, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -ASM_START() -EXTERN(__clz_tab) -PROLOGUE(mpn_count_leading_zeros,gp) - cmpbge r31, r16, r1 - LEA(r3,__clz_tab) - sra r1, 1, r1 - xor r1, 127, r1 - srl r16, 1, r16 - addq r1, r3, r1 - ldq_u r0, 0(r1) - lda r2, 64 - extbl r0, r1, r0 - s8subl r0, 8, r0 - srl r16, r0, r16 - addq r16, r3, r16 - ldq_u r1, 0(r16) - extbl r1, r16, r1 - subq r2, r1, r2 - subq r2, r0, r0 - ret r31, (r26),1 -EPILOGUE(mpn_count_leading_zeros) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/com.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/com.asm deleted file mode 100644 index f084ab5e961cdc4ec32ed8201aa6852fdf42628d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/com.asm +++ /dev/null @@ -1,176 +0,0 @@ -dnl Alpha mpn_com -- mpn one's complement. - -dnl Copyright 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C EV4: 4.75 -C EV5: 2.0 -C EV6: 1.5 - - -C mp_limb_t mpn_com (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C For ev5 the main loop is 7 cycles plus 1 taken branch bubble, for a total -C 2.0 c/l. In general, a pattern like this unrolled to N limbs per loop -C will be 1.5+2/N c/l. -C -C 2 cycles of loop control are unavoidable, for pointer updates and the -C taken branch bubble, but also since ldq cannot issue two cycles after stq -C (and with a run of stqs that means neither of two cycles at the end of the -C loop. -C -C The fbeq is forced into the second cycle of the loop using unops, since -C the first time through it must wait for the cvtqt result. Once that -C result is ready (a 1 cycle stall) then both the branch and following loads -C can issue together. -C -C The main loop handles an odd count of limbs, being two limbs loaded before -C each size test, plus one pipelined around from the previous iteration (or -C setup in the entry sequence). -C -C An even number of limbs is handled by an explicit dst[0]=~src[0] in the -C entry sequence, and an increment of the pointers. For an odd size there's -C no increment and the first store in the loop (r24) is a repeat of dst[0]. -C -C Note that the load for r24 after the possible pointer increment is done -C before the explicit store to dst[0], in case src==dst. - - -ASM_START() - -FLOAT64(L(dat), 2.0) - - ALIGN(16) - -PROLOGUE(mpn_com,gp) - - C r16 dst - C r17 src - C r18 size - - lda r30, -16(r30) C temporary stack space - lda r7, -3(r18) C size - 3 - - ldq r20, 0(r17) C src[0] - srl r7, 1, r6 C (size-3)/2 - - stq r6, 8(r30) C (size-3)/2 - and r7, 1, r5 C 1 if size even - - LEA( r8, L(dat)) - s8addq r5, r17, r17 C skip src[0] if even - - ornot r31, r20, r20 C ~src[0] - unop - - ldt f0, 8(r30) C (size-3)/2 - ldq r24, 0(r17) C src[0 or 1] - - stq r20, 0(r16) C dst[0] - s8addq r5, r16, r19 C skip dst[0] if even - - ldt f1, 0(r8) C data 2.0 - lda r30, 16(r30) C restore stack - unop - cvtqt f0, f0 C (size-3)/2 as float - - ornot r31, r24, r24 - blt r7, L(done_1) C if size<=2 - unop - unop - - - C 16-byte alignment here -L(top): - C r17 src, incrementing - C r19 dst, incrementing - C r24 dst[i] result, ready to store - C f0 (size-3)/2, decrementing - C f1 2.0 - - ldq r20, 8(r17) C src[i+1] - ldq r21, 16(r17) C src[i+2] - unop - unop - - fbeq f0, L(done_2) - unop - ldq r22, 24(r17) C src[i+3] - ldq r23, 32(r17) C src[i+4] - - stq r24, 0(r19) C dst[i] - ornot r31, r20, r20 - subt f0, f1, f0 C count -= 2 - unop - - stq r20, 8(r19) C dst[i+1] - ornot r31, r21, r21 - unop - unop - - stq r21, 16(r19) C dst[i+2] - ornot r31, r22, r22 - - stq r22, 24(r19) C dst[i+3] - ornot r31, r23, r24 - - lda r17, 32(r17) C src += 4 - lda r19, 32(r19) C dst += 4 - unop - fbge f0, L(top) - - -L(done_1): - C r19 &dst[size-1] - C r24 result for dst[size-1] - - stq r24, 0(r19) C dst[size-1] - ret r31, (r26), 1 - - -L(done_2): - C r19 &dst[size-3] - C r20 src[size-2] - C r21 src[size-1] - C r24 result for dst[size-3] - - stq r24, 0(r19) C dst[size-3] - ornot r31, r20, r20 - - stq r20, 8(r19) C dst[size-2] - ornot r31, r21, r21 - - stq r21, 16(r19) C dst[size-1] - ret r31, (r26), 1 - -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/copyd.asm deleted file mode 100644 index b41b5366cc5e79c2ca02468e6504c80c316029ae..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/copyd.asm +++ /dev/null @@ -1,88 +0,0 @@ -dnl Alpha mpn_copyd -- copy, decrementing. - -dnl Copyright 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: 4 -C EV5: 1.75 -C EV6: 1 - -C INPUT PARAMETERS -C rp r16 -C up r17 -C n r18 - - -ASM_START() -PROLOGUE(mpn_copyd) - s8addq r18,r16,r16 C E0 - s8addq r18,r17,r17 C E1 - lda r18,-8(r18) C E0 - blt r18,$Lend C E1 -$Loop: ldq r0,-8(r17) C E0 - ldq r1,-16(r17) C E1 - ldq r2,-24(r17) C E0 - ldq r3,-32(r17) C E1 - ldq r4,-40(r17) C E0 - ldq r5,-48(r17) C E1 - ldq r6,-56(r17) C E0 - ldq r7,-64(r17) C E1 - stq r0,-8(r16) C E0 - lda r17,-64(r17) C E1 - stq r1,-16(r16) C E0 - bis r31, r31, r31 C E1 - stq r2,-24(r16) C E0 - lda r18,-8(r18) C E1 - stq r3,-32(r16) C E0 - bis r31, r31, r31 C E1 - stq r4,-40(r16) C E0 - bis r31, r31, r31 C E1 - stq r5,-48(r16) C E0 - bis r31, r31, r31 C E1 - stq r6,-56(r16) C E0 - bis r31, r31, r31 C E1 - stq r7,-64(r16) C E0 - lda r16,-64(r16) C E1 - bge r18,$Loop C E1 -$Lend: lda r18,7(r18) C E0 - blt r18,$Lret C E1 - ldq r0,-8(r17) C E0 - beq r18,$Lend0 C E1 -$Loop0: stq r0,-8(r16) C E0 - lda r16,-8(r16) C E1 - ldq r0,-16(r17) C E0 - lda r18,-1(r18) C E1 - lda r17,-8(r17) C E0 - bgt r18,$Loop0 C E1 -$Lend0: stq r0,-8(r16) C E0 -$Lret: ret r31,(r26),1 C E1 -EPILOGUE(mpn_copyd) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/copyi.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/copyi.asm deleted file mode 100644 index f7e2ad6f6a9d5652879b8d1b7aa00ebdac6fdb18..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/copyi.asm +++ /dev/null @@ -1,86 +0,0 @@ -dnl Alpha mpn_copyi -- copy, incrementing. - -dnl Copyright 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: 4 -C EV5: 1.75 -C EV6: 1 - -C INPUT PARAMETERS -C rp r16 -C up r17 -C n r18 - - -ASM_START() -PROLOGUE(mpn_copyi) - lda r18,-8(r18) C E0 - blt r18,$Lend C E1 -$Loop: ldq r0,0(r17) C E0 - ldq r1,8(r17) C E1 - ldq r2,16(r17) C E0 - ldq r3,24(r17) C E1 - ldq r4,32(r17) C E0 - ldq r5,40(r17) C E1 - ldq r6,48(r17) C E0 - ldq r7,56(r17) C E1 - stq r0,0(r16) C E0 - lda r17,64(r17) C E1 - stq r1,8(r16) C E0 - bis r31, r31, r31 C E1 - stq r2,16(r16) C E0 - lda r18,-8(r18) C E1 - stq r3,24(r16) C E0 - bis r31, r31, r31 C E1 - stq r4,32(r16) C E0 - bis r31, r31, r31 C E1 - stq r5,40(r16) C E0 - bis r31, r31, r31 C E1 - stq r6,48(r16) C E0 - bis r31, r31, r31 C E1 - stq r7,56(r16) C E0 - lda r16,64(r16) C E1 - bge r18,$Loop C E1 -$Lend: lda r18,7(r18) C E0 - blt r18,$Lret C E1 - ldq r0,0(r17) C E0 - beq r18,$Lend0 C E1 -$Loop0: stq r0,0(r16) C E0 - lda r16,8(r16) C E1 - ldq r0,8(r17) C E0 - lda r18,-1(r18) C E1 - lda r17,8(r17) C E0 - bgt r18,$Loop0 C E1 -$Lend0: stq r0,0(r16) C E0 -$Lret: ret r31,(r26),1 C E1 -EPILOGUE(mpn_copyi) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/default.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/default.m4 deleted file mode 100644 index 8fe7c4e1223180784938c6a29890e0c87d45ad91..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/default.m4 +++ /dev/null @@ -1,127 +0,0 @@ -divert(-1) - -dnl m4 macros for alpha assembler (everywhere except unicos). - - -dnl Copyright 2000, 2002-2004, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl Usage: ASM_START() -define(`ASM_START', -m4_assert_numargs(0) -` .set noreorder - .set noat') - -dnl Usage: X(value) -define(`X', -m4_assert_numargs(1) -`0x$1') - -dnl Usage: FLOAT64(label,value) -define(`FLOAT64', -m4_assert_numargs(2) -` .align 3 -$1: .t_floating $2') - - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo[,gp|noalign]) -dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) - -define(`PROLOGUE_cpu', -m4_assert_numargs_range(1,2) -`ifelse(`$2',gp,, -`ifelse(`$2',noalign,, -`ifelse(`$2',,,`m4_error(`Unrecognised PROLOGUE parameter -')')')')dnl - .text -ifelse(`$2',noalign,,` ALIGN(16)') - .globl $1 - .ent $1 -$1: - .frame r30,0,r26,0 -ifelse(`$2',gp,` ldgp r29, 0(r27) -`$'$1..ng:') - .prologue ifelse(`$2',gp,1,0)') - -define(`EPILOGUE_cpu', -m4_assert_numargs(1) -` .end $1') - - -dnl Usage: LDGP(dst,src) -dnl -dnl Emit an "ldgp dst,src", but only if the system uses a GOT. - -define(LDGP, -m4_assert_numargs(2) -`ldgp `$1', `$2'') - - -dnl Usage: EXTERN(variable_name) -define(`EXTERN', -m4_assert_numargs(1) -) - -dnl Usage: r0 ... r31 -dnl f0 ... f31 -dnl -dnl Map register names r0 to $0, and f0 to $f0, etc. -dnl This is needed on all systems but Unicos -dnl -dnl defreg() is used to protect the $ in $0 (otherwise it would represent a -dnl macro argument). Double quoting is used to protect the f0 in $f0 -dnl (otherwise it would be an infinite recursion). - -forloop(i,0,31,`defreg(`r'i,$i)') -forloop(i,0,31,`deflit(`f'i,``$f''i)') - - -dnl Usage: DATASTART(name,align) or DATASTART(name) -dnl DATAEND() - -define(`DATASTART', -m4_assert_numargs_range(1,2) -` RODATA - ALIGN(ifelse($#,1,2,$2)) -$1:') -define(`DATAEND', -m4_assert_numargs(0) -) - -dnl Load a symbolic address into a register -define(`LEA', -m4_assert_numargs(2) -`lda $1, $2') - -dnl Usage: ASM_END() -define(`ASM_END', -m4_assert_numargs(0) -) - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/dive_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/dive_1.c deleted file mode 100644 index 88b82db2f73e94532eb16732d2cd87ce1474e4e8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/dive_1.c +++ /dev/null @@ -1,115 +0,0 @@ -/* Alpha mpn_divexact_1 -- mpn by limb exact division. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2000-2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* cycles/limb - EV4: 47.0 - EV5: 30.0 - EV6: 15.0 -*/ - - -/* The dependent chain is as follows (the same as modexact), and this is - what the code runs as. - - ev4 ev5 ev6 - 1 1 1 sub y = x - h - 23 13 7 mulq q = y * inverse - 23 15 7 umulh h = high (q * d) - -- -- -- - 47 30 15 - - The time to load src[i+1] and establish x hides under the umulh latency. */ - -void -mpn_divexact_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, mp_limb_t divisor) -{ - mp_limb_t inverse, lshift_mask, s, sr, s_next, c, h, x, y, q, dummy; - unsigned rshift, lshift; - - ASSERT (size >= 1); - ASSERT (divisor != 0); - ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, size)); - ASSERT_MPN (src, size); - ASSERT_LIMB (divisor); - - s_next = *src++; /* src[0] */ - - rshift = 0; - lshift_mask = 0; - if ((divisor & 1) == 0) - { - count_trailing_zeros (rshift, divisor); - lshift_mask = MP_LIMB_T_MAX; - divisor >>= rshift; - } - - binvert_limb (inverse, divisor); - lshift = 64 - rshift; - - c = 0; - h = 0; - sr = s_next >> rshift; - - size--; - if (LIKELY (size != 0)) - { - do - { - s_next = *src++; /* src[i+1] */ - s = sr | ((s_next << lshift) & lshift_mask); - x = s - c; - c = s < c; - sr = s_next >> rshift; - - y = x - h; - c += (x < h); - q = y * inverse; - *dst++ = q; - umul_ppmm (h, dummy, q, divisor); - - size--; - } - while (size != 0); - } - - x = sr - c; - y = x - h; - q = y * inverse; - *dst = q; /* dst[size-1] */ -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/divrem_2.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/divrem_2.asm deleted file mode 100644 index 046b246a95edb75317bc380f0873a11781dabcad..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/divrem_2.asm +++ /dev/null @@ -1,177 +0,0 @@ -dnl Alpha mpn_divrem_2 -- Divide an mpn number by a normalized 2-limb number. - -dnl Copyright 2007, 2008, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C norm frac -C ev4 -C ev5 70 70 -C ev6 29 29 - -C TODO -C * Perhaps inline mpn_invert_limb, that would allow us to not save/restore -C any registers (thus save ~10 cycles per call). -C * Use negated d1 and/or d0 to speed carry propagation. Might save a cycle -C or two. -C * Check cluster delays (for ev6). We very likely could save some cycles. -C * Use branch-free code for computing di. -C * CAVEAT: We rely on r19 not being clobbered by mpn_invert_limb call. - -C INPUT PARAMETERS -define(`qp', `r16') -define(`fn', `r17') -define(`up_param', `r18') -define(`un_param', `r19') -define(`dp', `r20') - -ASM_START() -PROLOGUE(mpn_divrem_2,gp) - lda r30, -80(r30) - stq r26, 0(r30) - stq r9, 8(r30) - stq r10, 16(r30) - stq r11, 24(r30) - stq r12, 32(r30) - stq r13, 40(r30) -C stq r14, 48(r30) - stq r15, 56(r30) - .prologue 1 - stq r16, 64(r30) - bis r31, r17, r15 - s8addq r19, r18, r13 - lda r13, -24(r13) - ldq r12, 8(r20) - ldq r10, 0(r20) - ldq r11, 16(r13) - ldq r9, 8(r13) - - bis r31, r31, r3 C most_significant_q_limb = 0 - cmpult r11, r12, r1 - bne r1, L(L8) - cmpule r11, r12, r1 - cmpult r9, r10, r2 - and r1, r2, r1 - bne r1, L(L8) - subq r11, r12, r11 - subq r11, r2, r11 - subq r9, r10, r9 - lda r3, 1(r31) C most_significant_q_limb = 1 -L(L8): stq r3, 72(r30) - - addq r15, r19, r19 - lda r19, -3(r19) - blt r19, L(L10) - bis r31, r12, r16 - jsr r26, mpn_invert_limb - LDGP( r29, 0(r26)) - mulq r0, r12, r4 C t0 = LO(di * d1) - umulh r0, r10, r2 C s1 = HI(di * d0) - addq r4, r10, r4 C t0 += d0 - cmpule r10, r4, r7 C (t0 < d0) - addq r4, r2, r4 C t0 += s1 - cmpult r4, r2, r1 - subq r1, r7, r7 C t1 (-1, 0, or 1) - blt r7, L(L42) -L(L22): - lda r0, -1(r0) C di-- - cmpult r4, r12, r1 C cy for: t0 -= d1 (below) - subq r7, r1, r7 C t1 -= cy - subq r4, r12, r4 C t0 -= d1 - bge r7, L(L22) -L(L42): - ldq r16, 64(r30) - s8addq r19, r16, r16 - ALIGN(16) -L(loop): - mulq r11, r0, r5 C q0 (early) - umulh r11, r0, r6 C q (early) - addq r5, r9, r8 C q0 += n1 - addq r6, r11, r6 C q += n2 - cmpult r8, r5, r1 C cy for: q0 += n1 - addq r6, r1, r6 C q += cy - unop - mulq r12, r6, r1 C LO(d1 * q) - umulh r10, r6, r7 C t1 = HI(d0 * q) - subq r9, r1, r9 C n1 -= LO(d1 * q) - mulq r10, r6, r4 C t0 = LO(d0 * q) - unop - cmple r15, r19, r5 C condition and n0... - beq r5, L(L31) - ldq r5, 0(r13) - lda r13, -8(r13) -L(L31): subq r9, r12, r9 C n1 -= d1 - cmpult r5, r10, r1 C - subq r9, r1, r9 C - subq r5, r10, r5 C n0 -= d0 - subq r9, r7, r9 C n1 -= t0 - cmpult r5, r4, r1 C - subq r9, r1, r2 C - subq r5, r4, r5 C n0 -= t1 - cmpult r2, r8, r1 C (n1 < q0) - addq r6, r1, r6 C q += cond - lda r1, -1(r1) C -(n1 >= q0) - and r1, r10, r4 C - addq r5, r4, r9 C n0 += mask & d0 - and r1, r12, r1 C - cmpult r9, r5, r11 C cy for: n0 += mask & d0 - addq r2, r1, r1 C n1 += mask & d1 - addq r1, r11, r11 C n1 += cy - cmpult r11, r12, r1 C - beq r1, L(fix) C -L(bck): stq r6, 0(r16) - lda r16, -8(r16) - lda r19, -1(r19) - bge r19, L(loop) - -L(L10): stq r9, 8(r13) - stq r11, 16(r13) - ldq r0, 72(r30) - ldq r26, 0(r30) - ldq r9, 8(r30) - ldq r10, 16(r30) - ldq r11, 24(r30) - ldq r12, 32(r30) - ldq r13, 40(r30) -C ldq r14, 48(r30) - ldq r15, 56(r30) - lda r30, 80(r30) - ret r31, (r26), 1 - -L(fix): cmpule r11, r12, r1 - cmpult r9, r10, r2 - and r1, r2, r1 - bne r1, L(bck) - subq r11, r12, r11 - subq r11, r2, r11 - subq r9, r10, r9 - lda r6, 1(r6) - br L(bck) -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev5/diveby3.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev5/diveby3.asm deleted file mode 100644 index 3758188e0200545270919fb582ac4ea440a55712..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev5/diveby3.asm +++ /dev/null @@ -1,332 +0,0 @@ -dnl Alpha mpn_divexact_by3c -- mpn division by 3, expecting no remainder. - -dnl Copyright 2004, 2005, 2009 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: 22 -C EV5: 11.5 -C EV6: 6.3 Note that mpn_bdiv_dbm1c is faster - -C TODO -C * Remove the unops, they benefit just ev6, which no longer uses this file. -C * Try prefetch for destination, using lds. -C * Improve feed-in code, by moving initial mulq earlier; make initial load -C to u0/u0 to save some copying. -C * Combine u0 and u2, u1 and u3. - -C INPUT PARAMETERS -define(`rp', `r16') -define(`up', `r17') -define(`n', `r18') -define(`cy', `r19') - -ASM_START() - -DATASTART(L(LC),8) - .quad 0xAAAAAAAAAAAAAAAB - .quad 0x5555555555555555 - .quad 0xAAAAAAAAAAAAAAAA -DATAEND() - -define(`xAAAAAAAAAAAAAAAB', `r20') -define(`x5555555555555555', `r21') -define(`xAAAAAAAAAAAAAAAA', `r22') -define(`u0', `r0') define(`u1', `r1') -define(`u2', `r2') define(`u3', `r3') -define(`l0', `r25') define(`x', `r8') -define(`q0', `r4') define(`q1', `r5') -define(`p6', `r6') define(`p7', `r7') -define(`t0', `r23') define(`t1', `r24') -define(`cymask',`r28') - - -PROLOGUE(mpn_divexact_by3c,gp) - - ldq r28, 0(up) C load first limb early - -C Put magic constants in registers - lda r0, L(LC) - ldq xAAAAAAAAAAAAAAAB, 0(r0) - ldq x5555555555555555, 8(r0) - ldq xAAAAAAAAAAAAAAAA, 16(r0) - -C Compute initial l0 value - cmpeq cy, 1, p6 - cmpeq cy, 2, p7 - negq p6, p6 - and p6, x5555555555555555, l0 - cmovne p7, xAAAAAAAAAAAAAAAA, l0 - -C Feed-in depending on (n mod 4) - and n, 3, r8 - lda n, -3(n) - cmpeq r8, 1, r4 - cmpeq r8, 2, r5 - bne r4, $Lb01 - bne r5, $Lb10 - beq r8, $Lb00 - -$Lb11: ldq u3, 8(up) - lda up, -24(up) - lda rp, -24(rp) - mulq r28, xAAAAAAAAAAAAAAAB, q0 - mov r28, u2 - br r31, $L11 - -$Lb00: ldq u2, 8(up) - lda up, -16(up) - lda rp, -16(rp) - mulq r28, xAAAAAAAAAAAAAAAB, q1 - mov r28, u1 - br r31, $L00 - -$Lb01: lda rp, -8(rp) - mulq r28, xAAAAAAAAAAAAAAAB, q0 - mov r28, u0 - blt n, $Lcj1 - ldq u1, 8(up) - lda up, -8(up) - br r31, $L01 - -$Lb10: ldq u0, 8(up) - mulq r28, xAAAAAAAAAAAAAAAB, q1 - mov r28, u3 - blt n, $Lend - - ALIGN(16) -$Ltop: -C 0 - cmpult u3, cy, cy C L0 - mulq u0, xAAAAAAAAAAAAAAAB, q0 C U1 - ldq u1, 16(up) C L1 - addq q1, l0, x C U0 -C 1 - negq cy, cymask C L0 - unop C U1 - unop C L1 - cmpult x5555555555555555, x, p6 C U0 -C 2 - cmpult xAAAAAAAAAAAAAAAA, x, p7 C U1 - unop - unop - negq p6, t0 C L0 -C 3 - negq p7, t1 C L0 - and cymask, x5555555555555555, l0 C U1 - addq p6, cy, cy - and t0, x5555555555555555, t0 -C 4 - and t1, x5555555555555555, t1 - addq p7, cy, cy - unop - addq t0, l0, l0 -C 5 - addq t1, l0, l0 - unop - stq x, 0(rp) C L1 - unop -$L01: -C 0 - cmpult u0, cy, cy C L0 - mulq u1, xAAAAAAAAAAAAAAAB, q1 C U1 - ldq u2, 24(up) C L1 - addq q0, l0, x C U0 -C 1 - negq cy, cymask C L0 - unop C U1 - unop C L1 - cmpult x5555555555555555, x, p6 C U0 -C 2 - cmpult xAAAAAAAAAAAAAAAA, x, p7 C U1 - unop - unop - negq p6, t0 C L0 -C 3 - negq p7, t1 C L0 - and cymask, x5555555555555555, l0 C U1 - addq p6, cy, cy - and t0, x5555555555555555, t0 -C 4 - and t1, x5555555555555555, t1 - addq p7, cy, cy - unop - addq t0, l0, l0 -C 5 - addq t1, l0, l0 - unop - stq x, 8(rp) C L1 - unop -$L00: -C 0 - cmpult u1, cy, cy C L0 - mulq u2, xAAAAAAAAAAAAAAAB, q0 C U1 - ldq u3, 32(up) C L1 - addq q1, l0, x C U0 -C 1 - negq cy, cymask C L0 - unop C U1 - unop C L1 - cmpult x5555555555555555, x, p6 C U0 -C 2 - cmpult xAAAAAAAAAAAAAAAA, x, p7 C U1 - unop - unop - negq p6, t0 C L0 -C 3 - negq p7, t1 C L0 - and cymask, x5555555555555555, l0 C U1 - addq p6, cy, cy - and t0, x5555555555555555, t0 -C 4 - and t1, x5555555555555555, t1 - addq p7, cy, cy - unop - addq t0, l0, l0 -C 5 - addq t1, l0, l0 - unop - stq x, 16(rp) C L1 - unop -$L11: -C 0 - cmpult u2, cy, cy C L0 - mulq u3, xAAAAAAAAAAAAAAAB, q1 C U1 - ldq u0, 40(up) C L1 - addq q0, l0, x C U0 -C 1 - negq cy, cymask C L0 - unop C U1 - unop C L1 - cmpult x5555555555555555, x, p6 C U0 -C 2 - cmpult xAAAAAAAAAAAAAAAA, x, p7 C U1 - lda n, -4(n) C L1 bookkeeping - unop - negq p6, t0 C L0 -C 3 - negq p7, t1 C L0 - and cymask, x5555555555555555, l0 C U1 - addq p6, cy, cy - and t0, x5555555555555555, t0 -C 4 - and t1, x5555555555555555, t1 - addq p7, cy, cy - unop - addq t0, l0, l0 -C 5 - addq t1, l0, l0 - unop - stq x, 24(rp) C L1 - lda up, 32(up) -C - ldl r31, 256(up) C prefetch - unop - lda rp, 32(rp) - bge n, $Ltop C U1 -C *** MAIN LOOP END *** -$Lend: - - cmpult u3, cy, cy C L0 - mulq u0, xAAAAAAAAAAAAAAAB, q0 C U1 - unop - addq q1, l0, x C U0 -C 1 - negq cy, cymask C L0 - unop C U1 - unop C L1 - cmpult x5555555555555555, x, p6 C U0 -C 2 - cmpult xAAAAAAAAAAAAAAAA, x, p7 C U1 - unop - unop - negq p6, t0 C L0 -C 3 - negq p7, t1 C L0 - and cymask, x5555555555555555, l0 C U1 - addq p6, cy, cy - and t0, x5555555555555555, t0 -C 4 - and t1, x5555555555555555, t1 - addq p7, cy, cy - unop - addq t0, l0, l0 -C 5 - addq t1, l0, l0 - unop - stq x, 0(rp) C L1 - unop -$Lcj1: - cmpult u0, cy, cy C L0 - addq q0, l0, x C U0 - cmpult x5555555555555555, x, p6 C U0 - cmpult xAAAAAAAAAAAAAAAA, x, p7 C U1 - addq p6, cy, cy - addq p7, cy, r0 - stq x, 8(rp) C L1 - - ret r31,(r26),1 -EPILOGUE() -ASM_END() - -C This is useful for playing with various schedules. -C Expand as: one(0)one(1)one(2)one(3) -define(`one',` -C 0 - cmpult `$'eval(($1+3)%4), cy, cy C L0 - mulq `$'$1, xAAAAAAAAAAAAAAAB, `$'eval(4+$1%2) C U1 - ldq `$'eval(($1+1)%4), eval($1*8+16)(up) C L1 - addq `$'eval(4+($1+1)%2), l0, x C U0 -C 1 - negq cy, cymask C L0 - unop C U1 - unop C L1 - cmpult x5555555555555555, x, p6 C U0 -C 2 - cmpult xAAAAAAAAAAAAAAAA, x, p7 C U1 - unop - unop - negq p6, t0 C L0 -C 3 - negq p7, t1 C L0 - and cymask, x5555555555555555, l0 C U1 - addq p6, cy, cy - and t0, x5555555555555555, t0 -C 4 - and t1, x5555555555555555, t1 - addq p7, cy, cy - unop - addq t0, l0, l0 -C 5 - addq t1, l0, l0 - unop - stq x, eval($1*8)(rp) C L1 - unop -') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev5/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev5/gmp-mparam.h deleted file mode 100644 index b560c20afec34ef54cd22c5bdfadf4775b94c422..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev5/gmp-mparam.h +++ /dev/null @@ -1,187 +0,0 @@ -/* Alpha EV5 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2002, 2004, 2005, 2008-2010, 2014 Free -Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* 600 MHz 21164A */ -/* FFT tuning limit = 5000000 */ -/* Generated by tuneup.c, 2014-03-12, gcc 4.5 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* preinv always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1P_METHOD 2 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 3 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 6 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 22 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 15 -#define USE_PREINV_DIVREM_1 1 /* preinv always */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD 76 - -#define MUL_TOOM22_THRESHOLD 14 -#define MUL_TOOM33_THRESHOLD 50 -#define MUL_TOOM44_THRESHOLD 118 -#define MUL_TOOM6H_THRESHOLD 157 -#define MUL_TOOM8H_THRESHOLD 236 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 73 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 77 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 81 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 56 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 70 - -#define SQR_BASECASE_THRESHOLD 0 /* always */ -#define SQR_TOOM2_THRESHOLD 22 -#define SQR_TOOM3_THRESHOLD 73 -#define SQR_TOOM4_THRESHOLD 178 -#define SQR_TOOM6_THRESHOLD 0 /* always */ -#define SQR_TOOM8_THRESHOLD 260 - -#define MULMID_TOOM42_THRESHOLD 18 - -#define MULMOD_BNM1_THRESHOLD 9 -#define SQRMOD_BNM1_THRESHOLD 12 - -#define MUL_FFT_MODF_THRESHOLD 284 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 284, 5}, { 11, 6}, { 6, 5}, { 13, 6}, \ - { 7, 5}, { 15, 6}, { 13, 7}, { 7, 6}, \ - { 15, 7}, { 8, 6}, { 17, 7}, { 13, 8}, \ - { 7, 7}, { 17, 8}, { 9, 7}, { 20, 8}, \ - { 11, 7}, { 23, 8}, { 13, 9}, { 7, 8}, \ - { 19, 9}, { 11, 8}, { 25,10}, { 7, 9}, \ - { 15, 8}, { 33, 9}, { 19, 8}, { 39, 9}, \ - { 23, 8}, { 47,10}, { 15, 9}, { 39,10}, \ - { 23, 9}, { 47,11}, { 15,10}, { 31, 9}, \ - { 67,10}, { 39, 9}, { 79,10}, { 47, 9}, \ - { 95,10}, { 55,11}, { 31,10}, { 63, 8}, \ - { 255, 7}, { 511,10}, { 71, 9}, { 143, 8}, \ - { 287, 7}, { 575, 9}, { 159, 8}, { 319,11}, \ - { 47,12}, { 31,11}, { 63, 9}, { 255, 8}, \ - { 511,10}, { 143, 9}, { 287,11}, { 79,10}, \ - { 159, 9}, { 319,10}, { 175, 9}, { 351, 8}, \ - { 703,10}, { 191, 9}, { 383,10}, { 207, 9}, \ - { 415,12}, { 63,10}, { 255,11}, { 143,10}, \ - { 287, 9}, { 575,11}, { 159,10}, { 319, 9}, \ - { 639,11}, { 175,12}, { 95,11}, { 191,10}, \ - { 383,11}, { 207,10}, { 415,11}, { 223,13}, \ - { 63,11}, { 287,10}, { 575,12}, { 159,11}, \ - { 319,10}, { 639,11}, { 351,12}, { 191,11}, \ - { 415,12}, { 223,11}, { 447,10}, { 895,11}, \ - { 479,12}, { 287,11}, { 575,12}, { 351,13}, \ - { 191,12}, { 479,13}, { 255,12}, { 575,13}, \ - { 319,12}, { 703,13}, { 383,12}, { 831,13}, \ - { 447,14}, { 255,13}, { 8192,14}, { 16384,15}, \ - { 32768,16}, { 65536,17}, { 131072,18}, { 262144,19}, \ - { 524288,20}, {1048576,21}, {2097152,22}, {4194304,23}, \ - {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 121 -#define MUL_FFT_THRESHOLD 4224 - -#define SQR_FFT_MODF_THRESHOLD 240 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 240, 5}, { 13, 6}, { 7, 5}, { 15, 6}, \ - { 14, 5}, { 29, 7}, { 9, 6}, { 19, 7}, \ - { 13, 6}, { 27, 8}, { 7, 7}, { 21, 8}, \ - { 11, 7}, { 29, 8}, { 19, 9}, { 11, 8}, \ - { 27,10}, { 7, 9}, { 15, 8}, { 33, 9}, \ - { 19, 8}, { 39, 9}, { 23, 8}, { 47,10}, \ - { 15, 9}, { 39,10}, { 23, 9}, { 47,11}, \ - { 15,10}, { 31, 9}, { 67,10}, { 39, 9}, \ - { 79,10}, { 47,11}, { 31,10}, { 63, 9}, \ - { 127, 8}, { 255,10}, { 71, 9}, { 143, 8}, \ - { 287,10}, { 79,11}, { 47,12}, { 31,11}, \ - { 63,10}, { 127, 9}, { 255,10}, { 143, 9}, \ - { 287,11}, { 79,10}, { 159, 9}, { 319,10}, \ - { 175,11}, { 95,10}, { 191, 9}, { 383,10}, \ - { 207, 9}, { 415,11}, { 111,10}, { 223,12}, \ - { 63,11}, { 175,12}, { 95,11}, { 207,13}, \ - { 63,12}, { 127,11}, { 287,12}, { 159,11}, \ - { 351,12}, { 191,11}, { 415,12}, { 223,11}, \ - { 447,13}, { 127,12}, { 351,13}, { 191,12}, \ - { 383,11}, { 767,12}, { 415,11}, { 831,12}, \ - { 447,14}, { 127,13}, { 255,12}, { 511,11}, \ - { 1087,12}, { 575,13}, { 319,12}, { 703,13}, \ - { 383,12}, { 831,13}, { 447,14}, { 255,13}, \ - { 511,12}, { 1023,13}, { 8192,14}, { 16384,15}, \ - { 32768,16}, { 65536,17}, { 131072,18}, { 262144,19}, \ - { 524288,20}, {1048576,21}, {2097152,22}, {4194304,23}, \ - {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 105 -#define SQR_FFT_THRESHOLD 3968 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 45 -#define MULLO_MUL_N_THRESHOLD 8397 - -#define DC_DIV_QR_THRESHOLD 47 -#define DC_DIVAPPR_Q_THRESHOLD 168 -#define DC_BDIV_QR_THRESHOLD 47 -#define DC_BDIV_Q_THRESHOLD 110 - -#define INV_MULMOD_BNM1_THRESHOLD 26 -#define INV_NEWTON_THRESHOLD 189 -#define INV_APPR_THRESHOLD 181 - -#define BINV_NEWTON_THRESHOLD 196 -#define REDC_1_TO_REDC_N_THRESHOLD 51 - -#define MU_DIV_QR_THRESHOLD 1558 -#define MU_DIVAPPR_Q_THRESHOLD 1558 -#define MUPI_DIV_QR_THRESHOLD 90 -#define MU_BDIV_QR_THRESHOLD 855 -#define MU_BDIV_Q_THRESHOLD 1078 - -#define POWM_SEC_TABLE 1,16,90,452,1221 - -#define MATRIX22_STRASSEN_THRESHOLD 11 -#define HGCD_THRESHOLD 99 -#define HGCD_APPR_THRESHOLD 103 -#define HGCD_REDUCE_THRESHOLD 2899 -#define GCD_DC_THRESHOLD 283 -#define GCDEXT_DC_THRESHOLD 201 -#define JACOBI_BASE_METHOD 3 - -#define GET_STR_DC_THRESHOLD 13 -#define GET_STR_PRECOMPUTE_THRESHOLD 28 -#define SET_STR_DC_THRESHOLD 426 -#define SET_STR_PRECOMPUTE_THRESHOLD 1505 - -#define FAC_DSC_THRESHOLD 1404 -#define FAC_ODD_THRESHOLD 0 /* always */ diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/add_n.asm deleted file mode 100644 index 9261f31b8a13c0c20a669c5c63114979f4ee63d6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/add_n.asm +++ /dev/null @@ -1,283 +0,0 @@ -dnl Alpha ev6 mpn_add_n -- Add two limb vectors of the same length > 0 and -dnl store sum in a third limb vector. - -dnl Copyright 2000, 2003, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: ? -C EV5: 5.4 -C EV6: 2.125 - -C INPUT PARAMETERS -C rp r16 -C up r17 -C vp r18 -C n r19 -C cy r20 (for mpn_add_nc) - -C TODO -C Finish cleaning up cy registers r22, r23 (make them use cy0/cy1) -C Use multi-pronged feed-in. -C Perform additional micro-tuning - -C This code was written in cooperation with ev6 pipeline expert Steve Root. - -C Pair loads and stores where possible -C Store pairs oct-aligned where possible (didn't need it here) -C Stores are delayed every third cycle -C Loads and stores are delayed by fills -C U stays still, put code there where possible (note alternation of U1 and U0) -C L moves because of loads and stores -C Note dampers in L to limit damage - -C This odd-looking optimization expects that were having random bits in our -C data, so that a pure zero result is unlikely. so we penalize the unlikely -C case to help the common case. - -define(`u0', `r0') define(`u1', `r3') -define(`v0', `r1') define(`v1', `r4') - -define(`cy0', `r20') define(`cy1', `r21') - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc) - -ASM_START() -PROLOGUE(mpn_add_nc) - br r31, $entry -EPILOGUE() -PROLOGUE(mpn_add_n) - bis r31, r31, cy0 C clear carry in -$entry: cmpult r19, 5, r22 C L1 move counter - ldq u1, 0(r17) C L0 get next ones - ldq v1, 0(r18) C L1 - bne r22, $Lsmall - - ldq u0, 8(r17) C L0 get next ones - ldq v0, 8(r18) C L1 - addq u1, v1, r5 C U0 add two data - - cmpult r5, v1, r23 C U0 did it carry - ldq u1, 16(r17) C L0 get next ones - ldq v1, 16(r18) C L1 - - addq u0, v0, r8 C U1 add two data - addq r5, cy0, r5 C U0 carry in - - cmpult r8, v0, r22 C U1 did it carry - beq r5, $fix5f C U0 fix exact zero -$ret5f: ldq u0, 24(r17) C L0 get next ones - ldq v0, 24(r18) C L1 - - addq r8, r23, r8 C U1 carry from last - addq u1, v1, r7 C U0 add two data - - beq r8, $fix6f C U1 fix exact zero -$ret6f: cmpult r7, v1, r23 C U0 did it carry - ldq u1, 32(r17) C L0 get next ones - ldq v1, 32(r18) C L1 - - lda r17, 40(r17) C L0 move pointer - lda r18, 40(r18) C L1 move pointer - - lda r16, -8(r16) - lda r19, -13(r19) C L1 move counter - blt r19, $Lend C U1 loop control - - -C Main loop. 8-way unrolled. - ALIGN(16) -$Loop: addq u0, v0, r2 C U1 add two data - addq r7, r22, r7 C U0 add in carry - stq r5, 8(r16) C L0 put an answer - stq r8, 16(r16) C L1 pair - - cmpult r2, v0, cy1 C U1 did it carry - beq r7, $fix7 C U0 fix exact 0 -$ret7: ldq u0, 0(r17) C L0 get next ones - ldq v0, 0(r18) C L1 - - bis r31, r31, r31 C L damp out - addq r2, r23, r2 C U1 carry from last - bis r31, r31, r31 C L moves in L ! - addq u1, v1, r5 C U0 add two data - - beq r2, $fix0 C U1 fix exact zero -$ret0: cmpult r5, v1, cy0 C U0 did it carry - ldq u1, 8(r17) C L0 get next ones - ldq v1, 8(r18) C L1 - - addq u0, v0, r8 C U1 add two data - addq r5, cy1, r5 C U0 carry from last - stq r7, 24(r16) C L0 store pair - stq r2, 32(r16) C L1 - - cmpult r8, v0, r22 C U1 did it carry - beq r5, $fix1 C U0 fix exact zero -$ret1: ldq u0, 16(r17) C L0 get next ones - ldq v0, 16(r18) C L1 - - lda r16, 64(r16) C L0 move pointer - addq r8, cy0, r8 C U1 carry from last - lda r19, -8(r19) C L1 move counter - addq u1, v1, r7 C U0 add two data - - beq r8, $fix2 C U1 fix exact zero -$ret2: cmpult r7, v1, r23 C U0 did it carry - ldq u1, 24(r17) C L0 get next ones - ldq v1, 24(r18) C L1 - - addq u0, v0, r2 C U1 add two data - addq r7, r22, r7 C U0 add in carry - stq r5, -24(r16) C L0 put an answer - stq r8, -16(r16) C L1 pair - - cmpult r2, v0, cy1 C U1 did it carry - beq r7, $fix3 C U0 fix exact 0 -$ret3: ldq u0, 32(r17) C L0 get next ones - ldq v0, 32(r18) C L1 - - bis r31, r31, r31 C L damp out - addq r2, r23, r2 C U1 carry from last - bis r31, r31, r31 C L moves in L ! - addq u1, v1, r5 C U0 add two data - - beq r2, $fix4 C U1 fix exact zero -$ret4: cmpult r5, v1, cy0 C U0 did it carry - ldq u1, 40(r17) C L0 get next ones - ldq v1, 40(r18) C L1 - - addq u0, v0, r8 C U1 add two data - addq r5, cy1, r5 C U0 carry from last - stq r7, -8(r16) C L0 store pair - stq r2, 0(r16) C L1 - - cmpult r8, v0, r22 C U1 did it carry - beq r5, $fix5 C U0 fix exact zero -$ret5: ldq u0, 48(r17) C L0 get next ones - ldq v0, 48(r18) C L1 - - ldl r31, 256(r17) C L0 prefetch - addq r8, cy0, r8 C U1 carry from last - ldl r31, 256(r18) C L1 prefetch - addq u1, v1, r7 C U0 add two data - - beq r8, $fix6 C U1 fix exact zero -$ret6: cmpult r7, v1, r23 C U0 did it carry - ldq u1, 56(r17) C L0 get next ones - ldq v1, 56(r18) C L1 - - lda r17, 64(r17) C L0 move pointer - bis r31, r31, r31 C U - lda r18, 64(r18) C L1 move pointer - bge r19, $Loop C U1 loop control -C ==== main loop end - -$Lend: addq u0, v0, r2 C U1 add two data - addq r7, r22, r7 C U0 add in carry - stq r5, 8(r16) C L0 put an answer - stq r8, 16(r16) C L1 pair - cmpult r2, v0, cy1 C U1 did it carry - beq r7, $fix7c C U0 fix exact 0 -$ret7c: addq r2, r23, r2 C U1 carry from last - addq u1, v1, r5 C U0 add two data - beq r2, $fix0c C U1 fix exact zero -$ret0c: cmpult r5, v1, cy0 C U0 did it carry - addq r5, cy1, r5 C U0 carry from last - stq r7, 24(r16) C L0 store pair - stq r2, 32(r16) C L1 - beq r5, $fix1c C U0 fix exact zero -$ret1c: stq r5, 40(r16) C L0 put an answer - lda r16, 48(r16) C L0 move pointer - - lda r19, 8(r19) - beq r19, $Lret - - ldq u1, 0(r17) - ldq v1, 0(r18) -$Lsmall: - lda r19, -1(r19) - beq r19, $Lend0 - - ALIGN(8) -$Loop0: addq u1, v1, r2 C main add - cmpult r2, v1, r8 C compute cy from last add - ldq u1, 8(r17) - ldq v1, 8(r18) - addq r2, cy0, r5 C carry add - lda r17, 8(r17) - lda r18, 8(r18) - stq r5, 0(r16) - cmpult r5, r2, cy0 C compute cy from last add - lda r19, -1(r19) C decr loop cnt - bis r8, cy0, cy0 C combine cy from the two adds - lda r16, 8(r16) - bne r19, $Loop0 -$Lend0: addq u1, v1, r2 C main add - addq r2, cy0, r5 C carry add - cmpult r2, v1, r8 C compute cy from last add - cmpult r5, r2, cy0 C compute cy from last add - stq r5, 0(r16) - bis r8, cy0, r0 C combine cy from the two adds - ret r31,(r26),1 - - ALIGN(8) -$Lret: lda r0, 0(cy0) C copy carry into return register - ret r31,(r26),1 - -$fix5f: bis r23, cy0, r23 C bring forward carry - br r31, $ret5f -$fix6f: bis r22, r23, r22 C bring forward carry - br r31, $ret6f -$fix0: bis cy1, r23, cy1 C bring forward carry - br r31, $ret0 -$fix1: bis cy0, cy1, cy0 C bring forward carry - br r31, $ret1 -$fix2: bis r22, cy0, r22 C bring forward carry - br r31, $ret2 -$fix3: bis r23, r22, r23 C bring forward carry - br r31, $ret3 -$fix4: bis cy1, r23, cy1 C bring forward carry - br r31, $ret4 -$fix5: bis cy1, cy0, cy0 C bring forward carry - br r31, $ret5 -$fix6: bis r22, cy0, r22 C bring forward carry - br r31, $ret6 -$fix7: bis r23, r22, r23 C bring forward carry - br r31, $ret7 -$fix0c: bis cy1, r23, cy1 C bring forward carry - br r31, $ret0c -$fix1c: bis cy0, cy1, cy0 C bring forward carry - br r31, $ret1c -$fix7c: bis r23, r22, r23 C bring forward carry - br r31, $ret7c - -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/aorslsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/aorslsh1_n.asm deleted file mode 100644 index cb966ce0213bf65895227d62a8792e991cc91ce3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/aorslsh1_n.asm +++ /dev/null @@ -1,172 +0,0 @@ -dnl Alpha mpn_addlsh1_n/mpn_sublsh1_n -- rp[] = up[] +- (vp[] << 1). - -dnl Copyright 2003, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: ? -C EV5: 7 -C EV6: 4 - -C TODO -C * Tune to reach 3.75 c/l on ev6. - -define(`rp',`r16') -define(`up',`r17') -define(`vp',`r18') -define(`n', `r19') - -define(`u0', `r8') -define(`u1', `r1') -define(`v0', `r4') -define(`v1', `r5') - -define(`cy0', `r0') -define(`cy1', `r20') -define(`cy', `r22') -define(`rr', `r24') -define(`ps', `r25') -define(`sl', `r28') - -ifdef(`OPERATION_addlsh1_n',` - define(ADDSUB, addq) - define(CARRY, `cmpult $1,$2,$3') - define(func, mpn_addlsh1_n) -') -ifdef(`OPERATION_sublsh1_n',` - define(ADDSUB, subq) - define(CARRY, `cmpult $2,$1,$3') - define(func, mpn_sublsh1_n) -') - -MULFUNC_PROLOGUE(mpn_addlsh1_n mpn_sublsh1_n) - -ASM_START() -PROLOGUE(func) - and n, 2, cy0 - blbs n, L(bx1) -L(bx0): ldq v1, 0(vp) - ldq u1, 0(up) - lda r2, 0(r31) - bne cy0, L(b10) - -L(b00): lda vp, 48(vp) - lda up, -16(up) - lda rp, -8(rp) - lda cy0, 0(r31) - br r31, L(lo0) - -L(b10): lda vp, 32(vp) - lda rp, 8(rp) - lda cy0, 0(r31) - br r31, L(lo2) - -L(bx1): ldq v0, 0(vp) - ldq u0, 0(up) - lda r3, 0(r31) - beq cy0, L(b01) - -L(b11): lda vp, 40(vp) - lda up, -24(up) - lda rp, 16(rp) - lda cy1, 0(r31) - br r31, L(lo3) - -L(b01): lda n, -4(n) - lda cy1, 0(r31) - ble n, L(end) - lda vp, 24(vp) - lda up, -8(up) - - ALIGN(16) -L(top): addq v0, v0, r6 - ldq v1, -16(vp) - addq r6, r3, sl C combined vlimb - ldq u1, 16(up) - ADDSUB u0, sl, ps C ulimb + (vlimb << 1) - cmplt v0, r31, r2 C high v bits - ADDSUB ps, cy1, rr C consume carry from previous operation - CARRY( ps, u0, cy0) C carry out #2 - stq rr, 0(rp) - CARRY( rr, ps, cy) C carry out #3 - lda vp, 32(vp) C bookkeeping - addq cy, cy0, cy0 C final carry out -L(lo0): addq v1, v1, r7 - ldq v0, -40(vp) - addq r7, r2, sl - ldq u0, 24(up) - ADDSUB u1, sl, ps - cmplt v1, r31, r3 - ADDSUB ps, cy0, rr - CARRY( ps, u1, cy1) - stq rr, 8(rp) - CARRY( rr, ps, cy) - lda rp, 32(rp) C bookkeeping - addq cy, cy1, cy1 -L(lo3): addq v0, v0, r6 - ldq v1, -32(vp) - addq r6, r3, sl - ldq u1, 32(up) - ADDSUB u0, sl, ps - cmplt v0, r31, r2 - ADDSUB ps, cy1, rr - CARRY( ps, u0, cy0) - stq rr, -16(rp) - CARRY( rr, ps, cy) - lda up, 32(up) C bookkeeping - addq cy, cy0, cy0 -L(lo2): addq v1, v1, r7 - ldq v0, -24(vp) - addq r7, r2, sl - ldq u0, 8(up) - ADDSUB u1, sl, ps - cmplt v1, r31, r3 - ADDSUB ps, cy0, rr - CARRY( ps, u1, cy1) - stq rr, -8(rp) - CARRY( rr, ps, cy) - lda n, -4(n) C bookkeeping - addq cy, cy1, cy1 - bgt n, L(top) - -L(end): addq v0, v0, r6 - addq r6, r3, sl - ADDSUB u0, sl, ps - cmplt v0, r31, r2 - ADDSUB ps, cy1, rr - CARRY( ps, u0, cy0) - stq rr, 0(rp) - CARRY( rr, ps, cy) - addq cy, cy0, cy0 - addq cy0, r2, r0 - - ret r31,(r26),1 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/aorsmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/aorsmul_1.asm deleted file mode 100644 index 0e68e6e7adb4ca296449836fe5cc94b9bc59d0f8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/aorsmul_1.asm +++ /dev/null @@ -1,398 +0,0 @@ -dnl Alpha ev6 mpn_addmul_1 and mpn_submul_1. - -dnl Copyright 2000, 2003-2005, 2008 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: 42 -C EV5: 18 -C EV6: 3.5 - -C INPUT PARAMETERS -define(`rp', `r16') -define(`up', `r17') -define(`n', `r18') -define(`v0', `r19') - -dnl This code was written in cooperation with ev6 pipeline expert Steve Root. - -dnl The stores can issue a cycle late so we have paired no-op's to 'catch' -dnl them, so that further disturbance to the schedule is damped. - -dnl We couldn't pair the loads, because the entangled schedule of the carry's -dnl has to happen on one side {0} of the machine. - -dnl This is a great schedule for the d_cache, a poor schedule for the b_cache. -dnl The lockup on U0 means that any stall can't be recovered from. Consider a -dnl ldq in L1, say that load gets stalled because it collides with a fill from -dnl the b_cache. On the next cycle, this load gets priority. If first looks -dnl at L0, and goes there. The instruction we intended for L0 gets to look at -dnl L1, which is NOT where we want it. It either stalls 1, because it can't -dnl go in L0, or goes there, and causes a further instruction to stall. - -dnl So for b_cache, we're likely going to want to put one or more cycles back -dnl into the code! And, of course, put in lds prefetch for the rp[] operand. -dnl At a place where we have an mt followed by a bookkeeping, put the -dnl bookkeeping in upper, and the prefetch into lower. - -dnl Note, the ldq's and stq's are at the end of the quadpacks. Note, we'd -dnl like not to have an ldq or an stq to preceded a conditional branch in a -dnl quadpack. The conditional branch moves the retire pointer one cycle -dnl later. - -ifdef(`OPERATION_addmul_1',` - define(`ADDSUB', `addq') - define(`CMPCY', `cmpult $2,$1') - define(`func', `mpn_addmul_1') -') -ifdef(`OPERATION_submul_1',` - define(`ADDSUB', `subq') - define(`CMPCY', `cmpult $1,$2') - define(`func', `mpn_submul_1') -') - -MULFUNC_PROLOGUE(mpn_addmul_1 mpn_submul_1) - -ASM_START() -PROLOGUE(func) - ldq r3, 0(up) C - and r18, 7, r20 C - lda r18, -9(r18) C - cmpeq r20, 1, r21 C - beq r21, $L1 C - -$1mod8: ldq r5, 0(rp) C - mulq v0, r3, r7 C - umulh v0, r3, r8 C - ADDSUB r5, r7, r23 C - CMPCY( r5, r23), r20 C - addq r8, r20, r0 C - stq r23, 0(rp) C - bge r18, $ent1 C - ret r31, (r26), 1 C - -$L1: lda r8, 0(r31) C zero carry reg - lda r24, 0(r31) C zero carry reg - cmpeq r20, 2, r21 C - bne r21, $2mod8 C - cmpeq r20, 3, r21 C - bne r21, $3mod8 C - cmpeq r20, 4, r21 C - bne r21, $4mod8 C - cmpeq r20, 5, r21 C - bne r21, $5mod8 C - cmpeq r20, 6, r21 C - bne r21, $6mod8 C - cmpeq r20, 7, r21 C - beq r21, $0mod8 C - -$7mod8: ldq r5, 0(rp) C - lda up, 8(up) C - mulq v0, r3, r7 C - umulh v0, r3, r24 C - ADDSUB r5, r7, r23 C - CMPCY( r5, r23), r20 C - addq r24, r20, r24 C - stq r23, 0(rp) C - lda rp, 8(rp) C - ldq r3, 0(up) C -$6mod8: ldq r1, 8(up) C - mulq v0, r3, r25 C - umulh v0, r3, r3 C - mulq v0, r1, r28 C - ldq r0, 16(up) C - ldq r4, 0(rp) C - umulh v0, r1, r8 C - ldq r1, 24(up) C - lda up, 48(up) C L1 bookkeeping - mulq v0, r0, r2 C - ldq r5, 8(rp) C - lda rp, -32(rp) C L1 bookkeeping - umulh v0, r0, r6 C - ADDSUB r4, r25, r25 C lo + acc - mulq v0, r1, r7 C - br r31, $ent6 C - -$ent1: lda up, 8(up) C - lda rp, 8(rp) C - lda r8, 0(r0) C - ldq r3, 0(up) C -$0mod8: ldq r1, 8(up) C - mulq v0, r3, r2 C - umulh v0, r3, r6 C - mulq v0, r1, r7 C - ldq r0, 16(up) C - ldq r4, 0(rp) C - umulh v0, r1, r24 C - ldq r1, 24(up) C - mulq v0, r0, r25 C - ldq r5, 8(rp) C - umulh v0, r0, r3 C - ADDSUB r4, r2, r2 C lo + acc - mulq v0, r1, r28 C - lda rp, -16(rp) C - br r31, $ent0 C - -$3mod8: ldq r5, 0(rp) C - lda up, 8(up) C - mulq v0, r3, r7 C - umulh v0, r3, r8 C - ADDSUB r5, r7, r23 C - CMPCY( r5, r23), r20 C - addq r8, r20, r24 C - stq r23, 0(rp) C - lda rp, 8(rp) C - ldq r3, 0(up) C -$2mod8: ldq r1, 8(up) C - mulq v0, r3, r25 C - umulh v0, r3, r3 C - mulq v0, r1, r28 C - ble r18, $n23 C - ldq r0, 16(up) C - ldq r4, 0(rp) C - umulh v0, r1, r8 C - ldq r1, 24(up) C - lda up, 16(up) C L1 bookkeeping - mulq v0, r0, r2 C - ldq r5, 8(rp) C - lda rp, 0(rp) C L1 bookkeeping - umulh v0, r0, r6 C - ADDSUB r4, r25, r25 C lo + acc - mulq v0, r1, r7 C - br r31, $ent2 C - -$5mod8: ldq r5, 0(rp) C - lda up, 8(up) C - mulq v0, r3, r7 C - umulh v0, r3, r24 C - ADDSUB r5, r7, r23 C - CMPCY( r5, r23), r20 C - addq r24, r20, r8 C - stq r23, 0(rp) C - lda rp, 8(rp) C - ldq r3, 0(up) C -$4mod8: ldq r1, 8(up) C - mulq v0, r3, r2 C - umulh v0, r3, r6 C - mulq v0, r1, r7 C - ldq r0, 16(up) C - ldq r4, 0(rp) C - umulh v0, r1, r24 C - ldq r1, 24(up) C - lda up, 32(up) C L1 bookkeeping - mulq v0, r0, r25 C - ldq r5, 8(rp) C - lda rp, 16(rp) C L1 bookkeeping - umulh v0, r0, r3 C - ADDSUB r4, r2, r2 C lo + acc - mulq v0, r1, r28 C - CMPCY( r4, r2), r20 C L0 lo add => carry - ADDSUB r2, r8, r22 C U0 hi add => answer - ble r18, $Lend C - ALIGN(16) -$Loop: - bis r31, r31, r31 C U1 mt - CMPCY( r2, r22), r21 C L0 hi add => carry - addq r6, r20, r6 C U0 hi mul + carry - ldq r0, 0(up) C - - bis r31, r31, r31 C U1 mt - ADDSUB r5, r7, r7 C L0 lo + acc - addq r6, r21, r6 C U0 hi mul + carry - ldq r4, 0(rp) C L1 - - umulh v0, r1, r8 C U1 - CMPCY( r5, r7), r20 C L0 lo add => carry - ADDSUB r7, r6, r23 C U0 hi add => answer - ldq r1, 8(up) C L1 - - mulq v0, r0, r2 C U1 - CMPCY( r7, r23), r21 C L0 hi add => carry - addq r24, r20, r24 C U0 hi mul + carry - ldq r5, 8(rp) C L1 - - umulh v0, r0, r6 C U1 - ADDSUB r4, r25, r25 C U0 lo + acc - stq r22, -16(rp) C L0 - stq r23, -8(rp) C L1 - - bis r31, r31, r31 C L0 st slosh - mulq v0, r1, r7 C U1 - bis r31, r31, r31 C L1 st slosh - addq r24, r21, r24 C U0 hi mul + carry -$ent2: - CMPCY( r4, r25), r20 C L0 lo add => carry - bis r31, r31, r31 C U1 mt - lda r18, -8(r18) C L1 bookkeeping - ADDSUB r25, r24, r22 C U0 hi add => answer - - bis r31, r31, r31 C U1 mt - CMPCY( r25, r22), r21 C L0 hi add => carry - addq r3, r20, r3 C U0 hi mul + carry - ldq r0, 16(up) C L1 - - bis r31, r31, r31 C U1 mt - ADDSUB r5, r28, r28 C L0 lo + acc - addq r3, r21, r3 C U0 hi mul + carry - ldq r4, 16(rp) C L1 - - umulh v0, r1, r24 C U1 - CMPCY( r5, r28), r20 C L0 lo add => carry - ADDSUB r28, r3, r23 C U0 hi add => answer - ldq r1, 24(up) C L1 - - mulq v0, r0, r25 C U1 - CMPCY( r28, r23), r21 C L0 hi add => carry - addq r8, r20, r8 C U0 hi mul + carry - ldq r5, 24(rp) C L1 - - umulh v0, r0, r3 C U1 - ADDSUB r4, r2, r2 C U0 lo + acc - stq r22, 0(rp) C L0 - stq r23, 8(rp) C L1 - - bis r31, r31, r31 C L0 st slosh - mulq v0, r1, r28 C U1 - bis r31, r31, r31 C L1 st slosh - addq r8, r21, r8 C U0 hi mul + carry -$ent0: - CMPCY( r4, r2), r20 C L0 lo add => carry - bis r31, r31, r31 C U1 mt - lda up, 64(up) C L1 bookkeeping - ADDSUB r2, r8, r22 C U0 hi add => answer - - bis r31, r31, r31 C U1 mt - CMPCY( r2, r22), r21 C L0 hi add => carry - addq r6, r20, r6 C U0 hi mul + carry - ldq r0, -32(up) C L1 - - bis r31, r31, r31 C U1 mt - ADDSUB r5, r7, r7 C L0 lo + acc - addq r6, r21, r6 C U0 hi mul + carry - ldq r4, 32(rp) C L1 - - umulh v0, r1, r8 C U1 - CMPCY( r5, r7), r20 C L0 lo add => carry - ADDSUB r7, r6, r23 C U0 hi add => answer - ldq r1, -24(up) C L1 - - mulq v0, r0, r2 C U1 - CMPCY( r7, r23), r21 C L0 hi add => carry - addq r24, r20, r24 C U0 hi mul + carry - ldq r5, 40(rp) C L1 - - umulh v0, r0, r6 C U1 - ADDSUB r4, r25, r25 C U0 lo + acc - stq r22, 16(rp) C L0 - stq r23, 24(rp) C L1 - - bis r31, r31, r31 C L0 st slosh - mulq v0, r1, r7 C U1 - bis r31, r31, r31 C L1 st slosh - addq r24, r21, r24 C U0 hi mul + carry -$ent6: - CMPCY( r4, r25), r20 C L0 lo add => carry - bis r31, r31, r31 C U1 mt - lda rp, 64(rp) C L1 bookkeeping - ADDSUB r25, r24, r22 C U0 hi add => answer - - bis r31, r31, r31 C U1 mt - CMPCY( r25, r22), r21 C L0 hi add => carry - addq r3, r20, r3 C U0 hi mul + carry - ldq r0, -16(up) C L1 - - bis r31, r31, r31 C U1 mt - ADDSUB r5, r28, r28 C L0 lo + acc - addq r3, r21, r3 C U0 hi mul + carry - ldq r4, -16(rp) C L1 - - umulh v0, r1, r24 C U1 - CMPCY( r5, r28), r20 C L0 lo add => carry - ADDSUB r28, r3, r23 C U0 hi add => answer - ldq r1, -8(up) C L1 - - mulq v0, r0, r25 C U1 - CMPCY( r28, r23), r21 C L0 hi add => carry - addq r8, r20, r8 C U0 hi mul + carry - ldq r5, -8(rp) C L1 - - umulh v0, r0, r3 C U1 - ADDSUB r4, r2, r2 C U0 lo + acc - stq r22, -32(rp) C L0 - stq r23, -24(rp) C L1 - - bis r31, r31, r31 C L0 st slosh - mulq v0, r1, r28 C U1 - bis r31, r31, r31 C L1 st slosh - addq r8, r21, r8 C U0 hi mul + carry - - CMPCY( r4, r2), r20 C L0 lo add => carry - ADDSUB r2, r8, r22 C U0 hi add => answer - ldl r31, 256(up) C prefetch up[] - bgt r18, $Loop C U1 bookkeeping - -$Lend: CMPCY( r2, r22), r21 C - addq r6, r20, r6 C - ADDSUB r5, r7, r7 C - addq r6, r21, r6 C - ldq r4, 0(rp) C - umulh v0, r1, r8 C - CMPCY( r5, r7), r20 C - ADDSUB r7, r6, r23 C - CMPCY(r7, r23), r21 C - addq r24, r20, r24 C - ldq r5, 8(rp) C - ADDSUB r4, r25, r25 C - stq r22, -16(rp) C - stq r23, -8(rp) C - addq r24, r21, r24 C - br L(x) - - ALIGN(16) -$n23: ldq r4, 0(rp) C - ldq r5, 8(rp) C - umulh v0, r1, r8 C - ADDSUB r4, r25, r25 C -L(x): CMPCY( r4, r25), r20 C - ADDSUB r25, r24, r22 C - CMPCY( r25, r22), r21 C - addq r3, r20, r3 C - ADDSUB r5, r28, r28 C - addq r3, r21, r3 C - CMPCY( r5, r28), r20 C - ADDSUB r28, r3, r23 C - CMPCY( r28, r23), r21 C - addq r8, r20, r8 C - stq r22, 0(rp) C - stq r23, 8(rp) C - addq r8, r21, r0 C - ret r31, (r26), 1 C -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/gmp-mparam.h deleted file mode 100644 index e51d6b0d15947ef4209856cf3005557cc93bddd9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/gmp-mparam.h +++ /dev/null @@ -1,209 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2002, 2004, 2005, 2008-2010, 2014 Free -Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -#define DIVEXACT_BY3_METHOD 0 /* override ../diveby3.asm */ - -/* 500 MHz 21164 (agnesi.math.su.se) */ -/* FFT tuning limit = 20000000 */ -/* Generated by tuneup.c, 2014-03-14, gcc 3.3 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* preinv always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1P_METHOD 2 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 4 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 2 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 10 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 21 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 7 -#define USE_PREINV_DIVREM_1 1 /* preinv always */ -#define DIV_QR_1N_PI1_METHOD 2 -#define DIV_QR_1_NORM_THRESHOLD 5 -#define DIV_QR_1_UNNORM_THRESHOLD 1 -#define DIV_QR_2_PI2_THRESHOLD 8 -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD 20 - -#define MUL_TOOM22_THRESHOLD 32 -#define MUL_TOOM33_THRESHOLD 117 -#define MUL_TOOM44_THRESHOLD 124 -#define MUL_TOOM6H_THRESHOLD 230 -#define MUL_TOOM8H_THRESHOLD 357 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 97 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 107 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 88 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 105 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 136 - -#define SQR_BASECASE_THRESHOLD 0 /* always */ -#define SQR_TOOM2_THRESHOLD 59 -#define SQR_TOOM3_THRESHOLD 123 -#define SQR_TOOM4_THRESHOLD 163 -#define SQR_TOOM6_THRESHOLD 333 -#define SQR_TOOM8_THRESHOLD 0 /* always */ - -#define MULMID_TOOM42_THRESHOLD 52 - -#define MULMOD_BNM1_THRESHOLD 19 -#define SQRMOD_BNM1_THRESHOLD 5 - -#define MUL_FFT_MODF_THRESHOLD 468 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 468, 5}, { 19, 6}, { 10, 5}, { 21, 6}, \ - { 11, 5}, { 23, 6}, { 19, 7}, { 10, 6}, \ - { 24, 7}, { 13, 6}, { 27, 7}, { 14, 6}, \ - { 29, 7}, { 17, 6}, { 35, 7}, { 29, 8}, \ - { 15, 7}, { 32, 8}, { 17, 7}, { 35, 8}, \ - { 19, 7}, { 39, 8}, { 29, 9}, { 15, 8}, \ - { 35, 9}, { 19, 8}, { 41, 9}, { 23, 8}, \ - { 51, 9}, { 27, 8}, { 55, 9}, { 35, 8}, \ - { 71, 9}, { 39,10}, { 23, 9}, { 55,10}, \ - { 31, 9}, { 67,10}, { 39, 9}, { 79,10}, \ - { 47, 9}, { 95,10}, { 55,11}, { 31,10}, \ - { 79,11}, { 47,10}, { 103,12}, { 31,11}, \ - { 63,10}, { 135,11}, { 79,10}, { 167,11}, \ - { 95,10}, { 199,11}, { 111,12}, { 63,11}, \ - { 143,10}, { 287, 9}, { 575,11}, { 159,10}, \ - { 319,12}, { 95,11}, { 191,10}, { 383,11}, \ - { 207,13}, { 63,12}, { 127,11}, { 255,10}, \ - { 511,11}, { 271,10}, { 543,11}, { 287,10}, \ - { 575,12}, { 159,11}, { 319,10}, { 639,11}, \ - { 335,10}, { 671,11}, { 351,10}, { 703,12}, \ - { 191,11}, { 383,10}, { 767,11}, { 415,12}, \ - { 223,11}, { 447,13}, { 127,12}, { 255,11}, \ - { 543,12}, { 287,11}, { 575,10}, { 1151,11}, \ - { 607,12}, { 319,11}, { 671,12}, { 351,11}, \ - { 703,13}, { 191,12}, { 383,11}, { 767,12}, \ - { 415,11}, { 831,12}, { 447,14}, { 127,13}, \ - { 255,12}, { 575,11}, { 1151,12}, { 607,13}, \ - { 319,12}, { 735,13}, { 383,12}, { 767,11}, \ - { 1535,12}, { 831,13}, { 447,12}, { 959,14}, \ - { 255,13}, { 511,12}, { 1087,13}, { 575,12}, \ - { 1215,13}, { 639,12}, { 1343,13}, { 703,12}, \ - { 1407,14}, { 383,13}, { 767,12}, { 1535,13}, \ - { 831,12}, { 1663,13}, { 959,15}, { 255,14}, \ - { 511,13}, { 1215,14}, { 639,13}, { 1407,14}, \ - { 767,13}, { 1663,14}, { 895,13}, { 1855,15}, \ - { 511,14}, { 16384,15}, { 32768,16}, { 65536,17}, \ - { 131072,18}, { 262144,19}, { 524288,20}, {1048576,21}, \ - {2097152,22}, {4194304,23}, {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 151 -#define MUL_FFT_THRESHOLD 5760 - -#define SQR_FFT_MODF_THRESHOLD 412 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 412, 5}, { 19, 6}, { 10, 5}, { 21, 6}, \ - { 11, 5}, { 23, 6}, { 12, 5}, { 25, 6}, \ - { 27, 7}, { 14, 6}, { 29, 7}, { 28, 8}, \ - { 15, 7}, { 31, 8}, { 17, 7}, { 36, 8}, \ - { 19, 7}, { 39, 8}, { 29, 9}, { 15, 8}, \ - { 35, 9}, { 19, 8}, { 41, 9}, { 23, 8}, \ - { 49, 9}, { 27,10}, { 15, 9}, { 39,10}, \ - { 23, 9}, { 51,11}, { 15,10}, { 31, 9}, \ - { 67,10}, { 39, 9}, { 79,10}, { 47, 9}, \ - { 95,10}, { 55,11}, { 31,10}, { 79,11}, \ - { 47,10}, { 95,12}, { 31,11}, { 63,10}, \ - { 127, 9}, { 255,11}, { 79,10}, { 159, 9}, \ - { 319,10}, { 167,11}, { 95,10}, { 191, 9}, \ - { 383,11}, { 111,12}, { 63,11}, { 127,10}, \ - { 271,11}, { 143,10}, { 287, 9}, { 575,10}, \ - { 303,11}, { 159,10}, { 319,12}, { 95,11}, \ - { 191,10}, { 383,11}, { 207,13}, { 63,12}, \ - { 127,11}, { 255,10}, { 511,11}, { 271,10}, \ - { 543,11}, { 287,10}, { 575,11}, { 303,12}, \ - { 159,11}, { 319,10}, { 639,11}, { 335,10}, \ - { 671,11}, { 351,10}, { 703,11}, { 367,12}, \ - { 191,11}, { 383,10}, { 767,11}, { 415,12}, \ - { 223,11}, { 447,13}, { 127,12}, { 255,11}, \ - { 543,12}, { 287,11}, { 575,10}, { 1151,11}, \ - { 607,12}, { 319,11}, { 639,10}, { 1279,11}, \ - { 671,12}, { 351,11}, { 703,13}, { 191,12}, \ - { 383,11}, { 767,12}, { 415,11}, { 831,12}, \ - { 447,11}, { 895,12}, { 479,14}, { 127,13}, \ - { 255,12}, { 575,11}, { 1151,12}, { 607,13}, \ - { 319,12}, { 703,11}, { 1407,12}, { 735,13}, \ - { 383,12}, { 831,13}, { 447,12}, { 959,14}, \ - { 255,13}, { 511,12}, { 1087,13}, { 575,12}, \ - { 1151,13}, { 639,12}, { 1279,13}, { 703,12}, \ - { 1407,14}, { 383,13}, { 767,12}, { 1535,13}, \ - { 831,12}, { 1663,13}, { 959,15}, { 255,14}, \ - { 511,13}, { 1215,14}, { 639,13}, { 1407,14}, \ - { 767,13}, { 1663,14}, { 895,13}, { 1791,15}, \ - { 511,14}, { 16384,15}, { 32768,16}, { 65536,17}, \ - { 131072,18}, { 262144,19}, { 524288,20}, {1048576,21}, \ - {2097152,22}, {4194304,23}, {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 159 -#define SQR_FFT_THRESHOLD 5056 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 100 -#define MULLO_MUL_N_THRESHOLD 11355 - -#define DC_DIV_QR_THRESHOLD 124 -#define DC_DIVAPPR_Q_THRESHOLD 438 -#define DC_BDIV_QR_THRESHOLD 153 -#define DC_BDIV_Q_THRESHOLD 318 - -#define INV_MULMOD_BNM1_THRESHOLD 62 -#define INV_NEWTON_THRESHOLD 384 -#define INV_APPR_THRESHOLD 402 - -#define BINV_NEWTON_THRESHOLD 381 -#define REDC_1_TO_REDC_N_THRESHOLD 110 - -#define MU_DIV_QR_THRESHOLD 1752 -#define MU_DIVAPPR_Q_THRESHOLD 1895 -#define MUPI_DIV_QR_THRESHOLD 174 -#define MU_BDIV_QR_THRESHOLD 1387 -#define MU_BDIV_Q_THRESHOLD 1787 - -#define POWM_SEC_TABLE 1,13,66,82,579 - -#define MATRIX22_STRASSEN_THRESHOLD 15 -#define HGCD_THRESHOLD 318 -#define HGCD_APPR_THRESHOLD 363 -#define HGCD_REDUCE_THRESHOLD 2384 -#define GCD_DC_THRESHOLD 2504 -#define GCDEXT_DC_THRESHOLD 671 -#define JACOBI_BASE_METHOD 3 - -#define GET_STR_DC_THRESHOLD 14 -#define GET_STR_PRECOMPUTE_THRESHOLD 25 -#define SET_STR_DC_THRESHOLD 3754 -#define SET_STR_PRECOMPUTE_THRESHOLD 8097 - -#define FAC_DSC_THRESHOLD 951 -#define FAC_ODD_THRESHOLD 24 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/mod_1_4.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/mod_1_4.asm deleted file mode 100644 index 82c42ae4ff0e801d6bee2fd41a69d4363d9212c9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/mod_1_4.asm +++ /dev/null @@ -1,336 +0,0 @@ -dnl Alpha mpn_mod_1s_4p - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2009, 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C TODO: -C * Optimise. 2.75 c/l should be possible. -C * Write a proper mpn_mod_1s_4p_cps. The code below was compiler generated. -C * Optimise feed-in code, starting the sw pipeline in switch code. -C * Shorten software pipeline. The mul instructions are scheduled too far -C from their users. Fixing this will allow us to use fewer registers. -C * If we cannot reduce register usage, write perhaps small-n basecase. -C * Does this work for PIC? - -C cycles/limb -C EV4: ? -C EV5: 23 -C EV6: 3 - -define(`ap', `r16') -define(`n', `r17') -define(`pl', `r24') -define(`ph', `r25') -define(`rl', `r6') -define(`rh', `r7') -define(`B1modb', `r1') -define(`B2modb', `r2') -define(`B3modb', `r3') -define(`B4modb', `r4') -define(`B5modb', `r5') - -ASM_START() -PROLOGUE(mpn_mod_1s_4p) - lda r30, -64(r30) - stq r9, 8(r30) - ldq B1modb, 16(r19) - stq r10, 16(r30) - ldq B2modb, 24(r19) - stq r11, 24(r30) - ldq B3modb, 32(r19) - stq r12, 32(r30) - ldq B4modb, 40(r19) - stq r13, 40(r30) - ldq B5modb, 48(r19) - s8addq n, ap, ap C point ap at vector end - - and n, 3, r0 - lda n, -4(n) - beq r0, L(b0) - lda r6, -2(r0) - blt r6, L(b1) - beq r6, L(b2) - -L(b3): ldq r21, -16(ap) - ldq r22, -8(ap) - ldq r20, -24(ap) - mulq r21, B1modb, r8 - umulh r21, B1modb, r12 - mulq r22, B2modb, r9 - umulh r22, B2modb, r13 - addq r8, r20, pl - cmpult pl, r8, r0 - addq r0, r12, ph - addq r9, pl, rl - cmpult rl, r9, r0 - addq r13, ph, ph - addq r0, ph, rh - lda ap, -56(ap) - br L(com) - -L(b0): ldq r21, -24(ap) - ldq r22, -16(ap) - ldq r23, -8(ap) - ldq r20, -32(ap) - mulq r21, B1modb, r8 - umulh r21, B1modb, r12 - mulq r22, B2modb, r9 - umulh r22, B2modb, r13 - mulq r23, B3modb, r10 - umulh r23, B3modb, r27 - addq r8, r20, pl - cmpult pl, r8, r0 - addq r0, r12, ph - addq r9, pl, pl - cmpult pl, r9, r0 - addq r13, ph, ph - addq r0, ph, ph - addq r10, pl, rl - cmpult rl, r10, r0 - addq r27, ph, ph - addq r0, ph, rh - lda ap, -64(ap) - br L(com) - -L(b1): bis r31, r31, rh - ldq rl, -8(ap) - lda ap, -40(ap) - br L(com) - -L(b2): ldq rh, -8(ap) - ldq rl, -16(ap) - lda ap, -48(ap) - -L(com): ble n, L(ed3) - ldq r21, 8(ap) - ldq r22, 16(ap) - ldq r23, 24(ap) - ldq r20, 0(ap) - lda n, -4(n) - lda ap, -32(ap) - mulq r21, B1modb, r8 - umulh r21, B1modb, r12 - mulq r22, B2modb, r9 - umulh r22, B2modb, r13 - mulq r23, B3modb, r10 - umulh r23, B3modb, r27 - mulq rl, B4modb, r11 - umulh rl, B4modb, r28 - ble n, L(ed2) - - ALIGN(16) -L(top): ldq r21, 8(ap) - mulq rh, B5modb, rl - addq r8, r20, pl - ldq r22, 16(ap) - cmpult pl, r8, r0 - umulh rh, B5modb, rh - ldq r23, 24(ap) - addq r0, r12, ph - addq r9, pl, pl - mulq r21, B1modb, r8 - cmpult pl, r9, r0 - addq r13, ph, ph - umulh r21, B1modb, r12 - lda ap, -32(ap) - addq r0, ph, ph - addq r10, pl, pl - mulq r22, B2modb, r9 - cmpult pl, r10, r0 - addq r27, ph, ph - addq r11, pl, pl - umulh r22, B2modb, r13 - addq r0, ph, ph - cmpult pl, r11, r0 - addq r28, ph, ph - mulq r23, B3modb, r10 - ldq r20, 32(ap) - addq pl, rl, rl - umulh r23, B3modb, r27 - addq r0, ph, ph - cmpult rl, pl, r0 - mulq rl, B4modb, r11 - addq ph, rh, rh - umulh rl, B4modb, r28 - addq r0, rh, rh - lda n, -4(n) - bgt n, L(top) - -L(ed2): mulq rh, B5modb, rl - addq r8, r20, pl - umulh rh, B5modb, rh - cmpult pl, r8, r0 - addq r0, r12, ph - addq r9, pl, pl - cmpult pl, r9, r0 - addq r13, ph, ph - addq r0, ph, ph - addq r10, pl, pl - cmpult pl, r10, r0 - addq r27, ph, ph - addq r11, pl, pl - addq r0, ph, ph - cmpult pl, r11, r0 - addq r28, ph, ph - addq pl, rl, rl - addq r0, ph, ph - cmpult rl, pl, r0 - addq ph, rh, rh - addq r0, rh, rh - -L(ed3): mulq rh, B1modb, r8 - umulh rh, B1modb, rh - addq r8, rl, rl - cmpult rl, r8, r0 - addq r0, rh, rh - - ldq r24, 8(r19) C cnt - sll rh, r24, rh - subq r31, r24, r25 - srl rl, r25, r2 - sll rl, r24, rl - or r2, rh, rh - - ldq r23, 0(r19) C bi - mulq rh, r23, r8 - umulh rh, r23, r9 - addq rh, 1, r7 - addq r8, rl, r8 C ql - cmpult r8, rl, r0 - addq r9, r7, r9 - addq r0, r9, r9 C qh - mulq r9, r18, r21 C qh * b - subq rl, r21, rl - cmpult r8, rl, r0 C rl > ql - negq r0, r0 - and r0, r18, r0 - addq rl, r0, rl - cmpule r18, rl, r0 C rl >= b - negq r0, r0 - and r0, r18, r0 - subq rl, r0, rl - - srl rl, r24, r0 - - ldq r9, 8(r30) - ldq r10, 16(r30) - ldq r11, 24(r30) - ldq r12, 32(r30) - ldq r13, 40(r30) - lda r30, 64(r30) - ret r31, (r26), 1 -EPILOGUE() - -PROLOGUE(mpn_mod_1s_4p_cps,gp) - lda r30, -32(r30) - stq r26, 0(r30) - stq r9, 8(r30) - stq r10, 16(r30) - stq r11, 24(r30) - mov r16, r11 - LEA( r4, __clz_tab) - lda r10, 65(r31) - cmpbge r31, r17, r1 - srl r1, 1, r1 - xor r1, 127, r1 - addq r1, r4, r1 - ldq_u r2, 0(r1) - extbl r2, r1, r2 - s8subq r2, 7, r2 - srl r17, r2, r3 - subq r10, r2, r10 - addq r3, r4, r3 - ldq_u r1, 0(r3) - extbl r1, r3, r1 - subq r10, r1, r10 - sll r17, r10, r9 - mov r9, r16 - jsr r26, mpn_invert_limb - LDGP( r29, 0(r26)) - subq r31, r10, r2 - lda r1, 1(r31) - sll r1, r10, r1 - subq r31, r9, r3 - srl r0, r2, r2 - ldq r26, 0(r30) - bis r2, r1, r2 - stq r0, 0(r11) - stq r10, 8(r11) - mulq r2, r3, r2 - srl r2, r10, r3 - umulh r2, r0, r1 - stq r3, 16(r11) - mulq r2, r0, r3 - ornot r31, r1, r1 - subq r1, r2, r1 - mulq r1, r9, r1 - addq r1, r9, r2 - cmpule r1, r3, r3 - cmoveq r3, r2, r1 - srl r1, r10, r3 - umulh r1, r0, r2 - stq r3, 24(r11) - mulq r1, r0, r3 - ornot r31, r2, r2 - subq r2, r1, r2 - mulq r2, r9, r2 - addq r2, r9, r1 - cmpule r2, r3, r3 - cmoveq r3, r1, r2 - srl r2, r10, r1 - umulh r2, r0, r3 - stq r1, 32(r11) - mulq r2, r0, r1 - ornot r31, r3, r3 - subq r3, r2, r3 - mulq r3, r9, r3 - addq r3, r9, r2 - cmpule r3, r1, r1 - cmoveq r1, r2, r3 - srl r3, r10, r2 - umulh r3, r0, r1 - stq r2, 40(r11) - mulq r3, r0, r0 - ornot r31, r1, r1 - subq r1, r3, r1 - mulq r1, r9, r1 - addq r1, r9, r9 - cmpule r1, r0, r0 - cmoveq r0, r9, r1 - ldq r9, 8(r30) - srl r1, r10, r1 - ldq r10, 16(r30) - stq r1, 48(r11) - ldq r11, 24(r30) - lda r30, 32(r30) - ret r31, (r26), 1 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/mul_1.asm deleted file mode 100644 index 8ee19cd429d00a12ebf2e37e17f707dd7339d59e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/mul_1.asm +++ /dev/null @@ -1,496 +0,0 @@ -dnl Alpha ev6 mpn_mul_1 -- Multiply a limb vector with a limb and store the -dnl result in a second limb vector. - -dnl Copyright 2000, 2001, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr r16 -C s1_ptr r17 -C size r18 -C s2_limb r19 - -C This code runs at 2.25 cycles/limb on EV6. - -C This code was written in close cooperation with ev6 pipeline expert -C Steve Root. Any errors are tege's fault, though. - -C Code structure: - -C code for n < 8 -C code for n > 8 code for (n mod 8) -C code for (n div 8) feed-in code -C 8-way unrolled loop -C wind-down code - -C Some notes about unrolled loop: -C -C r1-r8 multiplies and workup -C r21-r28 multiplies and workup -C r9-r12 loads -C r0 -1 -C r20,r29,r13-r15 scramble -C -C We're doing 7 of the 8 carry propagations with a br fixup code and 1 with a -C put-the-carry-into-hi. The idea is that these branches are very rarely -C taken, and since a non-taken branch consumes no resources, that is better -C than an addq. -C -C Software pipeline: a load in cycle #09, feeds a mul in cycle #16, feeds an -C add NEXT cycle #09 which feeds a store in NEXT cycle #02 - -C The code could use some further work: -C 1. Speed up really small multiplies. The default alpha/mul_1.asm code is -C faster than this for size < 3. -C 2. Improve feed-in code, perhaps with the equivalent of switch(n%8) unless -C that is too costly. -C 3. Consider using 4-way unrolling, even if that runs slower. -C 4. Reduce register usage. In particular, try to avoid using r29. - -ASM_START() -PROLOGUE(mpn_mul_1) - cmpult r18, 8, r1 - beq r1, $Large -$Lsmall: - ldq r2,0(r17) C r2 = s1_limb - lda r18,-1(r18) C size-- - mulq r2,r19,r3 C r3 = prod_low - bic r31,r31,r4 C clear cy_limb - umulh r2,r19,r0 C r0 = prod_high - beq r18,$Le1a C jump if size was == 1 - ldq r2,8(r17) C r2 = s1_limb - lda r18,-1(r18) C size-- - stq r3,0(r16) - beq r18,$Le2a C jump if size was == 2 - ALIGN(8) -$Lopa: mulq r2,r19,r3 C r3 = prod_low - addq r4,r0,r0 C cy_limb = cy_limb + 'cy' - lda r18,-1(r18) C size-- - umulh r2,r19,r4 C r4 = cy_limb - ldq r2,16(r17) C r2 = s1_limb - lda r17,8(r17) C s1_ptr++ - addq r3,r0,r3 C r3 = cy_limb + prod_low - stq r3,8(r16) - cmpult r3,r0,r0 C r0 = carry from (cy_limb + prod_low) - lda r16,8(r16) C res_ptr++ - bne r18,$Lopa - -$Le2a: mulq r2,r19,r3 C r3 = prod_low - addq r4,r0,r0 C cy_limb = cy_limb + 'cy' - umulh r2,r19,r4 C r4 = cy_limb - addq r3,r0,r3 C r3 = cy_limb + prod_low - cmpult r3,r0,r0 C r0 = carry from (cy_limb + prod_low) - stq r3,8(r16) - addq r4,r0,r0 C cy_limb = prod_high + cy - ret r31,(r26),1 -$Le1a: stq r3,0(r16) - ret r31,(r26),1 - -$Large: - lda r30, -224(r30) - stq r26, 0(r30) - stq r9, 8(r30) - stq r10, 16(r30) - stq r11, 24(r30) - stq r12, 32(r30) - stq r13, 40(r30) - stq r14, 48(r30) - stq r15, 56(r30) - stq r29, 64(r30) - - and r18, 7, r20 C count for the first loop, 0-7 - srl r18, 3, r18 C count for unrolled loop - bis r31, r31, r21 - beq r20, $L_8_or_more C skip first loop - -$L_9_or_more: - ldq r2,0(r17) C r2 = s1_limb - lda r17,8(r17) C s1_ptr++ - lda r20,-1(r20) C size-- - mulq r2,r19,r3 C r3 = prod_low - umulh r2,r19,r21 C r21 = prod_high - beq r20,$Le1b C jump if size was == 1 - bis r31, r31, r0 C FIXME: shouldn't need this - ldq r2,0(r17) C r2 = s1_limb - lda r17,8(r17) C s1_ptr++ - lda r20,-1(r20) C size-- - stq r3,0(r16) - lda r16,8(r16) C res_ptr++ - beq r20,$Le2b C jump if size was == 2 - ALIGN(8) -$Lopb: mulq r2,r19,r3 C r3 = prod_low - addq r21,r0,r0 C cy_limb = cy_limb + 'cy' - lda r20,-1(r20) C size-- - umulh r2,r19,r21 C r21 = prod_high - ldq r2,0(r17) C r2 = s1_limb - lda r17,8(r17) C s1_ptr++ - addq r3,r0,r3 C r3 = cy_limb + prod_low - stq r3,0(r16) - cmpult r3,r0,r0 C r0 = carry from (cy_limb + prod_low) - lda r16,8(r16) C res_ptr++ - bne r20,$Lopb - -$Le2b: mulq r2,r19,r3 C r3 = prod_low - addq r21,r0,r0 C cy_limb = cy_limb + 'cy' - umulh r2,r19,r21 C r21 = prod_high - addq r3,r0,r3 C r3 = cy_limb + prod_low - cmpult r3,r0,r0 C r0 = carry from (cy_limb + prod_low) - stq r3,0(r16) - lda r16,8(r16) C res_ptr++ - addq r21,r0,r21 C cy_limb = prod_high + cy - br r31, $L_8_or_more -$Le1b: stq r3,0(r16) - lda r16,8(r16) C res_ptr++ - -$L_8_or_more: - lda r0, -1(r31) C put -1 in r0, for tricky loop control - lda r17, -32(r17) C L1 bookkeeping - lda r18, -1(r18) C decrement count - - ldq r9, 32(r17) C L1 - ldq r10, 40(r17) C L1 - mulq r9, r19, r22 C U1 #07 - ldq r11, 48(r17) C L1 - umulh r9, r19, r23 C U1 #08 - ldq r12, 56(r17) C L1 - mulq r10, r19, r24 C U1 #09 - ldq r9, 64(r17) C L1 - - lda r17, 64(r17) C L1 bookkeeping - - umulh r10, r19, r25 C U1 #11 - mulq r11, r19, r26 C U1 #12 - umulh r11, r19, r27 C U1 #13 - mulq r12, r19, r28 C U1 #14 - ldq r10, 8(r17) C L1 - umulh r12, r19, r1 C U1 #15 - ldq r11, 16(r17) C L1 - mulq r9, r19, r2 C U1 #16 - ldq r12, 24(r17) C L1 - umulh r9, r19, r3 C U1 #17 - addq r21, r22, r13 C L1 mov - mulq r10, r19, r4 C U1 #18 - addq r23, r24, r22 C L0 sum 2 mul's - cmpult r13, r21, r14 C L1 carry from sum - bgt r18, $L_16_or_more - - cmpult r22, r24, r24 C U0 carry from sum - umulh r10, r19, r5 C U1 #02 - addq r25, r26, r23 C U0 sum 2 mul's - mulq r11, r19, r6 C U1 #03 - cmpult r23, r26, r25 C U0 carry from sum - umulh r11, r19, r7 C U1 #04 - addq r27, r28, r28 C U0 sum 2 mul's - mulq r12, r19, r8 C U1 #05 - cmpult r28, r27, r15 C L0 carry from sum - lda r16, 32(r16) C L1 bookkeeping - addq r13, r31, r13 C U0 start carry cascade - umulh r12, r19, r21 C U1 #06 - br r31, $ret0c - -$L_16_or_more: -C --------------------------------------------------------------- - subq r18,1,r18 - cmpult r22, r24, r24 C U0 carry from sum - ldq r9, 32(r17) C L1 - - umulh r10, r19, r5 C U1 #02 - addq r25, r26, r23 C U0 sum 2 mul's - mulq r11, r19, r6 C U1 #03 - cmpult r23, r26, r25 C U0 carry from sum - umulh r11, r19, r7 C U1 #04 - addq r27, r28, r28 C U0 sum 2 mul's - mulq r12, r19, r8 C U1 #05 - cmpult r28, r27, r15 C L0 carry from sum - lda r16, 32(r16) C L1 bookkeeping - addq r13, r31, r13 C U0 start carry cascade - - umulh r12, r19, r21 C U1 #06 -C beq r13, $fix0w C U0 -$ret0w: addq r22, r14, r26 C L0 - ldq r10, 40(r17) C L1 - - mulq r9, r19, r22 C U1 #07 - beq r26, $fix1w C U0 -$ret1w: addq r23, r24, r27 C L0 - ldq r11, 48(r17) C L1 - - umulh r9, r19, r23 C U1 #08 - beq r27, $fix2w C U0 -$ret2w: addq r28, r25, r28 C L0 - ldq r12, 56(r17) C L1 - - mulq r10, r19, r24 C U1 #09 - beq r28, $fix3w C U0 -$ret3w: addq r1, r2, r20 C L0 sum 2 mul's - ldq r9, 64(r17) C L1 - - addq r3, r4, r2 C L0 #10 2 mul's - lda r17, 64(r17) C L1 bookkeeping - cmpult r20, r1, r29 C U0 carry from sum - - umulh r10, r19, r25 C U1 #11 - cmpult r2, r4, r4 C U0 carry from sum - stq r13, -32(r16) C L0 - stq r26, -24(r16) C L1 - - mulq r11, r19, r26 C U1 #12 - addq r5, r6, r14 C U0 sum 2 mul's - stq r27, -16(r16) C L0 - stq r28, -8(r16) C L1 - - umulh r11, r19, r27 C U1 #13 - cmpult r14, r6, r3 C U0 carry from sum -C could do cross-jumping here: -C bra $L_middle_of_unrolled_loop - mulq r12, r19, r28 C U1 #14 - addq r7, r3, r5 C L0 eat carry - addq r20, r15, r20 C U0 carry cascade - ldq r10, 8(r17) C L1 - - umulh r12, r19, r1 C U1 #15 - beq r20, $fix4 C U0 -$ret4w: addq r2, r29, r6 C L0 - ldq r11, 16(r17) C L1 - - mulq r9, r19, r2 C U1 #16 - beq r6, $fix5 C U0 -$ret5w: addq r14, r4, r7 C L0 - ldq r12, 24(r17) C L1 - - umulh r9, r19, r3 C U1 #17 - beq r7, $fix6 C U0 -$ret6w: addq r5, r8, r8 C L0 sum 2 - addq r21, r22, r13 C L1 sum 2 mul's - - mulq r10, r19, r4 C U1 #18 - addq r23, r24, r22 C L0 sum 2 mul's - cmpult r13, r21, r14 C L1 carry from sum - ble r18, $Lend C U0 -C --------------------------------------------------------------- - ALIGN(16) -$Loop: - umulh r0, r18, r18 C U1 #01 decrement r18! - cmpult r8, r5, r29 C L0 carry from last bunch - cmpult r22, r24, r24 C U0 carry from sum - ldq r9, 32(r17) C L1 - - umulh r10, r19, r5 C U1 #02 - addq r25, r26, r23 C U0 sum 2 mul's - stq r20, 0(r16) C L0 - stq r6, 8(r16) C L1 - - mulq r11, r19, r6 C U1 #03 - cmpult r23, r26, r25 C U0 carry from sum - stq r7, 16(r16) C L0 - stq r8, 24(r16) C L1 - - umulh r11, r19, r7 C U1 #04 - bis r31, r31, r31 C L0 st slosh - bis r31, r31, r31 C L1 st slosh - addq r27, r28, r28 C U0 sum 2 mul's - - mulq r12, r19, r8 C U1 #05 - cmpult r28, r27, r15 C L0 carry from sum - lda r16, 64(r16) C L1 bookkeeping - addq r13, r29, r13 C U0 start carry cascade - - umulh r12, r19, r21 C U1 #06 - beq r13, $fix0 C U0 -$ret0: addq r22, r14, r26 C L0 - ldq r10, 40(r17) C L1 - - mulq r9, r19, r22 C U1 #07 - beq r26, $fix1 C U0 -$ret1: addq r23, r24, r27 C L0 - ldq r11, 48(r17) C L1 - - umulh r9, r19, r23 C U1 #08 - beq r27, $fix2 C U0 -$ret2: addq r28, r25, r28 C L0 - ldq r12, 56(r17) C L1 - - mulq r10, r19, r24 C U1 #09 - beq r28, $fix3 C U0 -$ret3: addq r1, r2, r20 C L0 sum 2 mul's - ldq r9, 64(r17) C L1 - - addq r3, r4, r2 C L0 #10 2 mul's - bis r31, r31, r31 C U1 mul hole - lda r17, 64(r17) C L1 bookkeeping - cmpult r20, r1, r29 C U0 carry from sum - - umulh r10, r19, r25 C U1 #11 - cmpult r2, r4, r4 C U0 carry from sum - stq r13, -32(r16) C L0 - stq r26, -24(r16) C L1 - - mulq r11, r19, r26 C U1 #12 - addq r5, r6, r14 C U0 sum 2 mul's - stq r27, -16(r16) C L0 - stq r28, -8(r16) C L1 - - umulh r11, r19, r27 C U1 #13 - bis r31, r31, r31 C L0 st slosh - bis r31, r31, r31 C L1 st slosh - cmpult r14, r6, r3 C U0 carry from sum -$L_middle_of_unrolled_loop: - mulq r12, r19, r28 C U1 #14 - addq r7, r3, r5 C L0 eat carry - addq r20, r15, r20 C U0 carry cascade - ldq r10, 8(r17) C L1 - - umulh r12, r19, r1 C U1 #15 - beq r20, $fix4 C U0 -$ret4: addq r2, r29, r6 C L0 - ldq r11, 16(r17) C L1 - - mulq r9, r19, r2 C U1 #16 - beq r6, $fix5 C U0 -$ret5: addq r14, r4, r7 C L0 - ldq r12, 24(r17) C L1 - - umulh r9, r19, r3 C U1 #17 - beq r7, $fix6 C U0 -$ret6: addq r5, r8, r8 C L0 sum 2 - addq r21, r22, r13 C L1 sum 2 mul's - - mulq r10, r19, r4 C U1 #18 - addq r23, r24, r22 C L0 sum 2 mul's - cmpult r13, r21, r14 C L1 carry from sum - bgt r18, $Loop C U0 -C --------------------------------------------------------------- -$Lend: - cmpult r8, r5, r29 C L0 carry from last bunch - cmpult r22, r24, r24 C U0 carry from sum - - umulh r10, r19, r5 C U1 #02 - addq r25, r26, r23 C U0 sum 2 mul's - stq r20, 0(r16) C L0 - stq r6, 8(r16) C L1 - - mulq r11, r19, r6 C U1 #03 - cmpult r23, r26, r25 C U0 carry from sum - stq r7, 16(r16) C L0 - stq r8, 24(r16) C L1 - - umulh r11, r19, r7 C U1 #04 - addq r27, r28, r28 C U0 sum 2 mul's - - mulq r12, r19, r8 C U1 #05 - cmpult r28, r27, r15 C L0 carry from sum - lda r16, 64(r16) C L1 bookkeeping - addq r13, r29, r13 C U0 start carry cascade - - umulh r12, r19, r21 C U1 #06 - beq r13, $fix0c C U0 -$ret0c: addq r22, r14, r26 C L0 - beq r26, $fix1c C U0 -$ret1c: addq r23, r24, r27 C L0 - beq r27, $fix2c C U0 -$ret2c: addq r28, r25, r28 C L0 - beq r28, $fix3c C U0 -$ret3c: addq r1, r2, r20 C L0 sum 2 mul's - addq r3, r4, r2 C L0 #10 2 mul's - lda r17, 64(r17) C L1 bookkeeping - cmpult r20, r1, r29 C U0 carry from sum - cmpult r2, r4, r4 C U0 carry from sum - stq r13, -32(r16) C L0 - stq r26, -24(r16) C L1 - addq r5, r6, r14 C U0 sum 2 mul's - stq r27, -16(r16) C L0 - stq r28, -8(r16) C L1 - cmpult r14, r6, r3 C U0 carry from sum - addq r7, r3, r5 C L0 eat carry - addq r20, r15, r20 C U0 carry cascade - beq r20, $fix4c C U0 -$ret4c: addq r2, r29, r6 C L0 - beq r6, $fix5c C U0 -$ret5c: addq r14, r4, r7 C L0 - beq r7, $fix6c C U0 -$ret6c: addq r5, r8, r8 C L0 sum 2 - cmpult r8, r5, r29 C L0 carry from last bunch - stq r20, 0(r16) C L0 - stq r6, 8(r16) C L1 - stq r7, 16(r16) C L0 - stq r8, 24(r16) C L1 - addq r29, r21, r0 - - ldq r26, 0(r30) - ldq r9, 8(r30) - ldq r10, 16(r30) - ldq r11, 24(r30) - ldq r12, 32(r30) - ldq r13, 40(r30) - ldq r14, 48(r30) - ldq r15, 56(r30) - ldq r29, 64(r30) - lda r30, 224(r30) - ret r31, (r26), 1 - -C $fix0w: bis r14, r29, r14 C join carries -C br r31, $ret0w -$fix1w: bis r24, r14, r24 C join carries - br r31, $ret1w -$fix2w: bis r25, r24, r25 C join carries - br r31, $ret2w -$fix3w: bis r15, r25, r15 C join carries - br r31, $ret3w -$fix0: bis r14, r29, r14 C join carries - br r31, $ret0 -$fix1: bis r24, r14, r24 C join carries - br r31, $ret1 -$fix2: bis r25, r24, r25 C join carries - br r31, $ret2 -$fix3: bis r15, r25, r15 C join carries - br r31, $ret3 -$fix4: bis r29, r15, r29 C join carries - br r31, $ret4 -$fix5: bis r4, r29, r4 C join carries - br r31, $ret5 -$fix6: addq r5, r4, r5 C can't carry twice! - br r31, $ret6 -$fix0c: bis r14, r29, r14 C join carries - br r31, $ret0c -$fix1c: bis r24, r14, r24 C join carries - br r31, $ret1c -$fix2c: bis r25, r24, r25 C join carries - br r31, $ret2c -$fix3c: bis r15, r25, r15 C join carries - br r31, $ret3c -$fix4c: bis r29, r15, r29 C join carries - br r31, $ret4c -$fix5c: bis r4, r29, r4 C join carries - br r31, $ret5c -$fix6c: addq r5, r4, r5 C can't carry twice! - br r31, $ret6c - -EPILOGUE(mpn_mul_1) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/README b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/README deleted file mode 100644 index b214ac50adbe417289245672f52a3f60cb64e4a6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/README +++ /dev/null @@ -1,65 +0,0 @@ -Copyright 2002, 2005 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - -This directory contains assembly code for nails-enabled 21264. The code is not -very well optimized. - -For addmul_N, as N grows larger, we could make multiple loads together, then do -about 3.3 i/c. 10 cycles after the last load, we can increase to 4 i/c. This -would surely allow addmul_4 to run at 2 c/l, but the same should be possible -also for addmul_3 and perhaps even addmul_2. - - - current fair best -Routine c/l unroll c/l unroll c/l i/c -mul_1 3.25 2.75 2.75 3.273 -addmul_1 4.0 4 3.5 4 14 3.25 3.385 -addmul_2 4.0 1 2.5 2 10 2.25 3.333 -addmul_3 3.0 1 2.33 2 14 2 3.333 -addmul_4 2.5 1 2.125 2 17 2 3.135 - -addmul_5 2 1 10 -addmul_6 2 1 12 -addmul_7 2 1 14 - -(The "best" column doesn't account for bookkeeping instructions and -thereby assumes infinite unrolling.) - -Basecase usages: - -1 addmul_1 -2 addmul_2 -3 addmul_3 -4 addmul_4 -5 addmul_3 + addmul_2 2.3998 -6 addmul_4 + addmul_2 -7 addmul_4 + addmul_3 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/addmul_1.asm deleted file mode 100644 index 711d4e66e5a7457ae82386c9e95fbc1f9fff3d65..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/addmul_1.asm +++ /dev/null @@ -1,396 +0,0 @@ -dnl Alpha ev6 nails mpn_addmul_1. - -dnl Copyright 2002, 2005, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: 42 -C EV5: 18 -C EV6: 4 - -C TODO -C * Reroll loop for 3.75 c/l with current 4-way unrolling. -C * The loop is overscheduled wrt loads and wrt multiplies, in particular -C umulh. -C * Use FP loop count and multiple exit points, that would simplify feed-in lp0 -C and would work since the loop structure is really regular. - -C INPUT PARAMETERS -define(`rp',`r16') -define(`up',`r17') -define(`n', `r18') -define(`vl0',`r19') - -define(`numb_mask',`r6') - -define(`m0a',`r0') -define(`m0b',`r1') -define(`m1a',`r2') -define(`m1b',`r3') -define(`m2a',`r20') -define(`m2b',`r21') -define(`m3a',`r22') -define(`m3b',`r23') - -define(`acc0',`r25') -define(`acc1',`r27') - -define(`ul0',`r4') -define(`ul1',`r5') -define(`ul2',`r4') -define(`ul3',`r5') - -define(`rl0',`r24') -define(`rl1',`r24') -define(`rl2',`r24') -define(`rl3',`r24') - -define(`t0',`r7') -define(`t1',`r8') - -define(`NAIL_BITS',`GMP_NAIL_BITS') -define(`NUMB_BITS',`GMP_NUMB_BITS') - -dnl This declaration is munged by configure -NAILS_SUPPORT(2-63) - -ASM_START() -PROLOGUE(mpn_addmul_1) - sll vl0, NAIL_BITS, vl0 - lda numb_mask, -1(r31) - srl numb_mask, NAIL_BITS, numb_mask - - and n, 3, r25 - cmpeq r25, 1, r21 - bne r21, L(1m4) - cmpeq r25, 2, r21 - bne r21, L(2m4) - beq r25, L(0m4) - -L(3m4): ldq ul3, 0(up) - lda n, -4(n) - ldq ul0, 8(up) - mulq vl0, ul3, m3a - umulh vl0, ul3, m3b - ldq ul1, 16(up) - lda up, 24(up) - lda rp, -8(rp) - mulq vl0, ul0, m0a - umulh vl0, ul0, m0b - bge n, L(ge3) - - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - ldq rl3, 8(rp) - srl m3a,NAIL_BITS, t0 - addq t0, r31, acc1 - addq rl3, acc1, acc1 - ldq rl0, 16(rp) - srl m0a,NAIL_BITS, t0 - addq t0, m3b, acc0 - srl acc1,NUMB_BITS, t1 - br r31, L(ta3) - -L(ge3): ldq ul2, 0(up) - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - ldq rl3, 8(rp) - srl m3a,NAIL_BITS, t0 - ldq ul3, 8(up) - lda n, -4(n) - mulq vl0, ul2, m2a - addq t0, r31, acc1 - umulh vl0, ul2, m2b - addq rl3, acc1, acc1 - ldq rl0, 16(rp) - srl m0a,NAIL_BITS, t0 - ldq ul0, 16(up) - mulq vl0, ul3, m3a - addq t0, m3b, acc0 - srl acc1,NUMB_BITS, t1 - br r31, L(el3) - -L(0m4): lda n, -8(n) - ldq ul2, 0(up) - ldq ul3, 8(up) - mulq vl0, ul2, m2a - umulh vl0, ul2, m2b - ldq ul0, 16(up) - mulq vl0, ul3, m3a - umulh vl0, ul3, m3b - ldq ul1, 24(up) - lda up, 32(up) - mulq vl0, ul0, m0a - umulh vl0, ul0, m0b - bge n, L(ge4) - - ldq rl2, 0(rp) - srl m2a,NAIL_BITS, t0 - mulq vl0, ul1, m1a - addq t0, r31, acc0 - umulh vl0, ul1, m1b - addq rl2, acc0, acc0 - ldq rl3, 8(rp) - srl m3a,NAIL_BITS, t0 - addq t0, m2b, acc1 - srl acc0,NUMB_BITS, t1 - br r31, L(ta4) - -L(ge4): ldq rl2, 0(rp) - srl m2a,NAIL_BITS, t0 - ldq ul2, 0(up) - mulq vl0, ul1, m1a - addq t0, r31, acc0 - umulh vl0, ul1, m1b - addq rl2, acc0, acc0 - ldq rl3, 8(rp) - srl m3a,NAIL_BITS, t0 - ldq ul3, 8(up) - lda n, -4(n) - mulq vl0, ul2, m2a - addq t0, m2b, acc1 - srl acc0,NUMB_BITS, t1 - br r31, L(el0) - -L(2m4): lda n, -4(n) - ldq ul0, 0(up) - ldq ul1, 8(up) - lda up, 16(up) - lda rp, -16(rp) - mulq vl0, ul0, m0a - umulh vl0, ul0, m0b - bge n, L(ge2) - - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - ldq rl0, 16(rp) - srl m0a,NAIL_BITS, t0 - addq t0, r31, acc0 - addq rl0, acc0, acc0 - ldq rl1, 24(rp) - srl m1a,NAIL_BITS, t0 - addq t0, m0b, acc1 - srl acc0,NUMB_BITS, t1 - br r31, L(ta2) - -L(ge2): ldq ul2, 0(up) - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - ldq ul3, 8(up) - lda n, -4(n) - mulq vl0, ul2, m2a - umulh vl0, ul2, m2b - ldq rl0, 16(rp) - srl m0a,NAIL_BITS, t0 - ldq ul0, 16(up) - mulq vl0, ul3, m3a - addq t0, r31, acc0 - umulh vl0, ul3, m3b - addq rl0, acc0, acc0 - ldq rl1, 24(rp) - srl m1a,NAIL_BITS, t0 - ldq ul1, 24(up) - lda up, 32(up) - lda rp, 32(rp) - mulq vl0, ul0, m0a - addq t0, m0b, acc1 - srl acc0,NUMB_BITS, t1 - bge n, L(el2) - - br r31, L(ta6) - -L(1m4): lda n, -4(n) - ldq ul1, 0(up) - lda up, 8(up) - lda rp, -24(rp) - bge n, L(ge1) - - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - ldq rl1, 24(rp) - srl m1a,NAIL_BITS, t0 - addq rl1, t0, acc1 - and acc1,numb_mask, r28 - srl acc1,NUMB_BITS, t1 - stq r28, 24(rp) - addq t1, m1b, r0 - ret r31, (r26), 1 - -L(ge1): ldq ul2, 0(up) - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - ldq ul3, 8(up) - lda n, -4(n) - mulq vl0, ul2, m2a - umulh vl0, ul2, m2b - ldq ul0, 16(up) - mulq vl0, ul3, m3a - umulh vl0, ul3, m3b - ldq rl1, 24(rp) - srl m1a,NAIL_BITS, t0 - ldq ul1, 24(up) - lda up, 32(up) - lda rp, 32(rp) - mulq vl0, ul0, m0a - addq t0, r31, acc1 - umulh vl0, ul0, m0b - addq rl1, acc1, acc1 - ldq rl2, 0(rp) - srl m2a,NAIL_BITS, t0 - mulq vl0, ul1, m1a - addq t0, m1b, acc0 - srl acc1,NUMB_BITS, t1 - blt n, L(ta5) - -L(ge5): ldq ul2, 0(up) - br r31, L(el1) - - ALIGN(16) -L(top): mulq vl0, ul0, m0a C U1 - addq t0, m0b, acc1 C L0 - srl acc0,NUMB_BITS, t1 C U0 - stq r28, -24(rp) C L1 -C -L(el2): umulh vl0, ul0, m0b C U1 - and acc0,numb_mask, r28 C L0 - addq rl1, acc1, acc1 C U0 - ldq rl2, 0(rp) C L1 -C - unop C U1 - addq t1, acc1, acc1 C L0 - srl m2a,NAIL_BITS, t0 C U0 - ldq ul2, 0(up) C L1 -C - mulq vl0, ul1, m1a C U1 - addq t0, m1b, acc0 C L0 - srl acc1,NUMB_BITS, t1 C U0 - stq r28, -16(rp) C L1 -C -L(el1): umulh vl0, ul1, m1b C U1 - and acc1,numb_mask, r28 C L0 - addq rl2, acc0, acc0 C U0 - ldq rl3, 8(rp) C L1 -C - lda n, -4(n) C L1 - addq t1, acc0, acc0 C L0 - srl m3a,NAIL_BITS, t0 C U0 - ldq ul3, 8(up) C L1 -C - mulq vl0, ul2, m2a C U1 - addq t0, m2b, acc1 C L0 - srl acc0,NUMB_BITS, t1 C U0 - stq r28, -8(rp) C L1 -C -L(el0): umulh vl0, ul2, m2b C U1 - and acc0,numb_mask, r28 C L0 - addq rl3, acc1, acc1 C U0 - ldq rl0, 16(rp) C L1 -C - unop C U1 - addq t1, acc1, acc1 C L0 - srl m0a,NAIL_BITS, t0 C U0 - ldq ul0, 16(up) C L1 -C - mulq vl0, ul3, m3a C U1 - addq t0, m3b, acc0 C L0 - srl acc1,NUMB_BITS, t1 C U0 - stq r28, 0(rp) C L1 -C -L(el3): umulh vl0, ul3, m3b C U1 - and acc1,numb_mask, r28 C L0 - addq rl0, acc0, acc0 C U0 - ldq rl1, 24(rp) C L1 -C - unop C U1 - addq t1, acc0, acc0 C L0 - srl m1a,NAIL_BITS, t0 C U0 - ldq ul1, 24(up) C L1 -C - lda up, 32(up) C L0 - unop C U1 - lda rp, 32(rp) C L1 - bge n, L(top) C U0 - -L(end): mulq vl0, ul0, m0a - addq t0, m0b, acc1 - srl acc0,NUMB_BITS, t1 - stq r28, -24(rp) -L(ta6): umulh vl0, ul0, m0b - and acc0,numb_mask, r28 - addq rl1, acc1, acc1 - ldq rl2, 0(rp) - addq t1, acc1, acc1 - srl m2a,NAIL_BITS, t0 - mulq vl0, ul1, m1a - addq t0, m1b, acc0 - srl acc1,NUMB_BITS, t1 - stq r28, -16(rp) -L(ta5): umulh vl0, ul1, m1b - and acc1,numb_mask, r28 - addq rl2, acc0, acc0 - ldq rl3, 8(rp) - addq t1, acc0, acc0 - srl m3a,NAIL_BITS, t0 - addq t0, m2b, acc1 - srl acc0,NUMB_BITS, t1 - stq r28, -8(rp) - unop - ALIGN(16) -L(ta4): and acc0,numb_mask, r28 - addq rl3, acc1, acc1 - ldq rl0, 16(rp) - addq t1, acc1, acc1 - srl m0a,NAIL_BITS, t0 - addq t0, m3b, acc0 - srl acc1,NUMB_BITS, t1 - stq r28, 0(rp) - unop - ALIGN(16) -L(ta3): and acc1,numb_mask, r28 - addq rl0, acc0, acc0 - ldq rl1, 24(rp) - addq t1, acc0, acc0 - srl m1a,NAIL_BITS, t0 - addq t0, m0b, acc1 - srl acc0,NUMB_BITS, t1 - stq r28, 8(rp) - unop - ALIGN(16) -L(ta2): and acc0,numb_mask, r28 - addq rl1, acc1, acc1 - addq t1, acc1, acc1 - srl acc1,NUMB_BITS, t1 - stq r28, 16(rp) - and acc1,numb_mask, r28 - addq t1, m1b, r0 - stq r28, 24(rp) - ret r31, (r26), 1 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/addmul_2.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/addmul_2.asm deleted file mode 100644 index 6ff6b3ad6b091ce5b4bcaabbf22981f107c19f57..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/addmul_2.asm +++ /dev/null @@ -1,146 +0,0 @@ -dnl Alpha ev6 nails mpn_addmul_2. - -dnl Copyright 2002, 2005, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C Runs at 4.0 cycles/limb. - -C We could either go for 2-way unrolling over 11 cycles, or 2.75 c/l, -C or 4-way unrolling over 20 cycles, for 2.5 c/l. - - -C INPUT PARAMETERS -define(`rp',`r16') -define(`up',`r17') -define(`n',`r18') -define(`vp',`r19') - -C Useful register aliases -define(`numb_mask',`r24') -define(`ulimb',`r25') -define(`rlimb',`r27') - -define(`m0a',`r0') -define(`m0b',`r1') -define(`m1a',`r2') -define(`m1b',`r3') - -define(`acc0',`r4') -define(`acc1',`r5') - -define(`v0',`r6') -define(`v1',`r7') - -C Used for temps: r8 r19 r28 - -define(`NAIL_BITS',`GMP_NAIL_BITS') -define(`NUMB_BITS',`GMP_NUMB_BITS') - -C This declaration is munged by configure -NAILS_SUPPORT(3-63) - -ASM_START() -PROLOGUE(mpn_addmul_2) - lda numb_mask,-1(r31) - srl numb_mask,NAIL_BITS,numb_mask - - ldq v0, 0(vp) - ldq v1, 8(vp) - - bis r31, r31, acc0 C zero acc0 - sll v0,NAIL_BITS, v0 - bis r31, r31, acc1 C zero acc1 - sll v1,NAIL_BITS, v1 - bis r31, r31, r19 - - ldq ulimb, 0(up) - lda up, 8(up) - mulq v0, ulimb, m0a C U1 - umulh v0, ulimb, m0b C U1 - mulq v1, ulimb, m1a C U1 - umulh v1, ulimb, m1b C U1 - lda n, -1(n) - beq n, L(end) C U0 - - ALIGN(16) -L(top): bis r31, r31, r31 C U1 nop - addq r19, acc0, acc0 C U0 propagate nail - ldq rlimb, 0(rp) C L0 - ldq ulimb, 0(up) C L1 - - lda rp, 8(rp) C L1 - srl m0a,NAIL_BITS, r8 C U0 - lda up, 8(up) C L0 - mulq v0, ulimb, m0a C U1 - - addq r8, acc0, r19 C U0 - addq m0b, acc1, acc0 C L1 - umulh v0, ulimb, m0b C U1 - bis r31, r31, r31 C L0 nop - - addq rlimb, r19, r19 C L1 FINAL PROD-SUM - srl m1a,NAIL_BITS, r8 C U0 - lda n, -1(n) C L0 - mulq v1, ulimb, m1a C U1 - - addq r8, acc0, acc0 C U0 - bis r31, m1b, acc1 C L1 - umulh v1, ulimb, m1b C U1 - and r19,numb_mask, r28 C L0 extract numb part - - unop - srl r19,NUMB_BITS, r19 C U1 extract nail part - stq r28, -8(rp) C L1 - bne n, L(top) C U0 - -L(end): ldq rlimb, 0(rp) - addq r19, acc0, acc0 C propagate nail - lda rp, 8(rp) - srl m0a,NAIL_BITS, r8 C U0 - addq r8, acc0, r19 - addq m0b, acc1, acc0 - addq rlimb, r19, r19 - srl m1a,NAIL_BITS, r8 C U0 - addq r8, acc0, acc0 - bis r31, m1b, acc1 - and r19,numb_mask, r28 C extract limb - - srl r19,NUMB_BITS, r19 C extract nail - stq r28, -8(rp) - - addq r19, acc0, acc0 C propagate nail - and acc0,numb_mask, r28 - stq r28, 0(rp) - srl acc0,NUMB_BITS, r19 - addq r19, acc1, r0 - - ret r31, (r26), 1 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/addmul_3.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/addmul_3.asm deleted file mode 100644 index a1ffb680eca64bc3fb5a77f86a79843ee1cff604..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/addmul_3.asm +++ /dev/null @@ -1,169 +0,0 @@ -dnl Alpha ev6 nails mpn_addmul_3. - -dnl Copyright 2002, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C Runs at 3.0 cycles/limb. - -C With 2-way unrolling, we could probably reach 2.25 c/l (3.33 i/c). - - -C INPUT PARAMETERS -define(`rp',`r16') -define(`up',`r17') -define(`n',`r18') -define(`vp',`r19') - -C Useful register aliases -define(`numb_mask',`r24') -define(`ulimb',`r25') -define(`rlimb',`r27') - -define(`m0a',`r0') -define(`m0b',`r1') -define(`m1a',`r2') -define(`m1b',`r3') -define(`m2a',`r20') -define(`m2b',`r21') - -define(`acc0',`r4') -define(`acc1',`r5') -define(`acc2',`r22') - -define(`v0',`r6') -define(`v1',`r7') -define(`v2',`r23') - -C Used for temps: r8 r19 r28 - -define(`NAIL_BITS',`GMP_NAIL_BITS') -define(`NUMB_BITS',`GMP_NUMB_BITS') - -C This declaration is munged by configure -NAILS_SUPPORT(3-63) - -ASM_START() -PROLOGUE(mpn_addmul_3) - lda numb_mask,-1(r31) - srl numb_mask,NAIL_BITS,numb_mask - - ldq v0, 0(vp) - ldq v1, 8(vp) - ldq v2, 16(vp) - - bis r31, r31, acc0 C zero acc0 - sll v0,NAIL_BITS, v0 - bis r31, r31, acc1 C zero acc1 - sll v1,NAIL_BITS, v1 - bis r31, r31, acc2 C zero acc2 - sll v2,NAIL_BITS, v2 - bis r31, r31, r19 - - ldq ulimb, 0(up) - lda up, 8(up) - mulq v0, ulimb, m0a C U1 - umulh v0, ulimb, m0b C U1 - mulq v1, ulimb, m1a C U1 - umulh v1, ulimb, m1b C U1 - lda n, -1(n) - mulq v2, ulimb, m2a C U1 - umulh v2, ulimb, m2b C U1 - beq n, L(end) C U0 - - ALIGN(16) -L(top): ldq rlimb, 0(rp) C L1 - ldq ulimb, 0(up) C L0 - bis r31, r31, r31 C U0 nop - addq r19, acc0, acc0 C U1 propagate nail - - lda rp, 8(rp) C L1 - srl m0a,NAIL_BITS, r8 C U0 - lda up, 8(up) C L0 - mulq v0, ulimb, m0a C U1 - - addq r8, acc0, r19 C U0 - addq m0b, acc1, acc0 C L1 - umulh v0, ulimb, m0b C U1 - bis r31, r31, r31 C L0 nop - - addq rlimb, r19, r19 C L1 - srl m1a,NAIL_BITS, r8 C U0 - bis r31, r31, r31 C L0 nop - mulq v1, ulimb, m1a C U1 - - addq r8, acc0, acc0 C U0 - addq m1b, acc2, acc1 C L1 - umulh v1, ulimb, m1b C U1 - and r19,numb_mask, r28 C L0 extract numb part - - bis r31, r31, r31 C L1 nop - srl m2a,NAIL_BITS, r8 C U0 - lda n, -1(n) C L0 - mulq v2, ulimb, m2a C U1 - - addq r8, acc1, acc1 C L0 - bis r31, m2b, acc2 C L1 - umulh v2, ulimb, m2b C U1 - srl r19,NUMB_BITS, r19 C U0 extract nail part - - stq r28, -8(rp) C L - bne n, L(top) C U0 - -L(end): ldq rlimb, 0(rp) - addq r19, acc0, acc0 C propagate nail - lda rp, 8(rp) - srl m0a,NAIL_BITS, r8 C U0 - addq r8, acc0, r19 - addq m0b, acc1, acc0 - addq rlimb, r19, r19 - srl m1a,NAIL_BITS, r8 C U0 - addq r8, acc0, acc0 - addq m1b, acc2, acc1 - and r19,numb_mask, r28 C extract limb - srl m2a,NAIL_BITS, r8 C U0 - addq r8, acc1, acc1 - bis r31, m2b, acc2 - srl r19,NUMB_BITS, r19 C extract nail - stq r28, -8(rp) - - addq r19, acc0, acc0 C propagate nail - and acc0,numb_mask, r28 - stq r28, 0(rp) - srl acc0,NUMB_BITS, r19 - addq r19, acc1, acc1 - - and acc1,numb_mask, r28 - stq r28, 8(rp) - srl acc1,NUMB_BITS, r19 - addq r19, acc2, m0a - - ret r31, (r26), 1 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/addmul_4.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/addmul_4.asm deleted file mode 100644 index 77e02a4316f4990aee883ea4e3cfcb365135a2db..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/addmul_4.asm +++ /dev/null @@ -1,210 +0,0 @@ -dnl Alpha ev6 nails mpn_addmul_4. - -dnl Copyright 2002, 2005, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C Runs at 2.5 cycles/limb. - -C We should go for 2-way unrolling over 17 cycles, for 2.125 c/l corresponding -C to 3.24 insn/cycle. - - -C INPUT PARAMETERS -define(`rp',`r16') -define(`up',`r17') -define(`n',`r18') -define(`vp',`r19') - -C Useful register aliases -define(`numb_mask',`r24') -define(`ulimb',`r25') -define(`rlimb',`r27') - -define(`m0a',`r0') -define(`m0b',`r1') -define(`m1a',`r2') -define(`m1b',`r3') -define(`m2a',`r20') -define(`m2b',`r21') -define(`m3a',`r12') -define(`m3b',`r13') - -define(`acc0',`r4') -define(`acc1',`r5') -define(`acc2',`r22') -define(`acc3',`r14') - -define(`v0',`r6') -define(`v1',`r7') -define(`v2',`r23') -define(`v3',`r15') - -C Used for temps: r8 r19 r28 - -define(`NAIL_BITS',`GMP_NAIL_BITS') -define(`NUMB_BITS',`GMP_NUMB_BITS') - -C This declaration is munged by configure -NAILS_SUPPORT(4-63) - -ASM_START() -PROLOGUE(mpn_addmul_4) - lda r30, -240(r30) - stq r12, 32(r30) - stq r13, 40(r30) - stq r14, 48(r30) - stq r15, 56(r30) - - lda numb_mask,-1(r31) - srl numb_mask,NAIL_BITS,numb_mask - - ldq v0, 0(vp) - ldq v1, 8(vp) - ldq v2, 16(vp) - ldq v3, 24(vp) - - bis r31, r31, acc0 C zero acc0 - sll v0,NAIL_BITS, v0 - bis r31, r31, acc1 C zero acc1 - sll v1,NAIL_BITS, v1 - bis r31, r31, acc2 C zero acc2 - sll v2,NAIL_BITS, v2 - bis r31, r31, acc3 C zero acc3 - sll v3,NAIL_BITS, v3 - bis r31, r31, r19 - - ldq ulimb, 0(up) - lda up, 8(up) - mulq v0, ulimb, m0a C U1 - umulh v0, ulimb, m0b C U1 - mulq v1, ulimb, m1a C U1 - umulh v1, ulimb, m1b C U1 - lda n, -1(n) - mulq v2, ulimb, m2a C U1 - umulh v2, ulimb, m2b C U1 - mulq v3, ulimb, m3a C U1 - umulh v3, ulimb, m3b C U1 - beq n, L(end) C U0 - - ALIGN(16) -L(top): bis r31, r31, r31 C U1 nop - ldq rlimb, 0(rp) C L0 - ldq ulimb, 0(up) C L1 - addq r19, acc0, acc0 C U0 propagate nail - - bis r31, r31, r31 C L0 nop - bis r31, r31, r31 C U1 nop - bis r31, r31, r31 C L1 nop - bis r31, r31, r31 C U0 nop - - lda rp, 8(rp) C L0 - srl m0a,NAIL_BITS, r8 C U0 - lda up, 8(up) C L1 - mulq v0, ulimb, m0a C U1 - - addq r8, acc0, r19 C U0 - addq m0b, acc1, acc0 C L0 - umulh v0, ulimb, m0b C U1 - bis r31, r31, r31 C L1 nop - - addq rlimb, r19, r19 C L0 - srl m1a,NAIL_BITS, r8 C U0 - bis r31, r31, r31 C L1 nop - mulq v1, ulimb, m1a C U1 - - addq r8, acc0, acc0 C U0 - addq m1b, acc2, acc1 C L0 - umulh v1, ulimb, m1b C U1 - and r19,numb_mask, r28 C L1 extract numb part - - bis r31, r31, r31 C L0 nop - srl m2a,NAIL_BITS, r8 C U0 - lda n, -1(n) C L1 - mulq v2, ulimb, m2a C U1 - - addq r8, acc1, acc1 C L1 - addq m2b, acc3, acc2 C L0 - umulh v2, ulimb, m2b C U1 - srl r19,NUMB_BITS, r19 C U0 extract nail part - - bis r31, r31, r31 C L0 nop - srl m3a,NAIL_BITS, r8 C U0 - stq r28, -8(rp) C L1 - mulq v3, ulimb, m3a C U1 - - addq r8, acc2, acc2 C L0 - bis r31, m3b, acc3 C L1 - umulh v3, ulimb, m3b C U1 - bne n, L(top) C U0 - -L(end): ldq rlimb, 0(rp) - addq r19, acc0, acc0 C propagate nail - lda rp, 8(rp) C FIXME: DELETE - srl m0a,NAIL_BITS, r8 C U0 - addq r8, acc0, r19 - addq m0b, acc1, acc0 - addq rlimb, r19, r19 - srl m1a,NAIL_BITS, r8 C U0 - addq r8, acc0, acc0 - addq m1b, acc2, acc1 - and r19,numb_mask, r28 C extract limb - srl m2a,NAIL_BITS, r8 C U0 - addq r8, acc1, acc1 - addq m2b, acc3, acc2 - srl r19,NUMB_BITS, r19 C extract nail - srl m3a,NAIL_BITS, r8 C U0 - stq r28, -8(rp) - addq r8, acc2, acc2 - bis r31, m3b, acc3 - - addq r19, acc0, acc0 C propagate nail - and acc0,numb_mask, r28 - stq r28, 0(rp) - srl acc0,NUMB_BITS, r19 - addq r19, acc1, acc1 - - and acc1,numb_mask, r28 - stq r28, 8(rp) - srl acc1,NUMB_BITS, r19 - addq r19, acc2, acc2 - - and acc2,numb_mask, r28 - stq r28, 16(rp) - srl acc2,NUMB_BITS, r19 - addq r19, acc3, r0 - - ldq r12, 32(r30) - ldq r13, 40(r30) - ldq r14, 48(r30) - ldq r15, 56(r30) - lda r30, 240(r30) - ret r31, (r26), 1 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/aors_n.asm deleted file mode 100644 index f6586773f573596412003b3d767071604f747e3b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/aors_n.asm +++ /dev/null @@ -1,233 +0,0 @@ -dnl Alpha ev6 nails mpn_add_n and mpn_sub_n. - -dnl Copyright 2002, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl Runs at 2.5 cycles/limb. It would be possible to reach 2.0 cycles/limb -dnl with 8-way unrolling. - -include(`../config.m4') - -dnl INPUT PARAMETERS -define(`rp',`r16') -define(`up',`r17') -define(`vp',`r18') -define(`n',`r19') - -define(`rl0',`r0') -define(`rl1',`r1') -define(`rl2',`r2') -define(`rl3',`r3') - -define(`ul0',`r4') -define(`ul1',`r5') -define(`ul2',`r6') -define(`ul3',`r7') - -define(`vl0',`r22') -define(`vl1',`r23') -define(`vl2',`r24') -define(`vl3',`r25') - -define(`numb_mask',`r21') - -define(`NAIL_BITS',`GMP_NAIL_BITS') -define(`CYSH',`GMP_NUMB_BITS') - -dnl This declaration is munged by configure -NAILS_SUPPORT(1-63) - -ifdef(`OPERATION_add_n', ` - define(`OP', addq) - define(`CYSH',`GMP_NUMB_BITS') - define(`func', mpn_add_n)') -ifdef(`OPERATION_sub_n', ` - define(`OP', subq) - define(`CYSH',63) - define(`func', mpn_sub_n)') - -MULFUNC_PROLOGUE(mpn_add_n mpn_sub_n) - -ASM_START() -PROLOGUE(func) - lda numb_mask, -1(r31) - srl numb_mask, NAIL_BITS, numb_mask - bis r31, r31, r20 - - and n, 3, r25 - lda n, -4(n) - beq r25, L(ge4) - -L(lp0): ldq ul0, 0(up) - lda up, 8(up) - ldq vl0, 0(vp) - lda vp, 8(vp) - lda rp, 8(rp) - lda r25, -1(r25) - OP ul0, vl0, rl0 - OP rl0, r20, rl0 - and rl0, numb_mask, r28 - stq r28, -8(rp) - srl rl0, CYSH, r20 - bne r25, L(lp0) - - blt n, L(ret) - -L(ge4): ldq ul0, 0(up) - ldq vl0, 0(vp) - ldq ul1, 8(up) - ldq vl1, 8(vp) - ldq ul2, 16(up) - ldq vl2, 16(vp) - ldq ul3, 24(up) - ldq vl3, 24(vp) - lda up, 32(up) - lda vp, 32(vp) - lda n, -4(n) - bge n, L(ge8) - - OP ul0, vl0, rl0 C main-add 0 - OP rl0, r20, rl0 C cy-add 0 - OP ul1, vl1, rl1 C main-add 1 - srl rl0, CYSH, r20 C gen cy 0 - OP rl1, r20, rl1 C cy-add 1 - and rl0,numb_mask, r27 - br r31, L(cj0) - -L(ge8): OP ul0, vl0, rl0 C main-add 0 - ldq ul0, 0(up) - ldq vl0, 0(vp) - OP rl0, r20, rl0 C cy-add 0 - OP ul1, vl1, rl1 C main-add 1 - srl rl0, CYSH, r20 C gen cy 0 - ldq ul1, 8(up) - ldq vl1, 8(vp) - OP rl1, r20, rl1 C cy-add 1 - and rl0,numb_mask, r27 - OP ul2, vl2, rl2 C main-add 2 - srl rl1, CYSH, r20 C gen cy 1 - ldq ul2, 16(up) - ldq vl2, 16(vp) - OP rl2, r20, rl2 C cy-add 2 - and rl1,numb_mask, r28 - stq r27, 0(rp) - OP ul3, vl3, rl3 C main-add 3 - srl rl2, CYSH, r20 C gen cy 2 - ldq ul3, 24(up) - ldq vl3, 24(vp) - OP rl3, r20, rl3 C cy-add 3 - and rl2,numb_mask, r27 - stq r28, 8(rp) - lda rp, 32(rp) - lda up, 32(up) - lda vp, 32(vp) - lda n, -4(n) - blt n, L(end) - - ALIGN(32) -L(top): OP ul0, vl0, rl0 C main-add 0 - srl rl3, CYSH, r20 C gen cy 3 - ldq ul0, 0(up) - ldq vl0, 0(vp) - - OP rl0, r20, rl0 C cy-add 0 - and rl3,numb_mask, r28 - stq r27, -16(rp) - bis r31, r31, r31 - - OP ul1, vl1, rl1 C main-add 1 - srl rl0, CYSH, r20 C gen cy 0 - ldq ul1, 8(up) - ldq vl1, 8(vp) - - OP rl1, r20, rl1 C cy-add 1 - and rl0,numb_mask, r27 - stq r28, -8(rp) - bis r31, r31, r31 - - OP ul2, vl2, rl2 C main-add 2 - srl rl1, CYSH, r20 C gen cy 1 - ldq ul2, 16(up) - ldq vl2, 16(vp) - - OP rl2, r20, rl2 C cy-add 2 - and rl1,numb_mask, r28 - stq r27, 0(rp) - bis r31, r31, r31 - - OP ul3, vl3, rl3 C main-add 3 - srl rl2, CYSH, r20 C gen cy 2 - ldq ul3, 24(up) - ldq vl3, 24(vp) - - OP rl3, r20, rl3 C cy-add 3 - and rl2,numb_mask, r27 - stq r28, 8(rp) - bis r31, r31, r31 - - bis r31, r31, r31 - lda n, -4(n) - lda up, 32(up) - lda vp, 32(vp) - - bis r31, r31, r31 - bis r31, r31, r31 - lda rp, 32(rp) - bge n, L(top) - -L(end): OP ul0, vl0, rl0 C main-add 0 - srl rl3, CYSH, r20 C gen cy 3 - OP rl0, r20, rl0 C cy-add 0 - and rl3,numb_mask, r28 - stq r27, -16(rp) - OP ul1, vl1, rl1 C main-add 1 - srl rl0, CYSH, r20 C gen cy 0 - OP rl1, r20, rl1 C cy-add 1 - and rl0,numb_mask, r27 - stq r28, -8(rp) -L(cj0): OP ul2, vl2, rl2 C main-add 2 - srl rl1, CYSH, r20 C gen cy 1 - OP rl2, r20, rl2 C cy-add 2 - and rl1,numb_mask, r28 - stq r27, 0(rp) - OP ul3, vl3, rl3 C main-add 3 - srl rl2, CYSH, r20 C gen cy 2 - OP rl3, r20, rl3 C cy-add 3 - and rl2,numb_mask, r27 - stq r28, 8(rp) - - srl rl3, CYSH, r20 C gen cy 3 - and rl3,numb_mask, r28 - stq r27, 16(rp) - stq r28, 24(rp) - -L(ret): and r20, 1, r0 - ret r31, (r26), 1 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/gmp-mparam.h deleted file mode 100644 index 7949fe8df89474acd1c6674dbf2920ee65a10559..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/gmp-mparam.h +++ /dev/null @@ -1,72 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* Generated by tuneup.c, 2004-02-07, gcc 3.3 */ - -#define MUL_TOOM22_THRESHOLD 40 -#define MUL_TOOM33_THRESHOLD 236 - -#define SQR_BASECASE_THRESHOLD 7 /* karatsuba */ -#define SQR_TOOM2_THRESHOLD 0 /* never sqr_basecase */ -#define SQR_TOOM3_THRESHOLD 120 - -#define DIV_SB_PREINV_THRESHOLD MP_SIZE_T_MAX /* no preinv with nails */ -#define DIV_DC_THRESHOLD 48 -#define POWM_THRESHOLD 113 - -#define HGCD_THRESHOLD 78 -#define GCD_ACCEL_THRESHOLD 3 -#define GCD_DC_THRESHOLD 392 -#define JACOBI_BASE_METHOD 1 - -#define DIVREM_1_NORM_THRESHOLD MP_SIZE_T_MAX /* no preinv with nails */ -#define DIVREM_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* no preinv with nails */ -#define MOD_1_NORM_THRESHOLD MP_SIZE_T_MAX /* no preinv with nails */ -#define MOD_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* no preinv with nails */ -#define USE_PREINV_DIVREM_1 0 /* no preinv with nails */ -#define USE_PREINV_MOD_1 0 /* no preinv with nails */ -#define DIVREM_2_THRESHOLD MP_SIZE_T_MAX /* no preinv with nails */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define MODEXACT_1_ODD_THRESHOLD 0 /* always */ - -#define GET_STR_DC_THRESHOLD 15 -#define GET_STR_PRECOMPUTE_THRESHOLD 24 -#define SET_STR_THRESHOLD 6336 - -#define MUL_FFT_TABLE { 688, 1440, 3648, 6400, 25600, 0 } -#define MUL_FFT_MODF_THRESHOLD 488 -#define MUL_FFT_THRESHOLD 3712 - -#define SQR_FFT_TABLE { 432, 864, 3136, 6400, 25600, 0 } -#define SQR_FFT_MODF_THRESHOLD 480 -#define SQR_FFT_THRESHOLD 2976 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/mul_1.asm deleted file mode 100644 index da2ee3d09978d209aa4c460c98b1039ec86e2eef..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/mul_1.asm +++ /dev/null @@ -1,364 +0,0 @@ -dnl Alpha ev6 nails mpn_mul_1. - -dnl Copyright 2002, 2005, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: 42 -C EV5: 18 -C EV6: 3.25 - -C TODO -C * Reroll loop for 3.0 c/l with current 4-way unrolling. -C * The loop is overscheduled wrt loads and wrt multiplies, in particular -C umulh. -C * Use FP loop count and multiple exit points, that would simplify feed-in lp0 -C and would work since the loop structure is really regular. - -C INPUT PARAMETERS -define(`rp',`r16') -define(`up',`r17') -define(`n', `r18') -define(`vl0',`r19') - -define(`numb_mask',`r6') - -define(`m0a',`r0') -define(`m0b',`r1') -define(`m1a',`r2') -define(`m1b',`r3') -define(`m2a',`r20') -define(`m2b',`r21') -define(`m3a',`r22') -define(`m3b',`r23') - -define(`acc0',`r25') -define(`acc1',`r27') - -define(`ul0',`r4') -define(`ul1',`r5') -define(`ul2',`r4') -define(`ul3',`r5') - -define(`rl0',`r24') -define(`rl1',`r24') -define(`rl2',`r24') -define(`rl3',`r24') - -define(`t0',`r7') -define(`t1',`r8') - -define(`NAIL_BITS',`GMP_NAIL_BITS') -define(`NUMB_BITS',`GMP_NUMB_BITS') - -dnl This declaration is munged by configure -NAILS_SUPPORT(1-63) - -ASM_START() -PROLOGUE(mpn_mul_1) - sll vl0, NAIL_BITS, vl0 - lda numb_mask, -1(r31) - srl numb_mask, NAIL_BITS, numb_mask - - and n, 3, r25 - cmpeq r25, 1, r21 - bne r21, L(1m4) - cmpeq r25, 2, r21 - bne r21, L(2m4) - beq r25, L(0m4) - -L(3m4): ldq ul3, 0(up) - lda n, -4(n) - ldq ul0, 8(up) - mulq vl0, ul3, m3a - umulh vl0, ul3, m3b - ldq ul1, 16(up) - lda up, 24(up) - lda rp, -8(rp) - mulq vl0, ul0, m0a - umulh vl0, ul0, m0b - bge n, L(ge3) - - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - srl m3a,NAIL_BITS, t0 - addq t0, r31, acc1 - srl m0a,NAIL_BITS, t0 - addq t0, m3b, acc0 - srl acc1,NUMB_BITS, t1 - br r31, L(ta3) - -L(ge3): ldq ul2, 0(up) - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - srl m3a,NAIL_BITS, t0 - ldq ul3, 8(up) - lda n, -4(n) - mulq vl0, ul2, m2a - addq t0, r31, acc1 - umulh vl0, ul2, m2b - srl m0a,NAIL_BITS, t0 - ldq ul0, 16(up) - mulq vl0, ul3, m3a - addq t0, m3b, acc0 - srl acc1,NUMB_BITS, t1 - br r31, L(el3) - -L(0m4): lda n, -8(n) - ldq ul2, 0(up) - ldq ul3, 8(up) - mulq vl0, ul2, m2a - umulh vl0, ul2, m2b - ldq ul0, 16(up) - mulq vl0, ul3, m3a - umulh vl0, ul3, m3b - ldq ul1, 24(up) - lda up, 32(up) - mulq vl0, ul0, m0a - umulh vl0, ul0, m0b - bge n, L(ge4) - - srl m2a,NAIL_BITS, t0 - mulq vl0, ul1, m1a - addq t0, r31, acc0 - umulh vl0, ul1, m1b - srl m3a,NAIL_BITS, t0 - addq t0, m2b, acc1 - srl acc0,NUMB_BITS, t1 - br r31, L(ta4) - -L(ge4): srl m2a,NAIL_BITS, t0 - ldq ul2, 0(up) - mulq vl0, ul1, m1a - addq t0, r31, acc0 - umulh vl0, ul1, m1b - srl m3a,NAIL_BITS, t0 - ldq ul3, 8(up) - lda n, -4(n) - mulq vl0, ul2, m2a - addq t0, m2b, acc1 - srl acc0,NUMB_BITS, t1 - br r31, L(el0) - -L(2m4): lda n, -4(n) - ldq ul0, 0(up) - ldq ul1, 8(up) - lda up, 16(up) - lda rp, -16(rp) - mulq vl0, ul0, m0a - umulh vl0, ul0, m0b - bge n, L(ge2) - - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - srl m0a,NAIL_BITS, t0 - addq t0, r31, acc0 - srl m1a,NAIL_BITS, t0 - addq t0, m0b, acc1 - srl acc0,NUMB_BITS, t1 - br r31, L(ta2) - -L(ge2): ldq ul2, 0(up) - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - ldq ul3, 8(up) - lda n, -4(n) - mulq vl0, ul2, m2a - umulh vl0, ul2, m2b - srl m0a,NAIL_BITS, t0 - ldq ul0, 16(up) - mulq vl0, ul3, m3a - addq t0, r31, acc0 - umulh vl0, ul3, m3b - srl m1a,NAIL_BITS, t0 - ldq ul1, 24(up) - lda up, 32(up) - lda rp, 32(rp) - mulq vl0, ul0, m0a - addq t0, m0b, acc1 - srl acc0,NUMB_BITS, t1 - bge n, L(el2) - - br r31, L(ta6) - -L(1m4): lda n, -4(n) - ldq ul1, 0(up) - lda up, 8(up) - lda rp, -24(rp) - bge n, L(ge1) - - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - srl m1a,NAIL_BITS, t0 - addq t0, r31, acc1 - and acc1,numb_mask, r28 - srl acc1,NUMB_BITS, t1 - stq r28, 24(rp) - addq t1, m1b, r0 - ret r31, (r26), 1 - -L(ge1): ldq ul2, 0(up) - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - ldq ul3, 8(up) - lda n, -4(n) - mulq vl0, ul2, m2a - umulh vl0, ul2, m2b - ldq ul0, 16(up) - mulq vl0, ul3, m3a - umulh vl0, ul3, m3b - srl m1a,NAIL_BITS, t0 - ldq ul1, 24(up) - lda up, 32(up) - lda rp, 32(rp) - mulq vl0, ul0, m0a - addq t0, r31, acc1 - umulh vl0, ul0, m0b - srl m2a,NAIL_BITS, t0 - mulq vl0, ul1, m1a - addq t0, m1b, acc0 - srl acc1,NUMB_BITS, t1 - blt n, L(ta5) - -L(ge5): ldq ul2, 0(up) - br r31, L(el1) - - ALIGN(16) -L(top): mulq vl0, ul0, m0a C U1 - addq t0, m0b, acc1 C L0 - srl acc0,NUMB_BITS, t1 C U0 - stq r28, -24(rp) C L1 -C -L(el2): umulh vl0, ul0, m0b C U1 - and acc0,numb_mask, r28 C L0 - unop C U0 - unop C L1 -C - unop C U1 - addq t1, acc1, acc1 C L0 - srl m2a,NAIL_BITS, t0 C U0 - ldq ul2, 0(up) C L1 -C - mulq vl0, ul1, m1a C U1 - addq t0, m1b, acc0 C L0 - srl acc1,NUMB_BITS, t1 C U0 - stq r28, -16(rp) C L1 -C -L(el1): umulh vl0, ul1, m1b C U1 - and acc1,numb_mask, r28 C L0 - unop C U0 - lda n, -4(n) C L1 -C - unop C U1 - addq t1, acc0, acc0 C L0 - srl m3a,NAIL_BITS, t0 C U0 - ldq ul3, 8(up) C L1 -C - mulq vl0, ul2, m2a C U1 - addq t0, m2b, acc1 C L0 - srl acc0,NUMB_BITS, t1 C U0 - stq r28, -8(rp) C L1 -C -L(el0): umulh vl0, ul2, m2b C U1 - and acc0,numb_mask, r28 C L0 - unop C U0 - unop C L1 -C - unop C U1 - addq t1, acc1, acc1 C L0 - srl m0a,NAIL_BITS, t0 C U0 - ldq ul0, 16(up) C L1 -C - mulq vl0, ul3, m3a C U1 - addq t0, m3b, acc0 C L0 - srl acc1,NUMB_BITS, t1 C U0 - stq r28, 0(rp) C L1 -C -L(el3): umulh vl0, ul3, m3b C U1 - and acc1,numb_mask, r28 C L0 - unop C U0 - unop C L1 -C - unop C U1 - addq t1, acc0, acc0 C L0 - srl m1a,NAIL_BITS, t0 C U0 - ldq ul1, 24(up) C L1 -C - lda up, 32(up) C L0 - unop C U1 - lda rp, 32(rp) C L1 - bge n, L(top) C U0 - -L(end): mulq vl0, ul0, m0a - addq t0, m0b, acc1 - srl acc0,NUMB_BITS, t1 - stq r28, -24(rp) -L(ta6): umulh vl0, ul0, m0b - and acc0,numb_mask, r28 - addq t1, acc1, acc1 - srl m2a,NAIL_BITS, t0 - mulq vl0, ul1, m1a - addq t0, m1b, acc0 - srl acc1,NUMB_BITS, t1 - stq r28, -16(rp) -L(ta5): umulh vl0, ul1, m1b - and acc1,numb_mask, r28 - addq t1, acc0, acc0 - srl m3a,NAIL_BITS, t0 - addq t0, m2b, acc1 - srl acc0,NUMB_BITS, t1 - stq r28, -8(rp) - ALIGN(16) -L(ta4): and acc0,numb_mask, r28 - addq t1, acc1, acc1 - srl m0a,NAIL_BITS, t0 - addq t0, m3b, acc0 - srl acc1,NUMB_BITS, t1 - stq r28, 0(rp) - unop - ALIGN(16) -L(ta3): and acc1,numb_mask, r28 - addq t1, acc0, acc0 - srl m1a,NAIL_BITS, t0 - addq t0, m0b, acc1 - srl acc0,NUMB_BITS, t1 - stq r28, 8(rp) - unop - ALIGN(16) -L(ta2): and acc0,numb_mask, r28 - addq t1, acc1, acc1 - srl acc1,NUMB_BITS, t1 - stq r28, 16(rp) - and acc1,numb_mask, r28 - addq t1, m1b, r0 - stq r28, 24(rp) - ret r31, (r26), 1 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/submul_1.asm deleted file mode 100644 index f473a59ba824bdb67715e87f2061345047e76659..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/nails/submul_1.asm +++ /dev/null @@ -1,396 +0,0 @@ -dnl Alpha ev6 nails mpn_submul_1. - -dnl Copyright 2002, 2005, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: 42 -C EV5: 18 -C EV6: 4 - -C TODO -C * Reroll loop for 3.75 c/l with current 4-way unrolling. -C * The loop is overscheduled wrt loads and wrt multiplies, in particular -C umulh. -C * Use FP loop count and multiple exit points, that would simplify feed-in lp0 -C and would work since the loop structure is really regular. - -C INPUT PARAMETERS -define(`rp',`r16') -define(`up',`r17') -define(`n', `r18') -define(`vl0',`r19') - -define(`numb_mask',`r6') - -define(`m0a',`r0') -define(`m0b',`r1') -define(`m1a',`r2') -define(`m1b',`r3') -define(`m2a',`r20') -define(`m2b',`r21') -define(`m3a',`r22') -define(`m3b',`r23') - -define(`acc0',`r25') -define(`acc1',`r27') - -define(`ul0',`r4') -define(`ul1',`r5') -define(`ul2',`r4') -define(`ul3',`r5') - -define(`rl0',`r24') -define(`rl1',`r24') -define(`rl2',`r24') -define(`rl3',`r24') - -define(`t0',`r7') -define(`t1',`r8') - -define(`NAIL_BITS',`GMP_NAIL_BITS') -define(`NUMB_BITS',`GMP_NUMB_BITS') - -dnl This declaration is munged by configure -NAILS_SUPPORT(2-63) - -ASM_START() -PROLOGUE(mpn_submul_1) - sll vl0, NAIL_BITS, vl0 - lda numb_mask, -1(r31) - srl numb_mask, NAIL_BITS, numb_mask - - and n, 3, r25 - cmpeq r25, 1, r21 - bne r21, L(1m4) - cmpeq r25, 2, r21 - bne r21, L(2m4) - beq r25, L(0m4) - -L(3m4): ldq ul3, 0(up) - lda n, -4(n) - ldq ul0, 8(up) - mulq vl0, ul3, m3a - umulh vl0, ul3, m3b - ldq ul1, 16(up) - lda up, 24(up) - lda rp, -8(rp) - mulq vl0, ul0, m0a - umulh vl0, ul0, m0b - bge n, L(ge3) - - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - ldq rl3, 8(rp) - srl m3a,NAIL_BITS, t0 - addq t0, r31, acc1 - subq rl3, acc1, acc1 - ldq rl0, 16(rp) - srl m0a,NAIL_BITS, t0 - addq t0, m3b, acc0 - sra acc1,NUMB_BITS, t1 - br r31, L(ta3) - -L(ge3): ldq ul2, 0(up) - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - ldq rl3, 8(rp) - srl m3a,NAIL_BITS, t0 - ldq ul3, 8(up) - lda n, -4(n) - mulq vl0, ul2, m2a - addq t0, r31, acc1 - umulh vl0, ul2, m2b - subq rl3, acc1, acc1 - ldq rl0, 16(rp) - srl m0a,NAIL_BITS, t0 - ldq ul0, 16(up) - mulq vl0, ul3, m3a - addq t0, m3b, acc0 - sra acc1,NUMB_BITS, t1 - br r31, L(el3) - -L(0m4): lda n, -8(n) - ldq ul2, 0(up) - ldq ul3, 8(up) - mulq vl0, ul2, m2a - umulh vl0, ul2, m2b - ldq ul0, 16(up) - mulq vl0, ul3, m3a - umulh vl0, ul3, m3b - ldq ul1, 24(up) - lda up, 32(up) - mulq vl0, ul0, m0a - umulh vl0, ul0, m0b - bge n, L(ge4) - - ldq rl2, 0(rp) - srl m2a,NAIL_BITS, t0 - mulq vl0, ul1, m1a - addq t0, r31, acc0 - umulh vl0, ul1, m1b - subq rl2, acc0, acc0 - ldq rl3, 8(rp) - srl m3a,NAIL_BITS, t0 - addq t0, m2b, acc1 - sra acc0,NUMB_BITS, t1 - br r31, L(ta4) - -L(ge4): ldq rl2, 0(rp) - srl m2a,NAIL_BITS, t0 - ldq ul2, 0(up) - mulq vl0, ul1, m1a - addq t0, r31, acc0 - umulh vl0, ul1, m1b - subq rl2, acc0, acc0 - ldq rl3, 8(rp) - srl m3a,NAIL_BITS, t0 - ldq ul3, 8(up) - lda n, -4(n) - mulq vl0, ul2, m2a - addq t0, m2b, acc1 - sra acc0,NUMB_BITS, t1 - br r31, L(el0) - -L(2m4): lda n, -4(n) - ldq ul0, 0(up) - ldq ul1, 8(up) - lda up, 16(up) - lda rp, -16(rp) - mulq vl0, ul0, m0a - umulh vl0, ul0, m0b - bge n, L(ge2) - - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - ldq rl0, 16(rp) - srl m0a,NAIL_BITS, t0 - addq t0, r31, acc0 - subq rl0, acc0, acc0 - ldq rl1, 24(rp) - srl m1a,NAIL_BITS, t0 - addq t0, m0b, acc1 - sra acc0,NUMB_BITS, t1 - br r31, L(ta2) - -L(ge2): ldq ul2, 0(up) - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - ldq ul3, 8(up) - lda n, -4(n) - mulq vl0, ul2, m2a - umulh vl0, ul2, m2b - ldq rl0, 16(rp) - srl m0a,NAIL_BITS, t0 - ldq ul0, 16(up) - mulq vl0, ul3, m3a - addq t0, r31, acc0 - umulh vl0, ul3, m3b - subq rl0, acc0, acc0 - ldq rl1, 24(rp) - srl m1a,NAIL_BITS, t0 - ldq ul1, 24(up) - lda up, 32(up) - lda rp, 32(rp) - mulq vl0, ul0, m0a - addq t0, m0b, acc1 - sra acc0,NUMB_BITS, t1 - bge n, L(el2) - - br r31, L(ta6) - -L(1m4): lda n, -4(n) - ldq ul1, 0(up) - lda up, 8(up) - lda rp, -24(rp) - bge n, L(ge1) - - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - ldq rl1, 24(rp) - srl m1a,NAIL_BITS, t0 - subq rl1, t0, acc1 - and acc1,numb_mask, r28 - sra acc1,NUMB_BITS, t1 - stq r28, 24(rp) - subq m1b, t1, r0 - ret r31, (r26), 1 - -L(ge1): ldq ul2, 0(up) - mulq vl0, ul1, m1a - umulh vl0, ul1, m1b - ldq ul3, 8(up) - lda n, -4(n) - mulq vl0, ul2, m2a - umulh vl0, ul2, m2b - ldq ul0, 16(up) - mulq vl0, ul3, m3a - umulh vl0, ul3, m3b - ldq rl1, 24(rp) - srl m1a,NAIL_BITS, t0 - ldq ul1, 24(up) - lda up, 32(up) - lda rp, 32(rp) - mulq vl0, ul0, m0a - addq t0, r31, acc1 - umulh vl0, ul0, m0b - subq rl1, acc1, acc1 - ldq rl2, 0(rp) - srl m2a,NAIL_BITS, t0 - mulq vl0, ul1, m1a - addq t0, m1b, acc0 - sra acc1,NUMB_BITS, t1 - blt n, L(ta5) - -L(ge5): ldq ul2, 0(up) - br r31, L(el1) - - ALIGN(16) -L(top): mulq vl0, ul0, m0a C U1 - addq t0, m0b, acc1 C L0 - sra acc0,NUMB_BITS, t1 C U0 - stq r28, -24(rp) C L1 -C -L(el2): umulh vl0, ul0, m0b C U1 - and acc0,numb_mask, r28 C L0 - subq rl1, acc1, acc1 C U0 - ldq rl2, 0(rp) C L1 -C - unop C U1 - addq t1, acc1, acc1 C L0 - srl m2a,NAIL_BITS, t0 C U0 - ldq ul2, 0(up) C L1 -C - mulq vl0, ul1, m1a C U1 - addq t0, m1b, acc0 C L0 - sra acc1,NUMB_BITS, t1 C U0 - stq r28, -16(rp) C L1 -C -L(el1): umulh vl0, ul1, m1b C U1 - and acc1,numb_mask, r28 C L0 - subq rl2, acc0, acc0 C U0 - ldq rl3, 8(rp) C L1 -C - lda n, -4(n) C L1 - addq t1, acc0, acc0 C L0 - srl m3a,NAIL_BITS, t0 C U0 - ldq ul3, 8(up) C L1 -C - mulq vl0, ul2, m2a C U1 - addq t0, m2b, acc1 C L0 - sra acc0,NUMB_BITS, t1 C U0 - stq r28, -8(rp) C L1 -C -L(el0): umulh vl0, ul2, m2b C U1 - and acc0,numb_mask, r28 C L0 - subq rl3, acc1, acc1 C U0 - ldq rl0, 16(rp) C L1 -C - unop C U1 - addq t1, acc1, acc1 C L0 - srl m0a,NAIL_BITS, t0 C U0 - ldq ul0, 16(up) C L1 -C - mulq vl0, ul3, m3a C U1 - addq t0, m3b, acc0 C L0 - sra acc1,NUMB_BITS, t1 C U0 - stq r28, 0(rp) C L1 -C -L(el3): umulh vl0, ul3, m3b C U1 - and acc1,numb_mask, r28 C L0 - subq rl0, acc0, acc0 C U0 - ldq rl1, 24(rp) C L1 -C - unop C U1 - addq t1, acc0, acc0 C L0 - srl m1a,NAIL_BITS, t0 C U0 - ldq ul1, 24(up) C L1 -C - lda up, 32(up) C L0 - unop C U1 - lda rp, 32(rp) C L1 - bge n, L(top) C U0 - -L(end): mulq vl0, ul0, m0a - addq t0, m0b, acc1 - sra acc0,NUMB_BITS, t1 - stq r28, -24(rp) -L(ta6): umulh vl0, ul0, m0b - and acc0,numb_mask, r28 - subq rl1, acc1, acc1 - ldq rl2, 0(rp) - addq t1, acc1, acc1 - srl m2a,NAIL_BITS, t0 - mulq vl0, ul1, m1a - addq t0, m1b, acc0 - sra acc1,NUMB_BITS, t1 - stq r28, -16(rp) -L(ta5): umulh vl0, ul1, m1b - and acc1,numb_mask, r28 - subq rl2, acc0, acc0 - ldq rl3, 8(rp) - addq t1, acc0, acc0 - srl m3a,NAIL_BITS, t0 - addq t0, m2b, acc1 - sra acc0,NUMB_BITS, t1 - stq r28, -8(rp) - unop - ALIGN(16) -L(ta4): and acc0,numb_mask, r28 - subq rl3, acc1, acc1 - ldq rl0, 16(rp) - addq t1, acc1, acc1 - srl m0a,NAIL_BITS, t0 - addq t0, m3b, acc0 - sra acc1,NUMB_BITS, t1 - stq r28, 0(rp) - unop - ALIGN(16) -L(ta3): and acc1,numb_mask, r28 - subq rl0, acc0, acc0 - ldq rl1, 24(rp) - addq t1, acc0, acc0 - srl m1a,NAIL_BITS, t0 - addq t0, m0b, acc1 - sra acc0,NUMB_BITS, t1 - stq r28, 8(rp) - unop - ALIGN(16) -L(ta2): and acc0,numb_mask, r28 - subq rl1, acc1, acc1 - addq t1, acc1, acc1 - sra acc1,NUMB_BITS, t1 - stq r28, 16(rp) - and acc1,numb_mask, r28 - subq m1b, t1, r0 - stq r28, 24(rp) - ret r31, (r26), 1 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/slot.pl b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/slot.pl deleted file mode 100755 index a4c8a36882d85ab5553f202d55ed315722fd1534..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/slot.pl +++ /dev/null @@ -1,318 +0,0 @@ -#!/usr/bin/perl -w - -# Copyright 2000, 2001, 2003-2005, 2011 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - - -# Usage: slot.pl [filename.o]... -# -# Run "objdump" to produce a disassembly of the given object file(s) and -# annotate the output with "U" or "L" slotting which Alpha EV6 will use. -# -# When an instruction is E (ie. either U or L), an "eU" or "eL" is shown, as -# a reminder that it wasn't a fixed requirement that gave the U or L, but -# the octaword slotting rules. -# -# If an instruction is not recognised, that octaword does not get any U/L -# shown, only lower-case "u", "l" or "e" for the instructions which are -# known. Add any unknown instructions to %optable below. - - -use strict; - -# The U or L which various instructions demand, or E if either. -# -my %optable = - ( - 'addq' => 'E', - 'and' => 'E', - 'andnot' => 'E', - 'beq' => 'U', - 'bge' => 'U', - 'bgt' => 'U', - 'bic' => 'E', - 'bis' => 'E', - 'blt' => 'U', - 'bne' => 'U', - 'br' => 'L', - 'clr' => 'E', - 'cmpule' => 'E', - 'cmpult' => 'E', - 'cmpeq' => 'E', - 'cmoveq' => 'E', - 'cmovne' => 'E', - 'ctpop' => 'U', - 'ctlz' => 'U', - 'cttz' => 'U', - 'extbl' => 'U', - 'extlh' => 'U', - 'extll' => 'U', - 'extqh' => 'U', - 'extql' => 'U', - 'extwh' => 'U', - 'extwl' => 'U', - 'jsr' => 'L', - 'lda' => 'E', - 'ldah' => 'E', - 'ldbu' => 'L', - 'ldl' => 'L', - 'ldq' => 'L', - 'ldt' => 'L', - 'ret' => 'L', - 'mov' => 'E', - 'mull' => 'U', - 'mulq' => 'U', - 'negq' => 'E', - 'nop' => 'E', - 'not' => 'E', - 's8addq' => 'E', - 's8subq' => 'E', - # 'sextb' => ? - # 'sextl' => ? - 'sll' => 'U', - 'srl' => 'U', - 'stq' => 'L', - 'subq' => 'E', - 'umulh' => 'U', - 'unop' => 'E', - 'xor' => 'E', - ); - -# Slottings used for a given pattern of U/L/E in an octaword. This is as -# per the "Ebox Slotting" section of the EV6 hardware reference manual. -# -my %slottable = - ( - 'EEEE' => 'ULUL', - 'EEEL' => 'ULUL', - 'EEEU' => 'ULLU', - 'EELE' => 'ULLU', - 'EELL' => 'UULL', - 'EELU' => 'ULLU', - 'EEUE' => 'ULUL', - 'EEUL' => 'ULUL', - 'EEUU' => 'LLUU', - 'ELEE' => 'ULUL', - 'ELEL' => 'ULUL', - 'ELEU' => 'ULLU', - 'ELLE' => 'ULLU', - 'ELLL' => 'ULLL', - 'ELLU' => 'ULLU', - 'ELUE' => 'ULUL', - 'ELUL' => 'ULUL', - - 'LLLL' => 'LLLL', - 'LLLU' => 'LLLU', - 'LLUE' => 'LLUU', - 'LLUL' => 'LLUL', - 'LLUU' => 'LLUU', - 'LUEE' => 'LULU', - 'LUEL' => 'LUUL', - 'LUEU' => 'LULU', - 'LULE' => 'LULU', - 'LULL' => 'LULL', - 'LULU' => 'LULU', - 'LUUE' => 'LUUL', - 'LUUL' => 'LUUL', - 'LUUU' => 'LUUU', - 'UEEE' => 'ULUL', - 'UEEL' => 'ULUL', - 'UEEU' => 'ULLU', - - 'ELUU' => 'LLUU', - 'EUEE' => 'LULU', - 'EUEL' => 'LUUL', - 'EUEU' => 'LULU', - 'EULE' => 'LULU', - 'EULL' => 'UULL', - 'EULU' => 'LULU', - 'EUUE' => 'LUUL', - 'EUUL' => 'LUUL', - 'EUUU' => 'LUUU', - 'LEEE' => 'LULU', - 'LEEL' => 'LUUL', - 'LEEU' => 'LULU', - 'LELE' => 'LULU', - 'LELL' => 'LULL', - 'LELU' => 'LULU', - 'LEUE' => 'LUUL', - 'LEUL' => 'LUUL', - 'LEUU' => 'LLUU', - 'LLEE' => 'LLUU', - 'LLEL' => 'LLUL', - 'LLEU' => 'LLUU', - 'LLLE' => 'LLLU', - - 'UELE' => 'ULLU', - 'UELL' => 'UULL', - 'UELU' => 'ULLU', - 'UEUE' => 'ULUL', - 'UEUL' => 'ULUL', - 'UEUU' => 'ULUU', - 'ULEE' => 'ULUL', - 'ULEL' => 'ULUL', - 'ULEU' => 'ULLU', - 'ULLE' => 'ULLU', - 'ULLL' => 'ULLL', - 'ULLU' => 'ULLU', - 'ULUE' => 'ULUL', - 'ULUL' => 'ULUL', - 'ULUU' => 'ULUU', - 'UUEE' => 'UULL', - 'UUEL' => 'UULL', - 'UUEU' => 'UULU', - 'UULE' => 'UULL', - 'UULL' => 'UULL', - 'UULU' => 'UULU', - 'UUUE' => 'UUUL', - 'UUUL' => 'UUUL', - 'UUUU' => 'UUUU', - ); - -# Check all combinations of U/L/E are present in %slottable. -sub coverage { - foreach my $a ('U', 'L', 'E') { - foreach my $b ('U', 'L', 'E') { - foreach my $c ('U', 'L', 'E') { - foreach my $d ('U', 'L', 'E') { - my $x = $a . $b . $c . $d; - if (! defined $slottable{$x}) { - print "slottable missing: $x\n" - } - } - } - } - } -} - -# Certain consistency checks for %slottable. -sub check { - foreach my $x (keys %slottable) { - my $a = substr($x,0,1); - my $b = substr($x,1,1); - my $c = substr($x,2,1); - my $d = substr($x,3,1); - my $es = ($a eq 'E') + ($b eq 'E') + ($c eq 'E') + ($d eq 'E'); - my $ls = ($a eq 'L') + ($b eq 'L') + ($c eq 'L') + ($d eq 'L'); - my $us = ($a eq 'U') + ($b eq 'U') + ($c eq 'U') + ($d eq 'U'); - - my $got = $slottable{$x}; - my $want = $x; - - if ($es == 0) { - - } elsif ($es == 1) { - # when only one E, it's mapped to whichever of U or L is otherwise - # used the least - if ($ls > $us) { - $want =~ s/E/U/; - } else { - $want =~ s/E/L/; - } - } elsif ($es == 2) { - # when two E's and two U, then the E's map to L; vice versa for two E - # and two L - if ($ls == 2) { - $want =~ s/E/U/g; - } elsif ($us == 2) { - $want =~ s/E/L/g; - } else { - next; - } - } elsif ($es == 3) { - next; - - } else { # $es == 4 - next; - } - - if ($want ne $got) { - print "slottable $x want $want got $got\n"; - } - } -} - -sub disassemble { - my ($file) = @_; - - open (IN, "objdump -Srfh $file |") || die "Cannot open pipe from objdump\n"; - - my (%pre, %post, %type); - while (<IN>) { - my $line = $_ . ""; - - if ($line =~ /(^[ \t]*[0-9a-f]*([0-9a-f]):[ \t]*[0-9a-f][0-9a-f] [0-9a-f][0-9a-f] [0-9a-f][0-9a-f] [0-9a-f][0-9a-f] )\t(([a-z0-9]+).*)/) { - my ($this_pre, $addr, $this_post, $opcode) = ($1, $2, $3, $4); - - my $this_type = $optable{$opcode}; - if (! defined ($this_type)) { $this_type = ' '; } - - $pre{$addr} = $this_pre; - $post{$addr} = $this_post; - $type{$addr} = $this_type; - - if ($addr eq 'c') { - my %slot = ('0'=>' ', '4'=>' ', '8'=>' ', 'c'=>' '); - - my $str = $type{'c'} . $type{'8'} . $type{'4'} . $type{'0'}; - $str = $slottable{$str}; - if (defined $str) { - $slot{'c'} = substr($str,0,1); - $slot{'8'} = substr($str,1,1); - $slot{'4'} = substr($str,2,1); - $slot{'0'} = substr($str,3,1); - } - - foreach my $i ('0', '4', '8', 'c') { - if ($slot{$i} eq $type{$i}) { $type{$i} = ' '; } - print $pre{$i}, ' ', lc($type{$i}),$slot{$i}, ' ', $post{$i}, "\n"; - } - - %pre = (); - %type = (); - %post = (); - } - } - } - - close IN || die "Error from objdump (or objdump not available)\n"; -} - -coverage(); -check(); - -my @files; -if ($#ARGV >= 0) { - @files = @ARGV; -} else { - die -} - -foreach (@files) { - disassemble($_); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/sub_n.asm deleted file mode 100644 index a35ba40d347c8953f1a2ce8f2223f936ebe13d21..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev6/sub_n.asm +++ /dev/null @@ -1,283 +0,0 @@ -dnl Alpha ev6 mpn_sub_n -- Subtract two limb vectors of the same length > 0 -dnl and store difference in a third limb vector. - -dnl Copyright 2000, 2003, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: ? -C EV5: 5.4 -C EV6: 2.125 - -C INPUT PARAMETERS -C rp r16 -C up r17 -C vp r18 -C n r19 -C cy r20 (for mpn_add_nc) - -C TODO -C Finish cleaning up cy registers r22, r23 (make them use cy0/cy1) -C Use multi-pronged feed-in. -C Perform additional micro-tuning - -C This code was written in cooperation with ev6 pipeline expert Steve Root. - -C Pair loads and stores where possible -C Store pairs oct-aligned where possible (didn't need it here) -C Stores are delayed every third cycle -C Loads and stores are delayed by fills -C U stays still, put code there where possible (note alternation of U1 and U0) -C L moves because of loads and stores -C Note dampers in L to limit damage - -C This odd-looking optimization expects that were having random bits in our -C data, so that a pure zero result is unlikely. so we penalize the unlikely -C case to help the common case. - -define(`u0', `r0') define(`u1', `r3') -define(`v0', `r1') define(`v1', `r4') - -define(`cy0', `r20') define(`cy1', `r21') - -MULFUNC_PROLOGUE(mpn_sub_n mpn_sub_nc) - -ASM_START() -PROLOGUE(mpn_sub_nc) - br r31, $entry -EPILOGUE() -PROLOGUE(mpn_sub_n) - bis r31, r31, cy0 C clear carry in -$entry: cmpult r19, 5, r22 C L1 move counter - ldq u1, 0(r17) C L0 get next ones - ldq v1, 0(r18) C L1 - bne r22, $Lsmall - - ldq u0, 8(r17) C L0 get next ones - ldq v0, 8(r18) C L1 - subq u1, v1, r5 C U0 sub two data - - cmpult u1, v1, r23 C U0 did it borrow - ldq u1, 16(r17) C L0 get next ones - ldq v1, 16(r18) C L1 - - subq u0, v0, r8 C U1 sub two data - subq r5, cy0, r24 C U0 borrow in - - cmpult u0, v0, r22 C U1 did it borrow - beq r5, $fix5f C U0 fix exact zero -$ret5f: ldq u0, 24(r17) C L0 get next ones - ldq v0, 24(r18) C L1 - - subq r8, r23, r25 C U1 borrow from last - subq u1, v1, r7 C U0 sub two data - - beq r8, $fix6f C U1 fix exact zero -$ret6f: cmpult u1, v1, r23 C U0 did it borrow - ldq u1, 32(r17) C L0 get next ones - ldq v1, 32(r18) C L1 - - lda r17, 40(r17) C L0 move pointer - lda r18, 40(r18) C L1 move pointer - - lda r16, -8(r16) - lda r19, -13(r19) C L1 move counter - blt r19, $Lend C U1 loop control - - -C Main loop. 8-way unrolled. - ALIGN(16) -$Loop: subq u0, v0, r2 C U1 sub two data - stq r24, 8(r16) C L0 put an answer - subq r7, r22, r24 C U0 borrow from last - stq r25, 16(r16) C L1 pair - - cmpult u0, v0, cy1 C U1 did it borrow - beq r7, $fix7 C U0 fix exact 0 -$ret7: ldq u0, 0(r17) C L0 get next ones - ldq v0, 0(r18) C L1 - - bis r31, r31, r31 C L damp out - subq r2, r23, r25 C U1 borrow from last - bis r31, r31, r31 C L moves in L ! - subq u1, v1, r5 C U0 sub two data - - beq r2, $fix0 C U1 fix exact zero -$ret0: cmpult u1, v1, cy0 C U0 did it borrow - ldq u1, 8(r17) C L0 get next ones - ldq v1, 8(r18) C L1 - - subq u0, v0, r8 C U1 sub two data - stq r24, 24(r16) C L0 store pair - subq r5, cy1, r24 C U0 borrow from last - stq r25, 32(r16) C L1 - - cmpult u0, v0, r22 C U1 did it borrow - beq r5, $fix1 C U0 fix exact zero -$ret1: ldq u0, 16(r17) C L0 get next ones - ldq v0, 16(r18) C L1 - - lda r16, 64(r16) C L0 move pointer - subq r8, cy0, r25 C U1 borrow from last - lda r19, -8(r19) C L1 move counter - subq u1, v1, r7 C U0 sub two data - - beq r8, $fix2 C U1 fix exact zero -$ret2: cmpult u1, v1, r23 C U0 did it borrow - ldq u1, 24(r17) C L0 get next ones - ldq v1, 24(r18) C L1 - - subq u0, v0, r2 C U1 sub two data - stq r24, -24(r16) C L0 put an answer - subq r7, r22, r24 C U0 borrow from last - stq r25, -16(r16) C L1 pair - - cmpult u0, v0, cy1 C U1 did it borrow - beq r7, $fix3 C U0 fix exact 0 -$ret3: ldq u0, 32(r17) C L0 get next ones - ldq v0, 32(r18) C L1 - - bis r31, r31, r31 C L damp out - subq r2, r23, r25 C U1 borrow from last - bis r31, r31, r31 C L moves in L ! - subq u1, v1, r5 C U0 sub two data - - beq r2, $fix4 C U1 fix exact zero -$ret4: cmpult u1, v1, cy0 C U0 did it borrow - ldq u1, 40(r17) C L0 get next ones - ldq v1, 40(r18) C L1 - - subq u0, v0, r8 C U1 sub two data - stq r24, -8(r16) C L0 store pair - subq r5, cy1, r24 C U0 borrow from last - stq r25, 0(r16) C L1 - - cmpult u0, v0, r22 C U1 did it borrow - beq r5, $fix5 C U0 fix exact zero -$ret5: ldq u0, 48(r17) C L0 get next ones - ldq v0, 48(r18) C L1 - - ldl r31, 256(r17) C L0 prefetch - subq r8, cy0, r25 C U1 borrow from last - ldl r31, 256(r18) C L1 prefetch - subq u1, v1, r7 C U0 sub two data - - beq r8, $fix6 C U1 fix exact zero -$ret6: cmpult u1, v1, r23 C U0 did it borrow - ldq u1, 56(r17) C L0 get next ones - ldq v1, 56(r18) C L1 - - lda r17, 64(r17) C L0 move pointer - bis r31, r31, r31 C U - lda r18, 64(r18) C L1 move pointer - bge r19, $Loop C U1 loop control -C ==== main loop end - -$Lend: subq u0, v0, r2 C U1 sub two data - stq r24, 8(r16) C L0 put an answer - subq r7, r22, r24 C U0 borrow from last - stq r25, 16(r16) C L1 pair - cmpult u0, v0, cy1 C U1 did it borrow - beq r7, $fix7c C U0 fix exact 0 -$ret7c: subq r2, r23, r25 C U1 borrow from last - subq u1, v1, r5 C U0 sub two data - beq r2, $fix0c C U1 fix exact zero -$ret0c: cmpult u1, v1, cy0 C U0 did it borrow - stq r24, 24(r16) C L0 store pair - subq r5, cy1, r24 C U0 borrow from last - stq r25, 32(r16) C L1 - beq r5, $fix1c C U0 fix exact zero -$ret1c: stq r24, 40(r16) C L0 put an answer - lda r16, 48(r16) C L0 move pointer - - lda r19, 8(r19) - beq r19, $Lret - - ldq u1, 0(r17) - ldq v1, 0(r18) -$Lsmall: - lda r19, -1(r19) - beq r19, $Lend0 - - ALIGN(8) -$Loop0: subq u1, v1, r2 C main sub - cmpult u1, v1, r8 C compute bw from last sub - ldq u1, 8(r17) - ldq v1, 8(r18) - subq r2, cy0, r5 C borrow sub - lda r17, 8(r17) - lda r18, 8(r18) - stq r5, 0(r16) - cmpult r2, cy0, cy0 C compute bw from last sub - lda r19, -1(r19) C decr loop cnt - bis r8, cy0, cy0 C combine bw from the two subs - lda r16, 8(r16) - bne r19, $Loop0 -$Lend0: subq u1, v1, r2 C main sub - subq r2, cy0, r5 C borrow sub - cmpult u1, v1, r8 C compute bw from last sub - cmpult r2, cy0, cy0 C compute bw from last sub - stq r5, 0(r16) - bis r8, cy0, r0 C combine bw from the two subs - ret r31,(r26),1 - - ALIGN(8) -$Lret: lda r0, 0(cy0) C copy borrow into return register - ret r31,(r26),1 - -$fix5f: bis r23, cy0, r23 C bring forward borrow - br r31, $ret5f -$fix6f: bis r22, r23, r22 C bring forward borrow - br r31, $ret6f -$fix0: bis cy1, r23, cy1 C bring forward borrow - br r31, $ret0 -$fix1: bis cy0, cy1, cy0 C bring forward borrow - br r31, $ret1 -$fix2: bis r22, cy0, r22 C bring forward borrow - br r31, $ret2 -$fix3: bis r23, r22, r23 C bring forward borrow - br r31, $ret3 -$fix4: bis cy1, r23, cy1 C bring forward borrow - br r31, $ret4 -$fix5: bis cy1, cy0, cy0 C bring forward borrow - br r31, $ret5 -$fix6: bis r22, cy0, r22 C bring forward borrow - br r31, $ret6 -$fix7: bis r23, r22, r23 C bring forward borrow - br r31, $ret7 -$fix0c: bis cy1, r23, cy1 C bring forward borrow - br r31, $ret0c -$fix1c: bis cy0, cy1, cy0 C bring forward borrow - br r31, $ret1c -$fix7c: bis r23, r22, r23 C bring forward borrow - br r31, $ret7c - -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev67/gcd_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev67/gcd_1.asm deleted file mode 100644 index 55fa7d3673112671a6bdc81faf19da25237affc3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev67/gcd_1.asm +++ /dev/null @@ -1,145 +0,0 @@ -dnl Alpha ev67 mpn_gcd_1 -- Nx1 greatest common divisor. - -dnl Copyright 2003, 2004 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C ev67: 3.4 cycles/bitpair for 1x1 part - - -C mp_limb_t mpn_gcd_1 (mp_srcptr xp, mp_size_t xsize, mp_limb_t y); -C -C In the 1x1 part, the algorithm is to change x,y to abs(x-y),min(x,y) and -C strip trailing zeros from abs(x-y) to maintain x and y both odd. -C -C The trailing zeros are calculated from just x-y, since in twos-complement -C there's the same number of trailing zeros on d or -d. This means the cttz -C runs in parallel with abs(x-y). -C -C The loop takes 5 cycles, and at 0.68 iterations per bit for two N-bit -C operands with this algorithm gives the measured 3.4 c/l. -C -C The slottings shown are for SVR4 style systems, Unicos differs in the -C initial gp setup and the LEA. -C -C Enhancement: -C -C On the jsr, !lituse_jsr! (when available) would allow the linker to relax -C it to a bsr, but probably only in a static binary. Plain "jsr foo" gives -C the right object code for relaxation, and ought to be available -C everywhere, but we prefer to schedule the GOT ldq (LEA) back earlier, for -C the usual case of running in a shared library. -C -C bsr could perhaps be used explicitly anyway. We should be able to assume -C modexact is in the same module as us (ie. shared library or mainline). -C Would there be any worries about the size of the displacement? Could -C always put modexact and gcd_1 in the same .o to be certain. - -ASM_START() -PROLOGUE(mpn_gcd_1, gp) - - C r16 xp - C r17 size - C r18 y - - C ldah C l - C lda C u - - ldq r0, 0(r16) C L x = xp[0] - lda r30, -32(r30) C u alloc stack - - LEA( r27, mpn_modexact_1c_odd) C L modexact addr, ldq (gp) - stq r10, 16(r30) C L save r10 - cttz r18, r10 C U0 y twos - cmpeq r17, 1, r5 C u test size==1 - - stq r9, 8(r30) C L save r9 - clr r19 C u zero c for modexact - unop - unop - - cttz r0, r6 C U0 x twos - stq r26, 0(r30) C L save ra - - srl r18, r10, r18 C U y odd - - mov r18, r9 C l hold y across call - - cmpult r6, r10, r2 C u test x_twos < y_twos - - cmovne r2, r6, r10 C l common_twos = min(x_twos,y_twos) - bne r5, L(one) C U no modexact if size==1 - jsr r26, (r27), mpn_modexact_1c_odd C L0 - - LDGP( r29, 0(r26)) C u,l ldah,lda - cttz r0, r6 C U0 new x twos - ldq r26, 0(r30) C L restore ra - -L(one): - mov r9, r1 C u y - ldq r9, 8(r30) C L restore r9 - mov r10, r2 C u common twos - ldq r10, 16(r30) C L restore r10 - - lda r30, 32(r30) C l free stack - beq r0, L(done) C U return y if x%y==0 - - srl r0, r6, r0 C U x odd - unop - - ALIGN(16) -L(top): - C r0 x - C r1 y - C r2 common twos, for use at end - - subq r0, r1, r7 C l0 d = x - y - cmpult r0, r1, r16 C u0 test x >= y - - subq r1, r0, r4 C l0 new_x = y - x - cttz r7, r8 C U0 d twos - - cmoveq r16, r7, r4 C l0 new_x = d if x>=y - cmovne r16, r0, r1 C u0 y = x if x<y - unop C l \ force cmoveq into l0 - unop C u / - - C C cmoveq2 L0, cmovne2 U0 - - srl r4, r8, r0 C U0 x = new_x >> twos - bne r7, L(top) C U1 stop when d==0 - - -L(done): - sll r1, r2, r0 C U0 return y << common_twos - ret r31, (r26), 1 C L0 - -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev67/hamdist.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev67/hamdist.asm deleted file mode 100644 index 4b13e9f14f94c047f949f367be3f3cf062edcc94..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev67/hamdist.asm +++ /dev/null @@ -1,111 +0,0 @@ -dnl Alpha ev67 mpn_hamdist -- mpn hamming distance. - -dnl Copyright 2003, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C ev67: 2.5 cycles/limb - - -C unsigned long mpn_hamdist (mp_srcptr xp, mp_srcptr yp, mp_size_t size); -C -C The hope was for 2.0 c/l here, but that isn't achieved. We're limited by -C renaming register shortage. Since we need 5 instructions per limb, further -C unrolling could approach 1.5 c/l. -C -C The main loop processes two limbs from each operand on each iteration. An -C odd size is handled by processing xp[0]^yp[0] at the start. If the size -C is even that result is discarded, and is repeated by the main loop. -C - -ASM_START() -PROLOGUE(mpn_hamdist) - - C r16 xp - C r17 yp - C r18 size - - ldq r1, 0(r16) C L0 xp[0] - ldq r2, 0(r17) C L1 yp[0] - and r18, 1, r8 C U1 1 if size odd - srl r18, 1, r18 C U0 size, limb pairs - - clr r0 C L0 initial total - s8addq r8, r17, r17 C U1 yp++ if size odd - s8addq r8, r16, r16 C L1 xp++ if size odd - clr r6 C U0 dummy initial xor 1 - - xor r1, r2, r5 C L initial xor 0 - beq r18, L(one) C U if size==1 - - cmoveq r8, r31, r5 C L discard first limb if size even - unop C U - - - ALIGN(16) -L(top): - C r0 total accumulating - C r7 xor 0 - C r8 xor 1 - C r16 xp, incrementing - C r17 yp, incrementing - C r18 size, limb pairs, decrementing - - ldq r1, 0(r16) C L - ldq r2, 0(r17) C L - ctpop r5, r7 C U0 - lda r16, 16(r16) C U - - ldq r3, -8(r16) C L - ldq r4, 8(r17) C L - ctpop r6, r8 C U0 - lda r17, 16(r17) C U - - ldl r31, 256(r16) C L prefetch - ldl r31, 256(r17) C L prefetch - xor r1, r2, r5 C U - lda r18, -1(r18) C U - - xor r3, r4, r6 C U - addq r0, r7, r0 C L - addq r0, r8, r0 C L - bne r18, L(top) C U - - - ctpop r6, r8 C U0 - addq r0, r8, r0 C L -L(one): - ctpop r5, r7 C U0 - addq r0, r7, r0 C L - - ret r31, (r26), 1 C L0 - -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev67/popcount.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev67/popcount.asm deleted file mode 100644 index 049c1cd2393896a55d2c30990e72461f8a8efc27..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/ev67/popcount.asm +++ /dev/null @@ -1,101 +0,0 @@ -dnl Alpha ev67 mpn_popcount -- mpn bit population count. - -dnl Copyright 2003, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C ev67: 1.5 cycles/limb - - -C unsigned long mpn_popcount (mp_srcptr src, mp_size_t size); -C -C This schedule seems necessary for the full 1.5 c/l, the IQ can't quite hide -C all latencies, the addq's must be deferred to the next iteration. -C -C Since we need just 3 instructions per limb, further unrolling could approach -C 1.0 c/l. -C -C The main loop processes two limbs at a time. An odd size is handled by -C processing src[0] at the start. If the size is even that result is -C discarded, and src[0] is repeated by the main loop. -C - -ASM_START() -PROLOGUE(mpn_popcount) - - C r16 src - C r17 size - - ldq r0, 0(r16) C L0 src[0] - and r17, 1, r8 C U1 1 if size odd - srl r17, 1, r17 C U0 size, limb pairs - - s8addq r8, r16, r16 C L1 src++ if size odd - ctpop r0, r0 C U0 - beq r17, L(one) C U1 if size==1 - - cmoveq r8, r31, r0 C L discard first limb if size even - clr r3 C L - - clr r4 C L - unop C U - unop C L - unop C U - - - ALIGN(16) -L(top): - C r0 total accumulating - C r3 pop 0 - C r4 pop 1 - C r16 src, incrementing - C r17 size, decrementing - - ldq r1, 0(r16) C L - ldq r2, 8(r16) C L - lda r16, 16(r16) C U - lda r17, -1(r17) C U - - addq r0, r3, r0 C L - addq r0, r4, r0 C L - ctpop r1, r3 C U0 - ctpop r2, r4 C U0 - - ldl r31, 512(r16) C L prefetch - bne r17, L(top) C U - - - addq r0, r3, r0 C L - addq r0, r4, r0 C U -L(one): - ret r31, (r26), 1 C L0 - -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/gmp-mparam.h deleted file mode 100644 index b850bd24b5f6ed2eeb1d16243eb09dff84ebfe3a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/gmp-mparam.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Alpha EV4 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2002, 2004, 2005, 2009 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - - -/* 175MHz 21064 */ - -/* Generated by tuneup.c, 2009-01-15, gcc 3.2 */ - -#define MUL_TOOM22_THRESHOLD 12 -#define MUL_TOOM33_THRESHOLD 69 -#define MUL_TOOM44_THRESHOLD 88 - -#define SQR_BASECASE_THRESHOLD 4 -#define SQR_TOOM2_THRESHOLD 20 -#define SQR_TOOM3_THRESHOLD 62 -#define SQR_TOOM4_THRESHOLD 155 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 40 -#define MULLO_MUL_N_THRESHOLD 202 - -#define DIV_SB_PREINV_THRESHOLD 0 /* preinv always */ -#define DIV_DC_THRESHOLD 38 -#define POWM_THRESHOLD 60 - -#define MATRIX22_STRASSEN_THRESHOLD 17 -#define HGCD_THRESHOLD 80 -#define GCD_DC_THRESHOLD 237 -#define GCDEXT_DC_THRESHOLD 198 -#define JACOBI_BASE_METHOD 2 - -#define DIVREM_1_NORM_THRESHOLD 0 /* preinv always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1_THRESHOLD 2 -#define MOD_1_2_THRESHOLD 9 -#define MOD_1_4_THRESHOLD 20 -#define USE_PREINV_DIVREM_1 1 /* preinv always */ -#define USE_PREINV_MOD_1 1 /* preinv always */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define MODEXACT_1_ODD_THRESHOLD 0 /* always */ - -#define GET_STR_DC_THRESHOLD 20 -#define GET_STR_PRECOMPUTE_THRESHOLD 37 -#define SET_STR_DC_THRESHOLD 746 -#define SET_STR_PRECOMPUTE_THRESHOLD 1332 - -#define MUL_FFT_TABLE { 240, 480, 1344, 2304, 5120, 20480, 49152, 0 } -#define MUL_FFT_MODF_THRESHOLD 232 -#define MUL_FFT_THRESHOLD 1664 - -#define SQR_FFT_TABLE { 240, 480, 1216, 2304, 5120, 12288, 49152, 0 } -#define SQR_FFT_MODF_THRESHOLD 232 -#define SQR_FFT_THRESHOLD 1408 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/invert_limb.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/invert_limb.asm deleted file mode 100644 index afc010f58c57a0edbb781697a1ac2a961955c274..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/invert_limb.asm +++ /dev/null @@ -1,95 +0,0 @@ -dnl Alpha mpn_invert_limb -- Invert a normalized limb. - -dnl Copyright 1996, 2000-2003, 2007, 2011, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: ? -C EV5: 137/140 (with BWX/without BWX) -C EV6: 71/72 (with BWX/without BWX) - -C This was compiler generated, with minimal manual edits. Surely several -C cycles could be cut with some thought. - -ASM_START() -PROLOGUE(mpn_invert_limb,gp) - LEA( r2, approx_tab) - srl r16, 54, r1 - srl r16, 24, r4 - and r16, 1, r5 - bic r1, 1, r7 - lda r4, 1(r4) - srl r16, 1, r3 - addq r7, r2, r1 -ifelse(bwx_available_p,1,` - ldwu r0, -512(r1) -',` - ldq_u r0, -512(r1) - extwl r0, r7, r0 -') - addq r3, r5, r3 - mull r0, r0, r1 - sll r0, 11, r0 - mulq r1, r4, r1 - srl r1, 40, r1 - subq r0, r1, r0 - lda r0, -1(r0) - mulq r0, r0, r2 - sll r0, 60, r1 - sll r0, 13, r0 - mulq r2, r4, r2 - subq r1, r2, r1 - srl r1, 47, r1 - addq r0, r1, r0 - mulq r0, r3, r3 - srl r0, 1, r1 - cmoveq r5, 0, r1 - subq r1, r3, r1 - umulh r1, r0, r3 - sll r0, 31, r0 - srl r3, 1, r1 - addq r0, r1, r0 - mulq r0, r16, r2 - umulh r0, r16, r3 - addq r2, r16, r1 - addq r3, r16, r16 - cmpult r1, r2, r1 - addq r16, r1, r3 - subq r0, r3, r0 - ret r31, (r26), 1 -EPILOGUE() -DATASTART(approx_tab,8) -forloop(i,256,512-1,dnl -` .word eval(0x7fd00/i) -')dnl - SIZE(approx_tab, 512) - TYPE(approx_tab, object) -DATAEND() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/lshift.asm deleted file mode 100644 index c62a856aea3335bd8d67de9fc3f27dbc2a4cd994..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/lshift.asm +++ /dev/null @@ -1,182 +0,0 @@ -dnl Alpha mpn_lshift -- Shift a number left. - -dnl Copyright 1994, 1995, 2000, 2003, 2009 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: ? -C EV5: 3.25 -C EV6: 1.75 - -C INPUT PARAMETERS -C rp r16 -C up r17 -C n r18 -C cnt r19 - - -ASM_START() -PROLOGUE(mpn_lshift) - s8addq r18,r17,r17 C make r17 point at end of s1 - ldq r4,-8(r17) C load first limb - subq r31,r19,r20 - s8addq r18,r16,r16 C make r16 point at end of RES - subq r18,1,r18 - and r18,4-1,r28 C number of limbs in first loop - srl r4,r20,r0 C compute function result - - beq r28,L(L0) - subq r18,r28,r18 - - ALIGN(8) -L(top0): - ldq r3,-16(r17) - subq r16,8,r16 - sll r4,r19,r5 - subq r17,8,r17 - subq r28,1,r28 - srl r3,r20,r6 - bis r3,r3,r4 - bis r5,r6,r8 - stq r8,0(r16) - bne r28,L(top0) - -L(L0): sll r4,r19,r24 - beq r18,L(end) -C warm up phase 1 - ldq r1,-16(r17) - subq r18,4,r18 - ldq r2,-24(r17) - ldq r3,-32(r17) - ldq r4,-40(r17) -C warm up phase 2 - srl r1,r20,r7 - sll r1,r19,r21 - srl r2,r20,r8 - beq r18,L(end1) - ldq r1,-48(r17) - sll r2,r19,r22 - ldq r2,-56(r17) - srl r3,r20,r5 - bis r7,r24,r7 - sll r3,r19,r23 - bis r8,r21,r8 - srl r4,r20,r6 - ldq r3,-64(r17) - sll r4,r19,r24 - ldq r4,-72(r17) - subq r18,4,r18 - beq r18,L(end2) - ALIGN(16) -C main loop -L(top): stq r7,-8(r16) - bis r5,r22,r5 - stq r8,-16(r16) - bis r6,r23,r6 - - srl r1,r20,r7 - subq r18,4,r18 - sll r1,r19,r21 - unop C ldq r31,-96(r17) - - srl r2,r20,r8 - ldq r1,-80(r17) - sll r2,r19,r22 - ldq r2,-88(r17) - - stq r5,-24(r16) - bis r7,r24,r7 - stq r6,-32(r16) - bis r8,r21,r8 - - srl r3,r20,r5 - unop C ldq r31,-96(r17) - sll r3,r19,r23 - subq r16,32,r16 - - srl r4,r20,r6 - ldq r3,-96(r17) - sll r4,r19,r24 - ldq r4,-104(r17) - - subq r17,32,r17 - bne r18,L(top) -C cool down phase 2/1 -L(end2): - stq r7,-8(r16) - bis r5,r22,r5 - stq r8,-16(r16) - bis r6,r23,r6 - srl r1,r20,r7 - sll r1,r19,r21 - srl r2,r20,r8 - sll r2,r19,r22 - stq r5,-24(r16) - bis r7,r24,r7 - stq r6,-32(r16) - bis r8,r21,r8 - srl r3,r20,r5 - sll r3,r19,r23 - srl r4,r20,r6 - sll r4,r19,r24 -C cool down phase 2/2 - stq r7,-40(r16) - bis r5,r22,r5 - stq r8,-48(r16) - bis r6,r23,r6 - stq r5,-56(r16) - stq r6,-64(r16) -C cool down phase 2/3 - stq r24,-72(r16) - ret r31,(r26),1 - -C cool down phase 1/1 -L(end1): - sll r2,r19,r22 - srl r3,r20,r5 - bis r7,r24,r7 - sll r3,r19,r23 - bis r8,r21,r8 - srl r4,r20,r6 - sll r4,r19,r24 -C cool down phase 1/2 - stq r7,-8(r16) - bis r5,r22,r5 - stq r8,-16(r16) - bis r6,r23,r6 - stq r5,-24(r16) - stq r6,-32(r16) - stq r24,-40(r16) - ret r31,(r26),1 - -L(end): stq r24,-8(r16) - ret r31,(r26),1 -EPILOGUE(mpn_lshift) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/mod_34lsub1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/mod_34lsub1.asm deleted file mode 100644 index 1b03b637d8d5b035a96203cd9e50d8c3ca24f878..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/mod_34lsub1.asm +++ /dev/null @@ -1,164 +0,0 @@ -dnl Alpha mpn_mod_34lsub1. - -dnl Copyright 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: 4 (?) -C EV5: 2.67 -C EV6: 1.67 - - -dnl INPUT PARAMETERS -dnl up r16 -dnl n r17 - -define(`l0',`r18') -define(`l1',`r19') -define(`l2',`r20') -define(`a0',`r21') -define(`a1',`r22') -define(`a2',`r23') -define(`c0',`r24') -define(`c1',`r5') -define(`c2',`r6') - -ASM_START() -PROLOGUE(mpn_mod_34lsub1) - bis r31, r31, c0 - bis r31, r31, c1 - bis r31, r31, c2 - - lda r17, -3(r17) - bge r17, $L_3_or_more - bis r31, r31, a0 - bis r31, r31, a1 - bis r31, r31, a2 - br r31, $L_012 - -$L_3_or_more: - ldq a0, 0(r16) - ldq a1, 8(r16) - ldq a2, 16(r16) - lda r16, 24(r16) - lda r17, -3(r17) - blt r17, $L_012 - -$L_6_or_more: - ldq l0, 0(r16) - ldq l1, 8(r16) - ldq l2, 16(r16) - addq l0, a0, a0 - - lda r16, 24(r16) - lda r17, -3(r17) - blt r17, $L_end - - ALIGN(16) -C Main loop -$L_9_or_more: -$Loop: cmpult a0, l0, r0 - ldq l0, 0(r16) - addq r0, c0, c0 - addq l1, a1, a1 - cmpult a1, l1, r0 - ldq l1, 8(r16) - addq r0, c1, c1 - addq l2, a2, a2 - cmpult a2, l2, r0 - ldq l2, 16(r16) - addq r0, c2, c2 - addq l0, a0, a0 - lda r16, 24(r16) - lda r17, -3(r17) - bge r17, $Loop - -$L_end: cmpult a0, l0, r0 - addq r0, c0, c0 - addq l1, a1, a1 - cmpult a1, l1, r0 - addq r0, c1, c1 - addq l2, a2, a2 - cmpult a2, l2, r0 - addq r0, c2, c2 - -C Handle the last (n mod 3) limbs -$L_012: lda r17, 2(r17) - blt r17, $L_0 - ldq l0, 0(r16) - addq l0, a0, a0 - cmpult a0, l0, r0 - addq r0, c0, c0 - beq r17, $L_0 - ldq l1, 8(r16) - addq l1, a1, a1 - cmpult a1, l1, r0 - addq r0, c1, c1 - -C Align and sum our 3 main accumulators and 3 carry accumulators -$L_0: srl a0, 48, r2 - srl a1, 32, r4 -ifdef(`HAVE_LIMB_LITTLE_ENDIAN', -` insll a1, 2, r1', C (a1 & 0xffffffff) << 16 -` zapnot a1, 15, r25 - sll r25, 16, r1') - zapnot a0, 63, r0 C a0 & 0xffffffffffff - srl a2, 16, a1 -ifdef(`HAVE_LIMB_LITTLE_ENDIAN', -` inswl a2, 4, r3', C (a2 & 0xffff) << 32 -` zapnot a2, 3, r25 - sll r25, 32, r3') - addq r1, r4, r1 - addq r0, r2, r0 - srl c0, 32, a2 -ifdef(`HAVE_LIMB_LITTLE_ENDIAN', -` insll c0, 2, r4', C (c0 & 0xffffffff) << 16 -` zapnot c0, 15, r25 - sll r25, 16, r4') - addq r0, r1, r0 - addq r3, a1, r3 - addq r0, r3, r0 - srl c1, 16, c0 -ifdef(`HAVE_LIMB_LITTLE_ENDIAN', -` inswl c1, 4, r2', C (c1 & 0xffff) << 32 -` zapnot c1, 3, r25 - sll r25, 32, r2') - addq r4, a2, r4 -C srl c2, 48, r3 C This will be 0 in practise - zapnot c2, 63, r1 C r1 = c2 & 0xffffffffffff - addq r0, r4, r0 - addq r2, c0, r2 - addq r0, r2, r0 -C addq r1, r3, r1 - addq r0, r1, r0 - - ret r31, (r26), 1 -EPILOGUE(mpn_mod_34lsub1) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/mode1o.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/mode1o.asm deleted file mode 100644 index 96dccc73ee0587e870b0eaf214834dc4b39da77a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/mode1o.asm +++ /dev/null @@ -1,209 +0,0 @@ -dnl Alpha mpn_modexact_1c_odd -- mpn exact remainder - -dnl Copyright 2003, 2004 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C EV4: 47 -C EV5: 30 -C EV6: 15 - - -C mp_limb_t mpn_modexact_1c_odd (mp_srcptr src, mp_size_t size, mp_limb_t d, -C mp_limb_t c) -C -C This code follows the "alternate" code in mpn/generic/mode1o.c, -C eliminating cbit+climb from the dependent chain. This leaves, -C -C ev4 ev5 ev6 -C 1 3 1 subq y = x - h -C 23 13 7 mulq q = y * inverse -C 23 14 7 umulh h = high (q * d) -C -- -- -- -C 47 30 15 -C -C In each case, the load latency, loop control, and extra carry bit handling -C hide under the multiply latencies. Those latencies are long enough that -C we don't need to worry about alignment or pairing to squeeze out -C performance. -C -C For the first limb, some of the loop code is broken out and scheduled back -C since it can be done earlier. -C -C - The first ldq src[0] is near the start of the routine, for maximum -C time from memory. -C -C - The subq y=x-climb can be done without waiting for the inverse. -C -C - The mulq y*inverse is replicated after the final subq for the inverse, -C instead of branching to the mulq in the main loop. On ev4 a branch -C there would cost cycles, but we can hide them under the mulq latency. -C -C For the last limb, high<divisor is tested and if that's true a subtract -C and addback is done, as per the main mpn/generic/mode1o.c code. This is a -C data-dependent branch, but we're waiting for umulh so any penalty should -C hide there. The multiplies saved would be worth the cost anyway. -C -C Enhancements: -C -C For size==1, a plain division (done bitwise say) might be faster than -C calculating an inverse, the latter taking about 130 cycles on ev4 or 70 on -C ev5. A call to gcc __remqu might be a possibility. - -ASM_START() -PROLOGUE(mpn_modexact_1c_odd,gp) - - C r16 src - C r17 size - C r18 d - C r19 c - - LEA(r0, binvert_limb_table) - srl r18, 1, r20 C d >> 1 - - and r20, 127, r20 C idx = d>>1 & 0x7F - - addq r0, r20, r21 C table + idx - -ifelse(bwx_available_p,1, -` ldbu r20, 0(r21) C table[idx], inverse 8 bits -',` - ldq_u r20, 0(r21) C table[idx] qword - extbl r20, r21, r20 C table[idx], inverse 8 bits -') - - mull r20, r20, r7 C i*i - addq r20, r20, r20 C 2*i - - ldq r2, 0(r16) C x = s = src[0] - lda r17, -1(r17) C size-- - clr r0 C initial cbit=0 - - mull r7, r18, r7 C i*i*d - - subq r20, r7, r20 C 2*i-i*i*d, inverse 16 bits - - mull r20, r20, r7 C i*i - addq r20, r20, r20 C 2*i - - mull r7, r18, r7 C i*i*d - - subq r20, r7, r20 C 2*i-i*i*d, inverse 32 bits - - mulq r20, r20, r7 C i*i - addq r20, r20, r20 C 2*i - - mulq r7, r18, r7 C i*i*d - subq r2, r19, r3 C y = x - climb - - subq r20, r7, r20 C inv = 2*i-i*i*d, inverse 64 bits - -ASSERT(r7, C should have d*inv==1 mod 2^64 -` mulq r18, r20, r7 - cmpeq r7, 1, r7') - - mulq r3, r20, r4 C first q = y * inv - - beq r17, L(one) C if size==1 - br L(entry) - - -L(top): - C r0 cbit - C r16 src, incrementing - C r17 size, decrementing - C r18 d - C r19 climb - C r20 inv - - ldq r1, 0(r16) C s = src[i] - subq r1, r0, r2 C x = s - cbit - cmpult r1, r0, r0 C new cbit = s < cbit - - subq r2, r19, r3 C y = x - climb - - mulq r3, r20, r4 C q = y * inv -L(entry): - cmpult r2, r19, r5 C cbit2 = x < climb - addq r5, r0, r0 C cbit += cbit2 - lda r16, 8(r16) C src++ - lda r17, -1(r17) C size-- - - umulh r4, r18, r19 C climb = q * d - bne r17, L(top) C while 2 or more limbs left - - - - C r0 cbit - C r18 d - C r19 climb - C r20 inv - - ldq r1, 0(r16) C s = src[size-1] high limb - - cmpult r1, r18, r2 C test high<divisor - bne r2, L(skip) C skip if so - - C can't skip a division, repeat loop code - - subq r1, r0, r2 C x = s - cbit - cmpult r1, r0, r0 C new cbit = s < cbit - - subq r2, r19, r3 C y = x - climb - - mulq r3, r20, r4 C q = y * inv -L(one): - cmpult r2, r19, r5 C cbit2 = x < climb - addq r5, r0, r0 C cbit += cbit2 - - umulh r4, r18, r19 C climb = q * d - - addq r19, r0, r0 C return climb + cbit - ret r31, (r26), 1 - - - ALIGN(8) -L(skip): - C with high<divisor, the final step can be just (cbit+climb)-s and - C an addback of d if that underflows - - addq r19, r0, r19 C c = climb + cbit - - subq r19, r1, r2 C c - s - cmpult r19, r1, r3 C c < s - - addq r2, r18, r0 C return c-s + divisor - - cmoveq r3, r2, r0 C return c-s if no underflow - ret r31, (r26), 1 - -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/mul_1.asm deleted file mode 100644 index a7cdbcf8ebc1a8404b13976ea68a5d0c9577176f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/mul_1.asm +++ /dev/null @@ -1,102 +0,0 @@ -dnl Alpha mpn_mul_1 -- Multiply a limb vector with a limb and store -dnl the result in a second limb vector. - -dnl Copyright 1992, 1994, 1995, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: 42 -C EV5: 18 -C EV6: 7 - -C INPUT PARAMETERS -C rp r16 -C up r17 -C n r18 -C vl r19 -C cl r20 - - -ASM_START() -PROLOGUE(mpn_mul_1c) - ldq r2,0(r17) C r2 = s1_limb - lda r18,-1(r18) C size-- - mulq r2,r19,r3 C r3 = prod_low - umulh r2,r19,r4 C r4 = prod_high - beq r18,$Le1c C jump if size was == 1 - ldq r2,8(r17) C r2 = s1_limb - lda r18,-1(r18) C size-- - addq r3,r20,r3 C r3 = cy_limb + cl - stq r3,0(r16) - cmpult r3,r20,r0 C r0 = carry from (cy_limb + cl) - bne r18,$Loop C jump if size was == 2 - br r31,$Le2 -$Le1c: addq r3,r20,r3 C r3 = cy_limb + cl - cmpult r3,r20,r0 C r0 = carry from (cy_limb + cl) -$Le1: stq r3,0(r16) - addq r4,r0,r0 - ret r31,(r26),1 -EPILOGUE(mpn_mul_1c) - -PROLOGUE(mpn_mul_1) - ldq r2,0(r17) C r2 = s1_limb - lda r18,-1(r18) C size-- - mulq r2,r19,r3 C r3 = prod_low - bic r31,r31,r0 C clear cy_limb - umulh r2,r19,r4 C r4 = prod_high - beq r18,$Le1 C jump if size was == 1 - ldq r2,8(r17) C r2 = s1_limb - lda r18,-1(r18) C size-- - stq r3,0(r16) - beq r18,$Le2 C jump if size was == 2 - - ALIGN(8) -$Loop: mulq r2,r19,r3 C r3 = prod_low - addq r4,r0,r0 C cy_limb = cy_limb + 'cy' - lda r18,-1(r18) C size-- - umulh r2,r19,r4 C r4 = prod_high - ldq r2,16(r17) C r2 = s1_limb - lda r17,8(r17) C s1_ptr++ - addq r3,r0,r3 C r3 = cy_limb + prod_low - stq r3,8(r16) - cmpult r3,r0,r0 C r0 = carry from (cy_limb + prod_low) - lda r16,8(r16) C res_ptr++ - bne r18,$Loop - -$Le2: mulq r2,r19,r3 C r3 = prod_low - addq r4,r0,r0 C cy_limb = cy_limb + 'cy' - umulh r2,r19,r4 C r4 = prod_high - addq r3,r0,r3 C r3 = cy_limb + prod_low - cmpult r3,r0,r0 C r0 = carry from (cy_limb + prod_low) - stq r3,8(r16) - addq r4,r0,r0 C cy_limb = prod_high + cy - ret r31,(r26),1 -EPILOGUE(mpn_mul_1) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/rshift.asm deleted file mode 100644 index 6e1e21455894351ae2722ec9b59da68dc7f08f4b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/rshift.asm +++ /dev/null @@ -1,180 +0,0 @@ -dnl Alpha mpn_rshift -- Shift a number right. - -dnl Copyright 1994, 1995, 2000, 2009 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: ? -C EV5: 3.25 -C EV6: 1.75 - -C INPUT PARAMETERS -C rp r16 -C up r17 -C n r18 -C cnt r19 - - -ASM_START() -PROLOGUE(mpn_rshift) - ldq r4,0(r17) C load first limb - subq r31,r19,r20 - subq r18,1,r18 - and r18,4-1,r28 C number of limbs in first loop - sll r4,r20,r0 C compute function result - - beq r28,L(L0) - subq r18,r28,r18 - - ALIGN(8) -L(top0): - ldq r3,8(r17) - addq r16,8,r16 - srl r4,r19,r5 - addq r17,8,r17 - subq r28,1,r28 - sll r3,r20,r6 - bis r3,r3,r4 - bis r5,r6,r8 - stq r8,-8(r16) - bne r28,L(top0) - -L(L0): srl r4,r19,r24 - beq r18,L(end) -C warm up phase 1 - ldq r1,8(r17) - subq r18,4,r18 - ldq r2,16(r17) - ldq r3,24(r17) - ldq r4,32(r17) -C warm up phase 2 - sll r1,r20,r7 - srl r1,r19,r21 - sll r2,r20,r8 - beq r18,L(end1) - ldq r1,40(r17) - srl r2,r19,r22 - ldq r2,48(r17) - sll r3,r20,r5 - bis r7,r24,r7 - srl r3,r19,r23 - bis r8,r21,r8 - sll r4,r20,r6 - ldq r3,56(r17) - srl r4,r19,r24 - ldq r4,64(r17) - subq r18,4,r18 - beq r18,L(end2) - ALIGN(16) -C main loop -L(top): stq r7,0(r16) - bis r5,r22,r5 - stq r8,8(r16) - bis r6,r23,r6 - - sll r1,r20,r7 - subq r18,4,r18 - srl r1,r19,r21 - unop C ldq r31,-96(r17) - - sll r2,r20,r8 - ldq r1,72(r17) - srl r2,r19,r22 - ldq r2,80(r17) - - stq r5,16(r16) - bis r7,r24,r7 - stq r6,24(r16) - bis r8,r21,r8 - - sll r3,r20,r5 - unop C ldq r31,-96(r17) - srl r3,r19,r23 - addq r16,32,r16 - - sll r4,r20,r6 - ldq r3,88(r17) - srl r4,r19,r24 - ldq r4,96(r17) - - addq r17,32,r17 - bne r18,L(top) -C cool down phase 2/1 -L(end2): - stq r7,0(r16) - bis r5,r22,r5 - stq r8,8(r16) - bis r6,r23,r6 - sll r1,r20,r7 - srl r1,r19,r21 - sll r2,r20,r8 - srl r2,r19,r22 - stq r5,16(r16) - bis r7,r24,r7 - stq r6,24(r16) - bis r8,r21,r8 - sll r3,r20,r5 - srl r3,r19,r23 - sll r4,r20,r6 - srl r4,r19,r24 -C cool down phase 2/2 - stq r7,32(r16) - bis r5,r22,r5 - stq r8,40(r16) - bis r6,r23,r6 - stq r5,48(r16) - stq r6,56(r16) -C cool down phase 2/3 - stq r24,64(r16) - ret r31,(r26),1 - -C cool down phase 1/1 -L(end1): - srl r2,r19,r22 - sll r3,r20,r5 - bis r7,r24,r7 - srl r3,r19,r23 - bis r8,r21,r8 - sll r4,r20,r6 - srl r4,r19,r24 -C cool down phase 1/2 - stq r7,0(r16) - bis r5,r22,r5 - stq r8,8(r16) - bis r6,r23,r6 - stq r5,16(r16) - stq r6,24(r16) - stq r24,32(r16) - ret r31,(r26),1 - -L(end): stq r24,0(r16) - ret r31,(r26),1 -EPILOGUE(mpn_rshift) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/sec_tabselect.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/sec_tabselect.asm deleted file mode 100644 index 679b16926ed6226adfd5f88cfcf33f543b7c6bc2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/sec_tabselect.asm +++ /dev/null @@ -1,137 +0,0 @@ -dnl Alpha mpn_sec_tabselect. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2011-2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: ? -C EV5: 2.25 -C EV6: 1.64 - -define(`rp', `r16') -define(`tp', `r17') -define(`n', `r18') -define(`nents', `r19') -define(`which', `r20') - -define(`i', `r21') -define(`j', `r22') -define(`stride', `r23') -define(`mask', `r24') -define(`k', `r25') - - -ASM_START() -PROLOGUE(mpn_sec_tabselect) - subq n, 4, j C outer loop induction variable - - blt j, L(outer_end) -L(outer_top): - mov tp, r8 - lda r0, 0(r31) - lda r1, 0(r31) - lda r2, 0(r31) - lda r3, 0(r31) - subq j, 4, j C outer loop induction variable - subq nents, which, k - mov nents, i - - ALIGN(16) -L(top): ldq r4, 0(tp) - ldq r5, 8(tp) - cmpeq k, i, mask - subq i, 1, i - subq r31, mask, mask - ldq r6, 16(tp) - ldq r7, 24(tp) - and r4, mask, r4 - and r5, mask, r5 - or r0, r4, r0 - or r1, r5, r1 - and r6, mask, r6 - and r7, mask, r7 - or r2, r6, r2 - or r3, r7, r3 - s8addq n, tp, tp - bne i, L(top) - - stq r0, 0(rp) - stq r1, 8(rp) - stq r2, 16(rp) - stq r3, 24(rp) - addq r8, 32, tp - addq rp, 32, rp - bge j, L(outer_top) -L(outer_end): - - and n, 2, r0 - beq r0, L(b0x) -L(b1x): mov tp, r8 - lda r0, 0(r31) - lda r1, 0(r31) - subq nents, which, k - mov nents, i - ALIGN(16) -L(tp2): ldq r4, 0(tp) - ldq r5, 8(tp) - cmpeq k, i, mask - subq i, 1, i - subq r31, mask, mask - and r4, mask, r4 - and r5, mask, r5 - or r0, r4, r0 - or r1, r5, r1 - s8addq n, tp, tp - bne i, L(tp2) - stq r0, 0(rp) - stq r1, 8(rp) - addq r8, 16, tp - addq rp, 16, rp - -L(b0x): and n, 1, r0 - beq r0, L(b00) -L(b01): lda r0, 0(r31) - subq nents, which, k - mov nents, i - ALIGN(16) -L(tp1): ldq r4, 0(tp) - cmpeq k, i, mask - subq i, 1, i - subq r31, mask, mask - and r4, mask, r4 - or r0, r4, r0 - s8addq n, tp, tp - bne i, L(tp1) - stq r0, 0(rp) - -L(b00): ret r31, (r26), 1 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/sqr_diag_addlsh1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/sqr_diag_addlsh1.asm deleted file mode 100644 index ee219ef7e8e14e845f71bb945acdfc0f00e26654..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/sqr_diag_addlsh1.asm +++ /dev/null @@ -1,93 +0,0 @@ -dnl Alpha mpn_sqr_diag_addlsh1. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: ? -C EV5: 10.2 -C EV6: 4.5 - -C Ideally, one-way code could run at 9 c/l (limited by mulq+umulh) on ev5 and -C about 3.75 c/l on ev6. Two-way code could run at about 3.25 c/l on ev6. - -C Algorithm: We allow ourselves to propagate carry to a product high word -C without worrying for carry out, since (B-1)^2 = B^2-2B+1 has a high word of -C B-2, i.e, will not spill. We propagate carry similarly to a product low word -C since the problem value B-1 is a quadratic non-residue mod B, but our -C products are squares. - -define(`rp', `r16') -define(`tp', `r17') -define(`up', `r18') -define(`n', `r19') - -ASM_START() -PROLOGUE(mpn_sqr_diag_addlsh1) - ldq r0, 0(up) - bis r31, r31, r21 - bis r31, r31, r3 - mulq r0, r0, r7 - stq r7, 0(rp) - umulh r0, r0, r6 - lda n, -1(n) - - ALIGN(16) -L(top): ldq r0, 8(up) - lda up, 8(up) - ldq r8, 0(tp) - ldq r20, 8(tp) - mulq r0, r0, r7 - lda tp, 16(tp) - sll r8, 1, r23 - srl r8, 63, r22 - or r21, r23, r23 - sll r20, 1, r24 - addq r3, r6, r6 C cannot carry per comment above - or r22, r24, r24 - addq r23, r6, r21 - umulh r0, r0, r6 - cmpult r21, r23, r1 - addq r1, r7, r7 C cannot carry per comment above - stq r21, 8(rp) - addq r24, r7, r22 - stq r22, 16(rp) - lda n, -1(n) - cmpult r22, r7, r3 - srl r20, 63, r21 - lda rp, 16(rp) - bne n, L(top) - - addq r3, r6, r6 C cannot carry per comment above - addq r21, r6, r21 - stq r21, 8(rp) - ret r31, (r26), 1 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/sub_n.asm deleted file mode 100644 index 1bb72263f855c04310ba1dbac70aa4c9270dfd7c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/sub_n.asm +++ /dev/null @@ -1,164 +0,0 @@ -dnl Alpha mpn_sub_n -- Subtract two limb vectors of the same length > 0 -dnl and store difference in a third limb vector. - -dnl Copyright 1995, 1999, 2000, 2005, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: ? -C EV5: 4.75 -C EV6: 3 - -dnl INPUT PARAMETERS -dnl res_ptr r16 -dnl s1_ptr r17 -dnl s2_ptr r18 -dnl size r19 - -ASM_START() -PROLOGUE(mpn_sub_nc) - bis r31,r20,r25 - br L(com) -EPILOGUE() -PROLOGUE(mpn_sub_n) - bis r31,r31,r25 C clear cy -L(com): subq r19,4,r19 C decr loop cnt - blt r19,$Lend2 C if less than 4 limbs, goto 2nd loop -C Start software pipeline for 1st loop - ldq r0,0(r18) - ldq r4,0(r17) - ldq r1,8(r18) - ldq r5,8(r17) - addq r17,32,r17 C update s1_ptr - subq r4,r0,r28 C 1st main subtract - ldq r2,16(r18) - subq r28,r25,r20 C 1st carry subtract - ldq r3,24(r18) - cmpult r4,r0,r8 C compute cy from last subtract - ldq r6,-16(r17) - cmpult r28,r25,r25 C compute cy from last subtract - ldq r7,-8(r17) - bis r8,r25,r25 C combine cy from the two subtracts - subq r19,4,r19 C decr loop cnt - subq r5,r1,r28 C 2nd main subtract - addq r18,32,r18 C update s2_ptr - subq r28,r25,r21 C 2nd carry subtract - cmpult r5,r1,r8 C compute cy from last subtract - blt r19,$Lend1 C if less than 4 limbs remain, jump -C 1st loop handles groups of 4 limbs in a software pipeline - ALIGN(16) -$Loop: cmpult r28,r25,r25 C compute cy from last subtract - ldq r0,0(r18) - bis r8,r25,r25 C combine cy from the two subtracts - ldq r1,8(r18) - subq r6,r2,r28 C 3rd main subtract - ldq r4,0(r17) - subq r28,r25,r22 C 3rd carry subtract - ldq r5,8(r17) - cmpult r6,r2,r8 C compute cy from last subtract - cmpult r28,r25,r25 C compute cy from last subtract - stq r20,0(r16) - bis r8,r25,r25 C combine cy from the two subtracts - stq r21,8(r16) - subq r7,r3,r28 C 4th main subtract - subq r28,r25,r23 C 4th carry subtract - cmpult r7,r3,r8 C compute cy from last subtract - cmpult r28,r25,r25 C compute cy from last subtract - addq r17,32,r17 C update s1_ptr - bis r8,r25,r25 C combine cy from the two subtracts - addq r16,32,r16 C update res_ptr - subq r4,r0,r28 C 1st main subtract - ldq r2,16(r18) - subq r28,r25,r20 C 1st carry subtract - ldq r3,24(r18) - cmpult r4,r0,r8 C compute cy from last subtract - ldq r6,-16(r17) - cmpult r28,r25,r25 C compute cy from last subtract - ldq r7,-8(r17) - bis r8,r25,r25 C combine cy from the two subtracts - subq r19,4,r19 C decr loop cnt - stq r22,-16(r16) - subq r5,r1,r28 C 2nd main subtract - stq r23,-8(r16) - subq r28,r25,r21 C 2nd carry subtract - addq r18,32,r18 C update s2_ptr - cmpult r5,r1,r8 C compute cy from last subtract - bge r19,$Loop -C Finish software pipeline for 1st loop -$Lend1: cmpult r28,r25,r25 C compute cy from last subtract - bis r8,r25,r25 C combine cy from the two subtracts - subq r6,r2,r28 C cy add - subq r28,r25,r22 C 3rd main subtract - cmpult r6,r2,r8 C compute cy from last subtract - cmpult r28,r25,r25 C compute cy from last subtract - stq r20,0(r16) - bis r8,r25,r25 C combine cy from the two subtracts - stq r21,8(r16) - subq r7,r3,r28 C cy add - subq r28,r25,r23 C 4th main subtract - cmpult r7,r3,r8 C compute cy from last subtract - cmpult r28,r25,r25 C compute cy from last subtract - bis r8,r25,r25 C combine cy from the two subtracts - addq r16,32,r16 C update res_ptr - stq r22,-16(r16) - stq r23,-8(r16) -$Lend2: addq r19,4,r19 C restore loop cnt - beq r19,$Lret -C Start software pipeline for 2nd loop - ldq r0,0(r18) - ldq r4,0(r17) - subq r19,1,r19 - beq r19,$Lend0 -C 2nd loop handles remaining 1-3 limbs - ALIGN(16) -$Loop0: subq r4,r0,r28 C main subtract - cmpult r4,r0,r8 C compute cy from last subtract - ldq r0,8(r18) - ldq r4,8(r17) - subq r28,r25,r20 C carry subtract - addq r18,8,r18 - addq r17,8,r17 - stq r20,0(r16) - cmpult r28,r25,r25 C compute cy from last subtract - subq r19,1,r19 C decr loop cnt - bis r8,r25,r25 C combine cy from the two subtracts - addq r16,8,r16 - bne r19,$Loop0 -$Lend0: subq r4,r0,r28 C main subtract - subq r28,r25,r20 C carry subtract - cmpult r4,r0,r8 C compute cy from last subtract - cmpult r28,r25,r25 C compute cy from last subtract - stq r20,0(r16) - bis r8,r25,r25 C combine cy from the two subtracts - -$Lret: bis r25,r31,r0 C return cy - ret r31,(r26),1 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/submul_1.asm deleted file mode 100644 index 2b63b52fa40dedb27d499f8b90c55f7b67496bc2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/submul_1.asm +++ /dev/null @@ -1,99 +0,0 @@ -dnl Alpha mpn_submul_1 -- Multiply a limb vector with a limb and subtract -dnl the result from a second limb vector. - -dnl Copyright 1992, 1994, 1995, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C EV4: 42 -C EV5: 18 -C EV6: 7 - -C INPUT PARAMETERS -C rp r16 -C up r17 -C n r18 -C limb r19 - - -ASM_START() -PROLOGUE(mpn_submul_1) - ldq r2,0(r17) C r2 = s1_limb - addq r17,8,r17 C s1_ptr++ - subq r18,1,r18 C size-- - mulq r2,r19,r3 C r3 = prod_low - ldq r5,0(r16) C r5 = *res_ptr - umulh r2,r19,r0 C r0 = prod_high - beq r18,$Lend1 C jump if size was == 1 - ldq r2,0(r17) C r2 = s1_limb - addq r17,8,r17 C s1_ptr++ - subq r18,1,r18 C size-- - subq r5,r3,r3 - cmpult r5,r3,r4 - stq r3,0(r16) - addq r16,8,r16 C res_ptr++ - beq r18,$Lend2 C jump if size was == 2 - - ALIGN(8) -$Loop: mulq r2,r19,r3 C r3 = prod_low - ldq r5,0(r16) C r5 = *res_ptr - addq r4,r0,r0 C cy_limb = cy_limb + 'cy' - subq r18,1,r18 C size-- - umulh r2,r19,r4 C r4 = cy_limb - ldq r2,0(r17) C r2 = s1_limb - addq r17,8,r17 C s1_ptr++ - addq r3,r0,r3 C r3 = cy_limb + prod_low - cmpult r3,r0,r0 C r0 = carry from (cy_limb + prod_low) - subq r5,r3,r3 - cmpult r5,r3,r5 - stq r3,0(r16) - addq r16,8,r16 C res_ptr++ - addq r5,r0,r0 C combine carries - bne r18,$Loop - -$Lend2: mulq r2,r19,r3 C r3 = prod_low - ldq r5,0(r16) C r5 = *res_ptr - addq r4,r0,r0 C cy_limb = cy_limb + 'cy' - umulh r2,r19,r4 C r4 = cy_limb - addq r3,r0,r3 C r3 = cy_limb + prod_low - cmpult r3,r0,r0 C r0 = carry from (cy_limb + prod_low) - subq r5,r3,r3 - cmpult r5,r3,r5 - stq r3,0(r16) - addq r5,r0,r0 C combine carries - addq r4,r0,r0 C cy_limb = prod_high + cy - ret r31,(r26),1 -$Lend1: subq r5,r3,r3 - cmpult r5,r3,r5 - stq r3,0(r16) - addq r0,r5,r0 - ret r31,(r26),1 -EPILOGUE(mpn_submul_1) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/umul.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/umul.asm deleted file mode 100644 index 039081ed482d55e0db2229bcc8d92f31a4f1a732..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/umul.asm +++ /dev/null @@ -1,44 +0,0 @@ -dnl mpn_umul_ppmm -- 1x1->2 limb multiplication - -dnl Copyright 1999, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C mp_limb_t mpn_umul_ppmm (mp_limb_t *lowptr, mp_limb_t m1, mp_limb_t m2); -C - -ASM_START() -PROLOGUE(mpn_umul_ppmm) - mulq r17, r18, r1 - umulh r17, r18, r0 - stq r1, 0(r16) - ret r31, (r26), 1 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/unicos.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/unicos.m4 deleted file mode 100644 index e05cf5cca6669e2dc7cdce3c1762c4032a35fbdc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/alpha/unicos.m4 +++ /dev/null @@ -1,131 +0,0 @@ -divert(-1) - -dnl m4 macros for alpha assembler on unicos. - - -dnl Copyright 2000, 2002-2004, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl Note that none of the standard GMP_ASM_ autoconf tests are done for -dnl unicos, so none of the config.m4 results can be used here. - -dnl No underscores on unicos -define(`GSYM_PREFIX') - -define(`ASM_START', -m4_assert_numargs(0) -` .ident dummy') - -define(`X', -m4_assert_numargs(1) -`^X$1') - -define(`FLOAT64', -m4_assert_numargs(2) -` .psect $1@crud,data -$1: .t_floating $2 - .endp') - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo[,gp|noalign]) -dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) - -define(`PROLOGUE_cpu', -m4_assert_numargs_range(1,2) -`ifelse(`$2',gp,, -`ifelse(`$2',noalign,, -`ifelse(`$2',,,`m4_error(`Unrecognised PROLOGUE parameter -')')')')dnl - .stack 192 ; What does this mean? Only Cray knows. - .psect $1@code,code,cache -$1::') - -define(`EPILOGUE_cpu', -m4_assert_numargs(1) -` .endp') - - -dnl Usage: LDGP(dst,src) -dnl -dnl Emit an "ldgp dst,src", but only on systems using a GOT (which unicos -dnl doesn't). - -define(LDGP, -m4_assert_numargs(2) -) - - -dnl Usage: EXTERN(variable_name) -define(`EXTERN', -m4_assert_numargs(1) -` .extern $1') - -define(`DATASTART', -m4_assert_numargs_range(1,2) -` .psect $1@crud,data - ALIGN(ifelse($#,1,2,$2)) -$1:') - -define(`DATAEND', -m4_assert_numargs(0) -` .endp') - -define(`ASM_END', -m4_assert_numargs(0) -` .end') - -define(`cvttqc', -m4_assert_numargs(-1) -`cvttq/c') - -dnl Load a symbolic address into a register -define(`LEA', -m4_assert_numargs(2) - `laum $1, $2(r31) - sll $1, 32, $1 - lalm $1, $2($1) - lal $1, $2($1)') - - -dnl Usage: ALIGN(bytes) -dnl -dnl Unicos assembler .align emits zeros, even in code segments, so disable -dnl aligning. -dnl -dnl GCC uses a macro emiting nops until the desired alignment is reached -dnl (see unicosmk_file_start in alpha.c). Could do something like that if -dnl we cared. The maximum desired alignment must be established at the -dnl start of the section though, since of course emitting nops only -dnl advances relative to the section beginning. - -define(`ALIGN', -m4_assert_numargs(1) -) - - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/README b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/README deleted file mode 100644 index 53c7214c636fae636df277a169d6e7798b202c09..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/README +++ /dev/null @@ -1,35 +0,0 @@ -Copyright 2002, 2012, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - -This directory contains mpn functions for ARM processors. It has been -optimised mainly for Cortex-A9 and Cortex-A15, but the code in the top-level -directory should run on all ARM processors at architecture level v4 or later. diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/aors_n.asm deleted file mode 100644 index fdad9f7ba68b556d5d68d75e633b49c42f9e3cd9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/aors_n.asm +++ /dev/null @@ -1,112 +0,0 @@ -dnl ARM mpn_add_n and mpn_sub_n - -dnl Contributed to the GNU project by Robert Harley. - -dnl Copyright 1997, 2000, 2001, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 2.5 slightly fluctuating -C Cortex-A15 2.25 - -define(`rp', `r0') -define(`up', `r1') -define(`vp', `r2') -define(`n', `r3') - -ifdef(`OPERATION_add_n', ` - define(`ADDSUB', adds) - define(`ADDSUBC', adcs) - define(`CLRCY', `cmn r0, #0') - define(`SETCY', `cmp $1, #1') - define(`RETVAL', `adc r0, n, #0') - define(`func', mpn_add_n) - define(`func_nc', mpn_add_nc)') -ifdef(`OPERATION_sub_n', ` - define(`ADDSUB', subs) - define(`ADDSUBC', sbcs) - define(`CLRCY', `cmp r0, r0') - define(`SETCY', `rsbs $1, $1, #0') - define(`RETVAL', `sbc r0, r0, r0 - and r0, r0, #1') - define(`func', mpn_sub_n) - define(`func_nc', mpn_sub_nc)') - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc) - -ASM_START() -PROLOGUE(func_nc) - ldr r12, [sp, #0] - stmfd sp!, { r8, r9, lr } - SETCY( r12) - b L(ent) -EPILOGUE() -PROLOGUE(func) - stmfd sp!, { r8, r9, lr } - CLRCY( r12) -L(ent): tst n, #1 - beq L(skip1) - ldr r12, [up], #4 - ldr lr, [vp], #4 - ADDSUBC r12, r12, lr - str r12, [rp], #4 -L(skip1): - tst n, #2 - beq L(skip2) - ldmia up!, { r8, r9 } - ldmia vp!, { r12, lr } - ADDSUBC r8, r8, r12 - ADDSUBC r9, r9, lr - stmia rp!, { r8, r9 } -L(skip2): - bics n, n, #3 - beq L(rtn) - stmfd sp!, { r4, r5, r6, r7 } - -L(top): ldmia up!, { r4, r5, r6, r7 } - ldmia vp!, { r8, r9, r12, lr } - ADDSUBC r4, r4, r8 - sub n, n, #4 - ADDSUBC r5, r5, r9 - ADDSUBC r6, r6, r12 - ADDSUBC r7, r7, lr - stmia rp!, { r4, r5, r6, r7 } - teq n, #0 - bne L(top) - - ldmfd sp!, { r4, r5, r6, r7 } - -L(rtn): RETVAL - ldmfd sp!, { r8, r9, pc } -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/aorslsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/aorslsh1_n.asm deleted file mode 100644 index 1cbd4ba1af4667f8fdf03f78c85776c3961f1622..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/aorslsh1_n.asm +++ /dev/null @@ -1,167 +0,0 @@ -dnl ARM mpn_addlsh1_n and mpn_sublsh1_n - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C addlsh1_n sublsh1_n -C cycles/limb cycles/limb -C StrongARM ? ? -C XScale ? ? -C Cortex-A7 ? ? -C Cortex-A8 ? ? -C Cortex-A9 3.12 3.7 -C Cortex-A15 ? ? - -C TODO -C * The addlsh1_n code runs well, but is only barely faster than mpn_addmul_1. -C The sublsh1_n code could surely be tweaked, its REVCY slows down things -C very much. If two insns are really needed, it might help to separate them -C for better micro-parallelism. - -define(`rp', `r0') -define(`up', `r1') -define(`vp', `r2') -define(`n', `r3') - -ifdef(`OPERATION_addlsh1_n', ` - define(`ADDSUB', adds) - define(`ADDSUBC', adcs) - define(`SETCY', `cmp $1, #1') - define(`RETVAL', `adc r0, $1, #2') - define(`SAVECY', `sbc $1, $2, #0') - define(`RESTCY', `cmn $1, #1') - define(`REVCY', `') - define(`INICYR', `mov $1, #0') - define(`r10r11', `r11') - define(`func', mpn_addlsh1_n) - define(`func_nc', mpn_addlsh1_nc)') -ifdef(`OPERATION_sublsh1_n', ` - define(`ADDSUB', subs) - define(`ADDSUBC', sbcs) - define(`SETCY', `rsbs $1, $1, #0') - define(`RETVAL', `adc r0, $1, #1') - define(`SAVECY', `sbc $1, $1, $1') - define(`RESTCY', `cmn $1, #1') - define(`REVCY', `sbc $1, $1, $1 - cmn $1, #1') - define(`INICYR', `mvn $1, #0') - define(`r10r11', `r10') - define(`func', mpn_sublsh1_n) - define(`func_nc', mpn_sublsh1_nc)') - -MULFUNC_PROLOGUE(mpn_addlsh1_n mpn_sublsh1_n) - -ASM_START() -PROLOGUE(func) - push {r4-r10r11, r14} - -ifdef(`OPERATION_addlsh1_n', ` - mvn r11, #0 -') - INICYR( r14) - subs n, n, #3 - blt L(le2) C carry clear on branch path - - cmn r0, #0 C clear carry - ldmia vp!, {r8, r9, r10} - b L(mid) - -L(top): RESTCY( r14) - ADDSUBC r4, r4, r8 - ADDSUBC r5, r5, r9 - ADDSUBC r6, r6, r10 - ldmia vp!, {r8, r9, r10} - stmia rp!, {r4, r5, r6} - REVCY(r14) - adcs r8, r8, r8 - adcs r9, r9, r9 - adcs r10, r10, r10 - ldmia up!, {r4, r5, r6} - SAVECY( r14, r11) - subs n, n, #3 - blt L(exi) - RESTCY( r12) - ADDSUBC r4, r4, r8 - ADDSUBC r5, r5, r9 - ADDSUBC r6, r6, r10 - ldmia vp!, {r8, r9, r10} - stmia rp!, {r4, r5, r6} - REVCY(r12) -L(mid): adcs r8, r8, r8 - adcs r9, r9, r9 - adcs r10, r10, r10 - ldmia up!, {r4, r5, r6} - SAVECY( r12, r11) - subs n, n, #3 - bge L(top) - - mov r7, r12 C swap alternating... - mov r12, r14 C ...carry-save... - mov r14, r7 C ...registers - -L(exi): RESTCY( r12) - ADDSUBC r4, r4, r8 - ADDSUBC r5, r5, r9 - ADDSUBC r6, r6, r10 - stmia rp!, {r4, r5, r6} - - REVCY(r12) -L(le2): tst n, #1 C n = {-1,-2,-3} map to [2], [1], [0] - beq L(e1) - -L(e02): tst n, #2 - beq L(rt0) - ldm vp, {r8, r9} - adcs r8, r8, r8 - adcs r9, r9, r9 - ldm up, {r4, r5} - SAVECY( r12, r11) - RESTCY( r14) - ADDSUBC r4, r4, r8 - ADDSUBC r5, r5, r9 - stm rp, {r4, r5} - b L(rt1) - -L(e1): ldr r8, [vp] - adcs r8, r8, r8 - ldr r4, [up] - SAVECY( r12, r11) - RESTCY( r14) - ADDSUBC r4, r4, r8 - str r4, [rp] - -L(rt1): mov r14, r12 - REVCY(r12) -L(rt0): RETVAL( r14) - pop {r4-r10r11, r14} - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/aorsmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/aorsmul_1.asm deleted file mode 100644 index b02fbb3b2a0b938e5a335c251ec5d41581dc636b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/aorsmul_1.asm +++ /dev/null @@ -1,135 +0,0 @@ -dnl ARM mpn_addmul_1 and mpn_submul_1. - -dnl Copyright 1998, 2000, 2001, 2003, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM: ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 5.25 -C Cortex-A15 4 - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') -define(`vl', `r3') -define(`rl', `r12') -define(`ul', `r6') -define(`r', `lr') - -ifdef(`OPERATION_addmul_1', ` - define(`ADDSUB', adds) - define(`ADDSUBC', adcs) - define(`CLRRCY', `mov $1, #0 - adds r0, r0, #0') - define(`RETVAL', `adc r0, r4, #0') - define(`func', mpn_addmul_1)') -ifdef(`OPERATION_submul_1', ` - define(`ADDSUB', subs) - define(`ADDSUBC', sbcs) - define(`CLRRCY', `subs $1, r0, r0') - define(`RETVAL', `sbc r0, r0, r0 - sub r0, $1, r0') - define(`func', mpn_submul_1)') - -MULFUNC_PROLOGUE(mpn_addmul_1 mpn_submul_1) - -ASM_START() -PROLOGUE(func) - stmfd sp!, { r4-r6, lr } - CLRRCY( r4) - tst n, #1 - beq L(skip1) - ldr ul, [up], #4 - ldr rl, [rp, #0] - umull r5, r4, ul, vl - ADDSUB r, rl, r5 - str r, [rp], #4 -L(skip1): - tst n, #2 - beq L(skip2) - ldr ul, [up], #4 - ldr rl, [rp, #0] - mov r5, #0 - umlal r4, r5, ul, vl - ldr ul, [up], #4 - ADDSUBC r, rl, r4 - ldr rl, [rp, #4] - mov r4, #0 - umlal r5, r4, ul, vl - str r, [rp], #4 - ADDSUBC r, rl, r5 - str r, [rp], #4 -L(skip2): - bics n, n, #3 - beq L(rtn) - - ldr ul, [up], #4 - ldr rl, [rp, #0] - mov r5, #0 - umlal r4, r5, ul, vl - b L(in) - -L(top): ldr ul, [up], #4 - ADDSUBC r, rl, r5 - ldr rl, [rp, #4] - mov r5, #0 - umlal r4, r5, ul, vl - str r, [rp], #4 -L(in): ldr ul, [up], #4 - ADDSUBC r, rl, r4 - ldr rl, [rp, #4] - mov r4, #0 - umlal r5, r4, ul, vl - str r, [rp], #4 - ldr ul, [up], #4 - ADDSUBC r, rl, r5 - ldr rl, [rp, #4] - mov r5, #0 - umlal r4, r5, ul, vl - str r, [rp], #4 - ldr ul, [up], #4 - ADDSUBC r, rl, r4 - ldr rl, [rp, #4] - mov r4, #0 - umlal r5, r4, ul, vl - sub n, n, #4 - tst n, n - str r, [rp], #4 - bne L(top) - - ADDSUBC r, rl, r5 - str r, [rp] - -L(rtn): RETVAL( r4) - ldmfd sp!, { r4-r6, pc } -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/arm-defs.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/arm-defs.m4 deleted file mode 100644 index 6ca964a2459a7c459bed0a2347616285df77ea92..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/arm-defs.m4 +++ /dev/null @@ -1,91 +0,0 @@ -divert(-1) - -dnl m4 macros for ARM assembler. - -dnl Copyright 2001, 2012, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl Standard commenting is with @, the default m4 # is for constants and we -dnl don't want to disable macro expansions in or after them. - -changecom(@&*$) - - -dnl APCS register names. - -deflit(a1,r0) -deflit(a2,r1) -deflit(a3,r2) -deflit(a4,r3) -deflit(v1,r4) -deflit(v2,r5) -deflit(v3,r6) -deflit(v4,r7) -deflit(v5,r8) -deflit(v6,r9) -deflit(sb,r9) -deflit(v7,r10) -deflit(sl,r10) -deflit(fp,r11) -deflit(ip,r12) -deflit(sp,r13) -deflit(lr,r14) -deflit(pc,r15) - - -define(`lea_list', `') -define(`lea_num',0) - -dnl LEA(reg,gmp_symbol) -dnl -dnl Load the address of gmp_symbol into a register. The gmp_symbol must be -dnl either local or protected/hidden, since we assume it has a fixed distance -dnl from the point of use. - -define(`LEA',`dnl -ldr $1, L(ptr`'lea_num) -ifdef(`PIC',dnl -`dnl -L(bas`'lea_num):dnl - add $1, $1, pc`'dnl - m4append(`lea_list',` -L(ptr'lea_num`): .word GSYM_PREFIX`'$2-L(bas'lea_num`)-8') - define(`lea_num', eval(lea_num+1))dnl -',`dnl - m4append(`lea_list',` -L(ptr'lea_num`): .word GSYM_PREFIX`'$2') - define(`lea_num', eval(lea_num+1))dnl -')dnl -') - -define(`EPILOGUE_cpu', -`lea_list - SIZE(`$1',.-`$1')') - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/bdiv_dbm1c.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/bdiv_dbm1c.asm deleted file mode 100644 index ec3de50e8e2170d61cade58f2071af66f37d5e05..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/bdiv_dbm1c.asm +++ /dev/null @@ -1,113 +0,0 @@ -dnl ARM mpn_bdiv_dbm1c. - -dnl Copyright 2008, 2011, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 4.25 -C Cortex-A15 2.5 - -C TODO -C * Try using umlal or umaal. -C * Try using ldm/stm. - -define(`qp', `r0') -define(`up', `r1') -define(`n', `r2') -define(`bd', `r3') -define(`cy', `sp,#0') - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(mpn_bdiv_dbm1c) - push {r4, r5, r6, r7, r8} - ldr r4, [up], #4 - ldr r5, [sp, #20] - ands r12, n, #3 - beq L(fi0) - cmp r12, #2 - bcc L(fi1) - beq L(fi2) - -L(fi3): umull r8, r12, r4, bd - ldr r4, [up], #4 - b L(lo3) - -L(fi0): umull r6, r7, r4, bd - ldr r4, [up], #4 - b L(lo0) - -L(fi1): subs n, n, #1 - umull r8, r12, r4, bd - bls L(wd1) - ldr r4, [up], #4 - b L(lo1) - -L(fi2): umull r6, r7, r4, bd - ldr r4, [up], #4 - b L(lo2) - -L(top): ldr r4, [up], #4 - subs r5, r5, r6 - str r5, [qp], #4 - sbc r5, r5, r7 -L(lo1): umull r6, r7, r4, bd - ldr r4, [up], #4 - subs r5, r5, r8 - str r5, [qp], #4 - sbc r5, r5, r12 -L(lo0): umull r8, r12, r4, bd - ldr r4, [up], #4 - subs r5, r5, r6 - str r5, [qp], #4 - sbc r5, r5, r7 -L(lo3): umull r6, r7, r4, bd - ldr r4, [up], #4 - subs r5, r5, r8 - str r5, [qp], #4 - sbc r5, r5, r12 -L(lo2): subs n, n, #4 - umull r8, r12, r4, bd - bhi L(top) - -L(wd2): subs r5, r5, r6 - str r5, [qp], #4 - sbc r5, r5, r7 -L(wd1): subs r5, r5, r8 - str r5, [qp] - sbc r0, r5, r12 - pop {r4, r5, r6, r7, r8} - bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/cnd_aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/cnd_aors_n.asm deleted file mode 100644 index e8eb60983aff4ecc1a1effe4c1dc49916a237ece..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/cnd_aors_n.asm +++ /dev/null @@ -1,134 +0,0 @@ -dnl ARM mpn_cnd_add_n, mpn_cnd_sub_n - -dnl Copyright 2012, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 3 -C Cortex-A15 2.5 - -define(`cnd', `r0') -define(`rp', `r1') -define(`up', `r2') -define(`vp', `r3') - -define(`n', `r12') - - -ifdef(`OPERATION_cnd_add_n', ` - define(`ADDSUB', adds) - define(`ADDSUBC', adcs) - define(`INITCY', `cmn r0, #0') - define(`RETVAL', `adc r0, n, #0') - define(func, mpn_cnd_add_n)') -ifdef(`OPERATION_cnd_sub_n', ` - define(`ADDSUB', subs) - define(`ADDSUBC', sbcs) - define(`INITCY', `cmp r0, #0') - define(`RETVAL', `adc r0, n, #0 - rsb r0, r0, #1') - define(func, mpn_cnd_sub_n)') - -MULFUNC_PROLOGUE(mpn_cnd_add_n mpn_cnd_sub_n) - -ASM_START() -PROLOGUE(func) - push {r4-r11} - ldr n, [sp, #32] - - cmp cnd, #1 - sbc cnd, cnd, cnd C conditionally set to 0xffffffff - - INITCY C really only needed for n = 0 (mod 4) - - ands r4, n, #3 - beq L(top) - cmp r4, #2 - bcc L(b1) - beq L(b2) - -L(b3): ldm vp!, {r4,r5,r6} - ldm up!, {r8,r9,r10} - bic r4, r4, cnd - bic r5, r5, cnd - bic r6, r6, cnd - ADDSUB r8, r8, r4 - ADDSUBC r9, r9, r5 - ADDSUBC r10, r10, r6 - stm rp!, {r8,r9,r10} - sub n, n, #3 - teq n, #0 - bne L(top) - b L(end) - -L(b2): ldm vp!, {r4,r5} - ldm up!, {r8,r9} - bic r4, r4, cnd - bic r5, r5, cnd - ADDSUB r8, r8, r4 - ADDSUBC r9, r9, r5 - stm rp!, {r8,r9} - sub n, n, #2 - teq n, #0 - bne L(top) - b L(end) - -L(b1): ldr r4, [vp], #4 - ldr r8, [up], #4 - bic r4, r4, cnd - ADDSUB r8, r8, r4 - str r8, [rp], #4 - sub n, n, #1 - teq n, #0 - beq L(end) - -L(top): ldm vp!, {r4,r5,r6,r7} - ldm up!, {r8,r9,r10,r11} - bic r4, r4, cnd - bic r5, r5, cnd - bic r6, r6, cnd - bic r7, r7, cnd - ADDSUBC r8, r8, r4 - ADDSUBC r9, r9, r5 - ADDSUBC r10, r10, r6 - ADDSUBC r11, r11, r7 - sub n, n, #4 - stm rp!, {r8,r9,r10,r11} - teq n, #0 - bne L(top) - -L(end): RETVAL - pop {r4-r11} - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/com.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/com.asm deleted file mode 100644 index 42f8e3cbbe3d780c3b637e1b5e4f6a3f3e3335bd..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/com.asm +++ /dev/null @@ -1,75 +0,0 @@ -dnl ARM mpn_com. - -dnl Copyright 2003, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 2.0 -C Cortex-A15 1.75 - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') - -ASM_START() -PROLOGUE(mpn_com) - tst n, #1 - beq L(skip1) - ldr r3, [up], #4 - mvn r3, r3 - str r3, [rp], #4 -L(skip1): - tst n, #2 - beq L(skip2) - ldmia up!, { r3, r12 } C load 2 limbs - mvn r3, r3 - mvn r12, r12 - stmia rp!, { r3, r12 } C store 2 limbs -L(skip2): - bics n, n, #3 - beq L(rtn) - stmfd sp!, { r7, r8, r9 } C save regs on stack - -L(top): ldmia up!, { r3, r8, r9, r12 } C load 4 limbs - subs n, n, #4 - mvn r3, r3 - mvn r8, r8 - mvn r9, r9 - mvn r12, r12 - stmia rp!, { r3, r8, r9, r12 } C store 4 limbs - bne L(top) - - ldmfd sp!, { r7, r8, r9 } C restore regs from stack -L(rtn): bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/copyd.asm deleted file mode 100644 index 3ea2035099d43ecf5ab8c56e30efb8fa379d25b2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/copyd.asm +++ /dev/null @@ -1,84 +0,0 @@ -dnl ARM mpn_copyd. - -dnl Contributed to the GNU project by Robert Harley and Torbjörn Granlund. - -dnl Copyright 2003, 2012, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 1.25-1.5 -C Cortex-A15 1.25 - -C TODO -C * Consider wider unrolling. Analogous 8-way code runs 10% faster on both A9 -C and A15. But it probably slows things down for 8 <= n < a few dozen. - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') - -ASM_START() -PROLOGUE(mpn_copyd) - mov r12, n, lsl #2 - sub r12, r12, #4 - add rp, rp, r12 - add up, up, r12 - - tst n, #1 - beq L(skip1) - ldr r3, [up], #-4 - str r3, [rp], #-4 -L(skip1): - tst n, #2 - beq L(skip2) - ldmda up!, { r3,r12 } - stmda rp!, { r3,r12 } -L(skip2): - bics n, n, #3 - beq L(rtn) - - push { r4-r5 } - subs n, n, #4 - ldmda up!, { r3,r4,r5,r12 } - beq L(end) - -L(top): subs n, n, #4 - stmda rp!, { r3,r4,r5,r12 } - ldmda up!, { r3,r4,r5,r12 } - bne L(top) - -L(end): stmda rp, { r3,r4,r5,r12 } - pop { r4-r5 } -L(rtn): bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/copyi.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/copyi.asm deleted file mode 100644 index fa454702c14e9144513fac79c6c83a2637c0be0c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/copyi.asm +++ /dev/null @@ -1,79 +0,0 @@ -dnl ARM mpn_copyi. - -dnl Contributed to the GNU project by Robert Harley and Torbjörn Granlund. - -dnl Copyright 2003, 2012, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 1.25-1.5 -C Cortex-A15 1.25 - -C TODO -C * Consider wider unrolling. Analogous 8-way code runs 10% faster on both A9 -C and A15. But it probably slows things down for 8 <= n < a few dozen. - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') - -ASM_START() -PROLOGUE(mpn_copyi) - tst n, #1 - beq L(skip1) - ldr r3, [up], #4 - str r3, [rp], #4 -L(skip1): - tst n, #2 - beq L(skip2) - ldmia up!, { r3,r12 } - stmia rp!, { r3,r12 } -L(skip2): - bics n, n, #3 - beq L(rtn) - - push { r4-r5 } - subs n, n, #4 - ldmia up!, { r3,r4,r5,r12 } - beq L(end) - -L(top): subs n, n, #4 - stmia rp!, { r3,r4,r5,r12 } - ldmia up!, { r3,r4,r5,r12 } - bne L(top) - -L(end): stm rp, { r3,r4,r5,r12 } - pop { r4-r5 } -L(rtn): bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/dive_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/dive_1.asm deleted file mode 100644 index ccceb3c3cc3d353cbffa3f5dc04da8a2f7ea3784..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/dive_1.asm +++ /dev/null @@ -1,151 +0,0 @@ -dnl ARM v4 mpn_modexact_1c_odd - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb cycles/limb -C norm unorm modexact_1c_odd -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 10 12 -C Cortex-A15 9 9 - -C Architecture requirements: -C v5 - -C v5t - -C v5te - -C v6 - -C v6t2 - -C v7a - - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') -define(`d', `r3') - -define(`cy', `r7') -define(`cnt', `r6') -define(`tnc', `r8') - -ASM_START() -PROLOGUE(mpn_divexact_1) - tst d, #1 - push {r4-r9} - mov cnt, #0 - bne L(inv) - -C count trailing zeros - movs r4, d, lsl #16 - moveq d, d, lsr #16 - moveq cnt, #16 - tst d, #0xff - moveq d, d, lsr #8 - addeq cnt, cnt, #8 - LEA( r4, ctz_tab) - and r5, d, #0xff - ldrb r4, [r4, r5] - mov d, d, lsr r4 - add cnt, cnt, r4 - -C binvert limb -L(inv): LEA( r4, binvert_limb_table) - and r12, d, #254 - ldrb r4, [r4, r12, lsr #1] - mul r12, r4, r4 - mul r12, d, r12 - rsb r12, r12, r4, lsl #1 - mul r4, r12, r12 - mul r4, d, r4 - rsb r4, r4, r12, lsl #1 C r4 = inverse - - tst cnt, cnt - ldr r5, [up], #4 C up[0] - mov cy, #0 - bne L(unnorm) - -L(norm): - subs n, n, #1 C set carry as side-effect - beq L(end) - - ALIGN(16) -L(top): sbcs cy, r5, cy - ldr r5, [up], #4 - sub n, n, #1 - mul r9, r4, cy - tst n, n - umull r12, cy, d, r9 - str r9, [rp], #4 - bne L(top) - -L(end): sbc cy, r5, cy - mul r9, r4, cy - str r9, [rp] - pop {r4-r9} - bx r14 - -L(unnorm): - rsb tnc, cnt, #32 - mov r5, r5, lsr cnt - subs n, n, #1 C set carry as side-effect - beq L(edu) - - ALIGN(16) -L(tpu): ldr r12, [up], #4 - orr r9, r5, r12, lsl tnc - mov r5, r12, lsr cnt - sbcs cy, r9, cy C critical path ->cy->cy-> - sub n, n, #1 - mul r9, r4, cy C critical path ->cy->r9-> - tst n, n - umull r12, cy, d, r9 C critical path ->r9->cy-> - str r9, [rp], #4 - bne L(tpu) - -L(edu): sbc cy, r5, cy - mul r9, r4, cy - str r9, [rp] - pop {r4-r9} - bx r14 -EPILOGUE() - - RODATA -ctz_tab: - .byte 8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 - .byte 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 - .byte 6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 - .byte 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 - .byte 7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 - .byte 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 - .byte 6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 - .byte 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/gmp-mparam.h deleted file mode 100644 index 87eec3a149423e53e43274bdaf26e63968298f50..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/gmp-mparam.h +++ /dev/null @@ -1,127 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2003, 2009, 2010 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 1193MHz ARM (gcc55.fsffrance.org) */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* preinv always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 56 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 11 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 0 /* never mpn_mod_1_1p */ -#define MOD_1_2_TO_MOD_1_4_THRESHOLD MP_SIZE_T_MAX -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 71 -#define USE_PREINV_DIVREM_1 1 /* preinv always */ -#define DIVREM_2_THRESHOLD 0 /* preinv always */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD 41 - -#define MUL_TOOM22_THRESHOLD 36 -#define MUL_TOOM33_THRESHOLD 125 -#define MUL_TOOM44_THRESHOLD 193 -#define MUL_TOOM6H_THRESHOLD 303 -#define MUL_TOOM8H_THRESHOLD 418 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 125 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 176 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 114 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 129 - -#define SQR_BASECASE_THRESHOLD 12 -#define SQR_TOOM2_THRESHOLD 78 -#define SQR_TOOM3_THRESHOLD 137 -#define SQR_TOOM4_THRESHOLD 212 -#define SQR_TOOM6_THRESHOLD 306 -#define SQR_TOOM8_THRESHOLD 422 - -#define MULMOD_BNM1_THRESHOLD 20 -#define SQRMOD_BNM1_THRESHOLD 26 - -#define MUL_FFT_MODF_THRESHOLD 436 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 436, 5}, { 27, 6}, { 28, 7}, { 15, 6}, \ - { 32, 7}, { 17, 6}, { 35, 7}, { 19, 6}, \ - { 39, 7}, { 29, 8}, { 15, 7}, { 35, 8}, \ - { 19, 7}, { 41, 8}, { 23, 7}, { 49, 8}, \ - { 27, 9}, { 15, 8}, { 31, 7}, { 63, 8}, \ - { 256, 9}, { 512,10}, { 1024,11}, { 2048,12}, \ - { 4096,13}, { 8192,14}, { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 28 -#define MUL_FFT_THRESHOLD 5760 - -#define SQR_FFT_MODF_THRESHOLD 404 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 404, 5}, { 13, 4}, { 27, 5}, { 27, 6}, \ - { 28, 7}, { 15, 6}, { 32, 7}, { 17, 6}, \ - { 35, 7}, { 29, 8}, { 15, 7}, { 35, 8}, \ - { 19, 7}, { 41, 8}, { 23, 7}, { 47, 8}, \ - { 27, 9}, { 15, 8}, { 39, 9}, { 512,10}, \ - { 1024,11}, { 2048,12}, { 4096,13}, { 8192,14}, \ - { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 26 -#define SQR_FFT_THRESHOLD 3776 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 137 -#define MULLO_MUL_N_THRESHOLD 11479 - -#define DC_DIV_QR_THRESHOLD 150 -#define DC_DIVAPPR_Q_THRESHOLD 494 -#define DC_BDIV_QR_THRESHOLD 148 -#define DC_BDIV_Q_THRESHOLD 345 - -#define INV_MULMOD_BNM1_THRESHOLD 70 -#define INV_NEWTON_THRESHOLD 474 -#define INV_APPR_THRESHOLD 478 - -#define BINV_NEWTON_THRESHOLD 542 -#define REDC_1_TO_REDC_N_THRESHOLD 117 - -#define MU_DIV_QR_THRESHOLD 2089 -#define MU_DIVAPPR_Q_THRESHOLD 2172 -#define MUPI_DIV_QR_THRESHOLD 225 -#define MU_BDIV_QR_THRESHOLD 1528 -#define MU_BDIV_Q_THRESHOLD 2089 - -#define MATRIX22_STRASSEN_THRESHOLD 16 -#define HGCD_THRESHOLD 197 -#define GCD_DC_THRESHOLD 902 -#define GCDEXT_DC_THRESHOLD 650 -#define JACOBI_BASE_METHOD 2 - -#define GET_STR_DC_THRESHOLD 20 -#define GET_STR_PRECOMPUTE_THRESHOLD 39 -#define SET_STR_DC_THRESHOLD 1045 -#define SET_STR_PRECOMPUTE_THRESHOLD 2147 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/invert_limb.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/invert_limb.asm deleted file mode 100644 index 06ce1467ced78b5a0eef88b2abd20e9499bbaf84..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/invert_limb.asm +++ /dev/null @@ -1,93 +0,0 @@ -dnl ARM mpn_invert_limb -- Invert a normalized limb. - -dnl Copyright 2001, 2009, 2011, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_invert_limb) - LEA( r2, approx_tab-512) - mov r3, r0, lsr #23 - mov r3, r3, asl #1 - ldrh r3, [r3, r2] - mov r1, r3, asl #17 - mul r12, r3, r3 - umull r3, r2, r12, r0 - sub r1, r1, r2, asl #1 - umull r3, r2, r1, r1 - umull r12, r3, r0, r3 - umull r2, r12, r0, r2 - adds r2, r2, r3 - adc r12, r12, #0 - rsb r1, r12, r1 - mvn r2, r2, lsr #30 - add r2, r2, r1, asl #2 - umull r12, r3, r0, r2 - adds r1, r12, r0 - adc r3, r3, r0 - rsb r0, r3, r2 - bx lr -EPILOGUE() - - RODATA - ALIGN(2) -approx_tab: - .short 0xffc0,0xfec0,0xfdc0,0xfcc0,0xfbc0,0xfac0,0xfa00,0xf900 - .short 0xf800,0xf700,0xf640,0xf540,0xf440,0xf380,0xf280,0xf180 - .short 0xf0c0,0xefc0,0xef00,0xee00,0xed40,0xec40,0xeb80,0xeac0 - .short 0xe9c0,0xe900,0xe840,0xe740,0xe680,0xe5c0,0xe500,0xe400 - .short 0xe340,0xe280,0xe1c0,0xe100,0xe040,0xdf80,0xdec0,0xde00 - .short 0xdd40,0xdc80,0xdbc0,0xdb00,0xda40,0xd980,0xd8c0,0xd800 - .short 0xd740,0xd680,0xd600,0xd540,0xd480,0xd3c0,0xd340,0xd280 - .short 0xd1c0,0xd140,0xd080,0xcfc0,0xcf40,0xce80,0xcdc0,0xcd40 - .short 0xcc80,0xcc00,0xcb40,0xcac0,0xca00,0xc980,0xc8c0,0xc840 - .short 0xc780,0xc700,0xc640,0xc5c0,0xc540,0xc480,0xc400,0xc380 - .short 0xc2c0,0xc240,0xc1c0,0xc100,0xc080,0xc000,0xbf80,0xbec0 - .short 0xbe40,0xbdc0,0xbd40,0xbc80,0xbc00,0xbb80,0xbb00,0xba80 - .short 0xba00,0xb980,0xb900,0xb840,0xb7c0,0xb740,0xb6c0,0xb640 - .short 0xb5c0,0xb540,0xb4c0,0xb440,0xb3c0,0xb340,0xb2c0,0xb240 - .short 0xb1c0,0xb140,0xb0c0,0xb080,0xb000,0xaf80,0xaf00,0xae80 - .short 0xae00,0xad80,0xad40,0xacc0,0xac40,0xabc0,0xab40,0xaac0 - .short 0xaa80,0xaa00,0xa980,0xa900,0xa8c0,0xa840,0xa7c0,0xa740 - .short 0xa700,0xa680,0xa600,0xa5c0,0xa540,0xa4c0,0xa480,0xa400 - .short 0xa380,0xa340,0xa2c0,0xa240,0xa200,0xa180,0xa140,0xa0c0 - .short 0xa080,0xa000,0x9f80,0x9f40,0x9ec0,0x9e80,0x9e00,0x9dc0 - .short 0x9d40,0x9d00,0x9c80,0x9c40,0x9bc0,0x9b80,0x9b00,0x9ac0 - .short 0x9a40,0x9a00,0x9980,0x9940,0x98c0,0x9880,0x9840,0x97c0 - .short 0x9780,0x9700,0x96c0,0x9680,0x9600,0x95c0,0x9580,0x9500 - .short 0x94c0,0x9440,0x9400,0x93c0,0x9340,0x9300,0x92c0,0x9240 - .short 0x9200,0x91c0,0x9180,0x9100,0x90c0,0x9080,0x9000,0x8fc0 - .short 0x8f80,0x8f40,0x8ec0,0x8e80,0x8e40,0x8e00,0x8d80,0x8d40 - .short 0x8d00,0x8cc0,0x8c80,0x8c00,0x8bc0,0x8b80,0x8b40,0x8b00 - .short 0x8a80,0x8a40,0x8a00,0x89c0,0x8980,0x8940,0x88c0,0x8880 - .short 0x8840,0x8800,0x87c0,0x8780,0x8740,0x8700,0x8680,0x8640 - .short 0x8600,0x85c0,0x8580,0x8540,0x8500,0x84c0,0x8480,0x8440 - .short 0x8400,0x8380,0x8340,0x8300,0x82c0,0x8280,0x8240,0x8200 - .short 0x81c0,0x8180,0x8140,0x8100,0x80c0,0x8080,0x8040,0x8000 -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/logops_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/logops_n.asm deleted file mode 100644 index 5a61683fc2e9f9253696080292feeb933c651dd2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/logops_n.asm +++ /dev/null @@ -1,139 +0,0 @@ -dnl ARM mpn_and_n, mpn_andn_n. mpn_nand_n, etc. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 1997, 2000, 2001, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb cycles/limb -C and andn ior xor nand iorn nior xnor -C StrongARM ? ? -C XScale ? ? -C Cortex-A7 ? ? -C Cortex-A8 ? ? -C Cortex-A9 2.5-2.72 2.75-3 -C Cortex-A15 2.25 2.75 - -C TODO -C * It seems that 2.25 c/l and 2.75 c/l is possible for A9. -C * Debug popping issue, see comment below. - -define(`rp', `r0') -define(`up', `r1') -define(`vp', `r2') -define(`n', `r3') - -define(`POSTOP') - -ifdef(`OPERATION_and_n',` - define(`func', `mpn_and_n') - define(`LOGOP', `and $1, $2, $3')') -ifdef(`OPERATION_andn_n',` - define(`func', `mpn_andn_n') - define(`LOGOP', `bic $1, $2, $3')') -ifdef(`OPERATION_nand_n',` - define(`func', `mpn_nand_n') - define(`POSTOP', `mvn $1, $1') - define(`LOGOP', `and $1, $2, $3')') -ifdef(`OPERATION_ior_n',` - define(`func', `mpn_ior_n') - define(`LOGOP', `orr $1, $2, $3')') -ifdef(`OPERATION_iorn_n',` - define(`func', `mpn_iorn_n') - define(`POSTOP', `mvn $1, $1') - define(`LOGOP', `bic $1, $3, $2')') -ifdef(`OPERATION_nior_n',` - define(`func', `mpn_nior_n') - define(`POSTOP', `mvn $1, $1') - define(`LOGOP', `orr $1, $2, $3')') -ifdef(`OPERATION_xor_n',` - define(`func', `mpn_xor_n') - define(`LOGOP', `eor $1, $2, $3')') -ifdef(`OPERATION_xnor_n',` - define(`func', `mpn_xnor_n') - define(`POSTOP', `mvn $1, $1') - define(`LOGOP', `eor $1, $2, $3')') - -MULFUNC_PROLOGUE(mpn_and_n mpn_andn_n mpn_nand_n mpn_ior_n mpn_iorn_n mpn_nior_n mpn_xor_n mpn_xnor_n) - -ASM_START() -PROLOGUE(func) - push { r8, r9, r10 } - tst n, #1 - beq L(skip1) - ldr r10, [vp], #4 - ldr r12, [up], #4 - LOGOP( r12, r12, r10) - POSTOP( r12) - str r12, [rp], #4 -L(skip1): - tst n, #2 - beq L(skip2) - ldmia vp!, { r10, r12 } - ldmia up!, { r8, r9 } - LOGOP( r8, r8, r10) - LOGOP( r9, r9, r12) - POSTOP( r8) - POSTOP( r9) - stmia rp!, { r8, r9 } -L(skip2): - bics n, n, #3 - beq L(rtn) - push { r4, r5, r6, r7 } - - ldmia vp!, { r8, r9, r10, r12 } - b L(mid) - -L(top): ldmia vp!, { r8, r9, r10, r12 } - POSTOP( r4) - POSTOP( r5) - POSTOP( r6) - POSTOP( r7) - stmia rp!, { r4, r5, r6, r7 } -L(mid): sub n, n, #4 - ldmia up!, { r4, r5, r6, r7 } - teq n, #0 - LOGOP( r4, r4, r8) - LOGOP( r5, r5, r9) - LOGOP( r6, r6, r10) - LOGOP( r7, r7, r12) - bne L(top) - - POSTOP( r4) - POSTOP( r5) - POSTOP( r6) - POSTOP( r7) - stmia rp!, { r4, r5, r6, r7 } - - pop { r4, r5, r6, r7 } C popping r8-r10 here strangely fails - -L(rtn): pop { r8, r9, r10 } - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/lshift.asm deleted file mode 100644 index 9f777eb4dd8f85706faa66e3f7eb41c39a3e34d0..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/lshift.asm +++ /dev/null @@ -1,88 +0,0 @@ -dnl ARM mpn_lshift. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 3.5 -C Cortex-A15 ? - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') -define(`cnt', `r3') -define(`tnc', `r12') - -ASM_START() -PROLOGUE(mpn_lshift) - add up, up, n, lsl #2 - push {r4, r6, r7, r8} - ldr r4, [up, #-4]! - add rp, rp, n, lsl #2 - rsb tnc, cnt, #32 - - mov r7, r4, lsl cnt - tst n, #1 - beq L(evn) C n even - -L(odd): subs n, n, #2 - bcc L(1) C n = 1 - ldr r8, [up, #-4]! - b L(mid) - -L(evn): ldr r6, [up, #-4]! - subs n, n, #2 - beq L(end) - -L(top): ldr r8, [up, #-4]! - orr r7, r7, r6, lsr tnc - str r7, [rp, #-4]! - mov r7, r6, lsl cnt -L(mid): ldr r6, [up, #-4]! - orr r7, r7, r8, lsr tnc - str r7, [rp, #-4]! - mov r7, r8, lsl cnt - subs n, n, #2 - bgt L(top) - -L(end): orr r7, r7, r6, lsr tnc - str r7, [rp, #-4]! - mov r7, r6, lsl cnt -L(1): str r7, [rp, #-4] - mov r0, r4, lsr tnc - pop {r4, r6, r7, r8} - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/lshiftc.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/lshiftc.asm deleted file mode 100644 index 5f3d6e3f5b7598f813a040d6cea282fdad293e13..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/lshiftc.asm +++ /dev/null @@ -1,95 +0,0 @@ -dnl ARM mpn_lshiftc. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 4.0 -C Cortex-A15 ? - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') -define(`cnt', `r3') -define(`tnc', `r12') - -ASM_START() -PROLOGUE(mpn_lshiftc) - add up, up, n, lsl #2 - push {r4, r6, r7, r8} - ldr r4, [up, #-4]! - add rp, rp, n, lsl #2 - rsb tnc, cnt, #32 - mvn r6, r4 - - mov r7, r6, lsl cnt - tst n, #1 - beq L(evn) C n even - -L(odd): subs n, n, #2 - bcc L(1) C n = 1 - ldr r8, [up, #-4]! - mvn r8, r8 - b L(mid) - -L(evn): ldr r6, [up, #-4]! - mvn r6, r6 - subs n, n, #2 - beq L(end) - -L(top): ldr r8, [up, #-4]! - orr r7, r7, r6, lsr tnc - str r7, [rp, #-4]! - mvn r8, r8 - mov r7, r6, lsl cnt -L(mid): ldr r6, [up, #-4]! - orr r7, r7, r8, lsr tnc - str r7, [rp, #-4]! - mvn r6, r6 - mov r7, r8, lsl cnt - subs n, n, #2 - bgt L(top) - -L(end): orr r7, r7, r6, lsr tnc - str r7, [rp, #-4]! - mov r7, r6, lsl cnt -L(1): mvn r6, #0 - orr r7, r7, r6, lsr tnc - str r7, [rp, #-4] - mov r0, r4, lsr tnc - pop {r4, r6, r7, r8} - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/mod_34lsub1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/mod_34lsub1.asm deleted file mode 100644 index ba3c06d8db1089963628d74e11d1dcb193c3de88..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/mod_34lsub1.asm +++ /dev/null @@ -1,121 +0,0 @@ -dnl ARM mpn_mod_34lsub1 -- remainder modulo 2^24-1. - -dnl Copyright 2012, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 1.33 -C Cortex-A15 1.33 - -define(`ap', r0) -define(`n', r1) - -C mp_limb_t mpn_mod_34lsub1 (mp_srcptr up, mp_size_t n) - -C TODO -C * Write cleverer summation code. -C * Consider loading 6 64-bit aligned registers at a time, to approach 1 c/l. - -ASM_START() - TEXT - ALIGN(32) -PROLOGUE(mpn_mod_34lsub1) - push { r4, r5, r6, r7 } - - subs n, n, #3 - mov r7, #0 - blt L(le2) C n <= 2 - - ldmia ap!, { r2, r3, r12 } - subs n, n, #3 - blt L(sum) C n <= 5 - cmn r0, #0 C clear carry - sub n, n, #3 - b L(mid) - -L(top): adcs r2, r2, r4 - adcs r3, r3, r5 - adcs r12, r12, r6 -L(mid): ldmia ap!, { r4, r5, r6 } - tst n, n - sub n, n, #3 - bpl L(top) - - add n, n, #3 - - adcs r2, r2, r4 - adcs r3, r3, r5 - adcs r12, r12, r6 - movcs r7, #1 C r7 <= 1 - -L(sum): cmn n, #2 - movlo r4, #0 - ldrhs r4, [ap], #4 - movls r5, #0 - ldrhi r5, [ap], #4 - - adds r2, r2, r4 - adcs r3, r3, r5 - adcs r12, r12, #0 - adc r7, r7, #0 C r7 <= 2 - -L(sum2): - bic r0, r2, #0xff000000 - add r0, r0, r2, lsr #24 - add r0, r0, r7 - - mov r7, r3, lsl #8 - bic r1, r7, #0xff000000 - add r0, r0, r1 - add r0, r0, r3, lsr #16 - - mov r7, r12, lsl #16 - bic r1, r7, #0xff000000 - add r0, r0, r1 - add r0, r0, r12, lsr #8 - - pop { r4, r5, r6, r7 } - bx lr - -L(le2): cmn n, #1 - bne L(1) - ldmia ap!, { r2, r3 } - mov r12, #0 - b L(sum2) -L(1): ldr r2, [ap] - bic r0, r2, #0xff000000 - add r0, r0, r2, lsr #24 - pop { r4, r5, r6, r7 } - bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/mode1o.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/mode1o.asm deleted file mode 100644 index 5e0f78fc8f58a2332e47d23af93ef208e931cfc4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/mode1o.asm +++ /dev/null @@ -1,92 +0,0 @@ -dnl ARM mpn_modexact_1c_odd - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 10 -C Cortex-A15 9 - -C Architecture requirements: -C v5 - -C v5t - -C v5te - -C v6 - -C v6t2 - -C v7a - - -define(`up', `r0') -define(`n', `r1') -define(`d', `r2') -define(`cy', `r3') - - .protected binvert_limb_table -ASM_START() -PROLOGUE(mpn_modexact_1c_odd) - stmfd sp!, {r4, r5} - - LEA( r4, binvert_limb_table) - - ldr r5, [up], #4 C up[0] - - and r12, d, #254 - ldrb r4, [r4, r12, lsr #1] - mul r12, r4, r4 - mul r12, d, r12 - rsb r12, r12, r4, asl #1 - mul r4, r12, r12 - mul r4, d, r4 - rsb r4, r4, r12, asl #1 C r4 = inverse - - subs n, n, #1 C set carry as side-effect - beq L(end) - -L(top): sbcs cy, r5, cy - ldr r5, [up], #4 - sub n, n, #1 - mul r12, r4, cy - tst n, n - umull r12, cy, d, r12 - bne L(top) - -L(end): sbcs cy, r5, cy - mul r12, r4, cy - umull r12, r0, d, r12 - addcc r0, r0, #1 - - ldmfd sp!, {r4, r5} - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/mul_1.asm deleted file mode 100644 index f7bc1bc386caf5724d8826821349ddb92feff778..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/mul_1.asm +++ /dev/null @@ -1,94 +0,0 @@ -dnl ARM mpn_mul_1 -- Multiply a limb vector with a limb and store the result -dnl in a second limb vector. -dnl Contributed by Robert Harley. - -dnl Copyright 1998, 2000, 2001, 2003, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM 6-8 -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 4.75 -C Cortex-A15 ? - -C We should rewrite this along the lines of addmul_1.asm. That should save a -C cycle on StrongARM, and several cycles on XScale. - -define(`rp',`r0') -define(`up',`r1') -define(`n',`r2') -define(`vl',`r3') - - -ASM_START() -PROLOGUE(mpn_mul_1) - stmfd sp!, { r8, r9, lr } - ands r12, n, #1 - beq L(skip1) - ldr lr, [up], #4 - umull r9, r12, lr, vl - str r9, [rp], #4 -L(skip1): - tst n, #2 - beq L(skip2) - mov r8, r12 - ldmia up!, { r12, lr } - mov r9, #0 - umlal r8, r9, r12, vl - mov r12, #0 - umlal r9, r12, lr, vl - stmia rp!, { r8, r9 } -L(skip2): - bics n, n, #3 - beq L(rtn) - stmfd sp!, { r6, r7 } - -L(top): mov r6, r12 - ldmia up!, { r8, r9, r12, lr } - ldr r7, [rp, #12] C cache allocate - mov r7, #0 - umlal r6, r7, r8, vl - mov r8, #0 - umlal r7, r8, r9, vl - mov r9, #0 - umlal r8, r9, r12, vl - mov r12, #0 - umlal r9, r12, lr, vl - subs n, n, #4 - stmia rp!, { r6, r7, r8, r9 } - bne L(top) - - ldmfd sp!, { r6, r7 } - -L(rtn): mov r0, r12 - ldmfd sp!, { r8, r9, pc } -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/README b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/README deleted file mode 100644 index 79e3b48ee64e3ee2d93726fc346f4baf6950cf0f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/README +++ /dev/null @@ -1,2 +0,0 @@ -This directory contains Neon code which runs and is efficient on all -ARM CPUs which support Neon. diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/hamdist.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/hamdist.asm deleted file mode 100644 index 232089647df59713c2bf016c5b21dfee51a2894d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/hamdist.asm +++ /dev/null @@ -1,194 +0,0 @@ -dnl ARM Neon mpn_hamdist -- mpn bit hamming distance. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM: - -C XScale - -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 1.89 -C Cortex-A15 0.95 - -C TODO -C * Explore using vldr and vldm. Does it help on A9? (These loads do -C 64-bits-at-a-time, which will mess up in big-endian mode. Except not for -C popcount. Except perhaps also for popcount for the edge loads.) -C * Arrange to align the pointer, if that helps performance. Use the same -C read-and-mask trick we use on PCs, for simplicity and performance. (Sorry -C valgrind!) -C * Explore if explicit align directives, e.g., "[ptr:128]" help. -C * See rth's gmp-devel 2013-02/03 messages about final summation tricks. - -C INPUT PARAMETERS -define(`ap', r0) -define(`bp', r1) -define(`n', r2) - -C We sum into 16 16-bit counters in q8,q9, but at the end we sum them and end -C up with 8 16-bit counters. Therefore, we can sum to 8(2^16-1) bits, or -C (8*2^16-1)/32 = 0x3fff limbs. We use a chunksize close to that, but which -C can be represented as a 8-bit ARM constant. -C -define(`chunksize',0x3f80) - -ASM_START() -PROLOGUE(mpn_hamdist) - - cmp n, #chunksize - bhi L(gt16k) - -L(lt16k): - vmov.i64 q8, #0 C clear summation register - vmov.i64 q9, #0 C clear summation register - - tst n, #1 - beq L(xxx0) - vmov.i64 d0, #0 - vmov.i64 d20, #0 - sub n, n, #1 - vld1.32 {d0[0]}, [ap]! C load 1 limb - vld1.32 {d20[0]}, [bp]! C load 1 limb - veor d0, d0, d20 - vcnt.8 d24, d0 - vpadal.u8 d16, d24 C d16/q8 = 0; could just splat - -L(xxx0):tst n, #2 - beq L(xx00) - sub n, n, #2 - vld1.32 {d0}, [ap]! C load 2 limbs - vld1.32 {d20}, [bp]! C load 2 limbs - veor d0, d0, d20 - vcnt.8 d24, d0 - vpadal.u8 d16, d24 - -L(xx00):tst n, #4 - beq L(x000) - sub n, n, #4 - vld1.32 {q0}, [ap]! C load 4 limbs - vld1.32 {q10}, [bp]! C load 4 limbs - veor q0, q0, q10 - vcnt.8 q12, q0 - vpadal.u8 q8, q12 - -L(x000):tst n, #8 - beq L(0000) - - subs n, n, #8 - vld1.32 {q0,q1}, [ap]! C load 8 limbs - vld1.32 {q10,q11}, [bp]! C load 8 limbs - bls L(sum) - -L(gt8): vld1.32 {q2,q3}, [ap]! C load 8 limbs - vld1.32 {q14,q15}, [bp]! C load 8 limbs - veor q0, q0, q10 - veor q1, q1, q11 - sub n, n, #8 - vcnt.8 q12, q0 - vcnt.8 q13, q1 - b L(mid) - -L(0000):subs n, n, #16 - blo L(e0) - - vld1.32 {q2,q3}, [ap]! C load 8 limbs - vld1.32 {q0,q1}, [ap]! C load 8 limbs - vld1.32 {q14,q15}, [bp]! C load 8 limbs - vld1.32 {q10,q11}, [bp]! C load 8 limbs - veor q2, q2, q14 - veor q3, q3, q15 - vcnt.8 q12, q2 - vcnt.8 q13, q3 - subs n, n, #16 - blo L(end) - -L(top): vld1.32 {q2,q3}, [ap]! C load 8 limbs - vld1.32 {q14,q15}, [bp]! C load 8 limbs - veor q0, q0, q10 - veor q1, q1, q11 - vpadal.u8 q8, q12 - vcnt.8 q12, q0 - vpadal.u8 q9, q13 - vcnt.8 q13, q1 -L(mid): vld1.32 {q0,q1}, [ap]! C load 8 limbs - vld1.32 {q10,q11}, [bp]! C load 8 limbs - veor q2, q2, q14 - veor q3, q3, q15 - subs n, n, #16 - vpadal.u8 q8, q12 - vcnt.8 q12, q2 - vpadal.u8 q9, q13 - vcnt.8 q13, q3 - bhs L(top) - -L(end): vpadal.u8 q8, q12 - vpadal.u8 q9, q13 -L(sum): veor q0, q0, q10 - veor q1, q1, q11 - vcnt.8 q12, q0 - vcnt.8 q13, q1 - vpadal.u8 q8, q12 - vpadal.u8 q9, q13 - vadd.i16 q8, q8, q9 - C we have 8 16-bit counts -L(e0): vpaddl.u16 q8, q8 C we have 4 32-bit counts - vpaddl.u32 q8, q8 C we have 2 64-bit counts - vmov.32 r0, d16[0] - vmov.32 r1, d17[0] - add r0, r0, r1 - bx lr - -C Code for large count. Splits operand and calls above code. -define(`ap2', r5) -define(`bp2', r6) -L(gt16k): - push {r4,r5,r6,r14} - mov ap2, ap - mov bp2, bp - mov r3, n C full count - mov r4, #0 C total sum - -1: mov n, #chunksize C count for this invocation - bl L(lt16k) C could jump deep inside code - add ap2, ap2, #chunksize*4 C point at next chunk - add bp2, bp2, #chunksize*4 C point at next chunk - add r4, r4, r0 - mov ap, ap2 C put chunk pointer in place for call - mov bp, bp2 C put chunk pointer in place for call - sub r3, r3, #chunksize - cmp r3, #chunksize - bhi 1b - - mov n, r3 C count for final invocation - bl L(lt16k) - add r0, r4, r0 - pop {r4,r5,r6,pc} -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/lorrshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/lorrshift.asm deleted file mode 100644 index 3d6253fd4952f8a8753025c520d3ced6680c1b7a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/lorrshift.asm +++ /dev/null @@ -1,279 +0,0 @@ -dnl ARM Neon mpn_lshift and mpn_rshift. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb cycles/limb cycles/limb good -C aligned unaligned best seen for cpu? -C StrongARM - - -C XScale - - -C Cortex-A7 ? ? -C Cortex-A8 ? ? -C Cortex-A9 3 3 Y -C Cortex-A15 1.5 1.5 Y - - -C We read 64 bits at a time at 32-bit aligned addresses, and except for the -C first and last store, we write using 64-bit aligned addresses. All shifting -C is done on 64-bit words in 'extension' registers. -C -C It should be possible to read also using 64-bit alignment, by manipulating -C the shift count for unaligned operands. Not done, since it does not seem to -C matter for A9 or A15. -C -C This will not work in big-endian mode. - -C TODO -C * Try using 128-bit operations. Note that Neon lacks pure 128-bit shifts, -C which might make it tricky. -C * Clean up and simplify. -C * Consider sharing most of the code for lshift and rshift, since the feed-in code, -C the loop, and most of the wind-down code are identical. -C * Replace the basecase code with code using 'extension' registers. -C * Optimise. It is not clear that this loop insn permutation is optimal for -C either A9 or A15. - -C INPUT PARAMETERS -define(`rp', `r0') -define(`ap', `r1') -define(`n', `r2') -define(`cnt', `r3') - -ifdef(`OPERATION_lshift',` - define(`IFLSH', `$1') - define(`IFRSH', `') - define(`X',`0') - define(`Y',`1') - define(`func',`mpn_lshift') -') -ifdef(`OPERATION_rshift',` - define(`IFLSH', `') - define(`IFRSH', `$1') - define(`X',`1') - define(`Y',`0') - define(`func',`mpn_rshift') -') - -MULFUNC_PROLOGUE(mpn_lshift mpn_rshift) - -ASM_START() - TEXT - ALIGN(64) -PROLOGUE(func) -IFLSH(` mov r12, n, lsl #2 ') -IFLSH(` add rp, rp, r12 ') -IFLSH(` add ap, ap, r12 ') - - cmp n, #4 C SIMD code n limit - ble L(base) - -ifdef(`OPERATION_lshift',` - vdup.32 d6, r3 C left shift count is positive - sub r3, r3, #64 C right shift count is negative - vdup.32 d7, r3 - mov r12, #-8') C lshift pointer update offset -ifdef(`OPERATION_rshift',` - rsb r3, r3, #0 C right shift count is negative - vdup.32 d6, r3 - add r3, r3, #64 C left shift count is positive - vdup.32 d7, r3 - mov r12, #8') C rshift pointer update offset - -IFLSH(` sub ap, ap, #8 ') - vld1.32 {d19}, [ap], r12 C load initial 2 limbs - vshl.u64 d18, d19, d7 C retval - - tst rp, #4 C is rp 64-bit aligned already? - beq L(rp_aligned) C yes, skip -IFLSH(` add ap, ap, #4 ') C move back ap pointer -IFRSH(` sub ap, ap, #4 ') C move back ap pointer - vshl.u64 d4, d19, d6 - sub n, n, #1 C first limb handled -IFLSH(` sub rp, rp, #4 ') - vst1.32 {d4[Y]}, [rp]IFRSH(!) C store first limb, rp gets aligned - vld1.32 {d19}, [ap], r12 C load ap[1] and ap[2] - -L(rp_aligned): -IFLSH(` sub rp, rp, #8 ') - subs n, n, #6 - blt L(two_or_three_more) - tst n, #2 - beq L(2) - -L(1): vld1.32 {d17}, [ap], r12 - vshl.u64 d5, d19, d6 - vld1.32 {d16}, [ap], r12 - vshl.u64 d0, d17, d7 - vshl.u64 d4, d17, d6 - sub n, n, #2 - b L(mid) - -L(2): vld1.32 {d16}, [ap], r12 - vshl.u64 d4, d19, d6 - vld1.32 {d17}, [ap], r12 - vshl.u64 d1, d16, d7 - vshl.u64 d5, d16, d6 - subs n, n, #4 - blt L(end) - -L(top): vld1.32 {d16}, [ap], r12 - vorr d2, d4, d1 - vshl.u64 d0, d17, d7 - vshl.u64 d4, d17, d6 - vst1.32 {d2}, [rp:64], r12 -L(mid): vld1.32 {d17}, [ap], r12 - vorr d3, d5, d0 - vshl.u64 d1, d16, d7 - vshl.u64 d5, d16, d6 - vst1.32 {d3}, [rp:64], r12 - subs n, n, #4 - bge L(top) - -L(end): tst n, #1 - beq L(evn) - - vorr d2, d4, d1 - vst1.32 {d2}, [rp:64], r12 - b L(cj1) - -L(evn): vorr d2, d4, d1 - vshl.u64 d0, d17, d7 - vshl.u64 d16, d17, d6 - vst1.32 {d2}, [rp:64], r12 - vorr d2, d5, d0 - b L(cj2) - -C Load last 2 - 3 limbs, store last 4 - 5 limbs -L(two_or_three_more): - tst n, #1 - beq L(l2) - -L(l3): vshl.u64 d5, d19, d6 - vld1.32 {d17}, [ap], r12 -L(cj1): veor d16, d16, d16 -IFLSH(` add ap, ap, #4 ') - vld1.32 {d16[Y]}, [ap], r12 - vshl.u64 d0, d17, d7 - vshl.u64 d4, d17, d6 - vorr d3, d5, d0 - vshl.u64 d1, d16, d7 - vshl.u64 d5, d16, d6 - vst1.32 {d3}, [rp:64], r12 - vorr d2, d4, d1 - vst1.32 {d2}, [rp:64], r12 -IFLSH(` add rp, rp, #4 ') - vst1.32 {d5[Y]}, [rp] - vmov.32 r0, d18[X] - bx lr - -L(l2): vld1.32 {d16}, [ap], r12 - vshl.u64 d4, d19, d6 - vshl.u64 d1, d16, d7 - vshl.u64 d16, d16, d6 - vorr d2, d4, d1 -L(cj2): vst1.32 {d2}, [rp:64], r12 - vst1.32 {d16}, [rp] - vmov.32 r0, d18[X] - bx lr - - -define(`tnc', `r12') -L(base): - push {r4, r6, r7, r8} -ifdef(`OPERATION_lshift',` - ldr r4, [ap, #-4]! - rsb tnc, cnt, #32 - - mov r7, r4, lsl cnt - tst n, #1 - beq L(ev) C n even - -L(od): subs n, n, #2 - bcc L(ed1) C n = 1 - ldr r8, [ap, #-4]! - b L(md) C n = 3 - -L(ev): ldr r6, [ap, #-4]! - subs n, n, #2 - beq L(ed) C n = 3 - C n = 4 -L(tp): ldr r8, [ap, #-4]! - orr r7, r7, r6, lsr tnc - str r7, [rp, #-4]! - mov r7, r6, lsl cnt -L(md): ldr r6, [ap, #-4]! - orr r7, r7, r8, lsr tnc - str r7, [rp, #-4]! - mov r7, r8, lsl cnt - -L(ed): orr r7, r7, r6, lsr tnc - str r7, [rp, #-4]! - mov r7, r6, lsl cnt -L(ed1): str r7, [rp, #-4] - mov r0, r4, lsr tnc -') -ifdef(`OPERATION_rshift',` - ldr r4, [ap] - rsb tnc, cnt, #32 - - mov r7, r4, lsr cnt - tst n, #1 - beq L(ev) C n even - -L(od): subs n, n, #2 - bcc L(ed1) C n = 1 - ldr r8, [ap, #4]! - b L(md) C n = 3 - -L(ev): ldr r6, [ap, #4]! - subs n, n, #2 - beq L(ed) C n = 2 - C n = 4 - -L(tp): ldr r8, [ap, #4]! - orr r7, r7, r6, lsl tnc - str r7, [rp], #4 - mov r7, r6, lsr cnt -L(md): ldr r6, [ap, #4]! - orr r7, r7, r8, lsl tnc - str r7, [rp], #4 - mov r7, r8, lsr cnt - -L(ed): orr r7, r7, r6, lsl tnc - str r7, [rp], #4 - mov r7, r6, lsr cnt -L(ed1): str r7, [rp], #4 - mov r0, r4, lsl tnc -') - pop {r4, r6, r7, r8} - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/lshiftc.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/lshiftc.asm deleted file mode 100644 index 803963049a49da24b0b42a2e8654f4efba4e8e57..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/lshiftc.asm +++ /dev/null @@ -1,257 +0,0 @@ -dnl ARM Neon mpn_lshiftc. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb cycles/limb cycles/limb good -C aligned unaligned best seen for cpu? -C StrongARM - - -C XScale - - -C Cortex-A7 ? ? -C Cortex-A8 ? ? -C Cortex-A9 3.5 3.5 Y -C Cortex-A15 1.75 1.75 Y - - -C We read 64 bits at a time at 32-bit aligned addresses, and except for the -C first and last store, we write using 64-bit aligned addresses. All shifting -C is done on 64-bit words in 'extension' registers. -C -C It should be possible to read also using 64-bit alignment, by manipulating -C the shift count for unaligned operands. Not done, since it does not seem to -C matter for A9 or A15. -C -C This will not work in big-endian mode. - -C TODO -C * Try using 128-bit operations. Note that Neon lacks pure 128-bit shifts, -C which might make it tricky. -C * Clean up and simplify. -C * Consider sharing most of the code for lshift and rshift, since the feed-in -C code, the loop, and most of the wind-down code are identical. -C * Replace the basecase code with code using 'extension' registers. -C * Optimise. It is not clear that this loop insn permutation is optimal for -C either A9 or A15. - -C INPUT PARAMETERS -define(`rp', `r0') -define(`ap', `r1') -define(`n', `r2') -define(`cnt', `r3') - - define(`IFLSH', `$1') - define(`IFRSH', `') - define(`X',`0') - define(`Y',`1') - define(`func',`mpn_lshiftc') -define(`OPERATION_lshiftc',1) - -ASM_START() - TEXT - ALIGN(64) -PROLOGUE(mpn_lshiftc) -IFLSH(` mov r12, n, lsl #2 ') -IFLSH(` add rp, rp, r12 ') -IFLSH(` add ap, ap, r12 ') - - cmp n, #4 C SIMD code n limit - ble L(base) - -ifdef(`OPERATION_lshiftc',` - vdup.32 d6, r3 C left shift count is positive - sub r3, r3, #64 C right shift count is negative - vdup.32 d7, r3 - mov r12, #-8') C lshift pointer update offset -ifdef(`OPERATION_rshift',` - rsb r3, r3, #0 C right shift count is negative - vdup.32 d6, r3 - add r3, r3, #64 C left shift count is positive - vdup.32 d7, r3 - mov r12, #8') C rshift pointer update offset - -IFLSH(` sub ap, ap, #8 ') - vld1.32 {d19}, [ap], r12 C load initial 2 limbs - vshl.u64 d18, d19, d7 C retval - - tst rp, #4 C is rp 64-bit aligned already? - beq L(rp_aligned) C yes, skip - vmvn d19, d19 -IFLSH(` add ap, ap, #4 ') C move back ap pointer -IFRSH(` sub ap, ap, #4 ') C move back ap pointer - vshl.u64 d4, d19, d6 - sub n, n, #1 C first limb handled -IFLSH(` sub rp, rp, #4 ') - vst1.32 {d4[Y]}, [rp]IFRSH(!) C store first limb, rp gets aligned - vld1.32 {d19}, [ap], r12 C load ap[1] and ap[2] - -L(rp_aligned): -IFLSH(` sub rp, rp, #8 ') - subs n, n, #6 - vmvn d19, d19 - blt L(two_or_three_more) - tst n, #2 - beq L(2) - -L(1): vld1.32 {d17}, [ap], r12 - vshl.u64 d5, d19, d6 - vmvn d17, d17 - vld1.32 {d16}, [ap], r12 - vshl.u64 d0, d17, d7 - vshl.u64 d4, d17, d6 - sub n, n, #2 - b L(mid) - -L(2): vld1.32 {d16}, [ap], r12 - vshl.u64 d4, d19, d6 - vmvn d16, d16 - vld1.32 {d17}, [ap], r12 - vshl.u64 d1, d16, d7 - vshl.u64 d5, d16, d6 - subs n, n, #4 - blt L(end) - -L(top): vmvn d17, d17 - vld1.32 {d16}, [ap], r12 - vorr d2, d4, d1 - vshl.u64 d0, d17, d7 - vshl.u64 d4, d17, d6 - vst1.32 {d2}, [rp:64], r12 -L(mid): vmvn d16, d16 - vld1.32 {d17}, [ap], r12 - vorr d3, d5, d0 - vshl.u64 d1, d16, d7 - vshl.u64 d5, d16, d6 - vst1.32 {d3}, [rp:64], r12 - subs n, n, #4 - bge L(top) - -L(end): tst n, #1 - beq L(evn) - - vorr d2, d4, d1 - vst1.32 {d2}, [rp:64], r12 - b L(cj1) - -L(evn): vmvn d17, d17 - vorr d2, d4, d1 - vshl.u64 d0, d17, d7 - vshl.u64 d4, d17, d6 - vst1.32 {d2}, [rp:64], r12 - vmov.u8 d17, #255 - vorr d2, d5, d0 - vshl.u64 d0, d17, d7 - vorr d3, d4, d0 - b L(cj2) - -C Load last 2 - 3 limbs, store last 4 - 5 limbs -L(two_or_three_more): - tst n, #1 - beq L(l2) - -L(l3): vshl.u64 d5, d19, d6 - vld1.32 {d17}, [ap], r12 -L(cj1): vmov.u8 d16, #0 -IFLSH(` add ap, ap, #4 ') - vmvn d17, d17 - vld1.32 {d16[Y]}, [ap], r12 - vshl.u64 d0, d17, d7 - vshl.u64 d4, d17, d6 - vmvn d16, d16 - vorr d3, d5, d0 - vshl.u64 d1, d16, d7 - vshl.u64 d5, d16, d6 - vst1.32 {d3}, [rp:64], r12 - vorr d2, d4, d1 - vst1.32 {d2}, [rp:64], r12 -IFLSH(` add rp, rp, #4 ') - vst1.32 {d5[Y]}, [rp] - vmov.32 r0, d18[X] - bx lr - -L(l2): vld1.32 {d16}, [ap], r12 - vshl.u64 d4, d19, d6 - vmvn d16, d16 - vshl.u64 d1, d16, d7 - vshl.u64 d5, d16, d6 - vmov.u8 d17, #255 - vorr d2, d4, d1 - vshl.u64 d0, d17, d7 - vorr d3, d5, d0 -L(cj2): vst1.32 {d2}, [rp:64], r12 - vst1.32 {d3}, [rp] - vmov.32 r0, d18[X] - bx lr - - -define(`tnc', `r12') -L(base): - push {r4, r6, r7, r8} - ldr r4, [ap, #-4]! - rsb tnc, cnt, #32 - mvn r6, r4 - - mov r7, r6, lsl cnt - tst n, #1 - beq L(ev) C n even - -L(od): subs n, n, #2 - bcc L(ed1) C n = 1 - ldr r8, [ap, #-4]! - mvn r8, r8 - b L(md) C n = 3 - -L(ev): ldr r6, [ap, #-4]! - mvn r6, r6 - subs n, n, #2 - beq L(ed) C n = 3 - C n = 4 -L(tp): ldr r8, [ap, #-4]! - orr r7, r7, r6, lsr tnc - str r7, [rp, #-4]! - mvn r8, r8 - mov r7, r6, lsl cnt -L(md): ldr r6, [ap, #-4]! - orr r7, r7, r8, lsr tnc - str r7, [rp, #-4]! - mvn r6, r6 - mov r7, r8, lsl cnt - -L(ed): orr r7, r7, r6, lsr tnc - str r7, [rp, #-4]! - mov r7, r6, lsl cnt -L(ed1): mvn r6, #0 - orr r7, r7, r6, lsr tnc - str r7, [rp, #-4] - mov r0, r4, lsr tnc - pop {r4, r6, r7, r8} - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/popcount.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/popcount.asm deleted file mode 100644 index 2f8f9afc8d6fdba04149f7aa2f55e554dad9adc8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/popcount.asm +++ /dev/null @@ -1,166 +0,0 @@ -dnl ARM Neon mpn_popcount -- mpn bit population count. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM: - -C XScale - -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 1.125 -C Cortex-A15 0.56 - -C TODO -C * Explore using vldr and vldm. Does it help on A9? (These loads do -C 64-bits-at-a-time, which will mess up in big-endian mode. Except not for -C popcount. Except perhaps also for popcount for the edge loads.) -C * Arrange to align the pointer, if that helps performance. Use the same -C read-and-mask trick we use on PCs, for simplicity and performance. (Sorry -C valgrind!) -C * Explore if explicit align directives, e.g., "[ptr:128]" help. -C * See rth's gmp-devel 2013-02/03 messages about final summation tricks. - -C INPUT PARAMETERS -define(`ap', r0) -define(`n', r1) - -C We sum into 16 16-bit counters in q8,q9, but at the end we sum them and end -C up with 8 16-bit counters. Therefore, we can sum to 8(2^16-1) bits, or -C (8*2^16-1)/32 = 0x3fff limbs. We use a chunksize close to that, but which -C can be represented as a 8-bit ARM constant. -C -define(`chunksize',0x3f80) - -ASM_START() -PROLOGUE(mpn_popcount) - - cmp n, #chunksize - bhi L(gt16k) - -L(lt16k): - vmov.i64 q8, #0 C clear summation register - vmov.i64 q9, #0 C clear summation register - - tst n, #1 - beq L(xxx0) - vmov.i64 d0, #0 - sub n, n, #1 - vld1.32 {d0[0]}, [ap]! C load 1 limb - vcnt.8 d24, d0 - vpadal.u8 d16, d24 C d16/q8 = 0; could just splat - -L(xxx0):tst n, #2 - beq L(xx00) - sub n, n, #2 - vld1.32 {d0}, [ap]! C load 2 limbs - vcnt.8 d24, d0 - vpadal.u8 d16, d24 - -L(xx00):tst n, #4 - beq L(x000) - sub n, n, #4 - vld1.32 {q0}, [ap]! C load 4 limbs - vcnt.8 q12, q0 - vpadal.u8 q8, q12 - -L(x000):tst n, #8 - beq L(0000) - - subs n, n, #8 - vld1.32 {q0,q1}, [ap]! C load 8 limbs - bls L(sum) - -L(gt8): vld1.32 {q2,q3}, [ap]! C load 8 limbs - sub n, n, #8 - vcnt.8 q12, q0 - vcnt.8 q13, q1 - b L(mid) - -L(0000):subs n, n, #16 - blo L(e0) - - vld1.32 {q2,q3}, [ap]! C load 8 limbs - vld1.32 {q0,q1}, [ap]! C load 8 limbs - vcnt.8 q12, q2 - vcnt.8 q13, q3 - subs n, n, #16 - blo L(end) - -L(top): vld1.32 {q2,q3}, [ap]! C load 8 limbs - vpadal.u8 q8, q12 - vcnt.8 q12, q0 - vpadal.u8 q9, q13 - vcnt.8 q13, q1 -L(mid): vld1.32 {q0,q1}, [ap]! C load 8 limbs - subs n, n, #16 - vpadal.u8 q8, q12 - vcnt.8 q12, q2 - vpadal.u8 q9, q13 - vcnt.8 q13, q3 - bhs L(top) - -L(end): vpadal.u8 q8, q12 - vpadal.u8 q9, q13 -L(sum): vcnt.8 q12, q0 - vcnt.8 q13, q1 - vpadal.u8 q8, q12 - vpadal.u8 q9, q13 - vadd.i16 q8, q8, q9 - C we have 8 16-bit counts -L(e0): vpaddl.u16 q8, q8 C we have 4 32-bit counts - vpaddl.u32 q8, q8 C we have 2 64-bit counts - vmov.32 r0, d16[0] - vmov.32 r1, d17[0] - add r0, r0, r1 - bx lr - -C Code for large count. Splits operand and calls above code. -define(`ap2', r2) C caller-saves reg not used above -L(gt16k): - push {r4,r14} - mov ap2, ap - mov r3, n C full count - mov r4, #0 C total sum - -1: mov n, #chunksize C count for this invocation - bl L(lt16k) C could jump deep inside code - add ap2, ap2, #chunksize*4 C point at next chunk - add r4, r4, r0 - mov ap, ap2 C put chunk pointer in place for call - sub r3, r3, #chunksize - cmp r3, #chunksize - bhi 1b - - mov n, r3 C count for final invocation - bl L(lt16k) - add r0, r4, r0 - pop {r4,pc} -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/sec_tabselect.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/sec_tabselect.asm deleted file mode 100644 index 69fceb00635cd7ac9b5b472f20eeaecb4a194a36..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/neon/sec_tabselect.asm +++ /dev/null @@ -1,140 +0,0 @@ -dnl ARM Neon mpn_sec_tabselect. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2011-2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C StrongARM - -C XScale - -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 1.15 -C Cortex-A15 0.65 - -define(`rp', `r0') -define(`tp', `r1') -define(`n', `r2') -define(`nents', `r3') -C define(`which', on stack) - -define(`i', `r4') -define(`j', `r5') - -define(`maskq', `q10') -define(`maskd', `d20') - -ASM_START() -PROLOGUE(mpn_sec_tabselect) - push {r4-r5} - - add r4, sp, #8 - vld1.32 {d30[], d31[]}, [r4] C 4 `which' copies - vmov.i32 q14, #1 C 4 copies of 1 - - subs j, n, #8 - bmi L(outer_end) - -L(outer_top): - mov i, nents - mov r12, tp C preserve tp - veor q13, q13, q13 C 4 counter copies - veor q2, q2, q2 - veor q3, q3, q3 - ALIGN(16) -L(top): vceq.i32 maskq, q13, q15 C compare idx copies to `which' copies - vld1.32 {q0,q1}, [tp] - vadd.i32 q13, q13, q14 - vbit q2, q0, maskq - vbit q3, q1, maskq - add tp, tp, n, lsl #2 - subs i, i, #1 - bne L(top) - vst1.32 {q2,q3}, [rp]! - add tp, r12, #32 C restore tp, point to next slice - subs j, j, #8 - bpl L(outer_top) -L(outer_end): - - tst n, #4 - beq L(b0xx) -L(b1xx):mov i, nents - mov r12, tp - veor q13, q13, q13 - veor q2, q2, q2 - ALIGN(16) -L(tp4): vceq.i32 maskq, q13, q15 - vld1.32 {q0}, [tp] - vadd.i32 q13, q13, q14 - vbit q2, q0, maskq - add tp, tp, n, lsl #2 - subs i, i, #1 - bne L(tp4) - vst1.32 {q2}, [rp]! - add tp, r12, #16 - -L(b0xx):tst n, #2 - beq L(b00x) -L(b01x):mov i, nents - mov r12, tp - veor d26, d26, d26 - veor d4, d4, d4 - ALIGN(16) -L(tp2): vceq.i32 maskd, d26, d30 - vld1.32 {d0}, [tp] - vadd.i32 d26, d26, d28 - vbit d4, d0, maskd - add tp, tp, n, lsl #2 - subs i, i, #1 - bne L(tp2) - vst1.32 {d4}, [rp]! - add tp, r12, #8 - -L(b00x):tst n, #1 - beq L(b000) -L(b001):mov i, nents - mov r12, tp - veor d26, d26, d26 - veor d4, d4, d4 - ALIGN(16) -L(tp1): vceq.i32 maskd, d26, d30 - vld1.32 {d0[0]}, [tp] - vadd.i32 d26, d26, d28 - vbit d4, d0, maskd - add tp, tp, n, lsl #2 - subs i, i, #1 - bne L(tp1) - vst1.32 {d4[0]}, [rp] - -L(b000):pop {r4-r5} - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/rsh1aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/rsh1aors_n.asm deleted file mode 100644 index 95c1f79ad9f999c126f331a394dff8b1ef534153..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/rsh1aors_n.asm +++ /dev/null @@ -1,124 +0,0 @@ -dnl ARM mpn_rsh1add_n and mpn_rsh1sub_n. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 3.64-3.7 -C Cortex-A15 2.5 - -C TODO -C * Not optimised. - -define(`rp', `r0') -define(`up', `r1') -define(`vp', `r2') -define(`n', `r3') - -ifdef(`OPERATION_rsh1add_n', ` - define(`ADDSUB', adds) - define(`ADDSUBC', adcs) - define(`RSTCY', `cmn $1, $1') - define(`func', mpn_rsh1add_n) - define(`func_nc', mpn_rsh1add_nc)') -ifdef(`OPERATION_rsh1sub_n', ` - define(`ADDSUB', subs) - define(`ADDSUBC', sbcs) - define(`RSTCY', - `mvn $2, #0x80000000 - cmp $2, $1') - define(`func', mpn_rsh1sub_n) - define(`func_nc', mpn_rsh1sub_nc)') - -MULFUNC_PROLOGUE(mpn_rsh1add_n mpn_rsh1sub_n) - -ASM_START() -PROLOGUE(func) - push {r4-r11} - ldr r4, [up], #4 - ldr r8, [vp], #4 - ADDSUB r4, r4, r8 - movs r12, r7, rrx - and r11, r4, #1 C return value - subs n, n, #4 - blo L(end) - -L(top): ldmia up!, {r5,r6,r7} - ldmia vp!, {r8,r9,r10} - cmn r12, r12 - ADDSUBC r5, r5, r8 - ADDSUBC r6, r6, r9 - ADDSUBC r7, r7, r10 - movs r12, r7, rrx - movs r6, r6, rrx - movs r5, r5, rrx - movs r4, r4, rrx - subs n, n, #3 - stmia rp!, {r4,r5,r6} - mov r4, r7 - bhs L(top) - -L(end): cmn n, #2 - bls L(e2) - ldm up, {r5,r6} - ldm vp, {r8,r9} - cmn r12, r12 - ADDSUBC r5, r5, r8 - ADDSUBC r6, r6, r9 - movs r12, r6, rrx - movs r5, r5, rrx - movs r4, r4, rrx - stmia rp!, {r4,r5} - mov r4, r6 - b L(e1) - -L(e2): bne L(e1) - ldr r5, [up, #0] - ldr r8, [vp, #0] - cmn r12, r12 - ADDSUBC r5, r5, r8 - movs r12, r5, rrx - movs r4, r4, rrx - str r4, [rp], #4 - mov r4, r5 - -L(e1): RSTCY( r12, r1) - mov r4, r4, rrx - str r4, [rp, #0] - mov r0, r11 - pop {r4-r11} - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/rshift.asm deleted file mode 100644 index 84728d038a774ae2818629a15a38100ad68b4add..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/rshift.asm +++ /dev/null @@ -1,86 +0,0 @@ -dnl ARM mpn_rshift. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 1997, 2000, 2001, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 3.5 -C Cortex-A15 ? - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') -define(`cnt', `r3') -define(`tnc', `r12') - -ASM_START() -PROLOGUE(mpn_rshift) - push {r4, r6, r7, r8} - ldr r4, [up] - rsb tnc, cnt, #32 - - mov r7, r4, lsr cnt - tst n, #1 - beq L(evn) C n even - -L(odd): subs n, n, #2 - bcc L(1) C n = 1 - ldr r8, [up, #4]! - b L(mid) - -L(evn): ldr r6, [up, #4]! - subs n, n, #2 - beq L(end) - -L(top): ldr r8, [up, #4]! - orr r7, r7, r6, lsl tnc - str r7, [rp], #4 - mov r7, r6, lsr cnt -L(mid): ldr r6, [up, #4]! - orr r7, r7, r8, lsl tnc - str r7, [rp], #4 - mov r7, r8, lsr cnt - subs n, n, #2 - bgt L(top) - -L(end): orr r7, r7, r6, lsl tnc - str r7, [rp], #4 - mov r7, r6, lsr cnt -L(1): str r7, [rp] - mov r0, r4, lsl tnc - pop {r4, r6, r7, r8} - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/sec_tabselect.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/sec_tabselect.asm deleted file mode 100644 index 8cf937a0917f4593c5badc2eec83084fd6252d6a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/sec_tabselect.asm +++ /dev/null @@ -1,131 +0,0 @@ -dnl ARM mpn_sec_tabselect - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 2.33 -C Cortex-A15 2.2 - -C TODO -C * Consider using special code for small nents, either swapping the inner and -C outer loops, or providing a few completely unrolling the inner loops. - -define(`rp', `r0') -define(`tp', `r1') -define(`n', `r2') -define(`nents', `r3') -C which on stack - -define(`i', `r11') -define(`j', `r12') -define(`c', `r14') -define(`mask', `r7') - -ASM_START() -PROLOGUE(mpn_sec_tabselect) - push {r4-r11, r14} - - subs j, n, #3 - bmi L(outer_end) -L(outer_top): - ldr c, [sp, #36] - mov i, nents - push {tp} - - mov r8, #0 - mov r9, #0 - mov r10, #0 - -L(top): subs c, c, #1 - ldm tp, {r4,r5,r6} - sbc mask, mask, mask - subs i, i, #1 - add tp, tp, n, lsl #2 - and r4, r4, mask - and r5, r5, mask - and r6, r6, mask - orr r8, r8, r4 - orr r9, r9, r5 - orr r10, r10, r6 - bge L(top) - - stmia rp!, {r8,r9,r10} - pop {tp} - add tp, tp, #12 - subs j, j, #3 - bpl L(outer_top) -L(outer_end): - - cmp j, #-1 - bne L(n2) - - ldr c, [sp, #36] - mov i, nents - mov r8, #0 - mov r9, #0 -L(tp2): subs c, c, #1 - sbc mask, mask, mask - ldm tp, {r4,r5} - subs i, i, #1 - add tp, tp, n, lsl #2 - and r4, r4, mask - and r5, r5, mask - orr r8, r8, r4 - orr r9, r9, r5 - bge L(tp2) - stmia rp, {r8,r9} - pop {r4-r11, r14} - bx lr - -L(n2): cmp j, #-2 - bne L(n1) - - ldr c, [sp, #36] - mov i, nents - mov r8, #0 -L(tp1): subs c, c, #1 - sbc mask, mask, mask - ldr r4, [tp] - subs i, i, #1 - add tp, tp, n, lsl #2 - and r4, r4, mask - orr r8, r8, r4 - bge L(tp1) - str r8, [rp] -L(n1): pop {r4-r11, r14} - bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/udiv.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/udiv.asm deleted file mode 100644 index 8d441c74edd37cf1bcb065aebb7ad3d0e214cddb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/udiv.asm +++ /dev/null @@ -1,104 +0,0 @@ -dnl ARM mpn_udiv_qrnnd -- divide a two limb dividend and a one limb divisor. -dnl Return quotient and store remainder through a supplied pointer. - -dnl Copyright 2001, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -define(`rem_ptr',`r0') -define(`n1',`r1') -define(`n0',`r2') -define(`d',`r3') - -C divstep -- develop one quotient bit. Dividend in $1$2, divisor in $3. -C Quotient bit is shifted into $2. -define(`divstep', - `adcs $2, $2, $2 - adc $1, $1, $1 - cmp $1, $3 - subcs $1, $1, $3') - -ASM_START() -PROLOGUE(mpn_udiv_qrnnd) - mov r12, #8 C loop counter for both loops below - cmp d, #0x80000000 C check divisor msb and clear carry - bcs L(_large_divisor) - -L(oop): divstep(n1,n0,d) - divstep(n1,n0,d) - divstep(n1,n0,d) - divstep(n1,n0,d) - sub r12, r12, #1 - teq r12, #0 - bne L(oop) - - str n1, [rem_ptr] C store remainder - adc r0, n0, n0 C quotient: add last carry from divstep - bx lr - -L(_large_divisor): - stmfd sp!, { r8, lr } - - and r8, n0, #1 C save lsb of dividend - mov lr, n1, lsl #31 - orrs n0, lr, n0, lsr #1 C n0 = lo(n1n0 >> 1) - mov n1, n1, lsr #1 C n1 = hi(n1n0 >> 1) - - and lr, d, #1 C save lsb of divisor - movs d, d, lsr #1 C d = floor(orig_d / 2) - adc d, d, #0 C d = ceil(orig_d / 2) - -L(oop2): - divstep(n1,n0,d) - divstep(n1,n0,d) - divstep(n1,n0,d) - divstep(n1,n0,d) - sub r12, r12, #1 - teq r12, #0 - bne L(oop2) - - adc n0, n0, n0 C shift and add last carry from divstep - add n1, r8, n1, lsl #1 C shift in omitted dividend lsb - tst lr, lr C test saved divisor lsb - beq L(_even_divisor) - - rsb d, lr, d, lsl #1 C restore orig d value - adds n1, n1, n0 C fix remainder for omitted divisor lsb - addcs n0, n0, #1 C adjust quotient if rem. fix carried - subcs n1, n1, d C adjust remainder accordingly - cmp n1, d C remainder >= divisor? - subcs n1, n1, d C adjust remainder - addcs n0, n0, #1 C adjust quotient - -L(_even_divisor): - str n1, [rem_ptr] C store remainder - mov r0, n0 C quotient - ldmfd sp!, { r8, pc } -EPILOGUE(mpn_udiv_qrnnd) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v5/gcd_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v5/gcd_1.asm deleted file mode 100644 index 169d154bf0b1518459637d6d663722cbdbe85efa..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v5/gcd_1.asm +++ /dev/null @@ -1,120 +0,0 @@ -dnl ARM v5 mpn_gcd_1. - -dnl Based on the K7 gcd_1.asm, by Kevin Ryde. Rehacked for ARM by Torbjörn -dnl Granlund. - -dnl Copyright 2000-2002, 2005, 2009, 2011, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/bit (approx) -C StrongARM - -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 5.9 -C Cortex-A15 ? -C Numbers measured with: speed -CD -s8-32 -t24 mpn_gcd_1 - -C TODO -C * Optimise inner-loop better. - -C Threshold of when to call bmod when U is one limb. Should be about -C (time_in_cycles(bmod_1,1) + call_overhead) / (cycles/bit). -define(`BMOD_THRES_LOG2', 6) - -C INPUT PARAMETERS -define(`up', `r0') -define(`n', `r1') -define(`v0', `r2') - -ifdef(`BMOD_1_TO_MOD_1_THRESHOLD',, - `define(`BMOD_1_TO_MOD_1_THRESHOLD',0xffffffff)') - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(mpn_gcd_1) - push {r4, r7, lr} - ldr r3, [up] C U low limb - - orr r3, r3, v0 - rsb r4, r3, #0 - and r4, r4, r3 - clz r4, r4 C min(ctz(u0),ctz(v0)) - rsb r4, r4, #31 - - rsb r12, v0, #0 - and r12, r12, v0 - clz r12, r12 - rsb r12, r12, #31 - mov v0, v0, lsr r12 - - mov r7, v0 - - cmp n, #1 - bne L(nby1) - -C Both U and V are single limbs, reduce with bmod if u0 >> v0. - ldr r3, [up] - cmp v0, r3, lsr #BMOD_THRES_LOG2 - bhi L(red1) - -L(bmod):mov r3, #0 C carry argument - bl mpn_modexact_1c_odd - b L(red0) - -L(nby1):cmp n, #BMOD_1_TO_MOD_1_THRESHOLD - blo L(bmod) - - bl mpn_mod_1 - -L(red0):mov r3, r0 -L(red1):rsbs r12, r3, #0 - and r12, r12, r3 - clz r12, r12 - rsb r12, r12, #31 - bne L(mid) - b L(end) - - ALIGN(8) -L(top): rsb r12, r12, #31 - movcc r3, r1 C if x-y < 0 - movcc r7, r0 C use x,y-x -L(mid): mov r3, r3, lsr r12 C - mov r0, r3 C - sub r1, r7, r3 C - rsbs r3, r7, r3 C - and r12, r1, r3 C - clz r12, r12 C - bne L(top) C - -L(end): mov r0, r7, lsl r4 - pop {r4, r7, pc} -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v5/mod_1_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v5/mod_1_1.asm deleted file mode 100644 index 3cf0cd77636745a2912bd40494cc6f4b1e281d58..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v5/mod_1_1.asm +++ /dev/null @@ -1,129 +0,0 @@ -dnl ARM mpn_mod_1_1p - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM - -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 7 -C Cortex-A15 6 - -define(`ap', `r0') -define(`n', `r1') -define(`d', `r2') -define(`cps',`r3') - -ASM_START() -PROLOGUE(mpn_mod_1_1p) - push {r4-r10} - add r0, r0, r1, asl #2 - ldr r5, [r0, #-4]! - ldr r12, [r0, #-4]! - subs r1, r1, #2 - ble L(4) - ldr r8, [r3, #12] - mov r4, r12 - mov r10, r5 - umull r7, r5, r10, r8 - sub r1, r1, #1 - b L(mid) - -L(top): adds r12, r6, r7 - adcs r10, r4, r5 - sub r1, r1, #1 - mov r6, #0 - movcs r6, r8 - umull r7, r5, r10, r8 - adds r4, r12, r6 - subcs r4, r4, r2 -L(mid): ldr r6, [r0, #-4]! - teq r1, #0 - bne L(top) - - adds r12, r6, r7 - adcs r5, r4, r5 - subcs r5, r5, r2 -L(4): ldr r1, [r3, #4] - cmp r1, #0 - beq L(7) - ldr r4, [r3, #8] - umull r0, r6, r5, r4 - adds r12, r0, r12 - addcs r6, r6, #1 - rsb r0, r1, #32 - mov r0, r12, lsr r0 - orr r5, r0, r6, asl r1 - mov r12, r12, asl r1 - b L(8) -L(7): cmp r5, r2 - subcs r5, r5, r2 -L(8): ldr r0, [r3, #0] - umull r4, r3, r5, r0 - add r5, r5, #1 - adds r0, r4, r12 - adc r5, r3, r5 - mul r5, r2, r5 - sub r12, r12, r5 - cmp r12, r0 - addhi r12, r12, r2 - cmp r2, r12 - subls r12, r12, r2 - mov r0, r12, lsr r1 - pop {r4-r10} - bx r14 -EPILOGUE() - -PROLOGUE(mpn_mod_1_1p_cps) - stmfd sp!, {r4, r5, r6, r14} - mov r5, r0 - clz r4, r1 - mov r0, r1, asl r4 - rsb r6, r0, #0 - bl mpn_invert_limb - str r0, [r5, #0] - str r4, [r5, #4] - cmp r4, #0 - beq L(2) - rsb r1, r4, #32 - mov r3, #1 - mov r3, r3, asl r4 - orr r3, r3, r0, lsr r1 - mul r3, r6, r3 - mov r4, r3, lsr r4 - str r4, [r5, #8] -L(2): mul r0, r6, r0 - str r0, [r5, #12] - ldmfd sp!, {r4, r5, r6, pc} -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v5/mod_1_2.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v5/mod_1_2.asm deleted file mode 100644 index aa26ecb21c1c8f7023be29b34acf9efd9345ccab..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v5/mod_1_2.asm +++ /dev/null @@ -1,156 +0,0 @@ -dnl ARM mpn_mod_1s_2p - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM - -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 4.25 -C Cortex-A15 3 - -define(`ap', `r0') -define(`n', `r1') -define(`d', `r2') -define(`cps',`r3') - -ASM_START() -PROLOGUE(mpn_mod_1s_2p) - push {r4-r10} - tst n, #1 - add r7, r3, #8 - ldmia r7, {r7, r8, r12} C load B1, B2, B3 - add ap, ap, n, lsl #2 C put ap at operand end - beq L(evn) - -L(odd): subs n, n, #1 - beq L(1) - ldmdb ap!, {r4,r6,r9} - mov r10, #0 - umlal r4, r10, r6, r7 - umlal r4, r10, r9, r8 - b L(com) - -L(evn): ldmdb ap!, {r4,r10} -L(com): subs n, n, #2 - ble L(end) - ldmdb ap!, {r5,r6} - b L(mid) - -L(top): mov r9, #0 - umlal r5, r9, r6, r7 C B1 - umlal r5, r9, r4, r8 C B2 - ldmdb ap!, {r4,r6} - umlal r5, r9, r10, r12 C B3 - ble L(xit) - mov r10, #0 - umlal r4, r10, r6, r7 C B1 - umlal r4, r10, r5, r8 C B2 - ldmdb ap!, {r5,r6} - umlal r4, r10, r9, r12 C B3 -L(mid): subs n, n, #4 - bge L(top) - - mov r9, #0 - umlal r5, r9, r6, r7 C B1 - umlal r5, r9, r4, r8 C B2 - umlal r5, r9, r10, r12 C B3 - mov r4, r5 - -L(end): movge r9, r10 C executed iff coming via xit - ldr r6, [r3, #4] C cps[1] = cnt - mov r5, #0 - umlal r4, r5, r9, r7 - mov r7, r5, lsl r6 -L(x): rsb r1, r6, #32 - orr r8, r7, r4, lsr r1 - mov r9, r4, lsl r6 - ldr r5, [r3, #0] - add r0, r8, #1 - umull r12, r1, r8, r5 - adds r4, r12, r9 - adc r1, r1, r0 - mul r5, r2, r1 - sub r9, r9, r5 - cmp r9, r4 - addhi r9, r9, r2 - cmp r2, r9 - subls r9, r9, r2 - mov r0, r9, lsr r6 - pop {r4-r10} - bx r14 - -L(xit): mov r10, #0 - umlal r4, r10, r6, r7 C B1 - umlal r4, r10, r5, r8 C B2 - umlal r4, r10, r9, r12 C B3 - b L(end) - -L(1): ldr r6, [r3, #4] C cps[1] = cnt - ldr r4, [ap, #-4] C ap[0] - mov r7, #0 - b L(x) -EPILOGUE() - -PROLOGUE(mpn_mod_1s_2p_cps) - push {r4-r8, r14} - clz r4, r1 - mov r5, r1, lsl r4 C b <<= cnt - mov r6, r0 C r6 = cps - mov r0, r5 - bl mpn_invert_limb - rsb r3, r4, #32 - mov r3, r0, lsr r3 - mov r2, #1 - orr r3, r3, r2, lsl r4 - rsb r1, r5, #0 - mul r2, r1, r3 - umull r3, r12, r2, r0 - add r12, r2, r12 - mvn r12, r12 - mul r1, r5, r12 - cmp r1, r3 - addhi r1, r1, r5 - umull r12, r7, r1, r0 - add r7, r1, r7 - mvn r7, r7 - mul r3, r5, r7 - cmp r3, r12 - addhi r3, r3, r5 - mov r5, r2, lsr r4 - mov r7, r1, lsr r4 - mov r8, r3, lsr r4 - stmia r6, {r0,r4,r5,r7,r8} C fill cps - pop {r4-r8, pc} -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/addmul_1.asm deleted file mode 100644 index a38af58a7df9c60e46783f5e0f9b3bb8e10d4d53..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/addmul_1.asm +++ /dev/null @@ -1,112 +0,0 @@ -dnl ARM mpn_addmul_1. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM: - -C XScale - -C ARM11 6.4 -C Cortex-A7 5.25 -C Cortex-A8 7 -C Cortex-A9 3.25 -C Cortex-A15 4 - -C TODO -C * Micro-optimise feed-in code. -C * Optimise for n=1,2 by delaying register saving. -C * Try using ldm/stm. - -define(`rp',`r0') -define(`up',`r1') -define(`n', `r2') -define(`v0',`r3') - -ASM_START() -PROLOGUE(mpn_addmul_1) - stmfd sp!, { r4, r5, r6, r7 } - - ands r6, n, #3 - mov r12, #0 - beq L(fi0) - cmp r6, #2 - bcc L(fi1) - beq L(fi2) - -L(fi3): ldr r4, [up], #4 - ldr r6, [rp, #0] - ldr r5, [up], #4 - b L(lo3) - -L(fi0): ldr r5, [up], #4 - ldr r7, [rp], #4 - ldr r4, [up], #4 - b L(lo0) - -L(fi1): ldr r4, [up], #4 - ldr r6, [rp], #8 - subs n, n, #1 - beq L(1) - ldr r5, [up], #4 - b L(lo1) - -L(fi2): ldr r5, [up], #4 - ldr r7, [rp], #12 - ldr r4, [up], #4 - b L(lo2) - - ALIGN(16) -L(top): ldr r6, [rp, #-8] - ldr r5, [up], #4 - str r7, [rp, #-12] -L(lo1): umaal r6, r12, r4, v0 - ldr r7, [rp, #-4] - ldr r4, [up], #4 - str r6, [rp, #-8] -L(lo0): umaal r7, r12, r5, v0 - ldr r6, [rp, #0] - ldr r5, [up], #4 - str r7, [rp, #-4] -L(lo3): umaal r6, r12, r4, v0 - ldr r7, [rp, #4] - ldr r4, [up], #4 - str r6, [rp], #16 -L(lo2): umaal r7, r12, r5, v0 - subs n, n, #4 - bhi L(top) - - ldr r6, [rp, #-8] - str r7, [rp, #-12] -L(1): umaal r6, r12, r4, v0 - str r6, [rp, #-8] - mov r0, r12 - ldmfd sp!, { r4, r5, r6, r7 } - bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/addmul_2.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/addmul_2.asm deleted file mode 100644 index 33eeeec87bb57bcbaeff86c5f819b3451658048a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/addmul_2.asm +++ /dev/null @@ -1,122 +0,0 @@ -dnl ARM mpn_addmul_2. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2012, 2013, 2015 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM: - -C XScale - -C ARM11 4.68 -C Cortex-A7 3.625 -C Cortex-A8 4 -C Cortex-A9 2.25 -C Cortex-A15 2.5 - -define(`rp',`r0') -define(`up',`r1') -define(`n', `r2') -define(`vp',`r3') - -define(`v0',`r6') -define(`v1',`r7') -define(`u0',`r3') -define(`u1',`r9') - -define(`cya',`r8') -define(`cyb',`r12') - - -ASM_START() -PROLOGUE(mpn_addmul_2) - push { r4-r9 } - - ldrd v0, v1, [vp, #0] - mov cya, #0 - mov cyb, #0 - - tst n, #1 - beq L(evn) - -L(odd): ldr u1, [up, #0] - ldr r4, [rp, #0] - tst n, #2 - beq L(fi1) -L(fi3): sub up, up, #8 - sub rp, rp, #8 - b L(lo3) -L(fi1): sub n, n, #1 - b L(top) - -L(evn): ldr u0, [up, #0] - ldr r5, [rp, #0] - tst n, #2 - bne L(fi2) -L(fi0): sub up, up, #4 - sub rp, rp, #4 - b L(lo0) -L(fi2): sub up, up, #12 - sub rp, rp, #12 - b L(lo2) - - ALIGN(16) -L(top): ldr r5, [rp, #4] - umaal r4, cya, u1, v0 - ldr u0, [up, #4] - umaal r5, cyb, u1, v1 - str r4, [rp, #0] -L(lo0): ldr r4, [rp, #8] - umaal r5, cya, u0, v0 - ldr u1, [up, #8] - umaal r4, cyb, u0, v1 - str r5, [rp, #4] -L(lo3): ldr r5, [rp, #12] - umaal r4, cya, u1, v0 - ldr u0, [up, #12] - umaal r5, cyb, u1, v1 - str r4, [rp, #8] -L(lo2): ldr r4, [rp, #16]! - umaal r5, cya, u0, v0 - ldr u1, [up, #16]! - umaal r4, cyb, u0, v1 - str r5, [rp, #-4] - subs n, n, #4 - bhi L(top) - -L(end): umaal r4, cya, u1, v0 - umaal cya, cyb, u1, v1 - str r4, [rp, #0] - str cya, [rp, #4] - mov r0, cyb - - pop { r4-r9 } - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/addmul_3.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/addmul_3.asm deleted file mode 100644 index d3d183343d4042349767cc80ddf9b043cc90be9c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/addmul_3.asm +++ /dev/null @@ -1,188 +0,0 @@ -dnl ARM mpn_addmul_3. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM: - -C XScale - -C ARM11 4.33 -C Cortex-A7 3.23 -C Cortex-A8 3.19 -C Cortex-A9 2.125 -C Cortex-A15 2 - -C TODO -C * Use a fast path for n <= KARATSUBA_MUL_THRESHOLD using a jump table, -C avoiding the current multiply. -C * Start the first multiply or multiplies early. - -define(`rp',`r0') -define(`up',`r1') -define(`n', `r2') -define(`vp',`r3') - -define(`v0',`r4') define(`v1',`r5') define(`v2',`r6') -define(`u0',`r3') define(`u1',`r14') -define(`w0',`r7') define(`w1',`r8') define(`w2',`r9') -define(`cy0',`r10') define(`cy1',`r11') define(`cy2',`r12') - - -ASM_START() -PROLOGUE(mpn_addmul_3) - push { r4-r11, r14 } - - ldr w0, =0xaaaaaaab C 3^{-1} mod 2^32 - ldm vp, { v0,v1,v2 } - mov cy0, #0 - mov cy1, #0 - mov cy2, #0 - -C Tricky n mod 6 - mul w0, w0, n C n * 3^{-1} mod 2^32 - and w0, w0, #0xc0000001 C pseudo-CRT mod 3,2 - sub n, n, #3 -ifdef(`PIC',` - add pc, pc, w0, ror $28 - nop - b L(b0) - b L(b2) - b L(b4) - .word 0xe7f000f0 C udf - b L(b3) - b L(b5) - b L(b1) -',` - ldr pc, [pc, w0, ror $28] - nop - .word L(b0), L(b2), L(b4), 0, L(b3), L(b5), L(b1) -') - -L(b5): add up, up, #-8 - ldr w1, [rp, #0] - ldr w2, [rp, #4] - ldr u1, [up, #8] - b L(lo5) - -L(b4): add rp, rp, #-4 - add up, up, #-12 - ldr w2, [rp, #4] - ldr w0, [rp, #8] - ldr u0, [up, #12] - b L(lo4) - -L(b3): add rp, rp, #-8 - add up, up, #-16 - ldr w0, [rp, #8] - ldr w1, [rp, #12] - ldr u1, [up, #16] - b L(lo3) - -L(b1): add rp, rp, #8 - ldr w2, [rp, #-8] - ldr w0, [rp, #-4] - ldr u1, [up, #0] - b L(lo1) - -L(b0): add rp, rp, #4 - add up, up, #-4 - ldr w0, [rp, #-4] - ldr w1, [rp, #0] - ldr u0, [up, #4] - b L(lo0) - -L(b2): add rp, rp, #12 - add up, up, #4 - ldr w1, [rp, #-12] - ldr w2, [rp, #-8] - ldr u0, [up, #-4] - - ALIGN(16) -L(top): ldr w0, [rp, #-4] - umaal w1, cy0, u0, v0 - ldr u1, [up, #0] - umaal w2, cy1, u0, v1 - str w1, [rp, #-12] - umaal w0, cy2, u0, v2 -L(lo1): ldr w1, [rp, #0] - umaal w2, cy0, u1, v0 - ldr u0, [up, #4] - umaal w0, cy1, u1, v1 - str w2, [rp, #-8] - umaal w1, cy2, u1, v2 -L(lo0): ldr w2, [rp, #4] - umaal w0, cy0, u0, v0 - ldr u1, [up, #8] - umaal w1, cy1, u0, v1 - str w0, [rp, #-4] - umaal w2, cy2, u0, v2 -L(lo5): ldr w0, [rp, #8] - umaal w1, cy0, u1, v0 - ldr u0, [up, #12] - umaal w2, cy1, u1, v1 - str w1, [rp, #0] - umaal w0, cy2, u1, v2 -L(lo4): ldr w1, [rp, #12] - umaal w2, cy0, u0, v0 - ldr u1, [up, #16] - umaal w0, cy1, u0, v1 - str w2, [rp, #4] - umaal w1, cy2, u0, v2 -L(lo3): ldr w2, [rp, #16] - umaal w0, cy0, u1, v0 - ldr u0, [up, #20] - umaal w1, cy1, u1, v1 - str w0, [rp, #8] - umaal w2, cy2, u1, v2 -L(lo2): subs n, n, #6 - add up, up, #24 - add rp, rp, #24 - bge L(top) - -L(end): umaal w1, cy0, u0, v0 - ldr u1, [up, #0] - umaal w2, cy1, u0, v1 - str w1, [rp, #-12] - mov w0, #0 - umaal w0, cy2, u0, v2 - umaal w2, cy0, u1, v0 - umaal w0, cy1, u1, v1 - str w2, [rp, #-8] - umaal cy1, cy2, u1, v2 - adds w0, w0, cy0 - str w0, [rp, #-4] - adcs w1, cy1, #0 - str w1, [rp, #0] - adc r0, cy2, #0 - - pop { r4-r11, pc } -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/dive_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/dive_1.asm deleted file mode 100644 index 92de81473f91bbf1215576e7b37ebaf61a4f54f3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/dive_1.asm +++ /dev/null @@ -1,149 +0,0 @@ -dnl ARM v6 mpn_divexact_1 - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2012, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb cycles/limb -C norm unorm modexact_1c_odd -C StrongARM - - -C XScale - - -C Cortex-A7 ? ? -C Cortex-A8 ? ? -C Cortex-A9 9 10 9 -C Cortex-A15 7 7 7 - -C Architecture requirements: -C v5 - -C v5t clz -C v5te - -C v6 umaal -C v6t2 - -C v7a - - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') -define(`d', `r3') - -define(`cy', `r7') -define(`cnt', `r6') -define(`tnc', `r10') - -ASM_START() -PROLOGUE(mpn_divexact_1) - push {r4,r5,r6,r7,r8,r9} - - tst d, #1 - - rsb r4, d, #0 - and r4, r4, d - clz r4, r4 - rsb cnt, r4, #31 C count_trailing_zeros - mov d, d, lsr cnt - -C binvert limb - LEA( r4, binvert_limb_table) - and r12, d, #254 - ldrb r4, [r4, r12, lsr #1] - mul r12, r4, r4 - mul r12, d, r12 - rsb r12, r12, r4, lsl #1 - mul r4, r12, r12 - mul r4, d, r4 - rsb r4, r4, r12, lsl #1 C r4 = inverse - - ldr r5, [up], #4 C up[0] - mov cy, #0 - rsb r8, r4, #0 C r8 = -inverse - beq L(unnorm) - -L(norm): - subs n, n, #1 - mul r5, r5, r4 - beq L(end) - - ALIGN(16) -L(top): ldr r9, [up], #4 - mov r12, #0 - str r5, [rp], #4 - umaal r12, cy, r5, d - mul r5, r9, r4 - mla r5, cy, r8, r5 - subs n, n, #1 - bne L(top) - -L(end): str r5, [rp] - pop {r4,r5,r6,r7,r8,r9} - bx r14 - -L(unnorm): - push {r10,r11} - rsb tnc, cnt, #32 - mov r11, r5, lsr cnt - subs n, n, #1 - beq L(edx) - - ldr r12, [up], #4 - orr r9, r11, r12, lsl tnc - mov r11, r12, lsr cnt - mul r5, r9, r4 - subs n, n, #1 - beq L(edu) - - ALIGN(16) -L(tpu): ldr r12, [up], #4 - orr r9, r11, r12, lsl tnc - mov r11, r12, lsr cnt - mov r12, #0 - str r5, [rp], #4 - umaal r12, cy, r5, d - mul r5, r9, r4 - mla r5, cy, r8, r5 - subs n, n, #1 - bne L(tpu) - -L(edu): str r5, [rp], #4 - mov r12, #0 - umaal r12, cy, r5, d - mul r5, r11, r4 - mla r5, cy, r8, r5 - str r5, [rp] - pop {r10,r11} - pop {r4,r5,r6,r7,r8,r9} - bx r14 - -L(edx): mul r5, r11, r4 - str r5, [rp] - pop {r10,r11} - pop {r4,r5,r6,r7,r8,r9} - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/gmp-mparam.h deleted file mode 100644 index 67e6f7778706eaeb81e0d35e07e49103bcc8f2b8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/gmp-mparam.h +++ /dev/null @@ -1,188 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2003, 2009, 2010, 2012, 2015 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 700 MHz ARM11 (raspberry pi) */ -/* FFT tuning limit = 10 M */ -/* Generated by tuneup.c, 2015-10-05, gcc 4.6 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* preinv always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 3 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 6 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 0 /* never mpn_mod_1_1p */ -#define MOD_1_2_TO_MOD_1_4_THRESHOLD MP_SIZE_T_MAX -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 19 -#define USE_PREINV_DIVREM_1 1 /* preinv always */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 39 - -#define MUL_TOOM22_THRESHOLD 44 -#define MUL_TOOM33_THRESHOLD 138 -#define MUL_TOOM44_THRESHOLD 517 -#define MUL_TOOM6H_THRESHOLD 0 /* always */ -#define MUL_TOOM8H_THRESHOLD 692 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 141 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 407 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 132 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 211 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 225 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 56 -#define SQR_TOOM3_THRESHOLD 173 -#define SQR_TOOM4_THRESHOLD 711 -#define SQR_TOOM6_THRESHOLD 0 /* always */ -#define SQR_TOOM8_THRESHOLD 915 - -#define MULMID_TOOM42_THRESHOLD 70 - -#define MULMOD_BNM1_THRESHOLD 24 -#define SQRMOD_BNM1_THRESHOLD 28 - -#define MUL_FFT_MODF_THRESHOLD 560 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 560, 5}, { 27, 6}, { 15, 5}, { 31, 6}, \ - { 28, 7}, { 15, 6}, { 33, 7}, { 17, 6}, \ - { 36, 7}, { 19, 6}, { 39, 7}, { 23, 6}, \ - { 47, 7}, { 25, 6}, { 51, 7}, { 27, 6}, \ - { 55, 7}, { 29, 8}, { 15, 7}, { 37, 8}, \ - { 19, 7}, { 43, 8}, { 23, 7}, { 51, 8}, \ - { 27, 7}, { 55, 8}, { 31, 7}, { 63, 8}, \ - { 35, 7}, { 71, 8}, { 43, 9}, { 23, 8}, \ - { 55, 9}, { 31, 8}, { 71, 9}, { 39, 8}, \ - { 83, 9}, { 47, 8}, { 99, 9}, { 55,10}, \ - { 31, 9}, { 79,10}, { 47, 9}, { 103,11}, \ - { 31,10}, { 63, 9}, { 135,10}, { 79, 9}, \ - { 159,10}, { 95, 9}, { 191,10}, { 111,11}, \ - { 63,10}, { 159,11}, { 95,10}, { 207,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 511,10}, \ - { 271,11}, { 159,10}, { 335,11}, { 191,10}, \ - { 399,11}, { 223,12}, { 127,11}, { 255,10}, \ - { 511,11}, { 287,10}, { 575,11}, { 319,10}, \ - { 639,11}, { 351,12}, { 191,11}, { 383,10}, \ - { 767,11}, { 415,13}, { 127,12}, { 255,11}, \ - { 575,12}, { 319,11}, { 703,12}, { 383,11}, \ - { 799,12}, { 447,13}, { 255,12}, { 511,11}, \ - { 1023,12}, { 575,11}, { 1151,12}, { 703,13}, \ - { 383,12}, { 831,14}, { 255,13}, { 511,12}, \ - { 1151,13}, { 639,12}, { 1343,13}, { 767,12}, \ - { 1599,13}, { 895,14}, { 511,13}, { 1023,12}, \ - { 2111,13}, { 1151,12}, { 2367,13}, { 8192,14}, \ - { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 110 -#define MUL_FFT_THRESHOLD 5760 - -#define SQR_FFT_MODF_THRESHOLD 505 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 505, 5}, { 27, 6}, { 15, 5}, { 31, 6}, \ - { 29, 7}, { 15, 6}, { 33, 7}, { 17, 6}, \ - { 35, 7}, { 19, 6}, { 40, 7}, { 23, 6}, \ - { 47, 7}, { 29, 8}, { 15, 7}, { 37, 8}, \ - { 19, 7}, { 43, 8}, { 23, 7}, { 49, 8}, \ - { 27, 7}, { 55, 8}, { 31, 7}, { 63, 8}, \ - { 43, 9}, { 23, 8}, { 55, 9}, { 31, 8}, \ - { 71, 9}, { 39, 8}, { 83, 9}, { 47, 8}, \ - { 99, 9}, { 55,10}, { 31, 9}, { 79,10}, \ - { 47, 9}, { 103,11}, { 31,10}, { 63, 9}, \ - { 135,10}, { 79, 9}, { 159,10}, { 95, 9}, \ - { 191,10}, { 111,11}, { 63,10}, { 127, 9}, \ - { 255,10}, { 143, 9}, { 287,10}, { 159,11}, \ - { 95,10}, { 191, 9}, { 383,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,10}, { 271, 9}, \ - { 543,10}, { 287,11}, { 159,10}, { 351,11}, \ - { 191,10}, { 415,11}, { 223,12}, { 127,11}, \ - { 255,10}, { 543,11}, { 287,10}, { 607,11}, \ - { 319,10}, { 639,11}, { 351,12}, { 191,11}, \ - { 383,10}, { 767,11}, { 415,13}, { 127,12}, \ - { 255,11}, { 607,12}, { 319,11}, { 703,12}, \ - { 383,11}, { 831,12}, { 447,13}, { 255,12}, \ - { 511,11}, { 1023,12}, { 703,13}, { 383,12}, \ - { 831,14}, { 255,13}, { 511,12}, { 1087,13}, \ - { 639,12}, { 1343,13}, { 767,12}, { 1599,13}, \ - { 895,14}, { 511,13}, { 1023,12}, { 2111,13}, \ - { 1151,12}, { 2431,13}, { 8192,14}, { 16384,15}, \ - { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 109 -#define SQR_FFT_THRESHOLD 4672 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 55 -#define MULLO_MUL_N_THRESHOLD 11278 -#define SQRLO_BASECASE_THRESHOLD 8 -#define SQRLO_DC_THRESHOLD 51 -#define SQRLO_SQR_THRESHOLD 8907 - -#define DC_DIV_QR_THRESHOLD 46 -#define DC_DIVAPPR_Q_THRESHOLD 148 -#define DC_BDIV_QR_THRESHOLD 57 -#define DC_BDIV_Q_THRESHOLD 160 - -#define INV_MULMOD_BNM1_THRESHOLD 86 -#define INV_NEWTON_THRESHOLD 138 -#define INV_APPR_THRESHOLD 139 - -#define BINV_NEWTON_THRESHOLD 216 -#define REDC_1_TO_REDC_2_THRESHOLD 6 -#define REDC_2_TO_REDC_N_THRESHOLD 124 - -#define MU_DIV_QR_THRESHOLD 2642 -#define MU_DIVAPPR_Q_THRESHOLD 2492 -#define MUPI_DIV_QR_THRESHOLD 74 -#define MU_BDIV_QR_THRESHOLD 2130 -#define MU_BDIV_Q_THRESHOLD 2541 - -#define POWM_SEC_TABLE 5,26,143,446 - -#define GET_STR_DC_THRESHOLD 20 -#define GET_STR_PRECOMPUTE_THRESHOLD 39 -#define SET_STR_DC_THRESHOLD 527 -#define SET_STR_PRECOMPUTE_THRESHOLD 1069 - -#define FAC_DSC_THRESHOLD 430 -#define FAC_ODD_THRESHOLD 55 - -#define MATRIX22_STRASSEN_THRESHOLD 23 -#define HGCD_THRESHOLD 79 -#define HGCD_APPR_THRESHOLD 71 -#define HGCD_REDUCE_THRESHOLD 3810 -#define GCD_DC_THRESHOLD 283 -#define GCDEXT_DC_THRESHOLD 253 -#define JACOBI_BASE_METHOD 1 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/mode1o.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/mode1o.asm deleted file mode 100644 index a2f77a6bf59aa77f7b219c13fb77b511d8293d42..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/mode1o.asm +++ /dev/null @@ -1,95 +0,0 @@ -dnl ARM v6 mpn_modexact_1c_odd - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM - -C XScale - -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 9 -C Cortex-A15 7 - -C Architecture requirements: -C v5 - -C v5t - -C v5te smulbb -C v6 umaal -C v6t2 - -C v7a - - -define(`up', `r0') -define(`n', `r1') -define(`d', `r2') -define(`cy', `r3') - - .protected binvert_limb_table -ASM_START() -PROLOGUE(mpn_modexact_1c_odd) - stmfd sp!, {r4, r5, r6, r7} - - LEA( r4, binvert_limb_table) - - ldr r6, [up], #4 C up[0] - - and r12, d, #254 - ldrb r4, [r4, r12, lsr #1] - smulbb r12, r4, r4 - mul r12, d, r12 - rsb r12, r12, r4, asl #1 - mul r4, r12, r12 - mul r4, d, r4 - rsb r4, r4, r12, asl #1 C r4 = inverse - - subs n, n, #1 - sub r6, r6, cy - mul r6, r6, r4 - beq L(end) - - rsb r5, r4, #0 C r5 = -inverse - -L(top): ldr r7, [up], #4 - mov r12, #0 - umaal r12, cy, r6, d - mul r6, r7, r4 - mla r6, cy, r5, r6 - subs n, n, #1 - bne L(top) - -L(end): mov r12, #0 - umaal r12, cy, r6, d - mov r0, cy - - ldmfd sp!, {r4, r5, r6, r7} - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/mul_1.asm deleted file mode 100644 index 3c6ef99b61fe2633a7dbe84da943bede55732967..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/mul_1.asm +++ /dev/null @@ -1,115 +0,0 @@ -dnl ARM mpn_mul_1. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM: - -C XScale - -C ARM11 6.4 -C Cortex-A7 5.25 -C Cortex-A8 7 -C Cortex-A9 3.25 -C Cortex-A15 4 - -C TODO -C * Micro-optimise feed-in code. -C * Optimise for n=1,2 by delaying register saving. -C * Try using ldm/stm. - -define(`rp',`r0') -define(`up',`r1') -define(`n', `r2') -define(`v0',`r3') - -ASM_START() -PROLOGUE(mpn_mul_1) - stmfd sp!, { r4, r5, r6, r7 } - - ands r6, n, #3 - mov r12, #0 - beq L(fi0) - cmp r6, #2 - bcc L(fi1) - beq L(fi2) - -L(fi3): ldr r4, [up], #4 - mov r6, #0 - ldr r5, [up], #4 - b L(lo3) - -L(fi0): ldr r5, [up], #4 - add rp, rp, #4 - mov r7, #0 - ldr r4, [up], #4 - b L(lo0) - -L(fi1): ldr r4, [up], #4 - mov r6, #0 - add rp, rp, #8 - subs n, n, #1 - beq L(1) - ldr r5, [up], #4 - b L(lo1) - -L(fi2): ldr r5, [up], #4 - add rp, rp, #12 - mov r7, #0 - ldr r4, [up], #4 - b L(lo2) - - ALIGN(16) -L(top): mov r6, #0 - ldr r5, [up], #4 - str r7, [rp, #-12] -L(lo1): umaal r6, r12, r4, v0 - mov r7, #0 - ldr r4, [up], #4 - str r6, [rp, #-8] -L(lo0): umaal r7, r12, r5, v0 - mov r6, #0 - ldr r5, [up], #4 - str r7, [rp, #-4] -L(lo3): umaal r6, r12, r4, v0 - mov r7, #0 - ldr r4, [up], #4 - str r6, [rp], #16 -L(lo2): umaal r7, r12, r5, v0 - subs n, n, #4 - bhi L(top) - - mov r6, #0 - str r7, [rp, #-12] -L(1): umaal r6, r12, r4, v0 - str r6, [rp, #-8] - mov r0, r12 - ldmfd sp!, { r4, r5, r6, r7 } - bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/mul_2.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/mul_2.asm deleted file mode 100644 index 91a74c8fda6686ea2e59fa6de0b96b796d014dac..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/mul_2.asm +++ /dev/null @@ -1,132 +0,0 @@ -dnl ARM mpn_mul_2. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM: - -C XScale - -C ARM11 5.25 -C Cortex-A7 3.13 -C Cortex-A8 5 -C Cortex-A9 2.25 -C Cortex-A15 2.5 - -C TODO -C * This is a trivial edit of the addmul_2 code. Check for simplifications, -C and possible speedups to 2.0 c/l. - -define(`rp',`r0') -define(`up',`r1') -define(`n', `r2') -define(`vp',`r3') - -define(`v0',`r6') -define(`v1',`r7') -define(`u0',`r3') -define(`u1',`r9') - -define(`cya',`r8') -define(`cyb',`r12') - - -ASM_START() -PROLOGUE(mpn_mul_2) - push { r4, r5, r6, r7, r8, r9 } - - ldm vp, { v0, v1 } - mov cya, #0 - mov cyb, #0 - - tst n, #1 - beq L(evn) -L(odd): mov r5, #0 - ldr u0, [up, #0] - mov r4, #0 - tst n, #2 - beq L(fi1) -L(fi3): sub up, up, #12 - sub rp, rp, #16 - b L(lo3) -L(fi1): sub n, n, #1 - sub up, up, #4 - sub rp, rp, #8 - b L(lo1) -L(evn): mov r4, #0 - ldr u1, [up, #0] - mov r5, #0 - tst n, #2 - bne L(fi2) -L(fi0): sub up, up, #8 - sub rp, rp, #12 - b L(lo0) -L(fi2): subs n, n, #2 - sub rp, rp, #4 - bls L(end) - - ALIGN(16) -L(top): ldr u0, [up, #4] - umaal r4, cya, u1, v0 - str r4, [rp, #4] - mov r4, #0 - umaal r5, cyb, u1, v1 -L(lo1): ldr u1, [up, #8] - umaal r5, cya, u0, v0 - str r5, [rp, #8] - mov r5, #0 - umaal r4, cyb, u0, v1 -L(lo0): ldr u0, [up, #12] - umaal r4, cya, u1, v0 - str r4, [rp, #12] - mov r4, #0 - umaal r5, cyb, u1, v1 -L(lo3): ldr u1, [up, #16]! - umaal r5, cya, u0, v0 - str r5, [rp, #16]! - mov r5, #0 - umaal r4, cyb, u0, v1 - subs n, n, #4 - bhi L(top) - -L(end): umaal r4, cya, u1, v0 - ldr u0, [up, #4] - umaal r5, cyb, u1, v1 - str r4, [rp, #4] - umaal r5, cya, u0, v0 - umaal cya, cyb, u0, v1 - str r5, [rp, #8] - str cya, [rp, #12] - mov r0, cyb - - pop { r4, r5, r6, r7, r8, r9 } - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/popham.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/popham.asm deleted file mode 100644 index c25436836a02c556f8c8bdf78704bf8c53004f6c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/popham.asm +++ /dev/null @@ -1,139 +0,0 @@ -dnl ARM mpn_popcount and mpn_hamdist. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C popcount hamdist -C cycles/limb cycles/limb -C StrongARM - -C XScale - -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 8.94 9.47 -C Cortex-A15 5.67 6.44 - -C Architecture requirements: -C v5 - -C v5t - -C v5te ldrd strd -C v6 usada8 -C v6t2 - -C v7a - - -ifdef(`OPERATION_popcount',` - define(`func',`mpn_popcount') - define(`ap', `r0') - define(`n', `r1') - define(`a0', `r2') - define(`a1', `r3') - define(`s', `r5') - define(`b_01010101', `r6') - define(`b_00110011', `r7') - define(`b_00001111', `r8') - define(`zero', `r9') - define(`POPC', `$1') - define(`HAMD', `dnl') -') -ifdef(`OPERATION_hamdist',` - define(`func',`mpn_hamdist') - define(`ap', `r0') - define(`bp', `r1') - define(`n', `r2') - define(`a0', `r6') - define(`a1', `r7') - define(`b0', `r4') - define(`b1', `r5') - define(`s', `r11') - define(`b_01010101', `r8') - define(`b_00110011', `r9') - define(`b_00001111', `r10') - define(`zero', `r3') - define(`POPC', `dnl') - define(`HAMD', `$1') -') - -MULFUNC_PROLOGUE(mpn_popcount mpn_hamdist) - -ASM_START() -PROLOGUE(func) -POPC(` push { r4-r9 } ') -HAMD(` push { r4-r11 } ') - - ldr b_01010101, =0x55555555 - mov r12, #0 - ldr b_00110011, =0x33333333 - mov zero, #0 - ldr b_00001111, =0x0f0f0f0f - - tst n, #1 - beq L(evn) - -L(odd): ldr a1, [ap], #4 C 1 x 32 1-bit accumulators, 0-1 -HAMD(` ldr b1, [bp], #4 ') C 1 x 32 1-bit accumulators, 0-1 -HAMD(` eor a1, a1, b1 ') - and r4, b_01010101, a1, lsr #1 - sub a1, a1, r4 - and r4, a1, b_00110011 - bic r5, a1, b_00110011 - add r5, r4, r5, lsr #2 C 8 4-bit accumulators, 0-4 - subs n, n, #1 - b L(mid) - -L(evn): mov s, #0 - -L(top): ldrd a0, a1, [ap], #8 C 2 x 32 1-bit accumulators, 0-1 -HAMD(` ldrd b0, b1, [bp], #8') -HAMD(` eor a0, a0, b0 ') -HAMD(` eor a1, a1, b1 ') - subs n, n, #2 - usada8 r12, s, zero, r12 - and r4, b_01010101, a0, lsr #1 - sub a0, a0, r4 - and r4, b_01010101, a1, lsr #1 - sub a1, a1, r4 - and r4, a0, b_00110011 - bic r5, a0, b_00110011 - add a0, r4, r5, lsr #2 C 8 4-bit accumulators, 0-4 - and r4, a1, b_00110011 - bic r5, a1, b_00110011 - add a1, r4, r5, lsr #2 C 8 4-bit accumulators, 0-4 - add r5, a0, a1 C 8 4-bit accumulators, 0-8 -L(mid): and r4, r5, b_00001111 - bic r5, r5, b_00001111 - add s, r4, r5, lsr #4 C 4 8-bit accumulators - bne L(top) - - usada8 r0, s, zero, r12 -POPC(` pop { r4-r9 } ') -HAMD(` pop { r4-r11 } ') - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/sqr_basecase.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/sqr_basecase.asm deleted file mode 100644 index 0fc4f13dadb6191d0a6f24446811e3701e37ae7a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/sqr_basecase.asm +++ /dev/null @@ -1,544 +0,0 @@ -dnl ARM v6 mpn_sqr_basecase. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2012, 2013, 2015 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C Code structure: -C -C -C m_2(0m4) m_2(2m4) m_2(1m4) m_2(3m4) -C | | | | -C | | | | -C | | | | -C \|/ \|/ \|/ \|/ -C ____________ ____________ -C / \ / \ -C \|/ \ \|/ \ -C am_2(3m4) am_2(1m4) am_2(0m4) am_2(2m4) -C \ /|\ \ /|\ -C \____________/ \____________/ -C \ / -C \ / -C \ / -C cor3 cor2 -C \ / -C \ / -C sqr_diag_addlsh1 - -C TODO -C * Align more labels. -C * Further tweak counter and updates in outer loops. (This could save -C perhaps 5n cycles). -C * Avoid sub-with-lsl in outer loops. We could keep n up-shifted, then -C initialise loop counter i with a right shift. -C * Try to use fewer register. Perhaps coalesce r9 branch target and n_saved. -C (This could save 2-3 cycles for n > 4.) -C * Optimise sqr_diag_addlsh1 loop. The current code uses old-style carry -C propagation. -C * Stop loops earlier suppressing writes of upper-most rp[] values. -C * The addmul_2 loops here runs well on all cores, but mul_2 runs poorly -C particularly on Cortex-A8. - - -define(`rp', r0) -define(`up', r1) -define(`n', r2) - -define(`v0', r3) -define(`v1', r6) -define(`i', r8) -define(`n_saved', r14) -define(`cya', r11) -define(`cyb', r12) -define(`u0', r7) -define(`u1', r9) - -ASM_START() -PROLOGUE(mpn_sqr_basecase) - and r12, n, #3 - cmp n, #4 - addgt r12, r12, #4 - add pc, pc, r12, lsl #2 - nop - b L(4) - b L(1) - b L(2) - b L(3) - b L(0m4) - b L(1m4) - b L(2m4) - b L(3m4) - - -L(1m4): push {r4-r11, r14} - mov n_saved, n - sub i, n, #4 - sub n, n, #2 - add r10, pc, #L(am2_2m4)-.-8 - ldm up, {v0,v1,u0} - sub up, up, #4 - mov cyb, #0 - mov r5, #0 - umull r4, cya, v1, v0 - str r4, [rp], #-12 - mov r4, #0 - b L(ko0) - -L(3m4): push {r4-r11, r14} - mov n_saved, n - sub i, n, #4 - sub n, n, #2 - add r10, pc, #L(am2_0m4)-.-8 - ldm up, {v0,v1,u0} - add up, up, #4 - mov cyb, #0 - mov r5, #0 - umull r4, cya, v1, v0 - str r4, [rp], #-4 - mov r4, #0 - b L(ko2) - -L(2m4): push {r4-r11, r14} - mov n_saved, n - sub i, n, #4 - sub n, n, #2 - add r10, pc, #L(am2_3m4)-.-8 - ldm up, {v0,v1,u1} - mov cyb, #0 - mov r4, #0 - umull r5, cya, v1, v0 - str r5, [rp], #-8 - mov r5, #0 - b L(ko1) - -L(0m4): push {r4-r11, r14} - mov n_saved, n - sub i, n, #4 - sub n, n, #2 - add r10, pc, #L(am2_1m4)-.-8 - ldm up, {v0,v1,u1} - mov cyb, #0 - mov r4, #0 - add up, up, #8 - umull r5, cya, v1, v0 - str r5, [rp, #0] - mov r5, #0 - -L(top): ldr u0, [up, #4] - umaal r4, cya, u1, v0 - str r4, [rp, #4] - mov r4, #0 - umaal r5, cyb, u1, v1 -L(ko2): ldr u1, [up, #8] - umaal r5, cya, u0, v0 - str r5, [rp, #8] - mov r5, #0 - umaal r4, cyb, u0, v1 -L(ko1): ldr u0, [up, #12] - umaal r4, cya, u1, v0 - str r4, [rp, #12] - mov r4, #0 - umaal r5, cyb, u1, v1 -L(ko0): ldr u1, [up, #16]! - umaal r5, cya, u0, v0 - str r5, [rp, #16]! - mov r5, #0 - umaal r4, cyb, u0, v1 - subs i, i, #4 - bhi L(top) - - umaal r4, cya, u1, v0 - ldr u0, [up, #4] - umaal r5, cyb, u1, v1 - str r4, [rp, #4] - umaal r5, cya, u0, v0 - umaal cya, cyb, u0, v1 - str r5, [rp, #8] - str cya, [rp, #12] - str cyb, [rp, #16] - - add up, up, #4 - sub n, n, #1 - add rp, rp, #8 - bx r10 - -L(evnloop): - subs i, n, #6 - sub n, n, #2 - blt L(cor2) - ldm up, {v0,v1,u1} - add up, up, #8 - mov cya, #0 - mov cyb, #0 - ldr r4, [rp, #-4] - umaal r4, cya, v1, v0 - str r4, [rp, #-4] - ldr r4, [rp, #0] - - ALIGN(16) -L(ua2): ldr r5, [rp, #4] - umaal r4, cya, u1, v0 - ldr u0, [up, #4] - umaal r5, cyb, u1, v1 - str r4, [rp, #0] - ldr r4, [rp, #8] - umaal r5, cya, u0, v0 - ldr u1, [up, #8] - umaal r4, cyb, u0, v1 - str r5, [rp, #4] - ldr r5, [rp, #12] - umaal r4, cya, u1, v0 - ldr u0, [up, #12] - umaal r5, cyb, u1, v1 - str r4, [rp, #8] - ldr r4, [rp, #16]! - umaal r5, cya, u0, v0 - ldr u1, [up, #16]! - umaal r4, cyb, u0, v1 - str r5, [rp, #-4] - subs i, i, #4 - bhs L(ua2) - - umaal r4, cya, u1, v0 - umaal cya, cyb, u1, v1 - str r4, [rp, #0] - str cya, [rp, #4] - str cyb, [rp, #8] -L(am2_0m4): - sub rp, rp, n, lsl #2 - sub up, up, n, lsl #2 - add rp, rp, #8 - - sub i, n, #4 - sub n, n, #2 - ldm up, {v0,v1,u1} - mov cya, #0 - mov cyb, #0 - ldr r4, [rp, #4] - umaal r4, cya, v1, v0 - str r4, [rp, #4] - ldr r4, [rp, #8] - b L(lo0) - - ALIGN(16) -L(ua0): ldr r5, [rp, #4] - umaal r4, cya, u1, v0 - ldr u0, [up, #4] - umaal r5, cyb, u1, v1 - str r4, [rp, #0] - ldr r4, [rp, #8] - umaal r5, cya, u0, v0 - ldr u1, [up, #8] - umaal r4, cyb, u0, v1 - str r5, [rp, #4] -L(lo0): ldr r5, [rp, #12] - umaal r4, cya, u1, v0 - ldr u0, [up, #12] - umaal r5, cyb, u1, v1 - str r4, [rp, #8] - ldr r4, [rp, #16]! - umaal r5, cya, u0, v0 - ldr u1, [up, #16]! - umaal r4, cyb, u0, v1 - str r5, [rp, #-4] - subs i, i, #4 - bhs L(ua0) - - umaal r4, cya, u1, v0 - umaal cya, cyb, u1, v1 - str r4, [rp, #0] - str cya, [rp, #4] - str cyb, [rp, #8] -L(am2_2m4): - sub rp, rp, n, lsl #2 - sub up, up, n, lsl #2 - add rp, rp, #16 - b L(evnloop) - - -L(oddloop): - sub i, n, #5 - sub n, n, #2 - ldm up, {v0,v1,u0} - mov cya, #0 - mov cyb, #0 - ldr r5, [rp, #0] - umaal r5, cya, v1, v0 - str r5, [rp, #0] - ldr r5, [rp, #4] - add up, up, #4 - b L(lo1) - - ALIGN(16) -L(ua1): ldr r5, [rp, #4] - umaal r4, cya, u1, v0 - ldr u0, [up, #4] - umaal r5, cyb, u1, v1 - str r4, [rp, #0] -L(lo1): ldr r4, [rp, #8] - umaal r5, cya, u0, v0 - ldr u1, [up, #8] - umaal r4, cyb, u0, v1 - str r5, [rp, #4] - ldr r5, [rp, #12] - umaal r4, cya, u1, v0 - ldr u0, [up, #12] - umaal r5, cyb, u1, v1 - str r4, [rp, #8] - ldr r4, [rp, #16]! - umaal r5, cya, u0, v0 - ldr u1, [up, #16]! - umaal r4, cyb, u0, v1 - str r5, [rp, #-4] - subs i, i, #4 - bhs L(ua1) - - umaal r4, cya, u1, v0 - umaal cya, cyb, u1, v1 - str r4, [rp, #0] - str cya, [rp, #4] - str cyb, [rp, #8] -L(am2_3m4): - sub rp, rp, n, lsl #2 - sub up, up, n, lsl #2 - add rp, rp, #4 - - subs i, n, #3 - beq L(cor3) - sub n, n, #2 - ldm up, {v0,v1,u0} - mov cya, #0 - mov cyb, #0 - ldr r5, [rp, #8] - sub up, up, #4 - umaal r5, cya, v1, v0 - str r5, [rp, #8] - ldr r5, [rp, #12] - b L(lo3) - - ALIGN(16) -L(ua3): ldr r5, [rp, #4] - umaal r4, cya, u1, v0 - ldr u0, [up, #4] - umaal r5, cyb, u1, v1 - str r4, [rp, #0] - ldr r4, [rp, #8] - umaal r5, cya, u0, v0 - ldr u1, [up, #8] - umaal r4, cyb, u0, v1 - str r5, [rp, #4] - ldr r5, [rp, #12] - umaal r4, cya, u1, v0 - ldr u0, [up, #12] - umaal r5, cyb, u1, v1 - str r4, [rp, #8] -L(lo3): ldr r4, [rp, #16]! - umaal r5, cya, u0, v0 - ldr u1, [up, #16]! - umaal r4, cyb, u0, v1 - str r5, [rp, #-4] - subs i, i, #4 - bhs L(ua3) - - umaal r4, cya, u1, v0 - umaal cya, cyb, u1, v1 - str r4, [rp, #0] - str cya, [rp, #4] - str cyb, [rp, #8] -L(am2_1m4): - sub rp, rp, n, lsl #2 - sub up, up, n, lsl #2 - add rp, rp, #12 - b L(oddloop) - - -L(cor3):ldm up, {v0,v1,u0} - ldr r5, [rp, #8] - mov cya, #0 - mov cyb, #0 - umaal r5, cya, v1, v0 - str r5, [rp, #8] - ldr r5, [rp, #12] - ldr r4, [rp, #16] - umaal r5, cya, u0, v0 - ldr u1, [up, #12] - umaal r4, cyb, u0, v1 - str r5, [rp, #12] - umaal r4, cya, u1, v0 - umaal cya, cyb, u1, v1 - str r4, [rp, #16] - str cya, [rp, #20] - str cyb, [rp, #24] - add up, up, #16 - mov cya, cyb - adds rp, rp, #36 C clear cy - mov cyb, #0 - umaal cya, cyb, u1, u0 - b L(sqr_diag_addlsh1) - -L(cor2): - ldm up!, {v0,v1,u0} - mov r4, cya - mov r5, cyb - mov cya, #0 - umaal r4, cya, v1, v0 - mov cyb, #0 - umaal r5, cya, u0, v0 - strd r4, r5, [rp, #-4] - umaal cya, cyb, u0, v1 - add rp, rp, #16 -C b L(sqr_diag_addlsh1) - - -define(`w0', r6) -define(`w1', r7) -define(`w2', r8) -define(`rbx', r9) - -L(sqr_diag_addlsh1): - str cya, [rp, #-12] - str cyb, [rp, #-8] - sub n, n_saved, #1 - sub up, up, n_saved, lsl #2 - sub rp, rp, n_saved, lsl #3 - ldr r3, [up], #4 - umull w1, r5, r3, r3 - mov w2, #0 - mov r10, #0 -C cmn r0, #0 C clear cy (already clear) - b L(lm) - -L(tsd): adds w0, w0, rbx - adcs w1, w1, r4 - str w0, [rp, #0] -L(lm): ldr w0, [rp, #4] - str w1, [rp, #4] - ldr w1, [rp, #8]! - add rbx, r5, w2 - adcs w0, w0, w0 - ldr r3, [up], #4 - adcs w1, w1, w1 - adc w2, r10, r10 - umull r4, r5, r3, r3 - subs n, n, #1 - bne L(tsd) - - adds w0, w0, rbx - adcs w1, w1, r4 - adc w2, r5, w2 - stm rp, {w0,w1,w2} - - pop {r4-r11, pc} - - -C Straight line code for n <= 4 - -L(1): ldr r3, [up, #0] - umull r1, r2, r3, r3 - stm rp, {r1,r2} - bx r14 - -L(2): push {r4-r5} - ldm up, {r5,r12} - umull r1, r2, r5, r5 - umull r3, r4, r12, r12 - umull r5, r12, r5, r12 - adds r5, r5, r5 - adcs r12, r12, r12 - adc r4, r4, #0 - adds r2, r2, r5 - adcs r3, r3, r12 - adc r4, r4, #0 - stm rp, {r1,r2,r3,r4} - pop {r4-r5} - bx r14 - -L(3): push {r4-r11} - ldm up, {r7,r8,r9} - umull r1, r2, r7, r7 - umull r3, r4, r8, r8 - umull r5, r6, r9, r9 - umull r10, r11, r7, r8 - mov r12, #0 - umlal r11, r12, r7, r9 - mov r7, #0 - umlal r12, r7, r8, r9 - adds r10, r10, r10 - adcs r11, r11, r11 - adcs r12, r12, r12 - adcs r7, r7, r7 - adc r6, r6, #0 - adds r2, r2, r10 - adcs r3, r3, r11 - adcs r4, r4, r12 - adcs r5, r5, r7 - adc r6, r6, #0 - stm rp, {r1,r2,r3,r4,r5,r6} - pop {r4-r11} - bx r14 - -L(4): push {r4-r11, r14} - ldm up, {r9,r10,r11,r12} - umull r1, r2, r9, r9 - umull r3, r4, r10, r10 - umull r5, r6, r11, r11 - umull r7, r8, r12, r12 - stm rp, {r1,r2,r3,r4,r5,r6,r7} - umull r1, r2, r9, r10 - mov r3, #0 - umlal r2, r3, r9, r11 - mov r4, #0 - umlal r3, r4, r9, r12 - mov r5, #0 - umlal r3, r5, r10, r11 - umaal r4, r5, r10, r12 - mov r6, #0 - umlal r5, r6, r11, r12 - adds r1, r1, r1 - adcs r2, r2, r2 - adcs r3, r3, r3 - adcs r4, r4, r4 - adcs r5, r5, r5 - adcs r6, r6, r6 - add rp, rp, #4 - adc r7, r8, #0 - ldm rp, {r8,r9,r10,r11,r12,r14} - adds r1, r1, r8 - adcs r2, r2, r9 - adcs r3, r3, r10 - adcs r4, r4, r11 - adcs r5, r5, r12 - adcs r6, r6, r14 - adc r7, r7, #0 - stm rp, {r1,r2,r3,r4,r5,r6,r7} - pop {r4-r11, pc} -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/submul_1.asm deleted file mode 100644 index 8a21733a0a0aa7eb81ae747c55addf4d4686ad31..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6/submul_1.asm +++ /dev/null @@ -1,125 +0,0 @@ -dnl ARM mpn_submul_1. - -dnl Copyright 2012, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM: - -C XScale - -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 3.75 -C Cortex-A15 4.0 - -C This loop complements U on the fly, -C U' = B^n - 1 - U -C and then uses that -C R - U*v = R + U'*v + v - B^n v - -C TODO -C * Micro-optimise feed-in code. -C * Optimise for n=1,2 by delaying register saving. -C * Try using ldm/stm. - -define(`rp',`r0') -define(`up',`r1') -define(`n', `r2') -define(`v0',`r3') - -ASM_START() -PROLOGUE(mpn_submul_1) - stmfd sp!, { r4, r5, r6, r7 } - - ands r6, n, #3 - mov r12, v0 - beq L(fi0) - cmp r6, #2 - bcc L(fi1) - beq L(fi2) - -L(fi3): ldr r4, [up], #12 - mvn r4, r4 - ldr r6, [rp, #0] - ldr r5, [up, #-8] - b L(lo3) - -L(fi0): ldr r5, [up], #16 - mvn r5, r5 - ldr r7, [rp], #4 - ldr r4, [up, #-12] - b L(lo0) - -L(fi1): ldr r4, [up], #4 - mvn r4, r4 - ldr r6, [rp], #8 - subs n, n, #1 - beq L(1) - ldr r5, [up] - b L(lo1) - -L(fi2): ldr r5, [up], #8 - mvn r5, r5 - ldr r7, [rp], #12 - ldr r4, [up, #-4] - b L(lo2) - - ALIGN(16) -L(top): ldr r6, [rp, #-8] - ldr r5, [up] - str r7, [rp, #-12] -L(lo1): umaal r6, r12, r4, v0 - add up, up, #16 - mvn r5, r5 - ldr r7, [rp, #-4] - ldr r4, [up, #-12] - str r6, [rp, #-8] -L(lo0): umaal r7, r12, r5, v0 - mvn r4, r4 - ldr r6, [rp, #0] - ldr r5, [up, #-8] - str r7, [rp, #-4] -L(lo3): umaal r6, r12, r4, v0 - mvn r5, r5 - ldr r7, [rp, #4] - ldr r4, [up, #-4] - str r6, [rp], #16 -L(lo2): umaal r7, r12, r5, v0 - mvn r4, r4 - subs n, n, #4 - bhi L(top) - - ldr r6, [rp, #-8] - str r7, [rp, #-12] -L(1): umaal r6, r12, r4, v0 - str r6, [rp, #-8] - sub r0, v0, r12 - ldmfd sp!, { r4, r5, r6, r7 } - bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6t2/divrem_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6t2/divrem_1.asm deleted file mode 100644 index be24615acbbebefa2e08c195f1bc1f1b296a529d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6t2/divrem_1.asm +++ /dev/null @@ -1,212 +0,0 @@ -dnl ARM v6t2 mpn_divrem_1 and mpn_preinv_divrem_1. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C norm unorm frac -C StrongARM - - - -C XScale - - - -C Cortex-A7 ? ? ? -C Cortex-A8 ? ? ? -C Cortex-A9 13 14 13 -C Cortex-A15 11.4 11.8 11.1 - -C TODO -C * Optimise inner-loops better, they could likely run a cycle or two faster. -C * Decrease register usage, streamline non-loop code. - -define(`qp_arg', `r0') -define(`fn', `r1') -define(`up_arg', `r2') -define(`n_arg', `r3') -define(`d_arg', `0') -define(`dinv_arg',`4') -define(`cnt_arg', `8') - -define(`n', `r9') -define(`qp', `r5') -define(`up', `r6') -define(`cnt', `r7') -define(`tnc', `r10') -define(`dinv', `r0') -define(`d', `r4') - -ASM_START() -PROLOGUE(mpn_preinv_divrem_1) - stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr} - ldr d, [sp, #9*4+d_arg] - ldr cnt, [sp, #9*4+cnt_arg] - str r1, [sp, #9*4+d_arg] C reuse d stack slot for fn - sub n, r3, #1 - add r3, r1, n - cmp d, #0 - add qp, qp_arg, r3, lsl #2 C put qp at Q[] end - add up, up_arg, n, lsl #2 C put up at U[] end - ldr dinv, [sp, #9*4+dinv_arg] - blt L(nent) - b L(uent) -EPILOGUE() - -PROLOGUE(mpn_divrem_1) - stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr} - sub n, r3, #1 - ldr d, [sp, #9*4+d_arg] C d - str r1, [sp, #9*4+d_arg] C reuse d stack slot for fn - add r3, r1, n - cmp d, #0 - add qp, qp_arg, r3, lsl #2 C put qp at Q[] end - add up, up_arg, n, lsl #2 C put up at U[] end - blt L(normalised) - -L(unnorm): - clz cnt, d - mov r0, d, lsl cnt C pass d << cnt - bl mpn_invert_limb -L(uent): - mov d, d, lsl cnt C d <<= cnt - cmp n, #0 - mov r1, #0 C r - blt L(frac) - - ldr r11, [up, #0] - - rsb tnc, cnt, #32 - mov r1, r11, lsr tnc - mov r11, r11, lsl cnt - beq L(uend) - - ldr r3, [up, #-4]! - orr r2, r11, r3, lsr tnc - b L(mid) - -L(utop): - mls r1, d, r8, r11 - mov r11, r3, lsl cnt - ldr r3, [up, #-4]! - cmp r1, r2 - addhi r1, r1, d - subhi r8, r8, #1 - orr r2, r11, r3, lsr tnc - cmp r1, d - bcs L(ufx) -L(uok): str r8, [qp], #-4 -L(mid): add r8, r1, #1 - mov r11, r2 - umlal r2, r8, r1, dinv - subs n, n, #1 - bne L(utop) - - mls r1, d, r8, r11 - mov r11, r3, lsl cnt - cmp r1, r2 - addhi r1, r1, d - subhi r8, r8, #1 - cmp r1, d - rsbcs r1, d, r1 - addcs r8, r8, #1 - str r8, [qp], #-4 - -L(uend):add r8, r1, #1 - mov r2, r11 - umlal r2, r8, r1, dinv - mls r1, d, r8, r11 - cmp r1, r2 - addhi r1, r1, d - subhi r8, r8, #1 - cmp r1, d - rsbcs r1, d, r1 - addcs r8, r8, #1 - str r8, [qp], #-4 -L(frac): - ldr r2, [sp, #9*4+d_arg] C fn - cmp r2, #0 - beq L(fend) - -L(ftop):mov r6, #0 - add r3, r1, #1 - umlal r6, r3, r1, dinv - mov r8, #0 - mls r1, d, r3, r8 - cmp r1, r6 - addhi r1, r1, d - subhi r3, r3, #1 - subs r2, r2, #1 - str r3, [qp], #-4 - bne L(ftop) - -L(fend):mov r11, r1, lsr cnt -L(rtn): mov r0, r11 - ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc} - -L(normalised): - mov r0, d - bl mpn_invert_limb -L(nent): - cmp n, #0 - mov r11, #0 C r - blt L(nend) - - ldr r11, [up, #0] - cmp r11, d - movlo r2, #0 C hi q limb - movhs r2, #1 C hi q limb - subhs r11, r11, d - - str r2, [qp], #-4 - cmp n, #0 - beq L(nend) - -L(ntop):ldr r1, [up, #-4]! - add r12, r11, #1 - umlal r1, r12, r11, dinv - ldr r3, [up, #0] - mls r11, d, r12, r3 - cmp r11, r1 - addhi r11, r11, d - subhi r12, r12, #1 - cmp d, r11 - bls L(nfx) -L(nok): str r12, [qp], #-4 - subs n, n, #1 - bne L(ntop) - -L(nend):mov r1, r11 C r - mov cnt, #0 C shift cnt - b L(frac) - -L(nfx): add r12, r12, #1 - rsb r11, d, r11 - b L(nok) -L(ufx): rsb r1, d, r1 - add r8, r8, #1 - b L(uok) -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6t2/gcd_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6t2/gcd_1.asm deleted file mode 100644 index 20636479630d6f09ab2e45fd7a7b739edad9c9d8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v6t2/gcd_1.asm +++ /dev/null @@ -1,115 +0,0 @@ -dnl ARM v6t2 mpn_gcd_1. - -dnl Based on the K7 gcd_1.asm, by Kevin Ryde. Rehacked for ARM by Torbjörn -dnl Granlund. - -dnl Copyright 2000-2002, 2005, 2009, 2011, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/bit (approx) -C StrongARM - -C XScale - -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 5.3 -C Cortex-A15 3.5 -C Numbers measured with: speed -CD -s8-32 -t24 mpn_gcd_1 - -C TODO -C * Optimise inner-loop better. -C * Push saving/restoring of callee-user regs into call code - -C Threshold of when to call bmod when U is one limb. Should be about -C (time_in_cycles(bmod_1,1) + call_overhead) / (cycles/bit). -define(`BMOD_THRES_LOG2', 7) - -C INPUT PARAMETERS -define(`up', `r0') -define(`n', `r1') -define(`v0', `r2') - -ifdef(`BMOD_1_TO_MOD_1_THRESHOLD',, - `define(`BMOD_1_TO_MOD_1_THRESHOLD',0xffffffff)') - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(mpn_gcd_1) - push {r4, r7, lr} - ldr r3, [up] C U low limb - - orr r3, r3, v0 - rbit r4, r3 - clz r4, r4 C min(ctz(u0),ctz(v0)) - - rbit r12, v0 - clz r12, r12 - mov v0, v0, lsr r12 - - mov r7, v0 - - cmp n, #1 - bne L(nby1) - -C Both U and V are single limbs, reduce with bmod if u0 >> v0. - ldr r3, [up] - cmp v0, r3, lsr #BMOD_THRES_LOG2 - bhi L(red1) - -L(bmod):mov r3, #0 C carry argument - bl mpn_modexact_1c_odd - b L(red0) - -L(nby1):cmp n, #BMOD_1_TO_MOD_1_THRESHOLD - blo L(bmod) - - bl mpn_mod_1 - -L(red0):mov r3, r0 -L(red1):cmp r3, #0 - rbit r12, r3 - clz r12, r12 - bne L(mid) - b L(end) - - ALIGN(8) -L(top): movcs r3, r1 C if x-y < 0 - movcs r7, r0 C use x,y-x -L(mid): mov r3, r3, lsr r12 C - mov r0, r3 C - subs r1, r7, r3 C - rsb r3, r7, r3 C - rbit r12, r1 - clz r12, r12 C - bne L(top) C - -L(end): mov r0, r7, lsl r4 - pop {r4, r7, pc} -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/addmul_1.asm deleted file mode 100644 index c2277b32b2863ccff93a795e006b0476cd6ee920..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/addmul_1.asm +++ /dev/null @@ -1,145 +0,0 @@ -dnl ARM mpn_addmul_1 optimised for A15. - -dnl Copyright 2012, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb best -C StrongARM: - -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 6 3.25 -C Cortex-A15 2 this - -C This code uses umlal for adding in the rp[] data, keeping the recurrency path -C separate from any multiply instructions. It performs well on A15, at umlal's -C bandwidth. -C -C An A9 variant should perhaps stick to 3-way unrolling, and use ldm and stm -C for all loads and stores. Alternatively, it could do 2-way or 4-way, but -C then alignment aware code will be necessary (adding O(1) bookkeeping -C overhead). -C -C We don't use r12 due to ldrd and strd limitations. - -C Architecture requirements: -C v5 - -C v5t - -C v5te ldrd strd -C v6 - -C v6t2 - -C v7a - - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') -define(`v0', `r3') - -define(`w0', `r10') define(`w1', `r11') -define(`u0', `r8') define(`u1', `r9') - -ASM_START() -PROLOGUE(mpn_addmul_1) - push { r4-r11 } - - ands r6, n, #3 - sub n, n, #3 - beq L(b00) - cmp r6, #2 - bcc L(b01) - beq L(b10) - -L(b11): mov r6, #0 - cmn r13, #0 C carry clear - ldr u1, [up], #-4 - ldr w1, [rp], #-4 - mov r7, #0 - b L(mid) - -L(b00): ldrd u0, u1, [up] - ldrd w0, w1, [rp] - mov r6, #0 - umlal w0, r6, u0, v0 - cmn r13, #0 C carry clear - mov r7, #0 - str w0, [rp] - b L(mid) - -L(b10): ldrd u0, u1, [up], #8 - ldrd w0, w1, [rp] - mov r4, #0 - umlal w0, r4, u0, v0 - cmn r13, #0 C carry clear - mov r5, #0 - str w0, [rp], #8 - umlal w1, r5, u1, v0 - tst n, n - bmi L(end) - b L(top) - -L(b01): mov r4, #0 - ldr u1, [up], #4 - ldr w1, [rp], #4 - mov r5, #0 - umlal w1, r5, u1, v0 - tst n, n - bmi L(end) - - ALIGN(16) -L(top): ldrd u0, u1, [up, #0] - adcs r4, r4, w1 - ldrd w0, w1, [rp, #0] - mov r6, #0 - umlal w0, r6, u0, v0 C 1 2 - adcs r5, r5, w0 - mov r7, #0 - strd r4, r5, [rp, #-4] -L(mid): umlal w1, r7, u1, v0 C 2 3 - ldrd u0, u1, [up, #8] - adcs r6, r6, w1 - ldrd w0, w1, [rp, #8] - mov r4, #0 - umlal w0, r4, u0, v0 C 3 4 - adcs r7, r7, w0 - mov r5, #0 - strd r6, r7, [rp, #4] - umlal w1, r5, u1, v0 C 0 1 - sub n, n, #4 - add up, up, #16 - add rp, rp, #16 - tst n, n - bpl L(top) - -L(end): adcs r4, r4, w1 - str r4, [rp, #-4] - adc r0, r5, #0 - pop { r4-r11 } - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/aors_n.asm deleted file mode 100644 index dc3f83992e45231aef0e8a7e0a7cfc1fa3cb6523..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/aors_n.asm +++ /dev/null @@ -1,162 +0,0 @@ -dnl ARM mpn_add_n/mpn_sub_n optimised for A15. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb best -C StrongARM: - -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 3.55 2.5 -C Cortex-A15 1.27 this - -C This was a major improvement compared to the code we had before, but it might -C not be the best 8-way code possible. We've tried some permutations of auto- -C increments and separate pointer updates, but they all ran at the same speed -C on A15. - -C Architecture requirements: -C v5 - -C v5t - -C v5te ldrd strd -C v6 - -C v6t2 - -C v7a - - -define(`rp', `r0') -define(`up', `r1') -define(`vp', `r2') -define(`n', `r3') - -ifdef(`OPERATION_add_n', ` - define(`ADDSUBC', adcs) - define(`IFADD', `$1') - define(`SETCY', `cmp $1, #1') - define(`RETVAL', `adc r0, n, #0') - define(`RETVAL2', `adc r0, n, #1') - define(`func', mpn_add_n) - define(`func_nc', mpn_add_nc)') -ifdef(`OPERATION_sub_n', ` - define(`ADDSUBC', sbcs) - define(`IFADD', `') - define(`SETCY', `rsbs $1, $1, #0') - define(`RETVAL', `sbc r0, r0, r0 - and r0, r0, #1') - define(`RETVAL2', `RETVAL') - define(`func', mpn_sub_n) - define(`func_nc', mpn_sub_nc)') - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc) - -ASM_START() -PROLOGUE(func_nc) - ldr r12, [sp] - b L(ent) -EPILOGUE() -PROLOGUE(func) - mov r12, #0 -L(ent): push { r4-r9 } - - ands r6, n, #3 - mov n, n, lsr #2 - beq L(b00) - cmp r6, #2 - bcc L(b01) - beq L(b10) - -L(b11): ldr r5, [up], #4 - ldr r7, [vp], #4 - SETCY( r12) - ADDSUBC r9, r5, r7 - ldrd r4, r5, [up, #0] - ldrd r6, r7, [vp, #0] - str r9, [rp], #-4 - b L(lo) - -L(b00): ldrd r4, r5, [up], #-8 - ldrd r6, r7, [vp], #-8 - SETCY( r12) - sub rp, rp, #16 - b L(mid) - -L(b01): ldr r5, [up], #-4 - ldr r7, [vp], #-4 - SETCY( r12) - ADDSUBC r9, r5, r7 - str r9, [rp], #-12 - tst n, n - beq L(wd1) -L(gt1): ldrd r4, r5, [up, #8] - ldrd r6, r7, [vp, #8] - b L(mid) - -L(b10): ldrd r4, r5, [up] - ldrd r6, r7, [vp] - SETCY( r12) - sub rp, rp, #8 - b L(lo) - - ALIGN(16) -L(top): ldrd r4, r5, [up, #8] - ldrd r6, r7, [vp, #8] - strd r8, r9, [rp, #8] -L(mid): ADDSUBC r8, r4, r6 - ADDSUBC r9, r5, r7 - ldrd r4, r5, [up, #16] - ldrd r6, r7, [vp, #16] - strd r8, r9, [rp, #16] - ADDSUBC r8, r4, r6 - ADDSUBC r9, r5, r7 - sub n, n, #2 - tst n, n - bmi L(dne) - ldrd r4, r5, [up, #24] - ldrd r6, r7, [vp, #24] - strd r8, r9, [rp, #24] - ADDSUBC r8, r4, r6 - ADDSUBC r9, r5, r7 - ldrd r4, r5, [up, #32]! - ldrd r6, r7, [vp, #32]! - strd r8, r9, [rp, #32]! -L(lo): ADDSUBC r8, r4, r6 - ADDSUBC r9, r5, r7 - tst n, n - bne L(top) - -L(end): strd r8, r9, [rp, #8] -L(wd1): RETVAL - pop { r4-r9 } - bx r14 -L(dne): strd r8, r9, [rp, #24] - RETVAL2 - pop { r4-r9 } - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/cnd_aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/cnd_aors_n.asm deleted file mode 100644 index b9e5cd3f7934af0f7743dda7f7e7b95451e96899..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/cnd_aors_n.asm +++ /dev/null @@ -1,158 +0,0 @@ -dnl ARM mpn_cnd_add_n/mpn_cnd_sub_n optimised for A15. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb best -C StrongARM: - -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 3.75 3 -C Cortex-A15 1.78 this - -C This code does not run as well as one could have hoped, since 1.5 c/l seems -C realistic for this insn mix. - -C Architecture requirements: -C v5 - -C v5t - -C v5te ldrd strd -C v6 - -C v6t2 - -C v7a - - -define(`cnd',`r0') -define(`rp', `r1') -define(`up', `r2') -define(`vp', `r3') -define(`n', `r12') - -ifdef(`OPERATION_cnd_add_n', ` - define(`ADDSUB', adds) - define(`ADDSUBC', adcs) - define(`IFADD', `$1') - define(`INITCY', `cmn r0, #0') - define(`RETVAL', `adc r0, n, #0') - define(`RETVAL2', `adc r0, n, #1') - define(`func', mpn_cnd_add_n) - define(`func_nc', mpn_add_nc)') -ifdef(`OPERATION_cnd_sub_n', ` - define(`ADDSUB', subs) - define(`ADDSUBC', sbcs) - define(`IFADD', `') - define(`INITCY', `cmp r0, #0') - define(`RETVAL', `sbc r0, r0, r0 - and r0, r0, #1') - define(`RETVAL2', `RETVAL') - define(`func', mpn_cnd_sub_n) - define(`func_nc', mpn_sub_nc)') - -MULFUNC_PROLOGUE(mpn_cnd_add_n mpn_cnd_sub_n) - -ASM_START() -PROLOGUE(func) - ldr n, [sp] - push { r4-r9 } - - cmp cnd, #1 - sbc cnd, cnd, cnd C conditionally set to 0xffffffff - - ands r6, n, #3 - mov n, n, lsr #2 - beq L(b00) - cmp r6, #2 - bcc L(b01) - beq L(b10) - -L(b11): ldr r5, [up], #4 - ldr r7, [vp], #4 - bic r7, r7, cnd - ADDSUB r9, r5, r7 - ldrd r4, r5, [up, #0] - ldrd r6, r7, [vp, #0] - bic r6, r6, cnd - bic r7, r7, cnd - str r9, [rp], #-4 - b L(lo) - -L(b00): ldrd r4, r5, [up], #-8 - ldrd r6, r7, [vp], #-8 - bic r6, r6, cnd - bic r7, r7, cnd - INITCY - sub rp, rp, #16 - b L(mid) - -L(b01): ldr r5, [up], #-4 - ldr r7, [vp], #-4 - bic r7, r7, cnd - ADDSUB r9, r5, r7 - str r9, [rp], #-12 - tst n, n - beq L(wd1) -L(gt1): ldrd r4, r5, [up, #8] - ldrd r6, r7, [vp, #8] - bic r6, r6, cnd - bic r7, r7, cnd - b L(mid) - -L(b10): ldrd r4, r5, [up] - ldrd r6, r7, [vp] - bic r6, r6, cnd - bic r7, r7, cnd - INITCY - sub rp, rp, #8 - b L(lo) - - ALIGN(16) -L(top): ldrd r6, r7, [vp, #8] - ldrd r4, r5, [up, #8] - bic r6, r6, cnd - bic r7, r7, cnd - strd r8, r9, [rp, #8] -L(mid): ADDSUBC r8, r4, r6 - ADDSUBC r9, r5, r7 - ldrd r6, r7, [vp, #16]! - ldrd r4, r5, [up, #16]! - bic r6, r6, cnd - bic r7, r7, cnd - sub n, n, #1 - strd r8, r9, [rp, #16]! -L(lo): ADDSUBC r8, r4, r6 - ADDSUBC r9, r5, r7 - tst n, n - bne L(top) - -L(end): strd r8, r9, [rp, #8] -L(wd1): RETVAL - pop { r4-r9 } - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/com.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/com.asm deleted file mode 100644 index a258afe934e2dbc666a9b056ccaeeceaeeb766c9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/com.asm +++ /dev/null @@ -1,180 +0,0 @@ -dnl ARM mpn_com optimised for A15. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 2.5 -C Cortex-A15 1.0 - -C This is great A15 core register code, but it is a bit large. -C We use FEEDIN_VARIANT 1 to save some space, but use 8-way unrolling. - -C Architecture requirements: -C v5 - -C v5t - -C v5te ldrd strd -C v6 - -C v6t2 - -C v7a - - -define(`FEEDIN_VARIANT', 1) C alternatives: 0 1 2 -define(`UNROLL', 4x2) C alternatives: 4 4x2 - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') - -ASM_START() -PROLOGUE(mpn_com) - push { r4-r5,r8-r9 } - -ifelse(FEEDIN_VARIANT,0,` - ands r12, n, #3 - mov n, n, lsr #2 - beq L(b00a) - tst r12, #1 - beq L(bx0) - ldr r5, [up], #4 - mvn r9, r5 - str r9, [rp], #4 - tst r12, #2 - beq L(b00) -L(bx0): ldrd r4, r5, [up, #0] - sub rp, rp, #8 - b L(lo) -L(b00): tst n, n - beq L(wd1) -L(b00a):ldrd r4, r5, [up], #-8 - sub rp, rp, #16 - b L(mid) -') -ifelse(FEEDIN_VARIANT,1,` - and r12, n, #3 - mov n, n, lsr #2 - tst r12, #1 - beq L(bx0) - ldr r5, [up], #4 - mvn r9, r5 - str r9, [rp], #4 -L(bx0): tst r12, #2 - beq L(b00) - ldrd r4, r5, [up, #0] - sub rp, rp, #8 - b L(lo) -L(b00): tst n, n - beq L(wd1) - ldrd r4, r5, [up], #-8 - sub rp, rp, #16 - b L(mid) -') -ifelse(FEEDIN_VARIANT,2,` - ands r12, n, #3 - mov n, n, lsr #2 - beq L(b00) - cmp r12, #2 - bcc L(b01) - beq L(b10) - -L(b11): ldr r5, [up], #4 - mvn r9, r5 - ldrd r4, r5, [up, #0] - str r9, [rp], #-4 - b L(lo) - -L(b00): ldrd r4, r5, [up], #-8 - sub rp, rp, #16 - b L(mid) - -L(b01): ldr r5, [up], #-4 - mvn r9, r5 - str r9, [rp], #-12 - tst n, n - beq L(wd1) -L(gt1): ldrd r4, r5, [up, #8] - b L(mid) - -L(b10): ldrd r4, r5, [up] - sub rp, rp, #8 - b L(lo) -') - ALIGN(16) -ifelse(UNROLL,4,` -L(top): ldrd r4, r5, [up, #8] - strd r8, r9, [rp, #8] -L(mid): mvn r8, r4 - mvn r9, r5 - ldrd r4, r5, [up, #16]! - strd r8, r9, [rp, #16]! - sub n, n, #1 -L(lo): mvn r8, r4 - mvn r9, r5 - tst n, n - bne L(top) -') -ifelse(UNROLL,4x2,` -L(top): ldrd r4, r5, [up, #8] - strd r8, r9, [rp, #8] -L(mid): mvn r8, r4 - mvn r9, r5 - ldrd r4, r5, [up, #16] - strd r8, r9, [rp, #16] - mvn r8, r4 - mvn r9, r5 - sub n, n, #2 - tst n, n - bmi L(dne) - ldrd r4, r5, [up, #24] - strd r8, r9, [rp, #24] - mvn r8, r4 - mvn r9, r5 - ldrd r4, r5, [up, #32]! - strd r8, r9, [rp, #32]! -L(lo): mvn r8, r4 - mvn r9, r5 - tst n, n - bne L(top) -') - -L(end): strd r8, r9, [rp, #8] -L(wd1): pop { r4-r5,r8-r9 } - bx r14 -ifelse(UNROLL,4x2,` -L(dne): strd r8, r9, [rp, #24] - pop { r4-r5,r8-r9 } - bx r14 -') -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/gmp-mparam.h deleted file mode 100644 index 53301910c46af2fdac1daa8401d4a928a48a4e1a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/gmp-mparam.h +++ /dev/null @@ -1,193 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2003, 2009, 2010, 2012-2015 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 1700 MHz Cortex-A15 with Neon (in spite of file position) */ -/* FFT tuning limit = 25 M */ -/* Generated by tuneup.c, 2015-10-06, gcc 4.8 */ - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 3 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 2 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 9 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 102 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 9 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 15 - -#define MUL_TOOM22_THRESHOLD 28 -#define MUL_TOOM33_THRESHOLD 116 -#define MUL_TOOM44_THRESHOLD 169 -#define MUL_TOOM6H_THRESHOLD 399 -#define MUL_TOOM8H_THRESHOLD 597 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 113 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 115 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 115 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 115 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 160 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 38 -#define SQR_TOOM3_THRESHOLD 126 -#define SQR_TOOM4_THRESHOLD 345 -#define SQR_TOOM6_THRESHOLD 470 -#define SQR_TOOM8_THRESHOLD 644 - -#define MULMID_TOOM42_THRESHOLD 52 - -#define MULMOD_BNM1_THRESHOLD 17 -#define SQRMOD_BNM1_THRESHOLD 19 - -#define MUL_FFT_MODF_THRESHOLD 500 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 500, 5}, { 26, 6}, { 27, 7}, { 15, 6}, \ - { 31, 7}, { 19, 6}, { 39, 7}, { 25, 6}, \ - { 51, 7}, { 27, 8}, { 15, 7}, { 33, 8}, \ - { 19, 7}, { 41, 8}, { 23, 7}, { 51, 8}, \ - { 27, 9}, { 15, 8}, { 31, 7}, { 63, 8}, \ - { 39, 9}, { 23, 8}, { 51,10}, { 15, 9}, \ - { 31, 8}, { 67, 9}, { 47, 8}, { 99, 9}, \ - { 55,10}, { 31, 9}, { 79,10}, { 47, 9}, \ - { 95,11}, { 31,10}, { 63, 9}, { 135,10}, \ - { 79, 9}, { 159,10}, { 95, 9}, { 191,10}, \ - { 111,11}, { 63,10}, { 127, 9}, { 255,10}, \ - { 143, 9}, { 287,10}, { 159,11}, { 95,10}, \ - { 191, 9}, { 383, 8}, { 767,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,10}, { 271, 9}, \ - { 543,10}, { 287,11}, { 159,10}, { 319, 9}, \ - { 639,10}, { 335, 9}, { 671,10}, { 351,11}, \ - { 191,10}, { 383, 9}, { 767,10}, { 415,11}, \ - { 223,12}, { 127,11}, { 255,10}, { 543,11}, \ - { 287,10}, { 575,11}, { 319,10}, { 639,11}, \ - { 351,12}, { 191,11}, { 383,10}, { 767,11}, \ - { 447,13}, { 127,12}, { 255,11}, { 607,12}, \ - { 319,11}, { 735,12}, { 383,11}, { 831,12}, \ - { 447,11}, { 895,13}, { 255,12}, { 511,11}, \ - { 1023,12}, { 703,13}, { 383,12}, { 895,14}, \ - { 255,13}, { 511,12}, { 1151,13}, { 639,12}, \ - { 1471,13}, { 767,12}, { 1663,13}, { 895,14}, \ - { 511,13}, { 1023,12}, { 2111,13}, { 1151,12}, \ - { 2431,13}, { 1279,14}, { 767,13}, { 1535,12}, \ - { 3135,15}, { 511,14}, { 1023,13}, { 2303,14}, \ - { 1279,13}, { 2559,12}, { 5119,13}, { 2815,14}, \ - { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 122 -#define MUL_FFT_THRESHOLD 5312 - -#define SQR_FFT_MODF_THRESHOLD 468 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 468, 5}, { 25, 6}, { 27, 7}, { 15, 6}, \ - { 31, 7}, { 19, 6}, { 39, 7}, { 25, 6}, \ - { 51, 7}, { 27, 8}, { 15, 7}, { 33, 8}, \ - { 19, 7}, { 41, 8}, { 23, 7}, { 51, 8}, \ - { 27, 9}, { 15, 8}, { 31, 7}, { 63, 8}, \ - { 39, 9}, { 23, 8}, { 51,10}, { 15, 9}, \ - { 31, 8}, { 67, 9}, { 39, 8}, { 79, 9}, \ - { 47, 8}, { 95, 9}, { 55,10}, { 31, 9}, \ - { 79,10}, { 47, 9}, { 103,11}, { 31,10}, \ - { 63, 9}, { 135,10}, { 79, 9}, { 159,10}, \ - { 95, 9}, { 191,10}, { 111,11}, { 63,10}, \ - { 127, 9}, { 255,10}, { 143, 9}, { 287,10}, \ - { 159, 9}, { 319,11}, { 95,10}, { 191, 9}, \ - { 383, 8}, { 767,12}, { 63,11}, { 127,10}, \ - { 255, 9}, { 511,10}, { 271, 9}, { 543,10}, \ - { 287,11}, { 159,10}, { 319, 9}, { 639,10}, \ - { 335, 9}, { 671,10}, { 351, 9}, { 703,11}, \ - { 191,10}, { 383, 9}, { 767,10}, { 415,11}, \ - { 223,12}, { 127,11}, { 255,10}, { 511,11}, \ - { 287,10}, { 575,11}, { 319,10}, { 639,11}, \ - { 351,12}, { 191,11}, { 383,10}, { 767,11}, \ - { 447,13}, { 127,12}, { 255,11}, { 607,12}, \ - { 319,11}, { 735,12}, { 383,11}, { 831,12}, \ - { 447,13}, { 255,12}, { 511,11}, { 1023,12}, \ - { 575,11}, { 1151,12}, { 639,11}, { 1279,12}, \ - { 703,13}, { 383,12}, { 895,14}, { 255,13}, \ - { 511,12}, { 1151,13}, { 639,12}, { 1407,13}, \ - { 767,12}, { 1663,13}, { 895,14}, { 511,13}, \ - { 1023,12}, { 2047,13}, { 1151,12}, { 2431,13}, \ - { 1279,14}, { 767,13}, { 1535,12}, { 3135,15}, \ - { 511,14}, { 1023,13}, { 2175,14}, { 1279,13}, \ - { 2687,14}, { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 127 -#define SQR_FFT_THRESHOLD 4736 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 38 -#define MULLO_MUL_N_THRESHOLD 8907 -#define SQRLO_BASECASE_THRESHOLD 10 -#define SQRLO_DC_THRESHOLD 35 -#define SQRLO_SQR_THRESHOLD 8907 - -#define DC_DIV_QR_THRESHOLD 54 -#define DC_DIVAPPR_Q_THRESHOLD 266 -#define DC_BDIV_QR_THRESHOLD 48 -#define DC_BDIV_Q_THRESHOLD 296 - -#define INV_MULMOD_BNM1_THRESHOLD 54 -#define INV_NEWTON_THRESHOLD 274 -#define INV_APPR_THRESHOLD 276 - -#define BINV_NEWTON_THRESHOLD 348 -#define REDC_1_TO_REDC_2_THRESHOLD 59 -#define REDC_2_TO_REDC_N_THRESHOLD 0 /* always */ - -#define MU_DIV_QR_THRESHOLD 1787 -#define MU_DIVAPPR_Q_THRESHOLD 1787 -#define MUPI_DIV_QR_THRESHOLD 122 -#define MU_BDIV_QR_THRESHOLD 1528 -#define MU_BDIV_Q_THRESHOLD 1752 - -#define POWM_SEC_TABLE 1,32,224,398,2211 - -#define GET_STR_DC_THRESHOLD 16 -#define GET_STR_PRECOMPUTE_THRESHOLD 30 -#define SET_STR_DC_THRESHOLD 100 -#define SET_STR_PRECOMPUTE_THRESHOLD 807 - -#define FAC_DSC_THRESHOLD 309 -#define FAC_ODD_THRESHOLD 28 - -#define MATRIX22_STRASSEN_THRESHOLD 25 -#define HGCD_THRESHOLD 153 -#define HGCD_APPR_THRESHOLD 176 -#define HGCD_REDUCE_THRESHOLD 3014 -#define GCD_DC_THRESHOLD 667 -#define GCDEXT_DC_THRESHOLD 483 -#define JACOBI_BASE_METHOD 4 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/logops_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/logops_n.asm deleted file mode 100644 index 06026143e146df3d26a4a85080cfebdd551fc518..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/logops_n.asm +++ /dev/null @@ -1,253 +0,0 @@ -dnl ARM mpn_and_n, mpn_andn_n. mpn_nand_n, etc, optimised for A15. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb cycles/limb -C and andn ior xor nand iorn nior xnor -C StrongARM ? ? -C XScale ? ? -C Cortex-A7 ? ? -C Cortex-A8 ? ? -C Cortex-A9 3.5 3.56 -C Cortex-A15 1.27 1.64 - -C This is great A15 core register code, but it is a bit large. -C We use FEEDIN_VARIANT 1 to save some space, but use 8-way unrolling. - -C Architecture requirements: -C v5 - -C v5t - -C v5te ldrd strd -C v6 - -C v6t2 - -C v7a - - -define(`FEEDIN_VARIANT', 1) C alternatives: 0 1 2 -define(`UNROLL', 4x2) C alternatives: 4 4x2 - -define(`rp', `r0') -define(`up', `r1') -define(`vp', `r2') -define(`n', `r3') - -define(`POSTOP') - -ifdef(`OPERATION_and_n',` - define(`func', `mpn_and_n') - define(`LOGOP', `and $1, $2, $3')') -ifdef(`OPERATION_andn_n',` - define(`func', `mpn_andn_n') - define(`LOGOP', `bic $1, $2, $3')') -ifdef(`OPERATION_nand_n',` - define(`func', `mpn_nand_n') - define(`POSTOP', `mvn $1, $1') - define(`LOGOP', `and $1, $2, $3')') -ifdef(`OPERATION_ior_n',` - define(`func', `mpn_ior_n') - define(`LOGOP', `orr $1, $2, $3')') -ifdef(`OPERATION_iorn_n',` - define(`func', `mpn_iorn_n') - define(`POSTOP', `mvn $1, $1') - define(`LOGOP', `bic $1, $3, $2')') -ifdef(`OPERATION_nior_n',` - define(`func', `mpn_nior_n') - define(`POSTOP', `mvn $1, $1') - define(`LOGOP', `orr $1, $2, $3')') -ifdef(`OPERATION_xor_n',` - define(`func', `mpn_xor_n') - define(`LOGOP', `eor $1, $2, $3')') -ifdef(`OPERATION_xnor_n',` - define(`func', `mpn_xnor_n') - define(`POSTOP', `mvn $1, $1') - define(`LOGOP', `eor $1, $2, $3')') - -MULFUNC_PROLOGUE(mpn_and_n mpn_andn_n mpn_nand_n mpn_ior_n mpn_iorn_n mpn_nior_n mpn_xor_n mpn_xnor_n) - -ASM_START() -PROLOGUE(func) - push { r4-r9 } - -ifelse(FEEDIN_VARIANT,0,` - ands r6, n, #3 - mov n, n, lsr #2 - beq L(b00a) - tst r6, #1 - beq L(bx0) - ldr r5, [up], #4 - ldr r7, [vp], #4 - LOGOP( r9, r5, r7) - POSTOP( r9) - str r9, [rp], #4 - tst r6, #2 - beq L(b00) -L(bx0): ldrd r4, r5, [up, #0] - ldrd r6, r7, [vp, #0] - sub rp, rp, #8 - b L(lo) -L(b00): tst n, n - beq L(wd1) -L(b00a):ldrd r4, r5, [up], #-8 - ldrd r6, r7, [vp], #-8 - sub rp, rp, #16 - b L(mid) -') -ifelse(FEEDIN_VARIANT,1,` - and r6, n, #3 - mov n, n, lsr #2 - tst r6, #1 - beq L(bx0) - ldr r5, [up], #4 - ldr r7, [vp], #4 - LOGOP( r9, r5, r7) - POSTOP( r9) - str r9, [rp], #4 -L(bx0): tst r6, #2 - beq L(b00) - ldrd r4, r5, [up, #0] - ldrd r6, r7, [vp, #0] - sub rp, rp, #8 - b L(lo) -L(b00): tst n, n - beq L(wd1) - ldrd r4, r5, [up], #-8 - ldrd r6, r7, [vp], #-8 - sub rp, rp, #16 - b L(mid) -') -ifelse(FEEDIN_VARIANT,2,` - ands r6, n, #3 - mov n, n, lsr #2 - beq L(b00) - cmp r6, #2 - bcc L(b01) - beq L(b10) - -L(b11): ldr r5, [up], #4 - ldr r7, [vp], #4 - LOGOP( r9, r5, r7) - ldrd r4, r5, [up, #0] - ldrd r6, r7, [vp, #0] - POSTOP( r9) - str r9, [rp], #-4 - b L(lo) - -L(b00): ldrd r4, r5, [up], #-8 - ldrd r6, r7, [vp], #-8 - sub rp, rp, #16 - b L(mid) - -L(b01): ldr r5, [up], #-4 - ldr r7, [vp], #-4 - LOGOP( r9, r5, r7) - POSTOP( r9) - str r9, [rp], #-12 - tst n, n - beq L(wd1) -L(gt1): ldrd r4, r5, [up, #8] - ldrd r6, r7, [vp, #8] - b L(mid) - -L(b10): ldrd r4, r5, [up] - ldrd r6, r7, [vp] - sub rp, rp, #8 - b L(lo) -') - ALIGN(16) -ifelse(UNROLL,4,` -L(top): ldrd r4, r5, [up, #8] - ldrd r6, r7, [vp, #8] - POSTOP( r8) - POSTOP( r9) - strd r8, r9, [rp, #8] -L(mid): LOGOP( r8, r4, r6) - LOGOP( r9, r5, r7) - ldrd r4, r5, [up, #16]! - ldrd r6, r7, [vp, #16]! - POSTOP( r8) - POSTOP( r9) - strd r8, r9, [rp, #16]! - sub n, n, #1 -L(lo): LOGOP( r8, r4, r6) - LOGOP( r9, r5, r7) - tst n, n - bne L(top) -') -ifelse(UNROLL,4x2,` -L(top): ldrd r4, r5, [up, #8] - ldrd r6, r7, [vp, #8] - POSTOP( r8) - POSTOP( r9) - strd r8, r9, [rp, #8] -L(mid): LOGOP( r8, r4, r6) - LOGOP( r9, r5, r7) - ldrd r4, r5, [up, #16] - ldrd r6, r7, [vp, #16] - POSTOP( r8) - POSTOP( r9) - strd r8, r9, [rp, #16] - LOGOP( r8, r4, r6) - LOGOP( r9, r5, r7) - sub n, n, #2 - tst n, n - bmi L(dne) - ldrd r4, r5, [up, #24] - ldrd r6, r7, [vp, #24] - POSTOP( r8) - POSTOP( r9) - strd r8, r9, [rp, #24] - LOGOP( r8, r4, r6) - LOGOP( r9, r5, r7) - ldrd r4, r5, [up, #32]! - ldrd r6, r7, [vp, #32]! - POSTOP( r8) - POSTOP( r9) - strd r8, r9, [rp, #32]! -L(lo): LOGOP( r8, r4, r6) - LOGOP( r9, r5, r7) - tst n, n - bne L(top) -') - -L(end): POSTOP( r8) - POSTOP( r9) - strd r8, r9, [rp, #8] -L(wd1): pop { r4-r9 } - bx r14 -ifelse(UNROLL,4x2,` -L(dne): POSTOP( r8) - POSTOP( r9) - strd r8, r9, [rp, #24] - pop { r4-r9 } - bx r14 -') -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/mul_1.asm deleted file mode 100644 index 766ba5c57f22dd8a980e9cd3a90b7557351002a7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/mul_1.asm +++ /dev/null @@ -1,104 +0,0 @@ -dnl ARM mpn_mul_1 optimised for A15. - -dnl Copyright 2012, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb best -C StrongARM: - -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 5.25 3.25 -C Cortex-A15 2.25 this - - -C This runs well on A15 but very poorly on A9. By scheduling loads and adds -C it is possible to get good A9 performance as well, but at the cost of using -C many more (callee-saves) registers. - -C This is armv5 code, optimized for the armv7a cpu A15. Its location in the -C GMP file structure might be misleading. - - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') -define(`v0', `r3') - -ASM_START() -PROLOGUE(mpn_mul_1c) - ldr r12, [sp] - b L(ent) -EPILOGUE() -PROLOGUE(mpn_mul_1) - mov r12, #0 -L(ent): push {r4-r7} - - ldr r6, [up], #4 - tst n, #1 - beq L(bx0) - -L(bx1): umull r4, r7, r6, v0 - adds r4, r4, r12 - tst n, #2 - beq L(lo1) - b L(lo3) - -L(bx0): umull r4, r5, r6, v0 - adds r4, r4, r12 - tst n, #2 - beq L(lo0) - b L(lo2) - -L(top): ldr r6, [up], #4 - str r4, [rp], #4 - umull r4, r5, r6, v0 - adds r4, r4, r7 -L(lo0): ldr r6, [up], #4 - str r4, [rp], #4 - umull r4, r7, r6, v0 - adcs r4, r4, r5 -L(lo3): ldr r6, [up], #4 - str r4, [rp], #4 - umull r4, r5, r6, v0 - adcs r4, r4, r7 -L(lo2): ldr r6, [up], #4 - str r4, [rp], #4 - umull r4, r7, r6, v0 - adcs r4, r4, r5 -L(lo1): adc r7, r7, #0 - subs n, n, #4 - bgt L(top) - - str r4, [rp] - mov r0, r7 - pop {r4-r7} - bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/aorsorrlsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/aorsorrlsh1_n.asm deleted file mode 100644 index d8cfe3f78f27c6509fd5577c193e952f21ad2a30..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/aorsorrlsh1_n.asm +++ /dev/null @@ -1,43 +0,0 @@ -dnl ARM mpn_addlshC_n, mpn_sublshC_n, mpn_rsblshC_n - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -define(LSH, 1) - -ifdef(`OPERATION_addlsh1_n',`define(`DO_add')') -ifdef(`OPERATION_sublsh1_n',`define(`DO_sub')') -ifdef(`OPERATION_rsblsh1_n',`define(`DO_rsb')') - -MULFUNC_PROLOGUE(mpn_addlsh1_n mpn_sublsh1_n mpn_rsblsh1_n) - -include_mpn(`arm/v7a/cora15/neon/aorsorrlshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/aorsorrlsh2_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/aorsorrlsh2_n.asm deleted file mode 100644 index b48204d9269b39d579c8a9f1d3882b9dee6d118f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/aorsorrlsh2_n.asm +++ /dev/null @@ -1,43 +0,0 @@ -dnl ARM mpn_addlshC_n, mpn_sublshC_n, mpn_rsblshC_n - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -define(LSH, 2) - -ifdef(`OPERATION_addlsh2_n',`define(`DO_add')') -ifdef(`OPERATION_sublsh2_n',`define(`DO_sub')') -ifdef(`OPERATION_rsblsh2_n',`define(`DO_rsb')') - -MULFUNC_PROLOGUE(mpn_addlsh2_n mpn_sublsh2_n mpn_rsblsh2_n) - -include_mpn(`arm/v7a/cora15/neon/aorsorrlshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/aorsorrlshC_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/aorsorrlshC_n.asm deleted file mode 100644 index 16c34a2699d838459e956c5b4862f466bab7f4b9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/aorsorrlshC_n.asm +++ /dev/null @@ -1,144 +0,0 @@ -dnl ARM mpn_addlshC_n, mpn_sublshC_n, mpn_rsblshC_n - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -C cycles/limb -C StrongARM - -C XScale - -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 5.25 -C Cortex-A15 2.25 - -C TODO -C * Consider using 4-way feed-in code. -C * This is ad-hoc scheduled, perhaps unnecessarily so for A15, and perhaps -C insufficiently for A7 and A8. - -define(`rp', `r0') -define(`up', `r1') -define(`vp', `r2') -define(`n', `r3') - -ifdef(`DO_add', ` - define(`ADCSBCS', `adcs $1, $2, $3') - define(`CLRCY', `cmn r13, #1') - define(`RETVAL', `adc r0, $1, #0') - define(`func', mpn_addlsh`'LSH`'_n)') -ifdef(`DO_sub', ` - define(`ADCSBCS', `sbcs $1, $2, $3') - define(`CLRCY', `cmp r13, #0') - define(`RETVAL', `sbc $2, $2, $2 - cmn $2, #1 - adc r0, $1, #0') - define(`func', mpn_sublsh`'LSH`'_n)') -ifdef(`DO_rsb', ` - define(`ADCSBCS', `sbcs $1, $3, $2') - define(`CLRCY', `cmp r13, #0') - define(`RETVAL', `sbc r0, $1, #0') - define(`func', mpn_rsblsh`'LSH`'_n)') - - -ASM_START() -PROLOGUE(func) - push {r4-r10} - vmov.i8 d0, #0 C could feed carry through here - CLRCY - tst n, #1 - beq L(bb0) - -L(bb1): vld1.32 {d3[0]}, [vp]! - vsli.u32 d0, d3, #LSH - ldr r12, [up], #4 - vmov.32 r5, d0[0] - vshr.u32 d0, d3, #32-LSH - ADCSBCS( r12, r12, r5) - str r12, [rp], #4 - bics n, n, #1 - beq L(rtn) - -L(bb0): tst n, #2 - beq L(b00) - -L(b10): vld1.32 {d3}, [vp]! - vsli.u64 d0, d3, #LSH - ldmia up!, {r10,r12} - vmov r4, r5, d0 - vshr.u64 d0, d3, #64-LSH - ADCSBCS( r10, r10, r4) - ADCSBCS( r12, r12, r5) - stmia rp!, {r10,r12} - bics n, n, #2 - beq L(rtn) - -L(b00): vld1.32 {d2}, [vp]! - vsli.u64 d0, d2, #LSH - vshr.u64 d1, d2, #64-LSH - vld1.32 {d3}, [vp]! - vsli.u64 d1, d3, #LSH - vmov r6, r7, d0 - vshr.u64 d0, d3, #64-LSH - sub n, n, #4 - tst n, n - beq L(end) - - ALIGN(16) -L(top): ldmia up!, {r8,r9,r10,r12} - vld1.32 {d2}, [vp]! - vsli.u64 d0, d2, #LSH - vmov r4, r5, d1 - vshr.u64 d1, d2, #64-LSH - ADCSBCS( r8, r8, r6) - ADCSBCS( r9, r9, r7) - vld1.32 {d3}, [vp]! - vsli.u64 d1, d3, #LSH - vmov r6, r7, d0 - vshr.u64 d0, d3, #64-LSH - ADCSBCS( r10, r10, r4) - ADCSBCS( r12, r12, r5) - stmia rp!, {r8,r9,r10,r12} - sub n, n, #4 - tst n, n - bne L(top) - -L(end): ldmia up!, {r8,r9,r10,r12} - vmov r4, r5, d1 - ADCSBCS( r8, r8, r6) - ADCSBCS( r9, r9, r7) - ADCSBCS( r10, r10, r4) - ADCSBCS( r12, r12, r5) - stmia rp!, {r8,r9,r10,r12} -L(rtn): vmov.32 r0, d0[0] - RETVAL( r0, r1) - pop {r4-r10} - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/com.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/com.asm deleted file mode 100644 index 9e7a629287b6f1acaae6992b997845cc2eac0e5a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/com.asm +++ /dev/null @@ -1,97 +0,0 @@ -dnl ARM Neon mpn_com optimised for A15. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM ? -C XScale ? -C Cortex-A8 ? -C Cortex-A9 2.1 -C Cortex-A15 0.65 - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') - -ASM_START() -PROLOGUE(mpn_com) - cmp n, #7 - ble L(bc) - -C Perform a few initial operation until rp is 128-bit aligned - tst rp, #4 - beq L(al1) - vld1.32 {d0[0]}, [up]! - sub n, n, #1 - vmvn d0, d0 - vst1.32 {d0[0]}, [rp]! -L(al1): tst rp, #8 - beq L(al2) - vld1.32 {d0}, [up]! - sub n, n, #2 - vmvn d0, d0 - vst1.32 {d0}, [rp:64]! -L(al2): vld1.32 {q2}, [up]! - subs n, n, #12 - blt L(end) - - ALIGN(16) -L(top): vld1.32 {q0}, [up]! - vmvn q2, q2 - subs n, n, #8 - vst1.32 {q2}, [rp:128]! - vld1.32 {q2}, [up]! - vmvn q0, q0 - vst1.32 {q0}, [rp:128]! - bge L(top) - -L(end): vmvn q2, q2 - vst1.32 {q2}, [rp:128]! - -C Handle last 0-7 limbs. Note that rp is aligned after loop, but not when we -C arrive here via L(bc) -L(bc): tst n, #4 - beq L(tl1) - vld1.32 {q0}, [up]! - vmvn q0, q0 - vst1.32 {q0}, [rp]! -L(tl1): tst n, #2 - beq L(tl2) - vld1.32 {d0}, [up]! - vmvn d0, d0 - vst1.32 {d0}, [rp]! -L(tl2): tst n, #1 - beq L(tl3) - vld1.32 {d0[0]}, [up] - vmvn d0, d0 - vst1.32 {d0[0]}, [rp] -L(tl3): bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/copyd.asm deleted file mode 100644 index 98fe535def59bfd91c181503036f75739d0406ac..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/copyd.asm +++ /dev/null @@ -1,110 +0,0 @@ -dnl ARM Neon mpn_copyd optimised for A15. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM - -C XScale - -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 1.75 slower than core register code -C Cortex-A15 0.52 - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') - -ASM_START() -PROLOGUE(mpn_copyd) - add rp, rp, n, lsl #2 - add up, up, n, lsl #2 - - cmp n, #7 - ble L(bc) - -C Copy until rp is 128-bit aligned - tst rp, #4 - beq L(al1) - sub up, up, #4 - vld1.32 {d22[0]}, [up] - sub n, n, #1 - sub rp, rp, #4 - vst1.32 {d22[0]}, [rp] -L(al1): tst rp, #8 - beq L(al2) - sub up, up, #8 - vld1.32 {d22}, [up] - sub n, n, #2 - sub rp, rp, #8 - vst1.32 {d22}, [rp:64] -L(al2): sub up, up, #16 - vld1.32 {d26-d27}, [up] - subs n, n, #12 - sub rp, rp, #16 C offset rp for loop - blt L(end) - - sub up, up, #16 C offset up for loop - mov r12, #-16 - - ALIGN(16) -L(top): vld1.32 {d22-d23}, [up], r12 - vst1.32 {d26-d27}, [rp:128], r12 - vld1.32 {d26-d27}, [up], r12 - vst1.32 {d22-d23}, [rp:128], r12 - subs n, n, #8 - bge L(top) - - add up, up, #16 C undo up offset - C rp offset undoing folded -L(end): vst1.32 {d26-d27}, [rp:128] - -C Copy last 0-7 limbs. Note that rp is aligned after loop, but not when we -C arrive here via L(bc) -L(bc): tst n, #4 - beq L(tl1) - sub up, up, #16 - vld1.32 {d22-d23}, [up] - sub rp, rp, #16 - vst1.32 {d22-d23}, [rp] -L(tl1): tst n, #2 - beq L(tl2) - sub up, up, #8 - vld1.32 {d22}, [up] - sub rp, rp, #8 - vst1.32 {d22}, [rp] -L(tl2): tst n, #1 - beq L(tl3) - sub up, up, #4 - vld1.32 {d22[0]}, [up] - sub rp, rp, #4 - vst1.32 {d22[0]}, [rp] -L(tl3): bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/copyi.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/copyi.asm deleted file mode 100644 index 2e05afe5e86facf99607d263673226744337bbdb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/copyi.asm +++ /dev/null @@ -1,90 +0,0 @@ -dnl ARM Neon mpn_copyi optimised for A15. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM - -C XScale - -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 1.75 slower than core register code -C Cortex-A15 0.52 - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') - -ASM_START() -PROLOGUE(mpn_copyi) - cmp n, #7 - ble L(bc) - -C Copy until rp is 128-bit aligned - tst rp, #4 - beq L(al1) - vld1.32 {d22[0]}, [up]! - sub n, n, #1 - vst1.32 {d22[0]}, [rp]! -L(al1): tst rp, #8 - beq L(al2) - vld1.32 {d22}, [up]! - sub n, n, #2 - vst1.32 {d22}, [rp:64]! -L(al2): vld1.32 {d26-d27}, [up]! - subs n, n, #12 - blt L(end) - - ALIGN(16) -L(top): vld1.32 {d22-d23}, [up]! - vst1.32 {d26-d27}, [rp:128]! - vld1.32 {d26-d27}, [up]! - vst1.32 {d22-d23}, [rp:128]! - subs n, n, #8 - bge L(top) - -L(end): vst1.32 {d26-d27}, [rp:128]! - -C Copy last 0-7 limbs. Note that rp is aligned after loop, but not when we -C arrive here via L(bc) -L(bc): tst n, #4 - beq L(tl1) - vld1.32 {d22-d23}, [up]! - vst1.32 {d22-d23}, [rp]! -L(tl1): tst n, #2 - beq L(tl2) - vld1.32 {d22}, [up]! - vst1.32 {d22}, [rp]! -L(tl2): tst n, #1 - beq L(tl3) - vld1.32 {d22[0]}, [up] - vst1.32 {d22[0]}, [rp] -L(tl3): bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/rsh1aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/rsh1aors_n.asm deleted file mode 100644 index 2c11d6debd4b3cf4273ad50eea82ae9e5afc0f96..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/neon/rsh1aors_n.asm +++ /dev/null @@ -1,177 +0,0 @@ -dnl ARM Neon mpn_rsh1add_n, mpn_rsh1sub_n. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C StrongARM - -C XScale - -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 4-5 -C Cortex-A15 2.5 - -C TODO -C * Try to make this smaller, its size (384 bytes) is excessive. -C * Try to reach 2.25 c/l on A15, to match the addlsh_1 family. -C * This is ad-hoc scheduled, perhaps unnecessarily so for A15, and perhaps -C insufficiently for A7 and A8. - -define(`rp', `r0') -define(`up', `r1') -define(`vp', `r2') -define(`n', `r3') - -ifdef(`OPERATION_rsh1add_n', ` - define(`ADDSUBS', `adds $1, $2, $3') - define(`ADCSBCS', `adcs $1, $2, $3') - define(`IFADD', `$1') - define(`IFSUB', `') - define(`func', mpn_rsh1add_n)') -ifdef(`OPERATION_rsh1sub_n', ` - define(`ADDSUBS', `subs $1, $2, $3') - define(`ADCSBCS', `sbcs $1, $2, $3') - define(`IFADD', `') - define(`IFSUB', `$1') - define(`func', mpn_rsh1sub_n)') - -MULFUNC_PROLOGUE(mpn_rsh1add_n mpn_rsh1sub_n) - -ASM_START() -PROLOGUE(func) - push {r4-r10} - - ands r4, n, #3 - beq L(b00) - cmp r4, #2 - blo L(b01) - beq L(b10) - -L(b11): ldmia up!, {r9,r10,r12} - ldmia vp!, {r5,r6,r7} - ADDSUBS( r9, r9, r5) - vmov d4, r9, r9 - ADCSBCS( r10, r10, r6) - ADCSBCS( r12, r12, r7) - vshr.u64 d3, d4, #1 - vmov d1, r10, r12 - vsli.u64 d3, d1, #31 - vshr.u64 d2, d1, #1 - vst1.32 d3[0], [rp]! - bics n, n, #3 - beq L(wd2) -L(gt3): ldmia up!, {r8,r9,r10,r12} - ldmia vp!, {r4,r5,r6,r7} - b L(mi0) - -L(b10): ldmia up!, {r10,r12} - ldmia vp!, {r6,r7} - ADDSUBS( r10, r10, r6) - ADCSBCS( r12, r12, r7) - vmov d4, r10, r12 - bics n, n, #2 - vshr.u64 d2, d4, #1 - beq L(wd2) -L(gt2): ldmia up!, {r8,r9,r10,r12} - ldmia vp!, {r4,r5,r6,r7} - b L(mi0) - -L(b01): ldr r12, [up], #4 - ldr r7, [vp], #4 - ADDSUBS( r12, r12, r7) - vmov d4, r12, r12 - bics n, n, #1 - bne L(gt1) - mov r5, r12, lsr #1 -IFADD(` adc r1, n, #0') -IFSUB(` adc r1, n, #1') - bfi r5, r1, #31, #1 - str r5, [rp] - and r0, r12, #1 - pop {r4-r10} - bx r14 -L(gt1): ldmia up!, {r8,r9,r10,r12} - ldmia vp!, {r4,r5,r6,r7} - vshr.u64 d2, d4, #1 - ADCSBCS( r8, r8, r4) - ADCSBCS( r9, r9, r5) - vmov d0, r8, r9 - ADCSBCS( r10, r10, r6) - ADCSBCS( r12, r12, r7) - vsli.u64 d2, d0, #31 - vshr.u64 d3, d0, #1 - vst1.32 d2[0], [rp]! - b L(mi1) - -L(b00): ldmia up!, {r8,r9,r10,r12} - ldmia vp!, {r4,r5,r6,r7} - ADDSUBS( r8, r8, r4) - ADCSBCS( r9, r9, r5) - vmov d4, r8, r9 - ADCSBCS( r10, r10, r6) - ADCSBCS( r12, r12, r7) - vshr.u64 d3, d4, #1 - b L(mi1) - - ALIGN(16) -L(top): ldmia up!, {r8,r9,r10,r12} - ldmia vp!, {r4,r5,r6,r7} - vsli.u64 d3, d1, #63 - vshr.u64 d2, d1, #1 - vst1.32 d3, [rp]! -L(mi0): ADCSBCS( r8, r8, r4) - ADCSBCS( r9, r9, r5) - vmov d0, r8, r9 - ADCSBCS( r10, r10, r6) - ADCSBCS( r12, r12, r7) - vsli.u64 d2, d0, #63 - vshr.u64 d3, d0, #1 - vst1.32 d2, [rp]! -L(mi1): vmov d1, r10, r12 - sub n, n, #4 - tst n, n - bne L(top) - -L(end): vsli.u64 d3, d1, #63 - vshr.u64 d2, d1, #1 - vst1.32 d3, [rp]! -L(wd2): vmov r4, r5, d2 -IFADD(` adc r1, n, #0') -IFSUB(` adc r1, n, #1') - bfi r5, r1, #31, #1 - stm rp, {r4,r5} - -L(rtn): vmov.32 r0, d4[0] - and r0, r0, #1 - pop {r4-r10} - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/submul_1.asm deleted file mode 100644 index ed7bfe820b68e2af3eb3bcdc97092aad728e295e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora15/submul_1.asm +++ /dev/null @@ -1,159 +0,0 @@ -dnl ARM mpn_submul_1 optimised for A15. - -dnl Copyright 2012, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb best -C StrongARM: - -C XScale ? -C Cortex-A7 ? -C Cortex-A8 ? -C Cortex-A9 5.75 3.75 -C Cortex-A15 2.32 this - -C This code uses umlal and umaal for adding in the rp[] data, keeping the -C recurrency path separate from any multiply instructions. It performs well on -C A15, but not quite at the multiply bandwidth like the corresponding addmul_1 -C code. -C -C We don't use r12 due to ldrd and strd limitations. -C -C This loop complements U on the fly, -C U' = B^n - 1 - U -C and then uses that -C R - U*v = R + U'*v + v - B^n v - -C Architecture requirements: -C v5 - -C v5t - -C v5te ldrd strd -C v6 umaal -C v6t2 - -C v7a - - -define(`rp', `r0') -define(`up', `r1') -define(`n', `r2') -define(`v0', `r3') - -define(`w0', `r10') define(`w1', `r11') -define(`u0', `r8') define(`u1', `r9') - -ASM_START() -PROLOGUE(mpn_submul_1) - sub sp, sp, #32 - strd r10, r11, [sp, #24] - strd r8, r9, [sp, #16] - strd r6, r7, [sp, #8] - strd r4, r5, [sp, #0] -C push { r4-r11 } - - ands r6, n, #3 - sub n, n, #3 - beq L(b00) - cmp r6, #2 - bcc L(b01) - beq L(b10) - -L(b11): mov r6, #0 - ldr u1, [up], #-4 - ldr w1, [rp], #-16 - mvn u1, u1 - adds r7, v0, #0 - b L(mid) - -L(b00): ldrd u0, u1, [up] - ldrd w0, w1, [rp], #-12 - mvn u0, u0 - mvn u1, u1 - mov r6, v0 - umaal w0, r6, u0, v0 - cmn r13, #0 C carry clear - mov r7, #0 - str w0, [rp, #12] - b L(mid) - -L(b10): ldrd u0, u1, [up], #8 - ldrd w0, w1, [rp] - mvn u0, u0 - mvn u1, u1 - mov r4, v0 - umaal w0, r4, u0, v0 - mov r5, #0 - str w0, [rp], #-4 - umlal w1, r5, u1, v0 - adds n, n, #0 - bmi L(end) - b L(top) - -L(b01): ldr u1, [up], #4 - ldr w1, [rp], #-8 - mvn u1, u1 - mov r5, v0 - mov r4, #0 - umaal w1, r5, u1, v0 - tst n, n - bmi L(end) - -C ALIGN(16) -L(top): ldrd u0, u1, [up, #0] - adcs r4, r4, w1 - mvn u0, u0 - ldrd w0, w1, [rp, #12] - mvn u1, u1 - mov r6, #0 - umlal w0, r6, u0, v0 C 1 2 - adcs r5, r5, w0 - mov r7, #0 - strd r4, r5, [rp, #8] -L(mid): umaal w1, r7, u1, v0 C 2 3 - ldrd u0, u1, [up, #8] - add up, up, #16 - adcs r6, r6, w1 - mvn u0, u0 - ldrd w0, w1, [rp, #20] - mvn u1, u1 - mov r4, #0 - umlal w0, r4, u0, v0 C 3 4 - adcs r7, r7, w0 - mov r5, #0 - strd r6, r7, [rp, #16]! - sub n, n, #4 - umlal w1, r5, u1, v0 C 0 1 - tst n, n - bpl L(top) - -L(end): adcs r4, r4, w1 - str r4, [rp, #8] - adc r0, r5, #0 - sub r0, v0, r0 - pop { r4-r11 } - bx r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora7/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora7/gmp-mparam.h deleted file mode 100644 index dbb0ab46f6fb3c419665542210ba2fc3ca772f0d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora7/gmp-mparam.h +++ /dev/null @@ -1,194 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2003, 2009, 2010, 2012, 2015 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 900 MHz Cortex-A7 (raspberry pi2) */ -/* FFT tuning limit = 25 M */ -/* Generated by tuneup.c, 2015-05-15, gcc 4.6 */ - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 3 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 6 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 7 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD MP_SIZE_T_MAX -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 18 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 16 -#define DIV_QR_1_UNNORM_THRESHOLD 1 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 47 - -#define MUL_TOOM22_THRESHOLD 39 -#define MUL_TOOM33_THRESHOLD 129 -#define MUL_TOOM44_THRESHOLD 195 -#define MUL_TOOM6H_THRESHOLD 414 -#define MUL_TOOM8H_THRESHOLD 478 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 129 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 183 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 129 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 145 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 191 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 52 -#define SQR_TOOM3_THRESHOLD 162 -#define SQR_TOOM4_THRESHOLD 280 -#define SQR_TOOM6_THRESHOLD 399 -#define SQR_TOOM8_THRESHOLD 567 - -#define MULMID_TOOM42_THRESHOLD 58 - -#define MULMOD_BNM1_THRESHOLD 22 -#define SQRMOD_BNM1_THRESHOLD 27 - -#define MUL_FFT_MODF_THRESHOLD 636 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 636, 5}, { 28, 6}, { 15, 5}, { 31, 6}, \ - { 29, 7}, { 15, 6}, { 33, 7}, { 17, 6}, \ - { 35, 7}, { 19, 6}, { 39, 7}, { 29, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 43, 8}, \ - { 23, 7}, { 49, 8}, { 27, 7}, { 55, 8}, \ - { 31, 7}, { 63, 8}, { 43, 9}, { 23, 8}, \ - { 55, 9}, { 31, 8}, { 67, 9}, { 39, 8}, \ - { 83, 9}, { 47, 8}, { 95, 9}, { 55,10}, \ - { 31, 9}, { 79,10}, { 47, 9}, { 103,11}, \ - { 31,10}, { 63, 9}, { 135,10}, { 79, 9}, \ - { 159,10}, { 95, 9}, { 191,10}, { 111,11}, \ - { 63,10}, { 159,11}, { 95,10}, { 191,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 511,10}, \ - { 271, 9}, { 543,11}, { 159,10}, { 319, 9}, \ - { 639,10}, { 335, 9}, { 671,11}, { 191,10}, \ - { 383, 9}, { 767,10}, { 399, 9}, { 799,11}, \ - { 223,12}, { 127,11}, { 255,10}, { 543,11}, \ - { 287,10}, { 607,11}, { 319,10}, { 671,11}, \ - { 351,12}, { 191,11}, { 383,10}, { 799,11}, \ - { 415,13}, { 127,12}, { 255,11}, { 543,10}, \ - { 1087,11}, { 607,12}, { 319,11}, { 735,12}, \ - { 383,11}, { 863,12}, { 447,11}, { 959,13}, \ - { 255,12}, { 511,11}, { 1087,12}, { 575,11}, \ - { 1215,12}, { 703,13}, { 383,12}, { 767,11}, \ - { 1535,12}, { 959,14}, { 255,13}, { 511,12}, \ - { 1215,13}, { 639,12}, { 1471,13}, { 767,12}, \ - { 1663,13}, { 895,12}, { 1855,14}, { 511,13}, \ - { 1023,12}, { 2111,13}, { 1151,12}, { 2431,13}, \ - { 1407,14}, { 767,13}, { 1663,12}, { 3327,13}, \ - { 1791,15}, { 511,14}, { 1023,13}, { 2431,14}, \ - { 1279,13}, { 2815,14}, { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 124 -#define MUL_FFT_THRESHOLD 5760 - -#define SQR_FFT_MODF_THRESHOLD 555 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 555, 5}, { 28, 6}, { 15, 5}, { 31, 6}, \ - { 29, 7}, { 15, 6}, { 33, 7}, { 17, 6}, \ - { 36, 7}, { 19, 6}, { 39, 7}, { 29, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 43, 8}, \ - { 23, 7}, { 49, 8}, { 31, 7}, { 63, 8}, \ - { 43, 9}, { 23, 8}, { 55, 9}, { 31, 8}, \ - { 67, 9}, { 39, 8}, { 79, 9}, { 47, 8}, \ - { 95, 9}, { 55,10}, { 31, 9}, { 79,10}, \ - { 47, 9}, { 95,11}, { 31,10}, { 63, 9}, \ - { 135,10}, { 79, 9}, { 159,10}, { 95, 9}, \ - { 191,10}, { 111,11}, { 63,10}, { 143, 9}, \ - { 287,10}, { 159,11}, { 95,10}, { 191,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 511, 8}, \ - { 1023, 9}, { 543,10}, { 287,11}, { 159,10}, \ - { 319, 9}, { 639,10}, { 335, 9}, { 671,10}, \ - { 351,11}, { 191,10}, { 383, 9}, { 767,10}, \ - { 399, 9}, { 799,10}, { 415,12}, { 127,11}, \ - { 255,10}, { 511, 9}, { 1023,10}, { 543,11}, \ - { 287,10}, { 607,11}, { 319,10}, { 671,11}, \ - { 351,12}, { 191,11}, { 383,10}, { 799,11}, \ - { 415,10}, { 831,13}, { 127,12}, { 255,11}, \ - { 511,10}, { 1023,11}, { 543,10}, { 1087,11}, \ - { 607,12}, { 319,11}, { 735,12}, { 383,11}, \ - { 863,12}, { 447,11}, { 991,12}, { 511,11}, \ - { 1087,12}, { 575,11}, { 1215,12}, { 639,11}, \ - { 1279,12}, { 703,13}, { 383,12}, { 959,13}, \ - { 511,12}, { 1215,13}, { 639,12}, { 1471,13}, \ - { 767,12}, { 1663,13}, { 895,12}, { 1855,14}, \ - { 511,13}, { 1023,12}, { 2111,13}, { 1151,12}, \ - { 2431,13}, { 1407,14}, { 767,13}, { 1663,12}, \ - { 3327,13}, { 1791,15}, { 511,14}, { 1023,13}, \ - { 2431,14}, { 1279,13}, { 2815,14}, { 16384,15}, \ - { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 129 -#define SQR_FFT_THRESHOLD 4736 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 27 -#define MULLO_MUL_N_THRESHOLD 11278 -#define SQRLO_BASECASE_THRESHOLD 5 -#define SQRLO_DC_THRESHOLD 30 -#define SQRLO_SQR_THRESHOLD 8907 - -#define DC_DIV_QR_THRESHOLD 32 -#define DC_DIVAPPR_Q_THRESHOLD 89 -#define DC_BDIV_QR_THRESHOLD 39 -#define DC_BDIV_Q_THRESHOLD 112 - -#define INV_MULMOD_BNM1_THRESHOLD 76 -#define INV_NEWTON_THRESHOLD 110 -#define INV_APPR_THRESHOLD 98 - -#define BINV_NEWTON_THRESHOLD 214 -#define REDC_1_TO_REDC_2_THRESHOLD 4 -#define REDC_2_TO_REDC_N_THRESHOLD 122 - -#define MU_DIV_QR_THRESHOLD 1718 -#define MU_DIVAPPR_Q_THRESHOLD 1685 -#define MUPI_DIV_QR_THRESHOLD 54 -#define MU_BDIV_QR_THRESHOLD 1470 -#define MU_BDIV_Q_THRESHOLD 1685 - -#define POWM_SEC_TABLE 1,16,102,615,2016 - -#define GET_STR_DC_THRESHOLD 29 -#define GET_STR_PRECOMPUTE_THRESHOLD 57 -#define SET_STR_DC_THRESHOLD 272 -#define SET_STR_PRECOMPUTE_THRESHOLD 788 - -#define FAC_DSC_THRESHOLD 360 -#define FAC_ODD_THRESHOLD 55 - -#define MATRIX22_STRASSEN_THRESHOLD 27 -#define HGCD_THRESHOLD 55 -#define HGCD_APPR_THRESHOLD 51 -#define HGCD_REDUCE_THRESHOLD 3389 -#define GCD_DC_THRESHOLD 168 -#define GCDEXT_DC_THRESHOLD 189 -#define JACOBI_BASE_METHOD 1 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora8/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora8/gmp-mparam.h deleted file mode 100644 index 85205fd50f01a86fba48a3b7813071b95c602ba1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora8/gmp-mparam.h +++ /dev/null @@ -1,207 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2003, 2009, 2010, 2012, 2015 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 1000 MHz Cortex-A8 (beaglebone black) */ -/* FFT tuning limit = 10 M */ -/* Generated by tuneup.c, 2015-10-05, gcc 4.6 */ - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 3 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 5 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD MP_SIZE_T_MAX -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 12 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 28 - -#define MUL_TOOM22_THRESHOLD 39 -#define MUL_TOOM33_THRESHOLD 129 -#define MUL_TOOM44_THRESHOLD 220 -#define MUL_TOOM6H_THRESHOLD 366 -#define MUL_TOOM8H_THRESHOLD 620 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 129 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 179 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 139 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 149 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 193 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 44 -#define SQR_TOOM3_THRESHOLD 145 -#define SQR_TOOM4_THRESHOLD 384 -#define SQR_TOOM6_THRESHOLD 414 -#define SQR_TOOM8_THRESHOLD 547 - -#define MULMID_TOOM42_THRESHOLD 40 - -#define MULMOD_BNM1_THRESHOLD 22 -#define SQRMOD_BNM1_THRESHOLD 25 - -#define MUL_FFT_MODF_THRESHOLD 476 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 476, 5}, { 28, 6}, { 15, 5}, { 31, 6}, \ - { 28, 7}, { 15, 6}, { 33, 7}, { 17, 6}, \ - { 35, 7}, { 19, 6}, { 39, 7}, { 27, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 43, 8}, \ - { 23, 7}, { 49, 8}, { 27, 7}, { 55, 8}, \ - { 31, 7}, { 63, 8}, { 43, 9}, { 23, 8}, \ - { 55, 9}, { 31, 8}, { 71, 9}, { 39, 8}, \ - { 83, 9}, { 47, 8}, { 99, 9}, { 55,10}, \ - { 31, 9}, { 63, 8}, { 127, 9}, { 87,10}, \ - { 47, 9}, { 103,11}, { 31,10}, { 63, 9}, \ - { 143,10}, { 79, 9}, { 167,10}, { 95, 9}, \ - { 191,10}, { 111,11}, { 63,10}, { 127, 9}, \ - { 255,10}, { 143, 9}, { 287, 8}, { 575,10}, \ - { 159, 9}, { 319,11}, { 95,10}, { 191, 9}, \ - { 383, 8}, { 767, 9}, { 399,10}, { 207,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 511,10}, \ - { 271, 9}, { 543,10}, { 287, 9}, { 575,11}, \ - { 159,10}, { 319, 9}, { 639,10}, { 335, 9}, \ - { 671,10}, { 351, 9}, { 703,11}, { 191,10}, \ - { 383, 9}, { 767,10}, { 399, 9}, { 799,10}, \ - { 415, 9}, { 831,11}, { 223,12}, { 127,11}, \ - { 255,10}, { 511, 9}, { 1023,10}, { 543,11}, \ - { 287,10}, { 607, 9}, { 1215,11}, { 319,10}, \ - { 671,11}, { 351,10}, { 703,12}, { 191,11}, \ - { 383,10}, { 799,11}, { 415,10}, { 863,11}, \ - { 447,13}, { 127,12}, { 255,11}, { 511,10}, \ - { 1023,11}, { 543,10}, { 1087,11}, { 607,12}, \ - { 319,11}, { 671,10}, { 1343,11}, { 735,12}, \ - { 383,11}, { 799,10}, { 1599,11}, { 863,12}, \ - { 447,11}, { 959,13}, { 255,12}, { 511,11}, \ - { 1087,12}, { 575,11}, { 1215,12}, { 639,11}, \ - { 1343,12}, { 703,11}, { 1407,13}, { 383,12}, \ - { 767,11}, { 1599,12}, { 831,11}, { 1663,12}, \ - { 959,14}, { 255,13}, { 511,12}, { 1215,13}, \ - { 639,12}, { 1471,13}, { 767,12}, { 1663,13}, \ - { 895,12}, { 1791,14}, { 511,13}, { 1023,12}, \ - { 2111,13}, { 1151,12}, { 2431,13}, { 8192,14}, \ - { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 150 -#define MUL_FFT_THRESHOLD 7552 - -#define SQR_FFT_MODF_THRESHOLD 428 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 428, 5}, { 25, 6}, { 13, 5}, { 27, 6}, \ - { 25, 7}, { 13, 6}, { 28, 7}, { 15, 6}, \ - { 32, 7}, { 17, 6}, { 35, 7}, { 19, 6}, \ - { 39, 7}, { 27, 8}, { 15, 7}, { 35, 8}, \ - { 19, 7}, { 41, 8}, { 23, 7}, { 49, 8}, \ - { 27, 9}, { 15, 8}, { 39, 9}, { 23, 8}, \ - { 55,10}, { 15, 9}, { 31, 8}, { 67, 9}, \ - { 39, 8}, { 83, 9}, { 47, 8}, { 95, 9}, \ - { 55,10}, { 31, 9}, { 79,10}, { 47, 9}, \ - { 103,11}, { 31,10}, { 63, 9}, { 135,10}, \ - { 79, 9}, { 159, 8}, { 319, 9}, { 167,10}, \ - { 95, 9}, { 191,10}, { 111,11}, { 63,10}, \ - { 127, 9}, { 255, 8}, { 511, 9}, { 271,10}, \ - { 143, 9}, { 287, 8}, { 575, 9}, { 303,10}, \ - { 159, 9}, { 319,11}, { 95,10}, { 191, 9}, \ - { 383, 8}, { 767, 9}, { 399,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,10}, { 271, 9}, \ - { 543,10}, { 287, 9}, { 575,10}, { 303,11}, \ - { 159,10}, { 319, 9}, { 639,10}, { 335, 9}, \ - { 671,10}, { 351, 9}, { 703,10}, { 367,11}, \ - { 191,10}, { 383, 9}, { 767,10}, { 399, 9}, \ - { 799,10}, { 415, 9}, { 831,11}, { 223,10}, \ - { 447,12}, { 127,11}, { 255,10}, { 511, 9}, \ - { 1023,10}, { 543,11}, { 287,10}, { 607,11}, \ - { 319,10}, { 671,11}, { 351,10}, { 735,12}, \ - { 191,11}, { 383,10}, { 799,11}, { 415,10}, \ - { 863,11}, { 447,10}, { 895,13}, { 127,12}, \ - { 255,11}, { 511,10}, { 1023,11}, { 543,10}, \ - { 1087,11}, { 607,12}, { 319,11}, { 671,10}, \ - { 1343,11}, { 735,12}, { 383,11}, { 799,10}, \ - { 1599,11}, { 863,12}, { 447,11}, { 959,13}, \ - { 255,12}, { 511,11}, { 1087,12}, { 575,11}, \ - { 1215,12}, { 639,11}, { 1343,12}, { 703,11}, \ - { 1407,13}, { 383,12}, { 767,11}, { 1599,12}, \ - { 831,11}, { 1663,12}, { 959,14}, { 255,13}, \ - { 511,12}, { 1215,13}, { 639,12}, { 1471,13}, \ - { 767,12}, { 1663,13}, { 895,12}, { 1919,14}, \ - { 511,13}, { 1023,12}, { 2111,13}, { 1151,12}, \ - { 2431,13}, { 8192,14}, { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 156 -#define SQR_FFT_THRESHOLD 3712 - -#define MULLO_BASECASE_THRESHOLD 19 -#define MULLO_DC_THRESHOLD 0 /* never mpn_mullo_basecase */ -#define MULLO_MUL_N_THRESHOLD 22 -#define SQRLO_BASECASE_THRESHOLD 13 -#define SQRLO_DC_THRESHOLD 14 -#define SQRLO_SQR_THRESHOLD 7246 - -#define DC_DIV_QR_THRESHOLD 23 -#define DC_DIVAPPR_Q_THRESHOLD 64 -#define DC_BDIV_QR_THRESHOLD 25 -#define DC_BDIV_Q_THRESHOLD 56 - -#define INV_MULMOD_BNM1_THRESHOLD 77 -#define INV_NEWTON_THRESHOLD 31 -#define INV_APPR_THRESHOLD 37 - -#define BINV_NEWTON_THRESHOLD 166 -#define REDC_1_TO_REDC_2_THRESHOLD 0 /* always */ -#define REDC_2_TO_REDC_N_THRESHOLD 198 - -#define MU_DIV_QR_THRESHOLD 1787 -#define MU_DIVAPPR_Q_THRESHOLD 1558 -#define MUPI_DIV_QR_THRESHOLD 45 -#define MU_BDIV_QR_THRESHOLD 1718 -#define MU_BDIV_Q_THRESHOLD 1685 - -#define POWM_SEC_TABLE 1,19,101,371,1486 - -#define GET_STR_DC_THRESHOLD 21 -#define GET_STR_PRECOMPUTE_THRESHOLD 38 -#define SET_STR_DC_THRESHOLD 146 -#define SET_STR_PRECOMPUTE_THRESHOLD 531 - -#define FAC_DSC_THRESHOLD 155 -#define FAC_ODD_THRESHOLD 24 - -#define MATRIX22_STRASSEN_THRESHOLD 24 -#define HGCD_THRESHOLD 42 -#define HGCD_APPR_THRESHOLD 50 -#define HGCD_REDUCE_THRESHOLD 3664 -#define GCD_DC_THRESHOLD 156 -#define GCDEXT_DC_THRESHOLD 116 -#define JACOBI_BASE_METHOD 4 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora9/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora9/gmp-mparam.h deleted file mode 100644 index b1ad6b4e8eedb2f1216c6170286e6a52016a4fdb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm/v7a/cora9/gmp-mparam.h +++ /dev/null @@ -1,209 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2003, 2009, 2010, 2012-2015 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 1000 MHz Cortex-A9 */ -/* FFT tuning limit = 25 M */ -/* Generated by tuneup.c, 2014-03-12, gcc 4.6 */ - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 5 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 4 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 8 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD MP_SIZE_T_MAX -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 12 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 5 -#define DIV_QR_1_UNNORM_THRESHOLD 1 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 20 - -#define MUL_TOOM22_THRESHOLD 45 -#define MUL_TOOM33_THRESHOLD 129 -#define MUL_TOOM44_THRESHOLD 387 -#define MUL_TOOM6H_THRESHOLD 537 -#define MUL_TOOM8H_THRESHOLD 774 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 141 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 237 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 141 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 258 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 211 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 64 -#define SQR_TOOM3_THRESHOLD 189 -#define SQR_TOOM4_THRESHOLD 517 -#define SQR_TOOM6_THRESHOLD 656 -#define SQR_TOOM8_THRESHOLD 0 /* always */ - -#define MULMID_TOOM42_THRESHOLD 62 - -#define MULMOD_BNM1_THRESHOLD 23 -#define SQRMOD_BNM1_THRESHOLD 28 - -#define MUL_FFT_MODF_THRESHOLD 630 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 630, 5}, { 29, 6}, { 15, 5}, { 33, 6}, \ - { 17, 5}, { 35, 6}, { 36, 7}, { 19, 6}, \ - { 40, 7}, { 21, 6}, { 43, 7}, { 23, 6}, \ - { 47, 7}, { 25, 6}, { 51, 7}, { 27, 6}, \ - { 55, 7}, { 29, 8}, { 15, 7}, { 37, 8}, \ - { 19, 7}, { 43, 8}, { 23, 7}, { 51, 8}, \ - { 27, 7}, { 57, 9}, { 15, 8}, { 31, 7}, \ - { 65, 8}, { 35, 7}, { 71, 8}, { 43, 9}, \ - { 23, 8}, { 55, 9}, { 31, 8}, { 71, 9}, \ - { 39, 8}, { 83, 9}, { 47, 8}, { 99, 9}, \ - { 55,10}, { 31, 9}, { 79,10}, { 47, 9}, \ - { 103,11}, { 31,10}, { 63, 9}, { 135,10}, \ - { 79, 9}, { 167,10}, { 95, 9}, { 191,10}, \ - { 111,11}, { 63,10}, { 159,11}, { 95,10}, \ - { 191, 9}, { 383,12}, { 63,11}, { 127,10}, \ - { 255, 9}, { 511,10}, { 271, 9}, { 543,11}, \ - { 159,10}, { 319, 9}, { 639,10}, { 335, 9}, \ - { 671,11}, { 191,10}, { 383, 9}, { 767,10}, \ - { 399, 9}, { 799,10}, { 415,11}, { 223,12}, \ - { 127,11}, { 255,10}, { 511, 9}, { 1023,10}, \ - { 543,11}, { 287,10}, { 607,11}, { 319,10}, \ - { 671,11}, { 351,12}, { 191,11}, { 383,10}, \ - { 799,11}, { 415,10}, { 831,13}, { 127,12}, \ - { 255,11}, { 511,10}, { 1023,11}, { 543,10}, \ - { 1087,11}, { 607,12}, { 319,11}, { 735,12}, \ - { 383,11}, { 831,12}, { 447,11}, { 927,13}, \ - { 255,12}, { 511,11}, { 1087,12}, { 575,11}, \ - { 1215,12}, { 639,11}, { 1343,12}, { 703,13}, \ - { 383,12}, { 767,11}, { 1535,12}, { 831,11}, \ - { 1663,12}, { 895,14}, { 255,13}, { 511,12}, \ - { 1023,11}, { 2047,12}, { 1151,13}, { 639,12}, \ - { 1407,13}, { 767,12}, { 1663,13}, { 895,12}, \ - { 1791,14}, { 511,13}, { 1023,12}, { 2111,13}, \ - { 1151,12}, { 2431,13}, { 1279,12}, { 2559,13}, \ - { 1407,14}, { 767,13}, { 1535,12}, { 3071,13}, \ - { 1663,12}, { 3455,13}, { 1791,15}, { 511,14}, \ - { 1023,13}, { 2047,12}, { 4095,13}, { 2175,12}, \ - { 4479,13}, { 2431,14}, { 1279,13}, { 2559,12}, \ - { 5119,13}, { 2815,12}, { 5631,14}, { 16384,15}, \ - { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 157 -#define MUL_FFT_THRESHOLD 6784 - -#define SQR_FFT_MODF_THRESHOLD 565 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 565, 5}, { 19, 4}, { 40, 5}, { 21, 4}, \ - { 43, 5}, { 28, 6}, { 15, 5}, { 35, 6}, \ - { 29, 7}, { 15, 6}, { 37, 7}, { 19, 6}, \ - { 39, 7}, { 21, 6}, { 43, 7}, { 23, 6}, \ - { 47, 7}, { 29, 8}, { 15, 7}, { 37, 8}, \ - { 19, 7}, { 43, 8}, { 23, 7}, { 51, 8}, \ - { 27, 7}, { 55, 9}, { 15, 8}, { 31, 7}, \ - { 65, 8}, { 35, 7}, { 71, 8}, { 43, 9}, \ - { 23, 8}, { 55,10}, { 15, 9}, { 31, 8}, \ - { 71, 9}, { 39, 8}, { 83, 9}, { 47, 8}, \ - { 95, 9}, { 55,10}, { 31, 9}, { 79,10}, \ - { 47, 9}, { 103,11}, { 31,10}, { 63, 9}, \ - { 135,10}, { 79, 9}, { 159,10}, { 95, 9}, \ - { 191,10}, { 111,11}, { 63,10}, { 159,11}, \ - { 95,10}, { 191, 9}, { 383,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511, 8}, { 1023, 9}, \ - { 527,10}, { 271, 9}, { 543,10}, { 287,11}, \ - { 159, 9}, { 639,10}, { 335, 9}, { 671,10}, \ - { 351,11}, { 191,10}, { 383, 9}, { 767,10}, \ - { 399, 9}, { 799,10}, { 415,11}, { 223,12}, \ - { 127,11}, { 255,10}, { 511, 9}, { 1023,10}, \ - { 543,11}, { 287,10}, { 671,11}, { 351,12}, \ - { 191,11}, { 383,10}, { 799,11}, { 415,10}, \ - { 831,13}, { 127,12}, { 255,11}, { 511,10}, \ - { 1023,11}, { 543,10}, { 1087,11}, { 735,12}, \ - { 383,11}, { 831,12}, { 447,11}, { 927,13}, \ - { 255,12}, { 511,11}, { 1087,12}, { 575,11}, \ - { 1151,12}, { 639,11}, { 1343,12}, { 703,13}, \ - { 383,12}, { 767,11}, { 1535,12}, { 831,11}, \ - { 1663,12}, { 959,13}, { 511,12}, { 1023,11}, \ - { 2047,12}, { 1151,13}, { 639,12}, { 1407,13}, \ - { 767,12}, { 1599,13}, { 895,12}, { 1791,14}, \ - { 511,13}, { 1023,12}, { 2111,13}, { 1151,12}, \ - { 2431,13}, { 1279,12}, { 2559,13}, { 1407,14}, \ - { 767,13}, { 1535,12}, { 3071,13}, { 1663,12}, \ - { 3455,13}, { 1791,15}, { 511,14}, { 1023,13}, \ - { 2047,12}, { 4095,13}, { 2175,12}, { 4479,13}, \ - { 2303,14}, { 1279,13}, { 2559,12}, { 5119,13}, \ - { 2815,14}, { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 155 -#define SQR_FFT_THRESHOLD 5568 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 37 -#define MULLO_MUL_N_THRESHOLD 13463 -#define SQRLO_BASECASE_THRESHOLD 12 -#define SQRLO_DC_THRESHOLD 22 -#define SQRLO_SQR_THRESHOLD 10950 - -#define DC_DIV_QR_THRESHOLD 32 -#define DC_DIVAPPR_Q_THRESHOLD 99 -#define DC_BDIV_QR_THRESHOLD 43 -#define DC_BDIV_Q_THRESHOLD 102 - -#define INV_MULMOD_BNM1_THRESHOLD 88 -#define INV_NEWTON_THRESHOLD 141 -#define INV_APPR_THRESHOLD 111 - -#define BINV_NEWTON_THRESHOLD 312 -#define REDC_1_TO_REDC_2_THRESHOLD 6 -#define REDC_2_TO_REDC_N_THRESHOLD 140 - -#define MU_DIV_QR_THRESHOLD 2492 -#define MU_DIVAPPR_Q_THRESHOLD 2130 -#define MUPI_DIV_QR_THRESHOLD 55 -#define MU_BDIV_QR_THRESHOLD 2130 -#define MU_BDIV_Q_THRESHOLD 2172 - -#define POWM_SEC_TABLE 40,53,56,71,1985 - -#define GET_STR_DC_THRESHOLD 16 -#define GET_STR_PRECOMPUTE_THRESHOLD 33 -#define SET_STR_DC_THRESHOLD 172 -#define SET_STR_PRECOMPUTE_THRESHOLD 671 - -#define FAC_DSC_THRESHOLD 309 -#define FAC_ODD_THRESHOLD 29 - -#define MATRIX22_STRASSEN_THRESHOLD 24 -#define HGCD_THRESHOLD 61 -#define HGCD_APPR_THRESHOLD 50 -#define HGCD_REDUCE_THRESHOLD 4120 -#define GCD_DC_THRESHOLD 408 -#define GCDEXT_DC_THRESHOLD 303 -#define JACOBI_BASE_METHOD 4 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/aors_n.asm deleted file mode 100644 index a880cd35cfd1acce5c0c7e4dbc28982939ad1f5e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/aors_n.asm +++ /dev/null @@ -1,98 +0,0 @@ -dnl ARM64 mpn_add_n and mpn_sub_n - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -changecom(@&*$) - -define(`rp', `x0') -define(`up', `x1') -define(`vp', `x2') -define(`n', `x3') - -ifdef(`OPERATION_add_n', ` - define(`ADDSUBC', adcs) - define(`CLRCY', `cmn xzr, xzr') - define(`SETCY', `cmp $1, #1') - define(`RETVAL', `adc x0, xzr, xzr') - define(`func', mpn_add_n) - define(`func_nc', mpn_add_nc)') -ifdef(`OPERATION_sub_n', ` - define(`ADDSUBC', sbcs) - define(`CLRCY', `cmp xzr, xzr') - define(`SETCY', `subs $1, xzr, $1') - define(`RETVAL', `sbc x0, xzr, xzr - and x0, x0, #1') - define(`func', mpn_sub_n) - define(`func_nc', mpn_sub_nc)') - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc) - -ASM_START() -PROLOGUE(func_nc) - SETCY( x4) - b L(ent) -EPILOGUE() -PROLOGUE(func) - CLRCY -L(ent): tbz n, #0, L(b0) - - ldr x4, [up],#8 - ldr x6, [vp],#8 - sub n, n, #1 - ADDSUBC x8, x4, x6 - str x8, [rp],#8 - cbz n, L(rt) - -L(b0): ldp x4, x5, [up],#16 - ldp x6, x7, [vp],#16 - sub n, n, #2 - ADDSUBC x8, x4, x6 - ADDSUBC x9, x5, x7 - cbz n, L(end) - -L(top): ldp x4, x5, [up],#16 - ldp x6, x7, [vp],#16 - sub n, n, #2 - stp x8, x9, [rp],#16 - ADDSUBC x8, x4, x6 - ADDSUBC x9, x5, x7 - cbnz n, L(top) - -L(end): stp x8, x9, [rp] -L(rt): RETVAL - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/aorsmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/aorsmul_1.asm deleted file mode 100644 index e033bda2bf1413095921ceeab923d606c49486a3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/aorsmul_1.asm +++ /dev/null @@ -1,122 +0,0 @@ -dnl ARM64 mpn_submul_1 - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -changecom(@&*$) - -define(`rp', `x0') -define(`up', `x1') -define(`n', `x2') -define(`v0', `x3') - -ifdef(`OPERATION_addmul_1', ` - define(`ADDSUB', adds) - define(`ADDSUBC', adcs) - define(`COND', `cc') - define(`func', mpn_addmul_1)') -ifdef(`OPERATION_submul_1', ` - define(`ADDSUB', subs) - define(`ADDSUBC', sbcs) - define(`COND', `cs') - define(`func', mpn_submul_1)') - -MULFUNC_PROLOGUE(mpn_addmul_1 mpn_submul_1) - -PROLOGUE(func) - mov x15, #0 - - tbz n, #0, L(1) - - ldr x4, [up],#8 - mul x8, x4, v0 - umulh x12, x4, v0 - adds x8, x8, x15 - ldr x4, [rp,#0] - ADDSUB x8, x4, x8 - csinc x15, x12, x12, COND - str x8, [rp],#8 - -L(1): tbz n, #1, L(2) - - ldp x4, x5, [up],#16 - mul x8, x4, v0 - umulh x12, x4, v0 - mul x9, x5, v0 - umulh x13, x5, v0 - adds x8, x8, x15 - adcs x9, x9, x12 - ldp x4, x5, [rp,#0] - adc x15, x13, xzr - sub n, n, #1 - ADDSUB x8, x4, x8 - ADDSUBC x9, x5, x9 - csinc x15, x15, x15, COND - stp x8, x9, [rp],#16 - -L(2): lsr n, n, #2 - cbz n, L(end) - -L(top): ldp x4, x5, [up],#16 - ldp x6, x7, [up],#16 - mul x8, x4, v0 - umulh x12, x4, v0 - mul x9, x5, v0 - umulh x13, x5, v0 - adds x8, x8, x15 - mul x10, x6, v0 - umulh x14, x6, v0 - adcs x9, x9, x12 - mul x11, x7, v0 - umulh x15, x7, v0 - adcs x10, x10, x13 - ldp x4, x5, [rp,#0] - adcs x11, x11, x14 - ldp x6, x7, [rp,#16] - adc x15, x15, xzr - sub n, n, #1 - ADDSUB x8, x4, x8 - ADDSUBC x9, x5, x9 - ADDSUBC x10, x6, x10 - ADDSUBC x11, x7, x11 - stp x8, x9, [rp],#16 - csinc x15, x15, x15, COND - stp x10, x11, [rp],#16 - cbnz n, L(top) - -L(end): mov x0, x15 - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/bdiv_dbm1c.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/bdiv_dbm1c.asm deleted file mode 100644 index 3ccb2b60e5344982263a0e73a3d059b4998b3133..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/bdiv_dbm1c.asm +++ /dev/null @@ -1,110 +0,0 @@ -dnl ARM64 mpn_bdiv_dbm1c. - -dnl Copyright 2008, 2011, 2012, 2014 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -define(`qp', `x0') -define(`up', `x1') -define(`n', `x2') -define(`bd', `x3') -define(`cy', `x4') - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(mpn_bdiv_dbm1c) - ldr x5, [up], #8 - ands x6, n, #3 - b.eq L(fi0) - cmp x6, #2 - b.cc L(fi1) - b.eq L(fi2) - -L(fi3): mul x12, x5, bd - umulh x13, x5, bd - ldr x5, [up], #8 - b L(lo3) - -L(fi0): mul x10, x5, bd - umulh x11, x5, bd - ldr x5, [up], #8 - b L(lo0) - -L(fi1): subs n, n, #1 - mul x12, x5, bd - umulh x13, x5, bd - b.ls L(wd1) - ldr x5, [up], #8 - b L(lo1) - -L(fi2): mul x10, x5, bd - umulh x11, x5, bd - ldr x5, [up], #8 - b L(lo2) - -L(top): ldr x5, [up], #8 - subs x4, x4, x10 - str x4, [qp], #8 - sbc x4, x4, x11 -L(lo1): mul x10, x5, bd - umulh x11, x5, bd - ldr x5, [up], #8 - subs x4, x4, x12 - str x4, [qp], #8 - sbc x4, x4, x13 -L(lo0): mul x12, x5, bd - umulh x13, x5, bd - ldr x5, [up], #8 - subs x4, x4, x10 - str x4, [qp], #8 - sbc x4, x4, x11 -L(lo3): mul x10, x5, bd - umulh x11, x5, bd - ldr x5, [up], #8 - subs x4, x4, x12 - str x4, [qp], #8 - sbc x4, x4, x13 -L(lo2): subs n, n, #4 - mul x12, x5, bd - umulh x13, x5, bd - b.hi L(top) - -L(wd2): subs x4, x4, x10 - str x4, [qp], #8 - sbc x4, x4, x11 -L(wd1): subs x4, x4, x12 - str x4, [qp] - sbc x0, x4, x13 - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/cnd_aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/cnd_aors_n.asm deleted file mode 100644 index e7836500d5e4fe75942784e17fa25956e12f6a20..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/cnd_aors_n.asm +++ /dev/null @@ -1,99 +0,0 @@ -dnl ARM64 mpn_cnd_add_n, mpn_cnd_sub_n - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2012, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -changecom(@&*$) - -define(`cnd', `x0') -define(`rp', `x1') -define(`up', `x2') -define(`vp', `x3') -define(`n', `x4') - -ifdef(`OPERATION_cnd_add_n', ` - define(`ADDSUBC', adcs) - define(`CLRCY', `cmn xzr, xzr') - define(`RETVAL', `adc x0, xzr, xzr') - define(func, mpn_cnd_add_n)') -ifdef(`OPERATION_cnd_sub_n', ` - define(`ADDSUBC', sbcs) - define(`CLRCY', `cmp xzr, xzr') - define(`RETVAL', `sbc x0, xzr, xzr - and x0, x0, #1') - define(func, mpn_cnd_sub_n)') - -MULFUNC_PROLOGUE(mpn_cnd_add_n mpn_cnd_sub_n) - -ASM_START() -PROLOGUE(func) - cmp cnd, #1 - sbc cnd, cnd, cnd - - CLRCY C really only needed for n = 0 (mod 4) - - tbz n, #0, L(1) - ldr x10, [up], #8 - ldr x12, [vp], #8 - bic x6, x12, cnd - ADDSUBC x8, x10, x6 - sub n, n, #1 - str x8, [rp], #8 - cbz n, L(rt) - -L(1): ldp x10, x11, [up], #16 - ldp x12, x13, [vp], #16 - sub n, n, #2 - cbz n, L(end) - -L(top): bic x6, x12, cnd - bic x7, x13, cnd - ldp x12, x13, [vp], #16 - ADDSUBC x8, x10, x6 - ADDSUBC x9, x11, x7 - ldp x10, x11, [up], #16 - sub n, n, #2 - stp x8, x9, [rp], #16 - cbnz n, L(top) - -L(end): bic x6, x12, cnd - bic x7, x13, cnd - ADDSUBC x8, x10, x6 - ADDSUBC x9, x11, x7 - stp x8, x9, [rp] -L(rt): RETVAL - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/com.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/com.asm deleted file mode 100644 index 9b8b3a7d08d6ea191a479931cce7daceab15184a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/com.asm +++ /dev/null @@ -1,83 +0,0 @@ -dnl ARM64 mpn_com. - -dnl Copyright 2013, 2014 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -changecom(@&*$) - -define(`rp', `x0') -define(`up', `x1') -define(`n', `x2') - -ASM_START() -PROLOGUE(mpn_com) - cmp n, #3 - b.le L(bc) - -C Copy until rp is 128-bit aligned - tbz rp, #3, L(al2) - ld1 {v22.1d}, [up], #8 - sub n, n, #1 - mvn v22.8b, v22.8b - st1 {v22.1d}, [rp], #8 - -L(al2): ld1 {v26.2d}, [up], #16 - subs n, n, #6 - b.lt L(end) - - ALIGN(16) -L(top): ld1 {v22.2d}, [up], #16 - mvn v26.16b, v26.16b - st1 {v26.2d}, [rp], #16 - ld1 {v26.2d}, [up], #16 - mvn v22.16b, v22.16b - st1 {v22.2d}, [rp], #16 - subs n, n, #4 - b.ge L(top) - -L(end): mvn v26.16b, v26.16b - st1 {v26.2d}, [rp], #16 - -C Copy last 0-3 limbs. Note that rp is aligned after loop, but not when we -C arrive here via L(bc) -L(bc): tbz n, #1, L(tl1) - ld1 {v22.2d}, [up], #16 - mvn v22.16b, v22.16b - st1 {v22.2d}, [rp], #16 -L(tl1): tbz n, #0, L(tl2) - ld1 {v22.1d}, [up] - mvn v22.8b, v22.8b - st1 {v22.1d}, [rp] -L(tl2): ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/copyd.asm deleted file mode 100644 index bb477716e5bb3b830290df259d30924a47de00ab..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/copyd.asm +++ /dev/null @@ -1,93 +0,0 @@ -dnl ARM64 mpn_copyd. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -changecom(@&*$) - -define(`rp', `x0') -define(`up', `x1') -define(`n', `x2') - -ASM_START() -PROLOGUE(mpn_copyd) - add rp, rp, n, lsl #3 - add up, up, n, lsl #3 - - cmp n, #3 - b.le L(bc) - -C Copy until rp is 128-bit aligned - tbz rp, #3, L(al2) - sub up, up, #8 - ld1 {v22.1d}, [up] - sub n, n, #1 - sub rp, rp, #8 - st1 {v22.1d}, [rp] - -L(al2): sub up, up, #16 - ld1 {v26.2d}, [up] - subs n, n, #6 - sub rp, rp, #16 C offset rp for loop - b.lt L(end) - - sub up, up, #16 C offset up for loop - mov x12, #-16 - - ALIGN(16) -L(top): ld1 {v22.2d}, [up], x12 - st1 {v26.2d}, [rp], x12 - ld1 {v26.2d}, [up], x12 - st1 {v22.2d}, [rp], x12 - subs n, n, #4 - b.ge L(top) - - add up, up, #16 C undo up offset - -L(end): st1 {v26.2d}, [rp] - -C Copy last 0-3 limbs. Note that rp is aligned after loop, but not when we -C arrive here via L(bc) -L(bc): tbz n, #1, L(tl1) - sub up, up, #16 - ld1 {v22.2d}, [up] - sub rp, rp, #16 - st1 {v22.2d}, [rp] -L(tl1): tbz n, #0, L(tl2) - sub up, up, #8 - ld1 {v22.1d}, [up] - sub rp, rp, #8 - st1 {v22.1d}, [rp] -L(tl2): ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/copyi.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/copyi.asm deleted file mode 100644 index 8f7dbd4f520efb786b7169b2680ac4dfceb4396b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/copyi.asm +++ /dev/null @@ -1,77 +0,0 @@ -dnl ARM64 mpn_copyi. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -changecom(@&*$) - -define(`rp', `x0') -define(`up', `x1') -define(`n', `x2') - -ASM_START() -PROLOGUE(mpn_copyi) - cmp n, #3 - b.le L(bc) - -C Copy until rp is 128-bit aligned - tbz rp, #3, L(al2) - ld1 {v22.1d}, [up], #8 - sub n, n, #1 - st1 {v22.1d}, [rp], #8 - -L(al2): ld1 {v26.2d}, [up], #16 - subs n, n, #6 - b.lt L(end) - - ALIGN(16) -L(top): ld1 {v22.2d}, [up], #16 - st1 {v26.2d}, [rp], #16 - ld1 {v26.2d}, [up], #16 - st1 {v22.2d}, [rp], #16 - subs n, n, #4 - b.ge L(top) - -L(end): st1 {v26.2d}, [rp], #16 - -C Copy last 0-3 limbs. Note that rp is aligned after loop, but not when we -C arrive here via L(bc) -L(bc): tbz n, #1, L(tl1) - ld1 {v22.2d}, [up], #16 - st1 {v22.2d}, [rp], #16 -L(tl1): tbz n, #0, L(tl2) - ld1 {v22.1d}, [up] - st1 {v22.1d}, [rp] -L(tl2): ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/gcd_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/gcd_1.asm deleted file mode 100644 index bc03d80ddf0e038af8ced81554046b7e26b3100a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/gcd_1.asm +++ /dev/null @@ -1,125 +0,0 @@ -dnl ARM v6t2 mpn_gcd_1. - -dnl Based on the K7 gcd_1.asm, by Kevin Ryde. Rehacked for ARM by Torbjorn -dnl Granlund. - -dnl Copyright 2000-2002, 2005, 2009, 2011-2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -changecom(@&*$) - -C cycles/bit (approx) -C Cortex-A53 ? -C Cortex-A57 ? - -C TODO -C * Optimise inner-loop better. -C * Push saving/restoring of callee-user regs into call code - -C Threshold of when to call bmod when U is one limb. Should be about -C (time_in_cycles(bmod_1,1) + call_overhead) / (cycles/bit). -define(`BMOD_THRES_LOG2', 7) - -C INPUT PARAMETERS -define(`up', `x0') -define(`n', `x1') -define(`v0', `x2') - -ifdef(`BMOD_1_TO_MOD_1_THRESHOLD',, - `define(`BMOD_1_TO_MOD_1_THRESHOLD',30)') - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(mpn_gcd_1) - stp x29, x30, [sp,#-32]! - ldr x3, [up] C U low limb - stp x19, x20, [sp,#16] - - orr x3, x3, v0 - rbit x4, x3 - clz x20, x4 C min(ctz(u0),ctz(v0)) - - rbit x12, v0 - clz x12, x12 - lsr v0, v0, x12 - - mov x19, v0 - - cmp n, #1 - b.ne L(nby1) - -C Both U and V are single limbs, reduce with bmod if u0 >> v0. - ldr x3, [up] - cmp v0, x3, lsr #BMOD_THRES_LOG2 - b.hi L(red1) - -L(bmod):mov x3, #0 C carry argument - bl mpn_modexact_1c_odd - b L(red0) - -L(nby1):cmp n, #BMOD_1_TO_MOD_1_THRESHOLD - b.lo L(bmod) - - bl mpn_mod_1 - -L(red0):mov x3, x0 -L(red1):cmp x3, #0 - rbit x12, x3 - clz x12, x12 - b.ne L(mid) - b L(end) - - ALIGN(8) -L(top): -ifelse(1,1,` -C This shorter variant makes full use of armv8 insns - csneg x3, x1, x1, cs C if x-y < 0 - csel x19, x4, x19, cs C use x,y-x -L(mid): lsr x4, x3, x12 C - subs x1, x19, x4 C -',` -C This variant is akin to the 32-bit v6t2 code - csel x3, x1, x3, cs C if x-y < 0 - csel x19, x0, x19, cs C use x,y-x -L(mid): lsr x3, x3, x12 C - mov x0, x3 C - subs x1, x19, x3 C - sub x3, x3, x19 C -') - rbit x12, x1 - clz x12, x12 C - b.ne L(top) C - -L(end): lsl x0, x19, x20 - ldp x19, x20, [sp,#16] - ldp x29, x30, [sp],#32 - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/gmp-mparam.h deleted file mode 100644 index 83309c68020e34069e9bc21d4ba76e8f5ff3e625..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/gmp-mparam.h +++ /dev/null @@ -1,241 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* 2400 MHz AppliedMicro X-Gene */ -/* FFT tuning limit = 100 M */ -/* Generated by tuneup.c, 2015-10-18, gcc 4.8 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1P_METHOD 1 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 6 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 0 /* never mpn_mod_1_1p */ -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 28 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 13 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 1 -#define DIV_QR_1_UNNORM_THRESHOLD 1 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD 30 - -#define MUL_TOOM22_THRESHOLD 14 -#define MUL_TOOM33_THRESHOLD 57 -#define MUL_TOOM44_THRESHOLD 154 -#define MUL_TOOM6H_THRESHOLD 206 -#define MUL_TOOM8H_THRESHOLD 309 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 89 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 102 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 89 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 104 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 130 - -#define SQR_BASECASE_THRESHOLD 6 -#define SQR_TOOM2_THRESHOLD 28 -#define SQR_TOOM3_THRESHOLD 93 -#define SQR_TOOM4_THRESHOLD 160 -#define SQR_TOOM6_THRESHOLD 197 -#define SQR_TOOM8_THRESHOLD 284 - -#define MULMID_TOOM42_THRESHOLD 34 - -#define MULMOD_BNM1_THRESHOLD 12 -#define SQRMOD_BNM1_THRESHOLD 13 - -#define MUL_FFT_MODF_THRESHOLD 308 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 308, 5}, { 13, 6}, { 7, 5}, { 15, 6}, \ - { 8, 5}, { 17, 6}, { 13, 7}, { 7, 6}, \ - { 15, 7}, { 8, 6}, { 17, 7}, { 17, 8}, \ - { 9, 7}, { 20, 8}, { 11, 7}, { 24, 8}, \ - { 13, 7}, { 27, 9}, { 7, 8}, { 15, 7}, \ - { 31, 8}, { 21, 9}, { 11, 8}, { 27, 9}, \ - { 15, 8}, { 35, 9}, { 19, 8}, { 39, 9}, \ - { 23, 8}, { 47, 9}, { 27,10}, { 15, 9}, \ - { 31, 8}, { 63, 9}, { 39,10}, { 23, 9}, \ - { 55,11}, { 15,10}, { 31, 9}, { 71,10}, \ - { 39, 9}, { 83,10}, { 47, 9}, { 99,10}, \ - { 55,11}, { 31,10}, { 63, 9}, { 127,10}, \ - { 79, 9}, { 159,11}, { 47,10}, { 95, 9}, \ - { 191, 8}, { 383,10}, { 103,12}, { 31,11}, \ - { 63,10}, { 127, 9}, { 255, 8}, { 511,10}, \ - { 135, 9}, { 271,10}, { 143,11}, { 79,10}, \ - { 159, 9}, { 319, 8}, { 639,10}, { 175, 9}, \ - { 351, 8}, { 703,11}, { 95,10}, { 191, 9}, \ - { 383, 8}, { 767,10}, { 207, 9}, { 415, 8}, \ - { 831,11}, { 111,10}, { 223,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,10}, { 271, 9}, \ - { 543,10}, { 287, 9}, { 575,11}, { 159,10}, \ - { 319, 9}, { 639,11}, { 175,10}, { 351, 9}, \ - { 703,12}, { 95,11}, { 191,10}, { 383, 9}, \ - { 767,11}, { 207,10}, { 415, 9}, { 831,11}, \ - { 223,10}, { 447,13}, { 63,12}, { 127,11}, \ - { 255,10}, { 511,11}, { 271,10}, { 543,11}, \ - { 287,10}, { 575,12}, { 159,11}, { 319,10}, \ - { 639,11}, { 351,10}, { 703,11}, { 383,10}, \ - { 767,11}, { 415,10}, { 831,12}, { 223,11}, \ - { 447,10}, { 895,11}, { 479,10}, { 959,13}, \ - { 127,11}, { 543,12}, { 287,11}, { 575,10}, \ - { 1151,12}, { 319,11}, { 639,12}, { 351,11}, \ - { 703,10}, { 1407, 9}, { 2815,12}, { 383,11}, \ - { 767,12}, { 415,11}, { 831,10}, { 1663,12}, \ - { 447,11}, { 895,10}, { 1791,12}, { 479,11}, \ - { 959,10}, { 1919,14}, { 127,13}, { 255,12}, \ - { 511,11}, { 1023,12}, { 543,11}, { 1087,12}, \ - { 575,11}, { 1151,13}, { 319,12}, { 639,11}, \ - { 1279,12}, { 703,11}, { 1407,13}, { 383,12}, \ - { 767,11}, { 1535,12}, { 831,11}, { 1663,13}, \ - { 447,12}, { 959,11}, { 1919,14}, { 255,13}, \ - { 511,12}, { 1087,13}, { 575,12}, { 1215,13}, \ - { 639,12}, { 1279,13}, { 703,12}, { 1407,14}, \ - { 383,13}, { 767,12}, { 1535,13}, { 831,12}, \ - { 1663,13}, { 895,12}, { 1791,13}, { 959,12}, \ - { 1919,15}, { 255,14}, { 511,13}, { 1087,12}, \ - { 2175,13}, { 1151,14}, { 639,13}, { 1407,12}, \ - { 2815,14}, { 767,13}, { 1663,14}, { 895,13}, \ - { 1919,15}, { 511,14}, { 1023,13}, { 2175,14}, \ - { 1151,13}, { 2431,14}, { 1407,13}, { 2815,15}, \ - { 767,14}, { 1919,16}, { 511,15}, { 1023,14}, \ - { 2431,15}, { 1279,14}, { 2943,15}, { 32768,16}, \ - { 65536,17}, { 131072,18}, { 262144,19}, { 524288,20}, \ - {1048576,21}, {2097152,22}, {4194304,23}, {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 220 -#define MUL_FFT_THRESHOLD 3520 - -#define SQR_FFT_MODF_THRESHOLD 272 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 272, 5}, { 13, 6}, { 7, 5}, { 15, 6}, \ - { 17, 7}, { 9, 6}, { 19, 7}, { 17, 8}, \ - { 9, 7}, { 20, 8}, { 11, 7}, { 24, 8}, \ - { 13, 9}, { 7, 8}, { 15, 7}, { 31, 8}, \ - { 21, 9}, { 11, 8}, { 27,10}, { 7, 9}, \ - { 15, 8}, { 33, 9}, { 19, 8}, { 39, 9}, \ - { 23, 8}, { 47, 9}, { 27,10}, { 15, 9}, \ - { 39,10}, { 23, 9}, { 51,11}, { 15,10}, \ - { 31, 9}, { 67,10}, { 39, 9}, { 79,10}, \ - { 47, 9}, { 95,10}, { 55,11}, { 31,10}, \ - { 63, 8}, { 255,10}, { 71, 9}, { 143, 8}, \ - { 287,10}, { 79,11}, { 47,10}, { 95, 9}, \ - { 191,12}, { 31,11}, { 63, 9}, { 255, 8}, \ - { 511,10}, { 143, 9}, { 287,11}, { 79,10}, \ - { 159, 9}, { 319, 8}, { 639,10}, { 175, 9}, \ - { 351, 8}, { 703,11}, { 95,10}, { 191, 9}, \ - { 383, 8}, { 767,10}, { 207, 9}, { 415,12}, \ - { 63,10}, { 255, 9}, { 511,11}, { 143,10}, \ - { 287, 9}, { 575,11}, { 159,10}, { 319, 9}, \ - { 639,11}, { 175,10}, { 351, 9}, { 703,12}, \ - { 95,11}, { 191,10}, { 383, 9}, { 767,11}, \ - { 207,10}, { 415, 9}, { 831,11}, { 223,13}, \ - { 63,11}, { 255,10}, { 511, 9}, { 1023,11}, \ - { 287,10}, { 575, 9}, { 1151,12}, { 159,11}, \ - { 319,10}, { 639,11}, { 351,10}, { 703, 9}, \ - { 1407,12}, { 191,11}, { 383,10}, { 767,11}, \ - { 415,10}, { 831,12}, { 223,11}, { 447,10}, \ - { 895,11}, { 479,10}, { 959,12}, { 255,11}, \ - { 511,10}, { 1023,12}, { 287,11}, { 575,10}, \ - { 1151,12}, { 319,11}, { 639,12}, { 351,11}, \ - { 703,10}, { 1407,12}, { 383,11}, { 767,12}, \ - { 415,11}, { 831,10}, { 1663,12}, { 447,11}, \ - { 895,12}, { 479,11}, { 959,10}, { 1919,13}, \ - { 255,12}, { 511,11}, { 1023,12}, { 543,11}, \ - { 1087,12}, { 575,11}, { 1151,13}, { 319,12}, \ - { 639,11}, { 1279,12}, { 703,11}, { 1407,10}, \ - { 2815,13}, { 383,12}, { 831,11}, { 1663,13}, \ - { 447,12}, { 895,11}, { 1791,12}, { 959,11}, \ - { 1919,14}, { 255,13}, { 511,12}, { 1087,13}, \ - { 575,12}, { 1215,13}, { 639,12}, { 1279,13}, \ - { 703,12}, { 1407,11}, { 2815,14}, { 383,13}, \ - { 831,12}, { 1663,13}, { 895,12}, { 1791,13}, \ - { 959,12}, { 1919,15}, { 255,14}, { 511,13}, \ - { 1087,12}, { 2175,13}, { 1215,14}, { 639,13}, \ - { 1407,12}, { 2815,14}, { 767,13}, { 1663,14}, \ - { 895,13}, { 1919,12}, { 3839,15}, { 511,14}, \ - { 1023,13}, { 2175,14}, { 1151,13}, { 2431,12}, \ - { 4863,14}, { 1407,13}, { 2815,15}, { 767,14}, \ - { 1919,13}, { 3839,16}, { 511,15}, { 1023,14}, \ - { 2431,13}, { 4863,15}, { 1279,14}, { 2943,13}, \ - { 5887,15}, { 32768,16}, { 65536,17}, { 131072,18}, \ - { 262144,19}, { 524288,20}, {1048576,21}, {2097152,22}, \ - {4194304,23}, {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 210 -#define SQR_FFT_THRESHOLD 2496 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 45 -#define MULLO_MUL_N_THRESHOLD 7035 -#define SQRLO_BASECASE_THRESHOLD 4 -#define SQRLO_DC_THRESHOLD 108 -#define SQRLO_SQR_THRESHOLD 4955 - -#define DC_DIV_QR_THRESHOLD 51 -#define DC_DIVAPPR_Q_THRESHOLD 184 -#define DC_BDIV_QR_THRESHOLD 47 -#define DC_BDIV_Q_THRESHOLD 50 - -#define INV_MULMOD_BNM1_THRESHOLD 26 -#define INV_NEWTON_THRESHOLD 228 -#define INV_APPR_THRESHOLD 204 - -#define BINV_NEWTON_THRESHOLD 248 -#define REDC_1_TO_REDC_N_THRESHOLD 60 - -#define MU_DIV_QR_THRESHOLD 1210 -#define MU_DIVAPPR_Q_THRESHOLD 1234 -#define MUPI_DIV_QR_THRESHOLD 116 -#define MU_BDIV_QR_THRESHOLD 889 -#define MU_BDIV_Q_THRESHOLD 1210 - -#define POWM_SEC_TABLE 1,23,194,712,2177 - -#define GET_STR_DC_THRESHOLD 10 -#define GET_STR_PRECOMPUTE_THRESHOLD 22 -#define SET_STR_DC_THRESHOLD 1105 -#define SET_STR_PRECOMPUTE_THRESHOLD 3109 - -#define FAC_DSC_THRESHOLD 298 -#define FAC_ODD_THRESHOLD 27 - -#define MATRIX22_STRASSEN_THRESHOLD 15 -#define HGCD_THRESHOLD 134 -#define HGCD_APPR_THRESHOLD 166 -#define HGCD_REDUCE_THRESHOLD 2121 -#define GCD_DC_THRESHOLD 531 -#define GCDEXT_DC_THRESHOLD 386 -#define JACOBI_BASE_METHOD 4 - -/* Tuneup completed successfully, took 65068 seconds */ diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/hamdist.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/hamdist.asm deleted file mode 100644 index d298b951cf6cf73b67c4d22a5aef3a4db1393400..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/hamdist.asm +++ /dev/null @@ -1,180 +0,0 @@ -dnl ARM64 Neon mpn_hamdist -- mpn bit hamming distance. - -dnl Copyright 2013, 2014 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -C TODO -C * Consider greater unrolling. -C * Arrange to align the pointer, if that helps performance. Use the same -C read-and-mask trick we use on PCs, for simplicity and performance. (Sorry -C valgrind!) -C * Explore if explicit align directives, e.g., "[ptr:128]" help. -C * See rth's gmp-devel 2013-02/03 messages about final summation tricks. - -changecom(@&*$) - -C INPUT PARAMETERS -define(`ap', x0) -define(`bp', x1) -define(`n', x2) - -C We sum into 16 16-bit counters in v4,v5, but at the end we sum them and end -C up with 8 16-bit counters. Therefore, we can sum to 8(2^16-1) bits, or -C (8*2^16-1)/64 = 0x1fff limbs. We use a chunksize close to that, but which -C allows the huge count code to jump deep into the code (at L(chu)). - -define(`maxsize', 0x1fff) -define(`chunksize',0x1ff0) - -ASM_START() -PROLOGUE(mpn_hamdist) - - mov x11, #maxsize - cmp n, x11 - b.hi L(gt8k) - -L(lt8k): - movi v4.16b, #0 C clear summation register - movi v5.16b, #0 C clear summation register - - tbz n, #0, L(xx0) - sub n, n, #1 - ld1 {v0.1d}, [ap], #8 C load 1 limb - ld1 {v16.1d}, [bp], #8 C load 1 limb - eor v0.16b, v0.16b, v16.16b - cnt v6.16b, v0.16b - uadalp v4.8h, v6.16b C could also splat - -L(xx0): tbz n, #1, L(x00) - sub n, n, #2 - ld1 {v0.2d}, [ap], #16 C load 2 limbs - ld1 {v16.2d}, [bp], #16 C load 2 limbs - eor v0.16b, v0.16b, v16.16b - cnt v6.16b, v0.16b - uadalp v4.8h, v6.16b - -L(x00): tbz n, #2, L(000) - subs n, n, #4 - ld1 {v0.2d,v1.2d}, [ap], #32 C load 4 limbs - ld1 {v16.2d,v17.2d}, [bp], #32 C load 4 limbs - b.ls L(sum) - -L(gt4): ld1 {v2.2d,v3.2d}, [ap], #32 C load 4 limbs - ld1 {v18.2d,v19.2d}, [bp], #32 C load 4 limbs - eor v0.16b, v0.16b, v16.16b - eor v1.16b, v1.16b, v17.16b - sub n, n, #4 - cnt v6.16b, v0.16b - cnt v7.16b, v1.16b - b L(mid) - -L(000): subs n, n, #8 - b.lo L(e0) - -L(chu): ld1 {v2.2d,v3.2d}, [ap], #32 C load 4 limbs - ld1 {v0.2d,v1.2d}, [ap], #32 C load 4 limbs - ld1 {v18.2d,v19.2d}, [bp], #32 C load 4 limbs - ld1 {v16.2d,v17.2d}, [bp], #32 C load 4 limbs - eor v2.16b, v2.16b, v18.16b - eor v3.16b, v3.16b, v19.16b - cnt v6.16b, v2.16b - cnt v7.16b, v3.16b - subs n, n, #8 - b.lo L(end) - -L(top): ld1 {v2.2d,v3.2d}, [ap], #32 C load 4 limbs - ld1 {v18.2d,v19.2d}, [bp], #32 C load 4 limbs - eor v0.16b, v0.16b, v16.16b - eor v1.16b, v1.16b, v17.16b - uadalp v4.8h, v6.16b - cnt v6.16b, v0.16b - uadalp v5.8h, v7.16b - cnt v7.16b, v1.16b -L(mid): ld1 {v0.2d,v1.2d}, [ap], #32 C load 4 limbs - ld1 {v16.2d,v17.2d}, [bp], #32 C load 4 limbs - eor v2.16b, v2.16b, v18.16b - eor v3.16b, v3.16b, v19.16b - subs n, n, #8 - uadalp v4.8h, v6.16b - cnt v6.16b, v2.16b - uadalp v5.8h, v7.16b - cnt v7.16b, v3.16b - b.hs L(top) - -L(end): uadalp v4.8h, v6.16b - uadalp v5.8h, v7.16b -L(sum): eor v0.16b, v0.16b, v16.16b - eor v1.16b, v1.16b, v17.16b - cnt v6.16b, v0.16b - cnt v7.16b, v1.16b - uadalp v4.8h, v6.16b - uadalp v5.8h, v7.16b - add v4.8h, v4.8h, v5.8h - C we have 8 16-bit counts -L(e0): uaddlp v4.4s, v4.8h C we have 4 32-bit counts - uaddlp v4.2d, v4.4s C we have 2 64-bit counts - mov x0, v4.d[0] - mov x1, v4.d[1] - add x0, x0, x1 - ret - -C Code for count > maxsize. Splits operand and calls above code. -define(`ap2', x5) C caller-saves reg not used above -define(`bp2', x6) C caller-saves reg not used above -L(gt8k): - mov x8, x30 - mov x7, n C full count (caller-saves reg not used above) - mov x4, #0 C total sum (caller-saves reg not used above) - mov x9, #chunksize*8 C caller-saves reg not used above - mov x10, #chunksize C caller-saves reg not used above - -1: add ap2, ap, x9 C point at subsequent block - add bp2, bp, x9 C point at subsequent block - mov n, #chunksize-8 C count for this invocation, adjusted for entry pt - movi v4.16b, #0 C clear chunk summation register - movi v5.16b, #0 C clear chunk summation register - bl L(chu) C jump deep inside code - add x4, x4, x0 - mov ap, ap2 C put chunk pointer in place for calls - mov bp, bp2 C put chunk pointer in place for calls - sub x7, x7, x10 - cmp x7, x11 - b.hi 1b - - mov n, x7 C count for final invocation - bl L(lt8k) - add x0, x4, x0 - mov x30, x8 - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/invert_limb.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/invert_limb.asm deleted file mode 100644 index a94b0e961188a85089ed308cfc69c731f50a2292..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/invert_limb.asm +++ /dev/null @@ -1,83 +0,0 @@ -dnl ARM64 mpn_invert_limb -- Invert a normalized limb. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -C Compiler generated, mildly edited. Could surely be further optimised. - -ASM_START() -PROLOGUE(mpn_invert_limb) - lsr x2, x0, #54 - adrp x1, approx_tab - and x2, x2, #0x1fe - add x1, x1, :lo12:approx_tab - ldrh w3, [x1,x2] - lsr x4, x0, #24 - add x4, x4, #1 - ubfiz x2, x3, #11, #16 - umull x3, w3, w3 - mul x3, x3, x4 - sub x2, x2, #1 - sub x2, x2, x3, lsr #40 - lsl x3, x2, #60 - mul x1, x2, x2 - msub x1, x1, x4, x3 - lsl x2, x2, #13 - add x1, x2, x1, lsr #47 - and x2, x0, #1 - neg x3, x2 - and x3, x3, x1, lsr #1 - add x2, x2, x0, lsr #1 - msub x2, x1, x2, x3 - umulh x2, x2, x1 - lsl x1, x1, #31 - add x1, x1, x2, lsr #1 - mul x3, x1, x0 - umulh x2, x1, x0 - adds x4, x3, x0 - adc x0, x2, x0 - sub x0, x1, x0 - ret -EPILOGUE() - - RODATA - ALIGN(2) - TYPE( approx_tab, object) - SIZE( approx_tab, 512) -approx_tab: -forloop(i,256,512-1,dnl -` .hword eval(0x7fd00/i) -')dnl diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/logops_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/logops_n.asm deleted file mode 100644 index 0f75700cfd50e95175beffa80b4a9de28d81c503..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/logops_n.asm +++ /dev/null @@ -1,106 +0,0 @@ -dnl ARM64 mpn_and_n, mpn_andn_n. mpn_nand_n, etc. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -changecom(@&*$) - -define(`rp', `x0') -define(`up', `x1') -define(`vp', `x2') -define(`n', `x3') - -define(`POSTOP', `dnl') - -ifdef(`OPERATION_and_n',` - define(`func', `mpn_and_n') - define(`LOGOP', `and $1, $2, $3')') -ifdef(`OPERATION_andn_n',` - define(`func', `mpn_andn_n') - define(`LOGOP', `bic $1, $2, $3')') -ifdef(`OPERATION_nand_n',` - define(`func', `mpn_nand_n') - define(`POSTOP', `mvn $1, $1') - define(`LOGOP', `and $1, $2, $3')') -ifdef(`OPERATION_ior_n',` - define(`func', `mpn_ior_n') - define(`LOGOP', `orr $1, $2, $3')') -ifdef(`OPERATION_iorn_n',` - define(`func', `mpn_iorn_n') - define(`LOGOP', `orn $1, $2, $3')') -ifdef(`OPERATION_nior_n',` - define(`func', `mpn_nior_n') - define(`POSTOP', `mvn $1, $1') - define(`LOGOP', `orr $1, $2, $3')') -ifdef(`OPERATION_xor_n',` - define(`func', `mpn_xor_n') - define(`LOGOP', `eor $1, $2, $3')') -ifdef(`OPERATION_xnor_n',` - define(`func', `mpn_xnor_n') - define(`LOGOP', `eon $1, $2, $3')') - -MULFUNC_PROLOGUE(mpn_and_n mpn_andn_n mpn_nand_n mpn_ior_n mpn_iorn_n mpn_nior_n mpn_xor_n mpn_xnor_n) - -ASM_START() -PROLOGUE(func) - tbz n, #0, L(b0) - - ldr x4, [up],#8 - ldr x6, [vp],#8 - sub n, n, #1 - LOGOP( x8, x4, x6) - POSTOP( x8) - str x8, [rp],#8 - cbz n, L(rtn) - -L(b0): ldp x4, x5, [up],#16 - ldp x6, x7, [vp],#16 - sub n, n, #2 - b L(mid) - -L(top): ldp x4, x5, [up],#16 - ldp x6, x7, [vp],#16 - sub n, n, #2 - stp x8, x9, [rp],#16 -L(mid): LOGOP( x8, x4, x6) - LOGOP( x9, x5, x7) - POSTOP( x8) - POSTOP( x9) - cbnz n, L(top) - - stp x8, x9, [rp],#16 -L(rtn): ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/lshift.asm deleted file mode 100644 index bf6f0ad07216985bf1e8670fe85331c58cf45466..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/lshift.asm +++ /dev/null @@ -1,122 +0,0 @@ -dnl ARM64 mpn_lshift. - -dnl Copyright 2013, 2014 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. - -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU Lesser General Public License as published -dnl by the Free Software Foundation; either version 3 of the License, or (at -dnl your option) any later version. - -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -dnl License for more details. - -dnl You should have received a copy of the GNU Lesser General Public License -dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -changecom(@&*$) - -define(`rp_arg', `x0') -define(`up', `x1') -define(`n', `x2') -define(`cnt', `x3') - -define(`rp', `x16') - -define(`tnc',`x8') - -ASM_START() -PROLOGUE(mpn_lshift) - add rp, rp_arg, n, lsl #3 - add up, up, n, lsl #3 - sub tnc, xzr, cnt - tbz n, #0, L(bx0) - -L(bx1): ldr x4, [up,#-8] - tbnz n, #1, L(b11) - -L(b01): lsr x0, x4, tnc - lsl x18, x4, cnt - sub n, n, #1 - cbnz n, L(gt1) - str x18, [rp,#-8] - ret -L(gt1): ldp x4, x5, [up,#-24] - sub up, up, #8 - add rp, rp, #16 - b L(lo2) - -L(b11): lsr x0, x4, tnc - lsl x9, x4, cnt - ldp x6, x7, [up,#-24] - add n, n, #1 - add up, up, #8 - add rp, rp, #32 - b L(lo0) - -L(bx0): ldp x4, x5, [up,#-16] - tbz n, #1, L(b00) - -L(b10): lsr x0, x5, tnc - lsl x13, x5, cnt - lsr x10, x4, tnc - lsl x18, x4, cnt - sub n, n, #2 - cbnz n, L(gt2) - orr x10, x10, x13 - stp x18, x10, [rp,#-16] - ret -L(gt2): ldp x4, x5, [up,#-32] - orr x10, x10, x13 - str x10, [rp,#-8] - sub up, up, #16 - add rp, rp, #8 - b L(lo2) - -L(b00): lsr x0, x5, tnc - lsl x13, x5, cnt - lsr x10, x4, tnc - lsl x9, x4, cnt - ldp x6, x7, [up,#-32] - orr x10, x10, x13 - str x10, [rp,#-8] - add rp, rp, #24 - b L(lo0) - - ALIGN(16) -L(top): ldp x4, x5, [up,#-48] - sub rp, rp, #32 C integrate with stp? - sub up, up, #32 C integrate with ldp? - orr x11, x11, x9 - orr x10, x10, x13 - stp x10, x11, [rp,#-16] -L(lo2): lsr x11, x5, tnc - lsl x13, x5, cnt - lsr x10, x4, tnc - lsl x9, x4, cnt - ldp x6, x7, [up,#-32] - orr x11, x11, x18 - orr x10, x10, x13 - stp x10, x11, [rp,#-32] -L(lo0): sub n, n, #4 - lsr x11, x7, tnc - lsl x13, x7, cnt - lsr x10, x6, tnc - lsl x18, x6, cnt - cbnz n, L(top) - -L(end): orr x11, x11, x9 - orr x10, x10, x13 - stp x10, x11, [rp,#-48] - str x18, [rp,#-56] - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/mod_34lsub1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/mod_34lsub1.asm deleted file mode 100644 index 96d38121f77e6d743dff9b910cbdd8cc1d932d0c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/mod_34lsub1.asm +++ /dev/null @@ -1,123 +0,0 @@ -dnl ARM64 mpn_mod_34lsub1 -- remainder modulo 2^48-1. - -dnl Copyright 2012-2014 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -define(`ap', x0) -define(`n', x1) - -changecom(@&*$) - -C mp_limb_t mpn_mod_34lsub1 (mp_srcptr up, mp_size_t n) - -C TODO -C * An alternative inner loop which could run at 0.722 c/l: -C adds x8, x8, x2 -C adcs x9, x9, x3 -C ldp x2, x3, [ap, #-32] -C adcs x10, x10, x4 -C adc x12, x12, xzr -C adds x8, x8, x5 -C ldp x4, x5, [ap, #-16] -C sub n, n, #6 -C adcs x9, x9, x6 -C adcs x10, x10, x7 -C ldp x6, x7, [ap], #48 -C adc x12, x12, xzr -C tbz n, #63, L(top) - -ASM_START() - TEXT - ALIGN(32) -PROLOGUE(mpn_mod_34lsub1) - subs n, n, #3 - mov x8, #0 - b.lt L(le2) C n <= 2 - - ldp x2, x3, [ap, #0] - ldr x4, [ap, #16] - add ap, ap, #24 - subs n, n, #3 - b.lt L(sum) C n <= 5 - cmn x0, #0 C clear carry - -L(top): ldp x5, x6, [ap, #0] - ldr x7, [ap, #16] - add ap, ap, #24 - sub n, n, #3 - adcs x2, x2, x5 - adcs x3, x3, x6 - adcs x4, x4, x7 - tbz n, #63, L(top) - - adc x8, xzr, xzr C x8 <= 1 - -L(sum): cmn n, #2 - mov x5, #0 - b.lo 1f - ldr x5, [ap], #8 -1: mov x6, #0 - b.ls 1f - ldr x6, [ap], #8 -1: adds x2, x2, x5 - adcs x3, x3, x6 - adcs x4, x4, xzr - adc x8, x8, xzr C x8 <= 2 - -L(sum2): - and x0, x2, #0xffffffffffff - add x0, x0, x2, lsr #48 - add x0, x0, x8 - - lsl x8, x3, #16 - and x1, x8, #0xffffffffffff - add x0, x0, x1 - add x0, x0, x3, lsr #32 - - lsl x8, x4, #32 - and x1, x8, #0xffffffffffff - add x0, x0, x1 - add x0, x0, x4, lsr #16 - ret - -L(le2): cmn n, #1 - b.ne L(1) - ldp x2, x3, [ap] - mov x4, #0 - b L(sum2) -L(1): ldr x2, [ap] - and x0, x2, #0xffffffffffff - add x0, x0, x2, lsr #48 - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/mul_1.asm deleted file mode 100644 index c13869938c121c16dc012a62b023e1b5b7893fae..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/mul_1.asm +++ /dev/null @@ -1,98 +0,0 @@ -dnl ARM64 mpn_mul_1 - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -define(`rp', `x0') -define(`up', `x1') -define(`n', `x2') -define(`v0', `x3') - -ASM_START() -PROLOGUE(mpn_mul_1) - ldr x12, [up], #8 - and x6, n, #3 - and n, n, #-4 - cbz x6, L(fi0) - cmp x6, #2 - b.cc L(fi1) - b.eq L(fi2) - -L(fi3): mul x8, x12, v0 - umulh x13, x12, v0 - cmn xzr, xzr - b L(L3) -L(fi2): mul x7, x12, v0 - umulh x5, x12, v0 - cmn xzr, xzr - b L(L2) -L(fi0): mul x9, x12, v0 - umulh x5, x12, v0 - sub n, n, #4 - cmn xzr, xzr - b L(L0) -L(fi1): mul x10, x12, v0 - umulh x13, x12, v0 - cmn xzr, xzr - cbz n, L(end) - -L(top): sub n, n, #4 - ldr x12, [up], #8 - mul x6, x12, v0 - umulh x5, x12, v0 - str x10, [rp], #8 - adcs x9, x6, x13 -L(L0): ldr x12, [up], #8 - mul x6, x12, v0 - umulh x13, x12, v0 - str x9, [rp] ,#8 - adcs x8, x6, x5 -L(L3): ldr x12, [up], #8 - mul x6, x12, v0 - umulh x5, x12, v0 - str x8, [rp], #8 - adcs x7, x6, x13 -L(L2): ldr x12, [up], #8 - mul x6, x12, v0 - umulh x13, x12, v0 - str x7, [rp], #8 - adcs x10, x6, x5 - cbnz n, L(top) - -L(end): str x10, [rp] - adc x0, x13, xzr - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/popcount.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/popcount.asm deleted file mode 100644 index 8c95c1fcc5e9cb9af0a7aefc85618c0c4d4a5440..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/popcount.asm +++ /dev/null @@ -1,156 +0,0 @@ -dnl ARM64 Neon mpn_popcount -- mpn bit population count. - -dnl Copyright 2013, 2014 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -C TODO -C * Consider greater unrolling. -C * Arrange to align the pointer, if that helps performance. Use the same -C read-and-mask trick we use on PCs, for simplicity and performance. (Sorry -C valgrind!) -C * Explore if explicit align directives, e.g., "[ptr:128]" help. -C * See rth's gmp-devel 2013-02/03 messages about final summation tricks. - -changecom(@&*$) - -C INPUT PARAMETERS -define(`ap', x0) -define(`n', x1) - -C We sum into 16 16-bit counters in v4,v5, but at the end we sum them and end -C up with 8 16-bit counters. Therefore, we can sum to 8(2^16-1) bits, or -C (8*2^16-1)/64 = 0x1fff limbs. We use a chunksize close to that, but which -C allows the huge count code to jump deep into the code (at L(chu)). - -define(`maxsize', 0x1fff) -define(`chunksize',0x1ff0) - -ASM_START() -PROLOGUE(mpn_popcount) - - mov x11, #maxsize - cmp n, x11 - b.hi L(gt8k) - -L(lt8k): - movi v4.16b, #0 C clear summation register - movi v5.16b, #0 C clear summation register - - tbz n, #0, L(xx0) - sub n, n, #1 - ld1 {v0.1d}, [ap], #8 C load 1 limb - cnt v6.16b, v0.16b - uadalp v4.8h, v6.16b C could also splat - -L(xx0): tbz n, #1, L(x00) - sub n, n, #2 - ld1 {v0.2d}, [ap], #16 C load 2 limbs - cnt v6.16b, v0.16b - uadalp v4.8h, v6.16b - -L(x00): tbz n, #2, L(000) - subs n, n, #4 - ld1 {v0.2d,v1.2d}, [ap], #32 C load 4 limbs - b.ls L(sum) - -L(gt4): ld1 {v2.2d,v3.2d}, [ap], #32 C load 4 limbs - sub n, n, #4 - cnt v6.16b, v0.16b - cnt v7.16b, v1.16b - b L(mid) - -L(000): subs n, n, #8 - b.lo L(e0) - -L(chu): ld1 {v2.2d,v3.2d}, [ap], #32 C load 4 limbs - ld1 {v0.2d,v1.2d}, [ap], #32 C load 4 limbs - cnt v6.16b, v2.16b - cnt v7.16b, v3.16b - subs n, n, #8 - b.lo L(end) - -L(top): ld1 {v2.2d,v3.2d}, [ap], #32 C load 4 limbs - uadalp v4.8h, v6.16b - cnt v6.16b, v0.16b - uadalp v5.8h, v7.16b - cnt v7.16b, v1.16b -L(mid): ld1 {v0.2d,v1.2d}, [ap], #32 C load 4 limbs - subs n, n, #8 - uadalp v4.8h, v6.16b - cnt v6.16b, v2.16b - uadalp v5.8h, v7.16b - cnt v7.16b, v3.16b - b.hs L(top) - -L(end): uadalp v4.8h, v6.16b - uadalp v5.8h, v7.16b -L(sum): cnt v6.16b, v0.16b - cnt v7.16b, v1.16b - uadalp v4.8h, v6.16b - uadalp v5.8h, v7.16b - add v4.8h, v4.8h, v5.8h - C we have 8 16-bit counts -L(e0): uaddlp v4.4s, v4.8h C we have 4 32-bit counts - uaddlp v4.2d, v4.4s C we have 2 64-bit counts - mov x0, v4.d[0] - mov x1, v4.d[1] - add x0, x0, x1 - ret - -C Code for count > maxsize. Splits operand and calls above code. -define(`ap2', x5) C caller-saves reg not used above -L(gt8k): - mov x8, x30 - mov x7, n C full count (caller-saves reg not used above) - mov x4, #0 C total sum (caller-saves reg not used above) - mov x9, #chunksize*8 C caller-saves reg not used above - mov x10, #chunksize C caller-saves reg not used above - -1: add ap2, ap, x9 C point at subsequent block - mov n, #chunksize-8 C count for this invocation, adjusted for entry pt - movi v4.16b, #0 C clear chunk summation register - movi v5.16b, #0 C clear chunk summation register - bl L(chu) C jump deep inside code - add x4, x4, x0 - mov ap, ap2 C put chunk pointer in place for calls - sub x7, x7, x10 - cmp x7, x11 - b.hi 1b - - mov n, x7 C count for final invocation - bl L(lt8k) - add x0, x4, x0 - mov x30, x8 - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/rshift.asm deleted file mode 100644 index 010b4dce087e61c912792109abe04f14a5857941..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/rshift.asm +++ /dev/null @@ -1,121 +0,0 @@ -dnl ARM64 mpn_rshift. - -dnl Copyright 2013, 2014 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. - -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU Lesser General Public License as published -dnl by the Free Software Foundation; either version 3 of the License, or (at -dnl your option) any later version. - -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -dnl License for more details. - -dnl You should have received a copy of the GNU Lesser General Public License -dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -changecom(@&*$) - -define(`rp_arg', `x0') -define(`up', `x1') -define(`n', `x2') -define(`cnt', `x3') - -define(`rp', `x16') - -define(`tnc',`x8') - -ASM_START() -PROLOGUE(mpn_rshift) - mov rp, rp_arg - sub tnc, xzr, cnt - tbz n, #0, L(bx0) - -L(bx1): ldr x4, [up,#0] - tbnz n, #1, L(b11) - -L(b01): lsl x0, x4, tnc - lsr x18, x4, cnt - sub n, n, #1 - cbnz n, L(gt1) - str x18, [rp,#0] - ret -L(gt1): ldp x5, x4, [up,#8] - sub up, up, #8 - sub rp, rp, #32 - b L(lo2) - -L(b11): lsl x0, x4, tnc - lsr x9, x4, cnt - ldp x7, x6, [up,#8] - add n, n, #1 - sub up, up, #24 - sub rp, rp, #48 - b L(lo0) - -L(bx0): ldp x5, x4, [up,#0] - tbz n, #1, L(b00) - -L(b10): lsl x0, x5, tnc - lsr x13, x5, cnt - lsl x10, x4, tnc - lsr x18, x4, cnt - sub n, n, #2 - cbnz n, L(gt2) - orr x10, x10, x13 - stp x10, x18, [rp,#0] - ret -L(gt2): ldp x5, x4, [up,#16] - orr x10, x10, x13 - str x10, [rp,#0] - sub rp, rp, #24 - b L(lo2) - -L(b00): lsl x0, x5, tnc - lsr x13, x5, cnt - lsl x10, x4, tnc - lsr x9, x4, cnt - ldp x7, x6, [up,#16] - orr x10, x10, x13 - str x10, [rp,#0] - sub up, up, #16 - sub rp, rp, #40 - b L(lo0) - - ALIGN(16) -L(top): ldp x5, x4, [up,#48] - add rp, rp, #32 C integrate with stp? - add up, up, #32 C integrate with ldp? - orr x11, x11, x9 - orr x10, x10, x13 - stp x11, x10, [rp,#16] -L(lo2): lsl x11, x5, tnc - lsr x13, x5, cnt - lsl x10, x4, tnc - lsr x9, x4, cnt - ldp x7, x6, [up,#32] - orr x11, x11, x18 - orr x10, x10, x13 - stp x11, x10, [rp,#32] -L(lo0): sub n, n, #4 - lsl x11, x7, tnc - lsr x13, x7, cnt - lsl x10, x6, tnc - lsr x18, x6, cnt - cbnz n, L(top) - -L(end): orr x11, x11, x9 - orr x10, x10, x13 - stp x11, x10, [rp,#48] - str x18, [rp,#64] - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/sec_tabselect.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/sec_tabselect.asm deleted file mode 100644 index bf2962cfa1bb5ed191da4151f1b4dde397e8afa3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/arm64/sec_tabselect.asm +++ /dev/null @@ -1,121 +0,0 @@ -dnl ARM64 Neon mpn_sec_tabselect. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2011-2014 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C Cortex-A53 ? -C Cortex-A57 ? - -C void -C mpn_sec_tabselect (mp_ptr rp, mp_srcptr *tab, -C mp_size_t n, mp_size_t nents, mp_size_t which) - -changecom(@&*$) - -define(`rp', `x0') -define(`tp', `x1') -define(`n', `x2') -define(`nents', `x3') -define(`which', `x4') - -define(`i', `x5') -define(`j', `x6') - -define(`maskq', `v4') - -ASM_START() -PROLOGUE(mpn_sec_tabselect) - dup v7.2d, x4 C 2 `which' copies - - mov x10, #1 - dup v6.2d, x10 C 2 copies of 1 - - subs j, n, #4 - b.mi L(outer_end) - -L(outer_top): - mov i, nents - mov x12, tp C preserve tp - movi v5.16b, #0 C zero 2 counter copies - movi v2.16b, #0 - movi v3.16b, #0 - ALIGN(16) -L(tp4): cmeq maskq.2d, v5.2d, v7.2d C compare idx copies to `which' copies - ld1 {v0.2d,v1.2d}, [tp] - add v5.2d, v5.2d, v6.2d - bit v2.16b, v0.16b, maskq.16b - bit v3.16b, v1.16b, maskq.16b - add tp, tp, n, lsl #3 - sub i, i, #1 - cbnz i, L(tp4) - st1 {v2.2d,v3.2d}, [rp], #32 - add tp, x12, #32 C restore tp, point to next slice - subs j, j, #4 - b.pl L(outer_top) -L(outer_end): - - tbz n, #1, L(b0x) - mov i, nents - mov x12, tp - movi v5.16b, #0 C zero 2 counter copies - movi v2.16b, #0 - ALIGN(16) -L(tp2): cmeq maskq.2d, v5.2d, v7.2d - ld1 {v0.2d}, [tp] - add v5.2d, v5.2d, v6.2d - bit v2.16b, v0.16b, maskq.16b - add tp, tp, n, lsl #3 - sub i, i, #1 - cbnz i, L(tp2) - st1 {v2.2d}, [rp], #16 - add tp, x12, #16 - -L(b0x): tbz n, #0, L(b00) - mov i, nents - mov x12, tp - movi v5.16b, #0 C zero 2 counter copies - movi v2.16b, #0 - ALIGN(16) -L(tp1): cmeq maskq.2d, v5.2d, v7.2d - ld1 {v0.1d}, [tp] - add v5.2d, v5.2d, v6.2d C FIXME size should be `1d' - bit v2.8b, v0.8b, maskq.8b - add tp, tp, n, lsl #3 - sub i, i, #1 - cbnz i, L(tp1) - st1 {v2.1d}, [rp], #8 - add tp, x12, #8 - -L(b00): ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/asm-defs.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/asm-defs.m4 deleted file mode 100644 index e573cc4ca82d02f971e76245673ed8aeecc567c6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/asm-defs.m4 +++ /dev/null @@ -1,1761 +0,0 @@ -divert(-1) -dnl -dnl m4 macros for gmp assembly code, shared by all CPUs. - -dnl Copyright 1999-2006, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl These macros are designed for use with any m4 and have been used on -dnl GNU, FreeBSD, NetBSD, OpenBSD and SysV. -dnl -dnl GNU m4 and OpenBSD 2.7 m4 will give filenames and line numbers in error -dnl messages. -dnl -dnl -dnl Macros: -dnl -dnl Most new m4 specific macros have an "m4_" prefix to emphasise they're -dnl m4 expansions. But new defining things like deflit() and defreg() are -dnl named like the builtin define(), and forloop() is named following the -dnl GNU m4 example on which it's based. -dnl -dnl GNU m4 with the -P option uses "m4_" as a prefix for builtins, but that -dnl option isn't going to be used, so there's no conflict or confusion. -dnl -dnl -dnl Comments in output: -dnl -dnl The m4 comment delimiters are left at # and \n, the normal assembler -dnl commenting for most CPUs. m4 passes comment text through without -dnl expanding macros in it, which is generally a good thing since it stops -dnl unexpected expansions and possible resultant errors. -dnl -dnl But note that when a quoted string is being read, a # isn't special, so -dnl apostrophes in comments in quoted strings must be avoided or they'll be -dnl interpreted as a closing quote mark. But when the quoted text is -dnl re-read # will still act like a normal comment, suppressing macro -dnl expansion. -dnl -dnl For example, -dnl -dnl # apostrophes in comments that're outside quotes are ok -dnl # and using macro names like PROLOGUE is ok too -dnl ... -dnl ifdef(`PIC',` -dnl # but apostrophes aren't ok inside quotes -dnl # ^--wrong -dnl ... -dnl # though macro names like PROLOGUE are still ok -dnl ... -dnl ') -dnl -dnl If macro expansion in a comment is wanted, use `#' in the .asm (ie. a -dnl quoted hash symbol), which will turn into # in the .s but get -dnl expansions done on that line. This can make the .s more readable to -dnl humans, but it won't make a blind bit of difference to the assembler. -dnl -dnl All the above applies, mutatis mutandis, when changecom() is used to -dnl select @ ! ; or whatever other commenting. -dnl -dnl -dnl Variations in m4 affecting gmp: -dnl -dnl $# - When a macro is called as "foo" with no brackets, BSD m4 sets $# -dnl to 1, whereas GNU or SysV m4 set it to 0. In all cases though -dnl "foo()" sets $# to 1. This is worked around in various places. -dnl -dnl len() - When "len()" is given an empty argument, BSD m4 evaluates to -dnl nothing, whereas GNU, SysV, and the new OpenBSD, evaluate to 0. -dnl See m4_length() below which works around this. -dnl -dnl translit() - GNU m4 accepts character ranges like A-Z, and the new -dnl OpenBSD m4 does under option -g, but basic BSD and SysV don't. -dnl -dnl popdef() - in BSD and SysV m4 popdef() takes multiple arguments and -dnl pops each, but GNU m4 only takes one argument. -dnl -dnl push back - BSD m4 has some limits on the amount of text that can be -dnl pushed back. The limit is reasonably big and so long as macros -dnl don't gratuitously duplicate big arguments it isn't a problem. -dnl Normally an error message is given, but sometimes it just hangs. -dnl -dnl eval() &,|,^ - GNU and SysV m4 have bitwise operators &,|,^ available, -dnl but BSD m4 doesn't (contrary to what the man page suggests) and -dnl instead ^ is exponentiation. -dnl -dnl eval() ?: - The C ternary operator "?:" is available in BSD m4, but not -dnl in SysV or GNU m4 (as of GNU m4 1.4 and betas of 1.5). -dnl -dnl eval() -2^31 - BSD m4 has a bug where an eval() resulting in -2^31 -dnl (ie. -2147483648) gives "-(". Using -2147483648 within an -dnl expression is ok, it just can't be a final result. "-(" will of -dnl course upset parsing, with all sorts of strange effects. -dnl -dnl eval() <<,>> - SysV m4 doesn't support shift operators in eval() (on -dnl Solaris 7 /usr/xpg4/m4 has them but /usr/ccs/m4 doesn't). See -dnl m4_lshift() and m4_rshift() below for workarounds. -dnl -dnl ifdef() - OSF 4.0 m4 considers a macro defined to a zero value `0' or -dnl `00' etc as not defined. See m4_ifdef below for a workaround. -dnl -dnl m4wrap() sequence - in BSD m4, m4wrap() replaces any previous m4wrap() -dnl string, in SysV m4 it appends to it, and in GNU m4 it prepends. -dnl See m4wrap_prepend() below which brings uniformity to this. -dnl -dnl m4wrap() 0xFF - old versions of BSD m4 store EOF in a C "char" under an -dnl m4wrap() and on systems where char is unsigned by default a -dnl spurious 0xFF is output. This has been observed on recent Cray -dnl Unicos Alpha, Apple MacOS X, and HPUX 11 systems. An autoconf -dnl test is used to check for this, see the m4wrap handling below. It -dnl might work to end the m4wrap string with a dnl to consume the -dnl 0xFF, but that probably induces the offending m4's to read from an -dnl already closed "FILE *", which could be bad on a glibc style -dnl stdio. -dnl -dnl __file__,__line__ - GNU m4 and OpenBSD 2.7 m4 provide these, and -dnl they're used here to make error messages more informative. GNU m4 -dnl gives an unhelpful "NONE 0" in an m4wrap(), but that's worked -dnl around. -dnl -dnl __file__ quoting - OpenBSD m4, unlike GNU m4, doesn't quote the -dnl filename in __file__, so care should be taken that no macro has -dnl the same name as a file, or an unwanted expansion will occur when -dnl printing an error or warning. -dnl -dnl changecom() - BSD m4 changecom doesn't quite work like the man page -dnl suggests, in particular "changecom" or "changecom()" doesn't -dnl disable the comment feature, and multi-character comment sequences -dnl don't seem to work. If the default `#' and newline aren't -dnl suitable it's necessary to change it to something else, -dnl eg. changecom(;). -dnl -dnl OpenBSD 2.6 m4 - in this m4, eval() rejects decimal constants containing -dnl an 8 or 9, making it pretty much unusable. The bug is confined to -dnl version 2.6 (it's not in 2.5, and was fixed in 2.7). -dnl -dnl SunOS /usr/bin/m4 - this m4 lacks a number of desired features, -dnl including $# and $@, defn(), m4exit(), m4wrap(), pushdef(), -dnl popdef(). /usr/5bin/m4 is a SysV style m4 which should always be -dnl available, and "configure" will reject /usr/bin/m4 in favour of -dnl /usr/5bin/m4 (if necessary). -dnl -dnl The sparc code actually has modest m4 requirements currently and -dnl could manage with /usr/bin/m4, but there's no reason to put our -dnl macros through contortions when /usr/5bin/m4 is available or GNU -dnl m4 can be installed. - - -ifdef(`__ASM_DEFS_M4_INCLUDED__', -`m4_error(`asm-defs.m4 already included, dont include it twice -')m4exit(1)') -define(`__ASM_DEFS_M4_INCLUDED__') - - -dnl Detect and give a message about the unsuitable OpenBSD 2.6 m4. - -ifelse(eval(89),89,, -`errprint( -`This m4 doesnt accept 8 and/or 9 in constants in eval(), making it unusable. -This is probably OpenBSD 2.6 m4 (September 1999). Upgrade to OpenBSD 2.7, -or get a bug fix from the CVS (expr.c rev 1.9), or get GNU m4. Dont forget -to configure with M4=/wherever/m4 if you install one of these in a directory -not in $PATH. -')m4exit(1)') - - -dnl Detect and give a message about the unsuitable SunOS /usr/bin/m4. -dnl -dnl Unfortunately this test doesn't work when m4 is run in the normal way -dnl from mpn/Makefile with "m4 -DOPERATION_foo foo.asm", since the bad m4 -dnl takes "-" in "-D..." to mean read stdin, so it will look like it just -dnl hangs. But running "m4 asm-defs.m4" to try it out will work. -dnl -dnl We'd like to abort immediately on finding a problem, but unfortunately -dnl the bad m4 doesn't have an m4exit(), nor does an invalid eval() kill -dnl it. Unexpanded $#'s in some m4_assert_numargs() later on will comment -dnl out some closing parentheses and kill it with "m4: arg stack overflow". - -define(m4_dollarhash_works_test,``$#'') -ifelse(m4_dollarhash_works_test(x),1,, -`errprint( -`This m4 doesnt support $# and cant be used for GMP asm processing. -If this is on SunOS, ./configure should choose /usr/5bin/m4 if you have that -or can get it, otherwise install GNU m4. Dont forget to configure with -M4=/wherever/m4 if you install in a directory not in $PATH. -')') -undefine(`m4_dollarhash_works_test') - - -dnl -------------------------------------------------------------------------- -dnl Basic error handling things. - - -dnl Usage: m4_dollarhash_1_if_noparen_p -dnl -dnl Expand to 1 if a call "foo" gives $# set to 1 (as opposed to 0 like GNU -dnl and SysV m4 give). - -define(m4_dollarhash_1_if_noparen_test,`$#') -define(m4_dollarhash_1_if_noparen_p, -eval(m4_dollarhash_1_if_noparen_test==1)) -undefine(`m4_dollarhash_1_if_noparen_test') - - -dnl Usage: m4wrap_prepend(string) -dnl -dnl Prepend the given string to what will be expanded under m4wrap at the -dnl end of input. -dnl -dnl This macro exists to work around variations in m4wrap() behaviour in -dnl the various m4s (notes at the start of this file). Don't use m4wrap() -dnl directly since it will interfere with this scheme. - -define(m4wrap_prepend, -m4_assert_numargs(1) -`define(`m4wrap_string',`$1'defn(`m4wrap_string'))') - -define(m4wrap_string,`') - -define(m4wrap_works_p, -`ifelse(M4WRAP_SPURIOUS,yes,0,1)') - -ifelse(m4wrap_works_p,1, -`m4wrap(`m4wrap_string')') - - -dnl Usage: m4_file_and_line -dnl -dnl Expand to the current file and line number, if the GNU m4 extensions -dnl __file__ and __line__ are available. -dnl -dnl In GNU m4 1.4 at the end of input when m4wrap text is expanded, -dnl __file__ is NONE and __line__ is 0, which is not a helpful thing to -dnl print. If m4_file_seen() has been called to note the last file seen, -dnl then that file at a big line number is used, otherwise "end of input" -dnl is used (although "end of input" won't parse as an error message). - -define(m4_file_and_line, -`ifdef(`__file__', -`ifelse(__file__`'__line__,`NONE0', -`ifdef(`m4_file_seen_last',`m4_file_seen_last: 999999: ',`end of input: ')', -`__file__: __line__: ')')') - - -dnl Usage: m4_errprint_commas(arg,...) -dnl -dnl The same as errprint(), but commas are printed between arguments -dnl instead of spaces. - -define(m4_errprint_commas, -`errprint(`$1')dnl -ifelse(eval($#>1),1,`errprint(`,')m4_errprint_commas(shift($@))')') - - -dnl Usage: m4_error(args...) -dnl m4_warning(args...) -dnl -dnl Print an error message, using m4_errprint_commas, prefixed with the -dnl current filename and line number (if available). m4_error sets up to -dnl give an error exit at the end of processing, m4_warning just prints. -dnl These macros are the recommended way to print errors. -dnl -dnl The arguments here should be quoted in the usual way to prevent them -dnl being expanded when the macro call is read. (m4_error takes care not -dnl to do any further expansion.) -dnl -dnl For example, -dnl -dnl m4_error(`some error message -dnl ') -dnl -dnl which prints -dnl -dnl foo.asm:123: some error message -dnl -dnl or if __file__ and __line__ aren't available -dnl -dnl some error message -dnl -dnl The "file:line:" format is a basic style, used by gcc and GNU m4, so -dnl emacs and other editors will recognise it in their normal error message -dnl parsing. - -define(m4_warning, -`m4_errprint_commas(m4_file_and_line`'$@)') - -define(m4_error, -`define(`m4_error_occurred',1)m4_warning($@)dnl -ifelse(m4wrap_works_p,0,`m4exit(1)')') - -define(`m4_error_occurred',0) - -dnl This m4wrap_prepend() is first, so it'll be executed last. -m4wrap_prepend( -`ifelse(m4_error_occurred,1, -`m4_error(`Errors occurred during m4 processing -')m4exit(1)')') - - -dnl Usage: m4_assert_numargs(num) -dnl -dnl Put this unquoted on a line on its own at the start of a macro -dnl definition to add some code to check that num many arguments get passed -dnl to the macro. For example, -dnl -dnl define(foo, -dnl m4_assert_numargs(2) -dnl `something `$1' and `$2' blah blah') -dnl -dnl Then a call like foo(one,two,three) will provoke an error like -dnl -dnl file:10: foo expected 2 arguments, got 3 arguments -dnl -dnl Here are some calls and how many arguments they're interpreted as passing. -dnl -dnl foo(abc,def) 2 -dnl foo(xyz) 1 -dnl foo() 0 -dnl foo -1 -dnl -dnl The -1 for no parentheses at all means a macro that's meant to be used -dnl that way can be checked with m4_assert_numargs(-1). For example, -dnl -dnl define(SPECIAL_SUFFIX, -dnl m4_assert_numargs(-1) -dnl `ifdef(`FOO',`_foo',`_bar')') -dnl -dnl But as an alternative see also deflit() below where parenthesized -dnl expressions following a macro are passed through to the output. -dnl -dnl Note that in BSD m4 there's no way to differentiate calls "foo" and -dnl "foo()", so in BSD m4 the distinction between the two isn't enforced. -dnl (In GNU and SysV m4 it can be checked, and is.) - - -dnl m4_assert_numargs is able to check its own arguments by calling -dnl assert_numargs_internal directly. -dnl -dnl m4_doublequote($`'0) expands to ``$0'', whereas ``$`'0'' would expand -dnl to `$`'0' and do the wrong thing, and likewise for $1. The same is -dnl done in other assert macros. -dnl -dnl $`#' leaves $# in the new macro being defined, and stops # being -dnl interpreted as a comment character. -dnl -dnl `dnl ' means an explicit dnl isn't necessary when m4_assert_numargs is -dnl used. The space means that if there is a dnl it'll still work. - -dnl Usage: m4_doublequote(x) expands to ``x'' -define(m4_doublequote, -`m4_assert_numargs_internal(`$0',1,$#,len(`$1'))``$1''') - -define(m4_assert_numargs, -`m4_assert_numargs_internal(`$0',1,$#,len(`$1'))dnl -`m4_assert_numargs_internal'(m4_doublequote($`'0),$1,$`#',`len'(m4_doublequote($`'1)))`dnl '') - -dnl Called: m4_assert_numargs_internal(`macroname',wantargs,$#,len(`$1')) -define(m4_assert_numargs_internal, -`m4_assert_numargs_internal_check(`$1',`$2',m4_numargs_count(`$3',`$4'))') - -dnl Called: m4_assert_numargs_internal_check(`macroname',wantargs,gotargs) -dnl -dnl If m4_dollarhash_1_if_noparen_p (BSD m4) then gotargs can be 0 when it -dnl should be -1. If wantargs is -1 but gotargs is 0 and the two can't be -dnl distinguished then it's allowed to pass. -dnl -define(m4_assert_numargs_internal_check, -`ifelse(eval($2 == $3 - || ($2==-1 && $3==0 && m4_dollarhash_1_if_noparen_p)),0, -`m4_error(`$1 expected 'm4_Narguments(`$2')`, got 'm4_Narguments(`$3') -)')') - -dnl Called: m4_numargs_count($#,len(`$1')) -dnl If $#==0 then -1 args, if $#==1 but len(`$1')==0 then 0 args, otherwise -dnl $# args. -define(m4_numargs_count, -`ifelse($1,0, -1, -`ifelse(eval($1==1 && $2-0==0),1, 0, $1)')') - -dnl Usage: m4_Narguments(N) -dnl "$1 argument" or "$1 arguments" with the plural according to $1. -define(m4_Narguments, -`$1 argument`'ifelse(`$1',1,,s)') - - -dnl -------------------------------------------------------------------------- -dnl Additional error checking things. - - -dnl Usage: m4_file_seen() -dnl -dnl Record __file__ for the benefit of m4_file_and_line in m4wrap text. -dnl -dnl The basic __file__ macro comes out quoted in GNU m4, like `foo.asm', -dnl and m4_file_seen_last is defined like that too. -dnl -dnl This is used by PROLOGUE, since that's normally in the main .asm file, -dnl and in particular it sets up m4wrap error checks for missing EPILOGUE. - -define(m4_file_seen, -m4_assert_numargs(0) -`ifelse(__file__,`NONE',, -`define(`m4_file_seen_last',m4_doublequote(__file__))')') - - -dnl Usage: m4_assert_onearg() -dnl -dnl Put this, unquoted, at the start of a macro definition to add some code -dnl to check that one argument is passed to the macro, but with that -dnl argument allowed to be empty. For example, -dnl -dnl define(foo, -dnl m4_assert_onearg() -dnl `blah blah $1 blah blah') -dnl -dnl Calls "foo(xyz)" or "foo()" are accepted. A call "foo(xyz,abc)" fails. -dnl A call "foo" fails too, but BSD m4 can't detect this case (GNU and SysV -dnl m4 can). - -define(m4_assert_onearg, -m4_assert_numargs(0) -`m4_assert_onearg_internal'(m4_doublequote($`'0),$`#')`dnl ') - -dnl Called: m4_assert_onearg(`macroname',$#) -define(m4_assert_onearg_internal, -`ifelse($2,1,, -`m4_error(`$1 expected 1 argument, got 'm4_Narguments(`$2') -)')') - - -dnl Usage: m4_assert_numargs_range(low,high) -dnl -dnl Put this, unquoted, at the start of a macro definition to add some code -dnl to check that between low and high many arguments get passed to the -dnl macro. For example, -dnl -dnl define(foo, -dnl m4_assert_numargs_range(3,5) -dnl `mandatory $1 $2 $3 optional $4 $5 end') -dnl -dnl See m4_assert_numargs() for more info. - -define(m4_assert_numargs_range, -m4_assert_numargs(2) -``m4_assert_numargs_range_internal'(m4_doublequote($`'0),$1,$2,$`#',`len'(m4_doublequote($`'1)))`dnl '') - -dnl Called: m4_assert_numargs_range_internal(`name',low,high,$#,len(`$1')) -define(m4_assert_numargs_range_internal, -m4_assert_numargs(5) -`m4_assert_numargs_range_check(`$1',`$2',`$3',m4_numargs_count(`$4',`$5'))') - -dnl Called: m4_assert_numargs_range_check(`name',low,high,gotargs) -dnl -dnl If m4_dollarhash_1_if_noparen_p (BSD m4) then gotargs can be 0 when it -dnl should be -1. To ensure a `high' of -1 works, a fudge is applied to -dnl gotargs if it's 0 and the 0 and -1 cases can't be distinguished. -dnl -define(m4_assert_numargs_range_check, -m4_assert_numargs(4) -`ifelse(eval($2 <= $4 && - ($4 - ($4==0 && m4_dollarhash_1_if_noparen_p) <= $3)),0, -`m4_error(`$1 expected $2 to $3 arguments, got 'm4_Narguments(`$4') -)')') - - -dnl Usage: m4_assert_defined(symbol) -dnl -dnl Put this unquoted on a line of its own at the start of a macro -dnl definition to add some code to check that the given symbol is defined -dnl when the macro is used. For example, -dnl -dnl define(foo, -dnl m4_assert_defined(`FOO_PREFIX') -dnl `FOO_PREFIX whatever') -dnl -dnl This is a convenient way to check that the user or ./configure or -dnl whatever has defined the things needed by a macro, as opposed to -dnl silently generating garbage. - -define(m4_assert_defined, -m4_assert_numargs(1) -``m4_assert_defined_internal'(m4_doublequote($`'0),``$1'')`dnl '') - -dnl Called: m4_assert_defined_internal(`macroname',`define_required') -define(m4_assert_defined_internal, -m4_assert_numargs(2) -`m4_ifdef(`$2',, -`m4_error(`$1 needs $2 defined -')')') - - -dnl Usage: m4_not_for_expansion(`SYMBOL') -dnl define_not_for_expansion(`SYMBOL') -dnl -dnl m4_not_for_expansion turns SYMBOL, if defined, into something which -dnl will give an error if expanded. For example, -dnl -dnl m4_not_for_expansion(`PIC') -dnl -dnl define_not_for_expansion is the same, but always makes a definition. -dnl -dnl These are for symbols that should be tested with ifdef(`FOO',...) -dnl rather than be expanded as such. They guard against accidentally -dnl omitting the quotes, as in ifdef(FOO,...). Note though that they only -dnl catches this when FOO is defined, so be sure to test code both with and -dnl without each definition. - -define(m4_not_for_expansion, -m4_assert_numargs(1) -`ifdef(`$1',`define_not_for_expansion(`$1')')') - -define(define_not_for_expansion, -m4_assert_numargs(1) -`ifelse(defn(`$1'),,, -`m4_error(``$1' has a non-empty value, maybe it shouldnt be munged with m4_not_for_expansion() -')')dnl -define(`$1',`m4_not_for_expansion_internal(`$1')')') - -define(m4_not_for_expansion_internal, -`m4_error(``$1' is not meant to be expanded, perhaps you mean `ifdef(`$1',...)' -')') - - -dnl -------------------------------------------------------------------------- -dnl Various generic m4 things. - - -dnl Usage: m4_unquote(macro) -dnl -dnl Allow the argument text to be re-evaluated. This is useful for "token -dnl pasting" like m4_unquote(foo`'bar). - -define(m4_unquote, -m4_assert_onearg() -`$1') - - -dnl Usage: m4_ifdef(name,yes[,no]) -dnl -dnl Expand to the yes argument if name is defined, or to the no argument if -dnl not. -dnl -dnl This is the same as the builtin "ifdef", but avoids an OSF 4.0 m4 bug -dnl in which a macro with a zero value `0' or `00' etc is considered not -dnl defined. -dnl -dnl There's no particular need to use this everywhere, only if there might -dnl be a zero value. - -define(m4_ifdef, -m4_assert_numargs_range(2,3) -`ifelse(eval(ifdef(`$1',1,0)+m4_length(defn(`$1'))),0, -`$3',`$2')') - - -dnl Usage: m4_ifdef_anyof_p(`symbol',...) -dnl -dnl Expand to 1 if any of the symbols in the argument list are defined, or -dnl to 0 if not. - -define(m4_ifdef_anyof_p, -`ifelse(eval($#<=1 && m4_length(`$1')==0),1, 0, -`ifdef(`$1', 1, -`m4_ifdef_anyof_p(shift($@))')')') - - -dnl Usage: m4_length(string) -dnl -dnl Determine the length of a string. This is the same as len(), but -dnl always expands to a number, working around the BSD len() which -dnl evaluates to nothing given an empty argument. - -define(m4_length, -m4_assert_onearg() -`eval(len(`$1')-0)') - - -dnl Usage: m4_stringequal_p(x,y) -dnl -dnl Expand to 1 or 0 according as strings x and y are equal or not. - -define(m4_stringequal_p, -`ifelse(`$1',`$2',1,0)') - - -dnl Usage: m4_incr_or_decr(n,last) -dnl -dnl Do an incr(n) or decr(n), whichever is in the direction of "last". -dnl Both n and last must be numbers of course. - -define(m4_incr_or_decr, -m4_assert_numargs(2) -`ifelse(eval($1<$2),1,incr($1),decr($1))') - - -dnl Usage: forloop(i, first, last, statement) -dnl -dnl Based on GNU m4 examples/forloop.m4, but extended. -dnl -dnl statement is expanded repeatedly, with i successively defined as -dnl -dnl first, first+1, ..., last-1, last -dnl -dnl Or if first > last, then it's -dnl -dnl first, first-1, ..., last+1, last -dnl -dnl If first == last, then one expansion is done. -dnl -dnl A pushdef/popdef of i is done to preserve any previous definition (or -dnl lack of definition). first and last are eval()ed and so can be -dnl expressions. -dnl -dnl forloop_first is defined to 1 on the first iteration, 0 on the rest. -dnl forloop_last is defined to 1 on the last iteration, 0 on the others. -dnl Nested forloops are allowed, in which case forloop_first and -dnl forloop_last apply to the innermost loop that's open. -dnl -dnl A simple example, -dnl -dnl forloop(i, 1, 2*2+1, `dnl -dnl iteration number i ... ifelse(forloop_first,1,FIRST) -dnl ') - - -dnl "i" and "statement" are carefully quoted, but "first" and "last" are -dnl just plain numbers once eval()ed. - -define(`forloop', -m4_assert_numargs(4) -`pushdef(`$1',eval(`$2'))dnl -pushdef(`forloop_first',1)dnl -pushdef(`forloop_last',0)dnl -forloop_internal(`$1',eval(`$3'),`$4')`'dnl -popdef(`forloop_first')dnl -popdef(`forloop_last')dnl -popdef(`$1')') - -dnl Called: forloop_internal(`var',last,statement) -define(`forloop_internal', -m4_assert_numargs(3) -`ifelse($1,$2, -`define(`forloop_last',1)$3', -`$3`'dnl -define(`forloop_first',0)dnl -define(`$1',m4_incr_or_decr($1,$2))dnl -forloop_internal(`$1',$2,`$3')')') - - -dnl Usage: foreach(var,body, item1,item2,...,itemN) -dnl -dnl For each "item" argument, define "var" to that value and expand "body". -dnl For example, -dnl -dnl foreach(i, `something i -dnl ', one, two) -dnl gives -dnl something one -dnl something two -dnl -dnl Any previous definition of "var", or lack thereof, is saved and -dnl restored. Empty "item"s are not allowed. - -define(foreach, -m4_assert_numargs_range(2,1000) -`ifelse(`$3',,, -`pushdef(`$1',`$3')$2`'popdef(`$1')dnl -foreach(`$1',`$2',shift(shift(shift($@))))')') - - -dnl Usage: m4_toupper(x) -dnl m4_tolower(x) -dnl -dnl Convert the argument string to upper or lower case, respectively. -dnl Only one argument accepted. -dnl -dnl BSD m4 doesn't take ranges like a-z in translit(), so the full alphabet -dnl is written out. - -define(m4_alphabet_lower, `abcdefghijklmnopqrstuvwxyz') -define(m4_alphabet_upper, `ABCDEFGHIJKLMNOPQRSTUVWXYZ') - -define(m4_toupper, -m4_assert_onearg() -`translit(`$1', m4_alphabet_lower, m4_alphabet_upper)') - -define(m4_tolower, -m4_assert_onearg() -`translit(`$1', m4_alphabet_upper, m4_alphabet_lower)') - - -dnl Usage: m4_empty_if_zero(x) -dnl -dnl Evaluate to x, or to nothing if x is 0. x is eval()ed and so can be an -dnl expression. -dnl -dnl This is useful for x86 addressing mode displacements since forms like -dnl (%ebx) are one byte shorter than 0(%ebx). A macro `foo' for use as -dnl foo(%ebx) could be defined with the following so it'll be empty if the -dnl expression comes out zero. -dnl -dnl deflit(`foo', `m4_empty_if_zero(a+b*4-c)') -dnl -dnl Naturally this shouldn't be done if, say, a computed jump depends on -dnl the code being a particular size. - -define(m4_empty_if_zero, -m4_assert_onearg() -`ifelse(eval($1),0,,eval($1))') - - -dnl Usage: m4_log2(x) -dnl -dnl Calculate a logarithm to base 2. -dnl x must be an integral power of 2, between 2**0 and 2**30. -dnl x is eval()ed, so it can be an expression. -dnl An error results if x is invalid. -dnl -dnl 2**31 isn't supported, because an unsigned 2147483648 is out of range -dnl of a 32-bit signed int. Also, the bug in BSD m4 where an eval() -dnl resulting in 2147483648 (or -2147483648 as the case may be) gives `-(' -dnl means tests like eval(1<<31==(x)) would be necessary, but that then -dnl gives an unattractive explosion of eval() error messages if x isn't -dnl numeric. - -define(m4_log2, -m4_assert_numargs(1) -`m4_log2_internal(0,1,eval(`$1'))') - -dnl Called: m4_log2_internal(n,2**n,target) -define(m4_log2_internal, -m4_assert_numargs(3) -`ifelse($2,$3,$1, -`ifelse($1,30, -`m4_error(`m4_log2() argument too big or not a power of two: $3 -')', -`m4_log2_internal(incr($1),eval(2*$2),$3)')')') - - -dnl Usage: m4_div2_towards_zero -dnl -dnl m4 division is probably whatever a C signed division is, and C doesn't -dnl specify what rounding gets used on negatives, so this expression forces -dnl a rounding towards zero. - -define(m4_div2_towards_zero, -m4_assert_numargs(1) -`eval((($1) + ((($1)<0) & ($1))) / 2)') - - -dnl Usage: m4_lshift(n,count) -dnl m4_rshift(n,count) -dnl -dnl Calculate n shifted left or right by count many bits. Both n and count -dnl are eval()ed and so can be expressions. -dnl -dnl Negative counts are allowed and mean a shift in the opposite direction. -dnl Negative n is allowed and right shifts will be arithmetic (meaning -dnl divide by 2**count, rounding towards zero, also meaning the sign bit is -dnl duplicated). -dnl -dnl Use these macros instead of << and >> in eval() since the basic ccs -dnl SysV m4 doesn't have those operators. - -define(m4_rshift, -m4_assert_numargs(2) -`m4_lshift(`$1',-(`$2'))') - -define(m4_lshift, -m4_assert_numargs(2) -`m4_lshift_internal(eval(`$1'),eval(`$2'))') - -define(m4_lshift_internal, -m4_assert_numargs(2) -`ifelse(eval($2-0==0),1,$1, -`ifelse(eval($2>0),1, -`m4_lshift_internal(eval($1*2),decr($2))', -`m4_lshift_internal(m4_div2_towards_zero($1),incr($2))')')') - - -dnl Usage: m4_popcount(n) -dnl -dnl Expand to the number 1 bits in n. - -define(m4_popcount, -m4_assert_numargs(1) -`m4_popcount_internal(0,eval(`$1'))') - -dnl Called: m4_popcount_internal(count,rem) -define(m4_popcount_internal, -m4_assert_numargs(2) -`ifelse($2,0,$1, -`m4_popcount_internal(eval($1+($2%2)),eval($2/2))')') - - -dnl Usage: m4_count_trailing_zeros(N) -dnl -dnl Determine the number of trailing zero bits on N. N is eval()ed and so -dnl can be an expression. If N is zero an error is generated. - -define(m4_count_trailing_zeros, -m4_assert_numargs(1) -`m4_count_trailing_zeros_internal(eval(`$1'),0)') - -dnl Called: m4_count_trailing_zeros_internal(val,count) -define(m4_count_trailing_zeros_internal, -m4_assert_numargs(2) -`ifelse($1,0, -`m4_error(`m4_count_trailing_zeros() given a zero value')', -`ifelse(eval(($1)%2),1,`$2', -`m4_count_trailing_zeros_internal(eval($1/2),incr($2))')')') - - -dnl Usage: deflit(name,value) -dnl -dnl Like define(), but "name" expands like a literal, rather than taking -dnl arguments. For example "name(%eax)" expands to "value(%eax)". -dnl -dnl Limitations: -dnl -dnl $ characters in the value part must have quotes to stop them looking -dnl like macro parameters. For example, deflit(reg,`123+$`'4+567'). See -dnl defreg() below for handling simple register definitions like $7 etc. -dnl -dnl "name()" is turned into "name", unfortunately. In GNU and SysV m4 an -dnl error is generated when this happens, but in BSD m4 it will happen -dnl silently. The problem is that in BSD m4 $# is 1 in both "name" or -dnl "name()", so there's no way to differentiate them. Because we want -dnl plain "name" to turn into plain "value", we end up with "name()" -dnl turning into plain "value" too. -dnl -dnl "name(foo)" will lose any whitespace after commas in "foo", for example -dnl "disp(%eax, %ecx)" would become "128(%eax,%ecx)". -dnl -dnl These parentheses oddities shouldn't matter in assembler text, but if -dnl they do the suggested workaround is to write "name ()" or "name (foo)" -dnl to stop the parentheses looking like a macro argument list. If a space -dnl isn't acceptable in the output, then write "name`'()" or "name`'(foo)". -dnl The `' is stripped when read, but again stops the parentheses looking -dnl like parameters. - -dnl Quoting for deflit_emptyargcheck is similar to m4_assert_numargs. The -dnl stuff in the ifelse gives a $#, $1 and $@ evaluated in the new macro -dnl created, not in deflit. -define(deflit, -m4_assert_numargs(2) -`define(`$1', -`deflit_emptyargcheck'(``$1'',$`#',m4_doublequote($`'1))`dnl -$2`'dnl -ifelse(eval($'`#>1 || m4_length('m4_doublequote($`'1)`)!=0),1,($'`@))')') - -dnl Called: deflit_emptyargcheck(macroname,$#,`$1') -define(deflit_emptyargcheck, -`ifelse(eval($2==1 && !m4_dollarhash_1_if_noparen_p && m4_length(`$3')==0),1, -`m4_error(`dont use a deflit as $1() because it loses the brackets (see deflit in asm-defs.m4 for more information) -')')') - - -dnl Usage: m4_assert(`expr') -dnl -dnl Test a compile-time requirement with an m4 expression. The expression -dnl should be quoted, and will be eval()ed and expected to be non-zero. -dnl For example, -dnl -dnl m4_assert(`FOO*2+6 < 14') - -define(m4_assert, -m4_assert_numargs(1) -`ifelse(eval($1),1,, -`m4_error(`assertion failed: $1 -')')') - - -dnl Usage: m4_repeat(count,text) -dnl -dnl Expand to the given repetitions of the given text. A zero count is -dnl allowed, and expands to nothing. - -define(m4_repeat, -m4_assert_numargs(2) -`m4_repeat_internal(eval($1),`$2')') - -define(m4_repeat_internal, -m4_assert_numargs(2) -`ifelse(`$1',0,, -`forloop(m4_repeat_internal_counter,1,$1,``$2'')')') - - -dnl Usage: m4_hex_lowmask(bits) -dnl -dnl Generate a hex constant which is a low mask of the given number of -dnl bits. For example m4_hex_lowmask(10) would give 0x3ff. - -define(m4_hex_lowmask, -m4_assert_numargs(1) -`m4_cpu_hex_constant(m4_hex_lowmask_internal1(eval(`$1')))') - -dnl Called: m4_hex_lowmask_internal1(bits) -define(m4_hex_lowmask_internal1, -m4_assert_numargs(1) -`ifelse($1,0,`0', -`m4_hex_lowmask_internal2(eval(($1)%4),eval(($1)/4))')') - -dnl Called: m4_hex_lowmask_internal(remainder,digits) -define(m4_hex_lowmask_internal2, -m4_assert_numargs(2) -`ifelse($1,1,`1', -`ifelse($1,2,`3', -`ifelse($1,3,`7')')')dnl -m4_repeat($2,`f')') - - -dnl -------------------------------------------------------------------------- -dnl The following m4_list functions take a list as multiple arguments. -dnl Arguments are evaluated multiple times, there's no attempt at strict -dnl quoting. Empty list elements are not allowed, since an empty final -dnl argument is ignored. These restrictions don't affect the current uses, -dnl and make the implementation easier. - - -dnl Usage: m4_list_quote(list,...) -dnl -dnl Produce a list with quoted commas, so it can be a single argument -dnl string. For instance m4_list_quote(a,b,c) gives -dnl -dnl a`,'b`,'c`,' -dnl -dnl This can be used to put a list in a define, -dnl -dnl define(foolist, m4_list_quote(a,b,c)) -dnl -dnl Which can then be used for instance as -dnl -dnl m4_list_find(target, foolist) - -define(m4_list_quote, -`ifelse(`$1',,, -`$1`,'m4_list_quote(shift($@))')') - - -dnl Usage: m4_list_find(key,list,...) -dnl -dnl Evaluate to 1 or 0 according to whether key is in the list elements. - -define(m4_list_find, -m4_assert_numargs_range(1,1000) -`ifelse(`$2',,0, -`ifelse(`$1',`$2',1, -`m4_list_find(`$1',shift(shift($@)))')')') - - -dnl Usage: m4_list_remove(key,list,...) -dnl -dnl Evaluate to the given list with `key' removed (if present). - -define(m4_list_remove, -m4_assert_numargs_range(1,1000) -`ifelse(`$2',,, -`ifelse(`$1',`$2',,`$2,')dnl -m4_list_remove(`$1',shift(shift($@)))')') - - -dnl Usage: m4_list_first(list,...) -dnl -dnl Evaluate to the first element of the list (if any). - -define(m4_list_first,`$1') - - -dnl Usage: m4_list_count(list,...) -dnl -dnl Evaluate to the number of elements in the list. This can't just use $# -dnl because the last element might be empty. - -define(m4_list_count, -`m4_list_count_internal(0,$@)') - -dnl Called: m4_list_internal(count,list,...) -define(m4_list_count_internal, -m4_assert_numargs_range(1,1000) -`ifelse(`$2',,$1, -`m4_list_count_internal(eval($1+1),shift(shift($@)))')') - - -dnl -------------------------------------------------------------------------- -dnl Various assembler things, not specific to any particular CPU. -dnl - - -dnl Usage: include_mpn(`filename') -dnl -dnl Like include(), but adds a path to the mpn source directory. For -dnl example, -dnl -dnl include_mpn(`sparc64/addmul_1h.asm') - -define(include_mpn, -m4_assert_numargs(1) -m4_assert_defined(`CONFIG_TOP_SRCDIR') -`include(CONFIG_TOP_SRCDIR`/mpn/$1')') - - -dnl Usage: C comment ... -dnl -dnl This works like a FORTRAN-style comment character. It can be used for -dnl comments to the right of assembly instructions, where just dnl would -dnl remove the newline and concatenate adjacent lines. -dnl -dnl C and/or dnl are useful when an assembler doesn't support comments, or -dnl where different assemblers for a particular CPU need different styles. -dnl The intermediate ".s" files will end up with no comments, just code. -dnl -dnl Using C is not intended to cause offence to anyone who doesn't like -dnl FORTRAN; but if that happens it's an unexpected bonus. -dnl -dnl During development, if comments are wanted in the .s files to help see -dnl what's expanding where, C can be redefined with something like -dnl -dnl define(`C',`#') - -define(C, ` -dnl') - - -dnl Normally PIC is defined (or not) by libtool, but it doesn't set it on -dnl systems which are always PIC. PIC_ALWAYS established in config.m4 -dnl identifies these for us. - -ifelse(`PIC_ALWAYS',`yes',`define(`PIC')') - - -dnl Various possible defines passed from the Makefile that are to be tested -dnl with ifdef() rather than be expanded. - -m4_not_for_expansion(`PIC') -m4_not_for_expansion(`DLL_EXPORT') - -dnl aors_n -m4_not_for_expansion(`OPERATION_add_n') -m4_not_for_expansion(`OPERATION_sub_n') - -dnl aors_err1_n -m4_not_for_expansion(`OPERATION_add_err1_n') -m4_not_for_expansion(`OPERATION_sub_err1_n') - -dnl aors_err2_n -m4_not_for_expansion(`OPERATION_add_err2_n') -m4_not_for_expansion(`OPERATION_sub_err2_n') - -dnl aors_err3_n -m4_not_for_expansion(`OPERATION_add_err3_n') -m4_not_for_expansion(`OPERATION_sub_err3_n') - -dnl aorsmul_1 -m4_not_for_expansion(`OPERATION_addmul_1') -m4_not_for_expansion(`OPERATION_submul_1') - -dnl logops_n -m4_not_for_expansion(`OPERATION_and_n') -m4_not_for_expansion(`OPERATION_andn_n') -m4_not_for_expansion(`OPERATION_nand_n') -m4_not_for_expansion(`OPERATION_ior_n') -m4_not_for_expansion(`OPERATION_iorn_n') -m4_not_for_expansion(`OPERATION_nior_n') -m4_not_for_expansion(`OPERATION_xor_n') -m4_not_for_expansion(`OPERATION_xnor_n') - -dnl popham -m4_not_for_expansion(`OPERATION_popcount') -m4_not_for_expansion(`OPERATION_hamdist') - -dnl lorrshift -m4_not_for_expansion(`OPERATION_lshift') -m4_not_for_expansion(`OPERATION_rshift') - -dnl aorslsh1_n -m4_not_for_expansion(`OPERATION_addlsh1_n') -m4_not_for_expansion(`OPERATION_sublsh1_n') -m4_not_for_expansion(`OPERATION_rsblsh1_n') - -dnl aorslsh2_n -m4_not_for_expansion(`OPERATION_addlsh2_n') -m4_not_for_expansion(`OPERATION_sublsh2_n') -m4_not_for_expansion(`OPERATION_rsblsh2_n') - -dnl rsh1aors_n -m4_not_for_expansion(`OPERATION_rsh1add_n') -m4_not_for_expansion(`OPERATION_rsh1sub_n') - - -dnl Usage: m4_config_gmp_mparam(`symbol') -dnl -dnl Check that `symbol' is defined. If it isn't, issue an error and -dnl terminate immediately. The error message explains that the symbol -dnl should be in config.m4, copied from gmp-mparam.h. -dnl -dnl Termination is immediate since missing say SQR_TOOM2_THRESHOLD can -dnl lead to infinite loops and endless error messages. - -define(m4_config_gmp_mparam, -m4_assert_numargs(1) -`ifdef(`$1',, -`m4_error(`$1 is not defined. - "configure" should have extracted this from gmp-mparam.h and put it - in config.m4 (or in <cpu>_<file>.asm for a fat binary), but somehow - this has failed. -')m4exit(1)')') - - -dnl Usage: defreg(name,reg) -dnl -dnl Give a name to a $ style register. For example, -dnl -dnl defreg(foo,$12) -dnl -dnl defreg() inserts an extra pair of quotes after the $ so that it's not -dnl interpreted as an m4 macro parameter, ie. foo is actually $`'12. m4 -dnl strips those quotes when foo is expanded. -dnl -dnl deflit() is used to make the new definition, so it will expand -dnl literally even if followed by parentheses ie. foo(99) will become -dnl $12(99). (But there's nowhere that would be used is there?) -dnl -dnl When making further definitions from existing defreg() macros, remember -dnl to use defreg() again to protect the $ in the new definitions too. For -dnl example, -dnl -dnl defreg(a0,$4) -dnl defreg(a1,$5) -dnl ... -dnl -dnl defreg(PARAM_DST,a0) -dnl -dnl This is only because a0 is expanding at the time the PARAM_DST -dnl definition is made, leaving a literal $4 that must be re-quoted. On -dnl the other hand in something like the following ra is only expanded when -dnl ret is used and its $`'31 protection will have its desired effect at -dnl that time. -dnl -dnl defreg(ra,$31) -dnl ... -dnl define(ret,`j ra') -dnl -dnl Note that only $n forms are meant to be used here, and something like -dnl 128($30) doesn't get protected and will come out wrong. - -define(defreg, -m4_assert_numargs(2) -`deflit(`$1', -substr(`$2',0,1)``''substr(`$2',1))') - - -dnl Usage: m4_instruction_wrapper() -dnl -dnl Put this, unquoted, on a line on its own, at the start of a macro -dnl that's a wrapper around an assembler instruction. It adds code to give -dnl a descriptive error message if the macro is invoked without arguments. -dnl -dnl For example, suppose jmp needs to be wrapped, -dnl -dnl define(jmp, -dnl m4_instruction_wrapper() -dnl m4_assert_numargs(1) -dnl `.byte 0x42 -dnl .long $1 -dnl nop') -dnl -dnl The point of m4_instruction_wrapper is to get a better error message -dnl than m4_assert_numargs would give if jmp is accidentally used as plain -dnl "jmp foo" instead of the intended "jmp( foo)". "jmp()" with no -dnl argument also provokes the error message. -dnl -dnl m4_instruction_wrapper should only be used with wrapped instructions -dnl that take arguments, since obviously something meant to be used as say -dnl plain "ret" doesn't want to give an error when used that way. - -define(m4_instruction_wrapper, -m4_assert_numargs(0) -``m4_instruction_wrapper_internal'(m4_doublequote($`'0),dnl -ifdef(`__file__',`m4_doublequote(__file__)',``the m4 sources''),dnl -$`#',m4_doublequote($`'1))`dnl'') - -dnl Called: m4_instruction_wrapper_internal($0,`filename',$#,$1) -define(m4_instruction_wrapper_internal, -`ifelse(eval($3<=1 && m4_length(`$4')==0),1, -`m4_error(`$1 is a macro replacing that instruction and needs arguments, see $2 for details -')')') - - -dnl Usage: m4_cpu_hex_constant(string) -dnl -dnl Expand to the string prefixed by a suitable `0x' hex marker. This -dnl should be redefined as necessary for CPUs with different conventions. - -define(m4_cpu_hex_constant, -m4_assert_numargs(1) -`0x`$1'') - - -dnl Usage: UNROLL_LOG2, UNROLL_MASK, UNROLL_BYTES -dnl CHUNK_LOG2, CHUNK_MASK, CHUNK_BYTES -dnl -dnl When code supports a variable amount of loop unrolling, the convention -dnl is to define UNROLL_COUNT to the number of limbs processed per loop. -dnl When testing code this can be varied to see how much the loop overhead -dnl is costing. For example, -dnl -dnl deflit(UNROLL_COUNT, 32) -dnl -dnl If the forloop() generating the unrolled loop has a pattern processing -dnl more than one limb, the convention is to express this with CHUNK_COUNT. -dnl For example, -dnl -dnl deflit(CHUNK_COUNT, 2) -dnl -dnl The LOG2, MASK and BYTES definitions below are derived from these COUNT -dnl definitions. If COUNT is redefined, the LOG2, MASK and BYTES follow -dnl the new definition automatically. -dnl -dnl LOG2 is the log base 2 of COUNT. MASK is COUNT-1, which can be used as -dnl a bit mask. BYTES is GMP_LIMB_BYTES*COUNT, the number of bytes -dnl processed in each unrolled loop. -dnl -dnl GMP_LIMB_BYTES is defined in a CPU specific m4 include file. It -dnl exists only so the BYTES definitions here can be common to all CPUs. -dnl In the actual code for a given CPU, an explicit 4 or 8 may as well be -dnl used because the code is only for a particular CPU, it doesn't need to -dnl be general. -dnl -dnl Note that none of these macros do anything except give conventional -dnl names to commonly used things. You still have to write your own -dnl expressions for a forloop() and the resulting address displacements. -dnl Something like the following would be typical for 4 bytes per limb. -dnl -dnl forloop(`i',0,UNROLL_COUNT-1,` -dnl deflit(`disp',eval(i*4)) -dnl ... -dnl ') -dnl -dnl Or when using CHUNK_COUNT, -dnl -dnl forloop(`i',0,UNROLL_COUNT/CHUNK_COUNT-1,` -dnl deflit(`disp0',eval(i*CHUNK_COUNT*4)) -dnl deflit(`disp1',eval(disp0+4)) -dnl ... -dnl ') -dnl -dnl Clearly `i' can be run starting from 1, or from high to low or whatever -dnl best suits. - -deflit(UNROLL_LOG2, -m4_assert_defined(`UNROLL_COUNT') -`m4_log2(UNROLL_COUNT)') - -deflit(UNROLL_MASK, -m4_assert_defined(`UNROLL_COUNT') -`eval(UNROLL_COUNT-1)') - -deflit(UNROLL_BYTES, -m4_assert_defined(`UNROLL_COUNT') -m4_assert_defined(`GMP_LIMB_BYTES') -`eval(UNROLL_COUNT * GMP_LIMB_BYTES)') - -deflit(CHUNK_LOG2, -m4_assert_defined(`CHUNK_COUNT') -`m4_log2(CHUNK_COUNT)') - -deflit(CHUNK_MASK, -m4_assert_defined(`CHUNK_COUNT') -`eval(CHUNK_COUNT-1)') - -deflit(CHUNK_BYTES, -m4_assert_defined(`CHUNK_COUNT') -m4_assert_defined(`GMP_LIMB_BYTES') -`eval(CHUNK_COUNT * GMP_LIMB_BYTES)') - - -dnl Usage: MPN(name) -dnl -dnl Add MPN_PREFIX to a name. -dnl MPN_PREFIX defaults to "__gmpn_" if not defined. -dnl -dnl m4_unquote is used in MPN so that when it expands to say __gmpn_foo, -dnl that identifier will be subject to further macro expansion. This is -dnl used by some of the fat binary support for renaming symbols. - -ifdef(`MPN_PREFIX',, -`define(`MPN_PREFIX',`__gmpn_')') - -define(MPN, -m4_assert_numargs(1) -`m4_unquote(MPN_PREFIX`'$1)') - - -dnl Usage: mpn_add_n, etc -dnl -dnl Convenience definitions using MPN(), like the #defines in gmp.h. Each -dnl function that might be implemented in assembler is here. - -define(define_mpn, -m4_assert_numargs(1) -`deflit(`mpn_$1',`MPN(`$1')')') - -define_mpn(add) -define_mpn(add_1) -define_mpn(add_err1_n) -define_mpn(add_err2_n) -define_mpn(add_err3_n) -define_mpn(add_n) -define_mpn(add_nc) -define_mpn(addlsh1_n) -define_mpn(addlsh1_nc) -define_mpn(addlsh2_n) -define_mpn(addlsh2_nc) -define_mpn(addlsh_n) -define_mpn(addlsh_nc) -define_mpn(addlsh1_n_ip1) -define_mpn(addlsh1_nc_ip1) -define_mpn(addlsh2_n_ip1) -define_mpn(addlsh2_nc_ip1) -define_mpn(addlsh_n_ip1) -define_mpn(addlsh_nc_ip1) -define_mpn(addlsh1_n_ip2) -define_mpn(addlsh1_nc_ip2) -define_mpn(addlsh2_n_ip2) -define_mpn(addlsh2_nc_ip2) -define_mpn(addlsh_n_ip2) -define_mpn(addlsh_nc_ip2) -define_mpn(addmul_1) -define_mpn(addmul_1c) -define_mpn(addmul_2) -define_mpn(addmul_3) -define_mpn(addmul_4) -define_mpn(addmul_5) -define_mpn(addmul_6) -define_mpn(addmul_7) -define_mpn(addmul_8) -define_mpn(addmul_2s) -define_mpn(add_n_sub_n) -define_mpn(add_n_sub_nc) -define_mpn(addaddmul_1msb0) -define_mpn(and_n) -define_mpn(andn_n) -define_mpn(bdiv_q_1) -define_mpn(pi1_bdiv_q_1) -define_mpn(bdiv_dbm1c) -define_mpn(cmp) -define_mpn(cnd_add_n) -define_mpn(cnd_sub_n) -define_mpn(com) -define_mpn(copyd) -define_mpn(copyi) -define_mpn(count_leading_zeros) -define_mpn(count_trailing_zeros) -define_mpn(div_qr_1n_pi1) -define_mpn(div_qr_2) -define_mpn(div_qr_2n_pi1) -define_mpn(div_qr_2u_pi1) -define_mpn(div_qr_2n_pi2) -define_mpn(div_qr_2u_pi2) -define_mpn(divexact_1) -define_mpn(divexact_by3c) -define_mpn(divrem) -define_mpn(divrem_1) -define_mpn(divrem_1c) -define_mpn(divrem_2) -define_mpn(divrem_classic) -define_mpn(divrem_newton) -define_mpn(dump) -define_mpn(gcd) -define_mpn(gcd_1) -define_mpn(gcdext) -define_mpn(get_str) -define_mpn(hamdist) -define_mpn(invert_limb) -define_mpn(invert_limb_table) -define_mpn(ior_n) -define_mpn(iorn_n) -define_mpn(lshift) -define_mpn(lshiftc) -define_mpn(mod_1_1p) -define_mpn(mod_1_1p_cps) -define_mpn(mod_1s_2p) -define_mpn(mod_1s_2p_cps) -define_mpn(mod_1s_3p) -define_mpn(mod_1s_3p_cps) -define_mpn(mod_1s_4p) -define_mpn(mod_1s_4p_cps) -define_mpn(mod_1) -define_mpn(mod_1c) -define_mpn(mod_34lsub1) -define_mpn(modexact_1_odd) -define_mpn(modexact_1c_odd) -define_mpn(mul) -define_mpn(mul_1) -define_mpn(mul_1c) -define_mpn(mul_2) -define_mpn(mul_3) -define_mpn(mul_4) -define_mpn(mul_5) -define_mpn(mul_6) -define_mpn(mul_basecase) -define_mpn(mul_n) -define_mpn(mullo_basecase) -define_mpn(mulmid_basecase) -define_mpn(perfect_square_p) -define_mpn(popcount) -define_mpn(preinv_divrem_1) -define_mpn(preinv_mod_1) -define_mpn(nand_n) -define_mpn(neg) -define_mpn(nior_n) -define_mpn(powm) -define_mpn(powlo) -define_mpn(random) -define_mpn(random2) -define_mpn(redc_1) -define_mpn(redc_2) -define_mpn(rsblsh1_n) -define_mpn(rsblsh1_nc) -define_mpn(rsblsh2_n) -define_mpn(rsblsh2_nc) -define_mpn(rsblsh_n) -define_mpn(rsblsh_nc) -define_mpn(rsh1add_n) -define_mpn(rsh1add_nc) -define_mpn(rsh1sub_n) -define_mpn(rsh1sub_nc) -define_mpn(rshift) -define_mpn(rshiftc) -define_mpn(scan0) -define_mpn(scan1) -define_mpn(set_str) -define_mpn(sqr_basecase) -define_mpn(sqr_diagonal) -define_mpn(sqr_diag_addlsh1) -define_mpn(sub_n) -define_mpn(sublsh1_n) -define_mpn(sublsh1_nc) -define_mpn(sublsh1_n_ip1) -define_mpn(sublsh1_nc_ip1) -define_mpn(sublsh2_n) -define_mpn(sublsh2_nc) -define_mpn(sublsh2_n_ip1) -define_mpn(sublsh2_nc_ip1) -define_mpn(sublsh_n) -define_mpn(sublsh_nc) -define_mpn(sublsh_n_ip1) -define_mpn(sublsh_nc_ip1) -define_mpn(sqrtrem) -define_mpn(sub) -define_mpn(sub_1) -define_mpn(sub_err1_n) -define_mpn(sub_err2_n) -define_mpn(sub_err3_n) -define_mpn(sub_n) -define_mpn(sub_nc) -define_mpn(submul_1) -define_mpn(submul_1c) -define_mpn(sec_tabselect) -define_mpn(umul_ppmm) -define_mpn(umul_ppmm_r) -define_mpn(udiv_qrnnd) -define_mpn(udiv_qrnnd_r) -define_mpn(xnor_n) -define_mpn(xor_n) - - -dnl Defines for C global arrays and variables, with names matching what's -dnl used in the C code. -dnl -dnl Notice that GSYM_PREFIX is included, unlike with the function defines -dnl above. Also, "deflit" is used so that something like __clz_tab(%ebx) -dnl comes out as __gmpn_clz_tab(%ebx), for the benefit of CPUs with that -dnl style assembler syntax. - -deflit(__clz_tab, -m4_assert_defined(`GSYM_PREFIX') -`GSYM_PREFIX`'MPN(`clz_tab')') - -deflit(binvert_limb_table, -m4_assert_defined(`GSYM_PREFIX') -`GSYM_PREFIX`'__gmp_binvert_limb_table') - - -dnl Usage: ASM_START() -dnl -dnl Emit any directives needed once at the start of an assembler file, like -dnl ".set noreorder" or whatever. The default for this is nothing, but -dnl it's redefined by CPU specific m4 files. - -define(ASM_START) - - -dnl Usage: ASM_END() -dnl -dnl Emit any directives needed once at the end of an assembler file. The -dnl default for this is nothing, but it's redefined by CPU specific m4 files. - -define(ASM_END) - - -dnl Usage: PROLOGUE(foo[,param]) -dnl EPILOGUE(foo) -dnl -dnl Emit directives to start or end a function. GSYM_PREFIX is added by -dnl these macros if necessary, so the given "foo" is what the function will -dnl be called in C. -dnl -dnl The second parameter to PROLOGUE is used only for some CPUs and should -dnl be omitted if not required. -dnl -dnl Nested or overlapping PROLOGUE/EPILOGUE pairs are allowed, if that -dnl makes sense for the system. The name given to EPILOGUE must be a -dnl currently open PROLOGUE. -dnl -dnl If only one PROLOGUE is open then the name can be omitted from -dnl EPILOGUE. This is encouraged, since it means the name only has to -dnl appear in one place, not two. -dnl -dnl The given name "foo" is not fully quoted here, it will be macro -dnl expanded more than once. This is the way the m4_list macros work, and -dnl it also helps the tune/many.pl program do a renaming like -dnl -D__gmpn_add_n=mpn_add_n_foo when GSYM_PREFIX is not empty. - -define(PROLOGUE, -m4_assert_numargs_range(1,2) -`m4_file_seen()dnl -define(`PROLOGUE_list',m4_list_quote($1,PROLOGUE_list))dnl -ifelse(`$2',, -`PROLOGUE_cpu(GSYM_PREFIX`'$1)', -`PROLOGUE_cpu(GSYM_PREFIX`'$1,`$2')')') - -define(EPILOGUE, -m4_assert_numargs_range(0,1) -`ifelse(`$1',, -`ifelse(m4_list_count(PROLOGUE_list),0, -`m4_error(`no open functions for EPILOGUE -')', -`ifelse(m4_list_count(PROLOGUE_list),1, -`EPILOGUE_internal(PROLOGUE_current_function)', -`m4_error(`more than one open function for EPILOGUE -')')')', -`EPILOGUE_internal(`$1')')') - -define(EPILOGUE_internal, -m4_assert_numargs(1) -m4_assert_defined(`EPILOGUE_cpu') -`ifelse(m4_list_find($1,PROLOGUE_list),0, -`m4_error(`EPILOGUE without PROLOGUE: $1 -')')dnl -define(`PROLOGUE_list',m4_list_quote(m4_list_remove($1,PROLOGUE_list)))dnl -EPILOGUE_cpu(GSYM_PREFIX`$1')') - -dnl Currently open PROLOGUEs, as a comma-separated list. -define(PROLOGUE_list) - - -dnl Called: PROLOGUE_check(list,...) -dnl Check there's no remaining open PROLOGUEs at the end of input. -define(PROLOGUE_check, -`ifelse($1,,, -`m4_error(`no EPILOGUE for: $1 -')dnl -PROLOGUE_check(shift($@))')') - -m4wrap_prepend(`PROLOGUE_check(PROLOGUE_list)') - - -dnl Usage: PROLOGUE_current_function -dnl -dnl This macro expands to the current PROLOGUE/EPILOGUE function, or the -dnl most recent PROLOGUE if such pairs are nested or overlapped. - -define(PROLOGUE_current_function, -m4_assert_numargs(-1) -`m4_list_first(PROLOGUE_list)') - - -dnl Usage: PROLOGUE_cpu(GSYM_PREFIX`'foo[,param]) -dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) -dnl -dnl These macros hold the CPU-specific parts of PROLOGUE and EPILOGUE. -dnl Both are called with the function name, with GSYM_PREFIX already -dnl prepended. -dnl -dnl The definitions here are something typical and sensible, but CPU or -dnl system specific m4 files should redefine them as necessary. The -dnl optional extra parameter to PROLOGUE_cpu is not expected and not -dnl accepted here. - -define(PROLOGUE_cpu, -m4_assert_numargs(1) -` TEXT - ALIGN(8) - GLOBL `$1' GLOBL_ATTR - TYPE(`$1',`function') -`$1'LABEL_SUFFIX') - -define(EPILOGUE_cpu, -` SIZE(`$1',.-`$1')') - - -dnl Usage: L(name) -dnl -dnl Generate a local label with the given name. This is simply a -dnl convenient way to add LSYM_PREFIX. -dnl -dnl LSYM_PREFIX might be L$, so defn() must be used to quote it or the L -dnl will expand again as the L macro, making an infinite recursion. - -define(`L', -m4_assert_numargs(1) -`defn(`LSYM_PREFIX')$1') - - -dnl Usage: LDEF(name) -dnl -dnl Generate a directive to define a local label. -dnl -dnl On systems with a fixed syntax for defining labels there's no need to -dnl use this macro, it's only meant for systems where the syntax varies, -dnl like hppa which is "L(foo):" with gas, but just "L(foo)" in column 0 -dnl with the system `as'. -dnl -dnl The extra `' after LABEL_SUFFIX avoids any chance of a following -dnl "(...)" being interpreted as an argument list. Not that it'd be -dnl sensible to write anything like that after an LDEF(), but just in case. - -define(LDEF, -m4_assert_numargs(1) -m4_assert_defined(`LABEL_SUFFIX') -`L(`$1')`'LABEL_SUFFIX`'') - - -dnl Usage: INT32(label,value) -dnl INT64(label,first,second) - -define(`INT32', -m4_assert_defined(`W32') -` ALIGN(4) -LDEF(`$1') - W32 $2') - -define(`INT64', -m4_assert_defined(`W32') -` ALIGN(8) -LDEF(`$1') - W32 $2 - W32 $3') - - -dnl Usage: ALIGN(bytes) -dnl -dnl Emit a ".align" directive. The alignment is specified in bytes, and -dnl will normally need to be a power of 2. The actual ".align" generated -dnl is either bytes or logarithmic according to what ./configure finds the -dnl assembler needs. -dnl -dnl If ALIGN_FILL_0x90 is defined and equal to "yes", then ", 0x90" is -dnl appended. This is for x86, see mpn/x86/README. - -define(ALIGN, -m4_assert_numargs(1) -m4_assert_defined(`ALIGN_LOGARITHMIC') -`.align ifelse(ALIGN_LOGARITHMIC,yes,`m4_log2($1)',`eval($1)')dnl -ifelse(ALIGN_FILL_0x90,yes,`, 0x90')') - - -dnl Usage: MULFUNC_PROLOGUE(function function...) -dnl -dnl A dummy macro which is grepped for by ./configure to know what -dnl functions a multi-function file is providing. Use this if there aren't -dnl explicit PROLOGUE()s for each possible function. -dnl -dnl Multiple MULFUNC_PROLOGUEs can be used, or just one with the function -dnl names separated by spaces. - -define(`MULFUNC_PROLOGUE', -m4_assert_numargs(1) -) - - -dnl Usage: NAILS_SUPPORT(spec spec ...) -dnl -dnl A dummy macro which is grepped for by ./configure to know what nails -dnl are supported in an asm file. -dnl -dnl Ranges can be given, or just individual values. Multiple values or -dnl ranges can be given, separated by spaces. Multiple NAILS_SUPPORT -dnl declarations work too. Some examples, -dnl -dnl NAILS_SUPPORT(1-20) -dnl NAILS_SUPPORT(1 6 9-12) -dnl NAILS_SUPPORT(1-10 16-20) - -define(NAILS_SUPPORT, -m4_assert_numargs(1) -) - - -dnl Usage: ABI_SUPPORT(abi) -dnl -dnl A dummy macro which is grepped for by ./configure to know what ABIs -dnl are supported in an asm file. -dnl -dnl If multiple non-standard ABIs are supported, several ABI_SUPPORT -dnl declarations should be used: -dnl -dnl ABI_SUPPORT(FOOABI) -dnl ABI_SUPPORT(BARABI) - -define(ABI_SUPPORT, -m4_assert_numargs(1) -) - - -dnl Usage: GMP_NUMB_MASK -dnl -dnl A bit mask for the number part of a limb. Eg. with 6 bit nails in a -dnl 32 bit limb, GMP_NUMB_MASK would be 0x3ffffff. - -define(GMP_NUMB_MASK, -m4_assert_numargs(-1) -m4_assert_defined(`GMP_NUMB_BITS') -`m4_hex_lowmask(GMP_NUMB_BITS)') - - -dnl Usage: m4append(`variable',`value-to-append') - -define(`m4append', -`define(`$1', defn(`$1')`$2') -' -) - -divert`'dnl diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cpp-ccas b/src/plugins/e-acsl/contrib/libgmp/mpn/cpp-ccas deleted file mode 100755 index 25f7cdcbebd03562066e84b936fc891ce016fb04..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cpp-ccas +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/sh -# -# A helper script for Makeasm.am .S.lo rule. - -# Copyright 2001 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - - -# Usage: cpp-cc --cpp=CPP CC ... file.S ... -# -# Process file.S with the given CPP command plus any -D options in the -# rest of the arguments, then assemble with the given CC plus all -# arguments. -# -# The CPP command must be in a single --cpp= argument, and will be -# split on whitespace. It should include -I options required. -# -# When CC is invoked, file.S is replaced with a temporary .s file -# which is the CPP output. -# -# Any lines starting with "#" are removed from the CPP output, usually -# these will be #line and #file markers from CPP, but they might also -# be comments from the .S. -# -# To allow parallel builds, the temp file name is based on the .S file -# name, which will be the output object filename for all uses we put -# this script to. - -CPP= -CPPDEFS= -CC= -S= -SEEN_O=no - -for i in "$@"; do - case $i in - --cpp=*) - CPP=`echo "$i" | sed 's/^--cpp=//'` - ;; - -D*) - CPPDEFS="$CPPDEFS $i" - CC="$CC $i" - ;; - *.S) - if test -n "$S"; then - echo "Only one .S file permitted" - exit 1 - fi - BASENAME=`echo "$i" | sed -e 's/\.S$//' -e 's/^.*[\\/:]//'` - S=$i - TMP_I=tmp-$BASENAME.i - TMP_S=tmp-$BASENAME.s - CC="$CC $TMP_S" - ;; - -o) - SEEN_O=yes - CC="$CC $i" - ;; - *) - CC="$CC $i" - ;; - esac -done - -if test -z "$CPP"; then - echo "No --cpp specified" - exit 1 -fi - -if test -z "$S"; then - echo "No .S specified" - exit 1 -fi - -# Libtool adds it's own -o when sending output to .libs/foo.o, but not -# when just wanting foo.o in the current directory. We need an -# explicit -o in both cases since we're assembling tmp-foo.s. -# -if test $SEEN_O = no; then - CC="$CC -o $BASENAME.o" -fi - -echo "$CPP $CPPDEFS $S >$TMP_I" -$CPP $CPPDEFS $S >$TMP_I || exit - -echo "grep -v '^#' $TMP_I >$TMP_S" -grep -v '^#' $TMP_I >$TMP_S - -echo "$CC" -$CC || exit - -# Comment this out to preserve .s intermediates -rm -f $TMP diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/README b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/README deleted file mode 100644 index 3a347d28050b6cb8dd3ff879a32da21e17f785bc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/README +++ /dev/null @@ -1,121 +0,0 @@ -Copyright 2000-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - - -The code in this directory works for Cray vector systems such as C90, -J90, T90 (both the CFP variant and the IEEE variant) and SV1. (For -the T3E and T3D systems, see the `alpha' subdirectory at the same -level as the directory containing this file.) - -The cfp subdirectory is for systems utilizing the traditional Cray -floating-point format, and the ieee subdirectory is for the newer -systems that use the IEEE floating-point format. - -There are several issues that reduces speed on Cray systems. For -systems with cfp floating point, the main obstacle is the forming of -128-bit products. For IEEE systems, adding, and in particular -computing carry is the main issue. There are no vectorizing -unsigned-less-than instructions, and the sequence that implement that -operation is very long. - -Shifting is the only operation that is simple to make fast. All Cray -systems have a bitblt instructions (Vi Vj,Vj<Ak and Vi Vj,Vj>Ak) that -should be really useful. - -For best speed for cfp systems, we need a mul_basecase, since that -reduces the need for carry propagation to a minimum. Depending on the -size (vn) of the smaller of the two operands (V), we should split U and V -in different chunk sizes: - -U split in 2 32-bit parts -V split according to the table: -parts 4 5 6 7 8 -bits/part 16 13 11 10 8 -max allowed vn 1 8 32 64 256 -number of multiplies 8 10 12 14 16 -peak cycles/limb 4 5 6 7 8 - -U split in 3 22-bit parts -V split according to the table: -parts 3 4 5 -bits/part 22 16 13 -max allowed vn 16 1024 8192 -number of multiplies 9 12 15 -peak cycles/limb 4.5 6 7.5 - -U split in 4 16-bit parts -V split according to the table: -parts 4 -bits/part 16 -max allowed vn 65536 -number of multiplies 16 -peak cycles/limb 8 - -(A T90 CPU can accumulate two products per cycle.) - -IDEA: -* Rewrite mpn_add_n: - short cy[n + 1]; - #pragma _CRI ivdep - for (i = 0; i < n; i++) - { s = up[i] + vp[i]; - rp[i] = s; - cy[i + 1] = s < up[i]; } - more_carries = 0; - #pragma _CRI ivdep - for (i = 1; i < n; i++) - { s = rp[i] + cy[i]; - rp[i] = s; - more_carries += s < cy[i]; } - cys = 0; - if (more_carries) - { - cys = rp[1] < cy[1]; - for (i = 2; i < n; i++) - { rp[i] += cys; - cys = rp[i] < cys; } - } - return cys + cy[n]; - -* Write mpn_add3_n for adding three operands. First add operands 1 - and 2, and generate cy[]. Then add operand 3 to the partial result, - and accumulate carry into cy[]. Finally propagate carry just like - in the new mpn_add_n. - -IDEA: - -Store fewer bits, perhaps 62, per limb. That brings mpn_add_n time -down to 2.5 cycles/limb and mpn_addmul_1 times to 4 cycles/limb. By -storing even fewer bits per limb, perhaps 56, it would be possible to -write a mul_mul_basecase that would run at effectively 1 cycle/limb. -(Use VM here to better handle the romb-shaped multiply area, perhaps -rounding operand sizes up to the next power of 2.) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/add_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/add_n.c deleted file mode 100644 index 65b53bf87af8f9541fdf5ae28ab4df82764a5332..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/add_n.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Cray PVP mpn_add_n -- add two limb vectors and store their sum in a third - limb vector. - -Copyright 1996, 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* This code runs at 4 cycles/limb. It may be possible to bring it down - to 3 cycles/limb. */ - -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -mpn_add_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n) -{ - mp_limb_t cy[n]; - mp_limb_t a, b, r, s0, c0, c1; - mp_size_t i; - int more_carries; - - /* Main add loop. Generate a raw output sum in rp[] and a carry vector - in cy[]. */ -#pragma _CRI ivdep - for (i = 0; i < n; i++) - { - a = up[i]; - b = vp[i]; - s0 = a + b; - rp[i] = s0; - c0 = ((a & b) | ((a | b) & ~s0)) >> 63; - cy[i] = c0; - } - /* Carry add loop. Add the carry vector cy[] to the raw sum rp[] and - store the new sum back to rp[0]. If this generates further carry, set - more_carries. */ - more_carries = 0; -#pragma _CRI ivdep - for (i = 1; i < n; i++) - { - r = rp[i]; - c0 = cy[i - 1]; - s0 = r + c0; - rp[i] = s0; - c0 = (r & ~s0) >> 63; - more_carries += c0; - } - /* If that second loop generated carry, handle that in scalar loop. */ - if (more_carries) - { - mp_limb_t cyrec = 0; - /* Look for places where rp[k] is zero and cy[k-1] is non-zero. - These are where we got a recurrency carry. */ - for (i = 1; i < n; i++) - { - r = rp[i]; - c0 = (r == 0 && cy[i - 1] != 0); - s0 = r + cyrec; - rp[i] = s0; - c1 = (r & ~s0) >> 63; - cyrec = c0 | c1; - } - return cyrec | cy[n - 1]; - } - - return cy[n - 1]; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/addmul_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/addmul_1.c deleted file mode 100644 index e1d52e4a5f435028f700d43c86b45c7f6378521c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/addmul_1.c +++ /dev/null @@ -1,49 +0,0 @@ -/* mpn_addmul_1 for Cray PVP. - -Copyright 1996, 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -mpn_addmul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t limb) -{ - mp_limb_t p0[n], p1[n], tp[n]; - mp_limb_t cy_limb; - - GMPN_MULWW (p1, p0, up, &n, &limb); - cy_limb = mpn_add_n (tp, rp, p0, n); - rp[0] = tp[0]; - if (n != 1) - cy_limb += mpn_add_n (rp + 1, tp + 1, p1, n - 1); - cy_limb += p1[n - 1]; - - return cy_limb; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/mul_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/mul_1.c deleted file mode 100644 index 611a9d2532d71dc9ab9bcc79db3927913b495416..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/mul_1.c +++ /dev/null @@ -1,48 +0,0 @@ -/* mpn_mul_1 for Cray PVP. - -Copyright 1996, 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -mpn_mul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t limb) -{ - mp_limb_t p0[n], p1[n]; - mp_limb_t cy_limb; - - GMPN_MULWW (p1, p0, up, &n, &limb); - rp[0] = p0[0]; - cy_limb = p1[n - 1]; - if (n != 1) - cy_limb += mpn_add_n (rp + 1, p0 + 1, p1, n - 1); - - return cy_limb; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/mulwwc90.s b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/mulwwc90.s deleted file mode 100644 index 71d2285fd7ec37bad0f5b8ffc6990eead960a738..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/mulwwc90.s +++ /dev/null @@ -1,254 +0,0 @@ -* Helper for mpn_mul_1, mpn_addmul_1, and mpn_submul_1 for Cray PVP. - -* Copyright 1996, 2000 Free Software Foundation, Inc. -* This file is generated from mulww.f in this same directory. - -* This file is part of the GNU MP Library. -* -* The GNU MP Library is free software; you can redistribute it and/or modify -* it under the terms of either: -* -* * the GNU Lesser General Public License as published by the Free -* Software Foundation; either version 3 of the License, or (at your -* option) any later version. -* -* or -* -* * the GNU General Public License as published by the Free Software -* Foundation; either version 2 of the License, or (at your option) any -* later version. -* -* or both in parallel, as here. -* -* The GNU MP Library is distributed in the hope that it will be useful, but -* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -* for more details. -* -* You should have received copies of the GNU General Public License and the -* GNU Lesser General Public License along with the GNU MP Library. If not, -* see https://www.gnu.org/licenses/. - - IDENT GMPN_MULWW -********************************************** -* Assemble with Cal Version 2.0 * -* * -* Generated by CFT77 6.0.4.19 * -* on 06/27/00 at 04:34:13 * -* * -********************************************** -* ALLOW UNDERSCORES IN IDENTIFIERS - EDIT OFF - FORMAT NEW -@DATA SECTION DATA,CM -@DATA = W.* - CON O'0000000000040000000000 - CON O'0435152404713723252514 - CON O'0535270000000000000000 - CON O'0000000000000001200012 - VWD 32/0,32/P.GMPN_MULWW - CON O'0014003000000000001416 - CON O'0000000000000000000011 - CON O'0000000000000000000215 - BSSZ 1 -@CODE SECTION CODE -@CODE = P.* -L3 = P.* - A0 A6 - A5 6 - B03,A5 0,A0 - A0 A1+A2 - A5 1 - 0,A0 T00,A5 - B02 A2 - B66 A3 - B01 A6 - A7 P.L4 - B00 A7 - A6 @DATA - J $STKOFEN -GMPN_MULWW = P.* - A0 @DATA+3 - B77 A0 - A1 13 - A0 B66 - A2 B66 - A4 B67 - 0,A0 B77,A1 - A7 782 - A3 A2+A7 - A0 A4-A3 - JAM L3 - A0 A6 - A5 6 - B03,A5 0,A0 - A0 A1+A2 - A5 1 - 0,A0 T00,A5 - B02 A2 - B66 A3 - B01 A6 -L4 = P.* - A7 B07 - S7 0,A7 - A6 B10 - S6 0,A6 - S5 1 - S4 <22 - S7 S7-S5 - S5 #S7 - T00 S6 - S6 S6>22 - S7 T00 - S7 S7>44 - S3 T00 - S3 S3&S4 - S6 S6&S4 - S7 S7&S4 - S3 S3<24 - S6 S6<24 - S7 S7<24 - S0 S5 - S4 S5 - S1 S6 - S2 S3 - S3 S7 - JSP L5 -L6 = P.* - S7 -S4 - A2 S7 - VL A2 - A3 B06 - A5 B05 - A4 B04 - A1 VL - A2 S4 -L7 = P.* - A0 A3 - VL A1 - V7 ,A0,1 - B11 A5 - A7 22 - B12 A4 - V6 V7>A7 - B13 A3 - S7 <22 - A3 B02 - V5 S7&V6 - A6 24 - V4 V5<A6 - V3 S1*FV4 - V2 S7&V7 - V1 V2<A6 - V0 S3*FV1 - V6 V0+V3 - A5 44 - V5 V7>A5 - V2 S1*FV1 - V3 S7&V5 - A0 14 - B77 A0 - A4 B77 - A0 A4+A3 - ,A0,1 V2 - V0 V3<A6 - V7 S2*FV1 - A4 142 - A0 A4+A3 - ,A0,1 V7 - V5 V7>A7 - V2 S2*FV0 - V3 V6+V2 - S7 <20 - V1 S7&V3 - A4 270 - A0 A4+A3 - ,A0,1 V0 - A4 14 - A0 A4+A3 - V7 ,A0,1 - V6 V1<A7 - V2 S2*FV4 - V0 V7+V2 - S7 <42 - V1 S7&V0 - A4 398 - A0 A4+A3 - ,A0,1 V0 - V7 S3*FV4 - V2 V5+V1 - V0 V3<A5 - A5 526 - A0 A5+A3 - ,A0,1 V0 - A5 270 - A0 A5+A3 - V4 ,A0,1 - V5 V2+V6 - A5 20 - V1 V3>A5 - V0 S1*FV4 - A5 654 - A0 A5+A3 - ,A0,1 V1 - V6 V7+V0 - A5 2 - V2 V6<A5 - V3 S3*FV4 - A5 142 - A0 A5+A3 - V1 ,A0,1 - A5 526 - A0 A5+A3 - V7 ,A0,1 - V0 V1+V7 - V6 V3<A6 - V4 V6+V2 - A6 42 - V7 V5>A6 - A5 654 - CPW - A0 A5+A3 - V1 ,A0,1 - A5 398 - A0 A5+A3 - V3 ,A0,1 - V6 V4+V1 - V2 V3>A6 - V5 V6+V2 - A6 B12 - V4 V3<A7 - A7 B13 - A3 A7+A1 - A7 B11 - A5 A7+A1 - A4 A6+A1 - A7 A2+A1 - A0 A2+A1 - A2 128 - B13 A0 - V1 V0+V4 - A0 B11 - ,A0,1 V1 - V6 V5+V7 - A0 A6 - ,A0,1 V6 - A0 B13 - A1 A2 - A2 A7 - JAN L7 -L8 = P.* -L5 = P.* - S1 0 - A0 B02 - A2 B02 - A1 13 - B66 A0 - B77,A1 0,A0 - A0 A2+A1 - A1 1 - T00,A1 0,A0 - J B00 - EXT $STKOFEN:p - ENTRY GMPN_MULWW - END diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/mulwwj90.s b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/mulwwj90.s deleted file mode 100644 index 1c2c7cddbea437392cf8e6ce0e81412ce22a4681..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/mulwwj90.s +++ /dev/null @@ -1,253 +0,0 @@ -* Helper for mpn_mul_1, mpn_addmul_1, and mpn_submul_1 for Cray PVP. - -* Copyright 1996, 2000 Free Software Foundation, Inc. -* This file is generated from mulww.f in this same directory. - -* This file is part of the GNU MP Library. -* -* The GNU MP Library is free software; you can redistribute it and/or modify -* it under the terms of either: -* -* * the GNU Lesser General Public License as published by the Free -* Software Foundation; either version 3 of the License, or (at your -* option) any later version. -* -* or -* -* * the GNU General Public License as published by the Free Software -* Foundation; either version 2 of the License, or (at your option) any -* later version. -* -* or both in parallel, as here. -* -* The GNU MP Library is distributed in the hope that it will be useful, but -* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -* for more details. -* -* You should have received copies of the GNU General Public License and the -* GNU Lesser General Public License along with the GNU MP Library. If not, -* see https://www.gnu.org/licenses/. - - IDENT GMPN_MULWW -********************************************** -* Assemble with Cal Version 2.0 * -* * -* Generated by CFT77 6.0.4.19 * -* on 06/27/00 at 04:34:13 * -* * -********************************************** -* ALLOW UNDERSCORES IN IDENTIFIERS - EDIT OFF - FORMAT NEW -@DATA SECTION DATA,CM -@DATA = W.* - CON O'0000000000040000000000 - CON O'0435152404713723252514 - CON O'0535270000000000000000 - CON O'0000000000000001200012 - VWD 32/0,32/P.GMPN_MULWW - CON O'0014003000000000001416 - CON O'0000000000000000000011 - CON O'0000000000000000000215 - BSSZ 1 -@CODE SECTION CODE -@CODE = P.* -L3 = P.* - A0 A6 - A5 6 - B03,A5 0,A0 - A0 A1+A2 - A5 1 - 0,A0 T00,A5 - B02 A2 - B66 A3 - B01 A6 - A7 P.L4 - B00 A7 - A6 @DATA - J $STKOFEN -GMPN_MULWW = P.* - A0 @DATA+3 - B77 A0 - A1 13 - A0 B66 - A2 B66 - A4 B67 - 0,A0 B77,A1 - A7 782 - A3 A2+A7 - A0 A4-A3 - JAM L3 - A0 A6 - A5 6 - B03,A5 0,A0 - A0 A1+A2 - A5 1 - 0,A0 T00,A5 - B02 A2 - B66 A3 - B01 A6 -L4 = P.* - A7 B07 - S7 0,A7 - A6 B10 - S6 0,A6 - S5 1 - S4 <22 - S7 S7-S5 - S5 #S7 - T00 S6 - S6 S6>22 - S7 T00 - S7 S7>44 - S3 T00 - S3 S3&S4 - S6 S6&S4 - S7 S7&S4 - S3 S3<24 - S6 S6<24 - S7 S7<24 - S0 S5 - S4 S5 - S1 S6 - S2 S3 - S3 S7 - JSP L5 -L6 = P.* - S7 -S4 - A2 S7 - VL A2 - A3 B06 - A5 B05 - A4 B04 - A1 VL - A2 S4 -L7 = P.* - A0 A3 - VL A1 - V7 ,A0,1 - B11 A5 - A7 22 - B12 A4 - V6 V7>A7 - B13 A3 - S7 <22 - A3 B02 - V5 S7&V6 - A6 24 - V4 V5<A6 - V3 S1*FV4 - V2 S7&V7 - V1 V2<A6 - V0 S3*FV1 - V6 V0+V3 - A5 44 - V5 V7>A5 - V2 S1*FV1 - V3 S7&V5 - A0 14 - B77 A0 - A4 B77 - A0 A4+A3 - ,A0,1 V2 - V0 V3<A6 - V7 S2*FV1 - A4 142 - A0 A4+A3 - ,A0,1 V7 - V5 V7>A7 - V2 S2*FV0 - V3 V6+V2 - S7 <20 - V1 S7&V3 - A4 270 - A0 A4+A3 - ,A0,1 V0 - A4 14 - A0 A4+A3 - V7 ,A0,1 - V6 V1<A7 - V2 S2*FV4 - V0 V7+V2 - S7 <42 - V1 S7&V0 - A4 398 - A0 A4+A3 - ,A0,1 V0 - V7 S3*FV4 - V2 V5+V1 - V0 V3<A5 - A5 526 - A0 A5+A3 - ,A0,1 V0 - A5 270 - A0 A5+A3 - V4 ,A0,1 - V5 V2+V6 - A5 20 - V1 V3>A5 - V0 S1*FV4 - A5 654 - A0 A5+A3 - ,A0,1 V1 - V6 V7+V0 - A5 2 - V2 V6<A5 - V3 S3*FV4 - A5 142 - A0 A5+A3 - V1 ,A0,1 - A5 526 - A0 A5+A3 - V7 ,A0,1 - V0 V1+V7 - V6 V3<A6 - V4 V6+V2 - A6 42 - V7 V5>A6 - A5 654 - A0 A5+A3 - V1 ,A0,1 - A5 398 - A0 A5+A3 - V3 ,A0,1 - V6 V4+V1 - V2 V3>A6 - V5 V6+V2 - A6 B12 - V4 V3<A7 - A7 B13 - A3 A7+A1 - A7 B11 - A5 A7+A1 - A4 A6+A1 - A7 A2+A1 - A0 A2+A1 - A2 64 - B13 A0 - V1 V0+V4 - A0 B11 - ,A0,1 V1 - V6 V5+V7 - A0 A6 - ,A0,1 V6 - A0 B13 - A1 A2 - A2 A7 - JAN L7 -L8 = P.* -L5 = P.* - S1 0 - A0 B02 - A2 B02 - A1 13 - B66 A0 - B77,A1 0,A0 - A0 A2+A1 - A1 1 - T00,A1 0,A0 - J B00 - EXT $STKOFEN:p - ENTRY GMPN_MULWW - END diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/submul_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/submul_1.c deleted file mode 100644 index b44c97df45512be03d3605d7bdfc0aea6f27b48a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/cfp/submul_1.c +++ /dev/null @@ -1,49 +0,0 @@ -/* mpn_submul_1 for Cray PVP. - -Copyright 1996, 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -mpn_submul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t limb) -{ - mp_limb_t p0[n], p1[n], tp[n]; - mp_limb_t cy_limb; - - GMPN_MULWW (p1, p0, up, &n, &limb); - cy_limb = mpn_sub_n (tp, rp, p0, n); - rp[0] = tp[0]; - if (n != 1) - cy_limb += mpn_sub_n (rp + 1, tp + 1, p1, n - 1); - cy_limb += p1[n - 1]; - - return cy_limb; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/gmp-mparam.h deleted file mode 100644 index ea8c25b32e215738bb56678a9e3b436136bbe5a3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/gmp-mparam.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Cray T90 CFP gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1996, 2000-2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -#if 0 -#define UMUL_TIME 519 -#define UDIV_TIME 2360 -#endif - -/* T90 Unicos 10.0.X in CFP mode */ - -/* Generated by tuneup.c, 2004-02-07, system compiler */ - -#define MUL_TOOM22_THRESHOLD 71 -#define MUL_TOOM33_THRESHOLD 131 - -#define SQR_BASECASE_THRESHOLD 32 -#define SQR_TOOM2_THRESHOLD 199 -#define SQR_TOOM3_THRESHOLD 363 - -#define DIV_SB_PREINV_THRESHOLD 0 /* (preinv always) */ -#define DIV_DC_THRESHOLD 996 -#define POWM_THRESHOLD 601 - -#define HGCD_THRESHOLD 964 -#define GCD_ACCEL_THRESHOLD 3 -#define GCD_DC_THRESHOLD 2874 -#define JACOBI_BASE_METHOD 2 - -#define DIVREM_1_NORM_THRESHOLD 0 /* preinv always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define USE_PREINV_DIVREM_1 1 /* preinv always */ -#define USE_PREINV_MOD_1 1 /* preinv always */ -#define DIVREM_2_THRESHOLD 0 /* preinv always */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define MODEXACT_1_ODD_THRESHOLD 0 /* always */ - -#define GET_STR_DC_THRESHOLD 26 -#define GET_STR_PRECOMPUTE_THRESHOLD 42 -#define SET_STR_THRESHOLD 145756 - -#define MUL_FFT_TABLE { 272, 544, 1088, 2304, 5120, 12288, 49152, 0 } -#define MUL_FFT_MODF_THRESHOLD 200 -#define MUL_FFT_THRESHOLD 1664 - -#define SQR_FFT_TABLE { 1008, 2080, 3904, 7936, 17408, 45056, 0 } -#define SQR_FFT_MODF_THRESHOLD 600 -#define SQR_FFT_THRESHOLD 2976 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/hamdist.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/hamdist.c deleted file mode 100644 index 8eb9ba018cdf9063e0e2751c642b6eea51a5668c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/hamdist.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Cray mpn_hamdist -- hamming distance count. - -Copyright 2000 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <intrinsics.h> -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -mpn_hamdist (mp_srcptr p1, mp_srcptr p2, mp_size_t n) -{ - unsigned long int result = 0; - mp_size_t i; - for (i = 0; i < n; i++) - result += _popcnt (p1[i] ^ p2[i]); - return result; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/addmul_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/addmul_1.c deleted file mode 100644 index 6318b7c9c295a2353d057945252601f2d294570c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/addmul_1.c +++ /dev/null @@ -1,112 +0,0 @@ -/* Cray PVP/IEEE mpn_addmul_1 -- multiply a limb vector with a limb and add the - result to a second limb vector. - -Copyright 2000-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* This code runs at just under 9 cycles/limb on a T90. That is not perfect, - mainly due to vector register shortage in the main loop. Assembly code - should bring it down to perhaps 7 cycles/limb. */ - -#include <intrinsics.h> -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -mpn_addmul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) -{ - mp_limb_t cy[n]; - mp_limb_t a, b, r, s0, s1, c0, c1; - mp_size_t i; - int more_carries; - - if (up == rp) - { - /* The algorithm used below cannot handle overlap. Handle it here by - making a temporary copy of the source vector, then call ourselves. */ - mp_limb_t xp[n]; - MPN_COPY (xp, up, n); - return mpn_addmul_1 (rp, xp, n, vl); - } - - a = up[0] * vl; - r = rp[0]; - s0 = a + r; - rp[0] = s0; - c0 = ((a & r) | ((a | r) & ~s0)) >> 63; - cy[0] = c0; - - /* Main multiply loop. Generate a raw accumulated output product in rp[] - and a carry vector in cy[]. */ -#pragma _CRI ivdep - for (i = 1; i < n; i++) - { - a = up[i] * vl; - b = _int_mult_upper (up[i - 1], vl); - s0 = a + b; - c0 = ((a & b) | ((a | b) & ~s0)) >> 63; - r = rp[i]; - s1 = s0 + r; - rp[i] = s1; - c1 = ((s0 & r) | ((s0 | r) & ~s1)) >> 63; - cy[i] = c0 + c1; - } - /* Carry add loop. Add the carry vector cy[] to the raw result rp[] and - store the new result back to rp[]. */ - more_carries = 0; -#pragma _CRI ivdep - for (i = 1; i < n; i++) - { - r = rp[i]; - c0 = cy[i - 1]; - s0 = r + c0; - rp[i] = s0; - c0 = (r & ~s0) >> 63; - more_carries += c0; - } - /* If that second loop generated carry, handle that in scalar loop. */ - if (more_carries) - { - mp_limb_t cyrec = 0; - /* Look for places where rp[k] == 0 and cy[k-1] == 1 or - rp[k] == 1 and cy[k-1] == 2. - These are where we got a recurrency carry. */ - for (i = 1; i < n; i++) - { - r = rp[i]; - c0 = r < cy[i - 1]; - s0 = r + cyrec; - rp[i] = s0; - c1 = (r & ~s0) >> 63; - cyrec = c0 | c1; - } - return _int_mult_upper (up[n - 1], vl) + cyrec + cy[n - 1]; - } - - return _int_mult_upper (up[n - 1], vl) + cy[n - 1]; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/gmp-mparam.h deleted file mode 100644 index 1fdc286574adb24645556d051f59069ab163230b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/gmp-mparam.h +++ /dev/null @@ -1,73 +0,0 @@ -/* Cray T90 IEEE gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1996, 2000-2002, 2004 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* Generated by tuneup.c, 2004-02-07, system compiler */ - -#define MUL_TOOM22_THRESHOLD 130 -#define MUL_TOOM33_THRESHOLD 260 - -#define SQR_BASECASE_THRESHOLD 9 /* karatsuba */ -#define SQR_TOOM2_THRESHOLD 0 /* never sqr_basecase */ -#define SQR_TOOM3_THRESHOLD 34 - -#define DIV_SB_PREINV_THRESHOLD 0 /* preinv always */ -#define DIV_DC_THRESHOLD 390 -#define POWM_THRESHOLD 656 - -#define HGCD_THRESHOLD 964 -#define GCD_ACCEL_THRESHOLD 3 -#define GCD_DC_THRESHOLD 964 -#define JACOBI_BASE_METHOD 2 - -#define DIVREM_1_NORM_THRESHOLD 0 /* preinv always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define USE_PREINV_DIVREM_1 1 /* preinv always */ -#define USE_PREINV_MOD_1 1 /* preinv always */ -#define DIVREM_2_THRESHOLD 0 /* preinv always */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define MODEXACT_1_ODD_THRESHOLD 0 /* always */ - -#define GET_STR_DC_THRESHOLD 45 -#define GET_STR_PRECOMPUTE_THRESHOLD 77 -#define SET_STR_THRESHOLD 145756 - -#define MUL_FFT_TABLE { 1104, 2208, 4416, 8960, 19456, 45056, 0 } -#define MUL_FFT_MODF_THRESHOLD 1168 -#define MUL_FFT_THRESHOLD 6528 - -#define SQR_FFT_TABLE { 368, 736, 1600, 2816, 7168, 12288, 0 } -#define SQR_FFT_MODF_THRESHOLD 296 -#define SQR_FFT_THRESHOLD 1312 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/invert_limb.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/invert_limb.c deleted file mode 100644 index f951a6e138407e079937c873029cb52d4e094627..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/invert_limb.c +++ /dev/null @@ -1,128 +0,0 @@ -/* mpn_invert_limb -- Invert a normalized limb. - -Copyright 1991, 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* - This is needed to make configure define HAVE_NATIVE_mpn_invert_limb: - PROLOGUE(mpn_invert_limb) -*/ - -static const unsigned short int approx_tab[0x100] = -{ - /* 0x400, */ - 0x3ff, - 0x3fc, 0x3f8, 0x3f4, 0x3f0, 0x3ec, 0x3e8, 0x3e4, - 0x3e0, 0x3dd, 0x3d9, 0x3d5, 0x3d2, 0x3ce, 0x3ca, 0x3c7, - 0x3c3, 0x3c0, 0x3bc, 0x3b9, 0x3b5, 0x3b2, 0x3ae, 0x3ab, - 0x3a8, 0x3a4, 0x3a1, 0x39e, 0x39b, 0x397, 0x394, 0x391, - 0x38e, 0x38b, 0x387, 0x384, 0x381, 0x37e, 0x37b, 0x378, - 0x375, 0x372, 0x36f, 0x36c, 0x369, 0x366, 0x364, 0x361, - 0x35e, 0x35b, 0x358, 0x355, 0x353, 0x350, 0x34d, 0x34a, - 0x348, 0x345, 0x342, 0x340, 0x33d, 0x33a, 0x338, 0x335, - 0x333, 0x330, 0x32e, 0x32b, 0x329, 0x326, 0x324, 0x321, - 0x31f, 0x31c, 0x31a, 0x317, 0x315, 0x313, 0x310, 0x30e, - 0x30c, 0x309, 0x307, 0x305, 0x303, 0x300, 0x2fe, 0x2fc, - 0x2fa, 0x2f7, 0x2f5, 0x2f3, 0x2f1, 0x2ef, 0x2ec, 0x2ea, - 0x2e8, 0x2e6, 0x2e4, 0x2e2, 0x2e0, 0x2de, 0x2dc, 0x2da, - 0x2d8, 0x2d6, 0x2d4, 0x2d2, 0x2d0, 0x2ce, 0x2cc, 0x2ca, - 0x2c8, 0x2c6, 0x2c4, 0x2c2, 0x2c0, 0x2be, 0x2bc, 0x2bb, - 0x2b9, 0x2b7, 0x2b5, 0x2b3, 0x2b1, 0x2b0, 0x2ae, 0x2ac, - 0x2aa, 0x2a8, 0x2a7, 0x2a5, 0x2a3, 0x2a1, 0x2a0, 0x29e, - 0x29c, 0x29b, 0x299, 0x297, 0x295, 0x294, 0x292, 0x291, - 0x28f, 0x28d, 0x28c, 0x28a, 0x288, 0x287, 0x285, 0x284, - 0x282, 0x280, 0x27f, 0x27d, 0x27c, 0x27a, 0x279, 0x277, - 0x276, 0x274, 0x273, 0x271, 0x270, 0x26e, 0x26d, 0x26b, - 0x26a, 0x268, 0x267, 0x265, 0x264, 0x263, 0x261, 0x260, - 0x25e, 0x25d, 0x25c, 0x25a, 0x259, 0x257, 0x256, 0x255, - 0x253, 0x252, 0x251, 0x24f, 0x24e, 0x24d, 0x24b, 0x24a, - 0x249, 0x247, 0x246, 0x245, 0x243, 0x242, 0x241, 0x240, - 0x23e, 0x23d, 0x23c, 0x23b, 0x239, 0x238, 0x237, 0x236, - 0x234, 0x233, 0x232, 0x231, 0x230, 0x22e, 0x22d, 0x22c, - 0x22b, 0x22a, 0x229, 0x227, 0x226, 0x225, 0x224, 0x223, - 0x222, 0x220, 0x21f, 0x21e, 0x21d, 0x21c, 0x21b, 0x21a, - 0x219, 0x218, 0x216, 0x215, 0x214, 0x213, 0x212, 0x211, - 0x210, 0x20f, 0x20e, 0x20d, 0x20c, 0x20b, 0x20a, 0x209, - 0x208, 0x207, 0x206, 0x205, 0x204, 0x203, 0x202, 0x201, -}; - -/* iteration: z = 2z-(z**2)d */ - -mp_limb_t -mpn_invert_limb (mp_limb_t d) -{ - mp_limb_t z, z2l, z2h, tl, th; - mp_limb_t xh, xl; - mp_limb_t zh, zl; - -#if GMP_LIMB_BITS == 32 - z = approx_tab[(d >> 23) - 0x100] << 6; /* z < 2^16 */ - - z2l = z * z; /* z2l < 2^32 */ - umul_ppmm (th, tl, z2l, d); - z = (z << 17) - (th << 1); -#endif -#if GMP_LIMB_BITS == 64 - z = approx_tab[(d >> 55) - 0x100] << 6; /* z < 2^16 */ - - z2l = z * z; /* z2l < 2^32 */ - th = z2l * (d >> 32); /* th < 2^64 */ - z = (z << 17) - (th >> 31); /* z < 2^32 */ - - z2l = z * z; - umul_ppmm (th, tl, z2l, d); - z = (z << 33) - (th << 1); -#endif - - umul_ppmm (z2h, z2l, z, z); - umul_ppmm (th, tl, z2h, d); - umul_ppmm (xh, xl, z2l, d); - tl += xh; - th += tl < xh; - th = (th << 2) | (tl >> GMP_LIMB_BITS - 2); - tl = tl << 2; - sub_ddmmss (zh, zl, z << 2, 0, th, tl); - - umul_ppmm (xh, xl, d, zh); - xh += d; /* add_ssaaaa (xh, xl, xh, xl, d, 0); */ - if (~xh != 0) - { - add_ssaaaa (xh, xl, xh, xl, 0, d); - zh++; - } - - add_ssaaaa (xh, xl, xh, xl, 0, d); - if (xh != 0) - zh++; - - return zh; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/mul_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/mul_1.c deleted file mode 100644 index dad09fa8cfd0f5b74a140f5365e5c97a3aa8aa7a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/mul_1.c +++ /dev/null @@ -1,104 +0,0 @@ -/* Cray PVP/IEEE mpn_mul_1 -- multiply a limb vector with a limb and store the - result in a second limb vector. - -Copyright 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* This code runs at 5 cycles/limb on a T90. That would probably - be hard to improve upon, even with assembly code. */ - -#include <intrinsics.h> -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -mpn_mul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) -{ - mp_limb_t cy[n]; - mp_limb_t a, b, r, s0, s1, c0, c1; - mp_size_t i; - int more_carries; - - if (up == rp) - { - /* The algorithm used below cannot handle overlap. Handle it here by - making a temporary copy of the source vector, then call ourselves. */ - mp_limb_t xp[n]; - MPN_COPY (xp, up, n); - return mpn_mul_1 (rp, xp, n, vl); - } - - a = up[0] * vl; - rp[0] = a; - cy[0] = 0; - - /* Main multiply loop. Generate a raw accumulated output product in rp[] - and a carry vector in cy[]. */ -#pragma _CRI ivdep - for (i = 1; i < n; i++) - { - a = up[i] * vl; - b = _int_mult_upper (up[i - 1], vl); - s0 = a + b; - c0 = ((a & b) | ((a | b) & ~s0)) >> 63; - rp[i] = s0; - cy[i] = c0; - } - /* Carry add loop. Add the carry vector cy[] to the raw sum rp[] and - store the new sum back to rp[0]. */ - more_carries = 0; -#pragma _CRI ivdep - for (i = 2; i < n; i++) - { - r = rp[i]; - c0 = cy[i - 1]; - s0 = r + c0; - rp[i] = s0; - c0 = (r & ~s0) >> 63; - more_carries += c0; - } - /* If that second loop generated carry, handle that in scalar loop. */ - if (more_carries) - { - mp_limb_t cyrec = 0; - /* Look for places where rp[k] is zero and cy[k-1] is non-zero. - These are where we got a recurrency carry. */ - for (i = 2; i < n; i++) - { - r = rp[i]; - c0 = (r == 0 && cy[i - 1] != 0); - s0 = r + cyrec; - rp[i] = s0; - c1 = (r & ~s0) >> 63; - cyrec = c0 | c1; - } - return _int_mult_upper (up[n - 1], vl) + cyrec + cy[n - 1]; - } - - return _int_mult_upper (up[n - 1], vl) + cy[n - 1]; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/mul_basecase.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/mul_basecase.c deleted file mode 100644 index 6dc845dd9972ef40fe05afbecc8662bb4d91be7a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/mul_basecase.c +++ /dev/null @@ -1,108 +0,0 @@ -/* Cray PVP/IEEE mpn_mul_basecase. - -Copyright 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* The most critical loop of this code runs at about 5 cycles/limb on a T90. - That is not perfect, mainly due to vector register shortage. */ - -#include <intrinsics.h> -#include "gmp.h" -#include "gmp-impl.h" - -void -mpn_mul_basecase (mp_ptr rp, - mp_srcptr up, mp_size_t un, - mp_srcptr vp, mp_size_t vn) -{ - mp_limb_t cy[un + vn]; - mp_limb_t vl; - mp_limb_t a, b, r, s0, s1, c0, c1; - mp_size_t i, j; - int more_carries; - - for (i = 0; i < un + vn; i++) - { - rp[i] = 0; - cy[i] = 0; - } - -#pragma _CRI novector - for (j = 0; j < vn; j++) - { - vl = vp[j]; - - a = up[0] * vl; - r = rp[j]; - s0 = a + r; - rp[j] = s0; - c0 = ((a & r) | ((a | r) & ~s0)) >> 63; - cy[j] += c0; - -#pragma _CRI ivdep - for (i = 1; i < un; i++) - { - a = up[i] * vl; - b = _int_mult_upper (up[i - 1], vl); - s0 = a + b; - c0 = ((a & b) | ((a | b) & ~s0)) >> 63; - r = rp[j + i]; - s1 = s0 + r; - rp[j + i] = s1; - c1 = ((s0 & r) | ((s0 | r) & ~s1)) >> 63; - cy[j + i] += c0 + c1; - } - rp[j + un] = _int_mult_upper (up[un - 1], vl); - } - - more_carries = 0; -#pragma _CRI ivdep - for (i = 1; i < un + vn; i++) - { - r = rp[i]; - c0 = cy[i - 1]; - s0 = r + c0; - rp[i] = s0; - c0 = (r & ~s0) >> 63; - more_carries += c0; - } - /* If that second loop generated carry, handle that in scalar loop. */ - if (more_carries) - { - mp_limb_t cyrec = 0; - for (i = 1; i < un + vn; i++) - { - r = rp[i]; - c0 = (r < cy[i - 1]); - s0 = r + cyrec; - rp[i] = s0; - c1 = (r & ~s0) >> 63; - cyrec = c0 | c1; - } - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/sqr_basecase.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/sqr_basecase.c deleted file mode 100644 index 840d3dd2607db76828d715b6f024f31c81752cf8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/sqr_basecase.c +++ /dev/null @@ -1,106 +0,0 @@ -/* Cray PVP/IEEE mpn_sqr_basecase. - -Copyright 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* This is just mpn_mul_basecase with trivial modifications. */ - -#include <intrinsics.h> -#include "gmp.h" -#include "gmp-impl.h" - -void -mpn_sqr_basecase (mp_ptr rp, - mp_srcptr up, mp_size_t un) -{ - mp_limb_t cy[un + un]; - mp_limb_t ul; - mp_limb_t a, b, r, s0, s1, c0, c1; - mp_size_t i, j; - int more_carries; - - for (i = 0; i < un + un; i++) - { - rp[i] = 0; - cy[i] = 0; - } - -#pragma _CRI novector - for (j = 0; j < un; j++) - { - ul = up[j]; - - a = up[0] * ul; - r = rp[j]; - s0 = a + r; - rp[j] = s0; - c0 = ((a & r) | ((a | r) & ~s0)) >> 63; - cy[j] += c0; - -#pragma _CRI ivdep - for (i = 1; i < un; i++) - { - a = up[i] * ul; - b = _int_mult_upper (up[i - 1], ul); - s0 = a + b; - c0 = ((a & b) | ((a | b) & ~s0)) >> 63; - r = rp[j + i]; - s1 = s0 + r; - rp[j + i] = s1; - c1 = ((s0 & r) | ((s0 | r) & ~s1)) >> 63; - cy[j + i] += c0 + c1; - } - rp[j + un] = _int_mult_upper (up[un - 1], ul); - } - - more_carries = 0; -#pragma _CRI ivdep - for (i = 1; i < un + un; i++) - { - r = rp[i]; - c0 = cy[i - 1]; - s0 = r + c0; - rp[i] = s0; - c0 = (r & ~s0) >> 63; - more_carries += c0; - } - /* If that second loop generated carry, handle that in scalar loop. */ - if (more_carries) - { - mp_limb_t cyrec = 0; - for (i = 1; i < un + un; i++) - { - r = rp[i]; - c0 = (r < cy[i - 1]); - s0 = r + cyrec; - rp[i] = s0; - c1 = (r & ~s0) >> 63; - cyrec = c0 | c1; - } - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/submul_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/submul_1.c deleted file mode 100644 index 27a1939019fa914860d1eaac15212f627784fdf1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/ieee/submul_1.c +++ /dev/null @@ -1,112 +0,0 @@ -/* Cray PVP/IEEE mpn_submul_1 -- multiply a limb vector with a limb and - subtract the result from a second limb vector. - -Copyright 2000-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* This code runs at just under 9 cycles/limb on a T90. That is not perfect, - mainly due to vector register shortage in the main loop. Assembly code - should bring it down to perhaps 7 cycles/limb. */ - -#include <intrinsics.h> -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -mpn_submul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) -{ - mp_limb_t cy[n]; - mp_limb_t a, b, r, s0, s1, c0, c1; - mp_size_t i; - int more_carries; - - if (up == rp) - { - /* The algorithm used below cannot handle overlap. Handle it here by - making a temporary copy of the source vector, then call ourselves. */ - mp_limb_t xp[n]; - MPN_COPY (xp, up, n); - return mpn_submul_1 (rp, xp, n, vl); - } - - a = up[0] * vl; - r = rp[0]; - s0 = r - a; - rp[0] = s0; - c1 = ((s0 & a) | ((s0 | a) & ~r)) >> 63; - cy[0] = c1; - - /* Main multiply loop. Generate a raw accumulated output product in rp[] - and a carry vector in cy[]. */ -#pragma _CRI ivdep - for (i = 1; i < n; i++) - { - a = up[i] * vl; - b = _int_mult_upper (up[i - 1], vl); - s0 = a + b; - c0 = ((a & b) | ((a | b) & ~s0)) >> 63; - r = rp[i]; - s1 = r - s0; - rp[i] = s1; - c1 = ((s1 & s0) | ((s1 | s0) & ~r)) >> 63; - cy[i] = c0 + c1; - } - /* Carry subtract loop. Subtract the carry vector cy[] from the raw result - rp[] and store the new result back to rp[]. */ - more_carries = 0; -#pragma _CRI ivdep - for (i = 1; i < n; i++) - { - r = rp[i]; - c0 = cy[i - 1]; - s0 = r - c0; - rp[i] = s0; - c0 = (s0 & ~r) >> 63; - more_carries += c0; - } - /* If that second loop generated carry, handle that in scalar loop. */ - if (more_carries) - { - mp_limb_t cyrec = 0; - /* Look for places where rp[k] == ~0 and cy[k-1] == 1 or - rp[k] == ~1 and cy[k-1] == 2. - These are where we got a recurrency carry. */ - for (i = 1; i < n; i++) - { - r = rp[i]; - c0 = ~r < cy[i - 1]; - s0 = r - cyrec; - rp[i] = s0; - c1 = (s0 & ~r) >> 63; - cyrec = c0 | c1; - } - return _int_mult_upper (up[n - 1], vl) + cyrec + cy[n - 1]; - } - - return _int_mult_upper (up[n - 1], vl) + cy[n - 1]; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/lshift.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/lshift.c deleted file mode 100644 index 074f38041a11f07b099c737143e6694731c129ee..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/lshift.c +++ /dev/null @@ -1,59 +0,0 @@ -/* mpn_lshift -- Shift left low level for Cray vector processors. - -Copyright (C) 2000 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <intrinsics.h> -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -mpn_lshift (mp_ptr wp, mp_srcptr up, mp_size_t n, unsigned int cnt) -{ - unsigned sh_1, sh_2; - mp_size_t i; - mp_limb_t retval; - - sh_1 = cnt; - sh_2 = GMP_LIMB_BITS - sh_1; - retval = up[n - 1] >> sh_2; - -#pragma _CRI ivdep - for (i = n - 1; i > 0; i--) - { -#if 1 - wp[i] = (up[i] << sh_1) | (up[i - 1] >> sh_2); -#else - /* This is the recommended way, but at least on SV1 it is slower. */ - wp[i] = _dshiftl (up[i], up[i - 1], sh_1); -#endif - } - - wp[0] = up[0] << sh_1; - return retval; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/mulww.f b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/mulww.f deleted file mode 100644 index 9bddf05bc972480c6f05ecd241cfc83d5e065f09..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/mulww.f +++ /dev/null @@ -1,63 +0,0 @@ -c Helper for mpn_mul_1, mpn_addmul_1, and mpn_submul_1 for Cray PVP. - -c Copyright 1996, 2000 Free Software Foundation, Inc. - -c This file is part of the GNU MP Library. -c -c The GNU MP Library is free software; you can redistribute it and/or modify -c it under the terms of either: -c -c * the GNU Lesser General Public License as published by the Free -c Software Foundation; either version 3 of the License, or (at your -c option) any later version. -c -c or -c -c * the GNU General Public License as published by the Free Software -c Foundation; either version 2 of the License, or (at your option) any -c later version. -c -c or both in parallel, as here. -c -c The GNU MP Library is distributed in the hope that it will be useful, but -c WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -c or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -c for more details. -c -c You should have received copies of the GNU General Public License and the -c GNU Lesser General Public License along with the GNU MP Library. If not, -c see https://www.gnu.org/licenses/. - -c p1[] = hi(a[]*s); the upper limbs of each product -c p0[] = low(a[]*s); the corresponding lower limbs -c n is number of limbs in the vectors - - subroutine gmpn_mulww(p1,p0,a,n,s) - integer*8 p1(0:*),p0(0:*),a(0:*),s - integer n - - integer*8 a0,a1,a2,s0,s1,s2,c - integer*8 ai,t0,t1,t2,t3,t4 - - s0 = shiftl(and(s,4194303),24) - s1 = shiftl(and(shiftr(s,22),4194303),24) - s2 = shiftl(and(shiftr(s,44),4194303),24) - - do i = 0,n-1 - ai = a(i) - a0 = shiftl(and(ai,4194303),24) - a1 = shiftl(and(shiftr(ai,22),4194303),24) - a2 = shiftl(and(shiftr(ai,44),4194303),24) - - t0 = i24mult(a0,s0) - t1 = i24mult(a0,s1)+i24mult(a1,s0) - t2 = i24mult(a0,s2)+i24mult(a1,s1)+i24mult(a2,s0) - t3 = i24mult(a1,s2)+i24mult(a2,s1) - t4 = i24mult(a2,s2) - - p0(i)=shiftl(t2,44)+shiftl(t1,22)+t0 - c=shiftr(shiftr(t0,22)+and(t1,4398046511103)+ - $ shiftl(and(t2,1048575),22),42) - p1(i)=shiftl(t4,24)+shiftl(t3,2)+shiftr(t2,20)+shiftr(t1,42)+c - end do - end diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/popcount.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/popcount.c deleted file mode 100644 index 48ddab875eda520cde80a19e896d3f691b5f001b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/popcount.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Cray mpn_popcount -- population count. - -Copyright 2000 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <intrinsics.h> -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -mpn_popcount (mp_srcptr p, mp_size_t n) -{ - unsigned long int result = 0; - mp_size_t i; - for (i = 0; i < n; i++) - result += _popcnt (p[i]); - return result; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/rshift.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/rshift.c deleted file mode 100644 index 424bede9db71d3014c6dd5d88455414c24f7e3a1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/rshift.c +++ /dev/null @@ -1,59 +0,0 @@ -/* mpn_rshift -- Shift right low level for Cray vector processors. - -Copyright (C) 2000 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <intrinsics.h> -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -mpn_rshift (mp_ptr wp, mp_srcptr up, mp_size_t n, unsigned int cnt) -{ - unsigned sh_1, sh_2; - mp_size_t i; - mp_limb_t retval; - - sh_1 = cnt; - sh_2 = GMP_LIMB_BITS - sh_1; - retval = up[0] << sh_2; - -#pragma _CRI ivdep - for (i = 0; i < n - 1; i++) - { -#if 1 - wp[i] = (up[i] >> sh_1) | (up[i + 1] << sh_2); -#else - /* This is the recommended way, but at least on SV1 it is slower. */ - wp[i] = _dshiftr (up[i + 1], up[i], sh_1); -#endif - } - - wp[n - 1] = up[n - 1] >> sh_1; - return retval; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/sub_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/cray/sub_n.c deleted file mode 100644 index 0cc9ad1e04ab1132b16e56c23887f1272004bbaa..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/cray/sub_n.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Cray PVP mpn_sub_n -- subtract two limb vectors and store their difference - in a third limb vector. - -Copyright 1996, 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* This code runs at 4 cycles/limb. It may be possible to bring it down - to 3 cycles/limb. */ - -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -mpn_sub_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n) -{ - mp_limb_t cy[n]; - mp_limb_t a, b, r, s0, c0, c1; - mp_size_t i; - int more_carries; - - /* Main subtract loop. Generate a raw output difference in rp[] and a - borrow vector in cy[]. */ -#pragma _CRI ivdep - for (i = 0; i < n; i++) - { - a = up[i]; - b = vp[i]; - s0 = a - b; /* a = s0 + b */ - rp[i] = s0; - c0 = ((s0 & b) | ((s0 | b) & ~a)) >> 63; - cy[i] = c0; - } - /* Borrow subtract loop. Subtract the borrow vector cy[] from the raw - difference rp[] and store the new difference back to rp[0]. If this - generates further borrow, set more_carries. */ - more_carries = 0; -#pragma _CRI ivdep - for (i = 1; i < n; i++) - { - r = rp[i]; - c0 = cy[i - 1]; - s0 = r - c0; /* r = s0 + c0 */ - rp[i] = s0; - c0 = (s0 & ~r) >> 63; - more_carries += c0; - } - /* If that second loop generated borrow, handle that in scalar loop. */ - if (more_carries) - { - mp_limb_t cyrec = 0; - /* Look for places where rp[k] contains just ones and cy[k-1] is - non-zero. These are where we got a recurrency borrow. */ - for (i = 1; i < n; i++) - { - r = rp[i]; - c0 = (~r == 0 && cy[i - 1] != 0); - s0 = r - cyrec; - rp[i] = s0; - c1 = (s0 & ~r) >> 63; - cyrec = c0 | c1; - } - return cyrec | cy[n - 1]; - } - - return cy[n - 1]; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add.c deleted file mode 100644 index 559f26133cfc9fcb9dad026c834c8bc04d2f6e8c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add.c +++ /dev/null @@ -1,34 +0,0 @@ -/* mpn_add - add mpn to mpn. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define __GMP_FORCE_mpn_add 1 - -#include "gmp.h" -#include "gmp-impl.h" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_1.c deleted file mode 100644 index ca2d86685282985e40d875386caf4b32e4319f94..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_1.c +++ /dev/null @@ -1,34 +0,0 @@ -/* mpn_add_1 - add limb to mpn. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define __GMP_FORCE_mpn_add_1 1 - -#include "gmp.h" -#include "gmp-impl.h" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_err1_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_err1_n.c deleted file mode 100644 index b8cb75f6e89040aea9b0f28e8aa9886f900550d3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_err1_n.c +++ /dev/null @@ -1,101 +0,0 @@ -/* mpn_add_err1_n -- add_n with one error term - - Contributed by David Harvey. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* - Computes: - - (1) {rp,n} := {up,n} + {vp,n} (just like mpn_add_n) with incoming carry cy, - return value is carry out. - - (2) Let c[i+1] = carry from i-th limb addition (c[0] = cy). - Computes c[1]*yp[n-1] + ... + c[n]*yp[0], stores two-limb result at ep. - - Requires n >= 1. - - None of the outputs may overlap each other or any of the inputs, except - that {rp,n} may be equal to {up,n} or {vp,n}. -*/ -mp_limb_t -mpn_add_err1_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, - mp_ptr ep, mp_srcptr yp, - mp_size_t n, mp_limb_t cy) -{ - mp_limb_t el, eh, ul, vl, yl, zl, rl, sl, cy1, cy2; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, vp, n)); - ASSERT (! MPN_OVERLAP_P (rp, n, yp, n)); - ASSERT (! MPN_OVERLAP_P (ep, 2, up, n)); - ASSERT (! MPN_OVERLAP_P (ep, 2, vp, n)); - ASSERT (! MPN_OVERLAP_P (ep, 2, yp, n)); - ASSERT (! MPN_OVERLAP_P (ep, 2, rp, n)); - - yp += n - 1; - el = eh = 0; - - do - { - yl = *yp--; - ul = *up++; - vl = *vp++; - - /* ordinary add_n */ - ADDC_LIMB (cy1, sl, ul, vl); - ADDC_LIMB (cy2, rl, sl, cy); - cy = cy1 | cy2; - *rp++ = rl; - - /* update (eh:el) */ - zl = (-cy) & yl; - el += zl; - eh += el < zl; - } - while (--n); - -#if GMP_NAIL_BITS != 0 - eh = (eh << GMP_NAIL_BITS) + (el >> GMP_NUMB_BITS); - el &= GMP_NUMB_MASK; -#endif - - ep[0] = el; - ep[1] = eh; - - return cy; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_err2_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_err2_n.c deleted file mode 100644 index 4b0242a32df4aef5cd8754bad016d293085cd0f1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_err2_n.c +++ /dev/null @@ -1,117 +0,0 @@ -/* mpn_add_err2_n -- add_n with two error terms - - Contributed by David Harvey. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* - Computes: - - (1) {rp,n} := {up,n} + {vp,n} (just like mpn_add_n) with incoming carry cy, - return value is carry out. - - (2) Let c[i+1] = carry from i-th limb addition (c[0] = cy). - Computes c[1]*yp1[n-1] + ... + c[n]*yp1[0], - c[1]*yp2[n-1] + ... + c[n]*yp2[0], - stores two-limb results at {ep,2} and {ep+2,2} respectively. - - Requires n >= 1. - - None of the outputs may overlap each other or any of the inputs, except - that {rp,n} may be equal to {up,n} or {vp,n}. -*/ -mp_limb_t -mpn_add_err2_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, - mp_ptr ep, mp_srcptr yp1, mp_srcptr yp2, - mp_size_t n, mp_limb_t cy) -{ - mp_limb_t el1, eh1, el2, eh2, ul, vl, yl1, yl2, zl1, zl2, rl, sl, cy1, cy2; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, vp, n)); - ASSERT (! MPN_OVERLAP_P (rp, n, yp1, n)); - ASSERT (! MPN_OVERLAP_P (rp, n, yp2, n)); - ASSERT (! MPN_OVERLAP_P (ep, 4, up, n)); - ASSERT (! MPN_OVERLAP_P (ep, 4, vp, n)); - ASSERT (! MPN_OVERLAP_P (ep, 4, yp1, n)); - ASSERT (! MPN_OVERLAP_P (ep, 4, yp2, n)); - ASSERT (! MPN_OVERLAP_P (ep, 4, rp, n)); - - yp1 += n - 1; - yp2 += n - 1; - el1 = eh1 = 0; - el2 = eh2 = 0; - - do - { - yl1 = *yp1--; - yl2 = *yp2--; - ul = *up++; - vl = *vp++; - - /* ordinary add_n */ - ADDC_LIMB (cy1, sl, ul, vl); - ADDC_LIMB (cy2, rl, sl, cy); - cy = cy1 | cy2; - *rp++ = rl; - - /* update (eh1:el1) */ - zl1 = (-cy) & yl1; - el1 += zl1; - eh1 += el1 < zl1; - - /* update (eh2:el2) */ - zl2 = (-cy) & yl2; - el2 += zl2; - eh2 += el2 < zl2; - } - while (--n); - -#if GMP_NAIL_BITS != 0 - eh1 = (eh1 << GMP_NAIL_BITS) + (el1 >> GMP_NUMB_BITS); - el1 &= GMP_NUMB_MASK; - eh2 = (eh2 << GMP_NAIL_BITS) + (el2 >> GMP_NUMB_BITS); - el2 &= GMP_NUMB_MASK; -#endif - - ep[0] = el1; - ep[1] = eh1; - ep[2] = el2; - ep[3] = eh2; - - return cy; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_err3_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_err3_n.c deleted file mode 100644 index 28cd7facf9337b6acfb9ac5bbdc7d58549d26d06..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_err3_n.c +++ /dev/null @@ -1,132 +0,0 @@ -/* mpn_add_err3_n -- add_n with three error terms - - Contributed by David Harvey. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* - Computes: - - (1) {rp,n} := {up,n} + {vp,n} (just like mpn_add_n) with incoming carry cy, - return value is carry out. - - (2) Let c[i+1] = carry from i-th limb addition (c[0] = cy). - Computes c[1]*yp1[n-1] + ... + c[n]*yp1[0], - c[1]*yp2[n-1] + ... + c[n]*yp2[0], - c[1]*yp3[n-1] + ... + c[n]*yp3[0], - stores two-limb results at {ep,2}, {ep+2,2} and {ep+4,2} respectively. - - Requires n >= 1. - - None of the outputs may overlap each other or any of the inputs, except - that {rp,n} may be equal to {up,n} or {vp,n}. -*/ -mp_limb_t -mpn_add_err3_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, - mp_ptr ep, mp_srcptr yp1, mp_srcptr yp2, mp_srcptr yp3, - mp_size_t n, mp_limb_t cy) -{ - mp_limb_t el1, eh1, el2, eh2, el3, eh3, ul, vl, yl1, yl2, yl3, zl1, zl2, zl3, rl, sl, cy1, cy2; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, vp, n)); - ASSERT (! MPN_OVERLAP_P (rp, n, yp1, n)); - ASSERT (! MPN_OVERLAP_P (rp, n, yp2, n)); - ASSERT (! MPN_OVERLAP_P (rp, n, yp3, n)); - ASSERT (! MPN_OVERLAP_P (ep, 6, up, n)); - ASSERT (! MPN_OVERLAP_P (ep, 6, vp, n)); - ASSERT (! MPN_OVERLAP_P (ep, 6, yp1, n)); - ASSERT (! MPN_OVERLAP_P (ep, 6, yp2, n)); - ASSERT (! MPN_OVERLAP_P (ep, 6, yp3, n)); - ASSERT (! MPN_OVERLAP_P (ep, 6, rp, n)); - - yp1 += n - 1; - yp2 += n - 1; - yp3 += n - 1; - el1 = eh1 = 0; - el2 = eh2 = 0; - el3 = eh3 = 0; - - do - { - yl1 = *yp1--; - yl2 = *yp2--; - yl3 = *yp3--; - ul = *up++; - vl = *vp++; - - /* ordinary add_n */ - ADDC_LIMB (cy1, sl, ul, vl); - ADDC_LIMB (cy2, rl, sl, cy); - cy = cy1 | cy2; - *rp++ = rl; - - /* update (eh1:el1) */ - zl1 = (-cy) & yl1; - el1 += zl1; - eh1 += el1 < zl1; - - /* update (eh2:el2) */ - zl2 = (-cy) & yl2; - el2 += zl2; - eh2 += el2 < zl2; - - /* update (eh3:el3) */ - zl3 = (-cy) & yl3; - el3 += zl3; - eh3 += el3 < zl3; - } - while (--n); - -#if GMP_NAIL_BITS != 0 - eh1 = (eh1 << GMP_NAIL_BITS) + (el1 >> GMP_NUMB_BITS); - el1 &= GMP_NUMB_MASK; - eh2 = (eh2 << GMP_NAIL_BITS) + (el2 >> GMP_NUMB_BITS); - el2 &= GMP_NUMB_MASK; - eh3 = (eh3 << GMP_NAIL_BITS) + (el3 >> GMP_NUMB_BITS); - el3 &= GMP_NUMB_MASK; -#endif - - ep[0] = el1; - ep[1] = eh1; - ep[2] = el2; - ep[3] = eh2; - ep[4] = el3; - ep[5] = eh3; - - return cy; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_n.c deleted file mode 100644 index 1a0767090040e8585c81ba2ca268b76b2486604b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_n.c +++ /dev/null @@ -1,90 +0,0 @@ -/* mpn_add_n -- Add equal length limb vectors. - -Copyright 1992-1994, 1996, 2000, 2002, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -#if GMP_NAIL_BITS == 0 - -mp_limb_t -mpn_add_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n) -{ - mp_limb_t ul, vl, sl, rl, cy, cy1, cy2; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_INCR_P (rp, up, n)); - ASSERT (MPN_SAME_OR_INCR_P (rp, vp, n)); - - cy = 0; - do - { - ul = *up++; - vl = *vp++; - sl = ul + vl; - cy1 = sl < ul; - rl = sl + cy; - cy2 = rl < sl; - cy = cy1 | cy2; - *rp++ = rl; - } - while (--n != 0); - - return cy; -} - -#endif - -#if GMP_NAIL_BITS >= 1 - -mp_limb_t -mpn_add_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n) -{ - mp_limb_t ul, vl, rl, cy; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_INCR_P (rp, up, n)); - ASSERT (MPN_SAME_OR_INCR_P (rp, vp, n)); - - cy = 0; - do - { - ul = *up++; - vl = *vp++; - rl = ul + vl + cy; - cy = rl >> GMP_NUMB_BITS; - *rp++ = rl & GMP_NUMB_MASK; - } - while (--n != 0); - - return cy; -} - -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_n_sub_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_n_sub_n.c deleted file mode 100644 index 012eb3e33adaa254e2f0fb3a9cb76fb9906f3880..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/add_n_sub_n.c +++ /dev/null @@ -1,173 +0,0 @@ -/* mpn_add_n_sub_n -- Add and Subtract two limb vectors of equal, non-zero length. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 1999-2001, 2006 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#ifndef L1_CACHE_SIZE -#define L1_CACHE_SIZE 8192 /* only 68040 has less than this */ -#endif - -#define PART_SIZE (L1_CACHE_SIZE / GMP_LIMB_BYTES / 6) - - -/* mpn_add_n_sub_n. - r1[] = s1[] + s2[] - r2[] = s1[] - s2[] - All operands have n limbs. - In-place operations allowed. */ -mp_limb_t -mpn_add_n_sub_n (mp_ptr r1p, mp_ptr r2p, mp_srcptr s1p, mp_srcptr s2p, mp_size_t n) -{ - mp_limb_t acyn, acyo; /* carry for add */ - mp_limb_t scyn, scyo; /* carry for subtract */ - mp_size_t off; /* offset in operands */ - mp_size_t this_n; /* size of current chunk */ - - /* We alternatingly add and subtract in chunks that fit into the (L1) - cache. Since the chunks are several hundred limbs, the function call - overhead is insignificant, but we get much better locality. */ - - /* We have three variant of the inner loop, the proper loop is chosen - depending on whether r1 or r2 are the same operand as s1 or s2. */ - - if (r1p != s1p && r1p != s2p) - { - /* r1 is not identical to either input operand. We can therefore write - to r1 directly, without using temporary storage. */ - acyo = 0; - scyo = 0; - for (off = 0; off < n; off += PART_SIZE) - { - this_n = MIN (n - off, PART_SIZE); -#if HAVE_NATIVE_mpn_add_nc - acyo = mpn_add_nc (r1p + off, s1p + off, s2p + off, this_n, acyo); -#else - acyn = mpn_add_n (r1p + off, s1p + off, s2p + off, this_n); - acyo = acyn + mpn_add_1 (r1p + off, r1p + off, this_n, acyo); -#endif -#if HAVE_NATIVE_mpn_sub_nc - scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo); -#else - scyn = mpn_sub_n (r2p + off, s1p + off, s2p + off, this_n); - scyo = scyn + mpn_sub_1 (r2p + off, r2p + off, this_n, scyo); -#endif - } - } - else if (r2p != s1p && r2p != s2p) - { - /* r2 is not identical to either input operand. We can therefore write - to r2 directly, without using temporary storage. */ - acyo = 0; - scyo = 0; - for (off = 0; off < n; off += PART_SIZE) - { - this_n = MIN (n - off, PART_SIZE); -#if HAVE_NATIVE_mpn_sub_nc - scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo); -#else - scyn = mpn_sub_n (r2p + off, s1p + off, s2p + off, this_n); - scyo = scyn + mpn_sub_1 (r2p + off, r2p + off, this_n, scyo); -#endif -#if HAVE_NATIVE_mpn_add_nc - acyo = mpn_add_nc (r1p + off, s1p + off, s2p + off, this_n, acyo); -#else - acyn = mpn_add_n (r1p + off, s1p + off, s2p + off, this_n); - acyo = acyn + mpn_add_1 (r1p + off, r1p + off, this_n, acyo); -#endif - } - } - else - { - /* r1 and r2 are identical to s1 and s2 (r1==s1 and r2==s2 or vice versa) - Need temporary storage. */ - mp_limb_t tp[PART_SIZE]; - acyo = 0; - scyo = 0; - for (off = 0; off < n; off += PART_SIZE) - { - this_n = MIN (n - off, PART_SIZE); -#if HAVE_NATIVE_mpn_add_nc - acyo = mpn_add_nc (tp, s1p + off, s2p + off, this_n, acyo); -#else - acyn = mpn_add_n (tp, s1p + off, s2p + off, this_n); - acyo = acyn + mpn_add_1 (tp, tp, this_n, acyo); -#endif -#if HAVE_NATIVE_mpn_sub_nc - scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo); -#else - scyn = mpn_sub_n (r2p + off, s1p + off, s2p + off, this_n); - scyo = scyn + mpn_sub_1 (r2p + off, r2p + off, this_n, scyo); -#endif - MPN_COPY (r1p + off, tp, this_n); - } - } - - return 2 * acyo + scyo; -} - -#ifdef MAIN -#include <stdlib.h> -#include <stdio.h> -#include "timing.h" - -long cputime (); - -int -main (int argc, char **argv) -{ - mp_ptr r1p, r2p, s1p, s2p; - double t; - mp_size_t n; - - n = strtol (argv[1], 0, 0); - - r1p = malloc (n * GMP_LIMB_BYTES); - r2p = malloc (n * GMP_LIMB_BYTES); - s1p = malloc (n * GMP_LIMB_BYTES); - s2p = malloc (n * GMP_LIMB_BYTES); - TIME (t,(mpn_add_n(r1p,s1p,s2p,n),mpn_sub_n(r1p,s1p,s2p,n))); - printf (" separate add and sub: %.3f\n", t); - TIME (t,mpn_add_n_sub_n(r1p,r2p,s1p,s2p,n)); - printf ("combined addsub separate variables: %.3f\n", t); - TIME (t,mpn_add_n_sub_n(r1p,r2p,r1p,s2p,n)); - printf (" combined addsub r1 overlap: %.3f\n", t); - TIME (t,mpn_add_n_sub_n(r1p,r2p,r1p,s2p,n)); - printf (" combined addsub r2 overlap: %.3f\n", t); - TIME (t,mpn_add_n_sub_n(r1p,r2p,r1p,r2p,n)); - printf (" combined addsub in-place: %.3f\n", t); - - return 0; -} -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/addmul_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/addmul_1.c deleted file mode 100644 index d76b4ad135066f56bdbed5b07001f662e8e5b18a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/addmul_1.c +++ /dev/null @@ -1,139 +0,0 @@ -/* mpn_addmul_1 -- multiply the N long limb vector pointed to by UP by VL, - add the N least significant limbs of the product to the limb vector - pointed to by RP. Return the most significant limb of the product, - adjusted for carry-out from the addition. - -Copyright 1992-1994, 1996, 2000, 2002, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -#if GMP_NAIL_BITS == 0 - -mp_limb_t -mpn_addmul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) -{ - mp_limb_t ul, cl, hpl, lpl, rl; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - - cl = 0; - do - { - ul = *up++; - umul_ppmm (hpl, lpl, ul, vl); - - lpl += cl; - cl = (lpl < cl) + hpl; - - rl = *rp; - lpl = rl + lpl; - cl += lpl < rl; - *rp++ = lpl; - } - while (--n != 0); - - return cl; -} - -#endif - -#if GMP_NAIL_BITS == 1 - -mp_limb_t -mpn_addmul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) -{ - mp_limb_t shifted_vl, ul, rl, lpl, hpl, prev_hpl, cl, xl, c1, c2, c3; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - ASSERT_MPN (rp, n); - ASSERT_MPN (up, n); - ASSERT_LIMB (vl); - - shifted_vl = vl << GMP_NAIL_BITS; - cl = 0; - prev_hpl = 0; - do - { - ul = *up++; - rl = *rp; - umul_ppmm (hpl, lpl, ul, shifted_vl); - lpl >>= GMP_NAIL_BITS; - ADDC_LIMB (c1, xl, prev_hpl, lpl); - ADDC_LIMB (c2, xl, xl, rl); - ADDC_LIMB (c3, xl, xl, cl); - cl = c1 + c2 + c3; - *rp++ = xl; - prev_hpl = hpl; - } - while (--n != 0); - - return prev_hpl + cl; -} - -#endif - -#if GMP_NAIL_BITS >= 2 - -mp_limb_t -mpn_addmul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) -{ - mp_limb_t shifted_vl, ul, rl, lpl, hpl, prev_hpl, xw, cl, xl; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - ASSERT_MPN (rp, n); - ASSERT_MPN (up, n); - ASSERT_LIMB (vl); - - shifted_vl = vl << GMP_NAIL_BITS; - cl = 0; - prev_hpl = 0; - do - { - ul = *up++; - rl = *rp; - umul_ppmm (hpl, lpl, ul, shifted_vl); - lpl >>= GMP_NAIL_BITS; - xw = prev_hpl + lpl + rl + cl; - cl = xw >> GMP_NUMB_BITS; - xl = xw & GMP_NUMB_MASK; - *rp++ = xl; - prev_hpl = hpl; - } - while (--n != 0); - - return prev_hpl + cl; -} - -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bdiv_dbm1c.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bdiv_dbm1c.c deleted file mode 100644 index 22c3cfd2c80864ae256cfcc9b18f7536f1586219..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bdiv_dbm1c.c +++ /dev/null @@ -1,59 +0,0 @@ -/* mpn_bdiv_dbm1c -- divide an mpn number by a divisor of B-1, where B is the - limb base. The dbm1c moniker means "Divisor of B Minus 1 with Carry". - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2008, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -mp_limb_t -mpn_bdiv_dbm1c (mp_ptr qp, mp_srcptr ap, mp_size_t n, mp_limb_t bd, mp_limb_t h) -{ - mp_limb_t a, p0, p1, cy; - mp_size_t i; - - for (i = 0; i < n; i++) - { - a = ap[i]; - umul_ppmm (p1, p0, a, bd << GMP_NAIL_BITS); - p0 >>= GMP_NAIL_BITS; - cy = h < p0; - h = (h - p0) & GMP_NUMB_MASK; - qp[i] = h; - h = h - p1 - cy; - } - - return h; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bdiv_q.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bdiv_q.c deleted file mode 100644 index 1fc1bb7c099dae5f323925feb83261f786f29377..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bdiv_q.c +++ /dev/null @@ -1,77 +0,0 @@ -/* mpn_bdiv_q -- Hensel division with precomputed inverse, returning quotient. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2006, 2007, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Computes Q = N / D mod B^n. */ - -void -mpn_bdiv_q (mp_ptr qp, - mp_srcptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, - mp_ptr tp) -{ - mp_limb_t di; - - if (BELOW_THRESHOLD (dn, DC_BDIV_Q_THRESHOLD)) - { - MPN_COPY (tp, np, nn); - binvert_limb (di, dp[0]); di = -di; - mpn_sbpi1_bdiv_q (qp, tp, nn, dp, dn, di); - } - else if (BELOW_THRESHOLD (dn, MU_BDIV_Q_THRESHOLD)) - { - MPN_COPY (tp, np, nn); - binvert_limb (di, dp[0]); di = -di; - mpn_dcpi1_bdiv_q (qp, tp, nn, dp, dn, di); - } - else - { - mpn_mu_bdiv_q (qp, np, nn, dp, dn, tp); - } - return; -} - -mp_size_t -mpn_bdiv_q_itch (mp_size_t nn, mp_size_t dn) -{ - if (BELOW_THRESHOLD (dn, MU_BDIV_Q_THRESHOLD)) - return nn; - else - return mpn_mu_bdiv_q_itch (nn, dn); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bdiv_q_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bdiv_q_1.c deleted file mode 100644 index 74b247d5a9ab9639a2eec55a1ac6ad177bc4b136..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bdiv_q_1.c +++ /dev/null @@ -1,126 +0,0 @@ -/* mpn_bdiv_q_1, mpn_pi1_bdiv_q_1 -- schoolbook Hensel division by 1-limb - divisor, returning quotient only. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2000-2003, 2005, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -mp_limb_t -mpn_pi1_bdiv_q_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t d, - mp_limb_t di, int shift) -{ - mp_size_t i; - mp_limb_t c, h, l, u, u_next, dummy; - - ASSERT (n >= 1); - ASSERT (d != 0); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - ASSERT_MPN (up, n); - ASSERT_LIMB (d); - - d <<= GMP_NAIL_BITS; - - if (shift != 0) - { - c = 0; - - u = up[0]; - rp--; - for (i = 1; i < n; i++) - { - u_next = up[i]; - u = ((u >> shift) | (u_next << (GMP_NUMB_BITS-shift))) & GMP_NUMB_MASK; - - SUBC_LIMB (c, l, u, c); - - l = (l * di) & GMP_NUMB_MASK; - rp[i] = l; - - umul_ppmm (h, dummy, l, d); - c += h; - u = u_next; - } - - u = u >> shift; - l = u - c; - l = (l * di) & GMP_NUMB_MASK; - rp[i] = l; - } - else - { - u = up[0]; - l = (u * di) & GMP_NUMB_MASK; - rp[0] = l; - c = 0; - - for (i = 1; i < n; i++) - { - umul_ppmm (h, dummy, l, d); - c += h; - - u = up[i]; - SUBC_LIMB (c, l, u, c); - - l = (l * di) & GMP_NUMB_MASK; - rp[i] = l; - } - } - - return c; -} - -mp_limb_t -mpn_bdiv_q_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t d) -{ - mp_limb_t di; - int shift; - - ASSERT (n >= 1); - ASSERT (d != 0); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - ASSERT_MPN (up, n); - ASSERT_LIMB (d); - - if ((d & 1) == 0) - { - count_trailing_zeros (shift, d); - d >>= shift; - } - else - shift = 0; - - binvert_limb (di, d); - return mpn_pi1_bdiv_q_1 (rp, up, n, d, di, shift); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bdiv_qr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bdiv_qr.c deleted file mode 100644 index 6a5eedbbc2f5032964167d77bd0d27d93df5b5c2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bdiv_qr.c +++ /dev/null @@ -1,85 +0,0 @@ -/* mpn_bdiv_qr -- Hensel division with precomputed inverse, returning quotient - and remainder. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2006, 2007, 2009, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Computes Q = N / D mod B^n, - R = N - QD. */ - -mp_limb_t -mpn_bdiv_qr (mp_ptr qp, mp_ptr rp, - mp_srcptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, - mp_ptr tp) -{ - mp_limb_t di; - mp_limb_t rh; - - ASSERT (nn > dn); - if (BELOW_THRESHOLD (dn, DC_BDIV_QR_THRESHOLD) || - BELOW_THRESHOLD (nn - dn, DC_BDIV_QR_THRESHOLD)) - { - MPN_COPY (tp, np, nn); - binvert_limb (di, dp[0]); di = -di; - rh = mpn_sbpi1_bdiv_qr (qp, tp, nn, dp, dn, di); - MPN_COPY (rp, tp + nn - dn, dn); - } - else if (BELOW_THRESHOLD (dn, MU_BDIV_QR_THRESHOLD)) - { - MPN_COPY (tp, np, nn); - binvert_limb (di, dp[0]); di = -di; - rh = mpn_dcpi1_bdiv_qr (qp, tp, nn, dp, dn, di); - MPN_COPY (rp, tp + nn - dn, dn); - } - else - { - rh = mpn_mu_bdiv_qr (qp, rp, np, nn, dp, dn, tp); - } - - return rh; -} - -mp_size_t -mpn_bdiv_qr_itch (mp_size_t nn, mp_size_t dn) -{ - if (BELOW_THRESHOLD (dn, MU_BDIV_QR_THRESHOLD)) - return nn; - else - return mpn_mu_bdiv_qr_itch (nn, dn); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/binvert.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/binvert.c deleted file mode 100644 index be27ea552e7856eb91e04dab2ddc0874071374d5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/binvert.c +++ /dev/null @@ -1,102 +0,0 @@ -/* Compute {up,n}^(-1) mod B^n. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright (C) 2004-2007, 2009, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* - r[k+1] = r[k] - r[k] * (u*r[k] - 1) - r[k+1] = r[k] + r[k] - r[k]*(u*r[k]) -*/ - -#if TUNE_PROGRAM_BUILD -#define NPOWS \ - ((sizeof(mp_size_t) > 6 ? 48 : 8*sizeof(mp_size_t))) -#else -#define NPOWS \ - ((sizeof(mp_size_t) > 6 ? 48 : 8*sizeof(mp_size_t)) - LOG2C (BINV_NEWTON_THRESHOLD)) -#endif - -mp_size_t -mpn_binvert_itch (mp_size_t n) -{ - mp_size_t itch_local = mpn_mulmod_bnm1_next_size (n); - mp_size_t itch_out = mpn_mulmod_bnm1_itch (itch_local, n, (n + 1) >> 1); - return itch_local + itch_out; -} - -void -mpn_binvert (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_ptr scratch) -{ - mp_ptr xp; - mp_size_t rn, newrn; - mp_size_t sizes[NPOWS], *sizp; - mp_limb_t di; - - /* Compute the computation precisions from highest to lowest, leaving the - base case size in 'rn'. */ - sizp = sizes; - for (rn = n; ABOVE_THRESHOLD (rn, BINV_NEWTON_THRESHOLD); rn = (rn + 1) >> 1) - *sizp++ = rn; - - xp = scratch; - - /* Compute a base value of rn limbs. */ - MPN_ZERO (xp, rn); - xp[0] = 1; - binvert_limb (di, up[0]); - if (BELOW_THRESHOLD (rn, DC_BDIV_Q_THRESHOLD)) - mpn_sbpi1_bdiv_q (rp, xp, rn, up, rn, -di); - else - mpn_dcpi1_bdiv_q (rp, xp, rn, up, rn, -di); - - /* Use Newton iterations to get the desired precision. */ - for (; rn < n; rn = newrn) - { - mp_size_t m; - newrn = *--sizp; - - /* X <- UR. */ - m = mpn_mulmod_bnm1_next_size (newrn); - mpn_mulmod_bnm1 (xp, m, up, newrn, rp, rn, xp + m); - mpn_sub_1 (xp + m, xp, rn - (m - newrn), 1); - - /* R = R(X/B^rn) */ - mpn_mullo_n (rp + rn, rp, xp + rn, newrn - rn); - mpn_neg (rp + rn, rp + rn, newrn - rn); - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/broot.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/broot.c deleted file mode 100644 index 6974ac8b9e811acba2ff4dbcf1bd81ad0058e813..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/broot.c +++ /dev/null @@ -1,196 +0,0 @@ -/* mpn_broot -- Compute hensel sqrt - - Contributed to the GNU project by Niels Möller - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* Computes a^e (mod B). Uses right-to-left binary algorithm, since - typical use will have e small. */ -static mp_limb_t -powlimb (mp_limb_t a, mp_limb_t e) -{ - mp_limb_t r = 1; - mp_limb_t s = a; - - for (r = 1, s = a; e > 0; e >>= 1, s *= s) - if (e & 1) - r *= s; - - return r; -} - -/* Computes a^{1/k - 1} (mod B^n). Both a and k must be odd. - - Iterates - - r' <-- r - r * (a^{k-1} r^k - 1) / n - - If - - a^{k-1} r^k = 1 (mod 2^m), - - then - - a^{k-1} r'^k = 1 (mod 2^{2m}), - - Compute the update term as - - r' = r - (a^{k-1} r^{k+1} - r) / k - - where we still have cancellation of low limbs. - - */ -void -mpn_broot_invm1 (mp_ptr rp, mp_srcptr ap, mp_size_t n, mp_limb_t k) -{ - mp_size_t sizes[GMP_LIMB_BITS * 2]; - mp_ptr akm1, tp, rnp, ep; - mp_limb_t a0, r0, km1, kp1h, kinv; - mp_size_t rn; - unsigned i; - - TMP_DECL; - - ASSERT (n > 0); - ASSERT (ap[0] & 1); - ASSERT (k & 1); - ASSERT (k >= 3); - - TMP_MARK; - - akm1 = TMP_ALLOC_LIMBS (4*n); - tp = akm1 + n; - - km1 = k-1; - /* FIXME: Could arrange the iteration so we don't need to compute - this up front, computing a^{k-1} * r^k as (a r)^{k-1} * r. Note - that we can use wraparound also for a*r, since the low half is - unchanged from the previous iteration. Or possibly mulmid. Also, - a r = a^{1/k}, so we get that value too, for free? */ - mpn_powlo (akm1, ap, &km1, 1, n, tp); /* 3 n scratch space */ - - a0 = ap[0]; - binvert_limb (kinv, k); - - /* 4 bits: a^{1/k - 1} (mod 16): - - a % 8 - 1 3 5 7 - k%4 +------- - 1 |1 1 1 1 - 3 |1 9 9 1 - */ - r0 = 1 + (((k << 2) & ((a0 << 1) ^ (a0 << 2))) & 8); - r0 = kinv * r0 * (k+1 - akm1[0] * powlimb (r0, k & 0x7f)); /* 8 bits */ - r0 = kinv * r0 * (k+1 - akm1[0] * powlimb (r0, k & 0x7fff)); /* 16 bits */ - r0 = kinv * r0 * (k+1 - akm1[0] * powlimb (r0, k)); /* 32 bits */ -#if GMP_NUMB_BITS > 32 - { - unsigned prec = 32; - do - { - r0 = kinv * r0 * (k+1 - akm1[0] * powlimb (r0, k)); - prec *= 2; - } - while (prec < GMP_NUMB_BITS); - } -#endif - - rp[0] = r0; - if (n == 1) - { - TMP_FREE; - return; - } - - /* For odd k, (k+1)/2 = k/2+1, and the latter avoids overflow. */ - kp1h = k/2 + 1; - - /* FIXME: Special case for two limb iteration. */ - rnp = TMP_ALLOC_LIMBS (2*n + 1); - ep = rnp + n; - - /* FIXME: Possible to this on the fly with some bit fiddling. */ - for (i = 0; n > 1; n = (n + 1)/2) - sizes[i++] = n; - - rn = 1; - - while (i-- > 0) - { - /* Compute x^{k+1}. */ - mpn_sqr (ep, rp, rn); /* For odd n, writes n+1 limbs in the - final iteration. */ - mpn_powlo (rnp, ep, &kp1h, 1, sizes[i], tp); - - /* Multiply by a^{k-1}. Can use wraparound; low part equals r. */ - - mpn_mullo_n (ep, rnp, akm1, sizes[i]); - ASSERT (mpn_cmp (ep, rp, rn) == 0); - - ASSERT (sizes[i] <= 2*rn); - mpn_pi1_bdiv_q_1 (rp + rn, ep + rn, sizes[i] - rn, k, kinv, 0); - mpn_neg (rp + rn, rp + rn, sizes[i] - rn); - rn = sizes[i]; - } - TMP_FREE; -} - -/* Computes a^{1/k} (mod B^n). Both a and k must be odd. */ -void -mpn_broot (mp_ptr rp, mp_srcptr ap, mp_size_t n, mp_limb_t k) -{ - mp_ptr tp; - TMP_DECL; - - ASSERT (n > 0); - ASSERT (ap[0] & 1); - ASSERT (k & 1); - - if (k == 1) - { - MPN_COPY (rp, ap, n); - return; - } - - TMP_MARK; - tp = TMP_ALLOC_LIMBS (n); - - mpn_broot_invm1 (tp, ap, n, k); - mpn_mullo_n (rp, tp, ap, n); - - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/brootinv.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/brootinv.c deleted file mode 100644 index b96c97f1d36e0a865cc9b7bc4b14f2d95952f224..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/brootinv.c +++ /dev/null @@ -1,140 +0,0 @@ -/* mpn_brootinv, compute r such that r^k * y = 1 (mod 2^b). - - Contributed to the GNU project by Martin Boij (as part of perfpow.c). - -Copyright 2009, 2010, 2012, 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* Computes a^e (mod B). Uses right-to-left binary algorithm, since - typical use will have e small. */ -static mp_limb_t -powlimb (mp_limb_t a, mp_limb_t e) -{ - mp_limb_t r; - - for (r = 1; e > 0; e >>= 1, a *= a) - if (e & 1) - r *= a; - - return r; -} - -/* Compute r such that r^k * y = 1 (mod B^n). - - Iterates - r' <-- k^{-1} ((k+1) r - r^{k+1} y) (mod 2^b) - using Hensel lifting, each time doubling the number of known bits in r. - - Works just for odd k. Else the Hensel lifting degenerates. - - FIXME: - - (1) Make it work for k == GMP_LIMB_MAX (k+1 below overflows). - - (2) Rewrite iteration as - r' <-- r - k^{-1} r (r^k y - 1) - and take advantage of the zero low part of r^k y - 1. - - (3) Use wrap-around trick. - - (4) Use a small table to get starting value. - - Scratch need: 5*bn, where bn = ceil (bnb / GMP_NUMB_BITS). -*/ - -void -mpn_brootinv (mp_ptr rp, mp_srcptr yp, mp_size_t bn, mp_limb_t k, mp_ptr tp) -{ - mp_ptr tp2, tp3; - mp_limb_t kinv, k2, r0, y0; - mp_size_t order[GMP_LIMB_BITS + 1]; - int i, d; - - ASSERT (bn > 0); - ASSERT ((k & 1) != 0); - - tp2 = tp + bn; - tp3 = tp + 2 * bn; - k2 = k + 1; - - binvert_limb (kinv, k); - - /* 4-bit initial approximation: - - y%16 | 1 3 5 7 9 11 13 15, - k%4 +-------------------------+k2%4 - 1 | 1 11 13 7 9 3 5 15 | 2 - 3 | 1 3 5 7 9 11 13 15 | 0 - - */ - y0 = yp[0]; - - r0 = y0 ^ (((y0 << 1) ^ (y0 << 2)) & (k2 << 2) & 8); /* 4 bits */ - r0 = kinv * (k2 * r0 - y0 * powlimb(r0, k2 & 0x7f)); /* 8 bits */ - r0 = kinv * (k2 * r0 - y0 * powlimb(r0, k2 & 0x7fff)); /* 16 bits */ -#if GMP_NUMB_BITS > 16 - { - unsigned prec = 16; - do - { - r0 = kinv * (k2 * r0 - y0 * powlimb(r0, k2)); - prec *= 2; - } - while (prec < GMP_NUMB_BITS); - } -#endif - - rp[0] = r0; - if (bn == 1) - return; - - /* This initialization doesn't matter for the result (any garbage is - cancelled in the iteration), but proper initialization makes - valgrind happier. */ - MPN_ZERO (rp+1, bn-1); - - d = 0; - for (; bn > 1; bn = (bn + 1) >> 1) - order[d++] = bn; - - for (i = d - 1; i >= 0; i--) - { - bn = order[i]; - - mpn_mul_1 (tp, rp, bn, k2); - - mpn_powlo (tp2, rp, &k2, 1, bn, tp3); - mpn_mullo_n (rp, yp, tp2, bn); - - mpn_sub_n (tp2, tp, rp, bn); - mpn_pi1_bdiv_q_1 (rp, tp2, bn, k, kinv, 0); - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bsqrt.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bsqrt.c deleted file mode 100644 index d900f67b17bfa298dc96d16c260766798df02980..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bsqrt.c +++ /dev/null @@ -1,48 +0,0 @@ -/* mpn_bsqrt, a^{1/2} (mod 2^n). - -Copyright 2009, 2010, 2012, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -void -mpn_bsqrt (mp_ptr rp, mp_srcptr ap, mp_bitcnt_t nb, mp_ptr tp) -{ - mp_ptr sp; - mp_size_t n; - - ASSERT (nb > 0); - - n = nb / GMP_NUMB_BITS; - sp = tp + n; - - mpn_bsqrtinv (tp, ap, nb, sp); - mpn_mullo_n (rp, tp, ap, n); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bsqrtinv.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bsqrtinv.c deleted file mode 100644 index b779b504d2d091d8001b3c350402ff41cd58a2e3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/bsqrtinv.c +++ /dev/null @@ -1,104 +0,0 @@ -/* mpn_bsqrtinv, compute r such that r^2 * y = 1 (mod 2^{b+1}). - - Contributed to the GNU project by Martin Boij (as part of perfpow.c). - -Copyright 2009, 2010, 2012, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* Compute r such that r^2 * y = 1 (mod 2^{b+1}). - Return non-zero if such an integer r exists. - - Iterates - r' <-- (3r - r^3 y) / 2 - using Hensel lifting. Since we divide by two, the Hensel lifting is - somewhat degenerates. Therefore, we lift from 2^b to 2^{b+1}-1. - - FIXME: - (1) Simplify to do precision book-keeping in limbs rather than bits. - - (2) Rewrite iteration as - r' <-- r - r (r^2 y - 1) / 2 - and take advantage of zero low part of r^2 y - 1. - - (3) Use wrap-around trick. - - (4) Use a small table to get starting value. -*/ -int -mpn_bsqrtinv (mp_ptr rp, mp_srcptr yp, mp_bitcnt_t bnb, mp_ptr tp) -{ - mp_ptr tp2; - mp_size_t bn, order[GMP_LIMB_BITS + 1]; - int i, d; - - ASSERT (bnb > 0); - - bn = 1 + bnb / GMP_LIMB_BITS; - - tp2 = tp + bn; - - rp[0] = 1; - if (bnb == 1) - { - if ((yp[0] & 3) != 1) - return 0; - } - else - { - if ((yp[0] & 7) != 1) - return 0; - - d = 0; - for (; bnb != 2; bnb = (bnb + 2) >> 1) - order[d++] = bnb; - - for (i = d - 1; i >= 0; i--) - { - bnb = order[i]; - bn = 1 + bnb / GMP_LIMB_BITS; - - mpn_sqrlo (tp, rp, bn); - mpn_mullo_n (tp2, rp, tp, bn); /* tp2 <- rp ^ 3 */ - - mpn_mul_1 (tp, rp, bn, 3); - - mpn_mullo_n (rp, yp, tp2, bn); - -#if HAVE_NATIVE_mpn_rsh1sub_n - mpn_rsh1sub_n (rp, tp, rp, bn); -#else - mpn_sub_n (tp2, tp, rp, bn); - mpn_rshift (rp, tp2, bn, 1); -#endif - } - } - return 1; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/cmp.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/cmp.c deleted file mode 100644 index 18c7b428444c4fa0efba2a4cb555f19b95e3121c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/cmp.c +++ /dev/null @@ -1,34 +0,0 @@ -/* mpn_cmp -- Compare two low-level natural-number integers. - -Copyright 1991, 1993, 1994, 1996, 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define __GMP_FORCE_mpn_cmp 1 - -#include "gmp.h" -#include "gmp-impl.h" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/cnd_add_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/cnd_add_n.c deleted file mode 100644 index 443f9858da5650fdc9fe59efb8a2e9f63e985998..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/cnd_add_n.c +++ /dev/null @@ -1,70 +0,0 @@ -/* mpn_cnd_add_n -- Compute R = U + V if CND != 0 or R = U if CND == 0. - Both cases should take the same time and perform the exact same memory - accesses, since this function is intended to be used where side-channel - attack resilience is relevant. - -Copyright 1992-1994, 1996, 2000, 2002, 2008, 2009, 2011, 2013 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -mpn_cnd_add_n (mp_limb_t cnd, mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n) -{ - mp_limb_t ul, vl, sl, rl, cy, cy1, cy2, mask; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, vp, n)); - - mask = -(mp_limb_t) (cnd != 0); - cy = 0; - do - { - ul = *up++; - vl = *vp++ & mask; -#if GMP_NAIL_BITS == 0 - sl = ul + vl; - cy1 = sl < ul; - rl = sl + cy; - cy2 = rl < sl; - cy = cy1 | cy2; - *rp++ = rl; -#else - rl = ul + vl; - rl += cy; - cy = rl >> GMP_NUMB_BITS; - *rp++ = rl & GMP_NUMB_MASK; -#endif - } - while (--n != 0); - - return cy; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/cnd_sub_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/cnd_sub_n.c deleted file mode 100644 index bd8e029a36fdf6f5e084551b64ebd71d3d599ed0..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/cnd_sub_n.c +++ /dev/null @@ -1,70 +0,0 @@ -/* mpn_cnd_sub_n -- Compute R = U - V if CND != 0 or R = U if CND == 0. - Both cases should take the same time and perform the exact same memory - accesses, since this function is intended to be used where side-channel - attack resilience is relevant. - -Copyright 1992-1994, 1996, 2000, 2002, 2008, 2009, 2011, 2013 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -mpn_cnd_sub_n (mp_limb_t cnd, mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n) -{ - mp_limb_t ul, vl, sl, rl, cy, cy1, cy2, mask; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, vp, n)); - - mask = -(mp_limb_t) (cnd != 0); - cy = 0; - do - { - ul = *up++; - vl = *vp++ & mask; -#if GMP_NAIL_BITS == 0 - sl = ul - vl; - cy1 = sl > ul; - rl = sl - cy; - cy2 = rl > sl; - cy = cy1 | cy2; - *rp++ = rl; -#else - rl = ul - vl; - rl -= cy; - cy = rl >> (GMP_LIMB_BITS - 1); - *rp++ = rl & GMP_NUMB_MASK; -#endif - } - while (--n != 0); - - return cy; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/cnd_swap.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/cnd_swap.c deleted file mode 100644 index 6b7419ffe786b08b989dfd8248109d04acd6f786..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/cnd_swap.c +++ /dev/null @@ -1,51 +0,0 @@ -/* mpn_cnd_swap - - Contributed to the GNU project by Niels Möller - -Copyright 2013, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpn_cnd_swap (mp_limb_t cnd, volatile mp_limb_t *ap, volatile mp_limb_t *bp, - mp_size_t n) -{ - volatile mp_limb_t mask = - (mp_limb_t) (cnd != 0); - mp_size_t i; - for (i = 0; i < n; i++) - { - mp_limb_t a, b, t; - a = ap[i]; - b = bp[i]; - t = (a ^ b) & mask; - ap[i] = a ^ t; - bp[i] = b ^ t; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/com.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/com.c deleted file mode 100644 index cd8551df5bac99d16745dd931fb75ef8de27dc4b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/com.c +++ /dev/null @@ -1,45 +0,0 @@ -/* mpn_com - complement an mpn. - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#undef mpn_com -#define mpn_com __MPN(com) - -void -mpn_com (mp_ptr rp, mp_srcptr up, mp_size_t n) -{ - mp_limb_t ul; - do { - ul = *up++; - *rp++ = ~ul & GMP_NUMB_MASK; - } while (--n != 0); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/comb_tables.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/comb_tables.c deleted file mode 100644 index 41bcb5f879da931cfc63dc43740ee7facef872cc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/comb_tables.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Const tables shared among combinatoric functions. - - THE CONTENTS OF THIS FILE ARE FOR INTERNAL USE AND ARE ALMOST CERTAIN TO - BE SUBJECT TO INCOMPATIBLE CHANGES IN FUTURE GNU MP RELEASES. - -Copyright 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* Entry i contains (i!/2^t) where t is chosen such that the parenthesis - is an odd integer. */ -const mp_limb_t __gmp_oddfac_table[] = { ONE_LIMB_ODD_FACTORIAL_TABLE, ONE_LIMB_ODD_FACTORIAL_EXTTABLE }; - -/* Entry i contains ((2i+1)!!/2^t) where t is chosen such that the parenthesis - is an odd integer. */ -const mp_limb_t __gmp_odd2fac_table[] = { ONE_LIMB_ODD_DOUBLEFACTORIAL_TABLE }; - -/* Entry i contains 2i-popc(2i). */ -const unsigned char __gmp_fac2cnt_table[] = { TABLE_2N_MINUS_POPC_2N }; - -const mp_limb_t __gmp_limbroots_table[] = { NTH_ROOT_NUMB_MASK_TABLE }; diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/copyd.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/copyd.c deleted file mode 100644 index ba3380a82bbe1517a33f9a0ce29d9ecbb48af8d9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/copyd.c +++ /dev/null @@ -1,41 +0,0 @@ -/* mpn_copyd - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpn_copyd (mp_ptr rp, mp_srcptr up, mp_size_t n) -{ - mp_size_t i; - - for (i = n - 1; i >= 0; i--) - rp[i] = up[i]; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/copyi.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/copyi.c deleted file mode 100644 index 0c39b4534bbb52926716f4148c62841dd776c6bc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/copyi.c +++ /dev/null @@ -1,43 +0,0 @@ -/* mpn_copyi - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpn_copyi (mp_ptr rp, mp_srcptr up, mp_size_t n) -{ - mp_size_t i; - - up += n; - rp += n; - for (i = -n; i != 0; i++) - rp[i] = up[i]; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_bdiv_q.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_bdiv_q.c deleted file mode 100644 index a7b86c96d44b48b844120c983ee809defcd6482d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_bdiv_q.c +++ /dev/null @@ -1,160 +0,0 @@ -/* mpn_dcpi1_bdiv_q -- divide-and-conquer Hensel division with precomputed - inverse, returning quotient. - - Contributed to the GNU project by Niels Möller and Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2006, 2007, 2009-2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -mp_size_t -mpn_dcpi1_bdiv_q_n_itch (mp_size_t n) -{ - /* NOTE: Depends on mullo_n interface */ - return n; -} - -/* Computes Q = N / D mod B^n, destroys N. - - N = {np,n} - D = {dp,n} -*/ - -void -mpn_dcpi1_bdiv_q_n (mp_ptr qp, - mp_ptr np, mp_srcptr dp, mp_size_t n, - mp_limb_t dinv, mp_ptr tp) -{ - while (ABOVE_THRESHOLD (n, DC_BDIV_Q_THRESHOLD)) - { - mp_size_t lo, hi; - mp_limb_t cy; - - lo = n >> 1; /* floor(n/2) */ - hi = n - lo; /* ceil(n/2) */ - - cy = mpn_dcpi1_bdiv_qr_n (qp, np, dp, lo, dinv, tp); - - mpn_mullo_n (tp, qp, dp + hi, lo); - mpn_sub_n (np + hi, np + hi, tp, lo); - - if (lo < hi) - { - cy += mpn_submul_1 (np + lo, qp, lo, dp[lo]); - np[n - 1] -= cy; - } - qp += lo; - np += lo; - n -= lo; - } - mpn_sbpi1_bdiv_q (qp, np, n, dp, n, dinv); -} - -/* Computes Q = N / D mod B^nn, destroys N. - - N = {np,nn} - D = {dp,dn} -*/ - -void -mpn_dcpi1_bdiv_q (mp_ptr qp, - mp_ptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, - mp_limb_t dinv) -{ - mp_size_t qn; - mp_limb_t cy; - mp_ptr tp; - TMP_DECL; - - TMP_MARK; - - ASSERT (dn >= 2); - ASSERT (nn - dn >= 0); - ASSERT (dp[0] & 1); - - tp = TMP_SALLOC_LIMBS (dn); - - qn = nn; - - if (qn > dn) - { - /* Reduce qn mod dn in a super-efficient manner. */ - do - qn -= dn; - while (qn > dn); - - /* Perform the typically smaller block first. */ - if (BELOW_THRESHOLD (qn, DC_BDIV_QR_THRESHOLD)) - cy = mpn_sbpi1_bdiv_qr (qp, np, 2 * qn, dp, qn, dinv); - else - cy = mpn_dcpi1_bdiv_qr_n (qp, np, dp, qn, dinv, tp); - - if (qn != dn) - { - if (qn > dn - qn) - mpn_mul (tp, qp, qn, dp + qn, dn - qn); - else - mpn_mul (tp, dp + qn, dn - qn, qp, qn); - mpn_incr_u (tp + qn, cy); - - mpn_sub (np + qn, np + qn, nn - qn, tp, dn); - cy = 0; - } - - np += qn; - qp += qn; - - qn = nn - qn; - while (qn > dn) - { - mpn_sub_1 (np + dn, np + dn, qn - dn, cy); - cy = mpn_dcpi1_bdiv_qr_n (qp, np, dp, dn, dinv, tp); - qp += dn; - np += dn; - qn -= dn; - } - mpn_dcpi1_bdiv_q_n (qp, np, dp, dn, dinv, tp); - } - else - { - if (BELOW_THRESHOLD (qn, DC_BDIV_Q_THRESHOLD)) - mpn_sbpi1_bdiv_q (qp, np, qn, dp, qn, dinv); - else - mpn_dcpi1_bdiv_q_n (qp, np, dp, qn, dinv, tp); - } - - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_bdiv_qr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_bdiv_qr.c deleted file mode 100644 index 8a251f8d9d8f46776175a34288049a7899653df8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_bdiv_qr.c +++ /dev/null @@ -1,177 +0,0 @@ -/* mpn_dcpi1_bdiv_qr -- divide-and-conquer Hensel division with precomputed - inverse, returning quotient and remainder. - - Contributed to the GNU project by Niels Möller and Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2006, 2007, 2009, 2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Computes Hensel binary division of {np, 2*n} by {dp, n}. - - Output: - - q = n * d^{-1} mod 2^{qn * GMP_NUMB_BITS}, - - r = (n - q * d) * 2^{-qn * GMP_NUMB_BITS} - - Stores q at qp. Stores the n least significant limbs of r at the high half - of np, and returns the borrow from the subtraction n - q*d. - - d must be odd. dinv is (-d)^-1 mod 2^GMP_NUMB_BITS. */ - -mp_size_t -mpn_dcpi1_bdiv_qr_n_itch (mp_size_t n) -{ - return n; -} - -mp_limb_t -mpn_dcpi1_bdiv_qr_n (mp_ptr qp, mp_ptr np, mp_srcptr dp, mp_size_t n, - mp_limb_t dinv, mp_ptr tp) -{ - mp_size_t lo, hi; - mp_limb_t cy; - mp_limb_t rh; - - lo = n >> 1; /* floor(n/2) */ - hi = n - lo; /* ceil(n/2) */ - - if (BELOW_THRESHOLD (lo, DC_BDIV_QR_THRESHOLD)) - cy = mpn_sbpi1_bdiv_qr (qp, np, 2 * lo, dp, lo, dinv); - else - cy = mpn_dcpi1_bdiv_qr_n (qp, np, dp, lo, dinv, tp); - - mpn_mul (tp, dp + lo, hi, qp, lo); - - mpn_incr_u (tp + lo, cy); - rh = mpn_sub (np + lo, np + lo, n + hi, tp, n); - - if (BELOW_THRESHOLD (hi, DC_BDIV_QR_THRESHOLD)) - cy = mpn_sbpi1_bdiv_qr (qp + lo, np + lo, 2 * hi, dp, hi, dinv); - else - cy = mpn_dcpi1_bdiv_qr_n (qp + lo, np + lo, dp, hi, dinv, tp); - - mpn_mul (tp, qp + lo, hi, dp + hi, lo); - - mpn_incr_u (tp + hi, cy); - rh += mpn_sub_n (np + n, np + n, tp, n); - - return rh; -} - -mp_limb_t -mpn_dcpi1_bdiv_qr (mp_ptr qp, mp_ptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, mp_limb_t dinv) -{ - mp_size_t qn; - mp_limb_t rr, cy; - mp_ptr tp; - TMP_DECL; - - TMP_MARK; - - ASSERT (dn >= 2); /* to adhere to mpn_sbpi1_div_qr's limits */ - ASSERT (nn - dn >= 1); /* to adhere to mpn_sbpi1_div_qr's limits */ - ASSERT (dp[0] & 1); - - tp = TMP_SALLOC_LIMBS (dn); - - qn = nn - dn; - - if (qn > dn) - { - /* Reduce qn mod dn without division, optimizing small operations. */ - do - qn -= dn; - while (qn > dn); - - /* Perform the typically smaller block first. */ - if (BELOW_THRESHOLD (qn, DC_BDIV_QR_THRESHOLD)) - cy = mpn_sbpi1_bdiv_qr (qp, np, 2 * qn, dp, qn, dinv); - else - cy = mpn_dcpi1_bdiv_qr_n (qp, np, dp, qn, dinv, tp); - - rr = 0; - if (qn != dn) - { - if (qn > dn - qn) - mpn_mul (tp, qp, qn, dp + qn, dn - qn); - else - mpn_mul (tp, dp + qn, dn - qn, qp, qn); - mpn_incr_u (tp + qn, cy); - - rr = mpn_sub (np + qn, np + qn, nn - qn, tp, dn); - cy = 0; - } - - np += qn; - qp += qn; - - qn = nn - dn - qn; - do - { - rr += mpn_sub_1 (np + dn, np + dn, qn, cy); - cy = mpn_dcpi1_bdiv_qr_n (qp, np, dp, dn, dinv, tp); - qp += dn; - np += dn; - qn -= dn; - } - while (qn > 0); - TMP_FREE; - return rr + cy; - } - - if (BELOW_THRESHOLD (qn, DC_BDIV_QR_THRESHOLD)) - cy = mpn_sbpi1_bdiv_qr (qp, np, 2 * qn, dp, qn, dinv); - else - cy = mpn_dcpi1_bdiv_qr_n (qp, np, dp, qn, dinv, tp); - - rr = 0; - if (qn != dn) - { - if (qn > dn - qn) - mpn_mul (tp, qp, qn, dp + qn, dn - qn); - else - mpn_mul (tp, dp + qn, dn - qn, qp, qn); - mpn_incr_u (tp + qn, cy); - - rr = mpn_sub (np + qn, np + qn, nn - qn, tp, dn); - cy = 0; - } - - TMP_FREE; - return rr + cy; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_div_q.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_div_q.c deleted file mode 100644 index 2b5da523d4f7e46b0c4da48d3007d71d78c7a850..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_div_q.c +++ /dev/null @@ -1,87 +0,0 @@ -/* mpn_dc_div_q -- divide-and-conquer division, returning exact quotient - only. - - Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2006, 2007, 2009, 2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -mp_limb_t -mpn_dcpi1_div_q (mp_ptr qp, mp_ptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, gmp_pi1_t *dinv) -{ - mp_ptr tp, wp; - mp_limb_t qh; - mp_size_t qn; - TMP_DECL; - - TMP_MARK; - - ASSERT (dn >= 6); - ASSERT (nn - dn >= 3); - ASSERT (dp[dn-1] & GMP_NUMB_HIGHBIT); - - tp = TMP_ALLOC_LIMBS (nn + 1); - MPN_COPY (tp + 1, np, nn); - tp[0] = 0; - - qn = nn - dn; - wp = TMP_ALLOC_LIMBS (qn + 1); - - qh = mpn_dcpi1_divappr_q (wp, tp, nn + 1, dp, dn, dinv); - - if (wp[0] == 0) - { - mp_limb_t cy; - - if (qn > dn) - mpn_mul (tp, wp + 1, qn, dp, dn); - else - mpn_mul (tp, dp, dn, wp + 1, qn); - - cy = (qh != 0) ? mpn_add_n (tp + qn, tp + qn, dp, dn) : 0; - - if (cy || mpn_cmp (tp, np, nn) > 0) /* At most is wrong by one, no cycle. */ - qh -= mpn_sub_1 (qp, wp + 1, qn, 1); - else /* Same as below */ - MPN_COPY (qp, wp + 1, qn); - } - else - MPN_COPY (qp, wp + 1, qn); - - TMP_FREE; - return qh; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_div_qr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_div_qr.c deleted file mode 100644 index 9583ec3fe062929821c6cdca747dcf65a609ba92..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_div_qr.c +++ /dev/null @@ -1,249 +0,0 @@ -/* mpn_dcpi1_div_qr_n -- recursive divide-and-conquer division for arbitrary - size operands. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2006, 2007, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -mp_limb_t -mpn_dcpi1_div_qr_n (mp_ptr qp, mp_ptr np, mp_srcptr dp, mp_size_t n, - gmp_pi1_t *dinv, mp_ptr tp) -{ - mp_size_t lo, hi; - mp_limb_t cy, qh, ql; - - lo = n >> 1; /* floor(n/2) */ - hi = n - lo; /* ceil(n/2) */ - - if (BELOW_THRESHOLD (hi, DC_DIV_QR_THRESHOLD)) - qh = mpn_sbpi1_div_qr (qp + lo, np + 2 * lo, 2 * hi, dp + lo, hi, dinv->inv32); - else - qh = mpn_dcpi1_div_qr_n (qp + lo, np + 2 * lo, dp + lo, hi, dinv, tp); - - mpn_mul (tp, qp + lo, hi, dp, lo); - - cy = mpn_sub_n (np + lo, np + lo, tp, n); - if (qh != 0) - cy += mpn_sub_n (np + n, np + n, dp, lo); - - while (cy != 0) - { - qh -= mpn_sub_1 (qp + lo, qp + lo, hi, 1); - cy -= mpn_add_n (np + lo, np + lo, dp, n); - } - - if (BELOW_THRESHOLD (lo, DC_DIV_QR_THRESHOLD)) - ql = mpn_sbpi1_div_qr (qp, np + hi, 2 * lo, dp + hi, lo, dinv->inv32); - else - ql = mpn_dcpi1_div_qr_n (qp, np + hi, dp + hi, lo, dinv, tp); - - mpn_mul (tp, dp, hi, qp, lo); - - cy = mpn_sub_n (np, np, tp, n); - if (ql != 0) - cy += mpn_sub_n (np + lo, np + lo, dp, hi); - - while (cy != 0) - { - mpn_sub_1 (qp, qp, lo, 1); - cy -= mpn_add_n (np, np, dp, n); - } - - return qh; -} - -mp_limb_t -mpn_dcpi1_div_qr (mp_ptr qp, - mp_ptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, - gmp_pi1_t *dinv) -{ - mp_size_t qn; - mp_limb_t qh, cy; - mp_ptr tp; - TMP_DECL; - - TMP_MARK; - - ASSERT (dn >= 6); /* to adhere to mpn_sbpi1_div_qr's limits */ - ASSERT (nn - dn >= 3); /* to adhere to mpn_sbpi1_div_qr's limits */ - ASSERT (dp[dn-1] & GMP_NUMB_HIGHBIT); - - tp = TMP_ALLOC_LIMBS (dn); - - qn = nn - dn; - qp += qn; - np += nn; - dp += dn; - - if (qn > dn) - { - /* Reduce qn mod dn without division, optimizing small operations. */ - do - qn -= dn; - while (qn > dn); - - qp -= qn; /* point at low limb of next quotient block */ - np -= qn; /* point in the middle of partial remainder */ - - /* Perform the typically smaller block first. */ - if (qn == 1) - { - mp_limb_t q, n2, n1, n0, d1, d0; - - /* Handle qh up front, for simplicity. */ - qh = mpn_cmp (np - dn + 1, dp - dn, dn) >= 0; - if (qh) - ASSERT_NOCARRY (mpn_sub_n (np - dn + 1, np - dn + 1, dp - dn, dn)); - - /* A single iteration of schoolbook: One 3/2 division, - followed by the bignum update and adjustment. */ - n2 = np[0]; - n1 = np[-1]; - n0 = np[-2]; - d1 = dp[-1]; - d0 = dp[-2]; - - ASSERT (n2 < d1 || (n2 == d1 && n1 <= d0)); - - if (UNLIKELY (n2 == d1) && n1 == d0) - { - q = GMP_NUMB_MASK; - cy = mpn_submul_1 (np - dn, dp - dn, dn, q); - ASSERT (cy == n2); - } - else - { - udiv_qr_3by2 (q, n1, n0, n2, n1, n0, d1, d0, dinv->inv32); - - if (dn > 2) - { - mp_limb_t cy, cy1; - cy = mpn_submul_1 (np - dn, dp - dn, dn - 2, q); - - cy1 = n0 < cy; - n0 = (n0 - cy) & GMP_NUMB_MASK; - cy = n1 < cy1; - n1 = (n1 - cy1) & GMP_NUMB_MASK; - np[-2] = n0; - - if (UNLIKELY (cy != 0)) - { - n1 += d1 + mpn_add_n (np - dn, np - dn, dp - dn, dn - 1); - qh -= (q == 0); - q = (q - 1) & GMP_NUMB_MASK; - } - } - else - np[-2] = n0; - - np[-1] = n1; - } - qp[0] = q; - } - else - { - /* Do a 2qn / qn division */ - if (qn == 2) - qh = mpn_divrem_2 (qp, 0L, np - 2, 4, dp - 2); /* FIXME: obsolete function. Use 5/3 division? */ - else if (BELOW_THRESHOLD (qn, DC_DIV_QR_THRESHOLD)) - qh = mpn_sbpi1_div_qr (qp, np - qn, 2 * qn, dp - qn, qn, dinv->inv32); - else - qh = mpn_dcpi1_div_qr_n (qp, np - qn, dp - qn, qn, dinv, tp); - - if (qn != dn) - { - if (qn > dn - qn) - mpn_mul (tp, qp, qn, dp - dn, dn - qn); - else - mpn_mul (tp, dp - dn, dn - qn, qp, qn); - - cy = mpn_sub_n (np - dn, np - dn, tp, dn); - if (qh != 0) - cy += mpn_sub_n (np - dn + qn, np - dn + qn, dp - dn, dn - qn); - - while (cy != 0) - { - qh -= mpn_sub_1 (qp, qp, qn, 1); - cy -= mpn_add_n (np - dn, np - dn, dp - dn, dn); - } - } - } - - qn = nn - dn - qn; - do - { - qp -= dn; - np -= dn; - mpn_dcpi1_div_qr_n (qp, np - dn, dp - dn, dn, dinv, tp); - qn -= dn; - } - while (qn > 0); - } - else - { - qp -= qn; /* point at low limb of next quotient block */ - np -= qn; /* point in the middle of partial remainder */ - - if (BELOW_THRESHOLD (qn, DC_DIV_QR_THRESHOLD)) - qh = mpn_sbpi1_div_qr (qp, np - qn, 2 * qn, dp - qn, qn, dinv->inv32); - else - qh = mpn_dcpi1_div_qr_n (qp, np - qn, dp - qn, qn, dinv, tp); - - if (qn != dn) - { - if (qn > dn - qn) - mpn_mul (tp, qp, qn, dp - dn, dn - qn); - else - mpn_mul (tp, dp - dn, dn - qn, qp, qn); - - cy = mpn_sub_n (np - dn, np - dn, tp, dn); - if (qh != 0) - cy += mpn_sub_n (np - dn + qn, np - dn + qn, dp - dn, dn - qn); - - while (cy != 0) - { - qh -= mpn_sub_1 (qp, qp, qn, 1); - cy -= mpn_add_n (np - dn, np - dn, dp - dn, dn); - } - } - } - - TMP_FREE; - return qh; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_divappr_q.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_divappr_q.c deleted file mode 100644 index c7b03c7f4962d3352fa61926f87c1a2ed0802150..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dcpi1_divappr_q.c +++ /dev/null @@ -1,257 +0,0 @@ -/* mpn_dcpi1_divappr_q -- divide-and-conquer division, returning approximate - quotient. The quotient returned is either correct, or one too large. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2006, 2007, 2009, 2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -mp_limb_t -mpn_dcpi1_divappr_q_n (mp_ptr qp, mp_ptr np, mp_srcptr dp, mp_size_t n, - gmp_pi1_t *dinv, mp_ptr tp) -{ - mp_size_t lo, hi; - mp_limb_t cy, qh, ql; - - lo = n >> 1; /* floor(n/2) */ - hi = n - lo; /* ceil(n/2) */ - - if (BELOW_THRESHOLD (hi, DC_DIV_QR_THRESHOLD)) - qh = mpn_sbpi1_div_qr (qp + lo, np + 2 * lo, 2 * hi, dp + lo, hi, dinv->inv32); - else - qh = mpn_dcpi1_div_qr_n (qp + lo, np + 2 * lo, dp + lo, hi, dinv, tp); - - mpn_mul (tp, qp + lo, hi, dp, lo); - - cy = mpn_sub_n (np + lo, np + lo, tp, n); - if (qh != 0) - cy += mpn_sub_n (np + n, np + n, dp, lo); - - while (cy != 0) - { - qh -= mpn_sub_1 (qp + lo, qp + lo, hi, 1); - cy -= mpn_add_n (np + lo, np + lo, dp, n); - } - - if (BELOW_THRESHOLD (lo, DC_DIVAPPR_Q_THRESHOLD)) - ql = mpn_sbpi1_divappr_q (qp, np + hi, 2 * lo, dp + hi, lo, dinv->inv32); - else - ql = mpn_dcpi1_divappr_q_n (qp, np + hi, dp + hi, lo, dinv, tp); - - if (UNLIKELY (ql != 0)) - { - mp_size_t i; - for (i = 0; i < lo; i++) - qp[i] = GMP_NUMB_MASK; - } - - return qh; -} - -mp_limb_t -mpn_dcpi1_divappr_q (mp_ptr qp, mp_ptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, gmp_pi1_t *dinv) -{ - mp_size_t qn; - mp_limb_t qh, cy, qsave; - mp_ptr tp; - TMP_DECL; - - TMP_MARK; - - ASSERT (dn >= 6); - ASSERT (nn > dn); - ASSERT (dp[dn-1] & GMP_NUMB_HIGHBIT); - - qn = nn - dn; - qp += qn; - np += nn; - dp += dn; - - if (qn >= dn) - { - qn++; /* pretend we'll need an extra limb */ - /* Reduce qn mod dn without division, optimizing small operations. */ - do - qn -= dn; - while (qn > dn); - - qp -= qn; /* point at low limb of next quotient block */ - np -= qn; /* point in the middle of partial remainder */ - - tp = TMP_SALLOC_LIMBS (dn); - - /* Perform the typically smaller block first. */ - if (qn == 1) - { - mp_limb_t q, n2, n1, n0, d1, d0; - - /* Handle qh up front, for simplicity. */ - qh = mpn_cmp (np - dn + 1, dp - dn, dn) >= 0; - if (qh) - ASSERT_NOCARRY (mpn_sub_n (np - dn + 1, np - dn + 1, dp - dn, dn)); - - /* A single iteration of schoolbook: One 3/2 division, - followed by the bignum update and adjustment. */ - n2 = np[0]; - n1 = np[-1]; - n0 = np[-2]; - d1 = dp[-1]; - d0 = dp[-2]; - - ASSERT (n2 < d1 || (n2 == d1 && n1 <= d0)); - - if (UNLIKELY (n2 == d1) && n1 == d0) - { - q = GMP_NUMB_MASK; - cy = mpn_submul_1 (np - dn, dp - dn, dn, q); - ASSERT (cy == n2); - } - else - { - udiv_qr_3by2 (q, n1, n0, n2, n1, n0, d1, d0, dinv->inv32); - - if (dn > 2) - { - mp_limb_t cy, cy1; - cy = mpn_submul_1 (np - dn, dp - dn, dn - 2, q); - - cy1 = n0 < cy; - n0 = (n0 - cy) & GMP_NUMB_MASK; - cy = n1 < cy1; - n1 = (n1 - cy1) & GMP_NUMB_MASK; - np[-2] = n0; - - if (UNLIKELY (cy != 0)) - { - n1 += d1 + mpn_add_n (np - dn, np - dn, dp - dn, dn - 1); - qh -= (q == 0); - q = (q - 1) & GMP_NUMB_MASK; - } - } - else - np[-2] = n0; - - np[-1] = n1; - } - qp[0] = q; - } - else - { - if (qn == 2) - qh = mpn_divrem_2 (qp, 0L, np - 2, 4, dp - 2); - else if (BELOW_THRESHOLD (qn, DC_DIV_QR_THRESHOLD)) - qh = mpn_sbpi1_div_qr (qp, np - qn, 2 * qn, dp - qn, qn, dinv->inv32); - else - qh = mpn_dcpi1_div_qr_n (qp, np - qn, dp - qn, qn, dinv, tp); - - if (qn != dn) - { - if (qn > dn - qn) - mpn_mul (tp, qp, qn, dp - dn, dn - qn); - else - mpn_mul (tp, dp - dn, dn - qn, qp, qn); - - cy = mpn_sub_n (np - dn, np - dn, tp, dn); - if (qh != 0) - cy += mpn_sub_n (np - dn + qn, np - dn + qn, dp - dn, dn - qn); - - while (cy != 0) - { - qh -= mpn_sub_1 (qp, qp, qn, 1); - cy -= mpn_add_n (np - dn, np - dn, dp - dn, dn); - } - } - } - qn = nn - dn - qn + 1; - while (qn > dn) - { - qp -= dn; - np -= dn; - mpn_dcpi1_div_qr_n (qp, np - dn, dp - dn, dn, dinv, tp); - qn -= dn; - } - - /* Since we pretended we'd need an extra quotient limb before, we now - have made sure the code above left just dn-1=qn quotient limbs to - develop. Develop that plus a guard limb. */ - qn--; - qp -= qn; - np -= dn; - qsave = qp[qn]; - mpn_dcpi1_divappr_q_n (qp, np - dn, dp - dn, dn, dinv, tp); - MPN_COPY_INCR (qp, qp + 1, qn); - qp[qn] = qsave; - } - else /* (qn < dn) */ - { - mp_ptr q2p; -#if 0 /* not possible since we demand nn > dn */ - if (qn == 0) - { - qh = mpn_cmp (np - dn, dp - dn, dn) >= 0; - if (qh) - mpn_sub_n (np - dn, np - dn, dp - dn, dn); - TMP_FREE; - return qh; - } -#endif - - qp -= qn; /* point at low limb of next quotient block */ - np -= qn; /* point in the middle of partial remainder */ - - q2p = TMP_SALLOC_LIMBS (qn + 1); - /* Should we at all check DC_DIVAPPR_Q_THRESHOLD here, or reply on - callers not to be silly? */ - if (BELOW_THRESHOLD (qn, DC_DIVAPPR_Q_THRESHOLD)) - { - qh = mpn_sbpi1_divappr_q (q2p, np - qn - 2, 2 * (qn + 1), - dp - (qn + 1), qn + 1, dinv->inv32); - } - else - { - /* It is tempting to use qp for recursive scratch and put quotient in - tp, but the recursive scratch needs one limb too many. */ - tp = TMP_SALLOC_LIMBS (qn + 1); - qh = mpn_dcpi1_divappr_q_n (q2p, np - qn - 2, dp - (qn + 1), qn + 1, dinv, tp); - } - MPN_COPY (qp, q2p + 1, qn); - } - - TMP_FREE; - return qh; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_q.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_q.c deleted file mode 100644 index a4fe0e369e51ee42adc8300946b0dff92ea5a2c4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_q.c +++ /dev/null @@ -1,323 +0,0 @@ -/* mpn_div_q -- division for arbitrary size operands. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2009, 2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* Compute Q = N/D with truncation. - N = {np,nn} - D = {dp,dn} - Q = {qp,nn-dn+1} - T = {scratch,nn+1} is scratch space - N and D are both untouched by the computation. - N and T may overlap; pass the same space if N is irrelevant after the call, - but note that tp needs an extra limb. - - Operand requirements: - N >= D > 0 - dp[dn-1] != 0 - No overlap between the N, D, and Q areas. - - This division function does not clobber its input operands, since it is - intended to support average-O(qn) division, and for that to be effective, it - cannot put requirements on callers to copy a O(nn) operand. - - If a caller does not care about the value of {np,nn+1} after calling this - function, it should pass np also for the scratch argument. This function - will then save some time and space by avoiding allocation and copying. - (FIXME: Is this a good design? We only really save any copying for - already-normalised divisors, which should be rare. It also prevents us from - reasonably asking for all scratch space we need.) - - We write nn-dn+1 limbs for the quotient, but return void. Why not return - the most significant quotient limb? Look at the 4 main code blocks below - (consisting of an outer if-else where each arm contains an if-else). It is - tricky for the first code block, since the mpn_*_div_q calls will typically - generate all nn-dn+1 and return 0 or 1. I don't see how to fix that unless - we generate the most significant quotient limb here, before calling - mpn_*_div_q, or put the quotient in a temporary area. Since this is a - critical division case (the SB sub-case in particular) copying is not a good - idea. - - It might make sense to split the if-else parts of the (qn + FUDGE - >= dn) blocks into separate functions, since we could promise quite - different things to callers in these two cases. The 'then' case - benefits from np=scratch, and it could perhaps even tolerate qp=np, - saving some headache for many callers. - - FIXME: Scratch allocation leaves a lot to be desired. E.g., for the MU size - operands, we do not reuse the huge scratch for adjustments. This can be a - serious waste of memory for the largest operands. -*/ - -/* FUDGE determines when to try getting an approximate quotient from the upper - parts of the dividend and divisor, then adjust. N.B. FUDGE must be >= 2 - for the code to be correct. */ -#define FUDGE 5 /* FIXME: tune this */ - -#define DC_DIV_Q_THRESHOLD DC_DIVAPPR_Q_THRESHOLD -#define MU_DIV_Q_THRESHOLD MU_DIVAPPR_Q_THRESHOLD -#define MUPI_DIV_Q_THRESHOLD MUPI_DIVAPPR_Q_THRESHOLD -#ifndef MUPI_DIVAPPR_Q_THRESHOLD -#define MUPI_DIVAPPR_Q_THRESHOLD MUPI_DIV_QR_THRESHOLD -#endif - -void -mpn_div_q (mp_ptr qp, - mp_srcptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, mp_ptr scratch) -{ - mp_ptr new_dp, new_np, tp, rp; - mp_limb_t cy, dh, qh; - mp_size_t new_nn, qn; - gmp_pi1_t dinv; - int cnt; - TMP_DECL; - TMP_MARK; - - ASSERT (nn >= dn); - ASSERT (dn > 0); - ASSERT (dp[dn - 1] != 0); - ASSERT (! MPN_OVERLAP_P (qp, nn - dn + 1, np, nn)); - ASSERT (! MPN_OVERLAP_P (qp, nn - dn + 1, dp, dn)); - ASSERT (MPN_SAME_OR_SEPARATE_P (np, scratch, nn)); - - ASSERT_ALWAYS (FUDGE >= 2); - - if (dn == 1) - { - mpn_divrem_1 (qp, 0L, np, nn, dp[dn - 1]); - return; - } - - qn = nn - dn + 1; /* Quotient size, high limb might be zero */ - - if (qn + FUDGE >= dn) - { - /* |________________________| - |_______| */ - new_np = scratch; - - dh = dp[dn - 1]; - if (LIKELY ((dh & GMP_NUMB_HIGHBIT) == 0)) - { - count_leading_zeros (cnt, dh); - - cy = mpn_lshift (new_np, np, nn, cnt); - new_np[nn] = cy; - new_nn = nn + (cy != 0); - - new_dp = TMP_ALLOC_LIMBS (dn); - mpn_lshift (new_dp, dp, dn, cnt); - - if (dn == 2) - { - qh = mpn_divrem_2 (qp, 0L, new_np, new_nn, new_dp); - } - else if (BELOW_THRESHOLD (dn, DC_DIV_Q_THRESHOLD) || - BELOW_THRESHOLD (new_nn - dn, DC_DIV_Q_THRESHOLD)) - { - invert_pi1 (dinv, new_dp[dn - 1], new_dp[dn - 2]); - qh = mpn_sbpi1_div_q (qp, new_np, new_nn, new_dp, dn, dinv.inv32); - } - else if (BELOW_THRESHOLD (dn, MUPI_DIV_Q_THRESHOLD) || /* fast condition */ - BELOW_THRESHOLD (nn, 2 * MU_DIV_Q_THRESHOLD) || /* fast condition */ - (double) (2 * (MU_DIV_Q_THRESHOLD - MUPI_DIV_Q_THRESHOLD)) * dn /* slow... */ - + (double) MUPI_DIV_Q_THRESHOLD * nn > (double) dn * nn) /* ...condition */ - { - invert_pi1 (dinv, new_dp[dn - 1], new_dp[dn - 2]); - qh = mpn_dcpi1_div_q (qp, new_np, new_nn, new_dp, dn, &dinv); - } - else - { - mp_size_t itch = mpn_mu_div_q_itch (new_nn, dn, 0); - mp_ptr scratch = TMP_ALLOC_LIMBS (itch); - qh = mpn_mu_div_q (qp, new_np, new_nn, new_dp, dn, scratch); - } - if (cy == 0) - qp[qn - 1] = qh; - else if (UNLIKELY (qh != 0)) - { - /* This happens only when the quotient is close to B^n and - mpn_*_divappr_q returned B^n. */ - mp_size_t i, n; - n = new_nn - dn; - for (i = 0; i < n; i++) - qp[i] = GMP_NUMB_MAX; - qh = 0; /* currently ignored */ - } - } - else /* divisor is already normalised */ - { - if (new_np != np) - MPN_COPY (new_np, np, nn); - - if (dn == 2) - { - qh = mpn_divrem_2 (qp, 0L, new_np, nn, dp); - } - else if (BELOW_THRESHOLD (dn, DC_DIV_Q_THRESHOLD) || - BELOW_THRESHOLD (nn - dn, DC_DIV_Q_THRESHOLD)) - { - invert_pi1 (dinv, dh, dp[dn - 2]); - qh = mpn_sbpi1_div_q (qp, new_np, nn, dp, dn, dinv.inv32); - } - else if (BELOW_THRESHOLD (dn, MUPI_DIV_Q_THRESHOLD) || /* fast condition */ - BELOW_THRESHOLD (nn, 2 * MU_DIV_Q_THRESHOLD) || /* fast condition */ - (double) (2 * (MU_DIV_Q_THRESHOLD - MUPI_DIV_Q_THRESHOLD)) * dn /* slow... */ - + (double) MUPI_DIV_Q_THRESHOLD * nn > (double) dn * nn) /* ...condition */ - { - invert_pi1 (dinv, dh, dp[dn - 2]); - qh = mpn_dcpi1_div_q (qp, new_np, nn, dp, dn, &dinv); - } - else - { - mp_size_t itch = mpn_mu_div_q_itch (nn, dn, 0); - mp_ptr scratch = TMP_ALLOC_LIMBS (itch); - qh = mpn_mu_div_q (qp, np, nn, dp, dn, scratch); - } - qp[nn - dn] = qh; - } - } - else - { - /* |________________________| - |_________________| */ - tp = TMP_ALLOC_LIMBS (qn + 1); - - new_np = scratch; - new_nn = 2 * qn + 1; - if (new_np == np) - /* We need {np,nn} to remain untouched until the final adjustment, so - we need to allocate separate space for new_np. */ - new_np = TMP_ALLOC_LIMBS (new_nn + 1); - - - dh = dp[dn - 1]; - if (LIKELY ((dh & GMP_NUMB_HIGHBIT) == 0)) - { - count_leading_zeros (cnt, dh); - - cy = mpn_lshift (new_np, np + nn - new_nn, new_nn, cnt); - new_np[new_nn] = cy; - - new_nn += (cy != 0); - - new_dp = TMP_ALLOC_LIMBS (qn + 1); - mpn_lshift (new_dp, dp + dn - (qn + 1), qn + 1, cnt); - new_dp[0] |= dp[dn - (qn + 1) - 1] >> (GMP_NUMB_BITS - cnt); - - if (qn + 1 == 2) - { - qh = mpn_divrem_2 (tp, 0L, new_np, new_nn, new_dp); - } - else if (BELOW_THRESHOLD (qn, DC_DIVAPPR_Q_THRESHOLD - 1)) - { - invert_pi1 (dinv, new_dp[qn], new_dp[qn - 1]); - qh = mpn_sbpi1_divappr_q (tp, new_np, new_nn, new_dp, qn + 1, dinv.inv32); - } - else if (BELOW_THRESHOLD (qn, MU_DIVAPPR_Q_THRESHOLD - 1)) - { - invert_pi1 (dinv, new_dp[qn], new_dp[qn - 1]); - qh = mpn_dcpi1_divappr_q (tp, new_np, new_nn, new_dp, qn + 1, &dinv); - } - else - { - mp_size_t itch = mpn_mu_divappr_q_itch (new_nn, qn + 1, 0); - mp_ptr scratch = TMP_ALLOC_LIMBS (itch); - qh = mpn_mu_divappr_q (tp, new_np, new_nn, new_dp, qn + 1, scratch); - } - if (cy == 0) - tp[qn] = qh; - else if (UNLIKELY (qh != 0)) - { - /* This happens only when the quotient is close to B^n and - mpn_*_divappr_q returned B^n. */ - mp_size_t i, n; - n = new_nn - (qn + 1); - for (i = 0; i < n; i++) - tp[i] = GMP_NUMB_MAX; - qh = 0; /* currently ignored */ - } - } - else /* divisor is already normalised */ - { - MPN_COPY (new_np, np + nn - new_nn, new_nn); /* pointless if MU will be used */ - - new_dp = (mp_ptr) dp + dn - (qn + 1); - - if (qn == 2 - 1) - { - qh = mpn_divrem_2 (tp, 0L, new_np, new_nn, new_dp); - } - else if (BELOW_THRESHOLD (qn, DC_DIVAPPR_Q_THRESHOLD - 1)) - { - invert_pi1 (dinv, dh, new_dp[qn - 1]); - qh = mpn_sbpi1_divappr_q (tp, new_np, new_nn, new_dp, qn + 1, dinv.inv32); - } - else if (BELOW_THRESHOLD (qn, MU_DIVAPPR_Q_THRESHOLD - 1)) - { - invert_pi1 (dinv, dh, new_dp[qn - 1]); - qh = mpn_dcpi1_divappr_q (tp, new_np, new_nn, new_dp, qn + 1, &dinv); - } - else - { - mp_size_t itch = mpn_mu_divappr_q_itch (new_nn, qn + 1, 0); - mp_ptr scratch = TMP_ALLOC_LIMBS (itch); - qh = mpn_mu_divappr_q (tp, new_np, new_nn, new_dp, qn + 1, scratch); - } - tp[qn] = qh; - } - - MPN_COPY (qp, tp + 1, qn); - if (tp[0] <= 4) - { - mp_size_t rn; - - rp = TMP_ALLOC_LIMBS (dn + qn); - mpn_mul (rp, dp, dn, tp + 1, qn); - rn = dn + qn; - rn -= rp[rn - 1] == 0; - - if (rn > nn || mpn_cmp (np, rp, nn) < 0) - mpn_decr_u (qp, 1); - } - } - - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_1.c deleted file mode 100644 index 09401ac5358170549e5c75c4ba8de4084024445b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_1.c +++ /dev/null @@ -1,126 +0,0 @@ -/* mpn_div_qr_1 -- mpn by limb division. - - Contributed to the GNU project by Niels Möller and Torbjörn Granlund - -Copyright 1991, 1993, 1994, 1996, 1998-2000, 2002, 2003, 2013 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef DIV_QR_1_NORM_THRESHOLD -#define DIV_QR_1_NORM_THRESHOLD 3 -#endif -#ifndef DIV_QR_1_UNNORM_THRESHOLD -#define DIV_QR_1_UNNORM_THRESHOLD 3 -#endif - -#if GMP_NAIL_BITS > 0 -#error Nail bits not supported -#endif - -/* Divides {up, n} by d. Writes the n-1 low quotient limbs at {qp, - * n-1}, and the high quote limb at *qh. Returns remainder. */ -mp_limb_t -mpn_div_qr_1 (mp_ptr qp, mp_limb_t *qh, mp_srcptr up, mp_size_t n, - mp_limb_t d) -{ - unsigned cnt; - mp_limb_t uh; - - ASSERT (n > 0); - ASSERT (d > 0); - - if (d & GMP_NUMB_HIGHBIT) - { - /* Normalized case */ - mp_limb_t dinv, q; - - uh = up[--n]; - - q = (uh >= d); - *qh = q; - uh -= (-q) & d; - - if (BELOW_THRESHOLD (n, DIV_QR_1_NORM_THRESHOLD)) - { - cnt = 0; - plain: - while (n > 0) - { - mp_limb_t ul = up[--n]; - udiv_qrnnd (qp[n], uh, uh, ul, d); - } - return uh >> cnt; - } - invert_limb (dinv, d); - return mpn_div_qr_1n_pi1 (qp, up, n, uh, d, dinv); - } - else - { - /* Unnormalized case */ - mp_limb_t dinv, ul; - - if (! UDIV_NEEDS_NORMALIZATION - && BELOW_THRESHOLD (n, DIV_QR_1_UNNORM_THRESHOLD)) - { - uh = up[--n]; - udiv_qrnnd (*qh, uh, CNST_LIMB(0), uh, d); - cnt = 0; - goto plain; - } - - count_leading_zeros (cnt, d); - d <<= cnt; - -#if HAVE_NATIVE_div_qr_1u_pi1 - /* FIXME: Call loop doing on-the-fly normalization */ -#endif - - /* Shift up front, use qp area for shifted copy. A bit messy, - since we have only n-1 limbs available, and shift the high - limb manually. */ - uh = up[--n]; - ul = (uh << cnt) | mpn_lshift (qp, up, n, cnt); - uh >>= (GMP_LIMB_BITS - cnt); - - if (UDIV_NEEDS_NORMALIZATION - && BELOW_THRESHOLD (n, DIV_QR_1_UNNORM_THRESHOLD)) - { - udiv_qrnnd (*qh, uh, uh, ul, d); - up = qp; - goto plain; - } - invert_limb (dinv, d); - - udiv_qrnnd_preinv (*qh, uh, uh, ul, d, dinv); - return mpn_div_qr_1n_pi1 (qp, qp, n, uh, d, dinv) >> cnt; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_1n_pi1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_1n_pi1.c deleted file mode 100644 index 2656e9aef9cf98efac2bf4a400e659b6037ef637..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_1n_pi1.c +++ /dev/null @@ -1,277 +0,0 @@ -/* mpn_div_qr_1n_pi1 - - Contributed to the GNU project by Niels Möller - - THIS FILE CONTAINS INTERNAL FUNCTIONS WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - - -Copyright 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#if GMP_NAIL_BITS > 0 -#error Nail bits not supported -#endif - -#ifndef DIV_QR_1N_METHOD -#define DIV_QR_1N_METHOD 2 -#endif - -/* FIXME: Duplicated in mod_1_1.c. Move to gmp-impl.h */ - -#if defined (__GNUC__) && ! defined (NO_ASM) - -#if HAVE_HOST_CPU_FAMILY_x86 && W_TYPE_SIZE == 32 -#define add_mssaaaa(m, s1, s0, a1, a0, b1, b0) \ - __asm__ ( "add %6, %k2\n\t" \ - "adc %4, %k1\n\t" \ - "sbb %k0, %k0" \ - : "=r" (m), "=r" (s1), "=&r" (s0) \ - : "1" ((USItype)(a1)), "g" ((USItype)(b1)), \ - "%2" ((USItype)(a0)), "g" ((USItype)(b0))) -#endif - -#if HAVE_HOST_CPU_FAMILY_x86_64 && W_TYPE_SIZE == 64 -#define add_mssaaaa(m, s1, s0, a1, a0, b1, b0) \ - __asm__ ( "add %6, %q2\n\t" \ - "adc %4, %q1\n\t" \ - "sbb %q0, %q0" \ - : "=r" (m), "=r" (s1), "=&r" (s0) \ - : "1" ((UDItype)(a1)), "rme" ((UDItype)(b1)), \ - "%2" ((UDItype)(a0)), "rme" ((UDItype)(b0))) -#endif - -#if defined (__sparc__) && W_TYPE_SIZE == 32 -#define add_mssaaaa(m, sh, sl, ah, al, bh, bl) \ - __asm__ ( "addcc %r5, %6, %2\n\t" \ - "addxcc %r3, %4, %1\n\t" \ - "subx %%g0, %%g0, %0" \ - : "=r" (m), "=r" (sh), "=&r" (sl) \ - : "rJ" (ah), "rI" (bh), "%rJ" (al), "rI" (bl) \ - __CLOBBER_CC) -#endif - -#if defined (__sparc__) && W_TYPE_SIZE == 64 -#define add_mssaaaa(m, sh, sl, ah, al, bh, bl) \ - __asm__ ( "addcc %r5, %6, %2\n\t" \ - "addccc %r7, %8, %%g0\n\t" \ - "addccc %r3, %4, %1\n\t" \ - "clr %0\n\t" \ - "movcs %%xcc, -1, %0" \ - : "=r" (m), "=r" (sh), "=&r" (sl) \ - : "rJ" (ah), "rI" (bh), "%rJ" (al), "rI" (bl), \ - "rJ" ((al) >> 32), "rI" ((bl) >> 32) \ - __CLOBBER_CC) -#if __VIS__ >= 0x300 -#undef add_mssaaaa -#define add_mssaaaa(m, sh, sl, ah, al, bh, bl) \ - __asm__ ( "addcc %r5, %6, %2\n\t" \ - "addxccc %r3, %4, %1\n\t" \ - "clr %0\n\t" \ - "movcs %%xcc, -1, %0" \ - : "=r" (m), "=r" (sh), "=&r" (sl) \ - : "rJ" (ah), "rI" (bh), "%rJ" (al), "rI" (bl) \ - __CLOBBER_CC) -#endif -#endif - -#if HAVE_HOST_CPU_FAMILY_powerpc && !defined (_LONG_LONG_LIMB) -/* This works fine for 32-bit and 64-bit limbs, except for 64-bit limbs with a - processor running in 32-bit mode, since the carry flag then gets the 32-bit - carry. */ -#define add_mssaaaa(m, s1, s0, a1, a0, b1, b0) \ - __asm__ ( "add%I6c %2, %5, %6\n\t" \ - "adde %1, %3, %4\n\t" \ - "subfe %0, %0, %0\n\t" \ - "nor %0, %0, %0" \ - : "=r" (m), "=r" (s1), "=&r" (s0) \ - : "r" (a1), "r" (b1), "%r" (a0), "rI" (b0)) -#endif - -#if defined (__s390x__) && W_TYPE_SIZE == 64 -#define add_mssaaaa(m, s1, s0, a1, a0, b1, b0) \ - __asm__ ( "algr %2, %6\n\t" \ - "alcgr %1, %4\n\t" \ - "lghi %0, 0\n\t" \ - "alcgr %0, %0\n\t" \ - "lcgr %0, %0" \ - : "=r" (m), "=r" (s1), "=&r" (s0) \ - : "1" ((UDItype)(a1)), "r" ((UDItype)(b1)), \ - "%2" ((UDItype)(a0)), "r" ((UDItype)(b0)) __CLOBBER_CC) -#endif - -#if defined (__arm__) && !defined (__thumb__) && W_TYPE_SIZE == 32 -#define add_mssaaaa(m, sh, sl, ah, al, bh, bl) \ - __asm__ ( "adds %2, %5, %6\n\t" \ - "adcs %1, %3, %4\n\t" \ - "movcc %0, #0\n\t" \ - "movcs %0, #-1" \ - : "=r" (m), "=r" (sh), "=&r" (sl) \ - : "r" (ah), "rI" (bh), "%r" (al), "rI" (bl) __CLOBBER_CC) -#endif -#endif /* defined (__GNUC__) */ - -#ifndef add_mssaaaa -#define add_mssaaaa(m, s1, s0, a1, a0, b1, b0) \ - do { \ - UWtype __s0, __s1, __c0, __c1; \ - __s0 = (a0) + (b0); \ - __s1 = (a1) + (b1); \ - __c0 = __s0 < (a0); \ - __c1 = __s1 < (a1); \ - (s0) = __s0; \ - __s1 = __s1 + __c0; \ - (s1) = __s1; \ - (m) = - (__c1 + (__s1 < __c0)); \ - } while (0) -#endif - -#if DIV_QR_1N_METHOD == 1 - -/* Divides (uh B^n + {up, n}) by d, storing the quotient at {qp, n}. - Requires that uh < d. */ -mp_limb_t -mpn_div_qr_1n_pi1 (mp_ptr qp, mp_srcptr up, mp_size_t n, mp_limb_t uh, - mp_limb_t d, mp_limb_t dinv) -{ - ASSERT (n > 0); - ASSERT (uh < d); - ASSERT (d & GMP_NUMB_HIGHBIT); - ASSERT (MPN_SAME_OR_SEPARATE_P (qp, up, n)); - - do - { - mp_limb_t q, ul; - - ul = up[--n]; - udiv_qrnnd_preinv (q, uh, uh, ul, d, dinv); - qp[n] = q; - } - while (n > 0); - - return uh; -} - -#elif DIV_QR_1N_METHOD == 2 - -mp_limb_t -mpn_div_qr_1n_pi1 (mp_ptr qp, mp_srcptr up, mp_size_t n, mp_limb_t u1, - mp_limb_t d, mp_limb_t dinv) -{ - mp_limb_t B2; - mp_limb_t u0, u2; - mp_limb_t q0, q1; - mp_limb_t p0, p1; - mp_limb_t t; - mp_size_t j; - - ASSERT (d & GMP_LIMB_HIGHBIT); - ASSERT (n > 0); - ASSERT (u1 < d); - - if (n == 1) - { - udiv_qrnnd_preinv (qp[0], u1, u1, up[0], d, dinv); - return u1; - } - - /* FIXME: Could be precomputed */ - B2 = -d*dinv; - - umul_ppmm (q1, q0, dinv, u1); - umul_ppmm (p1, p0, B2, u1); - q1 += u1; - ASSERT (q1 >= u1); - u0 = up[n-1]; /* Early read, to allow qp == up. */ - qp[n-1] = q1; - - add_mssaaaa (u2, u1, u0, u0, up[n-2], p1, p0); - - /* FIXME: Keep q1 in a variable between iterations, to reduce number - of memory accesses. */ - for (j = n-2; j-- > 0; ) - { - mp_limb_t q2, cy; - - /* Additions for the q update: - * +-------+ - * |u1 * v | - * +---+---+ - * | u1| - * +---+---+ - * | 1 | v | (conditional on u2) - * +---+---+ - * | 1 | (conditional on u0 + u2 B2 carry) - * +---+ - * + | q0| - * -+---+---+---+ - * | q2| q1| q0| - * +---+---+---+ - */ - umul_ppmm (p1, t, u1, dinv); - add_ssaaaa (q2, q1, -u2, u2 & dinv, CNST_LIMB(0), u1); - add_ssaaaa (q2, q1, q2, q1, CNST_LIMB(0), p1); - add_ssaaaa (q2, q1, q2, q1, CNST_LIMB(0), q0); - q0 = t; - - umul_ppmm (p1, p0, u1, B2); - ADDC_LIMB (cy, u0, u0, u2 & B2); - u0 -= (-cy) & d; - - /* Final q update */ - add_ssaaaa (q2, q1, q2, q1, CNST_LIMB(0), cy); - qp[j+1] = q1; - MPN_INCR_U (qp+j+2, n-j-2, q2); - - add_mssaaaa (u2, u1, u0, u0, up[j], p1, p0); - } - - q1 = (u2 > 0); - u1 -= (-q1) & d; - - t = (u1 >= d); - q1 += t; - u1 -= (-t) & d; - - udiv_qrnnd_preinv (t, u0, u1, u0, d, dinv); - add_ssaaaa (q1, q0, q1, q0, CNST_LIMB(0), t); - - MPN_INCR_U (qp+1, n-1, q1); - - qp[0] = q0; - return u0; -} - -#else -#error Unknown DIV_QR_1N_METHOD -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_1n_pi2.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_1n_pi2.c deleted file mode 100644 index e311fd2f5195c9bb24733016c4680418c2bab420..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_1n_pi2.c +++ /dev/null @@ -1,195 +0,0 @@ -/* mpn_div_qr_1u_pi2. - - THIS FILE CONTAINS AN INTERNAL FUNCTION WITH A MUTABLE INTERFACE. IT IS - ONLY SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* ISSUES: - - * Can we really use the high pi2 inverse limb for udiv_qrnnd_preinv? - - * Are there any problems with generating n quotient limbs in the q area? It - surely simplifies things. - - * Not yet adequately tested. -*/ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Define some longlong.h-style macros, but for wider operations. - * add_sssaaaa is like longlong.h's add_ssaaaa but propagating - carry-out into an additional sum operand. -*/ -#if defined (__GNUC__) && ! defined (__INTEL_COMPILER) && ! defined (NO_ASM) - -#if HAVE_HOST_CPU_FAMILY_x86 && W_TYPE_SIZE == 32 -#define add_sssaaaa(s2, s1, s0, a1, a0, b1, b0) \ - __asm__ ("add\t%7, %k2\n\tadc\t%5, %k1\n\tadc\t$0, %k0" \ - : "=r" (s2), "=&r" (s1), "=&r" (s0) \ - : "0" ((USItype)(s2)), \ - "1" ((USItype)(a1)), "g" ((USItype)(b1)), \ - "%2" ((USItype)(a0)), "g" ((USItype)(b0))) -#endif - -#if defined (__amd64__) && W_TYPE_SIZE == 64 -#define add_sssaaaa(s2, s1, s0, a1, a0, b1, b0) \ - __asm__ ("add\t%7, %q2\n\tadc\t%5, %q1\n\tadc\t$0, %q0" \ - : "=r" (s2), "=&r" (s1), "=&r" (s0) \ - : "0" ((UDItype)(s2)), \ - "1" ((UDItype)(a1)), "rme" ((UDItype)(b1)), \ - "%2" ((UDItype)(a0)), "rme" ((UDItype)(b0))) -#endif - -#if HAVE_HOST_CPU_FAMILY_powerpc && !defined (_LONG_LONG_LIMB) -/* This works fine for 32-bit and 64-bit limbs, except for 64-bit limbs with a - processor running in 32-bit mode, since the carry flag then gets the 32-bit - carry. */ -#define add_sssaaaa(s2, s1, s0, a1, a0, b1, b0) \ - __asm__ ("add%I7c\t%2,%6,%7\n\tadde\t%1,%4,%5\n\taddze\t%0,%0" \ - : "=r" (s2), "=&r" (s1), "=&r" (s0) \ - : "r" (s2), "r" (a1), "r" (b1), "%r" (a0), "rI" (b0)) -#endif - -#endif /* __GNUC__ */ - -#ifndef add_sssaaaa -#define add_sssaaaa(s2, s1, s0, a1, a0, b1, b0) \ - do { \ - UWtype __s0, __s1, __c0, __c1; \ - __s0 = (a0) + (b0); \ - __s1 = (a1) + (b1); \ - __c0 = __s0 < (a0); \ - __c1 = __s1 < (a1); \ - (s0) = __s0; \ - __s1 = __s1 + __c0; \ - (s1) = __s1; \ - (s2) += __c1 + (__s1 < __c0); \ - } while (0) -#endif - -struct precomp_div_1_pi2 -{ - mp_limb_t dip[2]; - mp_limb_t d; - int norm_cnt; -}; - -mp_limb_t -mpn_div_qr_1n_pi2 (mp_ptr qp, - mp_srcptr up, mp_size_t un, - struct precomp_div_1_pi2 *pd) -{ - mp_limb_t most_significant_q_limb; - mp_size_t i; - mp_limb_t r, u2, u1, u0; - mp_limb_t d0, di1, di0; - mp_limb_t q3a, q2a, q2b, q1b, q2c, q1c, q1d, q0d; - mp_limb_t cnd; - - ASSERT (un >= 2); - ASSERT ((pd->d & GMP_NUMB_HIGHBIT) != 0); - ASSERT (! MPN_OVERLAP_P (qp, un-2, up, un) || qp+2 >= up); - ASSERT_MPN (up, un); - -#define q3 q3a -#define q2 q2b -#define q1 q1b - - up += un - 3; - r = up[2]; - d0 = pd->d; - - most_significant_q_limb = (r >= d0); - r -= d0 & -most_significant_q_limb; - - qp += un - 3; - qp[2] = most_significant_q_limb; - - di1 = pd->dip[1]; - di0 = pd->dip[0]; - - for (i = un - 3; i >= 0; i -= 2) - { - u2 = r; - u1 = up[1]; - u0 = up[0]; - - /* Dividend in {r,u1,u0} */ - - umul_ppmm (q1d,q0d, u1, di0); - umul_ppmm (q2b,q1b, u1, di1); - q2b++; /* cannot spill */ - add_sssaaaa (r,q2b,q1b, q2b,q1b, u1,u0); - - umul_ppmm (q2c,q1c, u2, di0); - add_sssaaaa (r,q2b,q1b, q2b,q1b, q2c,q1c); - umul_ppmm (q3a,q2a, u2, di1); - - add_sssaaaa (r,q2b,q1b, q2b,q1b, q2a,q1d); - - q3 += r; - - r = u0 - q2 * d0; - - cnd = (r >= q1); - r += d0 & -cnd; - sub_ddmmss (q3,q2, q3,q2, 0,cnd); - - if (UNLIKELY (r >= d0)) - { - r -= d0; - add_ssaaaa (q3,q2, q3,q2, 0,1); - } - - qp[0] = q2; - qp[1] = q3; - - up -= 2; - qp -= 2; - } - - if ((un & 1) == 0) - { - u2 = r; - u1 = up[1]; - - udiv_qrnnd_preinv (q3, r, u2, u1, d0, di1); - qp[1] = q3; - } - - return r; - -#undef q3 -#undef q2 -#undef q1 -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_1u_pi2.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_1u_pi2.c deleted file mode 100644 index 4c92eab7ada7c00316032e91aee898996477990c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_1u_pi2.c +++ /dev/null @@ -1,228 +0,0 @@ -/* mpn_div_qr_1u_pi2. - - THIS FILE CONTAINS AN INTERNAL FUNCTION WITH A MUTABLE INTERFACE. IT IS - ONLY SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* ISSUES: - - * Can we really use the high pi2 inverse limb for udiv_qrnnd_preinv? - - * Are there any problems with generating n quotient limbs in the q area? It - surely simplifies things. - - * Not yet adequately tested. -*/ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Define some longlong.h-style macros, but for wider operations. - * add_sssaaaa is like longlong.h's add_ssaaaa but propagating - carry-out into an additional sum operand. -*/ -#if defined (__GNUC__) && ! defined (__INTEL_COMPILER) && ! defined (NO_ASM) - -#if HAVE_HOST_CPU_FAMILY_x86 && W_TYPE_SIZE == 32 -#define add_sssaaaa(s2, s1, s0, a1, a0, b1, b0) \ - __asm__ ("add\t%7, %k2\n\tadc\t%5, %k1\n\tadc\t$0, %k0" \ - : "=r" (s2), "=&r" (s1), "=&r" (s0) \ - : "0" ((USItype)(s2)), \ - "1" ((USItype)(a1)), "g" ((USItype)(b1)), \ - "%2" ((USItype)(a0)), "g" ((USItype)(b0))) -#endif - -#if defined (__amd64__) && W_TYPE_SIZE == 64 -#define add_sssaaaa(s2, s1, s0, a1, a0, b1, b0) \ - __asm__ ("add\t%7, %q2\n\tadc\t%5, %q1\n\tadc\t$0, %q0" \ - : "=r" (s2), "=&r" (s1), "=&r" (s0) \ - : "0" ((UDItype)(s2)), \ - "1" ((UDItype)(a1)), "rme" ((UDItype)(b1)), \ - "%2" ((UDItype)(a0)), "rme" ((UDItype)(b0))) -#endif - -#if HAVE_HOST_CPU_FAMILY_powerpc && !defined (_LONG_LONG_LIMB) -/* This works fine for 32-bit and 64-bit limbs, except for 64-bit limbs with a - processor running in 32-bit mode, since the carry flag then gets the 32-bit - carry. */ -#define add_sssaaaa(s2, s1, s0, a1, a0, b1, b0) \ - __asm__ ("add%I7c\t%2,%6,%7\n\tadde\t%1,%4,%5\n\taddze\t%0,%0" \ - : "=r" (s2), "=&r" (s1), "=&r" (s0) \ - : "r" (s2), "r" (a1), "r" (b1), "%r" (a0), "rI" (b0)) -#endif - -#endif /* __GNUC__ */ - -#ifndef add_sssaaaa -#define add_sssaaaa(s2, s1, s0, a1, a0, b1, b0) \ - do { \ - UWtype __s0, __s1, __c0, __c1; \ - __s0 = (a0) + (b0); \ - __s1 = (a1) + (b1); \ - __c0 = __s0 < (a0); \ - __c1 = __s1 < (a1); \ - (s0) = __s0; \ - __s1 = __s1 + __c0; \ - (s1) = __s1; \ - (s2) += __c1 + (__s1 < __c0); \ - } while (0) -#endif - -struct precomp_div_1_pi2 -{ - mp_limb_t dip[2]; - mp_limb_t d; - int norm_cnt; -}; - -mp_limb_t -mpn_div_qr_1u_pi2 (mp_ptr qp, - mp_srcptr up, mp_size_t un, - struct precomp_div_1_pi2 *pd) -{ - mp_size_t i; - mp_limb_t r, u2, u1, u0; - mp_limb_t d0, di1, di0; - mp_limb_t q3a, q2a, q2b, q1b, q2c, q1c, q1d, q0d; - mp_limb_t cnd; - int cnt; - - ASSERT (un >= 2); - ASSERT ((pd->d & GMP_NUMB_HIGHBIT) == 0); - ASSERT (! MPN_OVERLAP_P (qp, un-2, up, un) || qp+2 >= up); - ASSERT_MPN (up, un); - -#define q3 q3a -#define q2 q2b -#define q1 q1b - - up += un - 3; - cnt = pd->norm_cnt; - r = up[2] >> (GMP_NUMB_BITS - cnt); - d0 = pd->d << cnt; - - qp += un - 2; - - di1 = pd->dip[1]; - di0 = pd->dip[0]; - - for (i = un - 3; i >= 0; i -= 2) - { - u2 = r; - u1 = (up[2] << cnt) | (up[1] >> (GMP_NUMB_BITS - cnt)); - u0 = (up[1] << cnt) | (up[0] >> (GMP_NUMB_BITS - cnt)); - - /* Dividend in {r,u1,u0} */ - - umul_ppmm (q1d,q0d, u1, di0); - umul_ppmm (q2b,q1b, u1, di1); - q2b++; /* cannot spill */ - add_sssaaaa (r,q2b,q1b, q2b,q1b, u1,u0); - - umul_ppmm (q2c,q1c, u2, di0); - add_sssaaaa (r,q2b,q1b, q2b,q1b, q2c,q1c); - umul_ppmm (q3a,q2a, u2, di1); - - add_sssaaaa (r,q2b,q1b, q2b,q1b, q2a,q1d); - - q3 += r; - - r = u0 - q2 * d0; - - cnd = (r >= q1); - r += d0 & -cnd; - sub_ddmmss (q3,q2, q3,q2, 0,cnd); - - if (UNLIKELY (r >= d0)) - { - r -= d0; - add_ssaaaa (q3,q2, q3,q2, 0,1); - } - - qp[0] = q2; - qp[1] = q3; - - up -= 2; - qp -= 2; - } - - if ((un & 1) != 0) - { - u2 = r; - u1 = (up[2] << cnt); - - udiv_qrnnd_preinv (q3, r, u2, u1, d0, di1); - qp[1] = q3; - } - else - { - u2 = r; - u1 = (up[2] << cnt) | (up[1] >> (GMP_NUMB_BITS - cnt)); - u0 = (up[1] << cnt); - - /* Dividend in {r,u1,u0} */ - - umul_ppmm (q1d,q0d, u1, di0); - umul_ppmm (q2b,q1b, u1, di1); - q2b++; /* cannot spill */ - add_sssaaaa (r,q2b,q1b, q2b,q1b, u1,u0); - - umul_ppmm (q2c,q1c, u2, di0); - add_sssaaaa (r,q2b,q1b, q2b,q1b, q2c,q1c); - umul_ppmm (q3a,q2a, u2, di1); - - add_sssaaaa (r,q2b,q1b, q2b,q1b, q2a,q1d); - - q3 += r; - - r = u0 - q2 * d0; - - cnd = (r >= q1); - r += d0 & -cnd; - sub_ddmmss (q3,q2, q3,q2, 0,cnd); - - if (UNLIKELY (r >= d0)) - { - r -= d0; - add_ssaaaa (q3,q2, q3,q2, 0,1); - } - - qp[0] = q2; - qp[1] = q3; - } - - return r >> cnt; - -#undef q3 -#undef q2 -#undef q1 -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_2.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_2.c deleted file mode 100644 index a60a2e2449494cce336ac3aeb56f8b153cf92261..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_2.c +++ /dev/null @@ -1,332 +0,0 @@ -/* mpn_div_qr_2 -- Divide natural numbers, producing both remainder and - quotient. The divisor is two limbs. - - Contributed to the GNU project by Torbjorn Granlund and Niels Möller - - THIS FILE CONTAINS INTERNAL FUNCTIONS WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - - -Copyright 1993-1996, 1999-2002, 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef DIV_QR_2_PI2_THRESHOLD -/* Disabled unless explicitly tuned. */ -#define DIV_QR_2_PI2_THRESHOLD MP_LIMB_T_MAX -#endif - -#ifndef SANITY_CHECK -#define SANITY_CHECK 0 -#endif - -/* Define some longlong.h-style macros, but for wider operations. - * add_sssaaaa is like longlong.h's add_ssaaaa but the propagating - carry-out into an additional sum operand. - * add_csaac accepts two addends and a carry in, and generates a sum - and a carry out. A little like a "full adder". -*/ -#if defined (__GNUC__) && ! defined (__INTEL_COMPILER) && ! defined (NO_ASM) - -#if HAVE_HOST_CPU_FAMILY_x86 && W_TYPE_SIZE == 32 -#define add_sssaaaa(s2, s1, s0, a1, a0, b1, b0) \ - __asm__ ("add\t%7, %k2\n\tadc\t%5, %k1\n\tadc\t$0, %k0" \ - : "=r" (s2), "=&r" (s1), "=&r" (s0) \ - : "0" ((USItype)(s2)), \ - "1" ((USItype)(a1)), "g" ((USItype)(b1)), \ - "%2" ((USItype)(a0)), "g" ((USItype)(b0))) -#define add_csaac(co, s, a, b, ci) \ - __asm__ ("bt\t$0, %2\n\tadc\t%5, %k1\n\tadc\t%k0, %k0" \ - : "=r" (co), "=r" (s) \ - : "rm" ((USItype)(ci)), "0" (CNST_LIMB(0)), \ - "%1" ((USItype)(a)), "g" ((USItype)(b))) -#endif - -#if defined (__amd64__) && W_TYPE_SIZE == 64 -#define add_sssaaaa(s2, s1, s0, a1, a0, b1, b0) \ - __asm__ ("add\t%7, %q2\n\tadc\t%5, %q1\n\tadc\t$0, %q0" \ - : "=r" (s2), "=&r" (s1), "=&r" (s0) \ - : "0" ((UDItype)(s2)), \ - "1" ((UDItype)(a1)), "rme" ((UDItype)(b1)), \ - "%2" ((UDItype)(a0)), "rme" ((UDItype)(b0))) -#define add_csaac(co, s, a, b, ci) \ - __asm__ ("bt\t$0, %2\n\tadc\t%5, %q1\n\tadc\t%q0, %q0" \ - : "=r" (co), "=r" (s) \ - : "rm" ((UDItype)(ci)), "0" (CNST_LIMB(0)), \ - "%1" ((UDItype)(a)), "g" ((UDItype)(b))) -#endif - -#if HAVE_HOST_CPU_FAMILY_powerpc && !defined (_LONG_LONG_LIMB) -/* This works fine for 32-bit and 64-bit limbs, except for 64-bit limbs with a - processor running in 32-bit mode, since the carry flag then gets the 32-bit - carry. */ -#define add_sssaaaa(s2, s1, s0, a1, a0, b1, b0) \ - __asm__ ("add%I7c\t%2,%6,%7\n\tadde\t%1,%4,%5\n\taddze\t%0,%0" \ - : "=r" (s2), "=&r" (s1), "=&r" (s0) \ - : "r" (s2), "r" (a1), "r" (b1), "%r" (a0), "rI" (b0)) -#endif - -#endif /* __GNUC__ */ - -#ifndef add_sssaaaa -#define add_sssaaaa(s2, s1, s0, a1, a0, b1, b0) \ - do { \ - UWtype __s0, __s1, __c0, __c1; \ - __s0 = (a0) + (b0); \ - __s1 = (a1) + (b1); \ - __c0 = __s0 < (a0); \ - __c1 = __s1 < (a1); \ - (s0) = __s0; \ - __s1 = __s1 + __c0; \ - (s1) = __s1; \ - (s2) += __c1 + (__s1 < __c0); \ - } while (0) -#endif - -#ifndef add_csaac -#define add_csaac(co, s, a, b, ci) \ - do { \ - UWtype __s, __c; \ - __s = (a) + (b); \ - __c = __s < (a); \ - __s = __s + (ci); \ - (s) = __s; \ - (co) = __c + (__s < (ci)); \ - } while (0) -#endif - -/* Typically used with r1, r0 same as n3, n2. Other types of overlap - between inputs and outputs are not supported. */ -#define udiv_qr_4by2(q1,q0, r1,r0, n3,n2,n1,n0, d1,d0, di1,di0) \ - do { \ - mp_limb_t _q3, _q2a, _q2, _q1, _q2c, _q1c, _q1d, _q0; \ - mp_limb_t _t1, _t0; \ - mp_limb_t _c, _mask; \ - \ - umul_ppmm (_q3,_q2a, n3, di1); \ - umul_ppmm (_q2,_q1, n2, di1); \ - umul_ppmm (_q2c,_q1c, n3, di0); \ - add_sssaaaa (_q3,_q2,_q1, _q2,_q1, _q2c,_q1c); \ - umul_ppmm (_q1d,_q0, n2, di0); \ - add_sssaaaa (_q3,_q2,_q1, _q2,_q1, _q2a,_q1d); \ - \ - add_ssaaaa (r1, r0, n3, n2, CNST_LIMB(0), CNST_LIMB(1)); \ - \ - /* [q3,q2,q1,q0] += [n3,n3,n1,n0] */ \ - add_csaac (_c, _q0, _q0, n0, CNST_LIMB(0)); \ - add_csaac (_c, _q1, _q1, n1, _c); \ - add_csaac (_c, _q2, _q2, r0, _c); \ - _q3 = _q3 + r1 + _c; \ - \ - umul_ppmm (_t1,_t0, _q2, d0); \ - _t1 += _q2 * d1 + _q3 * d0; \ - \ - sub_ddmmss (r1, r0, n1, n0, _t1, _t0); \ - \ - _mask = -(mp_limb_t) ((r1 >= _q1) & ((r1 > _q1) | (r0 >= _q0))); /* (r1,r0) >= (q1,q0) */ \ - add_ssaaaa (r1, r0, r1, r0, d1 & _mask, d0 & _mask); \ - sub_ddmmss (_q3, _q2, _q3, _q2, CNST_LIMB(0), -_mask); \ - \ - if (UNLIKELY (r1 >= d1)) \ - { \ - if (r1 > d1 || r0 >= d0) \ - { \ - sub_ddmmss (r1, r0, r1, r0, d1, d0); \ - add_ssaaaa (_q3, _q2, _q3, _q2, CNST_LIMB(0), CNST_LIMB(1));\ - } \ - } \ - (q1) = _q3; \ - (q0) = _q2; \ - } while (0) - -static void -invert_4by2 (mp_ptr di, mp_limb_t d1, mp_limb_t d0) -{ - mp_limb_t v1, v0, p1, t1, t0, p0, mask; - invert_limb (v1, d1); - p1 = d1 * v1; - /* <1, v1> * d1 = <B-1, p1> */ - p1 += d0; - if (p1 < d0) - { - v1--; - mask = -(mp_limb_t) (p1 >= d1); - p1 -= d1; - v1 += mask; - p1 -= mask & d1; - } - /* <1, v1> * d1 + d0 = <B-1, p1> */ - umul_ppmm (t1, p0, d0, v1); - p1 += t1; - if (p1 < t1) - { - if (UNLIKELY (p1 >= d1)) - { - if (p1 > d1 || p0 >= d0) - { - sub_ddmmss (p1, p0, p1, p0, d1, d0); - v1--; - } - } - sub_ddmmss (p1, p0, p1, p0, d1, d0); - v1--; - } - /* Now v1 is the 3/2 inverse, <1, v1> * <d1, d0> = <B-1, p1, p0>, - * with <p1, p0> + <d1, d0> >= B^2. - * - * The 4/2 inverse is (B^4 - 1) / <d1, d0> = <1, v1, v0>. The - * partial remainder after <1, v1> is - * - * B^4 - 1 - B <1, v1> <d1, d0> = <B-1, B-1, B-1, B-1> - <B-1, p1, p0, 0> - * = <~p1, ~p0, B-1> - */ - udiv_qr_3by2 (v0, t1, t0, ~p1, ~p0, MP_LIMB_T_MAX, d1, d0, v1); - di[0] = v0; - di[1] = v1; - -#if SANITY_CHECK - { - mp_limb_t tp[4]; - mp_limb_t dp[2]; - dp[0] = d0; - dp[1] = d1; - mpn_mul_n (tp, dp, di, 2); - ASSERT_ALWAYS (mpn_add_n (tp+2, tp+2, dp, 2) == 0); - ASSERT_ALWAYS (tp[2] == MP_LIMB_T_MAX); - ASSERT_ALWAYS (tp[3] == MP_LIMB_T_MAX); - ASSERT_ALWAYS (mpn_add_n (tp, tp, dp, 2) == 1); - } -#endif -} - -static mp_limb_t -mpn_div_qr_2n_pi2 (mp_ptr qp, mp_ptr rp, mp_srcptr np, mp_size_t nn, - mp_limb_t d1, mp_limb_t d0, mp_limb_t di1, mp_limb_t di0) -{ - mp_limb_t qh; - mp_size_t i; - mp_limb_t r1, r0; - - ASSERT (nn >= 2); - ASSERT (d1 & GMP_NUMB_HIGHBIT); - - r1 = np[nn-1]; - r0 = np[nn-2]; - - qh = 0; - if (r1 >= d1 && (r1 > d1 || r0 >= d0)) - { -#if GMP_NAIL_BITS == 0 - sub_ddmmss (r1, r0, r1, r0, d1, d0); -#else - r0 = r0 - d0; - r1 = r1 - d1 - (r0 >> GMP_LIMB_BITS - 1); - r0 &= GMP_NUMB_MASK; -#endif - qh = 1; - } - - for (i = nn - 2; i >= 2; i -= 2) - { - mp_limb_t n1, n0, q1, q0; - n1 = np[i-1]; - n0 = np[i-2]; - udiv_qr_4by2 (q1, q0, r1, r0, r1, r0, n1, n0, d1, d0, di1, di0); - qp[i-1] = q1; - qp[i-2] = q0; - } - - if (i > 0) - { - mp_limb_t q; - udiv_qr_3by2 (q, r1, r0, r1, r0, np[0], d1, d0, di1); - qp[0] = q; - } - rp[1] = r1; - rp[0] = r0; - - return qh; -} - - -/* Divide num {np,nn} by den {dp,2} and write the nn-2 least - significant quotient limbs at qp and the 2 long remainder at np. - Return the most significant limb of the quotient. - - Preconditions: - 1. qp must either not overlap with the input operands at all, or - qp >= np + 2 must hold true. (This means that it's possible to put - the quotient in the high part of {np,nn}, right above the remainder. - 2. nn >= 2. */ - -mp_limb_t -mpn_div_qr_2 (mp_ptr qp, mp_ptr rp, mp_srcptr np, mp_size_t nn, - mp_srcptr dp) -{ - mp_limb_t d1; - mp_limb_t d0; - gmp_pi1_t dinv; - - ASSERT (nn >= 2); - ASSERT (! MPN_OVERLAP_P (qp, nn-2, np, nn) || qp >= np + 2); - ASSERT_MPN (np, nn); - ASSERT_MPN (dp, 2); - - d1 = dp[1]; d0 = dp[0]; - - ASSERT (d1 > 0); - - if (UNLIKELY (d1 & GMP_NUMB_HIGHBIT)) - { - if (BELOW_THRESHOLD (nn, DIV_QR_2_PI2_THRESHOLD)) - { - gmp_pi1_t dinv; - invert_pi1 (dinv, d1, d0); - return mpn_div_qr_2n_pi1 (qp, rp, np, nn, d1, d0, dinv.inv32); - } - else - { - mp_limb_t di[2]; - invert_4by2 (di, d1, d0); - return mpn_div_qr_2n_pi2 (qp, rp, np, nn, d1, d0, di[1], di[0]); - } - } - else - { - int shift; - count_leading_zeros (shift, d1); - d1 = (d1 << shift) | (d0 >> (GMP_LIMB_BITS - shift)); - d0 <<= shift; - invert_pi1 (dinv, d1, d0); - return mpn_div_qr_2u_pi1 (qp, rp, np, nn, d1, d0, shift, dinv.inv32); - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_2n_pi1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_2n_pi1.c deleted file mode 100644 index da500e2170e61259fb970358d2f324f33f96e421..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_2n_pi1.c +++ /dev/null @@ -1,85 +0,0 @@ -/* mpn_div_qr_2n_pi1 - - Contributed to the GNU project by Torbjorn Granlund and Niels Möller - - THIS FILE CONTAINS INTERNAL FUNCTIONS WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - - -Copyright 1993-1996, 1999-2002, 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* 3/2 loop, for normalized divisor */ -mp_limb_t -mpn_div_qr_2n_pi1 (mp_ptr qp, mp_ptr rp, mp_srcptr np, mp_size_t nn, - mp_limb_t d1, mp_limb_t d0, mp_limb_t di) -{ - mp_limb_t qh; - mp_size_t i; - mp_limb_t r1, r0; - - ASSERT (nn >= 2); - ASSERT (d1 & GMP_NUMB_HIGHBIT); - - np += nn - 2; - r1 = np[1]; - r0 = np[0]; - - qh = 0; - if (r1 >= d1 && (r1 > d1 || r0 >= d0)) - { -#if GMP_NAIL_BITS == 0 - sub_ddmmss (r1, r0, r1, r0, d1, d0); -#else - r0 = r0 - d0; - r1 = r1 - d1 - (r0 >> GMP_LIMB_BITS - 1); - r0 &= GMP_NUMB_MASK; -#endif - qh = 1; - } - - for (i = nn - 2 - 1; i >= 0; i--) - { - mp_limb_t n0, q; - n0 = np[-1]; - udiv_qr_3by2 (q, r1, r0, r1, r0, n0, d1, d0, di); - np--; - qp[i] = q; - } - - rp[1] = r1; - rp[0] = r0; - - return qh; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_2u_pi1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_2u_pi1.c deleted file mode 100644 index 0b9ddf575329d3dc177fe2045fb24a7fe5925dcb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/div_qr_2u_pi1.c +++ /dev/null @@ -1,77 +0,0 @@ -/* mpn_div_qr_2u_pi1 - - Contributed to the GNU project by Niels Möller - - THIS FILE CONTAINS INTERNAL FUNCTIONS WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - - -Copyright 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* 3/2 loop, for unnormalized divisor. Caller must pass shifted d1 and - d0, while {np,nn} is shifted on the fly. */ -mp_limb_t -mpn_div_qr_2u_pi1 (mp_ptr qp, mp_ptr rp, mp_srcptr np, mp_size_t nn, - mp_limb_t d1, mp_limb_t d0, int shift, mp_limb_t di) -{ - mp_limb_t qh; - mp_limb_t r2, r1, r0; - mp_size_t i; - - ASSERT (nn >= 2); - ASSERT (d1 & GMP_NUMB_HIGHBIT); - ASSERT (shift > 0); - - r2 = np[nn-1] >> (GMP_LIMB_BITS - shift); - r1 = (np[nn-1] << shift) | (np[nn-2] >> (GMP_LIMB_BITS - shift)); - r0 = np[nn-2] << shift; - - udiv_qr_3by2 (qh, r2, r1, r2, r1, r0, d1, d0, di); - - for (i = nn - 2 - 1; i >= 0; i--) - { - mp_limb_t q; - r0 = np[i]; - r1 |= r0 >> (GMP_LIMB_BITS - shift); - r0 <<= shift; - udiv_qr_3by2 (q, r2, r1, r2, r1, r0, d1, d0, di); - qp[i] = q; - } - - rp[0] = (r1 >> shift) | (r2 << (GMP_LIMB_BITS - shift)); - rp[1] = r2 >> shift; - - return qh; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dive_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dive_1.c deleted file mode 100644 index 1c0a4e894db8a9816a917226e7d1aed359784660..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dive_1.c +++ /dev/null @@ -1,148 +0,0 @@ -/* mpn_divexact_1 -- mpn by limb exact division. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2000-2003, 2005, 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - - -/* Divide a={src,size} by d=divisor and store the quotient in q={dst,size}. - q will only be correct if d divides a exactly. - - A separate loop is used for shift==0 because n<<GMP_LIMB_BITS doesn't - give zero on all CPUs (for instance it doesn't on the x86s). This - separate loop might run faster too, helping odd divisors. - - Possibilities: - - mpn_divexact_1c could be created, accepting and returning c. This would - let a long calculation be done piece by piece. Currently there's no - particular need for that, and not returning c means that a final umul can - be skipped. - - Another use for returning c would be letting the caller know whether the - division was in fact exact. It would work just to return the carry bit - "c=(l>s)" and let the caller do a final umul if interested. - - When the divisor is even, the factors of two could be handled with a - separate mpn_rshift, instead of shifting on the fly. That might be - faster on some CPUs and would mean just the shift==0 style loop would be - needed. - - If n<<GMP_LIMB_BITS gives zero on a particular CPU then the separate - shift==0 loop is unnecessary, and could be eliminated if there's no great - speed difference. - - It's not clear whether "/" is the best way to handle size==1. Alpha gcc - 2.95 for instance has a poor "/" and might prefer the modular method. - Perhaps a tuned parameter should control this. - - If src[size-1] < divisor then dst[size-1] will be zero, and one divide - step could be skipped. A test at last step for s<divisor (or ls in the - even case) might be a good way to do that. But if this code is often - used with small divisors then it might not be worth bothering */ - -void -mpn_divexact_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, mp_limb_t divisor) -{ - mp_size_t i; - mp_limb_t c, h, l, ls, s, s_next, inverse, dummy; - unsigned shift; - - ASSERT (size >= 1); - ASSERT (divisor != 0); - ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, size)); - ASSERT_MPN (src, size); - ASSERT_LIMB (divisor); - - if ((divisor & 1) == 0) - { - count_trailing_zeros (shift, divisor); - divisor >>= shift; - } - else - shift = 0; - - binvert_limb (inverse, divisor); - divisor <<= GMP_NAIL_BITS; - - if (shift != 0) - { - c = 0; - - s = src[0]; - - for (i = 1; i < size; i++) - { - s_next = src[i]; - ls = ((s >> shift) | (s_next << (GMP_NUMB_BITS-shift))) & GMP_NUMB_MASK; - s = s_next; - - SUBC_LIMB (c, l, ls, c); - - l = (l * inverse) & GMP_NUMB_MASK; - dst[i - 1] = l; - - umul_ppmm (h, dummy, l, divisor); - c += h; - } - while (i < size); - - ls = s >> shift; - l = ls - c; - l = (l * inverse) & GMP_NUMB_MASK; - dst[size - 1] = l; - } - else - { - s = src[0]; - - l = (s * inverse) & GMP_NUMB_MASK; - dst[0] = l; - c = 0; - - for (i = 1; i < size; i++) - { - umul_ppmm (h, dummy, l, divisor); - c += h; - - s = src[i]; - SUBC_LIMB (c, l, s, c); - - l = (l * inverse) & GMP_NUMB_MASK; - dst[i] = l; - } - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/diveby3.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/diveby3.c deleted file mode 100644 index 2ffd9fe777dbfe92f21d904e70f476c3d3bfa33a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/diveby3.c +++ /dev/null @@ -1,174 +0,0 @@ -/* mpn_divexact_by3c -- mpn exact division by 3. - -Copyright 2000-2003, 2008 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#if DIVEXACT_BY3_METHOD == 0 - -mp_limb_t -mpn_divexact_by3c (mp_ptr rp, mp_srcptr up, mp_size_t un, mp_limb_t c) -{ - mp_limb_t r; - r = mpn_bdiv_dbm1c (rp, up, un, GMP_NUMB_MASK / 3, GMP_NUMB_MASK / 3 * c); - - /* Possible bdiv_dbm1 return values are C * (GMP_NUMB_MASK / 3), 0 <= C < 3. - We want to return C. We compute the remainder mod 4 and notice that the - inverse of (2^(2k)-1)/3 mod 4 is 1. */ - return r & 3; -} - -#endif - -#if DIVEXACT_BY3_METHOD == 1 - -/* The algorithm here is basically the same as mpn_divexact_1, as described - in the manual. Namely at each step q = (src[i]-c)*inverse, and new c = - borrow(src[i]-c) + high(divisor*q). But because the divisor is just 3, - high(divisor*q) can be determined with two comparisons instead of a - multiply. - - The "c += ..."s add the high limb of 3*l to c. That high limb will be 0, - 1 or 2. Doing two separate "+="s seems to give better code on gcc (as of - 2.95.2 at least). - - It will be noted that the new c is formed by adding three values each 0 - or 1. But the total is only 0, 1 or 2. When the subtraction src[i]-c - causes a borrow, that leaves a limb value of either 0xFF...FF or - 0xFF...FE. The multiply by MODLIMB_INVERSE_3 gives 0x55...55 or - 0xAA...AA respectively, and in those cases high(3*q) is only 0 or 1 - respectively, hence a total of no more than 2. - - Alternatives: - - This implementation has each multiply on the dependent chain, due to - "l=s-c". See below for alternative code which avoids that. */ - -mp_limb_t -mpn_divexact_by3c (mp_ptr restrict rp, mp_srcptr restrict up, mp_size_t un, mp_limb_t c) -{ - mp_limb_t l, q, s; - mp_size_t i; - - ASSERT (un >= 1); - ASSERT (c == 0 || c == 1 || c == 2); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, un)); - - i = 0; - do - { - s = up[i]; - SUBC_LIMB (c, l, s, c); - - q = (l * MODLIMB_INVERSE_3) & GMP_NUMB_MASK; - rp[i] = q; - - c += (q >= GMP_NUMB_CEIL_MAX_DIV3); - c += (q >= GMP_NUMB_CEIL_2MAX_DIV3); - } - while (++i < un); - - ASSERT (c == 0 || c == 1 || c == 2); - return c; -} - - -#endif - -#if DIVEXACT_BY3_METHOD == 2 - -/* The following alternative code re-arranges the quotient calculation from - (src[i]-c)*inverse to instead - - q = src[i]*inverse - c*inverse - - thereby allowing src[i]*inverse to be scheduled back as far as desired, - making full use of multiplier throughput and leaving just some carry - handing on the dependent chain. - - The carry handling consists of determining the c for the next iteration. - This is the same as described above, namely look for any borrow from - src[i]-c, and at the high of 3*q. - - high(3*q) is done with two comparisons as above (in c2 and c3). The - borrow from src[i]-c is incorporated into those by noting that if there's - a carry then then we have src[i]-c == 0xFF..FF or 0xFF..FE, in turn - giving q = 0x55..55 or 0xAA..AA. Adding 1 to either of those q values is - enough to make high(3*q) come out 1 bigger, as required. - - l = -c*inverse is calculated at the same time as c, since for most chips - it can be more conveniently derived from separate c1/c2/c3 values than - from a combined c equal to 0, 1 or 2. - - The net effect is that with good pipelining this loop should be able to - run at perhaps 4 cycles/limb, depending on available execute resources - etc. - - Usage: - - This code is not used by default, since we really can't rely on the - compiler generating a good software pipeline, nor on such an approach - even being worthwhile on all CPUs. - - Itanium is one chip where this algorithm helps though, see - mpn/ia64/diveby3.asm. */ - -mp_limb_t -mpn_divexact_by3c (mp_ptr restrict rp, mp_srcptr restrict up, mp_size_t un, mp_limb_t cy) -{ - mp_limb_t s, sm, cl, q, qx, c2, c3; - mp_size_t i; - - ASSERT (un >= 1); - ASSERT (cy == 0 || cy == 1 || cy == 2); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, un)); - - cl = cy == 0 ? 0 : cy == 1 ? -MODLIMB_INVERSE_3 : -2*MODLIMB_INVERSE_3; - - for (i = 0; i < un; i++) - { - s = up[i]; - sm = (s * MODLIMB_INVERSE_3) & GMP_NUMB_MASK; - - q = (cl + sm) & GMP_NUMB_MASK; - rp[i] = q; - qx = q + (s < cy); - - c2 = qx >= GMP_NUMB_CEIL_MAX_DIV3; - c3 = qx >= GMP_NUMB_CEIL_2MAX_DIV3 ; - - cy = c2 + c3; - cl = (-c2 & -MODLIMB_INVERSE_3) + (-c3 & -MODLIMB_INVERSE_3); - } - - return cy; -} - -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divexact.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divexact.c deleted file mode 100644 index 47a47e3d80a53308461bd503159068a3e73c6d2f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divexact.c +++ /dev/null @@ -1,294 +0,0 @@ -/* mpn_divexact(qp,np,nn,dp,dn,tp) -- Divide N = {np,nn} by D = {dp,dn} storing - the result in Q = {qp,nn-dn+1} expecting no remainder. Overlap allowed - between Q and N; all other overlap disallowed. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2006, 2007, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#if 1 -void -mpn_divexact (mp_ptr qp, - mp_srcptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn) -{ - unsigned shift; - mp_size_t qn; - mp_ptr tp; - TMP_DECL; - - ASSERT (dn > 0); - ASSERT (nn >= dn); - ASSERT (dp[dn-1] > 0); - - while (dp[0] == 0) - { - ASSERT (np[0] == 0); - dp++; - np++; - dn--; - nn--; - } - - if (dn == 1) - { - MPN_DIVREM_OR_DIVEXACT_1 (qp, np, nn, dp[0]); - return; - } - - TMP_MARK; - - qn = nn + 1 - dn; - count_trailing_zeros (shift, dp[0]); - - if (shift > 0) - { - mp_ptr wp; - mp_size_t ss; - ss = (dn > qn) ? qn + 1 : dn; - - tp = TMP_ALLOC_LIMBS (ss); - mpn_rshift (tp, dp, ss, shift); - dp = tp; - - /* Since we have excluded dn == 1, we have nn > qn, and we need - to shift one limb beyond qn. */ - wp = TMP_ALLOC_LIMBS (qn + 1); - mpn_rshift (wp, np, qn + 1, shift); - np = wp; - } - - if (dn > qn) - dn = qn; - - tp = TMP_ALLOC_LIMBS (mpn_bdiv_q_itch (qn, dn)); - mpn_bdiv_q (qp, np, qn, dp, dn, tp); - TMP_FREE; -} - -#else - -/* We use the Jebelean's bidirectional exact division algorithm. This is - somewhat naively implemented, with equal quotient parts done by 2-adic - division and truncating division. Since 2-adic division is faster, it - should be used for a larger chunk. - - This code is horrendously ugly, in all sorts of ways. - - * It was hacked without much care or thought, but with a testing program. - * It handles scratch space frivolously, and furthermore the itch function - is broken. - * Doesn't provide any measures to deal with mu_divappr_q's +3 error. We - have yet to provoke an error due to this, though. - * Algorithm selection leaves a lot to be desired. In particular, the choice - between DC and MU isn't a point, but we treat it like one. - * It makes the msb part 1 or 2 limbs larger than the lsb part, in spite of - that the latter is faster. We should at least reverse this, but perhaps - we should make the lsb part considerably larger. (How do we tune this?) -*/ - -mp_size_t -mpn_divexact_itch (mp_size_t nn, mp_size_t dn) -{ - return nn + dn; /* FIXME this is not right */ -} - -void -mpn_divexact (mp_ptr qp, - mp_srcptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, - mp_ptr scratch) -{ - mp_size_t qn; - mp_size_t nn0, qn0; - mp_size_t nn1, qn1; - mp_ptr tp; - mp_limb_t qml; - mp_limb_t qh; - int cnt; - mp_ptr xdp; - mp_limb_t di; - mp_limb_t cy; - gmp_pi1_t dinv; - TMP_DECL; - - TMP_MARK; - - qn = nn - dn + 1; - - /* For small divisors, and small quotients, don't use Jebelean's algorithm. */ - if (dn < DIVEXACT_JEB_THRESHOLD || qn < DIVEXACT_JEB_THRESHOLD) - { - tp = scratch; - MPN_COPY (tp, np, qn); - binvert_limb (di, dp[0]); di = -di; - dn = MIN (dn, qn); - mpn_sbpi1_bdiv_q (qp, tp, qn, dp, dn, di); - TMP_FREE; - return; - } - - qn0 = ((nn - dn) >> 1) + 1; /* low quotient size */ - - /* If quotient is much larger than the divisor, the bidirectional algorithm - does not work as currently implemented. Fall back to plain bdiv. */ - if (qn0 > dn) - { - if (BELOW_THRESHOLD (dn, DC_BDIV_Q_THRESHOLD)) - { - tp = scratch; - MPN_COPY (tp, np, qn); - binvert_limb (di, dp[0]); di = -di; - dn = MIN (dn, qn); - mpn_sbpi1_bdiv_q (qp, tp, qn, dp, dn, di); - } - else if (BELOW_THRESHOLD (dn, MU_BDIV_Q_THRESHOLD)) - { - tp = scratch; - MPN_COPY (tp, np, qn); - binvert_limb (di, dp[0]); di = -di; - mpn_dcpi1_bdiv_q (qp, tp, qn, dp, dn, di); - } - else - { - mpn_mu_bdiv_q (qp, np, qn, dp, dn, scratch); - } - TMP_FREE; - return; - } - - nn0 = qn0 + qn0; - - nn1 = nn0 - 1 + ((nn-dn) & 1); - qn1 = qn0; - if (LIKELY (qn0 != dn)) - { - nn1 = nn1 + 1; - qn1 = qn1 + 1; - if (UNLIKELY (dp[dn - 1] == 1 && qn1 != dn)) - { - /* If the leading divisor limb == 1, i.e. has just one bit, we have - to include an extra limb in order to get the needed overlap. */ - /* FIXME: Now with the mu_divappr_q function, we should really need - more overlap. That indicates one of two things: (1) The test code - is not good. (2) We actually overlap too much by default. */ - nn1 = nn1 + 1; - qn1 = qn1 + 1; - } - } - - tp = TMP_ALLOC_LIMBS (nn1 + 1); - - count_leading_zeros (cnt, dp[dn - 1]); - - /* Normalize divisor, store into tmp area. */ - if (cnt != 0) - { - xdp = TMP_ALLOC_LIMBS (qn1); - mpn_lshift (xdp, dp + dn - qn1, qn1, cnt); - } - else - { - xdp = (mp_ptr) dp + dn - qn1; - } - - /* Shift dividend according to the divisor normalization. */ - /* FIXME: We compute too much here for XX_divappr_q, but these functions' - interfaces want a pointer to the imaginative least significant limb, not - to the least significant *used* limb. Of course, we could leave nn1-qn1 - rubbish limbs in the low part, to save some time. */ - if (cnt != 0) - { - cy = mpn_lshift (tp, np + nn - nn1, nn1, cnt); - if (cy != 0) - { - tp[nn1] = cy; - nn1++; - } - } - else - { - /* FIXME: This copy is not needed for mpn_mu_divappr_q, except when the - mpn_sub_n right before is executed. */ - MPN_COPY (tp, np + nn - nn1, nn1); - } - - invert_pi1 (dinv, xdp[qn1 - 1], xdp[qn1 - 2]); - if (BELOW_THRESHOLD (qn1, DC_DIVAPPR_Q_THRESHOLD)) - { - qp[qn0 - 1 + nn1 - qn1] = mpn_sbpi1_divappr_q (qp + qn0 - 1, tp, nn1, xdp, qn1, dinv.inv32); - } - else if (BELOW_THRESHOLD (qn1, MU_DIVAPPR_Q_THRESHOLD)) - { - qp[qn0 - 1 + nn1 - qn1] = mpn_dcpi1_divappr_q (qp + qn0 - 1, tp, nn1, xdp, qn1, &dinv); - } - else - { - /* FIXME: mpn_mu_divappr_q doesn't handle qh != 0. Work around it with a - conditional subtraction here. */ - qh = mpn_cmp (tp + nn1 - qn1, xdp, qn1) >= 0; - if (qh) - mpn_sub_n (tp + nn1 - qn1, tp + nn1 - qn1, xdp, qn1); - mpn_mu_divappr_q (qp + qn0 - 1, tp, nn1, xdp, qn1, scratch); - qp[qn0 - 1 + nn1 - qn1] = qh; - } - qml = qp[qn0 - 1]; - - binvert_limb (di, dp[0]); di = -di; - - if (BELOW_THRESHOLD (qn0, DC_BDIV_Q_THRESHOLD)) - { - MPN_COPY (tp, np, qn0); - mpn_sbpi1_bdiv_q (qp, tp, qn0, dp, qn0, di); - } - else if (BELOW_THRESHOLD (qn0, MU_BDIV_Q_THRESHOLD)) - { - MPN_COPY (tp, np, qn0); - mpn_dcpi1_bdiv_q (qp, tp, qn0, dp, qn0, di); - } - else - { - mpn_mu_bdiv_q (qp, np, qn0, dp, qn0, scratch); - } - - if (qml < qp[qn0 - 1]) - mpn_decr_u (qp + qn0, 1); - - TMP_FREE; -} -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divis.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divis.c deleted file mode 100644 index c7fd41e10eee19de2b008bf46f781751ae00ba91..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divis.c +++ /dev/null @@ -1,199 +0,0 @@ -/* mpn_divisible_p -- mpn by mpn divisibility test - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2001, 2002, 2005, 2009, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* Determine whether A={ap,an} is divisible by D={dp,dn}. Must have both - operands normalized, meaning high limbs non-zero, except that an==0 is - allowed. - - There usually won't be many low zero bits on D, but the checks for this - are fast and might pick up a few operand combinations, in particular they - might reduce D to fit the single-limb mod_1/modexact_1 code. - - Future: - - Getting the remainder limb by limb would make an early exit possible on - finding a non-zero. This would probably have to be bdivmod style so - there's no addback, but it would need a multi-precision inverse and so - might be slower than the plain method (on small sizes at least). - - When D must be normalized (shifted to low bit set), it's possible to - suppress the bit-shifting of A down, as long as it's already been checked - that A has at least as many trailing zero bits as D. */ - -int -mpn_divisible_p (mp_srcptr ap, mp_size_t an, - mp_srcptr dp, mp_size_t dn) -{ - mp_limb_t alow, dlow, dmask; - mp_ptr qp, rp, tp; - mp_size_t i; - mp_limb_t di; - unsigned twos; - TMP_DECL; - - ASSERT (an >= 0); - ASSERT (an == 0 || ap[an-1] != 0); - ASSERT (dn >= 1); - ASSERT (dp[dn-1] != 0); - ASSERT_MPN (ap, an); - ASSERT_MPN (dp, dn); - - /* When a<d only a==0 is divisible. - Notice this test covers all cases of an==0. */ - if (an < dn) - return (an == 0); - - /* Strip low zero limbs from d, requiring a==0 on those. */ - for (;;) - { - alow = *ap; - dlow = *dp; - - if (dlow != 0) - break; - - if (alow != 0) - return 0; /* a has fewer low zero limbs than d, so not divisible */ - - /* a!=0 and d!=0 so won't get to n==0 */ - an--; ASSERT (an >= 1); - dn--; ASSERT (dn >= 1); - ap++; - dp++; - } - - /* a must have at least as many low zero bits as d */ - dmask = LOW_ZEROS_MASK (dlow); - if ((alow & dmask) != 0) - return 0; - - if (dn == 1) - { - if (ABOVE_THRESHOLD (an, BMOD_1_TO_MOD_1_THRESHOLD)) - return mpn_mod_1 (ap, an, dlow) == 0; - - count_trailing_zeros (twos, dlow); - dlow >>= twos; - return mpn_modexact_1_odd (ap, an, dlow) == 0; - } - - count_trailing_zeros (twos, dlow); - if (dn == 2) - { - mp_limb_t dsecond = dp[1]; - if (dsecond <= dmask) - { - dlow = (dlow >> twos) | (dsecond << (GMP_NUMB_BITS-twos)); - ASSERT_LIMB (dlow); - return MPN_MOD_OR_MODEXACT_1_ODD (ap, an, dlow) == 0; - } - } - - /* Should we compute Q = A * D^(-1) mod B^k, - R = A - Q * D mod B^k - here, for some small values of k? Then check if R = 0 (mod B^k). */ - - /* We could also compute A' = A mod T and D' = D mod P, for some - P = 3 * 5 * 7 * 11 ..., and then check if any prime factor from P - dividing D' also divides A'. */ - - TMP_MARK; - - TMP_ALLOC_LIMBS_2 (rp, an + 1, - qp, an - dn + 1); /* FIXME: Could we avoid this? */ - - if (twos != 0) - { - tp = TMP_ALLOC_LIMBS (dn); - ASSERT_NOCARRY (mpn_rshift (tp, dp, dn, twos)); - dp = tp; - - ASSERT_NOCARRY (mpn_rshift (rp, ap, an, twos)); - } - else - { - MPN_COPY (rp, ap, an); - } - if (rp[an - 1] >= dp[dn - 1]) - { - rp[an] = 0; - an++; - } - else if (an == dn) - { - TMP_FREE; - return 0; - } - - ASSERT (an > dn); /* requirement of functions below */ - - if (BELOW_THRESHOLD (dn, DC_BDIV_QR_THRESHOLD) || - BELOW_THRESHOLD (an - dn, DC_BDIV_QR_THRESHOLD)) - { - binvert_limb (di, dp[0]); - mpn_sbpi1_bdiv_qr (qp, rp, an, dp, dn, -di); - rp += an - dn; - } - else if (BELOW_THRESHOLD (dn, MU_BDIV_QR_THRESHOLD)) - { - binvert_limb (di, dp[0]); - mpn_dcpi1_bdiv_qr (qp, rp, an, dp, dn, -di); - rp += an - dn; - } - else - { - tp = TMP_ALLOC_LIMBS (mpn_mu_bdiv_qr_itch (an, dn)); - mpn_mu_bdiv_qr (qp, rp, rp, an, dp, dn, tp); - } - - /* test for {rp,dn} zero or non-zero */ - i = 0; - do - { - if (rp[i] != 0) - { - TMP_FREE; - return 0; - } - } - while (++i < dn); - - TMP_FREE; - return 1; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divrem.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divrem.c deleted file mode 100644 index f420992746e818fe28c359a90d99c5ee05002668..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divrem.c +++ /dev/null @@ -1,108 +0,0 @@ -/* mpn_divrem -- Divide natural numbers, producing both remainder and - quotient. This is now just a middle layer calling mpn_tdiv_qr. - -Copyright 1993-1997, 1999-2002, 2005 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -mp_limb_t -mpn_divrem (mp_ptr qp, mp_size_t qxn, - mp_ptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn) -{ - ASSERT (qxn >= 0); - ASSERT (nn >= dn); - ASSERT (dn >= 1); - ASSERT (dp[dn-1] & GMP_NUMB_HIGHBIT); - ASSERT (! MPN_OVERLAP_P (np, nn, dp, dn)); - ASSERT (! MPN_OVERLAP_P (qp, nn-dn+qxn, np, nn) || qp==np+dn+qxn); - ASSERT (! MPN_OVERLAP_P (qp, nn-dn+qxn, dp, dn)); - ASSERT_MPN (np, nn); - ASSERT_MPN (dp, dn); - - if (dn == 1) - { - mp_limb_t ret; - mp_ptr q2p; - mp_size_t qn; - TMP_DECL; - - TMP_MARK; - q2p = TMP_ALLOC_LIMBS (nn + qxn); - - np[0] = mpn_divrem_1 (q2p, qxn, np, nn, dp[0]); - qn = nn + qxn - 1; - MPN_COPY (qp, q2p, qn); - ret = q2p[qn]; - - TMP_FREE; - return ret; - } - else if (dn == 2) - { - return mpn_divrem_2 (qp, qxn, np, nn, dp); - } - else - { - mp_ptr rp, q2p; - mp_limb_t qhl; - mp_size_t qn; - TMP_DECL; - - TMP_MARK; - if (UNLIKELY (qxn != 0)) - { - mp_ptr n2p; - n2p = TMP_ALLOC_LIMBS (nn + qxn); - MPN_ZERO (n2p, qxn); - MPN_COPY (n2p + qxn, np, nn); - q2p = TMP_ALLOC_LIMBS (nn - dn + qxn + 1); - rp = TMP_ALLOC_LIMBS (dn); - mpn_tdiv_qr (q2p, rp, 0L, n2p, nn + qxn, dp, dn); - MPN_COPY (np, rp, dn); - qn = nn - dn + qxn; - MPN_COPY (qp, q2p, qn); - qhl = q2p[qn]; - } - else - { - q2p = TMP_ALLOC_LIMBS (nn - dn + 1); - rp = TMP_ALLOC_LIMBS (dn); - mpn_tdiv_qr (q2p, rp, 0L, np, nn, dp, dn); - MPN_COPY (np, rp, dn); /* overwrite np area with remainder */ - qn = nn - dn; - MPN_COPY (qp, q2p, qn); - qhl = q2p[qn]; - } - TMP_FREE; - return qhl; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divrem_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divrem_1.c deleted file mode 100644 index 9157b5735e2b7fd8357b6460c9bedba1435da526..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divrem_1.c +++ /dev/null @@ -1,255 +0,0 @@ -/* mpn_divrem_1 -- mpn by limb division. - -Copyright 1991, 1993, 1994, 1996, 1998-2000, 2002, 2003 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* The size where udiv_qrnnd_preinv should be used rather than udiv_qrnnd, - meaning the quotient size where that should happen, the quotient size - being how many udiv divisions will be done. - - The default is to use preinv always, CPUs where this doesn't suit have - tuned thresholds. Note in particular that preinv should certainly be - used if that's the only division available (USE_PREINV_ALWAYS). */ - -#ifndef DIVREM_1_NORM_THRESHOLD -#define DIVREM_1_NORM_THRESHOLD 0 -#endif -#ifndef DIVREM_1_UNNORM_THRESHOLD -#define DIVREM_1_UNNORM_THRESHOLD 0 -#endif - - - -/* If the cpu only has multiply-by-inverse division (eg. alpha), then NORM - and UNNORM thresholds are 0 and only the inversion code is included. - - If multiply-by-inverse is never viable, then NORM and UNNORM thresholds - will be MP_SIZE_T_MAX and only the plain division code is included. - - Otherwise mul-by-inverse is better than plain division above some - threshold, and best results are obtained by having code for both present. - - The main reason for separating the norm and unnorm cases is that not all - CPUs give zero for "n0 >> GMP_LIMB_BITS" which would arise in the unnorm - code used on an already normalized divisor. - - If UDIV_NEEDS_NORMALIZATION is false then plain division uses the same - non-shifting code for both the norm and unnorm cases, though with - different criteria for skipping a division, and with different thresholds - of course. And in fact if inversion is never viable, then that simple - non-shifting division would be all that's left. - - The NORM and UNNORM thresholds might not differ much, but if there's - going to be separate code for norm and unnorm then it makes sense to have - separate thresholds. One thing that's possible is that the - mul-by-inverse might be better only for normalized divisors, due to that - case not needing variable bit shifts. - - Notice that the thresholds are tested after the decision to possibly skip - one divide step, so they're based on the actual number of divisions done. - - For the unnorm case, it would be possible to call mpn_lshift to adjust - the dividend all in one go (into the quotient space say), rather than - limb-by-limb in the loop. This might help if mpn_lshift is a lot faster - than what the compiler can generate for EXTRACT. But this is left to CPU - specific implementations to consider, especially since EXTRACT isn't on - the dependent chain. */ - -mp_limb_t -mpn_divrem_1 (mp_ptr qp, mp_size_t qxn, - mp_srcptr up, mp_size_t un, mp_limb_t d) -{ - mp_size_t n; - mp_size_t i; - mp_limb_t n1, n0; - mp_limb_t r = 0; - - ASSERT (qxn >= 0); - ASSERT (un >= 0); - ASSERT (d != 0); - /* FIXME: What's the correct overlap rule when qxn!=0? */ - ASSERT (MPN_SAME_OR_SEPARATE_P (qp+qxn, up, un)); - - n = un + qxn; - if (n == 0) - return 0; - - d <<= GMP_NAIL_BITS; - - qp += (n - 1); /* Make qp point at most significant quotient limb */ - - if ((d & GMP_LIMB_HIGHBIT) != 0) - { - if (un != 0) - { - /* High quotient limb is 0 or 1, skip a divide step. */ - mp_limb_t q; - r = up[un - 1] << GMP_NAIL_BITS; - q = (r >= d); - *qp-- = q; - r -= (d & -q); - r >>= GMP_NAIL_BITS; - n--; - un--; - } - - if (BELOW_THRESHOLD (n, DIVREM_1_NORM_THRESHOLD)) - { - plain: - for (i = un - 1; i >= 0; i--) - { - n0 = up[i] << GMP_NAIL_BITS; - udiv_qrnnd (*qp, r, r, n0, d); - r >>= GMP_NAIL_BITS; - qp--; - } - for (i = qxn - 1; i >= 0; i--) - { - udiv_qrnnd (*qp, r, r, CNST_LIMB(0), d); - r >>= GMP_NAIL_BITS; - qp--; - } - return r; - } - else - { - /* Multiply-by-inverse, divisor already normalized. */ - mp_limb_t dinv; - invert_limb (dinv, d); - - for (i = un - 1; i >= 0; i--) - { - n0 = up[i] << GMP_NAIL_BITS; - udiv_qrnnd_preinv (*qp, r, r, n0, d, dinv); - r >>= GMP_NAIL_BITS; - qp--; - } - for (i = qxn - 1; i >= 0; i--) - { - udiv_qrnnd_preinv (*qp, r, r, CNST_LIMB(0), d, dinv); - r >>= GMP_NAIL_BITS; - qp--; - } - return r; - } - } - else - { - /* Most significant bit of divisor == 0. */ - int cnt; - - /* Skip a division if high < divisor (high quotient 0). Testing here - before normalizing will still skip as often as possible. */ - if (un != 0) - { - n1 = up[un - 1] << GMP_NAIL_BITS; - if (n1 < d) - { - r = n1 >> GMP_NAIL_BITS; - *qp-- = 0; - n--; - if (n == 0) - return r; - un--; - } - } - - if (! UDIV_NEEDS_NORMALIZATION - && BELOW_THRESHOLD (n, DIVREM_1_UNNORM_THRESHOLD)) - goto plain; - - count_leading_zeros (cnt, d); - d <<= cnt; - r <<= cnt; - - if (UDIV_NEEDS_NORMALIZATION - && BELOW_THRESHOLD (n, DIVREM_1_UNNORM_THRESHOLD)) - { - mp_limb_t nshift; - if (un != 0) - { - n1 = up[un - 1] << GMP_NAIL_BITS; - r |= (n1 >> (GMP_LIMB_BITS - cnt)); - for (i = un - 2; i >= 0; i--) - { - n0 = up[i] << GMP_NAIL_BITS; - nshift = (n1 << cnt) | (n0 >> (GMP_NUMB_BITS - cnt)); - udiv_qrnnd (*qp, r, r, nshift, d); - r >>= GMP_NAIL_BITS; - qp--; - n1 = n0; - } - udiv_qrnnd (*qp, r, r, n1 << cnt, d); - r >>= GMP_NAIL_BITS; - qp--; - } - for (i = qxn - 1; i >= 0; i--) - { - udiv_qrnnd (*qp, r, r, CNST_LIMB(0), d); - r >>= GMP_NAIL_BITS; - qp--; - } - return r >> cnt; - } - else - { - mp_limb_t dinv, nshift; - invert_limb (dinv, d); - if (un != 0) - { - n1 = up[un - 1] << GMP_NAIL_BITS; - r |= (n1 >> (GMP_LIMB_BITS - cnt)); - for (i = un - 2; i >= 0; i--) - { - n0 = up[i] << GMP_NAIL_BITS; - nshift = (n1 << cnt) | (n0 >> (GMP_NUMB_BITS - cnt)); - udiv_qrnnd_preinv (*qp, r, r, nshift, d, dinv); - r >>= GMP_NAIL_BITS; - qp--; - n1 = n0; - } - udiv_qrnnd_preinv (*qp, r, r, n1 << cnt, d, dinv); - r >>= GMP_NAIL_BITS; - qp--; - } - for (i = qxn - 1; i >= 0; i--) - { - udiv_qrnnd_preinv (*qp, r, r, CNST_LIMB(0), d, dinv); - r >>= GMP_NAIL_BITS; - qp--; - } - return r >> cnt; - } - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divrem_2.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divrem_2.c deleted file mode 100644 index 30d24bb10251e94febeb1213246bbc90f6623ad8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/divrem_2.c +++ /dev/null @@ -1,119 +0,0 @@ -/* mpn_divrem_2 -- Divide natural numbers, producing both remainder and - quotient. The divisor is two limbs. - - THIS FILE CONTAINS INTERNAL FUNCTIONS WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - - -Copyright 1993-1996, 1999-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* Divide num {np,nn} by den {dp,2} and write the nn-2 least significant - quotient limbs at qp and the 2 long remainder at np. If qxn is non-zero, - generate that many fraction bits and append them after the other quotient - limbs. Return the most significant limb of the quotient, this is always 0 - or 1. - - Preconditions: - 1. The most significant bit of the divisor must be set. - 2. qp must either not overlap with the input operands at all, or - qp >= np + 2 must hold true. (This means that it's possible to put - the quotient in the high part of {np,nn}, right above the remainder. - 3. nn >= 2, even if qxn is non-zero. */ - -mp_limb_t -mpn_divrem_2 (mp_ptr qp, mp_size_t qxn, - mp_ptr np, mp_size_t nn, - mp_srcptr dp) -{ - mp_limb_t most_significant_q_limb; - mp_size_t i; - mp_limb_t r1, r0, d1, d0; - gmp_pi1_t di; - - ASSERT (nn >= 2); - ASSERT (qxn >= 0); - ASSERT (dp[1] & GMP_NUMB_HIGHBIT); - ASSERT (! MPN_OVERLAP_P (qp, nn-2+qxn, np, nn) || qp >= np+2); - ASSERT_MPN (np, nn); - ASSERT_MPN (dp, 2); - - np += nn - 2; - d1 = dp[1]; - d0 = dp[0]; - r1 = np[1]; - r0 = np[0]; - - most_significant_q_limb = 0; - if (r1 >= d1 && (r1 > d1 || r0 >= d0)) - { -#if GMP_NAIL_BITS == 0 - sub_ddmmss (r1, r0, r1, r0, d1, d0); -#else - r0 = r0 - d0; - r1 = r1 - d1 - (r0 >> GMP_LIMB_BITS - 1); - r0 &= GMP_NUMB_MASK; -#endif - most_significant_q_limb = 1; - } - - invert_pi1 (di, d1, d0); - - qp += qxn; - - for (i = nn - 2 - 1; i >= 0; i--) - { - mp_limb_t n0, q; - n0 = np[-1]; - udiv_qr_3by2 (q, r1, r0, r1, r0, n0, d1, d0, di.inv32); - np--; - qp[i] = q; - } - - if (UNLIKELY (qxn != 0)) - { - qp -= qxn; - for (i = qxn - 1; i >= 0; i--) - { - mp_limb_t q; - udiv_qr_3by2 (q, r1, r0, r1, r0, CNST_LIMB(0), d1, d0, di.inv32); - qp[i] = q; - } - } - - np[1] = r1; - np[0] = r0; - - return most_significant_q_limb; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dump.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dump.c deleted file mode 100644 index 3a73fe49e318d2a70124c2f9ef6df01cfd7ac2bd..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/dump.c +++ /dev/null @@ -1,100 +0,0 @@ -/* THIS IS AN INTERNAL FUNCTION WITH A MUTABLE INTERFACE. IT IS NOT SAFE TO - CALL THIS FUNCTION DIRECTLY. IN FACT, IT IS ALMOST GUARANTEED THAT THIS - FUNCTION WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - - -Copyright 1996, 2000-2002, 2005 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" - -#if GMP_NUMB_BITS % 4 == 0 -void -mpn_dump (mp_srcptr ptr, mp_size_t n) -{ - MPN_NORMALIZE (ptr, n); - - if (n == 0) - printf ("0\n"); - else - { - n--; -#if _LONG_LONG_LIMB - if ((ptr[n] >> GMP_LIMB_BITS / 2) != 0) - { - printf ("%lX", (unsigned long) (ptr[n] >> GMP_LIMB_BITS / 2)); - printf ("%0*lX", (GMP_LIMB_BITS / 2 / 4), (unsigned long) ptr[n]); - } - else -#endif - printf ("%lX", (unsigned long) ptr[n]); - - while (n) - { - n--; -#if _LONG_LONG_LIMB - printf ("%0*lX", (GMP_NUMB_BITS - GMP_LIMB_BITS / 2) / 4, - (unsigned long) (ptr[n] >> GMP_LIMB_BITS / 2)); - printf ("%0*lX", GMP_LIMB_BITS / 2 / 4, (unsigned long) ptr[n]); -#else - printf ("%0*lX", GMP_NUMB_BITS / 4, (unsigned long) ptr[n]); -#endif - } - printf ("\n"); - } -} - -#else - -static void -mpn_recdump (mp_ptr p, mp_size_t n) -{ - mp_limb_t lo; - if (n != 0) - { - lo = p[0] & 0xf; - mpn_rshift (p, p, n, 4); - mpn_recdump (p, n); - printf ("%lX", lo); - } -} - -void -mpn_dump (mp_srcptr p, mp_size_t n) -{ - mp_ptr tp; - TMP_DECL; - TMP_MARK; - tp = TMP_ALLOC_LIMBS (n); - MPN_COPY (tp, p, n); - TMP_FREE; -} - -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/fib2_ui.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/fib2_ui.c deleted file mode 100644 index 336e6db15b2ea547de21930e37690433ea433ddf..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/fib2_ui.c +++ /dev/null @@ -1,185 +0,0 @@ -/* mpn_fib2_ui -- calculate Fibonacci numbers. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2001, 2002, 2005, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> -#include "gmp.h" -#include "gmp-impl.h" - -/* change this to "#define TRACE(x) x" for diagnostics */ -#define TRACE(x) - - -/* Store F[n] at fp and F[n-1] at f1p. fp and f1p should have room for - MPN_FIB2_SIZE(n) limbs. - - The return value is the actual number of limbs stored, this will be at - least 1. fp[size-1] will be non-zero, except when n==0, in which case - fp[0] is 0 and f1p[0] is 1. f1p[size-1] can be zero, since F[n-1]<F[n] - (for n>0). - - Notes: - - In F[2k+1] with k even, +2 is applied to 4*F[k]^2 just by ORing into the - low limb. - - In F[2k+1] with k odd, -2 is applied to the low limb of 4*F[k]^2 - - F[k-1]^2. This F[2k+1] is an F[4m+3] and such numbers are congruent to - 1, 2 or 5 mod 8, which means no underflow reaching it with a -2 (since - that would leave 6 or 7 mod 8). - - This property of F[4m+3] can be verified by induction on F[4m+3] = - 7*F[4m-1] - F[4m-5], that formula being a standard lucas sequence - identity U[i+j] = U[i]*V[j] - U[i-j]*Q^j. -*/ - -mp_size_t -mpn_fib2_ui (mp_ptr fp, mp_ptr f1p, unsigned long int n) -{ - mp_size_t size; - unsigned long nfirst, mask; - - TRACE (printf ("mpn_fib2_ui n=%lu\n", n)); - - ASSERT (! MPN_OVERLAP_P (fp, MPN_FIB2_SIZE(n), f1p, MPN_FIB2_SIZE(n))); - - /* Take a starting pair from the table. */ - mask = 1; - for (nfirst = n; nfirst > FIB_TABLE_LIMIT; nfirst /= 2) - mask <<= 1; - TRACE (printf ("nfirst=%lu mask=0x%lX\n", nfirst, mask)); - - f1p[0] = FIB_TABLE ((int) nfirst - 1); - fp[0] = FIB_TABLE (nfirst); - size = 1; - - /* Skip to the end if the table lookup gives the final answer. */ - if (mask != 1) - { - mp_size_t alloc; - mp_ptr xp; - TMP_DECL; - - TMP_MARK; - alloc = MPN_FIB2_SIZE (n); - xp = TMP_ALLOC_LIMBS (alloc); - - do - { - /* Here fp==F[k] and f1p==F[k-1], with k being the bits of n from - n&mask upwards. - - The next bit of n is n&(mask>>1) and we'll double to the pair - fp==F[2k],f1p==F[2k-1] or fp==F[2k+1],f1p==F[2k], according as - that bit is 0 or 1 respectively. */ - - TRACE (printf ("k=%lu mask=0x%lX size=%ld alloc=%ld\n", - n >> refmpn_count_trailing_zeros(mask), - mask, size, alloc); - mpn_trace ("fp ", fp, size); - mpn_trace ("f1p", f1p, size)); - - /* fp normalized, f1p at most one high zero */ - ASSERT (fp[size-1] != 0); - ASSERT (f1p[size-1] != 0 || f1p[size-2] != 0); - - /* f1p[size-1] might be zero, but this occurs rarely, so it's not - worth bothering checking for it */ - ASSERT (alloc >= 2*size); - mpn_sqr (xp, fp, size); - mpn_sqr (fp, f1p, size); - size *= 2; - - /* Shrink if possible. Since fp was normalized there'll be at - most one high zero on xp (and if there is then there's one on - yp too). */ - ASSERT (xp[size-1] != 0 || fp[size-1] == 0); - size -= (xp[size-1] == 0); - ASSERT (xp[size-1] != 0); /* only one xp high zero */ - - /* Calculate F[2k-1] = F[k]^2 + F[k-1]^2. */ - f1p[size] = mpn_add_n (f1p, xp, fp, size); - - /* Calculate F[2k+1] = 4*F[k]^2 - F[k-1]^2 + 2*(-1)^k. - n&mask is the low bit of our implied k. */ -#if HAVE_NATIVE_mpn_rsblsh2_n - fp[size] = mpn_rsblsh2_n (fp, fp, xp, size); - if ((n & mask) == 0) - MPN_INCR_U(fp, size + 1, 2); /* possible +2 */ - else - { - ASSERT (fp[0] >= 2); - fp[0] -= 2; /* possible -2 */ - } -#else - { - mp_limb_t c; - - c = mpn_lshift (xp, xp, size, 2); - xp[0] |= (n & mask ? 0 : 2); /* possible +2 */ - c -= mpn_sub_n (fp, xp, fp, size); - ASSERT (n & mask ? fp[0] != 0 && fp[0] != 1 : 1); - fp[0] -= (n & mask ? 2 : 0); /* possible -2 */ - fp[size] = c; - } -#endif - ASSERT (alloc >= size+1); - size += (fp[size] != 0); - - /* now n&mask is the new bit of n being considered */ - mask >>= 1; - - /* Calculate F[2k] = F[2k+1] - F[2k-1], replacing the unwanted one of - F[2k+1] and F[2k-1]. */ - if (n & mask) - ASSERT_NOCARRY (mpn_sub_n (f1p, fp, f1p, size)); - else { - ASSERT_NOCARRY (mpn_sub_n ( fp, fp, f1p, size)); - - /* Can have a high zero after replacing F[2k+1] with F[2k]. - f1p will have a high zero if fp does. */ - ASSERT (fp[size-1] != 0 || f1p[size-1] == 0); - size -= (fp[size-1] == 0); - } - } - while (mask != 1); - - TMP_FREE; - } - - TRACE (printf ("done size=%ld\n", size); - mpn_trace ("fp ", fp, size); - mpn_trace ("f1p", f1p, size)); - - return size; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcd.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcd.c deleted file mode 100644 index b14e1ad888f62ecf5611b031cfd88364d38a31df..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcd.c +++ /dev/null @@ -1,310 +0,0 @@ -/* mpn/gcd.c: mpn_gcd for gcd of two odd integers. - -Copyright 1991, 1993-1998, 2000-2005, 2008, 2010, 2012 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Uses the HGCD operation described in - - N. Möller, On Schönhage's algorithm and subquadratic integer gcd - computation, Math. Comp. 77 (2008), 589-607. - - to reduce inputs until they are of size below GCD_DC_THRESHOLD, and - then uses Lehmer's algorithm. -*/ - -/* Some reasonable choices are n / 2 (same as in hgcd), and p = (n + - * 2)/3, which gives a balanced multiplication in - * mpn_hgcd_matrix_adjust. However, p = 2 n/3 gives slightly better - * performance. The matrix-vector multiplication is then - * 4:1-unbalanced, with matrix elements of size n/6, and vector - * elements of size p = 2n/3. */ - -/* From analysis of the theoretical running time, it appears that when - * multiplication takes time O(n^alpha), p should be chosen so that - * the ratio of the time for the mpn_hgcd call, and the time for the - * multiplication in mpn_hgcd_matrix_adjust, is roughly 1/(alpha - - * 1). */ -#ifdef TUNE_GCD_P -#define P_TABLE_SIZE 10000 -mp_size_t p_table[P_TABLE_SIZE]; -#define CHOOSE_P(n) ( (n) < P_TABLE_SIZE ? p_table[n] : 2*(n)/3) -#else -#define CHOOSE_P(n) (2*(n) / 3) -#endif - -struct gcd_ctx -{ - mp_ptr gp; - mp_size_t gn; -}; - -static void -gcd_hook (void *p, mp_srcptr gp, mp_size_t gn, - mp_srcptr qp, mp_size_t qn, int d) -{ - struct gcd_ctx *ctx = (struct gcd_ctx *) p; - MPN_COPY (ctx->gp, gp, gn); - ctx->gn = gn; -} - -#if GMP_NAIL_BITS > 0 -/* Nail supports should be easy, replacing the sub_ddmmss with nails - * logic. */ -#error Nails not supported. -#endif - -/* Use binary algorithm to compute G <-- GCD (U, V) for usize, vsize == 2. - Both U and V must be odd. */ -static inline mp_size_t -gcd_2 (mp_ptr gp, mp_srcptr up, mp_srcptr vp) -{ - mp_limb_t u0, u1, v0, v1; - mp_size_t gn; - - u0 = up[0]; - u1 = up[1]; - v0 = vp[0]; - v1 = vp[1]; - - ASSERT (u0 & 1); - ASSERT (v0 & 1); - - /* Check for u0 != v0 needed to ensure that argument to - * count_trailing_zeros is non-zero. */ - while (u1 != v1 && u0 != v0) - { - unsigned long int r; - if (u1 > v1) - { - sub_ddmmss (u1, u0, u1, u0, v1, v0); - count_trailing_zeros (r, u0); - u0 = ((u1 << (GMP_NUMB_BITS - r)) & GMP_NUMB_MASK) | (u0 >> r); - u1 >>= r; - } - else /* u1 < v1. */ - { - sub_ddmmss (v1, v0, v1, v0, u1, u0); - count_trailing_zeros (r, v0); - v0 = ((v1 << (GMP_NUMB_BITS - r)) & GMP_NUMB_MASK) | (v0 >> r); - v1 >>= r; - } - } - - gp[0] = u0, gp[1] = u1, gn = 1 + (u1 != 0); - - /* If U == V == GCD, done. Otherwise, compute GCD (V, |U - V|). */ - if (u1 == v1 && u0 == v0) - return gn; - - v0 = (u0 == v0) ? ((u1 > v1) ? u1-v1 : v1-u1) : ((u0 > v0) ? u0-v0 : v0-u0); - gp[0] = mpn_gcd_1 (gp, gn, v0); - - return 1; -} - -mp_size_t -mpn_gcd (mp_ptr gp, mp_ptr up, mp_size_t usize, mp_ptr vp, mp_size_t n) -{ - mp_size_t talloc; - mp_size_t scratch; - mp_size_t matrix_scratch; - - struct gcd_ctx ctx; - mp_ptr tp; - TMP_DECL; - - ASSERT (usize >= n); - ASSERT (n > 0); - ASSERT (vp[n-1] > 0); - - /* FIXME: Check for small sizes first, before setting up temporary - storage etc. */ - talloc = MPN_GCD_SUBDIV_STEP_ITCH(n); - - /* For initial division */ - scratch = usize - n + 1; - if (scratch > talloc) - talloc = scratch; - -#if TUNE_GCD_P - if (CHOOSE_P (n) > 0) -#else - if (ABOVE_THRESHOLD (n, GCD_DC_THRESHOLD)) -#endif - { - mp_size_t hgcd_scratch; - mp_size_t update_scratch; - mp_size_t p = CHOOSE_P (n); - mp_size_t scratch; -#if TUNE_GCD_P - /* Worst case, since we don't guarantee that n - CHOOSE_P(n) - is increasing */ - matrix_scratch = MPN_HGCD_MATRIX_INIT_ITCH (n); - hgcd_scratch = mpn_hgcd_itch (n); - update_scratch = 2*(n - 1); -#else - matrix_scratch = MPN_HGCD_MATRIX_INIT_ITCH (n - p); - hgcd_scratch = mpn_hgcd_itch (n - p); - update_scratch = p + n - 1; -#endif - scratch = matrix_scratch + MAX(hgcd_scratch, update_scratch); - if (scratch > talloc) - talloc = scratch; - } - - TMP_MARK; - tp = TMP_ALLOC_LIMBS(talloc); - - if (usize > n) - { - mpn_tdiv_qr (tp, up, 0, up, usize, vp, n); - - if (mpn_zero_p (up, n)) - { - MPN_COPY (gp, vp, n); - ctx.gn = n; - goto done; - } - } - - ctx.gp = gp; - -#if TUNE_GCD_P - while (CHOOSE_P (n) > 0) -#else - while (ABOVE_THRESHOLD (n, GCD_DC_THRESHOLD)) -#endif - { - struct hgcd_matrix M; - mp_size_t p = CHOOSE_P (n); - mp_size_t matrix_scratch = MPN_HGCD_MATRIX_INIT_ITCH (n - p); - mp_size_t nn; - mpn_hgcd_matrix_init (&M, n - p, tp); - nn = mpn_hgcd (up + p, vp + p, n - p, &M, tp + matrix_scratch); - if (nn > 0) - { - ASSERT (M.n <= (n - p - 1)/2); - ASSERT (M.n + p <= (p + n - 1) / 2); - /* Temporary storage 2 (p + M->n) <= p + n - 1. */ - n = mpn_hgcd_matrix_adjust (&M, p + nn, up, vp, p, tp + matrix_scratch); - } - else - { - /* Temporary storage n */ - n = mpn_gcd_subdiv_step (up, vp, n, 0, gcd_hook, &ctx, tp); - if (n == 0) - goto done; - } - } - - while (n > 2) - { - struct hgcd_matrix1 M; - mp_limb_t uh, ul, vh, vl; - mp_limb_t mask; - - mask = up[n-1] | vp[n-1]; - ASSERT (mask > 0); - - if (mask & GMP_NUMB_HIGHBIT) - { - uh = up[n-1]; ul = up[n-2]; - vh = vp[n-1]; vl = vp[n-2]; - } - else - { - int shift; - - count_leading_zeros (shift, mask); - uh = MPN_EXTRACT_NUMB (shift, up[n-1], up[n-2]); - ul = MPN_EXTRACT_NUMB (shift, up[n-2], up[n-3]); - vh = MPN_EXTRACT_NUMB (shift, vp[n-1], vp[n-2]); - vl = MPN_EXTRACT_NUMB (shift, vp[n-2], vp[n-3]); - } - - /* Try an mpn_hgcd2 step */ - if (mpn_hgcd2 (uh, ul, vh, vl, &M)) - { - n = mpn_matrix22_mul1_inverse_vector (&M, tp, up, vp, n); - MP_PTR_SWAP (up, tp); - } - else - { - /* mpn_hgcd2 has failed. Then either one of a or b is very - small, or the difference is very small. Perform one - subtraction followed by one division. */ - - /* Temporary storage n */ - n = mpn_gcd_subdiv_step (up, vp, n, 0, &gcd_hook, &ctx, tp); - if (n == 0) - goto done; - } - } - - ASSERT(up[n-1] | vp[n-1]); - - if (n == 1) - { - *gp = mpn_gcd_1(up, 1, vp[0]); - ctx.gn = 1; - goto done; - } - - /* Due to the calling convention for mpn_gcd, at most one can be - even. */ - - if (! (up[0] & 1)) - MP_PTR_SWAP (up, vp); - - ASSERT (up[0] & 1); - - if (vp[0] == 0) - { - *gp = mpn_gcd_1 (up, 2, vp[1]); - ctx.gn = 1; - goto done; - } - else if (! (vp[0] & 1)) - { - int r; - count_trailing_zeros (r, vp[0]); - vp[0] = ((vp[1] << (GMP_NUMB_BITS - r)) & GMP_NUMB_MASK) | (vp[0] >> r); - vp[1] >>= r; - } - - ctx.gn = gcd_2(gp, up, vp); - -done: - TMP_FREE; - return ctx.gn; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcd_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcd_1.c deleted file mode 100644 index f6dcb4a2eb8596f8b9f012ec27b75482c9a216f4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcd_1.c +++ /dev/null @@ -1,199 +0,0 @@ -/* mpn_gcd_1 -- mpn and limb greatest common divisor. - -Copyright 1994, 1996, 2000, 2001, 2009, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef GCD_1_METHOD -#define GCD_1_METHOD 2 -#endif - -#define USE_ZEROTAB 0 - -#if USE_ZEROTAB -#define MAXSHIFT 4 -#define MASK ((1 << MAXSHIFT) - 1) -static const unsigned char zerotab[1 << MAXSHIFT] = -{ -#if MAXSHIFT > 4 - 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, -#endif - 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 -}; -#endif - -/* Does not work for U == 0 or V == 0. It would be tough to make it work for - V == 0 since gcd(x,0) = x, and U does not generally fit in an mp_limb_t. - - The threshold for doing u%v when size==1 will vary by CPU according to - the speed of a division and the code generated for the main loop. Any - tuning for this is left to a CPU specific implementation. */ - -mp_limb_t -mpn_gcd_1 (mp_srcptr up, mp_size_t size, mp_limb_t vlimb) -{ - mp_limb_t ulimb; - unsigned long zero_bits, u_low_zero_bits; - - ASSERT (size >= 1); - ASSERT (vlimb != 0); - ASSERT_MPN_NONZERO_P (up, size); - - ulimb = up[0]; - - /* Need vlimb odd for modexact, want it odd to get common zeros. */ - count_trailing_zeros (zero_bits, vlimb); - vlimb >>= zero_bits; - - if (size > 1) - { - /* Must get common zeros before the mod reduction. If ulimb==0 then - vlimb already gives the common zeros. */ - if (ulimb != 0) - { - count_trailing_zeros (u_low_zero_bits, ulimb); - zero_bits = MIN (zero_bits, u_low_zero_bits); - } - - ulimb = MPN_MOD_OR_MODEXACT_1_ODD (up, size, vlimb); - if (ulimb == 0) - goto done; - - goto strip_u_maybe; - } - - /* size==1, so up[0]!=0 */ - count_trailing_zeros (u_low_zero_bits, ulimb); - ulimb >>= u_low_zero_bits; - zero_bits = MIN (zero_bits, u_low_zero_bits); - - /* make u bigger */ - if (vlimb > ulimb) - MP_LIMB_T_SWAP (ulimb, vlimb); - - /* if u is much bigger than v, reduce using a division rather than - chipping away at it bit-by-bit */ - if ((ulimb >> 16) > vlimb) - { - ulimb %= vlimb; - if (ulimb == 0) - goto done; - goto strip_u_maybe; - } - - ASSERT (ulimb & 1); - ASSERT (vlimb & 1); - -#if GCD_1_METHOD == 1 - while (ulimb != vlimb) - { - ASSERT (ulimb & 1); - ASSERT (vlimb & 1); - - if (ulimb > vlimb) - { - ulimb -= vlimb; - do - { - ulimb >>= 1; - ASSERT (ulimb != 0); - strip_u_maybe: - ; - } - while ((ulimb & 1) == 0); - } - else /* vlimb > ulimb. */ - { - vlimb -= ulimb; - do - { - vlimb >>= 1; - ASSERT (vlimb != 0); - } - while ((vlimb & 1) == 0); - } - } -#else -# if GCD_1_METHOD == 2 - - ulimb >>= 1; - vlimb >>= 1; - - while (ulimb != vlimb) - { - int c; - mp_limb_t t; - mp_limb_t vgtu; - - t = ulimb - vlimb; - vgtu = LIMB_HIGHBIT_TO_MASK (t); - - /* v <-- min (u, v) */ - vlimb += (vgtu & t); - - /* u <-- |u - v| */ - ulimb = (t ^ vgtu) - vgtu; - -#if USE_ZEROTAB - /* Number of trailing zeros is the same no matter if we look at - * t or ulimb, but using t gives more parallelism. */ - c = zerotab[t & MASK]; - - while (UNLIKELY (c == MAXSHIFT)) - { - ulimb >>= MAXSHIFT; - if (0) - strip_u_maybe: - vlimb >>= 1; - - c = zerotab[ulimb & MASK]; - } -#else - if (0) - { - strip_u_maybe: - vlimb >>= 1; - t = ulimb; - } - count_trailing_zeros (c, t); -#endif - ulimb >>= (c + 1); - } - - vlimb = (vlimb << 1) | 1; -# else -# error Unknown GCD_1_METHOD -# endif -#endif - - done: - return vlimb << zero_bits; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcd_subdiv_step.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcd_subdiv_step.c deleted file mode 100644 index 18634bec9fa4258b108ca7aa3d402ba8e9a7cf32..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcd_subdiv_step.c +++ /dev/null @@ -1,205 +0,0 @@ -/* gcd_subdiv_step.c. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2003-2005, 2008, 2010, 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdlib.h> /* for NULL */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Used when mpn_hgcd or mpn_hgcd2 has failed. Then either one of a or - b is small, or the difference is small. Perform one subtraction - followed by one division. The normal case is to compute the reduced - a and b, and return the new size. - - If s == 0 (used for gcd and gcdext), returns zero if the gcd is - found. - - If s > 0, don't reduce to size <= s, and return zero if no - reduction is possible (if either a, b or |a-b| is of size <= s). */ - -/* The hook function is called as - - hook(ctx, gp, gn, qp, qn, d) - - in the following cases: - - + If A = B at the start, G is the gcd, Q is NULL, d = -1. - - + If one input is zero at the start, G is the gcd, Q is NULL, - d = 0 if A = G and d = 1 if B = G. - - Otherwise, if d = 0 we have just subtracted a multiple of A from B, - and if d = 1 we have subtracted a multiple of B from A. - - + If A = B after subtraction, G is the gcd, Q is NULL. - - + If we get a zero remainder after division, G is the gcd, Q is the - quotient. - - + Otherwise, G is NULL, Q is the quotient (often 1). - - */ - -mp_size_t -mpn_gcd_subdiv_step (mp_ptr ap, mp_ptr bp, mp_size_t n, mp_size_t s, - gcd_subdiv_step_hook *hook, void *ctx, - mp_ptr tp) -{ - static const mp_limb_t one = CNST_LIMB(1); - mp_size_t an, bn, qn; - - int swapped; - - ASSERT (n > 0); - ASSERT (ap[n-1] > 0 || bp[n-1] > 0); - - an = bn = n; - MPN_NORMALIZE (ap, an); - MPN_NORMALIZE (bp, bn); - - swapped = 0; - - /* Arrange so that a < b, subtract b -= a, and maintain - normalization. */ - if (an == bn) - { - int c; - MPN_CMP (c, ap, bp, an); - if (UNLIKELY (c == 0)) - { - /* For gcdext, return the smallest of the two cofactors, so - pass d = -1. */ - if (s == 0) - hook (ctx, ap, an, NULL, 0, -1); - return 0; - } - else if (c > 0) - { - MP_PTR_SWAP (ap, bp); - swapped ^= 1; - } - } - else - { - if (an > bn) - { - MPN_PTR_SWAP (ap, an, bp, bn); - swapped ^= 1; - } - } - if (an <= s) - { - if (s == 0) - hook (ctx, bp, bn, NULL, 0, swapped ^ 1); - return 0; - } - - ASSERT_NOCARRY (mpn_sub (bp, bp, bn, ap, an)); - MPN_NORMALIZE (bp, bn); - ASSERT (bn > 0); - - if (bn <= s) - { - /* Undo subtraction. */ - mp_limb_t cy = mpn_add (bp, ap, an, bp, bn); - if (cy > 0) - bp[an] = cy; - return 0; - } - - /* Arrange so that a < b */ - if (an == bn) - { - int c; - MPN_CMP (c, ap, bp, an); - if (UNLIKELY (c == 0)) - { - if (s > 0) - /* Just record subtraction and return */ - hook (ctx, NULL, 0, &one, 1, swapped); - else - /* Found gcd. */ - hook (ctx, bp, bn, NULL, 0, swapped); - return 0; - } - - hook (ctx, NULL, 0, &one, 1, swapped); - - if (c > 0) - { - MP_PTR_SWAP (ap, bp); - swapped ^= 1; - } - } - else - { - hook (ctx, NULL, 0, &one, 1, swapped); - - if (an > bn) - { - MPN_PTR_SWAP (ap, an, bp, bn); - swapped ^= 1; - } - } - - mpn_tdiv_qr (tp, bp, 0, bp, bn, ap, an); - qn = bn - an + 1; - bn = an; - MPN_NORMALIZE (bp, bn); - - if (UNLIKELY (bn <= s)) - { - if (s == 0) - { - hook (ctx, ap, an, tp, qn, swapped); - return 0; - } - - /* Quotient is one too large, so decrement it and add back A. */ - if (bn > 0) - { - mp_limb_t cy = mpn_add (bp, ap, an, bp, bn); - if (cy) - bp[an++] = cy; - } - else - MPN_COPY (bp, ap, an); - - MPN_DECR_U (tp, qn, 1); - } - - hook (ctx, NULL, 0, tp, qn, swapped); - return an; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcdext.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcdext.c deleted file mode 100644 index 1c4ff75aab8256a5ee74fa412beab226f4812c52..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcdext.c +++ /dev/null @@ -1,558 +0,0 @@ -/* mpn_gcdext -- Extended Greatest Common Divisor. - -Copyright 1996, 1998, 2000-2005, 2008, 2009, 2012 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Computes (r;b) = (a; b) M. Result is of size n + M->n +/- 1, and - the size is returned (if inputs are non-normalized, result may be - non-normalized too). Temporary space needed is M->n + n. - */ -static size_t -hgcd_mul_matrix_vector (struct hgcd_matrix *M, - mp_ptr rp, mp_srcptr ap, mp_ptr bp, mp_size_t n, mp_ptr tp) -{ - mp_limb_t ah, bh; - - /* Compute (r,b) <-- (u00 a + u10 b, u01 a + u11 b) as - - t = u00 * a - r = u10 * b - r += t; - - t = u11 * b - b = u01 * a - b += t; - */ - - if (M->n >= n) - { - mpn_mul (tp, M->p[0][0], M->n, ap, n); - mpn_mul (rp, M->p[1][0], M->n, bp, n); - } - else - { - mpn_mul (tp, ap, n, M->p[0][0], M->n); - mpn_mul (rp, bp, n, M->p[1][0], M->n); - } - - ah = mpn_add_n (rp, rp, tp, n + M->n); - - if (M->n >= n) - { - mpn_mul (tp, M->p[1][1], M->n, bp, n); - mpn_mul (bp, M->p[0][1], M->n, ap, n); - } - else - { - mpn_mul (tp, bp, n, M->p[1][1], M->n); - mpn_mul (bp, ap, n, M->p[0][1], M->n); - } - bh = mpn_add_n (bp, bp, tp, n + M->n); - - n += M->n; - if ( (ah | bh) > 0) - { - rp[n] = ah; - bp[n] = bh; - n++; - } - else - { - /* Normalize */ - while ( (rp[n-1] | bp[n-1]) == 0) - n--; - } - - return n; -} - -#define COMPUTE_V_ITCH(n) (2*(n)) - -/* Computes |v| = |(g - u a)| / b, where u may be positive or - negative, and v is of the opposite sign. max(a, b) is of size n, u and - v at most size n, and v must have space for n+1 limbs. */ -static mp_size_t -compute_v (mp_ptr vp, - mp_srcptr ap, mp_srcptr bp, mp_size_t n, - mp_srcptr gp, mp_size_t gn, - mp_srcptr up, mp_size_t usize, - mp_ptr tp) -{ - mp_size_t size; - mp_size_t an; - mp_size_t bn; - mp_size_t vn; - - ASSERT (n > 0); - ASSERT (gn > 0); - ASSERT (usize != 0); - - size = ABS (usize); - ASSERT (size <= n); - ASSERT (up[size-1] > 0); - - an = n; - MPN_NORMALIZE (ap, an); - ASSERT (gn <= an); - - if (an >= size) - mpn_mul (tp, ap, an, up, size); - else - mpn_mul (tp, up, size, ap, an); - - size += an; - - if (usize > 0) - { - /* |v| = -v = (u a - g) / b */ - - ASSERT_NOCARRY (mpn_sub (tp, tp, size, gp, gn)); - MPN_NORMALIZE (tp, size); - if (size == 0) - return 0; - } - else - { /* |v| = v = (g - u a) / b = (g + |u| a) / b. Since g <= a, - (g + |u| a) always fits in (|usize| + an) limbs. */ - - ASSERT_NOCARRY (mpn_add (tp, tp, size, gp, gn)); - size -= (tp[size - 1] == 0); - } - - /* Now divide t / b. There must be no remainder */ - bn = n; - MPN_NORMALIZE (bp, bn); - ASSERT (size >= bn); - - vn = size + 1 - bn; - ASSERT (vn <= n + 1); - - mpn_divexact (vp, tp, size, bp, bn); - vn -= (vp[vn-1] == 0); - - return vn; -} - -/* Temporary storage: - - Initial division: Quotient of at most an - n + 1 <= an limbs. - - Storage for u0 and u1: 2(n+1). - - Storage for hgcd matrix M, with input ceil(n/2): 5 * ceil(n/4) - - Storage for hgcd, input (n + 1)/2: 9 n/4 plus some. - - When hgcd succeeds: 1 + floor(3n/2) for adjusting a and b, and 2(n+1) for the cofactors. - - When hgcd fails: 2n + 1 for mpn_gcdext_subdiv_step, which is less. - - For the lehmer call after the loop, Let T denote - GCDEXT_DC_THRESHOLD. For the gcdext_lehmer call, we need T each for - u, a and b, and 4T+3 scratch space. Next, for compute_v, we need T - for u, T+1 for v and 2T scratch space. In all, 7T + 3 is - sufficient for both operations. - -*/ - -/* Optimal choice of p seems difficult. In each iteration the division - * of work between hgcd and the updates of u0 and u1 depends on the - * current size of the u. It may be desirable to use a different - * choice of p in each iteration. Also the input size seems to matter; - * choosing p = n / 3 in the first iteration seems to improve - * performance slightly for input size just above the threshold, but - * degrade performance for larger inputs. */ -#define CHOOSE_P_1(n) ((n) / 2) -#define CHOOSE_P_2(n) ((n) / 3) - -mp_size_t -mpn_gcdext (mp_ptr gp, mp_ptr up, mp_size_t *usizep, - mp_ptr ap, mp_size_t an, mp_ptr bp, mp_size_t n) -{ - mp_size_t talloc; - mp_size_t scratch; - mp_size_t matrix_scratch; - mp_size_t ualloc = n + 1; - - struct gcdext_ctx ctx; - mp_size_t un; - mp_ptr u0; - mp_ptr u1; - - mp_ptr tp; - - TMP_DECL; - - ASSERT (an >= n); - ASSERT (n > 0); - ASSERT (bp[n-1] > 0); - - TMP_MARK; - - /* FIXME: Check for small sizes first, before setting up temporary - storage etc. */ - talloc = MPN_GCDEXT_LEHMER_N_ITCH(n); - - /* For initial division */ - scratch = an - n + 1; - if (scratch > talloc) - talloc = scratch; - - if (ABOVE_THRESHOLD (n, GCDEXT_DC_THRESHOLD)) - { - /* For hgcd loop. */ - mp_size_t hgcd_scratch; - mp_size_t update_scratch; - mp_size_t p1 = CHOOSE_P_1 (n); - mp_size_t p2 = CHOOSE_P_2 (n); - mp_size_t min_p = MIN(p1, p2); - mp_size_t max_p = MAX(p1, p2); - matrix_scratch = MPN_HGCD_MATRIX_INIT_ITCH (n - min_p); - hgcd_scratch = mpn_hgcd_itch (n - min_p); - update_scratch = max_p + n - 1; - - scratch = matrix_scratch + MAX(hgcd_scratch, update_scratch); - if (scratch > talloc) - talloc = scratch; - - /* Final mpn_gcdext_lehmer_n call. Need space for u and for - copies of a and b. */ - scratch = MPN_GCDEXT_LEHMER_N_ITCH (GCDEXT_DC_THRESHOLD) - + 3*GCDEXT_DC_THRESHOLD; - - if (scratch > talloc) - talloc = scratch; - - /* Cofactors u0 and u1 */ - talloc += 2*(n+1); - } - - tp = TMP_ALLOC_LIMBS(talloc); - - if (an > n) - { - mpn_tdiv_qr (tp, ap, 0, ap, an, bp, n); - - if (mpn_zero_p (ap, n)) - { - MPN_COPY (gp, bp, n); - *usizep = 0; - TMP_FREE; - return n; - } - } - - if (BELOW_THRESHOLD (n, GCDEXT_DC_THRESHOLD)) - { - mp_size_t gn = mpn_gcdext_lehmer_n(gp, up, usizep, ap, bp, n, tp); - - TMP_FREE; - return gn; - } - - MPN_ZERO (tp, 2*ualloc); - u0 = tp; tp += ualloc; - u1 = tp; tp += ualloc; - - ctx.gp = gp; - ctx.up = up; - ctx.usize = usizep; - - { - /* For the first hgcd call, there are no u updates, and it makes - some sense to use a different choice for p. */ - - /* FIXME: We could trim use of temporary storage, since u0 and u1 - are not used yet. For the hgcd call, we could swap in the u0 - and u1 pointers for the relevant matrix elements. */ - - struct hgcd_matrix M; - mp_size_t p = CHOOSE_P_1 (n); - mp_size_t nn; - - mpn_hgcd_matrix_init (&M, n - p, tp); - nn = mpn_hgcd (ap + p, bp + p, n - p, &M, tp + matrix_scratch); - if (nn > 0) - { - ASSERT (M.n <= (n - p - 1)/2); - ASSERT (M.n + p <= (p + n - 1) / 2); - - /* Temporary storage 2 (p + M->n) <= p + n - 1 */ - n = mpn_hgcd_matrix_adjust (&M, p + nn, ap, bp, p, tp + matrix_scratch); - - MPN_COPY (u0, M.p[1][0], M.n); - MPN_COPY (u1, M.p[1][1], M.n); - un = M.n; - while ( (u0[un-1] | u1[un-1] ) == 0) - un--; - } - else - { - /* mpn_hgcd has failed. Then either one of a or b is very - small, or the difference is very small. Perform one - subtraction followed by one division. */ - u1[0] = 1; - - ctx.u0 = u0; - ctx.u1 = u1; - ctx.tp = tp + n; /* ualloc */ - ctx.un = 1; - - /* Temporary storage n */ - n = mpn_gcd_subdiv_step (ap, bp, n, 0, mpn_gcdext_hook, &ctx, tp); - if (n == 0) - { - TMP_FREE; - return ctx.gn; - } - - un = ctx.un; - ASSERT (un < ualloc); - } - } - - while (ABOVE_THRESHOLD (n, GCDEXT_DC_THRESHOLD)) - { - struct hgcd_matrix M; - mp_size_t p = CHOOSE_P_2 (n); - mp_size_t nn; - - mpn_hgcd_matrix_init (&M, n - p, tp); - nn = mpn_hgcd (ap + p, bp + p, n - p, &M, tp + matrix_scratch); - if (nn > 0) - { - mp_ptr t0; - - t0 = tp + matrix_scratch; - ASSERT (M.n <= (n - p - 1)/2); - ASSERT (M.n + p <= (p + n - 1) / 2); - - /* Temporary storage 2 (p + M->n) <= p + n - 1 */ - n = mpn_hgcd_matrix_adjust (&M, p + nn, ap, bp, p, t0); - - /* By the same analysis as for mpn_hgcd_matrix_mul */ - ASSERT (M.n + un <= ualloc); - - /* FIXME: This copying could be avoided by some swapping of - * pointers. May need more temporary storage, though. */ - MPN_COPY (t0, u0, un); - - /* Temporary storage ualloc */ - un = hgcd_mul_matrix_vector (&M, u0, t0, u1, un, t0 + un); - - ASSERT (un < ualloc); - ASSERT ( (u0[un-1] | u1[un-1]) > 0); - } - else - { - /* mpn_hgcd has failed. Then either one of a or b is very - small, or the difference is very small. Perform one - subtraction followed by one division. */ - ctx.u0 = u0; - ctx.u1 = u1; - ctx.tp = tp + n; /* ualloc */ - ctx.un = un; - - /* Temporary storage n */ - n = mpn_gcd_subdiv_step (ap, bp, n, 0, mpn_gcdext_hook, &ctx, tp); - if (n == 0) - { - TMP_FREE; - return ctx.gn; - } - - un = ctx.un; - ASSERT (un < ualloc); - } - } - /* We have A = ... a + ... b - B = u0 a + u1 b - - a = u1 A + ... B - b = -u0 A + ... B - - with bounds - - |u0|, |u1| <= B / min(a, b) - - We always have u1 > 0, and u0 == 0 is possible only if u1 == 1, - in which case the only reduction done so far is a = A - k B for - some k. - - Compute g = u a + v b = (u u1 - v u0) A + (...) B - Here, u, v are bounded by - - |u| <= b, - |v| <= a - */ - - ASSERT ( (ap[n-1] | bp[n-1]) > 0); - - if (UNLIKELY (mpn_cmp (ap, bp, n) == 0)) - { - /* Must return the smallest cofactor, +u1 or -u0 */ - int c; - - MPN_COPY (gp, ap, n); - - MPN_CMP (c, u0, u1, un); - /* c == 0 can happen only when A = (2k+1) G, B = 2 G. And in - this case we choose the cofactor + 1, corresponding to G = A - - k B, rather than -1, corresponding to G = - A + (k+1) B. */ - ASSERT (c != 0 || (un == 1 && u0[0] == 1 && u1[0] == 1)); - if (c < 0) - { - MPN_NORMALIZE (u0, un); - MPN_COPY (up, u0, un); - *usizep = -un; - } - else - { - MPN_NORMALIZE_NOT_ZERO (u1, un); - MPN_COPY (up, u1, un); - *usizep = un; - } - - TMP_FREE; - return n; - } - else if (UNLIKELY (u0[0] == 0) && un == 1) - { - mp_size_t gn; - ASSERT (u1[0] == 1); - - /* g = u a + v b = (u u1 - v u0) A + (...) B = u A + (...) B */ - gn = mpn_gcdext_lehmer_n (gp, up, usizep, ap, bp, n, tp); - - TMP_FREE; - return gn; - } - else - { - mp_size_t u0n; - mp_size_t u1n; - mp_size_t lehmer_un; - mp_size_t lehmer_vn; - mp_size_t gn; - - mp_ptr lehmer_up; - mp_ptr lehmer_vp; - int negate; - - lehmer_up = tp; tp += n; - - /* Call mpn_gcdext_lehmer_n with copies of a and b. */ - MPN_COPY (tp, ap, n); - MPN_COPY (tp + n, bp, n); - gn = mpn_gcdext_lehmer_n (gp, lehmer_up, &lehmer_un, tp, tp + n, n, tp + 2*n); - - u0n = un; - MPN_NORMALIZE (u0, u0n); - ASSERT (u0n > 0); - - if (lehmer_un == 0) - { - /* u == 0 ==> v = g / b == 1 ==> g = - u0 A + (...) B */ - MPN_COPY (up, u0, u0n); - *usizep = -u0n; - - TMP_FREE; - return gn; - } - - lehmer_vp = tp; - /* Compute v = (g - u a) / b */ - lehmer_vn = compute_v (lehmer_vp, - ap, bp, n, gp, gn, lehmer_up, lehmer_un, tp + n + 1); - - if (lehmer_un > 0) - negate = 0; - else - { - lehmer_un = -lehmer_un; - negate = 1; - } - - u1n = un; - MPN_NORMALIZE (u1, u1n); - ASSERT (u1n > 0); - - ASSERT (lehmer_un + u1n <= ualloc); - ASSERT (lehmer_vn + u0n <= ualloc); - - /* We may still have v == 0 */ - - /* Compute u u0 */ - if (lehmer_un <= u1n) - /* Should be the common case */ - mpn_mul (up, u1, u1n, lehmer_up, lehmer_un); - else - mpn_mul (up, lehmer_up, lehmer_un, u1, u1n); - - un = u1n + lehmer_un; - un -= (up[un - 1] == 0); - - if (lehmer_vn > 0) - { - mp_limb_t cy; - - /* Overwrites old u1 value */ - if (lehmer_vn <= u0n) - /* Should be the common case */ - mpn_mul (u1, u0, u0n, lehmer_vp, lehmer_vn); - else - mpn_mul (u1, lehmer_vp, lehmer_vn, u0, u0n); - - u1n = u0n + lehmer_vn; - u1n -= (u1[u1n - 1] == 0); - - if (u1n <= un) - { - cy = mpn_add (up, up, un, u1, u1n); - } - else - { - cy = mpn_add (up, u1, u1n, up, un); - un = u1n; - } - up[un] = cy; - un += (cy != 0); - - ASSERT (un < ualloc); - } - *usizep = negate ? -un : un; - - TMP_FREE; - return gn; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcdext_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcdext_1.c deleted file mode 100644 index ea46cceb72981d7440e88f33ef149a2681d22be7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcdext_1.c +++ /dev/null @@ -1,328 +0,0 @@ -/* mpn_gcdext -- Extended Greatest Common Divisor. - -Copyright 1996, 1998, 2000-2005, 2008, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef GCDEXT_1_USE_BINARY -#define GCDEXT_1_USE_BINARY 0 -#endif - -#ifndef GCDEXT_1_BINARY_METHOD -#define GCDEXT_1_BINARY_METHOD 2 -#endif - -#ifndef USE_ZEROTAB -#define USE_ZEROTAB 1 -#endif - -#if GCDEXT_1_USE_BINARY - -#if USE_ZEROTAB -static unsigned char zerotab[0x40] = { - 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, - 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, - 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, - 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 -}; -#endif - -mp_limb_t -mpn_gcdext_1 (mp_limb_signed_t *sp, mp_limb_signed_t *tp, - mp_limb_t u, mp_limb_t v) -{ - /* Maintain - - U = t1 u + t0 v - V = s1 u + s0 v - - where U, V are the inputs (without any shared power of two), - and the matrix has determinant ± 2^{shift}. - */ - mp_limb_t s0 = 1; - mp_limb_t t0 = 0; - mp_limb_t s1 = 0; - mp_limb_t t1 = 1; - mp_limb_t ug; - mp_limb_t vg; - mp_limb_t ugh; - mp_limb_t vgh; - unsigned zero_bits; - unsigned shift; - unsigned i; -#if GCDEXT_1_BINARY_METHOD == 2 - mp_limb_t det_sign; -#endif - - ASSERT (u > 0); - ASSERT (v > 0); - - count_trailing_zeros (zero_bits, u | v); - u >>= zero_bits; - v >>= zero_bits; - - if ((u & 1) == 0) - { - count_trailing_zeros (shift, u); - u >>= shift; - t1 <<= shift; - } - else if ((v & 1) == 0) - { - count_trailing_zeros (shift, v); - v >>= shift; - s0 <<= shift; - } - else - shift = 0; - -#if GCDEXT_1_BINARY_METHOD == 1 - while (u != v) - { - unsigned count; - if (u > v) - { - u -= v; -#if USE_ZEROTAB - count = zerotab [u & 0x3f]; - u >>= count; - if (UNLIKELY (count == 6)) - { - unsigned c; - do - { - c = zerotab[u & 0x3f]; - u >>= c; - count += c; - } - while (c == 6); - } -#else - count_trailing_zeros (count, u); - u >>= count; -#endif - t0 += t1; t1 <<= count; - s0 += s1; s1 <<= count; - } - else - { - v -= u; -#if USE_ZEROTAB - count = zerotab [v & 0x3f]; - v >>= count; - if (UNLIKELY (count == 6)) - { - unsigned c; - do - { - c = zerotab[v & 0x3f]; - v >>= c; - count += c; - } - while (c == 6); - } -#else - count_trailing_zeros (count, v); - v >>= count; -#endif - t1 += t0; t0 <<= count; - s1 += s0; s0 <<= count; - } - shift += count; - } -#else -# if GCDEXT_1_BINARY_METHOD == 2 - u >>= 1; - v >>= 1; - - det_sign = 0; - - while (u != v) - { - unsigned count; - mp_limb_t d = u - v; - mp_limb_t vgtu = LIMB_HIGHBIT_TO_MASK (d); - mp_limb_t sx; - mp_limb_t tx; - - /* When v <= u (vgtu == 0), the updates are: - - (u; v) <-- ( (u - v) >> count; v) (det = +(1<<count) for corr. M factor) - (t1, t0) <-- (t1 << count, t0 + t1) - - and when v > 0, the updates are - - (u; v) <-- ( (v - u) >> count; u) (det = -(1<<count)) - (t1, t0) <-- (t0 << count, t0 + t1) - - and similarly for s1, s0 - */ - - /* v <-- min (u, v) */ - v += (vgtu & d); - - /* u <-- |u - v| */ - u = (d ^ vgtu) - vgtu; - - /* Number of trailing zeros is the same no matter if we look at - * d or u, but using d gives more parallelism. */ -#if USE_ZEROTAB - count = zerotab[d & 0x3f]; - if (UNLIKELY (count == 6)) - { - unsigned c = 6; - do - { - d >>= c; - c = zerotab[d & 0x3f]; - count += c; - } - while (c == 6); - } -#else - count_trailing_zeros (count, d); -#endif - det_sign ^= vgtu; - - tx = vgtu & (t0 - t1); - sx = vgtu & (s0 - s1); - t0 += t1; - s0 += s1; - t1 += tx; - s1 += sx; - - count++; - u >>= count; - t1 <<= count; - s1 <<= count; - shift += count; - } - u = (u << 1) + 1; -# else /* GCDEXT_1_BINARY_METHOD == 2 */ -# error Unknown GCDEXT_1_BINARY_METHOD -# endif -#endif - - /* Now u = v = g = gcd (u,v). Compute U/g and V/g */ - ug = t0 + t1; - vg = s0 + s1; - - ugh = ug/2 + (ug & 1); - vgh = vg/2 + (vg & 1); - - /* Now ±2^{shift} g = s0 U - t0 V. Get rid of the power of two, using - s0 U - t0 V = (s0 + V/g) U - (t0 + U/g) V. */ - for (i = 0; i < shift; i++) - { - mp_limb_t mask = - ( (s0 | t0) & 1); - - s0 /= 2; - t0 /= 2; - s0 += mask & vgh; - t0 += mask & ugh; - } - /* FIXME: Try simplifying this condition. */ - if ( (s0 > 1 && 2*s0 >= vg) || (t0 > 1 && 2*t0 >= ug) ) - { - s0 -= vg; - t0 -= ug; - } -#if GCDEXT_1_BINARY_METHOD == 2 - /* Conditional negation. */ - s0 = (s0 ^ det_sign) - det_sign; - t0 = (t0 ^ det_sign) - det_sign; -#endif - *sp = s0; - *tp = -t0; - - return u << zero_bits; -} - -#else /* !GCDEXT_1_USE_BINARY */ - - -/* FIXME: Takes two single-word limbs. It could be extended to a - * function that accepts a bignum for the first input, and only - * returns the first co-factor. */ - -mp_limb_t -mpn_gcdext_1 (mp_limb_signed_t *up, mp_limb_signed_t *vp, - mp_limb_t a, mp_limb_t b) -{ - /* Maintain - - a = u0 A + v0 B - b = u1 A + v1 B - - where A, B are the original inputs. - */ - mp_limb_signed_t u0 = 1; - mp_limb_signed_t v0 = 0; - mp_limb_signed_t u1 = 0; - mp_limb_signed_t v1 = 1; - - ASSERT (a > 0); - ASSERT (b > 0); - - if (a < b) - goto divide_by_b; - - for (;;) - { - mp_limb_t q; - - q = a / b; - a -= q * b; - - if (a == 0) - { - *up = u1; - *vp = v1; - return b; - } - u0 -= q * u1; - v0 -= q * v1; - - divide_by_b: - q = b / a; - b -= q * a; - - if (b == 0) - { - *up = u0; - *vp = v0; - return a; - } - u1 -= q * u0; - v1 -= q * v0; - } -} -#endif /* !GCDEXT_1_USE_BINARY */ diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcdext_lehmer.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcdext_lehmer.c deleted file mode 100644 index 547f69a40984e57948e35ca3237d5d43801eda27..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gcdext_lehmer.c +++ /dev/null @@ -1,337 +0,0 @@ -/* mpn_gcdext -- Extended Greatest Common Divisor. - -Copyright 1996, 1998, 2000-2005, 2008, 2009, 2012 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Here, d is the index of the cofactor to update. FIXME: Could use qn - = 0 for the common case q = 1. */ -void -mpn_gcdext_hook (void *p, mp_srcptr gp, mp_size_t gn, - mp_srcptr qp, mp_size_t qn, int d) -{ - struct gcdext_ctx *ctx = (struct gcdext_ctx *) p; - mp_size_t un = ctx->un; - - if (gp) - { - mp_srcptr up; - - ASSERT (gn > 0); - ASSERT (gp[gn-1] > 0); - - MPN_COPY (ctx->gp, gp, gn); - ctx->gn = gn; - - if (d < 0) - { - int c; - - /* Must return the smallest cofactor, +u1 or -u0 */ - MPN_CMP (c, ctx->u0, ctx->u1, un); - ASSERT (c != 0 || (un == 1 && ctx->u0[0] == 1 && ctx->u1[0] == 1)); - - d = c < 0; - } - - up = d ? ctx->u0 : ctx->u1; - - MPN_NORMALIZE (up, un); - MPN_COPY (ctx->up, up, un); - - *ctx->usize = d ? -un : un; - } - else - { - mp_limb_t cy; - mp_ptr u0 = ctx->u0; - mp_ptr u1 = ctx->u1; - - ASSERT (d >= 0); - - if (d) - MP_PTR_SWAP (u0, u1); - - qn -= (qp[qn-1] == 0); - - /* Update u0 += q * u1 */ - if (qn == 1) - { - mp_limb_t q = qp[0]; - - if (q == 1) - /* A common case. */ - cy = mpn_add_n (u0, u0, u1, un); - else - cy = mpn_addmul_1 (u0, u1, un, q); - } - else - { - mp_size_t u1n; - mp_ptr tp; - - u1n = un; - MPN_NORMALIZE (u1, u1n); - - if (u1n == 0) - return; - - /* Should always have u1n == un here, and u1 >= u0. The - reason is that we alternate adding u0 to u1 and u1 to u0 - (corresponding to subtractions a - b and b - a), and we - can get a large quotient only just after a switch, which - means that we'll add (a multiple of) the larger u to the - smaller. */ - - tp = ctx->tp; - - if (qn > u1n) - mpn_mul (tp, qp, qn, u1, u1n); - else - mpn_mul (tp, u1, u1n, qp, qn); - - u1n += qn; - u1n -= tp[u1n-1] == 0; - - if (u1n >= un) - { - cy = mpn_add (u0, tp, u1n, u0, un); - un = u1n; - } - else - /* Note: Unlikely case, maybe never happens? */ - cy = mpn_add (u0, u0, un, tp, u1n); - - } - u0[un] = cy; - ctx->un = un + (cy > 0); - } -} - -/* Temporary storage: 3*(n+1) for u. If hgcd2 succeeds, we need n for - the matrix-vector multiplication adjusting a, b. If hgcd fails, we - need at most n for the quotient and n+1 for the u update (reusing - the extra u). In all, 4n + 3. */ - -mp_size_t -mpn_gcdext_lehmer_n (mp_ptr gp, mp_ptr up, mp_size_t *usize, - mp_ptr ap, mp_ptr bp, mp_size_t n, - mp_ptr tp) -{ - mp_size_t ualloc = n + 1; - - /* Keeps track of the second row of the reduction matrix - * - * M = (v0, v1 ; u0, u1) - * - * which correspond to the first column of the inverse - * - * M^{-1} = (u1, -v1; -u0, v0) - * - * This implies that - * - * a = u1 A (mod B) - * b = -u0 A (mod B) - * - * where A, B denotes the input values. - */ - - struct gcdext_ctx ctx; - mp_size_t un; - mp_ptr u0; - mp_ptr u1; - mp_ptr u2; - - MPN_ZERO (tp, 3*ualloc); - u0 = tp; tp += ualloc; - u1 = tp; tp += ualloc; - u2 = tp; tp += ualloc; - - u1[0] = 1; un = 1; - - ctx.gp = gp; - ctx.up = up; - ctx.usize = usize; - - /* FIXME: Handle n == 2 differently, after the loop? */ - while (n >= 2) - { - struct hgcd_matrix1 M; - mp_limb_t ah, al, bh, bl; - mp_limb_t mask; - - mask = ap[n-1] | bp[n-1]; - ASSERT (mask > 0); - - if (mask & GMP_NUMB_HIGHBIT) - { - ah = ap[n-1]; al = ap[n-2]; - bh = bp[n-1]; bl = bp[n-2]; - } - else if (n == 2) - { - /* We use the full inputs without truncation, so we can - safely shift left. */ - int shift; - - count_leading_zeros (shift, mask); - ah = MPN_EXTRACT_NUMB (shift, ap[1], ap[0]); - al = ap[0] << shift; - bh = MPN_EXTRACT_NUMB (shift, bp[1], bp[0]); - bl = bp[0] << shift; - } - else - { - int shift; - - count_leading_zeros (shift, mask); - ah = MPN_EXTRACT_NUMB (shift, ap[n-1], ap[n-2]); - al = MPN_EXTRACT_NUMB (shift, ap[n-2], ap[n-3]); - bh = MPN_EXTRACT_NUMB (shift, bp[n-1], bp[n-2]); - bl = MPN_EXTRACT_NUMB (shift, bp[n-2], bp[n-3]); - } - - /* Try an mpn_nhgcd2 step */ - if (mpn_hgcd2 (ah, al, bh, bl, &M)) - { - n = mpn_matrix22_mul1_inverse_vector (&M, tp, ap, bp, n); - MP_PTR_SWAP (ap, tp); - un = mpn_hgcd_mul_matrix1_vector(&M, u2, u0, u1, un); - MP_PTR_SWAP (u0, u2); - } - else - { - /* mpn_hgcd2 has failed. Then either one of a or b is very - small, or the difference is very small. Perform one - subtraction followed by one division. */ - ctx.u0 = u0; - ctx.u1 = u1; - ctx.tp = u2; - ctx.un = un; - - /* Temporary storage n for the quotient and ualloc for the - new cofactor. */ - n = mpn_gcd_subdiv_step (ap, bp, n, 0, mpn_gcdext_hook, &ctx, tp); - if (n == 0) - return ctx.gn; - - un = ctx.un; - } - } - ASSERT_ALWAYS (ap[0] > 0); - ASSERT_ALWAYS (bp[0] > 0); - - if (ap[0] == bp[0]) - { - int c; - - /* Which cofactor to return now? Candidates are +u1 and -u0, - depending on which of a and b was most recently reduced, - which we don't keep track of. So compare and get the smallest - one. */ - - gp[0] = ap[0]; - - MPN_CMP (c, u0, u1, un); - ASSERT (c != 0 || (un == 1 && u0[0] == 1 && u1[0] == 1)); - if (c < 0) - { - MPN_NORMALIZE (u0, un); - MPN_COPY (up, u0, un); - *usize = -un; - } - else - { - MPN_NORMALIZE_NOT_ZERO (u1, un); - MPN_COPY (up, u1, un); - *usize = un; - } - return 1; - } - else - { - mp_limb_t uh, vh; - mp_limb_signed_t u; - mp_limb_signed_t v; - int negate; - - gp[0] = mpn_gcdext_1 (&u, &v, ap[0], bp[0]); - - /* Set up = u u1 - v u0. Keep track of size, un grows by one or - two limbs. */ - - if (u == 0) - { - ASSERT (v == 1); - MPN_NORMALIZE (u0, un); - MPN_COPY (up, u0, un); - *usize = -un; - return 1; - } - else if (v == 0) - { - ASSERT (u == 1); - MPN_NORMALIZE (u1, un); - MPN_COPY (up, u1, un); - *usize = un; - return 1; - } - else if (u > 0) - { - negate = 0; - ASSERT (v < 0); - v = -v; - } - else - { - negate = 1; - ASSERT (v > 0); - u = -u; - } - - uh = mpn_mul_1 (up, u1, un, u); - vh = mpn_addmul_1 (up, u0, un, v); - - if ( (uh | vh) > 0) - { - uh += vh; - up[un++] = uh; - if (uh < vh) - up[un++] = 1; - } - - MPN_NORMALIZE_NOT_ZERO (up, un); - - *usize = negate ? -un : un; - return 1; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/get_d.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/get_d.c deleted file mode 100644 index d73d314856c19c0d37fb0f2ddb5ca17bf1ef6d96..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/get_d.c +++ /dev/null @@ -1,412 +0,0 @@ -/* mpn_get_d -- limbs to double conversion. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2003, 2004, 2007, 2009, 2010, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef _GMP_IEEE_FLOATS -#define _GMP_IEEE_FLOATS 0 -#endif - -/* To force use of the generic C code for testing, put - "#define _GMP_IEEE_FLOATS 0" at this point. */ - - -/* In alpha gcc prior to 3.4, signed DI comparisons involving constants are - rearranged from "x < n" to "x+(-n) < 0", which is of course hopelessly - wrong if that addition overflows. - - The workaround here avoids this bug by ensuring n is not a literal constant. - Note that this is alpha specific. The offending transformation is/was in - alpha.c alpha_emit_conditional_branch() under "We want to use cmpcc/bcc". - - Bizarrely, this happens also with Cray cc on alphaev5-cray-unicosmk2.0.6.X, - and has the same solution. Don't know why or how. */ - -#if HAVE_HOST_CPU_FAMILY_alpha \ - && ((defined (__GNUC__) && ! __GMP_GNUC_PREREQ(3,4)) \ - || defined (_CRAY)) -static volatile const long CONST_1024 = 1024; -static volatile const long CONST_NEG_1023 = -1023; -static volatile const long CONST_NEG_1022_SUB_53 = -1022 - 53; -#else -#define CONST_1024 (1024) -#define CONST_NEG_1023 (-1023) -#define CONST_NEG_1022_SUB_53 (-1022 - 53) -#endif - - -/* Return the value {ptr,size}*2^exp, and negative if sign<0. Must have - size>=1, and a non-zero high limb ptr[size-1]. - - When we know the fp format, the result is truncated towards zero. This is - consistent with other gmp conversions, like mpz_set_f or mpz_set_q, and is - easy to implement and test. - - When we do not know the format, such truncation seems much harder. One - would need to defeat any rounding mode, including round-up. - - It's felt that GMP is not primarily concerned with hardware floats, and - really isn't enhanced by getting involved with hardware rounding modes - (which could even be some weird unknown style), so something unambiguous and - straightforward is best. - - - The IEEE code below is the usual case, it knows either a 32-bit or 64-bit - limb and is done with shifts and masks. The 64-bit case in particular - should come out nice and compact. - - The generic code used to work one bit at a time, which was not only slow, - but implicitly relied upon denorms for intermediates, since the lowest bits' - weight of a perfectly valid fp number underflows in non-denorm. Therefore, - the generic code now works limb-per-limb, initially creating a number x such - that 1 <= x <= BASE. (BASE is reached only as result of rounding.) Then - x's exponent is scaled with explicit code (not ldexp to avoid libm - dependency). It is a tap-dance to avoid underflow or overflow, beware! - - - Traps: - - Hardware traps for overflow to infinity, underflow to zero, or unsupported - denorms may or may not be taken. The IEEE code works bitwise and so - probably won't trigger them, the generic code works by float operations and - so probably will. This difference might be thought less than ideal, but - again its felt straightforward code is better than trying to get intimate - with hardware exceptions (of perhaps unknown nature). - - - Not done: - - mpz_get_d in the past handled size==1 with a cast limb->double. This might - still be worthwhile there (for up to the mantissa many bits), but for - mpn_get_d here, the cost of applying "exp" to the resulting exponent would - probably use up any benefit a cast may have over bit twiddling. Also, if - the exponent is pushed into denorm range then bit twiddling is the only - option, to ensure the desired truncation is obtained. - - - Other: - - For reference, note that HPPA 8000, 8200, 8500 and 8600 trap FCNV,UDW,DBL - to the kernel for values >= 2^63. This makes it slow, and worse the kernel - Linux (what versions?) apparently uses untested code in its trap handling - routines, and gets the sign wrong. We don't use such a limb-to-double - cast, neither in the IEEE or generic code. */ - - - -#undef FORMAT_RECOGNIZED - -double -mpn_get_d (mp_srcptr up, mp_size_t size, mp_size_t sign, long exp) -{ - int lshift, nbits; - mp_limb_t x, mhi, mlo; - - ASSERT (size >= 0); - ASSERT_MPN (up, size); - ASSERT (size == 0 || up[size-1] != 0); - - if (size == 0) - return 0.0; - - /* Adjust exp to a radix point just above {up,size}, guarding against - overflow. After this exp can of course be reduced to anywhere within - the {up,size} region without underflow. */ - if (UNLIKELY ((unsigned long) (GMP_NUMB_BITS * size) - > ((unsigned long) LONG_MAX - exp))) - { -#if _GMP_IEEE_FLOATS - goto ieee_infinity; -#endif - - /* generic */ - exp = LONG_MAX; - } - else - { - exp += GMP_NUMB_BITS * size; - } - -#if _GMP_IEEE_FLOATS - { - union ieee_double_extract u; - - up += size; - -#if GMP_LIMB_BITS == 64 - mlo = up[-1]; - count_leading_zeros (lshift, mlo); - - exp -= (lshift - GMP_NAIL_BITS) + 1; - mlo <<= lshift; - - nbits = GMP_LIMB_BITS - lshift; - - if (nbits < 53 && size > 1) - { - x = up[-2]; - x <<= GMP_NAIL_BITS; - x >>= nbits; - mlo |= x; - nbits += GMP_NUMB_BITS; - - if (LIMBS_PER_DOUBLE >= 3 && nbits < 53 && size > 2) - { - x = up[-3]; - x <<= GMP_NAIL_BITS; - x >>= nbits; - mlo |= x; - nbits += GMP_NUMB_BITS; - } - } - mhi = mlo >> (32 + 11); - mlo = mlo >> 11; /* later implicitly truncated to 32 bits */ -#endif -#if GMP_LIMB_BITS == 32 - x = *--up; - count_leading_zeros (lshift, x); - - exp -= (lshift - GMP_NAIL_BITS) + 1; - x <<= lshift; - mhi = x >> 11; - - if (lshift < 11) /* FIXME: never true if NUMB < 20 bits */ - { - /* All 20 bits in mhi */ - mlo = x << 21; - /* >= 1 bit in mlo */ - nbits = GMP_LIMB_BITS - lshift - 21; - } - else - { - if (size > 1) - { - nbits = GMP_LIMB_BITS - lshift; - - x = *--up, size--; - x <<= GMP_NAIL_BITS; - mhi |= x >> nbits >> 11; - - mlo = x << GMP_LIMB_BITS - nbits - 11; - nbits = nbits + 11 - GMP_NAIL_BITS; - } - else - { - mlo = 0; - goto done; - } - } - - /* Now all needed bits in mhi have been accumulated. Add bits to mlo. */ - - if (LIMBS_PER_DOUBLE >= 2 && nbits < 32 && size > 1) - { - x = up[-1]; - x <<= GMP_NAIL_BITS; - x >>= nbits; - mlo |= x; - nbits += GMP_NUMB_BITS; - - if (LIMBS_PER_DOUBLE >= 3 && nbits < 32 && size > 2) - { - x = up[-2]; - x <<= GMP_NAIL_BITS; - x >>= nbits; - mlo |= x; - nbits += GMP_NUMB_BITS; - - if (LIMBS_PER_DOUBLE >= 4 && nbits < 32 && size > 3) - { - x = up[-3]; - x <<= GMP_NAIL_BITS; - x >>= nbits; - mlo |= x; - nbits += GMP_NUMB_BITS; - } - } - } - - done:; - -#endif - if (UNLIKELY (exp >= CONST_1024)) - { - /* overflow, return infinity */ - ieee_infinity: - mhi = 0; - mlo = 0; - exp = 1024; - } - else if (UNLIKELY (exp <= CONST_NEG_1023)) - { - int rshift; - - if (LIKELY (exp <= CONST_NEG_1022_SUB_53)) - return 0.0; /* denorm underflows to zero */ - - rshift = -1022 - exp; - ASSERT (rshift > 0 && rshift < 53); -#if GMP_LIMB_BITS > 53 - mlo >>= rshift; - mhi = mlo >> 32; -#else - if (rshift >= 32) - { - mlo = mhi; - mhi = 0; - rshift -= 32; - } - lshift = GMP_LIMB_BITS - rshift; - mlo = (mlo >> rshift) | (rshift == 0 ? 0 : mhi << lshift); - mhi >>= rshift; -#endif - exp = -1023; - } - u.s.manh = mhi; - u.s.manl = mlo; - u.s.exp = exp + 1023; - u.s.sig = (sign < 0); - return u.d; - } -#define FORMAT_RECOGNIZED 1 -#endif - -#if HAVE_DOUBLE_VAX_D - { - union double_extract u; - - up += size; - - mhi = up[-1]; - - count_leading_zeros (lshift, mhi); - exp -= lshift; - mhi <<= lshift; - - mlo = 0; - if (size > 1) - { - mlo = up[-2]; - if (lshift != 0) - mhi += mlo >> (GMP_LIMB_BITS - lshift); - mlo <<= lshift; - - if (size > 2 && lshift > 8) - { - x = up[-3]; - mlo += x >> (GMP_LIMB_BITS - lshift); - } - } - - if (UNLIKELY (exp >= 128)) - { - /* overflow, return maximum number */ - mhi = 0xffffffff; - mlo = 0xffffffff; - exp = 127; - } - else if (UNLIKELY (exp < -128)) - { - return 0.0; /* underflows to zero */ - } - - u.s.man3 = mhi >> 24; /* drop msb, since implicit */ - u.s.man2 = mhi >> 8; - u.s.man1 = (mhi << 8) + (mlo >> 24); - u.s.man0 = mlo >> 8; - u.s.exp = exp + 128; - u.s.sig = sign < 0; - return u.d; - } -#define FORMAT_RECOGNIZED 1 -#endif - -#if ! FORMAT_RECOGNIZED - { /* Non-IEEE or strange limb size, do something generic. */ - mp_size_t i; - double d, weight; - unsigned long uexp; - - /* First generate an fp number disregarding exp, instead keeping things - within the numb base factor from 1, which should prevent overflow and - underflow even for the most exponent limited fp formats. The - termination criteria should be refined, since we now include too many - limbs. */ - weight = 1/MP_BASE_AS_DOUBLE; - d = up[size - 1]; - for (i = size - 2; i >= 0; i--) - { - d += up[i] * weight; - weight /= MP_BASE_AS_DOUBLE; - if (weight == 0) - break; - } - - /* Now apply exp. */ - exp -= GMP_NUMB_BITS; - if (exp > 0) - { - weight = 2.0; - uexp = exp; - } - else - { - weight = 0.5; - uexp = 1 - (unsigned long) (exp + 1); - } -#if 1 - /* Square-and-multiply exponentiation. */ - if (uexp & 1) - d *= weight; - while (uexp >>= 1) - { - weight *= weight; - if (uexp & 1) - d *= weight; - } -#else - /* Plain exponentiation. */ - while (uexp > 0) - { - d *= weight; - uexp--; - } -#endif - - return sign >= 0 ? d : -d; - } -#endif -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/get_str.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/get_str.c deleted file mode 100644 index 42e93c9cee41119cb5f1adfa736aa87f8fd1c2a9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/get_str.c +++ /dev/null @@ -1,553 +0,0 @@ -/* mpn_get_str -- Convert {UP,USIZE} to a base BASE string in STR. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE, EXCEPT mpn_get_str, ARE INTERNAL WITH A MUTABLE - INTERFACE. IT IS ONLY SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN - FACT, IT IS ALMOST GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE - GNU MP RELEASE. - -Copyright 1991-1994, 1996, 2000-2002, 2004, 2006-2008, 2011, 2012 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Conversion of U {up,un} to a string in base b. Internally, we convert to - base B = b^m, the largest power of b that fits a limb. Basic algorithms: - - A) Divide U repeatedly by B, generating a quotient and remainder, until the - quotient becomes zero. The remainders hold the converted digits. Digits - come out from right to left. (Used in mpn_sb_get_str.) - - B) Divide U by b^g, for g such that 1/b <= U/b^g < 1, generating a fraction. - Then develop digits by multiplying the fraction repeatedly by b. Digits - come out from left to right. (Currently not used herein, except for in - code for converting single limbs to individual digits.) - - C) Compute B^1, B^2, B^4, ..., B^s, for s such that B^s is just above - sqrt(U). Then divide U by B^s, generating quotient and remainder. - Recursively convert the quotient, then the remainder, using the - precomputed powers. Digits come out from left to right. (Used in - mpn_dc_get_str.) - - When using algorithm C, algorithm B might be suitable for basecase code, - since the required b^g power will be readily accessible. - - Optimization ideas: - 1. The recursive function of (C) could use less temporary memory. The powtab - allocation could be trimmed with some computation, and the tmp area could - be reduced, or perhaps eliminated if up is reused for both quotient and - remainder (it is currently used just for remainder). - 2. Store the powers of (C) in normalized form, with the normalization count. - Quotients will usually need to be left-shifted before each divide, and - remainders will either need to be left-shifted of right-shifted. - 3. In the code for developing digits from a single limb, we could avoid using - a full umul_ppmm except for the first (or first few) digits, provided base - is even. Subsequent digits can be developed using plain multiplication. - (This saves on register-starved machines (read x86) and on all machines - that generate the upper product half using a separate instruction (alpha, - powerpc, IA-64) or lacks such support altogether (sparc64, hppa64). - 4. Separate mpn_dc_get_str basecase code from code for small conversions. The - former code will have the exact right power readily available in the - powtab parameter for dividing the current number into a fraction. Convert - that using algorithm B. - 5. Completely avoid division. Compute the inverses of the powers now in - powtab instead of the actual powers. - 6. Decrease powtab allocation for even bases. E.g. for base 10 we could save - about 30% (1-log(5)/log(10)). - - Basic structure of (C): - mpn_get_str: - if POW2_P (n) - ... - else - if (un < GET_STR_PRECOMPUTE_THRESHOLD) - mpn_sb_get_str (str, base, up, un); - else - precompute_power_tables - mpn_dc_get_str - - mpn_dc_get_str: - mpn_tdiv_qr - if (qn < GET_STR_DC_THRESHOLD) - mpn_sb_get_str - else - mpn_dc_get_str - if (rn < GET_STR_DC_THRESHOLD) - mpn_sb_get_str - else - mpn_dc_get_str - - - The reason for the two threshold values is the cost of - precompute_power_tables. GET_STR_PRECOMPUTE_THRESHOLD will be considerably - larger than GET_STR_PRECOMPUTE_THRESHOLD. */ - - -/* The x86s and m68020 have a quotient and remainder "div" instruction and - gcc recognises an adjacent "/" and "%" can be combined using that. - Elsewhere "/" and "%" are either separate instructions, or separate - libgcc calls (which unfortunately gcc as of version 3.0 doesn't combine). - A multiply and subtract should be faster than a "%" in those cases. */ -#if HAVE_HOST_CPU_FAMILY_x86 \ - || HAVE_HOST_CPU_m68020 \ - || HAVE_HOST_CPU_m68030 \ - || HAVE_HOST_CPU_m68040 \ - || HAVE_HOST_CPU_m68060 \ - || HAVE_HOST_CPU_m68360 /* CPU32 */ -#define udiv_qrnd_unnorm(q,r,n,d) \ - do { \ - mp_limb_t __q = (n) / (d); \ - mp_limb_t __r = (n) % (d); \ - (q) = __q; \ - (r) = __r; \ - } while (0) -#else -#define udiv_qrnd_unnorm(q,r,n,d) \ - do { \ - mp_limb_t __q = (n) / (d); \ - mp_limb_t __r = (n) - __q*(d); \ - (q) = __q; \ - (r) = __r; \ - } while (0) -#endif - - -/* Convert {up,un} to a string in base base, and put the result in str. - Generate len characters, possibly padding with zeros to the left. If len is - zero, generate as many characters as required. Return a pointer immediately - after the last digit of the result string. Complexity is O(un^2); intended - for small conversions. */ -static unsigned char * -mpn_sb_get_str (unsigned char *str, size_t len, - mp_ptr up, mp_size_t un, int base) -{ - mp_limb_t rl, ul; - unsigned char *s; - size_t l; - /* Allocate memory for largest possible string, given that we only get here - for operands with un < GET_STR_PRECOMPUTE_THRESHOLD and that the smallest - base is 3. 7/11 is an approximation to 1/log2(3). */ -#if TUNE_PROGRAM_BUILD -#define BUF_ALLOC (GET_STR_THRESHOLD_LIMIT * GMP_LIMB_BITS * 7 / 11) -#else -#define BUF_ALLOC (GET_STR_PRECOMPUTE_THRESHOLD * GMP_LIMB_BITS * 7 / 11) -#endif - unsigned char buf[BUF_ALLOC]; -#if TUNE_PROGRAM_BUILD - mp_limb_t rp[GET_STR_THRESHOLD_LIMIT]; -#else - mp_limb_t rp[GET_STR_PRECOMPUTE_THRESHOLD]; -#endif - - if (base == 10) - { - /* Special case code for base==10 so that the compiler has a chance to - optimize things. */ - - MPN_COPY (rp + 1, up, un); - - s = buf + BUF_ALLOC; - while (un > 1) - { - int i; - mp_limb_t frac, digit; - MPN_DIVREM_OR_PREINV_DIVREM_1 (rp, (mp_size_t) 1, rp + 1, un, - MP_BASES_BIG_BASE_10, - MP_BASES_BIG_BASE_INVERTED_10, - MP_BASES_NORMALIZATION_STEPS_10); - un -= rp[un] == 0; - frac = (rp[0] + 1) << GMP_NAIL_BITS; - s -= MP_BASES_CHARS_PER_LIMB_10; -#if HAVE_HOST_CPU_FAMILY_x86 - /* The code below turns out to be a bit slower for x86 using gcc. - Use plain code. */ - i = MP_BASES_CHARS_PER_LIMB_10; - do - { - umul_ppmm (digit, frac, frac, 10); - *s++ = digit; - } - while (--i); -#else - /* Use the fact that 10 in binary is 1010, with the lowest bit 0. - After a few umul_ppmm, we will have accumulated enough low zeros - to use a plain multiply. */ - if (MP_BASES_NORMALIZATION_STEPS_10 == 0) - { - umul_ppmm (digit, frac, frac, 10); - *s++ = digit; - } - if (MP_BASES_NORMALIZATION_STEPS_10 <= 1) - { - umul_ppmm (digit, frac, frac, 10); - *s++ = digit; - } - if (MP_BASES_NORMALIZATION_STEPS_10 <= 2) - { - umul_ppmm (digit, frac, frac, 10); - *s++ = digit; - } - if (MP_BASES_NORMALIZATION_STEPS_10 <= 3) - { - umul_ppmm (digit, frac, frac, 10); - *s++ = digit; - } - i = (MP_BASES_CHARS_PER_LIMB_10 - ((MP_BASES_NORMALIZATION_STEPS_10 < 4) - ? (4-MP_BASES_NORMALIZATION_STEPS_10) - : 0)); - frac = (frac + 0xf) >> 4; - do - { - frac *= 10; - digit = frac >> (GMP_LIMB_BITS - 4); - *s++ = digit; - frac &= (~(mp_limb_t) 0) >> 4; - } - while (--i); -#endif - s -= MP_BASES_CHARS_PER_LIMB_10; - } - - ul = rp[1]; - while (ul != 0) - { - udiv_qrnd_unnorm (ul, rl, ul, 10); - *--s = rl; - } - } - else /* not base 10 */ - { - unsigned chars_per_limb; - mp_limb_t big_base, big_base_inverted; - unsigned normalization_steps; - - chars_per_limb = mp_bases[base].chars_per_limb; - big_base = mp_bases[base].big_base; - big_base_inverted = mp_bases[base].big_base_inverted; - count_leading_zeros (normalization_steps, big_base); - - MPN_COPY (rp + 1, up, un); - - s = buf + BUF_ALLOC; - while (un > 1) - { - int i; - mp_limb_t frac; - MPN_DIVREM_OR_PREINV_DIVREM_1 (rp, (mp_size_t) 1, rp + 1, un, - big_base, big_base_inverted, - normalization_steps); - un -= rp[un] == 0; - frac = (rp[0] + 1) << GMP_NAIL_BITS; - s -= chars_per_limb; - i = chars_per_limb; - do - { - mp_limb_t digit; - umul_ppmm (digit, frac, frac, base); - *s++ = digit; - } - while (--i); - s -= chars_per_limb; - } - - ul = rp[1]; - while (ul != 0) - { - udiv_qrnd_unnorm (ul, rl, ul, base); - *--s = rl; - } - } - - l = buf + BUF_ALLOC - s; - while (l < len) - { - *str++ = 0; - len--; - } - while (l != 0) - { - *str++ = *s++; - l--; - } - return str; -} - - -/* Convert {UP,UN} to a string with a base as represented in POWTAB, and put - the string in STR. Generate LEN characters, possibly padding with zeros to - the left. If LEN is zero, generate as many characters as required. - Return a pointer immediately after the last digit of the result string. - This uses divide-and-conquer and is intended for large conversions. */ -static unsigned char * -mpn_dc_get_str (unsigned char *str, size_t len, - mp_ptr up, mp_size_t un, - const powers_t *powtab, mp_ptr tmp) -{ - if (BELOW_THRESHOLD (un, GET_STR_DC_THRESHOLD)) - { - if (un != 0) - str = mpn_sb_get_str (str, len, up, un, powtab->base); - else - { - while (len != 0) - { - *str++ = 0; - len--; - } - } - } - else - { - mp_ptr pwp, qp, rp; - mp_size_t pwn, qn; - mp_size_t sn; - - pwp = powtab->p; - pwn = powtab->n; - sn = powtab->shift; - - if (un < pwn + sn || (un == pwn + sn && mpn_cmp (up + sn, pwp, un - sn) < 0)) - { - str = mpn_dc_get_str (str, len, up, un, powtab - 1, tmp); - } - else - { - qp = tmp; /* (un - pwn + 1) limbs for qp */ - rp = up; /* pwn limbs for rp; overwrite up area */ - - mpn_tdiv_qr (qp, rp + sn, 0L, up + sn, un - sn, pwp, pwn); - qn = un - sn - pwn; qn += qp[qn] != 0; /* quotient size */ - - ASSERT (qn < pwn + sn || (qn == pwn + sn && mpn_cmp (qp + sn, pwp, pwn) < 0)); - - if (len != 0) - len = len - powtab->digits_in_base; - - str = mpn_dc_get_str (str, len, qp, qn, powtab - 1, tmp + qn); - str = mpn_dc_get_str (str, powtab->digits_in_base, rp, pwn + sn, powtab - 1, tmp); - } - } - return str; -} - - -/* There are no leading zeros on the digits generated at str, but that's not - currently a documented feature. The current mpz_out_str and mpz_get_str - rely on it. */ - -size_t -mpn_get_str (unsigned char *str, int base, mp_ptr up, mp_size_t un) -{ - mp_ptr powtab_mem, powtab_mem_ptr; - mp_limb_t big_base; - size_t digits_in_base; - powers_t powtab[GMP_LIMB_BITS]; - int pi; - mp_size_t n; - mp_ptr p, t; - size_t out_len; - mp_ptr tmp; - TMP_DECL; - - /* Special case zero, as the code below doesn't handle it. */ - if (un == 0) - { - str[0] = 0; - return 1; - } - - if (POW2_P (base)) - { - /* The base is a power of 2. Convert from most significant end. */ - mp_limb_t n1, n0; - int bits_per_digit = mp_bases[base].big_base; - int cnt; - int bit_pos; - mp_size_t i; - unsigned char *s = str; - mp_bitcnt_t bits; - - n1 = up[un - 1]; - count_leading_zeros (cnt, n1); - - /* BIT_POS should be R when input ends in least significant nibble, - R + bits_per_digit * n when input ends in nth least significant - nibble. */ - - bits = (mp_bitcnt_t) GMP_NUMB_BITS * un - cnt + GMP_NAIL_BITS; - cnt = bits % bits_per_digit; - if (cnt != 0) - bits += bits_per_digit - cnt; - bit_pos = bits - (mp_bitcnt_t) (un - 1) * GMP_NUMB_BITS; - - /* Fast loop for bit output. */ - i = un - 1; - for (;;) - { - bit_pos -= bits_per_digit; - while (bit_pos >= 0) - { - *s++ = (n1 >> bit_pos) & ((1 << bits_per_digit) - 1); - bit_pos -= bits_per_digit; - } - i--; - if (i < 0) - break; - n0 = (n1 << -bit_pos) & ((1 << bits_per_digit) - 1); - n1 = up[i]; - bit_pos += GMP_NUMB_BITS; - *s++ = n0 | (n1 >> bit_pos); - } - - return s - str; - } - - /* General case. The base is not a power of 2. */ - - if (BELOW_THRESHOLD (un, GET_STR_PRECOMPUTE_THRESHOLD)) - return mpn_sb_get_str (str, (size_t) 0, up, un, base) - str; - - TMP_MARK; - - /* Allocate one large block for the powers of big_base. */ - powtab_mem = TMP_BALLOC_LIMBS (mpn_dc_get_str_powtab_alloc (un)); - powtab_mem_ptr = powtab_mem; - - /* Compute a table of powers, were the largest power is >= sqrt(U). */ - - big_base = mp_bases[base].big_base; - digits_in_base = mp_bases[base].chars_per_limb; - - { - mp_size_t n_pows, xn, pn, exptab[GMP_LIMB_BITS], bexp; - mp_limb_t cy; - mp_size_t shift; - size_t ndig; - - DIGITS_IN_BASE_PER_LIMB (ndig, un, base); - xn = 1 + ndig / mp_bases[base].chars_per_limb; /* FIXME: scalar integer division */ - - n_pows = 0; - for (pn = xn; pn != 1; pn = (pn + 1) >> 1) - { - exptab[n_pows] = pn; - n_pows++; - } - exptab[n_pows] = 1; - - powtab[0].p = &big_base; - powtab[0].n = 1; - powtab[0].digits_in_base = digits_in_base; - powtab[0].base = base; - powtab[0].shift = 0; - - powtab[1].p = powtab_mem_ptr; powtab_mem_ptr += 2; - powtab[1].p[0] = big_base; - powtab[1].n = 1; - powtab[1].digits_in_base = digits_in_base; - powtab[1].base = base; - powtab[1].shift = 0; - - n = 1; - p = &big_base; - bexp = 1; - shift = 0; - for (pi = 2; pi < n_pows; pi++) - { - t = powtab_mem_ptr; - powtab_mem_ptr += 2 * n + 2; - - ASSERT_ALWAYS (powtab_mem_ptr < powtab_mem + mpn_dc_get_str_powtab_alloc (un)); - - mpn_sqr (t, p, n); - - digits_in_base *= 2; - n *= 2; n -= t[n - 1] == 0; - bexp *= 2; - - if (bexp + 1 < exptab[n_pows - pi]) - { - digits_in_base += mp_bases[base].chars_per_limb; - cy = mpn_mul_1 (t, t, n, big_base); - t[n] = cy; - n += cy != 0; - bexp += 1; - } - shift *= 2; - /* Strip low zero limbs. */ - while (t[0] == 0) - { - t++; - n--; - shift++; - } - p = t; - powtab[pi].p = p; - powtab[pi].n = n; - powtab[pi].digits_in_base = digits_in_base; - powtab[pi].base = base; - powtab[pi].shift = shift; - } - - for (pi = 1; pi < n_pows; pi++) - { - t = powtab[pi].p; - n = powtab[pi].n; - cy = mpn_mul_1 (t, t, n, big_base); - t[n] = cy; - n += cy != 0; - if (t[0] == 0) - { - powtab[pi].p = t + 1; - n--; - powtab[pi].shift++; - } - powtab[pi].n = n; - powtab[pi].digits_in_base += mp_bases[base].chars_per_limb; - } - -#if 0 - { int i; - printf ("Computed table values for base=%d, un=%d, xn=%d:\n", base, un, xn); - for (i = 0; i < n_pows; i++) - printf ("%2d: %10ld %10ld %11ld %ld\n", i, exptab[n_pows-i], powtab[i].n, powtab[i].digits_in_base, powtab[i].shift); - } -#endif - } - - /* Using our precomputed powers, now in powtab[], convert our number. */ - tmp = TMP_BALLOC_LIMBS (mpn_dc_get_str_itch (un)); - out_len = mpn_dc_get_str (str, 0, up, un, powtab + (pi - 1), tmp) - str; - TMP_FREE; - - return out_len; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gmp-mparam.h deleted file mode 100644 index 7dc057aa0c33d7befa22332ce434892098f9d0a4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/gmp-mparam.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Generic C gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -/* Values for GMP_LIMB_BITS etc will be determined by ./configure and put - in config.h. */ diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd.c deleted file mode 100644 index e27a9bdd8208eb5313fc0e41987fa2e0f7f84df3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd.c +++ /dev/null @@ -1,183 +0,0 @@ -/* hgcd.c. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2003-2005, 2008, 2011, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* Size analysis for hgcd: - - For the recursive calls, we have n1 <= ceil(n / 2). Then the - storage need is determined by the storage for the recursive call - computing M1, and hgcd_matrix_adjust and hgcd_matrix_mul calls that use M1 - (after this, the storage needed for M1 can be recycled). - - Let S(r) denote the required storage. For M1 we need 4 * (ceil(n1/2) + 1) - = 4 * (ceil(n/4) + 1), for the hgcd_matrix_adjust call, we need n + 2, - and for the hgcd_matrix_mul, we may need 3 ceil(n/2) + 8. In total, - 4 * ceil(n/4) + 3 ceil(n/2) + 12 <= 10 ceil(n/4) + 12. - - For the recursive call, we need S(n1) = S(ceil(n/2)). - - S(n) <= 10*ceil(n/4) + 12 + S(ceil(n/2)) - <= 10*(ceil(n/4) + ... + ceil(n/2^(1+k))) + 12k + S(ceil(n/2^k)) - <= 10*(2 ceil(n/4) + k) + 12k + S(ceil(n/2^k)) - <= 20 ceil(n/4) + 22k + S(ceil(n/2^k)) -*/ - -mp_size_t -mpn_hgcd_itch (mp_size_t n) -{ - unsigned k; - int count; - mp_size_t nscaled; - - if (BELOW_THRESHOLD (n, HGCD_THRESHOLD)) - return n; - - /* Get the recursion depth. */ - nscaled = (n - 1) / (HGCD_THRESHOLD - 1); - count_leading_zeros (count, nscaled); - k = GMP_LIMB_BITS - count; - - return 20 * ((n+3) / 4) + 22 * k + HGCD_THRESHOLD; -} - -/* Reduces a,b until |a-b| fits in n/2 + 1 limbs. Constructs matrix M - with elements of size at most (n+1)/2 - 1. Returns new size of a, - b, or zero if no reduction is possible. */ - -mp_size_t -mpn_hgcd (mp_ptr ap, mp_ptr bp, mp_size_t n, - struct hgcd_matrix *M, mp_ptr tp) -{ - mp_size_t s = n/2 + 1; - - mp_size_t nn; - int success = 0; - - if (n <= s) - /* Happens when n <= 2, a fairly uninteresting case but exercised - by the random inputs of the testsuite. */ - return 0; - - ASSERT ((ap[n-1] | bp[n-1]) > 0); - - ASSERT ((n+1)/2 - 1 < M->alloc); - - if (ABOVE_THRESHOLD (n, HGCD_THRESHOLD)) - { - mp_size_t n2 = (3*n)/4 + 1; - mp_size_t p = n/2; - - nn = mpn_hgcd_reduce (M, ap, bp, n, p, tp); - if (nn) - { - n = nn; - success = 1; - } - - /* NOTE: It appears this loop never runs more than once (at - least when not recursing to hgcd_appr). */ - while (n > n2) - { - /* Needs n + 1 storage */ - nn = mpn_hgcd_step (n, ap, bp, s, M, tp); - if (!nn) - return success ? n : 0; - - n = nn; - success = 1; - } - - if (n > s + 2) - { - struct hgcd_matrix M1; - mp_size_t scratch; - - p = 2*s - n + 1; - scratch = MPN_HGCD_MATRIX_INIT_ITCH (n-p); - - mpn_hgcd_matrix_init(&M1, n - p, tp); - - /* FIXME: Should use hgcd_reduce, but that may require more - scratch space, which requires review. */ - - nn = mpn_hgcd (ap + p, bp + p, n - p, &M1, tp + scratch); - if (nn > 0) - { - /* We always have max(M) > 2^{-(GMP_NUMB_BITS + 1)} max(M1) */ - ASSERT (M->n + 2 >= M1.n); - - /* Furthermore, assume M ends with a quotient (1, q; 0, 1), - then either q or q + 1 is a correct quotient, and M1 will - start with either (1, 0; 1, 1) or (2, 1; 1, 1). This - rules out the case that the size of M * M1 is much - smaller than the expected M->n + M1->n. */ - - ASSERT (M->n + M1.n < M->alloc); - - /* Needs 2 (p + M->n) <= 2 (2*s - n2 + 1 + n2 - s - 1) - = 2*s <= 2*(floor(n/2) + 1) <= n + 2. */ - n = mpn_hgcd_matrix_adjust (&M1, p + nn, ap, bp, p, tp + scratch); - - /* We need a bound for of M->n + M1.n. Let n be the original - input size. Then - - ceil(n/2) - 1 >= size of product >= M.n + M1.n - 2 - - and it follows that - - M.n + M1.n <= ceil(n/2) + 1 - - Then 3*(M.n + M1.n) + 5 <= 3 * ceil(n/2) + 8 is the - amount of needed scratch space. */ - mpn_hgcd_matrix_mul (M, &M1, tp + scratch); - success = 1; - } - } - } - - for (;;) - { - /* Needs s+3 < n */ - nn = mpn_hgcd_step (n, ap, bp, s, M, tp); - if (!nn) - return success ? n : 0; - - n = nn; - success = 1; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd2.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd2.c deleted file mode 100644 index 129637063f935e334ef008c568219803031ab354..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd2.c +++ /dev/null @@ -1,447 +0,0 @@ -/* hgcd2.c - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 1996, 1998, 2000-2004, 2008, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#if GMP_NAIL_BITS == 0 - -/* Copied from the old mpn/generic/gcdext.c, and modified slightly to return - the remainder. */ - -/* Single-limb division optimized for small quotients. */ -static inline mp_limb_t -div1 (mp_ptr rp, - mp_limb_t n0, - mp_limb_t d0) -{ - mp_limb_t q = 0; - - if ((mp_limb_signed_t) n0 < 0) - { - int cnt; - for (cnt = 1; (mp_limb_signed_t) d0 >= 0; cnt++) - { - d0 = d0 << 1; - } - - q = 0; - while (cnt) - { - q <<= 1; - if (n0 >= d0) - { - n0 = n0 - d0; - q |= 1; - } - d0 = d0 >> 1; - cnt--; - } - } - else - { - int cnt; - for (cnt = 0; n0 >= d0; cnt++) - { - d0 = d0 << 1; - } - - q = 0; - while (cnt) - { - d0 = d0 >> 1; - q <<= 1; - if (n0 >= d0) - { - n0 = n0 - d0; - q |= 1; - } - cnt--; - } - } - *rp = n0; - return q; -} - -/* Two-limb division optimized for small quotients. */ -static inline mp_limb_t -div2 (mp_ptr rp, - mp_limb_t nh, mp_limb_t nl, - mp_limb_t dh, mp_limb_t dl) -{ - mp_limb_t q = 0; - - if ((mp_limb_signed_t) nh < 0) - { - int cnt; - for (cnt = 1; (mp_limb_signed_t) dh >= 0; cnt++) - { - dh = (dh << 1) | (dl >> (GMP_LIMB_BITS - 1)); - dl = dl << 1; - } - - while (cnt) - { - q <<= 1; - if (nh > dh || (nh == dh && nl >= dl)) - { - sub_ddmmss (nh, nl, nh, nl, dh, dl); - q |= 1; - } - dl = (dh << (GMP_LIMB_BITS - 1)) | (dl >> 1); - dh = dh >> 1; - cnt--; - } - } - else - { - int cnt; - for (cnt = 0; nh > dh || (nh == dh && nl >= dl); cnt++) - { - dh = (dh << 1) | (dl >> (GMP_LIMB_BITS - 1)); - dl = dl << 1; - } - - while (cnt) - { - dl = (dh << (GMP_LIMB_BITS - 1)) | (dl >> 1); - dh = dh >> 1; - q <<= 1; - if (nh > dh || (nh == dh && nl >= dl)) - { - sub_ddmmss (nh, nl, nh, nl, dh, dl); - q |= 1; - } - cnt--; - } - } - - rp[0] = nl; - rp[1] = nh; - - return q; -} - -#if 0 -/* This div2 uses less branches, but it seems to nevertheless be - slightly slower than the above code. */ -static inline mp_limb_t -div2 (mp_ptr rp, - mp_limb_t nh, mp_limb_t nl, - mp_limb_t dh, mp_limb_t dl) -{ - mp_limb_t q = 0; - int ncnt; - int dcnt; - - count_leading_zeros (ncnt, nh); - count_leading_zeros (dcnt, dh); - dcnt -= ncnt; - - dh = (dh << dcnt) + (-(dcnt > 0) & (dl >> (GMP_LIMB_BITS - dcnt))); - dl <<= dcnt; - - do - { - mp_limb_t bit; - q <<= 1; - if (UNLIKELY (nh == dh)) - bit = (nl >= dl); - else - bit = (nh > dh); - - q |= bit; - - sub_ddmmss (nh, nl, nh, nl, (-bit) & dh, (-bit) & dl); - - dl = (dh << (GMP_LIMB_BITS - 1)) | (dl >> 1); - dh = dh >> 1; - } - while (dcnt--); - - rp[0] = nl; - rp[1] = nh; - - return q; -} -#endif - -#else /* GMP_NAIL_BITS != 0 */ -/* Check all functions for nail support. */ -/* hgcd2 should be defined to take inputs including nail bits, and - produce a matrix with elements also including nail bits. This is - necessary, for the matrix elements to be useful with mpn_mul_1, - mpn_addmul_1 and friends. */ -#error Not implemented -#endif /* GMP_NAIL_BITS != 0 */ - -/* Reduces a,b until |a-b| (almost) fits in one limb + 1 bit. Constructs - matrix M. Returns 1 if we make progress, i.e. can perform at least - one subtraction. Otherwise returns zero. */ - -/* FIXME: Possible optimizations: - - The div2 function starts with checking the most significant bit of - the numerator. We can maintained normalized operands here, call - hgcd with normalized operands only, which should make the code - simpler and possibly faster. - - Experiment with table lookups on the most significant bits. - - This function is also a candidate for assembler implementation. -*/ -int -mpn_hgcd2 (mp_limb_t ah, mp_limb_t al, mp_limb_t bh, mp_limb_t bl, - struct hgcd_matrix1 *M) -{ - mp_limb_t u00, u01, u10, u11; - - if (ah < 2 || bh < 2) - return 0; - - if (ah > bh || (ah == bh && al > bl)) - { - sub_ddmmss (ah, al, ah, al, bh, bl); - if (ah < 2) - return 0; - - u00 = u01 = u11 = 1; - u10 = 0; - } - else - { - sub_ddmmss (bh, bl, bh, bl, ah, al); - if (bh < 2) - return 0; - - u00 = u10 = u11 = 1; - u01 = 0; - } - - if (ah < bh) - goto subtract_a; - - for (;;) - { - ASSERT (ah >= bh); - if (ah == bh) - goto done; - - if (ah < (CNST_LIMB(1) << (GMP_LIMB_BITS / 2))) - { - ah = (ah << (GMP_LIMB_BITS / 2) ) + (al >> (GMP_LIMB_BITS / 2)); - bh = (bh << (GMP_LIMB_BITS / 2) ) + (bl >> (GMP_LIMB_BITS / 2)); - - break; - } - - /* Subtract a -= q b, and multiply M from the right by (1 q ; 0 - 1), affecting the second column of M. */ - ASSERT (ah > bh); - sub_ddmmss (ah, al, ah, al, bh, bl); - - if (ah < 2) - goto done; - - if (ah <= bh) - { - /* Use q = 1 */ - u01 += u00; - u11 += u10; - } - else - { - mp_limb_t r[2]; - mp_limb_t q = div2 (r, ah, al, bh, bl); - al = r[0]; ah = r[1]; - if (ah < 2) - { - /* A is too small, but q is correct. */ - u01 += q * u00; - u11 += q * u10; - goto done; - } - q++; - u01 += q * u00; - u11 += q * u10; - } - subtract_a: - ASSERT (bh >= ah); - if (ah == bh) - goto done; - - if (bh < (CNST_LIMB(1) << (GMP_LIMB_BITS / 2))) - { - ah = (ah << (GMP_LIMB_BITS / 2) ) + (al >> (GMP_LIMB_BITS / 2)); - bh = (bh << (GMP_LIMB_BITS / 2) ) + (bl >> (GMP_LIMB_BITS / 2)); - - goto subtract_a1; - } - - /* Subtract b -= q a, and multiply M from the right by (1 0 ; q - 1), affecting the first column of M. */ - sub_ddmmss (bh, bl, bh, bl, ah, al); - - if (bh < 2) - goto done; - - if (bh <= ah) - { - /* Use q = 1 */ - u00 += u01; - u10 += u11; - } - else - { - mp_limb_t r[2]; - mp_limb_t q = div2 (r, bh, bl, ah, al); - bl = r[0]; bh = r[1]; - if (bh < 2) - { - /* B is too small, but q is correct. */ - u00 += q * u01; - u10 += q * u11; - goto done; - } - q++; - u00 += q * u01; - u10 += q * u11; - } - } - - /* NOTE: Since we discard the least significant half limb, we don't - get a truly maximal M (corresponding to |a - b| < - 2^{GMP_LIMB_BITS +1}). */ - /* Single precision loop */ - for (;;) - { - ASSERT (ah >= bh); - - ah -= bh; - if (ah < (CNST_LIMB (1) << (GMP_LIMB_BITS / 2 + 1))) - break; - - if (ah <= bh) - { - /* Use q = 1 */ - u01 += u00; - u11 += u10; - } - else - { - mp_limb_t r; - mp_limb_t q = div1 (&r, ah, bh); - ah = r; - if (ah < (CNST_LIMB(1) << (GMP_LIMB_BITS / 2 + 1))) - { - /* A is too small, but q is correct. */ - u01 += q * u00; - u11 += q * u10; - break; - } - q++; - u01 += q * u00; - u11 += q * u10; - } - subtract_a1: - ASSERT (bh >= ah); - - bh -= ah; - if (bh < (CNST_LIMB (1) << (GMP_LIMB_BITS / 2 + 1))) - break; - - if (bh <= ah) - { - /* Use q = 1 */ - u00 += u01; - u10 += u11; - } - else - { - mp_limb_t r; - mp_limb_t q = div1 (&r, bh, ah); - bh = r; - if (bh < (CNST_LIMB(1) << (GMP_LIMB_BITS / 2 + 1))) - { - /* B is too small, but q is correct. */ - u00 += q * u01; - u10 += q * u11; - break; - } - q++; - u00 += q * u01; - u10 += q * u11; - } - } - - done: - M->u[0][0] = u00; M->u[0][1] = u01; - M->u[1][0] = u10; M->u[1][1] = u11; - - return 1; -} - -/* Sets (r;b) = (a;b) M, with M = (u00, u01; u10, u11). Vector must - * have space for n + 1 limbs. Uses three buffers to avoid a copy*/ -mp_size_t -mpn_hgcd_mul_matrix1_vector (const struct hgcd_matrix1 *M, - mp_ptr rp, mp_srcptr ap, mp_ptr bp, mp_size_t n) -{ - mp_limb_t ah, bh; - - /* Compute (r,b) <-- (u00 a + u10 b, u01 a + u11 b) as - - r = u00 * a - r += u10 * b - b *= u11 - b += u01 * a - */ - -#if HAVE_NATIVE_mpn_addaddmul_1msb0 - ah = mpn_addaddmul_1msb0 (rp, ap, bp, n, M->u[0][0], M->u[1][0]); - bh = mpn_addaddmul_1msb0 (bp, bp, ap, n, M->u[1][1], M->u[0][1]); -#else - ah = mpn_mul_1 (rp, ap, n, M->u[0][0]); - ah += mpn_addmul_1 (rp, bp, n, M->u[1][0]); - - bh = mpn_mul_1 (bp, bp, n, M->u[1][1]); - bh += mpn_addmul_1 (bp, ap, n, M->u[0][1]); -#endif - rp[n] = ah; - bp[n] = bh; - - n += (ah | bh) > 0; - return n; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd2_jacobi.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd2_jacobi.c deleted file mode 100644 index e59c32a3414eee6f4d7f37c027f50d2f4bb00f16..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd2_jacobi.c +++ /dev/null @@ -1,366 +0,0 @@ -/* hgcd2_jacobi.c - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 1996, 1998, 2000-2004, 2008, 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#if GMP_NAIL_BITS > 0 -#error Nails not supported. -#endif - -/* FIXME: Duplicated in hgcd2.c. Should move to gmp-impl.h, and - possibly be renamed. */ -static inline mp_limb_t -div1 (mp_ptr rp, - mp_limb_t n0, - mp_limb_t d0) -{ - mp_limb_t q = 0; - - if ((mp_limb_signed_t) n0 < 0) - { - int cnt; - for (cnt = 1; (mp_limb_signed_t) d0 >= 0; cnt++) - { - d0 = d0 << 1; - } - - q = 0; - while (cnt) - { - q <<= 1; - if (n0 >= d0) - { - n0 = n0 - d0; - q |= 1; - } - d0 = d0 >> 1; - cnt--; - } - } - else - { - int cnt; - for (cnt = 0; n0 >= d0; cnt++) - { - d0 = d0 << 1; - } - - q = 0; - while (cnt) - { - d0 = d0 >> 1; - q <<= 1; - if (n0 >= d0) - { - n0 = n0 - d0; - q |= 1; - } - cnt--; - } - } - *rp = n0; - return q; -} - -/* Two-limb division optimized for small quotients. */ -static inline mp_limb_t -div2 (mp_ptr rp, - mp_limb_t nh, mp_limb_t nl, - mp_limb_t dh, mp_limb_t dl) -{ - mp_limb_t q = 0; - - if ((mp_limb_signed_t) nh < 0) - { - int cnt; - for (cnt = 1; (mp_limb_signed_t) dh >= 0; cnt++) - { - dh = (dh << 1) | (dl >> (GMP_LIMB_BITS - 1)); - dl = dl << 1; - } - - while (cnt) - { - q <<= 1; - if (nh > dh || (nh == dh && nl >= dl)) - { - sub_ddmmss (nh, nl, nh, nl, dh, dl); - q |= 1; - } - dl = (dh << (GMP_LIMB_BITS - 1)) | (dl >> 1); - dh = dh >> 1; - cnt--; - } - } - else - { - int cnt; - for (cnt = 0; nh > dh || (nh == dh && nl >= dl); cnt++) - { - dh = (dh << 1) | (dl >> (GMP_LIMB_BITS - 1)); - dl = dl << 1; - } - - while (cnt) - { - dl = (dh << (GMP_LIMB_BITS - 1)) | (dl >> 1); - dh = dh >> 1; - q <<= 1; - if (nh > dh || (nh == dh && nl >= dl)) - { - sub_ddmmss (nh, nl, nh, nl, dh, dl); - q |= 1; - } - cnt--; - } - } - - rp[0] = nl; - rp[1] = nh; - - return q; -} - -int -mpn_hgcd2_jacobi (mp_limb_t ah, mp_limb_t al, mp_limb_t bh, mp_limb_t bl, - struct hgcd_matrix1 *M, unsigned *bitsp) -{ - mp_limb_t u00, u01, u10, u11; - unsigned bits = *bitsp; - - if (ah < 2 || bh < 2) - return 0; - - if (ah > bh || (ah == bh && al > bl)) - { - sub_ddmmss (ah, al, ah, al, bh, bl); - if (ah < 2) - return 0; - - u00 = u01 = u11 = 1; - u10 = 0; - bits = mpn_jacobi_update (bits, 1, 1); - } - else - { - sub_ddmmss (bh, bl, bh, bl, ah, al); - if (bh < 2) - return 0; - - u00 = u10 = u11 = 1; - u01 = 0; - bits = mpn_jacobi_update (bits, 0, 1); - } - - if (ah < bh) - goto subtract_a; - - for (;;) - { - ASSERT (ah >= bh); - if (ah == bh) - goto done; - - if (ah < (CNST_LIMB(1) << (GMP_LIMB_BITS / 2))) - { - ah = (ah << (GMP_LIMB_BITS / 2) ) + (al >> (GMP_LIMB_BITS / 2)); - bh = (bh << (GMP_LIMB_BITS / 2) ) + (bl >> (GMP_LIMB_BITS / 2)); - - break; - } - - /* Subtract a -= q b, and multiply M from the right by (1 q ; 0 - 1), affecting the second column of M. */ - ASSERT (ah > bh); - sub_ddmmss (ah, al, ah, al, bh, bl); - - if (ah < 2) - goto done; - - if (ah <= bh) - { - /* Use q = 1 */ - u01 += u00; - u11 += u10; - bits = mpn_jacobi_update (bits, 1, 1); - } - else - { - mp_limb_t r[2]; - mp_limb_t q = div2 (r, ah, al, bh, bl); - al = r[0]; ah = r[1]; - if (ah < 2) - { - /* A is too small, but q is correct. */ - u01 += q * u00; - u11 += q * u10; - bits = mpn_jacobi_update (bits, 1, q & 3); - goto done; - } - q++; - u01 += q * u00; - u11 += q * u10; - bits = mpn_jacobi_update (bits, 1, q & 3); - } - subtract_a: - ASSERT (bh >= ah); - if (ah == bh) - goto done; - - if (bh < (CNST_LIMB(1) << (GMP_LIMB_BITS / 2))) - { - ah = (ah << (GMP_LIMB_BITS / 2) ) + (al >> (GMP_LIMB_BITS / 2)); - bh = (bh << (GMP_LIMB_BITS / 2) ) + (bl >> (GMP_LIMB_BITS / 2)); - - goto subtract_a1; - } - - /* Subtract b -= q a, and multiply M from the right by (1 0 ; q - 1), affecting the first column of M. */ - sub_ddmmss (bh, bl, bh, bl, ah, al); - - if (bh < 2) - goto done; - - if (bh <= ah) - { - /* Use q = 1 */ - u00 += u01; - u10 += u11; - bits = mpn_jacobi_update (bits, 0, 1); - } - else - { - mp_limb_t r[2]; - mp_limb_t q = div2 (r, bh, bl, ah, al); - bl = r[0]; bh = r[1]; - if (bh < 2) - { - /* B is too small, but q is correct. */ - u00 += q * u01; - u10 += q * u11; - bits = mpn_jacobi_update (bits, 0, q & 3); - goto done; - } - q++; - u00 += q * u01; - u10 += q * u11; - bits = mpn_jacobi_update (bits, 0, q & 3); - } - } - - /* NOTE: Since we discard the least significant half limb, we don't - get a truly maximal M (corresponding to |a - b| < - 2^{GMP_LIMB_BITS +1}). */ - /* Single precision loop */ - for (;;) - { - ASSERT (ah >= bh); - if (ah == bh) - break; - - ah -= bh; - if (ah < (CNST_LIMB (1) << (GMP_LIMB_BITS / 2 + 1))) - break; - - if (ah <= bh) - { - /* Use q = 1 */ - u01 += u00; - u11 += u10; - bits = mpn_jacobi_update (bits, 1, 1); - } - else - { - mp_limb_t r; - mp_limb_t q = div1 (&r, ah, bh); - ah = r; - if (ah < (CNST_LIMB(1) << (GMP_LIMB_BITS / 2 + 1))) - { - /* A is too small, but q is correct. */ - u01 += q * u00; - u11 += q * u10; - bits = mpn_jacobi_update (bits, 1, q & 3); - break; - } - q++; - u01 += q * u00; - u11 += q * u10; - bits = mpn_jacobi_update (bits, 1, q & 3); - } - subtract_a1: - ASSERT (bh >= ah); - if (ah == bh) - break; - - bh -= ah; - if (bh < (CNST_LIMB (1) << (GMP_LIMB_BITS / 2 + 1))) - break; - - if (bh <= ah) - { - /* Use q = 1 */ - u00 += u01; - u10 += u11; - bits = mpn_jacobi_update (bits, 0, 1); - } - else - { - mp_limb_t r; - mp_limb_t q = div1 (&r, bh, ah); - bh = r; - if (bh < (CNST_LIMB(1) << (GMP_LIMB_BITS / 2 + 1))) - { - /* B is too small, but q is correct. */ - u00 += q * u01; - u10 += q * u11; - bits = mpn_jacobi_update (bits, 0, q & 3); - break; - } - q++; - u00 += q * u01; - u10 += q * u11; - bits = mpn_jacobi_update (bits, 0, q & 3); - } - } - - done: - M->u[0][0] = u00; M->u[0][1] = u01; - M->u[1][0] = u10; M->u[1][1] = u11; - *bitsp = bits; - - return 1; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_appr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_appr.c deleted file mode 100644 index 660219372f8951a92af0d816bcff21e5f4967cad..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_appr.c +++ /dev/null @@ -1,268 +0,0 @@ -/* hgcd_appr.c. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2011, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Identical to mpn_hgcd_itch. FIXME: Do we really need to add - HGCD_THRESHOLD at the end? */ -mp_size_t -mpn_hgcd_appr_itch (mp_size_t n) -{ - if (BELOW_THRESHOLD (n, HGCD_APPR_THRESHOLD)) - return n; - else - { - unsigned k; - int count; - mp_size_t nscaled; - - /* Get the recursion depth. */ - nscaled = (n - 1) / (HGCD_APPR_THRESHOLD - 1); - count_leading_zeros (count, nscaled); - k = GMP_LIMB_BITS - count; - - return 20 * ((n+3) / 4) + 22 * k + HGCD_THRESHOLD; - } -} - -/* Destroys inputs. */ -int -mpn_hgcd_appr (mp_ptr ap, mp_ptr bp, mp_size_t n, - struct hgcd_matrix *M, mp_ptr tp) -{ - mp_size_t s; - int success = 0; - - ASSERT (n > 0); - - ASSERT ((ap[n-1] | bp[n-1]) != 0); - - if (n <= 2) - /* Implies s = n. A fairly uninteresting case but exercised by the - random inputs of the testsuite. */ - return 0; - - ASSERT ((n+1)/2 - 1 < M->alloc); - - /* We aim for reduction of to GMP_NUMB_BITS * s bits. But each time - we discard some of the least significant limbs, we must keep one - additional bit to account for the truncation error. We maintain - the GMP_NUMB_BITS * s - extra_bits as the current target size. */ - - s = n/2 + 1; - if (BELOW_THRESHOLD (n, HGCD_APPR_THRESHOLD)) - { - unsigned extra_bits = 0; - - while (n > 2) - { - mp_size_t nn; - - ASSERT (n > s); - ASSERT (n <= 2*s); - - nn = mpn_hgcd_step (n, ap, bp, s, M, tp); - if (!nn) - break; - - n = nn; - success = 1; - - /* We can truncate and discard the lower p bits whenever nbits <= - 2*sbits - p. To account for the truncation error, we must - adjust - - sbits <-- sbits + 1 - p, - - rather than just sbits <-- sbits - p. This adjustment makes - the produced matrix slightly smaller than it could be. */ - - if (GMP_NUMB_BITS * (n + 1) + 2 * extra_bits <= 2*GMP_NUMB_BITS * s) - { - mp_size_t p = (GMP_NUMB_BITS * (2*s - n) - 2*extra_bits) / GMP_NUMB_BITS; - - if (extra_bits == 0) - { - /* We cross a limb boundary and bump s. We can't do that - if the result is that it makes makes min(U, V) - smaller than 2^{GMP_NUMB_BITS} s. */ - if (s + 1 == n - || mpn_zero_p (ap + s + 1, n - s - 1) - || mpn_zero_p (bp + s + 1, n - s - 1)) - continue; - - extra_bits = GMP_NUMB_BITS - 1; - s++; - } - else - { - extra_bits--; - } - - /* Drop the p least significant limbs */ - ap += p; bp += p; n -= p; s -= p; - } - } - - ASSERT (s > 0); - - if (extra_bits > 0) - { - /* We can get here only of we have dropped at least one of the least - significant bits, so we can decrement ap and bp. We can then shift - left extra bits using mpn_rshift. */ - /* NOTE: In the unlikely case that n is large, it would be preferable - to do an initial subdiv step to reduce the size before shifting, - but that would mean duplicating mpn_gcd_subdiv_step with a bit - count rather than a limb count. */ - ap--; bp--; - ap[0] = mpn_rshift (ap+1, ap+1, n, GMP_NUMB_BITS - extra_bits); - bp[0] = mpn_rshift (bp+1, bp+1, n, GMP_NUMB_BITS - extra_bits); - n += (ap[n] | bp[n]) > 0; - - ASSERT (success); - - while (n > 2) - { - mp_size_t nn; - - ASSERT (n > s); - ASSERT (n <= 2*s); - - nn = mpn_hgcd_step (n, ap, bp, s, M, tp); - - if (!nn) - return 1; - - n = nn; - } - } - - if (n == 2) - { - struct hgcd_matrix1 M1; - ASSERT (s == 1); - - if (mpn_hgcd2 (ap[1], ap[0], bp[1], bp[0], &M1)) - { - /* Multiply M <- M * M1 */ - mpn_hgcd_matrix_mul_1 (M, &M1, tp); - success = 1; - } - } - return success; - } - else - { - mp_size_t n2 = (3*n)/4 + 1; - mp_size_t p = n/2; - mp_size_t nn; - - nn = mpn_hgcd_reduce (M, ap, bp, n, p, tp); - if (nn) - { - n = nn; - /* FIXME: Discard some of the low limbs immediately? */ - success = 1; - } - - while (n > n2) - { - mp_size_t nn; - - /* Needs n + 1 storage */ - nn = mpn_hgcd_step (n, ap, bp, s, M, tp); - if (!nn) - return success; - - n = nn; - success = 1; - } - if (n > s + 2) - { - struct hgcd_matrix M1; - mp_size_t scratch; - - p = 2*s - n + 1; - scratch = MPN_HGCD_MATRIX_INIT_ITCH (n-p); - - mpn_hgcd_matrix_init(&M1, n - p, tp); - if (mpn_hgcd_appr (ap + p, bp + p, n - p, &M1, tp + scratch)) - { - /* We always have max(M) > 2^{-(GMP_NUMB_BITS + 1)} max(M1) */ - ASSERT (M->n + 2 >= M1.n); - - /* Furthermore, assume M ends with a quotient (1, q; 0, 1), - then either q or q + 1 is a correct quotient, and M1 will - start with either (1, 0; 1, 1) or (2, 1; 1, 1). This - rules out the case that the size of M * M1 is much - smaller than the expected M->n + M1->n. */ - - ASSERT (M->n + M1.n < M->alloc); - - /* We need a bound for of M->n + M1.n. Let n be the original - input size. Then - - ceil(n/2) - 1 >= size of product >= M.n + M1.n - 2 - - and it follows that - - M.n + M1.n <= ceil(n/2) + 1 - - Then 3*(M.n + M1.n) + 5 <= 3 * ceil(n/2) + 8 is the - amount of needed scratch space. */ - mpn_hgcd_matrix_mul (M, &M1, tp + scratch); - return 1; - } - } - - for(;;) - { - mp_size_t nn; - - ASSERT (n > s); - ASSERT (n <= 2*s); - - nn = mpn_hgcd_step (n, ap, bp, s, M, tp); - - if (!nn) - return success; - - n = nn; - success = 1; - } - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_jacobi.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_jacobi.c deleted file mode 100644 index 0a49e5b3a78848f677cf8df77b5474e4b937177a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_jacobi.c +++ /dev/null @@ -1,244 +0,0 @@ -/* hgcd_jacobi.c. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2003-2005, 2008, 2011, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* This file is almost a copy of hgcd.c, with some added calls to - mpn_jacobi_update */ - -struct hgcd_jacobi_ctx -{ - struct hgcd_matrix *M; - unsigned *bitsp; -}; - -static void -hgcd_jacobi_hook (void *p, mp_srcptr gp, mp_size_t gn, - mp_srcptr qp, mp_size_t qn, int d) -{ - ASSERT (!gp); - ASSERT (d >= 0); - - MPN_NORMALIZE (qp, qn); - if (qn > 0) - { - struct hgcd_jacobi_ctx *ctx = (struct hgcd_jacobi_ctx *) p; - /* NOTES: This is a bit ugly. A tp area is passed to - gcd_subdiv_step, which stores q at the start of that area. We - now use the rest. */ - mp_ptr tp = (mp_ptr) qp + qn; - - mpn_hgcd_matrix_update_q (ctx->M, qp, qn, d, tp); - *ctx->bitsp = mpn_jacobi_update (*ctx->bitsp, d, qp[0] & 3); - } -} - -/* Perform a few steps, using some of mpn_hgcd2, subtraction and - division. Reduces the size by almost one limb or more, but never - below the given size s. Return new size for a and b, or 0 if no - more steps are possible. - - If hgcd2 succeeds, needs temporary space for hgcd_matrix_mul_1, M->n - limbs, and hgcd_mul_matrix1_inverse_vector, n limbs. If hgcd2 - fails, needs space for the quotient, qn <= n - s + 1 limbs, for and - hgcd_matrix_update_q, qn + (size of the appropriate column of M) <= - resulting size of M. - - If N is the input size to the calling hgcd, then s = floor(N/2) + - 1, M->n < N, qn + matrix size <= n - s + 1 + n - s = 2 (n - s) + 1 - < N, so N is sufficient. -*/ - -static mp_size_t -hgcd_jacobi_step (mp_size_t n, mp_ptr ap, mp_ptr bp, mp_size_t s, - struct hgcd_matrix *M, unsigned *bitsp, mp_ptr tp) -{ - struct hgcd_matrix1 M1; - mp_limb_t mask; - mp_limb_t ah, al, bh, bl; - - ASSERT (n > s); - - mask = ap[n-1] | bp[n-1]; - ASSERT (mask > 0); - - if (n == s + 1) - { - if (mask < 4) - goto subtract; - - ah = ap[n-1]; al = ap[n-2]; - bh = bp[n-1]; bl = bp[n-2]; - } - else if (mask & GMP_NUMB_HIGHBIT) - { - ah = ap[n-1]; al = ap[n-2]; - bh = bp[n-1]; bl = bp[n-2]; - } - else - { - int shift; - - count_leading_zeros (shift, mask); - ah = MPN_EXTRACT_NUMB (shift, ap[n-1], ap[n-2]); - al = MPN_EXTRACT_NUMB (shift, ap[n-2], ap[n-3]); - bh = MPN_EXTRACT_NUMB (shift, bp[n-1], bp[n-2]); - bl = MPN_EXTRACT_NUMB (shift, bp[n-2], bp[n-3]); - } - - /* Try an mpn_hgcd2 step */ - if (mpn_hgcd2_jacobi (ah, al, bh, bl, &M1, bitsp)) - { - /* Multiply M <- M * M1 */ - mpn_hgcd_matrix_mul_1 (M, &M1, tp); - - /* Can't swap inputs, so we need to copy. */ - MPN_COPY (tp, ap, n); - /* Multiply M1^{-1} (a;b) */ - return mpn_matrix22_mul1_inverse_vector (&M1, ap, tp, bp, n); - } - - subtract: - { - struct hgcd_jacobi_ctx ctx; - ctx.M = M; - ctx.bitsp = bitsp; - - return mpn_gcd_subdiv_step (ap, bp, n, s, hgcd_jacobi_hook, &ctx, tp); - } -} - -/* Reduces a,b until |a-b| fits in n/2 + 1 limbs. Constructs matrix M - with elements of size at most (n+1)/2 - 1. Returns new size of a, - b, or zero if no reduction is possible. */ - -/* Same scratch requirements as for mpn_hgcd. */ -mp_size_t -mpn_hgcd_jacobi (mp_ptr ap, mp_ptr bp, mp_size_t n, - struct hgcd_matrix *M, unsigned *bitsp, mp_ptr tp) -{ - mp_size_t s = n/2 + 1; - - mp_size_t nn; - int success = 0; - - if (n <= s) - /* Happens when n <= 2, a fairly uninteresting case but exercised - by the random inputs of the testsuite. */ - return 0; - - ASSERT ((ap[n-1] | bp[n-1]) > 0); - - ASSERT ((n+1)/2 - 1 < M->alloc); - - if (ABOVE_THRESHOLD (n, HGCD_THRESHOLD)) - { - mp_size_t n2 = (3*n)/4 + 1; - mp_size_t p = n/2; - - nn = mpn_hgcd_jacobi (ap + p, bp + p, n - p, M, bitsp, tp); - if (nn > 0) - { - /* Needs 2*(p + M->n) <= 2*(floor(n/2) + ceil(n/2) - 1) - = 2 (n - 1) */ - n = mpn_hgcd_matrix_adjust (M, p + nn, ap, bp, p, tp); - success = 1; - } - while (n > n2) - { - /* Needs n + 1 storage */ - nn = hgcd_jacobi_step (n, ap, bp, s, M, bitsp, tp); - if (!nn) - return success ? n : 0; - n = nn; - success = 1; - } - - if (n > s + 2) - { - struct hgcd_matrix M1; - mp_size_t scratch; - - p = 2*s - n + 1; - scratch = MPN_HGCD_MATRIX_INIT_ITCH (n-p); - - mpn_hgcd_matrix_init(&M1, n - p, tp); - nn = mpn_hgcd_jacobi (ap + p, bp + p, n - p, &M1, bitsp, tp + scratch); - if (nn > 0) - { - /* We always have max(M) > 2^{-(GMP_NUMB_BITS + 1)} max(M1) */ - ASSERT (M->n + 2 >= M1.n); - - /* Furthermore, assume M ends with a quotient (1, q; 0, 1), - then either q or q + 1 is a correct quotient, and M1 will - start with either (1, 0; 1, 1) or (2, 1; 1, 1). This - rules out the case that the size of M * M1 is much - smaller than the expected M->n + M1->n. */ - - ASSERT (M->n + M1.n < M->alloc); - - /* Needs 2 (p + M->n) <= 2 (2*s - n2 + 1 + n2 - s - 1) - = 2*s <= 2*(floor(n/2) + 1) <= n + 2. */ - n = mpn_hgcd_matrix_adjust (&M1, p + nn, ap, bp, p, tp + scratch); - - /* We need a bound for of M->n + M1.n. Let n be the original - input size. Then - - ceil(n/2) - 1 >= size of product >= M.n + M1.n - 2 - - and it follows that - - M.n + M1.n <= ceil(n/2) + 1 - - Then 3*(M.n + M1.n) + 5 <= 3 * ceil(n/2) + 8 is the - amount of needed scratch space. */ - mpn_hgcd_matrix_mul (M, &M1, tp + scratch); - success = 1; - } - } - } - - for (;;) - { - /* Needs s+3 < n */ - nn = hgcd_jacobi_step (n, ap, bp, s, M, bitsp, tp); - if (!nn) - return success ? n : 0; - - n = nn; - success = 1; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_matrix.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_matrix.c deleted file mode 100644 index d9db331603b214a11063f45b50d9e387bda79721..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_matrix.c +++ /dev/null @@ -1,266 +0,0 @@ -/* hgcd_matrix.c. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2003-2005, 2008, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* For input of size n, matrix elements are of size at most ceil(n/2) - - 1, but we need two limbs extra. */ -void -mpn_hgcd_matrix_init (struct hgcd_matrix *M, mp_size_t n, mp_ptr p) -{ - mp_size_t s = (n+1)/2 + 1; - M->alloc = s; - M->n = 1; - MPN_ZERO (p, 4 * s); - M->p[0][0] = p; - M->p[0][1] = p + s; - M->p[1][0] = p + 2 * s; - M->p[1][1] = p + 3 * s; - - M->p[0][0][0] = M->p[1][1][0] = 1; -} - -/* Update column COL, adding in Q * column (1-COL). Temporary storage: - * qn + n <= M->alloc, where n is the size of the largest element in - * column 1 - COL. */ -void -mpn_hgcd_matrix_update_q (struct hgcd_matrix *M, mp_srcptr qp, mp_size_t qn, - unsigned col, mp_ptr tp) -{ - ASSERT (col < 2); - - if (qn == 1) - { - mp_limb_t q = qp[0]; - mp_limb_t c0, c1; - - c0 = mpn_addmul_1 (M->p[0][col], M->p[0][1-col], M->n, q); - c1 = mpn_addmul_1 (M->p[1][col], M->p[1][1-col], M->n, q); - - M->p[0][col][M->n] = c0; - M->p[1][col][M->n] = c1; - - M->n += (c0 | c1) != 0; - } - else - { - unsigned row; - - /* Carries for the unlikely case that we get both high words - from the multiplication and carries from the addition. */ - mp_limb_t c[2]; - mp_size_t n; - - /* The matrix will not necessarily grow in size by qn, so we - need normalization in order not to overflow M. */ - - for (n = M->n; n + qn > M->n; n--) - { - ASSERT (n > 0); - if (M->p[0][1-col][n-1] > 0 || M->p[1][1-col][n-1] > 0) - break; - } - - ASSERT (qn + n <= M->alloc); - - for (row = 0; row < 2; row++) - { - if (qn <= n) - mpn_mul (tp, M->p[row][1-col], n, qp, qn); - else - mpn_mul (tp, qp, qn, M->p[row][1-col], n); - - ASSERT (n + qn >= M->n); - c[row] = mpn_add (M->p[row][col], tp, n + qn, M->p[row][col], M->n); - } - - n += qn; - - if (c[0] | c[1]) - { - M->p[0][col][n] = c[0]; - M->p[1][col][n] = c[1]; - n++; - } - else - { - n -= (M->p[0][col][n-1] | M->p[1][col][n-1]) == 0; - ASSERT (n >= M->n); - } - M->n = n; - } - - ASSERT (M->n < M->alloc); -} - -/* Multiply M by M1 from the right. Since the M1 elements fit in - GMP_NUMB_BITS - 1 bits, M grows by at most one limb. Needs - temporary space M->n */ -void -mpn_hgcd_matrix_mul_1 (struct hgcd_matrix *M, const struct hgcd_matrix1 *M1, - mp_ptr tp) -{ - mp_size_t n0, n1; - - /* Could avoid copy by some swapping of pointers. */ - MPN_COPY (tp, M->p[0][0], M->n); - n0 = mpn_hgcd_mul_matrix1_vector (M1, M->p[0][0], tp, M->p[0][1], M->n); - MPN_COPY (tp, M->p[1][0], M->n); - n1 = mpn_hgcd_mul_matrix1_vector (M1, M->p[1][0], tp, M->p[1][1], M->n); - - /* Depends on zero initialization */ - M->n = MAX(n0, n1); - ASSERT (M->n < M->alloc); -} - -/* Multiply M by M1 from the right. Needs 3*(M->n + M1->n) + 5 limbs - of temporary storage (see mpn_matrix22_mul_itch). */ -void -mpn_hgcd_matrix_mul (struct hgcd_matrix *M, const struct hgcd_matrix *M1, - mp_ptr tp) -{ - mp_size_t n; - - /* About the new size of M:s elements. Since M1's diagonal elements - are > 0, no element can decrease. The new elements are of size - M->n + M1->n, one limb more or less. The computation of the - matrix product produces elements of size M->n + M1->n + 1. But - the true size, after normalization, may be three limbs smaller. - - The reason that the product has normalized size >= M->n + M1->n - - 2 is subtle. It depends on the fact that M and M1 can be factored - as products of (1,1; 0,1) and (1,0; 1,1), and that we can't have - M ending with a large power and M1 starting with a large power of - the same matrix. */ - - /* FIXME: Strassen multiplication gives only a small speedup. In FFT - multiplication range, this function could be sped up quite a lot - using invariance. */ - ASSERT (M->n + M1->n < M->alloc); - - ASSERT ((M->p[0][0][M->n-1] | M->p[0][1][M->n-1] - | M->p[1][0][M->n-1] | M->p[1][1][M->n-1]) > 0); - - ASSERT ((M1->p[0][0][M1->n-1] | M1->p[0][1][M1->n-1] - | M1->p[1][0][M1->n-1] | M1->p[1][1][M1->n-1]) > 0); - - mpn_matrix22_mul (M->p[0][0], M->p[0][1], - M->p[1][0], M->p[1][1], M->n, - M1->p[0][0], M1->p[0][1], - M1->p[1][0], M1->p[1][1], M1->n, tp); - - /* Index of last potentially non-zero limb, size is one greater. */ - n = M->n + M1->n; - - n -= ((M->p[0][0][n] | M->p[0][1][n] | M->p[1][0][n] | M->p[1][1][n]) == 0); - n -= ((M->p[0][0][n] | M->p[0][1][n] | M->p[1][0][n] | M->p[1][1][n]) == 0); - n -= ((M->p[0][0][n] | M->p[0][1][n] | M->p[1][0][n] | M->p[1][1][n]) == 0); - - ASSERT ((M->p[0][0][n] | M->p[0][1][n] | M->p[1][0][n] | M->p[1][1][n]) > 0); - - M->n = n + 1; -} - -/* Multiplies the least significant p limbs of (a;b) by M^-1. - Temporary space needed: 2 * (p + M->n)*/ -mp_size_t -mpn_hgcd_matrix_adjust (const struct hgcd_matrix *M, - mp_size_t n, mp_ptr ap, mp_ptr bp, - mp_size_t p, mp_ptr tp) -{ - /* M^-1 (a;b) = (r11, -r01; -r10, r00) (a ; b) - = (r11 a - r01 b; - r10 a + r00 b */ - - mp_ptr t0 = tp; - mp_ptr t1 = tp + p + M->n; - mp_limb_t ah, bh; - mp_limb_t cy; - - ASSERT (p + M->n < n); - - /* First compute the two values depending on a, before overwriting a */ - - if (M->n >= p) - { - mpn_mul (t0, M->p[1][1], M->n, ap, p); - mpn_mul (t1, M->p[1][0], M->n, ap, p); - } - else - { - mpn_mul (t0, ap, p, M->p[1][1], M->n); - mpn_mul (t1, ap, p, M->p[1][0], M->n); - } - - /* Update a */ - MPN_COPY (ap, t0, p); - ah = mpn_add (ap + p, ap + p, n - p, t0 + p, M->n); - - if (M->n >= p) - mpn_mul (t0, M->p[0][1], M->n, bp, p); - else - mpn_mul (t0, bp, p, M->p[0][1], M->n); - - cy = mpn_sub (ap, ap, n, t0, p + M->n); - ASSERT (cy <= ah); - ah -= cy; - - /* Update b */ - if (M->n >= p) - mpn_mul (t0, M->p[0][0], M->n, bp, p); - else - mpn_mul (t0, bp, p, M->p[0][0], M->n); - - MPN_COPY (bp, t0, p); - bh = mpn_add (bp + p, bp + p, n - p, t0 + p, M->n); - cy = mpn_sub (bp, bp, n, t1, p + M->n); - ASSERT (cy <= bh); - bh -= cy; - - if (ah > 0 || bh > 0) - { - ap[n] = ah; - bp[n] = bh; - n++; - } - else - { - /* The subtraction can reduce the size by at most one limb. */ - if (ap[n-1] == 0 && bp[n-1] == 0) - n--; - } - ASSERT (ap[n-1] > 0 || bp[n-1] > 0); - return n; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_reduce.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_reduce.c deleted file mode 100644 index 68b33c9ea70236b5ff15e3f9670e5d3b801aec38..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_reduce.c +++ /dev/null @@ -1,243 +0,0 @@ -/* hgcd_reduce.c. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2011, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Computes R -= A * B. Result must be non-negative. Normalized down - to size an, and resulting size is returned. */ -static mp_size_t -submul (mp_ptr rp, mp_size_t rn, - mp_srcptr ap, mp_size_t an, mp_srcptr bp, mp_size_t bn) -{ - mp_ptr tp; - TMP_DECL; - - ASSERT (bn > 0); - ASSERT (an >= bn); - ASSERT (rn >= an); - ASSERT (an + bn <= rn + 1); - - TMP_MARK; - tp = TMP_ALLOC_LIMBS (an + bn); - - mpn_mul (tp, ap, an, bp, bn); - ASSERT ((an + bn <= rn) || (tp[rn] == 0)); - ASSERT_NOCARRY (mpn_sub (rp, rp, rn, tp, an + bn - (an + bn > rn))); - TMP_FREE; - - while (rn > an && (rp[rn-1] == 0)) - rn--; - - return rn; -} - -/* Computes (a, b) <-- M^{-1} (a; b) */ -/* FIXME: - x Take scratch parameter, and figure out scratch need. - - x Use some fallback for small M->n? -*/ -static mp_size_t -hgcd_matrix_apply (const struct hgcd_matrix *M, - mp_ptr ap, mp_ptr bp, - mp_size_t n) -{ - mp_size_t an, bn, un, vn, nn; - mp_size_t mn[2][2]; - mp_size_t modn; - mp_ptr tp, sp, scratch; - mp_limb_t cy; - unsigned i, j; - - TMP_DECL; - - ASSERT ( (ap[n-1] | bp[n-1]) > 0); - - an = n; - MPN_NORMALIZE (ap, an); - bn = n; - MPN_NORMALIZE (bp, bn); - - for (i = 0; i < 2; i++) - for (j = 0; j < 2; j++) - { - mp_size_t k; - k = M->n; - MPN_NORMALIZE (M->p[i][j], k); - mn[i][j] = k; - } - - ASSERT (mn[0][0] > 0); - ASSERT (mn[1][1] > 0); - ASSERT ( (mn[0][1] | mn[1][0]) > 0); - - TMP_MARK; - - if (mn[0][1] == 0) - { - /* A unchanged, M = (1, 0; q, 1) */ - ASSERT (mn[0][0] == 1); - ASSERT (M->p[0][0][0] == 1); - ASSERT (mn[1][1] == 1); - ASSERT (M->p[1][1][0] == 1); - - /* Put B <-- B - q A */ - nn = submul (bp, bn, ap, an, M->p[1][0], mn[1][0]); - } - else if (mn[1][0] == 0) - { - /* B unchanged, M = (1, q; 0, 1) */ - ASSERT (mn[0][0] == 1); - ASSERT (M->p[0][0][0] == 1); - ASSERT (mn[1][1] == 1); - ASSERT (M->p[1][1][0] == 1); - - /* Put A <-- A - q * B */ - nn = submul (ap, an, bp, bn, M->p[0][1], mn[0][1]); - } - else - { - /* A = m00 a + m01 b ==> a <= A / m00, b <= A / m01. - B = m10 a + m11 b ==> a <= B / m10, b <= B / m11. */ - un = MIN (an - mn[0][0], bn - mn[1][0]) + 1; - vn = MIN (an - mn[0][1], bn - mn[1][1]) + 1; - - nn = MAX (un, vn); - /* In the range of interest, mulmod_bnm1 should always beat mullo. */ - modn = mpn_mulmod_bnm1_next_size (nn + 1); - - TMP_ALLOC_LIMBS_3 (tp, modn, - sp, modn, - scratch, mpn_mulmod_bnm1_itch (modn, modn, M->n)); - - ASSERT (n <= 2*modn); - - if (n > modn) - { - cy = mpn_add (ap, ap, modn, ap + modn, n - modn); - MPN_INCR_U (ap, modn, cy); - - cy = mpn_add (bp, bp, modn, bp + modn, n - modn); - MPN_INCR_U (bp, modn, cy); - - n = modn; - } - - mpn_mulmod_bnm1 (tp, modn, ap, n, M->p[1][1], mn[1][1], scratch); - mpn_mulmod_bnm1 (sp, modn, bp, n, M->p[0][1], mn[0][1], scratch); - - /* FIXME: Handle the small n case in some better way. */ - if (n + mn[1][1] < modn) - MPN_ZERO (tp + n + mn[1][1], modn - n - mn[1][1]); - if (n + mn[0][1] < modn) - MPN_ZERO (sp + n + mn[0][1], modn - n - mn[0][1]); - - cy = mpn_sub_n (tp, tp, sp, modn); - MPN_DECR_U (tp, modn, cy); - - ASSERT (mpn_zero_p (tp + nn, modn - nn)); - - mpn_mulmod_bnm1 (sp, modn, ap, n, M->p[1][0], mn[1][0], scratch); - MPN_COPY (ap, tp, nn); - mpn_mulmod_bnm1 (tp, modn, bp, n, M->p[0][0], mn[0][0], scratch); - - if (n + mn[1][0] < modn) - MPN_ZERO (sp + n + mn[1][0], modn - n - mn[1][0]); - if (n + mn[0][0] < modn) - MPN_ZERO (tp + n + mn[0][0], modn - n - mn[0][0]); - - cy = mpn_sub_n (tp, tp, sp, modn); - MPN_DECR_U (tp, modn, cy); - - ASSERT (mpn_zero_p (tp + nn, modn - nn)); - MPN_COPY (bp, tp, nn); - - while ( (ap[nn-1] | bp[nn-1]) == 0) - { - nn--; - ASSERT (nn > 0); - } - } - TMP_FREE; - - return nn; -} - -mp_size_t -mpn_hgcd_reduce_itch (mp_size_t n, mp_size_t p) -{ - mp_size_t itch; - if (BELOW_THRESHOLD (n, HGCD_REDUCE_THRESHOLD)) - { - itch = mpn_hgcd_itch (n-p); - - /* For arbitrary p, the storage for _adjust is 2*(p + M->n) = 2 * - (p + ceil((n-p)/2) - 1 <= n + p - 1 */ - if (itch < n + p - 1) - itch = n + p - 1; - } - else - { - itch = 2*(n-p) + mpn_hgcd_itch (n-p); - /* Currently, hgcd_matrix_apply allocates its own storage. */ - } - return itch; -} - -/* FIXME: Document storage need. */ -mp_size_t -mpn_hgcd_reduce (struct hgcd_matrix *M, - mp_ptr ap, mp_ptr bp, mp_size_t n, mp_size_t p, - mp_ptr tp) -{ - mp_size_t nn; - if (BELOW_THRESHOLD (n, HGCD_REDUCE_THRESHOLD)) - { - nn = mpn_hgcd (ap + p, bp + p, n - p, M, tp); - if (nn > 0) - /* Needs 2*(p + M->n) <= 2*(floor(n/2) + ceil(n/2) - 1) - = 2 (n - 1) */ - return mpn_hgcd_matrix_adjust (M, p + nn, ap, bp, p, tp); - } - else - { - MPN_COPY (tp, ap + p, n - p); - MPN_COPY (tp + n - p, bp + p, n - p); - if (mpn_hgcd_appr (tp, tp + n - p, n - p, M, tp + 2*(n-p))) - return hgcd_matrix_apply (M, ap, bp, n); - } - return 0; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_step.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_step.c deleted file mode 100644 index e58894ff3b420150525f7d38760d61671cdf6da7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/hgcd_step.c +++ /dev/null @@ -1,128 +0,0 @@ -/* hgcd_step.c. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2003-2005, 2008, 2011, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -static void -hgcd_hook (void *p, mp_srcptr gp, mp_size_t gn, - mp_srcptr qp, mp_size_t qn, int d) -{ - ASSERT (!gp); - ASSERT (d >= 0); - ASSERT (d <= 1); - - MPN_NORMALIZE (qp, qn); - if (qn > 0) - { - struct hgcd_matrix *M = (struct hgcd_matrix *) p; - /* NOTES: This is a bit ugly. A tp area is passed to - gcd_subdiv_step, which stores q at the start of that area. We - now use the rest. */ - mp_ptr tp = (mp_ptr) qp + qn; - mpn_hgcd_matrix_update_q (M, qp, qn, d, tp); - } -} - -/* Perform a few steps, using some of mpn_hgcd2, subtraction and - division. Reduces the size by almost one limb or more, but never - below the given size s. Return new size for a and b, or 0 if no - more steps are possible. - - If hgcd2 succeeds, needs temporary space for hgcd_matrix_mul_1, M->n - limbs, and hgcd_mul_matrix1_inverse_vector, n limbs. If hgcd2 - fails, needs space for the quotient, qn <= n - s limbs, for and - hgcd_matrix_update_q, qn + (size of the appropriate column of M) <= - (resulting size of M) + 1. - - If N is the input size to the calling hgcd, then s = floor(N/2) + - 1, M->n < N, qn + product size <= n - s + n - s + 1 = 2 (n - s) + 1 - <= N. -*/ - -mp_size_t -mpn_hgcd_step (mp_size_t n, mp_ptr ap, mp_ptr bp, mp_size_t s, - struct hgcd_matrix *M, mp_ptr tp) -{ - struct hgcd_matrix1 M1; - mp_limb_t mask; - mp_limb_t ah, al, bh, bl; - - ASSERT (n > s); - - mask = ap[n-1] | bp[n-1]; - ASSERT (mask > 0); - - if (n == s + 1) - { - if (mask < 4) - goto subtract; - - ah = ap[n-1]; al = ap[n-2]; - bh = bp[n-1]; bl = bp[n-2]; - } - else if (mask & GMP_NUMB_HIGHBIT) - { - ah = ap[n-1]; al = ap[n-2]; - bh = bp[n-1]; bl = bp[n-2]; - } - else - { - int shift; - - count_leading_zeros (shift, mask); - ah = MPN_EXTRACT_NUMB (shift, ap[n-1], ap[n-2]); - al = MPN_EXTRACT_NUMB (shift, ap[n-2], ap[n-3]); - bh = MPN_EXTRACT_NUMB (shift, bp[n-1], bp[n-2]); - bl = MPN_EXTRACT_NUMB (shift, bp[n-2], bp[n-3]); - } - - /* Try an mpn_hgcd2 step */ - if (mpn_hgcd2 (ah, al, bh, bl, &M1)) - { - /* Multiply M <- M * M1 */ - mpn_hgcd_matrix_mul_1 (M, &M1, tp); - - /* Can't swap inputs, so we need to copy. */ - MPN_COPY (tp, ap, n); - /* Multiply M1^{-1} (a;b) */ - return mpn_matrix22_mul1_inverse_vector (&M1, ap, tp, bp, n); - } - - subtract: - - return mpn_gcd_subdiv_step (ap, bp, n, s, hgcd_hook, M, tp); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/invert.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/invert.c deleted file mode 100644 index ba6364e18751e1e4e26c2a5910f4dd2a1ac57979..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/invert.c +++ /dev/null @@ -1,91 +0,0 @@ -/* invert.c -- Compute floor((B^{2n}-1)/U) - B^n. - - Contributed to the GNU project by Marco Bodrato. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright (C) 2007, 2009, 2010, 2012, 2014-2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -mpn_invert (mp_ptr ip, mp_srcptr dp, mp_size_t n, mp_ptr scratch) -{ - ASSERT (n > 0); - ASSERT (dp[n-1] & GMP_NUMB_HIGHBIT); - ASSERT (! MPN_OVERLAP_P (ip, n, dp, n)); - ASSERT (! MPN_OVERLAP_P (ip, n, scratch, mpn_invertappr_itch(n))); - ASSERT (! MPN_OVERLAP_P (dp, n, scratch, mpn_invertappr_itch(n))); - - if (n == 1) - invert_limb (*ip, *dp); - else if (BELOW_THRESHOLD (n, INV_APPR_THRESHOLD)) - { - /* Maximum scratch needed by this branch: 2*n */ - mp_size_t i; - mp_ptr xp; - - xp = scratch; /* 2 * n limbs */ - /* n > 1 here */ - i = n; - do - xp[--i] = GMP_NUMB_MAX; - while (i); - mpn_com (xp + n, dp, n); - if (n == 2) { - mpn_divrem_2 (ip, 0, xp, 4, dp); - } else { - gmp_pi1_t inv; - invert_pi1 (inv, dp[n-1], dp[n-2]); - /* FIXME: should we use dcpi1_div_q, for big sizes? */ - mpn_sbpi1_div_q (ip, xp, 2 * n, dp, n, inv.inv32); - } - } - else { /* Use approximated inverse; correct the result if needed. */ - mp_limb_t e; /* The possible error in the approximate inverse */ - - ASSERT ( mpn_invert_itch (n) >= mpn_invertappr_itch (n) ); - e = mpn_ni_invertappr (ip, dp, n, scratch); - - if (UNLIKELY (e)) { /* Assume the error can only be "0" (no error) or "1". */ - /* Code to detect and correct the "off by one" approximation. */ - mpn_mul_n (scratch, ip, dp, n); - e = mpn_add_n (scratch, scratch, dp, n); /* FIXME: we only need e.*/ - if (LIKELY(e)) /* The high part can not give a carry by itself. */ - e = mpn_add_nc (scratch + n, scratch + n, dp, n, e); /* FIXME:e */ - /* If the value was wrong (no carry), correct it (increment). */ - e ^= CNST_LIMB (1); - MPN_INCR_U (ip, n, e); - } - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/invertappr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/invertappr.c deleted file mode 100644 index c9d34758faec5f6880203fab7daec0720d688c68..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/invertappr.c +++ /dev/null @@ -1,305 +0,0 @@ -/* mpn_invertappr and helper functions. Compute I such that - floor((B^{2n}-1)/U - 1 <= I + B^n <= floor((B^{2n}-1)/U. - - Contributed to the GNU project by Marco Bodrato. - - The algorithm used here was inspired by ApproximateReciprocal from "Modern - Computer Arithmetic", by Richard P. Brent and Paul Zimmermann. Special - thanks to Paul Zimmermann for his very valuable suggestions on all the - theoretical aspects during the work on this code. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright (C) 2007, 2009, 2010, 2012, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* FIXME: The iterative version splits the operand in two slightly unbalanced - parts, the use of log_2 (or counting the bits) underestimate the maximum - number of iterations. */ - -#if TUNE_PROGRAM_BUILD -#define NPOWS \ - ((sizeof(mp_size_t) > 6 ? 48 : 8*sizeof(mp_size_t))) -#define MAYBE_dcpi1_divappr 1 -#else -#define NPOWS \ - ((sizeof(mp_size_t) > 6 ? 48 : 8*sizeof(mp_size_t)) - LOG2C (INV_NEWTON_THRESHOLD)) -#define MAYBE_dcpi1_divappr \ - (INV_NEWTON_THRESHOLD < DC_DIVAPPR_Q_THRESHOLD) -#if (INV_NEWTON_THRESHOLD > INV_MULMOD_BNM1_THRESHOLD) && \ - (INV_APPR_THRESHOLD > INV_MULMOD_BNM1_THRESHOLD) -#undef INV_MULMOD_BNM1_THRESHOLD -#define INV_MULMOD_BNM1_THRESHOLD 0 /* always when Newton */ -#endif -#endif - -/* All the three functions mpn{,_bc,_ni}_invertappr (ip, dp, n, scratch), take - the strictly normalised value {dp,n} (i.e., most significant bit must be set) - as an input, and compute {ip,n}: the approximate reciprocal of {dp,n}. - - Let e = mpn*_invertappr (ip, dp, n, scratch) be the returned value; the - following conditions are satisfied by the output: - 0 <= e <= 1; - {dp,n}*(B^n+{ip,n}) < B^{2n} <= {dp,n}*(B^n+{ip,n}+1+e) . - I.e. e=0 means that the result {ip,n} equals the one given by mpn_invert. - e=1 means that the result _may_ be one less than expected. - - The _bc version returns e=1 most of the time. - The _ni version should return e=0 most of the time; only about 1% of - possible random input should give e=1. - - When the strict result is needed, i.e., e=0 in the relation above: - {dp,n}*(B^n+{ip,n}) < B^{2n} <= {dp,n}*(B^n+{ip,n}+1) ; - the function mpn_invert (ip, dp, n, scratch) should be used instead. */ - -/* Maximum scratch needed by this branch (at xp): 2*n */ -static mp_limb_t -mpn_bc_invertappr (mp_ptr ip, mp_srcptr dp, mp_size_t n, mp_ptr xp) -{ - ASSERT (n > 0); - ASSERT (dp[n-1] & GMP_NUMB_HIGHBIT); - ASSERT (! MPN_OVERLAP_P (ip, n, dp, n)); - ASSERT (! MPN_OVERLAP_P (ip, n, xp, mpn_invertappr_itch(n))); - ASSERT (! MPN_OVERLAP_P (dp, n, xp, mpn_invertappr_itch(n))); - - /* Compute a base value of r limbs. */ - if (n == 1) - invert_limb (*ip, *dp); - else { - mp_size_t i; - - /* n > 1 here */ - i = n; - do - xp[--i] = GMP_NUMB_MAX; - while (i); - mpn_com (xp + n, dp, n); - - /* Now xp contains B^2n - {dp,n}*B^n - 1 */ - - /* FIXME: if mpn_*pi1_divappr_q handles n==2, use it! */ - if (n == 2) { - mpn_divrem_2 (ip, 0, xp, 4, dp); - } else { - gmp_pi1_t inv; - invert_pi1 (inv, dp[n-1], dp[n-2]); - if (! MAYBE_dcpi1_divappr - || BELOW_THRESHOLD (n, DC_DIVAPPR_Q_THRESHOLD)) - mpn_sbpi1_divappr_q (ip, xp, 2 * n, dp, n, inv.inv32); - else - mpn_dcpi1_divappr_q (ip, xp, 2 * n, dp, n, &inv); - MPN_DECR_U(ip, n, CNST_LIMB (1)); - return 1; - } - } - return 0; -} - -/* mpn_ni_invertappr: computes the approximate reciprocal using Newton's - iterations (at least one). - - Inspired by Algorithm "ApproximateReciprocal", published in "Modern Computer - Arithmetic" by Richard P. Brent and Paul Zimmermann, algorithm 3.5, page 121 - in version 0.4 of the book. - - Some adaptations were introduced, to allow product mod B^m-1 and return the - value e. - - We introduced a correction in such a way that "the value of - B^{n+h}-T computed at step 8 cannot exceed B^n-1" (the book reads - "2B^n-1"). - - Maximum scratch needed by this branch <= 2*n, but have to fit 3*rn - in the scratch, i.e. 3*rn <= 2*n: we require n>4. - - We use a wrapped product modulo B^m-1. NOTE: is there any normalisation - problem for the [0] class? It shouldn't: we compute 2*|A*X_h - B^{n+h}| < - B^m-1. We may get [0] if and only if we get AX_h = B^{n+h}. This can - happen only if A=B^{n}/2, but this implies X_h = B^{h}*2-1 i.e., AX_h = - B^{n+h} - A, then we get into the "negative" branch, where X_h is not - incremented (because A < B^n). - - FIXME: the scratch for mulmod_bnm1 does not currently fit in the scratch, it - is allocated apart. - */ - -mp_limb_t -mpn_ni_invertappr (mp_ptr ip, mp_srcptr dp, mp_size_t n, mp_ptr scratch) -{ - mp_limb_t cy; - mp_size_t rn, mn; - mp_size_t sizes[NPOWS], *sizp; - mp_ptr tp; - TMP_DECL; -#define xp scratch - - ASSERT (n > 4); - ASSERT (dp[n-1] & GMP_NUMB_HIGHBIT); - ASSERT (! MPN_OVERLAP_P (ip, n, dp, n)); - ASSERT (! MPN_OVERLAP_P (ip, n, scratch, mpn_invertappr_itch(n))); - ASSERT (! MPN_OVERLAP_P (dp, n, scratch, mpn_invertappr_itch(n))); - - /* Compute the computation precisions from highest to lowest, leaving the - base case size in 'rn'. */ - sizp = sizes; - rn = n; - do { - *sizp = rn; - rn = (rn >> 1) + 1; - ++sizp; - } while (ABOVE_THRESHOLD (rn, INV_NEWTON_THRESHOLD)); - - /* We search the inverse of 0.{dp,n}, we compute it as 1.{ip,n} */ - dp += n; - ip += n; - - /* Compute a base value of rn limbs. */ - mpn_bc_invertappr (ip - rn, dp - rn, rn, scratch); - - TMP_MARK; - - if (ABOVE_THRESHOLD (n, INV_MULMOD_BNM1_THRESHOLD)) - { - mn = mpn_mulmod_bnm1_next_size (n + 1); - tp = TMP_ALLOC_LIMBS (mpn_mulmod_bnm1_itch (mn, n, (n >> 1) + 1)); - } - /* Use Newton's iterations to get the desired precision.*/ - - while (1) { - n = *--sizp; - /* - v n v - +----+--+ - ^ rn ^ - */ - - /* Compute i_jd . */ - if (BELOW_THRESHOLD (n, INV_MULMOD_BNM1_THRESHOLD) - || ((mn = mpn_mulmod_bnm1_next_size (n + 1)) > (n + rn))) { - /* FIXME: We do only need {xp,n+1}*/ - mpn_mul (xp, dp - n, n, ip - rn, rn); - mpn_add_n (xp + rn, xp + rn, dp - n, n - rn + 1); - cy = CNST_LIMB(1); /* Remember we truncated, Mod B^(n+1) */ - /* We computed (truncated) {xp,n+1} <- 1.{ip,rn} * 0.{dp,n} */ - } else { /* Use B^mn-1 wraparound */ - mpn_mulmod_bnm1 (xp, mn, dp - n, n, ip - rn, rn, tp); - /* We computed {xp,mn} <- {ip,rn} * {dp,n} mod (B^mn-1) */ - /* We know that 2*|ip*dp + dp*B^rn - B^{rn+n}| < B^mn-1 */ - /* Add dp*B^rn mod (B^mn-1) */ - ASSERT (n >= mn - rn); - cy = mpn_add_n (xp + rn, xp + rn, dp - n, mn - rn); - cy = mpn_add_nc (xp, xp, dp - (n - (mn - rn)), n - (mn - rn), cy); - /* Subtract B^{rn+n}, maybe only compensate the carry*/ - xp[mn] = CNST_LIMB (1); /* set a limit for DECR_U */ - MPN_DECR_U (xp + rn + n - mn, 2 * mn + 1 - rn - n, CNST_LIMB (1) - cy); - MPN_DECR_U (xp, mn, CNST_LIMB (1) - xp[mn]); /* if DECR_U eroded xp[mn] */ - cy = CNST_LIMB(0); /* Remember we are working Mod B^mn-1 */ - } - - if (xp[n] < CNST_LIMB (2)) { /* "positive" residue class */ - cy = xp[n]; /* 0 <= cy <= 1 here. */ -#if HAVE_NATIVE_mpn_sublsh1_n - if (cy++) { - if (mpn_cmp (xp, dp - n, n) > 0) { - mp_limb_t chk; - chk = mpn_sublsh1_n (xp, xp, dp - n, n); - ASSERT (chk == xp[n]); - ++ cy; - } else - ASSERT_CARRY (mpn_sub_n (xp, xp, dp - n, n)); - } -#else /* no mpn_sublsh1_n*/ - if (cy++ && !mpn_sub_n (xp, xp, dp - n, n)) { - ASSERT_CARRY (mpn_sub_n (xp, xp, dp - n, n)); - ++cy; - } -#endif - /* 1 <= cy <= 3 here. */ -#if HAVE_NATIVE_mpn_rsblsh1_n - if (mpn_cmp (xp, dp - n, n) > 0) { - ASSERT_NOCARRY (mpn_rsblsh1_n (xp + n, xp, dp - n, n)); - ++cy; - } else - ASSERT_NOCARRY (mpn_sub_nc (xp + 2 * n - rn, dp - rn, xp + n - rn, rn, mpn_cmp (xp, dp - n, n - rn) > 0)); -#else /* no mpn_rsblsh1_n*/ - if (mpn_cmp (xp, dp - n, n) > 0) { - ASSERT_NOCARRY (mpn_sub_n (xp, xp, dp - n, n)); - ++cy; - } - ASSERT_NOCARRY (mpn_sub_nc (xp + 2 * n - rn, dp - rn, xp + n - rn, rn, mpn_cmp (xp, dp - n, n - rn) > 0)); -#endif - MPN_DECR_U(ip - rn, rn, cy); /* 1 <= cy <= 4 here. */ - } else { /* "negative" residue class */ - ASSERT (xp[n] >= GMP_NUMB_MAX - CNST_LIMB(1)); - MPN_DECR_U(xp, n + 1, cy); - if (xp[n] != GMP_NUMB_MAX) { - MPN_INCR_U(ip - rn, rn, CNST_LIMB (1)); - ASSERT_CARRY (mpn_add_n (xp, xp, dp - n, n)); - } - mpn_com (xp + 2 * n - rn, xp + n - rn, rn); - } - - /* Compute x_ju_j. FIXME:We need {xp+rn,rn}, mulhi? */ - mpn_mul_n (xp, xp + 2 * n - rn, ip - rn, rn); - cy = mpn_add_n (xp + rn, xp + rn, xp + 2 * n - rn, 2 * rn - n); - cy = mpn_add_nc (ip - n, xp + 3 * rn - n, xp + n + rn, n - rn, cy); - MPN_INCR_U (ip - rn, rn, cy); - if (sizp == sizes) { /* Get out of the cycle */ - /* Check for possible carry propagation from below. */ - cy = xp[3 * rn - n - 1] > GMP_NUMB_MAX - CNST_LIMB (7); /* Be conservative. */ - /* cy = mpn_add_1 (xp + rn, xp + rn, 2*rn - n, 4); */ - break; - } - rn = n; - } - TMP_FREE; - - return cy; -#undef xp -} - -mp_limb_t -mpn_invertappr (mp_ptr ip, mp_srcptr dp, mp_size_t n, mp_ptr scratch) -{ - ASSERT (n > 0); - ASSERT (dp[n-1] & GMP_NUMB_HIGHBIT); - ASSERT (! MPN_OVERLAP_P (ip, n, dp, n)); - ASSERT (! MPN_OVERLAP_P (ip, n, scratch, mpn_invertappr_itch(n))); - ASSERT (! MPN_OVERLAP_P (dp, n, scratch, mpn_invertappr_itch(n))); - - if (BELOW_THRESHOLD (n, INV_NEWTON_THRESHOLD)) - return mpn_bc_invertappr (ip, dp, n, scratch); - else - return mpn_ni_invertappr (ip, dp, n, scratch); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/jacbase.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/jacbase.c deleted file mode 100644 index cd52bc951339530aaf010755e09ae9719f41f646..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/jacbase.c +++ /dev/null @@ -1,243 +0,0 @@ -/* mpn_jacobi_base -- limb/limb Jacobi symbol with restricted arguments. - - THIS INTERFACE IS PRELIMINARY AND MIGHT DISAPPEAR OR BE SUBJECT TO - INCOMPATIBLE CHANGES IN A FUTURE RELEASE OF GMP. - -Copyright 1999-2002, 2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* Use the simple loop by default. The generic count_trailing_zeros is not - very fast, and the extra trickery of method 3 has proven to be less use - than might have been though. */ -#ifndef JACOBI_BASE_METHOD -#define JACOBI_BASE_METHOD 2 -#endif - - -/* Use count_trailing_zeros. */ -#if JACOBI_BASE_METHOD == 1 -#define PROCESS_TWOS_ANY \ - { \ - mp_limb_t twos; \ - count_trailing_zeros (twos, a); \ - result_bit1 ^= JACOBI_TWOS_U_BIT1 (twos, b); \ - a >>= twos; \ - } -#define PROCESS_TWOS_EVEN PROCESS_TWOS_ANY -#endif - -/* Use a simple loop. A disadvantage of this is that there's a branch on a - 50/50 chance of a 0 or 1 low bit. */ -#if JACOBI_BASE_METHOD == 2 -#define PROCESS_TWOS_EVEN \ - { \ - int two; \ - two = JACOBI_TWO_U_BIT1 (b); \ - do \ - { \ - a >>= 1; \ - result_bit1 ^= two; \ - ASSERT (a != 0); \ - } \ - while ((a & 1) == 0); \ - } -#define PROCESS_TWOS_ANY \ - if ((a & 1) == 0) \ - PROCESS_TWOS_EVEN; -#endif - -/* Process one bit arithmetically, then a simple loop. This cuts the loop - condition down to a 25/75 chance, which should branch predict better. - The CPU will need a reasonable variable left shift. */ -#if JACOBI_BASE_METHOD == 3 -#define PROCESS_TWOS_EVEN \ - { \ - int two, mask, shift; \ - \ - two = JACOBI_TWO_U_BIT1 (b); \ - mask = (~a & 2); \ - a >>= 1; \ - \ - shift = (~a & 1); \ - a >>= shift; \ - result_bit1 ^= two ^ (two & mask); \ - \ - while ((a & 1) == 0) \ - { \ - a >>= 1; \ - result_bit1 ^= two; \ - ASSERT (a != 0); \ - } \ - } -#define PROCESS_TWOS_ANY \ - { \ - int two, mask, shift; \ - \ - two = JACOBI_TWO_U_BIT1 (b); \ - shift = (~a & 1); \ - a >>= shift; \ - \ - mask = shift << 1; \ - result_bit1 ^= (two & mask); \ - \ - while ((a & 1) == 0) \ - { \ - a >>= 1; \ - result_bit1 ^= two; \ - ASSERT (a != 0); \ - } \ - } -#endif - -#if JACOBI_BASE_METHOD < 4 -/* Calculate the value of the Jacobi symbol (a/b) of two mp_limb_t's, but - with a restricted range of inputs accepted, namely b>1, b odd. - - The initial result_bit1 is taken as a parameter for the convenience of - mpz_kronecker_ui() et al. The sign changes both here and in those - routines accumulate nicely in bit 1, see the JACOBI macros. - - The return value here is the normal +1, 0, or -1. Note that +1 and -1 - have bit 1 in the "BIT1" sense, which could be useful if the caller is - accumulating it into some extended calculation. - - Duplicating the loop body to avoid the MP_LIMB_T_SWAP(a,b) would be - possible, but a couple of tests suggest it's not a significant speedup, - and may even be a slowdown, so what's here is good enough for now. */ - -int -mpn_jacobi_base (mp_limb_t a, mp_limb_t b, int result_bit1) -{ - ASSERT (b & 1); /* b odd */ - ASSERT (b != 1); - - if (a == 0) - return 0; - - PROCESS_TWOS_ANY; - if (a == 1) - goto done; - - if (a >= b) - goto a_gt_b; - - for (;;) - { - result_bit1 ^= JACOBI_RECIP_UU_BIT1 (a, b); - MP_LIMB_T_SWAP (a, b); - - a_gt_b: - do - { - /* working on (a/b), a,b odd, a>=b */ - ASSERT (a & 1); - ASSERT (b & 1); - ASSERT (a >= b); - - if ((a -= b) == 0) - return 0; - - PROCESS_TWOS_EVEN; - if (a == 1) - goto done; - } - while (a >= b); - } - - done: - return JACOBI_BIT1_TO_PN (result_bit1); -} -#endif - -#if JACOBI_BASE_METHOD == 4 -/* Computes (a/b) for odd b > 1 and any a. The initial bit is taken as a - * parameter. We have no need for the convention that the sign is in - * bit 1, internally we use bit 0. */ - -/* FIXME: Could try table-based count_trailing_zeros. */ -int -mpn_jacobi_base (mp_limb_t a, mp_limb_t b, int bit) -{ - int c; - - ASSERT (b & 1); - ASSERT (b > 1); - - if (a == 0) - /* This is the only line which depends on b > 1 */ - return 0; - - bit >>= 1; - - /* Below, we represent a and b shifted right so that the least - significant one bit is implicit. */ - - b >>= 1; - - count_trailing_zeros (c, a); - bit ^= c & (b ^ (b >> 1)); - - /* We may have c==GMP_LIMB_BITS-1, so we can't use a>>c+1. */ - a >>= c; - a >>= 1; - - do - { - mp_limb_t t = a - b; - mp_limb_t bgta = LIMB_HIGHBIT_TO_MASK (t); - - if (t == 0) - return 0; - - /* If b > a, invoke reciprocity */ - bit ^= (bgta & a & b); - - /* b <-- min (a, b) */ - b += (bgta & t); - - /* a <-- |a - b| */ - a = (t ^ bgta) - bgta; - - /* Number of trailing zeros is the same no matter if we look at - * t or a, but using t gives more parallelism. */ - count_trailing_zeros (c, t); - c ++; - /* (2/b) = -1 if b = 3 or 5 mod 8 */ - bit ^= c & (b ^ (b >> 1)); - a >>= c; - } - while (b > 0); - - return 1-2*(bit & 1); -} -#endif /* JACOBI_BASE_METHOD == 4 */ diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/jacobi.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/jacobi.c deleted file mode 100644 index bdc3ec67da1bc5a929598201435cedd725c192c3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/jacobi.c +++ /dev/null @@ -1,295 +0,0 @@ -/* jacobi.c - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 1996, 1998, 2000-2004, 2008, 2010, 2011 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef JACOBI_DC_THRESHOLD -#define JACOBI_DC_THRESHOLD GCD_DC_THRESHOLD -#endif - -/* Schönhage's rules: - * - * Assume r0 = r1 q1 + r2, with r0 odd, and r1 = q2 r2 + r3 - * - * If r1 is odd, then - * - * (r1 | r0) = s(r1, r0) (r0 | r1) = s(r1, r0) (r2, r1) - * - * where s(x,y) = (-1)^{(x-1)(y-1)/4} = (-1)^[x = y = 3 (mod 4)]. - * - * If r1 is even, r2 must be odd. We have - * - * (r1 | r0) = (r1 - r0 | r0) = (-1)^(r0-1)/2 (r0 - r1 | r0) - * = (-1)^(r0-1)/2 s(r0, r0 - r1) (r0 | r0 - r1) - * = (-1)^(r0-1)/2 s(r0, r0 - r1) (r1 | r0 - r1) - * - * Now, if r1 = 0 (mod 4), then the sign factor is +1, and repeating - * q1 times gives - * - * (r1 | r0) = (r1 | r2) = (r3 | r2) - * - * On the other hand, if r1 = 2 (mod 4), the sign factor is - * (-1)^{(r0-1)/2}, and repeating q1 times gives the exponent - * - * (r0-1)/2 + (r0-r1-1)/2 + ... + (r0 - (q1-1) r1)/2 - * = q1 (r0-1)/2 + q1 (q1-1)/2 - * - * and we can summarize the even case as - * - * (r1 | r0) = t(r1, r0, q1) (r3 | r2) - * - * where t(x,y,q) = (-1)^{[x = 2 (mod 4)] (q(y-1)/2 + y(q-1)/2)} - * - * What about termination? The remainder sequence ends with (0|1) = 1 - * (or (0 | r) = 0 if r != 1). What are the possible cases? If r1 is - * odd, r2 may be zero. If r1 is even, then r2 = r0 - q1 r1 is odd and - * hence non-zero. We may have r3 = r1 - q2 r2 = 0. - * - * Examples: (11|15) = - (15|11) = - (4|11) - * (4|11) = (4| 3) = (1| 3) - * (1| 3) = (3|1) = (0|1) = 1 - * - * (2|7) = (2|1) = (0|1) = 1 - * - * Detail: (2|7) = (2-7|7) = (-1|7)(5|7) = -(7|5) = -(2|5) - * (2|5) = (2-5|5) = (-1|5)(3|5) = (5|3) = (2|3) - * (2|3) = (2-3|3) = (-1|3)(1|3) = -(3|1) = -(2|1) - * - */ - -/* In principle, the state consists of four variables: e (one bit), a, - b (two bits each), d (one bit). Collected factors are (-1)^e. a and - b are the least significant bits of the current remainders. d - (denominator) is 0 if we're currently subtracting multiplies of a - from b, and 1 if we're subtracting b from a. - - e is stored in the least significant bit, while a, b and d are - coded as only 13 distinct values in bits 1-4, according to the - following table. For rows not mentioning d, the value is either - implied, or it doesn't matter. */ - -#if WANT_ASSERT -static const struct -{ - unsigned char a; - unsigned char b; -} decode_table[13] = { - /* 0 */ { 0, 1 }, - /* 1 */ { 0, 3 }, - /* 2 */ { 1, 1 }, - /* 3 */ { 1, 3 }, - /* 4 */ { 2, 1 }, - /* 5 */ { 2, 3 }, - /* 6 */ { 3, 1 }, - /* 7 */ { 3, 3 }, /* d = 1 */ - /* 8 */ { 1, 0 }, - /* 9 */ { 1, 2 }, - /* 10 */ { 3, 0 }, - /* 11 */ { 3, 2 }, - /* 12 */ { 3, 3 }, /* d = 0 */ -}; -#define JACOBI_A(bits) (decode_table[(bits)>>1].a) -#define JACOBI_B(bits) (decode_table[(bits)>>1].b) -#endif /* WANT_ASSERT */ - -const unsigned char jacobi_table[208] = { -#include "jacobitab.h" -}; - -#define BITS_FAIL 31 - -static void -jacobi_hook (void *p, mp_srcptr gp, mp_size_t gn, - mp_srcptr qp, mp_size_t qn, int d) -{ - unsigned *bitsp = (unsigned *) p; - - if (gp) - { - ASSERT (gn > 0); - if (gn != 1 || gp[0] != 1) - { - *bitsp = BITS_FAIL; - return; - } - } - - if (qp) - { - ASSERT (qn > 0); - ASSERT (d >= 0); - *bitsp = mpn_jacobi_update (*bitsp, d, qp[0] & 3); - } -} - -#define CHOOSE_P(n) (2*(n) / 3) - -int -mpn_jacobi_n (mp_ptr ap, mp_ptr bp, mp_size_t n, unsigned bits) -{ - mp_size_t scratch; - mp_size_t matrix_scratch; - mp_ptr tp; - - TMP_DECL; - - ASSERT (n > 0); - ASSERT ( (ap[n-1] | bp[n-1]) > 0); - ASSERT ( (bp[0] | ap[0]) & 1); - - /* FIXME: Check for small sizes first, before setting up temporary - storage etc. */ - scratch = MPN_GCD_SUBDIV_STEP_ITCH(n); - - if (ABOVE_THRESHOLD (n, GCD_DC_THRESHOLD)) - { - mp_size_t hgcd_scratch; - mp_size_t update_scratch; - mp_size_t p = CHOOSE_P (n); - mp_size_t dc_scratch; - - matrix_scratch = MPN_HGCD_MATRIX_INIT_ITCH (n - p); - hgcd_scratch = mpn_hgcd_itch (n - p); - update_scratch = p + n - 1; - - dc_scratch = matrix_scratch + MAX(hgcd_scratch, update_scratch); - if (dc_scratch > scratch) - scratch = dc_scratch; - } - - TMP_MARK; - tp = TMP_ALLOC_LIMBS(scratch); - - while (ABOVE_THRESHOLD (n, JACOBI_DC_THRESHOLD)) - { - struct hgcd_matrix M; - mp_size_t p = 2*n/3; - mp_size_t matrix_scratch = MPN_HGCD_MATRIX_INIT_ITCH (n - p); - mp_size_t nn; - mpn_hgcd_matrix_init (&M, n - p, tp); - - nn = mpn_hgcd_jacobi (ap + p, bp + p, n - p, &M, &bits, - tp + matrix_scratch); - if (nn > 0) - { - ASSERT (M.n <= (n - p - 1)/2); - ASSERT (M.n + p <= (p + n - 1) / 2); - /* Temporary storage 2 (p + M->n) <= p + n - 1. */ - n = mpn_hgcd_matrix_adjust (&M, p + nn, ap, bp, p, tp + matrix_scratch); - } - else - { - /* Temporary storage n */ - n = mpn_gcd_subdiv_step (ap, bp, n, 0, jacobi_hook, &bits, tp); - if (!n) - { - TMP_FREE; - return bits == BITS_FAIL ? 0 : mpn_jacobi_finish (bits); - } - } - } - - while (n > 2) - { - struct hgcd_matrix1 M; - mp_limb_t ah, al, bh, bl; - mp_limb_t mask; - - mask = ap[n-1] | bp[n-1]; - ASSERT (mask > 0); - - if (mask & GMP_NUMB_HIGHBIT) - { - ah = ap[n-1]; al = ap[n-2]; - bh = bp[n-1]; bl = bp[n-2]; - } - else - { - int shift; - - count_leading_zeros (shift, mask); - ah = MPN_EXTRACT_NUMB (shift, ap[n-1], ap[n-2]); - al = MPN_EXTRACT_NUMB (shift, ap[n-2], ap[n-3]); - bh = MPN_EXTRACT_NUMB (shift, bp[n-1], bp[n-2]); - bl = MPN_EXTRACT_NUMB (shift, bp[n-2], bp[n-3]); - } - - /* Try an mpn_nhgcd2 step */ - if (mpn_hgcd2_jacobi (ah, al, bh, bl, &M, &bits)) - { - n = mpn_matrix22_mul1_inverse_vector (&M, tp, ap, bp, n); - MP_PTR_SWAP (ap, tp); - } - else - { - /* mpn_hgcd2 has failed. Then either one of a or b is very - small, or the difference is very small. Perform one - subtraction followed by one division. */ - n = mpn_gcd_subdiv_step (ap, bp, n, 0, &jacobi_hook, &bits, tp); - if (!n) - { - TMP_FREE; - return bits == BITS_FAIL ? 0 : mpn_jacobi_finish (bits); - } - } - } - - if (bits >= 16) - MP_PTR_SWAP (ap, bp); - - ASSERT (bp[0] & 1); - - if (n == 1) - { - mp_limb_t al, bl; - al = ap[0]; - bl = bp[0]; - - TMP_FREE; - if (bl == 1) - return 1 - 2*(bits & 1); - else - return mpn_jacobi_base (al, bl, bits << 1); - } - - else - { - int res = mpn_jacobi_2 (ap, bp, bits & 1); - TMP_FREE; - return res; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/jacobi_2.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/jacobi_2.c deleted file mode 100644 index 9f480f7834a19fb0a02a6b9e517a735ddb75d949..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/jacobi_2.c +++ /dev/null @@ -1,352 +0,0 @@ -/* jacobi_2.c - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 1996, 1998, 2000-2004, 2008, 2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef JACOBI_2_METHOD -#define JACOBI_2_METHOD 2 -#endif - -/* Computes (a / b) where b is odd, and a and b are otherwise arbitrary - two-limb numbers. */ -#if JACOBI_2_METHOD == 1 -int -mpn_jacobi_2 (mp_srcptr ap, mp_srcptr bp, unsigned bit) -{ - mp_limb_t ah, al, bh, bl; - int c; - - al = ap[0]; - ah = ap[1]; - bl = bp[0]; - bh = bp[1]; - - ASSERT (bl & 1); - - bl = ((bh << (GMP_NUMB_BITS - 1)) & GMP_NUMB_MASK) | (bl >> 1); - bh >>= 1; - - if ( (bh | bl) == 0) - return 1 - 2*(bit & 1); - - if ( (ah | al) == 0) - return 0; - - if (al == 0) - { - al = ah; - ah = 0; - bit ^= GMP_NUMB_BITS & (bl ^ (bl >> 1)); - } - count_trailing_zeros (c, al); - bit ^= c & (bl ^ (bl >> 1)); - - c++; - if (UNLIKELY (c == GMP_NUMB_BITS)) - { - al = ah; - ah = 0; - } - else - { - al = ((ah << (GMP_NUMB_BITS - c)) & GMP_NUMB_MASK) | (al >> c); - ah >>= c; - } - while ( (ah | bh) > 0) - { - mp_limb_t th, tl; - mp_limb_t bgta; - - sub_ddmmss (th, tl, ah, al, bh, bl); - if ( (tl | th) == 0) - return 0; - - bgta = LIMB_HIGHBIT_TO_MASK (th); - - /* If b > a, invoke reciprocity */ - bit ^= (bgta & al & bl); - - /* b <-- min (a, b) */ - add_ssaaaa (bh, bl, bh, bl, th & bgta, tl & bgta); - - if ( (bh | bl) == 0) - return 1 - 2*(bit & 1); - - /* a <-- |a - b| */ - al = (bgta ^ tl) - bgta; - ah = (bgta ^ th); - - if (UNLIKELY (al == 0)) - { - /* If b > a, al == 0 implies that we have a carry to - propagate. */ - al = ah - bgta; - ah = 0; - bit ^= GMP_NUMB_BITS & (bl ^ (bl >> 1)); - } - count_trailing_zeros (c, al); - c++; - bit ^= c & (bl ^ (bl >> 1)); - - if (UNLIKELY (c == GMP_NUMB_BITS)) - { - al = ah; - ah = 0; - } - else - { - al = ((ah << (GMP_NUMB_BITS - c)) & GMP_NUMB_MASK) | (al >> c); - ah >>= c; - } - } - - ASSERT (bl > 0); - - while ( (al | bl) & GMP_LIMB_HIGHBIT) - { - /* Need an extra comparison to get the mask. */ - mp_limb_t t = al - bl; - mp_limb_t bgta = - (bl > al); - - if (t == 0) - return 0; - - /* If b > a, invoke reciprocity */ - bit ^= (bgta & al & bl); - - /* b <-- min (a, b) */ - bl += (bgta & t); - - /* a <-- |a - b| */ - al = (t ^ bgta) - bgta; - - /* Number of trailing zeros is the same no matter if we look at - * t or a, but using t gives more parallelism. */ - count_trailing_zeros (c, t); - c ++; - /* (2/b) = -1 if b = 3 or 5 mod 8 */ - bit ^= c & (bl ^ (bl >> 1)); - - if (UNLIKELY (c == GMP_NUMB_BITS)) - return 1 - 2*(bit & 1); - - al >>= c; - } - - /* Here we have a little impedance mismatch. Better to inline it? */ - return mpn_jacobi_base (2*al+1, 2*bl+1, bit << 1); -} -#elif JACOBI_2_METHOD == 2 -int -mpn_jacobi_2 (mp_srcptr ap, mp_srcptr bp, unsigned bit) -{ - mp_limb_t ah, al, bh, bl; - int c; - - al = ap[0]; - ah = ap[1]; - bl = bp[0]; - bh = bp[1]; - - ASSERT (bl & 1); - - /* Use bit 1. */ - bit <<= 1; - - if (bh == 0 && bl == 1) - /* (a|1) = 1 */ - return 1 - (bit & 2); - - if (al == 0) - { - if (ah == 0) - /* (0|b) = 0, b > 1 */ - return 0; - - count_trailing_zeros (c, ah); - bit ^= ((GMP_NUMB_BITS + c) << 1) & (bl ^ (bl >> 1)); - - al = bl; - bl = ah >> c; - - if (bl == 1) - /* (1|b) = 1 */ - return 1 - (bit & 2); - - ah = bh; - - bit ^= al & bl; - - goto b_reduced; - } - if ( (al & 1) == 0) - { - count_trailing_zeros (c, al); - - al = ((ah << (GMP_NUMB_BITS - c)) & GMP_NUMB_MASK) | (al >> c); - ah >>= c; - bit ^= (c << 1) & (bl ^ (bl >> 1)); - } - if (ah == 0) - { - if (bh > 0) - { - bit ^= al & bl; - MP_LIMB_T_SWAP (al, bl); - ah = bh; - goto b_reduced; - } - goto ab_reduced; - } - - while (bh > 0) - { - /* Compute (a|b) */ - while (ah > bh) - { - sub_ddmmss (ah, al, ah, al, bh, bl); - if (al == 0) - { - count_trailing_zeros (c, ah); - bit ^= ((GMP_NUMB_BITS + c) << 1) & (bl ^ (bl >> 1)); - - al = bl; - bl = ah >> c; - ah = bh; - - bit ^= al & bl; - goto b_reduced; - } - count_trailing_zeros (c, al); - bit ^= (c << 1) & (bl ^ (bl >> 1)); - al = ((ah << (GMP_NUMB_BITS - c)) & GMP_NUMB_MASK) | (al >> c); - ah >>= c; - } - if (ah == bh) - goto cancel_hi; - - if (ah == 0) - { - bit ^= al & bl; - MP_LIMB_T_SWAP (al, bl); - ah = bh; - break; - } - - bit ^= al & bl; - - /* Compute (b|a) */ - while (bh > ah) - { - sub_ddmmss (bh, bl, bh, bl, ah, al); - if (bl == 0) - { - count_trailing_zeros (c, bh); - bit ^= ((GMP_NUMB_BITS + c) << 1) & (al ^ (al >> 1)); - - bl = bh >> c; - bit ^= al & bl; - goto b_reduced; - } - count_trailing_zeros (c, bl); - bit ^= (c << 1) & (al ^ (al >> 1)); - bl = ((bh << (GMP_NUMB_BITS - c)) & GMP_NUMB_MASK) | (bl >> c); - bh >>= c; - } - bit ^= al & bl; - - /* Compute (a|b) */ - if (ah == bh) - { - cancel_hi: - if (al < bl) - { - MP_LIMB_T_SWAP (al, bl); - bit ^= al & bl; - } - al -= bl; - if (al == 0) - return 0; - - count_trailing_zeros (c, al); - bit ^= (c << 1) & (bl ^ (bl >> 1)); - al >>= c; - - if (al == 1) - return 1 - (bit & 2); - - MP_LIMB_T_SWAP (al, bl); - bit ^= al & bl; - break; - } - } - - b_reduced: - /* Compute (a|b), with b a single limb. */ - ASSERT (bl & 1); - - if (bl == 1) - /* (a|1) = 1 */ - return 1 - (bit & 2); - - while (ah > 0) - { - ah -= (al < bl); - al -= bl; - if (al == 0) - { - if (ah == 0) - return 0; - count_trailing_zeros (c, ah); - bit ^= ((GMP_NUMB_BITS + c) << 1) & (bl ^ (bl >> 1)); - al = ah >> c; - goto ab_reduced; - } - count_trailing_zeros (c, al); - - al = ((ah << (GMP_NUMB_BITS - c)) & GMP_NUMB_MASK) | (al >> c); - ah >>= c; - bit ^= (c << 1) & (bl ^ (bl >> 1)); - } - ab_reduced: - ASSERT (bl & 1); - ASSERT (bl > 1); - - return mpn_jacobi_base (al, bl, bit); -} -#else -#error Unsupported value for JACOBI_2_METHOD -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/logops_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/logops_n.c deleted file mode 100644 index 1b534ff4ba53b373dcddedbe80648dff59a93dda..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/logops_n.c +++ /dev/null @@ -1,78 +0,0 @@ -/* mpn_and_n, mpn_ior_n, etc -- mpn logical operations. - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#ifdef OPERATION_and_n -#define func __MPN(and_n) -#define call mpn_and_n -#endif - -#ifdef OPERATION_andn_n -#define func __MPN(andn_n) -#define call mpn_andn_n -#endif - -#ifdef OPERATION_nand_n -#define func __MPN(nand_n) -#define call mpn_nand_n -#endif - -#ifdef OPERATION_ior_n -#define func __MPN(ior_n) -#define call mpn_ior_n -#endif - -#ifdef OPERATION_iorn_n -#define func __MPN(iorn_n) -#define call mpn_iorn_n -#endif - -#ifdef OPERATION_nior_n -#define func __MPN(nior_n) -#define call mpn_nior_n -#endif - -#ifdef OPERATION_xor_n -#define func __MPN(xor_n) -#define call mpn_xor_n -#endif - -#ifdef OPERATION_xnor_n -#define func __MPN(xnor_n) -#define call mpn_xnor_n -#endif - -void -func (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n) -{ - call (rp, up, vp, n); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/lshift.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/lshift.c deleted file mode 100644 index 5182632976c6aee9bb74d554cf8b94f85d5f9fbf..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/lshift.c +++ /dev/null @@ -1,73 +0,0 @@ -/* mpn_lshift -- Shift left low level. - -Copyright 1991, 1993, 1994, 1996, 2000-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* Shift U (pointed to by up and n limbs long) cnt bits to the left - and store the n least significant limbs of the result at rp. - Return the bits shifted out from the most significant limb. - - Argument constraints: - 1. 0 < cnt < GMP_NUMB_BITS. - 2. If the result is to be written over the input, rp must be >= up. -*/ - -mp_limb_t -mpn_lshift (mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt) -{ - mp_limb_t high_limb, low_limb; - unsigned int tnc; - mp_size_t i; - mp_limb_t retval; - - ASSERT (n >= 1); - ASSERT (cnt >= 1); - ASSERT (cnt < GMP_NUMB_BITS); - ASSERT (MPN_SAME_OR_DECR_P (rp, up, n)); - - up += n; - rp += n; - - tnc = GMP_NUMB_BITS - cnt; - low_limb = *--up; - retval = low_limb >> tnc; - high_limb = (low_limb << cnt) & GMP_NUMB_MASK; - - for (i = n - 1; i != 0; i--) - { - low_limb = *--up; - *--rp = high_limb | (low_limb >> tnc); - high_limb = (low_limb << cnt) & GMP_NUMB_MASK; - } - *--rp = high_limb; - - return retval; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/lshiftc.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/lshiftc.c deleted file mode 100644 index e8051b7b931db9aa9ee2214dcd9e89253feacd86..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/lshiftc.c +++ /dev/null @@ -1,74 +0,0 @@ -/* mpn_lshiftc -- Shift left low level with complement. - -Copyright 1991, 1993, 1994, 1996, 2000-2002, 2009 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* Shift U (pointed to by up and n limbs long) cnt bits to the left - and store the n least significant limbs of the result at rp. - Return the bits shifted out from the most significant limb. - - Argument constraints: - 1. 0 < cnt < GMP_NUMB_BITS. - 2. If the result is to be written over the input, rp must be >= up. -*/ - -mp_limb_t -mpn_lshiftc (mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt) -{ - mp_limb_t high_limb, low_limb; - unsigned int tnc; - mp_size_t i; - mp_limb_t retval; - - ASSERT (n >= 1); - ASSERT (cnt >= 1); - ASSERT (cnt < GMP_NUMB_BITS); - ASSERT (MPN_SAME_OR_DECR_P (rp, up, n)); - - up += n; - rp += n; - - tnc = GMP_NUMB_BITS - cnt; - low_limb = *--up; - retval = low_limb >> tnc; - high_limb = (low_limb << cnt); - - for (i = n - 1; i != 0; i--) - { - low_limb = *--up; - *--rp = (~(high_limb | (low_limb >> tnc))) & GMP_NUMB_MASK; - high_limb = low_limb << cnt; - } - *--rp = (~high_limb) & GMP_NUMB_MASK; - - return retval; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/matrix22_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/matrix22_mul.c deleted file mode 100644 index 59531eb1b26a1846abfd77090350a597c5faf9f2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/matrix22_mul.c +++ /dev/null @@ -1,322 +0,0 @@ -/* matrix22_mul.c. - - Contributed by Niels Möller and Marco Bodrato. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2003-2005, 2008, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#define MUL(rp, ap, an, bp, bn) do { \ - if (an >= bn) \ - mpn_mul (rp, ap, an, bp, bn); \ - else \ - mpn_mul (rp, bp, bn, ap, an); \ -} while (0) - -/* Inputs are unsigned. */ -static int -abs_sub_n (mp_ptr rp, mp_srcptr ap, mp_srcptr bp, mp_size_t n) -{ - int c; - MPN_CMP (c, ap, bp, n); - if (c >= 0) - { - mpn_sub_n (rp, ap, bp, n); - return 0; - } - else - { - mpn_sub_n (rp, bp, ap, n); - return 1; - } -} - -static int -add_signed_n (mp_ptr rp, - mp_srcptr ap, int as, mp_srcptr bp, int bs, mp_size_t n) -{ - if (as != bs) - return as ^ abs_sub_n (rp, ap, bp, n); - else - { - ASSERT_NOCARRY (mpn_add_n (rp, ap, bp, n)); - return as; - } -} - -mp_size_t -mpn_matrix22_mul_itch (mp_size_t rn, mp_size_t mn) -{ - if (BELOW_THRESHOLD (rn, MATRIX22_STRASSEN_THRESHOLD) - || BELOW_THRESHOLD (mn, MATRIX22_STRASSEN_THRESHOLD)) - return 3*rn + 2*mn; - else - return 3*(rn + mn) + 5; -} - -/* Algorithm: - - / s0 \ / 1 0 0 0 \ / r0 \ - | s1 | | 0 1 0 1 | | r1 | - | s2 | | 0 0 -1 1 | | r2 | - | s3 | = | 0 1 -1 1 | \ r3 / - | s4 | | -1 1 -1 1 | - | s5 | | 0 1 0 0 | - \ s6 / \ 0 0 1 0 / - - / t0 \ / 1 0 0 0 \ / m0 \ - | t1 | | 0 1 0 1 | | m1 | - | t2 | | 0 0 -1 1 | | m2 | - | t3 | = | 0 1 -1 1 | \ m3 / - | t4 | | -1 1 -1 1 | - | t5 | | 0 1 0 0 | - \ t6 / \ 0 0 1 0 / - - Note: the two matrices above are the same, but s_i and t_i are used - in the same product, only for i<4, see "A Strassen-like Matrix - Multiplication suited for squaring and higher power computation" by - M. Bodrato, in Proceedings of ISSAC 2010. - - / r0 \ / 1 0 0 0 0 1 0 \ / s0*t0 \ - | r1 | = | 0 0 -1 1 -1 1 0 | | s1*t1 | - | r2 | | 0 1 0 -1 0 -1 -1 | | s2*t2 | - \ r3 / \ 0 1 1 -1 0 -1 0 / | s3*t3 | - | s4*t5 | - | s5*t6 | - \ s6*t4 / - - The scheduling uses two temporaries U0 and U1 to store products, and - two, S0 and T0, to store combinations of entries of the two - operands. -*/ - -/* Computes R = R * M. Elements are numbers R = (r0, r1; r2, r3). - * - * Resulting elements are of size up to rn + mn + 1. - * - * Temporary storage: 3 rn + 3 mn + 5. */ -void -mpn_matrix22_mul_strassen (mp_ptr r0, mp_ptr r1, mp_ptr r2, mp_ptr r3, mp_size_t rn, - mp_srcptr m0, mp_srcptr m1, mp_srcptr m2, mp_srcptr m3, mp_size_t mn, - mp_ptr tp) -{ - mp_ptr s0, t0, u0, u1; - int r1s, r3s, s0s, t0s, u1s; - s0 = tp; tp += rn + 1; - t0 = tp; tp += mn + 1; - u0 = tp; tp += rn + mn + 1; - u1 = tp; /* rn + mn + 2 */ - - MUL (u0, r1, rn, m2, mn); /* u5 = s5 * t6 */ - r3s = abs_sub_n (r3, r3, r2, rn); /* r3 - r2 */ - if (r3s) - { - r1s = abs_sub_n (r1, r1, r3, rn); - r1[rn] = 0; - } - else - { - r1[rn] = mpn_add_n (r1, r1, r3, rn); - r1s = 0; /* r1 - r2 + r3 */ - } - if (r1s) - { - s0[rn] = mpn_add_n (s0, r1, r0, rn); - s0s = 0; - } - else if (r1[rn] != 0) - { - s0[rn] = r1[rn] - mpn_sub_n (s0, r1, r0, rn); - s0s = 1; /* s4 = -r0 + r1 - r2 + r3 */ - /* Reverse sign! */ - } - else - { - s0s = abs_sub_n (s0, r0, r1, rn); - s0[rn] = 0; - } - MUL (u1, r0, rn, m0, mn); /* u0 = s0 * t0 */ - r0[rn+mn] = mpn_add_n (r0, u0, u1, rn + mn); - ASSERT (r0[rn+mn] < 2); /* u0 + u5 */ - - t0s = abs_sub_n (t0, m3, m2, mn); - u1s = r3s^t0s^1; /* Reverse sign! */ - MUL (u1, r3, rn, t0, mn); /* u2 = s2 * t2 */ - u1[rn+mn] = 0; - if (t0s) - { - t0s = abs_sub_n (t0, m1, t0, mn); - t0[mn] = 0; - } - else - { - t0[mn] = mpn_add_n (t0, t0, m1, mn); - } - - /* FIXME: Could be simplified if we had space for rn + mn + 2 limbs - at r3. I'd expect that for matrices of random size, the high - words t0[mn] and r1[rn] are non-zero with a pretty small - probability. If that can be confirmed this should be done as an - unconditional rn x (mn+1) followed by an if (UNLIKELY (r1[rn])) - add_n. */ - if (t0[mn] != 0) - { - MUL (r3, r1, rn, t0, mn + 1); /* u3 = s3 * t3 */ - ASSERT (r1[rn] < 2); - if (r1[rn] != 0) - mpn_add_n (r3 + rn, r3 + rn, t0, mn + 1); - } - else - { - MUL (r3, r1, rn + 1, t0, mn); - } - - ASSERT (r3[rn+mn] < 4); - - u0[rn+mn] = 0; - if (r1s^t0s) - { - r3s = abs_sub_n (r3, u0, r3, rn + mn + 1); - } - else - { - ASSERT_NOCARRY (mpn_add_n (r3, r3, u0, rn + mn + 1)); - r3s = 0; /* u3 + u5 */ - } - - if (t0s) - { - t0[mn] = mpn_add_n (t0, t0, m0, mn); - } - else if (t0[mn] != 0) - { - t0[mn] -= mpn_sub_n (t0, t0, m0, mn); - } - else - { - t0s = abs_sub_n (t0, t0, m0, mn); - } - MUL (u0, r2, rn, t0, mn + 1); /* u6 = s6 * t4 */ - ASSERT (u0[rn+mn] < 2); - if (r1s) - { - ASSERT_NOCARRY (mpn_sub_n (r1, r2, r1, rn)); - } - else - { - r1[rn] += mpn_add_n (r1, r1, r2, rn); - } - rn++; - t0s = add_signed_n (r2, r3, r3s, u0, t0s, rn + mn); - /* u3 + u5 + u6 */ - ASSERT (r2[rn+mn-1] < 4); - r3s = add_signed_n (r3, r3, r3s, u1, u1s, rn + mn); - /* -u2 + u3 + u5 */ - ASSERT (r3[rn+mn-1] < 3); - MUL (u0, s0, rn, m1, mn); /* u4 = s4 * t5 */ - ASSERT (u0[rn+mn-1] < 2); - t0[mn] = mpn_add_n (t0, m3, m1, mn); - MUL (u1, r1, rn, t0, mn + 1); /* u1 = s1 * t1 */ - mn += rn; - ASSERT (u1[mn-1] < 4); - ASSERT (u1[mn] == 0); - ASSERT_NOCARRY (add_signed_n (r1, r3, r3s, u0, s0s, mn)); - /* -u2 + u3 - u4 + u5 */ - ASSERT (r1[mn-1] < 2); - if (r3s) - { - ASSERT_NOCARRY (mpn_add_n (r3, u1, r3, mn)); - } - else - { - ASSERT_NOCARRY (mpn_sub_n (r3, u1, r3, mn)); - /* u1 + u2 - u3 - u5 */ - } - ASSERT (r3[mn-1] < 2); - if (t0s) - { - ASSERT_NOCARRY (mpn_add_n (r2, u1, r2, mn)); - } - else - { - ASSERT_NOCARRY (mpn_sub_n (r2, u1, r2, mn)); - /* u1 - u3 - u5 - u6 */ - } - ASSERT (r2[mn-1] < 2); -} - -void -mpn_matrix22_mul (mp_ptr r0, mp_ptr r1, mp_ptr r2, mp_ptr r3, mp_size_t rn, - mp_srcptr m0, mp_srcptr m1, mp_srcptr m2, mp_srcptr m3, mp_size_t mn, - mp_ptr tp) -{ - if (BELOW_THRESHOLD (rn, MATRIX22_STRASSEN_THRESHOLD) - || BELOW_THRESHOLD (mn, MATRIX22_STRASSEN_THRESHOLD)) - { - mp_ptr p0, p1; - unsigned i; - - /* Temporary storage: 3 rn + 2 mn */ - p0 = tp + rn; - p1 = p0 + rn + mn; - - for (i = 0; i < 2; i++) - { - MPN_COPY (tp, r0, rn); - - if (rn >= mn) - { - mpn_mul (p0, r0, rn, m0, mn); - mpn_mul (p1, r1, rn, m3, mn); - mpn_mul (r0, r1, rn, m2, mn); - mpn_mul (r1, tp, rn, m1, mn); - } - else - { - mpn_mul (p0, m0, mn, r0, rn); - mpn_mul (p1, m3, mn, r1, rn); - mpn_mul (r0, m2, mn, r1, rn); - mpn_mul (r1, m1, mn, tp, rn); - } - r0[rn+mn] = mpn_add_n (r0, r0, p0, rn + mn); - r1[rn+mn] = mpn_add_n (r1, r1, p1, rn + mn); - - r0 = r2; r1 = r3; - } - } - else - mpn_matrix22_mul_strassen (r0, r1, r2, r3, rn, - m0, m1, m2, m3, mn, tp); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/matrix22_mul1_inverse_vector.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/matrix22_mul1_inverse_vector.c deleted file mode 100644 index 83b2fb5134381d7d6efdd13d8fb5d6afbcbaad46..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/matrix22_mul1_inverse_vector.c +++ /dev/null @@ -1,65 +0,0 @@ -/* matrix22_mul1_inverse_vector.c - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2008, 2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Sets (r;b) = M^{-1}(a;b), with M^{-1} = (u11, -u01; -u10, u00) from - the left. Uses three buffers, to avoid a copy. */ -mp_size_t -mpn_matrix22_mul1_inverse_vector (const struct hgcd_matrix1 *M, - mp_ptr rp, mp_srcptr ap, mp_ptr bp, mp_size_t n) -{ - mp_limb_t h0, h1; - - /* Compute (r;b) <-- (u11 a - u01 b; -u10 a + u00 b) as - - r = u11 * a - r -= u01 * b - b *= u00 - b -= u10 * a - */ - - h0 = mpn_mul_1 (rp, ap, n, M->u[1][1]); - h1 = mpn_submul_1 (rp, bp, n, M->u[0][1]); - ASSERT (h0 == h1); - - h0 = mpn_mul_1 (bp, bp, n, M->u[0][0]); - h1 = mpn_submul_1 (bp, ap, n, M->u[1][0]); - ASSERT (h0 == h1); - - n -= (rp[n-1] | bp[n-1]) == 0; - return n; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1.c deleted file mode 100644 index 0212020201f9d059b4777d1340d2a177df3e5ee1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1.c +++ /dev/null @@ -1,281 +0,0 @@ -/* mpn_mod_1(dividend_ptr, dividend_size, divisor_limb) -- - Divide (DIVIDEND_PTR,,DIVIDEND_SIZE) by DIVISOR_LIMB. - Return the single-limb remainder. - There are no constraints on the value of the divisor. - -Copyright 1991, 1993, 1994, 1999, 2000, 2002, 2007-2009, 2012 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* The size where udiv_qrnnd_preinv should be used rather than udiv_qrnnd, - meaning the quotient size where that should happen, the quotient size - being how many udiv divisions will be done. - - The default is to use preinv always, CPUs where this doesn't suit have - tuned thresholds. Note in particular that preinv should certainly be - used if that's the only division available (USE_PREINV_ALWAYS). */ - -#ifndef MOD_1_NORM_THRESHOLD -#define MOD_1_NORM_THRESHOLD 0 -#endif - -#ifndef MOD_1_UNNORM_THRESHOLD -#define MOD_1_UNNORM_THRESHOLD 0 -#endif - -#ifndef MOD_1U_TO_MOD_1_1_THRESHOLD -#define MOD_1U_TO_MOD_1_1_THRESHOLD MP_SIZE_T_MAX /* default is not to use mpn_mod_1s */ -#endif - -#ifndef MOD_1N_TO_MOD_1_1_THRESHOLD -#define MOD_1N_TO_MOD_1_1_THRESHOLD MP_SIZE_T_MAX /* default is not to use mpn_mod_1s */ -#endif - -#ifndef MOD_1_1_TO_MOD_1_2_THRESHOLD -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 10 -#endif - -#ifndef MOD_1_2_TO_MOD_1_4_THRESHOLD -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 20 -#endif - -#if TUNE_PROGRAM_BUILD && !HAVE_NATIVE_mpn_mod_1_1p -/* Duplicates declarations in tune/speed.h */ -mp_limb_t mpn_mod_1_1p_1 (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t [4]); -mp_limb_t mpn_mod_1_1p_2 (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t [4]); - -void mpn_mod_1_1p_cps_1 (mp_limb_t [4], mp_limb_t); -void mpn_mod_1_1p_cps_2 (mp_limb_t [4], mp_limb_t); - -#undef mpn_mod_1_1p -#define mpn_mod_1_1p(ap, n, b, pre) \ - (mod_1_1p_method == 1 ? mpn_mod_1_1p_1 (ap, n, b, pre) \ - : (mod_1_1p_method == 2 ? mpn_mod_1_1p_2 (ap, n, b, pre) \ - : __gmpn_mod_1_1p (ap, n, b, pre))) - -#undef mpn_mod_1_1p_cps -#define mpn_mod_1_1p_cps(pre, b) \ - (mod_1_1p_method == 1 ? mpn_mod_1_1p_cps_1 (pre, b) \ - : (mod_1_1p_method == 2 ? mpn_mod_1_1p_cps_2 (pre, b) \ - : __gmpn_mod_1_1p_cps (pre, b))) -#endif /* TUNE_PROGRAM_BUILD && !HAVE_NATIVE_mpn_mod_1_1p */ - - -/* The comments in mpn/generic/divrem_1.c apply here too. - - As noted in the algorithms section of the manual, the shifts in the loop - for the unnorm case can be avoided by calculating r = a%(d*2^n), followed - by a final (r*2^n)%(d*2^n). In fact if it happens that a%(d*2^n) can - skip a division where (a*2^n)%(d*2^n) can't then there's the same number - of divide steps, though how often that happens depends on the assumed - distributions of dividend and divisor. In any case this idea is left to - CPU specific implementations to consider. */ - -static mp_limb_t -mpn_mod_1_unnorm (mp_srcptr up, mp_size_t un, mp_limb_t d) -{ - mp_size_t i; - mp_limb_t n1, n0, r; - mp_limb_t dummy; - int cnt; - - ASSERT (un > 0); - ASSERT (d != 0); - - d <<= GMP_NAIL_BITS; - - /* Skip a division if high < divisor. Having the test here before - normalizing will still skip as often as possible. */ - r = up[un - 1] << GMP_NAIL_BITS; - if (r < d) - { - r >>= GMP_NAIL_BITS; - un--; - if (un == 0) - return r; - } - else - r = 0; - - /* If udiv_qrnnd doesn't need a normalized divisor, can use the simple - code above. */ - if (! UDIV_NEEDS_NORMALIZATION - && BELOW_THRESHOLD (un, MOD_1_UNNORM_THRESHOLD)) - { - for (i = un - 1; i >= 0; i--) - { - n0 = up[i] << GMP_NAIL_BITS; - udiv_qrnnd (dummy, r, r, n0, d); - r >>= GMP_NAIL_BITS; - } - return r; - } - - count_leading_zeros (cnt, d); - d <<= cnt; - - n1 = up[un - 1] << GMP_NAIL_BITS; - r = (r << cnt) | (n1 >> (GMP_LIMB_BITS - cnt)); - - if (UDIV_NEEDS_NORMALIZATION - && BELOW_THRESHOLD (un, MOD_1_UNNORM_THRESHOLD)) - { - mp_limb_t nshift; - for (i = un - 2; i >= 0; i--) - { - n0 = up[i] << GMP_NAIL_BITS; - nshift = (n1 << cnt) | (n0 >> (GMP_NUMB_BITS - cnt)); - udiv_qrnnd (dummy, r, r, nshift, d); - r >>= GMP_NAIL_BITS; - n1 = n0; - } - udiv_qrnnd (dummy, r, r, n1 << cnt, d); - r >>= GMP_NAIL_BITS; - return r >> cnt; - } - else - { - mp_limb_t inv, nshift; - invert_limb (inv, d); - - for (i = un - 2; i >= 0; i--) - { - n0 = up[i] << GMP_NAIL_BITS; - nshift = (n1 << cnt) | (n0 >> (GMP_NUMB_BITS - cnt)); - udiv_rnnd_preinv (r, r, nshift, d, inv); - r >>= GMP_NAIL_BITS; - n1 = n0; - } - udiv_rnnd_preinv (r, r, n1 << cnt, d, inv); - r >>= GMP_NAIL_BITS; - return r >> cnt; - } -} - -static mp_limb_t -mpn_mod_1_norm (mp_srcptr up, mp_size_t un, mp_limb_t d) -{ - mp_size_t i; - mp_limb_t n0, r; - mp_limb_t dummy; - - ASSERT (un > 0); - - d <<= GMP_NAIL_BITS; - - ASSERT (d & GMP_LIMB_HIGHBIT); - - /* High limb is initial remainder, possibly with one subtract of - d to get r<d. */ - r = up[un - 1] << GMP_NAIL_BITS; - if (r >= d) - r -= d; - r >>= GMP_NAIL_BITS; - un--; - if (un == 0) - return r; - - if (BELOW_THRESHOLD (un, MOD_1_NORM_THRESHOLD)) - { - for (i = un - 1; i >= 0; i--) - { - n0 = up[i] << GMP_NAIL_BITS; - udiv_qrnnd (dummy, r, r, n0, d); - r >>= GMP_NAIL_BITS; - } - return r; - } - else - { - mp_limb_t inv; - invert_limb (inv, d); - for (i = un - 1; i >= 0; i--) - { - n0 = up[i] << GMP_NAIL_BITS; - udiv_rnnd_preinv (r, r, n0, d, inv); - r >>= GMP_NAIL_BITS; - } - return r; - } -} - -mp_limb_t -mpn_mod_1 (mp_srcptr ap, mp_size_t n, mp_limb_t b) -{ - ASSERT (n >= 0); - ASSERT (b != 0); - - /* Should this be handled at all? Rely on callers? Note un==0 is currently - required by mpz/fdiv_r_ui.c and possibly other places. */ - if (n == 0) - return 0; - - if (UNLIKELY ((b & GMP_NUMB_HIGHBIT) != 0)) - { - if (BELOW_THRESHOLD (n, MOD_1N_TO_MOD_1_1_THRESHOLD)) - { - return mpn_mod_1_norm (ap, n, b); - } - else - { - mp_limb_t pre[4]; - mpn_mod_1_1p_cps (pre, b); - return mpn_mod_1_1p (ap, n, b, pre); - } - } - else - { - if (BELOW_THRESHOLD (n, MOD_1U_TO_MOD_1_1_THRESHOLD)) - { - return mpn_mod_1_unnorm (ap, n, b); - } - else if (BELOW_THRESHOLD (n, MOD_1_1_TO_MOD_1_2_THRESHOLD)) - { - mp_limb_t pre[4]; - mpn_mod_1_1p_cps (pre, b); - return mpn_mod_1_1p (ap, n, b << pre[1], pre); - } - else if (BELOW_THRESHOLD (n, MOD_1_2_TO_MOD_1_4_THRESHOLD) || UNLIKELY (b > GMP_NUMB_MASK / 4)) - { - mp_limb_t pre[5]; - mpn_mod_1s_2p_cps (pre, b); - return mpn_mod_1s_2p (ap, n, b << pre[1], pre); - } - else - { - mp_limb_t pre[7]; - mpn_mod_1s_4p_cps (pre, b); - return mpn_mod_1s_4p (ap, n, b << pre[1], pre); - } - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1_1.c deleted file mode 100644 index 62e2daaf40858215d4b87ececa0bfe85535b730d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1_1.c +++ /dev/null @@ -1,332 +0,0 @@ -/* mpn_mod_1_1p (ap, n, b, cps) - Divide (ap,,n) by b. Return the single-limb remainder. - - Contributed to the GNU project by Torbjorn Granlund and Niels Möller. - Based on a suggestion by Peter L. Montgomery. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2008-2011, 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef MOD_1_1P_METHOD -# define MOD_1_1P_METHOD 1 /* need to make sure this is 2 for asm testing */ -#endif - -/* Define some longlong.h-style macros, but for wider operations. - * add_mssaaaa is like longlong.h's add_ssaaaa, but also generates - * carry out, in the form of a mask. */ - -#if defined (__GNUC__) && ! defined (NO_ASM) - -#if HAVE_HOST_CPU_FAMILY_x86 && W_TYPE_SIZE == 32 -#define add_mssaaaa(m, s1, s0, a1, a0, b1, b0) \ - __asm__ ( "add %6, %k2\n\t" \ - "adc %4, %k1\n\t" \ - "sbb %k0, %k0" \ - : "=r" (m), "=r" (s1), "=&r" (s0) \ - : "1" ((USItype)(a1)), "g" ((USItype)(b1)), \ - "%2" ((USItype)(a0)), "g" ((USItype)(b0))) -#endif - -#if HAVE_HOST_CPU_FAMILY_x86_64 && W_TYPE_SIZE == 64 -#define add_mssaaaa(m, s1, s0, a1, a0, b1, b0) \ - __asm__ ( "add %6, %q2\n\t" \ - "adc %4, %q1\n\t" \ - "sbb %q0, %q0" \ - : "=r" (m), "=r" (s1), "=&r" (s0) \ - : "1" ((UDItype)(a1)), "rme" ((UDItype)(b1)), \ - "%2" ((UDItype)(a0)), "rme" ((UDItype)(b0))) -#endif - -#if defined (__sparc__) && W_TYPE_SIZE == 32 -#define add_mssaaaa(m, sh, sl, ah, al, bh, bl) \ - __asm__ ( "addcc %r5, %6, %2\n\t" \ - "addxcc %r3, %4, %1\n\t" \ - "subx %%g0, %%g0, %0" \ - : "=r" (m), "=r" (sh), "=&r" (sl) \ - : "rJ" (ah), "rI" (bh), "%rJ" (al), "rI" (bl) \ - __CLOBBER_CC) -#endif - -#if defined (__sparc__) && W_TYPE_SIZE == 64 -#define add_mssaaaa(m, sh, sl, ah, al, bh, bl) \ - __asm__ ( "addcc %r5, %6, %2\n\t" \ - "addccc %r7, %8, %%g0\n\t" \ - "addccc %r3, %4, %1\n\t" \ - "clr %0\n\t" \ - "movcs %%xcc, -1, %0" \ - : "=r" (m), "=r" (sh), "=&r" (sl) \ - : "rJ" (ah), "rI" (bh), "%rJ" (al), "rI" (bl), \ - "rJ" ((al) >> 32), "rI" ((bl) >> 32) \ - __CLOBBER_CC) -#if __VIS__ >= 0x300 -#undef add_mssaaaa -#define add_mssaaaa(m, sh, sl, ah, al, bh, bl) \ - __asm__ ( "addcc %r5, %6, %2\n\t" \ - "addxccc %r3, %4, %1\n\t" \ - "clr %0\n\t" \ - "movcs %%xcc, -1, %0" \ - : "=r" (m), "=r" (sh), "=&r" (sl) \ - : "rJ" (ah), "rI" (bh), "%rJ" (al), "rI" (bl) \ - __CLOBBER_CC) -#endif -#endif - -#if HAVE_HOST_CPU_FAMILY_powerpc && !defined (_LONG_LONG_LIMB) -/* This works fine for 32-bit and 64-bit limbs, except for 64-bit limbs with a - processor running in 32-bit mode, since the carry flag then gets the 32-bit - carry. */ -#define add_mssaaaa(m, s1, s0, a1, a0, b1, b0) \ - __asm__ ( "add%I6c %2, %5, %6\n\t" \ - "adde %1, %3, %4\n\t" \ - "subfe %0, %0, %0\n\t" \ - "nor %0, %0, %0" \ - : "=r" (m), "=r" (s1), "=&r" (s0) \ - : "r" (a1), "r" (b1), "%r" (a0), "rI" (b0)) -#endif - -#if defined (__s390x__) && W_TYPE_SIZE == 64 -#define add_mssaaaa(m, s1, s0, a1, a0, b1, b0) \ - __asm__ ( "algr %2, %6\n\t" \ - "alcgr %1, %4\n\t" \ - "lghi %0, 0\n\t" \ - "alcgr %0, %0\n\t" \ - "lcgr %0, %0" \ - : "=r" (m), "=r" (s1), "=&r" (s0) \ - : "1" ((UDItype)(a1)), "r" ((UDItype)(b1)), \ - "%2" ((UDItype)(a0)), "r" ((UDItype)(b0)) __CLOBBER_CC) -#endif - -#if defined (__arm__) && !defined (__thumb__) && W_TYPE_SIZE == 32 -#define add_mssaaaa(m, sh, sl, ah, al, bh, bl) \ - __asm__ ( "adds %2, %5, %6\n\t" \ - "adcs %1, %3, %4\n\t" \ - "movcc %0, #0\n\t" \ - "movcs %0, #-1" \ - : "=r" (m), "=r" (sh), "=&r" (sl) \ - : "r" (ah), "rI" (bh), "%r" (al), "rI" (bl) __CLOBBER_CC) -#endif -#endif /* defined (__GNUC__) */ - -#ifndef add_mssaaaa -#define add_mssaaaa(m, s1, s0, a1, a0, b1, b0) \ - do { \ - UWtype __s0, __s1, __c0, __c1; \ - __s0 = (a0) + (b0); \ - __s1 = (a1) + (b1); \ - __c0 = __s0 < (a0); \ - __c1 = __s1 < (a1); \ - (s0) = __s0; \ - __s1 = __s1 + __c0; \ - (s1) = __s1; \ - (m) = - (__c1 + (__s1 < __c0)); \ - } while (0) -#endif - -#if MOD_1_1P_METHOD == 1 -void -mpn_mod_1_1p_cps (mp_limb_t cps[4], mp_limb_t b) -{ - mp_limb_t bi; - mp_limb_t B1modb, B2modb; - int cnt; - - count_leading_zeros (cnt, b); - - b <<= cnt; - invert_limb (bi, b); - - cps[0] = bi; - cps[1] = cnt; - - B1modb = -b; - if (LIKELY (cnt != 0)) - B1modb *= ((bi >> (GMP_LIMB_BITS-cnt)) | (CNST_LIMB(1) << cnt)); - ASSERT (B1modb <= b); /* NB: not fully reduced mod b */ - cps[2] = B1modb >> cnt; - - /* In the normalized case, this can be simplified to - * - * B2modb = - b * bi; - * ASSERT (B2modb <= b); // NB: equality iff b = B/2 - */ - udiv_rnnd_preinv (B2modb, B1modb, CNST_LIMB(0), b, bi); - cps[3] = B2modb >> cnt; -} - -mp_limb_t -mpn_mod_1_1p (mp_srcptr ap, mp_size_t n, mp_limb_t b, const mp_limb_t bmodb[4]) -{ - mp_limb_t rh, rl, bi, ph, pl, r; - mp_limb_t B1modb, B2modb; - mp_size_t i; - int cnt; - mp_limb_t mask; - - ASSERT (n >= 2); /* fix tuneup.c if this is changed */ - - B1modb = bmodb[2]; - B2modb = bmodb[3]; - - rl = ap[n - 1]; - umul_ppmm (ph, pl, rl, B1modb); - add_ssaaaa (rh, rl, ph, pl, CNST_LIMB(0), ap[n - 2]); - - for (i = n - 3; i >= 0; i -= 1) - { - /* rr = ap[i] < B - + LO(rr) * (B mod b) <= (B-1)(b-1) - + HI(rr) * (B^2 mod b) <= (B-1)(b-1) - */ - umul_ppmm (ph, pl, rl, B1modb); - add_ssaaaa (ph, pl, ph, pl, CNST_LIMB(0), ap[i]); - - umul_ppmm (rh, rl, rh, B2modb); - add_ssaaaa (rh, rl, rh, rl, ph, pl); - } - - cnt = bmodb[1]; - bi = bmodb[0]; - - if (LIKELY (cnt != 0)) - rh = (rh << cnt) | (rl >> (GMP_LIMB_BITS - cnt)); - - mask = -(mp_limb_t) (rh >= b); - rh -= mask & b; - - udiv_rnnd_preinv (r, rh, rl << cnt, b, bi); - - return r >> cnt; -} -#endif /* MOD_1_1P_METHOD == 1 */ - -#if MOD_1_1P_METHOD == 2 -void -mpn_mod_1_1p_cps (mp_limb_t cps[4], mp_limb_t b) -{ - mp_limb_t bi; - mp_limb_t B2modb; - int cnt; - - count_leading_zeros (cnt, b); - - b <<= cnt; - invert_limb (bi, b); - - cps[0] = bi; - cps[1] = cnt; - - if (LIKELY (cnt != 0)) - { - mp_limb_t B1modb = -b; - B1modb *= ((bi >> (GMP_LIMB_BITS-cnt)) | (CNST_LIMB(1) << cnt)); - ASSERT (B1modb <= b); /* NB: not fully reduced mod b */ - cps[2] = B1modb >> cnt; - } - B2modb = - b * bi; - ASSERT (B2modb <= b); // NB: equality iff b = B/2 - cps[3] = B2modb; -} - -mp_limb_t -mpn_mod_1_1p (mp_srcptr ap, mp_size_t n, mp_limb_t b, const mp_limb_t bmodb[4]) -{ - int cnt; - mp_limb_t bi, B1modb; - mp_limb_t r0, r1; - mp_limb_t r; - - ASSERT (n >= 2); /* fix tuneup.c if this is changed */ - - r0 = ap[n-2]; - r1 = ap[n-1]; - - if (n > 2) - { - mp_limb_t B2modb, B2mb; - mp_limb_t p0, p1; - mp_limb_t r2; - mp_size_t j; - - B2modb = bmodb[3]; - B2mb = B2modb - b; - - umul_ppmm (p1, p0, r1, B2modb); - add_mssaaaa (r2, r1, r0, r0, ap[n-3], p1, p0); - - for (j = n-4; j >= 0; j--) - { - mp_limb_t cy; - /* mp_limb_t t = r0 + B2mb; */ - umul_ppmm (p1, p0, r1, B2modb); - - ADDC_LIMB (cy, r0, r0, r2 & B2modb); - /* Alternative, for cmov: if (cy) r0 = t; */ - r0 -= (-cy) & b; - add_mssaaaa (r2, r1, r0, r0, ap[j], p1, p0); - } - - r1 -= (r2 & b); - } - - cnt = bmodb[1]; - - if (LIKELY (cnt != 0)) - { - mp_limb_t t; - mp_limb_t B1modb = bmodb[2]; - - umul_ppmm (r1, t, r1, B1modb); - r0 += t; - r1 += (r0 < t); - - /* Normalize */ - r1 = (r1 << cnt) | (r0 >> (GMP_LIMB_BITS - cnt)); - r0 <<= cnt; - - /* NOTE: Might get r1 == b here, but udiv_rnnd_preinv allows that. */ - } - else - { - mp_limb_t mask = -(mp_limb_t) (r1 >= b); - r1 -= mask & b; - } - - bi = bmodb[0]; - - udiv_rnnd_preinv (r, r1, r0, b, bi); - return r >> cnt; -} -#endif /* MOD_1_1P_METHOD == 2 */ diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1_2.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1_2.c deleted file mode 100644 index 7acf3dbdd10a9580767b68b95bbe2146996803ec..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1_2.c +++ /dev/null @@ -1,149 +0,0 @@ -/* mpn_mod_1s_2p (ap, n, b, cps) - Divide (ap,,n) by b. Return the single-limb remainder. - Requires that b < B / 2. - - Contributed to the GNU project by Torbjorn Granlund. - Based on a suggestion by Peter L. Montgomery. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2008-2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -mpn_mod_1s_2p_cps (mp_limb_t cps[5], mp_limb_t b) -{ - mp_limb_t bi; - mp_limb_t B1modb, B2modb, B3modb; - int cnt; - - ASSERT (b <= (~(mp_limb_t) 0) / 2); - - count_leading_zeros (cnt, b); - - b <<= cnt; - invert_limb (bi, b); - - cps[0] = bi; - cps[1] = cnt; - - B1modb = -b * ((bi >> (GMP_LIMB_BITS-cnt)) | (CNST_LIMB(1) << cnt)); - ASSERT (B1modb <= b); /* NB: not fully reduced mod b */ - cps[2] = B1modb >> cnt; - - udiv_rnnd_preinv (B2modb, B1modb, CNST_LIMB(0), b, bi); - cps[3] = B2modb >> cnt; - - udiv_rnnd_preinv (B3modb, B2modb, CNST_LIMB(0), b, bi); - cps[4] = B3modb >> cnt; - -#if WANT_ASSERT - { - int i; - b = cps[2]; - for (i = 3; i <= 4; i++) - { - b += cps[i]; - ASSERT (b >= cps[i]); - } - } -#endif -} - -mp_limb_t -mpn_mod_1s_2p (mp_srcptr ap, mp_size_t n, mp_limb_t b, const mp_limb_t cps[5]) -{ - mp_limb_t rh, rl, bi, ph, pl, ch, cl, r; - mp_limb_t B1modb, B2modb, B3modb; - mp_size_t i; - int cnt; - - ASSERT (n >= 1); - - B1modb = cps[2]; - B2modb = cps[3]; - B3modb = cps[4]; - - if ((n & 1) != 0) - { - if (n == 1) - { - rl = ap[n - 1]; - bi = cps[0]; - cnt = cps[1]; - udiv_rnnd_preinv (r, rl >> (GMP_LIMB_BITS - cnt), - rl << cnt, b, bi); - return r >> cnt; - } - - umul_ppmm (ph, pl, ap[n - 2], B1modb); - add_ssaaaa (ph, pl, ph, pl, CNST_LIMB(0), ap[n - 3]); - umul_ppmm (rh, rl, ap[n - 1], B2modb); - add_ssaaaa (rh, rl, rh, rl, ph, pl); - n--; - } - else - { - rh = ap[n - 1]; - rl = ap[n - 2]; - } - - for (i = n - 4; i >= 0; i -= 2) - { - /* rr = ap[i] < B - + ap[i+1] * (B mod b) <= (B-1)(b-1) - + LO(rr) * (B^2 mod b) <= (B-1)(b-1) - + HI(rr) * (B^3 mod b) <= (B-1)(b-1) - */ - umul_ppmm (ph, pl, ap[i + 1], B1modb); - add_ssaaaa (ph, pl, ph, pl, CNST_LIMB(0), ap[i + 0]); - - umul_ppmm (ch, cl, rl, B2modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - - umul_ppmm (rh, rl, rh, B3modb); - add_ssaaaa (rh, rl, rh, rl, ph, pl); - } - - umul_ppmm (rh, cl, rh, B1modb); - add_ssaaaa (rh, rl, rh, rl, CNST_LIMB(0), cl); - - cnt = cps[1]; - bi = cps[0]; - - r = (rh << cnt) | (rl >> (GMP_LIMB_BITS - cnt)); - udiv_rnnd_preinv (r, r, rl << cnt, b, bi); - - return r >> cnt; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1_3.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1_3.c deleted file mode 100644 index f4137f4315566b44de543b68a6b940101999c013..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1_3.c +++ /dev/null @@ -1,157 +0,0 @@ -/* mpn_mod_1s_3p (ap, n, b, cps) - Divide (ap,,n) by b. Return the single-limb remainder. - Requires that d < B / 3. - - Contributed to the GNU project by Torbjorn Granlund. - Based on a suggestion by Peter L. Montgomery. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2008-2010, 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -mpn_mod_1s_3p_cps (mp_limb_t cps[6], mp_limb_t b) -{ - mp_limb_t bi; - mp_limb_t B1modb, B2modb, B3modb, B4modb; - int cnt; - - ASSERT (b <= (~(mp_limb_t) 0) / 3); - - count_leading_zeros (cnt, b); - - b <<= cnt; - invert_limb (bi, b); - - cps[0] = bi; - cps[1] = cnt; - - B1modb = -b * ((bi >> (GMP_LIMB_BITS-cnt)) | (CNST_LIMB(1) << cnt)); - ASSERT (B1modb <= b); /* NB: not fully reduced mod b */ - cps[2] = B1modb >> cnt; - - udiv_rnnd_preinv (B2modb, B1modb, CNST_LIMB(0), b, bi); - cps[3] = B2modb >> cnt; - - udiv_rnnd_preinv (B3modb, B2modb, CNST_LIMB(0), b, bi); - cps[4] = B3modb >> cnt; - - udiv_rnnd_preinv (B4modb, B3modb, CNST_LIMB(0), b, bi); - cps[5] = B4modb >> cnt; - -#if WANT_ASSERT - { - int i; - b = cps[2]; - for (i = 3; i <= 5; i++) - { - b += cps[i]; - ASSERT (b >= cps[i]); - } - } -#endif -} - -mp_limb_t -mpn_mod_1s_3p (mp_srcptr ap, mp_size_t n, mp_limb_t b, const mp_limb_t cps[6]) -{ - mp_limb_t rh, rl, bi, ph, pl, ch, cl, r; - mp_limb_t B1modb, B2modb, B3modb, B4modb; - mp_size_t i; - int cnt; - - ASSERT (n >= 1); - - B1modb = cps[2]; - B2modb = cps[3]; - B3modb = cps[4]; - B4modb = cps[5]; - - /* We compute n mod 3 in a tricky way, which works except for when n is so - close to the maximum size that we don't need to support it. The final - cast to int is a workaround for HP cc. */ - switch ((int) ((mp_limb_t) n * MODLIMB_INVERSE_3 >> (GMP_NUMB_BITS - 2))) - { - case 0: - umul_ppmm (ph, pl, ap[n - 2], B1modb); - add_ssaaaa (ph, pl, ph, pl, CNST_LIMB(0), ap[n - 3]); - umul_ppmm (rh, rl, ap[n - 1], B2modb); - add_ssaaaa (rh, rl, rh, rl, ph, pl); - n -= 3; - break; - case 2: /* n mod 3 = 1 */ - rh = 0; - rl = ap[n - 1]; - n -= 1; - break; - case 1: /* n mod 3 = 2 */ - rh = ap[n - 1]; - rl = ap[n - 2]; - n -= 2; - break; - } - - for (i = n - 3; i >= 0; i -= 3) - { - /* rr = ap[i] < B - + ap[i+1] * (B mod b) <= (B-1)(b-1) - + ap[i+2] * (B^2 mod b) <= (B-1)(b-1) - + LO(rr) * (B^3 mod b) <= (B-1)(b-1) - + HI(rr) * (B^4 mod b) <= (B-1)(b-1) - */ - umul_ppmm (ph, pl, ap[i + 1], B1modb); - add_ssaaaa (ph, pl, ph, pl, CNST_LIMB(0), ap[i + 0]); - - umul_ppmm (ch, cl, ap[i + 2], B2modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - - umul_ppmm (ch, cl, rl, B3modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - - umul_ppmm (rh, rl, rh, B4modb); - add_ssaaaa (rh, rl, rh, rl, ph, pl); - } - - umul_ppmm (rh, cl, rh, B1modb); - add_ssaaaa (rh, rl, rh, rl, CNST_LIMB(0), cl); - - cnt = cps[1]; - bi = cps[0]; - - r = (rh << cnt) | (rl >> (GMP_LIMB_BITS - cnt)); - udiv_rnnd_preinv (r, r, rl << cnt, b, bi); - - return r >> cnt; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1_4.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1_4.c deleted file mode 100644 index 716a0c66de49c80a6530b40d329c0fe42bf56def..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_1_4.c +++ /dev/null @@ -1,171 +0,0 @@ -/* mpn_mod_1s_4p (ap, n, b, cps) - Divide (ap,,n) by b. Return the single-limb remainder. - Requires that d < B / 4. - - Contributed to the GNU project by Torbjorn Granlund. - Based on a suggestion by Peter L. Montgomery. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2008-2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -mpn_mod_1s_4p_cps (mp_limb_t cps[7], mp_limb_t b) -{ - mp_limb_t bi; - mp_limb_t B1modb, B2modb, B3modb, B4modb, B5modb; - int cnt; - - ASSERT (b <= (~(mp_limb_t) 0) / 4); - - count_leading_zeros (cnt, b); - - b <<= cnt; - invert_limb (bi, b); - - cps[0] = bi; - cps[1] = cnt; - - B1modb = -b * ((bi >> (GMP_LIMB_BITS-cnt)) | (CNST_LIMB(1) << cnt)); - ASSERT (B1modb <= b); /* NB: not fully reduced mod b */ - cps[2] = B1modb >> cnt; - - udiv_rnnd_preinv (B2modb, B1modb, CNST_LIMB(0), b, bi); - cps[3] = B2modb >> cnt; - - udiv_rnnd_preinv (B3modb, B2modb, CNST_LIMB(0), b, bi); - cps[4] = B3modb >> cnt; - - udiv_rnnd_preinv (B4modb, B3modb, CNST_LIMB(0), b, bi); - cps[5] = B4modb >> cnt; - - udiv_rnnd_preinv (B5modb, B4modb, CNST_LIMB(0), b, bi); - cps[6] = B5modb >> cnt; - -#if WANT_ASSERT - { - int i; - b = cps[2]; - for (i = 3; i <= 6; i++) - { - b += cps[i]; - ASSERT (b >= cps[i]); - } - } -#endif -} - -mp_limb_t -mpn_mod_1s_4p (mp_srcptr ap, mp_size_t n, mp_limb_t b, const mp_limb_t cps[7]) -{ - mp_limb_t rh, rl, bi, ph, pl, ch, cl, r; - mp_limb_t B1modb, B2modb, B3modb, B4modb, B5modb; - mp_size_t i; - int cnt; - - ASSERT (n >= 1); - - B1modb = cps[2]; - B2modb = cps[3]; - B3modb = cps[4]; - B4modb = cps[5]; - B5modb = cps[6]; - - switch (n & 3) - { - case 0: - umul_ppmm (ph, pl, ap[n - 3], B1modb); - add_ssaaaa (ph, pl, ph, pl, CNST_LIMB(0), ap[n - 4]); - umul_ppmm (ch, cl, ap[n - 2], B2modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - umul_ppmm (rh, rl, ap[n - 1], B3modb); - add_ssaaaa (rh, rl, rh, rl, ph, pl); - n -= 4; - break; - case 1: - rh = 0; - rl = ap[n - 1]; - n -= 1; - break; - case 2: - rh = ap[n - 1]; - rl = ap[n - 2]; - n -= 2; - break; - case 3: - umul_ppmm (ph, pl, ap[n - 2], B1modb); - add_ssaaaa (ph, pl, ph, pl, CNST_LIMB(0), ap[n - 3]); - umul_ppmm (rh, rl, ap[n - 1], B2modb); - add_ssaaaa (rh, rl, rh, rl, ph, pl); - n -= 3; - break; - } - - for (i = n - 4; i >= 0; i -= 4) - { - /* rr = ap[i] < B - + ap[i+1] * (B mod b) <= (B-1)(b-1) - + ap[i+2] * (B^2 mod b) <= (B-1)(b-1) - + ap[i+3] * (B^3 mod b) <= (B-1)(b-1) - + LO(rr) * (B^4 mod b) <= (B-1)(b-1) - + HI(rr) * (B^5 mod b) <= (B-1)(b-1) - */ - umul_ppmm (ph, pl, ap[i + 1], B1modb); - add_ssaaaa (ph, pl, ph, pl, CNST_LIMB(0), ap[i + 0]); - - umul_ppmm (ch, cl, ap[i + 2], B2modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - - umul_ppmm (ch, cl, ap[i + 3], B3modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - - umul_ppmm (ch, cl, rl, B4modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - - umul_ppmm (rh, rl, rh, B5modb); - add_ssaaaa (rh, rl, rh, rl, ph, pl); - } - - umul_ppmm (rh, cl, rh, B1modb); - add_ssaaaa (rh, rl, rh, rl, CNST_LIMB(0), cl); - - cnt = cps[1]; - bi = cps[0]; - - r = (rh << cnt) | (rl >> (GMP_LIMB_BITS - cnt)); - udiv_rnnd_preinv (r, r, rl << cnt, b, bi); - - return r >> cnt; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_34lsub1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_34lsub1.c deleted file mode 100644 index 7c07af7acc24d0f6deead0b7878bcaa84392581d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mod_34lsub1.c +++ /dev/null @@ -1,131 +0,0 @@ -/* mpn_mod_34lsub1 -- remainder modulo 2^(GMP_NUMB_BITS*3/4)-1. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2000-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Calculate a remainder from {p,n} divided by 2^(GMP_NUMB_BITS*3/4)-1. - The remainder is not fully reduced, it's any limb value congruent to - {p,n} modulo that divisor. - - This implementation is only correct when GMP_NUMB_BITS is a multiple of - 4. - - FIXME: If GMP_NAIL_BITS is some silly big value during development then - it's possible the carry accumulators c0,c1,c2 could overflow. - - General notes: - - The basic idea is to use a set of N accumulators (N=3 in this case) to - effectively get a remainder mod 2^(GMP_NUMB_BITS*N)-1 followed at the end - by a reduction to GMP_NUMB_BITS*N/M bits (M=4 in this case) for a - remainder mod 2^(GMP_NUMB_BITS*N/M)-1. N and M are chosen to give a good - set of small prime factors in 2^(GMP_NUMB_BITS*N/M)-1. - - N=3 M=4 suits GMP_NUMB_BITS==32 and GMP_NUMB_BITS==64 quite well, giving - a few more primes than a single accumulator N=1 does, and for no extra - cost (assuming the processor has a decent number of registers). - - For strange nailified values of GMP_NUMB_BITS the idea would be to look - for what N and M give good primes. With GMP_NUMB_BITS not a power of 2 - the choices for M may be opened up a bit. But such things are probably - best done in separate code, not grafted on here. */ - -#if GMP_NUMB_BITS % 4 == 0 - -#define B1 (GMP_NUMB_BITS / 4) -#define B2 (B1 * 2) -#define B3 (B1 * 3) - -#define M1 ((CNST_LIMB(1) << B1) - 1) -#define M2 ((CNST_LIMB(1) << B2) - 1) -#define M3 ((CNST_LIMB(1) << B3) - 1) - -#define LOW0(n) ((n) & M3) -#define HIGH0(n) ((n) >> B3) - -#define LOW1(n) (((n) & M2) << B1) -#define HIGH1(n) ((n) >> B2) - -#define LOW2(n) (((n) & M1) << B2) -#define HIGH2(n) ((n) >> B1) - -#define PARTS0(n) (LOW0(n) + HIGH0(n)) -#define PARTS1(n) (LOW1(n) + HIGH1(n)) -#define PARTS2(n) (LOW2(n) + HIGH2(n)) - -#define ADD(c,a,val) \ - do { \ - mp_limb_t new_c; \ - ADDC_LIMB (new_c, a, a, val); \ - (c) += new_c; \ - } while (0) - -mp_limb_t -mpn_mod_34lsub1 (mp_srcptr p, mp_size_t n) -{ - mp_limb_t c0 = 0; - mp_limb_t c1 = 0; - mp_limb_t c2 = 0; - mp_limb_t a0, a1, a2; - - ASSERT (n >= 1); - ASSERT (n/3 < GMP_NUMB_MAX); - - a0 = a1 = a2 = 0; - c0 = c1 = c2 = 0; - - while ((n -= 3) >= 0) - { - ADD (c0, a0, p[0]); - ADD (c1, a1, p[1]); - ADD (c2, a2, p[2]); - p += 3; - } - - if (n != -3) - { - ADD (c0, a0, p[0]); - if (n != -2) - ADD (c1, a1, p[1]); - } - - return - PARTS0 (a0) + PARTS1 (a1) + PARTS2 (a2) - + PARTS1 (c0) + PARTS2 (c1) + PARTS0 (c2); -} - -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mode1o.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mode1o.c deleted file mode 100644 index ec91da223d4880577b8b1e5dc75651ad0ffadd53..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mode1o.c +++ /dev/null @@ -1,236 +0,0 @@ -/* mpn_modexact_1c_odd -- mpn by limb exact division style remainder. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2000-2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* Calculate an r satisfying - - r*B^k + a - c == q*d - - where B=2^GMP_LIMB_BITS, a is {src,size}, k is either size or size-1 - (the caller won't know which), and q is the quotient (discarded). d must - be odd, c can be any limb value. - - If c<d then r will be in the range 0<=r<d, or if c>=d then 0<=r<=d. - - This slightly strange function suits the initial Nx1 reduction for GCDs - or Jacobi symbols since the factors of 2 in B^k can be ignored, leaving - -r == a mod d (by passing c=0). For a GCD the factor of -1 on r can be - ignored, or for the Jacobi symbol it can be accounted for. The function - also suits divisibility and congruence testing since if r=0 (or r=d) is - obtained then a==c mod d. - - - r is a bit like the remainder returned by mpn_divexact_by3c, and is the - sort of remainder mpn_divexact_1 might return. Like mpn_divexact_by3c, r - represents a borrow, since effectively quotient limbs are chosen so that - subtracting that multiple of d from src at each step will produce a zero - limb. - - A long calculation can be done piece by piece from low to high by passing - the return value from one part as the carry parameter to the next part. - The effective final k becomes anything between size and size-n, if n - pieces are used. - - - A similar sort of routine could be constructed based on adding multiples - of d at each limb, much like redc in mpz_powm does. Subtracting however - has a small advantage that when subtracting to cancel out l there's never - a borrow into h, whereas using an addition would put a carry into h - depending whether l==0 or l!=0. - - - In terms of efficiency, this function is similar to a mul-by-inverse - mpn_mod_1. Both are essentially two multiplies and are best suited to - CPUs with low latency multipliers (in comparison to a divide instruction - at least.) But modexact has a few less supplementary operations, only - needs low part and high part multiplies, and has fewer working quantities - (helping CPUs with few registers). - - - In the main loop it will be noted that the new carry (call it r) is the - sum of the high product h and any borrow from l=s-c. If c<d then we will - have r<d too, for the following reasons. Let q=l*inverse be the quotient - limb, so that q*d = B*h + l, where B=2^GMP_NUMB_BITS. Now if h=d-1 then - - l = q*d - B*(d-1) <= (B-1)*d - B*(d-1) = B-d - - But if l=s-c produces a borrow when c<d, then l>=B-d+1 and hence will - never have h=d-1 and so r=h+borrow <= d-1. - - When c>=d, on the other hand, h=d-1 can certainly occur together with a - borrow, thereby giving only r<=d, as per the function definition above. - - As a design decision it's left to the caller to check for r=d if it might - be passing c>=d. Several applications have c<d initially so the extra - test is often unnecessary, for example the GCDs or a plain divisibility - d|a test will pass c=0. - - - The special case for size==1 is so that it can be assumed c<=d in the - high<=divisor test at the end. c<=d is only guaranteed after at least - one iteration of the main loop. There's also a decent chance one % is - faster than a binvert_limb, though that will depend on the processor. - - A CPU specific implementation might want to omit the size==1 code or the - high<divisor test. mpn/x86/k6/mode1o.asm for instance finds neither - useful. */ - - -mp_limb_t -mpn_modexact_1c_odd (mp_srcptr src, mp_size_t size, mp_limb_t d, - mp_limb_t orig_c) -{ - mp_limb_t s, h, l, inverse, dummy, dmul, ret; - mp_limb_t c = orig_c; - mp_size_t i; - - ASSERT (size >= 1); - ASSERT (d & 1); - ASSERT_MPN (src, size); - ASSERT_LIMB (d); - ASSERT_LIMB (c); - - if (size == 1) - { - s = src[0]; - if (s > c) - { - l = s-c; - h = l % d; - if (h != 0) - h = d - h; - } - else - { - l = c-s; - h = l % d; - } - return h; - } - - - binvert_limb (inverse, d); - dmul = d << GMP_NAIL_BITS; - - i = 0; - do - { - s = src[i]; - SUBC_LIMB (c, l, s, c); - l = (l * inverse) & GMP_NUMB_MASK; - umul_ppmm (h, dummy, l, dmul); - c += h; - } - while (++i < size-1); - - - s = src[i]; - if (s <= d) - { - /* With high<=d the final step can be a subtract and addback. If c==0 - then the addback will restore to l>=0. If c==d then will get l==d - if s==0, but that's ok per the function definition. */ - - l = c - s; - if (c < s) - l += d; - - ret = l; - } - else - { - /* Can't skip a divide, just do the loop code once more. */ - - SUBC_LIMB (c, l, s, c); - l = (l * inverse) & GMP_NUMB_MASK; - umul_ppmm (h, dummy, l, dmul); - c += h; - ret = c; - } - - ASSERT (orig_c < d ? ret < d : ret <= d); - return ret; -} - - - -#if 0 - -/* The following is an alternate form that might shave one cycle on a - superscalar processor since it takes c+=h off the dependent chain, - leaving just a low product, high product, and a subtract. - - This is for CPU specific implementations to consider. A special case for - high<divisor and/or size==1 can be added if desired. - - Notice that c is only ever 0 or 1, since if s-c produces a borrow then - x=0xFF..FF and x-h cannot produce a borrow. The c=(x>s) could become - c=(x==0xFF..FF) too, if that helped. */ - -mp_limb_t -mpn_modexact_1c_odd (mp_srcptr src, mp_size_t size, mp_limb_t d, mp_limb_t h) -{ - mp_limb_t s, x, y, inverse, dummy, dmul, c1, c2; - mp_limb_t c = 0; - mp_size_t i; - - ASSERT (size >= 1); - ASSERT (d & 1); - - binvert_limb (inverse, d); - dmul = d << GMP_NAIL_BITS; - - for (i = 0; i < size; i++) - { - ASSERT (c==0 || c==1); - - s = src[i]; - SUBC_LIMB (c1, x, s, c); - - SUBC_LIMB (c2, y, x, h); - c = c1 + c2; - - y = (y * inverse) & GMP_NUMB_MASK; - umul_ppmm (h, dummy, y, dmul); - } - - h += c; - return h; -} - -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_bdiv_q.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_bdiv_q.c deleted file mode 100644 index 6f5f3166caa8b294ad1b5afe5885d0d9fd50e890..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_bdiv_q.c +++ /dev/null @@ -1,273 +0,0 @@ -/* mpn_mu_bdiv_q(qp,np,nn,dp,dn,tp) -- Compute {np,nn} / {dp,dn} mod B^nn. - storing the result in {qp,nn}. Overlap allowed between Q and N; all other - overlap disallowed. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2005-2007, 2009, 2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -/* - The idea of the algorithm used herein is to compute a smaller inverted value - than used in the standard Barrett algorithm, and thus save time in the - Newton iterations, and pay just a small price when using the inverted value - for developing quotient bits. This algorithm was presented at ICMS 2006. -*/ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* N = {np,nn} - D = {dp,dn} - - Requirements: N >= D - D >= 1 - D odd - dn >= 2 - nn >= 2 - scratch space as determined by mpn_mu_bdiv_q_itch(nn,dn). - - Write quotient to Q = {qp,nn}. - - FIXME: When iterating, perhaps do the small step before loop, not after. - FIXME: Try to avoid the scalar divisions when computing inverse size. - FIXME: Trim allocation for (qn > dn) case, 3*dn might be possible. In - particular, when dn==in, tp and rp could use the same space. - FIXME: Trim final quotient calculation to qn limbs of precision. -*/ -void -mpn_mu_bdiv_q (mp_ptr qp, - mp_srcptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, - mp_ptr scratch) -{ - mp_size_t qn; - mp_size_t in; - int cy, c0; - mp_size_t tn, wn; - - qn = nn; - - ASSERT (dn >= 2); - ASSERT (qn >= 2); - - if (qn > dn) - { - mp_size_t b; - - /* |_______________________| dividend - |________| divisor */ - -#define ip scratch /* in */ -#define rp (scratch + in) /* dn or rest >= binvert_itch(in) */ -#define tp (scratch + in + dn) /* dn+in or next_size(dn) */ -#define scratch_out (scratch + in + dn + tn) /* mulmod_bnm1_itch(next_size(dn)) */ - - /* Compute an inverse size that is a nice partition of the quotient. */ - b = (qn - 1) / dn + 1; /* ceil(qn/dn), number of blocks */ - in = (qn - 1) / b + 1; /* ceil(qn/b) = ceil(qn / ceil(qn/dn)) */ - - /* Some notes on allocation: - - When in = dn, R dies when mpn_mullo returns, if in < dn the low in - limbs of R dies at that point. We could save memory by letting T live - just under R, and let the upper part of T expand into R. These changes - should reduce itch to perhaps 3dn. - */ - - mpn_binvert (ip, dp, in, rp); - - cy = 0; - - MPN_COPY (rp, np, dn); - np += dn; - mpn_mullo_n (qp, rp, ip, in); - qn -= in; - - while (qn > in) - { - if (BELOW_THRESHOLD (in, MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD)) - mpn_mul (tp, dp, dn, qp, in); /* mulhi, need tp[dn+in-1...in] */ - else - { - tn = mpn_mulmod_bnm1_next_size (dn); - mpn_mulmod_bnm1 (tp, tn, dp, dn, qp, in, scratch_out); - wn = dn + in - tn; /* number of wrapped limbs */ - if (wn > 0) - { - c0 = mpn_sub_n (tp + tn, tp, rp, wn); - mpn_decr_u (tp + wn, c0); - } - } - - qp += in; - if (dn != in) - { - /* Subtract tp[dn-1...in] from partial remainder. */ - cy += mpn_sub_n (rp, rp + in, tp + in, dn - in); - if (cy == 2) - { - mpn_incr_u (tp + dn, 1); - cy = 1; - } - } - /* Subtract tp[dn+in-1...dn] from dividend. */ - cy = mpn_sub_nc (rp + dn - in, np, tp + dn, in, cy); - np += in; - mpn_mullo_n (qp, rp, ip, in); - qn -= in; - } - - /* Generate last qn limbs. - FIXME: It should be possible to limit precision here, since qn is - typically somewhat smaller than dn. No big gains expected. */ - - if (BELOW_THRESHOLD (in, MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD)) - mpn_mul (tp, dp, dn, qp, in); /* mulhi, need tp[qn+in-1...in] */ - else - { - tn = mpn_mulmod_bnm1_next_size (dn); - mpn_mulmod_bnm1 (tp, tn, dp, dn, qp, in, scratch_out); - wn = dn + in - tn; /* number of wrapped limbs */ - if (wn > 0) - { - c0 = mpn_sub_n (tp + tn, tp, rp, wn); - mpn_decr_u (tp + wn, c0); - } - } - - qp += in; - if (dn != in) - { - cy += mpn_sub_n (rp, rp + in, tp + in, dn - in); - if (cy == 2) - { - mpn_incr_u (tp + dn, 1); - cy = 1; - } - } - - mpn_sub_nc (rp + dn - in, np, tp + dn, qn - (dn - in), cy); - mpn_mullo_n (qp, rp, ip, qn); - -#undef ip -#undef rp -#undef tp -#undef scratch_out - } - else - { - /* |_______________________| dividend - |________________| divisor */ - -#define ip scratch /* in */ -#define tp (scratch + in) /* qn+in or next_size(qn) or rest >= binvert_itch(in) */ -#define scratch_out (scratch + in + tn)/* mulmod_bnm1_itch(next_size(qn)) */ - - /* Compute half-sized inverse. */ - in = qn - (qn >> 1); - - mpn_binvert (ip, dp, in, tp); - - mpn_mullo_n (qp, np, ip, in); /* low `in' quotient limbs */ - - if (BELOW_THRESHOLD (in, MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD)) - mpn_mul (tp, dp, qn, qp, in); /* mulhigh */ - else - { - tn = mpn_mulmod_bnm1_next_size (qn); - mpn_mulmod_bnm1 (tp, tn, dp, qn, qp, in, scratch_out); - wn = qn + in - tn; /* number of wrapped limbs */ - if (wn > 0) - { - c0 = mpn_cmp (tp, np, wn) < 0; - mpn_decr_u (tp + wn, c0); - } - } - - mpn_sub_n (tp, np + in, tp + in, qn - in); - mpn_mullo_n (qp + in, tp, ip, qn - in); /* high qn-in quotient limbs */ - -#undef ip -#undef tp -#undef scratch_out - } -} - -mp_size_t -mpn_mu_bdiv_q_itch (mp_size_t nn, mp_size_t dn) -{ - mp_size_t qn, in, tn, itch_binvert, itch_out, itches; - mp_size_t b; - - ASSERT_ALWAYS (DC_BDIV_Q_THRESHOLD < MU_BDIV_Q_THRESHOLD); - - qn = nn; - - if (qn > dn) - { - b = (qn - 1) / dn + 1; /* ceil(qn/dn), number of blocks */ - in = (qn - 1) / b + 1; /* ceil(qn/b) = ceil(qn / ceil(qn/dn)) */ - if (BELOW_THRESHOLD (in, MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD)) - { - tn = dn + in; - itch_out = 0; - } - else - { - tn = mpn_mulmod_bnm1_next_size (dn); - itch_out = mpn_mulmod_bnm1_itch (tn, dn, in); - } - itches = dn + tn + itch_out; - } - else - { - in = qn - (qn >> 1); - if (BELOW_THRESHOLD (in, MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD)) - { - tn = qn + in; - itch_out = 0; - } - else - { - tn = mpn_mulmod_bnm1_next_size (qn); - itch_out = mpn_mulmod_bnm1_itch (tn, qn, in); - } - itches = tn + itch_out; - } - - itch_binvert = mpn_binvert_itch (in); - return in + MAX (itches, itch_binvert); -} - diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_bdiv_qr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_bdiv_qr.c deleted file mode 100644 index 54da5b0bfe1fdd138dd2ef6be26306a2eca39a34..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_bdiv_qr.c +++ /dev/null @@ -1,280 +0,0 @@ -/* mpn_mu_bdiv_qr(qp,rp,np,nn,dp,dn,tp) -- Compute {np,nn} / {dp,dn} mod B^qn, - where qn = nn-dn, storing the result in {qp,qn}. Overlap allowed between Q - and N; all other overlap disallowed. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2005-2007, 2009, 2010, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -/* - The idea of the algorithm used herein is to compute a smaller inverted value - than used in the standard Barrett algorithm, and thus save time in the - Newton iterations, and pay just a small price when using the inverted value - for developing quotient bits. This algorithm was presented at ICMS 2006. -*/ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* N = {np,nn} - D = {dp,dn} - - Requirements: N >= D - D >= 1 - D odd - dn >= 2 - nn >= 2 - scratch space as determined by mpn_mu_bdiv_qr_itch(nn,dn). - - Write quotient to Q = {qp,nn-dn}. - - FIXME: When iterating, perhaps do the small step before loop, not after. - FIXME: Try to avoid the scalar divisions when computing inverse size. - FIXME: Trim allocation for (qn > dn) case, 3*dn might be possible. In - particular, when dn==in, tp and rp could use the same space. -*/ -mp_limb_t -mpn_mu_bdiv_qr (mp_ptr qp, - mp_ptr rp, - mp_srcptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, - mp_ptr scratch) -{ - mp_size_t qn; - mp_size_t in; - mp_limb_t cy, c0; - mp_size_t tn, wn; - - qn = nn - dn; - - ASSERT (dn >= 2); - ASSERT (qn >= 2); - - if (qn > dn) - { - mp_size_t b; - - /* |_______________________| dividend - |________| divisor */ - -#define ip scratch /* in */ -#define tp (scratch + in) /* dn+in or next_size(dn) or rest >= binvert_itch(in) */ -#define scratch_out (scratch + in + tn)/* mulmod_bnm1_itch(next_size(dn)) */ - - /* Compute an inverse size that is a nice partition of the quotient. */ - b = (qn - 1) / dn + 1; /* ceil(qn/dn), number of blocks */ - in = (qn - 1) / b + 1; /* ceil(qn/b) = ceil(qn / ceil(qn/dn)) */ - - /* Some notes on allocation: - - When in = dn, R dies when mpn_mullo returns, if in < dn the low in - limbs of R dies at that point. We could save memory by letting T live - just under R, and let the upper part of T expand into R. These changes - should reduce itch to perhaps 3dn. - */ - - mpn_binvert (ip, dp, in, tp); - - MPN_COPY (rp, np, dn); - np += dn; - cy = 0; - - while (qn > in) - { - mpn_mullo_n (qp, rp, ip, in); - - if (BELOW_THRESHOLD (in, MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD)) - mpn_mul (tp, dp, dn, qp, in); /* mulhi, need tp[dn+in-1...in] */ - else - { - tn = mpn_mulmod_bnm1_next_size (dn); - mpn_mulmod_bnm1 (tp, tn, dp, dn, qp, in, scratch_out); - wn = dn + in - tn; /* number of wrapped limbs */ - if (wn > 0) - { - c0 = mpn_sub_n (tp + tn, tp, rp, wn); - mpn_decr_u (tp + wn, c0); - } - } - - qp += in; - qn -= in; - - if (dn != in) - { - /* Subtract tp[dn-1...in] from partial remainder. */ - cy += mpn_sub_n (rp, rp + in, tp + in, dn - in); - if (cy == 2) - { - mpn_incr_u (tp + dn, 1); - cy = 1; - } - } - /* Subtract tp[dn+in-1...dn] from dividend. */ - cy = mpn_sub_nc (rp + dn - in, np, tp + dn, in, cy); - np += in; - } - - /* Generate last qn limbs. */ - mpn_mullo_n (qp, rp, ip, qn); - - if (BELOW_THRESHOLD (qn, MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD)) - mpn_mul (tp, dp, dn, qp, qn); /* mulhi, need tp[qn+in-1...in] */ - else - { - tn = mpn_mulmod_bnm1_next_size (dn); - mpn_mulmod_bnm1 (tp, tn, dp, dn, qp, qn, scratch_out); - wn = dn + qn - tn; /* number of wrapped limbs */ - if (wn > 0) - { - c0 = mpn_sub_n (tp + tn, tp, rp, wn); - mpn_decr_u (tp + wn, c0); - } - } - - if (dn != qn) - { - cy += mpn_sub_n (rp, rp + qn, tp + qn, dn - qn); - if (cy == 2) - { - mpn_incr_u (tp + dn, 1); - cy = 1; - } - } - return mpn_sub_nc (rp + dn - qn, np, tp + dn, qn, cy); - -#undef ip -#undef tp -#undef scratch_out - } - else - { - /* |_______________________| dividend - |________________| divisor */ - -#define ip scratch /* in */ -#define tp (scratch + in) /* dn+in or next_size(dn) or rest >= binvert_itch(in) */ -#define scratch_out (scratch + in + tn)/* mulmod_bnm1_itch(next_size(dn)) */ - - /* Compute half-sized inverse. */ - in = qn - (qn >> 1); - - mpn_binvert (ip, dp, in, tp); - - mpn_mullo_n (qp, np, ip, in); /* low `in' quotient limbs */ - - if (BELOW_THRESHOLD (in, MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD)) - mpn_mul (tp, dp, dn, qp, in); /* mulhigh */ - else - { - tn = mpn_mulmod_bnm1_next_size (dn); - mpn_mulmod_bnm1 (tp, tn, dp, dn, qp, in, scratch_out); - wn = dn + in - tn; /* number of wrapped limbs */ - if (wn > 0) - { - c0 = mpn_sub_n (tp + tn, tp, np, wn); - mpn_decr_u (tp + wn, c0); - } - } - - qp += in; - qn -= in; - - cy = mpn_sub_n (rp, np + in, tp + in, dn); - mpn_mullo_n (qp, rp, ip, qn); /* high qn quotient limbs */ - - if (BELOW_THRESHOLD (qn, MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD)) - mpn_mul (tp, dp, dn, qp, qn); /* mulhigh */ - else - { - tn = mpn_mulmod_bnm1_next_size (dn); - mpn_mulmod_bnm1 (tp, tn, dp, dn, qp, qn, scratch_out); - wn = dn + qn - tn; /* number of wrapped limbs */ - if (wn > 0) - { - c0 = mpn_sub_n (tp + tn, tp, rp, wn); - mpn_decr_u (tp + wn, c0); - } - } - - cy += mpn_sub_n (rp, rp + qn, tp + qn, dn - qn); - if (cy == 2) - { - mpn_incr_u (tp + dn, 1); - cy = 1; - } - return mpn_sub_nc (rp + dn - qn, np + dn + in, tp + dn, qn, cy); - -#undef ip -#undef tp -#undef scratch_out - } -} - -mp_size_t -mpn_mu_bdiv_qr_itch (mp_size_t nn, mp_size_t dn) -{ - mp_size_t qn, in, tn, itch_binvert, itch_out, itches; - mp_size_t b; - - ASSERT_ALWAYS (DC_BDIV_Q_THRESHOLD < MU_BDIV_Q_THRESHOLD); - - qn = nn - dn; - - if (qn > dn) - { - b = (qn - 1) / dn + 1; /* ceil(qn/dn), number of blocks */ - in = (qn - 1) / b + 1; /* ceil(qn/b) = ceil(qn / ceil(qn/dn)) */ - } - else - { - in = qn - (qn >> 1); - } - - if (BELOW_THRESHOLD (in, MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD)) - { - tn = dn + in; - itch_out = 0; - } - else - { - tn = mpn_mulmod_bnm1_next_size (dn); - itch_out = mpn_mulmod_bnm1_itch (tn, dn, in); - } - - itch_binvert = mpn_binvert_itch (in); - itches = tn + itch_out; - return in + MAX (itches, itch_binvert); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_div_q.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_div_q.c deleted file mode 100644 index 7fc943532330ce3538d48f6dace3b55e297d9aa8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_div_q.c +++ /dev/null @@ -1,185 +0,0 @@ -/* mpn_mu_div_q. - - Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2005-2007, 2009, 2010, 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -/* - The idea of the algorithm used herein is to compute a smaller inverted value - than used in the standard Barrett algorithm, and thus save time in the - Newton iterations, and pay just a small price when using the inverted value - for developing quotient bits. This algorithm was presented at ICMS 2006. -*/ - -/* - Things to work on: - - 1. This is a rudimentary implementation of mpn_mu_div_q. The algorithm is - probably close to optimal, except when mpn_mu_divappr_q fails. - - 2. We used to fall back to mpn_mu_div_qr when we detect a possible - mpn_mu_divappr_q rounding problem, now we multiply and compare. - Unfortunately, since mpn_mu_divappr_q does not return the partial - remainder, this also doesn't become optimal. A mpn_mu_divappr_qr could - solve that. - - 3. The allocations done here should be made from the scratch area, which - then would need to be amended. -*/ - -#include <stdlib.h> /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" - - -mp_limb_t -mpn_mu_div_q (mp_ptr qp, - mp_srcptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, - mp_ptr scratch) -{ - mp_ptr tp, rp; - mp_size_t qn; - mp_limb_t cy, qh; - TMP_DECL; - - TMP_MARK; - - qn = nn - dn; - - tp = TMP_BALLOC_LIMBS (qn + 1); - - if (qn >= dn) /* nn >= 2*dn + 1 */ - { - /* |_______________________| dividend - |________| divisor */ - - rp = TMP_BALLOC_LIMBS (nn + 1); - MPN_COPY (rp + 1, np, nn); - rp[0] = 0; - - qh = mpn_cmp (rp + 1 + nn - dn, dp, dn) >= 0; - if (qh != 0) - mpn_sub_n (rp + 1 + nn - dn, rp + 1 + nn - dn, dp, dn); - - cy = mpn_mu_divappr_q (tp, rp, nn + 1, dp, dn, scratch); - - if (UNLIKELY (cy != 0)) - { - /* Since the partial remainder fed to mpn_preinv_mu_divappr_q was - canonically reduced, replace the returned value of B^(qn-dn)+eps - by the largest possible value. */ - mp_size_t i; - for (i = 0; i < qn + 1; i++) - tp[i] = GMP_NUMB_MAX; - } - - /* The max error of mpn_mu_divappr_q is +4. If the low quotient limb is - smaller than the max error, we cannot trust the quotient. */ - if (tp[0] > 4) - { - MPN_COPY (qp, tp + 1, qn); - } - else - { - mp_limb_t cy; - mp_ptr pp; - - pp = rp; - mpn_mul (pp, tp + 1, qn, dp, dn); - - cy = (qh != 0) ? mpn_add_n (pp + qn, pp + qn, dp, dn) : 0; - - if (cy || mpn_cmp (pp, np, nn) > 0) /* At most is wrong by one, no cycle. */ - qh -= mpn_sub_1 (qp, tp + 1, qn, 1); - else /* Same as above */ - MPN_COPY (qp, tp + 1, qn); - } - } - else - { - /* |_______________________| dividend - |________________| divisor */ - - /* FIXME: When nn = 2dn-1, qn becomes dn-1, and the numerator size passed - here becomes 2dn, i.e., more than nn. This shouldn't hurt, since only - the most significant dn-1 limbs will actually be read, but it is not - pretty. */ - - qh = mpn_mu_divappr_q (tp, np + nn - (2 * qn + 2), 2 * qn + 2, - dp + dn - (qn + 1), qn + 1, scratch); - - /* The max error of mpn_mu_divappr_q is +4, but we get an additional - error from the divisor truncation. */ - if (tp[0] > 6) - { - MPN_COPY (qp, tp + 1, qn); - } - else - { - mp_limb_t cy; - - /* FIXME: a shorter product should be enough; we may use already - allocated space... */ - rp = TMP_BALLOC_LIMBS (nn); - mpn_mul (rp, dp, dn, tp + 1, qn); - - cy = (qh != 0) ? mpn_add_n (rp + qn, rp + qn, dp, dn) : 0; - - if (cy || mpn_cmp (rp, np, nn) > 0) /* At most is wrong by one, no cycle. */ - qh -= mpn_sub_1 (qp, tp + 1, qn, 1); - else /* Same as above */ - MPN_COPY (qp, tp + 1, qn); - } - } - - TMP_FREE; - return qh; -} - -mp_size_t -mpn_mu_div_q_itch (mp_size_t nn, mp_size_t dn, int mua_k) -{ - mp_size_t qn; - - qn = nn - dn; - if (qn >= dn) - { - return mpn_mu_divappr_q_itch (nn + 1, dn, mua_k); - } - else - { - return mpn_mu_divappr_q_itch (2 * qn + 2, qn + 1, mua_k); - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_div_qr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_div_qr.c deleted file mode 100644 index 2a22af495c2847b2d483ebfb10d95de825a395b5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_div_qr.c +++ /dev/null @@ -1,417 +0,0 @@ -/* mpn_mu_div_qr, mpn_preinv_mu_div_qr. - - Compute Q = floor(N / D) and R = N-QD. N is nn limbs and D is dn limbs and - must be normalized, and Q must be nn-dn limbs. The requirement that Q is - nn-dn limbs (and not nn-dn+1 limbs) was put in place in order to allow us to - let N be unmodified during the operation. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2005-2007, 2009, 2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -/* - The idea of the algorithm used herein is to compute a smaller inverted value - than used in the standard Barrett algorithm, and thus save time in the - Newton iterations, and pay just a small price when using the inverted value - for developing quotient bits. This algorithm was presented at ICMS 2006. -*/ - -/* CAUTION: This code and the code in mu_divappr_q.c should be edited in sync. - - Things to work on: - - * This isn't optimal when the quotient isn't needed, as it might take a lot - of space. The computation is always needed, though, so there is no time to - save with special code. - - * The itch/scratch scheme isn't perhaps such a good idea as it once seemed, - demonstrated by the fact that the mpn_invertappr function's scratch needs - mean that we need to keep a large allocation long after it is needed. - Things are worse as mpn_mul_fft does not accept any scratch parameter, - which means we'll have a large memory hole while in mpn_mul_fft. In - general, a peak scratch need in the beginning of a function isn't - well-handled by the itch/scratch scheme. -*/ - -#ifdef STAT -#undef STAT -#define STAT(x) x -#else -#define STAT(x) -#endif - -#include <stdlib.h> /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" - - -/* FIXME: The MU_DIV_QR_SKEW_THRESHOLD was not analysed properly. It gives a - speedup according to old measurements, but does the decision mechanism - really make sense? It seem like the quotient between dn and qn might be - what we really should be checking. */ -#ifndef MU_DIV_QR_SKEW_THRESHOLD -#define MU_DIV_QR_SKEW_THRESHOLD 100 -#endif - -#ifdef CHECK /* FIXME: Enable in minithres */ -#undef MU_DIV_QR_SKEW_THRESHOLD -#define MU_DIV_QR_SKEW_THRESHOLD 1 -#endif - - -static mp_limb_t mpn_mu_div_qr2 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); - - -mp_limb_t -mpn_mu_div_qr (mp_ptr qp, - mp_ptr rp, - mp_srcptr np, - mp_size_t nn, - mp_srcptr dp, - mp_size_t dn, - mp_ptr scratch) -{ - mp_size_t qn; - mp_limb_t cy, qh; - - qn = nn - dn; - if (qn + MU_DIV_QR_SKEW_THRESHOLD < dn) - { - /* |______________|_ign_first__| dividend nn - |_______|_ign_first__| divisor dn - - |______| quotient (prel) qn - - |___________________| quotient * ignored-divisor-part dn-1 - */ - - /* Compute a preliminary quotient and a partial remainder by dividing the - most significant limbs of each operand. */ - qh = mpn_mu_div_qr2 (qp, rp + nn - (2 * qn + 1), - np + nn - (2 * qn + 1), 2 * qn + 1, - dp + dn - (qn + 1), qn + 1, - scratch); - - /* Multiply the quotient by the divisor limbs ignored above. */ - if (dn - (qn + 1) > qn) - mpn_mul (scratch, dp, dn - (qn + 1), qp, qn); /* prod is dn-1 limbs */ - else - mpn_mul (scratch, qp, qn, dp, dn - (qn + 1)); /* prod is dn-1 limbs */ - - if (qh) - cy = mpn_add_n (scratch + qn, scratch + qn, dp, dn - (qn + 1)); - else - cy = 0; - scratch[dn - 1] = cy; - - cy = mpn_sub_n (rp, np, scratch, nn - (2 * qn + 1)); - cy = mpn_sub_nc (rp + nn - (2 * qn + 1), - rp + nn - (2 * qn + 1), - scratch + nn - (2 * qn + 1), - qn + 1, cy); - if (cy) - { - qh -= mpn_sub_1 (qp, qp, qn, 1); - mpn_add_n (rp, rp, dp, dn); - } - } - else - { - qh = mpn_mu_div_qr2 (qp, rp, np, nn, dp, dn, scratch); - } - - return qh; -} - -static mp_limb_t -mpn_mu_div_qr2 (mp_ptr qp, - mp_ptr rp, - mp_srcptr np, - mp_size_t nn, - mp_srcptr dp, - mp_size_t dn, - mp_ptr scratch) -{ - mp_size_t qn, in; - mp_limb_t cy, qh; - mp_ptr ip, tp; - - ASSERT (dn > 1); - - qn = nn - dn; - - /* Compute the inverse size. */ - in = mpn_mu_div_qr_choose_in (qn, dn, 0); - ASSERT (in <= dn); - -#if 1 - /* This alternative inverse computation method gets slightly more accurate - results. FIXMEs: (1) Temp allocation needs not analysed (2) itch function - not adapted (3) mpn_invertappr scratch needs not met. */ - ip = scratch; - tp = scratch + in + 1; - - /* compute an approximate inverse on (in+1) limbs */ - if (dn == in) - { - MPN_COPY (tp + 1, dp, in); - tp[0] = 1; - mpn_invertappr (ip, tp, in + 1, tp + in + 1); - MPN_COPY_INCR (ip, ip + 1, in); - } - else - { - cy = mpn_add_1 (tp, dp + dn - (in + 1), in + 1, 1); - if (UNLIKELY (cy != 0)) - MPN_ZERO (ip, in); - else - { - mpn_invertappr (ip, tp, in + 1, tp + in + 1); - MPN_COPY_INCR (ip, ip + 1, in); - } - } -#else - /* This older inverse computation method gets slightly worse results than the - one above. */ - ip = scratch; - tp = scratch + in; - - /* Compute inverse of D to in+1 limbs, then round to 'in' limbs. Ideally the - inversion function should do this automatically. */ - if (dn == in) - { - tp[in + 1] = 0; - MPN_COPY (tp + in + 2, dp, in); - mpn_invertappr (tp, tp + in + 1, in + 1, NULL); - } - else - { - mpn_invertappr (tp, dp + dn - (in + 1), in + 1, NULL); - } - cy = mpn_sub_1 (tp, tp, in + 1, GMP_NUMB_HIGHBIT); - if (UNLIKELY (cy != 0)) - MPN_ZERO (tp + 1, in); - MPN_COPY (ip, tp + 1, in); -#endif - - qh = mpn_preinv_mu_div_qr (qp, rp, np, nn, dp, dn, ip, in, scratch + in); - - return qh; -} - -mp_limb_t -mpn_preinv_mu_div_qr (mp_ptr qp, - mp_ptr rp, - mp_srcptr np, - mp_size_t nn, - mp_srcptr dp, - mp_size_t dn, - mp_srcptr ip, - mp_size_t in, - mp_ptr scratch) -{ - mp_size_t qn; - mp_limb_t cy, cx, qh; - mp_limb_t r; - mp_size_t tn, wn; - -#define tp scratch -#define scratch_out (scratch + tn) - - qn = nn - dn; - - np += qn; - qp += qn; - - qh = mpn_cmp (np, dp, dn) >= 0; - if (qh != 0) - mpn_sub_n (rp, np, dp, dn); - else - MPN_COPY_INCR (rp, np, dn); - - /* if (qn == 0) */ /* The while below handles this case */ - /* return qh; */ /* Degenerate use. Should we allow this? */ - - while (qn > 0) - { - if (qn < in) - { - ip += in - qn; - in = qn; - } - np -= in; - qp -= in; - - /* Compute the next block of quotient limbs by multiplying the inverse I - by the upper part of the partial remainder R. */ - mpn_mul_n (tp, rp + dn - in, ip, in); /* mulhi */ - cy = mpn_add_n (qp, tp + in, rp + dn - in, in); /* I's msb implicit */ - ASSERT_ALWAYS (cy == 0); - - qn -= in; - - /* Compute the product of the quotient block and the divisor D, to be - subtracted from the partial remainder combined with new limbs from the - dividend N. We only really need the low dn+1 limbs. */ - - if (BELOW_THRESHOLD (in, MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD)) - mpn_mul (tp, dp, dn, qp, in); /* dn+in limbs, high 'in' cancels */ - else - { - tn = mpn_mulmod_bnm1_next_size (dn + 1); - mpn_mulmod_bnm1 (tp, tn, dp, dn, qp, in, scratch_out); - wn = dn + in - tn; /* number of wrapped limbs */ - if (wn > 0) - { - cy = mpn_sub_n (tp, tp, rp + dn - wn, wn); - cy = mpn_sub_1 (tp + wn, tp + wn, tn - wn, cy); - cx = mpn_cmp (rp + dn - in, tp + dn, tn - dn) < 0; - ASSERT_ALWAYS (cx >= cy); - mpn_incr_u (tp, cx - cy); - } - } - - r = rp[dn - in] - tp[dn]; - - /* Subtract the product from the partial remainder combined with new - limbs from the dividend N, generating a new partial remainder R. */ - if (dn != in) - { - cy = mpn_sub_n (tp, np, tp, in); /* get next 'in' limbs from N */ - cy = mpn_sub_nc (tp + in, rp, tp + in, dn - in, cy); - MPN_COPY (rp, tp, dn); /* FIXME: try to avoid this */ - } - else - { - cy = mpn_sub_n (rp, np, tp, in); /* get next 'in' limbs from N */ - } - - STAT (int i; int err = 0; - static int errarr[5]; static int err_rec; static int tot); - - /* Check the remainder R and adjust the quotient as needed. */ - r -= cy; - while (r != 0) - { - /* We loop 0 times with about 69% probability, 1 time with about 31% - probability, 2 times with about 0.6% probability, if inverse is - computed as recommended. */ - mpn_incr_u (qp, 1); - cy = mpn_sub_n (rp, rp, dp, dn); - r -= cy; - STAT (err++); - } - if (mpn_cmp (rp, dp, dn) >= 0) - { - /* This is executed with about 76% probability. */ - mpn_incr_u (qp, 1); - cy = mpn_sub_n (rp, rp, dp, dn); - STAT (err++); - } - - STAT ( - tot++; - errarr[err]++; - if (err > err_rec) - err_rec = err; - if (tot % 0x10000 == 0) - { - for (i = 0; i <= err_rec; i++) - printf (" %d(%.1f%%)", errarr[i], 100.0*errarr[i]/tot); - printf ("\n"); - } - ); - } - - return qh; -} - -/* In case k=0 (automatic choice), we distinguish 3 cases: - (a) dn < qn: in = ceil(qn / ceil(qn/dn)) - (b) dn/3 < qn <= dn: in = ceil(qn / 2) - (c) qn < dn/3: in = qn - In all cases we have in <= dn. - */ -mp_size_t -mpn_mu_div_qr_choose_in (mp_size_t qn, mp_size_t dn, int k) -{ - mp_size_t in; - - if (k == 0) - { - mp_size_t b; - if (qn > dn) - { - /* Compute an inverse size that is a nice partition of the quotient. */ - b = (qn - 1) / dn + 1; /* ceil(qn/dn), number of blocks */ - in = (qn - 1) / b + 1; /* ceil(qn/b) = ceil(qn / ceil(qn/dn)) */ - } - else if (3 * qn > dn) - { - in = (qn - 1) / 2 + 1; /* b = 2 */ - } - else - { - in = (qn - 1) / 1 + 1; /* b = 1 */ - } - } - else - { - mp_size_t xn; - xn = MIN (dn, qn); - in = (xn - 1) / k + 1; - } - - return in; -} - -mp_size_t -mpn_mu_div_qr_itch (mp_size_t nn, mp_size_t dn, int mua_k) -{ - mp_size_t in = mpn_mu_div_qr_choose_in (nn - dn, dn, mua_k); - mp_size_t itch_preinv = mpn_preinv_mu_div_qr_itch (nn, dn, in); - mp_size_t itch_invapp = mpn_invertappr_itch (in + 1) + in + 2; /* 3in + 4 */ - - ASSERT (itch_preinv >= itch_invapp); - return in + MAX (itch_invapp, itch_preinv); -} - -mp_size_t -mpn_preinv_mu_div_qr_itch (mp_size_t nn, mp_size_t dn, mp_size_t in) -{ - mp_size_t itch_local = mpn_mulmod_bnm1_next_size (dn + 1); - mp_size_t itch_out = mpn_mulmod_bnm1_itch (itch_local, dn, in); - - return itch_local + itch_out; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_divappr_q.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_divappr_q.c deleted file mode 100644 index 970c86245c9e6f90ffcadd6a6b23627249e98d6b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mu_divappr_q.c +++ /dev/null @@ -1,366 +0,0 @@ -/* mpn_mu_divappr_q, mpn_preinv_mu_divappr_q. - - Compute Q = floor(N / D) + e. N is nn limbs, D is dn limbs and must be - normalized, and Q must be nn-dn limbs, 0 <= e <= 4. The requirement that Q - is nn-dn limbs (and not nn-dn+1 limbs) was put in place in order to allow us - to let N be unmodified during the operation. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2005-2007, 2009, 2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -/* - The idea of the algorithm used herein is to compute a smaller inverted value - than used in the standard Barrett algorithm, and thus save time in the - Newton iterations, and pay just a small price when using the inverted value - for developing quotient bits. This algorithm was presented at ICMS 2006. -*/ - -/* CAUTION: This code and the code in mu_div_qr.c should be edited in sync. - - Things to work on: - - * The itch/scratch scheme isn't perhaps such a good idea as it once seemed, - demonstrated by the fact that the mpn_invertappr function's scratch needs - mean that we need to keep a large allocation long after it is needed. - Things are worse as mpn_mul_fft does not accept any scratch parameter, - which means we'll have a large memory hole while in mpn_mul_fft. In - general, a peak scratch need in the beginning of a function isn't - well-handled by the itch/scratch scheme. -*/ - -#ifdef STAT -#undef STAT -#define STAT(x) x -#else -#define STAT(x) -#endif - -#include <stdlib.h> /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" - - -mp_limb_t -mpn_mu_divappr_q (mp_ptr qp, - mp_srcptr np, - mp_size_t nn, - mp_srcptr dp, - mp_size_t dn, - mp_ptr scratch) -{ - mp_size_t qn, in; - mp_limb_t cy, qh; - mp_ptr ip, tp; - - ASSERT (dn > 1); - - qn = nn - dn; - - /* If Q is smaller than D, truncate operands. */ - if (qn + 1 < dn) - { - np += dn - (qn + 1); - nn -= dn - (qn + 1); - dp += dn - (qn + 1); - dn = qn + 1; - } - - /* Compute the inverse size. */ - in = mpn_mu_divappr_q_choose_in (qn, dn, 0); - ASSERT (in <= dn); - -#if 1 - /* This alternative inverse computation method gets slightly more accurate - results. FIXMEs: (1) Temp allocation needs not analysed (2) itch function - not adapted (3) mpn_invertappr scratch needs not met. */ - ip = scratch; - tp = scratch + in + 1; - - /* compute an approximate inverse on (in+1) limbs */ - if (dn == in) - { - MPN_COPY (tp + 1, dp, in); - tp[0] = 1; - mpn_invertappr (ip, tp, in + 1, tp + in + 1); - MPN_COPY_INCR (ip, ip + 1, in); - } - else - { - cy = mpn_add_1 (tp, dp + dn - (in + 1), in + 1, 1); - if (UNLIKELY (cy != 0)) - MPN_ZERO (ip, in); - else - { - mpn_invertappr (ip, tp, in + 1, tp + in + 1); - MPN_COPY_INCR (ip, ip + 1, in); - } - } -#else - /* This older inverse computation method gets slightly worse results than the - one above. */ - ip = scratch; - tp = scratch + in; - - /* Compute inverse of D to in+1 limbs, then round to 'in' limbs. Ideally the - inversion function should do this automatically. */ - if (dn == in) - { - tp[in + 1] = 0; - MPN_COPY (tp + in + 2, dp, in); - mpn_invertappr (tp, tp + in + 1, in + 1, NULL); - } - else - { - mpn_invertappr (tp, dp + dn - (in + 1), in + 1, NULL); - } - cy = mpn_sub_1 (tp, tp, in + 1, GMP_NUMB_HIGHBIT); - if (UNLIKELY (cy != 0)) - MPN_ZERO (tp + 1, in); - MPN_COPY (ip, tp + 1, in); -#endif - - qh = mpn_preinv_mu_divappr_q (qp, np, nn, dp, dn, ip, in, scratch + in); - - return qh; -} - -mp_limb_t -mpn_preinv_mu_divappr_q (mp_ptr qp, - mp_srcptr np, - mp_size_t nn, - mp_srcptr dp, - mp_size_t dn, - mp_srcptr ip, - mp_size_t in, - mp_ptr scratch) -{ - mp_size_t qn; - mp_limb_t cy, cx, qh; - mp_limb_t r; - mp_size_t tn, wn; - -#define rp scratch -#define tp (scratch + dn) -#define scratch_out (scratch + dn + tn) - - qn = nn - dn; - - np += qn; - qp += qn; - - qh = mpn_cmp (np, dp, dn) >= 0; - if (qh != 0) - mpn_sub_n (rp, np, dp, dn); - else - MPN_COPY (rp, np, dn); - - if (qn == 0) - return qh; /* Degenerate use. Should we allow this? */ - - while (qn > 0) - { - if (qn < in) - { - ip += in - qn; - in = qn; - } - np -= in; - qp -= in; - - /* Compute the next block of quotient limbs by multiplying the inverse I - by the upper part of the partial remainder R. */ - mpn_mul_n (tp, rp + dn - in, ip, in); /* mulhi */ - cy = mpn_add_n (qp, tp + in, rp + dn - in, in); /* I's msb implicit */ - ASSERT_ALWAYS (cy == 0); - - qn -= in; - if (qn == 0) - break; - - /* Compute the product of the quotient block and the divisor D, to be - subtracted from the partial remainder combined with new limbs from the - dividend N. We only really need the low dn limbs. */ - - if (BELOW_THRESHOLD (in, MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD)) - mpn_mul (tp, dp, dn, qp, in); /* dn+in limbs, high 'in' cancels */ - else - { - tn = mpn_mulmod_bnm1_next_size (dn + 1); - mpn_mulmod_bnm1 (tp, tn, dp, dn, qp, in, scratch_out); - wn = dn + in - tn; /* number of wrapped limbs */ - if (wn > 0) - { - cy = mpn_sub_n (tp, tp, rp + dn - wn, wn); - cy = mpn_sub_1 (tp + wn, tp + wn, tn - wn, cy); - cx = mpn_cmp (rp + dn - in, tp + dn, tn - dn) < 0; - ASSERT_ALWAYS (cx >= cy); - mpn_incr_u (tp, cx - cy); - } - } - - r = rp[dn - in] - tp[dn]; - - /* Subtract the product from the partial remainder combined with new - limbs from the dividend N, generating a new partial remainder R. */ - if (dn != in) - { - cy = mpn_sub_n (tp, np, tp, in); /* get next 'in' limbs from N */ - cy = mpn_sub_nc (tp + in, rp, tp + in, dn - in, cy); - MPN_COPY (rp, tp, dn); /* FIXME: try to avoid this */ - } - else - { - cy = mpn_sub_n (rp, np, tp, in); /* get next 'in' limbs from N */ - } - - STAT (int i; int err = 0; - static int errarr[5]; static int err_rec; static int tot); - - /* Check the remainder R and adjust the quotient as needed. */ - r -= cy; - while (r != 0) - { - /* We loop 0 times with about 69% probability, 1 time with about 31% - probability, 2 times with about 0.6% probability, if inverse is - computed as recommended. */ - mpn_incr_u (qp, 1); - cy = mpn_sub_n (rp, rp, dp, dn); - r -= cy; - STAT (err++); - } - if (mpn_cmp (rp, dp, dn) >= 0) - { - /* This is executed with about 76% probability. */ - mpn_incr_u (qp, 1); - cy = mpn_sub_n (rp, rp, dp, dn); - STAT (err++); - } - - STAT ( - tot++; - errarr[err]++; - if (err > err_rec) - err_rec = err; - if (tot % 0x10000 == 0) - { - for (i = 0; i <= err_rec; i++) - printf (" %d(%.1f%%)", errarr[i], 100.0*errarr[i]/tot); - printf ("\n"); - } - ); - } - - /* FIXME: We should perhaps be somewhat more elegant in our rounding of the - quotient. For now, just make sure the returned quotient is >= the real - quotient; add 3 with saturating arithmetic. */ - qn = nn - dn; - cy += mpn_add_1 (qp, qp, qn, 3); - if (cy != 0) - { - if (qh != 0) - { - /* Return a quotient of just 1-bits, with qh set. */ - mp_size_t i; - for (i = 0; i < qn; i++) - qp[i] = GMP_NUMB_MAX; - } - else - { - /* Propagate carry into qh. */ - qh = 1; - } - } - - return qh; -} - -/* In case k=0 (automatic choice), we distinguish 3 cases: - (a) dn < qn: in = ceil(qn / ceil(qn/dn)) - (b) dn/3 < qn <= dn: in = ceil(qn / 2) - (c) qn < dn/3: in = qn - In all cases we have in <= dn. - */ -mp_size_t -mpn_mu_divappr_q_choose_in (mp_size_t qn, mp_size_t dn, int k) -{ - mp_size_t in; - - if (k == 0) - { - mp_size_t b; - if (qn > dn) - { - /* Compute an inverse size that is a nice partition of the quotient. */ - b = (qn - 1) / dn + 1; /* ceil(qn/dn), number of blocks */ - in = (qn - 1) / b + 1; /* ceil(qn/b) = ceil(qn / ceil(qn/dn)) */ - } - else if (3 * qn > dn) - { - in = (qn - 1) / 2 + 1; /* b = 2 */ - } - else - { - in = (qn - 1) / 1 + 1; /* b = 1 */ - } - } - else - { - mp_size_t xn; - xn = MIN (dn, qn); - in = (xn - 1) / k + 1; - } - - return in; -} - -mp_size_t -mpn_mu_divappr_q_itch (mp_size_t nn, mp_size_t dn, int mua_k) -{ - mp_size_t qn, in, itch_local, itch_out, itch_invapp; - - qn = nn - dn; - if (qn + 1 < dn) - { - dn = qn + 1; - } - in = mpn_mu_divappr_q_choose_in (qn, dn, mua_k); - - itch_local = mpn_mulmod_bnm1_next_size (dn + 1); - itch_out = mpn_mulmod_bnm1_itch (itch_local, dn, in); - itch_invapp = mpn_invertappr_itch (in + 1) + in + 2; /* 3in + 4 */ - - ASSERT (dn + itch_local + itch_out >= itch_invapp); - return in + MAX (dn + itch_local + itch_out, itch_invapp); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul.c deleted file mode 100644 index 2819f61ed8d9c32dc873334fe2f1e0e36ff29b9f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul.c +++ /dev/null @@ -1,441 +0,0 @@ -/* mpn_mul -- Multiply two natural numbers. - - Contributed to the GNU project by Torbjorn Granlund. - -Copyright 1991, 1993, 1994, 1996, 1997, 1999-2003, 2005-2007, 2009, 2010, 2012, -2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -#ifndef MUL_BASECASE_MAX_UN -#define MUL_BASECASE_MAX_UN 500 -#endif - -/* Areas where the different toom algorithms can be called (extracted - from the t-toom*.c files, and ignoring small constant offsets): - - 1/6 1/5 1/4 4/13 1/3 3/8 2/5 5/11 1/2 3/5 2/3 3/4 4/5 1 vn/un - 4/7 6/7 - 6/11 - |--------------------| toom22 (small) - || toom22 (large) - |xxxx| toom22 called - |-------------------------------------| toom32 - |xxxxxxxxxxxxxxxx| | toom32 called - |------------| toom33 - |x| toom33 called - |---------------------------------| | toom42 - |xxxxxxxxxxxxxxxxxxxxxxxx| | toom42 called - |--------------------| toom43 - |xxxxxxxxxx| toom43 called - |-----------------------------| toom52 (unused) - |--------| toom44 - |xxxxxxxx| toom44 called - |--------------------| | toom53 - |xxxxxx| toom53 called - |-------------------------| toom62 (unused) - |----------------| toom54 (unused) - |--------------------| toom63 - |xxxxxxxxx| | toom63 called - |---------------------------------| toom6h - |xxxxxxxx| toom6h called - |-------------------------| toom8h (32 bit) - |------------------------------------------| toom8h (64 bit) - |xxxxxxxx| toom8h called -*/ - -#define TOOM33_OK(an,bn) (6 + 2 * an < 3 * bn) -#define TOOM44_OK(an,bn) (12 + 3 * an < 4 * bn) - -/* Multiply the natural numbers u (pointed to by UP, with UN limbs) and v - (pointed to by VP, with VN limbs), and store the result at PRODP. The - result is UN + VN limbs. Return the most significant limb of the result. - - NOTE: The space pointed to by PRODP is overwritten before finished with U - and V, so overlap is an error. - - Argument constraints: - 1. UN >= VN. - 2. PRODP != UP and PRODP != VP, i.e. the destination must be distinct from - the multiplier and the multiplicand. */ - -/* - * The cutoff lines in the toomX2 and toomX3 code are now exactly between the - ideal lines of the surrounding algorithms. Is that optimal? - - * The toomX3 code now uses a structure similar to the one of toomX2, except - that it loops longer in the unbalanced case. The result is that the - remaining area might have un < vn. Should we fix the toomX2 code in a - similar way? - - * The toomX3 code is used for the largest non-FFT unbalanced operands. It - therefore calls mpn_mul recursively for certain cases. - - * Allocate static temp space using THRESHOLD variables (except for toom44 - when !WANT_FFT). That way, we can typically have no TMP_ALLOC at all. - - * We sort ToomX2 algorithms together, assuming the toom22, toom32, toom42 - have the same vn threshold. This is not true, we should actually use - mul_basecase for slightly larger operands for toom32 than for toom22, and - even larger for toom42. - - * That problem is even more prevalent for toomX3. We therefore use special - THRESHOLD variables there. - - * Is our ITCH allocation correct? -*/ - -#define ITCH (16*vn + 100) - -mp_limb_t -mpn_mul (mp_ptr prodp, - mp_srcptr up, mp_size_t un, - mp_srcptr vp, mp_size_t vn) -{ - ASSERT (un >= vn); - ASSERT (vn >= 1); - ASSERT (! MPN_OVERLAP_P (prodp, un+vn, up, un)); - ASSERT (! MPN_OVERLAP_P (prodp, un+vn, vp, vn)); - - if (un == vn) - { - if (up == vp) - mpn_sqr (prodp, up, un); - else - mpn_mul_n (prodp, up, vp, un); - } - else if (vn < MUL_TOOM22_THRESHOLD) - { /* plain schoolbook multiplication */ - - /* Unless un is very large, or else if have an applicable mpn_mul_N, - perform basecase multiply directly. */ - if (un <= MUL_BASECASE_MAX_UN -#if HAVE_NATIVE_mpn_mul_2 - || vn <= 2 -#else - || vn == 1 -#endif - ) - mpn_mul_basecase (prodp, up, un, vp, vn); - else - { - /* We have un >> MUL_BASECASE_MAX_UN > vn. For better memory - locality, split up[] into MUL_BASECASE_MAX_UN pieces and multiply - these pieces with the vp[] operand. After each such partial - multiplication (but the last) we copy the most significant vn - limbs into a temporary buffer since that part would otherwise be - overwritten by the next multiplication. After the next - multiplication, we add it back. This illustrates the situation: - - -->vn<-- - | |<------- un ------->| - _____________________| - X /| - /XX__________________/ | - _____________________ | - X / | - /XX__________________/ | - _____________________ | - / / | - /____________________/ | - ================================================================== - - The parts marked with X are the parts whose sums are copied into - the temporary buffer. */ - - mp_limb_t tp[MUL_TOOM22_THRESHOLD_LIMIT]; - mp_limb_t cy; - ASSERT (MUL_TOOM22_THRESHOLD <= MUL_TOOM22_THRESHOLD_LIMIT); - - mpn_mul_basecase (prodp, up, MUL_BASECASE_MAX_UN, vp, vn); - prodp += MUL_BASECASE_MAX_UN; - MPN_COPY (tp, prodp, vn); /* preserve high triangle */ - up += MUL_BASECASE_MAX_UN; - un -= MUL_BASECASE_MAX_UN; - while (un > MUL_BASECASE_MAX_UN) - { - mpn_mul_basecase (prodp, up, MUL_BASECASE_MAX_UN, vp, vn); - cy = mpn_add_n (prodp, prodp, tp, vn); /* add back preserved triangle */ - mpn_incr_u (prodp + vn, cy); - prodp += MUL_BASECASE_MAX_UN; - MPN_COPY (tp, prodp, vn); /* preserve high triangle */ - up += MUL_BASECASE_MAX_UN; - un -= MUL_BASECASE_MAX_UN; - } - if (un > vn) - { - mpn_mul_basecase (prodp, up, un, vp, vn); - } - else - { - ASSERT (un > 0); - mpn_mul_basecase (prodp, vp, vn, up, un); - } - cy = mpn_add_n (prodp, prodp, tp, vn); /* add back preserved triangle */ - mpn_incr_u (prodp + vn, cy); - } - } - else if (BELOW_THRESHOLD (vn, MUL_TOOM33_THRESHOLD)) - { - /* Use ToomX2 variants */ - mp_ptr scratch; - TMP_SDECL; TMP_SMARK; - -#define ITCH_TOOMX2 (9 * vn / 2 + GMP_NUMB_BITS * 2) - scratch = TMP_SALLOC_LIMBS (ITCH_TOOMX2); - ASSERT (mpn_toom22_mul_itch ((5*vn-1)/4, vn) <= ITCH_TOOMX2); /* 5vn/2+ */ - ASSERT (mpn_toom32_mul_itch ((7*vn-1)/4, vn) <= ITCH_TOOMX2); /* 7vn/6+ */ - ASSERT (mpn_toom42_mul_itch (3 * vn - 1, vn) <= ITCH_TOOMX2); /* 9vn/2+ */ -#undef ITCH_TOOMX2 - - /* FIXME: This condition (repeated in the loop below) leaves from a vn*vn - square to a (3vn-1)*vn rectangle. Leaving such a rectangle is hardly - wise; we would get better balance by slightly moving the bound. We - will sometimes end up with un < vn, like in the X3 arm below. */ - if (un >= 3 * vn) - { - mp_limb_t cy; - mp_ptr ws; - - /* The maximum ws usage is for the mpn_mul result. */ - ws = TMP_SALLOC_LIMBS (4 * vn); - - mpn_toom42_mul (prodp, up, 2 * vn, vp, vn, scratch); - un -= 2 * vn; - up += 2 * vn; - prodp += 2 * vn; - - while (un >= 3 * vn) - { - mpn_toom42_mul (ws, up, 2 * vn, vp, vn, scratch); - un -= 2 * vn; - up += 2 * vn; - cy = mpn_add_n (prodp, prodp, ws, vn); - MPN_COPY (prodp + vn, ws + vn, 2 * vn); - mpn_incr_u (prodp + vn, cy); - prodp += 2 * vn; - } - - /* vn <= un < 3vn */ - - if (4 * un < 5 * vn) - mpn_toom22_mul (ws, up, un, vp, vn, scratch); - else if (4 * un < 7 * vn) - mpn_toom32_mul (ws, up, un, vp, vn, scratch); - else - mpn_toom42_mul (ws, up, un, vp, vn, scratch); - - cy = mpn_add_n (prodp, prodp, ws, vn); - MPN_COPY (prodp + vn, ws + vn, un); - mpn_incr_u (prodp + vn, cy); - } - else - { - if (4 * un < 5 * vn) - mpn_toom22_mul (prodp, up, un, vp, vn, scratch); - else if (4 * un < 7 * vn) - mpn_toom32_mul (prodp, up, un, vp, vn, scratch); - else - mpn_toom42_mul (prodp, up, un, vp, vn, scratch); - } - TMP_SFREE; - } - else if (BELOW_THRESHOLD ((un + vn) >> 1, MUL_FFT_THRESHOLD) || - BELOW_THRESHOLD (3 * vn, MUL_FFT_THRESHOLD)) - { - /* Handle the largest operands that are not in the FFT range. The 2nd - condition makes very unbalanced operands avoid the FFT code (except - perhaps as coefficient products of the Toom code. */ - - if (BELOW_THRESHOLD (vn, MUL_TOOM44_THRESHOLD) || !TOOM44_OK (un, vn)) - { - /* Use ToomX3 variants */ - mp_ptr scratch; - TMP_DECL; TMP_MARK; - -#define ITCH_TOOMX3 (4 * vn + GMP_NUMB_BITS) - scratch = TMP_ALLOC_LIMBS (ITCH_TOOMX3); - ASSERT (mpn_toom33_mul_itch ((7*vn-1)/6, vn) <= ITCH_TOOMX3); /* 7vn/2+ */ - ASSERT (mpn_toom43_mul_itch ((3*vn-1)/2, vn) <= ITCH_TOOMX3); /* 9vn/4+ */ - ASSERT (mpn_toom32_mul_itch ((7*vn-1)/4, vn) <= ITCH_TOOMX3); /* 7vn/6+ */ - ASSERT (mpn_toom53_mul_itch ((11*vn-1)/6, vn) <= ITCH_TOOMX3); /* 11vn/3+ */ - ASSERT (mpn_toom42_mul_itch ((5*vn-1)/2, vn) <= ITCH_TOOMX3); /* 15vn/4+ */ - ASSERT (mpn_toom63_mul_itch ((5*vn-1)/2, vn) <= ITCH_TOOMX3); /* 15vn/4+ */ -#undef ITCH_TOOMX3 - - if (2 * un >= 5 * vn) - { - mp_limb_t cy; - mp_ptr ws; - - /* The maximum ws usage is for the mpn_mul result. */ - ws = TMP_ALLOC_LIMBS (7 * vn >> 1); - - if (BELOW_THRESHOLD (vn, MUL_TOOM42_TO_TOOM63_THRESHOLD)) - mpn_toom42_mul (prodp, up, 2 * vn, vp, vn, scratch); - else - mpn_toom63_mul (prodp, up, 2 * vn, vp, vn, scratch); - un -= 2 * vn; - up += 2 * vn; - prodp += 2 * vn; - - while (2 * un >= 5 * vn) /* un >= 2.5vn */ - { - if (BELOW_THRESHOLD (vn, MUL_TOOM42_TO_TOOM63_THRESHOLD)) - mpn_toom42_mul (ws, up, 2 * vn, vp, vn, scratch); - else - mpn_toom63_mul (ws, up, 2 * vn, vp, vn, scratch); - un -= 2 * vn; - up += 2 * vn; - cy = mpn_add_n (prodp, prodp, ws, vn); - MPN_COPY (prodp + vn, ws + vn, 2 * vn); - mpn_incr_u (prodp + vn, cy); - prodp += 2 * vn; - } - - /* vn / 2 <= un < 2.5vn */ - - if (un < vn) - mpn_mul (ws, vp, vn, up, un); - else - mpn_mul (ws, up, un, vp, vn); - - cy = mpn_add_n (prodp, prodp, ws, vn); - MPN_COPY (prodp + vn, ws + vn, un); - mpn_incr_u (prodp + vn, cy); - } - else - { - if (6 * un < 7 * vn) - mpn_toom33_mul (prodp, up, un, vp, vn, scratch); - else if (2 * un < 3 * vn) - { - if (BELOW_THRESHOLD (vn, MUL_TOOM32_TO_TOOM43_THRESHOLD)) - mpn_toom32_mul (prodp, up, un, vp, vn, scratch); - else - mpn_toom43_mul (prodp, up, un, vp, vn, scratch); - } - else if (6 * un < 11 * vn) - { - if (4 * un < 7 * vn) - { - if (BELOW_THRESHOLD (vn, MUL_TOOM32_TO_TOOM53_THRESHOLD)) - mpn_toom32_mul (prodp, up, un, vp, vn, scratch); - else - mpn_toom53_mul (prodp, up, un, vp, vn, scratch); - } - else - { - if (BELOW_THRESHOLD (vn, MUL_TOOM42_TO_TOOM53_THRESHOLD)) - mpn_toom42_mul (prodp, up, un, vp, vn, scratch); - else - mpn_toom53_mul (prodp, up, un, vp, vn, scratch); - } - } - else - { - if (BELOW_THRESHOLD (vn, MUL_TOOM42_TO_TOOM63_THRESHOLD)) - mpn_toom42_mul (prodp, up, un, vp, vn, scratch); - else - mpn_toom63_mul (prodp, up, un, vp, vn, scratch); - } - } - TMP_FREE; - } - else - { - mp_ptr scratch; - TMP_DECL; TMP_MARK; - - if (BELOW_THRESHOLD (vn, MUL_TOOM6H_THRESHOLD)) - { - scratch = TMP_SALLOC_LIMBS (mpn_toom44_mul_itch (un, vn)); - mpn_toom44_mul (prodp, up, un, vp, vn, scratch); - } - else if (BELOW_THRESHOLD (vn, MUL_TOOM8H_THRESHOLD)) - { - scratch = TMP_SALLOC_LIMBS (mpn_toom6h_mul_itch (un, vn)); - mpn_toom6h_mul (prodp, up, un, vp, vn, scratch); - } - else - { - scratch = TMP_ALLOC_LIMBS (mpn_toom8h_mul_itch (un, vn)); - mpn_toom8h_mul (prodp, up, un, vp, vn, scratch); - } - TMP_FREE; - } - } - else - { - if (un >= 8 * vn) - { - mp_limb_t cy; - mp_ptr ws; - TMP_DECL; TMP_MARK; - - /* The maximum ws usage is for the mpn_mul result. */ - ws = TMP_BALLOC_LIMBS (9 * vn >> 1); - - mpn_fft_mul (prodp, up, 3 * vn, vp, vn); - un -= 3 * vn; - up += 3 * vn; - prodp += 3 * vn; - - while (2 * un >= 7 * vn) /* un >= 3.5vn */ - { - mpn_fft_mul (ws, up, 3 * vn, vp, vn); - un -= 3 * vn; - up += 3 * vn; - cy = mpn_add_n (prodp, prodp, ws, vn); - MPN_COPY (prodp + vn, ws + vn, 3 * vn); - mpn_incr_u (prodp + vn, cy); - prodp += 3 * vn; - } - - /* vn / 2 <= un < 3.5vn */ - - if (un < vn) - mpn_mul (ws, vp, vn, up, un); - else - mpn_mul (ws, up, un, vp, vn); - - cy = mpn_add_n (prodp, prodp, ws, vn); - MPN_COPY (prodp + vn, ws + vn, un); - mpn_incr_u (prodp + vn, cy); - - TMP_FREE; - } - else - mpn_fft_mul (prodp, up, un, vp, vn); - } - - return prodp[un + vn - 1]; /* historic */ -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul_1.c deleted file mode 100644 index 6b2ee59a2c92ac716a1ea4fb998d158e5ca14237..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul_1.c +++ /dev/null @@ -1,97 +0,0 @@ -/* mpn_mul_1 -- Multiply a limb vector with a single limb and store the - product in a second limb vector. - -Copyright 1991-1994, 1996, 2000-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -#if GMP_NAIL_BITS == 0 - -mp_limb_t -mpn_mul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) -{ - mp_limb_t ul, cl, hpl, lpl; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_INCR_P (rp, up, n)); - - cl = 0; - do - { - ul = *up++; - umul_ppmm (hpl, lpl, ul, vl); - - lpl += cl; - cl = (lpl < cl) + hpl; - - *rp++ = lpl; - } - while (--n != 0); - - return cl; -} - -#endif - -#if GMP_NAIL_BITS >= 1 - -mp_limb_t -mpn_mul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) -{ - mp_limb_t shifted_vl, ul, lpl, hpl, prev_hpl, xw, cl, xl; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_INCR_P (rp, up, n)); - ASSERT_MPN (up, n); - ASSERT_LIMB (vl); - - shifted_vl = vl << GMP_NAIL_BITS; - cl = 0; - prev_hpl = 0; - do - { - ul = *up++; - - umul_ppmm (hpl, lpl, ul, shifted_vl); - lpl >>= GMP_NAIL_BITS; - xw = prev_hpl + lpl + cl; - cl = xw >> GMP_NUMB_BITS; - xl = xw & GMP_NUMB_MASK; - *rp++ = xl; - prev_hpl = hpl; - } - while (--n != 0); - - return prev_hpl + cl; -} - -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul_basecase.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul_basecase.c deleted file mode 100644 index 9309ef72c8818f699593c50fe88869131ce7f826..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul_basecase.c +++ /dev/null @@ -1,166 +0,0 @@ -/* mpn_mul_basecase -- Internal routine to multiply two natural numbers - of length m and n. - - THIS IS AN INTERNAL FUNCTION WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH THIS FUNCTION THROUGH DOCUMENTED INTERFACES. - -Copyright 1991-1994, 1996, 1997, 2000-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Multiply {up,usize} by {vp,vsize} and write the result to - {prodp,usize+vsize}. Must have usize>=vsize. - - Note that prodp gets usize+vsize limbs stored, even if the actual result - only needs usize+vsize-1. - - There's no good reason to call here with vsize>=MUL_TOOM22_THRESHOLD. - Currently this is allowed, but it might not be in the future. - - This is the most critical code for multiplication. All multiplies rely - on this, both small and huge. Small ones arrive here immediately, huge - ones arrive here as this is the base case for Karatsuba's recursive - algorithm. */ - -void -mpn_mul_basecase (mp_ptr rp, - mp_srcptr up, mp_size_t un, - mp_srcptr vp, mp_size_t vn) -{ - ASSERT (un >= vn); - ASSERT (vn >= 1); - ASSERT (! MPN_OVERLAP_P (rp, un+vn, up, un)); - ASSERT (! MPN_OVERLAP_P (rp, un+vn, vp, vn)); - - /* We first multiply by the low order limb (or depending on optional function - availability, limbs). This result can be stored, not added, to rp. We - also avoid a loop for zeroing this way. */ - -#if HAVE_NATIVE_mpn_mul_2 - if (vn >= 2) - { - rp[un + 1] = mpn_mul_2 (rp, up, un, vp); - rp += 2, vp += 2, vn -= 2; - } - else - { - rp[un] = mpn_mul_1 (rp, up, un, vp[0]); - return; - } -#else - rp[un] = mpn_mul_1 (rp, up, un, vp[0]); - rp += 1, vp += 1, vn -= 1; -#endif - - /* Now accumulate the product of up[] and the next higher limb (or depending - on optional function availability, limbs) from vp[]. */ - -#define MAX_LEFT MP_SIZE_T_MAX /* Used to simplify loops into if statements */ - - -#if HAVE_NATIVE_mpn_addmul_6 - while (vn >= 6) - { - rp[un + 6 - 1] = mpn_addmul_6 (rp, up, un, vp); - if (MAX_LEFT == 6) - return; - rp += 6, vp += 6, vn -= 6; - if (MAX_LEFT < 2 * 6) - break; - } -#undef MAX_LEFT -#define MAX_LEFT (6 - 1) -#endif - -#if HAVE_NATIVE_mpn_addmul_5 - while (vn >= 5) - { - rp[un + 5 - 1] = mpn_addmul_5 (rp, up, un, vp); - if (MAX_LEFT == 5) - return; - rp += 5, vp += 5, vn -= 5; - if (MAX_LEFT < 2 * 5) - break; - } -#undef MAX_LEFT -#define MAX_LEFT (5 - 1) -#endif - -#if HAVE_NATIVE_mpn_addmul_4 - while (vn >= 4) - { - rp[un + 4 - 1] = mpn_addmul_4 (rp, up, un, vp); - if (MAX_LEFT == 4) - return; - rp += 4, vp += 4, vn -= 4; - if (MAX_LEFT < 2 * 4) - break; - } -#undef MAX_LEFT -#define MAX_LEFT (4 - 1) -#endif - -#if HAVE_NATIVE_mpn_addmul_3 - while (vn >= 3) - { - rp[un + 3 - 1] = mpn_addmul_3 (rp, up, un, vp); - if (MAX_LEFT == 3) - return; - rp += 3, vp += 3, vn -= 3; - if (MAX_LEFT < 2 * 3) - break; - } -#undef MAX_LEFT -#define MAX_LEFT (3 - 1) -#endif - -#if HAVE_NATIVE_mpn_addmul_2 - while (vn >= 2) - { - rp[un + 2 - 1] = mpn_addmul_2 (rp, up, un, vp); - if (MAX_LEFT == 2) - return; - rp += 2, vp += 2, vn -= 2; - if (MAX_LEFT < 2 * 2) - break; - } -#undef MAX_LEFT -#define MAX_LEFT (2 - 1) -#endif - - while (vn >= 1) - { - rp[un] = mpn_addmul_1 (rp, up, un, vp[0]); - if (MAX_LEFT == 1) - return; - rp += 1, vp += 1, vn -= 1; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul_fft.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul_fft.c deleted file mode 100644 index d3c0b7bf22053e1afcd9a0185cfc155fe9edbd27..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul_fft.c +++ /dev/null @@ -1,1014 +0,0 @@ -/* Schoenhage's fast multiplication modulo 2^N+1. - - Contributed by Paul Zimmermann. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 1998-2010, 2012, 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -/* References: - - Schnelle Multiplikation grosser Zahlen, by Arnold Schoenhage and Volker - Strassen, Computing 7, p. 281-292, 1971. - - Asymptotically fast algorithms for the numerical multiplication and division - of polynomials with complex coefficients, by Arnold Schoenhage, Computer - Algebra, EUROCAM'82, LNCS 144, p. 3-15, 1982. - - Tapes versus Pointers, a study in implementing fast algorithms, by Arnold - Schoenhage, Bulletin of the EATCS, 30, p. 23-32, 1986. - - TODO: - - Implement some of the tricks published at ISSAC'2007 by Gaudry, Kruppa, and - Zimmermann. - - It might be possible to avoid a small number of MPN_COPYs by using a - rotating temporary or two. - - Cleanup and simplify the code! -*/ - -#ifdef TRACE -#undef TRACE -#define TRACE(x) x -#include <stdio.h> -#else -#define TRACE(x) -#endif - -#include "gmp.h" -#include "gmp-impl.h" - -#ifdef WANT_ADDSUB -#include "generic/add_n_sub_n.c" -#define HAVE_NATIVE_mpn_add_n_sub_n 1 -#endif - -static mp_limb_t mpn_mul_fft_internal (mp_ptr, mp_size_t, int, mp_ptr *, - mp_ptr *, mp_ptr, mp_ptr, mp_size_t, - mp_size_t, mp_size_t, int **, mp_ptr, int); -static void mpn_mul_fft_decompose (mp_ptr, mp_ptr *, mp_size_t, mp_size_t, mp_srcptr, - mp_size_t, mp_size_t, mp_size_t, mp_ptr); - - -/* Find the best k to use for a mod 2^(m*GMP_NUMB_BITS)+1 FFT for m >= n. - We have sqr=0 if for a multiply, sqr=1 for a square. - There are three generations of this code; we keep the old ones as long as - some gmp-mparam.h is not updated. */ - - -/*****************************************************************************/ - -#if TUNE_PROGRAM_BUILD || (defined (MUL_FFT_TABLE3) && defined (SQR_FFT_TABLE3)) - -#ifndef FFT_TABLE3_SIZE /* When tuning this is defined in gmp-impl.h */ -#if defined (MUL_FFT_TABLE3_SIZE) && defined (SQR_FFT_TABLE3_SIZE) -#if MUL_FFT_TABLE3_SIZE > SQR_FFT_TABLE3_SIZE -#define FFT_TABLE3_SIZE MUL_FFT_TABLE3_SIZE -#else -#define FFT_TABLE3_SIZE SQR_FFT_TABLE3_SIZE -#endif -#endif -#endif - -#ifndef FFT_TABLE3_SIZE -#define FFT_TABLE3_SIZE 200 -#endif - -FFT_TABLE_ATTRS struct fft_table_nk mpn_fft_table3[2][FFT_TABLE3_SIZE] = -{ - MUL_FFT_TABLE3, - SQR_FFT_TABLE3 -}; - -int -mpn_fft_best_k (mp_size_t n, int sqr) -{ - const struct fft_table_nk *fft_tab, *tab; - mp_size_t tab_n, thres; - int last_k; - - fft_tab = mpn_fft_table3[sqr]; - last_k = fft_tab->k; - for (tab = fft_tab + 1; ; tab++) - { - tab_n = tab->n; - thres = tab_n << last_k; - if (n <= thres) - break; - last_k = tab->k; - } - return last_k; -} - -#define MPN_FFT_BEST_READY 1 -#endif - -/*****************************************************************************/ - -#if ! defined (MPN_FFT_BEST_READY) -FFT_TABLE_ATTRS mp_size_t mpn_fft_table[2][MPN_FFT_TABLE_SIZE] = -{ - MUL_FFT_TABLE, - SQR_FFT_TABLE -}; - -int -mpn_fft_best_k (mp_size_t n, int sqr) -{ - int i; - - for (i = 0; mpn_fft_table[sqr][i] != 0; i++) - if (n < mpn_fft_table[sqr][i]) - return i + FFT_FIRST_K; - - /* treat 4*last as one further entry */ - if (i == 0 || n < 4 * mpn_fft_table[sqr][i - 1]) - return i + FFT_FIRST_K; - else - return i + FFT_FIRST_K + 1; -} -#endif - -/*****************************************************************************/ - - -/* Returns smallest possible number of limbs >= pl for a fft of size 2^k, - i.e. smallest multiple of 2^k >= pl. - - Don't declare static: needed by tuneup. -*/ - -mp_size_t -mpn_fft_next_size (mp_size_t pl, int k) -{ - pl = 1 + ((pl - 1) >> k); /* ceil (pl/2^k) */ - return pl << k; -} - - -/* Initialize l[i][j] with bitrev(j) */ -static void -mpn_fft_initl (int **l, int k) -{ - int i, j, K; - int *li; - - l[0][0] = 0; - for (i = 1, K = 1; i <= k; i++, K *= 2) - { - li = l[i]; - for (j = 0; j < K; j++) - { - li[j] = 2 * l[i - 1][j]; - li[K + j] = 1 + li[j]; - } - } -} - - -/* r <- a*2^d mod 2^(n*GMP_NUMB_BITS)+1 with a = {a, n+1} - Assumes a is semi-normalized, i.e. a[n] <= 1. - r and a must have n+1 limbs, and not overlap. -*/ -static void -mpn_fft_mul_2exp_modF (mp_ptr r, mp_srcptr a, mp_bitcnt_t d, mp_size_t n) -{ - unsigned int sh; - mp_size_t m; - mp_limb_t cc, rd; - - sh = d % GMP_NUMB_BITS; - m = d / GMP_NUMB_BITS; - - if (m >= n) /* negate */ - { - /* r[0..m-1] <-- lshift(a[n-m]..a[n-1], sh) - r[m..n-1] <-- -lshift(a[0]..a[n-m-1], sh) */ - - m -= n; - if (sh != 0) - { - /* no out shift below since a[n] <= 1 */ - mpn_lshift (r, a + n - m, m + 1, sh); - rd = r[m]; - cc = mpn_lshiftc (r + m, a, n - m, sh); - } - else - { - MPN_COPY (r, a + n - m, m); - rd = a[n]; - mpn_com (r + m, a, n - m); - cc = 0; - } - - /* add cc to r[0], and add rd to r[m] */ - - /* now add 1 in r[m], subtract 1 in r[n], i.e. add 1 in r[0] */ - - r[n] = 0; - /* cc < 2^sh <= 2^(GMP_NUMB_BITS-1) thus no overflow here */ - cc++; - mpn_incr_u (r, cc); - - rd++; - /* rd might overflow when sh=GMP_NUMB_BITS-1 */ - cc = (rd == 0) ? 1 : rd; - r = r + m + (rd == 0); - mpn_incr_u (r, cc); - } - else - { - /* r[0..m-1] <-- -lshift(a[n-m]..a[n-1], sh) - r[m..n-1] <-- lshift(a[0]..a[n-m-1], sh) */ - if (sh != 0) - { - /* no out bits below since a[n] <= 1 */ - mpn_lshiftc (r, a + n - m, m + 1, sh); - rd = ~r[m]; - /* {r, m+1} = {a+n-m, m+1} << sh */ - cc = mpn_lshift (r + m, a, n - m, sh); /* {r+m, n-m} = {a, n-m}<<sh */ - } - else - { - /* r[m] is not used below, but we save a test for m=0 */ - mpn_com (r, a + n - m, m + 1); - rd = a[n]; - MPN_COPY (r + m, a, n - m); - cc = 0; - } - - /* now complement {r, m}, subtract cc from r[0], subtract rd from r[m] */ - - /* if m=0 we just have r[0]=a[n] << sh */ - if (m != 0) - { - /* now add 1 in r[0], subtract 1 in r[m] */ - if (cc-- == 0) /* then add 1 to r[0] */ - cc = mpn_add_1 (r, r, n, CNST_LIMB(1)); - cc = mpn_sub_1 (r, r, m, cc) + 1; - /* add 1 to cc instead of rd since rd might overflow */ - } - - /* now subtract cc and rd from r[m..n] */ - - r[n] = -mpn_sub_1 (r + m, r + m, n - m, cc); - r[n] -= mpn_sub_1 (r + m, r + m, n - m, rd); - if (r[n] & GMP_LIMB_HIGHBIT) - r[n] = mpn_add_1 (r, r, n, CNST_LIMB(1)); - } -} - - -/* r <- a+b mod 2^(n*GMP_NUMB_BITS)+1. - Assumes a and b are semi-normalized. -*/ -static inline void -mpn_fft_add_modF (mp_ptr r, mp_srcptr a, mp_srcptr b, mp_size_t n) -{ - mp_limb_t c, x; - - c = a[n] + b[n] + mpn_add_n (r, a, b, n); - /* 0 <= c <= 3 */ - -#if 1 - /* GCC 4.1 outsmarts most expressions here, and generates a 50% branch. The - result is slower code, of course. But the following outsmarts GCC. */ - x = (c - 1) & -(c != 0); - r[n] = c - x; - MPN_DECR_U (r, n + 1, x); -#endif -#if 0 - if (c > 1) - { - r[n] = 1; /* r[n] - c = 1 */ - MPN_DECR_U (r, n + 1, c - 1); - } - else - { - r[n] = c; - } -#endif -} - -/* r <- a-b mod 2^(n*GMP_NUMB_BITS)+1. - Assumes a and b are semi-normalized. -*/ -static inline void -mpn_fft_sub_modF (mp_ptr r, mp_srcptr a, mp_srcptr b, mp_size_t n) -{ - mp_limb_t c, x; - - c = a[n] - b[n] - mpn_sub_n (r, a, b, n); - /* -2 <= c <= 1 */ - -#if 1 - /* GCC 4.1 outsmarts most expressions here, and generates a 50% branch. The - result is slower code, of course. But the following outsmarts GCC. */ - x = (-c) & -((c & GMP_LIMB_HIGHBIT) != 0); - r[n] = x + c; - MPN_INCR_U (r, n + 1, x); -#endif -#if 0 - if ((c & GMP_LIMB_HIGHBIT) != 0) - { - r[n] = 0; - MPN_INCR_U (r, n + 1, -c); - } - else - { - r[n] = c; - } -#endif -} - -/* input: A[0] ... A[inc*(K-1)] are residues mod 2^N+1 where - N=n*GMP_NUMB_BITS, and 2^omega is a primitive root mod 2^N+1 - output: A[inc*l[k][i]] <- \sum (2^omega)^(ij) A[inc*j] mod 2^N+1 */ - -static void -mpn_fft_fft (mp_ptr *Ap, mp_size_t K, int **ll, - mp_size_t omega, mp_size_t n, mp_size_t inc, mp_ptr tp) -{ - if (K == 2) - { - mp_limb_t cy; -#if HAVE_NATIVE_mpn_add_n_sub_n - cy = mpn_add_n_sub_n (Ap[0], Ap[inc], Ap[0], Ap[inc], n + 1) & 1; -#else - MPN_COPY (tp, Ap[0], n + 1); - mpn_add_n (Ap[0], Ap[0], Ap[inc], n + 1); - cy = mpn_sub_n (Ap[inc], tp, Ap[inc], n + 1); -#endif - if (Ap[0][n] > 1) /* can be 2 or 3 */ - Ap[0][n] = 1 - mpn_sub_1 (Ap[0], Ap[0], n, Ap[0][n] - 1); - if (cy) /* Ap[inc][n] can be -1 or -2 */ - Ap[inc][n] = mpn_add_1 (Ap[inc], Ap[inc], n, ~Ap[inc][n] + 1); - } - else - { - mp_size_t j, K2 = K >> 1; - int *lk = *ll; - - mpn_fft_fft (Ap, K2, ll-1, 2 * omega, n, inc * 2, tp); - mpn_fft_fft (Ap+inc, K2, ll-1, 2 * omega, n, inc * 2, tp); - /* A[2*j*inc] <- A[2*j*inc] + omega^l[k][2*j*inc] A[(2j+1)inc] - A[(2j+1)inc] <- A[2*j*inc] + omega^l[k][(2j+1)inc] A[(2j+1)inc] */ - for (j = 0; j < K2; j++, lk += 2, Ap += 2 * inc) - { - /* Ap[inc] <- Ap[0] + Ap[inc] * 2^(lk[1] * omega) - Ap[0] <- Ap[0] + Ap[inc] * 2^(lk[0] * omega) */ - mpn_fft_mul_2exp_modF (tp, Ap[inc], lk[0] * omega, n); - mpn_fft_sub_modF (Ap[inc], Ap[0], tp, n); - mpn_fft_add_modF (Ap[0], Ap[0], tp, n); - } - } -} - -/* input: A[0] ... A[inc*(K-1)] are residues mod 2^N+1 where - N=n*GMP_NUMB_BITS, and 2^omega is a primitive root mod 2^N+1 - output: A[inc*l[k][i]] <- \sum (2^omega)^(ij) A[inc*j] mod 2^N+1 - tp must have space for 2*(n+1) limbs. -*/ - - -/* Given ap[0..n] with ap[n]<=1, reduce it modulo 2^(n*GMP_NUMB_BITS)+1, - by subtracting that modulus if necessary. - - If ap[0..n] is exactly 2^(n*GMP_NUMB_BITS) then mpn_sub_1 produces a - borrow and the limbs must be zeroed out again. This will occur very - infrequently. */ - -static inline void -mpn_fft_normalize (mp_ptr ap, mp_size_t n) -{ - if (ap[n] != 0) - { - MPN_DECR_U (ap, n + 1, CNST_LIMB(1)); - if (ap[n] == 0) - { - /* This happens with very low probability; we have yet to trigger it, - and thereby make sure this code is correct. */ - MPN_ZERO (ap, n); - ap[n] = 1; - } - else - ap[n] = 0; - } -} - -/* a[i] <- a[i]*b[i] mod 2^(n*GMP_NUMB_BITS)+1 for 0 <= i < K */ -static void -mpn_fft_mul_modF_K (mp_ptr *ap, mp_ptr *bp, mp_size_t n, mp_size_t K) -{ - int i; - int sqr = (ap == bp); - TMP_DECL; - - TMP_MARK; - - if (n >= (sqr ? SQR_FFT_MODF_THRESHOLD : MUL_FFT_MODF_THRESHOLD)) - { - mp_size_t K2, nprime2, Nprime2, M2, maxLK, l, Mp2; - int k; - int **fft_l, *tmp; - mp_ptr *Ap, *Bp, A, B, T; - - k = mpn_fft_best_k (n, sqr); - K2 = (mp_size_t) 1 << k; - ASSERT_ALWAYS((n & (K2 - 1)) == 0); - maxLK = (K2 > GMP_NUMB_BITS) ? K2 : GMP_NUMB_BITS; - M2 = n * GMP_NUMB_BITS >> k; - l = n >> k; - Nprime2 = ((2 * M2 + k + 2 + maxLK) / maxLK) * maxLK; - /* Nprime2 = ceil((2*M2+k+3)/maxLK)*maxLK*/ - nprime2 = Nprime2 / GMP_NUMB_BITS; - - /* we should ensure that nprime2 is a multiple of the next K */ - if (nprime2 >= (sqr ? SQR_FFT_MODF_THRESHOLD : MUL_FFT_MODF_THRESHOLD)) - { - mp_size_t K3; - for (;;) - { - K3 = (mp_size_t) 1 << mpn_fft_best_k (nprime2, sqr); - if ((nprime2 & (K3 - 1)) == 0) - break; - nprime2 = (nprime2 + K3 - 1) & -K3; - Nprime2 = nprime2 * GMP_LIMB_BITS; - /* warning: since nprime2 changed, K3 may change too! */ - } - } - ASSERT_ALWAYS(nprime2 < n); /* otherwise we'll loop */ - - Mp2 = Nprime2 >> k; - - Ap = TMP_BALLOC_MP_PTRS (K2); - Bp = TMP_BALLOC_MP_PTRS (K2); - A = TMP_BALLOC_LIMBS (2 * (nprime2 + 1) << k); - T = TMP_BALLOC_LIMBS (2 * (nprime2 + 1)); - B = A + ((nprime2 + 1) << k); - fft_l = TMP_BALLOC_TYPE (k + 1, int *); - tmp = TMP_BALLOC_TYPE ((size_t) 2 << k, int); - for (i = 0; i <= k; i++) - { - fft_l[i] = tmp; - tmp += (mp_size_t) 1 << i; - } - - mpn_fft_initl (fft_l, k); - - TRACE (printf ("recurse: %ldx%ld limbs -> %ld times %ldx%ld (%1.2f)\n", n, - n, K2, nprime2, nprime2, 2.0*(double)n/nprime2/K2)); - for (i = 0; i < K; i++, ap++, bp++) - { - mp_limb_t cy; - mpn_fft_normalize (*ap, n); - if (!sqr) - mpn_fft_normalize (*bp, n); - - mpn_mul_fft_decompose (A, Ap, K2, nprime2, *ap, (l << k) + 1, l, Mp2, T); - if (!sqr) - mpn_mul_fft_decompose (B, Bp, K2, nprime2, *bp, (l << k) + 1, l, Mp2, T); - - cy = mpn_mul_fft_internal (*ap, n, k, Ap, Bp, A, B, nprime2, - l, Mp2, fft_l, T, sqr); - (*ap)[n] = cy; - } - } - else - { - mp_ptr a, b, tp, tpn; - mp_limb_t cc; - mp_size_t n2 = 2 * n; - tp = TMP_BALLOC_LIMBS (n2); - tpn = tp + n; - TRACE (printf (" mpn_mul_n %ld of %ld limbs\n", K, n)); - for (i = 0; i < K; i++) - { - a = *ap++; - b = *bp++; - if (sqr) - mpn_sqr (tp, a, n); - else - mpn_mul_n (tp, b, a, n); - if (a[n] != 0) - cc = mpn_add_n (tpn, tpn, b, n); - else - cc = 0; - if (b[n] != 0) - cc += mpn_add_n (tpn, tpn, a, n) + a[n]; - if (cc != 0) - { - /* FIXME: use MPN_INCR_U here, since carry is not expected. */ - cc = mpn_add_1 (tp, tp, n2, cc); - ASSERT (cc == 0); - } - a[n] = mpn_sub_n (a, tp, tpn, n) && mpn_add_1 (a, a, n, CNST_LIMB(1)); - } - } - TMP_FREE; -} - - -/* input: A^[l[k][0]] A^[l[k][1]] ... A^[l[k][K-1]] - output: K*A[0] K*A[K-1] ... K*A[1]. - Assumes the Ap[] are pseudo-normalized, i.e. 0 <= Ap[][n] <= 1. - This condition is also fulfilled at exit. -*/ -static void -mpn_fft_fftinv (mp_ptr *Ap, mp_size_t K, mp_size_t omega, mp_size_t n, mp_ptr tp) -{ - if (K == 2) - { - mp_limb_t cy; -#if HAVE_NATIVE_mpn_add_n_sub_n - cy = mpn_add_n_sub_n (Ap[0], Ap[1], Ap[0], Ap[1], n + 1) & 1; -#else - MPN_COPY (tp, Ap[0], n + 1); - mpn_add_n (Ap[0], Ap[0], Ap[1], n + 1); - cy = mpn_sub_n (Ap[1], tp, Ap[1], n + 1); -#endif - if (Ap[0][n] > 1) /* can be 2 or 3 */ - Ap[0][n] = 1 - mpn_sub_1 (Ap[0], Ap[0], n, Ap[0][n] - 1); - if (cy) /* Ap[1][n] can be -1 or -2 */ - Ap[1][n] = mpn_add_1 (Ap[1], Ap[1], n, ~Ap[1][n] + 1); - } - else - { - mp_size_t j, K2 = K >> 1; - - mpn_fft_fftinv (Ap, K2, 2 * omega, n, tp); - mpn_fft_fftinv (Ap + K2, K2, 2 * omega, n, tp); - /* A[j] <- A[j] + omega^j A[j+K/2] - A[j+K/2] <- A[j] + omega^(j+K/2) A[j+K/2] */ - for (j = 0; j < K2; j++, Ap++) - { - /* Ap[K2] <- Ap[0] + Ap[K2] * 2^((j + K2) * omega) - Ap[0] <- Ap[0] + Ap[K2] * 2^(j * omega) */ - mpn_fft_mul_2exp_modF (tp, Ap[K2], j * omega, n); - mpn_fft_sub_modF (Ap[K2], Ap[0], tp, n); - mpn_fft_add_modF (Ap[0], Ap[0], tp, n); - } - } -} - - -/* R <- A/2^k mod 2^(n*GMP_NUMB_BITS)+1 */ -static void -mpn_fft_div_2exp_modF (mp_ptr r, mp_srcptr a, mp_bitcnt_t k, mp_size_t n) -{ - mp_bitcnt_t i; - - ASSERT (r != a); - i = (mp_bitcnt_t) 2 * n * GMP_NUMB_BITS - k; - mpn_fft_mul_2exp_modF (r, a, i, n); - /* 1/2^k = 2^(2nL-k) mod 2^(n*GMP_NUMB_BITS)+1 */ - /* normalize so that R < 2^(n*GMP_NUMB_BITS)+1 */ - mpn_fft_normalize (r, n); -} - - -/* {rp,n} <- {ap,an} mod 2^(n*GMP_NUMB_BITS)+1, n <= an <= 3*n. - Returns carry out, i.e. 1 iff {ap,an} = -1 mod 2^(n*GMP_NUMB_BITS)+1, - then {rp,n}=0. -*/ -static mp_size_t -mpn_fft_norm_modF (mp_ptr rp, mp_size_t n, mp_ptr ap, mp_size_t an) -{ - mp_size_t l, m, rpn; - mp_limb_t cc; - - ASSERT ((n <= an) && (an <= 3 * n)); - m = an - 2 * n; - if (m > 0) - { - l = n; - /* add {ap, m} and {ap+2n, m} in {rp, m} */ - cc = mpn_add_n (rp, ap, ap + 2 * n, m); - /* copy {ap+m, n-m} to {rp+m, n-m} */ - rpn = mpn_add_1 (rp + m, ap + m, n - m, cc); - } - else - { - l = an - n; /* l <= n */ - MPN_COPY (rp, ap, n); - rpn = 0; - } - - /* remains to subtract {ap+n, l} from {rp, n+1} */ - cc = mpn_sub_n (rp, rp, ap + n, l); - rpn -= mpn_sub_1 (rp + l, rp + l, n - l, cc); - if (rpn < 0) /* necessarily rpn = -1 */ - rpn = mpn_add_1 (rp, rp, n, CNST_LIMB(1)); - return rpn; -} - -/* store in A[0..nprime] the first M bits from {n, nl}, - in A[nprime+1..] the following M bits, ... - Assumes M is a multiple of GMP_NUMB_BITS (M = l * GMP_NUMB_BITS). - T must have space for at least (nprime + 1) limbs. - We must have nl <= 2*K*l. -*/ -static void -mpn_mul_fft_decompose (mp_ptr A, mp_ptr *Ap, mp_size_t K, mp_size_t nprime, - mp_srcptr n, mp_size_t nl, mp_size_t l, mp_size_t Mp, - mp_ptr T) -{ - mp_size_t i, j; - mp_ptr tmp; - mp_size_t Kl = K * l; - TMP_DECL; - TMP_MARK; - - if (nl > Kl) /* normalize {n, nl} mod 2^(Kl*GMP_NUMB_BITS)+1 */ - { - mp_size_t dif = nl - Kl; - mp_limb_signed_t cy; - - tmp = TMP_BALLOC_LIMBS(Kl + 1); - - if (dif > Kl) - { - int subp = 0; - - cy = mpn_sub_n (tmp, n, n + Kl, Kl); - n += 2 * Kl; - dif -= Kl; - - /* now dif > 0 */ - while (dif > Kl) - { - if (subp) - cy += mpn_sub_n (tmp, tmp, n, Kl); - else - cy -= mpn_add_n (tmp, tmp, n, Kl); - subp ^= 1; - n += Kl; - dif -= Kl; - } - /* now dif <= Kl */ - if (subp) - cy += mpn_sub (tmp, tmp, Kl, n, dif); - else - cy -= mpn_add (tmp, tmp, Kl, n, dif); - if (cy >= 0) - cy = mpn_add_1 (tmp, tmp, Kl, cy); - else - cy = mpn_sub_1 (tmp, tmp, Kl, -cy); - } - else /* dif <= Kl, i.e. nl <= 2 * Kl */ - { - cy = mpn_sub (tmp, n, Kl, n + Kl, dif); - cy = mpn_add_1 (tmp, tmp, Kl, cy); - } - tmp[Kl] = cy; - nl = Kl + 1; - n = tmp; - } - for (i = 0; i < K; i++) - { - Ap[i] = A; - /* store the next M bits of n into A[0..nprime] */ - if (nl > 0) /* nl is the number of remaining limbs */ - { - j = (l <= nl && i < K - 1) ? l : nl; /* store j next limbs */ - nl -= j; - MPN_COPY (T, n, j); - MPN_ZERO (T + j, nprime + 1 - j); - n += l; - mpn_fft_mul_2exp_modF (A, T, i * Mp, nprime); - } - else - MPN_ZERO (A, nprime + 1); - A += nprime + 1; - } - ASSERT_ALWAYS (nl == 0); - TMP_FREE; -} - -/* op <- n*m mod 2^N+1 with fft of size 2^k where N=pl*GMP_NUMB_BITS - op is pl limbs, its high bit is returned. - One must have pl = mpn_fft_next_size (pl, k). - T must have space for 2 * (nprime + 1) limbs. -*/ - -static mp_limb_t -mpn_mul_fft_internal (mp_ptr op, mp_size_t pl, int k, - mp_ptr *Ap, mp_ptr *Bp, mp_ptr A, mp_ptr B, - mp_size_t nprime, mp_size_t l, mp_size_t Mp, - int **fft_l, mp_ptr T, int sqr) -{ - mp_size_t K, i, pla, lo, sh, j; - mp_ptr p; - mp_limb_t cc; - - K = (mp_size_t) 1 << k; - - /* direct fft's */ - mpn_fft_fft (Ap, K, fft_l + k, 2 * Mp, nprime, 1, T); - if (!sqr) - mpn_fft_fft (Bp, K, fft_l + k, 2 * Mp, nprime, 1, T); - - /* term to term multiplications */ - mpn_fft_mul_modF_K (Ap, sqr ? Ap : Bp, nprime, K); - - /* inverse fft's */ - mpn_fft_fftinv (Ap, K, 2 * Mp, nprime, T); - - /* division of terms after inverse fft */ - Bp[0] = T + nprime + 1; - mpn_fft_div_2exp_modF (Bp[0], Ap[0], k, nprime); - for (i = 1; i < K; i++) - { - Bp[i] = Ap[i - 1]; - mpn_fft_div_2exp_modF (Bp[i], Ap[i], k + (K - i) * Mp, nprime); - } - - /* addition of terms in result p */ - MPN_ZERO (T, nprime + 1); - pla = l * (K - 1) + nprime + 1; /* number of required limbs for p */ - p = B; /* B has K*(n' + 1) limbs, which is >= pla, i.e. enough */ - MPN_ZERO (p, pla); - cc = 0; /* will accumulate the (signed) carry at p[pla] */ - for (i = K - 1, lo = l * i + nprime,sh = l * i; i >= 0; i--,lo -= l,sh -= l) - { - mp_ptr n = p + sh; - - j = (K - i) & (K - 1); - - if (mpn_add_n (n, n, Bp[j], nprime + 1)) - cc += mpn_add_1 (n + nprime + 1, n + nprime + 1, - pla - sh - nprime - 1, CNST_LIMB(1)); - T[2 * l] = i + 1; /* T = (i + 1)*2^(2*M) */ - if (mpn_cmp (Bp[j], T, nprime + 1) > 0) - { /* subtract 2^N'+1 */ - cc -= mpn_sub_1 (n, n, pla - sh, CNST_LIMB(1)); - cc -= mpn_sub_1 (p + lo, p + lo, pla - lo, CNST_LIMB(1)); - } - } - if (cc == -CNST_LIMB(1)) - { - if ((cc = mpn_add_1 (p + pla - pl, p + pla - pl, pl, CNST_LIMB(1)))) - { - /* p[pla-pl]...p[pla-1] are all zero */ - mpn_sub_1 (p + pla - pl - 1, p + pla - pl - 1, pl + 1, CNST_LIMB(1)); - mpn_sub_1 (p + pla - 1, p + pla - 1, 1, CNST_LIMB(1)); - } - } - else if (cc == 1) - { - if (pla >= 2 * pl) - { - while ((cc = mpn_add_1 (p + pla - 2 * pl, p + pla - 2 * pl, 2 * pl, cc))) - ; - } - else - { - cc = mpn_sub_1 (p + pla - pl, p + pla - pl, pl, cc); - ASSERT (cc == 0); - } - } - else - ASSERT (cc == 0); - - /* here p < 2^(2M) [K 2^(M(K-1)) + (K-1) 2^(M(K-2)) + ... ] - < K 2^(2M) [2^(M(K-1)) + 2^(M(K-2)) + ... ] - < K 2^(2M) 2^(M(K-1))*2 = 2^(M*K+M+k+1) */ - return mpn_fft_norm_modF (op, pl, p, pla); -} - -/* return the lcm of a and 2^k */ -static mp_bitcnt_t -mpn_mul_fft_lcm (mp_bitcnt_t a, int k) -{ - mp_bitcnt_t l = k; - - while (a % 2 == 0 && k > 0) - { - a >>= 1; - k --; - } - return a << l; -} - - -mp_limb_t -mpn_mul_fft (mp_ptr op, mp_size_t pl, - mp_srcptr n, mp_size_t nl, - mp_srcptr m, mp_size_t ml, - int k) -{ - int i; - mp_size_t K, maxLK; - mp_size_t N, Nprime, nprime, M, Mp, l; - mp_ptr *Ap, *Bp, A, T, B; - int **fft_l, *tmp; - int sqr = (n == m && nl == ml); - mp_limb_t h; - TMP_DECL; - - TRACE (printf ("\nmpn_mul_fft pl=%ld nl=%ld ml=%ld k=%d\n", pl, nl, ml, k)); - ASSERT_ALWAYS (mpn_fft_next_size (pl, k) == pl); - - TMP_MARK; - N = pl * GMP_NUMB_BITS; - fft_l = TMP_BALLOC_TYPE (k + 1, int *); - tmp = TMP_BALLOC_TYPE ((size_t) 2 << k, int); - for (i = 0; i <= k; i++) - { - fft_l[i] = tmp; - tmp += (mp_size_t) 1 << i; - } - - mpn_fft_initl (fft_l, k); - K = (mp_size_t) 1 << k; - M = N >> k; /* N = 2^k M */ - l = 1 + (M - 1) / GMP_NUMB_BITS; - maxLK = mpn_mul_fft_lcm (GMP_NUMB_BITS, k); /* lcm (GMP_NUMB_BITS, 2^k) */ - - Nprime = (1 + (2 * M + k + 2) / maxLK) * maxLK; - /* Nprime = ceil((2*M+k+3)/maxLK)*maxLK; */ - nprime = Nprime / GMP_NUMB_BITS; - TRACE (printf ("N=%ld K=%ld, M=%ld, l=%ld, maxLK=%ld, Np=%ld, np=%ld\n", - N, K, M, l, maxLK, Nprime, nprime)); - /* we should ensure that recursively, nprime is a multiple of the next K */ - if (nprime >= (sqr ? SQR_FFT_MODF_THRESHOLD : MUL_FFT_MODF_THRESHOLD)) - { - mp_size_t K2; - for (;;) - { - K2 = (mp_size_t) 1 << mpn_fft_best_k (nprime, sqr); - if ((nprime & (K2 - 1)) == 0) - break; - nprime = (nprime + K2 - 1) & -K2; - Nprime = nprime * GMP_LIMB_BITS; - /* warning: since nprime changed, K2 may change too! */ - } - TRACE (printf ("new maxLK=%ld, Np=%ld, np=%ld\n", maxLK, Nprime, nprime)); - } - ASSERT_ALWAYS (nprime < pl); /* otherwise we'll loop */ - - T = TMP_BALLOC_LIMBS (2 * (nprime + 1)); - Mp = Nprime >> k; - - TRACE (printf ("%ldx%ld limbs -> %ld times %ldx%ld limbs (%1.2f)\n", - pl, pl, K, nprime, nprime, 2.0 * (double) N / Nprime / K); - printf (" temp space %ld\n", 2 * K * (nprime + 1))); - - A = TMP_BALLOC_LIMBS (K * (nprime + 1)); - Ap = TMP_BALLOC_MP_PTRS (K); - mpn_mul_fft_decompose (A, Ap, K, nprime, n, nl, l, Mp, T); - if (sqr) - { - mp_size_t pla; - pla = l * (K - 1) + nprime + 1; /* number of required limbs for p */ - B = TMP_BALLOC_LIMBS (pla); - Bp = TMP_BALLOC_MP_PTRS (K); - } - else - { - B = TMP_BALLOC_LIMBS (K * (nprime + 1)); - Bp = TMP_BALLOC_MP_PTRS (K); - mpn_mul_fft_decompose (B, Bp, K, nprime, m, ml, l, Mp, T); - } - h = mpn_mul_fft_internal (op, pl, k, Ap, Bp, A, B, nprime, l, Mp, fft_l, T, sqr); - - TMP_FREE; - return h; -} - -#if WANT_OLD_FFT_FULL -/* multiply {n, nl} by {m, ml}, and put the result in {op, nl+ml} */ -void -mpn_mul_fft_full (mp_ptr op, - mp_srcptr n, mp_size_t nl, - mp_srcptr m, mp_size_t ml) -{ - mp_ptr pad_op; - mp_size_t pl, pl2, pl3, l; - mp_size_t cc, c2, oldcc; - int k2, k3; - int sqr = (n == m && nl == ml); - - pl = nl + ml; /* total number of limbs of the result */ - - /* perform a fft mod 2^(2N)+1 and one mod 2^(3N)+1. - We must have pl3 = 3/2 * pl2, with pl2 a multiple of 2^k2, and - pl3 a multiple of 2^k3. Since k3 >= k2, both are multiples of 2^k2, - and pl2 must be an even multiple of 2^k2. Thus (pl2,pl3) = - (2*j*2^k2,3*j*2^k2), which works for 3*j <= pl/2^k2 <= 5*j. - We need that consecutive intervals overlap, i.e. 5*j >= 3*(j+1), - which requires j>=2. Thus this scheme requires pl >= 6 * 2^FFT_FIRST_K. */ - - /* ASSERT_ALWAYS(pl >= 6 * (1 << FFT_FIRST_K)); */ - - pl2 = (2 * pl - 1) / 5; /* ceil (2pl/5) - 1 */ - do - { - pl2++; - k2 = mpn_fft_best_k (pl2, sqr); /* best fft size for pl2 limbs */ - pl2 = mpn_fft_next_size (pl2, k2); - pl3 = 3 * pl2 / 2; /* since k>=FFT_FIRST_K=4, pl2 is a multiple of 2^4, - thus pl2 / 2 is exact */ - k3 = mpn_fft_best_k (pl3, sqr); - } - while (mpn_fft_next_size (pl3, k3) != pl3); - - TRACE (printf ("mpn_mul_fft_full nl=%ld ml=%ld -> pl2=%ld pl3=%ld k=%d\n", - nl, ml, pl2, pl3, k2)); - - ASSERT_ALWAYS(pl3 <= pl); - cc = mpn_mul_fft (op, pl3, n, nl, m, ml, k3); /* mu */ - ASSERT(cc == 0); - pad_op = __GMP_ALLOCATE_FUNC_LIMBS (pl2); - cc = mpn_mul_fft (pad_op, pl2, n, nl, m, ml, k2); /* lambda */ - cc = -cc + mpn_sub_n (pad_op, pad_op, op, pl2); /* lambda - low(mu) */ - /* 0 <= cc <= 1 */ - ASSERT(0 <= cc && cc <= 1); - l = pl3 - pl2; /* l = pl2 / 2 since pl3 = 3/2 * pl2 */ - c2 = mpn_add_n (pad_op, pad_op, op + pl2, l); - cc = mpn_add_1 (pad_op + l, pad_op + l, l, (mp_limb_t) c2) - cc; - ASSERT(-1 <= cc && cc <= 1); - if (cc < 0) - cc = mpn_add_1 (pad_op, pad_op, pl2, (mp_limb_t) -cc); - ASSERT(0 <= cc && cc <= 1); - /* now lambda-mu = {pad_op, pl2} - cc mod 2^(pl2*GMP_NUMB_BITS)+1 */ - oldcc = cc; -#if HAVE_NATIVE_mpn_add_n_sub_n - c2 = mpn_add_n_sub_n (pad_op + l, pad_op, pad_op, pad_op + l, l); - /* c2 & 1 is the borrow, c2 & 2 is the carry */ - cc += c2 >> 1; /* carry out from high <- low + high */ - c2 = c2 & 1; /* borrow out from low <- low - high */ -#else - { - mp_ptr tmp; - TMP_DECL; - - TMP_MARK; - tmp = TMP_BALLOC_LIMBS (l); - MPN_COPY (tmp, pad_op, l); - c2 = mpn_sub_n (pad_op, pad_op, pad_op + l, l); - cc += mpn_add_n (pad_op + l, tmp, pad_op + l, l); - TMP_FREE; - } -#endif - c2 += oldcc; - /* first normalize {pad_op, pl2} before dividing by 2: c2 is the borrow - at pad_op + l, cc is the carry at pad_op + pl2 */ - /* 0 <= cc <= 2 */ - cc -= mpn_sub_1 (pad_op + l, pad_op + l, l, (mp_limb_t) c2); - /* -1 <= cc <= 2 */ - if (cc > 0) - cc = -mpn_sub_1 (pad_op, pad_op, pl2, (mp_limb_t) cc); - /* now -1 <= cc <= 0 */ - if (cc < 0) - cc = mpn_add_1 (pad_op, pad_op, pl2, (mp_limb_t) -cc); - /* now {pad_op, pl2} is normalized, with 0 <= cc <= 1 */ - if (pad_op[0] & 1) /* if odd, add 2^(pl2*GMP_NUMB_BITS)+1 */ - cc += 1 + mpn_add_1 (pad_op, pad_op, pl2, CNST_LIMB(1)); - /* now 0 <= cc <= 2, but cc=2 cannot occur since it would give a carry - out below */ - mpn_rshift (pad_op, pad_op, pl2, 1); /* divide by two */ - if (cc) /* then cc=1 */ - pad_op [pl2 - 1] |= (mp_limb_t) 1 << (GMP_NUMB_BITS - 1); - /* now {pad_op,pl2}-cc = (lambda-mu)/(1-2^(l*GMP_NUMB_BITS)) - mod 2^(pl2*GMP_NUMB_BITS) + 1 */ - c2 = mpn_add_n (op, op, pad_op, pl2); /* no need to add cc (is 0) */ - /* since pl2+pl3 >= pl, necessary the extra limbs (including cc) are zero */ - MPN_COPY (op + pl3, pad_op, pl - pl3); - ASSERT_MPN_ZERO_P (pad_op + pl - pl3, pl2 + pl3 - pl); - __GMP_FREE_FUNC_LIMBS (pad_op, pl2); - /* since the final result has at most pl limbs, no carry out below */ - mpn_add_1 (op + pl2, op + pl2, pl - pl2, (mp_limb_t) c2); -} -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul_n.c deleted file mode 100644 index 5df8b16fa01b34dd6522911de414115d3d340cbb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mul_n.c +++ /dev/null @@ -1,97 +0,0 @@ -/* mpn_mul_n -- multiply natural numbers. - -Copyright 1991, 1993, 1994, 1996-2003, 2005, 2008, 2009 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -mpn_mul_n (mp_ptr p, mp_srcptr a, mp_srcptr b, mp_size_t n) -{ - ASSERT (n >= 1); - ASSERT (! MPN_OVERLAP_P (p, 2 * n, a, n)); - ASSERT (! MPN_OVERLAP_P (p, 2 * n, b, n)); - - if (BELOW_THRESHOLD (n, MUL_TOOM22_THRESHOLD)) - { - mpn_mul_basecase (p, a, n, b, n); - } - else if (BELOW_THRESHOLD (n, MUL_TOOM33_THRESHOLD)) - { - /* Allocate workspace of fixed size on stack: fast! */ - mp_limb_t ws[mpn_toom22_mul_itch (MUL_TOOM33_THRESHOLD_LIMIT-1, - MUL_TOOM33_THRESHOLD_LIMIT-1)]; - ASSERT (MUL_TOOM33_THRESHOLD <= MUL_TOOM33_THRESHOLD_LIMIT); - mpn_toom22_mul (p, a, n, b, n, ws); - } - else if (BELOW_THRESHOLD (n, MUL_TOOM44_THRESHOLD)) - { - mp_ptr ws; - TMP_SDECL; - TMP_SMARK; - ws = TMP_SALLOC_LIMBS (mpn_toom33_mul_itch (n, n)); - mpn_toom33_mul (p, a, n, b, n, ws); - TMP_SFREE; - } - else if (BELOW_THRESHOLD (n, MUL_TOOM6H_THRESHOLD)) - { - mp_ptr ws; - TMP_SDECL; - TMP_SMARK; - ws = TMP_SALLOC_LIMBS (mpn_toom44_mul_itch (n, n)); - mpn_toom44_mul (p, a, n, b, n, ws); - TMP_SFREE; - } - else if (BELOW_THRESHOLD (n, MUL_TOOM8H_THRESHOLD)) - { - mp_ptr ws; - TMP_SDECL; - TMP_SMARK; - ws = TMP_SALLOC_LIMBS (mpn_toom6_mul_n_itch (n)); - mpn_toom6h_mul (p, a, n, b, n, ws); - TMP_SFREE; - } - else if (BELOW_THRESHOLD (n, MUL_FFT_THRESHOLD)) - { - mp_ptr ws; - TMP_DECL; - TMP_MARK; - ws = TMP_ALLOC_LIMBS (mpn_toom8_mul_n_itch (n)); - mpn_toom8h_mul (p, a, n, b, n, ws); - TMP_FREE; - } - else - { - /* The current FFT code allocates its own space. That should probably - change. */ - mpn_fft_mul (p, a, n, b, n); - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mullo_basecase.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mullo_basecase.c deleted file mode 100644 index 37d9018a49319f38cc5d62f77a95eb3c593f6ab8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mullo_basecase.c +++ /dev/null @@ -1,91 +0,0 @@ -/* mpn_mullo_basecase -- Internal routine to multiply two natural - numbers of length n and return the low part. - - THIS IS AN INTERNAL FUNCTION WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH THIS FUNCTION THROUGH DOCUMENTED INTERFACES. - - -Copyright (C) 2000, 2002, 2004, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* FIXME: Should optionally use mpn_mul_2/mpn_addmul_2. */ - -#ifndef MULLO_VARIANT -#define MULLO_VARIANT 2 -#endif - - -#if MULLO_VARIANT == 1 -void -mpn_mullo_basecase (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n) -{ - mp_size_t i; - - mpn_mul_1 (rp, up, n, vp[0]); - - for (i = n - 1; i > 0; i--) - { - vp++; - rp++; - mpn_addmul_1 (rp, up, i, vp[0]); - } -} -#endif - - -#if MULLO_VARIANT == 2 -void -mpn_mullo_basecase (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n) -{ - mp_limb_t h; - - h = up[0] * vp[n - 1]; - - if (n != 1) - { - mp_size_t i; - mp_limb_t v0; - - v0 = *vp++; - h += up[n - 1] * v0 + mpn_mul_1 (rp, up, n - 1, v0); - rp++; - - for (i = n - 2; i > 0; i--) - { - v0 = *vp++; - h += up[i] * v0 + mpn_addmul_1 (rp, up, i, v0); - rp++; - } - } - - rp[0] = h; -} -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mullo_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mullo_n.c deleted file mode 100644 index a8483d9439966028fdf2332e3f7a9cfae2a2d094..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mullo_n.c +++ /dev/null @@ -1,244 +0,0 @@ -/* mpn_mullo_n -- multiply two n-limb numbers and return the low n limbs - of their products. - - Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - - THIS IS (FOR NOW) AN INTERNAL FUNCTION. IT IS ONLY SAFE TO REACH THIS - FUNCTION THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST GUARANTEED - THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2004, 2005, 2009, 2010, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -#if TUNE_PROGRAM_BUILD || WANT_FAT_BINARY -#define MAYBE_range_basecase 1 -#define MAYBE_range_toom22 1 -#else -#define MAYBE_range_basecase \ - ((MULLO_DC_THRESHOLD == 0 ? MULLO_BASECASE_THRESHOLD : MULLO_DC_THRESHOLD) < MUL_TOOM22_THRESHOLD*36/(36-11)) -#define MAYBE_range_toom22 \ - ((MULLO_DC_THRESHOLD == 0 ? MULLO_BASECASE_THRESHOLD : MULLO_DC_THRESHOLD) < MUL_TOOM33_THRESHOLD*36/(36-11) ) -#endif - -/* THINK: The DC strategy uses different constants in different Toom's - ranges. Something smoother? -*/ - -/* - Compute the least significant half of the product {xy,n}*{yp,n}, or - formally {rp,n} = {xy,n}*{yp,n} Mod (B^n). - - Above the given threshold, the Divide and Conquer strategy is used. - The operands are split in two, and a full product plus two mullo - are used to obtain the final result. The more natural strategy is to - split in two halves, but this is far from optimal when a - sub-quadratic multiplication is used. - - Mulders suggests an unbalanced split in favour of the full product, - split n = n1 + n2, where an = n1 <= n2 = (1-a)n; i.e. 0 < a <= 1/2. - - To compute the value of a, we assume that the cost of mullo for a - given size ML(n) is a fraction of the cost of a full product with - same size M(n), and the cost M(n)=n^e for some exponent 1 < e <= 2; - then we can write: - - ML(n) = 2*ML(an) + M((1-a)n) => k*M(n) = 2*k*M(n)*a^e + M(n)*(1-a)^e - - Given a value for e, want to minimise the value of k, i.e. the - function k=(1-a)^e/(1-2*a^e). - - With e=2, the exponent for schoolbook multiplication, the minimum is - given by the values a=1-a=1/2. - - With e=log(3)/log(2), the exponent for Karatsuba (aka toom22), - Mulders compute (1-a) = 0.694... and we approximate a with 11/36. - - Other possible approximations follow: - e=log(5)/log(3) [Toom-3] -> a ~= 9/40 - e=log(7)/log(4) [Toom-4] -> a ~= 7/39 - e=log(11)/log(6) [Toom-6] -> a ~= 1/8 - e=log(15)/log(8) [Toom-8] -> a ~= 1/10 - - The values above where obtained with the following trivial commands - in the gp-pari shell: - -fun(e,a)=(1-a)^e/(1-2*a^e) -mul(a,b,c)={local(m,x,p);if(b-c<1/10000,(b+c)/2,m=1;x=b;forstep(p=c,b,(b-c)/8,if(fun(a,p)<m,m=fun(a,p);x=p));mul(a,(b+x)/2,(c+x)/2))} -contfracpnqn(contfrac(mul(log(2*2-1)/log(2),1/2,0),5)) -contfracpnqn(contfrac(mul(log(3*2-1)/log(3),1/2,0),5)) -contfracpnqn(contfrac(mul(log(4*2-1)/log(4),1/2,0),5)) -contfracpnqn(contfrac(mul(log(6*2-1)/log(6),1/2,0),3)) -contfracpnqn(contfrac(mul(log(8*2-1)/log(8),1/2,0),3)) - - , - |\ - | \ - +----, - | | - | | - | |\ - | | \ - +----+--` - ^ n2 ^n1^ - - For an actual implementation, the assumption that M(n)=n^e is - incorrect, as a consequence also the assumption that ML(n)=k*M(n) - with a constant k is wrong. - - But theory suggest us two things: - - the best the multiplication product is (lower e), the more k - approaches 1, and a approaches 0. - - - A value for a smaller than optimal is probably less bad than a - bigger one: e.g. let e=log(3)/log(2), a=0.3058_ the optimal - value, and k(a)=0.808_ the mul/mullo speed ratio. We get - k(a+1/6)=0.929_ but k(a-1/6)=0.865_. -*/ - -static mp_size_t -mpn_mullo_n_itch (mp_size_t n) -{ - return 2*n; -} - -/* - mpn_dc_mullo_n requires a scratch space of 2*n limbs at tp. - It accepts tp == rp. -*/ -static void -mpn_dc_mullo_n (mp_ptr rp, mp_srcptr xp, mp_srcptr yp, mp_size_t n, mp_ptr tp) -{ - mp_size_t n2, n1; - ASSERT (n >= 2); - ASSERT (! MPN_OVERLAP_P (rp, n, xp, n)); - ASSERT (! MPN_OVERLAP_P (rp, n, yp, n)); - ASSERT (MPN_SAME_OR_SEPARATE2_P(rp, n, tp, 2*n)); - - /* Divide-and-conquer */ - - /* We need fractional approximation of the value 0 < a <= 1/2 - giving the minimum in the function k=(1-a)^e/(1-2*a^e). - */ - if (MAYBE_range_basecase && BELOW_THRESHOLD (n, MUL_TOOM22_THRESHOLD*36/(36-11))) - n1 = n >> 1; - else if (MAYBE_range_toom22 && BELOW_THRESHOLD (n, MUL_TOOM33_THRESHOLD*36/(36-11))) - n1 = n * 11 / (size_t) 36; /* n1 ~= n*(1-.694...) */ - else if (BELOW_THRESHOLD (n, MUL_TOOM44_THRESHOLD*40/(40-9))) - n1 = n * 9 / (size_t) 40; /* n1 ~= n*(1-.775...) */ - else if (BELOW_THRESHOLD (n, MUL_TOOM8H_THRESHOLD*10/9)) - n1 = n * 7 / (size_t) 39; /* n1 ~= n*(1-.821...) */ - /* n1 = n * 4 / (size_t) 31; // n1 ~= n*(1-.871...) [TOOM66] */ - else - n1 = n / (size_t) 10; /* n1 ~= n*(1-.899...) [TOOM88] */ - - n2 = n - n1; - - /* Split as x = x1 2^(n2 GMP_NUMB_BITS) + x0, - y = y1 2^(n2 GMP_NUMB_BITS) + y0 */ - - /* x0 * y0 */ - mpn_mul_n (tp, xp, yp, n2); - MPN_COPY (rp, tp, n2); - - /* x1 * y0 * 2^(n2 GMP_NUMB_BITS) */ - if (BELOW_THRESHOLD (n1, MULLO_BASECASE_THRESHOLD)) - mpn_mul_basecase (tp + n, xp + n2, n1, yp, n1); - else if (BELOW_THRESHOLD (n1, MULLO_DC_THRESHOLD)) - mpn_mullo_basecase (tp + n, xp + n2, yp, n1); - else - mpn_dc_mullo_n (tp + n, xp + n2, yp, n1, tp + n); - mpn_add_n (rp + n2, tp + n2, tp + n, n1); - - /* x0 * y1 * 2^(n2 GMP_NUMB_BITS) */ - if (BELOW_THRESHOLD (n1, MULLO_BASECASE_THRESHOLD)) - mpn_mul_basecase (tp + n, xp, n1, yp + n2, n1); - else if (BELOW_THRESHOLD (n1, MULLO_DC_THRESHOLD)) - mpn_mullo_basecase (tp + n, xp, yp + n2, n1); - else - mpn_dc_mullo_n (tp + n, xp, yp + n2, n1, tp + n); - mpn_add_n (rp + n2, rp + n2, tp + n, n1); -} - -/* Avoid zero allocations when MULLO_BASECASE_THRESHOLD is 0. */ -#define MUL_BASECASE_ALLOC \ - (MULLO_BASECASE_THRESHOLD_LIMIT == 0 ? 1 : 2*MULLO_BASECASE_THRESHOLD_LIMIT) - -/* FIXME: This function should accept a temporary area; dc_mullow_n - accepts a pointer tp, and handle the case tp == rp, do the same here. - Maybe recombine the two functions. - THINK: If mpn_mul_basecase is always faster than mpn_mullo_basecase - (typically thanks to mpn_addmul_2) should we unconditionally use - mpn_mul_n? -*/ - -void -mpn_mullo_n (mp_ptr rp, mp_srcptr xp, mp_srcptr yp, mp_size_t n) -{ - ASSERT (n >= 1); - ASSERT (! MPN_OVERLAP_P (rp, n, xp, n)); - ASSERT (! MPN_OVERLAP_P (rp, n, yp, n)); - - if (BELOW_THRESHOLD (n, MULLO_BASECASE_THRESHOLD)) - { - /* Allocate workspace of fixed size on stack: fast! */ - mp_limb_t tp[MUL_BASECASE_ALLOC]; - mpn_mul_basecase (tp, xp, n, yp, n); - MPN_COPY (rp, tp, n); - } - else if (BELOW_THRESHOLD (n, MULLO_DC_THRESHOLD)) - { - mpn_mullo_basecase (rp, xp, yp, n); - } - else - { - mp_ptr tp; - TMP_DECL; - TMP_MARK; - tp = TMP_ALLOC_LIMBS (mpn_mullo_n_itch (n)); - if (BELOW_THRESHOLD (n, MULLO_MUL_N_THRESHOLD)) - { - mpn_dc_mullo_n (rp, xp, yp, n, tp); - } - else - { - /* For really large operands, use plain mpn_mul_n but throw away upper n - limbs of result. */ -#if !TUNE_PROGRAM_BUILD && (MULLO_MUL_N_THRESHOLD > MUL_FFT_THRESHOLD) - mpn_fft_mul (tp, xp, n, yp, n); -#else - mpn_mul_n (tp, xp, yp, n); -#endif - MPN_COPY (rp, tp, n); - } - TMP_FREE; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mulmid.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mulmid.c deleted file mode 100644 index 6b4ea3253dc3a46504b407fe65fcbe94aa65942a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mulmid.c +++ /dev/null @@ -1,256 +0,0 @@ -/* mpn_mulmid -- middle product - - Contributed by David Harvey. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - - -#define CHUNK (200 + MULMID_TOOM42_THRESHOLD) - - -void -mpn_mulmid (mp_ptr rp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn) -{ - mp_size_t rn, k; - mp_ptr scratch, temp; - - ASSERT (an >= bn); - ASSERT (bn >= 1); - ASSERT (! MPN_OVERLAP_P (rp, an - bn + 3, ap, an)); - ASSERT (! MPN_OVERLAP_P (rp, an - bn + 3, bp, bn)); - - if (bn < MULMID_TOOM42_THRESHOLD) - { - /* region not tall enough to make toom42 worthwhile for any portion */ - - if (an < CHUNK) - { - /* region not too wide either, just call basecase directly */ - mpn_mulmid_basecase (rp, ap, an, bp, bn); - return; - } - - /* Region quite wide. For better locality, use basecase on chunks: - - AAABBBCC.. - .AAABBBCC. - ..AAABBBCC - */ - - k = CHUNK - bn + 1; /* number of diagonals per chunk */ - - /* first chunk (marked A in the above diagram) */ - mpn_mulmid_basecase (rp, ap, CHUNK, bp, bn); - - /* remaining chunks (B, C, etc) */ - an -= k; - - while (an >= CHUNK) - { - mp_limb_t t0, t1, cy; - ap += k, rp += k; - t0 = rp[0], t1 = rp[1]; - mpn_mulmid_basecase (rp, ap, CHUNK, bp, bn); - ADDC_LIMB (cy, rp[0], rp[0], t0); /* add back saved limbs */ - MPN_INCR_U (rp + 1, k + 1, t1 + cy); - an -= k; - } - - if (an >= bn) - { - /* last remaining chunk */ - mp_limb_t t0, t1, cy; - ap += k, rp += k; - t0 = rp[0], t1 = rp[1]; - mpn_mulmid_basecase (rp, ap, an, bp, bn); - ADDC_LIMB (cy, rp[0], rp[0], t0); - MPN_INCR_U (rp + 1, an - bn + 2, t1 + cy); - } - - return; - } - - /* region is tall enough for toom42 */ - - rn = an - bn + 1; - - if (rn < MULMID_TOOM42_THRESHOLD) - { - /* region not wide enough to make toom42 worthwhile for any portion */ - - TMP_DECL; - - if (bn < CHUNK) - { - /* region not too tall either, just call basecase directly */ - mpn_mulmid_basecase (rp, ap, an, bp, bn); - return; - } - - /* Region quite tall. For better locality, use basecase on chunks: - - AAAAA.... - .AAAAA... - ..BBBBB.. - ...BBBBB. - ....CCCCC - */ - - TMP_MARK; - - temp = TMP_ALLOC_LIMBS (rn + 2); - - /* first chunk (marked A in the above diagram) */ - bp += bn - CHUNK, an -= bn - CHUNK; - mpn_mulmid_basecase (rp, ap, an, bp, CHUNK); - - /* remaining chunks (B, C, etc) */ - bn -= CHUNK; - - while (bn >= CHUNK) - { - ap += CHUNK, bp -= CHUNK; - mpn_mulmid_basecase (temp, ap, an, bp, CHUNK); - mpn_add_n (rp, rp, temp, rn + 2); - bn -= CHUNK; - } - - if (bn) - { - /* last remaining chunk */ - ap += CHUNK, bp -= bn; - mpn_mulmid_basecase (temp, ap, rn + bn - 1, bp, bn); - mpn_add_n (rp, rp, temp, rn + 2); - } - - TMP_FREE; - return; - } - - /* we're definitely going to use toom42 somewhere */ - - if (bn > rn) - { - /* slice region into chunks, use toom42 on all chunks except possibly - the last: - - AA.... - .AA... - ..BB.. - ...BB. - ....CC - */ - - TMP_DECL; - TMP_MARK; - - temp = TMP_ALLOC_LIMBS (rn + 2 + mpn_toom42_mulmid_itch (rn)); - scratch = temp + rn + 2; - - /* first chunk (marked A in the above diagram) */ - bp += bn - rn; - mpn_toom42_mulmid (rp, ap, bp, rn, scratch); - - /* remaining chunks (B, C, etc) */ - bn -= rn; - - while (bn >= rn) - { - ap += rn, bp -= rn; - mpn_toom42_mulmid (temp, ap, bp, rn, scratch); - mpn_add_n (rp, rp, temp, rn + 2); - bn -= rn; - } - - if (bn) - { - /* last remaining chunk */ - ap += rn, bp -= bn; - mpn_mulmid (temp, ap, rn + bn - 1, bp, bn); - mpn_add_n (rp, rp, temp, rn + 2); - } - - TMP_FREE; - } - else - { - /* slice region into chunks, use toom42 on all chunks except possibly - the last: - - AAABBBCC.. - .AAABBBCC. - ..AAABBBCC - */ - - TMP_DECL; - TMP_MARK; - - scratch = TMP_ALLOC_LIMBS (mpn_toom42_mulmid_itch (bn)); - - /* first chunk (marked A in the above diagram) */ - mpn_toom42_mulmid (rp, ap, bp, bn, scratch); - - /* remaining chunks (B, C, etc) */ - rn -= bn; - - while (rn >= bn) - { - mp_limb_t t0, t1, cy; - ap += bn, rp += bn; - t0 = rp[0], t1 = rp[1]; - mpn_toom42_mulmid (rp, ap, bp, bn, scratch); - ADDC_LIMB (cy, rp[0], rp[0], t0); /* add back saved limbs */ - MPN_INCR_U (rp + 1, bn + 1, t1 + cy); - rn -= bn; - } - - TMP_FREE; - - if (rn) - { - /* last remaining chunk */ - mp_limb_t t0, t1, cy; - ap += bn, rp += bn; - t0 = rp[0], t1 = rp[1]; - mpn_mulmid (rp, ap, rn + bn - 1, bp, bn); - ADDC_LIMB (cy, rp[0], rp[0], t0); - MPN_INCR_U (rp + 1, rn + 1, t1 + cy); - } - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mulmid_basecase.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mulmid_basecase.c deleted file mode 100644 index 400e9764240b9257552ef25d7a25e62a578481df..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mulmid_basecase.c +++ /dev/null @@ -1,83 +0,0 @@ -/* mpn_mulmid_basecase -- classical middle product algorithm - - Contributed by David Harvey. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Middle product of {up,un} and {vp,vn}, write result to {rp,un-vn+3}. - Must have un >= vn >= 1. - - Neither input buffer may overlap with the output buffer. */ - -void -mpn_mulmid_basecase (mp_ptr rp, - mp_srcptr up, mp_size_t un, - mp_srcptr vp, mp_size_t vn) -{ - mp_limb_t lo, hi; /* last two limbs of output */ - mp_limb_t cy; - - ASSERT (un >= vn); - ASSERT (vn >= 1); - ASSERT (! MPN_OVERLAP_P (rp, un - vn + 3, up, un)); - ASSERT (! MPN_OVERLAP_P (rp, un - vn + 3, vp, vn)); - - up += vn - 1; - un -= vn - 1; - - /* multiply by first limb, store result */ - lo = mpn_mul_1 (rp, up, un, vp[0]); - hi = 0; - - /* accumulate remaining rows */ - for (vn--; vn; vn--) - { - up--, vp++; - cy = mpn_addmul_1 (rp, up, un, vp[0]); - add_ssaaaa (hi, lo, hi, lo, CNST_LIMB(0), cy); - } - - /* store final limbs */ -#if GMP_NAIL_BITS != 0 - hi = (hi << GMP_NAIL_BITS) + (lo >> GMP_NUMB_BITS); - lo &= GMP_NUMB_MASK; -#endif - - rp[un] = lo; - rp[un + 1] = hi; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mulmid_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mulmid_n.c deleted file mode 100644 index 2280ba3a3664205172503f25efc6056fd19ae326..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mulmid_n.c +++ /dev/null @@ -1,62 +0,0 @@ -/* mpn_mulmid_n -- balanced middle product - - Contributed by David Harvey. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - - -void -mpn_mulmid_n (mp_ptr rp, mp_srcptr ap, mp_srcptr bp, mp_size_t n) -{ - ASSERT (n >= 1); - ASSERT (! MPN_OVERLAP_P (rp, n + 2, ap, 2*n - 1)); - ASSERT (! MPN_OVERLAP_P (rp, n + 2, bp, n)); - - if (n < MULMID_TOOM42_THRESHOLD) - { - mpn_mulmid_basecase (rp, ap, 2*n - 1, bp, n); - } - else - { - mp_ptr scratch; - TMP_DECL; - TMP_MARK; - scratch = TMP_ALLOC_LIMBS (mpn_toom42_mulmid_itch (n)); - mpn_toom42_mulmid (rp, ap, bp, n, scratch); - TMP_FREE; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mulmod_bnm1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mulmod_bnm1.c deleted file mode 100644 index 67dc2044438806d1600bcd6ffcd6d2685739a908..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/mulmod_bnm1.c +++ /dev/null @@ -1,355 +0,0 @@ -/* mulmod_bnm1.c -- multiplication mod B^n-1. - - Contributed to the GNU project by Niels Möller, Torbjorn Granlund and - Marco Bodrato. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009, 2010, 2012, 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Inputs are {ap,rn} and {bp,rn}; output is {rp,rn}, computation is - mod B^rn - 1, and values are semi-normalised; zero is represented - as either 0 or B^n - 1. Needs a scratch of 2rn limbs at tp. - tp==rp is allowed. */ -void -mpn_bc_mulmod_bnm1 (mp_ptr rp, mp_srcptr ap, mp_srcptr bp, mp_size_t rn, - mp_ptr tp) -{ - mp_limb_t cy; - - ASSERT (0 < rn); - - mpn_mul_n (tp, ap, bp, rn); - cy = mpn_add_n (rp, tp, tp + rn, rn); - /* If cy == 1, then the value of rp is at most B^rn - 2, so there can - * be no overflow when adding in the carry. */ - MPN_INCR_U (rp, rn, cy); -} - - -/* Inputs are {ap,rn+1} and {bp,rn+1}; output is {rp,rn+1}, in - semi-normalised representation, computation is mod B^rn + 1. Needs - a scratch area of 2rn + 2 limbs at tp; tp == rp is allowed. - Output is normalised. */ -static void -mpn_bc_mulmod_bnp1 (mp_ptr rp, mp_srcptr ap, mp_srcptr bp, mp_size_t rn, - mp_ptr tp) -{ - mp_limb_t cy; - - ASSERT (0 < rn); - - mpn_mul_n (tp, ap, bp, rn + 1); - ASSERT (tp[2*rn+1] == 0); - ASSERT (tp[2*rn] < GMP_NUMB_MAX); - cy = tp[2*rn] + mpn_sub_n (rp, tp, tp+rn, rn); - rp[rn] = 0; - MPN_INCR_U (rp, rn+1, cy ); -} - - -/* Computes {rp,MIN(rn,an+bn)} <- {ap,an}*{bp,bn} Mod(B^rn-1) - * - * The result is expected to be ZERO if and only if one of the operand - * already is. Otherwise the class [0] Mod(B^rn-1) is represented by - * B^rn-1. This should not be a problem if mulmod_bnm1 is used to - * combine results and obtain a natural number when one knows in - * advance that the final value is less than (B^rn-1). - * Moreover it should not be a problem if mulmod_bnm1 is used to - * compute the full product with an+bn <= rn, because this condition - * implies (B^an-1)(B^bn-1) < (B^rn-1) . - * - * Requires 0 < bn <= an <= rn and an + bn > rn/2 - * Scratch need: rn + (need for recursive call OR rn + 4). This gives - * - * S(n) <= rn + MAX (rn + 4, S(n/2)) <= 2rn + 4 - */ -void -mpn_mulmod_bnm1 (mp_ptr rp, mp_size_t rn, mp_srcptr ap, mp_size_t an, mp_srcptr bp, mp_size_t bn, mp_ptr tp) -{ - ASSERT (0 < bn); - ASSERT (bn <= an); - ASSERT (an <= rn); - - if ((rn & 1) != 0 || BELOW_THRESHOLD (rn, MULMOD_BNM1_THRESHOLD)) - { - if (UNLIKELY (bn < rn)) - { - if (UNLIKELY (an + bn <= rn)) - { - mpn_mul (rp, ap, an, bp, bn); - } - else - { - mp_limb_t cy; - mpn_mul (tp, ap, an, bp, bn); - cy = mpn_add (rp, tp, rn, tp + rn, an + bn - rn); - MPN_INCR_U (rp, rn, cy); - } - } - else - mpn_bc_mulmod_bnm1 (rp, ap, bp, rn, tp); - } - else - { - mp_size_t n; - mp_limb_t cy; - mp_limb_t hi; - - n = rn >> 1; - - /* We need at least an + bn >= n, to be able to fit one of the - recursive products at rp. Requiring strict inequality makes - the code slightly simpler. If desired, we could avoid this - restriction by initially halving rn as long as rn is even and - an + bn <= rn/2. */ - - ASSERT (an + bn > n); - - /* Compute xm = a*b mod (B^n - 1), xp = a*b mod (B^n + 1) - and crt together as - - x = -xp * B^n + (B^n + 1) * [ (xp + xm)/2 mod (B^n-1)] - */ - -#define a0 ap -#define a1 (ap + n) -#define b0 bp -#define b1 (bp + n) - -#define xp tp /* 2n + 2 */ - /* am1 maybe in {xp, n} */ - /* bm1 maybe in {xp + n, n} */ -#define sp1 (tp + 2*n + 2) - /* ap1 maybe in {sp1, n + 1} */ - /* bp1 maybe in {sp1 + n + 1, n + 1} */ - - { - mp_srcptr am1, bm1; - mp_size_t anm, bnm; - mp_ptr so; - - bm1 = b0; - bnm = bn; - if (LIKELY (an > n)) - { - am1 = xp; - cy = mpn_add (xp, a0, n, a1, an - n); - MPN_INCR_U (xp, n, cy); - anm = n; - so = xp + n; - if (LIKELY (bn > n)) - { - bm1 = so; - cy = mpn_add (so, b0, n, b1, bn - n); - MPN_INCR_U (so, n, cy); - bnm = n; - so += n; - } - } - else - { - so = xp; - am1 = a0; - anm = an; - } - - mpn_mulmod_bnm1 (rp, n, am1, anm, bm1, bnm, so); - } - - { - int k; - mp_srcptr ap1, bp1; - mp_size_t anp, bnp; - - bp1 = b0; - bnp = bn; - if (LIKELY (an > n)) { - ap1 = sp1; - cy = mpn_sub (sp1, a0, n, a1, an - n); - sp1[n] = 0; - MPN_INCR_U (sp1, n + 1, cy); - anp = n + ap1[n]; - if (LIKELY (bn > n)) { - bp1 = sp1 + n + 1; - cy = mpn_sub (sp1 + n + 1, b0, n, b1, bn - n); - sp1[2*n+1] = 0; - MPN_INCR_U (sp1 + n + 1, n + 1, cy); - bnp = n + bp1[n]; - } - } else { - ap1 = a0; - anp = an; - } - - if (BELOW_THRESHOLD (n, MUL_FFT_MODF_THRESHOLD)) - k=0; - else - { - int mask; - k = mpn_fft_best_k (n, 0); - mask = (1<<k) - 1; - while (n & mask) {k--; mask >>=1;}; - } - if (k >= FFT_FIRST_K) - xp[n] = mpn_mul_fft (xp, n, ap1, anp, bp1, bnp, k); - else if (UNLIKELY (bp1 == b0)) - { - ASSERT (anp + bnp <= 2*n+1); - ASSERT (anp + bnp > n); - ASSERT (anp >= bnp); - mpn_mul (xp, ap1, anp, bp1, bnp); - anp = anp + bnp - n; - ASSERT (anp <= n || xp[2*n]==0); - anp-= anp > n; - cy = mpn_sub (xp, xp, n, xp + n, anp); - xp[n] = 0; - MPN_INCR_U (xp, n+1, cy); - } - else - mpn_bc_mulmod_bnp1 (xp, ap1, bp1, n, xp); - } - - /* Here the CRT recomposition begins. - - xm <- (xp + xm)/2 = (xp + xm)B^n/2 mod (B^n-1) - Division by 2 is a bitwise rotation. - - Assumes xp normalised mod (B^n+1). - - The residue class [0] is represented by [B^n-1]; except when - both input are ZERO. - */ - -#if HAVE_NATIVE_mpn_rsh1add_n || HAVE_NATIVE_mpn_rsh1add_nc -#if HAVE_NATIVE_mpn_rsh1add_nc - cy = mpn_rsh1add_nc(rp, rp, xp, n, xp[n]); /* B^n = 1 */ - hi = cy << (GMP_NUMB_BITS - 1); - cy = 0; - /* next update of rp[n-1] will set cy = 1 only if rp[n-1]+=hi - overflows, i.e. a further increment will not overflow again. */ -#else /* ! _nc */ - cy = xp[n] + mpn_rsh1add_n(rp, rp, xp, n); /* B^n = 1 */ - hi = (cy<<(GMP_NUMB_BITS-1))&GMP_NUMB_MASK; /* (cy&1) << ... */ - cy >>= 1; - /* cy = 1 only if xp[n] = 1 i.e. {xp,n} = ZERO, this implies that - the rsh1add was a simple rshift: the top bit is 0. cy=1 => hi=0. */ -#endif -#if GMP_NAIL_BITS == 0 - add_ssaaaa(cy, rp[n-1], cy, rp[n-1], 0, hi); -#else - cy += (hi & rp[n-1]) >> (GMP_NUMB_BITS-1); - rp[n-1] ^= hi; -#endif -#else /* ! HAVE_NATIVE_mpn_rsh1add_n */ -#if HAVE_NATIVE_mpn_add_nc - cy = mpn_add_nc(rp, rp, xp, n, xp[n]); -#else /* ! _nc */ - cy = xp[n] + mpn_add_n(rp, rp, xp, n); /* xp[n] == 1 implies {xp,n} == ZERO */ -#endif - cy += (rp[0]&1); - mpn_rshift(rp, rp, n, 1); - ASSERT (cy <= 2); - hi = (cy<<(GMP_NUMB_BITS-1))&GMP_NUMB_MASK; /* (cy&1) << ... */ - cy >>= 1; - /* We can have cy != 0 only if hi = 0... */ - ASSERT ((rp[n-1] & GMP_NUMB_HIGHBIT) == 0); - rp[n-1] |= hi; - /* ... rp[n-1] + cy can not overflow, the following INCR is correct. */ -#endif - ASSERT (cy <= 1); - /* Next increment can not overflow, read the previous comments about cy. */ - ASSERT ((cy == 0) || ((rp[n-1] & GMP_NUMB_HIGHBIT) == 0)); - MPN_INCR_U(rp, n, cy); - - /* Compute the highest half: - ([(xp + xm)/2 mod (B^n-1)] - xp ) * B^n - */ - if (UNLIKELY (an + bn < rn)) - { - /* Note that in this case, the only way the result can equal - zero mod B^{rn} - 1 is if one of the inputs is zero, and - then the output of both the recursive calls and this CRT - reconstruction is zero, not B^{rn} - 1. Which is good, - since the latter representation doesn't fit in the output - area.*/ - cy = mpn_sub_n (rp + n, rp, xp, an + bn - n); - - /* FIXME: This subtraction of the high parts is not really - necessary, we do it to get the carry out, and for sanity - checking. */ - cy = xp[n] + mpn_sub_nc (xp + an + bn - n, rp + an + bn - n, - xp + an + bn - n, rn - (an + bn), cy); - ASSERT (an + bn == rn - 1 || - mpn_zero_p (xp + an + bn - n + 1, rn - 1 - (an + bn))); - cy = mpn_sub_1 (rp, rp, an + bn, cy); - ASSERT (cy == (xp + an + bn - n)[0]); - } - else - { - cy = xp[n] + mpn_sub_n (rp + n, rp, xp, n); - /* cy = 1 only if {xp,n+1} is not ZERO, i.e. {rp,n} is not ZERO. - DECR will affect _at most_ the lowest n limbs. */ - MPN_DECR_U (rp, 2*n, cy); - } -#undef a0 -#undef a1 -#undef b0 -#undef b1 -#undef xp -#undef sp1 - } -} - -mp_size_t -mpn_mulmod_bnm1_next_size (mp_size_t n) -{ - mp_size_t nh; - - if (BELOW_THRESHOLD (n, MULMOD_BNM1_THRESHOLD)) - return n; - if (BELOW_THRESHOLD (n, 4 * (MULMOD_BNM1_THRESHOLD - 1) + 1)) - return (n + (2-1)) & (-2); - if (BELOW_THRESHOLD (n, 8 * (MULMOD_BNM1_THRESHOLD - 1) + 1)) - return (n + (4-1)) & (-4); - - nh = (n + 1) >> 1; - - if (BELOW_THRESHOLD (nh, MUL_FFT_MODF_THRESHOLD)) - return (n + (8-1)) & (-8); - - return 2 * mpn_fft_next_size (nh, mpn_fft_best_k (nh, 0)); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/neg.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/neg.c deleted file mode 100644 index 2d752e912d1f7ce0f5bdd3761ddbfe60d2087ad9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/neg.c +++ /dev/null @@ -1,34 +0,0 @@ -/* mpn_neg - negate an mpn. - -Copyright 2001, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define __GMP_FORCE_mpn_neg 1 - -#include "gmp.h" -#include "gmp-impl.h" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/nussbaumer_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/nussbaumer_mul.c deleted file mode 100644 index d2bf19ad56a166ec5e4786767e82d1baf6d69471..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/nussbaumer_mul.c +++ /dev/null @@ -1,71 +0,0 @@ -/* mpn_nussbaumer_mul -- Multiply {ap,an} and {bp,bn} using - Nussbaumer's negacyclic convolution. - - Contributed to the GNU project by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Multiply {ap,an} by {bp,bn}, and put the result in {pp, an+bn} */ -void -mpn_nussbaumer_mul (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn) -{ - mp_size_t rn; - mp_ptr tp; - TMP_DECL; - - ASSERT (an >= bn); - ASSERT (bn > 0); - - TMP_MARK; - - if ((ap == bp) && (an == bn)) - { - rn = mpn_sqrmod_bnm1_next_size (2*an); - tp = TMP_ALLOC_LIMBS (mpn_sqrmod_bnm1_itch (rn, an)); - mpn_sqrmod_bnm1 (pp, rn, ap, an, tp); - } - else - { - rn = mpn_mulmod_bnm1_next_size (an + bn); - tp = TMP_ALLOC_LIMBS (mpn_mulmod_bnm1_itch (rn, an, bn)); - mpn_mulmod_bnm1 (pp, rn, ap, an, bp, bn, tp); - } - - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/perfpow.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/perfpow.c deleted file mode 100644 index 5d5a80e941f5b73ab1ddf516cac51fe203983a99..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/perfpow.c +++ /dev/null @@ -1,343 +0,0 @@ -/* mpn_perfect_power_p -- mpn perfect power detection. - - Contributed to the GNU project by Martin Boij. - -Copyright 2009, 2010, 2012, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#define SMALL 20 -#define MEDIUM 100 - -/* Return non-zero if {np,nn} == {xp,xn} ^ k. - Algorithm: - For s = 1, 2, 4, ..., s_max, compute the s least significant limbs of - {xp,xn}^k. Stop if they don't match the s least significant limbs of - {np,nn}. - - FIXME: Low xn limbs can be expected to always match, if computed as a mod - B^{xn} root. So instead of using mpn_powlo, compute an approximation of the - most significant (normalized) limb of {xp,xn} ^ k (and an error bound), and - compare to {np, nn}. Or use an even cruder approximation based on fix-point - base 2 logarithm. */ -static int -pow_equals (mp_srcptr np, mp_size_t n, - mp_srcptr xp,mp_size_t xn, - mp_limb_t k, mp_bitcnt_t f, - mp_ptr tp) -{ - mp_bitcnt_t y, z; - mp_size_t bn; - mp_limb_t h, l; - - ASSERT (n > 1 || (n == 1 && np[0] > 1)); - ASSERT (np[n - 1] > 0); - ASSERT (xn > 0); - - if (xn == 1 && xp[0] == 1) - return 0; - - z = 1 + (n >> 1); - for (bn = 1; bn < z; bn <<= 1) - { - mpn_powlo (tp, xp, &k, 1, bn, tp + bn); - if (mpn_cmp (tp, np, bn) != 0) - return 0; - } - - /* Final check. Estimate the size of {xp,xn}^k before computing the power - with full precision. Optimization: It might pay off to make a more - accurate estimation of the logarithm of {xp,xn}, rather than using the - index of the MSB. */ - - MPN_SIZEINBASE_2EXP(y, xp, xn, 1); - y -= 1; /* msb_index (xp, xn) */ - - umul_ppmm (h, l, k, y); - h -= l == 0; --l; /* two-limb decrement */ - - z = f - 1; /* msb_index (np, n) */ - if (h == 0 && l <= z) - { - mp_limb_t *tp2; - mp_size_t i; - int ans; - mp_limb_t size; - TMP_DECL; - - size = l + k; - ASSERT_ALWAYS (size >= k); - - TMP_MARK; - y = 2 + size / GMP_LIMB_BITS; - tp2 = TMP_ALLOC_LIMBS (y); - - i = mpn_pow_1 (tp, xp, xn, k, tp2); - if (i == n && mpn_cmp (tp, np, n) == 0) - ans = 1; - else - ans = 0; - TMP_FREE; - return ans; - } - - return 0; -} - - -/* Return non-zero if N = {np,n} is a kth power. - I = {ip,n} = N^(-1) mod B^n. */ -static int -is_kth_power (mp_ptr rp, mp_srcptr np, - mp_limb_t k, mp_srcptr ip, - mp_size_t n, mp_bitcnt_t f, - mp_ptr tp) -{ - mp_bitcnt_t b; - mp_size_t rn, xn; - - ASSERT (n > 0); - ASSERT ((k & 1) != 0 || k == 2); - ASSERT ((np[0] & 1) != 0); - - if (k == 2) - { - b = (f + 1) >> 1; - rn = 1 + b / GMP_LIMB_BITS; - if (mpn_bsqrtinv (rp, ip, b, tp) != 0) - { - rp[rn - 1] &= (CNST_LIMB(1) << (b % GMP_LIMB_BITS)) - 1; - xn = rn; - MPN_NORMALIZE (rp, xn); - if (pow_equals (np, n, rp, xn, k, f, tp) != 0) - return 1; - - /* Check if (2^b - r)^2 == n */ - mpn_neg (rp, rp, rn); - rp[rn - 1] &= (CNST_LIMB(1) << (b % GMP_LIMB_BITS)) - 1; - MPN_NORMALIZE (rp, rn); - if (pow_equals (np, n, rp, rn, k, f, tp) != 0) - return 1; - } - } - else - { - b = 1 + (f - 1) / k; - rn = 1 + (b - 1) / GMP_LIMB_BITS; - mpn_brootinv (rp, ip, rn, k, tp); - if ((b % GMP_LIMB_BITS) != 0) - rp[rn - 1] &= (CNST_LIMB(1) << (b % GMP_LIMB_BITS)) - 1; - MPN_NORMALIZE (rp, rn); - if (pow_equals (np, n, rp, rn, k, f, tp) != 0) - return 1; - } - MPN_ZERO (rp, rn); /* Untrash rp */ - return 0; -} - -static int -perfpow (mp_srcptr np, mp_size_t n, - mp_limb_t ub, mp_limb_t g, - mp_bitcnt_t f, int neg) -{ - mp_ptr ip, tp, rp; - mp_limb_t k; - int ans; - mp_bitcnt_t b; - gmp_primesieve_t ps; - TMP_DECL; - - ASSERT (n > 0); - ASSERT ((np[0] & 1) != 0); - ASSERT (ub > 0); - - TMP_MARK; - gmp_init_primesieve (&ps); - b = (f + 3) >> 1; - - TMP_ALLOC_LIMBS_3 (ip, n, rp, n, tp, 5 * n); - - MPN_ZERO (rp, n); - - /* FIXME: It seems the inverse in ninv is needed only to get non-inverted - roots. I.e., is_kth_power computes n^{1/2} as (n^{-1})^{-1/2} and - similarly for nth roots. It should be more efficient to compute n^{1/2} as - n * n^{-1/2}, with a mullo instead of a binvert. And we can do something - similar for kth roots if we switch to an iteration converging to n^{1/k - - 1}, and we can then eliminate this binvert call. */ - mpn_binvert (ip, np, 1 + (b - 1) / GMP_LIMB_BITS, tp); - if (b % GMP_LIMB_BITS) - ip[(b - 1) / GMP_LIMB_BITS] &= (CNST_LIMB(1) << (b % GMP_LIMB_BITS)) - 1; - - if (neg) - gmp_nextprime (&ps); - - ans = 0; - if (g > 0) - { - ub = MIN (ub, g + 1); - while ((k = gmp_nextprime (&ps)) < ub) - { - if ((g % k) == 0) - { - if (is_kth_power (rp, np, k, ip, n, f, tp) != 0) - { - ans = 1; - goto ret; - } - } - } - } - else - { - while ((k = gmp_nextprime (&ps)) < ub) - { - if (is_kth_power (rp, np, k, ip, n, f, tp) != 0) - { - ans = 1; - goto ret; - } - } - } - ret: - TMP_FREE; - return ans; -} - -static const unsigned short nrtrial[] = { 100, 500, 1000 }; - -/* Table of (log_{p_i} 2) values, where p_i is the (nrtrial[i] + 1)'th prime - number. */ -static const double logs[] = - { 0.1099457228193620, 0.0847016403115322, 0.0772048195144415 }; - -int -mpn_perfect_power_p (mp_srcptr np, mp_size_t n) -{ - mp_limb_t *nc, factor, g; - mp_limb_t exp, d; - mp_bitcnt_t twos, count; - int ans, where, neg, trial; - TMP_DECL; - - neg = n < 0; - if (neg) - { - n = -n; - } - - if (n == 0 || (n == 1 && np[0] == 1)) /* Valgrind doesn't like - (n <= (np[0] == 1)) */ - return 1; - - TMP_MARK; - - count = 0; - - twos = mpn_scan1 (np, 0); - if (twos != 0) - { - mp_size_t s; - if (twos == 1) - { - return 0; - } - s = twos / GMP_LIMB_BITS; - if (s + 1 == n && POW2_P (np[s])) - { - return ! (neg && POW2_P (twos)); - } - count = twos % GMP_LIMB_BITS; - n -= s; - np += s; - if (count > 0) - { - nc = TMP_ALLOC_LIMBS (n); - mpn_rshift (nc, np, n, count); - n -= (nc[n - 1] == 0); - np = nc; - } - } - g = twos; - - trial = (n > SMALL) + (n > MEDIUM); - - where = 0; - factor = mpn_trialdiv (np, n, nrtrial[trial], &where); - - if (factor != 0) - { - if (count == 0) /* We did not allocate nc yet. */ - { - nc = TMP_ALLOC_LIMBS (n); - } - - /* Remove factors found by trialdiv. Optimization: If remove - define _itch, we can allocate its scratch just once */ - - do - { - binvert_limb (d, factor); - - /* After the first round we always have nc == np */ - exp = mpn_remove (nc, &n, np, n, &d, 1, ~(mp_bitcnt_t)0); - - if (g == 0) - g = exp; - else - g = mpn_gcd_1 (&g, 1, exp); - - if (g == 1) - { - ans = 0; - goto ret; - } - - if ((n == 1) & (nc[0] == 1)) - { - ans = ! (neg && POW2_P (g)); - goto ret; - } - - np = nc; - factor = mpn_trialdiv (np, n, nrtrial[trial], &where); - } - while (factor != 0); - } - - MPN_SIZEINBASE_2EXP(count, np, n, 1); /* log (np) + 1 */ - d = (mp_limb_t) (count * logs[trial] + 1e-9) + 1; - ans = perfpow (np, n, d, g, count, neg); - - ret: - TMP_FREE; - return ans; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/perfsqr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/perfsqr.c deleted file mode 100644 index bdd82ccd96e47c20c154822c100a4436114318b2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/perfsqr.c +++ /dev/null @@ -1,240 +0,0 @@ -/* mpn_perfect_square_p(u,usize) -- Return non-zero if U is a perfect square, - zero otherwise. - -Copyright 1991, 1993, 1994, 1996, 1997, 2000-2002, 2005, 2012 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#include "perfsqr.h" - - -/* change this to "#define TRACE(x) x" for diagnostics */ -#define TRACE(x) - - - -/* PERFSQR_MOD_* detects non-squares using residue tests. - - A macro PERFSQR_MOD_TEST is setup by gen-psqr.c in perfsqr.h. It takes - {up,usize} modulo a selected modulus to get a remainder r. For 32-bit or - 64-bit limbs this modulus will be 2^24-1 or 2^48-1 using PERFSQR_MOD_34, - or for other limb or nail sizes a PERFSQR_PP is chosen and PERFSQR_MOD_PP - used. PERFSQR_PP_NORM and PERFSQR_PP_INVERTED are pre-calculated in this - case too. - - PERFSQR_MOD_TEST then makes various calls to PERFSQR_MOD_1 or - PERFSQR_MOD_2 with divisors d which are factors of the modulus, and table - data indicating residues and non-residues modulo those divisors. The - table data is in 1 or 2 limbs worth of bits respectively, per the size of - each d. - - A "modexact" style remainder is taken to reduce r modulo d. - PERFSQR_MOD_IDX implements this, producing an index "idx" for use with - the table data. Notice there's just one multiplication by a constant - "inv", for each d. - - The modexact doesn't produce a true r%d remainder, instead idx satisfies - "-(idx<<PERFSQR_MOD_BITS) == r mod d". Because d is odd, this factor - -2^PERFSQR_MOD_BITS is a one-to-one mapping between r and idx, and is - accounted for by having the table data suitably permuted. - - The remainder r fits within PERFSQR_MOD_BITS which is less than a limb. - In fact the GMP_LIMB_BITS - PERFSQR_MOD_BITS spare bits are enough to fit - each divisor d meaning the modexact multiply can take place entirely - within one limb, giving the compiler the chance to optimize it, in a way - that say umul_ppmm would not give. - - There's no need for the divisors d to be prime, in fact gen-psqr.c makes - a deliberate effort to combine factors so as to reduce the number of - separate tests done on r. But such combining is limited to d <= - 2*GMP_LIMB_BITS so that the table data fits in at most 2 limbs. - - Alternatives: - - It'd be possible to use bigger divisors d, and more than 2 limbs of table - data, but this doesn't look like it would be of much help to the prime - factors in the usual moduli 2^24-1 or 2^48-1. - - The moduli 2^24-1 or 2^48-1 are nothing particularly special, they're - just easy to calculate (see mpn_mod_34lsub1) and have a nice set of prime - factors. 2^32-1 and 2^64-1 would be equally easy to calculate, but have - fewer prime factors. - - The nails case usually ends up using mpn_mod_1, which is a lot slower - than mpn_mod_34lsub1. Perhaps other such special moduli could be found - for the nails case. Two-term things like 2^30-2^15-1 might be - candidates. Or at worst some on-the-fly de-nailing would allow the plain - 2^24-1 to be used. Currently nails are too preliminary to be worried - about. - -*/ - -#define PERFSQR_MOD_MASK ((CNST_LIMB(1) << PERFSQR_MOD_BITS) - 1) - -#define MOD34_BITS (GMP_NUMB_BITS / 4 * 3) -#define MOD34_MASK ((CNST_LIMB(1) << MOD34_BITS) - 1) - -#define PERFSQR_MOD_34(r, up, usize) \ - do { \ - (r) = mpn_mod_34lsub1 (up, usize); \ - (r) = ((r) & MOD34_MASK) + ((r) >> MOD34_BITS); \ - } while (0) - -/* FIXME: The %= here isn't good, and might destroy any savings from keeping - the PERFSQR_MOD_IDX stuff within a limb (rather than needing umul_ppmm). - Maybe a new sort of mpn_preinv_mod_1 could accept an unnormalized divisor - and a shift count, like mpn_preinv_divrem_1. But mod_34lsub1 is our - normal case, so lets not worry too much about mod_1. */ -#define PERFSQR_MOD_PP(r, up, usize) \ - do { \ - if (BELOW_THRESHOLD (usize, PREINV_MOD_1_TO_MOD_1_THRESHOLD)) \ - { \ - (r) = mpn_preinv_mod_1 (up, usize, PERFSQR_PP_NORM, \ - PERFSQR_PP_INVERTED); \ - (r) %= PERFSQR_PP; \ - } \ - else \ - { \ - (r) = mpn_mod_1 (up, usize, PERFSQR_PP); \ - } \ - } while (0) - -#define PERFSQR_MOD_IDX(idx, r, d, inv) \ - do { \ - mp_limb_t q; \ - ASSERT ((r) <= PERFSQR_MOD_MASK); \ - ASSERT ((((inv) * (d)) & PERFSQR_MOD_MASK) == 1); \ - ASSERT (MP_LIMB_T_MAX / (d) >= PERFSQR_MOD_MASK); \ - \ - q = ((r) * (inv)) & PERFSQR_MOD_MASK; \ - ASSERT (r == ((q * (d)) & PERFSQR_MOD_MASK)); \ - (idx) = (q * (d)) >> PERFSQR_MOD_BITS; \ - } while (0) - -#define PERFSQR_MOD_1(r, d, inv, mask) \ - do { \ - unsigned idx; \ - ASSERT ((d) <= GMP_LIMB_BITS); \ - PERFSQR_MOD_IDX(idx, r, d, inv); \ - TRACE (printf (" PERFSQR_MOD_1 d=%u r=%lu idx=%u\n", \ - d, r%d, idx)); \ - if ((((mask) >> idx) & 1) == 0) \ - { \ - TRACE (printf (" non-square\n")); \ - return 0; \ - } \ - } while (0) - -/* The expression "(int) idx - GMP_LIMB_BITS < 0" lets the compiler use the - sign bit from "idx-GMP_LIMB_BITS", which might help avoid a branch. */ -#define PERFSQR_MOD_2(r, d, inv, mhi, mlo) \ - do { \ - mp_limb_t m; \ - unsigned idx; \ - ASSERT ((d) <= 2*GMP_LIMB_BITS); \ - \ - PERFSQR_MOD_IDX (idx, r, d, inv); \ - TRACE (printf (" PERFSQR_MOD_2 d=%u r=%lu idx=%u\n", \ - d, r%d, idx)); \ - m = ((int) idx - GMP_LIMB_BITS < 0 ? (mlo) : (mhi)); \ - idx %= GMP_LIMB_BITS; \ - if (((m >> idx) & 1) == 0) \ - { \ - TRACE (printf (" non-square\n")); \ - return 0; \ - } \ - } while (0) - - -int -mpn_perfect_square_p (mp_srcptr up, mp_size_t usize) -{ - ASSERT (usize >= 1); - - TRACE (gmp_printf ("mpn_perfect_square_p %Nd\n", up, usize)); - - /* The first test excludes 212/256 (82.8%) of the perfect square candidates - in O(1) time. */ - { - unsigned idx = up[0] % 0x100; - if (((sq_res_0x100[idx / GMP_LIMB_BITS] - >> (idx % GMP_LIMB_BITS)) & 1) == 0) - return 0; - } - -#if 0 - /* Check that we have even multiplicity of 2, and then check that the rest is - a possible perfect square. Leave disabled until we can determine this - really is an improvement. It it is, it could completely replace the - simple probe above, since this should throw out more non-squares, but at - the expense of somewhat more cycles. */ - { - mp_limb_t lo; - int cnt; - lo = up[0]; - while (lo == 0) - up++, lo = up[0], usize--; - count_trailing_zeros (cnt, lo); - if ((cnt & 1) != 0) - return 0; /* return of not even multiplicity of 2 */ - lo >>= cnt; /* shift down to align lowest non-zero bit */ - lo >>= 1; /* shift away lowest non-zero bit */ - if ((lo & 3) != 0) - return 0; - } -#endif - - - /* The second test uses mpn_mod_34lsub1 or mpn_mod_1 to detect non-squares - according to their residues modulo small primes (or powers of - primes). See perfsqr.h. */ - PERFSQR_MOD_TEST (up, usize); - - - /* For the third and last test, we finally compute the square root, - to make sure we've really got a perfect square. */ - { - mp_ptr root_ptr; - int res; - TMP_DECL; - - TMP_MARK; - root_ptr = TMP_ALLOC_LIMBS ((usize + 1) / 2); - - /* Iff mpn_sqrtrem returns zero, the square is perfect. */ - res = ! mpn_sqrtrem (root_ptr, NULL, up, usize); - TMP_FREE; - - return res; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/popham.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/popham.c deleted file mode 100644 index 13e529b7cdaaf9760e8b79dbdb2cf2897c296e5a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/popham.c +++ /dev/null @@ -1,126 +0,0 @@ -/* mpn_popcount, mpn_hamdist -- mpn bit population count/hamming distance. - -Copyright 1994, 1996, 2000-2002, 2005, 2011, 2012 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#if OPERATION_popcount -#define FNAME mpn_popcount -#define POPHAM(u,v) u -#endif - -#if OPERATION_hamdist -#define FNAME mpn_hamdist -#define POPHAM(u,v) u ^ v -#endif - -mp_bitcnt_t -FNAME (mp_srcptr up, -#if OPERATION_hamdist - mp_srcptr vp, -#endif - mp_size_t n) __GMP_NOTHROW -{ - mp_bitcnt_t result = 0; - mp_limb_t p0, p1, p2, p3, x, p01, p23; - mp_size_t i; - - ASSERT (n >= 1); /* Actually, this code handles any n, but some - assembly implementations do not. */ - - for (i = n >> 2; i != 0; i--) - { - p0 = POPHAM (up[0], vp[0]); - p0 -= (p0 >> 1) & MP_LIMB_T_MAX/3; /* 2 0-2 */ - p0 = ((p0 >> 2) & MP_LIMB_T_MAX/5) + (p0 & MP_LIMB_T_MAX/5); /* 4 0-4 */ - - p1 = POPHAM (up[1], vp[1]); - p1 -= (p1 >> 1) & MP_LIMB_T_MAX/3; /* 2 0-2 */ - p1 = ((p1 >> 2) & MP_LIMB_T_MAX/5) + (p1 & MP_LIMB_T_MAX/5); /* 4 0-4 */ - - p01 = p0 + p1; /* 8 0-8 */ - p01 = ((p01 >> 4) & MP_LIMB_T_MAX/17) + (p01 & MP_LIMB_T_MAX/17); /* 8 0-16 */ - - p2 = POPHAM (up[2], vp[2]); - p2 -= (p2 >> 1) & MP_LIMB_T_MAX/3; /* 2 0-2 */ - p2 = ((p2 >> 2) & MP_LIMB_T_MAX/5) + (p2 & MP_LIMB_T_MAX/5); /* 4 0-4 */ - - p3 = POPHAM (up[3], vp[3]); - p3 -= (p3 >> 1) & MP_LIMB_T_MAX/3; /* 2 0-2 */ - p3 = ((p3 >> 2) & MP_LIMB_T_MAX/5) + (p3 & MP_LIMB_T_MAX/5); /* 4 0-4 */ - - p23 = p2 + p3; /* 8 0-8 */ - p23 = ((p23 >> 4) & MP_LIMB_T_MAX/17) + (p23 & MP_LIMB_T_MAX/17); /* 8 0-16 */ - - x = p01 + p23; /* 8 0-32 */ - x = (x >> 8) + x; /* 8 0-64 */ - x = (x >> 16) + x; /* 8 0-128 */ -#if GMP_LIMB_BITS > 32 - x = ((x >> 32) & 0xff) + (x & 0xff); /* 8 0-256 */ - result += x; -#else - result += x & 0xff; -#endif - up += 4; -#if OPERATION_hamdist - vp += 4; -#endif - } - - n &= 3; - if (n != 0) - { - x = 0; - do - { - p0 = POPHAM (up[0], vp[0]); - p0 -= (p0 >> 1) & MP_LIMB_T_MAX/3; /* 2 0-2 */ - p0 = ((p0 >> 2) & MP_LIMB_T_MAX/5) + (p0 & MP_LIMB_T_MAX/5); /* 4 0-4 */ - p0 = ((p0 >> 4) + p0) & MP_LIMB_T_MAX/17; /* 8 0-8 */ - - x += p0; - up += 1; -#if OPERATION_hamdist - vp += 1; -#endif - } - while (--n); - - x = (x >> 8) + x; - x = (x >> 16) + x; -#if GMP_LIMB_BITS > 32 - x = (x >> 32) + x; -#endif - result += x & 0xff; - } - - return result; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/pow_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/pow_1.c deleted file mode 100644 index 2333206554ca22df3b3f3bc7ddcbcca14194588f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/pow_1.c +++ /dev/null @@ -1,134 +0,0 @@ -/* mpn_pow_1 -- Compute powers R = U^exp. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2002, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -mp_size_t -mpn_pow_1 (mp_ptr rp, mp_srcptr bp, mp_size_t bn, mp_limb_t exp, mp_ptr tp) -{ - mp_limb_t x; - int cnt, i; - mp_size_t rn; - int par; - - ASSERT (bn >= 1); - /* FIXME: Add operand overlap criteria */ - - if (exp <= 1) - { - if (exp == 0) - { - rp[0] = 1; - return 1; - } - else - { - MPN_COPY (rp, bp, bn); - return bn; - } - } - - /* Count number of bits in exp, and compute where to put initial square in - order to magically get results in the entry rp. Use simple code, - optimized for small exp. For large exp, the bignum operations will take - so much time that the slowness of this code will be negligible. */ - par = 0; - cnt = GMP_LIMB_BITS; - x = exp; - do - { - par ^= x; - cnt--; - x >>= 1; - } while (x != 0); - exp <<= cnt; - - if (bn == 1) - { - mp_limb_t bl = bp[0]; - - if ((cnt & 1) != 0) - MP_PTR_SWAP (rp, tp); - - mpn_sqr (rp, bp, bn); - rn = 2 * bn; rn -= rp[rn - 1] == 0; - - for (i = GMP_LIMB_BITS - cnt - 1;;) - { - exp <<= 1; - if ((exp & GMP_LIMB_HIGHBIT) != 0) - { - rp[rn] = mpn_mul_1 (rp, rp, rn, bl); - rn += rp[rn] != 0; - } - - if (--i == 0) - break; - - mpn_sqr (tp, rp, rn); - rn = 2 * rn; rn -= tp[rn - 1] == 0; - MP_PTR_SWAP (rp, tp); - } - } - else - { - if (((par ^ cnt) & 1) == 0) - MP_PTR_SWAP (rp, tp); - - mpn_sqr (rp, bp, bn); - rn = 2 * bn; rn -= rp[rn - 1] == 0; - - for (i = GMP_LIMB_BITS - cnt - 1;;) - { - exp <<= 1; - if ((exp & GMP_LIMB_HIGHBIT) != 0) - { - rn = rn + bn - (mpn_mul (tp, rp, rn, bp, bn) == 0); - MP_PTR_SWAP (rp, tp); - } - - if (--i == 0) - break; - - mpn_sqr (tp, rp, rn); - rn = 2 * rn; rn -= tp[rn - 1] == 0; - MP_PTR_SWAP (rp, tp); - } - } - - return rn; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/powlo.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/powlo.c deleted file mode 100644 index bdd5e1703bc0a1cd338b929ab46122cf49326c98..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/powlo.c +++ /dev/null @@ -1,174 +0,0 @@ -/* mpn_powlo -- Compute R = U^E mod B^n, where B is the limb base. - -Copyright 2007-2009, 2012, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -#define getbit(p,bi) \ - ((p[(bi - 1) / GMP_LIMB_BITS] >> (bi - 1) % GMP_LIMB_BITS) & 1) - -static inline mp_limb_t -getbits (const mp_limb_t *p, mp_bitcnt_t bi, int nbits) -{ - int nbits_in_r; - mp_limb_t r; - mp_size_t i; - - if (bi < nbits) - { - return p[0] & (((mp_limb_t) 1 << bi) - 1); - } - else - { - bi -= nbits; /* bit index of low bit to extract */ - i = bi / GMP_NUMB_BITS; /* word index of low bit to extract */ - bi %= GMP_NUMB_BITS; /* bit index in low word */ - r = p[i] >> bi; /* extract (low) bits */ - nbits_in_r = GMP_NUMB_BITS - bi; /* number of bits now in r */ - if (nbits_in_r < nbits) /* did we get enough bits? */ - r += p[i + 1] << nbits_in_r; /* prepend bits from higher word */ - return r & (((mp_limb_t ) 1 << nbits) - 1); - } -} - -static inline int -win_size (mp_bitcnt_t eb) -{ - int k; - static mp_bitcnt_t x[] = {1,7,25,81,241,673,1793,4609,11521,28161,~(mp_bitcnt_t)0}; - ASSERT (eb > 1); - for (k = 1; eb > x[k]; ++k) - ; - return k; -} - -/* rp[n-1..0] = bp[n-1..0] ^ ep[en-1..0] mod B^n, B is the limb base. - Requires that ep[en-1] is non-zero. - Uses scratch space tp[3n-1..0], i.e., 3n words. */ -/* We only use n words in the scratch space, we should pass tp + n to - mullo/sqrlo as a temporary area, it is needed. */ -void -mpn_powlo (mp_ptr rp, mp_srcptr bp, - mp_srcptr ep, mp_size_t en, - mp_size_t n, mp_ptr tp) -{ - int cnt; - mp_bitcnt_t ebi; - int windowsize, this_windowsize; - mp_limb_t expbits; - mp_limb_t *pp, *this_pp, *last_pp; - long i; - TMP_DECL; - - ASSERT (en > 1 || (en == 1 && ep[0] > 1)); - - TMP_MARK; - - MPN_SIZEINBASE_2EXP(ebi, ep, en, 1); - - windowsize = win_size (ebi); - ASSERT (windowsize < ebi); - - pp = TMP_ALLOC_LIMBS ((n << (windowsize - 1))); - - this_pp = pp; - - MPN_COPY (this_pp, bp, n); - - /* Store b^2 in tp. */ - mpn_sqrlo (tp, bp, n); - - /* Precompute odd powers of b and put them in the temporary area at pp. */ - for (i = (1 << (windowsize - 1)) - 1; i > 0; i--) - { - last_pp = this_pp; - this_pp += n; - mpn_mullo_n (this_pp, last_pp, tp, n); - } - - expbits = getbits (ep, ebi, windowsize); - - /* FIXME: for even expbits, we can init with a mullo. */ - count_trailing_zeros (cnt, expbits); - ebi -= windowsize; - ebi += cnt; - expbits >>= cnt; - - MPN_COPY (rp, pp + n * (expbits >> 1), n); - - do - { - while (getbit (ep, ebi) == 0) - { - mpn_sqrlo (tp, rp, n); - MPN_COPY (rp, tp, n); - if (--ebi == 0) - goto done; - } - - /* The next bit of the exponent is 1. Now extract the largest block of - bits <= windowsize, and such that the least significant bit is 1. */ - - expbits = getbits (ep, ebi, windowsize); - this_windowsize = windowsize; - if (ebi < windowsize) - { - this_windowsize -= windowsize - ebi; - ebi = 0; - } - else - ebi -= windowsize; - - count_trailing_zeros (cnt, expbits); - this_windowsize -= cnt; - ebi += cnt; - expbits >>= cnt; - - while (this_windowsize > 1) - { - mpn_sqrlo (tp, rp, n); - mpn_sqrlo (rp, tp, n); - this_windowsize -= 2; - } - - if (this_windowsize != 0) - mpn_sqrlo (tp, rp, n); - else - MPN_COPY (tp, rp, n); - - mpn_mullo_n (rp, tp, pp + n * (expbits >> 1), n); - } while (ebi != 0); - - done: - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/powm.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/powm.c deleted file mode 100644 index 0cd0da46ea935b2a6253dac3c8bb6ba611db9dbd..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/powm.c +++ /dev/null @@ -1,589 +0,0 @@ -/* mpn_powm -- Compute R = U^E mod M. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2007-2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -/* - BASIC ALGORITHM, Compute U^E mod M, where M < B^n is odd. - - 1. W <- U - - 2. T <- (B^n * U) mod M Convert to REDC form - - 3. Compute table U^1, U^3, U^5... of E-dependent size - - 4. While there are more bits in E - W <- power left-to-right base-k - - - TODO: - - * Make getbits a macro, thereby allowing it to update the index operand. - That will simplify the code using getbits. (Perhaps make getbits' sibling - getbit then have similar form, for symmetry.) - - * Write an itch function. Or perhaps get rid of tp parameter since the huge - pp area is allocated locally anyway? - - * Choose window size without looping. (Superoptimize or think(tm).) - - * Handle small bases with initial, reduction-free exponentiation. - - * Call new division functions, not mpn_tdiv_qr. - - * Consider special code for one-limb M. - - * How should we handle the redc1/redc2/redc_n choice? - - redc1: T(binvert_1limb) + e * (n) * (T(mullo-1x1) + n*T(addmul_1)) - - redc2: T(binvert_2limbs) + e * (n/2) * (T(mullo-2x2) + n*T(addmul_2)) - - redc_n: T(binvert_nlimbs) + e * (T(mullo-nxn) + T(M(n))) - This disregards the addmul_N constant term, but we could think of - that as part of the respective mullo. - - * When U (the base) is small, we should start the exponentiation with plain - operations, then convert that partial result to REDC form. - - * When U is just one limb, should it be handled without the k-ary tricks? - We could keep a factor of B^n in W, but use U' = BU as base. After - multiplying by this (pseudo two-limb) number, we need to multiply by 1/B - mod M. -*/ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#undef MPN_REDC_1 -#define MPN_REDC_1(rp, up, mp, n, invm) \ - do { \ - mp_limb_t cy; \ - cy = mpn_redc_1 (rp, up, mp, n, invm); \ - if (cy != 0) \ - mpn_sub_n (rp, rp, mp, n); \ - } while (0) - -#undef MPN_REDC_2 -#define MPN_REDC_2(rp, up, mp, n, mip) \ - do { \ - mp_limb_t cy; \ - cy = mpn_redc_2 (rp, up, mp, n, mip); \ - if (cy != 0) \ - mpn_sub_n (rp, rp, mp, n); \ - } while (0) - -#if HAVE_NATIVE_mpn_addmul_2 || HAVE_NATIVE_mpn_redc_2 -#define WANT_REDC_2 1 -#endif - -#define getbit(p,bi) \ - ((p[(bi - 1) / GMP_LIMB_BITS] >> (bi - 1) % GMP_LIMB_BITS) & 1) - -static inline mp_limb_t -getbits (const mp_limb_t *p, mp_bitcnt_t bi, int nbits) -{ - int nbits_in_r; - mp_limb_t r; - mp_size_t i; - - if (bi < nbits) - { - return p[0] & (((mp_limb_t) 1 << bi) - 1); - } - else - { - bi -= nbits; /* bit index of low bit to extract */ - i = bi / GMP_NUMB_BITS; /* word index of low bit to extract */ - bi %= GMP_NUMB_BITS; /* bit index in low word */ - r = p[i] >> bi; /* extract (low) bits */ - nbits_in_r = GMP_NUMB_BITS - bi; /* number of bits now in r */ - if (nbits_in_r < nbits) /* did we get enough bits? */ - r += p[i + 1] << nbits_in_r; /* prepend bits from higher word */ - return r & (((mp_limb_t ) 1 << nbits) - 1); - } -} - -static inline int -win_size (mp_bitcnt_t eb) -{ - int k; - static mp_bitcnt_t x[] = {0,7,25,81,241,673,1793,4609,11521,28161,~(mp_bitcnt_t)0}; - for (k = 1; eb > x[k]; k++) - ; - return k; -} - -/* Convert U to REDC form, U_r = B^n * U mod M */ -static void -redcify (mp_ptr rp, mp_srcptr up, mp_size_t un, mp_srcptr mp, mp_size_t n) -{ - mp_ptr tp, qp; - TMP_DECL; - TMP_MARK; - - TMP_ALLOC_LIMBS_2 (tp, un + n, qp, un + 1); - - MPN_ZERO (tp, n); - MPN_COPY (tp + n, up, un); - mpn_tdiv_qr (qp, rp, 0L, tp, un + n, mp, n); - TMP_FREE; -} - -/* rp[n-1..0] = bp[bn-1..0] ^ ep[en-1..0] mod mp[n-1..0] - Requires that mp[n-1..0] is odd. - Requires that ep[en-1..0] is > 1. - Uses scratch space at tp of MAX(mpn_binvert_itch(n),2n) limbs. */ -void -mpn_powm (mp_ptr rp, mp_srcptr bp, mp_size_t bn, - mp_srcptr ep, mp_size_t en, - mp_srcptr mp, mp_size_t n, mp_ptr tp) -{ - mp_limb_t ip[2], *mip; - int cnt; - mp_bitcnt_t ebi; - int windowsize, this_windowsize; - mp_limb_t expbits; - mp_ptr pp, this_pp; - long i; - TMP_DECL; - - ASSERT (en > 1 || (en == 1 && ep[0] > 1)); - ASSERT (n >= 1 && ((mp[0] & 1) != 0)); - - TMP_MARK; - - MPN_SIZEINBASE_2EXP(ebi, ep, en, 1); - -#if 0 - if (bn < n) - { - /* Do the first few exponent bits without mod reductions, - until the result is greater than the mod argument. */ - for (;;) - { - mpn_sqr (tp, this_pp, tn); - tn = tn * 2 - 1, tn += tp[tn] != 0; - if (getbit (ep, ebi) != 0) - mpn_mul (..., tp, tn, bp, bn); - ebi--; - } - } -#endif - - windowsize = win_size (ebi); - -#if WANT_REDC_2 - if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_2_THRESHOLD)) - { - mip = ip; - binvert_limb (mip[0], mp[0]); - mip[0] = -mip[0]; - } - else if (BELOW_THRESHOLD (n, REDC_2_TO_REDC_N_THRESHOLD)) - { - mip = ip; - mpn_binvert (mip, mp, 2, tp); - mip[0] = -mip[0]; mip[1] = ~mip[1]; - } -#else - if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_N_THRESHOLD)) - { - mip = ip; - binvert_limb (mip[0], mp[0]); - mip[0] = -mip[0]; - } -#endif - else - { - mip = TMP_ALLOC_LIMBS (n); - mpn_binvert (mip, mp, n, tp); - } - - pp = TMP_ALLOC_LIMBS (n << (windowsize - 1)); - - this_pp = pp; - redcify (this_pp, bp, bn, mp, n); - - /* Store b^2 at rp. */ - mpn_sqr (tp, this_pp, n); -#if WANT_REDC_2 - if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_2_THRESHOLD)) - MPN_REDC_1 (rp, tp, mp, n, mip[0]); - else if (BELOW_THRESHOLD (n, REDC_2_TO_REDC_N_THRESHOLD)) - MPN_REDC_2 (rp, tp, mp, n, mip); -#else - if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_N_THRESHOLD)) - MPN_REDC_1 (rp, tp, mp, n, mip[0]); -#endif - else - mpn_redc_n (rp, tp, mp, n, mip); - - /* Precompute odd powers of b and put them in the temporary area at pp. */ - for (i = (1 << (windowsize - 1)) - 1; i > 0; i--) - { - mpn_mul_n (tp, this_pp, rp, n); - this_pp += n; -#if WANT_REDC_2 - if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_2_THRESHOLD)) - MPN_REDC_1 (this_pp, tp, mp, n, mip[0]); - else if (BELOW_THRESHOLD (n, REDC_2_TO_REDC_N_THRESHOLD)) - MPN_REDC_2 (this_pp, tp, mp, n, mip); -#else - if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_N_THRESHOLD)) - MPN_REDC_1 (this_pp, tp, mp, n, mip[0]); -#endif - else - mpn_redc_n (this_pp, tp, mp, n, mip); - } - - expbits = getbits (ep, ebi, windowsize); - if (ebi < windowsize) - ebi = 0; - else - ebi -= windowsize; - - count_trailing_zeros (cnt, expbits); - ebi += cnt; - expbits >>= cnt; - - MPN_COPY (rp, pp + n * (expbits >> 1), n); - -#define INNERLOOP \ - while (ebi != 0) \ - { \ - while (getbit (ep, ebi) == 0) \ - { \ - MPN_SQR (tp, rp, n); \ - MPN_REDUCE (rp, tp, mp, n, mip); \ - ebi--; \ - if (ebi == 0) \ - goto done; \ - } \ - \ - /* The next bit of the exponent is 1. Now extract the largest \ - block of bits <= windowsize, and such that the least \ - significant bit is 1. */ \ - \ - expbits = getbits (ep, ebi, windowsize); \ - this_windowsize = windowsize; \ - if (ebi < windowsize) \ - { \ - this_windowsize -= windowsize - ebi; \ - ebi = 0; \ - } \ - else \ - ebi -= windowsize; \ - \ - count_trailing_zeros (cnt, expbits); \ - this_windowsize -= cnt; \ - ebi += cnt; \ - expbits >>= cnt; \ - \ - do \ - { \ - MPN_SQR (tp, rp, n); \ - MPN_REDUCE (rp, tp, mp, n, mip); \ - this_windowsize--; \ - } \ - while (this_windowsize != 0); \ - \ - MPN_MUL_N (tp, rp, pp + n * (expbits >> 1), n); \ - MPN_REDUCE (rp, tp, mp, n, mip); \ - } - - -#if WANT_REDC_2 - if (REDC_1_TO_REDC_2_THRESHOLD < MUL_TOOM22_THRESHOLD) - { - if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_2_THRESHOLD)) - { - if (REDC_1_TO_REDC_2_THRESHOLD < SQR_BASECASE_THRESHOLD - || BELOW_THRESHOLD (n, SQR_BASECASE_THRESHOLD)) - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_mul_basecase (r,a,n,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_1 (rp, tp, mp, n, mip[0]) - INNERLOOP; - } - else - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_sqr_basecase (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_1 (rp, tp, mp, n, mip[0]) - INNERLOOP; - } - } - else if (BELOW_THRESHOLD (n, MUL_TOOM22_THRESHOLD)) - { - if (MUL_TOOM22_THRESHOLD < SQR_BASECASE_THRESHOLD - || BELOW_THRESHOLD (n, SQR_BASECASE_THRESHOLD)) - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_mul_basecase (r,a,n,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_2 (rp, tp, mp, n, mip) - INNERLOOP; - } - else - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_sqr_basecase (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_2 (rp, tp, mp, n, mip) - INNERLOOP; - } - } - else if (BELOW_THRESHOLD (n, REDC_2_TO_REDC_N_THRESHOLD)) - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_n (r,a,b,n) -#define MPN_SQR(r,a,n) mpn_sqr (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_2 (rp, tp, mp, n, mip) - INNERLOOP; - } - else - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_n (r,a,b,n) -#define MPN_SQR(r,a,n) mpn_sqr (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) mpn_redc_n (rp, tp, mp, n, mip) - INNERLOOP; - } - } - else - { - if (BELOW_THRESHOLD (n, MUL_TOOM22_THRESHOLD)) - { - if (MUL_TOOM22_THRESHOLD < SQR_BASECASE_THRESHOLD - || BELOW_THRESHOLD (n, SQR_BASECASE_THRESHOLD)) - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_mul_basecase (r,a,n,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_1 (rp, tp, mp, n, mip[0]) - INNERLOOP; - } - else - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_sqr_basecase (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_1 (rp, tp, mp, n, mip[0]) - INNERLOOP; - } - } - else if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_2_THRESHOLD)) - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_n (r,a,b,n) -#define MPN_SQR(r,a,n) mpn_sqr (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_1 (rp, tp, mp, n, mip[0]) - INNERLOOP; - } - else if (BELOW_THRESHOLD (n, REDC_2_TO_REDC_N_THRESHOLD)) - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_n (r,a,b,n) -#define MPN_SQR(r,a,n) mpn_sqr (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_2 (rp, tp, mp, n, mip) - INNERLOOP; - } - else - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_n (r,a,b,n) -#define MPN_SQR(r,a,n) mpn_sqr (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) mpn_redc_n (rp, tp, mp, n, mip) - INNERLOOP; - } - } - -#else /* WANT_REDC_2 */ - - if (REDC_1_TO_REDC_N_THRESHOLD < MUL_TOOM22_THRESHOLD) - { - if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_N_THRESHOLD)) - { - if (REDC_1_TO_REDC_N_THRESHOLD < SQR_BASECASE_THRESHOLD - || BELOW_THRESHOLD (n, SQR_BASECASE_THRESHOLD)) - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_mul_basecase (r,a,n,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_1 (rp, tp, mp, n, mip[0]) - INNERLOOP; - } - else - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_sqr_basecase (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_1 (rp, tp, mp, n, mip[0]) - INNERLOOP; - } - } - else if (BELOW_THRESHOLD (n, MUL_TOOM22_THRESHOLD)) - { - if (MUL_TOOM22_THRESHOLD < SQR_BASECASE_THRESHOLD - || BELOW_THRESHOLD (n, SQR_BASECASE_THRESHOLD)) - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_mul_basecase (r,a,n,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) mpn_redc_n (rp, tp, mp, n, mip) - INNERLOOP; - } - else - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_sqr_basecase (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) mpn_redc_n (rp, tp, mp, n, mip) - INNERLOOP; - } - } - else - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_n (r,a,b,n) -#define MPN_SQR(r,a,n) mpn_sqr (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) mpn_redc_n (rp, tp, mp, n, mip) - INNERLOOP; - } - } - else - { - if (BELOW_THRESHOLD (n, MUL_TOOM22_THRESHOLD)) - { - if (MUL_TOOM22_THRESHOLD < SQR_BASECASE_THRESHOLD - || BELOW_THRESHOLD (n, SQR_BASECASE_THRESHOLD)) - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_mul_basecase (r,a,n,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_1 (rp, tp, mp, n, mip[0]) - INNERLOOP; - } - else - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_sqr_basecase (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_1 (rp, tp, mp, n, mip[0]) - INNERLOOP; - } - } - else if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_N_THRESHOLD)) - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_n (r,a,b,n) -#define MPN_SQR(r,a,n) mpn_sqr (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_1 (rp, tp, mp, n, mip[0]) - INNERLOOP; - } - else - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_n (r,a,b,n) -#define MPN_SQR(r,a,n) mpn_sqr (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) mpn_redc_n (rp, tp, mp, n, mip) - INNERLOOP; - } - } -#endif /* WANT_REDC_2 */ - - done: - - MPN_COPY (tp, rp, n); - MPN_ZERO (tp + n, n); - -#if WANT_REDC_2 - if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_2_THRESHOLD)) - MPN_REDC_1 (rp, tp, mp, n, mip[0]); - else if (BELOW_THRESHOLD (n, REDC_2_TO_REDC_N_THRESHOLD)) - MPN_REDC_2 (rp, tp, mp, n, mip); -#else - if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_N_THRESHOLD)) - MPN_REDC_1 (rp, tp, mp, n, mip[0]); -#endif - else - mpn_redc_n (rp, tp, mp, n, mip); - - if (mpn_cmp (rp, mp, n) >= 0) - mpn_sub_n (rp, rp, mp, n); - - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/pre_divrem_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/pre_divrem_1.c deleted file mode 100644 index 8027f0216e52b3b1edcc3955ddc4c3d0d58b6382..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/pre_divrem_1.c +++ /dev/null @@ -1,146 +0,0 @@ -/* mpn_preinv_divrem_1 -- mpn by limb division with pre-inverted divisor. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2000-2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* Don't bloat a shared library with unused code. */ -#if USE_PREINV_DIVREM_1 - -/* Same test here for skipping one divide step as in mpn_divrem_1. - - The main reason for a separate shift==0 case is that not all CPUs give - zero for "n0 >> GMP_LIMB_BITS" which would arise in the general case - code used on shift==0. shift==0 is also reasonably common in mp_bases - big_base, for instance base==10 on a 64-bit limb. - - Under shift!=0 it would be possible to call mpn_lshift to adjust the - dividend all in one go (into the quotient space say), rather than - limb-by-limb in the loop. This might help if mpn_lshift is a lot faster - than what the compiler can generate for EXTRACT. But this is left to CPU - specific implementations to consider, especially since EXTRACT isn't on - the dependent chain. - - If size==0 then the result is simply xsize limbs of zeros, but nothing - special is done for that, since it wouldn't be a usual call, and - certainly never arises from mpn_get_str which is our main caller. */ - -mp_limb_t -mpn_preinv_divrem_1 (mp_ptr qp, mp_size_t xsize, - mp_srcptr ap, mp_size_t size, mp_limb_t d_unnorm, - mp_limb_t dinv, int shift) -{ - mp_limb_t ahigh, qhigh, r; - mp_size_t i; - mp_limb_t n1, n0; - mp_limb_t d; - - ASSERT (xsize >= 0); - ASSERT (size >= 1); - ASSERT (d_unnorm != 0); -#if WANT_ASSERT - { - int want_shift; - mp_limb_t want_dinv; - count_leading_zeros (want_shift, d_unnorm); - ASSERT (shift == want_shift); - invert_limb (want_dinv, d_unnorm << shift); - ASSERT (dinv == want_dinv); - } -#endif - /* FIXME: What's the correct overlap rule when xsize!=0? */ - ASSERT (MPN_SAME_OR_SEPARATE_P (qp+xsize, ap, size)); - - ahigh = ap[size-1]; - d = d_unnorm << shift; - qp += (size + xsize - 1); /* dest high limb */ - - if (shift == 0) - { - /* High quotient limb is 0 or 1, and skip a divide step. */ - r = ahigh; - qhigh = (r >= d); - r = (qhigh ? r-d : r); - *qp-- = qhigh; - size--; - - for (i = size-1; i >= 0; i--) - { - n0 = ap[i]; - udiv_qrnnd_preinv (*qp, r, r, n0, d, dinv); - qp--; - } - } - else - { - r = 0; - if (ahigh < d_unnorm) - { - r = ahigh << shift; - *qp-- = 0; - size--; - if (size == 0) - goto done_integer; - } - - n1 = ap[size-1]; - r |= n1 >> (GMP_LIMB_BITS - shift); - - for (i = size-2; i >= 0; i--) - { - ASSERT (r < d); - n0 = ap[i]; - udiv_qrnnd_preinv (*qp, r, r, - ((n1 << shift) | (n0 >> (GMP_LIMB_BITS - shift))), - d, dinv); - qp--; - n1 = n0; - } - udiv_qrnnd_preinv (*qp, r, r, n1 << shift, d, dinv); - qp--; - } - - done_integer: - for (i = 0; i < xsize; i++) - { - udiv_qrnnd_preinv (*qp, r, r, CNST_LIMB(0), d, dinv); - qp--; - } - - return r >> shift; -} - -#endif /* USE_PREINV_DIVREM_1 */ diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/pre_mod_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/pre_mod_1.c deleted file mode 100644 index cb38f4a48f4ae85c40bf76e116d568b67bbc52dd..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/pre_mod_1.c +++ /dev/null @@ -1,62 +0,0 @@ -/* mpn_preinv_mod_1 (up, un, d, dinv) -- Divide (UP,,UN) by the normalized D. - DINV should be 2^(2*GMP_LIMB_BITS) / D - 2^GMP_LIMB_BITS. - Return the single-limb remainder. - -Copyright 1991, 1993, 1994, 2000-2002, 2004, 2005 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* This function used to be documented, but is now considered obsolete. It - continues to exist for binary compatibility, even when not required - internally. */ - -mp_limb_t -mpn_preinv_mod_1 (mp_srcptr up, mp_size_t un, mp_limb_t d, mp_limb_t dinv) -{ - mp_size_t i; - mp_limb_t n0, r; - - ASSERT (un >= 1); - ASSERT (d & GMP_LIMB_HIGHBIT); - - r = up[un - 1]; - if (r >= d) - r -= d; - - for (i = un - 2; i >= 0; i--) - { - n0 = up[i]; - udiv_rnnd_preinv (r, r, n0, d, dinv); - } - return r; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/random.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/random.c deleted file mode 100644 index 5489becf4dc841a4b3cf41a9769e94894ff35d6e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/random.c +++ /dev/null @@ -1,51 +0,0 @@ -/* mpn_random -- Generate random numbers. - -Copyright 2001, 2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpn_random (mp_ptr ptr, mp_size_t size) -{ - gmp_randstate_ptr rands; - - /* FIXME: Is size==0 supposed to be allowed? */ - ASSERT (size >= 0); - - if (size == 0) - return; - - rands = RANDS; - _gmp_rand (ptr, rands, size * GMP_NUMB_BITS); - - /* Make sure the most significant limb is non-zero. */ - while (ptr[size-1] == 0) - _gmp_rand (&ptr[size-1], rands, GMP_NUMB_BITS); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/random2.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/random2.c deleted file mode 100644 index 980b15367fcfe9ff0016173f2fb43322cb2d634f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/random2.c +++ /dev/null @@ -1,106 +0,0 @@ -/* mpn_random2 -- Generate random numbers with relatively long strings - of ones and zeroes. Suitable for border testing. - -Copyright 1992-1994, 1996, 2000-2002, 2004, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -static void gmp_rrandomb (mp_ptr, gmp_randstate_t, mp_bitcnt_t); - -/* Ask _gmp_rand for 32 bits per call unless that's more than a limb can hold. - Thus, we get the same random number sequence in the common cases. - FIXME: We should always generate the same random number sequence! */ -#if GMP_NUMB_BITS < 32 -#define BITS_PER_RANDCALL GMP_NUMB_BITS -#else -#define BITS_PER_RANDCALL 32 -#endif - -void -mpn_random2 (mp_ptr rp, mp_size_t n) -{ - gmp_randstate_ptr rstate = RANDS; - int bit_pos; /* bit number of least significant bit where - next bit field to be inserted */ - mp_limb_t ran, ranm; /* buffer for random bits */ - - /* FIXME: Is n==0 supposed to be allowed? */ - ASSERT (n >= 0); - - _gmp_rand (&ranm, rstate, BITS_PER_RANDCALL); - ran = ranm; - - /* Start off at a random bit position in the most significant limb. */ - bit_pos = ran % GMP_NUMB_BITS; - - gmp_rrandomb (rp, rstate, n * GMP_NUMB_BITS - bit_pos); -} - -static void -gmp_rrandomb (mp_ptr rp, gmp_randstate_t rstate, mp_bitcnt_t nbits) -{ - mp_bitcnt_t bi; - mp_limb_t ranm; /* buffer for random bits */ - unsigned cap_chunksize, chunksize; - mp_size_t i; - - /* Set entire result to 111..1 */ - i = BITS_TO_LIMBS (nbits) - 1; - rp[i] = GMP_NUMB_MAX >> (GMP_NUMB_BITS - (nbits % GMP_NUMB_BITS)) % GMP_NUMB_BITS; - for (i = i - 1; i >= 0; i--) - rp[i] = GMP_NUMB_MAX; - - _gmp_rand (&ranm, rstate, BITS_PER_RANDCALL); - cap_chunksize = nbits / (ranm % 4 + 1); - cap_chunksize += cap_chunksize == 0; /* make it at least 1 */ - - bi = nbits; - - for (;;) - { - _gmp_rand (&ranm, rstate, BITS_PER_RANDCALL); - chunksize = 1 + ranm % cap_chunksize; - bi = (bi < chunksize) ? 0 : bi - chunksize; - - if (bi == 0) - break; /* low chunk is ...1 */ - - rp[bi / GMP_NUMB_BITS] ^= CNST_LIMB (1) << bi % GMP_NUMB_BITS; - - _gmp_rand (&ranm, rstate, BITS_PER_RANDCALL); - chunksize = 1 + ranm % cap_chunksize; - bi = (bi < chunksize) ? 0 : bi - chunksize; - - mpn_incr_u (rp + bi / GMP_NUMB_BITS, CNST_LIMB (1) << bi % GMP_NUMB_BITS); - - if (bi == 0) - break; /* low chunk is ...0 */ - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/redc_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/redc_1.c deleted file mode 100644 index 0d33421f634ad337897668f7e4d240798a3b9e3d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/redc_1.c +++ /dev/null @@ -1,57 +0,0 @@ -/* mpn_redc_1. Set rp[] <- up[]/R^n mod mp[]. Clobber up[]. - mp[] is n limbs; up[] is 2n limbs. - - THIS IS AN INTERNAL FUNCTION WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH THIS FUNCTION THROUGH DOCUMENTED INTERFACES. - -Copyright (C) 2000-2002, 2004, 2008, 2009, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -mpn_redc_1 (mp_ptr rp, mp_ptr up, mp_srcptr mp, mp_size_t n, mp_limb_t invm) -{ - mp_size_t j; - mp_limb_t cy; - - ASSERT (n > 0); - ASSERT_MPN (up, 2*n); - - for (j = n - 1; j >= 0; j--) - { - cy = mpn_addmul_1 (up, mp, n, (up[0] * invm) & GMP_NUMB_MASK); - ASSERT (up[0] == 0); - up[0] = cy; - up++; - } - - cy = mpn_add_n (rp, up, up - n, n); - return cy; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/redc_2.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/redc_2.c deleted file mode 100644 index 187a8f7d624e9584de04b164ae4ae9b0a5b451ef..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/redc_2.c +++ /dev/null @@ -1,111 +0,0 @@ -/* mpn_redc_2. Set rp[] <- up[]/R^n mod mp[]. Clobber up[]. - mp[] is n limbs; up[] is 2n limbs. - - THIS IS AN INTERNAL FUNCTION WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH THIS FUNCTION THROUGH DOCUMENTED INTERFACES. - -Copyright (C) 2000-2002, 2004, 2008, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -#if GMP_NAIL_BITS != 0 -you lose -#endif - -/* For testing purposes, define our own mpn_addmul_2 if there is none already - available. */ -#ifndef HAVE_NATIVE_mpn_addmul_2 -#undef mpn_addmul_2 -static mp_limb_t -mpn_addmul_2 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_srcptr vp) -{ - rp[n] = mpn_addmul_1 (rp, up, n, vp[0]); - return mpn_addmul_1 (rp + 1, up, n, vp[1]); -} -#endif - -#if defined (__GNUC__) && ! defined (NO_ASM) \ - && defined (__ia64) && W_TYPE_SIZE == 64 -#define umul2low(ph, pl, uh, ul, vh, vl) \ - do { \ - mp_limb_t _ph, _pl; \ - __asm__ ("xma.hu %0 = %3, %5, f0\n\t" \ - "xma.l %1 = %3, %5, f0\n\t" \ - ";;\n\t" \ - "xma.l %0 = %3, %4, %0\n\t" \ - ";;\n\t" \ - "xma.l %0 = %2, %5, %0" \ - : "=&f" (ph), "=&f" (pl) \ - : "f" (uh), "f" (ul), "f" (vh), "f" (vl)); \ - } while (0) -#endif - -#ifndef umul2low -#define umul2low(ph, pl, uh, ul, vh, vl) \ - do { \ - mp_limb_t _ph, _pl; \ - umul_ppmm (_ph, _pl, ul, vl); \ - (ph) = _ph + (ul) * (vh) + (uh) * (vl); \ - (pl) = _pl; \ - } while (0) -#endif - -mp_limb_t -mpn_redc_2 (mp_ptr rp, mp_ptr up, mp_srcptr mp, mp_size_t n, mp_srcptr mip) -{ - mp_limb_t q[2]; - mp_size_t j; - mp_limb_t upn; - mp_limb_t cy; - - ASSERT (n > 0); - ASSERT_MPN (up, 2*n); - - if ((n & 1) != 0) - { - up[0] = mpn_addmul_1 (up, mp, n, (up[0] * mip[0]) & GMP_NUMB_MASK); - up++; - } - - for (j = n - 2; j >= 0; j -= 2) - { - umul2low (q[1], q[0], mip[1], mip[0], up[1], up[0]); - upn = up[n]; /* mpn_addmul_2 overwrites this */ - up[1] = mpn_addmul_2 (up, mp, n, q); - up[0] = up[n]; - up[n] = upn; - up += 2; - } - - cy = mpn_add_n (rp, up, up - n, n); - return cy; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/redc_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/redc_n.c deleted file mode 100644 index c3d0cfe7fa364967257e20add11ae5cf4e84c520..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/redc_n.c +++ /dev/null @@ -1,81 +0,0 @@ -/* mpn_redc_n. Set rp[] <- up[]/R^n mod mp[]. Clobber up[]. - mp[] is n limbs; up[] is 2n limbs, the inverse ip[] is n limbs. - - THIS IS AN INTERNAL FUNCTION WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH THIS FUNCTION THROUGH DOCUMENTED INTERFACES. - -Copyright 2009, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* - TODO - - * We assume mpn_mulmod_bnm1 is always faster than plain mpn_mul_n (or a - future mpn_mulhi) for the range we will be called. Follow up that - assumption. - - * Decrease scratch usage. - - * Consider removing the residue canonicalisation. -*/ - -void -mpn_redc_n (mp_ptr rp, mp_ptr up, mp_srcptr mp, mp_size_t n, mp_srcptr ip) -{ - mp_ptr xp, yp, scratch; - mp_limb_t cy; - mp_size_t rn; - TMP_DECL; - TMP_MARK; - - ASSERT (n > 8); - - rn = mpn_mulmod_bnm1_next_size (n); - - scratch = TMP_ALLOC_LIMBS (n + rn + mpn_mulmod_bnm1_itch (rn, n, n)); - - xp = scratch; - mpn_mullo_n (xp, up, ip, n); - - yp = scratch + n; - mpn_mulmod_bnm1 (yp, rn, xp, n, mp, n, scratch + n + rn); - - ASSERT_ALWAYS (2 * n > rn); /* could handle this */ - - cy = mpn_sub_n (yp + rn, yp, up, 2*n - rn); /* undo wrap around */ - MPN_DECR_U (yp + 2*n - rn, rn, cy); - - cy = mpn_sub_n (rp, up + n, yp + n, n); - if (cy != 0) - mpn_add_n (rp, rp, mp, n); - - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/remove.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/remove.c deleted file mode 100644 index e1c535966b39872fe0c4eb38b01c6e7aaa6a4292..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/remove.c +++ /dev/null @@ -1,173 +0,0 @@ -/* mpn_remove -- divide out all multiples of odd mpn number from another mpn - number. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2009, 2012-2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#if GMP_LIMB_BITS > 50 -#define LOG 50 -#else -#define LOG GMP_LIMB_BITS -#endif - - -/* Input: U = {up,un}, V = {vp,vn} must be odd, cap - Ouput W = {wp,*wn} allocation need is exactly *wn - - Set W = U / V^k, where k is the largest integer <= cap such that the - division yields an integer. - - FIXME: We currently allow any operand overlap. This is quite non mpn-ish - and might be changed, since it cost significant temporary space. - * If we require W to have space for un + 1 limbs, we could save qp or qp2 - (but we will still need to copy things into wp 50% of the time). - * If we allow ourselves to clobber U, we could save the other of qp and qp2, - and the initial COPY (but also here we would need un + 1 limbs). -*/ - -/* FIXME: We need to wrap mpn_bdiv_qr due to the itch interface. This need - indicates a flaw in the current itch mechanism: Which operands not greater - than un,un will incur the worst itch? We need a parallel foo_maxitch set - of functions. */ -static void -mpn_bdiv_qr_wrap (mp_ptr qp, mp_ptr rp, - mp_srcptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn) -{ - mp_ptr scratch_out; - TMP_DECL; - - TMP_MARK; - scratch_out = TMP_ALLOC_LIMBS (mpn_bdiv_qr_itch (nn, dn)); - mpn_bdiv_qr (qp, rp, np, nn, dp, dn, scratch_out); - - TMP_FREE; -} - -mp_bitcnt_t -mpn_remove (mp_ptr wp, mp_size_t *wn, - mp_srcptr up, mp_size_t un, mp_srcptr vp, mp_size_t vn, - mp_bitcnt_t cap) -{ - mp_srcptr pwpsp[LOG]; - mp_size_t pwpsn[LOG]; - mp_size_t npowers; - mp_ptr tp, qp, np, qp2; - mp_srcptr pp; - mp_size_t pn, nn, qn, i; - mp_bitcnt_t pwr; - TMP_DECL; - - ASSERT (un > 0); - ASSERT (vn > 0); - ASSERT (vp[0] % 2 != 0); /* 2-adic division wants odd numbers */ - ASSERT (vn > 1 || vp[0] > 1); /* else we would loop indefinitely */ - - TMP_MARK; - - TMP_ALLOC_LIMBS_3 (qp, un + 1, /* quotient, alternating */ - qp2, un + 1, /* quotient, alternating */ - tp, (un + 1 + vn) / 2); /* remainder */ - pp = vp; - pn = vn; - - MPN_COPY (qp, up, un); - qn = un; - - npowers = 0; - while (qn >= pn) - { - qp[qn] = 0; - mpn_bdiv_qr_wrap (qp2, tp, qp, qn + 1, pp, pn); - if (!mpn_zero_p (tp, pn)) - break; /* could not divide by V^npowers */ - - MP_PTR_SWAP (qp, qp2); - qn = qn - pn; - qn += qp[qn] != 0; - - pwpsp[npowers] = pp; - pwpsn[npowers] = pn; - ++npowers; - - if (((mp_bitcnt_t) 2 << npowers) - 1 > cap) - break; - - nn = 2 * pn - 1; /* next power will be at least this large */ - if (nn > qn) - break; /* next power would be overlarge */ - - if (npowers == 1) /* Alloc once, but only if it's needed */ - np = TMP_ALLOC_LIMBS (qn + LOG); /* powers of V */ - else - np += pn; - - mpn_sqr (np, pp, pn); - pn = nn + (np[nn] != 0); - pp = np; - } - - pwr = ((mp_bitcnt_t) 1 << npowers) - 1; - - for (i = npowers; --i >= 0;) - { - pn = pwpsn[i]; - if (qn < pn) - continue; - - if (pwr + ((mp_bitcnt_t) 1 << i) > cap) - continue; /* V^i would bring us past cap */ - - qp[qn] = 0; - mpn_bdiv_qr_wrap (qp2, tp, qp, qn + 1, pwpsp[i], pn); - if (!mpn_zero_p (tp, pn)) - continue; /* could not divide by V^i */ - - MP_PTR_SWAP (qp, qp2); - qn = qn - pn; - qn += qp[qn] != 0; - - pwr += (mp_bitcnt_t) 1 << i; - } - - MPN_COPY (wp, qp, qn); - *wn = qn; - - TMP_FREE; - - return pwr; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/rootrem.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/rootrem.c deleted file mode 100644 index d7dd375f0133ff1efc685640adfd6b9f25a79609..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/rootrem.c +++ /dev/null @@ -1,516 +0,0 @@ -/* mpn_rootrem(rootp,remp,ap,an,nth) -- Compute the nth root of {ap,an}, and - store the truncated integer part at rootp and the remainder at remp. - - Contributed by Paul Zimmermann (algorithm) and - Paul Zimmermann and Torbjorn Granlund (implementation). - Marco Bodrato wrote logbased_root to seed the loop. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL, AND HAVE MUTABLE INTERFACES. IT'S - ONLY SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT'S ALMOST - GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2002, 2005, 2009-2012, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* FIXME: - This implementation is not optimal when remp == NULL, since the complexity - is M(n), whereas it should be M(n/k) on average. -*/ - -#include <stdio.h> /* for NULL */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -static mp_size_t mpn_rootrem_internal (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, - mp_limb_t, int); - -#define MPN_RSHIFT(rp,up,un,cnt) \ - do { \ - if ((cnt) != 0) \ - mpn_rshift (rp, up, un, cnt); \ - else \ - { \ - MPN_COPY_INCR (rp, up, un); \ - } \ - } while (0) - -#define MPN_LSHIFT(cy,rp,up,un,cnt) \ - do { \ - if ((cnt) != 0) \ - cy = mpn_lshift (rp, up, un, cnt); \ - else \ - { \ - MPN_COPY_DECR (rp, up, un); \ - cy = 0; \ - } \ - } while (0) - - -/* Put in {rootp, ceil(un/k)} the kth root of {up, un}, rounded toward zero. - If remp <> NULL, put in {remp, un} the remainder. - Return the size (in limbs) of the remainder if remp <> NULL, - or a non-zero value iff the remainder is non-zero when remp = NULL. - Assumes: - (a) up[un-1] is not zero - (b) rootp has at least space for ceil(un/k) limbs - (c) remp has at least space for un limbs (in case remp <> NULL) - (d) the operands do not overlap. - - The auxiliary memory usage is 3*un+2 if remp = NULL, - and 2*un+2 if remp <> NULL. FIXME: This is an incorrect comment. -*/ -mp_size_t -mpn_rootrem (mp_ptr rootp, mp_ptr remp, - mp_srcptr up, mp_size_t un, mp_limb_t k) -{ - ASSERT (un > 0); - ASSERT (up[un - 1] != 0); - ASSERT (k > 1); - - if (UNLIKELY (k == 2)) - return mpn_sqrtrem (rootp, remp, up, un); - /* (un-1)/k > 2 <=> un > 3k <=> (un + 2)/3 > k */ - if (remp == NULL && (un + 2) / 3 > k) - /* Pad {up,un} with k zero limbs. This will produce an approximate root - with one more limb, allowing us to compute the exact integral result. */ - { - mp_ptr sp, wp; - mp_size_t rn, sn, wn; - TMP_DECL; - TMP_MARK; - wn = un + k; - sn = (un - 1) / k + 2; /* ceil(un/k) + 1 */ - TMP_ALLOC_LIMBS_2 (wp, wn, /* will contain the padded input */ - sp, sn); /* approximate root of padded input */ - MPN_COPY (wp + k, up, un); - MPN_FILL (wp, k, 0); - rn = mpn_rootrem_internal (sp, NULL, wp, wn, k, 1); - /* The approximate root S = {sp,sn} is either the correct root of - {sp,sn}, or 1 too large. Thus unless the least significant limb of - S is 0 or 1, we can deduce the root of {up,un} is S truncated by one - limb. (In case sp[0]=1, we can deduce the root, but not decide - whether it is exact or not.) */ - MPN_COPY (rootp, sp + 1, sn - 1); - TMP_FREE; - return rn; - } - else - { - return mpn_rootrem_internal (rootp, remp, up, un, k, 0); - } -} - -#define LOGROOT_USED_BITS 8 -#define LOGROOT_NEEDS_TWO_CORRECTIONS 1 -#define LOGROOT_RETURNED_BITS (LOGROOT_USED_BITS + LOGROOT_NEEDS_TWO_CORRECTIONS) -/* Puts in *rootp some bits of the k^nt root of the number - 2^bitn * 1.op ; where op represents the "fractional" bits. - - The returned value is the number of bits of the root minus one; - i.e. an approximation of the root will be - (*rootp) * 2^(retval-LOGROOT_RETURNED_BITS+1). - - Currently, only LOGROOT_USED_BITS bits of op are used (the implicit - one is not counted). - */ -static unsigned -logbased_root (mp_ptr rootp, mp_limb_t op, mp_bitcnt_t bitn, mp_limb_t k) -{ - /* vlog=vector(256,i,floor((log(256+i)/log(2)-8)*256)-(i>255)) */ - static const - unsigned char vlog[] = {1, 2, 4, 5, 7, 8, 9, 11, 12, 14, 15, 16, 18, 19, 21, 22, - 23, 25, 26, 27, 29, 30, 31, 33, 34, 35, 37, 38, 39, 40, 42, 43, - 44, 46, 47, 48, 49, 51, 52, 53, 54, 56, 57, 58, 59, 61, 62, 63, - 64, 65, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 80, 81, 82, - 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 94, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 181, 182, 183, 184, 185, 186, 187, 188, 188, 189, 190, 191, 192, 193, - 194, 194, 195, 196, 197, 198, 199, 200, 200, 201, 202, 203, 204, 205, 205, 206, - 207, 208, 209, 209, 210, 211, 212, 213, 214, 214, 215, 216, 217, 218, 218, 219, - 220, 221, 222, 222, 223, 224, 225, 225, 226, 227, 228, 229, 229, 230, 231, 232, - 232, 233, 234, 235, 235, 236, 237, 238, 239, 239, 240, 241, 242, 242, 243, 244, - 245, 245, 246, 247, 247, 248, 249, 250, 250, 251, 252, 253, 253, 254, 255, 255}; - - /* vexp=vector(256,i,floor(2^(8+i/256)-256)-(i>255)) */ - static const - unsigned char vexp[] = {0, 1, 2, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 9, 10, 11, - 12, 12, 13, 14, 14, 15, 16, 17, 17, 18, 19, 20, 20, 21, 22, 23, - 23, 24, 25, 26, 26, 27, 28, 29, 30, 30, 31, 32, 33, 33, 34, 35, - 36, 37, 37, 38, 39, 40, 41, 41, 42, 43, 44, 45, 45, 46, 47, 48, - 49, 50, 50, 51, 52, 53, 54, 55, 55, 56, 57, 58, 59, 60, 61, 61, - 62, 63, 64, 65, 66, 67, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 86, 87, 88, 89, 90, - 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 154, 155, 156, - 157, 158, 159, 160, 161, 163, 164, 165, 166, 167, 168, 169, 171, 172, 173, 174, - 175, 176, 178, 179, 180, 181, 182, 183, 185, 186, 187, 188, 189, 191, 192, 193, - 194, 196, 197, 198, 199, 200, 202, 203, 204, 205, 207, 208, 209, 210, 212, 213, - 214, 216, 217, 218, 219, 221, 222, 223, 225, 226, 227, 229, 230, 231, 232, 234, - 235, 236, 238, 239, 240, 242, 243, 245, 246, 247, 249, 250, 251, 253, 254, 255}; - mp_bitcnt_t retval; - - if (UNLIKELY (bitn > (~ (mp_bitcnt_t) 0) >> LOGROOT_USED_BITS)) - { - /* In the unlikely case, we use two divisions and a modulo. */ - retval = bitn / k; - bitn %= k; - bitn = (bitn << LOGROOT_USED_BITS | - vlog[op >> (GMP_NUMB_BITS - LOGROOT_USED_BITS)]) / k; - } - else - { - bitn = (bitn << LOGROOT_USED_BITS | - vlog[op >> (GMP_NUMB_BITS - LOGROOT_USED_BITS)]) / k; - retval = bitn >> LOGROOT_USED_BITS; - bitn &= (CNST_LIMB (1) << LOGROOT_USED_BITS) - 1; - } - ASSERT(bitn < CNST_LIMB (1) << LOGROOT_USED_BITS); - *rootp = CNST_LIMB(1) << (LOGROOT_USED_BITS - ! LOGROOT_NEEDS_TWO_CORRECTIONS) - | vexp[bitn] >> ! LOGROOT_NEEDS_TWO_CORRECTIONS; - return retval; -} - -/* if approx is non-zero, does not compute the final remainder */ -static mp_size_t -mpn_rootrem_internal (mp_ptr rootp, mp_ptr remp, mp_srcptr up, mp_size_t un, - mp_limb_t k, int approx) -{ - mp_ptr qp, rp, sp, wp, scratch; - mp_size_t qn, rn, sn, wn, nl, bn; - mp_limb_t save, save2, cy, uh; - mp_bitcnt_t unb; /* number of significant bits of {up,un} */ - mp_bitcnt_t xnb; /* number of significant bits of the result */ - mp_bitcnt_t b, kk; - mp_bitcnt_t sizes[GMP_NUMB_BITS + 1]; - int ni; - int perf_pow; - unsigned ulz, snb, c, logk; - TMP_DECL; - - /* MPN_SIZEINBASE_2EXP(unb, up, un, 1); --unb; */ - uh = up[un - 1]; - count_leading_zeros (ulz, uh); - ulz = ulz - GMP_NAIL_BITS + 1; /* Ignore the first 1. */ - unb = (mp_bitcnt_t) un * GMP_NUMB_BITS - ulz; - /* unb is the (truncated) logarithm of the input U in base 2*/ - - if (unb < k) /* root is 1 */ - { - rootp[0] = 1; - if (remp == NULL) - un -= (*up == CNST_LIMB (1)); /* Non-zero iif {up,un} > 1 */ - else - { - mpn_sub_1 (remp, up, un, CNST_LIMB (1)); - un -= (remp [un - 1] == 0); /* There should be at most one zero limb, - if we demand u to be normalized */ - } - return un; - } - /* if (unb - k < k/2 + k/16) // root is 2 */ - - if (ulz == GMP_NUMB_BITS) - uh = up[un - 2]; - else - uh = (uh << ulz & GMP_NUMB_MASK) | up[un - 1 - (un != 1)] >> (GMP_NUMB_BITS - ulz); - ASSERT (un != 1 || up[un - 1 - (un != 1)] >> (GMP_NUMB_BITS - ulz) == 1); - - xnb = logbased_root (rootp, uh, unb, k); - snb = LOGROOT_RETURNED_BITS - 1; - /* xnb+1 is the number of bits of the root R */ - /* snb+1 is the number of bits of the current approximation S */ - - kk = k * xnb; /* number of truncated bits in the input */ - - /* FIXME: Should we skip the next two loops when xnb <= snb ? */ - for (uh = (k - 1) / 2, logk = 3; (uh >>= 1) != 0; ++logk ) - ; - /* logk = ceil(log(k)/log(2)) + 1 */ - - /* xnb is the number of remaining bits to determine in the kth root */ - for (ni = 0; (sizes[ni] = xnb) > snb; ++ni) - { - /* invariant: here we want xnb+1 total bits for the kth root */ - - /* if c is the new value of xnb, this means that we'll go from a - root of c+1 bits (say s') to a root of xnb+1 bits. - It is proved in the book "Modern Computer Arithmetic" by Brent - and Zimmermann, Chapter 1, that - if s' >= k*beta, then at most one correction is necessary. - Here beta = 2^(xnb-c), and s' >= 2^c, thus it suffices that - c >= ceil((xnb + log2(k))/2). */ - if (xnb > logk) - xnb = (xnb + logk) / 2; - else - --xnb; /* add just one bit at a time */ - } - - *rootp >>= snb - xnb; - kk -= xnb; - - ASSERT_ALWAYS (ni < GMP_NUMB_BITS + 1); - /* We have sizes[0] = b > sizes[1] > ... > sizes[ni] = 0 with - sizes[i] <= 2 * sizes[i+1]. - Newton iteration will first compute sizes[ni-1] extra bits, - then sizes[ni-2], ..., then sizes[0] = b. */ - - TMP_MARK; - /* qp and wp need enough space to store S'^k where S' is an approximate - root. Since S' can be as large as S+2, the worst case is when S=2 and - S'=4. But then since we know the number of bits of S in advance, S' - can only be 3 at most. Similarly for S=4, then S' can be 6 at most. - So the worst case is S'/S=3/2, thus S'^k <= (3/2)^k * S^k. Since S^k - fits in un limbs, the number of extra limbs needed is bounded by - ceil(k*log2(3/2)/GMP_NUMB_BITS). */ - /* THINK: with the use of logbased_root, maybe the constant is - 258/256 instead of 3/2 ? log2(258/256) < 1/89 < 1/64 */ -#define EXTRA 2 + (mp_size_t) (0.585 * (double) k / (double) GMP_NUMB_BITS) - TMP_ALLOC_LIMBS_3 (scratch, un + 1, /* used by mpn_div_q */ - qp, un + EXTRA, /* will contain quotient and remainder - of R/(k*S^(k-1)), and S^k */ - wp, un + EXTRA); /* will contain S^(k-1), k*S^(k-1), - and temporary for mpn_pow_1 */ - - if (remp == NULL) - rp = scratch; /* will contain the remainder */ - else - rp = remp; - sp = rootp; - - sn = 1; /* Initial approximation has one limb */ - - for (b = xnb; ni != 0; --ni) - { - /* 1: loop invariant: - {sp, sn} is the current approximation of the root, which has - exactly 1 + sizes[ni] bits. - {rp, rn} is the current remainder - {wp, wn} = {sp, sn}^(k-1) - kk = number of truncated bits of the input - */ - - /* Since each iteration treats b bits from the root and thus k*b bits - from the input, and we already considered b bits from the input, - we now have to take another (k-1)*b bits from the input. */ - kk -= (k - 1) * b; /* remaining input bits */ - /* {rp, rn} = floor({up, un} / 2^kk) */ - rn = un - kk / GMP_NUMB_BITS; - MPN_RSHIFT (rp, up + kk / GMP_NUMB_BITS, rn, kk % GMP_NUMB_BITS); - rn -= rp[rn - 1] == 0; - - /* 9: current buffers: {sp,sn}, {rp,rn} */ - - for (c = 0;; c++) - { - /* Compute S^k in {qp,qn}. */ - /* W <- S^(k-1) for the next iteration, - and S^k = W * S. */ - wn = mpn_pow_1 (wp, sp, sn, k - 1, qp); - mpn_mul (qp, wp, wn, sp, sn); - qn = wn + sn; - qn -= qp[qn - 1] == 0; - - perf_pow = 1; - /* if S^k > floor(U/2^kk), the root approximation was too large */ - if (qn > rn || (qn == rn && (perf_pow=mpn_cmp (qp, rp, rn)) > 0)) - MPN_DECR_U (sp, sn, 1); - else - break; - } - - /* 10: current buffers: {sp,sn}, {rp,rn}, {qp,qn}, {wp,wn} */ - - /* sometimes two corrections are needed with logbased_root*/ - ASSERT (c <= 1 + LOGROOT_NEEDS_TWO_CORRECTIONS); - ASSERT_ALWAYS (rn >= qn); - - b = sizes[ni - 1] - sizes[ni]; /* number of bits to compute in the - next iteration */ - bn = b / GMP_NUMB_BITS; /* lowest limb from high part of rp[], after shift */ - - kk = kk - b; - /* nl is the number of limbs in U which contain bits [kk,kk+b-1] */ - nl = 1 + (kk + b - 1) / GMP_NUMB_BITS - (kk / GMP_NUMB_BITS); - /* nl = 1 + floor((kk + b - 1) / GMP_NUMB_BITS) - - floor(kk / GMP_NUMB_BITS) - <= 1 + (kk + b - 1) / GMP_NUMB_BITS - - (kk - GMP_NUMB_BITS + 1) / GMP_NUMB_BITS - = 2 + (b - 2) / GMP_NUMB_BITS - thus since nl is an integer: - nl <= 2 + floor(b/GMP_NUMB_BITS) <= 2 + bn. */ - - /* 11: current buffers: {sp,sn}, {rp,rn}, {wp,wn} */ - - /* R = R - Q = floor(U/2^kk) - S^k */ - if (perf_pow != 0) - { - mpn_sub (rp, rp, rn, qp, qn); - MPN_NORMALIZE_NOT_ZERO (rp, rn); - - /* first multiply the remainder by 2^b */ - MPN_LSHIFT (cy, rp + bn, rp, rn, b % GMP_NUMB_BITS); - rn = rn + bn; - if (cy != 0) - { - rp[rn] = cy; - rn++; - } - - save = rp[bn]; - /* we have to save rp[bn] up to rp[nl-1], i.e. 1 or 2 limbs */ - if (nl - 1 > bn) - save2 = rp[bn + 1]; - } - else - { - rn = bn; - save2 = save = 0; - } - /* 2: current buffers: {sp,sn}, {rp,rn}, {wp,wn} */ - - /* Now insert bits [kk,kk+b-1] from the input U */ - MPN_RSHIFT (rp, up + kk / GMP_NUMB_BITS, nl, kk % GMP_NUMB_BITS); - /* set to zero high bits of rp[bn] */ - rp[bn] &= (CNST_LIMB (1) << (b % GMP_NUMB_BITS)) - 1; - /* restore corresponding bits */ - rp[bn] |= save; - if (nl - 1 > bn) - rp[bn + 1] = save2; /* the low b bits go in rp[0..bn] only, since - they start by bit 0 in rp[0], so they use - at most ceil(b/GMP_NUMB_BITS) limbs */ - /* FIXME: Should we normalise {rp,rn} here ?*/ - - /* 3: current buffers: {sp,sn}, {rp,rn}, {wp,wn} */ - - /* compute {wp, wn} = k * {sp, sn}^(k-1) */ - cy = mpn_mul_1 (wp, wp, wn, k); - wp[wn] = cy; - wn += cy != 0; - - /* 6: current buffers: {sp,sn}, {qp,qn} */ - - /* multiply the root approximation by 2^b */ - MPN_LSHIFT (cy, sp + b / GMP_NUMB_BITS, sp, sn, b % GMP_NUMB_BITS); - sn = sn + b / GMP_NUMB_BITS; - if (cy != 0) - { - sp[sn] = cy; - sn++; - } - - save = sp[b / GMP_NUMB_BITS]; - - /* Number of limbs used by b bits, when least significant bit is - aligned to least limb */ - bn = (b - 1) / GMP_NUMB_BITS + 1; - - /* 4: current buffers: {sp,sn}, {rp,rn}, {wp,wn} */ - - /* now divide {rp, rn} by {wp, wn} to get the low part of the root */ - if (UNLIKELY (rn < wn)) - { - MPN_FILL (sp, bn, 0); - } - else - { - qn = rn - wn; /* expected quotient size */ - if (qn <= bn) { /* Divide only if result is not too big. */ - mpn_div_q (qp, rp, rn, wp, wn, scratch); - qn += qp[qn] != 0; - } - - /* 5: current buffers: {sp,sn}, {qp,qn}. - Note: {rp,rn} is not needed any more since we'll compute it from - scratch at the end of the loop. - */ - - /* the quotient should be smaller than 2^b, since the previous - approximation was correctly rounded toward zero */ - if (qn > bn || (qn == bn && (b % GMP_NUMB_BITS != 0) && - qp[qn - 1] >= (CNST_LIMB (1) << (b % GMP_NUMB_BITS)))) - { - for (qn = 1; qn < bn; ++qn) - sp[qn - 1] = GMP_NUMB_MAX; - sp[qn - 1] = GMP_NUMB_MAX >> (GMP_NUMB_BITS - 1 - ((b - 1) % GMP_NUMB_BITS)); - } - else - { - /* 7: current buffers: {sp,sn}, {qp,qn} */ - - /* Combine sB and q to form sB + q. */ - MPN_COPY (sp, qp, qn); - MPN_ZERO (sp + qn, bn - qn); - } - } - sp[b / GMP_NUMB_BITS] |= save; - - /* 8: current buffer: {sp,sn} */ - - }; - - /* otherwise we have rn > 0, thus the return value is ok */ - if (!approx || sp[0] <= CNST_LIMB (1)) - { - for (c = 0;; c++) - { - /* Compute S^k in {qp,qn}. */ - /* Last iteration: we don't need W anymore. */ - /* mpn_pow_1 requires that both qp and wp have enough - space to store the result {sp,sn}^k + 1 limb */ - qn = mpn_pow_1 (qp, sp, sn, k, wp); - - perf_pow = 1; - if (qn > un || (qn == un && (perf_pow=mpn_cmp (qp, up, un)) > 0)) - MPN_DECR_U (sp, sn, 1); - else - break; - }; - - /* sometimes two corrections are needed with logbased_root*/ - ASSERT (c <= 1 + LOGROOT_NEEDS_TWO_CORRECTIONS); - - rn = perf_pow != 0; - if (rn != 0 && remp != NULL) - { - mpn_sub (remp, up, un, qp, qn); - rn = un; - MPN_NORMALIZE_NOT_ZERO (remp, rn); - } - } - - TMP_FREE; - return rn; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/rshift.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/rshift.c deleted file mode 100644 index ec61f2f7e248841e81890214e02a81c2039183c2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/rshift.c +++ /dev/null @@ -1,70 +0,0 @@ -/* mpn_rshift -- Shift right low level. - -Copyright 1991, 1993, 1994, 1996, 2000-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* Shift U (pointed to by up and N limbs long) cnt bits to the right - and store the n least significant limbs of the result at rp. - The bits shifted out to the right are returned. - - Argument constraints: - 1. 0 < cnt < GMP_NUMB_BITS. - 2. If the result is to be written over the input, rp must be <= up. -*/ - -mp_limb_t -mpn_rshift (mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt) -{ - mp_limb_t high_limb, low_limb; - unsigned int tnc; - mp_size_t i; - mp_limb_t retval; - - ASSERT (n >= 1); - ASSERT (cnt >= 1); - ASSERT (cnt < GMP_NUMB_BITS); - ASSERT (MPN_SAME_OR_INCR_P (rp, up, n)); - - tnc = GMP_NUMB_BITS - cnt; - high_limb = *up++; - retval = (high_limb << tnc) & GMP_NUMB_MASK; - low_limb = high_limb >> cnt; - - for (i = n - 1; i != 0; i--) - { - high_limb = *up++; - *rp++ = low_limb | ((high_limb << tnc) & GMP_NUMB_MASK); - low_limb = high_limb >> cnt; - } - *rp = low_limb; - - return retval; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_bdiv_q.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_bdiv_q.c deleted file mode 100644 index 645b1d9b6a42a594f9f3eb0b7f45823d3be27113..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_bdiv_q.c +++ /dev/null @@ -1,100 +0,0 @@ -/* mpn_sbpi1_bdiv_q -- schoolbook Hensel division with precomputed inverse, - returning quotient only. - - Contributed to the GNU project by Niels Möller. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL FUNCTIONS WITH MUTABLE INTERFACES. - IT IS ONLY SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS - ALMOST GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2005, 2006, 2009, 2011, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Computes Q = N / D mod B^nn, destroys N. - - D must be odd. dinv is (-D)^-1 mod B. - - - The straightforward way to compute Q is to cancel one limb at a time, using - - qp[i] = D^{-1} * np[i] (mod B) - N -= B^i * qp[i] * D - - But we prefer addition to subtraction, since mpn_addmul_1 is often faster - than mpn_submul_1. Q = - N / D can be computed by iterating - - qp[i] = (-D)^{-1} * np[i] (mod B) - N += B^i * qp[i] * D - - And then we flip the sign, -Q = (not Q) + 1. */ - -void -mpn_sbpi1_bdiv_q (mp_ptr qp, - mp_ptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, - mp_limb_t dinv) -{ - mp_size_t i; - mp_limb_t cy, q; - - ASSERT (dn > 0); - ASSERT (nn >= dn); - ASSERT ((dp[0] & 1) != 0); - /* FIXME: Add ASSERTs for allowable overlapping; i.e., that qp = np is OK, - but some over N/Q overlaps will not work. */ - - for (i = nn - dn; i > 0; i--) - { - q = dinv * np[0]; - cy = mpn_addmul_1 (np, dp, dn, q); - mpn_add_1 (np + dn, np + dn, i, cy); - ASSERT (np[0] == 0); - qp[0] = ~q; - qp++; - np++; - } - - for (i = dn; i > 1; i--) - { - q = dinv * np[0]; - mpn_addmul_1 (np, dp, i, q); - ASSERT (np[0] == 0); - qp[0] = ~q; - qp++; - np++; - } - - /* Final limb */ - q = dinv * np[0]; - qp[0] = ~q; - mpn_add_1 (qp - nn + 1, qp - nn + 1, nn, 1); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_bdiv_qr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_bdiv_qr.c deleted file mode 100644 index 0e56f5814873f80a7cd87f5d4976d8372b3621d6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_bdiv_qr.c +++ /dev/null @@ -1,119 +0,0 @@ -/* mpn_sbpi1_bdiv_qr -- schoolbook Hensel division with precomputed inverse, - returning quotient and remainder. - - Contributed to the GNU project by Niels Möller. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL FUNCTIONS WITH MUTABLE INTERFACES. - IT IS ONLY SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS - ALMOST GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2006, 2009, 2011, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Computes a binary quotient of size qn = nn - dn. - Output: - - Q = N * D^{-1} mod B^qn, - - R = (N - Q * D) * B^(-qn) - - Stores the dn least significant limbs of R at {np + nn - dn, dn}, - and returns the borrow from the subtraction N - Q*D. - - D must be odd. dinv is (-D)^-1 mod B. */ - -mp_limb_t -mpn_sbpi1_bdiv_qr (mp_ptr qp, - mp_ptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, mp_limb_t dinv) -{ - mp_size_t qn; - mp_size_t i; - mp_limb_t rh; - mp_limb_t ql; - - ASSERT (dn > 0); - ASSERT (nn > dn); - ASSERT ((dp[0] & 1) != 0); - /* FIXME: Add ASSERTs for allowable overlapping; i.e., that qp = np is OK, - but some over N/Q overlaps will not work. */ - - qn = nn - dn; - - rh = 0; - - /* To complete the negation, this value is added to q. */ - ql = 1; - while (qn > dn) - { - for (i = 0; i < dn; i++) - { - mp_limb_t q; - - q = dinv * np[i]; - np[i] = mpn_addmul_1 (np + i, dp, dn, q); - qp[i] = ~q; - } - rh += mpn_add (np + dn, np + dn, qn, np, dn); - ql = mpn_add_1 (qp, qp, dn, ql); - - qp += dn; qn -= dn; - np += dn; nn -= dn; - } - - for (i = 0; i < qn; i++) - { - mp_limb_t q; - - q = dinv * np[i]; - np[i] = mpn_addmul_1 (np + i, dp, dn, q); - qp[i] = ~q; - } - - rh += mpn_add_n (np + dn, np + dn, np, qn); - ql = mpn_add_1 (qp, qp, qn, ql); - - if (UNLIKELY (ql > 0)) - { - /* q == 0 */ - ASSERT (rh == 0); - return 0; - } - else - { - mp_limb_t cy; - - cy = mpn_sub_n (np + qn, np + qn, dp, dn); - ASSERT (cy >= rh); - return cy - rh; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_div_q.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_div_q.c deleted file mode 100644 index 3abbd579336f0fce001569e3bbd24e09629c9203..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_div_q.c +++ /dev/null @@ -1,303 +0,0 @@ -/* mpn_sbpi1_div_q -- Schoolbook division using the Möller-Granlund 3/2 - division algorithm. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2007, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -mp_limb_t -mpn_sbpi1_div_q (mp_ptr qp, - mp_ptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, - mp_limb_t dinv) -{ - mp_limb_t qh; - mp_size_t qn, i; - mp_limb_t n1, n0; - mp_limb_t d1, d0; - mp_limb_t cy, cy1; - mp_limb_t q; - mp_limb_t flag; - - mp_size_t dn_orig = dn; - mp_srcptr dp_orig = dp; - mp_ptr np_orig = np; - - ASSERT (dn > 2); - ASSERT (nn >= dn); - ASSERT ((dp[dn-1] & GMP_NUMB_HIGHBIT) != 0); - - np += nn; - - qn = nn - dn; - if (qn + 1 < dn) - { - dp += dn - (qn + 1); - dn = qn + 1; - } - - qh = mpn_cmp (np - dn, dp, dn) >= 0; - if (qh != 0) - mpn_sub_n (np - dn, np - dn, dp, dn); - - qp += qn; - - dn -= 2; /* offset dn by 2 for main division loops, - saving two iterations in mpn_submul_1. */ - d1 = dp[dn + 1]; - d0 = dp[dn + 0]; - - np -= 2; - - n1 = np[1]; - - for (i = qn - (dn + 2); i >= 0; i--) - { - np--; - if (UNLIKELY (n1 == d1) && np[1] == d0) - { - q = GMP_NUMB_MASK; - mpn_submul_1 (np - dn, dp, dn + 2, q); - n1 = np[1]; /* update n1, last loop's value will now be invalid */ - } - else - { - udiv_qr_3by2 (q, n1, n0, n1, np[1], np[0], d1, d0, dinv); - - cy = mpn_submul_1 (np - dn, dp, dn, q); - - cy1 = n0 < cy; - n0 = (n0 - cy) & GMP_NUMB_MASK; - cy = n1 < cy1; - n1 -= cy1; - np[0] = n0; - - if (UNLIKELY (cy != 0)) - { - n1 += d1 + mpn_add_n (np - dn, np - dn, dp, dn + 1); - q--; - } - } - - *--qp = q; - } - - flag = ~CNST_LIMB(0); - - if (dn >= 0) - { - for (i = dn; i > 0; i--) - { - np--; - if (UNLIKELY (n1 >= (d1 & flag))) - { - q = GMP_NUMB_MASK; - cy = mpn_submul_1 (np - dn, dp, dn + 2, q); - - if (UNLIKELY (n1 != cy)) - { - if (n1 < (cy & flag)) - { - q--; - mpn_add_n (np - dn, np - dn, dp, dn + 2); - } - else - flag = 0; - } - n1 = np[1]; - } - else - { - udiv_qr_3by2 (q, n1, n0, n1, np[1], np[0], d1, d0, dinv); - - cy = mpn_submul_1 (np - dn, dp, dn, q); - - cy1 = n0 < cy; - n0 = (n0 - cy) & GMP_NUMB_MASK; - cy = n1 < cy1; - n1 -= cy1; - np[0] = n0; - - if (UNLIKELY (cy != 0)) - { - n1 += d1 + mpn_add_n (np - dn, np - dn, dp, dn + 1); - q--; - } - } - - *--qp = q; - - /* Truncate operands. */ - dn--; - dp++; - } - - np--; - if (UNLIKELY (n1 >= (d1 & flag))) - { - q = GMP_NUMB_MASK; - cy = mpn_submul_1 (np, dp, 2, q); - - if (UNLIKELY (n1 != cy)) - { - if (n1 < (cy & flag)) - { - q--; - add_ssaaaa (np[1], np[0], np[1], np[0], dp[1], dp[0]); - } - else - flag = 0; - } - n1 = np[1]; - } - else - { - udiv_qr_3by2 (q, n1, n0, n1, np[1], np[0], d1, d0, dinv); - - np[0] = n0; - np[1] = n1; - } - - *--qp = q; - } - ASSERT_ALWAYS (np[1] == n1); - np += 2; - - - dn = dn_orig; - if (UNLIKELY (n1 < (dn & flag))) - { - mp_limb_t q, x; - - /* The quotient may be too large if the remainder is small. Recompute - for above ignored operand parts, until the remainder spills. - - FIXME: The quality of this code isn't the same as the code above. - 1. We don't compute things in an optimal order, high-to-low, in order - to terminate as quickly as possible. - 2. We mess with pointers and sizes, adding and subtracting and - adjusting to get things right. It surely could be streamlined. - 3. The only termination criteria are that we determine that the - quotient needs to be adjusted, or that we have recomputed - everything. We should stop when the remainder is so large - that no additional subtracting could make it spill. - 4. If nothing else, we should not do two loops of submul_1 over the - data, instead handle both the triangularization and chopping at - once. */ - - x = n1; - - if (dn > 2) - { - /* Compensate for triangularization. */ - mp_limb_t y; - - dp = dp_orig; - if (qn + 1 < dn) - { - dp += dn - (qn + 1); - dn = qn + 1; - } - - y = np[-2]; - - for (i = dn - 3; i >= 0; i--) - { - q = qp[i]; - cy = mpn_submul_1 (np - (dn - i), dp, dn - i - 2, q); - - if (y < cy) - { - if (x == 0) - { - cy = mpn_sub_1 (qp, qp, qn, 1); - ASSERT_ALWAYS (cy == 0); - return qh - cy; - } - x--; - } - y -= cy; - } - np[-2] = y; - } - - dn = dn_orig; - if (qn + 1 < dn) - { - /* Compensate for ignored dividend and divisor tails. */ - - dp = dp_orig; - np = np_orig; - - if (qh != 0) - { - cy = mpn_sub_n (np + qn, np + qn, dp, dn - (qn + 1)); - if (cy != 0) - { - if (x == 0) - { - if (qn != 0) - cy = mpn_sub_1 (qp, qp, qn, 1); - return qh - cy; - } - x--; - } - } - - if (qn == 0) - return qh; - - for (i = dn - qn - 2; i >= 0; i--) - { - cy = mpn_submul_1 (np + i, qp, qn, dp[i]); - cy = mpn_sub_1 (np + qn + i, np + qn + i, dn - qn - i - 1, cy); - if (cy != 0) - { - if (x == 0) - { - cy = mpn_sub_1 (qp, qp, qn, 1); - return qh; - } - x--; - } - } - } - } - - return qh; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_div_qr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_div_qr.c deleted file mode 100644 index 0c3e4cb72987199af3f4024891b76109e019018f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_div_qr.c +++ /dev/null @@ -1,110 +0,0 @@ -/* mpn_sbpi1_div_qr -- Schoolbook division using the Möller-Granlund 3/2 - division algorithm. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2007, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -mp_limb_t -mpn_sbpi1_div_qr (mp_ptr qp, - mp_ptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, - mp_limb_t dinv) -{ - mp_limb_t qh; - mp_size_t i; - mp_limb_t n1, n0; - mp_limb_t d1, d0; - mp_limb_t cy, cy1; - mp_limb_t q; - - ASSERT (dn > 2); - ASSERT (nn >= dn); - ASSERT ((dp[dn-1] & GMP_NUMB_HIGHBIT) != 0); - - np += nn; - - qh = mpn_cmp (np - dn, dp, dn) >= 0; - if (qh != 0) - mpn_sub_n (np - dn, np - dn, dp, dn); - - qp += nn - dn; - - dn -= 2; /* offset dn by 2 for main division loops, - saving two iterations in mpn_submul_1. */ - d1 = dp[dn + 1]; - d0 = dp[dn + 0]; - - np -= 2; - - n1 = np[1]; - - for (i = nn - (dn + 2); i > 0; i--) - { - np--; - if (UNLIKELY (n1 == d1) && np[1] == d0) - { - q = GMP_NUMB_MASK; - mpn_submul_1 (np - dn, dp, dn + 2, q); - n1 = np[1]; /* update n1, last loop's value will now be invalid */ - } - else - { - udiv_qr_3by2 (q, n1, n0, n1, np[1], np[0], d1, d0, dinv); - - cy = mpn_submul_1 (np - dn, dp, dn, q); - - cy1 = n0 < cy; - n0 = (n0 - cy) & GMP_NUMB_MASK; - cy = n1 < cy1; - n1 = (n1 - cy1) & GMP_NUMB_MASK; - np[0] = n0; - - if (UNLIKELY (cy != 0)) - { - n1 += d1 + mpn_add_n (np - dn, np - dn, dp, dn + 1); - q--; - } - } - - *--qp = q; - } - np[1] = n1; - - return qh; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_divappr_q.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_divappr_q.c deleted file mode 100644 index 3e7cf91ba610ba2c3e41451960f3a23b3ea9b754..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sbpi1_divappr_q.c +++ /dev/null @@ -1,199 +0,0 @@ -/* mpn_sbpi1_divappr_q -- Schoolbook division using the Möller-Granlund 3/2 - division algorithm, returning approximate quotient. The quotient returned - is either correct, or one too large. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 2007, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -mp_limb_t -mpn_sbpi1_divappr_q (mp_ptr qp, - mp_ptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, - mp_limb_t dinv) -{ - mp_limb_t qh; - mp_size_t qn, i; - mp_limb_t n1, n0; - mp_limb_t d1, d0; - mp_limb_t cy, cy1; - mp_limb_t q; - mp_limb_t flag; - - ASSERT (dn > 2); - ASSERT (nn >= dn); - ASSERT ((dp[dn-1] & GMP_NUMB_HIGHBIT) != 0); - - np += nn; - - qn = nn - dn; - if (qn + 1 < dn) - { - dp += dn - (qn + 1); - dn = qn + 1; - } - - qh = mpn_cmp (np - dn, dp, dn) >= 0; - if (qh != 0) - mpn_sub_n (np - dn, np - dn, dp, dn); - - qp += qn; - - dn -= 2; /* offset dn by 2 for main division loops, - saving two iterations in mpn_submul_1. */ - d1 = dp[dn + 1]; - d0 = dp[dn + 0]; - - np -= 2; - - n1 = np[1]; - - for (i = qn - (dn + 2); i >= 0; i--) - { - np--; - if (UNLIKELY (n1 == d1) && np[1] == d0) - { - q = GMP_NUMB_MASK; - mpn_submul_1 (np - dn, dp, dn + 2, q); - n1 = np[1]; /* update n1, last loop's value will now be invalid */ - } - else - { - udiv_qr_3by2 (q, n1, n0, n1, np[1], np[0], d1, d0, dinv); - - cy = mpn_submul_1 (np - dn, dp, dn, q); - - cy1 = n0 < cy; - n0 = (n0 - cy) & GMP_NUMB_MASK; - cy = n1 < cy1; - n1 -= cy1; - np[0] = n0; - - if (UNLIKELY (cy != 0)) - { - n1 += d1 + mpn_add_n (np - dn, np - dn, dp, dn + 1); - q--; - } - } - - *--qp = q; - } - - flag = ~CNST_LIMB(0); - - if (dn >= 0) - { - for (i = dn; i > 0; i--) - { - np--; - if (UNLIKELY (n1 >= (d1 & flag))) - { - q = GMP_NUMB_MASK; - cy = mpn_submul_1 (np - dn, dp, dn + 2, q); - - if (UNLIKELY (n1 != cy)) - { - if (n1 < (cy & flag)) - { - q--; - mpn_add_n (np - dn, np - dn, dp, dn + 2); - } - else - flag = 0; - } - n1 = np[1]; - } - else - { - udiv_qr_3by2 (q, n1, n0, n1, np[1], np[0], d1, d0, dinv); - - cy = mpn_submul_1 (np - dn, dp, dn, q); - - cy1 = n0 < cy; - n0 = (n0 - cy) & GMP_NUMB_MASK; - cy = n1 < cy1; - n1 -= cy1; - np[0] = n0; - - if (UNLIKELY (cy != 0)) - { - n1 += d1 + mpn_add_n (np - dn, np - dn, dp, dn + 1); - q--; - } - } - - *--qp = q; - - /* Truncate operands. */ - dn--; - dp++; - } - - np--; - if (UNLIKELY (n1 >= (d1 & flag))) - { - q = GMP_NUMB_MASK; - cy = mpn_submul_1 (np, dp, 2, q); - - if (UNLIKELY (n1 != cy)) - { - if (n1 < (cy & flag)) - { - q--; - add_ssaaaa (np[1], np[0], np[1], np[0], dp[1], dp[0]); - } - else - flag = 0; - } - n1 = np[1]; - } - else - { - udiv_qr_3by2 (q, n1, n0, n1, np[1], np[0], d1, d0, dinv); - - np[1] = n1; - np[0] = n0; - } - - *--qp = q; - } - - ASSERT_ALWAYS (np[1] == n1); - - return qh; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/scan0.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/scan0.c deleted file mode 100644 index 8171fd5afeec71f3f56bc5abc851169ffd8db54c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/scan0.c +++ /dev/null @@ -1,60 +0,0 @@ -/* mpn_scan0 -- Scan from a given bit position for the next clear bit. - -Copyright 1994, 1996, 2001, 2002, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Argument constraints: - 1. U must sooner or later have a limb with a clear bit. - */ - -mp_bitcnt_t -mpn_scan0 (mp_srcptr up, mp_bitcnt_t starting_bit) -{ - mp_size_t starting_word; - mp_limb_t alimb; - int cnt; - mp_srcptr p; - - /* Start at the word implied by STARTING_BIT. */ - starting_word = starting_bit / GMP_NUMB_BITS; - p = up + starting_word; - alimb = *p++ ^ GMP_NUMB_MASK; - - /* Mask off any bits before STARTING_BIT in the first limb. */ - alimb &= - (mp_limb_t) 1 << (starting_bit % GMP_NUMB_BITS); - - while (alimb == 0) - alimb = *p++ ^ GMP_NUMB_MASK; - - count_trailing_zeros (cnt, alimb); - return (p - up - 1) * GMP_NUMB_BITS + cnt; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/scan1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/scan1.c deleted file mode 100644 index e22ad5d827a3c736575fcf6bffd1e2002a790941..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/scan1.c +++ /dev/null @@ -1,60 +0,0 @@ -/* mpn_scan1 -- Scan from a given bit position for the next set bit. - -Copyright 1994, 1996, 2001, 2002, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Argument constraints: - 1. U must sooner or later have a limb != 0. - */ - -mp_bitcnt_t -mpn_scan1 (mp_srcptr up, mp_bitcnt_t starting_bit) -{ - mp_size_t starting_word; - mp_limb_t alimb; - int cnt; - mp_srcptr p; - - /* Start at the word implied by STARTING_BIT. */ - starting_word = starting_bit / GMP_NUMB_BITS; - p = up + starting_word; - alimb = *p++; - - /* Mask off any bits before STARTING_BIT in the first limb. */ - alimb &= - (mp_limb_t) 1 << (starting_bit % GMP_NUMB_BITS); - - while (alimb == 0) - alimb = *p++; - - count_trailing_zeros (cnt, alimb); - return (p - up - 1) * GMP_NUMB_BITS + cnt; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_aors_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_aors_1.c deleted file mode 100644 index d789a5792e8a2bfb6985dc366f4b65e37064029f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_aors_1.c +++ /dev/null @@ -1,60 +0,0 @@ -/* mpn_sec_add_1, mpn_sec_sub_1 - - Contributed to the GNU project by Niels Möller - -Copyright 2013, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#if OPERATION_sec_add_1 -#define FNAME mpn_sec_add_1 -#define FNAME_itch mpn_sec_add_1_itch -#define OP_N mpn_add_n -#endif -#if OPERATION_sec_sub_1 -#define FNAME mpn_sec_sub_1 -#define FNAME_itch mpn_sec_sub_1_itch -#define OP_N mpn_sub_n -#endif - -/* It's annoying to that we need scratch space */ -mp_size_t -FNAME_itch (mp_size_t n) -{ - return n; -} - -mp_limb_t -FNAME (mp_ptr rp, mp_srcptr ap, mp_size_t n, mp_limb_t b, mp_ptr scratch) -{ - scratch[0] = b; - MPN_ZERO (scratch + 1, n-1); - return OP_N (rp, ap, scratch, n); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_div.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_div.c deleted file mode 100644 index 483b118d0dd49eb0bb8a700ce56615fd4b730506..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_div.c +++ /dev/null @@ -1,133 +0,0 @@ -/* mpn_sec_div_qr, mpn_sec_div_r -- Compute Q = floor(U / V), U = U mod V. - Side-channel silent under the assumption that the used instructions are - side-channel silent. - - Contributed to the GNU project by Torbjörn Granlund. - -Copyright 2011-2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#if OPERATION_sec_div_qr -#define FNAME mpn_sec_div_qr -#define FNAME_itch mpn_sec_div_qr_itch -#define Q(q) q, -#define RETTYPE mp_limb_t -#endif -#if OPERATION_sec_div_r -#define FNAME mpn_sec_div_r -#define FNAME_itch mpn_sec_div_r_itch -#define Q(q) -#define RETTYPE void -#endif - -mp_size_t -FNAME_itch (mp_size_t nn, mp_size_t dn) -{ -#if OPERATION_sec_div_qr -/* Needs (nn + dn + 1) + mpn_sec_pi1_div_qr's needs of (2nn' - dn + 1) for a - total of 3nn + 4 limbs at tp. Note that mpn_sec_pi1_div_qr's nn is one - greater than ours, therefore +4 and not just +2. */ - return 3 * nn + 4; -#endif -#if OPERATION_sec_div_r -/* Needs (nn + dn + 1) + mpn_sec_pi1_div_r's needs of (dn + 1) for a total of - nn + 2dn + 2 limbs at tp. */ - return nn + 2 * dn + 2; -#endif -} - -RETTYPE -FNAME (Q(mp_ptr qp) - mp_ptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, - mp_ptr tp) -{ - mp_limb_t d1, d0; - unsigned int cnt; - gmp_pi1_t dinv; - mp_limb_t inv32; - - ASSERT (dn >= 1); - ASSERT (nn >= dn); - ASSERT (dp[dn - 1] != 0); - - d1 = dp[dn - 1]; - count_leading_zeros (cnt, d1); - - if (cnt != 0) - { - mp_limb_t qh, cy; - mp_ptr np2, dp2; - dp2 = tp; /* dn limbs */ - mpn_lshift (dp2, dp, dn, cnt); - - np2 = tp + dn; /* (nn + 1) limbs */ - cy = mpn_lshift (np2, np, nn, cnt); - np2[nn++] = cy; - - d0 = dp2[dn - 1]; - d0 += (~d0 != 0); - invert_limb (inv32, d0); - - /* We add nn + dn to tp here, not nn + 1 + dn, as expected. This is - since nn here will have been incremented. */ -#if OPERATION_sec_div_qr - qh = mpn_sec_pi1_div_qr (np2 + dn, np2, nn, dp2, dn, inv32, tp + nn + dn); - ASSERT (qh == 0); /* FIXME: this indicates inefficiency! */ - MPN_COPY (qp, np2 + dn, nn - dn - 1); - qh = np2[nn - 1]; -#else - mpn_sec_pi1_div_r (np2, nn, dp2, dn, inv32, tp + nn + dn); -#endif - - mpn_rshift (np, np2, dn, cnt); - -#if OPERATION_sec_div_qr - return qh; -#endif - } - else - { - /* FIXME: Consider copying np => np2 here, adding a 0-limb at the top. - That would simplify the underlying pi1 function, since then it could - assume nn > dn. */ - d0 = dp[dn - 1]; - d0 += (~d0 != 0); - invert_limb (inv32, d0); - -#if OPERATION_sec_div_qr - return mpn_sec_pi1_div_qr (qp, np, nn, dp, dn, inv32, tp); -#else - mpn_sec_pi1_div_r (np, nn, dp, dn, inv32, tp); -#endif - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_invert.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_invert.c deleted file mode 100644 index 72d447a980286cf68e4720a3911e0afe6ce28e7e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_invert.c +++ /dev/null @@ -1,178 +0,0 @@ -/* mpn_sec_invert - - Contributed to the GNU project by Niels Möller - -Copyright 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#if 0 -/* Currently unused. Should be resurrected once mpn_cnd_neg is - advertised. */ -static mp_size_t -mpn_cnd_neg_itch (mp_size_t n) -{ - return n; -} -#endif - -/* FIXME: Ought to return carry */ -static void -mpn_cnd_neg (int cnd, mp_limb_t *rp, const mp_limb_t *ap, mp_size_t n, - mp_ptr scratch) -{ - mpn_lshift (scratch, ap, n, 1); - mpn_cnd_sub_n (cnd, rp, ap, scratch, n); -} - -static int -mpn_sec_eq_ui (mp_srcptr ap, mp_size_t n, mp_limb_t b) -{ - mp_limb_t d; - ASSERT (n > 0); - - d = ap[0] ^ b; - - while (--n > 0) - d |= ap[n]; - - return d == 0; -} - -mp_size_t -mpn_sec_invert_itch (mp_size_t n) -{ - return 4*n; -} - -/* Compute V <-- A^{-1} (mod M), in data-independent time. M must be - odd. Returns 1 on success, and 0 on failure (i.e., if gcd (A, m) != - 1). Inputs and outputs of size n, and no overlap allowed. The {ap, - n} area is destroyed. For arbitrary inputs, bit_size should be - 2*n*GMP_NUMB_BITS, but if A or M are known to be smaller, e.g., if - M = 2^521 - 1 and A < M, bit_size can be any bound on the sum of - the bit sizes of A and M. */ -int -mpn_sec_invert (mp_ptr vp, mp_ptr ap, mp_srcptr mp, - mp_size_t n, mp_bitcnt_t bit_size, - mp_ptr scratch) -{ - ASSERT (n > 0); - ASSERT (bit_size > 0); - ASSERT (mp[0] & 1); - ASSERT (! MPN_OVERLAP_P (ap, n, vp, n)); -#define bp (scratch + n) -#define up (scratch + 2*n) -#define m1hp (scratch + 3*n) - - /* Maintain - - a = u * orig_a (mod m) - b = v * orig_a (mod m) - - and b odd at all times. Initially, - - a = a_orig, u = 1 - b = m, v = 0 - */ - - - up[0] = 1; - mpn_zero (up+1, n - 1); - mpn_copyi (bp, mp, n); - mpn_zero (vp, n); - - ASSERT_CARRY (mpn_rshift (m1hp, mp, n, 1)); - ASSERT_NOCARRY (mpn_sec_add_1 (m1hp, m1hp, n, 1, scratch)); - - while (bit_size-- > 0) - { - mp_limb_t odd, swap, cy; - - /* Always maintain b odd. The logic of the iteration is as - follows. For a, b: - - odd = a & 1 - a -= odd * b - if (underflow from a-b) - { - b += a, assigns old a - a = B^n-a - } - - a /= 2 - - For u, v: - - if (underflow from a - b) - swap u, v - u -= odd * v - if (underflow from u - v) - u += m - - u /= 2 - if (a one bit was shifted out) - u += (m+1)/2 - - As long as a > 0, the quantity - - (bitsize of a) + (bitsize of b) - - is reduced by at least one bit per iteration, hence after (bit_size of - orig_a) + (bit_size of m) - 1 iterations we surely have a = 0. Then b - = gcd(orig_a, m) and if b = 1 then also v = orig_a^{-1} (mod m). - */ - - ASSERT (bp[0] & 1); - odd = ap[0] & 1; - - swap = mpn_cnd_sub_n (odd, ap, ap, bp, n); - mpn_cnd_add_n (swap, bp, bp, ap, n); - mpn_cnd_neg (swap, ap, ap, n, scratch); - - mpn_cnd_swap (swap, up, vp, n); - cy = mpn_cnd_sub_n (odd, up, up, vp, n); - cy -= mpn_cnd_add_n (cy, up, up, mp, n); - ASSERT (cy == 0); - - cy = mpn_rshift (ap, ap, n, 1); - ASSERT (cy == 0); - cy = mpn_rshift (up, up, n, 1); - cy = mpn_cnd_add_n (cy, up, up, m1hp, n); - ASSERT (cy == 0); - } - /* Should be all zeros, but check only extreme limbs */ - ASSERT ( (ap[0] | ap[n-1]) == 0); - /* Check if indeed gcd == 1. */ - return mpn_sec_eq_ui (bp, n, 1); -#undef bp -#undef up -#undef m1hp -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_mul.c deleted file mode 100644 index 2cd87fab1deb19481c8150d59b1f71ce6522accd..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_mul.c +++ /dev/null @@ -1,49 +0,0 @@ -/* mpn_sec_mul. - - Contributed to the GNU project by Torbjörn Granlund. - -Copyright 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpn_sec_mul (mp_ptr rp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn, - mp_ptr tp) -{ - mpn_mul_basecase (rp, ap, an, bp, bn); -} - -mp_size_t -mpn_sec_mul_itch (mp_size_t an, mp_size_t bn) -{ - return 0; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_pi1_div.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_pi1_div.c deleted file mode 100644 index 1e075daf7322a4eda600735b3d0380021dcf8df2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_pi1_div.c +++ /dev/null @@ -1,173 +0,0 @@ -/* mpn_sec_pi1_div_qr, mpn_sec_pi1_div_r -- Compute Q = floor(U / V), U = U - mod V. Side-channel silent under the assumption that the used instructions - are side-channel silent. - - Contributed to the GNU project by Torbjörn Granlund. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2011-2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* This side-channel silent division algorithm reduces the partial remainder by - GMP_NUMB_BITS/2 bits at a time, compared to GMP_NUMB_BITS for the main - division algorithm. We actually do not insist on reducing by exactly - GMP_NUMB_BITS/2, but may leave a partial remainder that is D*B^i to 3D*B^i - too large (B is the limb base, D is the divisor, and i is the induction - variable); the subsequent step will handle the extra partial remainder bits. - - With that partial remainder reduction, each step generates a quotient "half - limb". The outer loop generates two quotient half limbs, an upper (q1h) and - a lower (q0h) which are stored sparsely in separate limb arrays. These - arrays are added at the end; using separate arrays avoids data-dependent - carry propagation which could else pose a side-channel leakage problem. - - The quotient half limbs may be between -3 to 0 from the accurate value - ("accurate" being the one which corresponds to a reduction to a principal - partial remainder). Too small quotient half limbs correspond to too large - remainders, which we reduce later, as described above. - - In order to keep quotients from getting too big, corresponding to a negative - partial remainder, we use an inverse which is slightly smaller than usually. -*/ - -#if OPERATION_sec_pi1_div_qr -/* Needs (dn + 1) + (nn - dn) + (nn - dn) = 2nn - dn + 1 limbs at tp. */ -#define FNAME mpn_sec_pi1_div_qr -#define Q(q) q, -#define RETTYPE mp_limb_t -#endif -#if OPERATION_sec_pi1_div_r -/* Needs (dn + 1) limbs at tp. */ -#define FNAME mpn_sec_pi1_div_r -#define Q(q) -#define RETTYPE void -#endif - -RETTYPE -FNAME (Q(mp_ptr qp) - mp_ptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn, - mp_limb_t dinv, - mp_ptr tp) -{ - mp_limb_t nh, cy, q1h, q0h, dummy, cnd; - mp_size_t i; - mp_ptr hp; -#if OPERATION_sec_pi1_div_qr - mp_limb_t qh; - mp_ptr qlp, qhp; -#endif - - ASSERT (dn >= 1); - ASSERT (nn >= dn); - ASSERT ((dp[dn - 1] & GMP_NUMB_HIGHBIT) != 0); - - if (nn == dn) - { - cy = mpn_sub_n (np, np, dp, dn); - mpn_cnd_add_n (cy, np, np, dp, dn); -#if OPERATION_sec_pi1_div_qr - return 1 - cy; -#else - return; -#endif - } - - /* Create a divisor copy shifted half a limb. */ - hp = tp; /* (dn + 1) limbs */ - hp[dn] = mpn_lshift (hp, dp, dn, GMP_NUMB_BITS / 2); - -#if OPERATION_sec_pi1_div_qr - qlp = tp + (dn + 1); /* (nn - dn) limbs */ - qhp = tp + (nn + 1); /* (nn - dn) limbs */ -#endif - - np += nn - dn; - nh = 0; - - for (i = nn - dn - 1; i >= 0; i--) - { - np--; - - nh = (nh << GMP_NUMB_BITS/2) + (np[dn] >> GMP_NUMB_BITS/2); - umul_ppmm (q1h, dummy, nh, dinv); - q1h += nh; -#if OPERATION_sec_pi1_div_qr - qhp[i] = q1h; -#endif - mpn_submul_1 (np, hp, dn + 1, q1h); - - nh = np[dn]; - umul_ppmm (q0h, dummy, nh, dinv); - q0h += nh; -#if OPERATION_sec_pi1_div_qr - qlp[i] = q0h; -#endif - nh -= mpn_submul_1 (np, dp, dn, q0h); - } - - /* 1st adjustment depends on extra high remainder limb. */ - cnd = nh != 0; /* FIXME: cmp-to-int */ -#if OPERATION_sec_pi1_div_qr - qlp[0] += cnd; -#endif - nh -= mpn_cnd_sub_n (cnd, np, np, dp, dn); - - /* 2nd adjustment depends on remainder/divisor comparison as well as whether - extra remainder limb was nullified by previous subtract. */ - cy = mpn_sub_n (np, np, dp, dn); - cy = cy - nh; -#if OPERATION_sec_pi1_div_qr - qlp[0] += 1 - cy; -#endif - mpn_cnd_add_n (cy, np, np, dp, dn); - - /* 3rd adjustment depends on remainder/divisor comparison. */ - cy = mpn_sub_n (np, np, dp, dn); -#if OPERATION_sec_pi1_div_qr - qlp[0] += 1 - cy; -#endif - mpn_cnd_add_n (cy, np, np, dp, dn); - -#if OPERATION_sec_pi1_div_qr - /* Combine quotient halves into final quotient. */ - qh = mpn_lshift (qhp, qhp, nn - dn, GMP_NUMB_BITS/2); - qh += mpn_add_n (qp, qhp, qlp, nn - dn); - - return qh; -#else - return; -#endif -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_powm.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_powm.c deleted file mode 100644 index 315c7d5ba54beba55ddf0c858a8e52b5d9c3f244..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_powm.c +++ /dev/null @@ -1,398 +0,0 @@ -/* mpn_sec_powm -- Compute R = U^E mod M. Secure variant, side-channel silent - under the assumption that the multiply instruction is side channel silent. - - Contributed to the GNU project by Torbjörn Granlund. - -Copyright 2007-2009, 2011-2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -/* - BASIC ALGORITHM, Compute U^E mod M, where M < B^n is odd. - - 1. T <- (B^n * U) mod M Convert to REDC form - - 2. Compute table U^0, U^1, U^2... of E-dependent size - - 3. While there are more bits in E - W <- power left-to-right base-k - - - TODO: - - * Make getbits a macro, thereby allowing it to update the index operand. - That will simplify the code using getbits. (Perhaps make getbits' sibling - getbit then have similar form, for symmetry.) - - * Choose window size without looping. (Superoptimize or think(tm).) - - * REDC_1_TO_REDC_2_THRESHOLD might actually represent the cutoff between - redc_1 and redc_n. On such systems, we will switch to redc_2 causing - slowdown. -*/ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#undef MPN_REDC_1_SEC -#define MPN_REDC_1_SEC(rp, up, mp, n, invm) \ - do { \ - mp_limb_t cy; \ - cy = mpn_redc_1 (rp, up, mp, n, invm); \ - mpn_cnd_sub_n (cy, rp, rp, mp, n); \ - } while (0) - -#undef MPN_REDC_2_SEC -#define MPN_REDC_2_SEC(rp, up, mp, n, mip) \ - do { \ - mp_limb_t cy; \ - cy = mpn_redc_2 (rp, up, mp, n, mip); \ - mpn_cnd_sub_n (cy, rp, rp, mp, n); \ - } while (0) - -#if HAVE_NATIVE_mpn_addmul_2 || HAVE_NATIVE_mpn_redc_2 -#define WANT_REDC_2 1 -#endif - -/* Define our own mpn squaring function. We do this since we cannot use a - native mpn_sqr_basecase over TUNE_SQR_TOOM2_MAX, or a non-native one over - SQR_TOOM2_THRESHOLD. This is so because of fixed size stack allocations - made inside mpn_sqr_basecase. */ - -#if HAVE_NATIVE_mpn_sqr_diagonal -#define MPN_SQR_DIAGONAL(rp, up, n) \ - mpn_sqr_diagonal (rp, up, n) -#else -#define MPN_SQR_DIAGONAL(rp, up, n) \ - do { \ - mp_size_t _i; \ - for (_i = 0; _i < (n); _i++) \ - { \ - mp_limb_t ul, lpl; \ - ul = (up)[_i]; \ - umul_ppmm ((rp)[2 * _i + 1], lpl, ul, ul << GMP_NAIL_BITS); \ - (rp)[2 * _i] = lpl >> GMP_NAIL_BITS; \ - } \ - } while (0) -#endif - - -#if ! HAVE_NATIVE_mpn_sqr_basecase -/* The limit of the generic code is SQR_TOOM2_THRESHOLD. */ -#define SQR_BASECASE_LIM SQR_TOOM2_THRESHOLD -#endif - -#if HAVE_NATIVE_mpn_sqr_basecase -#ifdef TUNE_SQR_TOOM2_MAX -/* We slightly abuse TUNE_SQR_TOOM2_MAX here. If it is set for an assembly - mpn_sqr_basecase, it comes from SQR_TOOM2_THRESHOLD_MAX in the assembly - file. An assembly mpn_sqr_basecase that does not define it should allow - any size. */ -#define SQR_BASECASE_LIM SQR_TOOM2_THRESHOLD -#endif -#endif - -#ifdef WANT_FAT_BINARY -/* For fat builds, we use SQR_TOOM2_THRESHOLD which will expand to a read from - __gmpn_cpuvec. Perhaps any possible sqr_basecase.asm allow any size, and we - limit the use unnecessarily. We cannot tell, so play it safe. FIXME. */ -#define SQR_BASECASE_LIM SQR_TOOM2_THRESHOLD -#endif - -#ifndef SQR_BASECASE_LIM -/* If SQR_BASECASE_LIM is now not defined, use mpn_sqr_basecase for any operand - size. */ -#define mpn_local_sqr(rp,up,n,tp) mpn_sqr_basecase(rp,up,n) -#else -/* Else use mpn_sqr_basecase for its allowed sizes, else mpn_mul_basecase. */ -#define mpn_local_sqr(rp,up,n,tp) \ - do { \ - if (BELOW_THRESHOLD (n, SQR_BASECASE_LIM)) \ - mpn_sqr_basecase (rp, up, n); \ - else \ - mpn_mul_basecase(rp, up, n, up, n); \ - } while (0) -#endif - -#define getbit(p,bi) \ - ((p[(bi - 1) / GMP_NUMB_BITS] >> (bi - 1) % GMP_NUMB_BITS) & 1) - -/* FIXME: Maybe some things would get simpler if all callers ensure - that bi >= nbits. As far as I understand, with the current code bi - < nbits can happen only for the final iteration. */ -static inline mp_limb_t -getbits (const mp_limb_t *p, mp_bitcnt_t bi, int nbits) -{ - int nbits_in_r; - mp_limb_t r; - mp_size_t i; - - if (bi < nbits) - { - return p[0] & (((mp_limb_t) 1 << bi) - 1); - } - else - { - bi -= nbits; /* bit index of low bit to extract */ - i = bi / GMP_NUMB_BITS; /* word index of low bit to extract */ - bi %= GMP_NUMB_BITS; /* bit index in low word */ - r = p[i] >> bi; /* extract (low) bits */ - nbits_in_r = GMP_NUMB_BITS - bi; /* number of bits now in r */ - if (nbits_in_r < nbits) /* did we get enough bits? */ - r += p[i + 1] << nbits_in_r; /* prepend bits from higher word */ - return r & (((mp_limb_t ) 1 << nbits) - 1); - } -} - -#ifndef POWM_SEC_TABLE -#if GMP_NUMB_BITS < 50 -#define POWM_SEC_TABLE 2,33,96,780,2741 -#else -#define POWM_SEC_TABLE 2,130,524,2578 -#endif -#endif - -#if TUNE_PROGRAM_BUILD -extern int win_size (mp_bitcnt_t); -#else -static inline int -win_size (mp_bitcnt_t enb) -{ - int k; - /* Find k, such that x[k-1] < enb <= x[k]. - - We require that x[k] >= k, then it follows that enb > x[k-1] >= - k-1, which implies k <= enb. - */ - static const mp_bitcnt_t x[] = {0,POWM_SEC_TABLE,~(mp_bitcnt_t)0}; - for (k = 1; enb > x[k]; k++) - ; - ASSERT (k <= enb); - return k; -} -#endif - -/* Convert U to REDC form, U_r = B^n * U mod M. - Uses scratch space at tp of size 2un + n + 1. */ -static void -redcify (mp_ptr rp, mp_srcptr up, mp_size_t un, mp_srcptr mp, mp_size_t n, mp_ptr tp) -{ - MPN_ZERO (tp, n); - MPN_COPY (tp + n, up, un); - - mpn_sec_div_r (tp, un + n, mp, n, tp + un + n); - MPN_COPY (rp, tp, n); -} - -/* {rp, n} <-- {bp, bn} ^ {ep, en} mod {mp, n}, - where en = ceil (enb / GMP_NUMB_BITS) - Requires that {mp, n} is odd (and hence also mp[0] odd). - Uses scratch space at tp as defined by mpn_sec_powm_itch. */ -void -mpn_sec_powm (mp_ptr rp, mp_srcptr bp, mp_size_t bn, - mp_srcptr ep, mp_bitcnt_t enb, - mp_srcptr mp, mp_size_t n, mp_ptr tp) -{ - mp_limb_t ip[2], *mip; - int windowsize, this_windowsize; - mp_limb_t expbits; - mp_ptr pp, this_pp; - long i; - int cnd; - - ASSERT (enb > 0); - ASSERT (n > 0); - /* The code works for bn = 0, but the defined scratch space is 2 limbs - greater than we supply, when converting 1 to redc form . */ - ASSERT (bn > 0); - ASSERT ((mp[0] & 1) != 0); - - windowsize = win_size (enb); - -#if WANT_REDC_2 - if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_2_THRESHOLD)) - { - mip = ip; - binvert_limb (mip[0], mp[0]); - mip[0] = -mip[0]; - } - else - { - mip = ip; - mpn_binvert (mip, mp, 2, tp); - mip[0] = -mip[0]; mip[1] = ~mip[1]; - } -#else - mip = ip; - binvert_limb (mip[0], mp[0]); - mip[0] = -mip[0]; -#endif - - pp = tp; - tp += (n << windowsize); /* put tp after power table */ - - /* Compute pp[0] table entry */ - /* scratch: | n | 1 | n+2 | */ - /* | pp[0] | 1 | redcify | */ - this_pp = pp; - this_pp[n] = 1; - redcify (this_pp, this_pp + n, 1, mp, n, this_pp + n + 1); - this_pp += n; - - /* Compute pp[1] table entry. To avoid excessive scratch usage in the - degenerate situation where B >> M, we let redcify use scratch space which - will later be used by the pp table (element 2 and up). */ - /* scratch: | n | n | bn + n + 1 | */ - /* | pp[0] | pp[1] | redcify | */ - redcify (this_pp, bp, bn, mp, n, this_pp + n); - - /* Precompute powers of b and put them in the temporary area at pp. */ - /* scratch: | n | n | ... | | 2n | */ - /* | pp[0] | pp[1] | ... | pp[2^windowsize-1] | product | */ - for (i = (1 << windowsize) - 2; i > 0; i--) - { - mpn_mul_basecase (tp, this_pp, n, pp + n, n); - this_pp += n; -#if WANT_REDC_2 - if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_2_THRESHOLD)) - MPN_REDC_1_SEC (this_pp, tp, mp, n, mip[0]); - else - MPN_REDC_2_SEC (this_pp, tp, mp, n, mip); -#else - MPN_REDC_1_SEC (this_pp, tp, mp, n, mip[0]); -#endif - } - - expbits = getbits (ep, enb, windowsize); - ASSERT_ALWAYS (enb >= windowsize); - enb -= windowsize; - - mpn_sec_tabselect (rp, pp, n, 1 << windowsize, expbits); - - /* Main exponentiation loop. */ - /* scratch: | n | n | ... | | 3n-4n | */ - /* | pp[0] | pp[1] | ... | pp[2^windowsize-1] | loop scratch | */ - -#define INNERLOOP \ - while (enb != 0) \ - { \ - expbits = getbits (ep, enb, windowsize); \ - this_windowsize = windowsize; \ - if (enb < windowsize) \ - { \ - this_windowsize -= windowsize - enb; \ - enb = 0; \ - } \ - else \ - enb -= windowsize; \ - \ - do \ - { \ - mpn_local_sqr (tp, rp, n, tp + 2 * n); \ - MPN_REDUCE (rp, tp, mp, n, mip); \ - this_windowsize--; \ - } \ - while (this_windowsize != 0); \ - \ - mpn_sec_tabselect (tp + 2*n, pp, n, 1 << windowsize, expbits); \ - mpn_mul_basecase (tp, rp, n, tp + 2*n, n); \ - \ - MPN_REDUCE (rp, tp, mp, n, mip); \ - } - -#if WANT_REDC_2 - if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_2_THRESHOLD)) - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_sqr_basecase (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_1_SEC (rp, tp, mp, n, mip[0]) - INNERLOOP; - } - else - { -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_sqr_basecase (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_2_SEC (rp, tp, mp, n, mip) - INNERLOOP; - } -#else -#undef MPN_MUL_N -#undef MPN_SQR -#undef MPN_REDUCE -#define MPN_MUL_N(r,a,b,n) mpn_mul_basecase (r,a,n,b,n) -#define MPN_SQR(r,a,n) mpn_sqr_basecase (r,a,n) -#define MPN_REDUCE(rp,tp,mp,n,mip) MPN_REDC_1_SEC (rp, tp, mp, n, mip[0]) - INNERLOOP; -#endif - - MPN_COPY (tp, rp, n); - MPN_ZERO (tp + n, n); - -#if WANT_REDC_2 - if (BELOW_THRESHOLD (n, REDC_1_TO_REDC_2_THRESHOLD)) - MPN_REDC_1_SEC (rp, tp, mp, n, mip[0]); - else - MPN_REDC_2_SEC (rp, tp, mp, n, mip); -#else - MPN_REDC_1_SEC (rp, tp, mp, n, mip[0]); -#endif - cnd = mpn_sub_n (tp, rp, mp, n); /* we need just retval */ - mpn_cnd_sub_n (!cnd, rp, rp, mp, n); -} - -mp_size_t -mpn_sec_powm_itch (mp_size_t bn, mp_bitcnt_t enb, mp_size_t n) -{ - int windowsize; - mp_size_t redcify_itch, itch; - - /* The top scratch usage will either be when reducing B in the 2nd redcify - call, or more typically n*2^windowsize + 3n or 4n, in the main loop. (It - is 3n or 4n depending on if we use mpn_local_sqr or a native - mpn_sqr_basecase. We assume 4n always for now.) */ - - windowsize = win_size (enb); - - /* The 2n term is due to pp[0] and pp[1] at the time of the 2nd redcify call, - the (bn + n) term is due to redcify's own usage, and the rest is due to - mpn_sec_div_r's usage when called from redcify. */ - redcify_itch = (2 * n) + (bn + n) + ((bn + n) + 2 * n + 2); - - /* The n * 2^windowsize term is due to the power table, the 4n term is due to - scratch needs of squaring/multiplication in the exponentiation loop. */ - itch = (n << windowsize) + (4 * n); - - return MAX (itch, redcify_itch); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_sqr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_sqr.c deleted file mode 100644 index 82073cb323d3c2f5ba29c633dbb6e7d68bd56169..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_sqr.c +++ /dev/null @@ -1,77 +0,0 @@ -/* mpn_sec_sqr. - - Contributed to the GNU project by Torbjörn Granlund. - -Copyright 2013, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#if ! HAVE_NATIVE_mpn_sqr_basecase -/* The limit of the generic code is SQR_TOOM2_THRESHOLD. */ -#define SQR_BASECASE_LIM SQR_TOOM2_THRESHOLD -#endif - -#if HAVE_NATIVE_mpn_sqr_basecase -#ifdef TUNE_SQR_TOOM2_MAX -/* We slightly abuse TUNE_SQR_TOOM2_MAX here. If it is set for an assembly - mpn_sqr_basecase, it comes from SQR_TOOM2_THRESHOLD_MAX in the assembly - file. An assembly mpn_sqr_basecase that does not define it should allow - any size. */ -#define SQR_BASECASE_LIM SQR_TOOM2_THRESHOLD -#endif -#endif - -#ifdef WANT_FAT_BINARY -/* For fat builds, we use SQR_TOOM2_THRESHOLD which will expand to a read from - __gmpn_cpuvec. Perhaps any possible sqr_basecase.asm allow any size, and we - limit the use unnecessarily. We cannot tell, so play it safe. FIXME. */ -#define SQR_BASECASE_LIM SQR_TOOM2_THRESHOLD -#endif - -void -mpn_sec_sqr (mp_ptr rp, - mp_srcptr ap, mp_size_t an, - mp_ptr tp) -{ -#ifndef SQR_BASECASE_LIM -/* If SQR_BASECASE_LIM is now not defined, use mpn_sqr_basecase for any operand - size. */ - mpn_sqr_basecase (rp, ap, an); -#else -/* Else use mpn_sqr_basecase for its allowed sizes, else mpn_mul_basecase. */ - mpn_mul_basecase (rp, ap, an, ap, an); -#endif -} - -mp_size_t -mpn_sec_sqr_itch (mp_size_t an) -{ - return 0; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_tabselect.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_tabselect.c deleted file mode 100644 index 7ea2ffda63b83fbc64500f4a3659f7392c06ce66..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sec_tabselect.c +++ /dev/null @@ -1,55 +0,0 @@ -/* mpn_sec_tabselect. - -Copyright 2007-2009, 2011, 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Select entry `which' from table `tab', which has nents entries, each `n' - limbs. Store the selected entry at rp. Reads entire table to avoid - side-channel information leaks. O(n*nents). */ -void -mpn_sec_tabselect (volatile mp_limb_t *rp, volatile const mp_limb_t *tab, - mp_size_t n, mp_size_t nents, mp_size_t which) -{ - mp_size_t k, i; - mp_limb_t mask; - volatile const mp_limb_t *tp; - - for (k = 0; k < nents; k++) - { - mask = -(mp_limb_t) (which == k); - tp = tab + n * k; - for (i = 0; i < n; i++) - { - rp[i] = (rp[i] & ~mask) | (tp[i] & mask); - } - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/set_str.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/set_str.c deleted file mode 100644 index 71034e34bf980c0a12df95615f9f845bdd01beef..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/set_str.c +++ /dev/null @@ -1,374 +0,0 @@ -/* mpn_set_str (mp_ptr res_ptr, const char *str, size_t str_len, int base) -- - Convert a STR_LEN long base BASE byte string pointed to by STR to a limb - vector pointed to by RES_PTR. Return the number of limbs in RES_PTR. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTIONS IN THIS FILE, EXCEPT mpn_set_str, ARE INTERNAL WITH A MUTABLE - INTERFACE. IT IS ONLY SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN - FACT, IT IS ALMOST GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE - GNU MP RELEASE. - -Copyright 1991-1994, 1996, 2000-2002, 2004, 2006-2008, 2012, 2013 Free -Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -/* TODO: - - Perhaps do not compute the highest power? - Instead, multiply twice by the 2nd highest power: - - _______ - |_______| hp - |_______| pow - _______________ - |_______________| final result - - - _______ - |_______| hp - |___| pow[-1] - ___________ - |___________| intermediate result - |___| pow[-1] - _______________ - |_______________| final result - - Generalizing that idea, perhaps we should make powtab contain successive - cubes, not squares. -*/ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -mp_size_t -mpn_set_str (mp_ptr rp, const unsigned char *str, size_t str_len, int base) -{ - if (POW2_P (base)) - { - /* The base is a power of 2. Read the input string from least to most - significant character/digit. */ - - const unsigned char *s; - int next_bitpos; - mp_limb_t res_digit; - mp_size_t size; - int bits_per_indigit = mp_bases[base].big_base; - - size = 0; - res_digit = 0; - next_bitpos = 0; - - for (s = str + str_len - 1; s >= str; s--) - { - int inp_digit = *s; - - res_digit |= ((mp_limb_t) inp_digit << next_bitpos) & GMP_NUMB_MASK; - next_bitpos += bits_per_indigit; - if (next_bitpos >= GMP_NUMB_BITS) - { - rp[size++] = res_digit; - next_bitpos -= GMP_NUMB_BITS; - res_digit = inp_digit >> (bits_per_indigit - next_bitpos); - } - } - - if (res_digit != 0) - rp[size++] = res_digit; - return size; - } - - if (BELOW_THRESHOLD (str_len, SET_STR_PRECOMPUTE_THRESHOLD)) - return mpn_bc_set_str (rp, str, str_len, base); - else - { - mp_ptr powtab_mem, tp; - powers_t powtab[GMP_LIMB_BITS]; - int chars_per_limb; - mp_size_t size; - mp_size_t un; - TMP_DECL; - - TMP_MARK; - - chars_per_limb = mp_bases[base].chars_per_limb; - - un = str_len / chars_per_limb + 1; - - /* Allocate one large block for the powers of big_base. */ - powtab_mem = TMP_BALLOC_LIMBS (mpn_dc_set_str_powtab_alloc (un)); - - mpn_set_str_compute_powtab (powtab, powtab_mem, un, base); - - tp = TMP_BALLOC_LIMBS (mpn_dc_set_str_itch (un)); - size = mpn_dc_set_str (rp, str, str_len, powtab, tp); - - TMP_FREE; - return size; - } -} - -void -mpn_set_str_compute_powtab (powers_t *powtab, mp_ptr powtab_mem, mp_size_t un, int base) -{ - mp_ptr powtab_mem_ptr; - long i, pi; - mp_size_t n; - mp_ptr p, t; - mp_limb_t big_base; - int chars_per_limb; - size_t digits_in_base; - mp_size_t shift; - - powtab_mem_ptr = powtab_mem; - - chars_per_limb = mp_bases[base].chars_per_limb; - big_base = mp_bases[base].big_base; - - p = powtab_mem_ptr; - powtab_mem_ptr += 1; - - digits_in_base = chars_per_limb; - - p[0] = big_base; - n = 1; - - count_leading_zeros (i, un - 1); - i = GMP_LIMB_BITS - 1 - i; - - powtab[i].p = p; - powtab[i].n = n; - powtab[i].digits_in_base = digits_in_base; - powtab[i].base = base; - powtab[i].shift = 0; - - shift = 0; - for (pi = i - 1; pi >= 0; pi--) - { - t = powtab_mem_ptr; - powtab_mem_ptr += 2 * n; - - ASSERT_ALWAYS (powtab_mem_ptr < powtab_mem + mpn_dc_set_str_powtab_alloc (un)); - - mpn_sqr (t, p, n); - n = 2 * n - 1; n += t[n] != 0; - digits_in_base *= 2; -#if 1 - if ((((un - 1) >> pi) & 2) == 0) - { - mpn_divexact_1 (t, t, n, big_base); - n -= t[n - 1] == 0; - digits_in_base -= chars_per_limb; - } -#else - if (CLEVER_CONDITION_1 ()) - { - /* perform adjustment operation of previous */ - cy = mpn_mul_1 (p, p, n, big_base); - } - if (CLEVER_CONDITION_2 ()) - { - /* perform adjustment operation of new */ - cy = mpn_mul_1 (t, t, n, big_base); - } -#endif - shift *= 2; - /* Strip low zero limbs, but be careful to keep the result divisible by - big_base. */ - while (t[0] == 0 && (t[1] & ((big_base & -big_base) - 1)) == 0) - { - t++; - n--; - shift++; - } - p = t; - powtab[pi].p = p; - powtab[pi].n = n; - powtab[pi].digits_in_base = digits_in_base; - powtab[pi].base = base; - powtab[pi].shift = shift; - } -} - -mp_size_t -mpn_dc_set_str (mp_ptr rp, const unsigned char *str, size_t str_len, - const powers_t *powtab, mp_ptr tp) -{ - size_t len_lo, len_hi; - mp_limb_t cy; - mp_size_t ln, hn, n, sn; - - len_lo = powtab->digits_in_base; - - if (str_len <= len_lo) - { - if (BELOW_THRESHOLD (str_len, SET_STR_DC_THRESHOLD)) - return mpn_bc_set_str (rp, str, str_len, powtab->base); - else - return mpn_dc_set_str (rp, str, str_len, powtab + 1, tp); - } - - len_hi = str_len - len_lo; - ASSERT (len_lo >= len_hi); - - if (BELOW_THRESHOLD (len_hi, SET_STR_DC_THRESHOLD)) - hn = mpn_bc_set_str (tp, str, len_hi, powtab->base); - else - hn = mpn_dc_set_str (tp, str, len_hi, powtab + 1, rp); - - sn = powtab->shift; - - if (hn == 0) - { - /* Zero +1 limb here, to avoid reading an allocated but uninitialised - limb in mpn_incr_u below. */ - MPN_ZERO (rp, powtab->n + sn + 1); - } - else - { - if (powtab->n > hn) - mpn_mul (rp + sn, powtab->p, powtab->n, tp, hn); - else - mpn_mul (rp + sn, tp, hn, powtab->p, powtab->n); - MPN_ZERO (rp, sn); - } - - str = str + str_len - len_lo; - if (BELOW_THRESHOLD (len_lo, SET_STR_DC_THRESHOLD)) - ln = mpn_bc_set_str (tp, str, len_lo, powtab->base); - else - ln = mpn_dc_set_str (tp, str, len_lo, powtab + 1, tp + powtab->n + sn + 1); - - if (ln != 0) - { - cy = mpn_add_n (rp, rp, tp, ln); - mpn_incr_u (rp + ln, cy); - } - n = hn + powtab->n + sn; - return n - (rp[n - 1] == 0); -} - -mp_size_t -mpn_bc_set_str (mp_ptr rp, const unsigned char *str, size_t str_len, int base) -{ - mp_size_t size; - size_t i; - long j; - mp_limb_t cy_limb; - - mp_limb_t big_base; - int chars_per_limb; - mp_limb_t res_digit; - - ASSERT (base >= 2); - ASSERT (base < numberof (mp_bases)); - ASSERT (str_len >= 1); - - big_base = mp_bases[base].big_base; - chars_per_limb = mp_bases[base].chars_per_limb; - - size = 0; - for (i = chars_per_limb; i < str_len; i += chars_per_limb) - { - res_digit = *str++; - if (base == 10) - { /* This is a common case. - Help the compiler to avoid multiplication. */ - for (j = MP_BASES_CHARS_PER_LIMB_10 - 1; j != 0; j--) - res_digit = res_digit * 10 + *str++; - } - else - { - for (j = chars_per_limb - 1; j != 0; j--) - res_digit = res_digit * base + *str++; - } - - if (size == 0) - { - if (res_digit != 0) - { - rp[0] = res_digit; - size = 1; - } - } - else - { -#if HAVE_NATIVE_mpn_mul_1c - cy_limb = mpn_mul_1c (rp, rp, size, big_base, res_digit); -#else - cy_limb = mpn_mul_1 (rp, rp, size, big_base); - cy_limb += mpn_add_1 (rp, rp, size, res_digit); -#endif - if (cy_limb != 0) - rp[size++] = cy_limb; - } - } - - big_base = base; - res_digit = *str++; - if (base == 10) - { /* This is a common case. - Help the compiler to avoid multiplication. */ - for (j = str_len - (i - MP_BASES_CHARS_PER_LIMB_10) - 1; j > 0; j--) - { - res_digit = res_digit * 10 + *str++; - big_base *= 10; - } - } - else - { - for (j = str_len - (i - chars_per_limb) - 1; j > 0; j--) - { - res_digit = res_digit * base + *str++; - big_base *= base; - } - } - - if (size == 0) - { - if (res_digit != 0) - { - rp[0] = res_digit; - size = 1; - } - } - else - { -#if HAVE_NATIVE_mpn_mul_1c - cy_limb = mpn_mul_1c (rp, rp, size, big_base, res_digit); -#else - cy_limb = mpn_mul_1 (rp, rp, size, big_base); - cy_limb += mpn_add_1 (rp, rp, size, res_digit); -#endif - if (cy_limb != 0) - rp[size++] = cy_limb; - } - return size; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sizeinbase.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sizeinbase.c deleted file mode 100644 index 16633569ec2c2835b0996d8f88f5108ade365b50..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sizeinbase.c +++ /dev/null @@ -1,50 +0,0 @@ -/* mpn_sizeinbase -- approximation to chars required for an mpn. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 1991, 1993-1995, 2001, 2002, 2011, 2012 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* Same as mpz_sizeinbase, meaning exact for power-of-2 bases, and either - exact or 1 too big for other bases. */ - -size_t -mpn_sizeinbase (mp_srcptr xp, mp_size_t xsize, int base) -{ - size_t result; - MPN_SIZEINBASE (result, xp, xsize, base); - return result; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqr.c deleted file mode 100644 index 3743761f784ce1d32b7eab7be78e7821e318cb32..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqr.c +++ /dev/null @@ -1,99 +0,0 @@ -/* mpn_sqr -- square natural numbers. - -Copyright 1991, 1993, 1994, 1996-2003, 2005, 2008, 2009 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -mpn_sqr (mp_ptr p, mp_srcptr a, mp_size_t n) -{ - ASSERT (n >= 1); - ASSERT (! MPN_OVERLAP_P (p, 2 * n, a, n)); - - if (BELOW_THRESHOLD (n, SQR_BASECASE_THRESHOLD)) - { /* mul_basecase is faster than sqr_basecase on small sizes sometimes */ - mpn_mul_basecase (p, a, n, a, n); - } - else if (BELOW_THRESHOLD (n, SQR_TOOM2_THRESHOLD)) - { - mpn_sqr_basecase (p, a, n); - } - else if (BELOW_THRESHOLD (n, SQR_TOOM3_THRESHOLD)) - { - /* Allocate workspace of fixed size on stack: fast! */ - mp_limb_t ws[mpn_toom2_sqr_itch (SQR_TOOM3_THRESHOLD_LIMIT-1)]; - ASSERT (SQR_TOOM3_THRESHOLD <= SQR_TOOM3_THRESHOLD_LIMIT); - mpn_toom2_sqr (p, a, n, ws); - } - else if (BELOW_THRESHOLD (n, SQR_TOOM4_THRESHOLD)) - { - mp_ptr ws; - TMP_SDECL; - TMP_SMARK; - ws = TMP_SALLOC_LIMBS (mpn_toom3_sqr_itch (n)); - mpn_toom3_sqr (p, a, n, ws); - TMP_SFREE; - } - else if (BELOW_THRESHOLD (n, SQR_TOOM6_THRESHOLD)) - { - mp_ptr ws; - TMP_SDECL; - TMP_SMARK; - ws = TMP_SALLOC_LIMBS (mpn_toom4_sqr_itch (n)); - mpn_toom4_sqr (p, a, n, ws); - TMP_SFREE; - } - else if (BELOW_THRESHOLD (n, SQR_TOOM8_THRESHOLD)) - { - mp_ptr ws; - TMP_SDECL; - TMP_SMARK; - ws = TMP_SALLOC_LIMBS (mpn_toom6_sqr_itch (n)); - mpn_toom6_sqr (p, a, n, ws); - TMP_SFREE; - } - else if (BELOW_THRESHOLD (n, SQR_FFT_THRESHOLD)) - { - mp_ptr ws; - TMP_DECL; - TMP_MARK; - ws = TMP_ALLOC_LIMBS (mpn_toom8_sqr_itch (n)); - mpn_toom8_sqr (p, a, n, ws); - TMP_FREE; - } - else - { - /* The current FFT code allocates its own space. That should probably - change. */ - mpn_fft_mul (p, a, n, a, n); - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqr_basecase.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqr_basecase.c deleted file mode 100644 index fc6a043a94669ce5b40bb489c3be0c0bd847119f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqr_basecase.c +++ /dev/null @@ -1,325 +0,0 @@ -/* mpn_sqr_basecase -- Internal routine to square a natural number - of length n. - - THIS IS AN INTERNAL FUNCTION WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH THIS FUNCTION THROUGH DOCUMENTED INTERFACES. - - -Copyright 1991-1994, 1996, 1997, 2000-2005, 2008, 2010, 2011 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -#if HAVE_NATIVE_mpn_sqr_diagonal -#define MPN_SQR_DIAGONAL(rp, up, n) \ - mpn_sqr_diagonal (rp, up, n) -#else -#define MPN_SQR_DIAGONAL(rp, up, n) \ - do { \ - mp_size_t _i; \ - for (_i = 0; _i < (n); _i++) \ - { \ - mp_limb_t ul, lpl; \ - ul = (up)[_i]; \ - umul_ppmm ((rp)[2 * _i + 1], lpl, ul, ul << GMP_NAIL_BITS); \ - (rp)[2 * _i] = lpl >> GMP_NAIL_BITS; \ - } \ - } while (0) -#endif - -#if HAVE_NATIVE_mpn_sqr_diag_addlsh1 -#define MPN_SQR_DIAG_ADDLSH1(rp, tp, up, n) \ - mpn_sqr_diag_addlsh1 (rp, tp, up, n) -#else -#if HAVE_NATIVE_mpn_addlsh1_n -#define MPN_SQR_DIAG_ADDLSH1(rp, tp, up, n) \ - do { \ - mp_limb_t cy; \ - MPN_SQR_DIAGONAL (rp, up, n); \ - cy = mpn_addlsh1_n (rp + 1, rp + 1, tp, 2 * n - 2); \ - rp[2 * n - 1] += cy; \ - } while (0) -#else -#define MPN_SQR_DIAG_ADDLSH1(rp, tp, up, n) \ - do { \ - mp_limb_t cy; \ - MPN_SQR_DIAGONAL (rp, up, n); \ - cy = mpn_lshift (tp, tp, 2 * n - 2, 1); \ - cy += mpn_add_n (rp + 1, rp + 1, tp, 2 * n - 2); \ - rp[2 * n - 1] += cy; \ - } while (0) -#endif -#endif - - -#undef READY_WITH_mpn_sqr_basecase - - -#if ! defined (READY_WITH_mpn_sqr_basecase) && HAVE_NATIVE_mpn_addmul_2s -void -mpn_sqr_basecase (mp_ptr rp, mp_srcptr up, mp_size_t n) -{ - mp_size_t i; - mp_limb_t tarr[2 * SQR_TOOM2_THRESHOLD]; - mp_ptr tp = tarr; - mp_limb_t cy; - - /* must fit 2*n limbs in tarr */ - ASSERT (n <= SQR_TOOM2_THRESHOLD); - - if ((n & 1) != 0) - { - if (n == 1) - { - mp_limb_t ul, lpl; - ul = up[0]; - umul_ppmm (rp[1], lpl, ul, ul << GMP_NAIL_BITS); - rp[0] = lpl >> GMP_NAIL_BITS; - return; - } - - MPN_ZERO (tp, n); - - for (i = 0; i <= n - 2; i += 2) - { - cy = mpn_addmul_2s (tp + 2 * i, up + i + 1, n - (i + 1), up + i); - tp[n + i] = cy; - } - } - else - { - if (n == 2) - { -#if HAVE_NATIVE_mpn_mul_2 - rp[3] = mpn_mul_2 (rp, up, 2, up); -#else - rp[0] = 0; - rp[1] = 0; - rp[3] = mpn_addmul_2 (rp, up, 2, up); -#endif - return; - } - - MPN_ZERO (tp, n); - - for (i = 0; i <= n - 4; i += 2) - { - cy = mpn_addmul_2s (tp + 2 * i, up + i + 1, n - (i + 1), up + i); - tp[n + i] = cy; - } - cy = mpn_addmul_1 (tp + 2 * n - 4, up + n - 1, 1, up[n - 2]); - tp[2 * n - 3] = cy; - } - - MPN_SQR_DIAG_ADDLSH1 (rp, tp, up, n); -} -#define READY_WITH_mpn_sqr_basecase -#endif - - -#if ! defined (READY_WITH_mpn_sqr_basecase) && HAVE_NATIVE_mpn_addmul_2 - -/* mpn_sqr_basecase using plain mpn_addmul_2. - - This is tricky, since we have to let mpn_addmul_2 make some undesirable - multiplies, u[k]*u[k], that we would like to let mpn_sqr_diagonal handle. - This forces us to conditionally add or subtract the mpn_sqr_diagonal - results. Examples of the product we form: - - n = 4 n = 5 n = 6 - u1u0 * u3u2u1 u1u0 * u4u3u2u1 u1u0 * u5u4u3u2u1 - u2 * u3 u3u2 * u4u3 u3u2 * u5u4u3 - u4 * u5 - add: u0 u2 u3 add: u0 u2 u4 add: u0 u2 u4 u5 - sub: u1 sub: u1 u3 sub: u1 u3 -*/ - -void -mpn_sqr_basecase (mp_ptr rp, mp_srcptr up, mp_size_t n) -{ - mp_size_t i; - mp_limb_t tarr[2 * SQR_TOOM2_THRESHOLD]; - mp_ptr tp = tarr; - mp_limb_t cy; - - /* must fit 2*n limbs in tarr */ - ASSERT (n <= SQR_TOOM2_THRESHOLD); - - if ((n & 1) != 0) - { - mp_limb_t x0, x1; - - if (n == 1) - { - mp_limb_t ul, lpl; - ul = up[0]; - umul_ppmm (rp[1], lpl, ul, ul << GMP_NAIL_BITS); - rp[0] = lpl >> GMP_NAIL_BITS; - return; - } - - /* The code below doesn't like unnormalized operands. Since such - operands are unusual, handle them with a dumb recursion. */ - if (up[n - 1] == 0) - { - rp[2 * n - 2] = 0; - rp[2 * n - 1] = 0; - mpn_sqr_basecase (rp, up, n - 1); - return; - } - - MPN_ZERO (tp, n); - - for (i = 0; i <= n - 2; i += 2) - { - cy = mpn_addmul_2 (tp + 2 * i, up + i + 1, n - (i + 1), up + i); - tp[n + i] = cy; - } - - MPN_SQR_DIAGONAL (rp, up, n); - - for (i = 2;; i += 4) - { - x0 = rp[i + 0]; - rp[i + 0] = (-x0) & GMP_NUMB_MASK; - x1 = rp[i + 1]; - rp[i + 1] = (-x1 - (x0 != 0)) & GMP_NUMB_MASK; - __GMPN_SUB_1 (cy, rp + i + 2, rp + i + 2, 2, (x1 | x0) != 0); - if (i + 4 >= 2 * n) - break; - mpn_incr_u (rp + i + 4, cy); - } - } - else - { - mp_limb_t x0, x1; - - if (n == 2) - { -#if HAVE_NATIVE_mpn_mul_2 - rp[3] = mpn_mul_2 (rp, up, 2, up); -#else - rp[0] = 0; - rp[1] = 0; - rp[3] = mpn_addmul_2 (rp, up, 2, up); -#endif - return; - } - - /* The code below doesn't like unnormalized operands. Since such - operands are unusual, handle them with a dumb recursion. */ - if (up[n - 1] == 0) - { - rp[2 * n - 2] = 0; - rp[2 * n - 1] = 0; - mpn_sqr_basecase (rp, up, n - 1); - return; - } - - MPN_ZERO (tp, n); - - for (i = 0; i <= n - 4; i += 2) - { - cy = mpn_addmul_2 (tp + 2 * i, up + i + 1, n - (i + 1), up + i); - tp[n + i] = cy; - } - cy = mpn_addmul_1 (tp + 2 * n - 4, up + n - 1, 1, up[n - 2]); - tp[2 * n - 3] = cy; - - MPN_SQR_DIAGONAL (rp, up, n); - - for (i = 2;; i += 4) - { - x0 = rp[i + 0]; - rp[i + 0] = (-x0) & GMP_NUMB_MASK; - x1 = rp[i + 1]; - rp[i + 1] = (-x1 - (x0 != 0)) & GMP_NUMB_MASK; - if (i + 6 >= 2 * n) - break; - __GMPN_SUB_1 (cy, rp + i + 2, rp + i + 2, 2, (x1 | x0) != 0); - mpn_incr_u (rp + i + 4, cy); - } - mpn_decr_u (rp + i + 2, (x1 | x0) != 0); - } - -#if HAVE_NATIVE_mpn_addlsh1_n - cy = mpn_addlsh1_n (rp + 1, rp + 1, tp, 2 * n - 2); -#else - cy = mpn_lshift (tp, tp, 2 * n - 2, 1); - cy += mpn_add_n (rp + 1, rp + 1, tp, 2 * n - 2); -#endif - rp[2 * n - 1] += cy; -} -#define READY_WITH_mpn_sqr_basecase -#endif - - -#if ! defined (READY_WITH_mpn_sqr_basecase) - -/* Default mpn_sqr_basecase using mpn_addmul_1. */ - -void -mpn_sqr_basecase (mp_ptr rp, mp_srcptr up, mp_size_t n) -{ - mp_size_t i; - - ASSERT (n >= 1); - ASSERT (! MPN_OVERLAP_P (rp, 2*n, up, n)); - - { - mp_limb_t ul, lpl; - ul = up[0]; - umul_ppmm (rp[1], lpl, ul, ul << GMP_NAIL_BITS); - rp[0] = lpl >> GMP_NAIL_BITS; - } - if (n > 1) - { - mp_limb_t tarr[2 * SQR_TOOM2_THRESHOLD]; - mp_ptr tp = tarr; - mp_limb_t cy; - - /* must fit 2*n limbs in tarr */ - ASSERT (n <= SQR_TOOM2_THRESHOLD); - - cy = mpn_mul_1 (tp, up + 1, n - 1, up[0]); - tp[n - 1] = cy; - for (i = 2; i < n; i++) - { - mp_limb_t cy; - cy = mpn_addmul_1 (tp + 2 * i - 2, up + i, n - i, up[i - 1]); - tp[n + i - 2] = cy; - } - - MPN_SQR_DIAG_ADDLSH1 (rp, tp, up, n); - } -} -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqrlo.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqrlo.c deleted file mode 100644 index 26e53ea59e819988d2cf35ff858a42930cddc342..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqrlo.c +++ /dev/null @@ -1,240 +0,0 @@ -/* mpn_sqrlo -- squares an n-limb number and returns the low n limbs - of the result. - - Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - - THIS IS (FOR NOW) AN INTERNAL FUNCTION. IT IS ONLY SAFE TO REACH THIS - FUNCTION THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST GUARANTEED - THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2004, 2005, 2009, 2010, 2012, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#if TUNE_PROGRAM_BUILD || WANT_FAT_BINARY -#define MAYBE_range_basecase 1 -#define MAYBE_range_toom22 1 -#else -#define MAYBE_range_basecase \ - ((SQRLO_DC_THRESHOLD == 0 ? SQRLO_BASECASE_THRESHOLD : SQRLO_DC_THRESHOLD) < SQR_TOOM2_THRESHOLD*36/(36-11)) -#define MAYBE_range_toom22 \ - ((SQRLO_DC_THRESHOLD == 0 ? SQRLO_BASECASE_THRESHOLD : SQRLO_DC_THRESHOLD) < SQR_TOOM3_THRESHOLD*36/(36-11) ) -#endif - -/* THINK: The DC strategy uses different constants in different Toom's - ranges. Something smoother? -*/ - -/* - Compute the least significant half of the product {xy,n}*{yp,n}, or - formally {rp,n} = {xy,n}*{yp,n} Mod (B^n). - - Above the given threshold, the Divide and Conquer strategy is used. - The operand is split in two, and a full square plus a mullo - is used to obtain the final result. The more natural strategy is to - split in two halves, but this is far from optimal when a - sub-quadratic multiplication is used. - - Mulders suggests an unbalanced split in favour of the full product, - split n = n1 + n2, where an = n1 <= n2 = (1-a)n; i.e. 0 < a <= 1/2. - - To compute the value of a, we assume that the cost of mullo for a - given size ML(n) is a fraction of the cost of a full product with - same size M(n), and the cost M(n)=n^e for some exponent 1 < e <= 2; - then we can write: - - ML(n) = 2*ML(an) + M((1-a)n) => k*M(n) = 2*k*M(n)*a^e + M(n)*(1-a)^e - - Given a value for e, want to minimise the value of k, i.e. the - function k=(1-a)^e/(1-2*a^e). - - With e=2, the exponent for schoolbook multiplication, the minimum is - given by the values a=1-a=1/2. - - With e=log(3)/log(2), the exponent for Karatsuba (aka toom22), - Mulders compute (1-a) = 0.694... and we approximate a with 11/36. - - Other possible approximations follow: - e=log(5)/log(3) [Toom-3] -> a ~= 9/40 - e=log(7)/log(4) [Toom-4] -> a ~= 7/39 - e=log(11)/log(6) [Toom-6] -> a ~= 1/8 - e=log(15)/log(8) [Toom-8] -> a ~= 1/10 - - The values above where obtained with the following trivial commands - in the gp-pari shell: - -fun(e,a)=(1-a)^e/(1-2*a^e) -mul(a,b,c)={local(m,x,p);if(b-c<1/10000,(b+c)/2,m=1;x=b;forstep(p=c,b,(b-c)/8,if(fun(a,p)<m,m=fun(a,p);x=p));mul(a,(b+x)/2,(c+x)/2))} -contfracpnqn(contfrac(mul(log(2*2-1)/log(2),1/2,0),5)) -contfracpnqn(contfrac(mul(log(3*2-1)/log(3),1/2,0),5)) -contfracpnqn(contfrac(mul(log(4*2-1)/log(4),1/2,0),5)) -contfracpnqn(contfrac(mul(log(6*2-1)/log(6),1/2,0),3)) -contfracpnqn(contfrac(mul(log(8*2-1)/log(8),1/2,0),3)) - - , - |\ - | \ - +----, - | | - | | - | |\ - | | \ - +----+--` - ^ n2 ^n1^ - - For an actual implementation, the assumption that M(n)=n^e is - incorrect, as a consequence also the assumption that ML(n)=k*M(n) - with a constant k is wrong. - - But theory suggest us two things: - - the best the multiplication product is (lower e), the more k - approaches 1, and a approaches 0. - - - A value for a smaller than optimal is probably less bad than a - bigger one: e.g. let e=log(3)/log(2), a=0.3058_ the optimal - value, and k(a)=0.808_ the mul/mullo speed ratio. We get - k(a+1/6)=0.929_ but k(a-1/6)=0.865_. -*/ - -static mp_size_t -mpn_sqrlo_itch (mp_size_t n) -{ - return 2*n; -} - -/* - mpn_dc_sqrlo requires a scratch space of 2*n limbs at tp. - It accepts tp == rp. -*/ -static void -mpn_dc_sqrlo (mp_ptr rp, mp_srcptr xp, mp_size_t n, mp_ptr tp) -{ - mp_size_t n2, n1; - ASSERT (n >= 2); - ASSERT (! MPN_OVERLAP_P (rp, n, xp, n)); - ASSERT (MPN_SAME_OR_SEPARATE2_P(rp, n, tp, 2*n)); - - /* Divide-and-conquer */ - - /* We need fractional approximation of the value 0 < a <= 1/2 - giving the minimum in the function k=(1-a)^e/(1-2*a^e). - */ - if (MAYBE_range_basecase && BELOW_THRESHOLD (n, SQR_TOOM2_THRESHOLD*36/(36-11))) - n1 = n >> 1; - else if (MAYBE_range_toom22 && BELOW_THRESHOLD (n, SQR_TOOM3_THRESHOLD*36/(36-11))) - n1 = n * 11 / (size_t) 36; /* n1 ~= n*(1-.694...) */ - else if (BELOW_THRESHOLD (n, SQR_TOOM4_THRESHOLD*40/(40-9))) - n1 = n * 9 / (size_t) 40; /* n1 ~= n*(1-.775...) */ - else if (BELOW_THRESHOLD (n, SQR_TOOM8_THRESHOLD*10/9)) - n1 = n * 7 / (size_t) 39; /* n1 ~= n*(1-.821...) */ - /* n1 = n * 4 / (size_t) 31; // n1 ~= n*(1-.871...) [TOOM66] */ - else - n1 = n / (size_t) 10; /* n1 ~= n*(1-.899...) [TOOM88] */ - - n2 = n - n1; - - /* Split as x = x1 2^(n2 GMP_NUMB_BITS) + x0 */ - - /* x0 ^ 2 */ - mpn_sqr (tp, xp, n2); - MPN_COPY (rp, tp, n2); - - /* x1 * x0 * 2^(n2 GMP_NUMB_BITS) */ - if (BELOW_THRESHOLD (n1, MULLO_BASECASE_THRESHOLD)) - mpn_mul_basecase (tp + n, xp + n2, n1, xp, n1); - else if (BELOW_THRESHOLD (n1, MULLO_DC_THRESHOLD)) - mpn_mullo_basecase (tp + n, xp + n2, xp, n1); - else - mpn_mullo_n (tp + n, xp + n2, xp, n1); - /* mpn_dc_mullo_n (tp + n, xp + n2, xp, n1, tp + n); */ -#if HAVE_NATIVE_mpn_addlsh1_n - mpn_addlsh1_n (rp + n2, tp + n2, tp + n, n1); -#else - mpn_lshift (rp + n2, tp + n, n1, 1); - mpn_add_n (rp + n2, rp + n2, tp + n2, n1); -#endif -} - -/* Avoid zero allocations when MULLO_BASECASE_THRESHOLD is 0. */ -#define SQR_BASECASE_ALLOC \ - (SQRLO_BASECASE_THRESHOLD_LIMIT == 0 ? 1 : 2*SQRLO_BASECASE_THRESHOLD_LIMIT) - -/* FIXME: This function should accept a temporary area; dc_sqrlo - accepts a pointer tp, and handle the case tp == rp, do the same here. -*/ - -void -mpn_sqrlo (mp_ptr rp, mp_srcptr xp, mp_size_t n) -{ - ASSERT (n >= 1); - ASSERT (! MPN_OVERLAP_P (rp, n, xp, n)); - - if (BELOW_THRESHOLD (n, SQRLO_BASECASE_THRESHOLD)) - { - /* FIXME: smarter criteria? */ -#if HAVE_NATIVE_mpn_mullo_basecase || ! HAVE_NATIVE_mpn_sqr_basecase - /* mullo computes as many products as sqr, but directly writes - on the result area. */ - mpn_mullo_basecase (rp, xp, xp, n); -#else - /* Allocate workspace of fixed size on stack: fast! */ - mp_limb_t tp[SQR_BASECASE_ALLOC]; - mpn_sqr_basecase (tp, xp, n); - MPN_COPY (rp, tp, n); -#endif - } - else if (BELOW_THRESHOLD (n, SQRLO_DC_THRESHOLD)) - { - mpn_sqrlo_basecase (rp, xp, n); - } - else - { - mp_ptr tp; - TMP_DECL; - TMP_MARK; - tp = TMP_ALLOC_LIMBS (mpn_sqrlo_itch (n)); - if (BELOW_THRESHOLD (n, SQRLO_SQR_THRESHOLD)) - { - mpn_dc_sqrlo (rp, xp, n, tp); - } - else - { - /* For really large operands, use plain mpn_mul_n but throw away upper n - limbs of result. */ -#if !TUNE_PROGRAM_BUILD && (SQRLO_SQR_THRESHOLD > SQR_FFT_THRESHOLD) - mpn_fft_mul (tp, xp, n, xp, n); -#else - mpn_sqr (tp, xp, n); -#endif - MPN_COPY (rp, tp, n); - } - TMP_FREE; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqrlo_basecase.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqrlo_basecase.c deleted file mode 100644 index c3159938f288aeb9bb506b1ba093195093927eaf..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqrlo_basecase.c +++ /dev/null @@ -1,181 +0,0 @@ -/* mpn_sqrlo_basecase -- Internal routine to square a natural number - of length n. - - THIS IS AN INTERNAL FUNCTION WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH THIS FUNCTION THROUGH DOCUMENTED INTERFACES. - - -Copyright 1991-1994, 1996, 1997, 2000-2005, 2008, 2010, 2011, 2015 -Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef SQRLO_SHORTCUT_MULTIPLICATIONS -#if HAVE_NATIVE_mpn_addmul_1 -#define SQRLO_SHORTCUT_MULTIPLICATIONS 0 -#else -#define SQRLO_SHORTCUT_MULTIPLICATIONS 1 -#endif -#endif - -#if HAVE_NATIVE_mpn_sqr_diagonal -#define MPN_SQR_DIAGONAL(rp, up, n) \ - mpn_sqr_diagonal (rp, up, n) -#else -#define MPN_SQR_DIAGONAL(rp, up, n) \ - do { \ - mp_size_t _i; \ - for (_i = 0; _i < (n); _i++) \ - { \ - mp_limb_t ul, lpl; \ - ul = (up)[_i]; \ - umul_ppmm ((rp)[2 * _i + 1], lpl, ul, ul << GMP_NAIL_BITS); \ - (rp)[2 * _i] = lpl >> GMP_NAIL_BITS; \ - } \ - } while (0) -#endif - -#define MPN_SQRLO_DIAGONAL(rp, up, n) \ - do { \ - mp_size_t nhalf; \ - nhalf = (n) >> 1; \ - MPN_SQR_DIAGONAL ((rp), (up), nhalf); \ - if (((n) & 1) != 0) \ - { \ - mp_limb_t op; \ - op = (up)[nhalf]; \ - (rp)[(n) - 1] = (op * op) & GMP_NUMB_MASK; \ - } \ - } while (0) - -#if HAVE_NATIVE_mpn_addlsh1_n_ip1 -#define MPN_SQRLO_DIAG_ADDLSH1(rp, tp, up, n) \ - do { \ - MPN_SQRLO_DIAGONAL((rp), (up), (n)); \ - mpn_addlsh1_n_ip1 ((rp) + 1, (tp), (n) - 1); \ - } while (0) -#else -#define MPN_SQRLO_DIAG_ADDLSH1(rp, tp, up, n) \ - do { \ - MPN_SQRLO_DIAGONAL((rp), (up), (n)); \ - mpn_lshift ((tp), (tp), (n) - 1, 1); \ - mpn_add_n ((rp) + 1, (rp) + 1, (tp), (n) - 1); \ - } while (0) -#endif - -/* Avoid zero allocations when SQRLO_LO_THRESHOLD is 0 (this code not used). */ -#define SQRLO_BASECASE_ALLOC \ - (SQRLO_DC_THRESHOLD_LIMIT < 2 ? 1 : SQRLO_DC_THRESHOLD_LIMIT - 1) - -/* Default mpn_sqrlo_basecase using mpn_addmul_1. */ -#ifndef SQRLO_SPECIAL_CASES -#define SQRLO_SPECIAL_CASES 2 -#endif -void -mpn_sqrlo_basecase (mp_ptr rp, mp_srcptr up, mp_size_t n) -{ - mp_limb_t ul; - - ASSERT (n >= 1); - ASSERT (! MPN_OVERLAP_P (rp, n, up, n)); - - ul = up[0]; - - if (n <= SQRLO_SPECIAL_CASES) - { -#if SQRLO_SPECIAL_CASES == 1 - rp[0] = (ul * ul) & GMP_NUMB_MASK; -#else - if (n == 1) - rp[0] = (ul * ul) & GMP_NUMB_MASK; - else - { - mp_limb_t hi, lo, ul1; - umul_ppmm (hi, lo, ul, ul << GMP_NAIL_BITS); - rp[0] = lo >> GMP_NAIL_BITS; - ul1 = up[1]; -#if SQRLO_SPECIAL_CASES == 2 - rp[1] = (hi + ul * ul1 * 2) & GMP_NUMB_MASK; -#else - if (n == 2) - rp[1] = (hi + ul * ul1 * 2) & GMP_NUMB_MASK; - else - { - mp_limb_t hi1; -#if GMP_NAIL_BITS != 0 - ul <<= 1; -#endif - umul_ppmm (hi1, lo, ul1 << GMP_NAIL_BITS, ul); - hi1 += ul * up[2]; -#if GMP_NAIL_BITS == 0 - hi1 = (hi1 << 1) | (lo >> (GMP_LIMB_BITS - 1)); - add_ssaaaa(rp[2], rp[1], hi1, lo << 1, ul1 * ul1, hi); -#else - hi += lo >> GMP_NAIL_BITS; - rp[1] = hi & GMP_NUMB_MASK; - rp[2] = (hi1 + ul1 * ul1 + (hi >> GMP_NUMB_BITS)) & GMP_NUMB_MASK; -#endif - } -#endif - } -#endif - } - else - { - mp_limb_t tp[SQRLO_BASECASE_ALLOC]; - mp_size_t i; - - /* must fit n-1 limbs in tp */ - ASSERT (n <= SQRLO_DC_THRESHOLD_LIMIT); - - --n; -#if SQRLO_SHORTCUT_MULTIPLICATIONS - { - mp_limb_t cy; - - cy = ul * up[n] + mpn_mul_1 (tp, up + 1, n - 1, ul); - for (i = 1; 2 * i + 1 < n; ++i) - { - ul = up[i]; - cy += ul * up[n - i] + mpn_addmul_1 (tp + 2 * i, up + i + 1, n - 2 * i - 1, ul); - } - tp [n-1] = (cy + ((n & 1)?up[i] * up[i + 1]:0)) & GMP_NUMB_MASK; - } -#else - mpn_mul_1 (tp, up + 1, n, ul); - for (i = 1; 2 * i < n; ++i) - mpn_addmul_1 (tp + 2 * i, up + i + 1, n - 2 * i, up[i]); -#endif - - MPN_SQRLO_DIAG_ADDLSH1 (rp, tp, up, n + 1); - } -} -#undef SQRLO_SPECIAL_CASES diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqrmod_bnm1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqrmod_bnm1.c deleted file mode 100644 index fd0868b90b70704dc2a4acccc3523a1824cb5f71..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqrmod_bnm1.c +++ /dev/null @@ -1,313 +0,0 @@ -/* sqrmod_bnm1.c -- squaring mod B^n-1. - - Contributed to the GNU project by Niels Möller, Torbjorn Granlund and - Marco Bodrato. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009, 2010, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Input is {ap,rn}; output is {rp,rn}, computation is - mod B^rn - 1, and values are semi-normalised; zero is represented - as either 0 or B^n - 1. Needs a scratch of 2rn limbs at tp. - tp==rp is allowed. */ -static void -mpn_bc_sqrmod_bnm1 (mp_ptr rp, mp_srcptr ap, mp_size_t rn, mp_ptr tp) -{ - mp_limb_t cy; - - ASSERT (0 < rn); - - mpn_sqr (tp, ap, rn); - cy = mpn_add_n (rp, tp, tp + rn, rn); - /* If cy == 1, then the value of rp is at most B^rn - 2, so there can - * be no overflow when adding in the carry. */ - MPN_INCR_U (rp, rn, cy); -} - - -/* Input is {ap,rn+1}; output is {rp,rn+1}, in - semi-normalised representation, computation is mod B^rn + 1. Needs - a scratch area of 2rn + 2 limbs at tp; tp == rp is allowed. - Output is normalised. */ -static void -mpn_bc_sqrmod_bnp1 (mp_ptr rp, mp_srcptr ap, mp_size_t rn, mp_ptr tp) -{ - mp_limb_t cy; - - ASSERT (0 < rn); - - mpn_sqr (tp, ap, rn + 1); - ASSERT (tp[2*rn+1] == 0); - ASSERT (tp[2*rn] < GMP_NUMB_MAX); - cy = tp[2*rn] + mpn_sub_n (rp, tp, tp+rn, rn); - rp[rn] = 0; - MPN_INCR_U (rp, rn+1, cy ); -} - - -/* Computes {rp,MIN(rn,2an)} <- {ap,an}^2 Mod(B^rn-1) - * - * The result is expected to be ZERO if and only if the operand - * already is. Otherwise the class [0] Mod(B^rn-1) is represented by - * B^rn-1. - * It should not be a problem if sqrmod_bnm1 is used to - * compute the full square with an <= 2*rn, because this condition - * implies (B^an-1)^2 < (B^rn-1) . - * - * Requires rn/4 < an <= rn - * Scratch need: rn/2 + (need for recursive call OR rn + 3). This gives - * - * S(n) <= rn/2 + MAX (rn + 4, S(n/2)) <= 3/2 rn + 4 - */ -void -mpn_sqrmod_bnm1 (mp_ptr rp, mp_size_t rn, mp_srcptr ap, mp_size_t an, mp_ptr tp) -{ - ASSERT (0 < an); - ASSERT (an <= rn); - - if ((rn & 1) != 0 || BELOW_THRESHOLD (rn, SQRMOD_BNM1_THRESHOLD)) - { - if (UNLIKELY (an < rn)) - { - if (UNLIKELY (2*an <= rn)) - { - mpn_sqr (rp, ap, an); - } - else - { - mp_limb_t cy; - mpn_sqr (tp, ap, an); - cy = mpn_add (rp, tp, rn, tp + rn, 2*an - rn); - MPN_INCR_U (rp, rn, cy); - } - } - else - mpn_bc_sqrmod_bnm1 (rp, ap, rn, tp); - } - else - { - mp_size_t n; - mp_limb_t cy; - mp_limb_t hi; - - n = rn >> 1; - - ASSERT (2*an > n); - - /* Compute xm = a^2 mod (B^n - 1), xp = a^2 mod (B^n + 1) - and crt together as - - x = -xp * B^n + (B^n + 1) * [ (xp + xm)/2 mod (B^n-1)] - */ - -#define a0 ap -#define a1 (ap + n) - -#define xp tp /* 2n + 2 */ - /* am1 maybe in {xp, n} */ -#define sp1 (tp + 2*n + 2) - /* ap1 maybe in {sp1, n + 1} */ - - { - mp_srcptr am1; - mp_size_t anm; - mp_ptr so; - - if (LIKELY (an > n)) - { - so = xp + n; - am1 = xp; - cy = mpn_add (xp, a0, n, a1, an - n); - MPN_INCR_U (xp, n, cy); - anm = n; - } - else - { - so = xp; - am1 = a0; - anm = an; - } - - mpn_sqrmod_bnm1 (rp, n, am1, anm, so); - } - - { - int k; - mp_srcptr ap1; - mp_size_t anp; - - if (LIKELY (an > n)) { - ap1 = sp1; - cy = mpn_sub (sp1, a0, n, a1, an - n); - sp1[n] = 0; - MPN_INCR_U (sp1, n + 1, cy); - anp = n + ap1[n]; - } else { - ap1 = a0; - anp = an; - } - - if (BELOW_THRESHOLD (n, MUL_FFT_MODF_THRESHOLD)) - k=0; - else - { - int mask; - k = mpn_fft_best_k (n, 1); - mask = (1<<k) -1; - while (n & mask) {k--; mask >>=1;}; - } - if (k >= FFT_FIRST_K) - xp[n] = mpn_mul_fft (xp, n, ap1, anp, ap1, anp, k); - else if (UNLIKELY (ap1 == a0)) - { - ASSERT (anp <= n); - ASSERT (2*anp > n); - mpn_sqr (xp, a0, an); - anp = 2*an - n; - cy = mpn_sub (xp, xp, n, xp + n, anp); - xp[n] = 0; - MPN_INCR_U (xp, n+1, cy); - } - else - mpn_bc_sqrmod_bnp1 (xp, ap1, n, xp); - } - - /* Here the CRT recomposition begins. - - xm <- (xp + xm)/2 = (xp + xm)B^n/2 mod (B^n-1) - Division by 2 is a bitwise rotation. - - Assumes xp normalised mod (B^n+1). - - The residue class [0] is represented by [B^n-1]; except when - both input are ZERO. - */ - -#if HAVE_NATIVE_mpn_rsh1add_n || HAVE_NATIVE_mpn_rsh1add_nc -#if HAVE_NATIVE_mpn_rsh1add_nc - cy = mpn_rsh1add_nc(rp, rp, xp, n, xp[n]); /* B^n = 1 */ - hi = cy << (GMP_NUMB_BITS - 1); - cy = 0; - /* next update of rp[n-1] will set cy = 1 only if rp[n-1]+=hi - overflows, i.e. a further increment will not overflow again. */ -#else /* ! _nc */ - cy = xp[n] + mpn_rsh1add_n(rp, rp, xp, n); /* B^n = 1 */ - hi = (cy<<(GMP_NUMB_BITS-1))&GMP_NUMB_MASK; /* (cy&1) << ... */ - cy >>= 1; - /* cy = 1 only if xp[n] = 1 i.e. {xp,n} = ZERO, this implies that - the rsh1add was a simple rshift: the top bit is 0. cy=1 => hi=0. */ -#endif -#if GMP_NAIL_BITS == 0 - add_ssaaaa(cy, rp[n-1], cy, rp[n-1], CNST_LIMB(0), hi); -#else - cy += (hi & rp[n-1]) >> (GMP_NUMB_BITS-1); - rp[n-1] ^= hi; -#endif -#else /* ! HAVE_NATIVE_mpn_rsh1add_n */ -#if HAVE_NATIVE_mpn_add_nc - cy = mpn_add_nc(rp, rp, xp, n, xp[n]); -#else /* ! _nc */ - cy = xp[n] + mpn_add_n(rp, rp, xp, n); /* xp[n] == 1 implies {xp,n} == ZERO */ -#endif - cy += (rp[0]&1); - mpn_rshift(rp, rp, n, 1); - ASSERT (cy <= 2); - hi = (cy<<(GMP_NUMB_BITS-1))&GMP_NUMB_MASK; /* (cy&1) << ... */ - cy >>= 1; - /* We can have cy != 0 only if hi = 0... */ - ASSERT ((rp[n-1] & GMP_NUMB_HIGHBIT) == 0); - rp[n-1] |= hi; - /* ... rp[n-1] + cy can not overflow, the following INCR is correct. */ -#endif - ASSERT (cy <= 1); - /* Next increment can not overflow, read the previous comments about cy. */ - ASSERT ((cy == 0) || ((rp[n-1] & GMP_NUMB_HIGHBIT) == 0)); - MPN_INCR_U(rp, n, cy); - - /* Compute the highest half: - ([(xp + xm)/2 mod (B^n-1)] - xp ) * B^n - */ - if (UNLIKELY (2*an < rn)) - { - /* Note that in this case, the only way the result can equal - zero mod B^{rn} - 1 is if the input is zero, and - then the output of both the recursive calls and this CRT - reconstruction is zero, not B^{rn} - 1. */ - cy = mpn_sub_n (rp + n, rp, xp, 2*an - n); - - /* FIXME: This subtraction of the high parts is not really - necessary, we do it to get the carry out, and for sanity - checking. */ - cy = xp[n] + mpn_sub_nc (xp + 2*an - n, rp + 2*an - n, - xp + 2*an - n, rn - 2*an, cy); - ASSERT (mpn_zero_p (xp + 2*an - n+1, rn - 1 - 2*an)); - cy = mpn_sub_1 (rp, rp, 2*an, cy); - ASSERT (cy == (xp + 2*an - n)[0]); - } - else - { - cy = xp[n] + mpn_sub_n (rp + n, rp, xp, n); - /* cy = 1 only if {xp,n+1} is not ZERO, i.e. {rp,n} is not ZERO. - DECR will affect _at most_ the lowest n limbs. */ - MPN_DECR_U (rp, 2*n, cy); - } -#undef a0 -#undef a1 -#undef xp -#undef sp1 - } -} - -mp_size_t -mpn_sqrmod_bnm1_next_size (mp_size_t n) -{ - mp_size_t nh; - - if (BELOW_THRESHOLD (n, SQRMOD_BNM1_THRESHOLD)) - return n; - if (BELOW_THRESHOLD (n, 4 * (SQRMOD_BNM1_THRESHOLD - 1) + 1)) - return (n + (2-1)) & (-2); - if (BELOW_THRESHOLD (n, 8 * (SQRMOD_BNM1_THRESHOLD - 1) + 1)) - return (n + (4-1)) & (-4); - - nh = (n + 1) >> 1; - - if (BELOW_THRESHOLD (nh, SQR_FFT_MODF_THRESHOLD)) - return (n + (8-1)) & (-8); - - return 2 * mpn_fft_next_size (nh, mpn_fft_best_k (nh, 1)); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqrtrem.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqrtrem.c deleted file mode 100644 index 4835e8e59545efe44faf41a8e7b63a774fe2bd28..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sqrtrem.c +++ /dev/null @@ -1,519 +0,0 @@ -/* mpn_sqrtrem -- square root and remainder - - Contributed to the GNU project by Paul Zimmermann (most code), - Torbjorn Granlund (mpn_sqrtrem1) and Marco Bodrato (mpn_dc_sqrt). - - THE FUNCTIONS IN THIS FILE EXCEPT mpn_sqrtrem ARE INTERNAL WITH A - MUTABLE INTERFACE. IT IS ONLY SAFE TO REACH THEM THROUGH DOCUMENTED - INTERFACES. IN FACT, IT IS ALMOST GUARANTEED THAT THEY WILL CHANGE OR - DISAPPEAR IN A FUTURE GMP RELEASE. - -Copyright 1999-2002, 2004, 2005, 2008, 2010, 2012, 2015 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -/* See "Karatsuba Square Root", reference in gmp.texi. */ - - -#include <stdio.h> -#include <stdlib.h> - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" -#define USE_DIVAPPR_Q 1 -#define TRACE(x) - -static const unsigned char invsqrttab[384] = /* The common 0x100 was removed */ -{ - 0xff,0xfd,0xfb,0xf9,0xf7,0xf5,0xf3,0xf2, /* sqrt(1/80)..sqrt(1/87) */ - 0xf0,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe4, /* sqrt(1/88)..sqrt(1/8f) */ - 0xe2,0xe0,0xdf,0xdd,0xdb,0xda,0xd8,0xd7, /* sqrt(1/90)..sqrt(1/97) */ - 0xd5,0xd4,0xd2,0xd1,0xcf,0xce,0xcc,0xcb, /* sqrt(1/98)..sqrt(1/9f) */ - 0xc9,0xc8,0xc6,0xc5,0xc4,0xc2,0xc1,0xc0, /* sqrt(1/a0)..sqrt(1/a7) */ - 0xbe,0xbd,0xbc,0xba,0xb9,0xb8,0xb7,0xb5, /* sqrt(1/a8)..sqrt(1/af) */ - 0xb4,0xb3,0xb2,0xb0,0xaf,0xae,0xad,0xac, /* sqrt(1/b0)..sqrt(1/b7) */ - 0xaa,0xa9,0xa8,0xa7,0xa6,0xa5,0xa4,0xa3, /* sqrt(1/b8)..sqrt(1/bf) */ - 0xa2,0xa0,0x9f,0x9e,0x9d,0x9c,0x9b,0x9a, /* sqrt(1/c0)..sqrt(1/c7) */ - 0x99,0x98,0x97,0x96,0x95,0x94,0x93,0x92, /* sqrt(1/c8)..sqrt(1/cf) */ - 0x91,0x90,0x8f,0x8e,0x8d,0x8c,0x8c,0x8b, /* sqrt(1/d0)..sqrt(1/d7) */ - 0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x83, /* sqrt(1/d8)..sqrt(1/df) */ - 0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d, /* sqrt(1/e0)..sqrt(1/e7) */ - 0x7c,0x7b,0x7a,0x79,0x79,0x78,0x77,0x76, /* sqrt(1/e8)..sqrt(1/ef) */ - 0x76,0x75,0x74,0x73,0x72,0x72,0x71,0x70, /* sqrt(1/f0)..sqrt(1/f7) */ - 0x6f,0x6f,0x6e,0x6d,0x6d,0x6c,0x6b,0x6a, /* sqrt(1/f8)..sqrt(1/ff) */ - 0x6a,0x69,0x68,0x68,0x67,0x66,0x66,0x65, /* sqrt(1/100)..sqrt(1/107) */ - 0x64,0x64,0x63,0x62,0x62,0x61,0x60,0x60, /* sqrt(1/108)..sqrt(1/10f) */ - 0x5f,0x5e,0x5e,0x5d,0x5c,0x5c,0x5b,0x5a, /* sqrt(1/110)..sqrt(1/117) */ - 0x5a,0x59,0x59,0x58,0x57,0x57,0x56,0x56, /* sqrt(1/118)..sqrt(1/11f) */ - 0x55,0x54,0x54,0x53,0x53,0x52,0x52,0x51, /* sqrt(1/120)..sqrt(1/127) */ - 0x50,0x50,0x4f,0x4f,0x4e,0x4e,0x4d,0x4d, /* sqrt(1/128)..sqrt(1/12f) */ - 0x4c,0x4b,0x4b,0x4a,0x4a,0x49,0x49,0x48, /* sqrt(1/130)..sqrt(1/137) */ - 0x48,0x47,0x47,0x46,0x46,0x45,0x45,0x44, /* sqrt(1/138)..sqrt(1/13f) */ - 0x44,0x43,0x43,0x42,0x42,0x41,0x41,0x40, /* sqrt(1/140)..sqrt(1/147) */ - 0x40,0x3f,0x3f,0x3e,0x3e,0x3d,0x3d,0x3c, /* sqrt(1/148)..sqrt(1/14f) */ - 0x3c,0x3b,0x3b,0x3a,0x3a,0x39,0x39,0x39, /* sqrt(1/150)..sqrt(1/157) */ - 0x38,0x38,0x37,0x37,0x36,0x36,0x35,0x35, /* sqrt(1/158)..sqrt(1/15f) */ - 0x35,0x34,0x34,0x33,0x33,0x32,0x32,0x32, /* sqrt(1/160)..sqrt(1/167) */ - 0x31,0x31,0x30,0x30,0x2f,0x2f,0x2f,0x2e, /* sqrt(1/168)..sqrt(1/16f) */ - 0x2e,0x2d,0x2d,0x2d,0x2c,0x2c,0x2b,0x2b, /* sqrt(1/170)..sqrt(1/177) */ - 0x2b,0x2a,0x2a,0x29,0x29,0x29,0x28,0x28, /* sqrt(1/178)..sqrt(1/17f) */ - 0x27,0x27,0x27,0x26,0x26,0x26,0x25,0x25, /* sqrt(1/180)..sqrt(1/187) */ - 0x24,0x24,0x24,0x23,0x23,0x23,0x22,0x22, /* sqrt(1/188)..sqrt(1/18f) */ - 0x21,0x21,0x21,0x20,0x20,0x20,0x1f,0x1f, /* sqrt(1/190)..sqrt(1/197) */ - 0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c, /* sqrt(1/198)..sqrt(1/19f) */ - 0x1c,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x19, /* sqrt(1/1a0)..sqrt(1/1a7) */ - 0x19,0x19,0x18,0x18,0x18,0x18,0x17,0x17, /* sqrt(1/1a8)..sqrt(1/1af) */ - 0x17,0x16,0x16,0x16,0x15,0x15,0x15,0x14, /* sqrt(1/1b0)..sqrt(1/1b7) */ - 0x14,0x14,0x13,0x13,0x13,0x12,0x12,0x12, /* sqrt(1/1b8)..sqrt(1/1bf) */ - 0x12,0x11,0x11,0x11,0x10,0x10,0x10,0x0f, /* sqrt(1/1c0)..sqrt(1/1c7) */ - 0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0d,0x0d, /* sqrt(1/1c8)..sqrt(1/1cf) */ - 0x0d,0x0c,0x0c,0x0c,0x0c,0x0b,0x0b,0x0b, /* sqrt(1/1d0)..sqrt(1/1d7) */ - 0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09, /* sqrt(1/1d8)..sqrt(1/1df) */ - 0x08,0x08,0x08,0x07,0x07,0x07,0x07,0x06, /* sqrt(1/1e0)..sqrt(1/1e7) */ - 0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04, /* sqrt(1/1e8)..sqrt(1/1ef) */ - 0x04,0x04,0x03,0x03,0x03,0x03,0x02,0x02, /* sqrt(1/1f0)..sqrt(1/1f7) */ - 0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00 /* sqrt(1/1f8)..sqrt(1/1ff) */ -}; - -/* Compute s = floor(sqrt(a0)), and *rp = a0 - s^2. */ - -#if GMP_NUMB_BITS > 32 -#define MAGIC CNST_LIMB(0x10000000000) /* 0xffe7debbfc < MAGIC < 0x232b1850f410 */ -#else -#define MAGIC CNST_LIMB(0x100000) /* 0xfee6f < MAGIC < 0x29cbc8 */ -#endif - -static mp_limb_t -mpn_sqrtrem1 (mp_ptr rp, mp_limb_t a0) -{ -#if GMP_NUMB_BITS > 32 - mp_limb_t a1; -#endif - mp_limb_t x0, t2, t, x2; - unsigned abits; - - ASSERT_ALWAYS (GMP_NAIL_BITS == 0); - ASSERT_ALWAYS (GMP_LIMB_BITS == 32 || GMP_LIMB_BITS == 64); - ASSERT (a0 >= GMP_NUMB_HIGHBIT / 2); - - /* Use Newton iterations for approximating 1/sqrt(a) instead of sqrt(a), - since we can do the former without division. As part of the last - iteration convert from 1/sqrt(a) to sqrt(a). */ - - abits = a0 >> (GMP_LIMB_BITS - 1 - 8); /* extract bits for table lookup */ - x0 = 0x100 | invsqrttab[abits - 0x80]; /* initial 1/sqrt(a) */ - - /* x0 is now an 8 bits approximation of 1/sqrt(a0) */ - -#if GMP_NUMB_BITS > 32 - a1 = a0 >> (GMP_LIMB_BITS - 1 - 32); - t = (mp_limb_signed_t) (CNST_LIMB(0x2000000000000) - 0x30000 - a1 * x0 * x0) >> 16; - x0 = (x0 << 16) + ((mp_limb_signed_t) (x0 * t) >> (16+2)); - - /* x0 is now a 16 bits approximation of 1/sqrt(a0) */ - - t2 = x0 * (a0 >> (32-8)); - t = t2 >> 25; - t = ((mp_limb_signed_t) ((a0 << 14) - t * t - MAGIC) >> (32-8)); - x0 = t2 + ((mp_limb_signed_t) (x0 * t) >> 15); - x0 >>= 32; -#else - t2 = x0 * (a0 >> (16-8)); - t = t2 >> 13; - t = ((mp_limb_signed_t) ((a0 << 6) - t * t - MAGIC) >> (16-8)); - x0 = t2 + ((mp_limb_signed_t) (x0 * t) >> 7); - x0 >>= 16; -#endif - - /* x0 is now a full limb approximation of sqrt(a0) */ - - x2 = x0 * x0; - if (x2 + 2*x0 <= a0 - 1) - { - x2 += 2*x0 + 1; - x0++; - } - - *rp = a0 - x2; - return x0; -} - - -#define Prec (GMP_NUMB_BITS >> 1) - -/* same as mpn_sqrtrem, but for size=2 and {np, 2} normalized - return cc such that {np, 2} = sp[0]^2 + cc*2^GMP_NUMB_BITS + rp[0] */ -static mp_limb_t -mpn_sqrtrem2 (mp_ptr sp, mp_ptr rp, mp_srcptr np) -{ - mp_limb_t q, u, np0, sp0, rp0, q2; - int cc; - - ASSERT (np[1] >= GMP_NUMB_HIGHBIT / 2); - - np0 = np[0]; - sp0 = mpn_sqrtrem1 (rp, np[1]); - rp0 = rp[0]; - /* rp0 <= 2*sp0 < 2^(Prec + 1) */ - rp0 = (rp0 << (Prec - 1)) + (np0 >> (Prec + 1)); - q = rp0 / sp0; - /* q <= 2^Prec, if q = 2^Prec, reduce the overestimate. */ - q -= q >> Prec; - /* now we have q < 2^Prec */ - u = rp0 - q * sp0; - /* now we have (rp[0]<<Prec + np0>>Prec)/2 = q * sp0 + u */ - sp0 = (sp0 << Prec) | q; - cc = u >> (Prec - 1); - rp0 = ((u << (Prec + 1)) & GMP_NUMB_MASK) + (np0 & ((CNST_LIMB (1) << (Prec + 1)) - 1)); - /* subtract q * q from rp */ - q2 = q * q; - cc -= rp0 < q2; - rp0 -= q2; - if (cc < 0) - { - rp0 += sp0; - cc += rp0 < sp0; - --sp0; - rp0 += sp0; - cc += rp0 < sp0; - } - - rp[0] = rp0; - sp[0] = sp0; - return cc; -} - -/* writes in {sp, n} the square root (rounded towards zero) of {np, 2n}, - and in {np, n} the low n limbs of the remainder, returns the high - limb of the remainder (which is 0 or 1). - Assumes {np, 2n} is normalized, i.e. np[2n-1] >= B/4 - where B=2^GMP_NUMB_BITS. - Needs a scratch of n/2+1 limbs. */ -static mp_limb_t -mpn_dc_sqrtrem (mp_ptr sp, mp_ptr np, mp_size_t n, mp_limb_t approx, mp_ptr scratch) -{ - mp_limb_t q; /* carry out of {sp, n} */ - int c, b; /* carry out of remainder */ - mp_size_t l, h; - - ASSERT (np[2 * n - 1] >= GMP_NUMB_HIGHBIT / 2); - - if (n == 1) - c = mpn_sqrtrem2 (sp, np, np); - else - { - l = n / 2; - h = n - l; - q = mpn_dc_sqrtrem (sp + l, np + 2 * l, h, 0, scratch); - if (q != 0) - ASSERT_CARRY (mpn_sub_n (np + 2 * l, np + 2 * l, sp + l, h)); - TRACE(printf("tdiv_qr(,,,,%u,,%u) -> %u\n", (unsigned) n, (unsigned) h, (unsigned) (n - h + 1))); - mpn_tdiv_qr (scratch, np + l, 0, np + l, n, sp + l, h); - q += scratch[l]; - c = scratch[0] & 1; - mpn_rshift (sp, scratch, l, 1); - sp[l - 1] |= (q << (GMP_NUMB_BITS - 1)) & GMP_NUMB_MASK; - if (UNLIKELY ((sp[0] & approx) != 0)) /* (sp[0] & mask) > 1 */ - return 1; /* Remainder is non-zero */ - q >>= 1; - if (c != 0) - c = mpn_add_n (np + l, np + l, sp + l, h); - TRACE(printf("sqr(,,%u)\n", (unsigned) l)); - mpn_sqr (np + n, sp, l); - b = q + mpn_sub_n (np, np, np + n, 2 * l); - c -= (l == h) ? b : mpn_sub_1 (np + 2 * l, np + 2 * l, 1, (mp_limb_t) b); - - if (c < 0) - { - q = mpn_add_1 (sp + l, sp + l, h, q); -#if HAVE_NATIVE_mpn_addlsh1_n_ip1 || HAVE_NATIVE_mpn_addlsh1_n - c += mpn_addlsh1_n_ip1 (np, sp, n) + 2 * q; -#else - c += mpn_addmul_1 (np, sp, n, CNST_LIMB(2)) + 2 * q; -#endif - c -= mpn_sub_1 (np, np, n, CNST_LIMB(1)); - q -= mpn_sub_1 (sp, sp, n, CNST_LIMB(1)); - } - } - - return c; -} - -#if USE_DIVAPPR_Q -static void -mpn_divappr_q (mp_ptr qp, mp_srcptr np, mp_size_t nn, mp_srcptr dp, mp_size_t dn, mp_ptr scratch) -{ - gmp_pi1_t inv; - mp_limb_t qh; - ASSERT (dn > 2); - ASSERT (nn >= dn); - ASSERT ((dp[dn-1] & GMP_NUMB_HIGHBIT) != 0); - - MPN_COPY (scratch, np, nn); - invert_pi1 (inv, dp[dn-1], dp[dn-2]); - if (BELOW_THRESHOLD (dn, DC_DIVAPPR_Q_THRESHOLD)) - qh = mpn_sbpi1_divappr_q (qp, scratch, nn, dp, dn, inv.inv32); - else if (BELOW_THRESHOLD (dn, MU_DIVAPPR_Q_THRESHOLD)) - qh = mpn_dcpi1_divappr_q (qp, scratch, nn, dp, dn, &inv); - else - { - mp_size_t itch = mpn_mu_divappr_q_itch (nn, dn, 0); - TMP_DECL; - TMP_MARK; - /* Sadly, scratch is too small. */ - qh = mpn_mu_divappr_q (qp, np, nn, dp, dn, TMP_ALLOC_LIMBS (itch)); - TMP_FREE; - } - qp [nn - dn] = qh; -} -#endif - -/* writes in {sp, n} the square root (rounded towards zero) of {np, 2n-odd}, - returns zero if the operand was a perfect square, one otherwise. - Assumes {np, 2n-odd}*4^nsh is normalized, i.e. B > np[2n-1-odd]*4^nsh >= B/4 - where B=2^GMP_NUMB_BITS. - THINK: In the odd case, three more (dummy) limbs are taken into account, - when nsh is maximal, two limbs are discarded from the result of the - division. Too much? Is a single dummy limb enough? */ -static int -mpn_dc_sqrt (mp_ptr sp, mp_srcptr np, mp_size_t n, unsigned nsh, unsigned odd) -{ - mp_limb_t q; /* carry out of {sp, n} */ - int c; /* carry out of remainder */ - mp_size_t l, h; - mp_ptr qp, tp, scratch; - TMP_DECL; - TMP_MARK; - - ASSERT (np[2 * n - 1 - odd] != 0); - ASSERT (n > 4); - ASSERT (nsh < GMP_NUMB_BITS / 2); - - l = (n - 1) / 2; - h = n - l; - ASSERT (n >= l + 2 && l + 2 >= h && h > l && l >= 1 + odd); - scratch = TMP_ALLOC_LIMBS (l + 2 * n + 5 - USE_DIVAPPR_Q); /* n + 2-USE_DIVAPPR_Q */ - tp = scratch + n + 2 - USE_DIVAPPR_Q; /* n + h + 1, but tp [-1] is writable */ - if (nsh != 0) - { - /* o is used to exactly set the lowest bits of the dividend, is it needed? */ - int o = l > (1 + odd); - ASSERT_NOCARRY (mpn_lshift (tp - o, np + l - 1 - o - odd, n + h + 1 + o, 2 * nsh)); - } - else - MPN_COPY (tp, np + l - 1 - odd, n + h + 1); - q = mpn_dc_sqrtrem (sp + l, tp + l + 1, h, 0, scratch); - if (q != 0) - ASSERT_CARRY (mpn_sub_n (tp + l + 1, tp + l + 1, sp + l, h)); - qp = tp + n + 1; /* l + 2 */ - TRACE(printf("div(appr)_q(,,%u,,%u) -> %u \n", (unsigned) n+1, (unsigned) h, (unsigned) (n + 1 - h + 1))); -#if USE_DIVAPPR_Q - mpn_divappr_q (qp, tp, n + 1, sp + l, h, scratch); -#else - mpn_div_q (qp, tp, n + 1, sp + l, h, scratch); -#endif - q += qp [l + 1]; - c = 1; - if (q > 1) - { - /* FIXME: if s!=0 we will shift later, a noop on this area. */ - MPN_FILL (sp, l, GMP_NUMB_MAX); - } - else - { - /* FIXME: if s!=0 we will shift again later, shift just once. */ - mpn_rshift (sp, qp + 1, l, 1); - sp[l - 1] |= q << (GMP_NUMB_BITS - 1); - if (((qp[0] >> (2 + USE_DIVAPPR_Q)) | /* < 3 + 4*USE_DIVAPPR_Q */ - (qp[1] & (GMP_NUMB_MASK >> ((GMP_NUMB_BITS >> odd)- nsh - 1)))) == 0) - { - mp_limb_t cy; - /* Approximation is not good enough, the extra limb(+ nsh bits) - is smaller than needed to absorb the possible error. */ - /* {qp + 1, l + 1} equals 2*{sp, l} */ - /* FIXME: use mullo or wrap-around, or directly evaluate - remainder with a single sqrmod_bnm1. */ - TRACE(printf("mul(,,%u,,%u)\n", (unsigned) h, (unsigned) (l+1))); - ASSERT_NOCARRY (mpn_mul (scratch, sp + l, h, qp + 1, l + 1)); - /* Compute the remainder of the previous mpn_div(appr)_q. */ - cy = mpn_sub_n (tp + 1, tp + 1, scratch, h); -#if USE_DIVAPPR_Q || WANT_ASSERT - MPN_DECR_U (tp + 1 + h, l, cy); -#if USE_DIVAPPR_Q - ASSERT (mpn_cmp (tp + 1 + h, scratch + h, l) <= 0); - if (mpn_cmp (tp + 1 + h, scratch + h, l) < 0) - { - /* May happen only if div result was not exact. */ -#if HAVE_NATIVE_mpn_addlsh1_n_ip1 || HAVE_NATIVE_mpn_addlsh1_n - cy = mpn_addlsh1_n_ip1 (tp + 1, sp + l, h); -#else - cy = mpn_addmul_1 (tp + 1, sp + l, h, CNST_LIMB(2)); -#endif - ASSERT_NOCARRY (mpn_add_1 (tp + 1 + h, tp + 1 + h, l, cy)); - MPN_DECR_U (sp, l, 1); - } - /* Can the root be exact when a correction was needed? We - did not find an example, but it depends on divappr - internals, and we can not assume it true in general...*/ - /* else */ -#else /* WANT_ASSERT */ - ASSERT (mpn_cmp (tp + 1 + h, scratch + h, l) == 0); -#endif -#endif - if (mpn_zero_p (tp + l + 1, h - l)) - { - TRACE(printf("sqr(,,%u)\n", (unsigned) l)); - mpn_sqr (scratch, sp, l); - c = mpn_cmp (tp + 1, scratch + l, l); - if (c == 0) - { - if (nsh != 0) - { - mpn_lshift (tp, np, l, 2 * nsh); - np = tp; - } - c = mpn_cmp (np, scratch + odd, l - odd); - } - if (c < 0) - { - MPN_DECR_U (sp, l, 1); - c = 1; - } - } - } - } - TMP_FREE; - - if ((odd | nsh) != 0) - mpn_rshift (sp, sp, n, nsh + (odd ? GMP_NUMB_BITS / 2 : 0)); - return c; -} - - -mp_size_t -mpn_sqrtrem (mp_ptr sp, mp_ptr rp, mp_srcptr np, mp_size_t nn) -{ - mp_limb_t *tp, s0[1], cc, high, rl; - int c; - mp_size_t rn, tn; - TMP_DECL; - - ASSERT (nn > 0); - ASSERT_MPN (np, nn); - - ASSERT (np[nn - 1] != 0); - ASSERT (rp == NULL || MPN_SAME_OR_SEPARATE_P (np, rp, nn)); - ASSERT (rp == NULL || ! MPN_OVERLAP_P (sp, (nn + 1) / 2, rp, nn)); - ASSERT (! MPN_OVERLAP_P (sp, (nn + 1) / 2, np, nn)); - - high = np[nn - 1]; - if (high & (GMP_NUMB_HIGHBIT | (GMP_NUMB_HIGHBIT / 2))) - c = 0; - else - { - count_leading_zeros (c, high); - c -= GMP_NAIL_BITS; - - c = c / 2; /* we have to shift left by 2c bits to normalize {np, nn} */ - } - if (nn == 1) { - if (c == 0) - { - sp[0] = mpn_sqrtrem1 (&rl, high); - if (rp != NULL) - rp[0] = rl; - } - else - { - cc = mpn_sqrtrem1 (&rl, high << (2*c)) >> c; - sp[0] = cc; - if (rp != NULL) - rp[0] = rl = high - cc*cc; - } - return rl != 0; - } - tn = (nn + 1) / 2; /* 2*tn is the smallest even integer >= nn */ - - if ((rp == NULL) && (nn > 8)) - return mpn_dc_sqrt (sp, np, tn, c, nn & 1); - TMP_MARK; - if (((nn & 1) | c) != 0) - { - mp_limb_t mask; - mp_ptr scratch; - TMP_ALLOC_LIMBS_2 (tp, 2 * tn, scratch, tn / 2 + 1); - tp[0] = 0; /* needed only when 2*tn > nn, but saves a test */ - if (c != 0) - mpn_lshift (tp + (nn & 1), np, nn, 2 * c); - else - MPN_COPY (tp + (nn & 1), np, nn); - c += (nn & 1) ? GMP_NUMB_BITS / 2 : 0; /* c now represents k */ - mask = (CNST_LIMB (1) << c) - 1; - rl = mpn_dc_sqrtrem (sp, tp, tn, (rp == NULL) ? mask - 1 : 0, scratch); - /* We have 2^(2k)*N = S^2 + R where k = c + (2tn-nn)*GMP_NUMB_BITS/2, - thus 2^(2k)*N = (S-s0)^2 + 2*S*s0 - s0^2 + R where s0=S mod 2^k */ - s0[0] = sp[0] & mask; /* S mod 2^k */ - rl += mpn_addmul_1 (tp, sp, tn, 2 * s0[0]); /* R = R + 2*s0*S */ - cc = mpn_submul_1 (tp, s0, 1, s0[0]); - rl -= (tn > 1) ? mpn_sub_1 (tp + 1, tp + 1, tn - 1, cc) : cc; - mpn_rshift (sp, sp, tn, c); - tp[tn] = rl; - if (rp == NULL) - rp = tp; - c = c << 1; - if (c < GMP_NUMB_BITS) - tn++; - else - { - tp++; - c -= GMP_NUMB_BITS; - } - if (c != 0) - mpn_rshift (rp, tp, tn, c); - else - MPN_COPY_INCR (rp, tp, tn); - rn = tn; - } - else - { - if (rp != np) - { - if (rp == NULL) /* nn <= 8 */ - rp = TMP_SALLOC_LIMBS (nn); - MPN_COPY (rp, np, nn); - } - rn = tn + (rp[tn] = mpn_dc_sqrtrem (sp, rp, tn, 0, TMP_ALLOC_LIMBS(tn / 2 + 1))); - } - - MPN_NORMALIZE (rp, rn); - - TMP_FREE; - return rn; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub.c deleted file mode 100644 index 3fbcbbe98b4f3f14b96d815bf32418df68990c87..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub.c +++ /dev/null @@ -1,34 +0,0 @@ -/* mpn_sub - subtract mpn from mpn. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define __GMP_FORCE_mpn_sub 1 - -#include "gmp.h" -#include "gmp-impl.h" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_1.c deleted file mode 100644 index db2e6f948f5d0761dc34281cacfa4fc7f1ff61d7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_1.c +++ /dev/null @@ -1,34 +0,0 @@ -/* mpn_sub_1 - subtract limb from mpn. - -Copyright 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define __GMP_FORCE_mpn_sub_1 1 - -#include "gmp.h" -#include "gmp-impl.h" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_err1_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_err1_n.c deleted file mode 100644 index 340313a323a4dfe14b2ca5b1b79727ab073f4968..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_err1_n.c +++ /dev/null @@ -1,101 +0,0 @@ -/* mpn_sub_err1_n -- sub_n with one error term - - Contributed by David Harvey. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* - Computes: - - (1) {rp,n} := {up,n} - {vp,n} (just like mpn_sub_n) with incoming borrow cy, - return value is borrow out. - - (2) Let c[i+1] = borrow from i-th limb subtraction (c[0] = cy). - Computes c[1]*yp[n-1] + ... + c[n]*yp[0], stores two-limb result at ep. - - Requires n >= 1. - - None of the outputs may overlap each other or any of the inputs, except - that {rp,n} may be equal to {up,n} or {vp,n}. -*/ -mp_limb_t -mpn_sub_err1_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, - mp_ptr ep, mp_srcptr yp, - mp_size_t n, mp_limb_t cy) -{ - mp_limb_t el, eh, ul, vl, yl, zl, rl, sl, cy1, cy2; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, vp, n)); - ASSERT (! MPN_OVERLAP_P (rp, n, yp, n)); - ASSERT (! MPN_OVERLAP_P (ep, 2, up, n)); - ASSERT (! MPN_OVERLAP_P (ep, 2, vp, n)); - ASSERT (! MPN_OVERLAP_P (ep, 2, yp, n)); - ASSERT (! MPN_OVERLAP_P (ep, 2, rp, n)); - - yp += n - 1; - el = eh = 0; - - do - { - yl = *yp--; - ul = *up++; - vl = *vp++; - - /* ordinary sub_n */ - SUBC_LIMB (cy1, sl, ul, vl); - SUBC_LIMB (cy2, rl, sl, cy); - cy = cy1 | cy2; - *rp++ = rl; - - /* update (eh:el) */ - zl = (-cy) & yl; - el += zl; - eh += el < zl; - } - while (--n); - -#if GMP_NAIL_BITS != 0 - eh = (eh << GMP_NAIL_BITS) + (el >> GMP_NUMB_BITS); - el &= GMP_NUMB_MASK; -#endif - - ep[0] = el; - ep[1] = eh; - - return cy; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_err2_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_err2_n.c deleted file mode 100644 index 63ea2451b491aee9e48de696f213603679e9e880..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_err2_n.c +++ /dev/null @@ -1,117 +0,0 @@ -/* mpn_sub_err2_n -- sub_n with two error terms - - Contributed by David Harvey. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* - Computes: - - (1) {rp,n} := {up,n} - {vp,n} (just like mpn_sub_n) with incoming borrow cy, - return value is borrow out. - - (2) Let c[i+1] = borrow from i-th limb subtraction (c[0] = cy). - Computes c[1]*yp1[n-1] + ... + c[n]*yp1[0], - c[1]*yp2[n-1] + ... + c[n]*yp2[0], - stores two-limb results at {ep,2} and {ep+2,2} respectively. - - Requires n >= 1. - - None of the outputs may overlap each other or any of the inputs, except - that {rp,n} may be equal to {up,n} or {vp,n}. -*/ -mp_limb_t -mpn_sub_err2_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, - mp_ptr ep, mp_srcptr yp1, mp_srcptr yp2, - mp_size_t n, mp_limb_t cy) -{ - mp_limb_t el1, eh1, el2, eh2, ul, vl, yl1, yl2, zl1, zl2, rl, sl, cy1, cy2; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, vp, n)); - ASSERT (! MPN_OVERLAP_P (rp, n, yp1, n)); - ASSERT (! MPN_OVERLAP_P (rp, n, yp2, n)); - ASSERT (! MPN_OVERLAP_P (ep, 4, up, n)); - ASSERT (! MPN_OVERLAP_P (ep, 4, vp, n)); - ASSERT (! MPN_OVERLAP_P (ep, 4, yp1, n)); - ASSERT (! MPN_OVERLAP_P (ep, 4, yp2, n)); - ASSERT (! MPN_OVERLAP_P (ep, 4, rp, n)); - - yp1 += n - 1; - yp2 += n - 1; - el1 = eh1 = 0; - el2 = eh2 = 0; - - do - { - yl1 = *yp1--; - yl2 = *yp2--; - ul = *up++; - vl = *vp++; - - /* ordinary sub_n */ - SUBC_LIMB (cy1, sl, ul, vl); - SUBC_LIMB (cy2, rl, sl, cy); - cy = cy1 | cy2; - *rp++ = rl; - - /* update (eh1:el1) */ - zl1 = (-cy) & yl1; - el1 += zl1; - eh1 += el1 < zl1; - - /* update (eh2:el2) */ - zl2 = (-cy) & yl2; - el2 += zl2; - eh2 += el2 < zl2; - } - while (--n); - -#if GMP_NAIL_BITS != 0 - eh1 = (eh1 << GMP_NAIL_BITS) + (el1 >> GMP_NUMB_BITS); - el1 &= GMP_NUMB_MASK; - eh2 = (eh2 << GMP_NAIL_BITS) + (el2 >> GMP_NUMB_BITS); - el2 &= GMP_NUMB_MASK; -#endif - - ep[0] = el1; - ep[1] = eh1; - ep[2] = el2; - ep[3] = eh2; - - return cy; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_err3_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_err3_n.c deleted file mode 100644 index a80e05d0d96ea3cfb305966cc6d70beeb2438b45..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_err3_n.c +++ /dev/null @@ -1,132 +0,0 @@ -/* mpn_sub_err3_n -- sub_n with three error terms - - Contributed by David Harvey. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* - Computes: - - (1) {rp,n} := {up,n} - {vp,n} (just like mpn_sub_n) with incoming borrow cy, - return value is borrow out. - - (2) Let c[i+1] = borrow from i-th limb subtraction (c[0] = cy). - Computes c[1]*yp1[n-1] + ... + c[n]*yp1[0], - c[1]*yp2[n-1] + ... + c[n]*yp2[0], - c[1]*yp3[n-1] + ... + c[n]*yp3[0], - stores two-limb results at {ep,2}, {ep+2,2} and {ep+4,2} respectively. - - Requires n >= 1. - - None of the outputs may overlap each other or any of the inputs, except - that {rp,n} may be equal to {up,n} or {vp,n}. -*/ -mp_limb_t -mpn_sub_err3_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, - mp_ptr ep, mp_srcptr yp1, mp_srcptr yp2, mp_srcptr yp3, - mp_size_t n, mp_limb_t cy) -{ - mp_limb_t el1, eh1, el2, eh2, el3, eh3, ul, vl, yl1, yl2, yl3, zl1, zl2, zl3, rl, sl, cy1, cy2; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, vp, n)); - ASSERT (! MPN_OVERLAP_P (rp, n, yp1, n)); - ASSERT (! MPN_OVERLAP_P (rp, n, yp2, n)); - ASSERT (! MPN_OVERLAP_P (rp, n, yp3, n)); - ASSERT (! MPN_OVERLAP_P (ep, 6, up, n)); - ASSERT (! MPN_OVERLAP_P (ep, 6, vp, n)); - ASSERT (! MPN_OVERLAP_P (ep, 6, yp1, n)); - ASSERT (! MPN_OVERLAP_P (ep, 6, yp2, n)); - ASSERT (! MPN_OVERLAP_P (ep, 6, yp3, n)); - ASSERT (! MPN_OVERLAP_P (ep, 6, rp, n)); - - yp1 += n - 1; - yp2 += n - 1; - yp3 += n - 1; - el1 = eh1 = 0; - el2 = eh2 = 0; - el3 = eh3 = 0; - - do - { - yl1 = *yp1--; - yl2 = *yp2--; - yl3 = *yp3--; - ul = *up++; - vl = *vp++; - - /* ordinary sub_n */ - SUBC_LIMB (cy1, sl, ul, vl); - SUBC_LIMB (cy2, rl, sl, cy); - cy = cy1 | cy2; - *rp++ = rl; - - /* update (eh1:el1) */ - zl1 = (-cy) & yl1; - el1 += zl1; - eh1 += el1 < zl1; - - /* update (eh2:el2) */ - zl2 = (-cy) & yl2; - el2 += zl2; - eh2 += el2 < zl2; - - /* update (eh3:el3) */ - zl3 = (-cy) & yl3; - el3 += zl3; - eh3 += el3 < zl3; - } - while (--n); - -#if GMP_NAIL_BITS != 0 - eh1 = (eh1 << GMP_NAIL_BITS) + (el1 >> GMP_NUMB_BITS); - el1 &= GMP_NUMB_MASK; - eh2 = (eh2 << GMP_NAIL_BITS) + (el2 >> GMP_NUMB_BITS); - el2 &= GMP_NUMB_MASK; - eh3 = (eh3 << GMP_NAIL_BITS) + (el3 >> GMP_NUMB_BITS); - el3 &= GMP_NUMB_MASK; -#endif - - ep[0] = el1; - ep[1] = eh1; - ep[2] = el2; - ep[3] = eh2; - ep[4] = el3; - ep[5] = eh3; - - return cy; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_n.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_n.c deleted file mode 100644 index 29de2d2d89128d1093cc9e73c51737b908ac7b74..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/sub_n.c +++ /dev/null @@ -1,90 +0,0 @@ -/* mpn_sub_n -- Subtract equal length limb vectors. - -Copyright 1992-1994, 1996, 2000, 2002, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -#if GMP_NAIL_BITS == 0 - -mp_limb_t -mpn_sub_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n) -{ - mp_limb_t ul, vl, sl, rl, cy, cy1, cy2; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_INCR_P (rp, up, n)); - ASSERT (MPN_SAME_OR_INCR_P (rp, vp, n)); - - cy = 0; - do - { - ul = *up++; - vl = *vp++; - sl = ul - vl; - cy1 = sl > ul; - rl = sl - cy; - cy2 = rl > sl; - cy = cy1 | cy2; - *rp++ = rl; - } - while (--n != 0); - - return cy; -} - -#endif - -#if GMP_NAIL_BITS >= 1 - -mp_limb_t -mpn_sub_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n) -{ - mp_limb_t ul, vl, rl, cy; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_INCR_P (rp, up, n)); - ASSERT (MPN_SAME_OR_INCR_P (rp, vp, n)); - - cy = 0; - do - { - ul = *up++; - vl = *vp++; - rl = ul - vl - cy; - cy = rl >> (GMP_LIMB_BITS - 1); - *rp++ = rl & GMP_NUMB_MASK; - } - while (--n != 0); - - return cy; -} - -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/submul_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/submul_1.c deleted file mode 100644 index fbc3501389d0ae92aeaa4d2c0d3c266890f034d8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/submul_1.c +++ /dev/null @@ -1,139 +0,0 @@ -/* mpn_submul_1 -- multiply the N long limb vector pointed to by UP by VL, - subtract the N least significant limbs of the product from the limb - vector pointed to by RP. Return the most significant limb of the - product, adjusted for carry-out from the subtraction. - -Copyright 1992-1994, 1996, 2000, 2002, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -#if GMP_NAIL_BITS == 0 - -mp_limb_t -mpn_submul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) -{ - mp_limb_t ul, cl, hpl, lpl, rl; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - - cl = 0; - do - { - ul = *up++; - umul_ppmm (hpl, lpl, ul, vl); - - lpl += cl; - cl = (lpl < cl) + hpl; - - rl = *rp; - lpl = rl - lpl; - cl += lpl > rl; - *rp++ = lpl; - } - while (--n != 0); - - return cl; -} - -#endif - -#if GMP_NAIL_BITS == 1 - -mp_limb_t -mpn_submul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) -{ - mp_limb_t shifted_vl, ul, rl, lpl, hpl, prev_hpl, cl, xl, c1, c2, c3; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - ASSERT_MPN (rp, n); - ASSERT_MPN (up, n); - ASSERT_LIMB (vl); - - shifted_vl = vl << GMP_NAIL_BITS; - cl = 0; - prev_hpl = 0; - do - { - ul = *up++; - rl = *rp; - umul_ppmm (hpl, lpl, ul, shifted_vl); - lpl >>= GMP_NAIL_BITS; - SUBC_LIMB (c1, xl, rl, prev_hpl); - SUBC_LIMB (c2, xl, xl, lpl); - SUBC_LIMB (c3, xl, xl, cl); - cl = c1 + c2 + c3; - *rp++ = xl; - prev_hpl = hpl; - } - while (--n != 0); - - return prev_hpl + cl; -} - -#endif - -#if GMP_NAIL_BITS >= 2 - -mp_limb_t -mpn_submul_1 (mp_ptr rp, mp_srcptr up, mp_size_t n, mp_limb_t vl) -{ - mp_limb_t shifted_vl, ul, rl, lpl, hpl, prev_hpl, xw, cl, xl; - - ASSERT (n >= 1); - ASSERT (MPN_SAME_OR_SEPARATE_P (rp, up, n)); - ASSERT_MPN (rp, n); - ASSERT_MPN (up, n); - ASSERT_LIMB (vl); - - shifted_vl = vl << GMP_NAIL_BITS; - cl = 0; - prev_hpl = 0; - do - { - ul = *up++; - rl = *rp; - umul_ppmm (hpl, lpl, ul, shifted_vl); - lpl >>= GMP_NAIL_BITS; - xw = rl - (prev_hpl + lpl) + cl; - cl = (mp_limb_signed_t) xw >> GMP_NUMB_BITS; /* FIXME: non-portable */ - xl = xw & GMP_NUMB_MASK; - *rp++ = xl; - prev_hpl = hpl; - } - while (--n != 0); - - return prev_hpl - cl; -} - -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/tdiv_qr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/tdiv_qr.c deleted file mode 100644 index 0d87663513ddffcb63a3797cbf105392ba4ab056..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/tdiv_qr.c +++ /dev/null @@ -1,389 +0,0 @@ -/* mpn_tdiv_qr -- Divide the numerator (np,nn) by the denominator (dp,dn) and - write the nn-dn+1 quotient limbs at qp and the dn remainder limbs at rp. If - qxn is non-zero, generate that many fraction limbs and append them after the - other quotient limbs, and update the remainder accordingly. The input - operands are unaffected. - - Preconditions: - 1. The most significant limb of of the divisor must be non-zero. - 2. nn >= dn, even if qxn is non-zero. (??? relax this ???) - - The time complexity of this is O(qn*qn+M(dn,qn)), where M(m,n) is the time - complexity of multiplication. - -Copyright 1997, 2000-2002, 2005, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -void -mpn_tdiv_qr (mp_ptr qp, mp_ptr rp, mp_size_t qxn, - mp_srcptr np, mp_size_t nn, mp_srcptr dp, mp_size_t dn) -{ - ASSERT_ALWAYS (qxn == 0); - - ASSERT (nn >= 0); - ASSERT (dn >= 0); - ASSERT (dn == 0 || dp[dn - 1] != 0); - ASSERT (! MPN_OVERLAP_P (qp, nn - dn + 1 + qxn, np, nn)); - ASSERT (! MPN_OVERLAP_P (qp, nn - dn + 1 + qxn, dp, dn)); - - switch (dn) - { - case 0: - DIVIDE_BY_ZERO; - - case 1: - { - rp[0] = mpn_divrem_1 (qp, (mp_size_t) 0, np, nn, dp[0]); - return; - } - - case 2: - { - mp_ptr n2p, d2p; - mp_limb_t qhl, cy; - TMP_DECL; - TMP_MARK; - if ((dp[1] & GMP_NUMB_HIGHBIT) == 0) - { - int cnt; - mp_limb_t dtmp[2]; - count_leading_zeros (cnt, dp[1]); - cnt -= GMP_NAIL_BITS; - d2p = dtmp; - d2p[1] = (dp[1] << cnt) | (dp[0] >> (GMP_NUMB_BITS - cnt)); - d2p[0] = (dp[0] << cnt) & GMP_NUMB_MASK; - n2p = TMP_ALLOC_LIMBS (nn + 1); - cy = mpn_lshift (n2p, np, nn, cnt); - n2p[nn] = cy; - qhl = mpn_divrem_2 (qp, 0L, n2p, nn + (cy != 0), d2p); - if (cy == 0) - qp[nn - 2] = qhl; /* always store nn-2+1 quotient limbs */ - rp[0] = (n2p[0] >> cnt) - | ((n2p[1] << (GMP_NUMB_BITS - cnt)) & GMP_NUMB_MASK); - rp[1] = (n2p[1] >> cnt); - } - else - { - d2p = (mp_ptr) dp; - n2p = TMP_ALLOC_LIMBS (nn); - MPN_COPY (n2p, np, nn); - qhl = mpn_divrem_2 (qp, 0L, n2p, nn, d2p); - qp[nn - 2] = qhl; /* always store nn-2+1 quotient limbs */ - rp[0] = n2p[0]; - rp[1] = n2p[1]; - } - TMP_FREE; - return; - } - - default: - { - int adjust; - gmp_pi1_t dinv; - TMP_DECL; - TMP_MARK; - adjust = np[nn - 1] >= dp[dn - 1]; /* conservative tests for quotient size */ - if (nn + adjust >= 2 * dn) - { - mp_ptr n2p, d2p; - mp_limb_t cy; - int cnt; - - qp[nn - dn] = 0; /* zero high quotient limb */ - if ((dp[dn - 1] & GMP_NUMB_HIGHBIT) == 0) /* normalize divisor */ - { - count_leading_zeros (cnt, dp[dn - 1]); - cnt -= GMP_NAIL_BITS; - d2p = TMP_ALLOC_LIMBS (dn); - mpn_lshift (d2p, dp, dn, cnt); - n2p = TMP_ALLOC_LIMBS (nn + 1); - cy = mpn_lshift (n2p, np, nn, cnt); - n2p[nn] = cy; - nn += adjust; - } - else - { - cnt = 0; - d2p = (mp_ptr) dp; - n2p = TMP_ALLOC_LIMBS (nn + 1); - MPN_COPY (n2p, np, nn); - n2p[nn] = 0; - nn += adjust; - } - - invert_pi1 (dinv, d2p[dn - 1], d2p[dn - 2]); - if (BELOW_THRESHOLD (dn, DC_DIV_QR_THRESHOLD)) - mpn_sbpi1_div_qr (qp, n2p, nn, d2p, dn, dinv.inv32); - else if (BELOW_THRESHOLD (dn, MUPI_DIV_QR_THRESHOLD) || /* fast condition */ - BELOW_THRESHOLD (nn, 2 * MU_DIV_QR_THRESHOLD) || /* fast condition */ - (double) (2 * (MU_DIV_QR_THRESHOLD - MUPI_DIV_QR_THRESHOLD)) * dn /* slow... */ - + (double) MUPI_DIV_QR_THRESHOLD * nn > (double) dn * nn) /* ...condition */ - mpn_dcpi1_div_qr (qp, n2p, nn, d2p, dn, &dinv); - else - { - mp_size_t itch = mpn_mu_div_qr_itch (nn, dn, 0); - mp_ptr scratch = TMP_ALLOC_LIMBS (itch); - mpn_mu_div_qr (qp, rp, n2p, nn, d2p, dn, scratch); - n2p = rp; - } - - if (cnt != 0) - mpn_rshift (rp, n2p, dn, cnt); - else - MPN_COPY (rp, n2p, dn); - TMP_FREE; - return; - } - - /* When we come here, the numerator/partial remainder is less - than twice the size of the denominator. */ - - { - /* Problem: - - Divide a numerator N with nn limbs by a denominator D with dn - limbs forming a quotient of qn=nn-dn+1 limbs. When qn is small - compared to dn, conventional division algorithms perform poorly. - We want an algorithm that has an expected running time that is - dependent only on qn. - - Algorithm (very informally stated): - - 1) Divide the 2 x qn most significant limbs from the numerator - by the qn most significant limbs from the denominator. Call - the result qest. This is either the correct quotient, but - might be 1 or 2 too large. Compute the remainder from the - division. (This step is implemented by an mpn_divrem call.) - - 2) Is the most significant limb from the remainder < p, where p - is the product of the most significant limb from the quotient - and the next(d)? (Next(d) denotes the next ignored limb from - the denominator.) If it is, decrement qest, and adjust the - remainder accordingly. - - 3) Is the remainder >= qest? If it is, qest is the desired - quotient. The algorithm terminates. - - 4) Subtract qest x next(d) from the remainder. If there is - borrow out, decrement qest, and adjust the remainder - accordingly. - - 5) Skip one word from the denominator (i.e., let next(d) denote - the next less significant limb. */ - - mp_size_t qn; - mp_ptr n2p, d2p; - mp_ptr tp; - mp_limb_t cy; - mp_size_t in, rn; - mp_limb_t quotient_too_large; - unsigned int cnt; - - qn = nn - dn; - qp[qn] = 0; /* zero high quotient limb */ - qn += adjust; /* qn cannot become bigger */ - - if (qn == 0) - { - MPN_COPY (rp, np, dn); - TMP_FREE; - return; - } - - in = dn - qn; /* (at least partially) ignored # of limbs in ops */ - /* Normalize denominator by shifting it to the left such that its - most significant bit is set. Then shift the numerator the same - amount, to mathematically preserve quotient. */ - if ((dp[dn - 1] & GMP_NUMB_HIGHBIT) == 0) - { - count_leading_zeros (cnt, dp[dn - 1]); - cnt -= GMP_NAIL_BITS; - - d2p = TMP_ALLOC_LIMBS (qn); - mpn_lshift (d2p, dp + in, qn, cnt); - d2p[0] |= dp[in - 1] >> (GMP_NUMB_BITS - cnt); - - n2p = TMP_ALLOC_LIMBS (2 * qn + 1); - cy = mpn_lshift (n2p, np + nn - 2 * qn, 2 * qn, cnt); - if (adjust) - { - n2p[2 * qn] = cy; - n2p++; - } - else - { - n2p[0] |= np[nn - 2 * qn - 1] >> (GMP_NUMB_BITS - cnt); - } - } - else - { - cnt = 0; - d2p = (mp_ptr) dp + in; - - n2p = TMP_ALLOC_LIMBS (2 * qn + 1); - MPN_COPY (n2p, np + nn - 2 * qn, 2 * qn); - if (adjust) - { - n2p[2 * qn] = 0; - n2p++; - } - } - - /* Get an approximate quotient using the extracted operands. */ - if (qn == 1) - { - mp_limb_t q0, r0; - udiv_qrnnd (q0, r0, n2p[1], n2p[0] << GMP_NAIL_BITS, d2p[0] << GMP_NAIL_BITS); - n2p[0] = r0 >> GMP_NAIL_BITS; - qp[0] = q0; - } - else if (qn == 2) - mpn_divrem_2 (qp, 0L, n2p, 4L, d2p); /* FIXME: obsolete function */ - else - { - invert_pi1 (dinv, d2p[qn - 1], d2p[qn - 2]); - if (BELOW_THRESHOLD (qn, DC_DIV_QR_THRESHOLD)) - mpn_sbpi1_div_qr (qp, n2p, 2 * qn, d2p, qn, dinv.inv32); - else if (BELOW_THRESHOLD (qn, MU_DIV_QR_THRESHOLD)) - mpn_dcpi1_div_qr (qp, n2p, 2 * qn, d2p, qn, &dinv); - else - { - mp_size_t itch = mpn_mu_div_qr_itch (2 * qn, qn, 0); - mp_ptr scratch = TMP_ALLOC_LIMBS (itch); - mp_ptr r2p = rp; - if (np == r2p) /* If N and R share space, put ... */ - r2p += nn - qn; /* intermediate remainder at N's upper end. */ - mpn_mu_div_qr (qp, r2p, n2p, 2 * qn, d2p, qn, scratch); - MPN_COPY (n2p, r2p, qn); - } - } - - rn = qn; - /* Multiply the first ignored divisor limb by the most significant - quotient limb. If that product is > the partial remainder's - most significant limb, we know the quotient is too large. This - test quickly catches most cases where the quotient is too large; - it catches all cases where the quotient is 2 too large. */ - { - mp_limb_t dl, x; - mp_limb_t h, dummy; - - if (in - 2 < 0) - dl = 0; - else - dl = dp[in - 2]; - -#if GMP_NAIL_BITS == 0 - x = (dp[in - 1] << cnt) | ((dl >> 1) >> ((~cnt) % GMP_LIMB_BITS)); -#else - x = (dp[in - 1] << cnt) & GMP_NUMB_MASK; - if (cnt != 0) - x |= dl >> (GMP_NUMB_BITS - cnt); -#endif - umul_ppmm (h, dummy, x, qp[qn - 1] << GMP_NAIL_BITS); - - if (n2p[qn - 1] < h) - { - mp_limb_t cy; - - mpn_decr_u (qp, (mp_limb_t) 1); - cy = mpn_add_n (n2p, n2p, d2p, qn); - if (cy) - { - /* The partial remainder is safely large. */ - n2p[qn] = cy; - ++rn; - } - } - } - - quotient_too_large = 0; - if (cnt != 0) - { - mp_limb_t cy1, cy2; - - /* Append partially used numerator limb to partial remainder. */ - cy1 = mpn_lshift (n2p, n2p, rn, GMP_NUMB_BITS - cnt); - n2p[0] |= np[in - 1] & (GMP_NUMB_MASK >> cnt); - - /* Update partial remainder with partially used divisor limb. */ - cy2 = mpn_submul_1 (n2p, qp, qn, dp[in - 1] & (GMP_NUMB_MASK >> cnt)); - if (qn != rn) - { - ASSERT_ALWAYS (n2p[qn] >= cy2); - n2p[qn] -= cy2; - } - else - { - n2p[qn] = cy1 - cy2; /* & GMP_NUMB_MASK; */ - - quotient_too_large = (cy1 < cy2); - ++rn; - } - --in; - } - /* True: partial remainder now is neutral, i.e., it is not shifted up. */ - - tp = TMP_ALLOC_LIMBS (dn); - - if (in < qn) - { - if (in == 0) - { - MPN_COPY (rp, n2p, rn); - ASSERT_ALWAYS (rn == dn); - goto foo; - } - mpn_mul (tp, qp, qn, dp, in); - } - else - mpn_mul (tp, dp, in, qp, qn); - - cy = mpn_sub (n2p, n2p, rn, tp + in, qn); - MPN_COPY (rp + in, n2p, dn - in); - quotient_too_large |= cy; - cy = mpn_sub_n (rp, np, tp, in); - cy = mpn_sub_1 (rp + in, rp + in, rn, cy); - quotient_too_large |= cy; - foo: - if (quotient_too_large) - { - mpn_decr_u (qp, (mp_limb_t) 1); - mpn_add_n (rp, rp, dp, dn); - } - } - TMP_FREE; - return; - } - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom22_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom22_mul.c deleted file mode 100644 index aa4232b618723cfee6105d43dc14a7c1e8fb36fb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom22_mul.c +++ /dev/null @@ -1,211 +0,0 @@ -/* mpn_toom22_mul -- Multiply {ap,an} and {bp,bn} where an >= bn. Or more - accurately, bn <= an < 2bn. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2006-2010, 2012, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Evaluate in: -1, 0, +inf - - <-s--><--n--> - ____ ______ - |_a1_|___a0_| - |b1_|___b0_| - <-t-><--n--> - - v0 = a0 * b0 # A(0)*B(0) - vm1 = (a0- a1)*(b0- b1) # A(-1)*B(-1) - vinf= a1 * b1 # A(inf)*B(inf) -*/ - -#if TUNE_PROGRAM_BUILD || WANT_FAT_BINARY -#define MAYBE_mul_toom22 1 -#else -#define MAYBE_mul_toom22 \ - (MUL_TOOM33_THRESHOLD >= 2 * MUL_TOOM22_THRESHOLD) -#endif - -#define TOOM22_MUL_N_REC(p, a, b, n, ws) \ - do { \ - if (! MAYBE_mul_toom22 \ - || BELOW_THRESHOLD (n, MUL_TOOM22_THRESHOLD)) \ - mpn_mul_basecase (p, a, n, b, n); \ - else \ - mpn_toom22_mul (p, a, n, b, n, ws); \ - } while (0) - -/* Normally, this calls mul_basecase or toom22_mul. But when when the fraction - MUL_TOOM33_THRESHOLD / MUL_TOOM22_THRESHOLD is large, an initially small - relative unbalance will become a larger and larger relative unbalance with - each recursion (the difference s-t will be invariant over recursive calls). - Therefore, we need to call toom32_mul. FIXME: Suppress depending on - MUL_TOOM33_THRESHOLD / MUL_TOOM22_THRESHOLD and on MUL_TOOM22_THRESHOLD. */ -#define TOOM22_MUL_REC(p, a, an, b, bn, ws) \ - do { \ - if (! MAYBE_mul_toom22 \ - || BELOW_THRESHOLD (bn, MUL_TOOM22_THRESHOLD)) \ - mpn_mul_basecase (p, a, an, b, bn); \ - else if (4 * an < 5 * bn) \ - mpn_toom22_mul (p, a, an, b, bn, ws); \ - else \ - mpn_toom32_mul (p, a, an, b, bn, ws); \ - } while (0) - -void -mpn_toom22_mul (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn, - mp_ptr scratch) -{ - const int __gmpn_cpuvec_initialized = 1; - mp_size_t n, s, t; - int vm1_neg; - mp_limb_t cy, cy2; - mp_ptr asm1; - mp_ptr bsm1; - -#define a0 ap -#define a1 (ap + n) -#define b0 bp -#define b1 (bp + n) - - s = an >> 1; - n = an - s; - t = bn - n; - - ASSERT (an >= bn); - - ASSERT (0 < s && s <= n && s >= n - 1); - ASSERT (0 < t && t <= s); - - asm1 = pp; - bsm1 = pp + n; - - vm1_neg = 0; - - /* Compute asm1. */ - if (s == n) - { - if (mpn_cmp (a0, a1, n) < 0) - { - mpn_sub_n (asm1, a1, a0, n); - vm1_neg = 1; - } - else - { - mpn_sub_n (asm1, a0, a1, n); - } - } - else /* n - s == 1 */ - { - if (a0[s] == 0 && mpn_cmp (a0, a1, s) < 0) - { - mpn_sub_n (asm1, a1, a0, s); - asm1[s] = 0; - vm1_neg = 1; - } - else - { - asm1[s] = a0[s] - mpn_sub_n (asm1, a0, a1, s); - } - } - - /* Compute bsm1. */ - if (t == n) - { - if (mpn_cmp (b0, b1, n) < 0) - { - mpn_sub_n (bsm1, b1, b0, n); - vm1_neg ^= 1; - } - else - { - mpn_sub_n (bsm1, b0, b1, n); - } - } - else - { - if (mpn_zero_p (b0 + t, n - t) && mpn_cmp (b0, b1, t) < 0) - { - mpn_sub_n (bsm1, b1, b0, t); - MPN_ZERO (bsm1 + t, n - t); - vm1_neg ^= 1; - } - else - { - mpn_sub (bsm1, b0, n, b1, t); - } - } - -#define v0 pp /* 2n */ -#define vinf (pp + 2 * n) /* s+t */ -#define vm1 scratch /* 2n */ -#define scratch_out scratch + 2 * n - - /* vm1, 2n limbs */ - TOOM22_MUL_N_REC (vm1, asm1, bsm1, n, scratch_out); - - if (s > t) TOOM22_MUL_REC (vinf, a1, s, b1, t, scratch_out); - else TOOM22_MUL_N_REC (vinf, a1, b1, s, scratch_out); - - /* v0, 2n limbs */ - TOOM22_MUL_N_REC (v0, ap, bp, n, scratch_out); - - /* H(v0) + L(vinf) */ - cy = mpn_add_n (pp + 2 * n, v0 + n, vinf, n); - - /* L(v0) + H(v0) */ - cy2 = cy + mpn_add_n (pp + n, pp + 2 * n, v0, n); - - /* L(vinf) + H(vinf) */ - cy += mpn_add (pp + 2 * n, pp + 2 * n, n, vinf + n, s + t - n); - - if (vm1_neg) - cy += mpn_add_n (pp + n, pp + n, vm1, 2 * n); - else - cy -= mpn_sub_n (pp + n, pp + n, vm1, 2 * n); - - ASSERT (cy + 1 <= 3); - ASSERT (cy2 <= 2); - - MPN_INCR_U (pp + 2 * n, s + t, cy2); - if (LIKELY (cy <= 2)) - /* if s+t==n, cy is zero, but we should not acces pp[3*n] at all. */ - MPN_INCR_U (pp + 3 * n, s + t - n, cy); - else - MPN_DECR_U (pp + 3 * n, s + t - n, 1); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom2_sqr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom2_sqr.c deleted file mode 100644 index df83e9e926cbbd102ab9d1aa22d23cefc384c36e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom2_sqr.c +++ /dev/null @@ -1,146 +0,0 @@ -/* mpn_toom2_sqr -- Square {ap,an}. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2006-2010, 2012, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Evaluate in: -1, 0, +inf - - <-s--><--n--> - ____ ______ - |_a1_|___a0_| - - v0 = a0 ^2 # A(0)^2 - vm1 = (a0- a1)^2 # A(-1)^2 - vinf= a1 ^2 # A(inf)^2 -*/ - -#if TUNE_PROGRAM_BUILD || WANT_FAT_BINARY -#define MAYBE_sqr_toom2 1 -#else -#define MAYBE_sqr_toom2 \ - (SQR_TOOM3_THRESHOLD >= 2 * SQR_TOOM2_THRESHOLD) -#endif - -#define TOOM2_SQR_REC(p, a, n, ws) \ - do { \ - if (! MAYBE_sqr_toom2 \ - || BELOW_THRESHOLD (n, SQR_TOOM2_THRESHOLD)) \ - mpn_sqr_basecase (p, a, n); \ - else \ - mpn_toom2_sqr (p, a, n, ws); \ - } while (0) - -void -mpn_toom2_sqr (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_ptr scratch) -{ - const int __gmpn_cpuvec_initialized = 1; - mp_size_t n, s; - mp_limb_t cy, cy2; - mp_ptr asm1; - -#define a0 ap -#define a1 (ap + n) - - s = an >> 1; - n = an - s; - - ASSERT (0 < s && s <= n && s >= n - 1); - - asm1 = pp; - - /* Compute asm1. */ - if (s == n) - { - if (mpn_cmp (a0, a1, n) < 0) - { - mpn_sub_n (asm1, a1, a0, n); - } - else - { - mpn_sub_n (asm1, a0, a1, n); - } - } - else /* n - s == 1 */ - { - if (a0[s] == 0 && mpn_cmp (a0, a1, s) < 0) - { - mpn_sub_n (asm1, a1, a0, s); - asm1[s] = 0; - } - else - { - asm1[s] = a0[s] - mpn_sub_n (asm1, a0, a1, s); - } - } - -#define v0 pp /* 2n */ -#define vinf (pp + 2 * n) /* s+s */ -#define vm1 scratch /* 2n */ -#define scratch_out scratch + 2 * n - - /* vm1, 2n limbs */ - TOOM2_SQR_REC (vm1, asm1, n, scratch_out); - - /* vinf, s+s limbs */ - TOOM2_SQR_REC (vinf, a1, s, scratch_out); - - /* v0, 2n limbs */ - TOOM2_SQR_REC (v0, ap, n, scratch_out); - - /* H(v0) + L(vinf) */ - cy = mpn_add_n (pp + 2 * n, v0 + n, vinf, n); - - /* L(v0) + H(v0) */ - cy2 = cy + mpn_add_n (pp + n, pp + 2 * n, v0, n); - - /* L(vinf) + H(vinf) */ - cy += mpn_add (pp + 2 * n, pp + 2 * n, n, vinf + n, s + s - n); - - cy -= mpn_sub_n (pp + n, pp + n, vm1, 2 * n); - - ASSERT (cy + 1 <= 3); - ASSERT (cy2 <= 2); - - MPN_INCR_U (pp + 2 * n, s + s, cy2); - if (LIKELY (cy <= 2)) - MPN_INCR_U (pp + 3 * n, s + s - n, cy); - else - MPN_DECR_U (pp + 3 * n, s + s - n, 1); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom32_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom32_mul.c deleted file mode 100644 index 0b05669cc4e00a35291c9fd83ad2999b5a3fba8f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom32_mul.c +++ /dev/null @@ -1,323 +0,0 @@ -/* mpn_toom32_mul -- Multiply {ap,an} and {bp,bn} where an is nominally 1.5 - times as large as bn. Or more accurately, bn < an < 3bn. - - Contributed to the GNU project by Torbjorn Granlund. - Improvements by Marco Bodrato and Niels Möller. - - The idea of applying toom to unbalanced multiplication is due to Marco - Bodrato and Alberto Zanoni. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2006-2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Evaluate in: -1, 0, +1, +inf - - <-s-><--n--><--n--> - ___ ______ ______ - |a2_|___a1_|___a0_| - |_b1_|___b0_| - <-t--><--n--> - - v0 = a0 * b0 # A(0)*B(0) - v1 = (a0+ a1+ a2)*(b0+ b1) # A(1)*B(1) ah <= 2 bh <= 1 - vm1 = (a0- a1+ a2)*(b0- b1) # A(-1)*B(-1) |ah| <= 1 bh = 0 - vinf= a2 * b1 # A(inf)*B(inf) -*/ - -#define TOOM32_MUL_N_REC(p, a, b, n, ws) \ - do { \ - mpn_mul_n (p, a, b, n); \ - } while (0) - -void -mpn_toom32_mul (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn, - mp_ptr scratch) -{ - mp_size_t n, s, t; - int vm1_neg; - mp_limb_t cy; - mp_limb_signed_t hi; - mp_limb_t ap1_hi, bp1_hi; - -#define a0 ap -#define a1 (ap + n) -#define a2 (ap + 2 * n) -#define b0 bp -#define b1 (bp + n) - - /* Required, to ensure that s + t >= n. */ - ASSERT (bn + 2 <= an && an + 6 <= 3*bn); - - n = 1 + (2 * an >= 3 * bn ? (an - 1) / (size_t) 3 : (bn - 1) >> 1); - - s = an - 2 * n; - t = bn - n; - - ASSERT (0 < s && s <= n); - ASSERT (0 < t && t <= n); - ASSERT (s + t >= n); - - /* Product area of size an + bn = 3*n + s + t >= 4*n + 2. */ -#define ap1 (pp) /* n, most significant limb in ap1_hi */ -#define bp1 (pp + n) /* n, most significant bit in bp1_hi */ -#define am1 (pp + 2*n) /* n, most significant bit in hi */ -#define bm1 (pp + 3*n) /* n */ -#define v1 (scratch) /* 2n + 1 */ -#define vm1 (pp) /* 2n + 1 */ -#define scratch_out (scratch + 2*n + 1) /* Currently unused. */ - - /* Scratch need: 2*n + 1 + scratch for the recursive multiplications. */ - - /* FIXME: Keep v1[2*n] and vm1[2*n] in scalar variables? */ - - /* Compute ap1 = a0 + a1 + a3, am1 = a0 - a1 + a3 */ - ap1_hi = mpn_add (ap1, a0, n, a2, s); -#if HAVE_NATIVE_mpn_add_n_sub_n - if (ap1_hi == 0 && mpn_cmp (ap1, a1, n) < 0) - { - ap1_hi = mpn_add_n_sub_n (ap1, am1, a1, ap1, n) >> 1; - hi = 0; - vm1_neg = 1; - } - else - { - cy = mpn_add_n_sub_n (ap1, am1, ap1, a1, n); - hi = ap1_hi - (cy & 1); - ap1_hi += (cy >> 1); - vm1_neg = 0; - } -#else - if (ap1_hi == 0 && mpn_cmp (ap1, a1, n) < 0) - { - ASSERT_NOCARRY (mpn_sub_n (am1, a1, ap1, n)); - hi = 0; - vm1_neg = 1; - } - else - { - hi = ap1_hi - mpn_sub_n (am1, ap1, a1, n); - vm1_neg = 0; - } - ap1_hi += mpn_add_n (ap1, ap1, a1, n); -#endif - - /* Compute bp1 = b0 + b1 and bm1 = b0 - b1. */ - if (t == n) - { -#if HAVE_NATIVE_mpn_add_n_sub_n - if (mpn_cmp (b0, b1, n) < 0) - { - cy = mpn_add_n_sub_n (bp1, bm1, b1, b0, n); - vm1_neg ^= 1; - } - else - { - cy = mpn_add_n_sub_n (bp1, bm1, b0, b1, n); - } - bp1_hi = cy >> 1; -#else - bp1_hi = mpn_add_n (bp1, b0, b1, n); - - if (mpn_cmp (b0, b1, n) < 0) - { - ASSERT_NOCARRY (mpn_sub_n (bm1, b1, b0, n)); - vm1_neg ^= 1; - } - else - { - ASSERT_NOCARRY (mpn_sub_n (bm1, b0, b1, n)); - } -#endif - } - else - { - /* FIXME: Should still use mpn_add_n_sub_n for the main part. */ - bp1_hi = mpn_add (bp1, b0, n, b1, t); - - if (mpn_zero_p (b0 + t, n - t) && mpn_cmp (b0, b1, t) < 0) - { - ASSERT_NOCARRY (mpn_sub_n (bm1, b1, b0, t)); - MPN_ZERO (bm1 + t, n - t); - vm1_neg ^= 1; - } - else - { - ASSERT_NOCARRY (mpn_sub (bm1, b0, n, b1, t)); - } - } - - TOOM32_MUL_N_REC (v1, ap1, bp1, n, scratch_out); - if (ap1_hi == 1) - { - cy = bp1_hi + mpn_add_n (v1 + n, v1 + n, bp1, n); - } - else if (ap1_hi == 2) - { -#if HAVE_NATIVE_mpn_addlsh1_n - cy = 2 * bp1_hi + mpn_addlsh1_n (v1 + n, v1 + n, bp1, n); -#else - cy = 2 * bp1_hi + mpn_addmul_1 (v1 + n, bp1, n, CNST_LIMB(2)); -#endif - } - else - cy = 0; - if (bp1_hi != 0) - cy += mpn_add_n (v1 + n, v1 + n, ap1, n); - v1[2 * n] = cy; - - TOOM32_MUL_N_REC (vm1, am1, bm1, n, scratch_out); - if (hi) - hi = mpn_add_n (vm1+n, vm1+n, bm1, n); - - vm1[2*n] = hi; - - /* v1 <-- (v1 + vm1) / 2 = x0 + x2 */ - if (vm1_neg) - { -#if HAVE_NATIVE_mpn_rsh1sub_n - mpn_rsh1sub_n (v1, v1, vm1, 2*n+1); -#else - mpn_sub_n (v1, v1, vm1, 2*n+1); - ASSERT_NOCARRY (mpn_rshift (v1, v1, 2*n+1, 1)); -#endif - } - else - { -#if HAVE_NATIVE_mpn_rsh1add_n - mpn_rsh1add_n (v1, v1, vm1, 2*n+1); -#else - mpn_add_n (v1, v1, vm1, 2*n+1); - ASSERT_NOCARRY (mpn_rshift (v1, v1, 2*n+1, 1)); -#endif - } - - /* We get x1 + x3 = (x0 + x2) - (x0 - x1 + x2 - x3), and hence - - y = x1 + x3 + (x0 + x2) * B - = (x0 + x2) * B + (x0 + x2) - vm1. - - y is 3*n + 1 limbs, y = y0 + y1 B + y2 B^2. We store them as - follows: y0 at scratch, y1 at pp + 2*n, and y2 at scratch + n - (already in place, except for carry propagation). - - We thus add - - B^3 B^2 B 1 - | | | | - +-----+----+ - + | x0 + x2 | - +----+-----+----+ - + | x0 + x2 | - +----------+ - - | vm1 | - --+----++----+----+- - | y2 | y1 | y0 | - +-----+----+----+ - - Since we store y0 at the same location as the low half of x0 + x2, we - need to do the middle sum first. */ - - hi = vm1[2*n]; - cy = mpn_add_n (pp + 2*n, v1, v1 + n, n); - MPN_INCR_U (v1 + n, n + 1, cy + v1[2*n]); - - /* FIXME: Can we get rid of this second vm1_neg conditional by - swapping the location of +1 and -1 values? */ - if (vm1_neg) - { - cy = mpn_add_n (v1, v1, vm1, n); - hi += mpn_add_nc (pp + 2*n, pp + 2*n, vm1 + n, n, cy); - MPN_INCR_U (v1 + n, n+1, hi); - } - else - { - cy = mpn_sub_n (v1, v1, vm1, n); - hi += mpn_sub_nc (pp + 2*n, pp + 2*n, vm1 + n, n, cy); - MPN_DECR_U (v1 + n, n+1, hi); - } - - TOOM32_MUL_N_REC (pp, a0, b0, n, scratch_out); - /* vinf, s+t limbs. Use mpn_mul for now, to handle unbalanced operands */ - if (s > t) mpn_mul (pp+3*n, a2, s, b1, t); - else mpn_mul (pp+3*n, b1, t, a2, s); - - /* Remaining interpolation. - - y * B + x0 + x3 B^3 - x0 B^2 - x3 B - = (x1 + x3) B + (x0 + x2) B^2 + x0 + x3 B^3 - x0 B^2 - x3 B - = y0 B + y1 B^2 + y3 B^3 + Lx0 + H x0 B - + L x3 B^3 + H x3 B^4 - Lx0 B^2 - H x0 B^3 - L x3 B - H x3 B^2 - = L x0 + (y0 + H x0 - L x3) B + (y1 - L x0 - H x3) B^2 - + (y2 - (H x0 - L x3)) B^3 + H x3 B^4 - - B^4 B^3 B^2 B 1 - | | | | | | - +-------+ +---------+---------+ - | Hx3 | | Hx0-Lx3 | Lx0 | - +------+----------+---------+---------+---------+ - | y2 | y1 | y0 | - ++---------+---------+---------+ - -| Hx0-Lx3 | - Lx0 | - +---------+---------+ - | - Hx3 | - +--------+ - - We must take into account the carry from Hx0 - Lx3. - */ - - cy = mpn_sub_n (pp + n, pp + n, pp+3*n, n); - hi = scratch[2*n] + cy; - - cy = mpn_sub_nc (pp + 2*n, pp + 2*n, pp, n, cy); - hi -= mpn_sub_nc (pp + 3*n, scratch + n, pp + n, n, cy); - - hi += mpn_add (pp + n, pp + n, 3*n, scratch, n); - - /* FIXME: Is support for s + t == n needed? */ - if (LIKELY (s + t > n)) - { - hi -= mpn_sub (pp + 2*n, pp + 2*n, 2*n, pp + 4*n, s+t-n); - - if (hi < 0) - MPN_DECR_U (pp + 4*n, s+t-n, -hi); - else - MPN_INCR_U (pp + 4*n, s+t-n, hi); - } - else - ASSERT (hi == 0); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom33_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom33_mul.c deleted file mode 100644 index 655355c39a35267e473b83326d7e709c9122b763..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom33_mul.c +++ /dev/null @@ -1,316 +0,0 @@ -/* mpn_toom33_mul -- Multiply {ap,an} and {p,bn} where an and bn are close in - size. Or more accurately, bn <= an < (3/2)bn. - - Contributed to the GNU project by Torbjorn Granlund. - Additional improvements by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2006-2008, 2010, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Evaluate in: -1, 0, +1, +2, +inf - - <-s--><--n--><--n--> - ____ ______ ______ - |_a2_|___a1_|___a0_| - |b2_|___b1_|___b0_| - <-t-><--n--><--n--> - - v0 = a0 * b0 # A(0)*B(0) - v1 = (a0+ a1+ a2)*(b0+ b1+ b2) # A(1)*B(1) ah <= 2 bh <= 2 - vm1 = (a0- a1+ a2)*(b0- b1+ b2) # A(-1)*B(-1) |ah| <= 1 bh <= 1 - v2 = (a0+2a1+4a2)*(b0+2b1+4b2) # A(2)*B(2) ah <= 6 bh <= 6 - vinf= a2 * b2 # A(inf)*B(inf) -*/ - -#if TUNE_PROGRAM_BUILD || WANT_FAT_BINARY -#define MAYBE_mul_basecase 1 -#define MAYBE_mul_toom33 1 -#else -#define MAYBE_mul_basecase \ - (MUL_TOOM33_THRESHOLD < 3 * MUL_TOOM22_THRESHOLD) -#define MAYBE_mul_toom33 \ - (MUL_TOOM44_THRESHOLD >= 3 * MUL_TOOM33_THRESHOLD) -#endif - -/* FIXME: TOOM33_MUL_N_REC is not quite right for a balanced - multiplication at the infinity point. We may have - MAYBE_mul_basecase == 0, and still get s just below - MUL_TOOM22_THRESHOLD. If MUL_TOOM33_THRESHOLD == 7, we can even get - s == 1 and mpn_toom22_mul will crash. -*/ - -#define TOOM33_MUL_N_REC(p, a, b, n, ws) \ - do { \ - if (MAYBE_mul_basecase \ - && BELOW_THRESHOLD (n, MUL_TOOM22_THRESHOLD)) \ - mpn_mul_basecase (p, a, n, b, n); \ - else if (! MAYBE_mul_toom33 \ - || BELOW_THRESHOLD (n, MUL_TOOM33_THRESHOLD)) \ - mpn_toom22_mul (p, a, n, b, n, ws); \ - else \ - mpn_toom33_mul (p, a, n, b, n, ws); \ - } while (0) - -void -mpn_toom33_mul (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn, - mp_ptr scratch) -{ - const int __gmpn_cpuvec_initialized = 1; - mp_size_t n, s, t; - int vm1_neg; - mp_limb_t cy, vinf0; - mp_ptr gp; - mp_ptr as1, asm1, as2; - mp_ptr bs1, bsm1, bs2; - -#define a0 ap -#define a1 (ap + n) -#define a2 (ap + 2*n) -#define b0 bp -#define b1 (bp + n) -#define b2 (bp + 2*n) - - n = (an + 2) / (size_t) 3; - - s = an - 2 * n; - t = bn - 2 * n; - - ASSERT (an >= bn); - - ASSERT (0 < s && s <= n); - ASSERT (0 < t && t <= n); - - as1 = scratch + 4 * n + 4; - asm1 = scratch + 2 * n + 2; - as2 = pp + n + 1; - - bs1 = pp; - bsm1 = scratch + 3 * n + 3; /* we need 4n+4 <= 4n+s+t */ - bs2 = pp + 2 * n + 2; - - gp = scratch; - - vm1_neg = 0; - - /* Compute as1 and asm1. */ - cy = mpn_add (gp, a0, n, a2, s); -#if HAVE_NATIVE_mpn_add_n_sub_n - if (cy == 0 && mpn_cmp (gp, a1, n) < 0) - { - cy = mpn_add_n_sub_n (as1, asm1, a1, gp, n); - as1[n] = cy >> 1; - asm1[n] = 0; - vm1_neg = 1; - } - else - { - mp_limb_t cy2; - cy2 = mpn_add_n_sub_n (as1, asm1, gp, a1, n); - as1[n] = cy + (cy2 >> 1); - asm1[n] = cy - (cy2 & 1); - } -#else - as1[n] = cy + mpn_add_n (as1, gp, a1, n); - if (cy == 0 && mpn_cmp (gp, a1, n) < 0) - { - mpn_sub_n (asm1, a1, gp, n); - asm1[n] = 0; - vm1_neg = 1; - } - else - { - cy -= mpn_sub_n (asm1, gp, a1, n); - asm1[n] = cy; - } -#endif - - /* Compute as2. */ -#if HAVE_NATIVE_mpn_rsblsh1_n - cy = mpn_add_n (as2, a2, as1, s); - if (s != n) - cy = mpn_add_1 (as2 + s, as1 + s, n - s, cy); - cy += as1[n]; - cy = 2 * cy + mpn_rsblsh1_n (as2, a0, as2, n); -#else -#if HAVE_NATIVE_mpn_addlsh1_n - cy = mpn_addlsh1_n (as2, a1, a2, s); - if (s != n) - cy = mpn_add_1 (as2 + s, a1 + s, n - s, cy); - cy = 2 * cy + mpn_addlsh1_n (as2, a0, as2, n); -#else - cy = mpn_add_n (as2, a2, as1, s); - if (s != n) - cy = mpn_add_1 (as2 + s, as1 + s, n - s, cy); - cy += as1[n]; - cy = 2 * cy + mpn_lshift (as2, as2, n, 1); - cy -= mpn_sub_n (as2, as2, a0, n); -#endif -#endif - as2[n] = cy; - - /* Compute bs1 and bsm1. */ - cy = mpn_add (gp, b0, n, b2, t); -#if HAVE_NATIVE_mpn_add_n_sub_n - if (cy == 0 && mpn_cmp (gp, b1, n) < 0) - { - cy = mpn_add_n_sub_n (bs1, bsm1, b1, gp, n); - bs1[n] = cy >> 1; - bsm1[n] = 0; - vm1_neg ^= 1; - } - else - { - mp_limb_t cy2; - cy2 = mpn_add_n_sub_n (bs1, bsm1, gp, b1, n); - bs1[n] = cy + (cy2 >> 1); - bsm1[n] = cy - (cy2 & 1); - } -#else - bs1[n] = cy + mpn_add_n (bs1, gp, b1, n); - if (cy == 0 && mpn_cmp (gp, b1, n) < 0) - { - mpn_sub_n (bsm1, b1, gp, n); - bsm1[n] = 0; - vm1_neg ^= 1; - } - else - { - cy -= mpn_sub_n (bsm1, gp, b1, n); - bsm1[n] = cy; - } -#endif - - /* Compute bs2. */ -#if HAVE_NATIVE_mpn_rsblsh1_n - cy = mpn_add_n (bs2, b2, bs1, t); - if (t != n) - cy = mpn_add_1 (bs2 + t, bs1 + t, n - t, cy); - cy += bs1[n]; - cy = 2 * cy + mpn_rsblsh1_n (bs2, b0, bs2, n); -#else -#if HAVE_NATIVE_mpn_addlsh1_n - cy = mpn_addlsh1_n (bs2, b1, b2, t); - if (t != n) - cy = mpn_add_1 (bs2 + t, b1 + t, n - t, cy); - cy = 2 * cy + mpn_addlsh1_n (bs2, b0, bs2, n); -#else - cy = mpn_add_n (bs2, bs1, b2, t); - if (t != n) - cy = mpn_add_1 (bs2 + t, bs1 + t, n - t, cy); - cy += bs1[n]; - cy = 2 * cy + mpn_lshift (bs2, bs2, n, 1); - cy -= mpn_sub_n (bs2, bs2, b0, n); -#endif -#endif - bs2[n] = cy; - - ASSERT (as1[n] <= 2); - ASSERT (bs1[n] <= 2); - ASSERT (asm1[n] <= 1); - ASSERT (bsm1[n] <= 1); - ASSERT (as2[n] <= 6); - ASSERT (bs2[n] <= 6); - -#define v0 pp /* 2n */ -#define v1 (pp + 2 * n) /* 2n+1 */ -#define vinf (pp + 4 * n) /* s+t */ -#define vm1 scratch /* 2n+1 */ -#define v2 (scratch + 2 * n + 1) /* 2n+2 */ -#define scratch_out (scratch + 5 * n + 5) - - /* vm1, 2n+1 limbs */ -#ifdef SMALLER_RECURSION - TOOM33_MUL_N_REC (vm1, asm1, bsm1, n, scratch_out); - cy = 0; - if (asm1[n] != 0) - cy = bsm1[n] + mpn_add_n (vm1 + n, vm1 + n, bsm1, n); - if (bsm1[n] != 0) - cy += mpn_add_n (vm1 + n, vm1 + n, asm1, n); - vm1[2 * n] = cy; -#else - TOOM33_MUL_N_REC (vm1, asm1, bsm1, n + 1, scratch_out); -#endif - - TOOM33_MUL_N_REC (v2, as2, bs2, n + 1, scratch_out); /* v2, 2n+1 limbs */ - - /* vinf, s+t limbs */ - if (s > t) mpn_mul (vinf, a2, s, b2, t); - else TOOM33_MUL_N_REC (vinf, a2, b2, s, scratch_out); - - vinf0 = vinf[0]; /* v1 overlaps with this */ - -#ifdef SMALLER_RECURSION - /* v1, 2n+1 limbs */ - TOOM33_MUL_N_REC (v1, as1, bs1, n, scratch_out); - if (as1[n] == 1) - { - cy = bs1[n] + mpn_add_n (v1 + n, v1 + n, bs1, n); - } - else if (as1[n] != 0) - { -#if HAVE_NATIVE_mpn_addlsh1_n - cy = 2 * bs1[n] + mpn_addlsh1_n (v1 + n, v1 + n, bs1, n); -#else - cy = 2 * bs1[n] + mpn_addmul_1 (v1 + n, bs1, n, CNST_LIMB(2)); -#endif - } - else - cy = 0; - if (bs1[n] == 1) - { - cy += mpn_add_n (v1 + n, v1 + n, as1, n); - } - else if (bs1[n] != 0) - { -#if HAVE_NATIVE_mpn_addlsh1_n - cy += mpn_addlsh1_n (v1 + n, v1 + n, as1, n); -#else - cy += mpn_addmul_1 (v1 + n, as1, n, CNST_LIMB(2)); -#endif - } - v1[2 * n] = cy; -#else - cy = vinf[1]; - TOOM33_MUL_N_REC (v1, as1, bs1, n + 1, scratch_out); - vinf[1] = cy; -#endif - - TOOM33_MUL_N_REC (v0, ap, bp, n, scratch_out); /* v0, 2n limbs */ - - mpn_toom_interpolate_5pts (pp, v2, vm1, n, s + t, vm1_neg, vinf0); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom3_sqr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom3_sqr.c deleted file mode 100644 index 6117c67ca6809ed22c6ab134501d1852b942d61d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom3_sqr.c +++ /dev/null @@ -1,226 +0,0 @@ -/* mpn_toom3_sqr -- Square {ap,an}. - - Contributed to the GNU project by Torbjorn Granlund. - Additional improvements by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2006-2010, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Evaluate in: -1, 0, +1, +2, +inf - - <-s--><--n--><--n--> - ____ ______ ______ - |_a2_|___a1_|___a0_| - - v0 = a0 ^2 # A(0)^2 - v1 = (a0+ a1+ a2)^2 # A(1)^2 ah <= 2 - vm1 = (a0- a1+ a2)^2 # A(-1)^2 |ah| <= 1 - v2 = (a0+2a1+4a2)^2 # A(2)^2 ah <= 6 - vinf= a2 ^2 # A(inf)^2 -*/ - -#if TUNE_PROGRAM_BUILD || WANT_FAT_BINARY -#define MAYBE_sqr_basecase 1 -#define MAYBE_sqr_toom3 1 -#else -#define MAYBE_sqr_basecase \ - (SQR_TOOM3_THRESHOLD < 3 * SQR_TOOM2_THRESHOLD) -#define MAYBE_sqr_toom3 \ - (SQR_TOOM4_THRESHOLD >= 3 * SQR_TOOM3_THRESHOLD) -#endif - -#define TOOM3_SQR_REC(p, a, n, ws) \ - do { \ - if (MAYBE_sqr_basecase \ - && BELOW_THRESHOLD (n, SQR_TOOM2_THRESHOLD)) \ - mpn_sqr_basecase (p, a, n); \ - else if (! MAYBE_sqr_toom3 \ - || BELOW_THRESHOLD (n, SQR_TOOM3_THRESHOLD)) \ - mpn_toom2_sqr (p, a, n, ws); \ - else \ - mpn_toom3_sqr (p, a, n, ws); \ - } while (0) - -void -mpn_toom3_sqr (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_ptr scratch) -{ - const int __gmpn_cpuvec_initialized = 1; - mp_size_t n, s; - mp_limb_t cy, vinf0; - mp_ptr gp; - mp_ptr as1, asm1, as2; - -#define a0 ap -#define a1 (ap + n) -#define a2 (ap + 2*n) - - n = (an + 2) / (size_t) 3; - - s = an - 2 * n; - - ASSERT (0 < s && s <= n); - - as1 = scratch + 4 * n + 4; - asm1 = scratch + 2 * n + 2; - as2 = pp + n + 1; - - gp = scratch; - - /* Compute as1 and asm1. */ - cy = mpn_add (gp, a0, n, a2, s); -#if HAVE_NATIVE_mpn_add_n_sub_n - if (cy == 0 && mpn_cmp (gp, a1, n) < 0) - { - cy = mpn_add_n_sub_n (as1, asm1, a1, gp, n); - as1[n] = cy >> 1; - asm1[n] = 0; - } - else - { - mp_limb_t cy2; - cy2 = mpn_add_n_sub_n (as1, asm1, gp, a1, n); - as1[n] = cy + (cy2 >> 1); - asm1[n] = cy - (cy2 & 1); - } -#else - as1[n] = cy + mpn_add_n (as1, gp, a1, n); - if (cy == 0 && mpn_cmp (gp, a1, n) < 0) - { - mpn_sub_n (asm1, a1, gp, n); - asm1[n] = 0; - } - else - { - cy -= mpn_sub_n (asm1, gp, a1, n); - asm1[n] = cy; - } -#endif - - /* Compute as2. */ -#if HAVE_NATIVE_mpn_rsblsh1_n - cy = mpn_add_n (as2, a2, as1, s); - if (s != n) - cy = mpn_add_1 (as2 + s, as1 + s, n - s, cy); - cy += as1[n]; - cy = 2 * cy + mpn_rsblsh1_n (as2, a0, as2, n); -#else -#if HAVE_NATIVE_mpn_addlsh1_n - cy = mpn_addlsh1_n (as2, a1, a2, s); - if (s != n) - cy = mpn_add_1 (as2 + s, a1 + s, n - s, cy); - cy = 2 * cy + mpn_addlsh1_n (as2, a0, as2, n); -#else - cy = mpn_add_n (as2, a2, as1, s); - if (s != n) - cy = mpn_add_1 (as2 + s, as1 + s, n - s, cy); - cy += as1[n]; - cy = 2 * cy + mpn_lshift (as2, as2, n, 1); - cy -= mpn_sub_n (as2, as2, a0, n); -#endif -#endif - as2[n] = cy; - - ASSERT (as1[n] <= 2); - ASSERT (asm1[n] <= 1); - -#define v0 pp /* 2n */ -#define v1 (pp + 2 * n) /* 2n+1 */ -#define vinf (pp + 4 * n) /* s+s */ -#define vm1 scratch /* 2n+1 */ -#define v2 (scratch + 2 * n + 1) /* 2n+2 */ -#define scratch_out (scratch + 5 * n + 5) - - /* vm1, 2n+1 limbs */ -#ifdef SMALLER_RECURSION - TOOM3_SQR_REC (vm1, asm1, n, scratch_out); - cy = 0; - if (asm1[n] != 0) - cy = asm1[n] + mpn_add_n (vm1 + n, vm1 + n, asm1, n); - if (asm1[n] != 0) - cy += mpn_add_n (vm1 + n, vm1 + n, asm1, n); - vm1[2 * n] = cy; -#else - TOOM3_SQR_REC (vm1, asm1, n + 1, scratch_out); -#endif - - TOOM3_SQR_REC (v2, as2, n + 1, scratch_out); /* v2, 2n+1 limbs */ - - TOOM3_SQR_REC (vinf, a2, s, scratch_out); /* vinf, s+s limbs */ - - vinf0 = vinf[0]; /* v1 overlaps with this */ - -#ifdef SMALLER_RECURSION - /* v1, 2n+1 limbs */ - TOOM3_SQR_REC (v1, as1, n, scratch_out); - if (as1[n] == 1) - { - cy = as1[n] + mpn_add_n (v1 + n, v1 + n, as1, n); - } - else if (as1[n] != 0) - { -#if HAVE_NATIVE_mpn_addlsh1_n - cy = 2 * as1[n] + mpn_addlsh1_n (v1 + n, v1 + n, as1, n); -#else - cy = 2 * as1[n] + mpn_addmul_1 (v1 + n, as1, n, CNST_LIMB(2)); -#endif - } - else - cy = 0; - if (as1[n] == 1) - { - cy += mpn_add_n (v1 + n, v1 + n, as1, n); - } - else if (as1[n] != 0) - { -#if HAVE_NATIVE_mpn_addlsh1_n - cy += mpn_addlsh1_n (v1 + n, v1 + n, as1, n); -#else - cy += mpn_addmul_1 (v1 + n, as1, n, CNST_LIMB(2)); -#endif - } - v1[2 * n] = cy; -#else - cy = vinf[1]; - TOOM3_SQR_REC (v1, as1, n + 1, scratch_out); - vinf[1] = cy; -#endif - - TOOM3_SQR_REC (v0, ap, n, scratch_out); /* v0, 2n limbs */ - - mpn_toom_interpolate_5pts (pp, v2, vm1, n, s + s, 0, vinf0); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom42_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom42_mul.c deleted file mode 100644 index 525b5094bdea7e019eee202bfe785c2e54176ed3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom42_mul.c +++ /dev/null @@ -1,235 +0,0 @@ -/* mpn_toom42_mul -- Multiply {ap,an} and {bp,bn} where an is nominally twice - as large as bn. Or more accurately, (3/2)bn < an < 4bn. - - Contributed to the GNU project by Torbjorn Granlund. - Additional improvements by Marco Bodrato. - - The idea of applying toom to unbalanced multiplication is due to Marco - Bodrato and Alberto Zanoni. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2006-2008, 2012, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Evaluate in: -1, 0, +1, +2, +inf - - <-s-><--n--><--n--><--n--> - ___ ______ ______ ______ - |a3_|___a2_|___a1_|___a0_| - |_b1_|___b0_| - <-t--><--n--> - - v0 = a0 * b0 # A(0)*B(0) - v1 = (a0+ a1+ a2+ a3)*(b0+ b1) # A(1)*B(1) ah <= 3 bh <= 1 - vm1 = (a0- a1+ a2- a3)*(b0- b1) # A(-1)*B(-1) |ah| <= 1 bh = 0 - v2 = (a0+2a1+4a2+8a3)*(b0+2b1) # A(2)*B(2) ah <= 14 bh <= 2 - vinf= a3 * b1 # A(inf)*B(inf) -*/ - -#define TOOM42_MUL_N_REC(p, a, b, n, ws) \ - do { \ - mpn_mul_n (p, a, b, n); \ - } while (0) - -void -mpn_toom42_mul (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn, - mp_ptr scratch) -{ - mp_size_t n, s, t; - int vm1_neg; - mp_limb_t cy, vinf0; - mp_ptr a0_a2; - mp_ptr as1, asm1, as2; - mp_ptr bs1, bsm1, bs2; - mp_ptr tmp; - TMP_DECL; - -#define a0 ap -#define a1 (ap + n) -#define a2 (ap + 2*n) -#define a3 (ap + 3*n) -#define b0 bp -#define b1 (bp + n) - - n = an >= 2 * bn ? (an + 3) >> 2 : (bn + 1) >> 1; - - s = an - 3 * n; - t = bn - n; - - ASSERT (0 < s && s <= n); - ASSERT (0 < t && t <= n); - - TMP_MARK; - - tmp = TMP_ALLOC_LIMBS (6 * n + 5); - as1 = tmp; tmp += n + 1; - asm1 = tmp; tmp += n + 1; - as2 = tmp; tmp += n + 1; - bs1 = tmp; tmp += n + 1; - bsm1 = tmp; tmp += n; - bs2 = tmp; tmp += n + 1; - - a0_a2 = pp; - - /* Compute as1 and asm1. */ - vm1_neg = mpn_toom_eval_dgr3_pm1 (as1, asm1, ap, n, s, a0_a2) & 1; - - /* Compute as2. */ -#if HAVE_NATIVE_mpn_addlsh1_n - cy = mpn_addlsh1_n (as2, a2, a3, s); - if (s != n) - cy = mpn_add_1 (as2 + s, a2 + s, n - s, cy); - cy = 2 * cy + mpn_addlsh1_n (as2, a1, as2, n); - cy = 2 * cy + mpn_addlsh1_n (as2, a0, as2, n); -#else - cy = mpn_lshift (as2, a3, s, 1); - cy += mpn_add_n (as2, a2, as2, s); - if (s != n) - cy = mpn_add_1 (as2 + s, a2 + s, n - s, cy); - cy = 2 * cy + mpn_lshift (as2, as2, n, 1); - cy += mpn_add_n (as2, a1, as2, n); - cy = 2 * cy + mpn_lshift (as2, as2, n, 1); - cy += mpn_add_n (as2, a0, as2, n); -#endif - as2[n] = cy; - - /* Compute bs1 and bsm1. */ - if (t == n) - { -#if HAVE_NATIVE_mpn_add_n_sub_n - if (mpn_cmp (b0, b1, n) < 0) - { - cy = mpn_add_n_sub_n (bs1, bsm1, b1, b0, n); - vm1_neg ^= 1; - } - else - { - cy = mpn_add_n_sub_n (bs1, bsm1, b0, b1, n); - } - bs1[n] = cy >> 1; -#else - bs1[n] = mpn_add_n (bs1, b0, b1, n); - - if (mpn_cmp (b0, b1, n) < 0) - { - mpn_sub_n (bsm1, b1, b0, n); - vm1_neg ^= 1; - } - else - { - mpn_sub_n (bsm1, b0, b1, n); - } -#endif - } - else - { - bs1[n] = mpn_add (bs1, b0, n, b1, t); - - if (mpn_zero_p (b0 + t, n - t) && mpn_cmp (b0, b1, t) < 0) - { - mpn_sub_n (bsm1, b1, b0, t); - MPN_ZERO (bsm1 + t, n - t); - vm1_neg ^= 1; - } - else - { - mpn_sub (bsm1, b0, n, b1, t); - } - } - - /* Compute bs2, recycling bs1. bs2=bs1+b1 */ - mpn_add (bs2, bs1, n + 1, b1, t); - - ASSERT (as1[n] <= 3); - ASSERT (bs1[n] <= 1); - ASSERT (asm1[n] <= 1); -/*ASSERT (bsm1[n] == 0);*/ - ASSERT (as2[n] <= 14); - ASSERT (bs2[n] <= 2); - -#define v0 pp /* 2n */ -#define v1 (pp + 2 * n) /* 2n+1 */ -#define vinf (pp + 4 * n) /* s+t */ -#define vm1 scratch /* 2n+1 */ -#define v2 (scratch + 2 * n + 1) /* 2n+2 */ -#define scratch_out scratch + 4 * n + 4 /* Currently unused. */ - - /* vm1, 2n+1 limbs */ - TOOM42_MUL_N_REC (vm1, asm1, bsm1, n, scratch_out); - cy = 0; - if (asm1[n] != 0) - cy = mpn_add_n (vm1 + n, vm1 + n, bsm1, n); - vm1[2 * n] = cy; - - TOOM42_MUL_N_REC (v2, as2, bs2, n + 1, scratch_out); /* v2, 2n+1 limbs */ - - /* vinf, s+t limbs */ - if (s > t) mpn_mul (vinf, a3, s, b1, t); - else mpn_mul (vinf, b1, t, a3, s); - - vinf0 = vinf[0]; /* v1 overlaps with this */ - - /* v1, 2n+1 limbs */ - TOOM42_MUL_N_REC (v1, as1, bs1, n, scratch_out); - if (as1[n] == 1) - { - cy = bs1[n] + mpn_add_n (v1 + n, v1 + n, bs1, n); - } - else if (as1[n] == 2) - { -#if HAVE_NATIVE_mpn_addlsh1_n - cy = 2 * bs1[n] + mpn_addlsh1_n (v1 + n, v1 + n, bs1, n); -#else - cy = 2 * bs1[n] + mpn_addmul_1 (v1 + n, bs1, n, CNST_LIMB(2)); -#endif - } - else if (as1[n] == 3) - { - cy = 3 * bs1[n] + mpn_addmul_1 (v1 + n, bs1, n, CNST_LIMB(3)); - } - else - cy = 0; - if (bs1[n] != 0) - cy += mpn_add_n (v1 + n, v1 + n, as1, n); - v1[2 * n] = cy; - - TOOM42_MUL_N_REC (v0, ap, bp, n, scratch_out); /* v0, 2n limbs */ - - mpn_toom_interpolate_5pts (pp, v2, vm1, n, s + t, vm1_neg, vinf0); - - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom42_mulmid.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom42_mulmid.c deleted file mode 100644 index 0251a6d7ed33e330d805fb60b824b2fedb074cff..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom42_mulmid.c +++ /dev/null @@ -1,238 +0,0 @@ -/* mpn_toom42_mulmid -- toom42 middle product - - Contributed by David Harvey. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - - - -/* - Middle product of {ap,2n-1} and {bp,n}, output written to {rp,n+2}. - - Neither ap nor bp may overlap rp. - - Must have n >= 4. - - Amount of scratch space required is given by mpn_toom42_mulmid_itch(). - - FIXME: this code assumes that n is small compared to GMP_NUMB_MAX. The exact - requirements should be clarified. -*/ -void -mpn_toom42_mulmid (mp_ptr rp, mp_srcptr ap, mp_srcptr bp, mp_size_t n, - mp_ptr scratch) -{ - mp_limb_t cy, e[12], zh, zl; - mp_size_t m; - int neg; - - ASSERT (n >= 4); - ASSERT (! MPN_OVERLAP_P (rp, n + 2, ap, 2*n - 1)); - ASSERT (! MPN_OVERLAP_P (rp, n + 2, bp, n)); - - ap += n & 1; /* handle odd row and diagonal later */ - m = n / 2; - - /* (e0h:e0l) etc are correction terms, in 2's complement */ -#define e0l (e[0]) -#define e0h (e[1]) -#define e1l (e[2]) -#define e1h (e[3]) -#define e2l (e[4]) -#define e2h (e[5]) -#define e3l (e[6]) -#define e3h (e[7]) -#define e4l (e[8]) -#define e4h (e[9]) -#define e5l (e[10]) -#define e5h (e[11]) - -#define s (scratch + 2) -#define t (rp + m + 2) -#define p0 rp -#define p1 scratch -#define p2 (rp + m) -#define next_scratch (scratch + 3*m + 1) - - /* - rp scratch - |---------|-----------| |---------|---------|----------| - 0 m 2m+2 0 m 2m 3m+1 - <----p2----> <-------------s-------------> - <----p0----><---t----> <----p1----> - */ - - /* compute {s,3m-1} = {a,3m-1} + {a+m,3m-1} and error terms e0, e1, e2, e3 */ - cy = mpn_add_err1_n (s, ap, ap + m, &e0l, bp + m, m - 1, 0); - cy = mpn_add_err2_n (s + m - 1, ap + m - 1, ap + 2*m - 1, &e1l, - bp + m, bp, m, cy); - mpn_add_err1_n (s + 2*m - 1, ap + 2*m - 1, ap + 3*m - 1, &e3l, bp, m, cy); - - /* compute t = (-1)^neg * ({b,m} - {b+m,m}) and error terms e4, e5 */ - if (mpn_cmp (bp + m, bp, m) < 0) - { - ASSERT_NOCARRY (mpn_sub_err2_n (t, bp, bp + m, &e4l, - ap + m - 1, ap + 2*m - 1, m, 0)); - neg = 1; - } - else - { - ASSERT_NOCARRY (mpn_sub_err2_n (t, bp + m, bp, &e4l, - ap + m - 1, ap + 2*m - 1, m, 0)); - neg = 0; - } - - /* recursive middle products. The picture is: - - b[2m-1] A A A B B B - - - - - - ... - A A A B B B - - - - - b[m] - - A A A B B B - - - - b[m-1] - - - C C C D D D - - - ... - - - - C C C D D D - - b[0] - - - - - C C C D D D - a[0] ... a[m] ... a[2m] ... a[4m-2] - */ - - if (m < MULMID_TOOM42_THRESHOLD) - { - /* A + B */ - mpn_mulmid_basecase (p0, s, 2*m - 1, bp + m, m); - /* accumulate high limbs of p0 into e1 */ - ADDC_LIMB (cy, e1l, e1l, p0[m]); - e1h += p0[m + 1] + cy; - /* (-1)^neg * (B - C) (overwrites first m limbs of s) */ - mpn_mulmid_basecase (p1, ap + m, 2*m - 1, t, m); - /* C + D (overwrites t) */ - mpn_mulmid_basecase (p2, s + m, 2*m - 1, bp, m); - } - else - { - /* as above, but use toom42 instead */ - mpn_toom42_mulmid (p0, s, bp + m, m, next_scratch); - ADDC_LIMB (cy, e1l, e1l, p0[m]); - e1h += p0[m + 1] + cy; - mpn_toom42_mulmid (p1, ap + m, t, m, next_scratch); - mpn_toom42_mulmid (p2, s + m, bp, m, next_scratch); - } - - /* apply error terms */ - - /* -e0 at rp[0] */ - SUBC_LIMB (cy, rp[0], rp[0], e0l); - SUBC_LIMB (cy, rp[1], rp[1], e0h + cy); - if (UNLIKELY (cy)) - { - cy = (m > 2) ? mpn_sub_1 (rp + 2, rp + 2, m - 2, 1) : 1; - SUBC_LIMB (cy, e1l, e1l, cy); - e1h -= cy; - } - - /* z = e1 - e2 + high(p0) */ - SUBC_LIMB (cy, zl, e1l, e2l); - zh = e1h - e2h - cy; - - /* z at rp[m] */ - ADDC_LIMB (cy, rp[m], rp[m], zl); - zh = (zh + cy) & GMP_NUMB_MASK; - ADDC_LIMB (cy, rp[m + 1], rp[m + 1], zh); - cy -= (zh >> (GMP_NUMB_BITS - 1)); - if (UNLIKELY (cy)) - { - if (cy == 1) - mpn_add_1 (rp + m + 2, rp + m + 2, m, 1); - else /* cy == -1 */ - mpn_sub_1 (rp + m + 2, rp + m + 2, m, 1); - } - - /* e3 at rp[2*m] */ - ADDC_LIMB (cy, rp[2*m], rp[2*m], e3l); - rp[2*m + 1] = (rp[2*m + 1] + e3h + cy) & GMP_NUMB_MASK; - - /* e4 at p1[0] */ - ADDC_LIMB (cy, p1[0], p1[0], e4l); - ADDC_LIMB (cy, p1[1], p1[1], e4h + cy); - if (UNLIKELY (cy)) - mpn_add_1 (p1 + 2, p1 + 2, m, 1); - - /* -e5 at p1[m] */ - SUBC_LIMB (cy, p1[m], p1[m], e5l); - p1[m + 1] = (p1[m + 1] - e5h - cy) & GMP_NUMB_MASK; - - /* adjustment if p1 ends up negative */ - cy = (p1[m + 1] >> (GMP_NUMB_BITS - 1)); - - /* add (-1)^neg * (p1 - B^m * p1) to output */ - if (neg) - { - mpn_sub_1 (rp + m + 2, rp + m + 2, m, cy); - mpn_add (rp, rp, 2*m + 2, p1, m + 2); /* A + C */ - mpn_sub_n (rp + m, rp + m, p1, m + 2); /* B + D */ - } - else - { - mpn_add_1 (rp + m + 2, rp + m + 2, m, cy); - mpn_sub (rp, rp, 2*m + 2, p1, m + 2); /* A + C */ - mpn_add_n (rp + m, rp + m, p1, m + 2); /* B + D */ - } - - /* odd row and diagonal */ - if (n & 1) - { - /* - Products marked E are already done. We need to do products marked O. - - OOOOO---- - -EEEEO--- - --EEEEO-- - ---EEEEO- - ----EEEEO - */ - - /* first row of O's */ - cy = mpn_addmul_1 (rp, ap - 1, n, bp[n - 1]); - ADDC_LIMB (rp[n + 1], rp[n], rp[n], cy); - - /* O's on diagonal */ - /* FIXME: should probably define an interface "mpn_mulmid_diag_1" - that can handle the sum below. Currently we're relying on - mulmid_basecase being pretty fast for a diagonal sum like this, - which is true at least for the K8 asm version, but surely false - for the generic version. */ - mpn_mulmid_basecase (e, ap + n - 1, n - 1, bp, n - 1); - mpn_add_n (rp + n - 1, rp + n - 1, e, 3); - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom43_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom43_mul.c deleted file mode 100644 index cb1dbcdc75ccd4f3373c898ae28c0ec49b8b0913..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom43_mul.c +++ /dev/null @@ -1,234 +0,0 @@ -/* mpn_toom43_mul -- Multiply {ap,an} and {bp,bn} where an is nominally 4/3 - times as large as bn. Or more accurately, bn < an < 2 bn. - - Contributed to the GNU project by Marco Bodrato. - - The idea of applying toom to unbalanced multiplication is due to Marco - Bodrato and Alberto Zanoni. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Evaluate in: -2, -1, 0, +1, +2, +inf - - <-s-><--n--><--n--><--n--> - ___ ______ ______ ______ - |a3_|___a2_|___a1_|___a0_| - |_b2_|___b1_|___b0_| - <-t--><--n--><--n--> - - v0 = a0 * b0 # A(0)*B(0) - v1 = (a0+ a1+ a2+ a3)*(b0+ b1+ b2) # A(1)*B(1) ah <= 3 bh <= 2 - vm1 = (a0- a1+ a2- a3)*(b0- b1+ b2) # A(-1)*B(-1) |ah| <= 1 |bh|<= 1 - v2 = (a0+2a1+4a2+8a3)*(b0+2b1+4b2) # A(2)*B(2) ah <= 14 bh <= 6 - vm2 = (a0-2a1+4a2-8a3)*(b0-2b1+4b2) # A(-2)*B(-2) |ah| <= 9 |bh|<= 4 - vinf= a3 * b2 # A(inf)*B(inf) -*/ - -void -mpn_toom43_mul (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn, mp_ptr scratch) -{ - mp_size_t n, s, t; - enum toom6_flags flags; - mp_limb_t cy; - -#define a0 ap -#define a1 (ap + n) -#define a2 (ap + 2 * n) -#define a3 (ap + 3 * n) -#define b0 bp -#define b1 (bp + n) -#define b2 (bp + 2 * n) - - n = 1 + (3 * an >= 4 * bn ? (an - 1) >> 2 : (bn - 1) / (size_t) 3); - - s = an - 3 * n; - t = bn - 2 * n; - - ASSERT (0 < s && s <= n); - ASSERT (0 < t && t <= n); - - /* This is true whenever an >= 25 or bn >= 19, I think. It - guarantees that we can fit 5 values of size n+1 in the product - area. */ - ASSERT (s+t >= 5); - -#define v0 pp /* 2n */ -#define vm1 (scratch) /* 2n+1 */ -#define v1 (pp + 2*n) /* 2n+1 */ -#define vm2 (scratch + 2 * n + 1) /* 2n+1 */ -#define v2 (scratch + 4 * n + 2) /* 2n+1 */ -#define vinf (pp + 5 * n) /* s+t */ -#define bs1 pp /* n+1 */ -#define bsm1 (scratch + 2 * n + 2) /* n+1 */ -#define asm1 (scratch + 3 * n + 3) /* n+1 */ -#define asm2 (scratch + 4 * n + 4) /* n+1 */ -#define bsm2 (pp + n + 1) /* n+1 */ -#define bs2 (pp + 2 * n + 2) /* n+1 */ -#define as2 (pp + 3 * n + 3) /* n+1 */ -#define as1 (pp + 4 * n + 4) /* n+1 */ - - /* Total sccratch need is 6 * n + 3 + 1; we allocate one extra - limb, because products will overwrite 2n+2 limbs. */ - -#define a0a2 scratch -#define b0b2 scratch -#define a1a3 asm1 -#define b1d bsm1 - - /* Compute as2 and asm2. */ - flags = (enum toom6_flags) (toom6_vm2_neg & mpn_toom_eval_dgr3_pm2 (as2, asm2, ap, n, s, a1a3)); - - /* Compute bs2 and bsm2. */ - b1d[n] = mpn_lshift (b1d, b1, n, 1); /* 2b1 */ - cy = mpn_lshift (b0b2, b2, t, 2); /* 4b2 */ - cy += mpn_add_n (b0b2, b0b2, b0, t); /* 4b2 + b0 */ - if (t != n) - cy = mpn_add_1 (b0b2 + t, b0 + t, n - t, cy); - b0b2[n] = cy; - -#if HAVE_NATIVE_mpn_add_n_sub_n - if (mpn_cmp (b0b2, b1d, n+1) < 0) - { - mpn_add_n_sub_n (bs2, bsm2, b1d, b0b2, n+1); - flags = (enum toom6_flags) (flags ^ toom6_vm2_neg); - } - else - { - mpn_add_n_sub_n (bs2, bsm2, b0b2, b1d, n+1); - } -#else - mpn_add_n (bs2, b0b2, b1d, n+1); - if (mpn_cmp (b0b2, b1d, n+1) < 0) - { - mpn_sub_n (bsm2, b1d, b0b2, n+1); - flags = (enum toom6_flags) (flags ^ toom6_vm2_neg); - } - else - { - mpn_sub_n (bsm2, b0b2, b1d, n+1); - } -#endif - - /* Compute as1 and asm1. */ - flags = (enum toom6_flags) (flags ^ (toom6_vm1_neg & mpn_toom_eval_dgr3_pm1 (as1, asm1, ap, n, s, a0a2))); - - /* Compute bs1 and bsm1. */ - bsm1[n] = mpn_add (bsm1, b0, n, b2, t); -#if HAVE_NATIVE_mpn_add_n_sub_n - if (bsm1[n] == 0 && mpn_cmp (bsm1, b1, n) < 0) - { - cy = mpn_add_n_sub_n (bs1, bsm1, b1, bsm1, n); - bs1[n] = cy >> 1; - flags = (enum toom6_flags) (flags ^ toom6_vm1_neg); - } - else - { - cy = mpn_add_n_sub_n (bs1, bsm1, bsm1, b1, n); - bs1[n] = bsm1[n] + (cy >> 1); - bsm1[n]-= cy & 1; - } -#else - bs1[n] = bsm1[n] + mpn_add_n (bs1, bsm1, b1, n); - if (bsm1[n] == 0 && mpn_cmp (bsm1, b1, n) < 0) - { - mpn_sub_n (bsm1, b1, bsm1, n); - flags = (enum toom6_flags) (flags ^ toom6_vm1_neg); - } - else - { - bsm1[n] -= mpn_sub_n (bsm1, bsm1, b1, n); - } -#endif - - ASSERT (as1[n] <= 3); - ASSERT (bs1[n] <= 2); - ASSERT (asm1[n] <= 1); - ASSERT (bsm1[n] <= 1); - ASSERT (as2[n] <=14); - ASSERT (bs2[n] <= 6); - ASSERT (asm2[n] <= 9); - ASSERT (bsm2[n] <= 4); - - /* vm1, 2n+1 limbs */ - mpn_mul_n (vm1, asm1, bsm1, n+1); /* W4 */ - - /* vm2, 2n+1 limbs */ - mpn_mul_n (vm2, asm2, bsm2, n+1); /* W2 */ - - /* v2, 2n+1 limbs */ - mpn_mul_n (v2, as2, bs2, n+1); /* W1 */ - - /* v1, 2n+1 limbs */ - mpn_mul_n (v1, as1, bs1, n+1); /* W3 */ - - /* vinf, s+t limbs */ /* W0 */ - if (s > t) mpn_mul (vinf, a3, s, b2, t); - else mpn_mul (vinf, b2, t, a3, s); - - /* v0, 2n limbs */ - mpn_mul_n (v0, ap, bp, n); /* W5 */ - - mpn_toom_interpolate_6pts (pp, n, flags, vm1, vm2, v2, t + s); - -#undef v0 -#undef vm1 -#undef v1 -#undef vm2 -#undef v2 -#undef vinf -#undef bs1 -#undef bs2 -#undef bsm1 -#undef bsm2 -#undef asm1 -#undef asm2 -/* #undef as1 */ -/* #undef as2 */ -#undef a0a2 -#undef b0b2 -#undef a1a3 -#undef b1d -#undef a0 -#undef a1 -#undef a2 -#undef a3 -#undef b0 -#undef b1 -#undef b2 -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom44_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom44_mul.c deleted file mode 100644 index fbde633c30043ce521a285c7bccece497b37c94a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom44_mul.c +++ /dev/null @@ -1,236 +0,0 @@ -/* mpn_toom44_mul -- Multiply {ap,an} and {bp,bn} where an and bn are close in - size. Or more accurately, bn <= an < (4/3)bn. - - Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2006-2008, 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Evaluate in: 0, +1, -1, +2, -2, 1/2, +inf - - <-s--><--n--><--n--><--n--> - ____ ______ ______ ______ - |_a3_|___a2_|___a1_|___a0_| - |b3_|___b2_|___b1_|___b0_| - <-t-><--n--><--n--><--n--> - - v0 = a0 * b0 # A(0)*B(0) - v1 = ( a0+ a1+ a2+ a3)*( b0+ b1+ b2+ b3) # A(1)*B(1) ah <= 3 bh <= 3 - vm1 = ( a0- a1+ a2- a3)*( b0- b1+ b2- b3) # A(-1)*B(-1) |ah| <= 1 |bh| <= 1 - v2 = ( a0+2a1+4a2+8a3)*( b0+2b1+4b2+8b3) # A(2)*B(2) ah <= 14 bh <= 14 - vm2 = ( a0-2a1+4a2-8a3)*( b0-2b1+4b2-8b3) # A(2)*B(2) ah <= 9 |bh| <= 9 - vh = (8a0+4a1+2a2+ a3)*(8b0+4b1+2b2+ b3) # A(1/2)*B(1/2) ah <= 14 bh <= 14 - vinf= a3 * b2 # A(inf)*B(inf) -*/ - -#if TUNE_PROGRAM_BUILD -#define MAYBE_mul_basecase 1 -#define MAYBE_mul_toom22 1 -#define MAYBE_mul_toom44 1 -#else -#define MAYBE_mul_basecase \ - (MUL_TOOM44_THRESHOLD < 4 * MUL_TOOM22_THRESHOLD) -#define MAYBE_mul_toom22 \ - (MUL_TOOM44_THRESHOLD < 4 * MUL_TOOM33_THRESHOLD) -#define MAYBE_mul_toom44 \ - (MUL_TOOM6H_THRESHOLD >= 4 * MUL_TOOM44_THRESHOLD) -#endif - -#define TOOM44_MUL_N_REC(p, a, b, n, ws) \ - do { \ - if (MAYBE_mul_basecase \ - && BELOW_THRESHOLD (n, MUL_TOOM22_THRESHOLD)) \ - mpn_mul_basecase (p, a, n, b, n); \ - else if (MAYBE_mul_toom22 \ - && BELOW_THRESHOLD (n, MUL_TOOM33_THRESHOLD)) \ - mpn_toom22_mul (p, a, n, b, n, ws); \ - else if (! MAYBE_mul_toom44 \ - || BELOW_THRESHOLD (n, MUL_TOOM44_THRESHOLD)) \ - mpn_toom33_mul (p, a, n, b, n, ws); \ - else \ - mpn_toom44_mul (p, a, n, b, n, ws); \ - } while (0) - -/* Use of scratch space. In the product area, we store - - ___________________ - |vinf|____|_v1_|_v0_| - s+t 2n-1 2n+1 2n - - The other recursive products, vm1, v2, vm2, vh are stored in the - scratch area. When computing them, we use the product area for - intermediate values. - - Next, we compute v1. We can store the intermediate factors at v0 - and at vh + 2n + 2. - - Finally, for v0 and vinf, factors are parts of the input operands, - and we need scratch space only for the recursive multiplication. - - In all, if S(an) is the scratch need, the needed space is bounded by - - S(an) <= 4 (2*ceil(an/4) + 1) + 1 + S(ceil(an/4) + 1) - - which should give S(n) = 8 n/3 + c log(n) for some constant c. -*/ - -void -mpn_toom44_mul (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn, - mp_ptr scratch) -{ - mp_size_t n, s, t; - mp_limb_t cy; - enum toom7_flags flags; - -#define a0 ap -#define a1 (ap + n) -#define a2 (ap + 2*n) -#define a3 (ap + 3*n) -#define b0 bp -#define b1 (bp + n) -#define b2 (bp + 2*n) -#define b3 (bp + 3*n) - - ASSERT (an >= bn); - - n = (an + 3) >> 2; - - s = an - 3 * n; - t = bn - 3 * n; - - ASSERT (0 < s && s <= n); - ASSERT (0 < t && t <= n); - ASSERT (s >= t); - - /* NOTE: The multiplications to v2, vm2, vh and vm1 overwrites the - * following limb, so these must be computed in order, and we need a - * one limb gap to tp. */ -#define v0 pp /* 2n */ -#define v1 (pp + 2 * n) /* 2n+1 */ -#define vinf (pp + 6 * n) /* s+t */ -#define v2 scratch /* 2n+1 */ -#define vm2 (scratch + 2 * n + 1) /* 2n+1 */ -#define vh (scratch + 4 * n + 2) /* 2n+1 */ -#define vm1 (scratch + 6 * n + 3) /* 2n+1 */ -#define tp (scratch + 8*n + 5) - - /* apx and bpx must not overlap with v1 */ -#define apx pp /* n+1 */ -#define amx (pp + n + 1) /* n+1 */ -#define bmx (pp + 2*n + 2) /* n+1 */ -#define bpx (pp + 4*n + 2) /* n+1 */ - - /* Total scratch need: 8*n + 5 + scratch for recursive calls. This - gives roughly 32 n/3 + log term. */ - - /* Compute apx = a0 + 2 a1 + 4 a2 + 8 a3 and amx = a0 - 2 a1 + 4 a2 - 8 a3. */ - flags = (enum toom7_flags) (toom7_w1_neg & mpn_toom_eval_dgr3_pm2 (apx, amx, ap, n, s, tp)); - - /* Compute bpx = b0 + 2 b1 + 4 b2 + 8 b3 and bmx = b0 - 2 b1 + 4 b2 - 8 b3. */ - flags = (enum toom7_flags) (flags ^ (toom7_w1_neg & mpn_toom_eval_dgr3_pm2 (bpx, bmx, bp, n, t, tp))); - - TOOM44_MUL_N_REC (v2, apx, bpx, n + 1, tp); /* v2, 2n+1 limbs */ - TOOM44_MUL_N_REC (vm2, amx, bmx, n + 1, tp); /* vm2, 2n+1 limbs */ - - /* Compute apx = 8 a0 + 4 a1 + 2 a2 + a3 = (((2*a0 + a1) * 2 + a2) * 2 + a3 */ -#if HAVE_NATIVE_mpn_addlsh1_n - cy = mpn_addlsh1_n (apx, a1, a0, n); - cy = 2*cy + mpn_addlsh1_n (apx, a2, apx, n); - if (s < n) - { - mp_limb_t cy2; - cy2 = mpn_addlsh1_n (apx, a3, apx, s); - apx[n] = 2*cy + mpn_lshift (apx + s, apx + s, n - s, 1); - MPN_INCR_U (apx + s, n+1-s, cy2); - } - else - apx[n] = 2*cy + mpn_addlsh1_n (apx, a3, apx, n); -#else - cy = mpn_lshift (apx, a0, n, 1); - cy += mpn_add_n (apx, apx, a1, n); - cy = 2*cy + mpn_lshift (apx, apx, n, 1); - cy += mpn_add_n (apx, apx, a2, n); - cy = 2*cy + mpn_lshift (apx, apx, n, 1); - apx[n] = cy + mpn_add (apx, apx, n, a3, s); -#endif - - /* Compute bpx = 8 b0 + 4 b1 + 2 b2 + b3 = (((2*b0 + b1) * 2 + b2) * 2 + b3 */ -#if HAVE_NATIVE_mpn_addlsh1_n - cy = mpn_addlsh1_n (bpx, b1, b0, n); - cy = 2*cy + mpn_addlsh1_n (bpx, b2, bpx, n); - if (t < n) - { - mp_limb_t cy2; - cy2 = mpn_addlsh1_n (bpx, b3, bpx, t); - bpx[n] = 2*cy + mpn_lshift (bpx + t, bpx + t, n - t, 1); - MPN_INCR_U (bpx + t, n+1-t, cy2); - } - else - bpx[n] = 2*cy + mpn_addlsh1_n (bpx, b3, bpx, n); -#else - cy = mpn_lshift (bpx, b0, n, 1); - cy += mpn_add_n (bpx, bpx, b1, n); - cy = 2*cy + mpn_lshift (bpx, bpx, n, 1); - cy += mpn_add_n (bpx, bpx, b2, n); - cy = 2*cy + mpn_lshift (bpx, bpx, n, 1); - bpx[n] = cy + mpn_add (bpx, bpx, n, b3, t); -#endif - - ASSERT (apx[n] < 15); - ASSERT (bpx[n] < 15); - - TOOM44_MUL_N_REC (vh, apx, bpx, n + 1, tp); /* vh, 2n+1 limbs */ - - /* Compute apx = a0 + a1 + a2 + a3 and amx = a0 - a1 + a2 - a3. */ - flags = (enum toom7_flags) (flags | (toom7_w3_neg & mpn_toom_eval_dgr3_pm1 (apx, amx, ap, n, s, tp))); - - /* Compute bpx = b0 + b1 + b2 + b3 and bmx = b0 - b1 + b2 - b3. */ - flags = (enum toom7_flags) (flags ^ (toom7_w3_neg & mpn_toom_eval_dgr3_pm1 (bpx, bmx, bp, n, t, tp))); - - TOOM44_MUL_N_REC (vm1, amx, bmx, n + 1, tp); /* vm1, 2n+1 limbs */ - /* Clobbers amx, bmx. */ - TOOM44_MUL_N_REC (v1, apx, bpx, n + 1, tp); /* v1, 2n+1 limbs */ - - TOOM44_MUL_N_REC (v0, a0, b0, n, tp); - if (s > t) - mpn_mul (vinf, a3, s, b3, t); - else - TOOM44_MUL_N_REC (vinf, a3, b3, s, tp); /* vinf, s+t limbs */ - - mpn_toom_interpolate_7pts (pp, n, flags, vm2, vm1, v2, vh, s + t, tp); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom4_sqr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom4_sqr.c deleted file mode 100644 index b4154ba83fbe2afb12430e07600c6d91ea7943d4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom4_sqr.c +++ /dev/null @@ -1,164 +0,0 @@ -/* mpn_toom4_sqr -- Square {ap,an}. - - Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2006-2010, 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Evaluate in: -1, -1/2, 0, +1/2, +1, +2, +inf - - <-s--><--n--><--n--><--n--> - ____ ______ ______ ______ - |_a3_|___a2_|___a1_|___a0_| - - v0 = a0 ^2 # A(0)^2 - v1 = ( a0+ a1+ a2+ a3)^2 # A(1)^2 ah <= 3 - vm1 = ( a0- a1+ a2- a3)^2 # A(-1)^2 |ah| <= 1 - v2 = ( a0+2a1+4a2+8a3)^2 # A(2)^2 ah <= 14 - vh = (8a0+4a1+2a2+ a3)^2 # A(1/2)^2 ah <= 14 - vmh = (8a0-4a1+2a2- a3)^2 # A(-1/2)^2 -4<=ah<=9 - vinf= a3 ^2 # A(inf)^2 -*/ - -#if TUNE_PROGRAM_BUILD -#define MAYBE_sqr_basecase 1 -#define MAYBE_sqr_toom2 1 -#define MAYBE_sqr_toom4 1 -#else -#define MAYBE_sqr_basecase \ - (SQR_TOOM4_THRESHOLD < 4 * SQR_TOOM2_THRESHOLD) -#define MAYBE_sqr_toom2 \ - (SQR_TOOM4_THRESHOLD < 4 * SQR_TOOM3_THRESHOLD) -#define MAYBE_sqr_toom4 \ - (SQR_TOOM6_THRESHOLD >= 4 * SQR_TOOM4_THRESHOLD) -#endif - -#define TOOM4_SQR_REC(p, a, n, ws) \ - do { \ - if (MAYBE_sqr_basecase \ - && BELOW_THRESHOLD (n, SQR_TOOM2_THRESHOLD)) \ - mpn_sqr_basecase (p, a, n); \ - else if (MAYBE_sqr_toom2 \ - && BELOW_THRESHOLD (n, SQR_TOOM3_THRESHOLD)) \ - mpn_toom2_sqr (p, a, n, ws); \ - else if (! MAYBE_sqr_toom4 \ - || BELOW_THRESHOLD (n, SQR_TOOM4_THRESHOLD)) \ - mpn_toom3_sqr (p, a, n, ws); \ - else \ - mpn_toom4_sqr (p, a, n, ws); \ - } while (0) - -void -mpn_toom4_sqr (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_ptr scratch) -{ - mp_size_t n, s; - mp_limb_t cy; - -#define a0 ap -#define a1 (ap + n) -#define a2 (ap + 2*n) -#define a3 (ap + 3*n) - - n = (an + 3) >> 2; - - s = an - 3 * n; - - ASSERT (0 < s && s <= n); - - /* NOTE: The multiplications to v2, vm2, vh and vm1 overwrites the - * following limb, so these must be computed in order, and we need a - * one limb gap to tp. */ -#define v0 pp /* 2n */ -#define v1 (pp + 2 * n) /* 2n+1 */ -#define vinf (pp + 6 * n) /* s+t */ -#define v2 scratch /* 2n+1 */ -#define vm2 (scratch + 2 * n + 1) /* 2n+1 */ -#define vh (scratch + 4 * n + 2) /* 2n+1 */ -#define vm1 (scratch + 6 * n + 3) /* 2n+1 */ -#define tp (scratch + 8*n + 5) - - /* No overlap with v1 */ -#define apx pp /* n+1 */ -#define amx (pp + 4*n + 2) /* n+1 */ - - /* Total scratch need: 8*n + 5 + scratch for recursive calls. This - gives roughly 32 n/3 + log term. */ - - /* Compute apx = a0 + 2 a1 + 4 a2 + 8 a3 and amx = a0 - 2 a1 + 4 a2 - 8 a3. */ - mpn_toom_eval_dgr3_pm2 (apx, amx, ap, n, s, tp); - - TOOM4_SQR_REC (v2, apx, n + 1, tp); /* v2, 2n+1 limbs */ - TOOM4_SQR_REC (vm2, amx, n + 1, tp); /* vm2, 2n+1 limbs */ - - /* Compute apx = 8 a0 + 4 a1 + 2 a2 + a3 = (((2*a0 + a1) * 2 + a2) * 2 + a3 */ -#if HAVE_NATIVE_mpn_addlsh1_n - cy = mpn_addlsh1_n (apx, a1, a0, n); - cy = 2*cy + mpn_addlsh1_n (apx, a2, apx, n); - if (s < n) - { - mp_limb_t cy2; - cy2 = mpn_addlsh1_n (apx, a3, apx, s); - apx[n] = 2*cy + mpn_lshift (apx + s, apx + s, n - s, 1); - MPN_INCR_U (apx + s, n+1-s, cy2); - } - else - apx[n] = 2*cy + mpn_addlsh1_n (apx, a3, apx, n); -#else - cy = mpn_lshift (apx, a0, n, 1); - cy += mpn_add_n (apx, apx, a1, n); - cy = 2*cy + mpn_lshift (apx, apx, n, 1); - cy += mpn_add_n (apx, apx, a2, n); - cy = 2*cy + mpn_lshift (apx, apx, n, 1); - apx[n] = cy + mpn_add (apx, apx, n, a3, s); -#endif - - ASSERT (apx[n] < 15); - - TOOM4_SQR_REC (vh, apx, n + 1, tp); /* vh, 2n+1 limbs */ - - /* Compute apx = a0 + a1 + a2 + a3 and amx = a0 - a1 + a2 - a3. */ - mpn_toom_eval_dgr3_pm1 (apx, amx, ap, n, s, tp); - - TOOM4_SQR_REC (v1, apx, n + 1, tp); /* v1, 2n+1 limbs */ - TOOM4_SQR_REC (vm1, amx, n + 1, tp); /* vm1, 2n+1 limbs */ - - TOOM4_SQR_REC (v0, a0, n, tp); - TOOM4_SQR_REC (vinf, a3, s, tp); /* vinf, 2s limbs */ - - mpn_toom_interpolate_7pts (pp, n, (enum toom7_flags) 0, vm2, vm1, v2, vh, 2*s, tp); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom52_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom52_mul.c deleted file mode 100644 index efe9a0f68993f760518cfb5b03cdc9c51853c0a1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom52_mul.c +++ /dev/null @@ -1,257 +0,0 @@ -/* mpn_toom52_mul -- Multiply {ap,an} and {bp,bn} where an is nominally 4/3 - times as large as bn. Or more accurately, bn < an < 2 bn. - - Contributed to the GNU project by Marco Bodrato. - - The idea of applying toom to unbalanced multiplication is due to Marco - Bodrato and Alberto Zanoni. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Evaluate in: -2, -1, 0, +1, +2, +inf - - <-s-><--n--><--n--><--n--><--n--> - ___ ______ ______ ______ ______ - |a4_|___a3_|___a2_|___a1_|___a0_| - |b1|___b0_| - <t-><--n--> - - v0 = a0 * b0 # A(0)*B(0) - v1 = (a0+ a1+ a2+ a3+ a4)*(b0+ b1) # A(1)*B(1) ah <= 4 bh <= 1 - vm1 = (a0- a1+ a2- a3+ a4)*(b0- b1) # A(-1)*B(-1) |ah| <= 2 bh = 0 - v2 = (a0+2a1+4a2+8a3+16a4)*(b0+2b1) # A(2)*B(2) ah <= 30 bh <= 2 - vm2 = (a0-2a1+4a2-8a3+16a4)*(b0-2b1) # A(-2)*B(-2) |ah| <= 20 |bh|<= 1 - vinf= a4 * b1 # A(inf)*B(inf) - - Some slight optimization in evaluation are taken from the paper: - "Towards Optimal Toom-Cook Multiplication for Univariate and - Multivariate Polynomials in Characteristic 2 and 0." -*/ - -void -mpn_toom52_mul (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn, mp_ptr scratch) -{ - mp_size_t n, s, t; - enum toom6_flags flags; - -#define a0 ap -#define a1 (ap + n) -#define a2 (ap + 2 * n) -#define a3 (ap + 3 * n) -#define a4 (ap + 4 * n) -#define b0 bp -#define b1 (bp + n) - - n = 1 + (2 * an >= 5 * bn ? (an - 1) / (size_t) 5 : (bn - 1) >> 1); - - s = an - 4 * n; - t = bn - n; - - ASSERT (0 < s && s <= n); - ASSERT (0 < t && t <= n); - - /* Ensures that 5 values of n+1 limbs each fits in the product area. - Borderline cases are an = 32, bn = 8, n = 7, and an = 36, bn = 9, - n = 8. */ - ASSERT (s+t >= 5); - -#define v0 pp /* 2n */ -#define vm1 (scratch) /* 2n+1 */ -#define v1 (pp + 2 * n) /* 2n+1 */ -#define vm2 (scratch + 2 * n + 1) /* 2n+1 */ -#define v2 (scratch + 4 * n + 2) /* 2n+1 */ -#define vinf (pp + 5 * n) /* s+t */ -#define bs1 pp /* n+1 */ -#define bsm1 (scratch + 2 * n + 2) /* n */ -#define asm1 (scratch + 3 * n + 3) /* n+1 */ -#define asm2 (scratch + 4 * n + 4) /* n+1 */ -#define bsm2 (pp + n + 1) /* n+1 */ -#define bs2 (pp + 2 * n + 2) /* n+1 */ -#define as2 (pp + 3 * n + 3) /* n+1 */ -#define as1 (pp + 4 * n + 4) /* n+1 */ - - /* Scratch need is 6 * n + 3 + 1. We need one extra limb, because - products will overwrite 2n+2 limbs. */ - -#define a0a2 scratch -#define a1a3 asm1 - - /* Compute as2 and asm2. */ - flags = (enum toom6_flags) (toom6_vm2_neg & mpn_toom_eval_pm2 (as2, asm2, 4, ap, n, s, a1a3)); - - /* Compute bs1 and bsm1. */ - if (t == n) - { -#if HAVE_NATIVE_mpn_add_n_sub_n - mp_limb_t cy; - - if (mpn_cmp (b0, b1, n) < 0) - { - cy = mpn_add_n_sub_n (bs1, bsm1, b1, b0, n); - flags = (enum toom6_flags) (flags ^ toom6_vm1_neg); - } - else - { - cy = mpn_add_n_sub_n (bs1, bsm1, b0, b1, n); - } - bs1[n] = cy >> 1; -#else - bs1[n] = mpn_add_n (bs1, b0, b1, n); - if (mpn_cmp (b0, b1, n) < 0) - { - mpn_sub_n (bsm1, b1, b0, n); - flags = (enum toom6_flags) (flags ^ toom6_vm1_neg); - } - else - { - mpn_sub_n (bsm1, b0, b1, n); - } -#endif - } - else - { - bs1[n] = mpn_add (bs1, b0, n, b1, t); - if (mpn_zero_p (b0 + t, n - t) && mpn_cmp (b0, b1, t) < 0) - { - mpn_sub_n (bsm1, b1, b0, t); - MPN_ZERO (bsm1 + t, n - t); - flags = (enum toom6_flags) (flags ^ toom6_vm1_neg); - } - else - { - mpn_sub (bsm1, b0, n, b1, t); - } - } - - /* Compute bs2 and bsm2, recycling bs1 and bsm1. bs2=bs1+b1; bsm2=bsm1-b1 */ - mpn_add (bs2, bs1, n+1, b1, t); - if (flags & toom6_vm1_neg ) - { - bsm2[n] = mpn_add (bsm2, bsm1, n, b1, t); - flags = (enum toom6_flags) (flags ^ toom6_vm2_neg); - } - else - { - bsm2[n] = 0; - if (t == n) - { - if (mpn_cmp (bsm1, b1, n) < 0) - { - mpn_sub_n (bsm2, b1, bsm1, n); - flags = (enum toom6_flags) (flags ^ toom6_vm2_neg); - } - else - { - mpn_sub_n (bsm2, bsm1, b1, n); - } - } - else - { - if (mpn_zero_p (bsm1 + t, n - t) && mpn_cmp (bsm1, b1, t) < 0) - { - mpn_sub_n (bsm2, b1, bsm1, t); - MPN_ZERO (bsm2 + t, n - t); - flags = (enum toom6_flags) (flags ^ toom6_vm2_neg); - } - else - { - mpn_sub (bsm2, bsm1, n, b1, t); - } - } - } - - /* Compute as1 and asm1. */ - flags = (enum toom6_flags) (flags ^ (toom6_vm1_neg & mpn_toom_eval_pm1 (as1, asm1, 4, ap, n, s, a0a2))); - - ASSERT (as1[n] <= 4); - ASSERT (bs1[n] <= 1); - ASSERT (asm1[n] <= 2); -/* ASSERT (bsm1[n] <= 1); */ - ASSERT (as2[n] <=30); - ASSERT (bs2[n] <= 2); - ASSERT (asm2[n] <= 20); - ASSERT (bsm2[n] <= 1); - - /* vm1, 2n+1 limbs */ - mpn_mul (vm1, asm1, n+1, bsm1, n); /* W4 */ - - /* vm2, 2n+1 limbs */ - mpn_mul_n (vm2, asm2, bsm2, n+1); /* W2 */ - - /* v2, 2n+1 limbs */ - mpn_mul_n (v2, as2, bs2, n+1); /* W1 */ - - /* v1, 2n+1 limbs */ - mpn_mul_n (v1, as1, bs1, n+1); /* W3 */ - - /* vinf, s+t limbs */ /* W0 */ - if (s > t) mpn_mul (vinf, a4, s, b1, t); - else mpn_mul (vinf, b1, t, a4, s); - - /* v0, 2n limbs */ - mpn_mul_n (v0, ap, bp, n); /* W5 */ - - mpn_toom_interpolate_6pts (pp, n, flags, vm1, vm2, v2, t + s); - -#undef v0 -#undef vm1 -#undef v1 -#undef vm2 -#undef v2 -#undef vinf -#undef bs1 -#undef bs2 -#undef bsm1 -#undef bsm2 -#undef asm1 -#undef asm2 -#undef as1 -#undef as2 -#undef a0a2 -#undef b0b2 -#undef a1a3 -#undef a0 -#undef a1 -#undef a2 -#undef a3 -#undef b0 -#undef b1 -#undef b2 - -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom53_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom53_mul.c deleted file mode 100644 index e7c287089b1071999eeaade500b2c9680e85ae24..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom53_mul.c +++ /dev/null @@ -1,332 +0,0 @@ -/* mpn_toom53_mul -- Multiply {ap,an} and {bp,bn} where an is nominally 5/3 - times as large as bn. Or more accurately, (4/3)bn < an < (5/2)bn. - - Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - - The idea of applying toom to unbalanced multiplication is due to Marco - Bodrato and Alberto Zanoni. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2006-2008, 2012, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Evaluate in: 0, +1, -1, +2, -2, 1/2, +inf - - <-s-><--n--><--n--><--n--><--n--> - ___ ______ ______ ______ ______ - |a4_|___a3_|___a2_|___a1_|___a0_| - |__b2|___b1_|___b0_| - <-t--><--n--><--n--> - - v0 = a0 * b0 # A(0)*B(0) - v1 = ( a0+ a1+ a2+ a3+ a4)*( b0+ b1+ b2) # A(1)*B(1) ah <= 4 bh <= 2 - vm1 = ( a0- a1+ a2- a3+ a4)*( b0- b1+ b2) # A(-1)*B(-1) |ah| <= 2 bh <= 1 - v2 = ( a0+2a1+4a2+8a3+16a4)*( b0+2b1+4b2) # A(2)*B(2) ah <= 30 bh <= 6 - vm2 = ( a0-2a1+4a2-8a3+16a4)*( b0-2b1+4b2) # A(2)*B(2) -9<=ah<=20 -1<=bh<=4 - vh = (16a0+8a1+4a2+2a3+ a4)*(4b0+2b1+ b2) # A(1/2)*B(1/2) ah <= 30 bh <= 6 - vinf= a4 * b2 # A(inf)*B(inf) -*/ - -void -mpn_toom53_mul (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn, - mp_ptr scratch) -{ - mp_size_t n, s, t; - mp_limb_t cy; - mp_ptr gp; - mp_ptr as1, asm1, as2, asm2, ash; - mp_ptr bs1, bsm1, bs2, bsm2, bsh; - mp_ptr tmp; - enum toom7_flags flags; - TMP_DECL; - -#define a0 ap -#define a1 (ap + n) -#define a2 (ap + 2*n) -#define a3 (ap + 3*n) -#define a4 (ap + 4*n) -#define b0 bp -#define b1 (bp + n) -#define b2 (bp + 2*n) - - n = 1 + (3 * an >= 5 * bn ? (an - 1) / (size_t) 5 : (bn - 1) / (size_t) 3); - - s = an - 4 * n; - t = bn - 2 * n; - - ASSERT (0 < s && s <= n); - ASSERT (0 < t && t <= n); - - TMP_MARK; - - tmp = TMP_ALLOC_LIMBS (10 * (n + 1)); - as1 = tmp; tmp += n + 1; - asm1 = tmp; tmp += n + 1; - as2 = tmp; tmp += n + 1; - asm2 = tmp; tmp += n + 1; - ash = tmp; tmp += n + 1; - bs1 = tmp; tmp += n + 1; - bsm1 = tmp; tmp += n + 1; - bs2 = tmp; tmp += n + 1; - bsm2 = tmp; tmp += n + 1; - bsh = tmp; tmp += n + 1; - - gp = pp; - - /* Compute as1 and asm1. */ - flags = (enum toom7_flags) (toom7_w3_neg & mpn_toom_eval_pm1 (as1, asm1, 4, ap, n, s, gp)); - - /* Compute as2 and asm2. */ - flags = (enum toom7_flags) (flags | (toom7_w1_neg & mpn_toom_eval_pm2 (as2, asm2, 4, ap, n, s, gp))); - - /* Compute ash = 16 a0 + 8 a1 + 4 a2 + 2 a3 + a4 - = 2*(2*(2*(2*a0 + a1) + a2) + a3) + a4 */ -#if HAVE_NATIVE_mpn_addlsh1_n - cy = mpn_addlsh1_n (ash, a1, a0, n); - cy = 2*cy + mpn_addlsh1_n (ash, a2, ash, n); - cy = 2*cy + mpn_addlsh1_n (ash, a3, ash, n); - if (s < n) - { - mp_limb_t cy2; - cy2 = mpn_addlsh1_n (ash, a4, ash, s); - ash[n] = 2*cy + mpn_lshift (ash + s, ash + s, n - s, 1); - MPN_INCR_U (ash + s, n+1-s, cy2); - } - else - ash[n] = 2*cy + mpn_addlsh1_n (ash, a4, ash, n); -#else - cy = mpn_lshift (ash, a0, n, 1); - cy += mpn_add_n (ash, ash, a1, n); - cy = 2*cy + mpn_lshift (ash, ash, n, 1); - cy += mpn_add_n (ash, ash, a2, n); - cy = 2*cy + mpn_lshift (ash, ash, n, 1); - cy += mpn_add_n (ash, ash, a3, n); - cy = 2*cy + mpn_lshift (ash, ash, n, 1); - ash[n] = cy + mpn_add (ash, ash, n, a4, s); -#endif - - /* Compute bs1 and bsm1. */ - bs1[n] = mpn_add (bs1, b0, n, b2, t); /* b0 + b2 */ -#if HAVE_NATIVE_mpn_add_n_sub_n - if (bs1[n] == 0 && mpn_cmp (bs1, b1, n) < 0) - { - bs1[n] = mpn_add_n_sub_n (bs1, bsm1, b1, bs1, n) >> 1; - bsm1[n] = 0; - flags = (enum toom7_flags) (flags ^ toom7_w3_neg); - } - else - { - cy = mpn_add_n_sub_n (bs1, bsm1, bs1, b1, n); - bsm1[n] = bs1[n] - (cy & 1); - bs1[n] += (cy >> 1); - } -#else - if (bs1[n] == 0 && mpn_cmp (bs1, b1, n) < 0) - { - mpn_sub_n (bsm1, b1, bs1, n); - bsm1[n] = 0; - flags = (enum toom7_flags) (flags ^ toom7_w3_neg); - } - else - { - bsm1[n] = bs1[n] - mpn_sub_n (bsm1, bs1, b1, n); - } - bs1[n] += mpn_add_n (bs1, bs1, b1, n); /* b0+b1+b2 */ -#endif - - /* Compute bs2 and bsm2. */ -#if HAVE_NATIVE_mpn_addlsh_n || HAVE_NATIVE_mpn_addlsh2_n -#if HAVE_NATIVE_mpn_addlsh2_n - cy = mpn_addlsh2_n (bs2, b0, b2, t); -#else /* HAVE_NATIVE_mpn_addlsh_n */ - cy = mpn_addlsh_n (bs2, b0, b2, t, 2); -#endif - if (t < n) - cy = mpn_add_1 (bs2 + t, b0 + t, n - t, cy); - bs2[n] = cy; -#else - cy = mpn_lshift (gp, b2, t, 2); - bs2[n] = mpn_add (bs2, b0, n, gp, t); - MPN_INCR_U (bs2 + t, n+1-t, cy); -#endif - - gp[n] = mpn_lshift (gp, b1, n, 1); - -#if HAVE_NATIVE_mpn_add_n_sub_n - if (mpn_cmp (bs2, gp, n+1) < 0) - { - ASSERT_NOCARRY (mpn_add_n_sub_n (bs2, bsm2, gp, bs2, n+1)); - flags = (enum toom7_flags) (flags ^ toom7_w1_neg); - } - else - { - ASSERT_NOCARRY (mpn_add_n_sub_n (bs2, bsm2, bs2, gp, n+1)); - } -#else - if (mpn_cmp (bs2, gp, n+1) < 0) - { - ASSERT_NOCARRY (mpn_sub_n (bsm2, gp, bs2, n+1)); - flags = (enum toom7_flags) (flags ^ toom7_w1_neg); - } - else - { - ASSERT_NOCARRY (mpn_sub_n (bsm2, bs2, gp, n+1)); - } - mpn_add_n (bs2, bs2, gp, n+1); -#endif - - /* Compute bsh = 4 b0 + 2 b1 + b2 = 2*(2*b0 + b1)+b2. */ -#if HAVE_NATIVE_mpn_addlsh1_n - cy = mpn_addlsh1_n (bsh, b1, b0, n); - if (t < n) - { - mp_limb_t cy2; - cy2 = mpn_addlsh1_n (bsh, b2, bsh, t); - bsh[n] = 2*cy + mpn_lshift (bsh + t, bsh + t, n - t, 1); - MPN_INCR_U (bsh + t, n+1-t, cy2); - } - else - bsh[n] = 2*cy + mpn_addlsh1_n (bsh, b2, bsh, n); -#else - cy = mpn_lshift (bsh, b0, n, 1); - cy += mpn_add_n (bsh, bsh, b1, n); - cy = 2*cy + mpn_lshift (bsh, bsh, n, 1); - bsh[n] = cy + mpn_add (bsh, bsh, n, b2, t); -#endif - - ASSERT (as1[n] <= 4); - ASSERT (bs1[n] <= 2); - ASSERT (asm1[n] <= 2); - ASSERT (bsm1[n] <= 1); - ASSERT (as2[n] <= 30); - ASSERT (bs2[n] <= 6); - ASSERT (asm2[n] <= 20); - ASSERT (bsm2[n] <= 4); - ASSERT (ash[n] <= 30); - ASSERT (bsh[n] <= 6); - -#define v0 pp /* 2n */ -#define v1 (pp + 2 * n) /* 2n+1 */ -#define vinf (pp + 6 * n) /* s+t */ -#define v2 scratch /* 2n+1 */ -#define vm2 (scratch + 2 * n + 1) /* 2n+1 */ -#define vh (scratch + 4 * n + 2) /* 2n+1 */ -#define vm1 (scratch + 6 * n + 3) /* 2n+1 */ -#define scratch_out (scratch + 8 * n + 4) /* 2n+1 */ - /* Total scratch need: 10*n+5 */ - - /* Must be in allocation order, as they overwrite one limb beyond - * 2n+1. */ - mpn_mul_n (v2, as2, bs2, n + 1); /* v2, 2n+1 limbs */ - mpn_mul_n (vm2, asm2, bsm2, n + 1); /* vm2, 2n+1 limbs */ - mpn_mul_n (vh, ash, bsh, n + 1); /* vh, 2n+1 limbs */ - - /* vm1, 2n+1 limbs */ -#ifdef SMALLER_RECURSION - mpn_mul_n (vm1, asm1, bsm1, n); - if (asm1[n] == 1) - { - cy = bsm1[n] + mpn_add_n (vm1 + n, vm1 + n, bsm1, n); - } - else if (asm1[n] == 2) - { -#if HAVE_NATIVE_mpn_addlsh1_n - cy = 2 * bsm1[n] + mpn_addlsh1_n (vm1 + n, vm1 + n, bsm1, n); -#else - cy = 2 * bsm1[n] + mpn_addmul_1 (vm1 + n, bsm1, n, CNST_LIMB(2)); -#endif - } - else - cy = 0; - if (bsm1[n] != 0) - cy += mpn_add_n (vm1 + n, vm1 + n, asm1, n); - vm1[2 * n] = cy; -#else /* SMALLER_RECURSION */ - vm1[2 * n] = 0; - mpn_mul_n (vm1, asm1, bsm1, n + ((asm1[n] | bsm1[n]) != 0)); -#endif /* SMALLER_RECURSION */ - - /* v1, 2n+1 limbs */ -#ifdef SMALLER_RECURSION - mpn_mul_n (v1, as1, bs1, n); - if (as1[n] == 1) - { - cy = bs1[n] + mpn_add_n (v1 + n, v1 + n, bs1, n); - } - else if (as1[n] == 2) - { -#if HAVE_NATIVE_mpn_addlsh1_n - cy = 2 * bs1[n] + mpn_addlsh1_n (v1 + n, v1 + n, bs1, n); -#else - cy = 2 * bs1[n] + mpn_addmul_1 (v1 + n, bs1, n, CNST_LIMB(2)); -#endif - } - else if (as1[n] != 0) - { - cy = as1[n] * bs1[n] + mpn_addmul_1 (v1 + n, bs1, n, as1[n]); - } - else - cy = 0; - if (bs1[n] == 1) - { - cy += mpn_add_n (v1 + n, v1 + n, as1, n); - } - else if (bs1[n] == 2) - { -#if HAVE_NATIVE_mpn_addlsh1_n - cy += mpn_addlsh1_n (v1 + n, v1 + n, as1, n); -#else - cy += mpn_addmul_1 (v1 + n, as1, n, CNST_LIMB(2)); -#endif - } - v1[2 * n] = cy; -#else /* SMALLER_RECURSION */ - v1[2 * n] = 0; - mpn_mul_n (v1, as1, bs1, n + ((as1[n] | bs1[n]) != 0)); -#endif /* SMALLER_RECURSION */ - - mpn_mul_n (v0, a0, b0, n); /* v0, 2n limbs */ - - /* vinf, s+t limbs */ - if (s > t) mpn_mul (vinf, a4, s, b2, t); - else mpn_mul (vinf, b2, t, a4, s); - - mpn_toom_interpolate_7pts (pp, n, flags, vm2, vm1, v2, vh, s + t, - scratch_out); - - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom54_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom54_mul.c deleted file mode 100644 index 939bb53ab68682f1da63e4526446425fc98789ff..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom54_mul.c +++ /dev/null @@ -1,143 +0,0 @@ -/* Implementation of the algorithm for Toom-Cook 4.5-way. - - Contributed to the GNU project by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Toom-4.5, the splitting 5x4 unbalanced version. - Evaluate in: infinity, +4, -4, +2, -2, +1, -1, 0. - - <--s-><--n--><--n--><--n--><--n--> - ____ ______ ______ ______ ______ - |_a4_|__a3__|__a2__|__a1__|__a0__| - |b3_|__b2__|__b1__|__b0__| - <-t-><--n--><--n--><--n--> - -*/ -#define TOOM_54_MUL_N_REC(p, a, b, n, ws) \ - do { mpn_mul_n (p, a, b, n); \ - } while (0) - -#define TOOM_54_MUL_REC(p, a, na, b, nb, ws) \ - do { mpn_mul (p, a, na, b, nb); \ - } while (0) - -void -mpn_toom54_mul (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn, mp_ptr scratch) -{ - mp_size_t n, s, t; - int sign; - - /***************************** decomposition *******************************/ -#define a4 (ap + 4 * n) -#define b3 (bp + 3 * n) - - ASSERT (an >= bn); - n = 1 + (4 * an >= 5 * bn ? (an - 1) / (size_t) 5 : (bn - 1) / (size_t) 4); - - s = an - 4 * n; - t = bn - 3 * n; - - ASSERT (0 < s && s <= n); - ASSERT (0 < t && t <= n); - /* Required by mpn_toom_interpolate_8pts. */ - ASSERT ( s + t >= n ); - ASSERT ( s + t > 4); - ASSERT ( n > 2); - -#define r8 pp /* 2n */ -#define r7 scratch /* 3n+1 */ -#define r5 (pp + 3*n) /* 3n+1 */ -#define v0 (pp + 3*n) /* n+1 */ -#define v1 (pp + 4*n+1) /* n+1 */ -#define v2 (pp + 5*n+2) /* n+1 */ -#define v3 (pp + 6*n+3) /* n+1 */ -#define r3 (scratch + 3 * n + 1) /* 3n+1 */ -#define r1 (pp + 7*n) /* s+t <= 2*n */ -#define ws (scratch + 6 * n + 2) /* ??? */ - - /* Alloc also 3n+1 limbs for ws... mpn_toom_interpolate_8pts may - need all of them, when DO_mpn_sublsh_n usea a scratch */ - /********************** evaluation and recursive calls *********************/ - /* $\pm4$ */ - sign = mpn_toom_eval_pm2exp (v2, v0, 4, ap, n, s, 2, pp) - ^ mpn_toom_eval_pm2exp (v3, v1, 3, bp, n, t, 2, pp); - TOOM_54_MUL_N_REC(pp, v0, v1, n + 1, ws); /* A(-4)*B(-4) */ - TOOM_54_MUL_N_REC(r3, v2, v3, n + 1, ws); /* A(+4)*B(+4) */ - mpn_toom_couple_handling (r3, 2*n+1, pp, sign, n, 2, 4); - - /* $\pm1$ */ - sign = mpn_toom_eval_pm1 (v2, v0, 4, ap, n, s, pp) - ^ mpn_toom_eval_dgr3_pm1 (v3, v1, bp, n, t, pp); - TOOM_54_MUL_N_REC(pp, v0, v1, n + 1, ws); /* A(-1)*B(-1) */ - TOOM_54_MUL_N_REC(r7, v2, v3, n + 1, ws); /* A(1)*B(1) */ - mpn_toom_couple_handling (r7, 2*n+1, pp, sign, n, 0, 0); - - /* $\pm2$ */ - sign = mpn_toom_eval_pm2 (v2, v0, 4, ap, n, s, pp) - ^ mpn_toom_eval_dgr3_pm2 (v3, v1, bp, n, t, pp); - TOOM_54_MUL_N_REC(pp, v0, v1, n + 1, ws); /* A(-2)*B(-2) */ - TOOM_54_MUL_N_REC(r5, v2, v3, n + 1, ws); /* A(+2)*B(+2) */ - mpn_toom_couple_handling (r5, 2*n+1, pp, sign, n, 1, 2); - - /* A(0)*B(0) */ - TOOM_54_MUL_N_REC(pp, ap, bp, n, ws); - - /* Infinity */ - if (s > t) { - TOOM_54_MUL_REC(r1, a4, s, b3, t, ws); - } else { - TOOM_54_MUL_REC(r1, b3, t, a4, s, ws); - }; - - mpn_toom_interpolate_8pts (pp, n, r3, r7, s + t, ws); - -#undef a4 -#undef b3 -#undef r1 -#undef r3 -#undef r5 -#undef v0 -#undef v1 -#undef v2 -#undef v3 -#undef r7 -#undef r8 -#undef ws -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom62_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom62_mul.c deleted file mode 100644 index afc6a1002a5a70c4334c0d147b56b5f138b8dc8d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom62_mul.c +++ /dev/null @@ -1,311 +0,0 @@ -/* mpn_toom62_mul -- Multiply {ap,an} and {bp,bn} where an is nominally 3 times - as large as bn. Or more accurately, (5/2)bn < an < 6bn. - - Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - - The idea of applying toom to unbalanced multiplication is due to Marco - Bodrato and Alberto Zanoni. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2006-2008, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Evaluate in: - 0, +1, -1, +2, -2, 1/2, +inf - - <-s-><--n--><--n--><--n--><--n--><--n--> - ___ ______ ______ ______ ______ ______ - |a5_|___a4_|___a3_|___a2_|___a1_|___a0_| - |_b1_|___b0_| - <-t--><--n--> - - v0 = a0 * b0 # A(0)*B(0) - v1 = ( a0+ a1+ a2+ a3+ a4+ a5)*( b0+ b1) # A(1)*B(1) ah <= 5 bh <= 1 - vm1 = ( a0- a1+ a2- a3+ a4- a5)*( b0- b1) # A(-1)*B(-1) |ah| <= 2 bh = 0 - v2 = ( a0+ 2a1+4a2+8a3+16a4+32a5)*( b0+2b1) # A(2)*B(2) ah <= 62 bh <= 2 - vm2 = ( a0- 2a1+4a2-8a3+16a4-32a5)*( b0-2b1) # A(-2)*B(-2) -41<=ah<=20 -1<=bh<=0 - vh = (32a0+16a1+8a2+4a3+ 2a4+ a5)*(2b0+ b1) # A(1/2)*B(1/2) ah <= 62 bh <= 2 - vinf= a5 * b1 # A(inf)*B(inf) -*/ - -void -mpn_toom62_mul (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn, - mp_ptr scratch) -{ - mp_size_t n, s, t; - mp_limb_t cy; - mp_ptr as1, asm1, as2, asm2, ash; - mp_ptr bs1, bsm1, bs2, bsm2, bsh; - mp_ptr gp; - enum toom7_flags aflags, bflags; - TMP_DECL; - -#define a0 ap -#define a1 (ap + n) -#define a2 (ap + 2*n) -#define a3 (ap + 3*n) -#define a4 (ap + 4*n) -#define a5 (ap + 5*n) -#define b0 bp -#define b1 (bp + n) - - n = 1 + (an >= 3 * bn ? (an - 1) / (size_t) 6 : (bn - 1) >> 1); - - s = an - 5 * n; - t = bn - n; - - ASSERT (0 < s && s <= n); - ASSERT (0 < t && t <= n); - - TMP_MARK; - - as1 = TMP_SALLOC_LIMBS (n + 1); - asm1 = TMP_SALLOC_LIMBS (n + 1); - as2 = TMP_SALLOC_LIMBS (n + 1); - asm2 = TMP_SALLOC_LIMBS (n + 1); - ash = TMP_SALLOC_LIMBS (n + 1); - - bs1 = TMP_SALLOC_LIMBS (n + 1); - bsm1 = TMP_SALLOC_LIMBS (n); - bs2 = TMP_SALLOC_LIMBS (n + 1); - bsm2 = TMP_SALLOC_LIMBS (n + 1); - bsh = TMP_SALLOC_LIMBS (n + 1); - - gp = pp; - - /* Compute as1 and asm1. */ - aflags = (enum toom7_flags) (toom7_w3_neg & mpn_toom_eval_pm1 (as1, asm1, 5, ap, n, s, gp)); - - /* Compute as2 and asm2. */ - aflags = (enum toom7_flags) (aflags | (toom7_w1_neg & mpn_toom_eval_pm2 (as2, asm2, 5, ap, n, s, gp))); - - /* Compute ash = 32 a0 + 16 a1 + 8 a2 + 4 a3 + 2 a4 + a5 - = 2*(2*(2*(2*(2*a0 + a1) + a2) + a3) + a4) + a5 */ - -#if HAVE_NATIVE_mpn_addlsh1_n - cy = mpn_addlsh1_n (ash, a1, a0, n); - cy = 2*cy + mpn_addlsh1_n (ash, a2, ash, n); - cy = 2*cy + mpn_addlsh1_n (ash, a3, ash, n); - cy = 2*cy + mpn_addlsh1_n (ash, a4, ash, n); - if (s < n) - { - mp_limb_t cy2; - cy2 = mpn_addlsh1_n (ash, a5, ash, s); - ash[n] = 2*cy + mpn_lshift (ash + s, ash + s, n - s, 1); - MPN_INCR_U (ash + s, n+1-s, cy2); - } - else - ash[n] = 2*cy + mpn_addlsh1_n (ash, a5, ash, n); -#else - cy = mpn_lshift (ash, a0, n, 1); - cy += mpn_add_n (ash, ash, a1, n); - cy = 2*cy + mpn_lshift (ash, ash, n, 1); - cy += mpn_add_n (ash, ash, a2, n); - cy = 2*cy + mpn_lshift (ash, ash, n, 1); - cy += mpn_add_n (ash, ash, a3, n); - cy = 2*cy + mpn_lshift (ash, ash, n, 1); - cy += mpn_add_n (ash, ash, a4, n); - cy = 2*cy + mpn_lshift (ash, ash, n, 1); - ash[n] = cy + mpn_add (ash, ash, n, a5, s); -#endif - - /* Compute bs1 and bsm1. */ - if (t == n) - { -#if HAVE_NATIVE_mpn_add_n_sub_n - if (mpn_cmp (b0, b1, n) < 0) - { - cy = mpn_add_n_sub_n (bs1, bsm1, b1, b0, n); - bflags = toom7_w3_neg; - } - else - { - cy = mpn_add_n_sub_n (bs1, bsm1, b0, b1, n); - bflags = (enum toom7_flags) 0; - } - bs1[n] = cy >> 1; -#else - bs1[n] = mpn_add_n (bs1, b0, b1, n); - if (mpn_cmp (b0, b1, n) < 0) - { - mpn_sub_n (bsm1, b1, b0, n); - bflags = toom7_w3_neg; - } - else - { - mpn_sub_n (bsm1, b0, b1, n); - bflags = (enum toom7_flags) 0; - } -#endif - } - else - { - bs1[n] = mpn_add (bs1, b0, n, b1, t); - if (mpn_zero_p (b0 + t, n - t) && mpn_cmp (b0, b1, t) < 0) - { - mpn_sub_n (bsm1, b1, b0, t); - MPN_ZERO (bsm1 + t, n - t); - bflags = toom7_w3_neg; - } - else - { - mpn_sub (bsm1, b0, n, b1, t); - bflags = (enum toom7_flags) 0; - } - } - - /* Compute bs2 and bsm2. Recycling bs1 and bsm1; bs2=bs1+b1, bsm2 = - bsm1 - b1 */ - mpn_add (bs2, bs1, n + 1, b1, t); - if (bflags & toom7_w3_neg) - { - bsm2[n] = mpn_add (bsm2, bsm1, n, b1, t); - bflags = (enum toom7_flags) (bflags | toom7_w1_neg); - } - else - { - /* FIXME: Simplify this logic? */ - if (t < n) - { - if (mpn_zero_p (bsm1 + t, n - t) && mpn_cmp (bsm1, b1, t) < 0) - { - ASSERT_NOCARRY (mpn_sub_n (bsm2, b1, bsm1, t)); - MPN_ZERO (bsm2 + t, n + 1 - t); - bflags = (enum toom7_flags) (bflags | toom7_w1_neg); - } - else - { - ASSERT_NOCARRY (mpn_sub (bsm2, bsm1, n, b1, t)); - bsm2[n] = 0; - } - } - else - { - if (mpn_cmp (bsm1, b1, n) < 0) - { - ASSERT_NOCARRY (mpn_sub_n (bsm2, b1, bsm1, n)); - bflags = (enum toom7_flags) (bflags | toom7_w1_neg); - } - else - { - ASSERT_NOCARRY (mpn_sub_n (bsm2, bsm1, b1, n)); - } - bsm2[n] = 0; - } - } - - /* Compute bsh, recycling bs1. bsh=bs1+b0; */ - bsh[n] = bs1[n] + mpn_add_n (bsh, bs1, b0, n); - - ASSERT (as1[n] <= 5); - ASSERT (bs1[n] <= 1); - ASSERT (asm1[n] <= 2); - ASSERT (as2[n] <= 62); - ASSERT (bs2[n] <= 2); - ASSERT (asm2[n] <= 41); - ASSERT (bsm2[n] <= 1); - ASSERT (ash[n] <= 62); - ASSERT (bsh[n] <= 2); - -#define v0 pp /* 2n */ -#define v1 (pp + 2 * n) /* 2n+1 */ -#define vinf (pp + 6 * n) /* s+t */ -#define v2 scratch /* 2n+1 */ -#define vm2 (scratch + 2 * n + 1) /* 2n+1 */ -#define vh (scratch + 4 * n + 2) /* 2n+1 */ -#define vm1 (scratch + 6 * n + 3) /* 2n+1 */ -#define scratch_out (scratch + 8 * n + 4) /* 2n+1 */ - /* Total scratch need: 10*n+5 */ - - /* Must be in allocation order, as they overwrite one limb beyond - * 2n+1. */ - mpn_mul_n (v2, as2, bs2, n + 1); /* v2, 2n+1 limbs */ - mpn_mul_n (vm2, asm2, bsm2, n + 1); /* vm2, 2n+1 limbs */ - mpn_mul_n (vh, ash, bsh, n + 1); /* vh, 2n+1 limbs */ - - /* vm1, 2n+1 limbs */ - mpn_mul_n (vm1, asm1, bsm1, n); - cy = 0; - if (asm1[n] == 1) - { - cy = mpn_add_n (vm1 + n, vm1 + n, bsm1, n); - } - else if (asm1[n] == 2) - { -#if HAVE_NATIVE_mpn_addlsh1_n - cy = mpn_addlsh1_n (vm1 + n, vm1 + n, bsm1, n); -#else - cy = mpn_addmul_1 (vm1 + n, bsm1, n, CNST_LIMB(2)); -#endif - } - vm1[2 * n] = cy; - - /* v1, 2n+1 limbs */ - mpn_mul_n (v1, as1, bs1, n); - if (as1[n] == 1) - { - cy = bs1[n] + mpn_add_n (v1 + n, v1 + n, bs1, n); - } - else if (as1[n] == 2) - { -#if HAVE_NATIVE_mpn_addlsh1_n - cy = 2 * bs1[n] + mpn_addlsh1_n (v1 + n, v1 + n, bs1, n); -#else - cy = 2 * bs1[n] + mpn_addmul_1 (v1 + n, bs1, n, CNST_LIMB(2)); -#endif - } - else if (as1[n] != 0) - { - cy = as1[n] * bs1[n] + mpn_addmul_1 (v1 + n, bs1, n, as1[n]); - } - else - cy = 0; - if (bs1[n] != 0) - cy += mpn_add_n (v1 + n, v1 + n, as1, n); - v1[2 * n] = cy; - - mpn_mul_n (v0, a0, b0, n); /* v0, 2n limbs */ - - /* vinf, s+t limbs */ - if (s > t) mpn_mul (vinf, a5, s, b1, t); - else mpn_mul (vinf, b1, t, a5, s); - - mpn_toom_interpolate_7pts (pp, n, (enum toom7_flags) (aflags ^ bflags), - vm2, vm1, v2, vh, s + t, scratch_out); - - TMP_FREE; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom63_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom63_mul.c deleted file mode 100644 index 57c5d3e3dd8a885bcbbae3e6b1826cb479c81a5d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom63_mul.c +++ /dev/null @@ -1,232 +0,0 @@ -/* Implementation of the algorithm for Toom-Cook 4.5-way. - - Contributed to the GNU project by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Stores |{ap,n}-{bp,n}| in {rp,n}, returns the sign. */ -static int -abs_sub_n (mp_ptr rp, mp_srcptr ap, mp_srcptr bp, mp_size_t n) -{ - mp_limb_t x, y; - while (--n >= 0) - { - x = ap[n]; - y = bp[n]; - if (x != y) - { - n++; - if (x > y) - { - mpn_sub_n (rp, ap, bp, n); - return 0; - } - else - { - mpn_sub_n (rp, bp, ap, n); - return ~0; - } - } - rp[n] = 0; - } - return 0; -} - -static int -abs_sub_add_n (mp_ptr rm, mp_ptr rp, mp_srcptr rs, mp_size_t n) { - int result; - result = abs_sub_n (rm, rp, rs, n); - ASSERT_NOCARRY(mpn_add_n (rp, rp, rs, n)); - return result; -} - - -/* Toom-4.5, the splitting 6x3 unbalanced version. - Evaluate in: infinity, +4, -4, +2, -2, +1, -1, 0. - - <--s-><--n--><--n--><--n--><--n--><--n--> - ____ ______ ______ ______ ______ ______ - |_a5_|__a4__|__a3__|__a2__|__a1__|__a0__| - |b2_|__b1__|__b0__| - <-t-><--n--><--n--> - -*/ -#define TOOM_63_MUL_N_REC(p, a, b, n, ws) \ - do { mpn_mul_n (p, a, b, n); \ - } while (0) - -#define TOOM_63_MUL_REC(p, a, na, b, nb, ws) \ - do { mpn_mul (p, a, na, b, nb); \ - } while (0) - -void -mpn_toom63_mul (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn, mp_ptr scratch) -{ - mp_size_t n, s, t; - mp_limb_t cy; - int sign; - - /***************************** decomposition *******************************/ -#define a5 (ap + 5 * n) -#define b0 (bp + 0 * n) -#define b1 (bp + 1 * n) -#define b2 (bp + 2 * n) - - ASSERT (an >= bn); - n = 1 + (an >= 2 * bn ? (an - 1) / (size_t) 6 : (bn - 1) / (size_t) 3); - - s = an - 5 * n; - t = bn - 2 * n; - - ASSERT (0 < s && s <= n); - ASSERT (0 < t && t <= n); - /* WARNING! it assumes s+t>=n */ - ASSERT ( s + t >= n ); - ASSERT ( s + t > 4); - /* WARNING! it assumes n>1 */ - ASSERT ( n > 2); - -#define r8 pp /* 2n */ -#define r7 scratch /* 3n+1 */ -#define r5 (pp + 3*n) /* 3n+1 */ -#define v0 (pp + 3*n) /* n+1 */ -#define v1 (pp + 4*n+1) /* n+1 */ -#define v2 (pp + 5*n+2) /* n+1 */ -#define v3 (pp + 6*n+3) /* n+1 */ -#define r3 (scratch + 3 * n + 1) /* 3n+1 */ -#define r1 (pp + 7*n) /* s+t <= 2*n */ -#define ws (scratch + 6 * n + 2) /* ??? */ - - /* Alloc also 3n+1 limbs for ws... mpn_toom_interpolate_8pts may - need all of them, when DO_mpn_sublsh_n usea a scratch */ -/* if (scratch == NULL) scratch = TMP_SALLOC_LIMBS (9 * n + 3); */ - - /********************** evaluation and recursive calls *********************/ - /* $\pm4$ */ - sign = mpn_toom_eval_pm2exp (v2, v0, 5, ap, n, s, 2, pp); - pp[n] = mpn_lshift (pp, b1, n, 2); /* 4b1 */ - /* FIXME: use addlsh */ - v3[t] = mpn_lshift (v3, b2, t, 4);/* 16b2 */ - if ( n == t ) - v3[n]+= mpn_add_n (v3, v3, b0, n); /* 16b2+b0 */ - else - v3[n] = mpn_add (v3, b0, n, v3, t+1); /* 16b2+b0 */ - sign ^= abs_sub_add_n (v1, v3, pp, n + 1); - TOOM_63_MUL_N_REC(pp, v0, v1, n + 1, ws); /* A(-4)*B(-4) */ - TOOM_63_MUL_N_REC(r3, v2, v3, n + 1, ws); /* A(+4)*B(+4) */ - mpn_toom_couple_handling (r3, 2*n+1, pp, sign, n, 2, 4); - - /* $\pm1$ */ - sign = mpn_toom_eval_pm1 (v2, v0, 5, ap, n, s, pp); - /* Compute bs1 and bsm1. Code taken from toom33 */ - cy = mpn_add (ws, b0, n, b2, t); -#if HAVE_NATIVE_mpn_add_n_sub_n - if (cy == 0 && mpn_cmp (ws, b1, n) < 0) - { - cy = mpn_add_n_sub_n (v3, v1, b1, ws, n); - v3[n] = cy >> 1; - v1[n] = 0; - sign = ~sign; - } - else - { - mp_limb_t cy2; - cy2 = mpn_add_n_sub_n (v3, v1, ws, b1, n); - v3[n] = cy + (cy2 >> 1); - v1[n] = cy - (cy2 & 1); - } -#else - v3[n] = cy + mpn_add_n (v3, ws, b1, n); - if (cy == 0 && mpn_cmp (ws, b1, n) < 0) - { - mpn_sub_n (v1, b1, ws, n); - v1[n] = 0; - sign = ~sign; - } - else - { - cy -= mpn_sub_n (v1, ws, b1, n); - v1[n] = cy; - } -#endif - TOOM_63_MUL_N_REC(pp, v0, v1, n + 1, ws); /* A(-1)*B(-1) */ - TOOM_63_MUL_N_REC(r7, v2, v3, n + 1, ws); /* A(1)*B(1) */ - mpn_toom_couple_handling (r7, 2*n+1, pp, sign, n, 0, 0); - - /* $\pm2$ */ - sign = mpn_toom_eval_pm2 (v2, v0, 5, ap, n, s, pp); - pp[n] = mpn_lshift (pp, b1, n, 1); /* 2b1 */ - /* FIXME: use addlsh or addlsh2 */ - v3[t] = mpn_lshift (v3, b2, t, 2);/* 4b2 */ - if ( n == t ) - v3[n]+= mpn_add_n (v3, v3, b0, n); /* 4b2+b0 */ - else - v3[n] = mpn_add (v3, b0, n, v3, t+1); /* 4b2+b0 */ - sign ^= abs_sub_add_n (v1, v3, pp, n + 1); - TOOM_63_MUL_N_REC(pp, v0, v1, n + 1, ws); /* A(-2)*B(-2) */ - TOOM_63_MUL_N_REC(r5, v2, v3, n + 1, ws); /* A(+2)*B(+2) */ - mpn_toom_couple_handling (r5, 2*n+1, pp, sign, n, 1, 2); - - /* A(0)*B(0) */ - TOOM_63_MUL_N_REC(pp, ap, bp, n, ws); - - /* Infinity */ - if (s > t) { - TOOM_63_MUL_REC(r1, a5, s, b2, t, ws); - } else { - TOOM_63_MUL_REC(r1, b2, t, a5, s, ws); - }; - - mpn_toom_interpolate_8pts (pp, n, r3, r7, s + t, ws); - -#undef a5 -#undef b0 -#undef b1 -#undef b2 -#undef r1 -#undef r3 -#undef r5 -#undef v0 -#undef v1 -#undef v2 -#undef v3 -#undef r7 -#undef r8 -#undef ws -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom6_sqr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom6_sqr.c deleted file mode 100644 index e5ab7dcd1d2f84fbffd40e9d7b163f8457708d08..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom6_sqr.c +++ /dev/null @@ -1,182 +0,0 @@ -/* Implementation of the squaring algorithm with Toom-Cook 6.5-way. - - Contributed to the GNU project by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - - -#if GMP_NUMB_BITS < 21 -#error Not implemented. -#endif - - -#if TUNE_PROGRAM_BUILD -#define MAYBE_sqr_basecase 1 -#define MAYBE_sqr_above_basecase 1 -#define MAYBE_sqr_toom2 1 -#define MAYBE_sqr_above_toom2 1 -#define MAYBE_sqr_toom3 1 -#define MAYBE_sqr_above_toom3 1 -#define MAYBE_sqr_above_toom4 1 -#else -#ifdef SQR_TOOM8_THRESHOLD -#define SQR_TOOM6_MAX ((SQR_TOOM8_THRESHOLD+6*2-1+5)/6) -#else -#define SQR_TOOM6_MAX \ - ((SQR_FFT_THRESHOLD <= MP_SIZE_T_MAX - (6*2-1+5)) ? \ - ((SQR_FFT_THRESHOLD+6*2-1+5)/6) \ - : MP_SIZE_T_MAX ) -#endif -#define MAYBE_sqr_basecase \ - (SQR_TOOM6_THRESHOLD < 6 * SQR_TOOM2_THRESHOLD) -#define MAYBE_sqr_above_basecase \ - (SQR_TOOM6_MAX >= SQR_TOOM2_THRESHOLD) -#define MAYBE_sqr_toom2 \ - (SQR_TOOM6_THRESHOLD < 6 * SQR_TOOM3_THRESHOLD) -#define MAYBE_sqr_above_toom2 \ - (SQR_TOOM6_MAX >= SQR_TOOM3_THRESHOLD) -#define MAYBE_sqr_toom3 \ - (SQR_TOOM6_THRESHOLD < 6 * SQR_TOOM4_THRESHOLD) -#define MAYBE_sqr_above_toom3 \ - (SQR_TOOM6_MAX >= SQR_TOOM4_THRESHOLD) -#define MAYBE_sqr_above_toom4 \ - (SQR_TOOM6_MAX >= SQR_TOOM6_THRESHOLD) -#endif - -#define TOOM6_SQR_REC(p, a, n, ws) \ - do { \ - if (MAYBE_sqr_basecase && ( !MAYBE_sqr_above_basecase \ - || BELOW_THRESHOLD (n, SQR_TOOM2_THRESHOLD))) \ - mpn_sqr_basecase (p, a, n); \ - else if (MAYBE_sqr_toom2 && ( !MAYBE_sqr_above_toom2 \ - || BELOW_THRESHOLD (n, SQR_TOOM3_THRESHOLD))) \ - mpn_toom2_sqr (p, a, n, ws); \ - else if (MAYBE_sqr_toom3 && ( !MAYBE_sqr_above_toom3 \ - || BELOW_THRESHOLD (n, SQR_TOOM4_THRESHOLD))) \ - mpn_toom3_sqr (p, a, n, ws); \ - else if (! MAYBE_sqr_above_toom4 \ - || BELOW_THRESHOLD (n, SQR_TOOM6_THRESHOLD)) \ - mpn_toom4_sqr (p, a, n, ws); \ - else \ - mpn_toom6_sqr (p, a, n, ws); \ - } while (0) - -void -mpn_toom6_sqr (mp_ptr pp, mp_srcptr ap, mp_size_t an, mp_ptr scratch) -{ - mp_size_t n, s; - - /***************************** decomposition *******************************/ - - ASSERT( an >= 18 ); - - n = 1 + (an - 1) / (size_t) 6; - - s = an - 5 * n; - - ASSERT (0 < s && s <= n); - -#define r4 (pp + 3 * n) /* 3n+1 */ -#define r2 (pp + 7 * n) /* 3n+1 */ -#define r0 (pp +11 * n) /* s+t <= 2*n */ -#define r5 (scratch) /* 3n+1 */ -#define r3 (scratch + 3 * n + 1) /* 3n+1 */ -#define r1 (scratch + 6 * n + 2) /* 3n+1 */ -#define v0 (pp + 7 * n) /* n+1 */ -#define v2 (pp + 9 * n+2) /* n+1 */ -#define wse (scratch + 9 * n + 3) /* 3n+1 */ - - /* Alloc also 3n+1 limbs for ws... toom_interpolate_12pts may - need all of them, when DO_mpn_sublsh_n usea a scratch */ -/* if (scratch== NULL) */ -/* scratch = TMP_SALLOC_LIMBS (12 * n + 6); */ - - /********************** evaluation and recursive calls *********************/ - /* $\pm1/2$ */ - mpn_toom_eval_pm2rexp (v2, v0, 5, ap, n, s, 1, pp); - TOOM6_SQR_REC(pp, v0, n + 1, wse); /* A(-1/2)*B(-1/2)*2^. */ - TOOM6_SQR_REC(r5, v2, n + 1, wse); /* A(+1/2)*B(+1/2)*2^. */ - mpn_toom_couple_handling (r5, 2 * n + 1, pp, 0, n, 1, 0); - - /* $\pm1$ */ - mpn_toom_eval_pm1 (v2, v0, 5, ap, n, s, pp); - TOOM6_SQR_REC(pp, v0, n + 1, wse); /* A(-1)*B(-1) */ - TOOM6_SQR_REC(r3, v2, n + 1, wse); /* A(1)*B(1) */ - mpn_toom_couple_handling (r3, 2 * n + 1, pp, 0, n, 0, 0); - - /* $\pm4$ */ - mpn_toom_eval_pm2exp (v2, v0, 5, ap, n, s, 2, pp); - TOOM6_SQR_REC(pp, v0, n + 1, wse); /* A(-4)*B(-4) */ - TOOM6_SQR_REC(r1, v2, n + 1, wse); /* A(+4)*B(+4) */ - mpn_toom_couple_handling (r1, 2 * n + 1, pp, 0, n, 2, 4); - - /* $\pm1/4$ */ - mpn_toom_eval_pm2rexp (v2, v0, 5, ap, n, s, 2, pp); - TOOM6_SQR_REC(pp, v0, n + 1, wse); /* A(-1/4)*B(-1/4)*4^. */ - TOOM6_SQR_REC(r4, v2, n + 1, wse); /* A(+1/4)*B(+1/4)*4^. */ - mpn_toom_couple_handling (r4, 2 * n + 1, pp, 0, n, 2, 0); - - /* $\pm2$ */ - mpn_toom_eval_pm2 (v2, v0, 5, ap, n, s, pp); - TOOM6_SQR_REC(pp, v0, n + 1, wse); /* A(-2)*B(-2) */ - TOOM6_SQR_REC(r2, v2, n + 1, wse); /* A(+2)*B(+2) */ - mpn_toom_couple_handling (r2, 2 * n + 1, pp, 0, n, 1, 2); - -#undef v0 -#undef v2 - - /* A(0)*B(0) */ - TOOM6_SQR_REC(pp, ap, n, wse); - - mpn_toom_interpolate_12pts (pp, r1, r3, r5, n, 2 * s, 0, wse); - -#undef r0 -#undef r1 -#undef r2 -#undef r3 -#undef r4 -#undef r5 - -} -#undef TOOM6_SQR_REC -#undef MAYBE_sqr_basecase -#undef MAYBE_sqr_above_basecase -#undef MAYBE_sqr_toom2 -#undef MAYBE_sqr_above_toom2 -#undef MAYBE_sqr_toom3 -#undef MAYBE_sqr_above_toom3 -#undef MAYBE_sqr_above_toom4 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom6h_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom6h_mul.c deleted file mode 100644 index 420895be8f9c2c59a3a51b41da88c2b85c303e13..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom6h_mul.c +++ /dev/null @@ -1,263 +0,0 @@ -/* Implementation of the multiplication algorithm for Toom-Cook 6.5-way. - - Contributed to the GNU project by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009, 2010, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - - -#if GMP_NUMB_BITS < 21 -#error Not implemented. -#endif - -#if TUNE_PROGRAM_BUILD -#define MAYBE_mul_basecase 1 -#define MAYBE_mul_toom22 1 -#define MAYBE_mul_toom33 1 -#define MAYBE_mul_toom6h 1 -#else -#define MAYBE_mul_basecase \ - (MUL_TOOM6H_THRESHOLD < 6 * MUL_TOOM22_THRESHOLD) -#define MAYBE_mul_toom22 \ - (MUL_TOOM6H_THRESHOLD < 6 * MUL_TOOM33_THRESHOLD) -#define MAYBE_mul_toom33 \ - (MUL_TOOM6H_THRESHOLD < 6 * MUL_TOOM44_THRESHOLD) -#define MAYBE_mul_toom6h \ - (MUL_FFT_THRESHOLD >= 6 * MUL_TOOM6H_THRESHOLD) -#endif - -#define TOOM6H_MUL_N_REC(p, a, b, f, p2, a2, b2, n, ws) \ - do { \ - if (MAYBE_mul_basecase \ - && BELOW_THRESHOLD (n, MUL_TOOM22_THRESHOLD)) { \ - mpn_mul_basecase (p, a, n, b, n); \ - if (f) \ - mpn_mul_basecase (p2, a2, n, b2, n); \ - } else if (MAYBE_mul_toom22 \ - && BELOW_THRESHOLD (n, MUL_TOOM33_THRESHOLD)) { \ - mpn_toom22_mul (p, a, n, b, n, ws); \ - if (f) \ - mpn_toom22_mul (p2, a2, n, b2, n, ws); \ - } else if (MAYBE_mul_toom33 \ - && BELOW_THRESHOLD (n, MUL_TOOM44_THRESHOLD)) { \ - mpn_toom33_mul (p, a, n, b, n, ws); \ - if (f) \ - mpn_toom33_mul (p2, a2, n, b2, n, ws); \ - } else if (! MAYBE_mul_toom6h \ - || BELOW_THRESHOLD (n, MUL_TOOM6H_THRESHOLD)) { \ - mpn_toom44_mul (p, a, n, b, n, ws); \ - if (f) \ - mpn_toom44_mul (p2, a2, n, b2, n, ws); \ - } else { \ - mpn_toom6h_mul (p, a, n, b, n, ws); \ - if (f) \ - mpn_toom6h_mul (p2, a2, n, b2, n, ws); \ - } \ - } while (0) - -#define TOOM6H_MUL_REC(p, a, na, b, nb, ws) \ - do { mpn_mul (p, a, na, b, nb); \ - } while (0) - -/* Toom-6.5 , compute the product {pp,an+bn} <- {ap,an} * {bp,bn} - With: an >= bn >= 46, an*6 < bn * 17. - It _may_ work with bn<=46 and bn*17 < an*6 < bn*18 - - Evaluate in: infinity, +4, -4, +2, -2, +1, -1, +1/2, -1/2, +1/4, -1/4, 0. -*/ -/* Estimate on needed scratch: - S(n) <= (n+5)\6*10+4+MAX(S((n+5)\6),1+2*(n+5)\6), - since n>42; S(n) <= ceil(log(n)/log(6))*(10+4)+n*12\6 < n*2 + lg2(n)*6 - */ - -void -mpn_toom6h_mul (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn, mp_ptr scratch) -{ - mp_size_t n, s, t; - int p, q, half; - int sign; - - /***************************** decomposition *******************************/ - - ASSERT (an >= bn); - /* Can not handle too much unbalancement */ - ASSERT (bn >= 42); - /* Can not handle too much unbalancement */ - ASSERT ((an*3 < bn * 8) || (bn >= 46 && an * 6 < bn * 17)); - - /* Limit num/den is a rational number between - (12/11)^(log(4)/log(2*4-1)) and (12/11)^(log(6)/log(2*6-1)) */ -#define LIMIT_numerator (18) -#define LIMIT_denominat (17) - - if (LIKELY (an * LIMIT_denominat < LIMIT_numerator * bn)) /* is 6*... < 6*... */ - { - n = 1 + (an - 1) / (size_t) 6; - p = q = 5; - half = 0; - - s = an - 5 * n; - t = bn - 5 * n; - } - else { - if (an * 5 * LIMIT_numerator < LIMIT_denominat * 7 * bn) - { p = 7; q = 6; } - else if (an * 5 * LIMIT_denominat < LIMIT_numerator * 7 * bn) - { p = 7; q = 5; } - else if (an * LIMIT_numerator < LIMIT_denominat * 2 * bn) /* is 4*... < 8*... */ - { p = 8; q = 5; } - else if (an * LIMIT_denominat < LIMIT_numerator * 2 * bn) /* is 4*... < 8*... */ - { p = 8; q = 4; } - else - { p = 9; q = 4; } - - half = (p ^ q) & 1; - n = 1 + (q * an >= p * bn ? (an - 1) / (size_t) p : (bn - 1) / (size_t) q); - p--; q--; - - s = an - p * n; - t = bn - q * n; - - /* With LIMIT = 16/15, the following recover is needed only if bn<=73*/ - if (half) { /* Recover from badly chosen splitting */ - if (UNLIKELY (s<1)) {p--; s+=n; half=0;} - else if (UNLIKELY (t<1)) {q--; t+=n; half=0;} - } - } -#undef LIMIT_numerator -#undef LIMIT_denominat - - ASSERT (0 < s && s <= n); - ASSERT (0 < t && t <= n); - ASSERT (half || s + t > 3); - ASSERT (n > 2); - -#define r4 (pp + 3 * n) /* 3n+1 */ -#define r2 (pp + 7 * n) /* 3n+1 */ -#define r0 (pp +11 * n) /* s+t <= 2*n */ -#define r5 (scratch) /* 3n+1 */ -#define r3 (scratch + 3 * n + 1) /* 3n+1 */ -#define r1 (scratch + 6 * n + 2) /* 3n+1 */ -#define v0 (pp + 7 * n) /* n+1 */ -#define v1 (pp + 8 * n+1) /* n+1 */ -#define v2 (pp + 9 * n+2) /* n+1 */ -#define v3 (scratch + 9 * n + 3) /* n+1 */ -#define wsi (scratch + 9 * n + 3) /* 3n+1 */ -#define wse (scratch +10 * n + 4) /* 2n+1 */ - - /* Alloc also 3n+1 limbs for wsi... toom_interpolate_12pts may - need all of them */ -/* if (scratch == NULL) */ -/* scratch = TMP_SALLOC_LIMBS(mpn_toom6_sqr_itch(n * 6)); */ - ASSERT (12 * n + 6 <= mpn_toom6h_mul_itch(an,bn)); - ASSERT (12 * n + 6 <= mpn_toom6_sqr_itch(n * 6)); - - /********************** evaluation and recursive calls *********************/ - /* $\pm1/2$ */ - sign = mpn_toom_eval_pm2rexp (v2, v0, p, ap, n, s, 1, pp) ^ - mpn_toom_eval_pm2rexp (v3, v1, q, bp, n, t, 1, pp); - /* A(-1/2)*B(-1/2)*2^. */ /* A(+1/2)*B(+1/2)*2^. */ - TOOM6H_MUL_N_REC(pp, v0, v1, 2, r5, v2, v3, n + 1, wse); - mpn_toom_couple_handling (r5, 2 * n + 1, pp, sign, n, 1+half , half); - - /* $\pm1$ */ - sign = mpn_toom_eval_pm1 (v2, v0, p, ap, n, s, pp); - if (UNLIKELY (q == 3)) - sign ^= mpn_toom_eval_dgr3_pm1 (v3, v1, bp, n, t, pp); - else - sign ^= mpn_toom_eval_pm1 (v3, v1, q, bp, n, t, pp); - /* A(-1)*B(-1) */ /* A(1)*B(1) */ - TOOM6H_MUL_N_REC(pp, v0, v1, 2, r3, v2, v3, n + 1, wse); - mpn_toom_couple_handling (r3, 2 * n + 1, pp, sign, n, 0, 0); - - /* $\pm4$ */ - sign = mpn_toom_eval_pm2exp (v2, v0, p, ap, n, s, 2, pp) ^ - mpn_toom_eval_pm2exp (v3, v1, q, bp, n, t, 2, pp); - /* A(-4)*B(-4) */ - TOOM6H_MUL_N_REC(pp, v0, v1, 2, r1, v2, v3, n + 1, wse); /* A(+4)*B(+4) */ - mpn_toom_couple_handling (r1, 2 * n + 1, pp, sign, n, 2, 4); - - /* $\pm1/4$ */ - sign = mpn_toom_eval_pm2rexp (v2, v0, p, ap, n, s, 2, pp) ^ - mpn_toom_eval_pm2rexp (v3, v1, q, bp, n, t, 2, pp); - /* A(-1/4)*B(-1/4)*4^. */ /* A(+1/4)*B(+1/4)*4^. */ - TOOM6H_MUL_N_REC(pp, v0, v1, 2, r4, v2, v3, n + 1, wse); - mpn_toom_couple_handling (r4, 2 * n + 1, pp, sign, n, 2*(1+half), 2*(half)); - - /* $\pm2$ */ - sign = mpn_toom_eval_pm2 (v2, v0, p, ap, n, s, pp) ^ - mpn_toom_eval_pm2 (v3, v1, q, bp, n, t, pp); - /* A(-2)*B(-2) */ /* A(+2)*B(+2) */ - TOOM6H_MUL_N_REC(pp, v0, v1, 2, r2, v2, v3, n + 1, wse); - mpn_toom_couple_handling (r2, 2 * n + 1, pp, sign, n, 1, 2); - -#undef v0 -#undef v1 -#undef v2 -#undef v3 -#undef wse - - /* A(0)*B(0) */ - TOOM6H_MUL_N_REC(pp, ap, bp, 0, pp, ap, bp, n, wsi); - - /* Infinity */ - if (UNLIKELY (half != 0)) { - if (s > t) { - TOOM6H_MUL_REC(r0, ap + p * n, s, bp + q * n, t, wsi); - } else { - TOOM6H_MUL_REC(r0, bp + q * n, t, ap + p * n, s, wsi); - }; - }; - - mpn_toom_interpolate_12pts (pp, r1, r3, r5, n, s+t, half, wsi); - -#undef r0 -#undef r1 -#undef r2 -#undef r3 -#undef r4 -#undef r5 -#undef wsi -} - -#undef TOOM6H_MUL_N_REC -#undef TOOM6H_MUL_REC -#undef MAYBE_mul_basecase -#undef MAYBE_mul_toom22 -#undef MAYBE_mul_toom33 -#undef MAYBE_mul_toom6h diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom8_sqr.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom8_sqr.c deleted file mode 100644 index 0c93678815946275f5edcdf3eabeee373a50d4ab..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom8_sqr.c +++ /dev/null @@ -1,226 +0,0 @@ -/* Implementation of the squaring algorithm with Toom-Cook 8.5-way. - - Contributed to the GNU project by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -#if GMP_NUMB_BITS < 29 -#error Not implemented. -#endif - -#if GMP_NUMB_BITS < 43 -#define BIT_CORRECTION 1 -#define CORRECTION_BITS GMP_NUMB_BITS -#else -#define BIT_CORRECTION 0 -#define CORRECTION_BITS 0 -#endif - -#ifndef SQR_TOOM8_THRESHOLD -#define SQR_TOOM8_THRESHOLD MUL_TOOM8H_THRESHOLD -#endif - -#ifndef SQR_TOOM6_THRESHOLD -#define SQR_TOOM6_THRESHOLD MUL_TOOM6H_THRESHOLD -#endif - -#if TUNE_PROGRAM_BUILD -#define MAYBE_sqr_basecase 1 -#define MAYBE_sqr_above_basecase 1 -#define MAYBE_sqr_toom2 1 -#define MAYBE_sqr_above_toom2 1 -#define MAYBE_sqr_toom3 1 -#define MAYBE_sqr_above_toom3 1 -#define MAYBE_sqr_toom4 1 -#define MAYBE_sqr_above_toom4 1 -#define MAYBE_sqr_above_toom6 1 -#else -#define SQR_TOOM8_MAX \ - ((SQR_FFT_THRESHOLD <= MP_SIZE_T_MAX - (8*2-1+7)) ? \ - ((SQR_FFT_THRESHOLD+8*2-1+7)/8) \ - : MP_SIZE_T_MAX ) -#define MAYBE_sqr_basecase \ - (SQR_TOOM8_THRESHOLD < 8 * SQR_TOOM2_THRESHOLD) -#define MAYBE_sqr_above_basecase \ - (SQR_TOOM8_MAX >= SQR_TOOM2_THRESHOLD) -#define MAYBE_sqr_toom2 \ - (SQR_TOOM8_THRESHOLD < 8 * SQR_TOOM3_THRESHOLD) -#define MAYBE_sqr_above_toom2 \ - (SQR_TOOM8_MAX >= SQR_TOOM3_THRESHOLD) -#define MAYBE_sqr_toom3 \ - (SQR_TOOM8_THRESHOLD < 8 * SQR_TOOM4_THRESHOLD) -#define MAYBE_sqr_above_toom3 \ - (SQR_TOOM8_MAX >= SQR_TOOM4_THRESHOLD) -#define MAYBE_sqr_toom4 \ - (SQR_TOOM8_THRESHOLD < 8 * SQR_TOOM6_THRESHOLD) -#define MAYBE_sqr_above_toom4 \ - (SQR_TOOM8_MAX >= SQR_TOOM6_THRESHOLD) -#define MAYBE_sqr_above_toom6 \ - (SQR_TOOM8_MAX >= SQR_TOOM8_THRESHOLD) -#endif - -#define TOOM8_SQR_REC(p, a, f, p2, a2, n, ws) \ - do { \ - if (MAYBE_sqr_basecase && ( !MAYBE_sqr_above_basecase \ - || BELOW_THRESHOLD (n, SQR_TOOM2_THRESHOLD))) { \ - mpn_sqr_basecase (p, a, n); \ - if (f) mpn_sqr_basecase (p2, a2, n); \ - } else if (MAYBE_sqr_toom2 && ( !MAYBE_sqr_above_toom2 \ - || BELOW_THRESHOLD (n, SQR_TOOM3_THRESHOLD))) { \ - mpn_toom2_sqr (p, a, n, ws); \ - if (f) mpn_toom2_sqr (p2, a2, n, ws); \ - } else if (MAYBE_sqr_toom3 && ( !MAYBE_sqr_above_toom3 \ - || BELOW_THRESHOLD (n, SQR_TOOM4_THRESHOLD))) { \ - mpn_toom3_sqr (p, a, n, ws); \ - if (f) mpn_toom3_sqr (p2, a2, n, ws); \ - } else if (MAYBE_sqr_toom4 && ( !MAYBE_sqr_above_toom4 \ - || BELOW_THRESHOLD (n, SQR_TOOM6_THRESHOLD))) { \ - mpn_toom4_sqr (p, a, n, ws); \ - if (f) mpn_toom4_sqr (p2, a2, n, ws); \ - } else if (! MAYBE_sqr_above_toom6 \ - || BELOW_THRESHOLD (n, SQR_TOOM8_THRESHOLD)) { \ - mpn_toom6_sqr (p, a, n, ws); \ - if (f) mpn_toom6_sqr (p2, a2, n, ws); \ - } else { \ - mpn_toom8_sqr (p, a, n, ws); \ - if (f) mpn_toom8_sqr (p2, a2, n, ws); \ - } \ - } while (0) - -void -mpn_toom8_sqr (mp_ptr pp, mp_srcptr ap, mp_size_t an, mp_ptr scratch) -{ - mp_size_t n, s; - - /***************************** decomposition *******************************/ - - ASSERT ( an >= 40 ); - - n = 1 + ((an - 1)>>3); - - s = an - 7 * n; - - ASSERT (0 < s && s <= n); - ASSERT ( s + s > 3 ); - -#define r6 (pp + 3 * n) /* 3n+1 */ -#define r4 (pp + 7 * n) /* 3n+1 */ -#define r2 (pp +11 * n) /* 3n+1 */ -#define r0 (pp +15 * n) /* s+t <= 2*n */ -#define r7 (scratch) /* 3n+1 */ -#define r5 (scratch + 3 * n + 1) /* 3n+1 */ -#define r3 (scratch + 6 * n + 2) /* 3n+1 */ -#define r1 (scratch + 9 * n + 3) /* 3n+1 */ -#define v0 (pp +11 * n) /* n+1 */ -#define v2 (pp +13 * n+2) /* n+1 */ -#define wse (scratch +12 * n + 4) /* 3n+1 */ - - /* Alloc also 3n+1 limbs for ws... toom_interpolate_16pts may - need all of them, when DO_mpn_sublsh_n usea a scratch */ -/* if (scratch == NULL) */ -/* scratch = TMP_SALLOC_LIMBS (30 * n + 6); */ - - /********************** evaluation and recursive calls *********************/ - /* $\pm1/8$ */ - mpn_toom_eval_pm2rexp (v2, v0, 7, ap, n, s, 3, pp); - /* A(-1/8)*B(-1/8)*8^. */ /* A(+1/8)*B(+1/8)*8^. */ - TOOM8_SQR_REC(pp, v0, 2, r7, v2, n + 1, wse); - mpn_toom_couple_handling (r7, 2 * n + 1 + BIT_CORRECTION, pp, 0, n, 3, 0); - - /* $\pm1/4$ */ - mpn_toom_eval_pm2rexp (v2, v0, 7, ap, n, s, 2, pp); - /* A(-1/4)*B(-1/4)*4^. */ /* A(+1/4)*B(+1/4)*4^. */ - TOOM8_SQR_REC(pp, v0, 2, r5, v2, n + 1, wse); - mpn_toom_couple_handling (r5, 2 * n + 1, pp, 0, n, 2, 0); - - /* $\pm2$ */ - mpn_toom_eval_pm2 (v2, v0, 7, ap, n, s, pp); - /* A(-2)*B(-2) */ /* A(+2)*B(+2) */ - TOOM8_SQR_REC(pp, v0, 2, r3, v2, n + 1, wse); - mpn_toom_couple_handling (r3, 2 * n + 1, pp, 0, n, 1, 2); - - /* $\pm8$ */ - mpn_toom_eval_pm2exp (v2, v0, 7, ap, n, s, 3, pp); - /* A(-8)*B(-8) */ /* A(+8)*B(+8) */ - TOOM8_SQR_REC(pp, v0, 2, r1, v2, n + 1, wse); - mpn_toom_couple_handling (r1, 2 * n + 1 + BIT_CORRECTION, pp, 0, n, 3, 6); - - /* $\pm1/2$ */ - mpn_toom_eval_pm2rexp (v2, v0, 7, ap, n, s, 1, pp); - /* A(-1/2)*B(-1/2)*2^. */ /* A(+1/2)*B(+1/2)*2^. */ - TOOM8_SQR_REC(pp, v0, 2, r6, v2, n + 1, wse); - mpn_toom_couple_handling (r6, 2 * n + 1, pp, 0, n, 1, 0); - - /* $\pm1$ */ - mpn_toom_eval_pm1 (v2, v0, 7, ap, n, s, pp); - /* A(-1)*B(-1) */ /* A(1)*B(1) */ - TOOM8_SQR_REC(pp, v0, 2, r4, v2, n + 1, wse); - mpn_toom_couple_handling (r4, 2 * n + 1, pp, 0, n, 0, 0); - - /* $\pm4$ */ - mpn_toom_eval_pm2exp (v2, v0, 7, ap, n, s, 2, pp); - /* A(-4)*B(-4) */ /* A(+4)*B(+4) */ - TOOM8_SQR_REC(pp, v0, 2, r2, v2, n + 1, wse); - mpn_toom_couple_handling (r2, 2 * n + 1, pp, 0, n, 2, 4); - -#undef v0 -#undef v2 - - /* A(0)*B(0) */ - TOOM8_SQR_REC(pp, ap, 0, pp, ap, n, wse); - - mpn_toom_interpolate_16pts (pp, r1, r3, r5, r7, n, 2 * s, 0, wse); - -#undef r0 -#undef r1 -#undef r2 -#undef r3 -#undef r4 -#undef r5 -#undef r6 -#undef wse - -} - -#undef TOOM8_SQR_REC -#undef MAYBE_sqr_basecase -#undef MAYBE_sqr_above_basecase -#undef MAYBE_sqr_toom2 -#undef MAYBE_sqr_above_toom2 -#undef MAYBE_sqr_toom3 -#undef MAYBE_sqr_above_toom3 -#undef MAYBE_sqr_above_toom4 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom8h_mul.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom8h_mul.c deleted file mode 100644 index 8f593903f59e79dc809a9429e01bea422252a3c2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom8h_mul.c +++ /dev/null @@ -1,306 +0,0 @@ -/* Implementation of the multiplication algorithm for Toom-Cook 8.5-way. - - Contributed to the GNU project by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009, 2010, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - - -#if GMP_NUMB_BITS < 29 -#error Not implemented. -#endif - -#if GMP_NUMB_BITS < 43 -#define BIT_CORRECTION 1 -#define CORRECTION_BITS GMP_NUMB_BITS -#else -#define BIT_CORRECTION 0 -#define CORRECTION_BITS 0 -#endif - - -#if TUNE_PROGRAM_BUILD -#define MAYBE_mul_basecase 1 -#define MAYBE_mul_toom22 1 -#define MAYBE_mul_toom33 1 -#define MAYBE_mul_toom44 1 -#define MAYBE_mul_toom8h 1 -#else -#define MAYBE_mul_basecase \ - (MUL_TOOM8H_THRESHOLD < 8 * MUL_TOOM22_THRESHOLD) -#define MAYBE_mul_toom22 \ - (MUL_TOOM8H_THRESHOLD < 8 * MUL_TOOM33_THRESHOLD) -#define MAYBE_mul_toom33 \ - (MUL_TOOM8H_THRESHOLD < 8 * MUL_TOOM44_THRESHOLD) -#define MAYBE_mul_toom44 \ - (MUL_TOOM8H_THRESHOLD < 8 * MUL_TOOM6H_THRESHOLD) -#define MAYBE_mul_toom8h \ - (MUL_FFT_THRESHOLD >= 8 * MUL_TOOM8H_THRESHOLD) -#endif - -#define TOOM8H_MUL_N_REC(p, a, b, f, p2, a2, b2, n, ws) \ - do { \ - if (MAYBE_mul_basecase \ - && BELOW_THRESHOLD (n, MUL_TOOM22_THRESHOLD)) { \ - mpn_mul_basecase (p, a, n, b, n); \ - if (f) mpn_mul_basecase (p2, a2, n, b2, n); \ - } else if (MAYBE_mul_toom22 \ - && BELOW_THRESHOLD (n, MUL_TOOM33_THRESHOLD)) { \ - mpn_toom22_mul (p, a, n, b, n, ws); \ - if (f) mpn_toom22_mul (p2, a2, n, b2, n, ws); \ - } else if (MAYBE_mul_toom33 \ - && BELOW_THRESHOLD (n, MUL_TOOM44_THRESHOLD)) { \ - mpn_toom33_mul (p, a, n, b, n, ws); \ - if (f) mpn_toom33_mul (p2, a2, n, b2, n, ws); \ - } else if (MAYBE_mul_toom44 \ - && BELOW_THRESHOLD (n, MUL_TOOM6H_THRESHOLD)) { \ - mpn_toom44_mul (p, a, n, b, n, ws); \ - if (f) mpn_toom44_mul (p2, a2, n, b2, n, ws); \ - } else if (! MAYBE_mul_toom8h \ - || BELOW_THRESHOLD (n, MUL_TOOM8H_THRESHOLD)) { \ - mpn_toom6h_mul (p, a, n, b, n, ws); \ - if (f) mpn_toom6h_mul (p2, a2, n, b2, n, ws); \ - } else { \ - mpn_toom8h_mul (p, a, n, b, n, ws); \ - if (f) mpn_toom8h_mul (p2, a2, n, b2, n, ws); \ - } \ - } while (0) - -#define TOOM8H_MUL_REC(p, a, na, b, nb, ws) \ - do { mpn_mul (p, a, na, b, nb); } while (0) - -/* Toom-8.5 , compute the product {pp,an+bn} <- {ap,an} * {bp,bn} - With: an >= bn >= 86, an*5 < bn * 11. - It _may_ work with bn<=?? and bn*?? < an*? < bn*?? - - Evaluate in: infinity, +8,-8,+4,-4,+2,-2,+1,-1,+1/2,-1/2,+1/4,-1/4,+1/8,-1/8,0. -*/ -/* Estimate on needed scratch: - S(n) <= (n+7)\8*13+5+MAX(S((n+7)\8),1+2*(n+7)\8), - since n>80; S(n) <= ceil(log(n/10)/log(8))*(13+5)+n*15\8 < n*15\8 + lg2(n)*6 - */ - -void -mpn_toom8h_mul (mp_ptr pp, - mp_srcptr ap, mp_size_t an, - mp_srcptr bp, mp_size_t bn, mp_ptr scratch) -{ - mp_size_t n, s, t; - int p, q, half; - int sign; - - /***************************** decomposition *******************************/ - - ASSERT (an >= bn); - /* Can not handle too small operands */ - ASSERT (bn >= 86); - /* Can not handle too much unbalancement */ - ASSERT (an <= bn*4); - ASSERT (GMP_NUMB_BITS > 11*3 || an*4 <= bn*11); - ASSERT (GMP_NUMB_BITS > 10*3 || an*1 <= bn* 2); - ASSERT (GMP_NUMB_BITS > 9*3 || an*2 <= bn* 3); - - /* Limit num/den is a rational number between - (16/15)^(log(6)/log(2*6-1)) and (16/15)^(log(8)/log(2*8-1)) */ -#define LIMIT_numerator (21) -#define LIMIT_denominat (20) - - if (LIKELY (an == bn) || an * (LIMIT_denominat>>1) < LIMIT_numerator * (bn>>1) ) /* is 8*... < 8*... */ - { - half = 0; - n = 1 + ((an - 1)>>3); - p = q = 7; - s = an - 7 * n; - t = bn - 7 * n; - } - else - { - if (an * 13 < 16 * bn) /* (an*7*LIMIT_numerator<LIMIT_denominat*9*bn) */ - { p = 9; q = 8; } - else if (GMP_NUMB_BITS <= 9*3 || - an *(LIMIT_denominat>>1) < (LIMIT_numerator/7*9) * (bn>>1)) - { p = 9; q = 7; } - else if (an * 10 < 33 * (bn>>1)) /* (an*3*LIMIT_numerator<LIMIT_denominat*5*bn) */ - { p =10; q = 7; } - else if (GMP_NUMB_BITS <= 10*3 || - an * (LIMIT_denominat/5) < (LIMIT_numerator/3) * bn) - { p =10; q = 6; } - else if (an * 6 < 13 * bn) /*(an * 5 * LIMIT_numerator < LIMIT_denominat *11 * bn)*/ - { p =11; q = 6; } - else if (GMP_NUMB_BITS <= 11*3 || - an * 4 < 9 * bn) - { p =11; q = 5; } - else if (an *(LIMIT_numerator/3) < LIMIT_denominat * bn) /* is 4*... <12*... */ - { p =12; q = 5; } - else if (GMP_NUMB_BITS <= 12*3 || - an * 9 < 28 * bn ) /* is 4*... <12*... */ - { p =12; q = 4; } - else - { p =13; q = 4; } - - half = (p+q)&1; - n = 1 + (q * an >= p * bn ? (an - 1) / (size_t) p : (bn - 1) / (size_t) q); - p--; q--; - - s = an - p * n; - t = bn - q * n; - - if(half) { /* Recover from badly chosen splitting */ - if (UNLIKELY (s<1)) {p--; s+=n; half=0;} - else if (UNLIKELY (t<1)) {q--; t+=n; half=0;} - } - } -#undef LIMIT_numerator -#undef LIMIT_denominat - - ASSERT (0 < s && s <= n); - ASSERT (0 < t && t <= n); - ASSERT (half || s + t > 3); - ASSERT (n > 2); - -#define r6 (pp + 3 * n) /* 3n+1 */ -#define r4 (pp + 7 * n) /* 3n+1 */ -#define r2 (pp +11 * n) /* 3n+1 */ -#define r0 (pp +15 * n) /* s+t <= 2*n */ -#define r7 (scratch) /* 3n+1 */ -#define r5 (scratch + 3 * n + 1) /* 3n+1 */ -#define r3 (scratch + 6 * n + 2) /* 3n+1 */ -#define r1 (scratch + 9 * n + 3) /* 3n+1 */ -#define v0 (pp +11 * n) /* n+1 */ -#define v1 (pp +12 * n+1) /* n+1 */ -#define v2 (pp +13 * n+2) /* n+1 */ -#define v3 (scratch +12 * n + 4) /* n+1 */ -#define wsi (scratch +12 * n + 4) /* 3n+1 */ -#define wse (scratch +13 * n + 5) /* 2n+1 */ - - /* Alloc also 3n+1 limbs for wsi... toom_interpolate_16pts may - need all of them */ -/* if (scratch == NULL) */ -/* scratch = TMP_SALLOC_LIMBS(mpn_toom8_sqr_itch(n * 8)); */ - ASSERT (15 * n + 6 <= mpn_toom8h_mul_itch (an, bn)); - ASSERT (15 * n + 6 <= mpn_toom8_sqr_itch (n * 8)); - - /********************** evaluation and recursive calls *********************/ - - /* $\pm1/8$ */ - sign = mpn_toom_eval_pm2rexp (v2, v0, p, ap, n, s, 3, pp) ^ - mpn_toom_eval_pm2rexp (v3, v1, q, bp, n, t, 3, pp); - /* A(-1/8)*B(-1/8)*8^. */ /* A(+1/8)*B(+1/8)*8^. */ - TOOM8H_MUL_N_REC(pp, v0, v1, 2, r7, v2, v3, n + 1, wse); - mpn_toom_couple_handling (r7, 2 * n + 1 + BIT_CORRECTION, pp, sign, n, 3*(1+half), 3*(half)); - - /* $\pm1/4$ */ - sign = mpn_toom_eval_pm2rexp (v2, v0, p, ap, n, s, 2, pp) ^ - mpn_toom_eval_pm2rexp (v3, v1, q, bp, n, t, 2, pp); - /* A(-1/4)*B(-1/4)*4^. */ /* A(+1/4)*B(+1/4)*4^. */ - TOOM8H_MUL_N_REC(pp, v0, v1, 2, r5, v2, v3, n + 1, wse); - mpn_toom_couple_handling (r5, 2 * n + 1, pp, sign, n, 2*(1+half), 2*(half)); - - /* $\pm2$ */ - sign = mpn_toom_eval_pm2 (v2, v0, p, ap, n, s, pp) ^ - mpn_toom_eval_pm2 (v3, v1, q, bp, n, t, pp); - /* A(-2)*B(-2) */ /* A(+2)*B(+2) */ - TOOM8H_MUL_N_REC(pp, v0, v1, 2, r3, v2, v3, n + 1, wse); - mpn_toom_couple_handling (r3, 2 * n + 1, pp, sign, n, 1, 2); - - /* $\pm8$ */ - sign = mpn_toom_eval_pm2exp (v2, v0, p, ap, n, s, 3, pp) ^ - mpn_toom_eval_pm2exp (v3, v1, q, bp, n, t, 3, pp); - /* A(-8)*B(-8) */ /* A(+8)*B(+8) */ - TOOM8H_MUL_N_REC(pp, v0, v1, 2, r1, v2, v3, n + 1, wse); - mpn_toom_couple_handling (r1, 2 * n + 1 + BIT_CORRECTION, pp, sign, n, 3, 6); - - /* $\pm1/2$ */ - sign = mpn_toom_eval_pm2rexp (v2, v0, p, ap, n, s, 1, pp) ^ - mpn_toom_eval_pm2rexp (v3, v1, q, bp, n, t, 1, pp); - /* A(-1/2)*B(-1/2)*2^. */ /* A(+1/2)*B(+1/2)*2^. */ - TOOM8H_MUL_N_REC(pp, v0, v1, 2, r6, v2, v3, n + 1, wse); - mpn_toom_couple_handling (r6, 2 * n + 1, pp, sign, n, 1+half, half); - - /* $\pm1$ */ - sign = mpn_toom_eval_pm1 (v2, v0, p, ap, n, s, pp); - if (GMP_NUMB_BITS > 12*3 && UNLIKELY (q == 3)) - sign ^= mpn_toom_eval_dgr3_pm1 (v3, v1, bp, n, t, pp); - else - sign ^= mpn_toom_eval_pm1 (v3, v1, q, bp, n, t, pp); - /* A(-1)*B(-1) */ /* A(1)*B(1) */ - TOOM8H_MUL_N_REC(pp, v0, v1, 2, r4, v2, v3, n + 1, wse); - mpn_toom_couple_handling (r4, 2 * n + 1, pp, sign, n, 0, 0); - - /* $\pm4$ */ - sign = mpn_toom_eval_pm2exp (v2, v0, p, ap, n, s, 2, pp) ^ - mpn_toom_eval_pm2exp (v3, v1, q, bp, n, t, 2, pp); - /* A(-4)*B(-4) */ /* A(+4)*B(+4) */ - TOOM8H_MUL_N_REC(pp, v0, v1, 2, r2, v2, v3, n + 1, wse); - mpn_toom_couple_handling (r2, 2 * n + 1, pp, sign, n, 2, 4); - -#undef v0 -#undef v1 -#undef v2 -#undef v3 -#undef wse - - /* A(0)*B(0) */ - TOOM8H_MUL_N_REC(pp, ap, bp, 0, pp, ap, bp, n, wsi); - - /* Infinity */ - if (UNLIKELY (half != 0)) { - if (s > t) { - TOOM8H_MUL_REC(r0, ap + p * n, s, bp + q * n, t, wsi); - } else { - TOOM8H_MUL_REC(r0, bp + q * n, t, ap + p * n, s, wsi); - }; - }; - - mpn_toom_interpolate_16pts (pp, r1, r3, r5, r7, n, s+t, half, wsi); - -#undef r0 -#undef r1 -#undef r2 -#undef r3 -#undef r4 -#undef r5 -#undef r6 -#undef wsi -} - -#undef TOOM8H_MUL_N_REC -#undef TOOM8H_MUL_REC -#undef MAYBE_mul_basecase -#undef MAYBE_mul_toom22 -#undef MAYBE_mul_toom33 -#undef MAYBE_mul_toom44 -#undef MAYBE_mul_toom8h diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_couple_handling.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_couple_handling.c deleted file mode 100644 index 9e62bcba1c9605ac2fe12cc97d5afd8864070ba8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_couple_handling.c +++ /dev/null @@ -1,81 +0,0 @@ -/* Helper function for high degree Toom-Cook algorithms. - - Contributed to the GNU project by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009, 2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Gets {pp,n} and (sign?-1:1)*{np,n}. Computes at once: - {pp,n} <- ({pp,n}+{np,n})/2^{ps+1} - {pn,n} <- ({pp,n}-{np,n})/2^{ns+1} - Finally recompose them obtaining: - {pp,n+off} <- {pp,n}+{np,n}*2^{off*GMP_NUMB_BITS} -*/ -void -mpn_toom_couple_handling (mp_ptr pp, mp_size_t n, mp_ptr np, - int nsign, mp_size_t off, int ps, int ns) -{ - if (nsign) { -#ifdef HAVE_NATIVE_mpn_rsh1sub_n - mpn_rsh1sub_n (np, pp, np, n); -#else - mpn_sub_n (np, pp, np, n); - mpn_rshift (np, np, n, 1); -#endif - } else { -#ifdef HAVE_NATIVE_mpn_rsh1add_n - mpn_rsh1add_n (np, pp, np, n); -#else - mpn_add_n (np, pp, np, n); - mpn_rshift (np, np, n, 1); -#endif - } - -#ifdef HAVE_NATIVE_mpn_rsh1sub_n - if (ps == 1) - mpn_rsh1sub_n (pp, pp, np, n); - else -#endif - { - mpn_sub_n (pp, pp, np, n); - if (ps > 0) - mpn_rshift (pp, pp, n, ps); - } - if (ns > 0) - mpn_rshift (np, np, n, ns); - pp[n] = mpn_add_n (pp+off, pp+off, np, n-off); - ASSERT_NOCARRY (mpn_add_1(pp+n, np+n-off, off, pp[n]) ); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_dgr3_pm1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_dgr3_pm1.c deleted file mode 100644 index 50411bd3ca6756b65f12cbe54568e2a1e79c9f9d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_dgr3_pm1.c +++ /dev/null @@ -1,73 +0,0 @@ -/* mpn_toom_eval_dgr3_pm1 -- Evaluate a degree 3 polynomial in +1 and -1 - - Contributed to the GNU project by Niels Möller - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -int -mpn_toom_eval_dgr3_pm1 (mp_ptr xp1, mp_ptr xm1, - mp_srcptr xp, mp_size_t n, mp_size_t x3n, mp_ptr tp) -{ - int neg; - - ASSERT (x3n > 0); - ASSERT (x3n <= n); - - xp1[n] = mpn_add_n (xp1, xp, xp + 2*n, n); - tp[n] = mpn_add (tp, xp + n, n, xp + 3*n, x3n); - - neg = (mpn_cmp (xp1, tp, n + 1) < 0) ? ~0 : 0; - -#if HAVE_NATIVE_mpn_add_n_sub_n - if (neg) - mpn_add_n_sub_n (xp1, xm1, tp, xp1, n + 1); - else - mpn_add_n_sub_n (xp1, xm1, xp1, tp, n + 1); -#else - if (neg) - mpn_sub_n (xm1, tp, xp1, n + 1); - else - mpn_sub_n (xm1, xp1, tp, n + 1); - - mpn_add_n (xp1, xp1, tp, n + 1); -#endif - - ASSERT (xp1[n] <= 3); - ASSERT (xm1[n] <= 1); - - return neg; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_dgr3_pm2.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_dgr3_pm2.c deleted file mode 100644 index 3ba6d15f3ddccc74b22d97141ccb9ef76a4d840f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_dgr3_pm2.c +++ /dev/null @@ -1,98 +0,0 @@ -/* mpn_toom_eval_dgr3_pm2 -- Evaluate a degree 3 polynomial in +2 and -2 - - Contributed to the GNU project by Niels Möller - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Needs n+1 limbs of temporary storage. */ -int -mpn_toom_eval_dgr3_pm2 (mp_ptr xp2, mp_ptr xm2, - mp_srcptr xp, mp_size_t n, mp_size_t x3n, mp_ptr tp) -{ - mp_limb_t cy; - int neg; - - ASSERT (x3n > 0); - ASSERT (x3n <= n); - - /* (x0 + 4 * x2) +/- (2 x1 + 8 x_3) */ -#if HAVE_NATIVE_mpn_addlsh_n || HAVE_NATIVE_mpn_addlsh2_n -#if HAVE_NATIVE_mpn_addlsh2_n - xp2[n] = mpn_addlsh2_n (xp2, xp, xp + 2*n, n); - - cy = mpn_addlsh2_n (tp, xp + n, xp + 3*n, x3n); -#else /* HAVE_NATIVE_mpn_addlsh_n */ - xp2[n] = mpn_addlsh_n (xp2, xp, xp + 2*n, n, 2); - - cy = mpn_addlsh_n (tp, xp + n, xp + 3*n, x3n, 2); -#endif - if (x3n < n) - cy = mpn_add_1 (tp + x3n, xp + n + x3n, n - x3n, cy); - tp[n] = cy; -#else - cy = mpn_lshift (tp, xp + 2*n, n, 2); - xp2[n] = cy + mpn_add_n (xp2, tp, xp, n); - - tp[x3n] = mpn_lshift (tp, xp + 3*n, x3n, 2); - if (x3n < n) - tp[n] = mpn_add (tp, xp + n, n, tp, x3n + 1); - else - tp[n] += mpn_add_n (tp, xp + n, tp, n); -#endif - mpn_lshift (tp, tp, n+1, 1); - - neg = (mpn_cmp (xp2, tp, n + 1) < 0) ? ~0 : 0; - -#if HAVE_NATIVE_mpn_add_n_sub_n - if (neg) - mpn_add_n_sub_n (xp2, xm2, tp, xp2, n + 1); - else - mpn_add_n_sub_n (xp2, xm2, xp2, tp, n + 1); -#else - if (neg) - mpn_sub_n (xm2, tp, xp2, n + 1); - else - mpn_sub_n (xm2, xp2, tp, n + 1); - - mpn_add_n (xp2, xp2, tp, n + 1); -#endif - - ASSERT (xp2[n] < 15); - ASSERT (xm2[n] < 10); - - return neg; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_pm1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_pm1.c deleted file mode 100644 index 2334b0aff4a42b127e1236907bd125dbe292b7ac..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_pm1.c +++ /dev/null @@ -1,90 +0,0 @@ -/* mpn_toom_eval_pm1 -- Evaluate a polynomial in +1 and -1 - - Contributed to the GNU project by Niels Möller - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Evaluates a polynomial of degree k > 3, in the points +1 and -1. */ -int -mpn_toom_eval_pm1 (mp_ptr xp1, mp_ptr xm1, unsigned k, - mp_srcptr xp, mp_size_t n, mp_size_t hn, mp_ptr tp) -{ - unsigned i; - int neg; - - ASSERT (k >= 4); - - ASSERT (hn > 0); - ASSERT (hn <= n); - - /* The degree k is also the number of full-size coefficients, so - * that last coefficient, of size hn, starts at xp + k*n. */ - - xp1[n] = mpn_add_n (xp1, xp, xp + 2*n, n); - for (i = 4; i < k; i += 2) - ASSERT_NOCARRY (mpn_add (xp1, xp1, n+1, xp+i*n, n)); - - tp[n] = mpn_add_n (tp, xp + n, xp + 3*n, n); - for (i = 5; i < k; i += 2) - ASSERT_NOCARRY (mpn_add (tp, tp, n+1, xp+i*n, n)); - - if (k & 1) - ASSERT_NOCARRY (mpn_add (tp, tp, n+1, xp+k*n, hn)); - else - ASSERT_NOCARRY (mpn_add (xp1, xp1, n+1, xp+k*n, hn)); - - neg = (mpn_cmp (xp1, tp, n + 1) < 0) ? ~0 : 0; - -#if HAVE_NATIVE_mpn_add_n_sub_n - if (neg) - mpn_add_n_sub_n (xp1, xm1, tp, xp1, n + 1); - else - mpn_add_n_sub_n (xp1, xm1, xp1, tp, n + 1); -#else - if (neg) - mpn_sub_n (xm1, tp, xp1, n + 1); - else - mpn_sub_n (xm1, xp1, tp, n + 1); - - mpn_add_n (xp1, xp1, tp, n + 1); -#endif - - ASSERT (xp1[n] <= k); - ASSERT (xm1[n] <= k/2 + 1); - - return neg; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_pm2.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_pm2.c deleted file mode 100644 index 67afcc638efb9ed25211026c603f8cd1d929bf62..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_pm2.c +++ /dev/null @@ -1,131 +0,0 @@ -/* mpn_toom_eval_pm2 -- Evaluate a polynomial in +2 and -2 - - Contributed to the GNU project by Niels Möller and Marco Bodrato - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* DO_addlsh2(d,a,b,n,cy) computes cy,{d,n} <- {a,n} + 4*(cy,{b,n}), it - can be used as DO_addlsh2(d,a,d,n,d[n]), for accumulation on {d,n+1}. */ -#if HAVE_NATIVE_mpn_addlsh2_n -#define DO_addlsh2(d, a, b, n, cy) \ -do { \ - (cy) <<= 2; \ - (cy) += mpn_addlsh2_n(d, a, b, n); \ -} while (0) -#else -#if HAVE_NATIVE_mpn_addlsh_n -#define DO_addlsh2(d, a, b, n, cy) \ -do { \ - (cy) <<= 2; \ - (cy) += mpn_addlsh_n(d, a, b, n, 2); \ -} while (0) -#else -/* The following is not a general substitute for addlsh2. - It is correct if d == b, but it is not if d == a. */ -#define DO_addlsh2(d, a, b, n, cy) \ -do { \ - (cy) <<= 2; \ - (cy) += mpn_lshift(d, b, n, 2); \ - (cy) += mpn_add_n(d, d, a, n); \ -} while (0) -#endif -#endif - -/* Evaluates a polynomial of degree 2 < k < GMP_NUMB_BITS, in the - points +2 and -2. */ -int -mpn_toom_eval_pm2 (mp_ptr xp2, mp_ptr xm2, unsigned k, - mp_srcptr xp, mp_size_t n, mp_size_t hn, mp_ptr tp) -{ - int i; - int neg; - mp_limb_t cy; - - ASSERT (k >= 3); - ASSERT (k < GMP_NUMB_BITS); - - ASSERT (hn > 0); - ASSERT (hn <= n); - - /* The degree k is also the number of full-size coefficients, so - * that last coefficient, of size hn, starts at xp + k*n. */ - - cy = 0; - DO_addlsh2 (xp2, xp + (k-2) * n, xp + k * n, hn, cy); - if (hn != n) - cy = mpn_add_1 (xp2 + hn, xp + (k-2) * n + hn, n - hn, cy); - for (i = k - 4; i >= 0; i -= 2) - DO_addlsh2 (xp2, xp + i * n, xp2, n, cy); - xp2[n] = cy; - - k--; - - cy = 0; - DO_addlsh2 (tp, xp + (k-2) * n, xp + k * n, n, cy); - for (i = k - 4; i >= 0; i -= 2) - DO_addlsh2 (tp, xp + i * n, tp, n, cy); - tp[n] = cy; - - if (k & 1) - ASSERT_NOCARRY(mpn_lshift (tp , tp , n + 1, 1)); - else - ASSERT_NOCARRY(mpn_lshift (xp2, xp2, n + 1, 1)); - - neg = (mpn_cmp (xp2, tp, n + 1) < 0) ? ~0 : 0; - -#if HAVE_NATIVE_mpn_add_n_sub_n - if (neg) - mpn_add_n_sub_n (xp2, xm2, tp, xp2, n + 1); - else - mpn_add_n_sub_n (xp2, xm2, xp2, tp, n + 1); -#else /* !HAVE_NATIVE_mpn_add_n_sub_n */ - if (neg) - mpn_sub_n (xm2, tp, xp2, n + 1); - else - mpn_sub_n (xm2, xp2, tp, n + 1); - - mpn_add_n (xp2, xp2, tp, n + 1); -#endif /* !HAVE_NATIVE_mpn_add_n_sub_n */ - - ASSERT (xp2[n] < (1<<(k+2))-1); - ASSERT (xm2[n] < ((1<<(k+3))-1 - (1^k&1))/3); - - neg ^= ((k & 1) - 1); - - return neg; -} - -#undef DO_addlsh2 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_pm2exp.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_pm2exp.c deleted file mode 100644 index b178fcac244212726e9f239e6915bfce4d987365..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_pm2exp.c +++ /dev/null @@ -1,128 +0,0 @@ -/* mpn_toom_eval_pm2exp -- Evaluate a polynomial in +2^k and -2^k - - Contributed to the GNU project by Niels Möller - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -/* Evaluates a polynomial of degree k > 2, in the points +2^shift and -2^shift. */ -int -mpn_toom_eval_pm2exp (mp_ptr xp2, mp_ptr xm2, unsigned k, - mp_srcptr xp, mp_size_t n, mp_size_t hn, unsigned shift, - mp_ptr tp) -{ - unsigned i; - int neg; -#if HAVE_NATIVE_mpn_addlsh_n - mp_limb_t cy; -#endif - - ASSERT (k >= 3); - ASSERT (shift*k < GMP_NUMB_BITS); - - ASSERT (hn > 0); - ASSERT (hn <= n); - - /* The degree k is also the number of full-size coefficients, so - * that last coefficient, of size hn, starts at xp + k*n. */ - -#if HAVE_NATIVE_mpn_addlsh_n - xp2[n] = mpn_addlsh_n (xp2, xp, xp + 2*n, n, 2*shift); - for (i = 4; i < k; i += 2) - xp2[n] += mpn_addlsh_n (xp2, xp2, xp + i*n, n, i*shift); - - tp[n] = mpn_lshift (tp, xp+n, n, shift); - for (i = 3; i < k; i+= 2) - tp[n] += mpn_addlsh_n (tp, tp, xp+i*n, n, i*shift); - - if (k & 1) - { - cy = mpn_addlsh_n (tp, tp, xp+k*n, hn, k*shift); - MPN_INCR_U (tp + hn, n+1 - hn, cy); - } - else - { - cy = mpn_addlsh_n (xp2, xp2, xp+k*n, hn, k*shift); - MPN_INCR_U (xp2 + hn, n+1 - hn, cy); - } - -#else /* !HAVE_NATIVE_mpn_addlsh_n */ - xp2[n] = mpn_lshift (tp, xp+2*n, n, 2*shift); - xp2[n] += mpn_add_n (xp2, xp, tp, n); - for (i = 4; i < k; i += 2) - { - xp2[n] += mpn_lshift (tp, xp + i*n, n, i*shift); - xp2[n] += mpn_add_n (xp2, xp2, tp, n); - } - - tp[n] = mpn_lshift (tp, xp+n, n, shift); - for (i = 3; i < k; i+= 2) - { - tp[n] += mpn_lshift (xm2, xp + i*n, n, i*shift); - tp[n] += mpn_add_n (tp, tp, xm2, n); - } - - xm2[hn] = mpn_lshift (xm2, xp + k*n, hn, k*shift); - if (k & 1) - mpn_add (tp, tp, n+1, xm2, hn+1); - else - mpn_add (xp2, xp2, n+1, xm2, hn+1); -#endif /* !HAVE_NATIVE_mpn_addlsh_n */ - - neg = (mpn_cmp (xp2, tp, n + 1) < 0) ? ~0 : 0; - -#if HAVE_NATIVE_mpn_add_n_sub_n - if (neg) - mpn_add_n_sub_n (xp2, xm2, tp, xp2, n + 1); - else - mpn_add_n_sub_n (xp2, xm2, xp2, tp, n + 1); -#else /* !HAVE_NATIVE_mpn_add_n_sub_n */ - if (neg) - mpn_sub_n (xm2, tp, xp2, n + 1); - else - mpn_sub_n (xm2, xp2, tp, n + 1); - - mpn_add_n (xp2, xp2, tp, n + 1); -#endif /* !HAVE_NATIVE_mpn_add_n_sub_n */ - - /* FIXME: the following asserts are useless if (k+1)*shift >= GMP_LIMB_BITS */ - ASSERT ((k+1)*shift >= GMP_LIMB_BITS || - xp2[n] < ((CNST_LIMB(1)<<((k+1)*shift))-1)/((CNST_LIMB(1)<<shift)-1)); - ASSERT ((k+2)*shift >= GMP_LIMB_BITS || - xm2[n] < ((CNST_LIMB(1)<<((k+2)*shift))-((k&1)?(CNST_LIMB(1)<<shift):1))/((CNST_LIMB(1)<<(2*shift))-1)); - - return neg; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_pm2rexp.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_pm2rexp.c deleted file mode 100644 index 3cac46bd905a9fb0b060a1ddecec79a399c95a7f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_eval_pm2rexp.c +++ /dev/null @@ -1,102 +0,0 @@ -/* mpn_toom_eval_pm2rexp -- Evaluate a polynomial in +2^-k and -2^-k - - Contributed to the GNU project by Marco Bodrato - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -#if HAVE_NATIVE_mpn_addlsh_n -#define DO_mpn_addlsh_n(dst,src,n,s,ws) mpn_addlsh_n(dst,dst,src,n,s) -#else -static mp_limb_t -DO_mpn_addlsh_n(mp_ptr dst, mp_srcptr src, mp_size_t n, unsigned int s, mp_ptr ws) -{ -#if USE_MUL_1 && 0 - return mpn_addmul_1(dst,src,n,CNST_LIMB(1) <<(s)); -#else - mp_limb_t __cy; - __cy = mpn_lshift(ws,src,n,s); - return __cy + mpn_add_n(dst,dst,ws,n); -#endif -} -#endif - -/* Evaluates a polynomial of degree k >= 3. */ -int -mpn_toom_eval_pm2rexp (mp_ptr rp, mp_ptr rm, - unsigned int q, mp_srcptr ap, mp_size_t n, mp_size_t t, - unsigned int s, mp_ptr ws) -{ - unsigned int i; - int neg; - /* {ap,q*n+t} -> {rp,n+1} {rm,n+1} , with {ws, n+1}*/ - ASSERT (n >= t); - ASSERT (s != 0); /* or _eval_pm1 should be used */ - ASSERT (q > 1); - ASSERT (s*q < GMP_NUMB_BITS); - rp[n] = mpn_lshift(rp, ap, n, s*q); - ws[n] = mpn_lshift(ws, ap+n, n, s*(q-1)); - if( (q & 1) != 0) { - ASSERT_NOCARRY(mpn_add(ws,ws,n+1,ap+n*q,t)); - rp[n] += DO_mpn_addlsh_n(rp, ap+n*(q-1), n, s, rm); - } else { - ASSERT_NOCARRY(mpn_add(rp,rp,n+1,ap+n*q,t)); - } - for(i=2; i<q-1; i++) - { - rp[n] += DO_mpn_addlsh_n(rp, ap+n*i, n, s*(q-i), rm); - i++; - ws[n] += DO_mpn_addlsh_n(ws, ap+n*i, n, s*(q-i), rm); - }; - - neg = (mpn_cmp (rp, ws, n + 1) < 0) ? ~0 : 0; - -#if HAVE_NATIVE_mpn_add_n_sub_n - if (neg) - mpn_add_n_sub_n (rp, rm, ws, rp, n + 1); - else - mpn_add_n_sub_n (rp, rm, rp, ws, n + 1); -#else /* !HAVE_NATIVE_mpn_add_n_sub_n */ - if (neg) - mpn_sub_n (rm, ws, rp, n + 1); - else - mpn_sub_n (rm, rp, ws, n + 1); - - ASSERT_NOCARRY (mpn_add_n (rp, rp, ws, n + 1)); -#endif /* !HAVE_NATIVE_mpn_add_n_sub_n */ - - return neg; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_12pts.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_12pts.c deleted file mode 100644 index 180b0329a36c2998e61cba07bcc8e12f557f4ff8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_12pts.c +++ /dev/null @@ -1,361 +0,0 @@ -/* Interpolation for the algorithm Toom-Cook 6.5-way. - - Contributed to the GNU project by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009, 2010, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - - -#if HAVE_NATIVE_mpn_sublsh_n -#define DO_mpn_sublsh_n(dst,src,n,s,ws) mpn_sublsh_n(dst,dst,src,n,s) -#else -static mp_limb_t -DO_mpn_sublsh_n(mp_ptr dst, mp_srcptr src, mp_size_t n, unsigned int s, mp_ptr ws) -{ -#if USE_MUL_1 && 0 - return mpn_submul_1(dst,src,n,CNST_LIMB(1) <<(s)); -#else - mp_limb_t __cy; - __cy = mpn_lshift(ws,src,n,s); - return __cy + mpn_sub_n(dst,dst,ws,n); -#endif -} -#endif - -#if HAVE_NATIVE_mpn_addlsh_n -#define DO_mpn_addlsh_n(dst,src,n,s,ws) mpn_addlsh_n(dst,dst,src,n,s) -#else -static mp_limb_t -DO_mpn_addlsh_n(mp_ptr dst, mp_srcptr src, mp_size_t n, unsigned int s, mp_ptr ws) -{ -#if USE_MUL_1 && 0 - return mpn_addmul_1(dst,src,n,CNST_LIMB(1) <<(s)); -#else - mp_limb_t __cy; - __cy = mpn_lshift(ws,src,n,s); - return __cy + mpn_add_n(dst,dst,ws,n); -#endif -} -#endif - -#if HAVE_NATIVE_mpn_subrsh -#define DO_mpn_subrsh(dst,nd,src,ns,s,ws) mpn_subrsh(dst,nd,src,ns,s) -#else -/* FIXME: This is not a correct definition, it assumes no carry */ -#define DO_mpn_subrsh(dst,nd,src,ns,s,ws) \ -do { \ - mp_limb_t __cy; \ - MPN_DECR_U (dst, nd, src[0] >> s); \ - __cy = DO_mpn_sublsh_n (dst, src + 1, ns - 1, GMP_NUMB_BITS - s, ws); \ - MPN_DECR_U (dst + ns - 1, nd - ns + 1, __cy); \ -} while (0) -#endif - - -#if GMP_NUMB_BITS < 21 -#error Not implemented: Both sublsh_n(,,,20) should be corrected. -#endif - -#if GMP_NUMB_BITS < 16 -#error Not implemented: divexact_by42525 needs splitting. -#endif - -#if GMP_NUMB_BITS < 12 -#error Not implemented: Hard to adapt... -#endif - -/* FIXME: tuneup should decide the best variant */ -#ifndef AORSMUL_FASTER_AORS_AORSLSH -#define AORSMUL_FASTER_AORS_AORSLSH 1 -#endif -#ifndef AORSMUL_FASTER_AORS_2AORSLSH -#define AORSMUL_FASTER_AORS_2AORSLSH 1 -#endif -#ifndef AORSMUL_FASTER_2AORSLSH -#define AORSMUL_FASTER_2AORSLSH 1 -#endif -#ifndef AORSMUL_FASTER_3AORSLSH -#define AORSMUL_FASTER_3AORSLSH 1 -#endif - -#define BINVERT_9 \ - ((((GMP_NUMB_MAX / 9) << (6 - GMP_NUMB_BITS % 6)) * 8 & GMP_NUMB_MAX) | 0x39) - -#define BINVERT_255 \ - (GMP_NUMB_MAX - ((GMP_NUMB_MAX / 255) << (8 - GMP_NUMB_BITS % 8))) - - /* FIXME: find some more general expressions for 2835^-1, 42525^-1 */ -#if GMP_LIMB_BITS == 32 -#define BINVERT_2835 (GMP_NUMB_MASK & CNST_LIMB(0x53E3771B)) -#define BINVERT_42525 (GMP_NUMB_MASK & CNST_LIMB(0x9F314C35)) -#else -#if GMP_LIMB_BITS == 64 -#define BINVERT_2835 (GMP_NUMB_MASK & CNST_LIMB(0x938CC70553E3771B)) -#define BINVERT_42525 (GMP_NUMB_MASK & CNST_LIMB(0xE7B40D449F314C35)) -#endif -#endif - -#ifndef mpn_divexact_by255 -#if GMP_NUMB_BITS % 8 == 0 -#define mpn_divexact_by255(dst,src,size) \ - (255 & 1 * mpn_bdiv_dbm1 (dst, src, size, __GMP_CAST (mp_limb_t, GMP_NUMB_MASK / 255))) -#else -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 -#define mpn_divexact_by255(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,CNST_LIMB(255),BINVERT_255,0) -#else -#define mpn_divexact_by255(dst,src,size) mpn_divexact_1(dst,src,size,CNST_LIMB(255)) -#endif -#endif -#endif - -#ifndef mpn_divexact_by9x4 -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 -#define mpn_divexact_by9x4(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,CNST_LIMB(9),BINVERT_9,2) -#else -#define mpn_divexact_by9x4(dst,src,size) mpn_divexact_1(dst,src,size,CNST_LIMB(9)<<2) -#endif -#endif - -#ifndef mpn_divexact_by42525 -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 && defined(BINVERT_42525) -#define mpn_divexact_by42525(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,CNST_LIMB(42525),BINVERT_42525,0) -#else -#define mpn_divexact_by42525(dst,src,size) mpn_divexact_1(dst,src,size,CNST_LIMB(42525)) -#endif -#endif - -#ifndef mpn_divexact_by2835x4 -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 && defined(BINVERT_2835) -#define mpn_divexact_by2835x4(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,CNST_LIMB(2835),BINVERT_2835,2) -#else -#define mpn_divexact_by2835x4(dst,src,size) mpn_divexact_1(dst,src,size,CNST_LIMB(2835)<<2) -#endif -#endif - -/* Interpolation for Toom-6.5 (or Toom-6), using the evaluation - points: infinity(6.5 only), +-4, +-2, +-1, +-1/4, +-1/2, 0. More precisely, - we want to compute f(2^(GMP_NUMB_BITS * n)) for a polynomial f of - degree 11 (or 10), given the 12 (rsp. 11) values: - - r0 = limit at infinity of f(x) / x^7, - r1 = f(4),f(-4), - r2 = f(2),f(-2), - r3 = f(1),f(-1), - r4 = f(1/4),f(-1/4), - r5 = f(1/2),f(-1/2), - r6 = f(0). - - All couples of the form f(n),f(-n) must be already mixed with - toom_couple_handling(f(n),...,f(-n),...) - - The result is stored in {pp, spt + 7*n (or 6*n)}. - At entry, r6 is stored at {pp, 2n}, - r4 is stored at {pp + 3n, 3n + 1}. - r2 is stored at {pp + 7n, 3n + 1}. - r0 is stored at {pp +11n, spt}. - - The other values are 3n+1 limbs each (with most significant limbs small). - - Negative intermediate results are stored two-complemented. - Inputs are destroyed. -*/ - -void -mpn_toom_interpolate_12pts (mp_ptr pp, mp_ptr r1, mp_ptr r3, mp_ptr r5, - mp_size_t n, mp_size_t spt, int half, mp_ptr wsi) -{ - mp_limb_t cy; - mp_size_t n3; - mp_size_t n3p1; - n3 = 3 * n; - n3p1 = n3 + 1; - -#define r4 (pp + n3) /* 3n+1 */ -#define r2 (pp + 7 * n) /* 3n+1 */ -#define r0 (pp +11 * n) /* s+t <= 2*n */ - - /******************************* interpolation *****************************/ - if (half != 0) { - cy = mpn_sub_n (r3, r3, r0, spt); - MPN_DECR_U (r3 + spt, n3p1 - spt, cy); - - cy = DO_mpn_sublsh_n (r2, r0, spt, 10, wsi); - MPN_DECR_U (r2 + spt, n3p1 - spt, cy); - DO_mpn_subrsh(r5, n3p1, r0, spt, 2, wsi); - - cy = DO_mpn_sublsh_n (r1, r0, spt, 20, wsi); - MPN_DECR_U (r1 + spt, n3p1 - spt, cy); - DO_mpn_subrsh(r4, n3p1, r0, spt, 4, wsi); - }; - - r4[n3] -= DO_mpn_sublsh_n (r4 + n, pp, 2 * n, 20, wsi); - DO_mpn_subrsh(r1 + n, 2 * n + 1, pp, 2 * n, 4, wsi); - -#if HAVE_NATIVE_mpn_add_n_sub_n - mpn_add_n_sub_n (r1, r4, r4, r1, n3p1); -#else - ASSERT_NOCARRY(mpn_add_n (wsi, r1, r4, n3p1)); - mpn_sub_n (r4, r4, r1, n3p1); /* can be negative */ - MP_PTR_SWAP(r1, wsi); -#endif - - r5[n3] -= DO_mpn_sublsh_n (r5 + n, pp, 2 * n, 10, wsi); - DO_mpn_subrsh(r2 + n, 2 * n + 1, pp, 2 * n, 2, wsi); - -#if HAVE_NATIVE_mpn_add_n_sub_n - mpn_add_n_sub_n (r2, r5, r5, r2, n3p1); -#else - mpn_sub_n (wsi, r5, r2, n3p1); /* can be negative */ - ASSERT_NOCARRY(mpn_add_n (r2, r2, r5, n3p1)); - MP_PTR_SWAP(r5, wsi); -#endif - - r3[n3] -= mpn_sub_n (r3+n, r3+n, pp, 2 * n); - -#if AORSMUL_FASTER_AORS_AORSLSH - mpn_submul_1 (r4, r5, n3p1, 257); /* can be negative */ -#else - mpn_sub_n (r4, r4, r5, n3p1); /* can be negative */ - DO_mpn_sublsh_n (r4, r5, n3p1, 8, wsi); /* can be negative */ -#endif - /* A division by 2835x4 follows. Warning: the operand can be negative! */ - mpn_divexact_by2835x4(r4, r4, n3p1); - if ((r4[n3] & (GMP_NUMB_MAX << (GMP_NUMB_BITS-3))) != 0) - r4[n3] |= (GMP_NUMB_MAX << (GMP_NUMB_BITS-2)); - -#if AORSMUL_FASTER_2AORSLSH - mpn_addmul_1 (r5, r4, n3p1, 60); /* can be negative */ -#else - DO_mpn_sublsh_n (r5, r4, n3p1, 2, wsi); /* can be negative */ - DO_mpn_addlsh_n (r5, r4, n3p1, 6, wsi); /* can give a carry */ -#endif - mpn_divexact_by255(r5, r5, n3p1); - - ASSERT_NOCARRY(DO_mpn_sublsh_n (r2, r3, n3p1, 5, wsi)); - -#if AORSMUL_FASTER_3AORSLSH - ASSERT_NOCARRY(mpn_submul_1 (r1, r2, n3p1, 100)); -#else - ASSERT_NOCARRY(DO_mpn_sublsh_n (r1, r2, n3p1, 6, wsi)); - ASSERT_NOCARRY(DO_mpn_sublsh_n (r1, r2, n3p1, 5, wsi)); - ASSERT_NOCARRY(DO_mpn_sublsh_n (r1, r2, n3p1, 2, wsi)); -#endif - ASSERT_NOCARRY(DO_mpn_sublsh_n (r1, r3, n3p1, 9, wsi)); - mpn_divexact_by42525(r1, r1, n3p1); - -#if AORSMUL_FASTER_AORS_2AORSLSH - ASSERT_NOCARRY(mpn_submul_1 (r2, r1, n3p1, 225)); -#else - ASSERT_NOCARRY(mpn_sub_n (r2, r2, r1, n3p1)); - ASSERT_NOCARRY(DO_mpn_addlsh_n (r2, r1, n3p1, 5, wsi)); - ASSERT_NOCARRY(DO_mpn_sublsh_n (r2, r1, n3p1, 8, wsi)); -#endif - mpn_divexact_by9x4(r2, r2, n3p1); - - ASSERT_NOCARRY(mpn_sub_n (r3, r3, r2, n3p1)); - - mpn_sub_n (r4, r2, r4, n3p1); - ASSERT_NOCARRY(mpn_rshift(r4, r4, n3p1, 1)); - ASSERT_NOCARRY(mpn_sub_n (r2, r2, r4, n3p1)); - - mpn_add_n (r5, r5, r1, n3p1); - ASSERT_NOCARRY(mpn_rshift(r5, r5, n3p1, 1)); - - /* last interpolation steps... */ - ASSERT_NOCARRY(mpn_sub_n (r3, r3, r1, n3p1)); - ASSERT_NOCARRY(mpn_sub_n (r1, r1, r5, n3p1)); - /* ... could be mixed with recomposition - ||H-r5|M-r5|L-r5| ||H-r1|M-r1|L-r1| - */ - - /***************************** recomposition *******************************/ - /* - pp[] prior to operations: - |M r0|L r0|___||H r2|M r2|L r2|___||H r4|M r4|L r4|____|H_r6|L r6|pp - - summation scheme for remaining operations: - |__12|n_11|n_10|n__9|n__8|n__7|n__6|n__5|n__4|n__3|n__2|n___|n___|pp - |M r0|L r0|___||H r2|M r2|L r2|___||H r4|M r4|L r4|____|H_r6|L r6|pp - ||H r1|M r1|L r1| ||H r3|M r3|L r3| ||H_r5|M_r5|L_r5| - */ - - cy = mpn_add_n (pp + n, pp + n, r5, n); - cy = mpn_add_1 (pp + 2 * n, r5 + n, n, cy); -#if HAVE_NATIVE_mpn_add_nc - cy = r5[n3] + mpn_add_nc(pp + n3, pp + n3, r5 + 2 * n, n, cy); -#else - MPN_INCR_U (r5 + 2 * n, n + 1, cy); - cy = r5[n3] + mpn_add_n (pp + n3, pp + n3, r5 + 2 * n, n); -#endif - MPN_INCR_U (pp + n3 + n, 2 * n + 1, cy); - - pp[2 * n3]+= mpn_add_n (pp + 5 * n, pp + 5 * n, r3, n); - cy = mpn_add_1 (pp + 2 * n3, r3 + n, n, pp[2 * n3]); -#if HAVE_NATIVE_mpn_add_nc - cy = r3[n3] + mpn_add_nc(pp + 7 * n, pp + 7 * n, r3 + 2 * n, n, cy); -#else - MPN_INCR_U (r3 + 2 * n, n + 1, cy); - cy = r3[n3] + mpn_add_n (pp + 7 * n, pp + 7 * n, r3 + 2 * n, n); -#endif - MPN_INCR_U (pp + 8 * n, 2 * n + 1, cy); - - pp[10*n]+=mpn_add_n (pp + 9 * n, pp + 9 * n, r1, n); - if (half) { - cy = mpn_add_1 (pp + 10 * n, r1 + n, n, pp[10 * n]); -#if HAVE_NATIVE_mpn_add_nc - if (LIKELY (spt > n)) { - cy = r1[n3] + mpn_add_nc(pp + 11 * n, pp + 11 * n, r1 + 2 * n, n, cy); - MPN_INCR_U (pp + 4 * n3, spt - n, cy); - } else { - ASSERT_NOCARRY(mpn_add_nc(pp + 11 * n, pp + 11 * n, r1 + 2 * n, spt, cy)); - } -#else - MPN_INCR_U (r1 + 2 * n, n + 1, cy); - if (LIKELY (spt > n)) { - cy = r1[n3] + mpn_add_n (pp + 11 * n, pp + 11 * n, r1 + 2 * n, n); - MPN_INCR_U (pp + 4 * n3, spt - n, cy); - } else { - ASSERT_NOCARRY(mpn_add_n (pp + 11 * n, pp + 11 * n, r1 + 2 * n, spt)); - } -#endif - } else { - ASSERT_NOCARRY(mpn_add_1 (pp + 10 * n, r1 + n, spt, pp[10 * n])); - } - -#undef r0 -#undef r2 -#undef r4 -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_16pts.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_16pts.c deleted file mode 100644 index 5afe6641f67365ebd076cd9fd1bf57ed73ae72e5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_16pts.c +++ /dev/null @@ -1,527 +0,0 @@ -/* Interpolation for the algorithm Toom-Cook 8.5-way. - - Contributed to the GNU project by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009, 2010, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -#if GMP_NUMB_BITS < 29 -#error Not implemented: Both sublsh_n(,,,28) should be corrected; r2 and r5 need one more LIMB. -#endif - -#if GMP_NUMB_BITS < 28 -#error Not implemented: divexact_by188513325 and _by182712915 will not work. -#endif - - -#if HAVE_NATIVE_mpn_sublsh_n -#define DO_mpn_sublsh_n(dst,src,n,s,ws) mpn_sublsh_n(dst,dst,src,n,s) -#else -static mp_limb_t -DO_mpn_sublsh_n(mp_ptr dst, mp_srcptr src, mp_size_t n, unsigned int s, mp_ptr ws) -{ -#if USE_MUL_1 && 0 - return mpn_submul_1(dst,src,n,CNST_LIMB(1) <<(s)); -#else - mp_limb_t __cy; - __cy = mpn_lshift(ws,src,n,s); - return __cy + mpn_sub_n(dst,dst,ws,n); -#endif -} -#endif - -#if HAVE_NATIVE_mpn_addlsh_n -#define DO_mpn_addlsh_n(dst,src,n,s,ws) mpn_addlsh_n(dst,dst,src,n,s) -#else -static mp_limb_t -DO_mpn_addlsh_n(mp_ptr dst, mp_srcptr src, mp_size_t n, unsigned int s, mp_ptr ws) -{ -#if USE_MUL_1 && 0 - return mpn_addmul_1(dst,src,n,CNST_LIMB(1) <<(s)); -#else - mp_limb_t __cy; - __cy = mpn_lshift(ws,src,n,s); - return __cy + mpn_add_n(dst,dst,ws,n); -#endif -} -#endif - -#if HAVE_NATIVE_mpn_subrsh -#define DO_mpn_subrsh(dst,nd,src,ns,s,ws) mpn_subrsh(dst,nd,src,ns,s) -#else -/* FIXME: This is not a correct definition, it assumes no carry */ -#define DO_mpn_subrsh(dst,nd,src,ns,s,ws) \ -do { \ - mp_limb_t __cy; \ - MPN_DECR_U (dst, nd, src[0] >> s); \ - __cy = DO_mpn_sublsh_n (dst, src + 1, ns - 1, GMP_NUMB_BITS - s, ws); \ - MPN_DECR_U (dst + ns - 1, nd - ns + 1, __cy); \ -} while (0) -#endif - - -/* FIXME: tuneup should decide the best variant */ -#ifndef AORSMUL_FASTER_AORS_AORSLSH -#define AORSMUL_FASTER_AORS_AORSLSH 1 -#endif -#ifndef AORSMUL_FASTER_AORS_2AORSLSH -#define AORSMUL_FASTER_AORS_2AORSLSH 1 -#endif -#ifndef AORSMUL_FASTER_2AORSLSH -#define AORSMUL_FASTER_2AORSLSH 1 -#endif -#ifndef AORSMUL_FASTER_3AORSLSH -#define AORSMUL_FASTER_3AORSLSH 1 -#endif - -#if GMP_NUMB_BITS < 43 -#define BIT_CORRECTION 1 -#define CORRECTION_BITS GMP_NUMB_BITS -#else -#define BIT_CORRECTION 0 -#define CORRECTION_BITS 0 -#endif - -#define BINVERT_9 \ - ((((GMP_NUMB_MAX / 9) << (6 - GMP_NUMB_BITS % 6)) * 8 & GMP_NUMB_MAX) | 0x39) - -#define BINVERT_255 \ - (GMP_NUMB_MAX - ((GMP_NUMB_MAX / 255) << (8 - GMP_NUMB_BITS % 8))) - - /* FIXME: find some more general expressions for inverses */ -#if GMP_LIMB_BITS == 32 -#define BINVERT_2835 (GMP_NUMB_MASK & CNST_LIMB(0x53E3771B)) -#define BINVERT_42525 (GMP_NUMB_MASK & CNST_LIMB(0x9F314C35)) -#define BINVERT_182712915 (GMP_NUMB_MASK & CNST_LIMB(0x550659DB)) -#define BINVERT_188513325 (GMP_NUMB_MASK & CNST_LIMB(0xFBC333A5)) -#define BINVERT_255x182712915L (GMP_NUMB_MASK & CNST_LIMB(0x6FC4CB25)) -#define BINVERT_255x188513325L (GMP_NUMB_MASK & CNST_LIMB(0x6864275B)) -#if GMP_NAIL_BITS == 0 -#define BINVERT_255x182712915H CNST_LIMB(0x1B649A07) -#define BINVERT_255x188513325H CNST_LIMB(0x06DB993A) -#else /* GMP_NAIL_BITS != 0 */ -#define BINVERT_255x182712915H \ - (GMP_NUMB_MASK & CNST_LIMB((0x1B649A07<<GMP_NAIL_BITS) | (0x6FC4CB25>>GMP_NUMB_BITS))) -#define BINVERT_255x188513325H \ - (GMP_NUMB_MASK & CNST_LIMB((0x06DB993A<<GMP_NAIL_BITS) | (0x6864275B>>GMP_NUMB_BITS))) -#endif -#else -#if GMP_LIMB_BITS == 64 -#define BINVERT_2835 (GMP_NUMB_MASK & CNST_LIMB(0x938CC70553E3771B)) -#define BINVERT_42525 (GMP_NUMB_MASK & CNST_LIMB(0xE7B40D449F314C35)) -#define BINVERT_255x182712915 (GMP_NUMB_MASK & CNST_LIMB(0x1B649A076FC4CB25)) -#define BINVERT_255x188513325 (GMP_NUMB_MASK & CNST_LIMB(0x06DB993A6864275B)) -#endif -#endif - -#ifndef mpn_divexact_by255 -#if GMP_NUMB_BITS % 8 == 0 -#define mpn_divexact_by255(dst,src,size) \ - (255 & 1 * mpn_bdiv_dbm1 (dst, src, size, __GMP_CAST (mp_limb_t, GMP_NUMB_MASK / 255))) -#else -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 -#define mpn_divexact_by255(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,CNST_LIMB(255),BINVERT_255,0) -#else -#define mpn_divexact_by255(dst,src,size) mpn_divexact_1(dst,src,size,CNST_LIMB(255)) -#endif -#endif -#endif - -#ifndef mpn_divexact_by255x4 -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 -#define mpn_divexact_by255x4(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,CNST_LIMB(255),BINVERT_255,2) -#else -#define mpn_divexact_by255x4(dst,src,size) mpn_divexact_1(dst,src,size,CNST_LIMB(255)<<2) -#endif -#endif - -#ifndef mpn_divexact_by9x16 -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 -#define mpn_divexact_by9x16(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,CNST_LIMB(9),BINVERT_9,4) -#else -#define mpn_divexact_by9x16(dst,src,size) mpn_divexact_1(dst,src,size,CNST_LIMB(9)<<4) -#endif -#endif - -#ifndef mpn_divexact_by42525x16 -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 && defined(BINVERT_42525) -#define mpn_divexact_by42525x16(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,CNST_LIMB(42525),BINVERT_42525,4) -#else -#define mpn_divexact_by42525x16(dst,src,size) mpn_divexact_1(dst,src,size,CNST_LIMB(42525)<<4) -#endif -#endif - -#ifndef mpn_divexact_by2835x64 -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 && defined(BINVERT_2835) -#define mpn_divexact_by2835x64(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,CNST_LIMB(2835),BINVERT_2835,6) -#else -#define mpn_divexact_by2835x64(dst,src,size) mpn_divexact_1(dst,src,size,CNST_LIMB(2835)<<6) -#endif -#endif - -#ifndef mpn_divexact_by255x182712915 -#if GMP_NUMB_BITS < 36 -#if HAVE_NATIVE_mpn_bdiv_q_2_pi2 && defined(BINVERT_255x182712915H) -/* FIXME: use mpn_bdiv_q_2_pi2 */ -#endif -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 && defined(BINVERT_182712915) -#define mpn_divexact_by255x182712915(dst,src,size) \ - do { \ - mpn_pi1_bdiv_q_1(dst,src,size,CNST_LIMB(182712915),BINVERT_182712915,0); \ - mpn_divexact_by255(dst,dst,size); \ - } while(0) -#else -#define mpn_divexact_by255x182712915(dst,src,size) \ - do { \ - mpn_divexact_1(dst,src,size,CNST_LIMB(182712915)); \ - mpn_divexact_by255(dst,dst,size); \ - } while(0) -#endif -#else /* GMP_NUMB_BITS > 35 */ -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 && defined(BINVERT_255x182712915) -#define mpn_divexact_by255x182712915(dst,src,size) \ - mpn_pi1_bdiv_q_1(dst,src,size,255*CNST_LIMB(182712915),BINVERT_255x182712915,0) -#else -#define mpn_divexact_by255x182712915(dst,src,size) mpn_divexact_1(dst,src,size,255*CNST_LIMB(182712915)) -#endif -#endif /* GMP_NUMB_BITS >?< 36 */ -#endif - -#ifndef mpn_divexact_by255x188513325 -#if GMP_NUMB_BITS < 36 -#if HAVE_NATIVE_mpn_bdiv_q_1_pi2 && defined(BINVERT_255x188513325H) -/* FIXME: use mpn_bdiv_q_1_pi2 */ -#endif -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 && defined(BINVERT_188513325) -#define mpn_divexact_by255x188513325(dst,src,size) \ - do { \ - mpn_pi1_bdiv_q_1(dst,src,size,CNST_LIMB(188513325),BINVERT_188513325,0); \ - mpn_divexact_by255(dst,dst,size); \ - } while(0) -#else -#define mpn_divexact_by255x188513325(dst,src,size) \ - do { \ - mpn_divexact_1(dst,src,size,CNST_LIMB(188513325)); \ - mpn_divexact_by255(dst,dst,size); \ - } while(0) -#endif -#else /* GMP_NUMB_BITS > 35 */ -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 && defined(BINVERT_255x188513325) -#define mpn_divexact_by255x188513325(dst,src,size) \ - mpn_pi1_bdiv_q_1(dst,src,size,255*CNST_LIMB(188513325),BINVERT_255x188513325,0) -#else -#define mpn_divexact_by255x188513325(dst,src,size) mpn_divexact_1(dst,src,size,255*CNST_LIMB(188513325)) -#endif -#endif /* GMP_NUMB_BITS >?< 36 */ -#endif - -/* Interpolation for Toom-8.5 (or Toom-8), using the evaluation - points: infinity(8.5 only), +-8, +-4, +-2, +-1, +-1/4, +-1/2, - +-1/8, 0. More precisely, we want to compute - f(2^(GMP_NUMB_BITS * n)) for a polynomial f of degree 15 (or - 14), given the 16 (rsp. 15) values: - - r0 = limit at infinity of f(x) / x^7, - r1 = f(8),f(-8), - r2 = f(4),f(-4), - r3 = f(2),f(-2), - r4 = f(1),f(-1), - r5 = f(1/4),f(-1/4), - r6 = f(1/2),f(-1/2), - r7 = f(1/8),f(-1/8), - r8 = f(0). - - All couples of the form f(n),f(-n) must be already mixed with - toom_couple_handling(f(n),...,f(-n),...) - - The result is stored in {pp, spt + 7*n (or 8*n)}. - At entry, r8 is stored at {pp, 2n}, - r6 is stored at {pp + 3n, 3n + 1}. - r4 is stored at {pp + 7n, 3n + 1}. - r2 is stored at {pp +11n, 3n + 1}. - r0 is stored at {pp +15n, spt}. - - The other values are 3n+1 limbs each (with most significant limbs small). - - Negative intermediate results are stored two-complemented. - Inputs are destroyed. -*/ - -void -mpn_toom_interpolate_16pts (mp_ptr pp, mp_ptr r1, mp_ptr r3, mp_ptr r5, mp_ptr r7, - mp_size_t n, mp_size_t spt, int half, mp_ptr wsi) -{ - mp_limb_t cy; - mp_size_t n3; - mp_size_t n3p1; - n3 = 3 * n; - n3p1 = n3 + 1; - -#define r6 (pp + n3) /* 3n+1 */ -#define r4 (pp + 7 * n) /* 3n+1 */ -#define r2 (pp +11 * n) /* 3n+1 */ -#define r0 (pp +15 * n) /* s+t <= 2*n */ - - ASSERT( spt <= 2 * n ); - /******************************* interpolation *****************************/ - if( half != 0) { - cy = mpn_sub_n (r4, r4, r0, spt); - MPN_DECR_U (r4 + spt, n3p1 - spt, cy); - - cy = DO_mpn_sublsh_n (r3, r0, spt, 14, wsi); - MPN_DECR_U (r3 + spt, n3p1 - spt, cy); - DO_mpn_subrsh(r6, n3p1, r0, spt, 2, wsi); - - cy = DO_mpn_sublsh_n (r2, r0, spt, 28, wsi); - MPN_DECR_U (r2 + spt, n3p1 - spt, cy); - DO_mpn_subrsh(r5, n3p1, r0, spt, 4, wsi); - - cy = DO_mpn_sublsh_n (r1 + BIT_CORRECTION, r0, spt, 42 - CORRECTION_BITS, wsi); -#if BIT_CORRECTION - cy = mpn_sub_1 (r1 + spt + BIT_CORRECTION, r1 + spt + BIT_CORRECTION, - n3p1 - spt - BIT_CORRECTION, cy); - ASSERT (BIT_CORRECTION > 0 || cy == 0); - /* FIXME: assumes r7[n3p1] is writable (it is if r5 follows). */ - cy = r7[n3p1]; - r7[n3p1] = 0x80; -#else - MPN_DECR_U (r1 + spt + BIT_CORRECTION, n3p1 - spt - BIT_CORRECTION, cy); -#endif - DO_mpn_subrsh(r7, n3p1 + BIT_CORRECTION, r0, spt, 6, wsi); -#if BIT_CORRECTION - /* FIXME: assumes r7[n3p1] is writable. */ - ASSERT ( BIT_CORRECTION > 0 || r7[n3p1] == 0x80 ); - r7[n3p1] = cy; -#endif - }; - - r5[n3] -= DO_mpn_sublsh_n (r5 + n, pp, 2 * n, 28, wsi); - DO_mpn_subrsh(r2 + n, 2 * n + 1, pp, 2 * n, 4, wsi); - -#if HAVE_NATIVE_mpn_add_n_sub_n - mpn_add_n_sub_n (r2, r5, r5, r2, n3p1); -#else - mpn_sub_n (wsi, r5, r2, n3p1); /* can be negative */ - ASSERT_NOCARRY(mpn_add_n (r2, r2, r5, n3p1)); - MP_PTR_SWAP(r5, wsi); -#endif - - r6[n3] -= DO_mpn_sublsh_n (r6 + n, pp, 2 * n, 14, wsi); - DO_mpn_subrsh(r3 + n, 2 * n + 1, pp, 2 * n, 2, wsi); - -#if HAVE_NATIVE_mpn_add_n_sub_n - mpn_add_n_sub_n (r3, r6, r6, r3, n3p1); -#else - ASSERT_NOCARRY(mpn_add_n (wsi, r3, r6, n3p1)); - mpn_sub_n (r6, r6, r3, n3p1); /* can be negative */ - MP_PTR_SWAP(r3, wsi); -#endif - - cy = DO_mpn_sublsh_n (r7 + n + BIT_CORRECTION, pp, 2 * n, 42 - CORRECTION_BITS, wsi); -#if BIT_CORRECTION - MPN_DECR_U (r1 + n, 2 * n + 1, pp[0] >> 6); - cy = DO_mpn_sublsh_n (r1 + n, pp + 1, 2 * n - 1, GMP_NUMB_BITS - 6, wsi); - cy = mpn_sub_1(r1 + 3 * n - 1, r1 + 3 * n - 1, 2, cy); - ASSERT ( BIT_CORRECTION > 0 || cy != 0 ); -#else - r7[n3] -= cy; - DO_mpn_subrsh(r1 + n, 2 * n + 1, pp, 2 * n, 6, wsi); -#endif - -#if HAVE_NATIVE_mpn_add_n_sub_n - mpn_add_n_sub_n (r1, r7, r7, r1, n3p1); -#else - mpn_sub_n (wsi, r7, r1, n3p1); /* can be negative */ - mpn_add_n (r1, r1, r7, n3p1); /* if BIT_CORRECTION != 0, can give a carry. */ - MP_PTR_SWAP(r7, wsi); -#endif - - r4[n3] -= mpn_sub_n (r4+n, r4+n, pp, 2 * n); - -#if AORSMUL_FASTER_2AORSLSH - mpn_submul_1 (r5, r6, n3p1, 1028); /* can be negative */ -#else - DO_mpn_sublsh_n (r5, r6, n3p1, 2, wsi); /* can be negative */ - DO_mpn_sublsh_n (r5, r6, n3p1,10, wsi); /* can be negative */ -#endif - - mpn_submul_1 (r7, r5, n3p1, 1300); /* can be negative */ -#if AORSMUL_FASTER_3AORSLSH - mpn_submul_1 (r7, r6, n3p1, 1052688); /* can be negative */ -#else - DO_mpn_sublsh_n (r7, r6, n3p1, 4, wsi); /* can be negative */ - DO_mpn_sublsh_n (r7, r6, n3p1,12, wsi); /* can be negative */ - DO_mpn_sublsh_n (r7, r6, n3p1,20, wsi); /* can be negative */ -#endif - mpn_divexact_by255x188513325(r7, r7, n3p1); - - mpn_submul_1 (r5, r7, n3p1, 12567555); /* can be negative */ - /* A division by 2835x64 follows. Warning: the operand can be negative! */ - mpn_divexact_by2835x64(r5, r5, n3p1); - if ((r5[n3] & (GMP_NUMB_MAX << (GMP_NUMB_BITS-7))) != 0) - r5[n3] |= (GMP_NUMB_MAX << (GMP_NUMB_BITS-6)); - -#if AORSMUL_FASTER_AORS_AORSLSH - mpn_submul_1 (r6, r7, n3p1, 4095); /* can be negative */ -#else - mpn_add_n (r6, r6, r7, n3p1); /* can give a carry */ - DO_mpn_sublsh_n (r6, r7, n3p1, 12, wsi); /* can be negative */ -#endif -#if AORSMUL_FASTER_2AORSLSH - mpn_addmul_1 (r6, r5, n3p1, 240); /* can be negative */ -#else - DO_mpn_addlsh_n (r6, r5, n3p1, 8, wsi); /* can give a carry */ - DO_mpn_sublsh_n (r6, r5, n3p1, 4, wsi); /* can be negative */ -#endif - /* A division by 255x4 follows. Warning: the operand can be negative! */ - mpn_divexact_by255x4(r6, r6, n3p1); - if ((r6[n3] & (GMP_NUMB_MAX << (GMP_NUMB_BITS-3))) != 0) - r6[n3] |= (GMP_NUMB_MAX << (GMP_NUMB_BITS-2)); - - ASSERT_NOCARRY(DO_mpn_sublsh_n (r3, r4, n3p1, 7, wsi)); - - ASSERT_NOCARRY(DO_mpn_sublsh_n (r2, r4, n3p1, 13, wsi)); - ASSERT_NOCARRY(mpn_submul_1 (r2, r3, n3p1, 400)); - - /* If GMP_NUMB_BITS < 42 next operations on r1 can give a carry!*/ - DO_mpn_sublsh_n (r1, r4, n3p1, 19, wsi); - mpn_submul_1 (r1, r2, n3p1, 1428); - mpn_submul_1 (r1, r3, n3p1, 112896); - mpn_divexact_by255x182712915(r1, r1, n3p1); - - ASSERT_NOCARRY(mpn_submul_1 (r2, r1, n3p1, 15181425)); - mpn_divexact_by42525x16(r2, r2, n3p1); - -#if AORSMUL_FASTER_AORS_2AORSLSH - ASSERT_NOCARRY(mpn_submul_1 (r3, r1, n3p1, 3969)); -#else - ASSERT_NOCARRY(mpn_sub_n (r3, r3, r1, n3p1)); - ASSERT_NOCARRY(DO_mpn_addlsh_n (r3, r1, n3p1, 7, wsi)); - ASSERT_NOCARRY(DO_mpn_sublsh_n (r3, r1, n3p1, 12, wsi)); -#endif - ASSERT_NOCARRY(mpn_submul_1 (r3, r2, n3p1, 900)); - mpn_divexact_by9x16(r3, r3, n3p1); - - ASSERT_NOCARRY(mpn_sub_n (r4, r4, r1, n3p1)); - ASSERT_NOCARRY(mpn_sub_n (r4, r4, r3, n3p1)); - ASSERT_NOCARRY(mpn_sub_n (r4, r4, r2, n3p1)); - - mpn_add_n (r6, r2, r6, n3p1); - ASSERT_NOCARRY(mpn_rshift(r6, r6, n3p1, 1)); - ASSERT_NOCARRY(mpn_sub_n (r2, r2, r6, n3p1)); - - mpn_sub_n (r5, r3, r5, n3p1); - ASSERT_NOCARRY(mpn_rshift(r5, r5, n3p1, 1)); - ASSERT_NOCARRY(mpn_sub_n (r3, r3, r5, n3p1)); - - mpn_add_n (r7, r1, r7, n3p1); - ASSERT_NOCARRY(mpn_rshift(r7, r7, n3p1, 1)); - ASSERT_NOCARRY(mpn_sub_n (r1, r1, r7, n3p1)); - - /* last interpolation steps... */ - /* ... could be mixed with recomposition - ||H-r7|M-r7|L-r7| ||H-r5|M-r5|L-r5| - */ - - /***************************** recomposition *******************************/ - /* - pp[] prior to operations: - |M r0|L r0|___||H r2|M r2|L r2|___||H r4|M r4|L r4|___||H r6|M r6|L r6|____|H_r8|L r8|pp - - summation scheme for remaining operations: - |__16|n_15|n_14|n_13|n_12|n_11|n_10|n__9|n__8|n__7|n__6|n__5|n__4|n__3|n__2|n___|n___|pp - |M r0|L r0|___||H r2|M r2|L r2|___||H r4|M r4|L r4|___||H r6|M r6|L r6|____|H_r8|L r8|pp - ||H r1|M r1|L r1| ||H r3|M r3|L r3| ||H_r5|M_r5|L_r5| ||H r7|M r7|L r7| - */ - - cy = mpn_add_n (pp + n, pp + n, r7, n); - cy = mpn_add_1 (pp + 2 * n, r7 + n, n, cy); -#if HAVE_NATIVE_mpn_add_nc - cy = r7[n3] + mpn_add_nc(pp + n3, pp + n3, r7 + 2 * n, n, cy); -#else - MPN_INCR_U (r7 + 2 * n, n + 1, cy); - cy = r7[n3] + mpn_add_n (pp + n3, pp + n3, r7 + 2 * n, n); -#endif - MPN_INCR_U (pp + 4 * n, 2 * n + 1, cy); - - pp[2 * n3]+= mpn_add_n (pp + 5 * n, pp + 5 * n, r5, n); - cy = mpn_add_1 (pp + 2 * n3, r5 + n, n, pp[2 * n3]); -#if HAVE_NATIVE_mpn_add_nc - cy = r5[n3] + mpn_add_nc(pp + 7 * n, pp + 7 * n, r5 + 2 * n, n, cy); -#else - MPN_INCR_U (r5 + 2 * n, n + 1, cy); - cy = r5[n3] + mpn_add_n (pp + 7 * n, pp + 7 * n, r5 + 2 * n, n); -#endif - MPN_INCR_U (pp + 8 * n, 2 * n + 1, cy); - - pp[10 * n]+= mpn_add_n (pp + 9 * n, pp + 9 * n, r3, n); - cy = mpn_add_1 (pp + 10 * n, r3 + n, n, pp[10 * n]); -#if HAVE_NATIVE_mpn_add_nc - cy = r3[n3] + mpn_add_nc(pp +11 * n, pp +11 * n, r3 + 2 * n, n, cy); -#else - MPN_INCR_U (r3 + 2 * n, n + 1, cy); - cy = r3[n3] + mpn_add_n (pp +11 * n, pp +11 * n, r3 + 2 * n, n); -#endif - MPN_INCR_U (pp +12 * n, 2 * n + 1, cy); - - pp[14 * n]+=mpn_add_n (pp +13 * n, pp +13 * n, r1, n); - if ( half ) { - cy = mpn_add_1 (pp + 14 * n, r1 + n, n, pp[14 * n]); -#if HAVE_NATIVE_mpn_add_nc - if(LIKELY(spt > n)) { - cy = r1[n3] + mpn_add_nc(pp + 15 * n, pp + 15 * n, r1 + 2 * n, n, cy); - MPN_INCR_U (pp + 16 * n, spt - n, cy); - } else { - ASSERT_NOCARRY(mpn_add_nc(pp + 15 * n, pp + 15 * n, r1 + 2 * n, spt, cy)); - } -#else - MPN_INCR_U (r1 + 2 * n, n + 1, cy); - if(LIKELY(spt > n)) { - cy = r1[n3] + mpn_add_n (pp + 15 * n, pp + 15 * n, r1 + 2 * n, n); - MPN_INCR_U (pp + 16 * n, spt - n, cy); - } else { - ASSERT_NOCARRY(mpn_add_n (pp + 15 * n, pp + 15 * n, r1 + 2 * n, spt)); - } -#endif - } else { - ASSERT_NOCARRY(mpn_add_1 (pp + 14 * n, r1 + n, spt, pp[14 * n])); - } - -#undef r0 -#undef r2 -#undef r4 -#undef r6 -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_5pts.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_5pts.c deleted file mode 100644 index 9fa5f0b7a6044c67f7f5eba0ee6ae32f4aeac283..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_5pts.c +++ /dev/null @@ -1,199 +0,0 @@ -/* mpn_toom_interpolate_5pts -- Interpolate for toom3, 33, 42. - - Contributed to the GNU project by Robert Harley. - Improvements by Paul Zimmermann and Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2000-2003, 2005-2007, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpn_toom_interpolate_5pts (mp_ptr c, mp_ptr v2, mp_ptr vm1, - mp_size_t k, mp_size_t twor, int sa, - mp_limb_t vinf0) -{ - mp_limb_t cy, saved; - mp_size_t twok; - mp_size_t kk1; - mp_ptr c1, v1, c3, vinf; - - twok = k + k; - kk1 = twok + 1; - - c1 = c + k; - v1 = c1 + k; - c3 = v1 + k; - vinf = c3 + k; - -#define v0 (c) - /* (1) v2 <- v2-vm1 < v2+|vm1|, (16 8 4 2 1) - (1 -1 1 -1 1) = - thus 0 <= v2 < 50*B^(2k) < 2^6*B^(2k) (15 9 3 3 0) - */ - if (sa) - ASSERT_NOCARRY (mpn_add_n (v2, v2, vm1, kk1)); - else - ASSERT_NOCARRY (mpn_sub_n (v2, v2, vm1, kk1)); - - /* {c,2k} {c+2k,2k+1} {c+4k+1,2r-1} {t,2k+1} {t+2k+1,2k+1} {t+4k+2,2r} - v0 v1 hi(vinf) |vm1| v2-vm1 EMPTY */ - - ASSERT_NOCARRY (mpn_divexact_by3 (v2, v2, kk1)); /* v2 <- v2 / 3 */ - /* (5 3 1 1 0)*/ - - /* {c,2k} {c+2k,2k+1} {c+4k+1,2r-1} {t,2k+1} {t+2k+1,2k+1} {t+4k+2,2r} - v0 v1 hi(vinf) |vm1| (v2-vm1)/3 EMPTY */ - - /* (2) vm1 <- tm1 := (v1 - vm1) / 2 [(1 1 1 1 1) - (1 -1 1 -1 1)] / 2 = - tm1 >= 0 (0 1 0 1 0) - No carry comes out from {v1, kk1} +/- {vm1, kk1}, - and the division by two is exact. - If (sa!=0) the sign of vm1 is negative */ - if (sa) - { -#ifdef HAVE_NATIVE_mpn_rsh1add_n - mpn_rsh1add_n (vm1, v1, vm1, kk1); -#else - ASSERT_NOCARRY (mpn_add_n (vm1, v1, vm1, kk1)); - ASSERT_NOCARRY (mpn_rshift (vm1, vm1, kk1, 1)); -#endif - } - else - { -#ifdef HAVE_NATIVE_mpn_rsh1sub_n - mpn_rsh1sub_n (vm1, v1, vm1, kk1); -#else - ASSERT_NOCARRY (mpn_sub_n (vm1, v1, vm1, kk1)); - ASSERT_NOCARRY (mpn_rshift (vm1, vm1, kk1, 1)); -#endif - } - - /* {c,2k} {c+2k,2k+1} {c+4k+1,2r-1} {t,2k+1} {t+2k+1,2k+1} {t+4k+2,2r} - v0 v1 hi(vinf) tm1 (v2-vm1)/3 EMPTY */ - - /* (3) v1 <- t1 := v1 - v0 (1 1 1 1 1) - (0 0 0 0 1) = (1 1 1 1 0) - t1 >= 0 - */ - vinf[0] -= mpn_sub_n (v1, v1, c, twok); - - /* {c,2k} {c+2k,2k+1} {c+4k+1,2r-1} {t,2k+1} {t+2k+1,2k+1} {t+4k+2,2r} - v0 v1-v0 hi(vinf) tm1 (v2-vm1)/3 EMPTY */ - - /* (4) v2 <- t2 := ((v2-vm1)/3-t1)/2 = (v2-vm1-3*t1)/6 - t2 >= 0 [(5 3 1 1 0) - (1 1 1 1 0)]/2 = (2 1 0 0 0) - */ -#ifdef HAVE_NATIVE_mpn_rsh1sub_n - mpn_rsh1sub_n (v2, v2, v1, kk1); -#else - ASSERT_NOCARRY (mpn_sub_n (v2, v2, v1, kk1)); - ASSERT_NOCARRY (mpn_rshift (v2, v2, kk1, 1)); -#endif - - /* {c,2k} {c+2k,2k+1} {c+4k+1,2r-1} {t,2k+1} {t+2k+1,2k+1} {t+4k+2,2r} - v0 v1-v0 hi(vinf) tm1 (v2-vm1-3t1)/6 EMPTY */ - - /* (5) v1 <- t1-tm1 (1 1 1 1 0) - (0 1 0 1 0) = (1 0 1 0 0) - result is v1 >= 0 - */ - ASSERT_NOCARRY (mpn_sub_n (v1, v1, vm1, kk1)); - - /* We do not need to read the value in vm1, so we add it in {c+k, ...} */ - cy = mpn_add_n (c1, c1, vm1, kk1); - MPN_INCR_U (c3 + 1, twor + k - 1, cy); /* 2n-(3k+1) = 2r+k-1 */ - /* Memory allocated for vm1 is now free, it can be recycled ...*/ - - /* (6) v2 <- v2 - 2*vinf, (2 1 0 0 0) - 2*(1 0 0 0 0) = (0 1 0 0 0) - result is v2 >= 0 */ - saved = vinf[0]; /* Remember v1's highest byte (will be overwritten). */ - vinf[0] = vinf0; /* Set the right value for vinf0 */ -#ifdef HAVE_NATIVE_mpn_sublsh1_n_ip1 - cy = mpn_sublsh1_n_ip1 (v2, vinf, twor); -#else - /* Overwrite unused vm1 */ - cy = mpn_lshift (vm1, vinf, twor, 1); - cy += mpn_sub_n (v2, v2, vm1, twor); -#endif - MPN_DECR_U (v2 + twor, kk1 - twor, cy); - - /* Current matrix is - [1 0 0 0 0; vinf - 0 1 0 0 0; v2 - 1 0 1 0 0; v1 - 0 1 0 1 0; vm1 - 0 0 0 0 1] v0 - Some values already are in-place (we added vm1 in the correct position) - | vinf| v1 | v0 | - | vm1 | - One still is in a separated area - | +v2 | - We have to compute v1-=vinf; vm1 -= v2, - |-vinf| - | -v2 | - Carefully reordering operations we can avoid to compute twice the sum - of the high half of v2 plus the low half of vinf. - */ - - /* Add the high half of t2 in {vinf} */ - if ( LIKELY(twor > k + 1) ) { /* This is the expected flow */ - cy = mpn_add_n (vinf, vinf, v2 + k, k + 1); - MPN_INCR_U (c3 + kk1, twor - k - 1, cy); /* 2n-(5k+1) = 2r-k-1 */ - } else { /* triggered only by very unbalanced cases like - (k+k+(k-2))x(k+k+1) , should be handled by toom32 */ - ASSERT_NOCARRY (mpn_add_n (vinf, vinf, v2 + k, twor)); - } - /* (7) v1 <- v1 - vinf, (1 0 1 0 0) - (1 0 0 0 0) = (0 0 1 0 0) - result is >= 0 */ - /* Side effect: we also subtracted (high half) vm1 -= v2 */ - cy = mpn_sub_n (v1, v1, vinf, twor); /* vinf is at most twor long. */ - vinf0 = vinf[0]; /* Save again the right value for vinf0 */ - vinf[0] = saved; - MPN_DECR_U (v1 + twor, kk1 - twor, cy); /* Treat the last bytes. */ - - /* (8) vm1 <- vm1-v2 (0 1 0 1 0) - (0 1 0 0 0) = (0 0 0 1 0) - Operate only on the low half. - */ - cy = mpn_sub_n (c1, c1, v2, k); - MPN_DECR_U (v1, kk1, cy); - - /********************* Beginning the final phase **********************/ - - /* Most of the recomposition was done */ - - /* add t2 in {c+3k, ...}, but only the low half */ - cy = mpn_add_n (c3, c3, v2, k); - vinf[0] += cy; - ASSERT(vinf[0] >= cy); /* No carry */ - MPN_INCR_U (vinf, twor, vinf0); /* Add vinf0, propagate carry. */ - -#undef v0 -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_6pts.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_6pts.c deleted file mode 100644 index bdb2e95b8920880e0efc46c1aaa850d92cbe8a40..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_6pts.c +++ /dev/null @@ -1,240 +0,0 @@ -/* mpn_toom_interpolate_6pts -- Interpolate for toom43, 52 - - Contributed to the GNU project by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009, 2010, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* For odd divisors, mpn_divexact_1 works fine with two's complement. */ -#ifndef mpn_divexact_by3 -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 && MODLIMB_INVERSE_3 -#define mpn_divexact_by3(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,3,MODLIMB_INVERSE_3,0) -#else -#define mpn_divexact_by3(dst,src,size) mpn_divexact_1(dst,src,size,3) -#endif -#endif - -/* Interpolation for Toom-3.5, using the evaluation points: infinity, - 1, -1, 2, -2. More precisely, we want to compute - f(2^(GMP_NUMB_BITS * n)) for a polynomial f of degree 5, given the - six values - - w5 = f(0), - w4 = f(-1), - w3 = f(1) - w2 = f(-2), - w1 = f(2), - w0 = limit at infinity of f(x) / x^5, - - The result is stored in {pp, 5*n + w0n}. At entry, w5 is stored at - {pp, 2n}, w3 is stored at {pp + 2n, 2n+1}, and w0 is stored at - {pp + 5n, w0n}. The other values are 2n + 1 limbs each (with most - significant limbs small). f(-1) and f(-2) may be negative, signs - determined by the flag bits. All intermediate results are positive. - Inputs are destroyed. - - Interpolation sequence was taken from the paper: "Integer and - Polynomial Multiplication: Towards Optimal Toom-Cook Matrices". - Some slight variations were introduced: adaptation to "gmp - instruction set", and a final saving of an operation by interlacing - interpolation and recomposition phases. -*/ - -void -mpn_toom_interpolate_6pts (mp_ptr pp, mp_size_t n, enum toom6_flags flags, - mp_ptr w4, mp_ptr w2, mp_ptr w1, - mp_size_t w0n) -{ - mp_limb_t cy; - /* cy6 can be stored in w1[2*n], cy4 in w4[0], embankment in w2[0] */ - mp_limb_t cy4, cy6, embankment; - - ASSERT( n > 0 ); - ASSERT( 2*n >= w0n && w0n > 0 ); - -#define w5 pp /* 2n */ -#define w3 (pp + 2 * n) /* 2n+1 */ -#define w0 (pp + 5 * n) /* w0n */ - - /* Interpolate with sequence: - W2 =(W1 - W2)>>2 - W1 =(W1 - W5)>>1 - W1 =(W1 - W2)>>1 - W4 =(W3 - W4)>>1 - W2 =(W2 - W4)/3 - W3 = W3 - W4 - W5 - W1 =(W1 - W3)/3 - // Last steps are mixed with recomposition... - W2 = W2 - W0<<2 - W4 = W4 - W2 - W3 = W3 - W1 - W2 = W2 - W0 - */ - - /* W2 =(W1 - W2)>>2 */ - if (flags & toom6_vm2_neg) - mpn_add_n (w2, w1, w2, 2 * n + 1); - else - mpn_sub_n (w2, w1, w2, 2 * n + 1); - mpn_rshift (w2, w2, 2 * n + 1, 2); - - /* W1 =(W1 - W5)>>1 */ - w1[2*n] -= mpn_sub_n (w1, w1, w5, 2*n); - mpn_rshift (w1, w1, 2 * n + 1, 1); - - /* W1 =(W1 - W2)>>1 */ -#if HAVE_NATIVE_mpn_rsh1sub_n - mpn_rsh1sub_n (w1, w1, w2, 2 * n + 1); -#else - mpn_sub_n (w1, w1, w2, 2 * n + 1); - mpn_rshift (w1, w1, 2 * n + 1, 1); -#endif - - /* W4 =(W3 - W4)>>1 */ - if (flags & toom6_vm1_neg) - { -#if HAVE_NATIVE_mpn_rsh1add_n - mpn_rsh1add_n (w4, w3, w4, 2 * n + 1); -#else - mpn_add_n (w4, w3, w4, 2 * n + 1); - mpn_rshift (w4, w4, 2 * n + 1, 1); -#endif - } - else - { -#if HAVE_NATIVE_mpn_rsh1sub_n - mpn_rsh1sub_n (w4, w3, w4, 2 * n + 1); -#else - mpn_sub_n (w4, w3, w4, 2 * n + 1); - mpn_rshift (w4, w4, 2 * n + 1, 1); -#endif - } - - /* W2 =(W2 - W4)/3 */ - mpn_sub_n (w2, w2, w4, 2 * n + 1); - mpn_divexact_by3 (w2, w2, 2 * n + 1); - - /* W3 = W3 - W4 - W5 */ - mpn_sub_n (w3, w3, w4, 2 * n + 1); - w3[2 * n] -= mpn_sub_n (w3, w3, w5, 2 * n); - - /* W1 =(W1 - W3)/3 */ - mpn_sub_n (w1, w1, w3, 2 * n + 1); - mpn_divexact_by3 (w1, w1, 2 * n + 1); - - /* - [1 0 0 0 0 0; - 0 1 0 0 0 0; - 1 0 1 0 0 0; - 0 1 0 1 0 0; - 1 0 1 0 1 0; - 0 0 0 0 0 1] - - pp[] prior to operations: - |_H w0__|_L w0__|______||_H w3__|_L w3__|_H w5__|_L w5__| - - summation scheme for remaining operations: - |______________5|n_____4|n_____3|n_____2|n______|n______|pp - |_H w0__|_L w0__|______||_H w3__|_L w3__|_H w5__|_L w5__| - || H w4 | L w4 | - || H w2 | L w2 | - || H w1 | L w1 | - ||-H w1 |-L w1 | - |-H w0 |-L w0 ||-H w2 |-L w2 | - */ - cy = mpn_add_n (pp + n, pp + n, w4, 2 * n + 1); - MPN_INCR_U (pp + 3 * n + 1, n, cy); - - /* W2 -= W0<<2 */ -#if HAVE_NATIVE_mpn_sublsh_n || HAVE_NATIVE_mpn_sublsh2_n_ip1 -#if HAVE_NATIVE_mpn_sublsh2_n_ip1 - cy = mpn_sublsh2_n_ip1 (w2, w0, w0n); -#else - cy = mpn_sublsh_n (w2, w2, w0, w0n, 2); -#endif -#else - /* {W4,2*n+1} is now free and can be overwritten. */ - cy = mpn_lshift(w4, w0, w0n, 2); - cy+= mpn_sub_n(w2, w2, w4, w0n); -#endif - MPN_DECR_U (w2 + w0n, 2 * n + 1 - w0n, cy); - - /* W4L = W4L - W2L */ - cy = mpn_sub_n (pp + n, pp + n, w2, n); - MPN_DECR_U (w3, 2 * n + 1, cy); - - /* W3H = W3H + W2L */ - cy4 = w3[2 * n] + mpn_add_n (pp + 3 * n, pp + 3 * n, w2, n); - /* W1L + W2H */ - cy = w2[2 * n] + mpn_add_n (pp + 4 * n, w1, w2 + n, n); - MPN_INCR_U (w1 + n, n + 1, cy); - - /* W0 = W0 + W1H */ - if (LIKELY (w0n > n)) - cy6 = w1[2 * n] + mpn_add_n (w0, w0, w1 + n, n); - else - cy6 = mpn_add_n (w0, w0, w1 + n, w0n); - - /* - summation scheme for the next operation: - |...____5|n_____4|n_____3|n_____2|n______|n______|pp - |...w0___|_w1_w2_|_H w3__|_L w3__|_H w5__|_L w5__| - ...-w0___|-w1_w2 | - */ - /* if(LIKELY(w0n>n)) the two operands below DO overlap! */ - cy = mpn_sub_n (pp + 2 * n, pp + 2 * n, pp + 4 * n, n + w0n); - - /* embankment is a "dirty trick" to avoid carry/borrow propagation - beyond allocated memory */ - embankment = w0[w0n - 1] - 1; - w0[w0n - 1] = 1; - if (LIKELY (w0n > n)) { - if (cy4 > cy6) - MPN_INCR_U (pp + 4 * n, w0n + n, cy4 - cy6); - else - MPN_DECR_U (pp + 4 * n, w0n + n, cy6 - cy4); - MPN_DECR_U (pp + 3 * n + w0n, 2 * n, cy); - MPN_INCR_U (w0 + n, w0n - n, cy6); - } else { - MPN_INCR_U (pp + 4 * n, w0n + n, cy4); - MPN_DECR_U (pp + 3 * n + w0n, 2 * n, cy + cy6); - } - w0[w0n - 1] += embankment; - -#undef w5 -#undef w3 -#undef w0 - -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_7pts.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_7pts.c deleted file mode 100644 index 8a101496fa12b54741baf53d3c97c2c50616dbd5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_7pts.c +++ /dev/null @@ -1,269 +0,0 @@ -/* mpn_toom_interpolate_7pts -- Interpolate for toom44, 53, 62. - - Contributed to the GNU project by Niels Möller. - Improvements by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2006, 2007, 2009, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#define BINVERT_3 MODLIMB_INVERSE_3 - -#define BINVERT_9 \ - ((((GMP_NUMB_MAX / 9) << (6 - GMP_NUMB_BITS % 6)) * 8 & GMP_NUMB_MAX) | 0x39) - -#define BINVERT_15 \ - ((((GMP_NUMB_MAX >> (GMP_NUMB_BITS % 4)) / 15) * 14 * 16 & GMP_NUMB_MAX) + 15) - -/* For the various mpn_divexact_byN here, fall back to using either - mpn_pi1_bdiv_q_1 or mpn_divexact_1. The former has less overhead and is - many faster if it is native. For now, since mpn_divexact_1 is native on - several platforms where mpn_pi1_bdiv_q_1 does not yet exist, do not use - mpn_pi1_bdiv_q_1 unconditionally. FIXME. */ - -/* For odd divisors, mpn_divexact_1 works fine with two's complement. */ -#ifndef mpn_divexact_by3 -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 -#define mpn_divexact_by3(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,3,BINVERT_3,0) -#else -#define mpn_divexact_by3(dst,src,size) mpn_divexact_1(dst,src,size,3) -#endif -#endif - -#ifndef mpn_divexact_by9 -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 -#define mpn_divexact_by9(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,9,BINVERT_9,0) -#else -#define mpn_divexact_by9(dst,src,size) mpn_divexact_1(dst,src,size,9) -#endif -#endif - -#ifndef mpn_divexact_by15 -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 -#define mpn_divexact_by15(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,15,BINVERT_15,0) -#else -#define mpn_divexact_by15(dst,src,size) mpn_divexact_1(dst,src,size,15) -#endif -#endif - -/* Interpolation for toom4, using the evaluation points 0, infinity, - 1, -1, 2, -2, 1/2. More precisely, we want to compute - f(2^(GMP_NUMB_BITS * n)) for a polynomial f of degree 6, given the - seven values - - w0 = f(0), - w1 = f(-2), - w2 = f(1), - w3 = f(-1), - w4 = f(2) - w5 = 64 * f(1/2) - w6 = limit at infinity of f(x) / x^6, - - The result is 6*n + w6n limbs. At entry, w0 is stored at {rp, 2n }, - w2 is stored at { rp + 2n, 2n+1 }, and w6 is stored at { rp + 6n, - w6n }. The other values are 2n + 1 limbs each (with most - significant limbs small). f(-1) and f(-1/2) may be negative, signs - determined by the flag bits. Inputs are destroyed. - - Needs (2*n + 1) limbs of temporary storage. -*/ - -void -mpn_toom_interpolate_7pts (mp_ptr rp, mp_size_t n, enum toom7_flags flags, - mp_ptr w1, mp_ptr w3, mp_ptr w4, mp_ptr w5, - mp_size_t w6n, mp_ptr tp) -{ - mp_size_t m; - mp_limb_t cy; - - m = 2*n + 1; -#define w0 rp -#define w2 (rp + 2*n) -#define w6 (rp + 6*n) - - ASSERT (w6n > 0); - ASSERT (w6n <= 2*n); - - /* Using formulas similar to Marco Bodrato's - - W5 = W5 + W4 - W1 =(W4 - W1)/2 - W4 = W4 - W0 - W4 =(W4 - W1)/4 - W6*16 - W3 =(W2 - W3)/2 - W2 = W2 - W3 - - W5 = W5 - W2*65 May be negative. - W2 = W2 - W6 - W0 - W5 =(W5 + W2*45)/2 Now >= 0 again. - W4 =(W4 - W2)/3 - W2 = W2 - W4 - - W1 = W5 - W1 May be negative. - W5 =(W5 - W3*8)/9 - W3 = W3 - W5 - W1 =(W1/15 + W5)/2 Now >= 0 again. - W5 = W5 - W1 - - where W0 = f(0), W1 = f(-2), W2 = f(1), W3 = f(-1), - W4 = f(2), W5 = f(1/2), W6 = f(oo), - - Note that most intermediate results are positive; the ones that - may be negative are represented in two's complement. We must - never shift right a value that may be negative, since that would - invalidate the sign bit. On the other hand, divexact by odd - numbers work fine with two's complement. - */ - - mpn_add_n (w5, w5, w4, m); - if (flags & toom7_w1_neg) - { -#ifdef HAVE_NATIVE_mpn_rsh1add_n - mpn_rsh1add_n (w1, w1, w4, m); -#else - mpn_add_n (w1, w1, w4, m); ASSERT (!(w1[0] & 1)); - mpn_rshift (w1, w1, m, 1); -#endif - } - else - { -#ifdef HAVE_NATIVE_mpn_rsh1sub_n - mpn_rsh1sub_n (w1, w4, w1, m); -#else - mpn_sub_n (w1, w4, w1, m); ASSERT (!(w1[0] & 1)); - mpn_rshift (w1, w1, m, 1); -#endif - } - mpn_sub (w4, w4, m, w0, 2*n); - mpn_sub_n (w4, w4, w1, m); ASSERT (!(w4[0] & 3)); - mpn_rshift (w4, w4, m, 2); /* w4>=0 */ - - tp[w6n] = mpn_lshift (tp, w6, w6n, 4); - mpn_sub (w4, w4, m, tp, w6n+1); - - if (flags & toom7_w3_neg) - { -#ifdef HAVE_NATIVE_mpn_rsh1add_n - mpn_rsh1add_n (w3, w3, w2, m); -#else - mpn_add_n (w3, w3, w2, m); ASSERT (!(w3[0] & 1)); - mpn_rshift (w3, w3, m, 1); -#endif - } - else - { -#ifdef HAVE_NATIVE_mpn_rsh1sub_n - mpn_rsh1sub_n (w3, w2, w3, m); -#else - mpn_sub_n (w3, w2, w3, m); ASSERT (!(w3[0] & 1)); - mpn_rshift (w3, w3, m, 1); -#endif - } - - mpn_sub_n (w2, w2, w3, m); - - mpn_submul_1 (w5, w2, m, 65); - mpn_sub (w2, w2, m, w6, w6n); - mpn_sub (w2, w2, m, w0, 2*n); - - mpn_addmul_1 (w5, w2, m, 45); ASSERT (!(w5[0] & 1)); - mpn_rshift (w5, w5, m, 1); - mpn_sub_n (w4, w4, w2, m); - - mpn_divexact_by3 (w4, w4, m); - mpn_sub_n (w2, w2, w4, m); - - mpn_sub_n (w1, w5, w1, m); - mpn_lshift (tp, w3, m, 3); - mpn_sub_n (w5, w5, tp, m); - mpn_divexact_by9 (w5, w5, m); - mpn_sub_n (w3, w3, w5, m); - - mpn_divexact_by15 (w1, w1, m); - mpn_add_n (w1, w1, w5, m); ASSERT (!(w1[0] & 1)); - mpn_rshift (w1, w1, m, 1); /* w1>=0 now */ - mpn_sub_n (w5, w5, w1, m); - - /* These bounds are valid for the 4x4 polynomial product of toom44, - * and they are conservative for toom53 and toom62. */ - ASSERT (w1[2*n] < 2); - ASSERT (w2[2*n] < 3); - ASSERT (w3[2*n] < 4); - ASSERT (w4[2*n] < 3); - ASSERT (w5[2*n] < 2); - - /* Addition chain. Note carries and the 2n'th limbs that need to be - * added in. - * - * Special care is needed for w2[2n] and the corresponding carry, - * since the "simple" way of adding it all together would overwrite - * the limb at wp[2*n] and rp[4*n] (same location) with the sum of - * the high half of w3 and the low half of w4. - * - * 7 6 5 4 3 2 1 0 - * | | | | | | | | | - * ||w3 (2n+1)| - * ||w4 (2n+1)| - * ||w5 (2n+1)| ||w1 (2n+1)| - * + | w6 (w6n)| ||w2 (2n+1)| w0 (2n) | (share storage with r) - * ----------------------------------------------- - * r | | | | | | | | | - * c7 c6 c5 c4 c3 Carries to propagate - */ - - cy = mpn_add_n (rp + n, rp + n, w1, m); - MPN_INCR_U (w2 + n + 1, n , cy); - cy = mpn_add_n (rp + 3*n, rp + 3*n, w3, n); - MPN_INCR_U (w3 + n, n + 1, w2[2*n] + cy); - cy = mpn_add_n (rp + 4*n, w3 + n, w4, n); - MPN_INCR_U (w4 + n, n + 1, w3[2*n] + cy); - cy = mpn_add_n (rp + 5*n, w4 + n, w5, n); - MPN_INCR_U (w5 + n, n + 1, w4[2*n] + cy); - if (w6n > n + 1) - { - cy = mpn_add_n (rp + 6*n, rp + 6*n, w5 + n, n + 1); - MPN_INCR_U (rp + 7*n + 1, w6n - n - 1, cy); - } - else - { - ASSERT_NOCARRY (mpn_add_n (rp + 6*n, rp + 6*n, w5 + n, w6n)); -#if WANT_ASSERT - { - mp_size_t i; - for (i = w6n; i <= n; i++) - ASSERT (w5[n + i] == 0); - } -#endif - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_8pts.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_8pts.c deleted file mode 100644 index bba4a3b8124c4e95f7990cf0aee323517d1a2c1f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/toom_interpolate_8pts.c +++ /dev/null @@ -1,212 +0,0 @@ -/* mpn_toom_interpolate_8pts -- Interpolate for toom54, 63, 72. - - Contributed to the GNU project by Marco Bodrato. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009, 2011, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#define BINVERT_3 MODLIMB_INVERSE_3 - -#define BINVERT_15 \ - ((((GMP_NUMB_MAX >> (GMP_NUMB_BITS % 4)) / 15) * 14 * 16 & GMP_NUMB_MAX) + 15) - -#define BINVERT_45 ((BINVERT_15 * BINVERT_3) & GMP_NUMB_MASK) - -#ifndef mpn_divexact_by3 -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 -#define mpn_divexact_by3(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,3,BINVERT_3,0) -#else -#define mpn_divexact_by3(dst,src,size) mpn_divexact_1(dst,src,size,3) -#endif -#endif - -#ifndef mpn_divexact_by45 -#if GMP_NUMB_BITS % 12 == 0 -#define mpn_divexact_by45(dst,src,size) \ - (63 & 19 * mpn_bdiv_dbm1 (dst, src, size, __GMP_CAST (mp_limb_t, GMP_NUMB_MASK / 45))) -#else -#if HAVE_NATIVE_mpn_pi1_bdiv_q_1 -#define mpn_divexact_by45(dst,src,size) mpn_pi1_bdiv_q_1(dst,src,size,45,BINVERT_45,0) -#else -#define mpn_divexact_by45(dst,src,size) mpn_divexact_1(dst,src,size,45) -#endif -#endif -#endif - -#if HAVE_NATIVE_mpn_sublsh2_n_ip1 -#define DO_mpn_sublsh2_n(dst,src,n,ws) mpn_sublsh2_n_ip1(dst,src,n) -#else -#define DO_mpn_sublsh2_n(dst,src,n,ws) DO_mpn_sublsh_n(dst,src,n,2,ws) -#endif - -#if HAVE_NATIVE_mpn_sublsh_n -#define DO_mpn_sublsh_n(dst,src,n,s,ws) mpn_sublsh_n (dst,dst,src,n,s) -#else -static mp_limb_t -DO_mpn_sublsh_n (mp_ptr dst, mp_srcptr src, mp_size_t n, unsigned int s, mp_ptr ws) -{ -#if USE_MUL_1 && 0 - return mpn_submul_1(dst,src,n,CNST_LIMB(1) <<(s)); -#else - mp_limb_t __cy; - __cy = mpn_lshift (ws,src,n,s); - return __cy + mpn_sub_n (dst,dst,ws,n); -#endif -} -#endif - - -#if HAVE_NATIVE_mpn_subrsh -#define DO_mpn_subrsh(dst,nd,src,ns,s,ws) mpn_subrsh (dst,nd,src,ns,s) -#else -/* This is not a correct definition, it assumes no carry */ -#define DO_mpn_subrsh(dst,nd,src,ns,s,ws) \ -do { \ - mp_limb_t __cy; \ - MPN_DECR_U (dst, nd, src[0] >> s); \ - __cy = DO_mpn_sublsh_n (dst, src + 1, ns - 1, GMP_NUMB_BITS - s, ws); \ - MPN_DECR_U (dst + ns - 1, nd - ns + 1, __cy); \ -} while (0) -#endif - -/* Interpolation for Toom-4.5 (or Toom-4), using the evaluation - points: infinity(4.5 only), 4, -4, 2, -2, 1, -1, 0. More precisely, - we want to compute f(2^(GMP_NUMB_BITS * n)) for a polynomial f of - degree 7 (or 6), given the 8 (rsp. 7) values: - - r1 = limit at infinity of f(x) / x^7, - r2 = f(4), - r3 = f(-4), - r4 = f(2), - r5 = f(-2), - r6 = f(1), - r7 = f(-1), - r8 = f(0). - - All couples of the form f(n),f(-n) must be already mixed with - toom_couple_handling(f(n),...,f(-n),...) - - The result is stored in {pp, spt + 7*n (or 6*n)}. - At entry, r8 is stored at {pp, 2n}, - r5 is stored at {pp + 3n, 3n + 1}. - - The other values are 2n+... limbs each (with most significant limbs small). - - All intermediate results are positive. - Inputs are destroyed. -*/ - -void -mpn_toom_interpolate_8pts (mp_ptr pp, mp_size_t n, - mp_ptr r3, mp_ptr r7, - mp_size_t spt, mp_ptr ws) -{ - mp_limb_signed_t cy; - mp_ptr r5, r1; - r5 = (pp + 3 * n); /* 3n+1 */ - r1 = (pp + 7 * n); /* spt */ - - /******************************* interpolation *****************************/ - - DO_mpn_subrsh(r3+n, 2 * n + 1, pp, 2 * n, 4, ws); - cy = DO_mpn_sublsh_n (r3, r1, spt, 12, ws); - MPN_DECR_U (r3 + spt, 3 * n + 1 - spt, cy); - - DO_mpn_subrsh(r5+n, 2 * n + 1, pp, 2 * n, 2, ws); - cy = DO_mpn_sublsh_n (r5, r1, spt, 6, ws); - MPN_DECR_U (r5 + spt, 3 * n + 1 - spt, cy); - - r7[3*n] -= mpn_sub_n (r7+n, r7+n, pp, 2 * n); - cy = mpn_sub_n (r7, r7, r1, spt); - MPN_DECR_U (r7 + spt, 3 * n + 1 - spt, cy); - - ASSERT_NOCARRY(mpn_sub_n (r3, r3, r5, 3 * n + 1)); - ASSERT_NOCARRY(mpn_rshift(r3, r3, 3 * n + 1, 2)); - - ASSERT_NOCARRY(mpn_sub_n (r5, r5, r7, 3 * n + 1)); - - ASSERT_NOCARRY(mpn_sub_n (r3, r3, r5, 3 * n + 1)); - - mpn_divexact_by45 (r3, r3, 3 * n + 1); - - ASSERT_NOCARRY(mpn_divexact_by3 (r5, r5, 3 * n + 1)); - - ASSERT_NOCARRY(DO_mpn_sublsh2_n (r5, r3, 3 * n + 1, ws)); - - /* last interpolation steps... */ - /* ... are mixed with recomposition */ - - /***************************** recomposition *******************************/ - /* - pp[] prior to operations: - |_H r1|_L r1|____||_H r5|_M_r5|_L r5|_____|_H r8|_L r8|pp - - summation scheme for remaining operations: - |____8|n___7|n___6|n___5|n___4|n___3|n___2|n____|n____|pp - |_H r1|_L r1|____||_H*r5|_M r5|_L r5|_____|_H_r8|_L r8|pp - ||_H r3|_M r3|_L*r3| - ||_H_r7|_M_r7|_L_r7| - ||-H r3|-M r3|-L*r3| - ||-H*r5|-M_r5|-L_r5| - */ - - cy = mpn_add_n (pp + n, pp + n, r7, n); /* Hr8+Lr7-Lr5 */ - cy-= mpn_sub_n (pp + n, pp + n, r5, n); - if (0 > cy) - MPN_DECR_U (r7 + n, 2*n + 1, 1); - else - MPN_INCR_U (r7 + n, 2*n + 1, cy); - - cy = mpn_sub_n (pp + 2*n, r7 + n, r5 + n, n); /* Mr7-Mr5 */ - MPN_DECR_U (r7 + 2*n, n + 1, cy); - - cy = mpn_add_n (pp + 3*n, r5, r7+ 2*n, n+1); /* Hr7+Lr5 */ - r5[3*n]+= mpn_add_n (r5 + 2*n, r5 + 2*n, r3, n); /* Hr5+Lr3 */ - cy-= mpn_sub_n (pp + 3*n, pp + 3*n, r5 + 2*n, n+1); /* Hr7-Hr5+Lr5-Lr3 */ - if (UNLIKELY(0 > cy)) - MPN_DECR_U (r5 + n + 1, 2*n, 1); - else - MPN_INCR_U (r5 + n + 1, 2*n, cy); - - ASSERT_NOCARRY(mpn_sub_n(pp + 4*n, r5 + n, r3 + n, 2*n +1)); /* Mr5-Mr3,Hr5-Hr3 */ - - cy = mpn_add_1 (pp + 6*n, r3 + n, n, pp[6*n]); - MPN_INCR_U (r3 + 2*n, n + 1, cy); - cy = mpn_add_n (pp + 7*n, pp + 7*n, r3 + 2*n, n); - if (LIKELY(spt != n)) - MPN_INCR_U (pp + 8*n, spt - n, cy + r3[3*n]); - else - ASSERT (r3[3*n] + cy == 0); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/trialdiv.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/trialdiv.c deleted file mode 100644 index 09cecfd410874814ebc8087c92293759a5a57e52..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/trialdiv.c +++ /dev/null @@ -1,132 +0,0 @@ -/* mpn_trialdiv -- find small factors of an mpn number using trial division. - - Contributed to the GNU project by Torbjorn Granlund. - - THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE. IT IS ONLY - SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT IT WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2009, 2010, 2012, 2013 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* - This function finds the first (smallest) factor represented in - trialdivtab.h. It does not stop the factoring effort just because it has - reached some sensible limit, such as the square root of the input number. - - The caller can limit the factoring effort by passing NPRIMES. The function - will then divide until that limit, or perhaps a few primes more. A position - which only mpn_trialdiv can make sense of is returned in the WHERE - parameter. It can be used for restarting the factoring effort; the first - call should pass 0 here. - - Input: 1. A non-negative number T = {tp,tn} - 2. NPRIMES as described above, - 3. *WHERE as described above. - Output: 1. *WHERE updated as described above. - 2. Return value is non-zero if we found a factor, else zero - To get the actual prime factor, compute the mod B inverse - of the return value. -*/ - -#include "gmp.h" -#include "gmp-impl.h" - -struct gmp_primes_dtab { - mp_limb_t binv; - mp_limb_t lim; -}; - -struct gmp_primes_ptab { - mp_limb_t ppp; /* primes, multiplied together */ - mp_limb_t cps[7]; /* ppp values pre-computed for mpn_mod_1s_4p */ - unsigned int idx:24; /* index of first primes in dtab */ - unsigned int np :8; /* number of primes related to this entry */ -}; - - -static const struct gmp_primes_dtab gmp_primes_dtab[] = -{ -#define WANT_dtab -#define P(p,inv,lim) {inv,lim} -#include "trialdivtab.h" -#undef WANT_dtab -#undef P - {0,0} -}; - -static const struct gmp_primes_ptab gmp_primes_ptab[] = -{ -#define WANT_ptab -#include "trialdivtab.h" -#undef WANT_ptab -}; - -#define PTAB_LINES (sizeof (gmp_primes_ptab) / sizeof (gmp_primes_ptab[0])) - -/* FIXME: We could optimize out one of the outer loop conditions if we - had a final ptab entry with a huge np field. */ -mp_limb_t -mpn_trialdiv (mp_srcptr tp, mp_size_t tn, mp_size_t nprimes, int *where) -{ - mp_limb_t ppp; - const mp_limb_t *cps; - const struct gmp_primes_dtab *dp; - long i, j, idx, np; - mp_limb_t r, q; - - ASSERT (tn >= 1); - - for (i = *where; i < PTAB_LINES; i++) - { - ppp = gmp_primes_ptab[i].ppp; - cps = gmp_primes_ptab[i].cps; - - r = mpn_mod_1s_4p (tp, tn, ppp << cps[1], cps); - - idx = gmp_primes_ptab[i].idx; - np = gmp_primes_ptab[i].np; - - /* Check divisibility by individual primes. */ - dp = &gmp_primes_dtab[idx] + np; - for (j = -np; j < 0; j++) - { - q = r * dp[j].binv; - if (q <= dp[j].lim) - { - *where = i; - return dp[j].binv; - } - } - - nprimes -= np; - if (nprimes <= 0) - return 0; - } - return 0; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/udiv_w_sdiv.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/udiv_w_sdiv.c deleted file mode 100644 index 7136429f0f8b67699240c5235e7bd51898502ddc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/udiv_w_sdiv.c +++ /dev/null @@ -1,142 +0,0 @@ -/* mpn_udiv_w_sdiv -- implement udiv_qrnnd on machines with only signed - division. - - Contributed by Peter L. Montgomery. - - THIS IS AN INTERNAL FUNCTION WITH A MUTABLE INTERFACE. IT IS ONLY SAFE - TO REACH THIS FUNCTION THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS - ALMOST GUARANTEED THAT THIS FUNCTION WILL CHANGE OR DISAPPEAR IN A FUTURE - GNU MP RELEASE. - - -Copyright 1992, 1994, 1996, 2000, 2011, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -mp_limb_t -mpn_udiv_w_sdiv (mp_limb_t *rp, mp_limb_t a1, mp_limb_t a0, mp_limb_t d) -{ - mp_limb_t q, r; - mp_limb_t c0, c1, b1; - - ASSERT (d != 0); - ASSERT (a1 < d); - - if ((mp_limb_signed_t) d >= 0) - { - if (a1 < d - a1 - (a0 >> (GMP_LIMB_BITS - 1))) - { - /* dividend, divisor, and quotient are nonnegative */ - sdiv_qrnnd (q, r, a1, a0, d); - } - else - { - /* Compute c1*2^32 + c0 = a1*2^32 + a0 - 2^31*d */ - sub_ddmmss (c1, c0, a1, a0, d >> 1, d << (GMP_LIMB_BITS - 1)); - /* Divide (c1*2^32 + c0) by d */ - sdiv_qrnnd (q, r, c1, c0, d); - /* Add 2^31 to quotient */ - q += (mp_limb_t) 1 << (GMP_LIMB_BITS - 1); - } - } - else - { - b1 = d >> 1; /* d/2, between 2^30 and 2^31 - 1 */ - c1 = a1 >> 1; /* A/2 */ - c0 = (a1 << (GMP_LIMB_BITS - 1)) + (a0 >> 1); - - if (a1 < b1) /* A < 2^32*b1, so A/2 < 2^31*b1 */ - { - sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */ - - r = 2*r + (a0 & 1); /* Remainder from A/(2*b1) */ - if ((d & 1) != 0) - { - if (r >= q) - r = r - q; - else if (q - r <= d) - { - r = r - q + d; - q--; - } - else - { - r = r - q + 2*d; - q -= 2; - } - } - } - else if (c1 < b1) /* So 2^31 <= (A/2)/b1 < 2^32 */ - { - c1 = (b1 - 1) - c1; - c0 = ~c0; /* logical NOT */ - - sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */ - - q = ~q; /* (A/2)/b1 */ - r = (b1 - 1) - r; - - r = 2*r + (a0 & 1); /* A/(2*b1) */ - - if ((d & 1) != 0) - { - if (r >= q) - r = r - q; - else if (q - r <= d) - { - r = r - q + d; - q--; - } - else - { - r = r - q + 2*d; - q -= 2; - } - } - } - else /* Implies c1 = b1 */ - { /* Hence a1 = d - 1 = 2*b1 - 1 */ - if (a0 >= -d) - { - q = -CNST_LIMB(1); - r = a0 + d; - } - else - { - q = -CNST_LIMB(2); - r = a0 + 2*d; - } - } - } - - *rp = r; - return q; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/zero.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/zero.c deleted file mode 100644 index e6e7fd3101e74a1a45a43ecc0d1916035579acf4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/zero.c +++ /dev/null @@ -1,42 +0,0 @@ -/* mpn_zero - -Copyright 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -mpn_zero (mp_ptr rp, mp_size_t n) -{ - mp_size_t i; - - rp += n; - for (i = -n; i != 0; i++) - rp[i] = 0; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/zero_p.c b/src/plugins/e-acsl/contrib/libgmp/mpn/generic/zero_p.c deleted file mode 100644 index 44c1ff20305263861b29bc1b6434912d12dadf90..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/generic/zero_p.c +++ /dev/null @@ -1,34 +0,0 @@ -/* mpn_zero_p (x,xsize) -- Return 1 if X is zero, 0 if it is non-zero. - -Copyright 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define __GMP_FORCE_mpn_zero_p 1 - -#include "gmp.h" -#include "gmp-impl.h" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/README b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/README deleted file mode 100644 index 45c2d6337fe40d6e4159956d16e8128b0633e375..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/README +++ /dev/null @@ -1,281 +0,0 @@ -Copyright 2000-2005 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - IA-64 MPN SUBROUTINES - - -This directory contains mpn functions for the IA-64 architecture. - - -CODE ORGANIZATION - - mpn/ia64 itanium-2, and generic ia64 - -The code here has been optimized primarily for Itanium 2. Very few Itanium 1 -chips were ever sold, and Itanium 2 is more powerful, so the latter is what -we concentrate on. - - - -CHIP NOTES - -The IA-64 ISA keeps instructions three and three in 128 bit bundles. -Programmers/compilers need to put explicit breaks `;;' when there are WAW or -RAW dependencies, with some notable exceptions. Such "breaks" are typically -at the end of a bundle, but can be put between operations within some bundle -types too. - -The Itanium 1 and Itanium 2 implementations can under ideal conditions -execute two bundles per cycle. The Itanium 1 allows 4 of these instructions -to do integer operations, while the Itanium 2 allows all 6 to be integer -operations. - -Taken cloop branches seem to insert a bubble into the pipeline most of the -time on Itanium 1. - -Loads to the fp registers bypass the L1 cache and thus get extremely long -latencies, 9 cycles on the Itanium 1 and 6 cycles on the Itanium 2. - -The software pipeline stuff using br.ctop instruction causes delays, since -many issue slots are taken up by instructions with zero predicates, and -since many extra instructions are needed to set things up. These features -are clearly designed for code density, not speed. - -Misc pipeline limitations (Itanium 1): -* The getf.sig instruction can only execute in M0. -* At most four integer instructions/cycle. -* Nops take up resources like any plain instructions. - -Misc pipeline limitations (Itanium 2): -* The getf.sig instruction can only execute in M0. -* Nops take up resources like any plain instructions. - - -ASSEMBLY SYNTAX - -.align pads with nops in a text segment, but gas 2.14 and earlier -incorrectly byte-swaps its nop bundle in big endian mode (eg. hpux), making -it come out as break instructions. We use the ALIGN() macro in -mpn/ia64/ia64-defs.m4 when it might be executed across. That macro -suppresses any .align if the problem is detected by configure. Lack of -alignment might hurt performance but will at least be correct. - -foo:: to create a global symbol is not accepted by gas. Use separate -".global foo" and "foo:" instead. - -.global is the standard global directive. gas accepts .globl, but hpux "as" -doesn't. - -.proc / .endp generates the appropriate .type and .size information for ELF, -so the latter directives don't need to be given explicitly. - -.pred.rel "mutex"... is standard for annotating predicate register -relationships. gas also accepts .pred.rel.mutex, but hpux "as" doesn't. - -.pred directives can't be put on a line with a label, like -".Lfoo: .pred ...", the HP assembler on HP-UX 11.23 rejects that. -gas is happy with it, and past versions of HP had seemed ok. - -// is the standard comment sequence, but we prefer "C" since it inhibits m4 -macro expansion. See comments in ia64-defs.m4. - - -REGISTER USAGE - -Special: - r0: constant 0 - r1: global pointer (gp) - r8: return value - r12: stack pointer (sp) - r13: thread pointer (tp) -Caller-saves: r8-r11 r14-r31 f6-f15 f32-f127 -Caller-saves but rotating: r32- - - -================================================================ -mpn_add_n, mpn_sub_n: - -The current code runs at 1.25 c/l on Itanium 2. - -================================================================ -mpn_mul_1: - -The current code runs at 2 c/l on Itanium 2. - -Using a blocked approach, working off of 4 separate places in the operands, -one could make use of the xma accumulation, and approach 1 c/l. - - ldf8 [up] - xma.l - xma.hu - stf8 [wrp] - -================================================================ -mpn_addmul_1: - -The current code runs at 2 c/l on Itanium 2. - -It seems possible to use a blocked approach, as with mpn_mul_1. We should -read rp[] to integer registers, allowing for just one getf.sig per cycle. - - ld8 [rp] - ldf8 [up] - xma.l - xma.hu - getf.sig - add+add+cmp+cmp - st8 [wrp] - -These 10 instructions can be scheduled to approach 1.667 cycles, and with -the 4 cycle latency of xma, this means we need at least 3 blocks. Using -ldfp8 we could approach 1.583 c/l. - -================================================================ -mpn_submul_1: - -The current code runs at 2.25 c/l on Itanium 2. Getting to 2 c/l requires -ldfp8 with all alignment headache that implies. - -================================================================ -mpn_addmul_N - -For best speed, we need to give up using mpn_addmul_2 as the main multiply -building block, and instead take multiple v limbs per loop. For the Itanium -1, we need to take about 8 limbs at a time for full speed. For the Itanium -2, something like mpn_addmul_4 should be enough. - -The add+cmp+cmp+add we use on the other codes is optimal for shortening -recurrencies (1 cycle) but the sequence takes up 4 execution slots. When -recurrency depth is not critical, a more standard 3-cycle add+cmp+add is -better. - -/* First load the 8 values from v */ - ldfp8 v0, v1 = [r35], 16;; - ldfp8 v2, v3 = [r35], 16;; - ldfp8 v4, v5 = [r35], 16;; - ldfp8 v6, v7 = [r35], 16;; - -/* In the inner loop, get a new U limb and store a result limb. */ - mov lc = un -Loop: ldf8 u0 = [r33], 8 - ld8 r0 = [r32] - xma.l lp0 = v0, u0, hp0 - xma.hu hp0 = v0, u0, hp0 - xma.l lp1 = v1, u0, hp1 - xma.hu hp1 = v1, u0, hp1 - xma.l lp2 = v2, u0, hp2 - xma.hu hp2 = v2, u0, hp2 - xma.l lp3 = v3, u0, hp3 - xma.hu hp3 = v3, u0, hp3 - xma.l lp4 = v4, u0, hp4 - xma.hu hp4 = v4, u0, hp4 - xma.l lp5 = v5, u0, hp5 - xma.hu hp5 = v5, u0, hp5 - xma.l lp6 = v6, u0, hp6 - xma.hu hp6 = v6, u0, hp6 - xma.l lp7 = v7, u0, hp7 - xma.hu hp7 = v7, u0, hp7 - getf.sig l0 = lp0 - getf.sig l1 = lp1 - getf.sig l2 = lp2 - getf.sig l3 = lp3 - getf.sig l4 = lp4 - getf.sig l5 = lp5 - getf.sig l6 = lp6 - add+cmp+add xx, l0, r0 - add+cmp+add acc0, acc1, l1 - add+cmp+add acc1, acc2, l2 - add+cmp+add acc2, acc3, l3 - add+cmp+add acc3, acc4, l4 - add+cmp+add acc4, acc5, l5 - add+cmp+add acc5, acc6, l6 - getf.sig acc6 = lp7 - st8 [r32] = xx, 8 - br.cloop Loop - - 49 insn at max 6 insn/cycle: 8.167 cycles/limb8 - 11 memops at max 2 memops/cycle: 5.5 cycles/limb8 - 16 fpops at max 2 fpops/cycle: 8 cycles/limb8 - 21 intops at max 4 intops/cycle: 5.25 cycles/limb8 - 11+21 memops+intops at max 4/cycle 8 cycles/limb8 - -================================================================ -mpn_lshift, mpn_rshift - -The current code runs at 1 cycle/limb on Itanium 2. - -Using 63 separate loops, we could use the double-word shrp instruction. -That instruction has a plain single-cycle latency. We need 63 loops since -this instruction only accept immediate count. That would lead to a somewhat -silly code size, but the speed would be 0.75 c/l on Itanium 2 (by using shrp -each cycle plus shl/shr going down I1 for a further limb every second -cycle). - -================================================================ -mpn_copyi, mpn_copyd - -The current code runs at 0.5 c/l on Itanium 2. But that is just for L1 -cache hit. The 4-way unrolled loop takes just 2 cycles, and thus load-use -scheduling isn't great. It might be best to actually use modulo scheduled -loops, since that will allow us to do better load-use scheduling without too -much unrolling. - -Depending on size or operand alignment, we get 1 c/l or 0.5 c/l on Itanium -2, according to tune/speed. Cache bank conflicts? - - - -REFERENCES - -Intel Itanium Architecture Software Developer's Manual, volumes 1 to 3, -Intel document 245317-004, 245318-004, 245319-004 October 2002. Volume 1 -includes an Itanium optimization guide. - -Intel Itanium Processor-specific Application Binary Interface (ABI), Intel -document 245370-003, May 2001. Describes C type sizes, dynamic linking, -etc. - -Intel Itanium Architecture Assembly Language Reference Guide, Intel document -248801-004, 2000-2002. Describes assembly instruction syntax and other -directives. - -Itanium Software Conventions and Runtime Architecture Guide, Intel document -245358-003, May 2001. Describes calling conventions, including stack -unwinding requirements. - -Intel Itanium Processor Reference Manual for Software Optimization, Intel -document 245473-003, November 2001. - -Intel Itanium-2 Processor Reference Manual for Software Development and -Optimization, Intel document 251110-003, May 2004. - -All the above documents can be found online at - - http://developer.intel.com/design/itanium/manuals.htm diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/add_n_sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/add_n_sub_n.asm deleted file mode 100644 index c15afaa59c7d6d73738c17868ce438b33fea4f4f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/add_n_sub_n.asm +++ /dev/null @@ -1,307 +0,0 @@ -dnl IA-64 mpn_add_n_sub_n -- mpn parallel addition and subtraction. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: ? -C Itanium 2: 2.25 - -C INPUT PARAMETERS -define(`sp', `r32') -define(`dp', `r33') -define(`up', `r34') -define(`vp', `r35') -define(`n', `r36') - -C Some useful aliases for registers we use -define(`u0',`r16') define(`u1',`r17') define(`u2',`r18') define(`u3',`r19') -define(`v0',`r20') define(`v1',`r21') define(`v2',`r22') define(`v3',`r23') -define(`s0',`r24') define(`s1',`r25') define(`s2',`r26') define(`s3',`r27') -define(`d0',`r28') define(`d1',`r29') define(`d2',`r30') define(`d3',`r31') -define(`up0',`up') -define(`up1',`r14') -define(`vp0',`vp') -define(`vp1',`r15') - - -ASM_START() -PROLOGUE(mpn_add_n_sub_n) - .prologue - .save ar.lc, r2 - .body -ifdef(`HAVE_ABI_32',` - addp4 sp = 0, sp C M I - addp4 dp = 0, dp C M I - nop.i 0 - addp4 up = 0, up C M I - addp4 vp = 0, vp C M I - zxt4 n = n C I - ;; -') - - and r9 = 3, n C M I - mov.i r2 = ar.lc C I0 - add up1 = 8, up0 C M I - add vp1 = 8, vp0 C M I - add r8 = -2, n C M I - add r10 = 256, up C M I - ;; - shr.u r8 = r8, 2 C I0 - cmp.eq p10, p0 = 0, r9 C M I - cmp.eq p11, p0 = 2, r9 C M I - cmp.eq p12, p0 = 3, r9 C M I - add r11 = 256, vp C M I - ;; - mov.i ar.lc = r8 C I0 - (p10) br L(b0) C B - (p11) br L(b2) C B - (p12) br L(b3) C B - -L(b1): ld8 u3 = [up0], 8 C M01 - add up1 = 8, up1 C M I - cmpltu p14, p15 = 4, n C M I - ld8 v3 = [vp0], 8 C M01 - add vp1 = 8, vp1 C M I - ;; - add s3 = u3, v3 C M I - sub d3 = u3, v3 C M I - mov r8 = 0 C M I - ;; - cmpltu p9, p0 = s3, v3 C carry from add3 M I - cmpltu p13, p0 = u3, v3 C borrow from sub3 M I - (p15) br L(cj1) C B - st8 [sp] = s3, 8 C M23 - st8 [dp] = d3, 8 C M23 - br L(c0) C B - -L(b0): cmp.ne p9, p0 = r0, r0 C M I - cmp.ne p13, p0 = r0, r0 C M I -L(c0): ld8 u0 = [up0], 16 C M01 - ld8 u1 = [up1], 16 C M01 - ;; - ld8 v0 = [vp0], 16 C M01 - ld8 v1 = [vp1], 16 C M01 - ;; - ld8 u2 = [up0], 16 C M01 - ld8 u3 = [up1], 16 C M01 - ;; - ld8 v2 = [vp0], 16 C M01 - ld8 v3 = [vp1], 16 C M01 - ;; - add s0 = u0, v0 C M I - add s1 = u1, v1 C M I - sub d0 = u0, v0 C M I - sub d1 = u1, v1 C M I - ;; - cmpltu p6, p0 = s0, v0 C carry from add0 M I - cmpltu p7, p0 = s1, v1 C carry from add1 M I - cmpltu p10, p0 = u0, v0 C borrow from sub0 M I - cmpltu p11, p0 = u1, v1 C borrow from sub1 M I - ;; - nop 0 C - br.cloop.dptk L(top) C B - br L(end) C B - -L(b3): ld8 u1 = [up0], 8 C M01 - add up1 = 8, up1 C M I - ld8 v1 = [vp0], 8 C M01 - ;; - add vp1 = 8, vp1 C M I - add s1 = u1, v1 C M I - sub d1 = u1, v1 C M I - ;; - cmpltu p7, p0 = s1, v1 C carry from add1 M I - cmpltu p11, p0 = u1, v1 C borrow from sub1 M I - ;; - st8 [sp] = s1, 8 C M23 - st8 [dp] = d1, 8 C M23 - br L(c2) C B - - ALIGN(32) -L(b2): cmp.ne p7, p0 = r0, r0 C M I - cmp.ne p11, p0 = r0, r0 C M I - nop 0 -L(c2): ld8 u2 = [up0], 16 C M01 - ld8 u3 = [up1], 16 C M01 - cmpltu p14, p0 = 4, n C M I - ;; - ld8 v2 = [vp0], 16 C M01 - ld8 v3 = [vp1], 16 C M01 - (p14) br L(gt4) C B - ;; - add s2 = u2, v2 C M I - add s3 = u3, v3 C M I - sub d2 = u2, v2 C M I - sub d3 = u3, v3 C M I - ;; - cmpltu p8, p0 = s2, v2 C carry from add0 M I - cmpltu p9, p0 = s3, v3 C carry from add3 M I - cmpltu p12, p0 = u2, v2 C borrow from sub2 M I - cmpltu p13, p0 = u3, v3 C borrow from sub3 M I - br L(cj2) C B - ;; -L(gt4): ld8 u0 = [up0], 16 C M01 - ld8 u1 = [up1], 16 C M01 - ;; - ld8 v0 = [vp0], 16 C M01 - ld8 v1 = [vp1], 16 C M01 - ;; - add s2 = u2, v2 C M I - add s3 = u3, v3 C M I - sub d2 = u2, v2 C M I - sub d3 = u3, v3 C M I - ;; - cmpltu p8, p0 = s2, v2 C carry from add0 M I - cmpltu p9, p0 = s3, v3 C carry from add1 M I - cmpltu p12, p0 = u2, v2 C borrow from sub0 M I - cmpltu p13, p0 = u3, v3 C borrow from sub1 M I - br.cloop.dptk L(mid) C B - - ALIGN(32) -L(top): - ld8 u0 = [up0], 16 C M01 - ld8 u1 = [up1], 16 C M01 - (p9) cmpeqor p6, p0 = -1, s0 C M I - (p9) add s0 = 1, s0 C M I - (p13) cmpeqor p10, p0 = 0, d0 C M I - (p13) add d0 = -1, d0 C M I - ;; - ld8 v0 = [vp0], 16 C M01 - ld8 v1 = [vp1], 16 C M01 - (p6) cmpeqor p7, p0 = -1, s1 C M I - (p6) add s1 = 1, s1 C M I - (p10) cmpeqor p11, p0 = 0, d1 C M I - (p10) add d1 = -1, d1 C M I - ;; - st8 [sp] = s0, 8 C M23 - st8 [dp] = d0, 8 C M23 - add s2 = u2, v2 C M I - add s3 = u3, v3 C M I - sub d2 = u2, v2 C M I - sub d3 = u3, v3 C M I - ;; - st8 [sp] = s1, 8 C M23 - st8 [dp] = d1, 8 C M23 - cmpltu p8, p0 = s2, v2 C carry from add2 M I - cmpltu p9, p0 = s3, v3 C carry from add3 M I - cmpltu p12, p0 = u2, v2 C borrow from sub2 M I - cmpltu p13, p0 = u3, v3 C borrow from sub3 M I - ;; -L(mid): - ld8 u2 = [up0], 16 C M01 - ld8 u3 = [up1], 16 C M01 - (p7) cmpeqor p8, p0 = -1, s2 C M I - (p7) add s2 = 1, s2 C M I - (p11) cmpeqor p12, p0 = 0, d2 C M I - (p11) add d2 = -1, d2 C M I - ;; - ld8 v2 = [vp0], 16 C M01 - ld8 v3 = [vp1], 16 C M01 - (p8) cmpeqor p9, p0 = -1, s3 C M I - (p8) add s3 = 1, s3 C M I - (p12) cmpeqor p13, p0 = 0, d3 C M I - (p12) add d3 = -1, d3 C M I - ;; - st8 [sp] = s2, 8 C M23 - st8 [dp] = d2, 8 C M23 - add s0 = u0, v0 C M I - add s1 = u1, v1 C M I - sub d0 = u0, v0 C M I - sub d1 = u1, v1 C M I - ;; - st8 [sp] = s3, 8 C M23 - st8 [dp] = d3, 8 C M23 - cmpltu p6, p0 = s0, v0 C carry from add0 M I - cmpltu p7, p0 = s1, v1 C carry from add1 M I - cmpltu p10, p0 = u0, v0 C borrow from sub0 M I - cmpltu p11, p0 = u1, v1 C borrow from sub1 M I - ;; - lfetch [r10], 32 C M? - lfetch [r11], 32 C M? - br.cloop.dptk L(top) C B - ;; - -L(end): - nop 0 - nop 0 - (p9) cmpeqor p6, p0 = -1, s0 C M I - (p9) add s0 = 1, s0 C M I - (p13) cmpeqor p10, p0 = 0, d0 C M I - (p13) add d0 = -1, d0 C M I - ;; - nop 0 - nop 0 - (p6) cmpeqor p7, p0 = -1, s1 C M I - (p6) add s1 = 1, s1 C M I - (p10) cmpeqor p11, p0 = 0, d1 C M I - (p10) add d1 = -1, d1 C M I - ;; - st8 [sp] = s0, 8 C M23 - st8 [dp] = d0, 8 C M23 - add s2 = u2, v2 C M I - add s3 = u3, v3 C M I - sub d2 = u2, v2 C M I - sub d3 = u3, v3 C M I - ;; - st8 [sp] = s1, 8 C M23 - st8 [dp] = d1, 8 C M23 - cmpltu p8, p0 = s2, v2 C carry from add2 M I - cmpltu p9, p0 = s3, v3 C carry from add3 M I - cmpltu p12, p0 = u2, v2 C borrow from sub2 M I - cmpltu p13, p0 = u3, v3 C borrow from sub3 M I - ;; -L(cj2): - (p7) cmpeqor p8, p0 = -1, s2 C M I - (p7) add s2 = 1, s2 C M I - (p11) cmpeqor p12, p0 = 0, d2 C M I - (p11) add d2 = -1, d2 C M I - mov r8 = 0 C M I - nop 0 - ;; - st8 [sp] = s2, 8 C M23 - st8 [dp] = d2, 8 C M23 - (p8) cmpeqor p9, p0 = -1, s3 C M I - (p8) add s3 = 1, s3 C M I - (p12) cmpeqor p13, p0 = 0, d3 C M I - (p12) add d3 = -1, d3 C M I - ;; -L(cj1): - (p9) mov r8 = 2 C M I - ;; - mov.i ar.lc = r2 C I0 - (p13) add r8 = 1, r8 C M I - st8 [sp] = s3 C M23 - st8 [dp] = d3 C M23 - br.ret.sptk.many b0 C B -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/addmul_1.asm deleted file mode 100644 index ffa3297763cdc374d61d99ea11018e2925bd5834..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/addmul_1.asm +++ /dev/null @@ -1,602 +0,0 @@ -dnl IA-64 mpn_addmul_1 -- Multiply a limb vector with a limb and add the -dnl result to a second limb vector. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2000-2005, 2007 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 3.0 -C Itanium 2: 2.0 - -C TODO -C * Further optimize feed-in and wind-down code, both for speed and code size. -C * Handle low limb input and results specially, using a common stf8 in the -C epilogue. -C * Use 1 c/l carry propagation scheme in wind-down code. -C * Use extra pointer registers for `up' and rp to speed up feed-in loads. -C * Work out final differences with mul_1.asm. That function is 300 bytes -C smaller than this due to better loop scheduling and thus simpler feed-in -C code. - -C INPUT PARAMETERS -define(`rp', `r32') -define(`up', `r33') -define(`n', `r34') -define(`vl', `r35') - -ASM_START() -PROLOGUE(mpn_addmul_1) - .prologue - .save ar.lc, r2 - .body - -ifdef(`HAVE_ABI_32', -` addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - zxt4 n = n C I - ;; -') -{.mmi - adds r15 = -1, n C M I - mov r20 = rp C M I - mov.i r2 = ar.lc C I0 -} -{.mmi - ldf8 f7 = [up], 8 C M - ldf8 f8 = [rp], 8 C M - and r14 = 3, n C M I - ;; -} -{.mmi - setf.sig f6 = vl C M2 M3 - cmp.eq p10, p0 = 0, r14 C M I - shr.u r31 = r15, 2 C I0 -} -{.mmi - cmp.eq p11, p0 = 2, r14 C M I - cmp.eq p12, p0 = 3, r14 C M I - nop.i 0 C I - ;; -} -{.mii - cmp.ne p6, p7 = r0, r0 C M I - mov.i ar.lc = r31 C I0 - cmp.ne p8, p9 = r0, r0 C M I -} -{.bbb - (p10) br.dptk .Lb00 C B - (p11) br.dptk .Lb10 C B - (p12) br.dptk .Lb11 C B - ;; -} - -.Lb01: br.cloop.dptk .grt1 C B - - xma.l f39 = f7, f6, f8 C F - xma.hu f43 = f7, f6, f8 C F - ;; - getf.sig r8 = f43 C M2 - stf8 [r20] = f39 C M2 M3 - mov.i ar.lc = r2 C I0 - br.ret.sptk.many b0 C B - -.grt1: - ldf8 f32 = [up], 8 - ldf8 f44 = [rp], 8 - ;; - ldf8 f33 = [up], 8 - ldf8 f45 = [rp], 8 - ;; - ldf8 f34 = [up], 8 - xma.l f39 = f7, f6, f8 - ldf8 f46 = [rp], 8 - xma.hu f43 = f7, f6, f8 - ;; - ldf8 f35 = [up], 8 - ldf8 f47 = [rp], 8 - br.cloop.dptk .grt5 - - xma.l f36 = f32, f6, f44 - xma.hu f40 = f32, f6, f44 - ;; - stf8 [r20] = f39, 8 - xma.l f37 = f33, f6, f45 - xma.hu f41 = f33, f6, f45 - ;; - getf.sig r31 = f43 - getf.sig r24 = f36 - xma.l f38 = f34, f6, f46 - xma.hu f42 = f34, f6, f46 - ;; - getf.sig r28 = f40 - getf.sig r25 = f37 - xma.l f39 = f35, f6, f47 - xma.hu f43 = f35, f6, f47 - ;; - getf.sig r29 = f41 - getf.sig r26 = f38 - br .Lcj5 - -.grt5: - mov r30 = 0 - xma.l f36 = f32, f6, f44 - xma.hu f40 = f32, f6, f44 - ;; - ldf8 f32 = [up], 8 - xma.l f37 = f33, f6, f45 - ldf8 f44 = [rp], 8 - xma.hu f41 = f33, f6, f45 - ;; - ldf8 f33 = [up], 8 - getf.sig r27 = f39 - ;; - getf.sig r31 = f43 - xma.l f38 = f34, f6, f46 - ldf8 f45 = [rp], 8 - xma.hu f42 = f34, f6, f46 - ;; - ldf8 f34 = [up], 8 - getf.sig r24 = f36 - ;; - getf.sig r28 = f40 - xma.l f39 = f35, f6, f47 - ldf8 f46 = [rp], 8 - xma.hu f43 = f35, f6, f47 - ;; - ldf8 f35 = [up], 8 - getf.sig r25 = f37 - br.cloop.dptk .Loop - br .Le0 - - -.Lb10: ldf8 f35 = [up], 8 - ldf8 f47 = [rp], 8 - br.cloop.dptk .grt2 - - xma.l f38 = f7, f6, f8 - xma.hu f42 = f7, f6, f8 - ;; - xma.l f39 = f35, f6, f47 - xma.hu f43 = f35, f6, f47 - ;; - getf.sig r30 = f42 - stf8 [r20] = f38, 8 - getf.sig r27 = f39 - getf.sig r8 = f43 - br .Lcj2 - -.grt2: - ldf8 f32 = [up], 8 - ldf8 f44 = [rp], 8 - ;; - ldf8 f33 = [up], 8 - xma.l f38 = f7, f6, f8 - ldf8 f45 = [rp], 8 - xma.hu f42 = f7, f6, f8 - ;; - ldf8 f34 = [up], 8 - xma.l f39 = f35, f6, f47 - ldf8 f46 = [rp], 8 - xma.hu f43 = f35, f6, f47 - ;; - ldf8 f35 = [up], 8 - ldf8 f47 = [rp], 8 - br.cloop.dptk .grt6 - - stf8 [r20] = f38, 8 - xma.l f36 = f32, f6, f44 - xma.hu f40 = f32, f6, f44 - ;; - getf.sig r30 = f42 - getf.sig r27 = f39 - xma.l f37 = f33, f6, f45 - xma.hu f41 = f33, f6, f45 - ;; - getf.sig r31 = f43 - getf.sig r24 = f36 - xma.l f38 = f34, f6, f46 - xma.hu f42 = f34, f6, f46 - ;; - getf.sig r28 = f40 - getf.sig r25 = f37 - xma.l f39 = f35, f6, f47 - xma.hu f43 = f35, f6, f47 - br .Lcj6 - -.grt6: - mov r29 = 0 - xma.l f36 = f32, f6, f44 - xma.hu f40 = f32, f6, f44 - ;; - ldf8 f32 = [up], 8 - getf.sig r26 = f38 - ;; - getf.sig r30 = f42 - xma.l f37 = f33, f6, f45 - ldf8 f44 = [rp], 8 - xma.hu f41 = f33, f6, f45 - ;; - ldf8 f33 = [up], 8 - getf.sig r27 = f39 - ;; - getf.sig r31 = f43 - xma.l f38 = f34, f6, f46 - ldf8 f45 = [rp], 8 - xma.hu f42 = f34, f6, f46 - ;; - ldf8 f34 = [up], 8 - getf.sig r24 = f36 - br .LL10 - - -.Lb11: ldf8 f34 = [up], 8 - ldf8 f46 = [rp], 8 - ;; - ldf8 f35 = [up], 8 - ldf8 f47 = [rp], 8 - br.cloop.dptk .grt3 - ;; - - xma.l f37 = f7, f6, f8 - xma.hu f41 = f7, f6, f8 - xma.l f38 = f34, f6, f46 - xma.hu f42 = f34, f6, f46 - xma.l f39 = f35, f6, f47 - xma.hu f43 = f35, f6, f47 - ;; - getf.sig r29 = f41 - stf8 [r20] = f37, 8 - getf.sig r26 = f38 - getf.sig r30 = f42 - getf.sig r27 = f39 - getf.sig r8 = f43 - br .Lcj3 - -.grt3: - ldf8 f32 = [up], 8 - xma.l f37 = f7, f6, f8 - ldf8 f44 = [rp], 8 - xma.hu f41 = f7, f6, f8 - ;; - ldf8 f33 = [up], 8 - xma.l f38 = f34, f6, f46 - ldf8 f45 = [rp], 8 - xma.hu f42 = f34, f6, f46 - ;; - ldf8 f34 = [up], 8 - xma.l f39 = f35, f6, f47 - ldf8 f46 = [rp], 8 - xma.hu f43 = f35, f6, f47 - ;; - ldf8 f35 = [up], 8 - getf.sig r25 = f37 C FIXME - ldf8 f47 = [rp], 8 - br.cloop.dptk .grt7 - - getf.sig r29 = f41 - stf8 [r20] = f37, 8 C FIXME - xma.l f36 = f32, f6, f44 - getf.sig r26 = f38 - xma.hu f40 = f32, f6, f44 - ;; - getf.sig r30 = f42 - xma.l f37 = f33, f6, f45 - getf.sig r27 = f39 - xma.hu f41 = f33, f6, f45 - ;; - getf.sig r31 = f43 - xma.l f38 = f34, f6, f46 - getf.sig r24 = f36 - xma.hu f42 = f34, f6, f46 - br .Lcj7 - -.grt7: - getf.sig r29 = f41 - xma.l f36 = f32, f6, f44 - mov r28 = 0 - xma.hu f40 = f32, f6, f44 - ;; - ldf8 f32 = [up], 8 - getf.sig r26 = f38 - ;; - getf.sig r30 = f42 - xma.l f37 = f33, f6, f45 - ldf8 f44 = [rp], 8 - xma.hu f41 = f33, f6, f45 - ;; - ldf8 f33 = [up], 8 - getf.sig r27 = f39 - br .LL11 - - -.Lb00: ldf8 f33 = [up], 8 - ldf8 f45 = [rp], 8 - ;; - ldf8 f34 = [up], 8 - ldf8 f46 = [rp], 8 - ;; - ldf8 f35 = [up], 8 - xma.l f36 = f7, f6, f8 - ldf8 f47 = [rp], 8 - xma.hu f40 = f7, f6, f8 - br.cloop.dptk .grt4 - - xma.l f37 = f33, f6, f45 - xma.hu f41 = f33, f6, f45 - xma.l f38 = f34, f6, f46 - xma.hu f42 = f34, f6, f46 - ;; - getf.sig r28 = f40 - stf8 [r20] = f36, 8 - xma.l f39 = f35, f6, f47 - getf.sig r25 = f37 - xma.hu f43 = f35, f6, f47 - ;; - getf.sig r29 = f41 - getf.sig r26 = f38 - getf.sig r30 = f42 - getf.sig r27 = f39 - br .Lcj4 - -.grt4: - ldf8 f32 = [up], 8 - xma.l f37 = f33, f6, f45 - ldf8 f44 = [rp], 8 - xma.hu f41 = f33, f6, f45 - ;; - ldf8 f33 = [up], 8 - xma.l f38 = f34, f6, f46 - ldf8 f45 = [rp], 8 - xma.hu f42 = f34, f6, f46 - ;; - ldf8 f34 = [up], 8 - getf.sig r24 = f36 C FIXME - xma.l f39 = f35, f6, f47 - ldf8 f46 = [rp], 8 - getf.sig r28 = f40 - xma.hu f43 = f35, f6, f47 - ;; - ldf8 f35 = [up], 8 - getf.sig r25 = f37 - ldf8 f47 = [rp], 8 - br.cloop.dptk .grt8 - - getf.sig r29 = f41 - stf8 [r20] = f36, 8 C FIXME - xma.l f36 = f32, f6, f44 - getf.sig r26 = f38 - getf.sig r30 = f42 - xma.hu f40 = f32, f6, f44 - ;; - xma.l f37 = f33, f6, f45 - getf.sig r27 = f39 - xma.hu f41 = f33, f6, f45 - br .Lcj8 - -.grt8: - getf.sig r29 = f41 - xma.l f36 = f32, f6, f44 - mov r31 = 0 - xma.hu f40 = f32, f6, f44 - ;; - ldf8 f32 = [up], 8 - getf.sig r26 = f38 - br .LL00 - - -C *** MAIN LOOP START *** - ALIGN(32) C insn fed cycle # -.Loop: - .pred.rel "mutex", p6, p7 C num by i1 i2 - getf.sig r29 = f41 C 00 16 0 0 - xma.l f36 = f32, f6, f44 C 01 06,15 0 0 - (p6) add r14 = r30, r27, 1 C 02 0 0 - ldf8 f47 = [rp], 8 C 03 0 0 - xma.hu f40 = f32, f6, f44 C 04 06,15 0 0 - (p7) add r14 = r30, r27 C 05 0 0 - ;; - .pred.rel "mutex", p6, p7 - ldf8 f32 = [up], 8 C 06 1 1 - (p6) cmp.leu p8, p9 = r14, r27 C 07 1 1 - (p7) cmp.ltu p8, p9 = r14, r27 C 08 1 1 - getf.sig r26 = f38 C 09 25 2 1 - st8 [r20] = r14, 8 C 10 2 1 - nop.b 0 C 11 2 1 - ;; -.LL00: - .pred.rel "mutex", p8, p9 - getf.sig r30 = f42 C 12 28 3 2 - xma.l f37 = f33, f6, f45 C 13 18,27 3 2 - (p8) add r16 = r31, r24, 1 C 14 3 2 - ldf8 f44 = [rp], 8 C 15 3 2 - xma.hu f41 = f33, f6, f45 C 16 18,27 3 2 - (p9) add r16 = r31, r24 C 17 3 2 - ;; - .pred.rel "mutex", p8, p9 - ldf8 f33 = [up], 8 C 18 4 3 - (p8) cmp.leu p6, p7 = r16, r24 C 19 4 3 - (p9) cmp.ltu p6, p7 = r16, r24 C 20 4 3 - getf.sig r27 = f39 C 21 37 5 3 - st8 [r20] = r16, 8 C 22 5 3 - nop.b 0 C 23 5 3 - ;; -.LL11: - .pred.rel "mutex", p6, p7 - getf.sig r31 = f43 C 24 40 6 4 - xma.l f38 = f34, f6, f46 C 25 30,39 6 4 - (p6) add r14 = r28, r25, 1 C 26 6 4 - ldf8 f45 = [rp], 8 C 27 6 4 - xma.hu f42 = f34, f6, f46 C 28 30,39 6 4 - (p7) add r14 = r28, r25 C 29 6 4 - ;; - .pred.rel "mutex", p6, p7 - ldf8 f34 = [up], 8 C 30 7 5 - (p6) cmp.leu p8, p9 = r14, r25 C 31 7 5 - (p7) cmp.ltu p8, p9 = r14, r25 C 32 7 5 - getf.sig r24 = f36 C 33 01 8 5 - st8 [r20] = r14, 8 C 34 8 5 - nop.b 0 C 35 8 5 - ;; -.LL10: - .pred.rel "mutex", p8, p9 - getf.sig r28 = f40 C 36 04 9 6 - xma.l f39 = f35, f6, f47 C 37 42,03 9 6 - (p8) add r16 = r29, r26, 1 C 38 9 6 - ldf8 f46 = [rp], 8 C 39 9 6 - xma.hu f43 = f35, f6, f47 C 40 42,03 9 6 - (p9) add r16 = r29, r26 C 41 9 6 - ;; - .pred.rel "mutex", p8, p9 - ldf8 f35 = [up], 8 C 42 10 7 - (p8) cmp.leu p6, p7 = r16, r26 C 43 10 7 - (p9) cmp.ltu p6, p7 = r16, r26 C 44 10 7 - getf.sig r25 = f37 C 45 13 11 7 - st8 [r20] = r16, 8 C 46 11 7 - br.cloop.dptk .Loop C 47 11 7 -C *** MAIN LOOP END *** - ;; -.Le0: - .pred.rel "mutex", p6, p7 - getf.sig r29 = f41 C - xma.l f36 = f32, f6, f44 C - (p6) add r14 = r30, r27, 1 C - ldf8 f47 = [rp], 8 C - xma.hu f40 = f32, f6, f44 C - (p7) add r14 = r30, r27 C - ;; - .pred.rel "mutex", p6, p7 - (p6) cmp.leu p8, p9 = r14, r27 C - (p7) cmp.ltu p8, p9 = r14, r27 C - getf.sig r26 = f38 C - st8 [r20] = r14, 8 C - ;; - .pred.rel "mutex", p8, p9 - getf.sig r30 = f42 C - xma.l f37 = f33, f6, f45 C - (p8) add r16 = r31, r24, 1 C - xma.hu f41 = f33, f6, f45 C - (p9) add r16 = r31, r24 C - ;; - .pred.rel "mutex", p8, p9 - (p8) cmp.leu p6, p7 = r16, r24 C - (p9) cmp.ltu p6, p7 = r16, r24 C - getf.sig r27 = f39 C - st8 [r20] = r16, 8 C - ;; -.Lcj8: - .pred.rel "mutex", p6, p7 - getf.sig r31 = f43 C - xma.l f38 = f34, f6, f46 C - (p6) add r14 = r28, r25, 1 C - xma.hu f42 = f34, f6, f46 C - (p7) add r14 = r28, r25 C - ;; - .pred.rel "mutex", p6, p7 - (p6) cmp.leu p8, p9 = r14, r25 C - (p7) cmp.ltu p8, p9 = r14, r25 C - getf.sig r24 = f36 C - st8 [r20] = r14, 8 C - ;; -.Lcj7: - .pred.rel "mutex", p8, p9 - getf.sig r28 = f40 C - xma.l f39 = f35, f6, f47 C - (p8) add r16 = r29, r26, 1 C - xma.hu f43 = f35, f6, f47 C - (p9) add r16 = r29, r26 C - ;; - .pred.rel "mutex", p8, p9 - (p8) cmp.leu p6, p7 = r16, r26 C - (p9) cmp.ltu p6, p7 = r16, r26 C - getf.sig r25 = f37 C - st8 [r20] = r16, 8 C - ;; -.Lcj6: - .pred.rel "mutex", p6, p7 - getf.sig r29 = f41 C - (p6) add r14 = r30, r27, 1 C - (p7) add r14 = r30, r27 C - ;; - .pred.rel "mutex", p6, p7 - (p6) cmp.leu p8, p9 = r14, r27 C - (p7) cmp.ltu p8, p9 = r14, r27 C - getf.sig r26 = f38 C - st8 [r20] = r14, 8 C - ;; -.Lcj5: - .pred.rel "mutex", p8, p9 - getf.sig r30 = f42 C - (p8) add r16 = r31, r24, 1 C - (p9) add r16 = r31, r24 C - ;; - .pred.rel "mutex", p8, p9 - (p8) cmp.leu p6, p7 = r16, r24 C - (p9) cmp.ltu p6, p7 = r16, r24 C - getf.sig r27 = f39 C - st8 [r20] = r16, 8 C - ;; -.Lcj4: - .pred.rel "mutex", p6, p7 - getf.sig r8 = f43 C - (p6) add r14 = r28, r25, 1 C - (p7) add r14 = r28, r25 C - ;; - .pred.rel "mutex", p6, p7 - st8 [r20] = r14, 8 C - (p6) cmp.leu p8, p9 = r14, r25 C - (p7) cmp.ltu p8, p9 = r14, r25 C - ;; -.Lcj3: - .pred.rel "mutex", p8, p9 - (p8) add r16 = r29, r26, 1 C - (p9) add r16 = r29, r26 C - ;; - .pred.rel "mutex", p8, p9 - st8 [r20] = r16, 8 C - (p8) cmp.leu p6, p7 = r16, r26 C - (p9) cmp.ltu p6, p7 = r16, r26 C - ;; -.Lcj2: - .pred.rel "mutex", p6, p7 - (p6) add r14 = r30, r27, 1 C - (p7) add r14 = r30, r27 C - ;; - .pred.rel "mutex", p6, p7 - st8 [r20] = r14 C - (p6) cmp.leu p8, p9 = r14, r27 C - (p7) cmp.ltu p8, p9 = r14, r27 C - ;; - (p8) add r8 = 1, r8 C M I - mov.i ar.lc = r2 C I0 - br.ret.sptk.many b0 C B -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/addmul_2.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/addmul_2.asm deleted file mode 100644 index 86e8de4051a1e972364bc64b4984a2d293eaca3c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/addmul_2.asm +++ /dev/null @@ -1,715 +0,0 @@ -dnl IA-64 mpn_addmul_2 -- Multiply a n-limb number with a 2-limb number and -dnl add the result to a (n+1)-limb number. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2004, 2005, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 3.65 -C Itanium 2: 1.625 - -C TODO -C * Clean up variable names, and try to decrease the number of distinct -C registers used. -C * Clean up feed-in code to not require zeroing several registers. -C * Make sure we don't depend on uninitialised predicate registers. -C * Could perhaps save a few cycles by using 1 c/l carry propagation in -C wind-down code. -C * Ultimately rewrite. The problem with this code is that it first uses a -C loaded u value in one xma pair, then leaves it live over several unrelated -C xma pairs, before it uses it again. It should actually be quite possible -C to just swap some aligned xma pairs around. But we should then schedule -C u loads further from the first use. - -C INPUT PARAMETERS -define(`rp',`r32') -define(`up',`r33') -define(`n',`r34') -define(`vp',`r35') - -define(`srp',`r3') - -define(`v0',`f6') -define(`v1',`f7') - -define(`s0',`r14') -define(`acc0',`r15') - -define(`pr0_0',`r16') define(`pr0_1',`r17') -define(`pr0_2',`r18') define(`pr0_3',`r19') - -define(`pr1_0',`r20') define(`pr1_1',`r21') -define(`pr1_2',`r22') define(`pr1_3',`r23') - -define(`acc1_0',`r24') define(`acc1_1',`r25') -define(`acc1_2',`r26') define(`acc1_3',`r27') - -dnl define(`',`r28') -dnl define(`',`r29') -dnl define(`',`r30') -dnl define(`',`r31') - -define(`fp0b_0',`f8') define(`fp0b_1',`f9') -define(`fp0b_2',`f10') define(`fp0b_3',`f11') - -define(`fp1a_0',`f12') define(`fp1a_1',`f13') -define(`fp1a_2',`f14') define(`fp1a_3',`f15') - -define(`fp1b_0',`f32') define(`fp1b_1',`f33') -define(`fp1b_2',`f34') define(`fp1b_3',`f35') - -define(`fp2a_0',`f36') define(`fp2a_1',`f37') -define(`fp2a_2',`f38') define(`fp2a_3',`f39') - -define(`r_0',`f40') define(`r_1',`f41') -define(`r_2',`f42') define(`r_3',`f43') - -define(`u_0',`f44') define(`u_1',`f45') -define(`u_2',`f46') define(`u_3',`f47') - -define(`rx',`f48') -define(`ux',`f49') -define(`ry',`f50') -define(`uy',`f51') - -ASM_START() -PROLOGUE(mpn_addmul_2s) - .prologue - .save ar.lc, r2 - .body - -ifdef(`HAVE_ABI_32',` - {.mmi; addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - addp4 vp = 0, vp C M I -}{.mmi; nop 1 - nop 1 - zxt4 n = n C I - ;; -}') - - {.mmi; ldf8 ux = [up], 8 C M - ldf8 v0 = [vp], 8 C M - mov r2 = ar.lc C I0 -}{.mmi; ldf8 rx = [rp], 8 C M - and r14 = 3, n C M I - add n = -2, n C M I - ;; -}{.mmi; ldf8 uy = [up], 8 C M - ldf8 v1 = [vp] C M - shr.u n = n, 2 C I0 -}{.mmi; ldf8 ry = [rp], -8 C M - cmp.eq p14, p0 = 1, r14 C M I - cmp.eq p11, p0 = 2, r14 C M I - ;; -}{.mmi; add srp = 16, rp C M I - cmp.eq p15, p0 = 3, r14 C M I - mov ar.lc = n C I0 -}{.bbb; (p14) br.dptk L(x01) C B - (p11) br.dptk L(x10) C B - (p15) br.dptk L(x11) C B - ;; -} -L(x00): cmp.ne p6, p0 = r0, r0 C suppress initial xma pair - mov fp2a_3 = f0 - br L(b00) -L(x01): cmp.ne p14, p0 = r0, r0 C suppress initial xma pair - mov fp2a_2 = f0 - br L(b01) -L(x10): cmp.ne p11, p0 = r0, r0 C suppress initial xma pair - mov fp2a_1 = f0 - br L(b10) -L(x11): cmp.ne p15, p0 = r0, r0 C suppress initial xma pair - mov fp2a_0 = f0 - br L(b11) - -EPILOGUE() - -PROLOGUE(mpn_addmul_2) - .prologue - .save ar.lc, r2 - .body - -ifdef(`HAVE_ABI_32',` - {.mmi; addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - addp4 vp = 0, vp C M I -}{.mmi; nop 1 - nop 1 - zxt4 n = n C I - ;; -}') - - {.mmi; ldf8 ux = [up], 8 C M - ldf8 v0 = [vp], 8 C M - mov r2 = ar.lc C I0 -}{.mmi; ldf8 rx = [rp], 8 C M - and r14 = 3, n C M I - add n = -2, n C M I - ;; -}{.mmi; ldf8 uy = [up], 8 C M - ldf8 v1 = [vp] C M - shr.u n = n, 2 C I0 -}{.mmi; ldf8 ry = [rp], -8 C M - cmp.eq p14, p0 = 1, r14 C M I - cmp.eq p11, p0 = 2, r14 C M I - ;; -}{.mmi; add srp = 16, rp C M I - cmp.eq p15, p6 = 3, r14 C M I - mov ar.lc = n C I0 -}{.bbb; (p14) br.dptk L(b01) C B - (p11) br.dptk L(b10) C B - (p15) br.dptk L(b11) C B - ;; -} - ALIGN(32) -L(b00): - {.mmi; ldf8 r_1 = [srp], 8 - ldf8 u_1 = [up], 8 - mov acc1_2 = 0 -}{.mmi; mov pr1_2 = 0 - mov pr0_3 = 0 - cmp.ne p8, p9 = r0, r0 - ;; -}{.mfi; ldf8 r_2 = [srp], 8 - xma.l fp0b_3 = ux, v0, rx - cmp.ne p12, p13 = r0, r0 -}{.mfb; ldf8 u_2 = [up], 8 - xma.hu fp1b_3 = ux, v0, rx - br.cloop.dptk L(gt4) -} - xma.l fp0b_0 = uy, v0, ry - xma.hu fp1a_0 = uy, v0, ry - ;; - getfsig acc0 = fp0b_3 - (p6) xma.hu fp2a_3 = ux, v1, fp1b_3 C suppressed for addmul_2s - (p6) xma.l fp1b_3 = ux, v1, fp1b_3 C suppressed for addmul_2s - ;; - xma.l fp0b_1 = u_1, v0, r_1 - xma.hu fp1a_1 = u_1, v0, r_1 - ;; - getfsig pr0_0 = fp0b_0 - xma.l fp1b_0 = uy, v1, fp1a_0 - xma.hu fp2a_0 = uy, v1, fp1a_0 - ;; - getfsig pr1_3 = fp1b_3 - getfsig acc1_3 = fp2a_3 - xma.l fp0b_2 = u_2, v0, r_2 - xma.hu fp1a_2 = u_2, v0, r_2 - br L(cj4) - -L(gt4): xma.l fp0b_0 = uy, v0, ry - xma.hu fp1a_0 = uy, v0, ry - ;; - ldf8 r_3 = [srp], 8 - getfsig acc0 = fp0b_3 - (p6) xma.hu fp2a_3 = ux, v1, fp1b_3 C suppressed for addmul_2s - ldf8 u_3 = [up], 8 - (p6) xma.l fp1b_3 = ux, v1, fp1b_3 C suppressed for addmul_2s - ;; - xma.l fp0b_1 = u_1, v0, r_1 - xma.hu fp1a_1 = u_1, v0, r_1 - ;; - ldf8 r_0 = [srp], 8 - getfsig pr0_0 = fp0b_0 - xma.l fp1b_0 = uy, v1, fp1a_0 - xma.hu fp2a_0 = uy, v1, fp1a_0 - ;; - ldf8 u_0 = [up], 8 - getfsig pr1_3 = fp1b_3 - xma.l fp0b_2 = u_2, v0, r_2 - ;; - getfsig acc1_3 = fp2a_3 - xma.hu fp1a_2 = u_2, v0, r_2 - br L(00) - - - ALIGN(32) -L(b01): - {.mmi; ldf8 r_0 = [srp], 8 C M - ldf8 u_0 = [up], 8 C M - mov acc1_1 = 0 C M I -}{.mmi; mov pr1_1 = 0 C M I - mov pr0_2 = 0 C M I - cmp.ne p6, p7 = r0, r0 C M I - ;; -}{.mfi; ldf8 r_1 = [srp], 8 C M - xma.l fp0b_2 = ux, v0, rx C F - cmp.ne p10, p11 = r0, r0 C M I -}{.mfi; ldf8 u_1 = [up], 8 C M - xma.hu fp1b_2 = ux, v0, rx C F - nop 1 - ;; -} xma.l fp0b_3 = uy, v0, ry C F - xma.hu fp1a_3 = uy, v0, ry C F - ;; - {.mmf; getfsig acc0 = fp0b_2 C M - ldf8 r_2 = [srp], 8 C M - (p14) xma.hu fp2a_2 = ux, v1,fp1b_2 C F suppressed for addmul_2s -}{.mfb; ldf8 u_2 = [up], 8 C M - (p14) xma.l fp1b_2 = ux, v1,fp1b_2 C F suppressed for addmul_2s - br.cloop.dptk L(gt5) -} - xma.l fp0b_0 = u_0, v0, r_0 C F - xma.hu fp1a_0 = u_0, v0, r_0 C F - ;; - getfsig pr0_3 = fp0b_3 C M - xma.l fp1b_3 = uy, v1,fp1a_3 C F - xma.hu fp2a_3 = uy, v1,fp1a_3 C F - ;; - getfsig pr1_2 = fp1b_2 C M - getfsig acc1_2 = fp2a_2 C M - xma.l fp0b_1 = u_1, v0, r_1 C F - xma.hu fp1a_1 = u_1, v0, r_1 C F - br L(cj5) - -L(gt5): xma.l fp0b_0 = u_0, v0, r_0 - xma.hu fp1a_0 = u_0, v0, r_0 - ;; - getfsig pr0_3 = fp0b_3 - ldf8 r_3 = [srp], 8 - xma.l fp1b_3 = uy, v1, fp1a_3 - xma.hu fp2a_3 = uy, v1, fp1a_3 - ;; - ldf8 u_3 = [up], 8 - getfsig pr1_2 = fp1b_2 - xma.l fp0b_1 = u_1, v0, r_1 - ;; - getfsig acc1_2 = fp2a_2 - xma.hu fp1a_1 = u_1, v0, r_1 - br L(01) - - - ALIGN(32) -L(b10): br.cloop.dptk L(gt2) - xma.l fp0b_1 = ux, v0, rx - xma.hu fp1b_1 = ux, v0, rx - ;; - xma.l fp0b_2 = uy, v0, ry - xma.hu fp1a_2 = uy, v0, ry - ;; - stf8 [rp] = fp0b_1, 8 - (p11) xma.hu fp2a_1 = ux, v1, fp1b_1 C suppressed for addmul_2s - (p11) xma.l fp1b_1 = ux, v1, fp1b_1 C suppressed for addmul_2s - ;; - getfsig acc0 = fp0b_2 - xma.l fp1b_2 = uy, v1, fp1a_2 - xma.hu fp2a_2 = uy, v1, fp1a_2 - ;; - getfsig pr1_1 = fp1b_1 - getfsig acc1_1 = fp2a_1 - mov ar.lc = r2 - getfsig pr1_2 = fp1b_2 - getfsig r8 = fp2a_2 - ;; - add s0 = pr1_1, acc0 - ;; - st8 [rp] = s0, 8 - cmp.ltu p8, p9 = s0, pr1_1 - sub r31 = -1, acc1_1 - ;; - .pred.rel "mutex", p8, p9 - (p8) add acc0 = pr1_2, acc1_1, 1 - (p9) add acc0 = pr1_2, acc1_1 - (p8) cmp.leu p10, p0 = r31, pr1_2 - (p9) cmp.ltu p10, p0 = r31, pr1_2 - ;; - st8 [rp] = acc0, 8 - (p10) add r8 = 1, r8 - br.ret.sptk.many b0 - - -L(gt2): - {.mmi; ldf8 r_3 = [srp], 8 - ldf8 u_3 = [up], 8 - mov acc1_0 = 0 - ;; -}{.mfi; ldf8 r_0 = [srp], 8 - xma.l fp0b_1 = ux, v0, rx - mov pr1_0 = 0 -}{.mfi; ldf8 u_0 = [up], 8 - xma.hu fp1b_1 = ux, v0, rx - mov pr0_1 = 0 - ;; -} xma.l fp0b_2 = uy, v0, ry - xma.hu fp1a_2 = uy, v0, ry - ;; - getfsig acc0 = fp0b_1 - ldf8 r_1 = [srp], 8 - (p11) xma.hu fp2a_1 = ux, v1, fp1b_1 C suppressed for addmul_2s - (p11) xma.l fp1b_1 = ux, v1, fp1b_1 C suppressed for addmul_2s - ;; - ldf8 u_1 = [up], 8 - xma.l fp0b_3 = u_3, v0, r_3 - xma.hu fp1a_3 = u_3, v0, r_3 - ;; - getfsig pr0_2 = fp0b_2 - ldf8 r_2 = [srp], 8 - xma.l fp1b_2 = uy, v1, fp1a_2 - xma.hu fp2a_2 = uy, v1, fp1a_2 - ;; - ldf8 u_2 = [up], 8 - getfsig pr1_1 = fp1b_1 - ;; - {.mfi; getfsig acc1_1 = fp2a_1 - xma.l fp0b_0 = u_0, v0, r_0 - cmp.ne p8, p9 = r0, r0 -}{.mfb; cmp.ne p12, p13 = r0, r0 - xma.hu fp1a_0 = u_0, v0, r_0 - br.cloop.sptk.clr L(top) -} - br.many L(end) - - - ALIGN(32) -L(b11): ldf8 r_2 = [srp], 8 - mov pr1_3 = 0 - mov pr0_0 = 0 - ;; - ldf8 u_2 = [up], 8 - mov acc1_3 = 0 - br.cloop.dptk L(gt3) - ;; - cmp.ne p6, p7 = r0, r0 - xma.l fp0b_0 = ux, v0, rx - xma.hu fp1b_0 = ux, v0, rx - ;; - cmp.ne p10, p11 = r0, r0 - xma.l fp0b_1 = uy, v0, ry - xma.hu fp1a_1 = uy, v0, ry - ;; - getfsig acc0 = fp0b_0 - (p15) xma.hu fp2a_0 = ux, v1, fp1b_0 C suppressed for addmul_2s - (p15) xma.l fp1b_0 = ux, v1, fp1b_0 C suppressed for addmul_2s - ;; - xma.l fp0b_2 = uy, v1, r_2 - xma.hu fp1a_2 = uy, v1, r_2 - ;; - getfsig pr0_1 = fp0b_1 - xma.l fp1b_1 = u_2, v0, fp1a_1 - xma.hu fp2a_1 = u_2, v0, fp1a_1 - ;; - getfsig pr1_0 = fp1b_0 - getfsig acc1_0 = fp2a_0 - br L(cj3) - -L(gt3): ldf8 r_3 = [srp], 8 - xma.l fp0b_0 = ux, v0, rx - cmp.ne p10, p11 = r0, r0 - ldf8 u_3 = [up], 8 - xma.hu fp1b_0 = ux, v0, rx - cmp.ne p6, p7 = r0, r0 - ;; - xma.l fp0b_1 = uy, v0, ry - xma.hu fp1a_1 = uy, v0, ry - ;; - getfsig acc0 = fp0b_0 - ldf8 r_0 = [srp], 8 - (p15) xma.hu fp2a_0 = ux, v1, fp1b_0 C suppressed for addmul_2s - ldf8 u_0 = [up], 8 - (p15) xma.l fp1b_0 = ux, v1, fp1b_0 C suppressed for addmul_2s - ;; - xma.l fp0b_2 = u_2, v0, r_2 - xma.hu fp1a_2 = u_2, v0, r_2 - ;; - getfsig pr0_1 = fp0b_1 - ldf8 r_1 = [srp], 8 - xma.l fp1b_1 = uy, v1, fp1a_1 - xma.hu fp2a_1 = uy, v1, fp1a_1 - ;; - ldf8 u_1 = [up], 8 - getfsig pr1_0 = fp1b_0 - ;; - getfsig acc1_0 = fp2a_0 - xma.l fp0b_3 = u_3, v0, r_3 - xma.hu fp1a_3 = u_3, v0, r_3 - br L(11) - - -C *** MAIN LOOP START *** - ALIGN(32) -L(top): C 00 - .pred.rel "mutex", p12, p13 - getfsig pr0_3 = fp0b_3 - ldf8 r_3 = [srp], 8 - xma.l fp1b_3 = u_3, v1, fp1a_3 - (p12) add s0 = pr1_0, acc0, 1 - (p13) add s0 = pr1_0, acc0 - xma.hu fp2a_3 = u_3, v1, fp1a_3 - ;; C 01 - .pred.rel "mutex", p8, p9 - .pred.rel "mutex", p12, p13 - ldf8 u_3 = [up], 8 - getfsig pr1_2 = fp1b_2 - (p8) cmp.leu p6, p7 = acc0, pr0_1 - (p9) cmp.ltu p6, p7 = acc0, pr0_1 - (p12) cmp.leu p10, p11 = s0, pr1_0 - (p13) cmp.ltu p10, p11 = s0, pr1_0 - ;; C 02 - .pred.rel "mutex", p6, p7 - getfsig acc1_2 = fp2a_2 - st8 [rp] = s0, 8 - xma.l fp0b_1 = u_1, v0, r_1 - (p6) add acc0 = pr0_2, acc1_0, 1 - (p7) add acc0 = pr0_2, acc1_0 - xma.hu fp1a_1 = u_1, v0, r_1 - ;; C 03 -L(01): - .pred.rel "mutex", p10, p11 - getfsig pr0_0 = fp0b_0 - ldf8 r_0 = [srp], 8 - xma.l fp1b_0 = u_0, v1, fp1a_0 - (p10) add s0 = pr1_1, acc0, 1 - (p11) add s0 = pr1_1, acc0 - xma.hu fp2a_0 = u_0, v1, fp1a_0 - ;; C 04 - .pred.rel "mutex", p6, p7 - .pred.rel "mutex", p10, p11 - ldf8 u_0 = [up], 8 - getfsig pr1_3 = fp1b_3 - (p6) cmp.leu p8, p9 = acc0, pr0_2 - (p7) cmp.ltu p8, p9 = acc0, pr0_2 - (p10) cmp.leu p12, p13 = s0, pr1_1 - (p11) cmp.ltu p12, p13 = s0, pr1_1 - ;; C 05 - .pred.rel "mutex", p8, p9 - getfsig acc1_3 = fp2a_3 - st8 [rp] = s0, 8 - xma.l fp0b_2 = u_2, v0, r_2 - (p8) add acc0 = pr0_3, acc1_1, 1 - (p9) add acc0 = pr0_3, acc1_1 - xma.hu fp1a_2 = u_2, v0, r_2 - ;; C 06 -L(00): - .pred.rel "mutex", p12, p13 - getfsig pr0_1 = fp0b_1 - ldf8 r_1 = [srp], 8 - xma.l fp1b_1 = u_1, v1, fp1a_1 - (p12) add s0 = pr1_2, acc0, 1 - (p13) add s0 = pr1_2, acc0 - xma.hu fp2a_1 = u_1, v1, fp1a_1 - ;; C 07 - .pred.rel "mutex", p8, p9 - .pred.rel "mutex", p12, p13 - ldf8 u_1 = [up], 8 - getfsig pr1_0 = fp1b_0 - (p8) cmp.leu p6, p7 = acc0, pr0_3 - (p9) cmp.ltu p6, p7 = acc0, pr0_3 - (p12) cmp.leu p10, p11 = s0, pr1_2 - (p13) cmp.ltu p10, p11 = s0, pr1_2 - ;; C 08 - .pred.rel "mutex", p6, p7 - getfsig acc1_0 = fp2a_0 - st8 [rp] = s0, 8 - xma.l fp0b_3 = u_3, v0, r_3 - (p6) add acc0 = pr0_0, acc1_2, 1 - (p7) add acc0 = pr0_0, acc1_2 - xma.hu fp1a_3 = u_3, v0, r_3 - ;; C 09 -L(11): - .pred.rel "mutex", p10, p11 - getfsig pr0_2 = fp0b_2 - ldf8 r_2 = [srp], 8 - xma.l fp1b_2 = u_2, v1, fp1a_2 - (p10) add s0 = pr1_3, acc0, 1 - (p11) add s0 = pr1_3, acc0 - xma.hu fp2a_2 = u_2, v1, fp1a_2 - ;; C 10 - .pred.rel "mutex", p6, p7 - .pred.rel "mutex", p10, p11 - ldf8 u_2 = [up], 8 - getfsig pr1_1 = fp1b_1 - (p6) cmp.leu p8, p9 = acc0, pr0_0 - (p7) cmp.ltu p8, p9 = acc0, pr0_0 - (p10) cmp.leu p12, p13 = s0, pr1_3 - (p11) cmp.ltu p12, p13 = s0, pr1_3 - ;; C 11 - .pred.rel "mutex", p8, p9 - getfsig acc1_1 = fp2a_1 - st8 [rp] = s0, 8 - xma.l fp0b_0 = u_0, v0, r_0 - (p8) add acc0 = pr0_1, acc1_3, 1 - (p9) add acc0 = pr0_1, acc1_3 - xma.hu fp1a_0 = u_0, v0, r_0 -L(10): br.cloop.sptk.clr L(top) C 12 - ;; -C *** MAIN LOOP END *** -L(end): - .pred.rel "mutex", p12, p13 - {.mfi; getfsig pr0_3 = fp0b_3 - xma.l fp1b_3 = u_3, v1, fp1a_3 - (p12) add s0 = pr1_0, acc0, 1 -}{.mfi; (p13) add s0 = pr1_0, acc0 - xma.hu fp2a_3 = u_3, v1, fp1a_3 - nop 1 - ;; -} .pred.rel "mutex", p8, p9 - .pred.rel "mutex", p12, p13 - {.mmi; getfsig pr1_2 = fp1b_2 - st8 [rp] = s0, 8 - (p8) cmp.leu p6, p7 = acc0, pr0_1 -}{.mmi; (p9) cmp.ltu p6, p7 = acc0, pr0_1 - (p12) cmp.leu p10, p11 = s0, pr1_0 - (p13) cmp.ltu p10, p11 = s0, pr1_0 - ;; -} .pred.rel "mutex", p6, p7 - {.mfi; getfsig acc1_2 = fp2a_2 - xma.l fp0b_1 = u_1, v0, r_1 - nop 1 -}{.mmf; (p6) add acc0 = pr0_2, acc1_0, 1 - (p7) add acc0 = pr0_2, acc1_0 - xma.hu fp1a_1 = u_1, v0, r_1 - ;; -} -L(cj5): - .pred.rel "mutex", p10, p11 - {.mfi; getfsig pr0_0 = fp0b_0 - xma.l fp1b_0 = u_0, v1, fp1a_0 - (p10) add s0 = pr1_1, acc0, 1 -}{.mfi; (p11) add s0 = pr1_1, acc0 - xma.hu fp2a_0 = u_0, v1, fp1a_0 - nop 1 - ;; -} .pred.rel "mutex", p6, p7 - .pred.rel "mutex", p10, p11 - {.mmi; getfsig pr1_3 = fp1b_3 - st8 [rp] = s0, 8 - (p6) cmp.leu p8, p9 = acc0, pr0_2 -}{.mmi; (p7) cmp.ltu p8, p9 = acc0, pr0_2 - (p10) cmp.leu p12, p13 = s0, pr1_1 - (p11) cmp.ltu p12, p13 = s0, pr1_1 - ;; -} .pred.rel "mutex", p8, p9 - {.mfi; getfsig acc1_3 = fp2a_3 - xma.l fp0b_2 = u_2, v0, r_2 - nop 1 -}{.mmf; (p8) add acc0 = pr0_3, acc1_1, 1 - (p9) add acc0 = pr0_3, acc1_1 - xma.hu fp1a_2 = u_2, v0, r_2 - ;; -} -L(cj4): - .pred.rel "mutex", p12, p13 - {.mfi; getfsig pr0_1 = fp0b_1 - xma.l fp1b_1 = u_1, v1, fp1a_1 - (p12) add s0 = pr1_2, acc0, 1 -}{.mfi; (p13) add s0 = pr1_2, acc0 - xma.hu fp2a_1 = u_1, v1, fp1a_1 - nop 1 - ;; -} .pred.rel "mutex", p8, p9 - .pred.rel "mutex", p12, p13 - {.mmi; getfsig pr1_0 = fp1b_0 - st8 [rp] = s0, 8 - (p8) cmp.leu p6, p7 = acc0, pr0_3 -}{.mmi; (p9) cmp.ltu p6, p7 = acc0, pr0_3 - (p12) cmp.leu p10, p11 = s0, pr1_2 - (p13) cmp.ltu p10, p11 = s0, pr1_2 - ;; -} .pred.rel "mutex", p6, p7 - {.mmi; getfsig acc1_0 = fp2a_0 - (p6) add acc0 = pr0_0, acc1_2, 1 - (p7) add acc0 = pr0_0, acc1_2 - ;; -} -L(cj3): - .pred.rel "mutex", p10, p11 - {.mfi; getfsig pr0_2 = fp0b_2 - xma.l fp1b_2 = u_2, v1, fp1a_2 - (p10) add s0 = pr1_3, acc0, 1 -}{.mfi; (p11) add s0 = pr1_3, acc0 - xma.hu fp2a_2 = u_2, v1, fp1a_2 - nop 1 - ;; -} .pred.rel "mutex", p6, p7 - .pred.rel "mutex", p10, p11 - {.mmi; getfsig pr1_1 = fp1b_1 - st8 [rp] = s0, 8 - (p6) cmp.leu p8, p9 = acc0, pr0_0 -}{.mmi; (p7) cmp.ltu p8, p9 = acc0, pr0_0 - (p10) cmp.leu p12, p13 = s0, pr1_3 - (p11) cmp.ltu p12, p13 = s0, pr1_3 - ;; -} .pred.rel "mutex", p8, p9 - {.mmi; getfsig acc1_1 = fp2a_1 - (p8) add acc0 = pr0_1, acc1_3, 1 - (p9) add acc0 = pr0_1, acc1_3 - ;; -} .pred.rel "mutex", p12, p13 - {.mmi; (p12) add s0 = pr1_0, acc0, 1 - (p13) add s0 = pr1_0, acc0 - nop 1 - ;; -} .pred.rel "mutex", p8, p9 - .pred.rel "mutex", p12, p13 - {.mmi; getfsig pr1_2 = fp1b_2 - st8 [rp] = s0, 8 - (p8) cmp.leu p6, p7 = acc0, pr0_1 -}{.mmi; (p9) cmp.ltu p6, p7 = acc0, pr0_1 - (p12) cmp.leu p10, p11 = s0, pr1_0 - (p13) cmp.ltu p10, p11 = s0, pr1_0 - ;; -} .pred.rel "mutex", p6, p7 - {.mmi; getfsig r8 = fp2a_2 - (p6) add acc0 = pr0_2, acc1_0, 1 - (p7) add acc0 = pr0_2, acc1_0 - ;; -} .pred.rel "mutex", p10, p11 - {.mmi; (p10) add s0 = pr1_1, acc0, 1 - (p11) add s0 = pr1_1, acc0 - (p6) cmp.leu p8, p9 = acc0, pr0_2 - ;; -} .pred.rel "mutex", p10, p11 - {.mmi; (p7) cmp.ltu p8, p9 = acc0, pr0_2 - (p10) cmp.leu p12, p13 = s0, pr1_1 - (p11) cmp.ltu p12, p13 = s0, pr1_1 - ;; -} .pred.rel "mutex", p8, p9 - {.mmi; st8 [rp] = s0, 8 - (p8) add acc0 = pr1_2, acc1_1, 1 - (p9) add acc0 = pr1_2, acc1_1 - ;; -} .pred.rel "mutex", p8, p9 - {.mmi; (p8) cmp.leu p10, p11 = acc0, pr1_2 - (p9) cmp.ltu p10, p11 = acc0, pr1_2 - (p12) add acc0 = 1, acc0 - ;; -}{.mmi; st8 [rp] = acc0, 8 - (p12) cmpeqor p10, p0 = 0, acc0 - nop 1 - ;; -}{.mib; (p10) add r8 = 1, r8 - mov ar.lc = r2 - br.ret.sptk.many b0 -} -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/aors_n.asm deleted file mode 100644 index 7705ce61cc922af9676ae5af3e1774da535cd0a8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/aors_n.asm +++ /dev/null @@ -1,852 +0,0 @@ -dnl IA-64 mpn_add_n/mpn_sub_n -- mpn addition and subtraction. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2003-2005, 2010, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 2.67 -C Itanium 2: 1.25 - -C TODO -C * Consider using special code for small n, using something like -C "switch (8 * (n >= 8) + (n mod 8))" to enter it and feed-in code. -C * The non-nc code was trimmed cycle for cycle to its current state. It is -C probably hard to save more that an odd cycle there. The nc code is much -C cruder (since tune/speed doesn't have any applicable direct measurements). -C * Without the nc entry points, this becomes around 1800 bytes of object -C code; the nc code adds over 1000 bytes. We should perhaps sacrifice a -C few cycles for the non-nc code and let it fall into the nc code. - -C INPUT PARAMETERS -define(`rp', `r32') -define(`up', `r33') -define(`vp', `r34') -define(`n', `r35') -define(`cy', `r36') - -ifdef(`OPERATION_add_n',` - define(ADDSUB, add) - define(CND, ltu) - define(INCR, 1) - define(LIM, -1) - define(LIM2, 0) - define(func, mpn_add_n) - define(func_nc, mpn_add_nc) -') -ifdef(`OPERATION_sub_n',` - define(ADDSUB, sub) - define(CND, gtu) - define(INCR, -1) - define(LIM, 0) - define(LIM2, -1) - define(func, mpn_sub_n) - define(func_nc, mpn_sub_nc) -') - -define(PFDIST, 500) - -C Some useful aliases for registers we use -define(`u0',`r14') define(`u1',`r15') define(`u2',`r16') define(`u3',`r17') -define(`v0',`r24') define(`v1',`r25') define(`v2',`r26') define(`v3',`r27') -define(`w0',`r28') define(`w1',`r29') define(`w2',`r30') define(`w3',`r31') -define(`rpx',`r3') -define(`upadv',`r20') define(`vpadv',`r21') - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc) - -ASM_START() -PROLOGUE(func_nc) - .prologue - .save ar.lc, r2 - .body -ifdef(`HAVE_ABI_32',` - addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - nop.i 0 - addp4 vp = 0, vp C M I - nop.m 0 - zxt4 n = n C I - ;; -') - - {.mmi; ld8 r11 = [vp], 8 C M01 - ld8 r10 = [up], 8 C M01 - mov r2 = ar.lc C I0 -}{.mmi; and r14 = 7, n C M I - cmp.lt p15, p14 = 8, n C M I - add n = -6, n C M I - ;; -}{.mmi; add upadv = PFDIST, up C Merging these lines into the feed-in - add vpadv = PFDIST, vp C code could save a cycle per call at - mov r23 = cy C the expense of code size. - ;; -}{.mmi; cmp.eq p6, p0 = 1, r14 C M I - cmp.eq p7, p0 = 2, r14 C M I - cmp.eq p8, p0 = 3, r14 C M I -}{.bbb; (p6) br.dptk .Lc001 C B - (p7) br.dptk .Lc010 C B - (p8) br.dptk .Lc011 C B - ;; -}{.mmi; cmp.eq p9, p0 = 4, r14 C M I - cmp.eq p10, p0 = 5, r14 C M I - cmp.eq p11, p0 = 6, r14 C M I -}{.bbb; (p9) br.dptk .Lc100 C B - (p10) br.dptk .Lc101 C B - (p11) br.dptk .Lc110 C B - ;; -}{.mmi; ld8 r19 = [vp], 8 C M01 - ld8 r18 = [up], 8 C M01 - cmp.ne p13, p0 = 0, cy C copy cy to p13 M I -}{.mmb; cmp.eq p12, p0 = 7, r14 C M I - nop 0 - (p12) br.dptk .Lc111 C B - ;; -} - -.Lc000: - {.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - shr.u n = n, 3 C I0 - ;; -}{.mmi; add vpadv = PFDIST, vp C M I - ld8 v0 = [vp], 8 C M01 - mov ar.lc = n C I0 -}{.mmi; ld8 u0 = [up], 8 C M01 - ADDSUB w1 = r10, r11 C M I - nop 0 - ;; -}{.mmi; add upadv = PFDIST, up C M I - ld8 v1 = [vp], 8 C M01 - cmp.CND p7, p0 = w1, r10 C M I -}{.mmi; ld8 u1 = [up], 8 C M01 - ADDSUB w2 = r18, r19 C M I - add rpx = 8, rp C M I - ;; -}{.mmi; ld8 v2 = [vp], 8 C M01 - cmp.CND p8, p0 = w2, r18 C M I - (p13) cmpeqor p7, p0 = LIM, w1 C M I -}{.mmi; ld8 u2 = [up], 8 C M01 - (p13) add w1 = INCR, w1 C M I - ADDSUB w3 = u3, v3 C M I - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - cmp.CND p9, p0 = w3, u3 C M I - (p7) cmpeqor p8, p0 = LIM, w2 C M I -}{.mmb; ld8 u3 = [up], 8 C M01 - (p7) add w2 = INCR, w2 C M I - br L(m0) -} - -.Lc001: - {.mmi; (p15) ld8 v1 = [vp], 8 C M01 - (p15) ld8 u1 = [up], 8 C M01 - ADDSUB w0 = r10, r11 C M I -}{.mmb; nop 0 - nop 0 - (p15) br L(0) - ;; -}{.mmi; cmp.ne p9, p0 = 0, r23 C M I - mov r8 = 0 - cmp.CND p6, p0 = w0, r10 C M I - ;; -}{.mmb; (p9) cmpeqor p6, p0 = LIM, w0 C M I - (p9) add w0 = INCR, w0 C M I - br L(cj1) C B -} -L(0): - {.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - shr.u n = n, 3 C I0 - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - mov ar.lc = n C I0 -}{.mmi; nop 0 - cmp.ne p9, p0 = 0, r23 C M I - nop 0 - ;; -}{.mmi; ld8 v0 = [vp], 8 C M01 - cmp.CND p6, p0 = w0, r10 C M I - add rpx = 16, rp C M I -}{.mmb; ld8 u0 = [up], 8 C M01 - ADDSUB w1 = u1, v1 C M I - br L(c1) C B -} - -.Lc010: - {.mmi; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - mov r8 = 0 C M I -}{.mmb; ADDSUB w3 = r10, r11 C M I - cmp.ne p8, p0 = 0, r23 C M I - (p15) br L(1) C B - ;; -}{.mmi; cmp.CND p9, p0 = w3, r10 C M I - ADDSUB w0 = u0, v0 C M I - (p8) add w3 = INCR, w3 C M I - ;; -}{.mmb; cmp.CND p6, p0 = w0, u0 C M I - (p8) cmpeqor p9, p0 = LIM2, w3 C M I - br L(cj2) C B -} -L(1): - {.mmi; ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - shr.u n = n, 3 C I0 - ;; -}{.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - mov ar.lc = n C I0 - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - cmp.CND p9, p0 = w3, r10 C M I - ;; -}{.mmi; (p8) cmpeqor p9, p0 = LIM, w3 C M I - (p8) add w3 = INCR, w3 C M I - ADDSUB w0 = u0, v0 C M I -}{.mmb; add rpx = 24, rp C M I - nop 0 - br L(m23) C B -} - -.Lc011: - {.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - shr.u n = n, 3 C I0 -}{.mmi; ADDSUB w2 = r10, r11 C M I - cmp.ne p7, p0 = 0, r23 C M I - nop 0 - ;; -}{.mmb; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - (p15) br L(2) C B -}{.mmi; cmp.CND p8, p0 = w2, r10 C M I - ADDSUB w3 = u3, v3 C M I - nop 0 - ;; -}{.mmb; (p7) cmpeqor p8, p0 = LIM, w2 C M I - (p7) add w2 = INCR, w2 C M I - br L(cj3) C B -} -L(2): - {.mmi; ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - ADDSUB w3 = u3, v3 C M I - ;; -}{.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - cmp.CND p8, p0 = w2, r10 C M I - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - cmp.CND p9, p0 = w3, u3 C M I - mov ar.lc = n C I0 -}{.mmi; ld8 u3 = [up], 8 C M01 - (p7) cmpeqor p8, p0 = LIM, w2 C M I - (p7) add w2 = INCR, w2 C M I - ;; -}{.mmi; add rpx = 32, rp C M I - st8 [rp] = w2, 8 C M23 - (p8) cmpeqor p9, p0 = LIM, w3 C M I -}{.mmb; (p8) add w3 = INCR, w3 C M I - ADDSUB w0 = u0, v0 C M I - br L(m23) -} - -.Lc100: - {.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - shr.u n = n, 3 C I0 -}{.mmi; ADDSUB w1 = r10, r11 C M I - nop 0 - nop 0 - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - add rpx = 8, rp C M I -}{.mmi; cmp.ne p6, p0 = 0, r23 C M I - cmp.CND p7, p0 = w1, r10 C M I - nop 0 - ;; -}{.mmi; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - ADDSUB w2 = u2, v2 C M I -}{.mmb; (p6) cmpeqor p7, p0 = LIM, w1 C M I - (p6) add w1 = INCR, w1 C M I - (p14) br L(cj4) - ;; -}{.mmi; ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - mov ar.lc = n C I0 - ;; -}{.mmi; ld8 v2 = [vp], 8 C M01 - cmp.CND p8, p0 = w2, u2 C M I - nop 0 -}{.mmi; ld8 u2 = [up], 8 C M01 - nop 0 - ADDSUB w3 = u3, v3 C M I - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - cmp.CND p9, p0 = w3, u3 C M I - (p7) cmpeqor p8, p0 = LIM, w2 C M I -}{.mmb; ld8 u3 = [up], 8 C M01 - (p7) add w2 = INCR, w2 C M I - br L(m4) -} - -.Lc101: - {.mmi; ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - shr.u n = n, 3 C I0 - ;; -}{.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - mov ar.lc = n C I0 - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - ADDSUB w0 = r10, r11 C M I -}{.mmi; cmp.ne p9, p0 = 0, r23 C M I - add rpx = 16, rp C M I - nop 0 - ;; -}{.mmi; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - cmp.CND p6, p0 = w0, r10 C M I -}{.mbb; ADDSUB w1 = u1, v1 C M I - (p15) br L(c5) C B - br L(end) C B -} - -.Lc110: - {.mmi; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - shr.u n = n, 3 C I0 - ;; -}{.mmi; add upadv = PFDIST, up C M I - add vpadv = PFDIST, vp C M I - mov ar.lc = n C I0 -}{.mmi; ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - ADDSUB w3 = r10, r11 C M I - ;; -}{.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - ADDSUB w0 = u0, v0 C M I -}{.mmi; cmp.CND p9, p0 = w3, r10 C M I - cmp.ne p8, p0 = 0, r23 C M I - add rpx = 24, rp C M I - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - nop 0 -}{.mmb; (p8) cmpeqor p9, p0 = LIM, w3 C M I - (p8) add w3 = INCR, w3 C M I - br L(m67) C B -} - -.Lc111: - {.mmi; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - shr.u n = n, 3 C I0 - ;; -}{.mmi; add upadv = PFDIST, up C M I - ld8 v1 = [vp], 8 C M01 - mov ar.lc = n C I0 -}{.mmi; ld8 u1 = [up], 8 C M01 - ADDSUB w2 = r10, r11 C M I - nop 0 - ;; -}{.mmi; add vpadv = PFDIST, vp C M I - ld8 v2 = [vp], 8 C M01 - cmp.CND p8, p0 = w2, r10 C M I -}{.mmi; ld8 u2 = [up], 8 C M01 - ADDSUB w3 = r18, r19 C M I - nop 0 - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - cmp.CND p9, p0 = w3, r18 C M I - (p13) cmpeqor p8, p0 = LIM, w2 C M I -}{.mmi; ld8 u3 = [up], 8 C M01 - (p13) add w2 = INCR, w2 C M I - nop 0 - ;; -}{.mmi; add rpx = 32, rp C M I - st8 [rp] = w2, 8 C M23 - (p8) cmpeqor p9, p0 = LIM, w3 C M I -}{.mmb; (p8) add w3 = INCR, w3 C M I - ADDSUB w0 = u0, v0 C M I - br L(m67) -} -EPILOGUE() - -PROLOGUE(func) - .prologue - .save ar.lc, r2 - .body -ifdef(`HAVE_ABI_32',` - addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - nop.i 0 - addp4 vp = 0, vp C M I - nop.m 0 - zxt4 n = n C I - ;; -') - - {.mmi; ld8 r11 = [vp], 8 C M01 - ld8 r10 = [up], 8 C M01 - mov r2 = ar.lc C I0 -}{.mmi; and r14 = 7, n C M I - cmp.lt p15, p14 = 8, n C M I - add n = -6, n C M I - ;; -}{.mmi; cmp.eq p6, p0 = 1, r14 C M I - cmp.eq p7, p0 = 2, r14 C M I - cmp.eq p8, p0 = 3, r14 C M I -}{.bbb; (p6) br.dptk .Lb001 C B - (p7) br.dptk .Lb010 C B - (p8) br.dptk .Lb011 C B - ;; -}{.mmi; cmp.eq p9, p0 = 4, r14 C M I - cmp.eq p10, p0 = 5, r14 C M I - cmp.eq p11, p0 = 6, r14 C M I -}{.bbb; (p9) br.dptk .Lb100 C B - (p10) br.dptk .Lb101 C B - (p11) br.dptk .Lb110 C B - ;; -}{.mmi; ld8 r19 = [vp], 8 C M01 - ld8 r18 = [up], 8 C M01 - cmp.ne p13, p0 = r0, r0 C clear "CF" M I -}{.mmb; cmp.eq p12, p0 = 7, r14 C M I - mov r23 = 0 C M I - (p12) br.dptk .Lb111 C B - ;; -} - -.Lb000: - {.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - shr.u n = n, 3 C I0 - ;; -}{.mmi; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - ADDSUB w1 = r10, r11 C M I - ;; -}{.mmi; ld8 v1 = [vp], 8 C M01 - cmp.CND p7, p0 = w1, r10 C M I - mov ar.lc = n C I0 -}{.mmi; ld8 u1 = [up], 8 C M01 - ADDSUB w2 = r18, r19 C M I - add rpx = 8, rp C M I - ;; -}{.mmi; add upadv = PFDIST, up - add vpadv = PFDIST, vp - cmp.CND p8, p0 = w2, r18 C M I -}{.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - ADDSUB w3 = u3, v3 C M I - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - cmp.CND p9, p0 = w3, u3 C M I - (p7) cmpeqor p8, p0 = LIM, w2 C M I -}{.mmb; ld8 u3 = [up], 8 C M01 - (p7) add w2 = INCR, w2 C M I - br L(m0) C B -} - - ALIGN(32) -.Lb001: - {.mmi; ADDSUB w0 = r10, r11 C M I - (p15) ld8 v1 = [vp], 8 C M01 - mov r8 = 0 C M I - ;; -}{.mmb; cmp.CND p6, p0 = w0, r10 C M I - (p15) ld8 u1 = [up], 8 C M01 - (p14) br L(cj1) C B - ;; -}{.mmi; add upadv = PFDIST, up - add vpadv = PFDIST, vp - shr.u n = n, 3 C I0 -}{.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - cmp.CND p6, p0 = w0, r10 C M I - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - mov ar.lc = n C I0 - ;; -}{.mmi; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - ADDSUB w1 = u1, v1 C M I - ;; -}{.mmi; ld8 v1 = [vp], 8 C M01 - cmp.CND p7, p0 = w1, u1 C M I - ADDSUB w2 = u2, v2 C M I -}{.mmb; ld8 u1 = [up], 8 C M01 - add rpx = 16, rp C M I - br L(m1) C B -} - - ALIGN(32) -.Lb010: - {.mmi; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - shr.u n = n, 3 C I0 -}{.mmb; ADDSUB w3 = r10, r11 C M I - nop 0 - (p15) br L(gt2) C B - ;; -}{.mmi; cmp.CND p9, p0 = w3, r10 C M I - ADDSUB w0 = u0, v0 C M I - mov r8 = 0 C M I - ;; -}{.mmb; nop 0 - cmp.CND p6, p0 = w0, u0 C M I - br L(cj2) C B -} -L(gt2): - {.mmi; ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - nop 0 - ;; -}{.mmi; add upadv = PFDIST, up - add vpadv = PFDIST, vp - mov ar.lc = n C I0 -}{.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - nop 0 - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - cmp.CND p9, p0 = w3, r10 C M I - ADDSUB w0 = u0, v0 C M I -}{.mmb; ld8 u3 = [up], 8 C M01 - add rpx = 24, rp C M I - br L(m23) C B -} - - ALIGN(32) -.Lb011: - {.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - ADDSUB w2 = r10, r11 C M I - ;; -}{.mmb; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - (p15) br L(3) C B -}{.mmb; cmp.CND p8, p0 = w2, r10 C M I - ADDSUB w3 = u3, v3 C M I - br L(cj3) C B -} -L(3): - {.mmi; ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - shr.u n = n, 3 C I0 - ;; -}{.mmi; add upadv = PFDIST, up - add vpadv = PFDIST, vp - ADDSUB w3 = u3, v3 C M I -}{.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - cmp.CND p8, p0 = w2, r10 C M I - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - cmp.CND p9, p0 = w3, u3 C M I - mov ar.lc = n C I0 -}{.mmi; ld8 u3 = [up], 8 C M01 - nop 0 - nop 0 - ;; -}{.mmi; add rpx = 32, rp C M I - st8 [rp] = w2, 8 C M23 - (p8) cmpeqor p9, p0 = LIM, w3 C M I -}{.mmb; (p8) add w3 = INCR, w3 C M I - ADDSUB w0 = u0, v0 C M I - br L(m23) C B -} - - ALIGN(32) -.Lb100: - {.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - shr.u n = n, 3 C I0 - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - ADDSUB w1 = r10, r11 C M I - ;; -}{.mmi; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - cmp.CND p7, p0 = w1, r10 C M I -}{.mmb; nop 0 - ADDSUB w2 = u2, v2 C M I - (p14) br L(cj4) C B - ;; -} -L(gt4): - {.mmi; add upadv = PFDIST, up - add vpadv = PFDIST, vp - mov ar.lc = n C I0 -}{.mmi; ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - nop 0 - ;; -}{.mmi; ld8 v2 = [vp], 8 C M01 - cmp.CND p8, p0 = w2, u2 C M I - nop 0 -}{.mmi; ld8 u2 = [up], 8 C M01 - ADDSUB w3 = u3, v3 C M I - add rpx = 8, rp C M I - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - cmp.CND p9, p0 = w3, u3 C M I - (p7) cmpeqor p8, p0 = LIM, w2 C M I -}{.mmb; ld8 u3 = [up], 8 C M01 - (p7) add w2 = INCR, w2 C M I - br L(m4) C B -} - - ALIGN(32) -.Lb101: - {.mmi; ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - shr.u n = n, 3 C I0 - ;; -}{.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - ADDSUB w0 = r10, r11 C M I - ;; -}{.mmi; add upadv = PFDIST, up - add vpadv = PFDIST, vp - add rpx = 16, rp C M I -}{.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - nop 0 - ;; -}{.mmi; ld8 v0 = [vp], 8 C M01 - cmp.CND p6, p0 = w0, r10 C M I - nop 0 -}{.mmb; ld8 u0 = [up], 8 C M01 - ADDSUB w1 = u1, v1 C M I - (p14) br L(cj5) C B - ;; -} -L(gt5): - {.mmi; ld8 v1 = [vp], 8 C M01 - cmp.CND p7, p0 = w1, u1 C M I - mov ar.lc = n C I0 -}{.mmb; ld8 u1 = [up], 8 C M01 - ADDSUB w2 = u2, v2 C M I - br L(m5) C B -} - - ALIGN(32) -.Lb110: - {.mmi; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - shr.u n = n, 3 C I0 - ;; -}{.mmi; ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - ADDSUB w3 = r10, r11 C M I - ;; -}{.mmi; add upadv = PFDIST, up - add vpadv = PFDIST, vp - mov ar.lc = n C I0 -}{.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - nop 0 - ;; -}{.mmi; ld8 v3 = [vp], 8 C M01 - cmp.CND p9, p0 = w3, r10 C M I - ADDSUB w0 = u0, v0 C M I -}{.mmb; ld8 u3 = [up], 8 C M01 - add rpx = 24, rp C M I - br L(m67) C B -} - - ALIGN(32) -.Lb111: - {.mmi; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - shr.u n = n, 3 C I0 - ;; -}{.mmi; ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - ADDSUB w2 = r10, r11 C M I - ;; -}{.mmi; ld8 v2 = [vp], 8 C M01 - cmp.CND p8, p0 = w2, r10 C M I - mov ar.lc = n C I0 -}{.mmi; ld8 u2 = [up], 8 C M01 - ADDSUB w3 = r18, r19 C M I - nop 0 - ;; -}{.mmi; add upadv = PFDIST, up - add vpadv = PFDIST, vp - nop 0 -}{.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - cmp.CND p9, p0 = w3, r18 C M I - ;; -}{.mmi; add rpx = 32, rp C M I - st8 [rp] = w2, 8 C M23 - (p8) cmpeqor p9, p0 = LIM, w3 C M I -}{.mmb; (p8) add w3 = INCR, w3 C M I - ADDSUB w0 = u0, v0 C M I - br L(m67) C B -} - -C *** MAIN LOOP START *** - ALIGN(32) -L(top): -L(c5): ld8 v1 = [vp], 8 C M01 - cmp.CND p7, p0 = w1, u1 C M I - (p9) cmpeqor p6, p0 = LIM, w0 C M I - ld8 u1 = [up], 8 C M01 - (p9) add w0 = INCR, w0 C M I - ADDSUB w2 = u2, v2 C M I - ;; -L(m5): ld8 v2 = [vp], 8 C M01 - cmp.CND p8, p0 = w2, u2 C M I - (p6) cmpeqor p7, p0 = LIM, w1 C M I - ld8 u2 = [up], 8 C M01 - (p6) add w1 = INCR, w1 C M I - ADDSUB w3 = u3, v3 C M I - ;; - st8 [rp] = w0, 8 C M23 - ld8 v3 = [vp], 8 C M01 - cmp.CND p9, p0 = w3, u3 C M I - (p7) cmpeqor p8, p0 = LIM, w2 C M I - ld8 u3 = [up], 8 C M01 - (p7) add w2 = INCR, w2 C M I - ;; -L(m4): st8 [rp] = w1, 16 C M23 - st8 [rpx] = w2, 32 C M23 - (p8) cmpeqor p9, p0 = LIM, w3 C M I - lfetch [upadv], 64 - (p8) add w3 = INCR, w3 C M I - ADDSUB w0 = u0, v0 C M I - ;; -L(m23): st8 [rp] = w3, 8 C M23 - ld8 v0 = [vp], 8 C M01 - cmp.CND p6, p0 = w0, u0 C M I - ld8 u0 = [up], 8 C M01 - ADDSUB w1 = u1, v1 C M I - nop.b 0 - ;; -L(c1): ld8 v1 = [vp], 8 C M01 - cmp.CND p7, p0 = w1, u1 C M I - (p9) cmpeqor p6, p0 = LIM, w0 C M I - ld8 u1 = [up], 8 C M01 - (p9) add w0 = INCR, w0 C M I - ADDSUB w2 = u2, v2 C M I - ;; -L(m1): ld8 v2 = [vp], 8 C M01 - cmp.CND p8, p0 = w2, u2 C M I - (p6) cmpeqor p7, p0 = LIM, w1 C M I - ld8 u2 = [up], 8 C M01 - (p6) add w1 = INCR, w1 C M I - ADDSUB w3 = u3, v3 C M I - ;; - st8 [rp] = w0, 8 C M23 - ld8 v3 = [vp], 8 C M01 - cmp.CND p9, p0 = w3, u3 C M I - (p7) cmpeqor p8, p0 = LIM, w2 C M I - ld8 u3 = [up], 8 C M01 - (p7) add w2 = INCR, w2 C M I - ;; -L(m0): st8 [rp] = w1, 16 C M23 - st8 [rpx] = w2, 32 C M23 - (p8) cmpeqor p9, p0 = LIM, w3 C M I - lfetch [vpadv], 64 - (p8) add w3 = INCR, w3 C M I - ADDSUB w0 = u0, v0 C M I - ;; -L(m67): st8 [rp] = w3, 8 C M23 - ld8 v0 = [vp], 8 C M01 - cmp.CND p6, p0 = w0, u0 C M I - ld8 u0 = [up], 8 C M01 - ADDSUB w1 = u1, v1 C M I - br.cloop.dptk L(top) C B - ;; -C *** MAIN LOOP END *** - -L(end): - {.mmi; (p9) cmpeqor p6, p0 = LIM, w0 C M I - (p9) add w0 = INCR, w0 C M I - mov ar.lc = r2 C I0 -} -L(cj5): - {.mmi; cmp.CND p7, p0 = w1, u1 C M I - ADDSUB w2 = u2, v2 C M I - nop 0 - ;; -}{.mmi; st8 [rp] = w0, 8 C M23 - (p6) cmpeqor p7, p0 = LIM, w1 C M I - (p6) add w1 = INCR, w1 C M I -} -L(cj4): - {.mmi; cmp.CND p8, p0 = w2, u2 C M I - ADDSUB w3 = u3, v3 C M I - nop 0 - ;; -}{.mmi; st8 [rp] = w1, 8 C M23 - (p7) cmpeqor p8, p0 = LIM, w2 C M I - (p7) add w2 = INCR, w2 C M I -} -L(cj3): - {.mmi; cmp.CND p9, p0 = w3, u3 C M I - ADDSUB w0 = u0, v0 C M I - nop 0 - ;; -}{.mmi; st8 [rp] = w2, 8 C M23 - (p8) cmpeqor p9, p0 = LIM, w3 C M I - (p8) add w3 = INCR, w3 C M I -}{.mmi; cmp.CND p6, p0 = w0, u0 C M I - nop 0 - mov r8 = 0 C M I - ;; -} -L(cj2): - {.mmi; st8 [rp] = w3, 8 C M23 - (p9) cmpeqor p6, p0 = LIM, w0 C M I - (p9) add w0 = INCR, w0 C M I - ;; -} -L(cj1): - {.mmb; st8 [rp] = w0, 8 C M23 - (p6) mov r8 = 1 C M I - br.ret.sptk.many b0 C B -} -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/aorsorrlsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/aorsorrlsh1_n.asm deleted file mode 100644 index 9b58b9e11f00249facf843f6ff03444104a37c79..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/aorsorrlsh1_n.asm +++ /dev/null @@ -1,48 +0,0 @@ -dnl IA-64 mpn_addlsh1_n, mpn_sublsh1_n, mpn_rsblsh1_n - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2003-2005, 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 3.0 -C Itanium 2: 1.5 - - -define(LSH, 1) - -ifdef(`OPERATION_addlsh1_n',`define(`DO_add')') -ifdef(`OPERATION_sublsh1_n',`define(`DO_sub')') -ifdef(`OPERATION_rsblsh1_n',`define(`DO_rsb')') - -MULFUNC_PROLOGUE(mpn_addlsh1_n mpn_sublsh1_n mpn_rsblsh1_n) - -include_mpn(`ia64/aorsorrlshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/aorsorrlsh2_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/aorsorrlsh2_n.asm deleted file mode 100644 index 39b384a91bb879c4b916f0823dd59b0f35826ed2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/aorsorrlsh2_n.asm +++ /dev/null @@ -1,48 +0,0 @@ -dnl IA-64 mpn_addlsh2_n, mpn_sublsh2_n, mpn_rsblsh2_n - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2003-2005, 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 3.0 -C Itanium 2: 1.5 - - -define(LSH, 2) - -ifdef(`OPERATION_addlsh2_n',`define(`DO_add')') -ifdef(`OPERATION_sublsh2_n',`define(`DO_sub')') -ifdef(`OPERATION_rsblsh2_n',`define(`DO_rsb')') - -MULFUNC_PROLOGUE(mpn_addlsh2_n mpn_sublsh2_n mpn_rsblsh2_n) - -include_mpn(`ia64/aorsorrlshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/aorsorrlshC_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/aorsorrlshC_n.asm deleted file mode 100644 index 2703ce21df7ec495db80e6cb3f95b0a72afb48fa..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/aorsorrlshC_n.asm +++ /dev/null @@ -1,412 +0,0 @@ -dnl IA-64 mpn_addlshC_n, mpn_sublshC_n, mpn_rsblshC_n. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2003-2005, 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -C cycles/limb -C Itanium: ? -C Itanium 2: 1.5 - -C TODO -C * Use shladd in feed-in code (for mpn_addlshC_n). -C * Rewrite loop to schedule loads closer to use, since we do prefetch. - -C INPUT PARAMETERS -define(`rp', `r32') -define(`up', `r33') -define(`vp', `r34') -define(`n', `r35') - -ifdef(`DO_add', ` - define(`ADDSUB', `add $1 = $2, $3') - define(`CMP', `cmp.ltu $1,p0 = $2, $3') - define(`INCR', 1) - define(`LIM', -1) - define(`func', mpn_addlsh`'LSH`'_n)') -ifdef(`DO_sub', ` - define(`ADDSUB', `sub $1 = $2, $3') - define(`CMP', `cmp.gtu $1,p0 = $2, $3') - define(`INCR', -1) - define(`LIM', 0) - define(`func', mpn_sublsh`'LSH`'_n)') -ifdef(`DO_rsb', ` - define(`ADDSUB', `sub $1 = $3, $2') - define(`CMP', `cmp.gtu $1,p0 = $2, $4') - define(`INCR', -1) - define(`LIM', 0) - define(`func', mpn_rsblsh`'LSH`'_n)') - -define(PFDIST, 500) - -define(`u0',`r14') define(`u1',`r15') define(`u2',`r16') define(`u3',`r17') -define(`v0',`r18') define(`v1',`r19') define(`v2',`r20') define(`v3',`r21') -define(`w0',`r22') define(`w1',`r23') define(`w2',`r24') define(`w3',`r25') -define(`s0',`r26') define(`s1',`r27') define(`s2',`r28') define(`s3',`r29') -define(`x0',`r30') define(`x1',`r31') define(`x2',`r3') define(`x3',`r9') - -C r3 r8 r9 r10 r11 - -ASM_START() -PROLOGUE(func) - .prologue - .save ar.lc, r2 - .body -ifdef(`HAVE_ABI_32',` - addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - nop.i 0 - addp4 vp = 0, vp C M I - nop.m 0 - zxt4 n = n C I - ;; -') - {.mmi; ld8 r11 = [vp], 8 C M01 - ld8 r10 = [up], 8 C M01 - mov.i r2 = ar.lc C I0 -}{.mmi; and r14 = 3, n C M I - cmp.lt p15, p0 = 4, n C M I - add n = -5, n C M I - ;; -}{.mmi; cmp.eq p6, p0 = 1, r14 C M I - cmp.eq p7, p0 = 2, r14 C M I - cmp.eq p8, p0 = 3, r14 C M I -}{.bbb - (p6) br.dptk .Lb01 C B - (p7) br.dptk .Lb10 C B - (p8) br.dptk .Lb11 C B -} - -.Lb00: - {.mmi; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - shr.u n = n, 2 C I0 - ;; -}{.mmi; ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - shl x3 = r11, LSH C I0 - ;; -}{.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - shrp x0 = v0, r11, 64-LSH C I0 -}{.mmb; ADDSUB( w3, r10, x3) C M I - nop 0 - (p15) br.dpnt .grt4 C B - ;; -}{.mii; CMP( p7, w3, r10, x3) C M II0 - shrp x1 = v1, v0, 64-LSH C I0 - ADDSUB( w0, u0, x0) C M I - ;; -}{.mii; CMP( p8, w0, u0, x0) C M I - shrp x2 = v2, v1, 64-LSH C I0 - ADDSUB( w1, u1, x1) C M I -}{.mmb; nop 0 - nop 0 - br .Lcj4 C B -} -ALIGN(32) -.grt4: - {.mii; ld8 v3 = [vp], 8 C M01 - shrp x0 = v0, r11, 64-LSH C I0 - CMP( p8, w3, r10, x3) C M I - ;; -}{.mmi; ld8 u3 = [up], 8 C M01 - add r11 = PFDIST, vp - shrp x1 = v1, v0, 64-LSH C I0 -}{.mmi; ld8 v0 = [vp], 8 C M01 - ADDSUB( w0, u0, x0) C M I - nop 0 - ;; -}{.mmi; CMP( p6, w0, u0, x0) C M I - add r10 = PFDIST, up - mov.i ar.lc = n C I0 -}{.mmb; ADDSUB( w1, u1, x1) C M I - ld8 u0 = [up], 8 C M01 - br .LL00 C B -} - - ALIGN(32) -.Lb01: -ifdef(`DO_add', -` shladd w2 = r11, LSH, r10 C M I - shr.u r8 = r11, 64-LSH C retval I0 - (p15) br.dpnt .grt1 C B - ;; -',` - shl x2 = r11, LSH C I0 - (p15) br.dpnt .grt1 C B - ;; - ADDSUB( w2, r10, x2) C M I - shr.u r8 = r11, 64-LSH C retval I0 - ;; -') - CMP( p6, w2, r10, x2) C M I - br .Lcj1 - -.grt1: ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - shr.u n = n, 2 C I0 - ;; - ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - mov.i ar.lc = n C FIXME swap with next I0 -ifdef(`DO_add', -`',` - ADDSUB( w2, r10, x2) -') - ;; - {.mmi; ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - shrp x3 = v3, r11, 64-LSH C I0 - ;; -}{.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - shrp x0 = v0, v3, 64-LSH C I0 -}{.mmb; CMP( p6, w2, r10, x2) C M I - ADDSUB( w3, u3, x3) C M I - br.cloop.dptk .grt5 C B - ;; -}{.mmi; CMP( p7, w3, u3, x3) C M I - ADDSUB( w0, u0, x0) C M I - shrp x1 = v1, v0, 64-LSH C I0 -}{.mmb; nop 0 - nop 0 - br .Lcj5 C B -} -.grt5: - {.mmi; add r10 = PFDIST, up - add r11 = PFDIST, vp - shrp x0 = v0, v3, 64-LSH C I0 -}{.mmb; ld8 v3 = [vp], 8 C M01 - CMP( p8, w3, u3, x3) C M I - br .LL01 C B -} - ALIGN(32) -.Lb10: - {.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - shl x1 = r11, LSH C I0 -}{.mmb; nop 0 - nop 0 - (p15) br.dpnt .grt2 C B - ;; -}{.mmi; ADDSUB( w1, r10, x1) C M I - nop 0 - shrp x2 = v2, r11, 64-LSH C I0 - ;; -}{.mmi; CMP( p9, w1, r10, x1) C M I - ADDSUB( w2, u2, x2) C M I - shr.u r8 = v2, 64-LSH C retval I0 - ;; -}{.mmb; CMP( p6, w2, u2, x2) C M I - nop 0 - br .Lcj2 C B -} -.grt2: - {.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - shr.u n = n, 2 C I0 - ;; -}{.mmi; ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - mov.i ar.lc = n C I0 -}{.mmi; ADDSUB( w1, r10, x1) C M I - nop 0 - nop 0 - ;; -}{.mii; ld8 v1 = [vp], 8 C M01 - shrp x2 = v2, r11, 64-LSH C I0 - CMP( p8, w1, r10, x1) C M I - ;; -}{.mmi; add r10 = PFDIST, up - ld8 u1 = [up], 8 C M01 - shrp x3 = v3, v2, 64-LSH C I0 -}{.mmi; add r11 = PFDIST, vp - ld8 v2 = [vp], 8 C M01 - ADDSUB( w2, u2, x2) C M I - ;; -}{.mmi; CMP( p6, w2, u2, x2) C M I - ld8 u2 = [up], 8 C M01 - shrp x0 = v0, v3, 64-LSH C I0 -}{.mib; ADDSUB( w3, u3, x3) C M I - nop 0 - br.cloop.dpnt L(top) C B -} - br L(end) C B -.Lb11: - {.mmi; ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - shl x0 = r11, LSH C I0 - ;; -}{.mmi; ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - shr.u n = n, 2 C I0 -}{.mmb; nop 0 - nop 0 - (p15) br.dpnt .grt3 C B - ;; -}{.mii; nop 0 - shrp x1 = v1, r11, 64-LSH C I0 - ADDSUB( w0, r10, x0) C M I - ;; -}{.mii; CMP( p8, w0, r10, x0) C M I - shrp x2 = v2, v1, 64-LSH C I0 - ADDSUB( w1, u1, x1) C M I - ;; -}{.mmb; CMP( p9, w1, u1, x1) C M I - ADDSUB( w2, u2, x2) C M I - br .Lcj3 C B -} -.grt3: - {.mmi; ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - shrp x1 = v1, r11, 64-LSH C I0 -}{.mmi; ADDSUB( w0, r10, x0) C M I - nop 0 - nop 0 - ;; -}{.mmi; ld8 v0 = [vp], 8 C M01 - CMP( p6, w0, r10, x0) C M I - mov.i ar.lc = n C I0 -}{.mmi; ld8 u0 = [up], 8 C M01 - ADDSUB( w1, u1, x1) C M I - nop 0 - ;; -}{.mmi; add r10 = PFDIST, up - add r11 = PFDIST, vp - shrp x2 = v2, v1, 64-LSH C I0 -}{.mmb; ld8 v1 = [vp], 8 C M01 - CMP( p8, w1, u1, x1) C M I - br .LL11 C B -} - -C *** MAIN LOOP START *** - ALIGN(32) -L(top): st8 [rp] = w1, 8 C M23 - lfetch [r10], 32 - (p8) cmpeqor p6, p0 = LIM, w2 C M I - (p8) add w2 = INCR, w2 C M I - ld8 v3 = [vp], 8 C M01 - CMP( p8, w3, u3, x3) C M I - ;; -.LL01: ld8 u3 = [up], 8 C M01 - shrp x1 = v1, v0, 64-LSH C I0 - (p6) cmpeqor p8, p0 = LIM, w3 C M I - (p6) add w3 = INCR, w3 C M I - ld8 v0 = [vp], 8 C M01 - ADDSUB( w0, u0, x0) C M I - ;; - st8 [rp] = w2, 8 C M23 - CMP( p6, w0, u0, x0) C M I - nop.b 0 - ld8 u0 = [up], 8 C M01 - lfetch [r11], 32 - ADDSUB( w1, u1, x1) C M I - ;; -.LL00: st8 [rp] = w3, 8 C M23 - shrp x2 = v2, v1, 64-LSH C I0 - (p8) cmpeqor p6, p0 = LIM, w0 C M I - (p8) add w0 = INCR, w0 C M I - ld8 v1 = [vp], 8 C M01 - CMP( p8, w1, u1, x1) C M I - ;; -.LL11: ld8 u1 = [up], 8 C M01 - shrp x3 = v3, v2, 64-LSH C I0 - (p6) cmpeqor p8, p0 = LIM, w1 C M I - (p6) add w1 = INCR, w1 C M I - ld8 v2 = [vp], 8 C M01 - ADDSUB( w2, u2, x2) C M I - ;; - {.mmi; st8 [rp] = w0, 8 C M23 - CMP( p6, w2, u2, x2) C M I - shrp x0 = v0, v3, 64-LSH C I0 -}{.mib; - ld8 u2 = [up], 8 C M01 - ADDSUB( w3, u3, x3) C M I - br.cloop.dptk L(top) C B - ;; -} -C *** MAIN LOOP END *** - -L(end): - {.mmi; st8 [rp] = w1, 8 C M23 - (p8) cmpeqor p6, p0 = LIM, w2 C M I - shrp x1 = v1, v0, 64-LSH C I0 -}{.mmi; - (p8) add w2 = INCR, w2 C M I - CMP( p7, w3, u3, x3) C M I - ADDSUB( w0, u0, x0) C M I - ;; -} -.Lcj5: - {.mmi; st8 [rp] = w2, 8 C M23 - (p6) cmpeqor p7, p0 = LIM, w3 C M I - shrp x2 = v2, v1, 64-LSH C I0 -}{.mmi; - (p6) add w3 = INCR, w3 C M I - CMP( p8, w0, u0, x0) C M I - ADDSUB( w1, u1, x1) C M I - ;; -} -.Lcj4: - {.mmi; st8 [rp] = w3, 8 C M23 - (p7) cmpeqor p8, p0 = LIM, w0 C M I - mov.i ar.lc = r2 C I0 -}{.mmi; - (p7) add w0 = INCR, w0 C M I - CMP( p9, w1, u1, x1) C M I - ADDSUB( w2, u2, x2) C M I - ;; -} -.Lcj3: - {.mmi; st8 [rp] = w0, 8 C M23 - (p8) cmpeqor p9, p0 = LIM, w1 C M I - shr.u r8 = v2, 64-LSH C I0 -}{.mmi; - (p8) add w1 = INCR, w1 C M I - CMP( p6, w2, u2, x2) C M I - nop 0 - ;; -} -.Lcj2: - {.mmi; st8 [rp] = w1, 8 C M23 - (p9) cmpeqor p6, p0 = LIM, w2 C M I - (p9) add w2 = INCR, w2 C M I - ;; -} -.Lcj1: - {.mmb; st8 [rp] = w2 C M23 -ifdef(`DO_rsb',` - (p6) add r8 = -1, r8 C M I -',` - (p6) add r8 = 1, r8 C M I -') br.ret.sptk.many b0 C B -} -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/bdiv_dbm1c.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/bdiv_dbm1c.asm deleted file mode 100644 index 47e4553cda5dd7a42d63fdf4b899603ab9145ec6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/bdiv_dbm1c.asm +++ /dev/null @@ -1,516 +0,0 @@ -dnl IA-64 mpn_bdiv_dbm1. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2008, 2009 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 4 -C Itanium 2: 2 - -C TODO -C * Optimize feed-in and wind-down code, both for speed and code size. - -C INPUT PARAMETERS -define(`rp', `r32') -define(`up', `r33') -define(`n', `r34') -define(`bd', `r35') - -ASM_START() -PROLOGUE(mpn_bdiv_dbm1c) - .prologue - .save ar.lc, r2 - .body - -ifdef(`HAVE_ABI_32', -` addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - zxt4 n = n C I - ;; -') -{.mmb - mov r15 = r36 C M I - ldf8 f9 = [up], 8 C M - nop.b 0 C B -} -.Lcommon: -{.mii - adds r16 = -1, n C M I - mov r2 = ar.lc C I0 - and r14 = 3, n C M I - ;; -} -{.mii - setf.sig f6 = bd C M2 M3 - shr.u r31 = r16, 2 C I0 - cmp.eq p10, p0 = 0, r14 C M I -} -{.mii - nop.m 0 C M - cmp.eq p11, p0 = 2, r14 C M I - cmp.eq p12, p0 = 3, r14 C M I - ;; -} -{.mii - cmp.ne p6, p7 = r0, r0 C M I - mov.i ar.lc = r31 C I0 - cmp.ne p8, p9 = r0, r0 C M I -} -{.bbb - (p10) br.dptk .Lb00 C B - (p11) br.dptk .Lb10 C B - (p12) br.dptk .Lb11 C B - ;; -} - -.Lb01: br.cloop.dptk .grt1 - ;; - xma.l f38 = f9, f6, f0 - xma.hu f39 = f9, f6, f0 - ;; - getf.sig r26 = f38 - getf.sig r27 = f39 - br .Lcj1 - -.grt1: ldf8 f10 = [r33], 8 - ;; - ldf8 f11 = [r33], 8 - ;; - ldf8 f12 = [r33], 8 - ;; - xma.l f38 = f9, f6, f0 - xma.hu f39 = f9, f6, f0 - ;; - ldf8 f13 = [r33], 8 - ;; - xma.l f32 = f10, f6, f0 - xma.hu f33 = f10, f6, f0 - br.cloop.dptk .grt5 - - ;; - getf.sig r26 = f38 - xma.l f34 = f11, f6, f0 - xma.hu f35 = f11, f6, f0 - ;; - getf.sig r27 = f39 - ;; - getf.sig r20 = f32 - xma.l f36 = f12, f6, f0 - xma.hu f37 = f12, f6, f0 - ;; - getf.sig r21 = f33 - ;; - getf.sig r22 = f34 - xma.l f38 = f13, f6, f0 - xma.hu f39 = f13, f6, f0 - br .Lcj5 - -.grt5: ldf8 f10 = [r33], 8 - ;; - getf.sig r26 = f38 - xma.l f34 = f11, f6, f0 - xma.hu f35 = f11, f6, f0 - ;; - getf.sig r27 = f39 - ldf8 f11 = [r33], 8 - ;; - getf.sig r20 = f32 - xma.l f36 = f12, f6, f0 - xma.hu f37 = f12, f6, f0 - ;; - getf.sig r21 = f33 - ldf8 f12 = [r33], 8 - ;; - getf.sig r22 = f34 - xma.l f38 = f13, f6, f0 - xma.hu f39 = f13, f6, f0 - br .LL01 - -.Lb10: ldf8 f13 = [r33], 8 - br.cloop.dptk .grt2 - ;; - - xma.l f36 = f9, f6, f0 - xma.hu f37 = f9, f6, f0 - ;; - xma.l f38 = f13, f6, f0 - xma.hu f39 = f13, f6, f0 - ;; - getf.sig r24 = f36 - ;; - getf.sig r25 = f37 - ;; - getf.sig r26 = f38 - ;; - getf.sig r27 = f39 - br .Lcj2 - -.grt2: ldf8 f10 = [r33], 8 - ;; - ldf8 f11 = [r33], 8 - ;; - xma.l f36 = f9, f6, f0 - xma.hu f37 = f9, f6, f0 - ;; - ldf8 f12 = [r33], 8 - ;; - xma.l f38 = f13, f6, f0 - xma.hu f39 = f13, f6, f0 - ;; - ldf8 f13 = [r33], 8 - ;; - getf.sig r24 = f36 - xma.l f32 = f10, f6, f0 - xma.hu f33 = f10, f6, f0 - br.cloop.dptk .grt6 - - getf.sig r25 = f37 - ;; - getf.sig r26 = f38 - xma.l f34 = f11, f6, f0 - xma.hu f35 = f11, f6, f0 - ;; - getf.sig r27 = f39 - ;; - getf.sig r20 = f32 - xma.l f36 = f12, f6, f0 - xma.hu f37 = f12, f6, f0 - br .Lcj6 - -.grt6: getf.sig r25 = f37 - ldf8 f10 = [r33], 8 - ;; - getf.sig r26 = f38 - xma.l f34 = f11, f6, f0 - xma.hu f35 = f11, f6, f0 - ;; - getf.sig r27 = f39 - ldf8 f11 = [r33], 8 - ;; - getf.sig r20 = f32 - xma.l f36 = f12, f6, f0 - xma.hu f37 = f12, f6, f0 - br .LL10 - - -.Lb11: ldf8 f12 = [r33], 8 - ;; - ldf8 f13 = [r33], 8 - br.cloop.dptk .grt3 - ;; - - xma.l f34 = f9, f6, f0 - xma.hu f35 = f9, f6, f0 - ;; - xma.l f36 = f12, f6, f0 - xma.hu f37 = f12, f6, f0 - ;; - getf.sig r22 = f34 - xma.l f38 = f13, f6, f0 - xma.hu f39 = f13, f6, f0 - ;; - getf.sig r23 = f35 - ;; - getf.sig r24 = f36 - ;; - getf.sig r25 = f37 - ;; - getf.sig r26 = f38 - br .Lcj3 - -.grt3: ldf8 f10 = [r33], 8 - ;; - xma.l f34 = f9, f6, f0 - xma.hu f35 = f9, f6, f0 - ;; - ldf8 f11 = [r33], 8 - ;; - xma.l f36 = f12, f6, f0 - xma.hu f37 = f12, f6, f0 - ;; - ldf8 f12 = [r33], 8 - ;; - getf.sig r22 = f34 - xma.l f38 = f13, f6, f0 - xma.hu f39 = f13, f6, f0 - ;; - getf.sig r23 = f35 - ldf8 f13 = [r33], 8 - ;; - getf.sig r24 = f36 - xma.l f32 = f10, f6, f0 - xma.hu f33 = f10, f6, f0 - br.cloop.dptk .grt7 - - getf.sig r25 = f37 - ;; - getf.sig r26 = f38 - xma.l f34 = f11, f6, f0 - xma.hu f35 = f11, f6, f0 - br .Lcj7 - -.grt7: getf.sig r25 = f37 - ldf8 f10 = [r33], 8 - ;; - getf.sig r26 = f38 - xma.l f34 = f11, f6, f0 - xma.hu f35 = f11, f6, f0 - br .LL11 - - -.Lb00: ldf8 f11 = [r33], 8 - ;; - ldf8 f12 = [r33], 8 - ;; - ldf8 f13 = [r33], 8 - br.cloop.dptk .grt4 - ;; - - xma.l f32 = f9, f6, f0 - xma.hu f33 = f9, f6, f0 - ;; - xma.l f34 = f11, f6, f0 - xma.hu f35 = f11, f6, f0 - ;; - getf.sig r20 = f32 - xma.l f36 = f12, f6, f0 - xma.hu f37 = f12, f6, f0 - ;; - getf.sig r21 = f33 - ;; - getf.sig r22 = f34 - xma.l f38 = f13, f6, f0 - xma.hu f39 = f13, f6, f0 - ;; - getf.sig r23 = f35 - ;; - getf.sig r24 = f36 - br .Lcj4 - -.grt4: xma.l f32 = f9, f6, f0 - xma.hu f33 = f9, f6, f0 - ;; - ldf8 f10 = [r33], 8 - ;; - xma.l f34 = f11, f6, f0 - xma.hu f35 = f11, f6, f0 - ;; - ldf8 f11 = [r33], 8 - ;; - getf.sig r20 = f32 - xma.l f36 = f12, f6, f0 - xma.hu f37 = f12, f6, f0 - ;; - getf.sig r21 = f33 - ldf8 f12 = [r33], 8 - ;; - getf.sig r22 = f34 - xma.l f38 = f13, f6, f0 - xma.hu f39 = f13, f6, f0 - ;; - getf.sig r23 = f35 - ldf8 f13 = [r33], 8 - ;; - getf.sig r24 = f36 - xma.l f32 = f10, f6, f0 - xma.hu f33 = f10, f6, f0 - br.cloop.dptk .LL00 - br .Lcj8 - -C *** MAIN LOOP START *** - ALIGN(32) -.Ltop: - .pred.rel "mutex",p6,p7 -C .mfi - getf.sig r24 = f36 - xma.l f32 = f10, f6, f0 - (p6) sub r15 = r19, r27, 1 -C .mfi - st8 [r32] = r19, 8 - xma.hu f33 = f10, f6, f0 - (p7) sub r15 = r19, r27 - ;; -.LL00: -C .mfi - getf.sig r25 = f37 - nop.f 0 - cmp.ltu p6, p7 = r15, r20 -C .mib - ldf8 f10 = [r33], 8 - sub r16 = r15, r20 - nop.b 0 - ;; - -C .mfi - getf.sig r26 = f38 - xma.l f34 = f11, f6, f0 - (p6) sub r15 = r16, r21, 1 -C .mfi - st8 [r32] = r16, 8 - xma.hu f35 = f11, f6, f0 - (p7) sub r15 = r16, r21 - ;; -.LL11: -C .mfi - getf.sig r27 = f39 - nop.f 0 - cmp.ltu p6, p7 = r15, r22 -C .mib - ldf8 f11 = [r33], 8 - sub r17 = r15, r22 - nop.b 0 - ;; - -C .mfi - getf.sig r20 = f32 - xma.l f36 = f12, f6, f0 - (p6) sub r15 = r17, r23, 1 -C .mfi - st8 [r32] = r17, 8 - xma.hu f37 = f12, f6, f0 - (p7) sub r15 = r17, r23 - ;; -.LL10: -C .mfi - getf.sig r21 = f33 - nop.f 0 - cmp.ltu p6, p7 = r15, r24 -C .mib - ldf8 f12 = [r33], 8 - sub r18 = r15, r24 - nop.b 0 - ;; - -C .mfi - getf.sig r22 = f34 - xma.l f38 = f13, f6, f0 - (p6) sub r15 = r18, r25, 1 -C .mfi - st8 [r32] = r18, 8 - xma.hu f39 = f13, f6, f0 - (p7) sub r15 = r18, r25 - ;; -.LL01: -C .mfi - getf.sig r23 = f35 - nop.f 0 - cmp.ltu p6, p7 = r15, r26 -C .mib - ldf8 f13 = [r33], 8 - sub r19 = r15, r26 - br.cloop.sptk.few .Ltop -C *** MAIN LOOP END *** - ;; - - getf.sig r24 = f36 - xma.l f32 = f10, f6, f0 - (p6) sub r15 = r19, r27, 1 - st8 [r32] = r19, 8 - xma.hu f33 = f10, f6, f0 - (p7) sub r15 = r19, r27 - ;; -.Lcj8: getf.sig r25 = f37 - cmp.ltu p6, p7 = r15, r20 - sub r16 = r15, r20 - ;; - getf.sig r26 = f38 - xma.l f34 = f11, f6, f0 - (p6) sub r15 = r16, r21, 1 - st8 [r32] = r16, 8 - xma.hu f35 = f11, f6, f0 - (p7) sub r15 = r16, r21 - ;; -.Lcj7: getf.sig r27 = f39 - cmp.ltu p6, p7 = r15, r22 - sub r17 = r15, r22 - ;; - getf.sig r20 = f32 - xma.l f36 = f12, f6, f0 - (p6) sub r15 = r17, r23, 1 - st8 [r32] = r17, 8 - xma.hu f37 = f12, f6, f0 - (p7) sub r15 = r17, r23 - ;; -.Lcj6: getf.sig r21 = f33 - cmp.ltu p6, p7 = r15, r24 - sub r18 = r15, r24 - ;; - getf.sig r22 = f34 - xma.l f38 = f13, f6, f0 - (p6) sub r15 = r18, r25, 1 - st8 [r32] = r18, 8 - xma.hu f39 = f13, f6, f0 - (p7) sub r15 = r18, r25 - ;; -.Lcj5: getf.sig r23 = f35 - cmp.ltu p6, p7 = r15, r26 - sub r19 = r15, r26 - ;; - getf.sig r24 = f36 - (p6) sub r15 = r19, r27, 1 - st8 [r32] = r19, 8 - (p7) sub r15 = r19, r27 - ;; -.Lcj4: getf.sig r25 = f37 - cmp.ltu p6, p7 = r15, r20 - sub r16 = r15, r20 - ;; - getf.sig r26 = f38 - (p6) sub r15 = r16, r21, 1 - st8 [r32] = r16, 8 - (p7) sub r15 = r16, r21 - ;; -.Lcj3: getf.sig r27 = f39 - cmp.ltu p6, p7 = r15, r22 - sub r17 = r15, r22 - ;; - (p6) sub r15 = r17, r23, 1 - st8 [r32] = r17, 8 - (p7) sub r15 = r17, r23 - ;; -.Lcj2: cmp.ltu p6, p7 = r15, r24 - sub r18 = r15, r24 - ;; - (p6) sub r15 = r18, r25, 1 - st8 [r32] = r18, 8 - (p7) sub r15 = r18, r25 - ;; -.Lcj1: cmp.ltu p6, p7 = r15, r26 - sub r19 = r15, r26 - ;; - (p6) sub r8 = r19, r27, 1 - st8 [r32] = r19 - (p7) sub r8 = r19, r27 - mov ar.lc = r2 - br.ret.sptk.many b0 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/cnd_aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/cnd_aors_n.asm deleted file mode 100644 index edd05524c6fdfcadcbdce00c39e57eea391501a6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/cnd_aors_n.asm +++ /dev/null @@ -1,264 +0,0 @@ -dnl IA-64 mpn_cnd_add_n/mpn_cnd_sub_n. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: ? -C Itanium 2: 1.5 - -C INPUT PARAMETERS -define(`cnd', `r32') -define(`rp', `r33') -define(`up', `r34') -define(`vp', `r35') -define(`n', `r36') - -ifdef(`OPERATION_cnd_add_n',` - define(ADDSUB, add) - define(CND, ltu) - define(INCR, 1) - define(LIM, -1) - define(func, mpn_cnd_add_n) -') -ifdef(`OPERATION_cnd_sub_n',` - define(ADDSUB, sub) - define(CND, gtu) - define(INCR, -1) - define(LIM, 0) - define(func, mpn_cnd_sub_n) -') - -define(PFDIST, 160) - -C Some useful aliases for registers we use -define(`u0',`r14') define(`u1',`r15') define(`u2',`r16') define(`u3',`r17') -define(`x0',`r20') define(`x1',`r21') define(`x2',`r22') define(`x3',`r23') -define(`v0',`r24') define(`v1',`r25') define(`v2',`r26') define(`v3',`r27') -define(`w0',`r28') define(`w1',`r29') define(`w2',`r30') define(`w3',`r31') -define(`up1',`up') define(`up2',`r8') define(`upadv',`r1') -define(`vp1',`vp') define(`vp2',`r9') define(`vpadv',`r11') -define(`rp1',`rp') define(`rp2',`r10') - -MULFUNC_PROLOGUE(mpn_cnd_add_n mpn_cnd_sub_n) - -ASM_START() -PROLOGUE(func) - .prologue - .save ar.lc, r2 - .body -ifdef(`HAVE_ABI_32',` - addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - nop.i 0 - addp4 vp = 0, vp C M I - nop.m 0 - zxt4 n = n C I - ;; -') - {.mmi; and r3 = 3, n C M I - add n = -1, n C M I - mov r2 = ar.lc C I0 -}{.mmi; cmp.ne p6, p7 = 0, cnd C M I - add vp2 = 8, vp C M I - add up2 = 8, up C M I - ;; -}{.mmi; add upadv = PFDIST, up C M I - add vpadv = PFDIST, vp C M I - shr.u n = n, 2 C I0 - .pred.rel "mutex", p6, p7 -}{.mmi; add rp2 = 8, rp C M I - (p6) mov cnd = -1 C M I - (p7) mov cnd = 0 C M I - ;; -} cmp.eq p9, p0 = 1, r3 C M I - cmp.eq p7, p0 = 2, r3 C M I - cmp.eq p8, p0 = 3, r3 C M I - (p9) br L(b1) C B - (p7) br L(b2) C B - (p8) br L(b3) C B - ;; -L(b0): - {.mmi; ld8 v2 = [vp1], 16 C M01 - ld8 v3 = [vp2], 16 C M01 - mov ar.lc = n C I0 - ;; -} ld8 u2 = [up1], 16 C M01 - ld8 u3 = [up2], 16 C M01 - and x2 = v2, cnd C M I - and x3 = v3, cnd C M I - ;; - ADDSUB w2 = u2, x2 C M I - ADDSUB w3 = u3, x3 C M I - ;; - ld8 v0 = [vp1], 16 C M01 - ld8 v1 = [vp2], 16 C M01 - cmp.CND p8, p0 = w2, u2 C M I - cmp.CND p9, p0 = w3, u3 C M I - br L(lo0) - -L(b1): ld8 v1 = [vp1], 8 C M01 - add vp2 = 8, vp2 C M I - add rp2 = 8, rp2 C M I - ;; - ld8 u1 = [up1], 8 C M01 - add up2 = 8, up2 C M I - and x1 = v1, cnd C M I - ;; - ADDSUB w1 = u1, x1 C M I - cmp.ne p10, p0 = 0, n - add n = -1, n - ;; - cmp.CND p7, p0 = w1, u1 C M I - st8 [rp1] = w1, 8 C M23 - (p10) br L(b0) - ;; - mov r8 = 0 C M I - br L(e1) - -L(b3): ld8 v3 = [vp1], 8 C M01 - add vp2 = 8, vp2 C M I - add rp2 = 8, rp2 C M I - ;; - ld8 u3 = [up1], 8 C M01 - add up2 = 8, up2 C M I - and x3 = v3, cnd C M I - ;; - ADDSUB w3 = u3, x3 C M I - ;; - cmp.CND p9, p0 = w3, u3 C M I - st8 [rp1] = w3, 8 C M23 - C fall through - -L(b2): - {.mmi; ld8 v0 = [vp1], 16 C M01 - ld8 v1 = [vp2], 16 C M01 - mov ar.lc = n C I0 - ;; -} ld8 u0 = [up1], 16 C M01 - ld8 u1 = [up2], 16 C M01 - and x0 = v0, cnd C M I - and x1 = v1, cnd C M I - ;; - ADDSUB w0 = u0, x0 C M I - ADDSUB w1 = u1, x1 C M I - br.cloop.dptk L(gt2) C B - ;; - cmp.CND p6, p0 = w0, u0 C M I - br L(e2) C B -L(gt2): - ld8 v2 = [vp1], 16 C M01 - ld8 v3 = [vp2], 16 C M01 - cmp.CND p6, p0 = w0, u0 C M I - cmp.CND p7, p0 = w1, u1 C M I - br L(lo2) C B - - -C *** MAIN LOOP START *** -C ALIGN(32) -L(top): - {.mmi; ld8 v2 = [vp1], 16 C M01 - ld8 v3 = [vp2], 16 C M01 - cmp.CND p6, p0 = w0, u0 C M I -}{.mmi; st8 [rp1] = w2, 16 C M23 - st8 [rp2] = w3, 16 C M23 - cmp.CND p7, p0 = w1, u1 C M I - ;; -} -L(lo2): - {.mmi; ld8 u2 = [up1], 16 C M01 - ld8 u3 = [up2], 16 C M01 - (p9) cmpeqor p6, p0 = LIM, w0 C M I -}{.mmi; and x2 = v2, cnd C M I - and x3 = v3, cnd C M I - (p9) add w0 = INCR, w0 C M I - ;; -}{.mmi; ADDSUB w2 = u2, x2 C M I - (p6) cmpeqor p7, p0 = LIM, w1 C M I - (p6) add w1 = INCR, w1 C M I -}{.mmi; ADDSUB w3 = u3, x3 C M I - lfetch [upadv], 32 - nop 0 - ;; -}{.mmi; ld8 v0 = [vp1], 16 C M01 - ld8 v1 = [vp2], 16 C M01 - cmp.CND p8, p0 = w2, u2 C M I -}{.mmi; st8 [rp1] = w0, 16 C M23 - st8 [rp2] = w1, 16 C M23 - cmp.CND p9, p0 = w3, u3 C M I - ;; -} -L(lo0): - {.mmi; ld8 u0 = [up1], 16 C M01 - ld8 u1 = [up2], 16 C M01 - (p7) cmpeqor p8, p0 = LIM, w2 C M I -}{.mmi; and x0 = v0, cnd C M I - and x1 = v1, cnd C M I - (p7) add w2 = INCR, w2 C M I - ;; -}{.mmi; ADDSUB w0 = u0, x0 C M I - (p8) cmpeqor p9, p0 = LIM, w3 C M I - (p8) add w3 = INCR, w3 C M I -}{.mmb; ADDSUB w1 = u1, x1 C M I - lfetch [vpadv], 32 - br.cloop.dptk L(top) C B - ;; -} -C *** MAIN LOOP END *** - - -L(end): - {.mmi; st8 [rp1] = w2, 16 C M23 - st8 [rp2] = w3, 16 C M23 - cmp.CND p6, p0 = w0, u0 C M I - ;; -} -L(e2): - {.mmi; cmp.CND p7, p0 = w1, u1 C M I - (p9) cmpeqor p6, p0 = LIM, w0 C M I - (p9) add w0 = INCR, w0 C M I - ;; -}{.mmi; mov r8 = 0 C M I - (p6) cmpeqor p7, p0 = LIM, w1 C M I - (p6) add w1 = INCR, w1 C M I - ;; -}{.mmi; st8 [rp1] = w0, 16 C M23 - st8 [rp2] = w1, 16 C M23 - mov ar.lc = r2 C I0 -} -L(e1): - {.mmb; nop 0 - (p7) mov r8 = 1 C M I - br.ret.sptk.many b0 C B -} -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/copyd.asm deleted file mode 100644 index b94a1af3624d143bffd71db6e9a2661ff62ebb5b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/copyd.asm +++ /dev/null @@ -1,186 +0,0 @@ -dnl IA-64 mpn_copyd -- copy limb vector, decrementing. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2001, 2002, 2004 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 1 -C Itanium 2: 0.5 - -C INPUT PARAMETERS -C rp = r32 -C sp = r33 -C n = r34 - -ASM_START() -PROLOGUE(mpn_copyd) - .prologue - .save ar.lc, r2 - .body -ifdef(`HAVE_ABI_32', -` addp4 r32 = 0, r32 - addp4 r33 = 0, r33 - sxt4 r34 = r34 - ;; -') -{.mmi - shladd r32 = r34, 3, r32 - shladd r33 = r34, 3, r33 - mov.i r2 = ar.lc -} -{.mmi - and r14 = 3, r34 - cmp.ge p14, p15 = 3, r34 - add r34 = -4, r34 - ;; -} -{.mmi - cmp.eq p8, p0 = 1, r14 - cmp.eq p10, p0 = 2, r14 - cmp.eq p12, p0 = 3, r14 -} -{.bbb - (p8) br.dptk .Lb01 - (p10) br.dptk .Lb10 - (p12) br.dptk .Lb11 -} - -.Lb00: C n = 0, 4, 8, 12, ... - add r32 = -8, r32 - add r33 = -8, r33 - (p14) br.dptk .Ls00 - ;; - add r21 = -8, r33 - ld8 r16 = [r33], -16 - shr r15 = r34, 2 - ;; - ld8 r17 = [r21], -16 - mov.i ar.lc = r15 - ld8 r18 = [r33], -16 - add r20 = -8, r32 - ;; - ld8 r19 = [r21], -16 - br.cloop.dptk .Loop - ;; - br.sptk .Lend - ;; - -.Lb01: C n = 1, 5, 9, 13, ... - add r21 = -8, r33 - add r20 = -8, r32 - add r33 = -16, r33 - add r32 = -16, r32 - ;; - ld8 r19 = [r21], -16 - shr r15 = r34, 2 - (p14) br.dptk .Ls01 - ;; - ld8 r16 = [r33], -16 - mov.i ar.lc = r15 - ;; - ld8 r17 = [r21], -16 - ld8 r18 = [r33], -16 - br.sptk .Li01 - ;; - -.Lb10: C n = 2,6, 10, 14, ... - add r21 = -16, r33 - shr r15 = r34, 2 - add r20 = -16, r32 - add r32 = -8, r32 - add r33 = -8, r33 - ;; - ld8 r18 = [r33], -16 - ld8 r19 = [r21], -16 - mov.i ar.lc = r15 - (p14) br.dptk .Ls10 - ;; - ld8 r16 = [r33], -16 - ld8 r17 = [r21], -16 - br.sptk .Li10 - ;; - -.Lb11: C n = 3, 7, 11, 15, ... - add r21 = -8, r33 - add r20 = -8, r32 - add r33 = -16, r33 - add r32 = -16, r32 - ;; - ld8 r17 = [r21], -16 - shr r15 = r34, 2 - ;; - ld8 r18 = [r33], -16 - mov.i ar.lc = r15 - ld8 r19 = [r21], -16 - (p14) br.dptk .Ls11 - ;; - ld8 r16 = [r33], -16 - br.sptk .Li11 - ;; - - ALIGN(32) -.Loop: -.Li00: -{.mmb - st8 [r32] = r16, -16 - ld8 r16 = [r33], -16 - nop.b 0 -} -.Li11: -{.mmb - st8 [r20] = r17, -16 - ld8 r17 = [r21], -16 - nop.b 0 - ;; -} -.Li10: -{.mmb - st8 [r32] = r18, -16 - ld8 r18 = [r33], -16 - nop.b 0 -} -.Li01: -{.mmb - st8 [r20] = r19, -16 - ld8 r19 = [r21], -16 - br.cloop.dptk .Loop - ;; -} -.Lend: st8 [r32] = r16, -16 -.Ls11: st8 [r20] = r17, -16 - ;; -.Ls10: st8 [r32] = r18, -16 -.Ls01: st8 [r20] = r19, -16 -.Ls00: mov.i ar.lc = r2 - br.ret.sptk.many b0 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/copyi.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/copyi.asm deleted file mode 100644 index 49ed192021a68659a5f51fd3abb206d3399cda84..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/copyi.asm +++ /dev/null @@ -1,182 +0,0 @@ -dnl IA-64 mpn_copyi -- copy limb vector, incrementing. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2001, 2002, 2004 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 1 -C Itanium 2: 0.5 - -C INPUT PARAMETERS -C rp = r32 -C sp = r33 -C n = r34 - -ASM_START() -PROLOGUE(mpn_copyi) - .prologue - .save ar.lc, r2 - .body -ifdef(`HAVE_ABI_32', -` addp4 r32 = 0, r32 - addp4 r33 = 0, r33 - sxt4 r34 = r34 - ;; -') -{.mmi - nop 0 - nop 0 - mov.i r2 = ar.lc -} -{.mmi - and r14 = 3, r34 - cmp.ge p14, p15 = 3, r34 - add r34 = -4, r34 - ;; -} -{.mmi - cmp.eq p8, p0 = 1, r14 - cmp.eq p10, p0 = 2, r14 - cmp.eq p12, p0 = 3, r14 -} -{.bbb - (p8) br.dptk .Lb01 - (p10) br.dptk .Lb10 - (p12) br.dptk .Lb11 -} - -.Lb00: C n = 0, 4, 8, 12, ... - (p14) br.dptk .Ls00 - ;; - add r21 = 8, r33 - ld8 r16 = [r33], 16 - shr r15 = r34, 2 - ;; - ld8 r17 = [r21], 16 - mov.i ar.lc = r15 - ld8 r18 = [r33], 16 - add r20 = 8, r32 - ;; - ld8 r19 = [r21], 16 - br.cloop.dptk .Loop - ;; - br.sptk .Lend - ;; - -.Lb01: C n = 1, 5, 9, 13, ... - add r21 = 0, r33 - add r20 = 0, r32 - add r33 = 8, r33 - add r32 = 8, r32 - ;; - ld8 r19 = [r21], 16 - shr r15 = r34, 2 - (p14) br.dptk .Ls01 - ;; - ld8 r16 = [r33], 16 - mov.i ar.lc = r15 - ;; - ld8 r17 = [r21], 16 - ld8 r18 = [r33], 16 - br.sptk .Li01 - ;; - -.Lb10: C n = 2,6, 10, 14, ... - add r21 = 8, r33 - add r20 = 8, r32 - ld8 r18 = [r33], 16 - shr r15 = r34, 2 - ;; - ld8 r19 = [r21], 16 - mov.i ar.lc = r15 - (p14) br.dptk .Ls10 - ;; - ld8 r16 = [r33], 16 - ld8 r17 = [r21], 16 - br.sptk .Li10 - ;; - -.Lb11: C n = 3, 7, 11, 15, ... - add r21 = 0, r33 - add r20 = 0, r32 - add r33 = 8, r33 - add r32 = 8, r32 - ;; - ld8 r17 = [r21], 16 - shr r15 = r34, 2 - ;; - ld8 r18 = [r33], 16 - mov.i ar.lc = r15 - ld8 r19 = [r21], 16 - (p14) br.dptk .Ls11 - ;; - ld8 r16 = [r33], 16 - br.sptk .Li11 - ;; - - ALIGN(32) -.Loop: -.Li00: -{.mmb - st8 [r32] = r16, 16 - ld8 r16 = [r33], 16 - nop.b 0 -} -.Li11: -{.mmb - st8 [r20] = r17, 16 - ld8 r17 = [r21], 16 - nop.b 0 - ;; -} -.Li10: -{.mmb - st8 [r32] = r18, 16 - ld8 r18 = [r33], 16 - nop.b 0 -} -.Li01: -{.mmb - st8 [r20] = r19, 16 - ld8 r19 = [r21], 16 - br.cloop.dptk .Loop - ;; -} -.Lend: st8 [r32] = r16, 16 -.Ls11: st8 [r20] = r17, 16 - ;; -.Ls10: st8 [r32] = r18, 16 -.Ls01: st8 [r20] = r19, 16 -.Ls00: mov.i ar.lc = r2 - br.ret.sptk.many b0 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/dive_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/dive_1.asm deleted file mode 100644 index 5e4a273530c80723e7ccde4bf316912800761093..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/dive_1.asm +++ /dev/null @@ -1,236 +0,0 @@ -dnl IA-64 mpn_divexact_1 -- mpn by limb exact division. - -dnl Contributed to the GNU project by Torbjorn Granlund and Kevin Ryde. - -dnl Copyright 2003-2005, 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 16 -C Itanium 2: 8 - -C INPUT PARAMETERS -define(`rp', `r32') -define(`up', `r33') -define(`n', `r34') -define(`divisor', `r35') - -define(`lshift', `r24') -define(`rshift', `r25') - -C This code is a bit messy, and not as similar to mode1o.asm as desired. - -C The critical path during initialization is for computing the inverse of the -C divisor. Since odd divisors are probably common, we conditionally execute -C the initial count_trailing_zeros code and the downshift. - -C Possible improvement: Merge more of the feed-in code into the inverse -C computation. - -ASM_START() - .text - .align 32 -.Ltab: -data1 0,0x01, 0,0xAB, 0,0xCD, 0,0xB7, 0,0x39, 0,0xA3, 0,0xC5, 0,0xEF -data1 0,0xF1, 0,0x1B, 0,0x3D, 0,0xA7, 0,0x29, 0,0x13, 0,0x35, 0,0xDF -data1 0,0xE1, 0,0x8B, 0,0xAD, 0,0x97, 0,0x19, 0,0x83, 0,0xA5, 0,0xCF -data1 0,0xD1, 0,0xFB, 0,0x1D, 0,0x87, 0,0x09, 0,0xF3, 0,0x15, 0,0xBF -data1 0,0xC1, 0,0x6B, 0,0x8D, 0,0x77, 0,0xF9, 0,0x63, 0,0x85, 0,0xAF -data1 0,0xB1, 0,0xDB, 0,0xFD, 0,0x67, 0,0xE9, 0,0xD3, 0,0xF5, 0,0x9F -data1 0,0xA1, 0,0x4B, 0,0x6D, 0,0x57, 0,0xD9, 0,0x43, 0,0x65, 0,0x8F -data1 0,0x91, 0,0xBB, 0,0xDD, 0,0x47, 0,0xC9, 0,0xB3, 0,0xD5, 0,0x7F -data1 0,0x81, 0,0x2B, 0,0x4D, 0,0x37, 0,0xB9, 0,0x23, 0,0x45, 0,0x6F -data1 0,0x71, 0,0x9B, 0,0xBD, 0,0x27, 0,0xA9, 0,0x93, 0,0xB5, 0,0x5F -data1 0,0x61, 0,0x0B, 0,0x2D, 0,0x17, 0,0x99, 0,0x03, 0,0x25, 0,0x4F -data1 0,0x51, 0,0x7B, 0,0x9D, 0,0x07, 0,0x89, 0,0x73, 0,0x95, 0,0x3F -data1 0,0x41, 0,0xEB, 0,0x0D, 0,0xF7, 0,0x79, 0,0xE3, 0,0x05, 0,0x2F -data1 0,0x31, 0,0x5B, 0,0x7D, 0,0xE7, 0,0x69, 0,0x53, 0,0x75, 0,0x1F -data1 0,0x21, 0,0xCB, 0,0xED, 0,0xD7, 0,0x59, 0,0xC3, 0,0xE5, 0,0x0F -data1 0,0x11, 0,0x3B, 0,0x5D, 0,0xC7, 0,0x49, 0,0x33, 0,0x55, 0,0xFF - - -PROLOGUE(mpn_divexact_1) - .prologue - .save ar.lc, r2 - .body - - {.mmi; add r8 = -1, divisor C M0 - nop 0 C M1 - tbit.z p8, p9 = divisor, 0 C I0 -} -ifdef(`HAVE_ABI_32', -` addp4 rp = 0, rp C M2 rp extend - addp4 up = 0, up C M3 up extend - sxt4 n = n') C I1 size extend - ;; -.Lhere: - {.mmi; ld8 r20 = [up], 8 C M0 up[0] - (p8) andcm r8 = r8, divisor C M1 - mov r15 = ip C I0 .Lhere - ;; -}{.mii - .pred.rel "mutex", p8, p9 - (p9) mov rshift = 0 C M0 - (p8) popcnt rshift = r8 C I0 r8 = cnt_lo_zeros(divisor) - cmp.eq p6, p10 = 1, n C I1 - ;; -}{.mii; add r9 = .Ltab-.Lhere, r15 C M0 - (p8) shr.u divisor = divisor, rshift C I0 - nop 0 C I1 - ;; -}{.mmi; add n = -4, n C M0 size-1 - (p10) ld8 r21 = [up], 8 C M1 up[1] - mov r14 = 2 C M1 2 -}{.mfi; setf.sig f6 = divisor C M2 divisor - mov f9 = f0 C M3 carry FIXME - zxt1 r3 = divisor C I1 divisor low byte - ;; -}{.mmi; add r3 = r9, r3 C M0 table offset ip and index - sub r16 = 0, divisor C M1 -divisor - mov r2 = ar.lc C I0 -}{.mmi; sub lshift = 64, rshift C M2 - setf.sig f13 = r14 C M3 2 in significand - mov r17 = -1 C I1 -1 - ;; -}{.mmi; ld1 r3 = [r3] C M0 inverse, 8 bits - nop 0 C M1 - mov ar.lc = n C I0 size-1 loop count -}{.mmi; setf.sig f12 = r16 C M2 -divisor - setf.sig f8 = r17 C M3 -1 - cmp.eq p7, p0 = -2, n C I1 - ;; -}{.mmi; setf.sig f7 = r3 C M2 inverse, 8 bits - cmp.eq p8, p0 = -1, n C M0 - shr.u r23 = r20, rshift C I0 - ;; -} - - C f6 divisor - C f7 inverse, being calculated - C f8 -1, will be -inverse - C f9 carry - C f12 -divisor - C f13 2 - C f14 scratch - - xmpy.l f14 = f13, f7 C Newton 2*i - xmpy.l f7 = f7, f7 C Newton i*i - ;; - xma.l f7 = f7, f12, f14 C Newton i*i*-d + 2*i, 16 bits - ;; - setf.sig f10 = r23 C speculative, used iff n = 1 - xmpy.l f14 = f13, f7 C Newton 2*i - shl r22 = r21, lshift C speculative, used iff n > 1 - xmpy.l f7 = f7, f7 C Newton i*i - ;; - or r31 = r22, r23 C speculative, used iff n > 1 - xma.l f7 = f7, f12, f14 C Newton i*i*-d + 2*i, 32 bits - shr.u r23 = r21, rshift C speculative, used iff n > 1 - ;; - setf.sig f11 = r31 C speculative, used iff n > 1 - xmpy.l f14 = f13, f7 C Newton 2*i - xmpy.l f7 = f7, f7 C Newton i*i - ;; - xma.l f7 = f7, f12, f14 C Newton i*i*-d + 2*i, 64 bits - - (p7) br.cond.dptk .Ln2 - (p10) br.cond.dptk .grt3 - ;; - -.Ln1: xmpy.l f12 = f10, f7 C q = ulimb * inverse - br .Lx1 - -.Ln2: - xmpy.l f8 = f7, f8 C -inverse = inverse * -1 - xmpy.l f12 = f11, f7 C q = ulimb * inverse - setf.sig f11 = r23 - br .Lx2 - -.grt3: - ld8 r21 = [up], 8 C up[2] - xmpy.l f8 = f7, f8 C -inverse = inverse * -1 - ;; - shl r22 = r21, lshift - ;; - xmpy.l f12 = f11, f7 C q = ulimb * inverse - ;; - or r31 = r22, r23 - shr.u r23 = r21, rshift - ;; - setf.sig f11 = r31 - (p8) br.cond.dptk .Lx3 C branch for n = 3 - ;; - ld8 r21 = [up], 8 - br .Lent - -.Ltop: ld8 r21 = [up], 8 - xma.l f12 = f9, f8, f10 C q = c * -inverse + si - nop.b 0 - ;; -.Lent: add r16 = 160, up - shl r22 = r21, lshift - nop.b 0 - ;; - stf8 [rp] = f12, 8 - xma.hu f9 = f12, f6, f9 C c = high(q * divisor + c) - nop.b 0 - nop.m 0 - xmpy.l f10 = f11, f7 C si = ulimb * inverse - nop.b 0 - ;; - or r31 = r22, r23 - shr.u r23 = r21, rshift - nop.b 0 - ;; - lfetch [r16] - setf.sig f11 = r31 - br.cloop.sptk.few.clr .Ltop - - - xma.l f12 = f9, f8, f10 C q = c * -inverse + si - ;; -.Lx3: stf8 [rp] = f12, 8 - xma.hu f9 = f12, f6, f9 C c = high(q * divisor + c) - xmpy.l f10 = f11, f7 C si = ulimb * inverse - ;; - setf.sig f11 = r23 - ;; - xma.l f12 = f9, f8, f10 C q = c * -inverse + si - ;; -.Lx2: stf8 [rp] = f12, 8 - xma.hu f9 = f12, f6, f9 C c = high(q * divisor + c) - xmpy.l f10 = f11, f7 C si = ulimb * inverse - ;; - xma.l f12 = f9, f8, f10 C q = c * -inverse + si - ;; -.Lx1: stf8 [rp] = f12, 8 - mov ar.lc = r2 C I0 - br.ret.sptk.many b0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/divrem_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/divrem_1.asm deleted file mode 100644 index e8878209db7fc8d28664bb5ee2e668375c092a1c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/divrem_1.asm +++ /dev/null @@ -1,477 +0,0 @@ -dnl IA-64 mpn_divrem_1 and mpn_preinv_divrem_1 -- Divide an mpn number by an -dnl unnormalized limb. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2002, 2004, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C Itanium: 40-42 -C Itanium 2: 29-30 - -C This was generated by gcc, then the loops were optimized. The preinv entry -C point was shoehorned into the file. Lots of things outside the loops could -C be streamlined. It would probably be a good idea to merge the loops for -C normalized and unnormalized divisor, since the shifting stuff is done for -C free in parallel with other operations. It would even be possible to merge -C all loops, if the ld8 were made conditional. - -C TODO -C * Consider delaying inversion for normalized mpn_divrem_1 entry till after -C computing leading limb. -C * Inline and interleave limb inversion code with loop setup code. - -ASM_START() - -C HP's assembler requires these declarations for importing mpn_invert_limb - .global mpn_invert_limb - .type mpn_invert_limb,@function - -C INPUT PARAMETERS -C rp = r32 -C qxn = r33 -C up = r34 -C n = r35 -C vl = r36 -C vlinv = r37 (preinv only) -C cnt = r38 (preinv only) - -PROLOGUE(mpn_preinv_divrem_1) - .prologue - .save ar.pfs, r42 - alloc r42 = ar.pfs, 7, 8, 1, 0 - .save ar.lc, r44 - mov r44 = ar.lc - .save rp, r41 - mov r41 = b0 - .body -ifdef(`HAVE_ABI_32', -` addp4 r32 = 0, r32 - sxt4 r33 = r33 - addp4 r34 = 0, r34 - sxt4 r35 = r35 - ;; -') - mov r40 = r38 - shladd r34 = r35, 3, r34 - ;; - adds r34 = -8, r34 - ;; - ld8 r39 = [r34], -8 - ;; - - add r15 = r35, r33 - ;; - mov r8 = r37 - shladd r32 = r15, 3, r32 C r32 = rp + n + qxn - cmp.le p8, p0 = 0, r36 - ;; - adds r32 = -8, r32 C r32 = rp + n + qxn - 1 - cmp.leu p6, p7 = r36, r39 - (p8) br.cond.dpnt .Lpunnorm - ;; - - (p6) addl r15 = 1, r0 - (p7) mov r15 = r0 - ;; - (p6) sub r38 = r39, r36 - (p7) mov r38 = r39 - st8 [r32] = r15, -8 - adds r35 = -2, r35 C un -= 2 - br .Lpn - -.Lpunnorm: - (p6) add r34 = 8, r34 - mov r38 = 0 C r = 0 - shl r36 = r36, r40 - (p6) br.cond.dptk .Lpu - ;; - shl r38 = r39, r40 C r = ahigh << cnt - cmp.ne p8, p0 = 1, r35 - st8 [r32] = r0, -8 - adds r35 = -1, r35 C un-- - (p8) br.cond.dpnt .Lpu - - mov r23 = 1 - ;; - setf.sig f6 = r8 - setf.sig f12 = r23 - br .L435 -EPILOGUE() - - -PROLOGUE(mpn_divrem_1) - .prologue - .save ar.pfs, r42 - alloc r42 = ar.pfs, 5, 8, 1, 0 - .save ar.lc, r44 - mov r44 = ar.lc - .save rp, r41 - mov r41 = b0 - .body -ifdef(`HAVE_ABI_32', -` addp4 r32 = 0, r32 - sxt4 r33 = r33 - addp4 r34 = 0, r34 - sxt4 r35 = r35 - ;; -') - mov r38 = r0 - add r15 = r35, r33 - ;; - cmp.ne p6, p7 = 0, r15 - ;; - (p7) mov r8 = r0 - (p7) br.cond.dpnt .Lret - shladd r14 = r15, 3, r32 C r14 = rp + n + qxn - cmp.le p6, p7 = 0, r36 - ;; - adds r32 = -8, r14 C r32 = rp + n + qxn - 1 - (p6) br.cond.dpnt .Lunnorm - cmp.eq p6, p7 = 0, r35 - (p6) br.cond.dpnt .L179 - shladd r14 = r35, 3, r34 - ;; - adds r14 = -8, r14 - adds r35 = -1, r35 - ;; - ld8 r38 = [r14] - ;; - cmp.leu p6, p7 = r36, r38 - ;; - (p6) addl r15 = 1, r0 - (p7) mov r15 = r0 - ;; - st8 [r32] = r15, -8 - (p6) sub r38 = r38, r36 - -.L179: - mov r45 = r36 - adds r35 = -1, r35 - br.call.sptk.many b0 = mpn_invert_limb - ;; - shladd r34 = r35, 3, r34 -.Lpn: - mov r23 = 1 - ;; - setf.sig f6 = r8 - setf.sig f12 = r23 - cmp.le p6, p7 = 0, r35 - mov r40 = 0 - (p7) br.cond.dpnt .L435 - setf.sig f10 = r36 - mov ar.lc = r35 - setf.sig f7 = r38 - ;; - sub r28 = -1, r36 -C Develop quotient limbs for normalized divisor -.Loop1: C 00 C q=r18 nh=r38/f7 - ld8 r20 = [r34], -8 - xma.hu f11 = f7, f6, f0 - ;; C 04 - xma.l f8 = f11, f12, f7 C q = q + nh - ;; C 08 - getf.sig r18 = f8 - xma.hu f9 = f8, f10, f0 - xma.l f8 = f8, f10, f0 - ;; C 12 - getf.sig r16 = f9 - C 13 - getf.sig r15 = f8 - ;; C 18 - cmp.ltu p6, p7 = r20, r15 - sub r15 = r20, r15 - sub r16 = r38, r16 - ;; C 19 - (p6) cmp.ne p8, p9 = 1, r16 C is rH != 0? - (p7) cmp.ne p8, p9 = 0, r16 C is rH != 0? - (p6) add r16 = -1, r16 - (p0) cmp.ne.unc p6, p7 = r0, r0 - ;; C 20 - (p8) cmp.ltu p6, p7 = r15, r36 - (p8) sub r15 = r15, r36 - (p8) add r18 = 1, r18 C q = q + 1; done if: rH > 0 - ;; C 21 - .pred.rel "mutex",p6,p7 - (p6) cmp.ne p8, p9 = 1, r16 C is rH != 0 still? - (p7) cmp.ne p8, p9 = 0, r16 C is rH != 0 still? - cmp.ltu p6, p7 = r15, r36 C speculative - sub r28 = r15, r36 C speculative, just for cmp - ;; C 22 - (p8) cmp.ltu p6, p7 = r28, r36 C redo last cmp if needed - (p8) mov r15 = r28 - (p8) add r18 = 1, r18 C q = q + 1; done if: rH > 0 - ;; C 23 - (p6) setf.sig f7 = r15 - (p7) sub r15 = r15, r36 - (p7) add r18 = 1, r18 C q = q + 1; done if: rH > 0 - ;; C 24 - (p7) setf.sig f7 = r15 - st8 [r32] = r18, -8 - mov r38 = r15 - br.cloop.dptk .Loop1 - C 29/30 - br.sptk .L435 - ;; -.Lunnorm: - mux1 r16 = r36, @rev - cmp.eq p6, p7 = 0, r35 - (p6) br.cond.dpnt .L322 - shladd r34 = r35, 3, r34 - ;; - adds r34 = -8, r34 - ;; - ld8 r39 = [r34] - ;; - cmp.leu p6, p7 = r36, r39 - (p6) br.cond.dptk .L322 - adds r34 = -8, r34 - ;; - mov r38 = r39 - ;; - cmp.ne p6, p7 = 1, r15 - st8 [r32] = r0, -8 - ;; - (p7) mov r8 = r38 - (p7) br.cond.dpnt .Lret - adds r35 = -1, r35 -.L322: - sub r14 = r0, r16 - ;; - or r14 = r16, r14 - ;; - mov r16 = -8 - czx1.l r14 = r14 - ;; - shladd r16 = r14, 3, r16 - ;; - shr.u r14 = r36, r16 - ;; - cmp.geu p6, p7 = 15, r14 - ;; - (p7) shr.u r14 = r14, 4 - (p7) adds r16 = 4, r16 - ;; - cmp.geu p6, p7 = 3, r14 - ;; - (p7) shr.u r14 = r14, 2 - (p7) adds r16 = 2, r16 - ;; - tbit.nz p6, p7 = r14, 1 - ;; - .pred.rel "mutex",p6,p7 - (p6) sub r40 = 62, r16 - (p7) sub r40 = 63, r16 - ;; - shl r45 = r36, r40 - shl r36 = r36, r40 - shl r38 = r38, r40 - br.call.sptk.many b0 = mpn_invert_limb - ;; -.Lpu: - mov r23 = 1 - ;; - setf.sig f6 = r8 - setf.sig f12 = r23 - cmp.eq p6, p7 = 0, r35 - (p6) br.cond.dpnt .L435 - sub r16 = 64, r40 - adds r35 = -2, r35 - ;; - ld8 r39 = [r34], -8 - cmp.le p6, p7 = 0, r35 - ;; - shr.u r14 = r39, r16 - ;; - or r38 = r14, r38 - (p7) br.cond.dpnt .Lend3 - ;; - mov r22 = r16 - setf.sig f10 = r36 - setf.sig f7 = r38 - mov ar.lc = r35 - ;; -C Develop quotient limbs for unnormalized divisor -.Loop3: - ld8 r14 = [r34], -8 - xma.hu f11 = f7, f6, f0 - ;; - xma.l f8 = f11, f12, f7 C q = q + nh - ;; - getf.sig r18 = f8 - xma.hu f9 = f8, f10, f0 - shl r20 = r39, r40 - xma.l f8 = f8, f10, f0 - shr.u r24 = r14, r22 - ;; - getf.sig r16 = f9 - getf.sig r15 = f8 - or r20 = r24, r20 - ;; - cmp.ltu p6, p7 = r20, r15 - sub r15 = r20, r15 - sub r16 = r38, r16 - ;; - (p6) cmp.ne p8, p9 = 1, r16 C is rH != 0? - (p7) cmp.ne p8, p9 = 0, r16 C is rH != 0? - (p6) add r16 = -1, r16 - (p0) cmp.ne.unc p6, p7 = r0, r0 - ;; - (p8) cmp.ltu p6, p7 = r15, r36 - (p8) sub r15 = r15, r36 - (p8) add r18 = 1, r18 C q = q + 1; done if: rH > 0 - ;; - .pred.rel "mutex",p6,p7 - (p6) cmp.ne p8, p9 = 1, r16 C is rH != 0 still? - (p7) cmp.ne p8, p9 = 0, r16 C is rH != 0 still? - cmp.ltu p6, p7 = r15, r36 C speculative - sub r28 = r15, r36 C speculative, just for cmp - ;; - (p8) cmp.ltu p6, p7 = r28, r36 C redo last cmp if needed - (p8) mov r15 = r28 - (p8) add r18 = 1, r18 C q = q + 1; done if: rH > 0 - ;; - (p6) setf.sig f7 = r15 - (p7) sub r15 = r15, r36 - (p7) add r18 = 1, r18 C q = q + 1; done if: rH > 0 - ;; - (p7) setf.sig f7 = r15 - st8 [r32] = r18, -8 - mov r39 = r14 - mov r38 = r15 - br.cloop.dptk .Loop3 - ;; -.Lend3: - setf.sig f10 = r36 - setf.sig f7 = r38 - ;; - xma.hu f11 = f7, f6, f0 - ;; - xma.l f8 = f11, f12, f7 C q = q + nh - ;; - getf.sig r18 = f8 - xma.hu f9 = f8, f10, f0 - shl r20 = r39, r40 - xma.l f8 = f8, f10, f0 - ;; - getf.sig r16 = f9 - getf.sig r15 = f8 - ;; - cmp.ltu p6, p7 = r20, r15 - sub r15 = r20, r15 - sub r16 = r38, r16 - ;; - (p6) cmp.ne p8, p9 = 1, r16 C is rH != 0? - (p7) cmp.ne p8, p9 = 0, r16 C is rH != 0? - (p6) add r16 = -1, r16 - (p0) cmp.ne.unc p6, p7 = r0, r0 - ;; - (p8) cmp.ltu p6, p7 = r15, r36 - (p8) sub r15 = r15, r36 - (p8) add r18 = 1, r18 C q = q + 1; done if: rH > 0 - ;; - .pred.rel "mutex",p6,p7 - (p6) cmp.ne p8, p9 = 1, r16 C is rH != 0 still? - (p7) cmp.ne p8, p9 = 0, r16 C is rH != 0 still? - ;; - (p8) sub r15 = r15, r36 - (p8) add r18 = 1, r18 C q = q + 1; done if: rH > 0 - ;; - cmp.ltu p6, p7 = r15, r36 - ;; - (p7) sub r15 = r15, r36 - (p7) add r18 = 1, r18 C q = q + 1; done if: rH > 0 - ;; - st8 [r32] = r18, -8 - mov r38 = r15 -.L435: - adds r35 = -1, r33 - cmp.le p6, p7 = 1, r33 - (p7) br.cond.dpnt .Lend4 - ;; - setf.sig f7 = r38 - setf.sig f10 = r36 - mov ar.lc = r35 - ;; -.Loop4: - xma.hu f11 = f7, f6, f0 - ;; - xma.l f8 = f11, f12, f7 C q = q + nh - ;; - getf.sig r18 = f8 - xma.hu f9 = f8, f10, f0 - xma.l f8 = f8, f10, f0 - ;; - getf.sig r16 = f9 - getf.sig r15 = f8 - ;; - cmp.ltu p6, p7 = 0, r15 - sub r15 = 0, r15 - sub r16 = r38, r16 - ;; - (p6) cmp.ne p8, p9 = 1, r16 C is rH != 0? - (p7) cmp.ne p8, p9 = 0, r16 C is rH != 0? - (p6) add r16 = -1, r16 - (p0) cmp.ne.unc p6, p7 = r0, r0 - ;; - (p8) cmp.ltu p6, p7 = r15, r36 - (p8) sub r15 = r15, r36 - (p8) add r18 = 1, r18 C q = q + 1; done if: rH > 0 - ;; - .pred.rel "mutex",p6,p7 - (p6) cmp.ne p8, p9 = 1, r16 C is rH != 0 still? - (p7) cmp.ne p8, p9 = 0, r16 C is rH != 0 still? - cmp.ltu p6, p7 = r15, r36 C speculative - sub r28 = r15, r36 C speculative, just for cmp - ;; - (p8) cmp.ltu p6, p7 = r28, r36 C redo last cmp if needed - (p8) mov r15 = r28 - (p8) add r18 = 1, r18 C q = q + 1; done if: rH > 0 - ;; - (p6) setf.sig f7 = r15 - (p7) sub r15 = r15, r36 - (p7) add r18 = 1, r18 C q = q + 1; done if: rH > 0 - ;; - (p7) setf.sig f7 = r15 - st8 [r32] = r18, -8 - mov r38 = r15 - br.cloop.dptk .Loop4 - ;; -.Lend4: - shr.u r8 = r38, r40 -.Lret: - mov ar.pfs = r42 - mov ar.lc = r44 - mov b0 = r41 - br.ret.sptk.many b0 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/divrem_2.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/divrem_2.asm deleted file mode 100644 index 9864311278c9782ac96adb235555ca4c902f7239..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/divrem_2.asm +++ /dev/null @@ -1,280 +0,0 @@ -dnl IA-64 mpn_divrem_2 -- Divide an mpn number by a normalized 2-limb number. - -dnl Copyright 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C norm frac -C itanium 1 -C itanium 2 29 29 - - -C TODO -C * Inline and interleave limb inversion code with loop setup code. -C * We should use explicit bundling in much of the code, since it typically -C cuts some cycles with the GNU assembler. - - -ASM_START() - -C HP's assembler requires these declarations for importing mpn_invert_limb - .global mpn_invert_limb - .type mpn_invert_limb,@function - -C INPUT PARAMETERS -C qp = r32 -C fn = r33 -C np = r34 -C nn = r35 -C dp = r36 - -define(`f0x1', `f15') - -ASM_START() -PROLOGUE(mpn_divrem_2) - .prologue -ifdef(`HAVE_ABI_32', -` addp4 r32 = 0, r32 C M I - addp4 r34 = 0, r34 C M I - zxt4 r35 = r35 C I - addp4 r36 = 0, r36 C M I - nop.m 0 - zxt4 r33 = r33 C I - ;; -') - .save ar.pfs, r42 - alloc r42 = ar.pfs, 5, 9, 1, 0 - shladd r34 = r35, 3, r34 - adds r14 = 8, r36 - mov r43 = r1 - ;; - adds r15 = -8, r34 - ld8 r39 = [r14] - .save ar.lc, r45 - mov r45 = ar.lc - adds r14 = -16, r34 - mov r40 = r0 - adds r34 = -24, r34 - ;; - ld8 r38 = [r15] - .save rp, r41 - mov r41 = b0 - .body - ld8 r36 = [r36] - ld8 r37 = [r14] - ;; - cmp.gtu p6, p7 = r39, r38 - (p6) br.cond.dptk .L8 - ;; - cmp.leu p8, p9 = r36, r37 - cmp.geu p6, p7 = r39, r38 - ;; - (p8) cmp4.ne.and.orcm p6, p7 = 0, r0 - (p7) br.cond.dptk .L51 -.L8: - add r14 = r33, r35 // un + fn - mov r46 = r39 // argument to mpn_invert_limb - ;; - adds r35 = -3, r14 - ;; - cmp.gt p12, p0 = r0, r35 - (p12) br.cond.dpnt L(end) - br.call.sptk.many b0 = mpn_invert_limb - ;; - setf.sig f11 = r8 // di (non-final) - setf.sig f34 = r39 // d1 - setf.sig f33 = r36 // d0 - mov r1 = r43 - ;; - mov r17 = 1 - setf.sig f9 = r38 // n2 - xma.l f6 = f11, f34, f0 // t0 = LO(di * d1) - ;; - setf.sig f10 = r37 // n1 - setf.sig f15 = r17 // 1 - xma.hu f8 = f11, f33, f0 // s0 = HI(di * d0) - ;; - getf.sig r17 = f6 - getf.sig r16 = f8 - mov ar.lc = r35 - ;; - sub r18 = r0, r39 // -d1 - add r14 = r17, r36 - ;; - setf.sig f14 = r18 // -d1 - cmp.leu p8, p9 = r17, r14 - add r16 = r14, r16 - ;; - (p9) adds r19 = 0, r0 - (p8) adds r19 = -1, r0 - cmp.gtu p6, p7 = r14, r16 - ;; - (p6) adds r19 = 1, r19 - ;; -ifelse(1,1,` - cmp.gt p7, p6 = r0, r19 - ;; - (p6) adds r8 = -1, r8 // di-- - (p6) sub r14 = r16, r39 // t0 -= d1 - (p6) cmp.ltu p6, p7 = r16, r39 // cy for: t0 - d1 - ;; - (p6) cmp.gt p9, p8 = 1, r19 - (p7) cmp.gt p9, p8 = 0, r19 - (p6) adds r19 = -1, r19 // t1 -= cy - mov r16 = r14 - ;; - (p8) adds r8 = -1, r8 // di-- - (p8) sub r14 = r16, r39 // t0 -= d1 - (p8) cmp.ltu p8, p9 = r16, r39 // cy for: t0 - d1 - ;; - (p8) cmp.gt p7, p6 = 1, r19 - (p9) cmp.gt p7, p6 = 0, r19 - (p8) adds r19 = -1, r19 // t1 -= cy - mov r16 = r14 - ;; - (p6) adds r8 = -1, r8 // di-- - (p6) sub r14 = r16, r39 // t0 -= d1 - (p6) cmp.ltu p6, p7 = r16, r39 // cy for: t0 - d1 - ;; - (p6) cmp.gt p9, p8 = 1, r19 - (p7) cmp.gt p9, p8 = 0, r19 - (p6) adds r19 = -1, r19 // t1 -= cy - mov r16 = r14 - ;; - (p8) adds r8 = -1, r8 // di-- - (p8) sub r14 = r16, r39 // t0 -= d1 - (p8) cmp.ltu p8, p9 = r16, r39 // cy for: t0 - d1 - ;; - (p8) adds r19 = -1, r19 // t1 -= cy - mov r16 = r14 -',` - cmp.gt p8, p9 = r0, r19 - (p8) br.cond.dpnt .L46 -.L52: - cmp.leu p6, p7 = r39, r16 - sub r14 = r16, r39 - adds r8 = -1, r8 - ;; - (p7) adds r19 = -1, r19 - mov r16 = r14 - ;; - (p7) cmp.gt p8, p9 = r0, r19 - (p9) br.cond.dptk .L52 -.L46: -') - setf.sig f32 = r8 // di - shladd r32 = r35, 3, r32 - ;; - - ALIGN(16) -L(top): nop 0 - nop 0 - cmp.gt p8, p9 = r33, r35 - ;; - (p8) mov r37 = r0 - (p9) ld8 r37 = [r34], -8 - xma.hu f8 = f9, f32, f10 // 0,29 - xma.l f12 = f9, f32, f10 // 0 - ;; - getf.sig r20 = f12 // q0 4 - xma.l f13 = f15, f8, f9 // q += n2 4 - sub r8 = -1, r36 // bitnot d0 - ;; - getf.sig r18 = f13 // 8 - xma.l f7 = f14, f13, f10 // 8 - xma.l f6 = f33, f13, f33 // t0 = LO(d0*q+d0) 8 - xma.hu f9 = f33, f13, f33 // t1 = HI(d0*q+d0) 9 - ;; - getf.sig r38 = f7 // n1 12 - getf.sig r16 = f6 // 13 - getf.sig r19 = f9 // 14 - ;; - sub r38 = r38, r39 // n1 -= d1 17 - ;; - cmp.ne p9, p0 = r0, r0 // clear p9 - cmp.leu p10, p11 = r16, r37 // cy for: n0 - t0 18 - ;; - sub r37 = r37, r16 // n0 -= t0 19 - (p11) sub r38 = r38, r19, 1 // n1 -= t1 - cy 19 - (p10) sub r38 = r38, r19 // n1 -= t1 19 - ;; - cmp.gtu p6, p7 = r20, r38 // n1 >= q0 20 - ;; - (p7) cmp.ltu p9, p0 = r8, r37 // 21 - (p6) add r18 = 1, r18 // - (p7) add r37 = r37, r36 // 21 - (p7) add r38 = r38, r39 // 21 - ;; - setf.sig f10 = r37 // n1 22 - (p9) add r38 = 1, r38 // 22 - ;; - setf.sig f9 = r38 // n2 23 - cmp.gtu p6, p7 = r39, r38 // 23 - (p7) br.cond.spnt L(fix) -L(bck): st8 [r32] = r18, -8 - adds r35 = -1, r35 - br.cloop.sptk.few L(top) - ;; - -L(end): add r14 = 8, r34 - add r15 = 16, r34 - mov b0 = r41 - ;; - st8 [r14] = r37 - st8 [r15] = r38 - mov ar.pfs = r42 - mov r8 = r40 - mov ar.lc = r45 - br.ret.sptk.many b0 - ;; -.L51: - .pred.rel "mutex", p8, p9 - sub r37 = r37, r36 - (p9) sub r38 = r38, r39, 1 - (p8) sub r38 = r38, r39 - adds r40 = 1, r0 - br .L8 - ;; - -L(fix): cmp.geu p6, p7 = r39, r38 - cmp.leu p8, p9 = r36, r37 - ;; - (p8) cmp4.ne.and.orcm p6, p7 = 0, r0 - (p6) br.cond.dptk L(bck) - sub r37 = r37, r36 - (p9) sub r38 = r38, r39, 1 - (p8) sub r38 = r38, r39 - adds r18 = 1, r18 - ;; - setf.sig f9 = r38 // n2 - setf.sig f10 = r37 // n1 - br L(bck) - -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/gcd_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/gcd_1.asm deleted file mode 100644 index 3afabd706fa0bc6c221134cce7f256cc825674be..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/gcd_1.asm +++ /dev/null @@ -1,238 +0,0 @@ -dnl Itanium-2 mpn_gcd_1 -- mpn by 1 gcd. - -dnl Contributed to the GNU project by Kevin Ryde, innerloop by Torbjorn -dnl Granlund. - -dnl Copyright 2002-2005, 2012, 2013, 2015 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/bitpair (1x1 gcd) -C Itanium: ? -C Itanium 2: 5.1 - - -C mpn_gcd_1 (mp_srcptr xp, mp_size_t xsize, mp_limb_t y); -C -C The entry sequence is designed to expect xsize>1 and hence a modexact -C call. This ought to be more common than a 1x1 operation. Our critical -C path is thus stripping factors of 2 from y, calling modexact, then -C stripping factors of 2 from the x remainder returned. -C -C The common factors of 2 between x and y must be determined using the -C original x, not the remainder from the modexact. This is done with -C x_orig which is xp[0]. There's plenty of time to do this while the rest -C of the modexact etc is happening. -C -C It's possible xp[0] is zero. In this case the trailing zeros calculation -C popc((x-1)&~x) gives 63, and that's clearly no less than what y will -C have, making min(x_twos,y_twos) == y_twos. -C -C The main loop consists of transforming x,y to abs(x-y),min(x,y), and then -C stripping factors of 2 from abs(x-y). Those factors of two are -C determined from just y-x, without the abs(), since there's the same -C number of trailing zeros on n or -n in twos complement. That makes the -C dependent chain 8 cycles deep. -C -C The selection of x-y versus y-x for abs(x-y), and the selection of the -C minimum of x and y, is done in parallel with the critical path. -C -C The algorithm takes about 0.68 iterations per bit (two N bit operands) on -C average, hence the final 5.8 cycles/bitpair. -C -C Not done: -C -C An alternate algorithm which didn't strip all twos, but instead applied -C tbit and predicated extr on x, and then y, was attempted. The loop was 6 -C cycles, but the algorithm is an average 1.25 iterations per bitpair for a -C total 7.25 c/bp, which is slower than the current approach. -C -C Alternatives: -C -C Perhaps we could do something tricky by extracting a few high bits and a -C few low bits from the operands, and looking up a table which would give a -C set of predicates to control some shifts or subtracts or whatever. That -C could knock off multiple bits per iteration. -C -C The right shifts are a bit of a bottleneck (shr at 2 or 3 cycles, or extr -C only going down I0), perhaps it'd be possible to shift left instead, -C using add. That would mean keeping track of the lowest not-yet-zeroed -C bit, using some sort of mask. -C -C TODO: -C * Once mod_1_N exists in assembly for Itanium, add conditional calls. -C * Call bmod_1 even for n=1 when up[0] >> v0 (like other gcd_1 impls). -C * Probably avoid popcnt also outside of loop, instead use ctz_table. - -ASM_START() - .explicit C What does this mean? - -C HP's assembler requires these declarations for importing mpn_modexact_1c_odd - .global mpn_modexact_1c_odd - .type mpn_modexact_1c_odd,@function - -C ctz_table[n] is the number of trailing zeros on n, or MAXSHIFT if n==0. - -deflit(MAXSHIFT, 7) -deflit(MASK, eval((m4_lshift(1,MAXSHIFT))-1)) - -C .section ".rodata" - .rodata - ALIGN(m4_lshift(1,MAXSHIFT)) C align table to allow using dep -ctz_table: - data1 MAXSHIFT -forloop(i,1,MASK, -` data1 m4_count_trailing_zeros(i) -') - -PROLOGUE(mpn_gcd_1) - - C r32 xp - C r33 xsize - C r34 y - -define(x, r8) -define(xp_orig, r32) -define(xsize, r33) -define(y, r34) define(inputs, 3) -define(save_rp, r35) -define(save_pfs, r36) -define(x_orig, r37) -define(x_orig_one, r38) -define(y_twos, r39) define(locals, 5) -define(out_xp, r40) -define(out_xsize, r41) -define(out_divisor, r42) -define(out_carry, r43) define(outputs, 4) - - .prologue - {.mmi; -ifdef(`HAVE_ABI_32', -` addp4 r9 = 0, xp_orig define(xp,r9)', C M0 -` define(xp,xp_orig)') - .save ar.pfs, save_pfs - alloc save_pfs = ar.pfs, inputs, locals, outputs, 0 C M2 - .save rp, save_rp - mov save_rp = b0 C I0 -}{.mbb; .body - add r10 = -1, y C M3 y-1 - nop.b 0 C B0 - nop.b 0 C B1 - ;; - -}{.mmi; ld8 x = [xp] C M0 x = xp[0] if no modexact - ld8 x_orig = [xp] C M1 orig x for common twos - cmp.ne p6,p0 = 1, xsize C I0 -}{.mmi; andcm y_twos = r10, y C M2 (y-1)&~y - mov out_xp = xp_orig C M3 - mov out_xsize = xsize C I1 - ;; -}{.mmi; mov out_carry = 0 C M0 - nop.m 0 C M1 - popcnt y_twos = y_twos C I0 y twos - ;; -}{.mmi; add x_orig_one = -1, x_orig C M0 orig x-1 - nop.m 0 C M1 - shr.u out_divisor = y, y_twos C I0 y without twos -}{.mib; nop.m 0 C M2 - shr.u y = y, y_twos C I1 y without twos - (p6) br.call.sptk.many b0 = mpn_modexact_1c_odd C if xsize>1 - ;; -} - C modexact can leave x==0 - {.mmi; cmp.eq p6,p0 = 0, x C M0 if {xp,xsize} % y == 0 - andcm x_orig = x_orig_one, x_orig C M1 orig (x-1)&~x - add r9 = -1, x C I0 x-1 - ;; -}{.mmi; andcm r9 = r9, x C M0 (x-1)&~x - nop.m 0 C M1 - mov b0 = save_rp C I0 - ;; -}{.mii; nop.m 0 C M0 - popcnt x_orig = x_orig C I0 orig x twos - popcnt r9 = r9 C I0 x twos - ;; -}{.mmi; cmp.lt p7,p0 = x_orig, y_twos C M0 orig x_twos < y_twos - addl r22 = @ltoff(ctz_table), r1 - shr.u x = x, r9 C I0 x odd - ;; -}{.mib; - (p7) mov y_twos = x_orig C M0 common twos - add r10 = -1, y C I0 y-1 - (p6) br.dpnt.few L(done_y) C B0 x%y==0 then result y - ;; -} - mov r25 = m4_lshift(MASK, MAXSHIFT) - ld8 r22 = [r22] - br L(ent) - ;; - - ALIGN(32) -L(top): - .pred.rel "mutex", p6,p7 - {.mmi; (p7) mov y = x - (p6) sub x = x, y - dep r21 = r19, r22, 0, MAXSHIFT C concat(table,lowbits) -}{.mmi; and r20 = MASK, r19 - (p7) mov x = r19 - nop 0 - ;; -} -L(mid): -{.mmb; ld1 r16 = [r21] - cmp.eq p10,p0 = 0, r20 - (p10) br.spnt.few.clr L(shift_alot) - ;; -}{.mmi; nop 0 - nop 0 - shr.u x = x, r16 - ;; -} -L(ent): - {.mmi; sub r19 = y, x - cmp.gtu p6,p7 = x, y - cmp.ne p8,p0 = x, y -}{.mmb; nop 0 - nop 0 - (p8) br.sptk.few.clr L(top) -} - -L(done_y): C result is y - mov ar.pfs = save_pfs C I0 - shl r8 = y, y_twos C I common factors of 2 - br.ret.sptk.many b0 - -L(shift_alot): - and r20 = x, r25 - shr.u x = x, MAXSHIFT - ;; - dep r21 = x, r22, 0, MAXSHIFT - br L(mid) -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/gmp-mparam.h deleted file mode 100644 index cda7573a1bd7d5fc45eac5703a864dff281e678c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/gmp-mparam.h +++ /dev/null @@ -1,204 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 2000-2005, 2009-2011, 2014, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* 900MHz Itanium2 (titanic.gmplib.org) */ -/* FFT tuning limit = 60 M */ -/* Generated by tuneup.c, 2015-10-11, gcc 4.4 */ - -#define MOD_1_1P_METHOD 2 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 3 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 5 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 26 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 10 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD 12 -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ - -#define MUL_TOOM22_THRESHOLD 39 -#define MUL_TOOM33_THRESHOLD 129 -#define MUL_TOOM44_THRESHOLD 214 -#define MUL_TOOM6H_THRESHOLD 318 -#define MUL_TOOM8H_THRESHOLD 430 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 121 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 145 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 124 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 151 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 201 - -#define SQR_BASECASE_THRESHOLD 11 -#define SQR_TOOM2_THRESHOLD 85 -#define SQR_TOOM3_THRESHOLD 131 -#define SQR_TOOM4_THRESHOLD 494 -#define SQR_TOOM6_THRESHOLD 0 /* always */ -#define SQR_TOOM8_THRESHOLD 0 /* always */ - -#define MULMID_TOOM42_THRESHOLD 98 - -#define MULMOD_BNM1_THRESHOLD 23 -#define SQRMOD_BNM1_THRESHOLD 25 - -#define MUL_FFT_MODF_THRESHOLD 500 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 500, 5}, { 29, 6}, { 35, 7}, { 18, 6}, \ - { 37, 7}, { 19, 6}, { 39, 7}, { 33, 8}, \ - { 17, 7}, { 37, 8}, { 19, 7}, { 39, 8}, \ - { 21, 7}, { 43, 8}, { 37, 9}, { 19, 8}, \ - { 43, 9}, { 23, 8}, { 49, 9}, { 27, 8}, \ - { 57, 9}, { 43,10}, { 23, 9}, { 59,10}, \ - { 31, 9}, { 71,10}, { 39, 9}, { 87,10}, \ - { 47, 9}, { 99,10}, { 55,11}, { 31,10}, \ - { 87,11}, { 47,10}, { 111,12}, { 31,11}, \ - { 63,10}, { 143,11}, { 79,10}, { 167,11}, \ - { 95,10}, { 191,11}, { 111,12}, { 63,11}, \ - { 143,10}, { 287,11}, { 159,12}, { 95,11}, \ - { 191,10}, { 399,11}, { 207,10}, { 431,13}, \ - { 63,12}, { 127,11}, { 271,10}, { 543,11}, \ - { 287,10}, { 575,11}, { 303,12}, { 159,11}, \ - { 335,10}, { 671,11}, { 367,12}, { 191,11}, \ - { 431,12}, { 223,13}, { 127,12}, { 255,11}, \ - { 543,12}, { 287,11}, { 607,12}, { 351,11}, \ - { 703,13}, { 191,12}, { 415,11}, { 863,12}, \ - { 447,14}, { 127,13}, { 255,12}, { 607,13}, \ - { 319,12}, { 735,13}, { 383,12}, { 863,13}, \ - { 447,12}, { 927,11}, { 1855,12}, { 959,14}, \ - { 255,13}, { 575,12}, { 1247,13}, { 703,14}, \ - { 383,13}, { 831,12}, { 1727,13}, { 895,12}, \ - { 1791,15}, { 255,14}, { 511,13}, { 1087,12}, \ - { 2175,13}, { 1151,14}, { 639,13}, { 1343,12}, \ - { 2687,13}, { 1471,14}, { 767,13}, { 1599,12}, \ - { 3199,13}, { 1663,14}, { 895,13}, { 1855,15}, \ - { 511,14}, { 1023,13}, { 2175,14}, { 1151,13}, \ - { 2431,14}, { 1279,13}, { 2687,14}, { 1407,15}, \ - { 767,14}, { 1663,13}, { 3455,14}, { 1791,16}, \ - { 511,15}, { 1023,14}, { 2431,15}, { 1279,14}, \ - { 2943,15}, { 1535,14}, { 3455,15}, { 1791,14}, \ - { 16384,15}, { 32768,16}, { 65536,17}, { 131072,18}, \ - { 262144,19}, { 524288,20}, {1048576,21}, {2097152,22}, \ - {4194304,23}, {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 142 -#define MUL_FFT_THRESHOLD 5760 - -#define SQR_FFT_MODF_THRESHOLD 464 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 464, 5}, { 29, 6}, { 15, 5}, { 31, 6}, \ - { 35, 7}, { 18, 6}, { 37, 7}, { 33, 8}, \ - { 17, 7}, { 37, 8}, { 19, 7}, { 40, 8}, \ - { 29, 9}, { 15, 8}, { 37, 9}, { 19, 8}, \ - { 43, 9}, { 23, 8}, { 49, 9}, { 27, 8}, \ - { 57, 9}, { 43,10}, { 23, 9}, { 55,10}, \ - { 31, 9}, { 71,10}, { 39, 9}, { 83,10}, \ - { 47, 9}, { 99,10}, { 55,11}, { 31,10}, \ - { 87,11}, { 47,10}, { 111,12}, { 31,11}, \ - { 63,10}, { 135,11}, { 79,10}, { 167,11}, \ - { 95,10}, { 191,11}, { 111,12}, { 63,11}, \ - { 143,10}, { 287,11}, { 159,10}, { 319,12}, \ - { 95,11}, { 191,10}, { 399,11}, { 207,10}, \ - { 415,13}, { 63,12}, { 127,11}, { 255,10}, \ - { 511,11}, { 271,10}, { 543,11}, { 287,10}, \ - { 575,11}, { 303,12}, { 159,11}, { 335,10}, \ - { 671,11}, { 367,10}, { 735,12}, { 191,11}, \ - { 399,10}, { 799,11}, { 431,12}, { 223,11}, \ - { 463,13}, { 127,12}, { 255,11}, { 543,12}, \ - { 287,11}, { 607,12}, { 319,11}, { 671,12}, \ - { 351,11}, { 735,13}, { 191,12}, { 415,11}, \ - { 863,12}, { 447,14}, { 127,13}, { 255,12}, \ - { 607,13}, { 319,12}, { 735,13}, { 383,12}, \ - { 863,13}, { 447,12}, { 959,14}, { 255,13}, \ - { 575,12}, { 1183,13}, { 703,14}, { 383,13}, \ - { 831,12}, { 1663,13}, { 895,12}, { 1791,15}, \ - { 255,14}, { 511,13}, { 1087,12}, { 2175,13}, \ - { 1151,14}, { 639,13}, { 1343,12}, { 2687,13}, \ - { 1407,14}, { 767,13}, { 1599,12}, { 3199,13}, \ - { 1663,14}, { 895,13}, { 1855,15}, { 511,14}, \ - { 1023,13}, { 2175,14}, { 1151,13}, { 2431,14}, \ - { 1279,13}, { 2687,14}, { 1407,15}, { 767,14}, \ - { 1663,13}, { 3327,14}, { 1791,16}, { 511,15}, \ - { 1023,14}, { 2431,15}, { 1279,14}, { 2943,15}, \ - { 1535,14}, { 3327,15}, { 1791,14}, { 16384,15}, \ - { 32768,16}, { 65536,17}, { 131072,18}, { 262144,19}, \ - { 524288,20}, {1048576,21}, {2097152,22}, {4194304,23}, \ - {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 149 -#define SQR_FFT_THRESHOLD 4032 - -#define MULLO_BASECASE_THRESHOLD 36 -#define MULLO_DC_THRESHOLD 0 /* never mpn_mullo_basecase */ -#define MULLO_MUL_N_THRESHOLD 11278 -#define SQRLO_BASECASE_THRESHOLD 0 /* always */ -#define SQRLO_DC_THRESHOLD 11 -#define SQRLO_SQR_THRESHOLD 7916 - -#define DC_DIV_QR_THRESHOLD 59 -#define DC_DIVAPPR_Q_THRESHOLD 222 -#define DC_BDIV_QR_THRESHOLD 94 -#define DC_BDIV_Q_THRESHOLD 264 - -#define INV_MULMOD_BNM1_THRESHOLD 78 -#define INV_NEWTON_THRESHOLD 133 -#define INV_APPR_THRESHOLD 133 - -#define BINV_NEWTON_THRESHOLD 250 -#define REDC_1_TO_REDC_2_THRESHOLD 0 /* always */ -#define REDC_2_TO_REDC_N_THRESHOLD 148 - -#define MU_DIV_QR_THRESHOLD 1187 -#define MU_DIVAPPR_Q_THRESHOLD 1120 -#define MUPI_DIV_QR_THRESHOLD 0 /* always */ -#define MU_BDIV_QR_THRESHOLD 1210 -#define MU_BDIV_Q_THRESHOLD 1470 - -#define POWM_SEC_TABLE 1,34,321,1985 - -#define GET_STR_DC_THRESHOLD 15 -#define GET_STR_PRECOMPUTE_THRESHOLD 21 -#define SET_STR_DC_THRESHOLD 1216 -#define SET_STR_PRECOMPUTE_THRESHOLD 3170 - -#define FAC_DSC_THRESHOLD 746 -#define FAC_ODD_THRESHOLD 0 /* always */ - -#define MATRIX22_STRASSEN_THRESHOLD 24 -#define HGCD_THRESHOLD 117 -#define HGCD_APPR_THRESHOLD 111 -#define HGCD_REDUCE_THRESHOLD 3389 -#define GCD_DC_THRESHOLD 460 -#define GCDEXT_DC_THRESHOLD 411 -#define JACOBI_BASE_METHOD 2 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/hamdist.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/hamdist.asm deleted file mode 100644 index 477df4cd7183bc362f9fb1c140f3014a34867e49..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/hamdist.asm +++ /dev/null @@ -1,365 +0,0 @@ -dnl IA-64 mpn_hamdist -- mpn hamming distance. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2003-2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 2 -C Itanium 2: 1 - -C INPUT PARAMETERS -define(`up', `r32') -define(`vp', `r33') -define(`n', `r34') - -define(`u0',`r16') define(`u1',`r17') define(`u2',`r18') define(`u3',`r19') -define(`v0',`r20') define(`v1',`r21') define(`v2',`r22') define(`v3',`r23') -define(`x0',`r24') define(`x1',`r25') define(`x2',`r26') define(`x3',`r27') -define(`c0',`r28') define(`c1',`r29') define(`c2',`r30') define(`c3',`r31') -define(`s',`r8') - - -ASM_START() -PROLOGUE(mpn_hamdist) - .prologue -ifdef(`HAVE_ABI_32', -` addp4 up = 0, up C M I - addp4 vp = 0, vp C M I - zxt4 n = n C I - ;; -') - - {.mmi; ld8 r10 = [up], 8 C load first ulimb M01 - ld8 r11 = [vp], 8 C load first vlimb M01 - mov.i r2 = ar.lc C save ar.lc I0 -}{.mmi; and r14 = 3, n C M I - cmp.lt p15, p0 = 4, n C small count? M I - add n = -5, n C M I - ;; -}{.mmi; cmp.eq p6, p0 = 1, r14 C M I - cmp.eq p7, p0 = 2, r14 C M I - cmp.eq p8, p0 = 3, r14 C M I -}{.bbb - (p6) br.dptk .Lb01 C B - (p7) br.dptk .Lb10 C B - (p8) br.dptk .Lb11 C B -} - - -.Lb00: ld8 u1 = [up], 8 C M01 - ld8 v1 = [vp], 8 C M01 - shr.u n = n, 2 C I0 - xor x0 = r10, r11 C M I - ;; - ld8 u2 = [up], 8 C M01 - ld8 v2 = [vp], 8 C M01 - mov.i ar.lc = n C I0 - xor x1 = u1, v1 C M I - ;; - ld8 u3 = [up], 8 C M01 - ld8 v3 = [vp], 8 C M01 - xor x2 = u2, v2 C M I - mov s = 0 C M I - (p15) br.cond.dptk .grt4 C B - ;; - popcnt c0 = x0 C I0 - xor x3 = u3, v3 C M I - ;; - popcnt c1 = x1 C I0 - ;; - popcnt c2 = x2 C I0 - br .Lcj4 C B - -.grt4: ld8 u0 = [up], 8 C M01 - ld8 v0 = [vp], 8 C M01 - xor x1 = u1, v1 C M I - ;; - ld8 u1 = [up], 8 C M01 - ld8 v1 = [vp], 8 C M01 - xor x2 = u2, v2 C M I - ;; - ld8 u2 = [up], 8 C M01 - ld8 v2 = [vp], 8 C M01 - popcnt c0 = x0 C I0 - xor x3 = u3, v3 C M I - ;; - ld8 u3 = [up], 8 C M01 - ld8 v3 = [vp], 8 C M01 - popcnt c1 = x1 C I0 - xor x0 = u0, v0 C M I - br.cloop.dpnt .grt8 C B - - popcnt c2 = x2 C I0 - xor x1 = u1, v1 C M I - br .Lcj8 C B - -.grt8: ld8 u0 = [up], 8 C M01 - ld8 v0 = [vp], 8 C M01 - popcnt c2 = x2 C I0 - xor x1 = u1, v1 C M I - br .LL00 C B - - -.Lb01: xor x3 = r10, r11 C M I - shr.u n = n, 2 C I0 - (p15) br.cond.dptk .grt1 C B - ;; - popcnt r8 = x3 C I0 - br.ret.sptk.many b0 C B - -.grt1: ld8 u0 = [up], 8 C M01 - ld8 v0 = [vp], 8 C M01 - mov.i ar.lc = n C I0 - ;; - ld8 u1 = [up], 8 C M01 - ld8 v1 = [vp], 8 C M01 - mov s = 0 C M I - ;; - ld8 u2 = [up], 8 C M01 - ld8 v2 = [vp], 8 C M01 - ;; - ld8 u3 = [up], 8 C M01 - ld8 v3 = [vp], 8 C M01 - xor x0 = u0, v0 C M I - br.cloop.dpnt .grt5 C B - - xor x1 = u1, v1 C M I - ;; - popcnt c3 = x3 C I0 - xor x2 = u2, v2 C M I - ;; - popcnt c0 = x0 C I0 - xor x3 = u3, v3 C M I - ;; - popcnt c1 = x1 C I0 - br .Lcj5 C B - -.grt5: ld8 u0 = [up], 8 C M01 - ld8 v0 = [vp], 8 C M01 - xor x1 = u1, v1 C M I - ;; - ld8 u1 = [up], 8 C M01 - ld8 v1 = [vp], 8 C M01 - popcnt c3 = x3 C I0 - xor x2 = u2, v2 C M I - ;; - ld8 u2 = [up], 8 C M01 - ld8 v2 = [vp], 8 C M01 - popcnt c0 = x0 C I0 - xor x3 = u3, v3 C M I - ;; - ld8 u3 = [up], 8 C M01 - ld8 v3 = [vp], 8 C M01 - popcnt c1 = x1 C I0 - xor x0 = u0, v0 C M I - br.cloop.dpnt .Loop C B - br .Lend C B - - -.Lb10: ld8 u3 = [up], 8 C M01 - ld8 v3 = [vp], 8 C M01 - xor x2 = r10, r11 C M I - (p15) br.cond.dptk .grt2 C B - ;; - xor x3 = u3, v3 C M I - ;; - popcnt c2 = x2 C I0 - ;; - popcnt c3 = x3 C I0 - ;; - add s = c2, c3 C M I - br.ret.sptk.many b0 C B - -.grt2: ld8 u0 = [up], 8 C M01 - ld8 v0 = [vp], 8 C M01 - shr.u n = n, 2 C I0 - ;; - ld8 u1 = [up], 8 C M01 - ld8 v1 = [vp], 8 C M01 - mov.i ar.lc = n C I0 - mov s = 0 C M I - ;; - ld8 u2 = [up], 8 C M01 - ld8 v2 = [vp], 8 C M01 - xor x3 = u3, v3 C M I - ;; - ld8 u3 = [up], 8 C M01 - ld8 v3 = [vp], 8 C M01 - xor x0 = u0, v0 C M I - br.cloop.dptk .grt6 C B - - popcnt c2 = x2 C I0 - xor x1 = u1, v1 C M I - ;; - popcnt c3 = x3 C I0 - xor x2 = u2, v2 C M I - ;; - popcnt c0 = x0 C I0 - xor x3 = u3, v3 C M I - br .Lcj6 C B - -.grt6: ld8 u0 = [up], 8 C M01 - ld8 v0 = [vp], 8 C M01 - popcnt c2 = x2 C I0 - xor x1 = u1, v1 C M I - ;; - ld8 u1 = [up], 8 C M01 - ld8 v1 = [vp], 8 C M01 - popcnt c3 = x3 C I0 - xor x2 = u2, v2 C M I - ;; - ld8 u2 = [up], 8 C M01 - ld8 v2 = [vp], 8 C M01 - popcnt c0 = x0 C I0 - xor x3 = u3, v3 C M I - br .LL10 C B - - -.Lb11: ld8 u2 = [up], 8 C M01 - ld8 v2 = [vp], 8 C M01 - shr.u n = n, 2 C I0 - xor x1 = r10, r11 C M I - ;; - ld8 u3 = [up], 8 C M01 - ld8 v3 = [vp], 8 C M01 - xor x2 = u2, v2 C M I - (p15) br.cond.dptk .grt3 C B - ;; - xor x3 = u3, v3 C M I - ;; - popcnt c1 = x1 C I0 - ;; - popcnt c2 = x2 C I0 - ;; - popcnt c3 = x3 C I0 - ;; - add s = c1, c2 C M I - ;; - add s = s, c3 C M I - br.ret.sptk.many b0 C B - -.grt3: ld8 u0 = [up], 8 C M01 - ld8 v0 = [vp], 8 C M01 - mov.i ar.lc = n C I0 - ;; - ld8 u1 = [up], 8 C M01 - ld8 v1 = [vp], 8 C M01 - mov s = 0 C M I - ;; - ld8 u2 = [up], 8 C M01 - ld8 v2 = [vp], 8 C M01 - xor x3 = u3, v3 C M I - ;; - ld8 u3 = [up], 8 C M01 - ld8 v3 = [vp], 8 C M01 - popcnt c1 = x1 C I0 - xor x0 = u0, v0 C M I - br.cloop.dptk .grt7 C B - popcnt c2 = x2 C I0 - xor x1 = u1, v1 C M I - ;; - popcnt c3 = x3 C I0 - xor x2 = u2, v2 C M I - br .Lcj7 C B - -.grt7: ld8 u0 = [up], 8 C M01 - ld8 v0 = [vp], 8 C M01 - popcnt c2 = x2 C I0 - xor x1 = u1, v1 C M I - ;; - ld8 u1 = [up], 8 C M01 - ld8 v1 = [vp], 8 C M01 - popcnt c3 = x3 C I0 - xor x2 = u2, v2 C M I - br .LL11 C B - - - ALIGN(32) -.Loop: ld8 u0 = [up], 8 C M01 - ld8 v0 = [vp], 8 C M01 - popcnt c2 = x2 C I0 - add s = s, c3 C M I - xor x1 = u1, v1 C M I - nop.b 1 C - - ;; -.LL00: ld8 u1 = [up], 8 C M01 - ld8 v1 = [vp], 8 C M01 - popcnt c3 = x3 C I0 - add s = s, c0 C M I - xor x2 = u2, v2 C M I - nop.b 1 C - - ;; -.LL11: ld8 u2 = [up], 8 C M01 - ld8 v2 = [vp], 8 C M01 - popcnt c0 = x0 C I0 - add s = s, c1 C M I - xor x3 = u3, v3 C M I - nop.b 1 C - - ;; -.LL10: ld8 u3 = [up], 8 C M01 - ld8 v3 = [vp], 8 C M01 - popcnt c1 = x1 C I0 - add s = s, c2 C M I - xor x0 = u0, v0 C M I - br.cloop.dptk .Loop C B - ;; - -.Lend: popcnt c2 = x2 C I0 - add s = s, c3 C M I - xor x1 = u1, v1 C M I - ;; -.Lcj8: popcnt c3 = x3 C I0 - add s = s, c0 C M I - xor x2 = u2, v2 C M I - ;; -.Lcj7: popcnt c0 = x0 C I0 - add s = s, c1 C M I - xor x3 = u3, v3 C M I - ;; -.Lcj6: popcnt c1 = x1 C I0 - add s = s, c2 C M I - ;; -.Lcj5: popcnt c2 = x2 C I0 - add s = s, c3 C M I - ;; -.Lcj4: popcnt c3 = x3 C I0 - add s = s, c0 C M I - ;; - add s = s, c1 C M I - ;; - add s = s, c2 C M I - ;; - add s = s, c3 C M I - mov.i ar.lc = r2 C I0 - br.ret.sptk.many b0 C B -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/ia64-defs.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/ia64-defs.m4 deleted file mode 100644 index f71d280b179bc2ee59fe1ee9e62390045d39dfaa..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/ia64-defs.m4 +++ /dev/null @@ -1,147 +0,0 @@ -divert(-1) - - -dnl Copyright 2000, 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl ia64 assembler comments are C++ style "//" to the end of line. gas -dnl also accepts "#" as a comment, if it's the first non-blank on a line. -dnl -dnl BSD m4 can't handle a multi-character comment like "//" (see notes in -dnl mpn/asm-defs.m4). For now the default "#" is left, but with care taken -dnl not to put any macros after "foo#" (since of course they won't expand). - - -define(`ASM_START', -m4_assert_numargs(0) -`') - - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo) -dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) -dnl -dnl 32-byte alignment is used for the benefit of itanium-2, where the code -dnl fetcher will only take 2 bundles from a 32-byte aligned target. At -dnl 16mod32 it only reads 1 in the first cycle. This might not make any -dnl difference if the rotate buffers are full or there's other work holding -dnl up execution, but we use 32-bytes to give the best chance of peak -dnl throughput. -dnl -dnl We can use .align here despite the gas bug noted in mpn/ia64/README, -dnl since we're not expecting to execute across a PROLOGUE(), at least not -dnl currently. - -define(`PROLOGUE_cpu', -m4_assert_numargs(1) - ` - .text - .align 32 - .global $1# - .proc $1# -$1:') - -define(`EPILOGUE_cpu', -m4_assert_numargs(1) - ` - .endp $1# -') - -define(`DATASTART', - `dnl - DATA -$1:') -define(`DATAEND',`dnl') - -define(`ASM_END',`dnl') - - -dnl Usage: ALIGN(bytes) -dnl -dnl Emit a ".align" directive. "bytes" is eval()ed, so can be an -dnl expression. -dnl -dnl This version overrides the definition in mpn/asm-defs.m4. We suppress -dnl any .align if the gas byte-swapped-nops bug was detected by configure -dnl GMP_ASM_IA64_ALIGN_OK. - -define(`ALIGN', -m4_assert_numargs(1) -m4_assert_defined(`IA64_ALIGN_OK') -`ifelse(IA64_ALIGN_OK,no,, -`.align eval($1)')') - - -dnl Usage: ASSERT([pr] [,code]) -dnl -dnl Require that the given predicate register is true after executing the -dnl test code. For example, -dnl -dnl ASSERT(p6, -dnl ` cmp.eq p6,p0 = r3, r4') -dnl -dnl If the predicate register argument is empty then nothing is tested, the -dnl code is just executed. This can be used for setups required by later -dnl ASSERTs. The code argument can be omitted to just test a predicate -dnl with no special setup code. -dnl -dnl For convenience, stops are inserted before and after the code emitted. - -define(ASSERT, -m4_assert_numargs_range(1,2) -m4_assert_defined(`WANT_ASSERT') -`ifelse(WANT_ASSERT,1, -` ;; -ifelse(`$2',,, -`$2 - ;; -') -ifelse(`$1',,, -`($1) br .LASSERTok`'ASSERT_label_counter ;; - cmp.ne p6,p6 = r0, r0 C illegal instruction - ;; -.LASSERTok`'ASSERT_label_counter: -define(`ASSERT_label_counter',eval(ASSERT_label_counter+1)) -') -')') -define(`ASSERT_label_counter',1) - -define(`getfsig', `getf.sig') -define(`setfsig', `setf.sig') -define(`cmpeq', `cmp.eq') -define(`cmpne', `cmp.ne') -define(`cmpltu', `cmp.ltu') -define(`cmpleu', `cmp.leu') -define(`cmpgtu', `cmp.gtu') -define(`cmpgeu', `cmp.geu') -define(`cmple', `cmp.le') -define(`cmpgt', `cmp.gt') -define(`cmpeqor', `cmp.eq.or') -define(`cmpequc', `cmp.eq.unc') - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/invert_limb.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/invert_limb.asm deleted file mode 100644 index 5effdda815c836eff9ecc6032c2dcf6654a95c04..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/invert_limb.asm +++ /dev/null @@ -1,105 +0,0 @@ -dnl IA-64 mpn_invert_limb -- Invert a normalized limb. - -dnl Contributed to the GNU project by Torbjorn Granlund and Kevin Ryde. - -dnl Copyright 2000, 2002, 2004 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C d = r32 - -C cycles -C Itanium: 74 -C Itanium 2: 50+6 - -C It should be possible to avoid the xmpy.hu and the following tests by -C explicitly chopping in the last fma. That would save about 10 cycles. - -ASM_START() - .sdata - .align 16 -ifdef(`HAVE_DOUBLE_IEEE_LITTLE_ENDIAN',` -.LC0: data4 0x00000000, 0x80000000, 0x0000403f, 0x00000000 C 2^64 -.LC1: data4 0x00000000, 0x80000000, 0x0000407f, 0x00000000 C 2^128 - -',`ifdef(`HAVE_DOUBLE_IEEE_BIG_ENDIAN',` -.LC0: data4 0x403f8000, 0x00000000, 0x00000000, 0x00000000 C 2^64 -.LC1: data4 0x407f8000, 0x00000000, 0x00000000, 0x00000000 C 2^128 - -',`m4_error(`Oops, need to know float endianness -')')') - - -PROLOGUE(mpn_invert_limb) - C 00 - addl r14 = @gprel(.LC0), gp - addl r15 = @gprel(.LC1), gp - setf.sig f7 = r32 - add r9 = r32, r32 C check for d = 2^63 - ;; C 01 - ldfe f10 = [r14] C 2^64 - ldfe f8 = [r15] C 2^128 - cmp.eq p6, p0 = 0, r9 C check for d = 2^63 - mov r8 = -1 C retval for 2^63 - (p6) br.ret.spnt.many b0 - ;; C 07 - fmpy.s1 f11 = f7, f10 C f11 = d * 2^64 - fnma.s1 f6 = f7, f10, f8 C f6 = 2^128 - d * 2^64 - ;; C 11 - frcpa.s1 f8, p6 = f6, f7 - ;; C 15 - (p6) fnma.s1 f9 = f7, f8, f1 - (p6) fmpy.s1 f10 = f6, f8 - ;; C 19 - (p6) fmpy.s1 f11 = f9, f9 - (p6) fma.s1 f10 = f9, f10, f10 - ;; C 23 - (p6) fma.s1 f8 = f9, f8, f8 - (p6) fma.s1 f9 = f11, f10, f10 - ;; C 27 - (p6) fma.s1 f8 = f11, f8, f8 - (p6) fnma.s1 f10 = f7, f9, f6 - ;; C 31 - (p6) fma.s1 f8 = f10, f8, f9 - ;; C 35 - fcvt.fxu.trunc.s1 f8 = f8 - ;; C 39 - getf.sig r8 = f8 - xmpy.hu f10 = f8, f7 C di * d - ;; C 43 - getf.sig r14 = f10 - andcm r9 = -1, r32 C one's complement - ;; C 48 - cmp.ltu p6, p0 = r9, r14 C got overflow? - ;; C 49 - (p6) add r8 = -1, r8 C adjust di down - br.ret.sptk.many b0 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/logops_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/logops_n.asm deleted file mode 100644 index e4a2f61cce5158e03e565e215eb053ad17662f26..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/logops_n.asm +++ /dev/null @@ -1,292 +0,0 @@ -dnl IA-64 mpn_and_n, mpn_andn_n, mpn_nand_n, mpn_ior_n, mpn_iorn_n, -dnl mpn_nior_n, mpn_xor_n, mpn_xnor_n -- mpn bitwise logical operations. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2003-2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 2 -C Itanium 2: 1 - -C TODO -C * Use rp,rpx scheme of aors_n.asm to allow parallel stores (useful in -C wind-down code). - -C INPUT PARAMETERS -define(`rp', `r32') -define(`up', `r33') -define(`vp', `r34') -define(`n', `r35') - -ifdef(`OPERATION_and_n', -` define(`func',`mpn_and_n') - define(`logop', `and $1 = $2, $3') - define(`notormov', `mov $1 = $2')') -ifdef(`OPERATION_andn_n', -` define(`func',`mpn_andn_n') - define(`logop', `andcm $1 = $2, $3') - define(`notormov', `mov $1 = $2')') -ifdef(`OPERATION_nand_n', -` define(`func',`mpn_nand_n') - define(`logop', `and $1 = $2, $3') - define(`notormov', `sub $1 = -1, $2')') -ifdef(`OPERATION_ior_n', -` define(`func',`mpn_ior_n') - define(`logop', `or $1 = $2, $3') - define(`notormov', `mov $1 = $2')') -ifdef(`OPERATION_iorn_n', -` define(`func',`mpn_iorn_n') - define(`logop', `andcm $1 = $3, $2') - define(`notormov', `sub $1 = -1, $2')') -ifdef(`OPERATION_nior_n', -` define(`func',`mpn_nior_n') - define(`logop', `or $1 = $2, $3') - define(`notormov', `sub $1 = -1, $2')') -ifdef(`OPERATION_xor_n', -` define(`func',`mpn_xor_n') - define(`logop', `xor $1 = $2, $3') - define(`notormov', `mov $1 = $2')') -ifdef(`OPERATION_xnor_n', -` define(`func',`mpn_xnor_n') - define(`logop', `xor $1 = $2, $3') - define(`notormov', `sub $1 = -1, $2')') - -MULFUNC_PROLOGUE(mpn_and_n mpn_andn_n mpn_nand_n mpn_ior_n mpn_iorn_n mpn_nior_n mpn_xor_n mpn_xnor_n) - -ASM_START() -PROLOGUE(func) - .prologue - .save ar.lc, r2 - .body -ifdef(`HAVE_ABI_32', -` addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - addp4 vp = 0, vp C M I - nop.m 0 - nop.m 0 - zxt4 n = n C I - ;; -') -{.mmi - ld8 r10 = [up], 8 C M - ld8 r11 = [vp], 8 C M - mov.i r2 = ar.lc C I0 -} -{.mmi - and r14 = 3, n C M I - cmp.lt p15, p14 = 4, n C M I - shr.u n = n, 2 C I0 - ;; -} -{.mmi - cmp.eq p6, p0 = 1, r14 C M I - cmp.eq p7, p0 = 2, r14 C M I - cmp.eq p8, p0 = 3, r14 C M I -} -{.bbb - (p6) br.dptk .Lb01 C B - (p7) br.dptk .Lb10 C B - (p8) br.dptk .Lb11 C B -} - -.Lb00: ld8 r17 = [up], 8 C M - ld8 r21 = [vp], 8 C M - add n = -2, n C M I - ;; - ld8 r18 = [up], 8 C M - ld8 r22 = [vp], 8 C M - ;; - ld8 r19 = [up], 8 C M - ld8 r23 = [vp], 8 C M - (p15) br.cond.dpnt .grt4 C B - - logop( r14, r10, r11) C M I - ;; - logop( r15, r17, r21) C M I - notormov( r8, r14) C M I - br .Lcj4 C B - -.grt4: logop( r14, r10, r11) C M I - ld8 r16 = [up], 8 C M - ld8 r20 = [vp], 8 C M - ;; - logop( r15, r17, r21) C M I - ld8 r17 = [up], 8 C M - mov.i ar.lc = n C I0 - notormov( r8, r14) C M I - ld8 r21 = [vp], 8 C M - br .LL00 C B - -.Lb01: add n = -1, n C M I - logop( r15, r10, r11) C M I - (p15) br.cond.dpnt .grt1 C B - ;; - - notormov( r9, r15) C M I - br .Lcj1 C B - -.grt1: ld8 r16 = [up], 8 C M - ld8 r20 = [vp], 8 C M - ;; - ld8 r17 = [up], 8 C M - ld8 r21 = [vp], 8 C M - mov.i ar.lc = n C I0 - ;; - ld8 r18 = [up], 8 C M - ld8 r22 = [vp], 8 C M - ;; - ld8 r19 = [up], 8 C M - ld8 r23 = [vp], 8 C M - br.cloop.dptk .grt5 C B - ;; - - logop( r14, r16, r20) C M I - notormov( r9, r15) C M I - br .Lcj5 C B - -.grt5: logop( r14, r16, r20) C M I - ld8 r16 = [up], 8 C M - notormov( r9, r15) C M I - ld8 r20 = [vp], 8 C M - br .LL01 C B - -.Lb10: ld8 r19 = [up], 8 C M - ld8 r23 = [vp], 8 C M - (p15) br.cond.dpnt .grt2 C B - - logop( r14, r10, r11) C M I - ;; - logop( r15, r19, r23) C M I - notormov( r8, r14) C M I - br .Lcj2 C B - -.grt2: ld8 r16 = [up], 8 C M - ld8 r20 = [vp], 8 C M - add n = -1, n C M I - ;; - ld8 r17 = [up], 8 C M - ld8 r21 = [vp], 8 C M - logop( r14, r10, r11) C M I - ;; - ld8 r18 = [up], 8 C M - ld8 r22 = [vp], 8 C M - mov.i ar.lc = n C I0 - ;; - logop( r15, r19, r23) C M I - ld8 r19 = [up], 8 C M - notormov( r8, r14) C M I - ld8 r23 = [vp], 8 C M - br.cloop.dptk .Loop C B - br .Lcj6 C B - -.Lb11: ld8 r18 = [up], 8 C M - ld8 r22 = [vp], 8 C M - add n = -1, n C M I - ;; - ld8 r19 = [up], 8 C M - ld8 r23 = [vp], 8 C M - logop( r15, r10, r11) C M I - (p15) br.cond.dpnt .grt3 C B - ;; - - logop( r14, r18, r22) C M I - notormov( r9, r15) C M I - br .Lcj3 C B - -.grt3: ld8 r16 = [up], 8 C M - ld8 r20 = [vp], 8 C M - ;; - ld8 r17 = [up], 8 C M - ld8 r21 = [vp], 8 C M - mov.i ar.lc = n C I0 - ;; - logop( r14, r18, r22) C M I - ld8 r18 = [up], 8 C M - notormov( r9, r15) C M I - ld8 r22 = [vp], 8 C M - br .LL11 C B - -C *** MAIN LOOP START *** - ALIGN(32) -.Loop: st8 [rp] = r8, 8 C M - logop( r14, r16, r20) C M I - notormov( r9, r15) C M I - ld8 r16 = [up], 8 C M - ld8 r20 = [vp], 8 C M - nop.b 0 - ;; -.LL01: st8 [rp] = r9, 8 C M - logop( r15, r17, r21) C M I - notormov( r8, r14) C M I - ld8 r17 = [up], 8 C M - ld8 r21 = [vp], 8 C M - nop.b 0 - ;; -.LL00: st8 [rp] = r8, 8 C M - logop( r14, r18, r22) C M I - notormov( r9, r15) C M I - ld8 r18 = [up], 8 C M - ld8 r22 = [vp], 8 C M - nop.b 0 - ;; -.LL11: st8 [rp] = r9, 8 C M - logop( r15, r19, r23) C M I - notormov( r8, r14) C M I - ld8 r19 = [up], 8 C M - ld8 r23 = [vp], 8 C M - br.cloop.dptk .Loop ;; C B -C *** MAIN LOOP END *** - -.Lcj6: st8 [rp] = r8, 8 C M - logop( r14, r16, r20) C M I - notormov( r9, r15) C M I - ;; -.Lcj5: st8 [rp] = r9, 8 C M - logop( r15, r17, r21) C M I - notormov( r8, r14) C M I - ;; -.Lcj4: st8 [rp] = r8, 8 C M - logop( r14, r18, r22) C M I - notormov( r9, r15) C M I - ;; -.Lcj3: st8 [rp] = r9, 8 C M - logop( r15, r19, r23) C M I - notormov( r8, r14) C M I - ;; -.Lcj2: st8 [rp] = r8, 8 C M - notormov( r9, r15) C M I - ;; -.Lcj1: st8 [rp] = r9, 8 C M - mov.i ar.lc = r2 C I0 - br.ret.sptk.many b0 C B -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/lorrshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/lorrshift.asm deleted file mode 100644 index 694aaf0f400f5877ef748988abf91cba9f3920f2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/lorrshift.asm +++ /dev/null @@ -1,358 +0,0 @@ -dnl IA-64 mpn_lshift/mpn_rshift. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2000-2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 2 -C Itanium 2: 1 - -C This code is scheduled deeply since the plain shift instructions shr and shl -C have a latency of 4 (on Itanium) or 3 (on Itanium 2). Poor scheduling of -C these instructions cause a 10 cycle replay trap on Itanium. - -C The ld8 scheduling should probably be decreased to make the function smaller. -C Good lfetch will make sure we never stall anyway. - -C We should actually issue the first ld8 at cycle 0, and the first BSH/FSH pair -C at cycle 2. Judicious use of predicates could allow us to issue more ld8's -C in the prologue. - - -C INPUT PARAMETERS -define(`rp', `r32') -define(`up', `r33') -define(`n', `r34') -define(`cnt',`r35') - -define(`tnc',`r9') - -ifdef(`OPERATION_lshift',` - define(`FSH',`shl') - define(`BSH',`shr.u') - define(`UPD',`-8') - define(`POFF',`-512') - define(`PUPD',`-32') - define(`func',`mpn_lshift') -') -ifdef(`OPERATION_rshift',` - define(`FSH',`shr.u') - define(`BSH',`shl') - define(`UPD',`8') - define(`POFF',`512') - define(`PUPD',`32') - define(`func',`mpn_rshift') -') - -MULFUNC_PROLOGUE(mpn_lshift mpn_rshift) - -ASM_START() -PROLOGUE(func) - .prologue - .save ar.lc, r2 - .body -ifdef(`HAVE_ABI_32', -` addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - sxt4 n = n C M I - nop.m 0 - nop.m 0 - zxt4 cnt = cnt C I - ;; -') - - {.mmi; cmp.lt p14, p15 = 4, n C M I - and r14 = 3, n C M I - mov.i r2 = ar.lc C I0 -}{.mmi; add r15 = -1, n C M I - sub tnc = 64, cnt C M I - add r16 = -5, n - ;; -}{.mmi; cmp.eq p6, p0 = 1, r14 C M I - cmp.eq p7, p0 = 2, r14 C M I - shr.u n = r16, 2 C I0 -}{.mmi; cmp.eq p8, p0 = 3, r14 C M I -ifdef(`OPERATION_lshift', -` shladd up = r15, 3, up C M I - shladd rp = r15, 3, rp') C M I - ;; -}{.mmi; add r11 = POFF, up C M I - ld8 r10 = [up], UPD C M01 - mov.i ar.lc = n C I0 -}{.bbb; - (p6) br.dptk .Lb01 - (p7) br.dptk .Lb10 - (p8) br.dptk .Lb11 - ;; } - -.Lb00: ld8 r19 = [up], UPD - ;; - ld8 r16 = [up], UPD - ;; - ld8 r17 = [up], UPD - BSH r8 = r10, tnc C function return value - ;; - FSH r24 = r10, cnt - BSH r25 = r19, tnc - (p14) br.cond.dptk .grt4 - ;; - FSH r26 = r19, cnt - BSH r27 = r16, tnc - ;; - FSH r20 = r16, cnt - BSH r21 = r17, tnc - ;; - or r14 = r25, r24 - FSH r22 = r17, cnt - BSH r23 = r10, tnc - br .Lr4 - -.grt4: ld8 r18 = [up], UPD - FSH r26 = r19, cnt - BSH r27 = r16, tnc - ;; - ld8 r19 = [up], UPD - FSH r20 = r16, cnt - BSH r21 = r17, tnc - ;; - ld8 r16 = [up], UPD - FSH r22 = r17, cnt - BSH r23 = r18, tnc - ;; - or r14 = r25, r24 - ld8 r17 = [up], UPD - br.cloop.dpnt .Ltop - br .Lbot - -.Lb01: - (p15) BSH r8 = r10, tnc C function return value I - (p15) FSH r22 = r10, cnt C I - (p15) br.cond.dptk .Lr1 C return B - -.grt1: ld8 r18 = [up], UPD - ;; - ld8 r19 = [up], UPD - BSH r8 = r10, tnc C function return value - ;; - ld8 r16 = [up], UPD - FSH r22 = r10, cnt - BSH r23 = r18, tnc - ;; - ld8 r17 = [up], UPD - FSH r24 = r18, cnt - BSH r25 = r19, tnc - br.cloop.dpnt .grt5 - ;; - or r15 = r23, r22 - FSH r26 = r19, cnt - BSH r27 = r16, tnc - ;; - FSH r20 = r16, cnt - BSH r21 = r17, tnc - br .Lr5 - -.grt5: ld8 r18 = [up], UPD - FSH r26 = r19, cnt - BSH r27 = r16, tnc - ;; - ld8 r19 = [up], UPD - FSH r20 = r16, cnt - BSH r21 = r17, tnc - ;; - or r15 = r23, r22 - ld8 r16 = [up], UPD - br .LL01 - - -.Lb10: ld8 r17 = [up], UPD - (p14) br.cond.dptk .grt2 - - BSH r8 = r10, tnc C function return value - ;; - FSH r20 = r10, cnt - BSH r21 = r17, tnc - ;; - or r14 = r21, r20 - FSH r22 = r17, cnt - br .Lr2 C return - -.grt2: ld8 r18 = [up], UPD - BSH r8 = r10, tnc C function return value - ;; - ld8 r19 = [up], UPD - FSH r20 = r10, cnt - BSH r21 = r17, tnc - ;; - ld8 r16 = [up], UPD - FSH r22 = r17, cnt - BSH r23 = r18, tnc - ;; - {.mmi; ld8 r17 = [up], UPD - or r14 = r21, r20 - FSH r24 = r18, cnt -}{.mib; nop 0 - BSH r25 = r19, tnc - br.cloop.dpnt .grt6 - ;; } - - FSH r26 = r19, cnt - BSH r27 = r16, tnc - br .Lr6 - -.grt6: ld8 r18 = [up], UPD - FSH r26 = r19, cnt - BSH r27 = r16, tnc - ;; - ld8 r19 = [up], UPD - br .LL10 - - -.Lb11: ld8 r16 = [up], UPD - ;; - ld8 r17 = [up], UPD - BSH r8 = r10, tnc C function return value - (p14) br.cond.dptk .grt3 - ;; - - FSH r26 = r10, cnt - BSH r27 = r16, tnc - ;; - FSH r20 = r16, cnt - BSH r21 = r17, tnc - ;; - or r15 = r27, r26 - FSH r22 = r17, cnt - br .Lr3 C return - -.grt3: ld8 r18 = [up], UPD - FSH r26 = r10, cnt - BSH r27 = r16, tnc - ;; - ld8 r19 = [up], UPD - FSH r20 = r16, cnt - BSH r21 = r17, tnc - ;; - ld8 r16 = [up], UPD - FSH r22 = r17, cnt - BSH r23 = r18, tnc - ;; - ld8 r17 = [up], UPD - br.cloop.dpnt .grt7 - - or r15 = r27, r26 - FSH r24 = r18, cnt - BSH r25 = r19, tnc - br .Lr7 - -.grt7: or r15 = r27, r26 - FSH r24 = r18, cnt - BSH r25 = r19, tnc - ld8 r18 = [up], UPD - br .LL11 - -C *** MAIN LOOP START *** - ALIGN(32) -.Ltop: - {.mmi; st8 [rp] = r14, UPD C M2 - or r15 = r27, r26 C M3 - FSH r24 = r18, cnt C I0 -}{.mmi; ld8 r18 = [up], UPD C M1 - lfetch [r11], PUPD - BSH r25 = r19, tnc C I1 - ;; } -.LL11: - {.mmi; st8 [rp] = r15, UPD - or r14 = r21, r20 - FSH r26 = r19, cnt -}{.mmi; ld8 r19 = [up], UPD - nop.m 0 - BSH r27 = r16, tnc - ;; } -.LL10: - {.mmi; st8 [rp] = r14, UPD - or r15 = r23, r22 - FSH r20 = r16, cnt -}{.mmi; ld8 r16 = [up], UPD - nop.m 0 - BSH r21 = r17, tnc - ;; } -.LL01: - {.mmi; st8 [rp] = r15, UPD - or r14 = r25, r24 - FSH r22 = r17, cnt -}{.mib; ld8 r17 = [up], UPD - BSH r23 = r18, tnc - br.cloop.dptk .Ltop - ;; } -C *** MAIN LOOP END *** - -.Lbot: - {.mmi; st8 [rp] = r14, UPD - or r15 = r27, r26 - FSH r24 = r18, cnt -}{.mib; nop 0 - BSH r25 = r19, tnc - nop 0 - ;; } -.Lr7: - {.mmi; st8 [rp] = r15, UPD - or r14 = r21, r20 - FSH r26 = r19, cnt -}{.mib; nop 0 - BSH r27 = r16, tnc - nop 0 - ;; } -.Lr6: - {.mmi; st8 [rp] = r14, UPD - or r15 = r23, r22 - FSH r20 = r16, cnt -}{.mib; nop 0 - BSH r21 = r17, tnc - nop 0 - ;; } -.Lr5: st8 [rp] = r15, UPD - or r14 = r25, r24 - FSH r22 = r17, cnt - ;; -.Lr4: st8 [rp] = r14, UPD - or r15 = r27, r26 - ;; -.Lr3: st8 [rp] = r15, UPD - or r14 = r21, r20 - ;; -.Lr2: st8 [rp] = r14, UPD - ;; -.Lr1: st8 [rp] = r22, UPD C M23 - mov ar.lc = r2 C I0 - br.ret.sptk.many b0 C B -EPILOGUE(func) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/lshiftc.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/lshiftc.asm deleted file mode 100644 index e8cec872956658df2f4ef67465ce8e9810744490..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/lshiftc.asm +++ /dev/null @@ -1,463 +0,0 @@ -dnl IA-64 mpn_lshiftc. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2000-2005, 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: ? -C Itanium 2: 1.25 - -C This code is scheduled deeply since the plain shift instructions shr and shl -C have a latency of 4 (on Itanium) or 3 (on Itanium 2). Poor scheduling of -C these instructions cause a 10 cycle replay trap on Itanium. - -C The ld8 scheduling should probably be decreased to make the function smaller. -C Good lfetch will make sure we never stall anyway. - -C We should actually issue the first ld8 at cycle 0, and the first BSH/FSH pair -C at cycle 2. Judicious use of predicates could allow us to issue more ld8's -C in the prologue. - - -C INPUT PARAMETERS -define(`rp', `r32') -define(`up', `r33') -define(`n', `r34') -define(`cnt',`r35') - -define(`tnc',`r9') - -define(`FSH',`shl') -define(`BSH',`shr.u') -define(`UPD',`-8') -define(`POFF',`-512') -define(`PUPD',`-32') -define(`func',`mpn_lshiftc') - -ASM_START() -PROLOGUE(mpn_lshiftc) - .prologue - .save ar.lc, r2 - .body -ifdef(`HAVE_ABI_32', -` addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - sxt4 n = n C M I - nop.m 0 - nop.m 0 - zxt4 cnt = cnt C I - ;; -') - - {.mmi; nop 0 C M I - and r14 = 3, n C M I - mov.i r2 = ar.lc C I0 -}{.mmi; add r15 = -1, n C M I - sub tnc = 64, cnt C M I - nop 0 - ;; -}{.mmi; cmp.eq p6, p0 = 1, r14 C M I - cmp.eq p7, p0 = 2, r14 C M I - shr.u n = r15, 2 C I0 -}{.mmi; cmp.eq p8, p0 = 3, r14 C M I - shladd up = r15, 3, up C M I - shladd rp = r15, 3, rp C M I - ;; -}{.mmi; add r11 = POFF, up C M I - ld8 r10 = [up], UPD C M01 - mov.i ar.lc = n C I0 -}{.bbb; - (p6) br.dptk .Lb01 - (p7) br.dptk .Lb10 - (p8) br.dptk .Lb11 - ;; } - -.Lb00: - ld8 r19 = [up], UPD - ;; - ld8 r16 = [up], UPD - ;; - ld8 r17 = [up], UPD - BSH r8 = r10, tnc - br.cloop.dptk L(gt4) - ;; - FSH r24 = r10, cnt - BSH r25 = r19, tnc - ;; - FSH r26 = r19, cnt - BSH r27 = r16, tnc - ;; - FSH r20 = r16, cnt - BSH r21 = r17, tnc - ;; - or r14 = r25, r24 - FSH r22 = r17, cnt - ;; - or r15 = r27, r26 - sub r31 = -1, r14 - br .Lr4 - -L(gt4): - {.mmi; nop 0 - nop 0 - FSH r24 = r10, cnt -}{.mmi; ld8 r18 = [up], UPD - nop 0 - BSH r25 = r19, tnc - ;; } - {.mmi; nop 0 - nop 0 - FSH r26 = r19, cnt -}{.mmi; ld8 r19 = [up], UPD - nop 0 - BSH r27 = r16, tnc - ;; } - {.mmi; nop 0 - nop 0 - FSH r20 = r16, cnt -}{.mmi; ld8 r16 = [up], UPD - nop 0 - BSH r21 = r17, tnc - ;; } - {.mmi; nop 0 - or r14 = r25, r24 - FSH r22 = r17, cnt -}{.mib; ld8 r17 = [up], UPD - BSH r23 = r18, tnc - br.cloop.dptk L(gt8) - ;; } - {.mmi; nop 0 - or r15 = r27, r26 - FSH r24 = r18, cnt -}{.mib; sub r31 = -1, r14 - BSH r25 = r19, tnc - br .Lr8 } - -L(gt8): - or r15 = r27, r26 - FSH r24 = r18, cnt - ld8 r18 = [up], UPD - sub r31 = -1, r14 - BSH r25 = r19, tnc - br .LL00 - -.Lb01: - br.cloop.dptk L(gt1) - ;; - BSH r8 = r10, tnc - FSH r22 = r10, cnt - ;; - sub r31 = -1, r22 - br .Lr1 - ;; -L(gt1): - ld8 r18 = [up], UPD - BSH r8 = r10, tnc - FSH r22 = r10, cnt - ;; - ld8 r19 = [up], UPD - ;; - ld8 r16 = [up], UPD - ;; - ld8 r17 = [up], UPD - BSH r23 = r18, tnc - br.cloop.dptk L(gt5) - ;; - nop 0 - FSH r24 = r18, cnt - BSH r25 = r19, tnc - ;; - nop 0 - FSH r26 = r19, cnt - BSH r27 = r16, tnc - ;; - or r15 = r23, r22 - FSH r20 = r16, cnt - BSH r21 = r17, tnc - ;; - or r14 = r25, r24 - FSH r22 = r17, cnt - sub r31 = -1, r15 - br .Lr5 - -L(gt5): - {.mmi; nop 0 - nop 0 - FSH r24 = r18, cnt -}{.mmi; ld8 r18 = [up], UPD - nop 0 - BSH r25 = r19, tnc - ;; } - {.mmi; nop 0 - nop 0 - FSH r26 = r19, cnt -}{.mmi; ld8 r19 = [up], UPD - nop 0 - BSH r27 = r16, tnc - ;; } - {.mmi; nop 0 - or r15 = r23, r22 - FSH r20 = r16, cnt -}{.mmi; ld8 r16 = [up], UPD - nop 0 - BSH r21 = r17, tnc - ;; } - {.mmi; or r14 = r25, r24 - sub r31 = -1, r15 - FSH r22 = r17, cnt -}{.mib; ld8 r17 = [up], UPD - BSH r23 = r18, tnc - br L(end) - ;; } - -.Lb10: - ld8 r17 = [up], UPD - br.cloop.dptk L(gt2) - ;; - BSH r8 = r10, tnc - FSH r20 = r10, cnt - ;; - BSH r21 = r17, tnc - FSH r22 = r17, cnt - ;; - or r14 = r21, r20 - ;; - sub r31 = -1, r14 - br .Lr2 - ;; -L(gt2): - ld8 r18 = [up], UPD - BSH r8 = r10, tnc - FSH r20 = r10, cnt - ;; - ld8 r19 = [up], UPD - ;; - ld8 r16 = [up], UPD - BSH r21 = r17, tnc - FSH r22 = r17, cnt - ;; - ld8 r17 = [up], UPD - BSH r23 = r18, tnc - br.cloop.dptk L(gt6) - ;; - nop 0 - FSH r24 = r18, cnt - BSH r25 = r19, tnc - ;; - or r14 = r21, r20 - FSH r26 = r19, cnt - BSH r27 = r16, tnc - ;; - {.mmi; nop 0 - or r15 = r23, r22 - FSH r20 = r16, cnt -}{.mib; sub r31 = -1, r14 - BSH r21 = r17, tnc - br .Lr6 - ;; } -L(gt6): - {.mmi; nop 0 - nop 0 - FSH r24 = r18, cnt -}{.mmi; ld8 r18 = [up], UPD - nop 0 - BSH r25 = r19, tnc - ;; } - {.mmi; nop 0 - or r14 = r21, r20 - FSH r26 = r19, cnt -}{.mmi; ld8 r19 = [up], UPD - nop 0 - BSH r27 = r16, tnc - ;; } - {.mmi; or r15 = r23, r22 - sub r31 = -1, r14 - FSH r20 = r16, cnt -}{.mib; ld8 r16 = [up], UPD - BSH r21 = r17, tnc - br .LL10 -} - -.Lb11: - ld8 r16 = [up], UPD - ;; - ld8 r17 = [up], UPD - BSH r8 = r10, tnc - FSH r26 = r10, cnt - br.cloop.dptk L(gt3) - ;; - BSH r27 = r16, tnc - ;; - FSH r20 = r16, cnt - BSH r21 = r17, tnc - ;; - FSH r22 = r17, cnt - ;; - or r15 = r27, r26 - ;; - or r14 = r21, r20 - sub r31 = -1, r15 - br .Lr3 - ;; -L(gt3): - ld8 r18 = [up], UPD - ;; - ld8 r19 = [up], UPD - BSH r27 = r16, tnc - ;; - {.mmi; nop 0 - nop 0 - FSH r20 = r16, cnt -}{.mmi; ld8 r16 = [up], UPD - nop 0 - BSH r21 = r17, tnc - ;; -}{.mmi; nop 0 - nop 0 - FSH r22 = r17, cnt -}{.mib; ld8 r17 = [up], UPD - BSH r23 = r18, tnc - br.cloop.dptk L(gt7) - ;; } - or r15 = r27, r26 - FSH r24 = r18, cnt - BSH r25 = r19, tnc - ;; - {.mmi; nop 0 - or r14 = r21, r20 - FSH r26 = r19, cnt -}{.mib; sub r31 = -1, r15 - BSH r27 = r16, tnc - br .Lr7 -} -L(gt7): - {.mmi; nop 0 - or r15 = r27, r26 - FSH r24 = r18, cnt -}{.mmi; ld8 r18 = [up], UPD - nop 0 - BSH r25 = r19, tnc - ;; } - {.mmi; or r14 = r21, r20 - sub r31 = -1, r15 - FSH r26 = r19, cnt -}{.mib; ld8 r19 = [up], UPD - BSH r27 = r16, tnc - br .LL11 -} - -C *** MAIN LOOP START *** - ALIGN(32) -L(top): -.LL01: - {.mmi; st8 [rp] = r31, UPD C M2 - or r15 = r27, r26 C M3 - FSH r24 = r18, cnt C I0 -}{.mmi; ld8 r18 = [up], UPD C M0 - sub r31 = -1, r14 C M1 - BSH r25 = r19, tnc C I1 - ;; } -.LL00: - {.mmi; st8 [rp] = r31, UPD - or r14 = r21, r20 - FSH r26 = r19, cnt -}{.mmi; ld8 r19 = [up], UPD - sub r31 = -1, r15 - BSH r27 = r16, tnc - ;; } -.LL11: - {.mmi; st8 [rp] = r31, UPD - or r15 = r23, r22 - FSH r20 = r16, cnt -}{.mmi; ld8 r16 = [up], UPD - sub r31 = -1, r14 - BSH r21 = r17, tnc - ;; } -.LL10: - {.mmi; st8 [rp] = r31, UPD - or r14 = r25, r24 - FSH r22 = r17, cnt -}{.mmi; ld8 r17 = [up], UPD - sub r31 = -1, r15 - BSH r23 = r18, tnc - ;; } -L(end): lfetch [r11], PUPD - br.cloop.dptk L(top) -C *** MAIN LOOP END *** - - {.mmi; st8 [rp] = r31, UPD - or r15 = r27, r26 - FSH r24 = r18, cnt -}{.mib; sub r31 = -1, r14 - BSH r25 = r19, tnc - nop 0 - ;; } -.Lr8: - {.mmi; st8 [rp] = r31, UPD - or r14 = r21, r20 - FSH r26 = r19, cnt -}{.mib; sub r31 = -1, r15 - BSH r27 = r16, tnc - nop 0 - ;; } -.Lr7: - {.mmi; st8 [rp] = r31, UPD - or r15 = r23, r22 - FSH r20 = r16, cnt -}{.mib; sub r31 = -1, r14 - BSH r21 = r17, tnc - nop 0 - ;; } -.Lr6: st8 [rp] = r31, UPD - or r14 = r25, r24 - FSH r22 = r17, cnt - sub r31 = -1, r15 - ;; -.Lr5: st8 [rp] = r31, UPD - or r15 = r27, r26 - sub r31 = -1, r14 - ;; -.Lr4: st8 [rp] = r31, UPD - or r14 = r21, r20 - sub r31 = -1, r15 - ;; -.Lr3: st8 [rp] = r31, UPD - sub r31 = -1, r14 - ;; -.Lr2: st8 [rp] = r31, UPD - sub r31 = -1, r22 - ;; -.Lr1: st8 [rp] = r31, UPD C M23 - mov ar.lc = r2 C I0 - br.ret.sptk.many b0 C B -EPILOGUE(func) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/mod_34lsub1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/mod_34lsub1.asm deleted file mode 100644 index 77891178f2ba6734b7c4bd802ad1298d25eda647..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/mod_34lsub1.asm +++ /dev/null @@ -1,237 +0,0 @@ -dnl IA-64 mpn_mod_34lsub1 - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2003-2005, 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: ? -C Itanium 2: 1 - - -C INPUT PARAMETERS -define(`up', `r32') -define(`n', `r33') - -C Some useful aliases for registers we use -define(`u0',`r14') define(`u1',`r15') define(`u2',`r16') -define(`a0',`r17') define(`a1',`r18') define(`a2',`r19') -define(`c0',`r20') define(`c1',`r21') define(`c2',`r22') - -C This is a fairly simple-minded implementation. One could approach 0.67 c/l -C with a more sophisticated implementation. If we're really crazy, we could -C super-unroll, storing carries just in predicate registers, then copy them to -C a general register, and population count them from there. That'd bring us -C close to 3 insn/limb, for nearly 0.5 c/l. - -C Computing n/3 needs 16 cycles, which is a lot of startup overhead. -C We therefore use a plain while-style loop: -C add n = -3, n -C cmp.le p9, p0 = 3, n -C (p9) br.cond .Loop -C Alternatively, we could table n/3 for, say, n < 256, and predicate the -C 16-cycle code. - -C The summing-up code at the end was written quickly, and could surely be -C vastly improved. - -ASM_START() -PROLOGUE(mpn_mod_34lsub1) - .prologue - .save ar.lc, r2 - .body -ifdef(`HAVE_ABI_32',` - addp4 up = 0, up C M I - nop.m 0 - zxt4 n = n C I - ;; -') - -ifelse(0,1,` - movl r14 = 0xAAAAAAAAAAAAAAAB - ;; - setf.sig f6 = r14 - setf.sig f7 = r33 - ;; - xmpy.hu f6 = f6, f7 - ;; - getf.sig r8 = f6 - ;; - shr.u r8 = r8, 1 C Loop count - ;; - mov.i ar.lc = r8 -') - - ld8 u0 = [up], 8 - cmp.ne p9, p0 = 1, n - (p9) br L(gt1) - ;; - shr.u r8 = u0, 48 - dep.z r27 = u0, 0, 48 - ;; - add r8 = r8, r27 - br.ret.sptk.many b0 - - -L(gt1): - {.mmi; nop.m 0 - mov a0 = 0 - add n = -2, n -}{.mmi; mov c0 = 0 - mov c1 = 0 - mov c2 = 0 - ;; -}{.mmi; ld8 u1 = [up], 8 - mov a1 = 0 - cmp.ltu p6, p0 = r0, r0 C clear p6 -}{.mmb; cmp.gt p9, p0 = 3, n - mov a2 = 0 - (p9) br.cond.dptk L(end) - ;; -} - ALIGN(32) -L(top): - {.mmi; ld8 u2 = [up], 8 - (p6) add c0 = 1, c0 - cmp.ltu p7, p0 = a0, u0 -}{.mmb; sub a0 = a0, u0 - add n = -3, n - nop.b 0 - ;; -}{.mmi; ld8 u0 = [up], 8 - (p7) add c1 = 1, c1 - cmp.ltu p8, p0 = a1, u1 -}{.mmb; sub a1 = a1, u1 - cmp.le p9, p0 = 3, n - nop.b 0 - ;; -}{.mmi; ld8 u1 = [up], 8 - (p8) add c2 = 1, c2 - cmp.ltu p6, p0 = a2, u2 -}{.mmb; sub a2 = a2, u2 - nop.m 0 -dnl br.cloop.dptk L(top) - (p9) br.cond.dptk L(top) - ;; -} -L(end): - cmp.eq p10, p0 = 0, n - cmp.eq p11, p0 = 1, n - (p10) br L(0) - -L(2): - {.mmi; ld8 u2 = [up], 8 - (p6) add c0 = 1, c0 - cmp.ltu p7, p0 = a0, u0 -}{.mmb; sub a0 = a0, u0 - nop.m 0 - (p11) br L(1) - ;; -} ld8 u0 = [up], 8 - (p7) add c1 = 1, c1 - cmp.ltu p8, p0 = a1, u1 - sub a1 = a1, u1 - ;; - (p8) add c2 = 1, c2 - cmp.ltu p6, p0 = a2, u2 - sub a2 = a2, u2 - ;; - (p6) add c0 = 1, c0 - cmp.ltu p7, p0 = a0, u0 - sub a0 = a0, u0 - ;; - (p7) add c1 = 1, c1 - br L(com) - - -L(1): - (p7) add c1 = 1, c1 - cmp.ltu p8, p0 = a1, u1 - sub a1 = a1, u1 - ;; - (p8) add c2 = 1, c2 - cmp.ltu p6, p0 = a2, u2 - sub a2 = a2, u2 - ;; - (p6) add c0 = 1, c0 - br L(com) - - -L(0): - (p6) add c0 = 1, c0 - cmp.ltu p7, p0 = a0, u0 - sub a0 = a0, u0 - ;; - (p7) add c1 = 1, c1 - cmp.ltu p8, p0 = a1, u1 - sub a1 = a1, u1 - ;; - (p8) add c2 = 1, c2 - -L(com): -C | a2 | a1 | a0 | -C | | | | | - shr.u r24 = a0, 48 C 16 bits - shr.u r25 = a1, 32 C 32 bits - shr.u r26 = a2, 16 C 48 bits - ;; - shr.u r10 = c0, 48 C 16 bits, always zero - shr.u r11 = c1, 32 C 32 bits - shr.u r30 = c2, 16 C 48 bits - ;; - dep.z r27 = a0, 0, 48 C 48 bits - dep.z r28 = a1, 16, 32 C 48 bits - dep.z r29 = a2, 32, 16 C 48 bits - dep.z r31 = c0, 0, 48 C 48 bits - dep.z r14 = c1, 16, 32 C 48 bits - dep.z r15 = c2, 32, 16 C 48 bits - ;; - {.mmi; add r24 = r24, r25 - add r26 = r26, r27 - add r28 = r28, r29 -}{.mmi; add r10 = r10, r11 - add r30 = r30, r31 - add r14 = r14, r15 - ;; -} - movl r8 = 0xffffffffffff0 - add r24 = r24, r26 - add r10 = r10, r30 - ;; - add r24 = r24, r28 - add r10 = r10, r14 - ;; - sub r8 = r8, r24 - ;; - add r8 = r8, r10 - br.ret.sptk.many b0 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/mode1o.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/mode1o.asm deleted file mode 100644 index 14d5e81602902fdf336cb1dfb4ca3aba70626d62..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/mode1o.asm +++ /dev/null @@ -1,342 +0,0 @@ -dnl Itanium-2 mpn_modexact_1c_odd -- mpn by 1 exact remainder. - -dnl Contributed to the GNU project by Kevin Ryde. - -dnl Copyright 2003-2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C Itanium: 15 -C Itanium 2: 8 - - -dnl Usage: ABI32(`code') -dnl -dnl Emit the given code only under HAVE_ABI_32. -dnl -define(ABI32, -m4_assert_onearg() -`ifdef(`HAVE_ABI_32',`$1')') - - -C mp_limb_t mpn_modexact_1c_odd (mp_srcptr src, mp_size_t size, -C mp_limb_t divisor, mp_limb_t carry); -C -C The modexact algorithm is usually conceived as a dependent chain -C -C l = src[i] - c -C q = low(l * inverse) -C c = high(q*divisor) + (src[i]<c) -C -C but we can work the src[i]-c into an xma by calculating si=src[i]*inverse -C separately (off the dependent chain) and using -C -C q = low(c * inverse + si) -C c = high(q*divisor + c) -C -C This means the dependent chain is simply xma.l followed by xma.hu, for a -C total 8 cycles/limb on itanium-2. -C -C The reason xma.hu works for the new c is that the low of q*divisor is -C src[i]-c (being the whole purpose of the q generated, and it can be -C verified algebraically). If there was an underflow from src[i]-c, then -C there will be an overflow from (src-c)+c, thereby adding 1 to the new c -C the same as the borrow bit (src[i]<c) gives in the first style shown. -C -C Incidentally, fcmp is not an option for treating src[i]-c, since it -C apparently traps to the kernel for unnormalized operands like those used -C and generated by ldf8 and xma. On one GNU/Linux system it took about 1200 -C cycles. -C -C -C First Limb: -C -C The first limb uses q = (src[0]-c) * inverse shown in the first style. -C This lets us get the first q as soon as the inverse is ready, without -C going through si=s*inverse. Basically at the start we have c and can use -C it while waiting for the inverse, whereas for the second and subsequent -C limbs it's the other way around, ie. we have the inverse and are waiting -C for c. -C -C At .Lentry the first two instructions in the loop have been done already. -C The load of f11=src[1] at the start (predicated on size>=2), and the -C calculation of q by the initial different scheme. -C -C -C Entry Sequence: -C -C In the entry sequence, the critical path is the calculation of the -C inverse, so this is begun first and optimized. Apart from that, ar.lc is -C established nice and early so the br.cloop's should predict perfectly. -C And the load for the low limbs src[0] and src[1] can be initiated long -C ahead of where they're needed. -C -C -C Inverse Calculation: -C -C The initial 8-bit inverse is calculated using a table lookup. If it hits -C L1 (which is likely if we're called several times) then it should take a -C total 4 cycles, otherwise hopefully L2 for 9 cycles. This is considered -C the best approach, on balance. It could be done bitwise, but that would -C probably be about 14 cycles (2 per bit beyond the first couple). Or it -C could be taken from 4 bits to 8 with xmpy doubling as used beyond 8 bits, -C but that would be about 11 cycles. -C -C The table is not the same as binvert_limb_table, instead it's 256 bytes, -C designed to be indexed by the low byte of the divisor. The divisor is -C always odd, so the relevant data is every second byte in the table. The -C padding lets us use zxt1 instead of extr.u, the latter would cost an extra -C cycle because it must go down I0, and we're using the first I0 slot to get -C ip. The extra 128 bytes of padding should be insignificant compared to -C typical ia64 code bloat. -C -C Having the table in .text allows us to use IP-relative addressing, -C avoiding a fetch from ltoff. .rodata is apparently not suitable for use -C IP-relative, it gets a linker relocation overflow on GNU/Linux. -C -C -C Load Scheduling: -C -C In the main loop, the data loads are scheduled for an L2 hit, which means -C 6 cycles for the data ready to use. In fact we end up 7 cycles ahead. In -C any case that scheduling is achieved simply by doing the load (and xmpy.l -C for "si") in the immediately preceding iteration. -C -C The main loop requires size >= 2, and we handle size==1 by an initial -C br.cloop to enter the loop only if size>1. Since ar.lc is established -C early, this should predict perfectly. -C -C -C Not done: -C -C Consideration was given to using a plain "(src[0]-c) % divisor" for -C size==1, but cycle counting suggests about 50 for the sort of approach -C taken by gcc __umodsi3, versus about 47 for the modexact. (Both assuming -C L1 hits for their respective fetching.) -C -C Consideration was given to a test for high<divisor and replacing the last -C loop iteration with instead c-=src[size-1] followed by c+=d if underflow. -C Branching on high<divisor wouldn't be good since a mispredict would cost -C more than the loop iteration saved, and the condition is of course data -C dependent. So the theory would be to shorten the loop count if -C high<divisor, and predicate extra operations at the end. That would mean -C a gain of 6 when high<divisor, or a cost of 2 if not. -C -C Whether such a tradeoff is a win on average depends on assumptions about -C how many bits in the high and the divisor. If both are uniformly -C distributed then high<divisor about 50% of the time. But smallish -C divisors (less chance of high<divisor) might be more likely from -C applications (mpz_divisible_ui, mpz_gcd_ui, etc). Though biggish divisors -C would be normal internally from say mpn/generic/perfsqr.c. On balance, -C for the moment, it's felt the gain is not really enough to be worth the -C trouble. -C -C -C Enhancement: -C -C Process two source limbs per iteration using a two-limb inverse and a -C sequence like -C -C ql = low (c * il + sil) quotient low limb -C qlc = high(c * il + sil) -C qh1 = low (c * ih + sih) quotient high, partial -C -C cl = high (ql * d + c) carry out of low -C qh = low (qlc * 1 + qh1) quotient high limb -C -C new c = high (qh * d + cl) carry out of high -C -C This would be 13 cycles/iteration, giving 6.5 cycles/limb. The two limb -C s*inverse as sih:sil = sh:sl * ih:il would be calculated off the dependent -C chain with 4 multiplies. The bigger inverse would take extra time to -C calculate, but a one limb iteration to handle an odd size could be done as -C soon as 64-bits of inverse were ready. -C -C Perhaps this could even extend to a 3 limb inverse, which might promise 17 -C or 18 cycles for 3 limbs, giving 5.66 or 6.0 cycles/limb. -C - -ASM_START() - .explicit - - .text - .align 32 -.Ltable: -data1 0,0x01, 0,0xAB, 0,0xCD, 0,0xB7, 0,0x39, 0,0xA3, 0,0xC5, 0,0xEF -data1 0,0xF1, 0,0x1B, 0,0x3D, 0,0xA7, 0,0x29, 0,0x13, 0,0x35, 0,0xDF -data1 0,0xE1, 0,0x8B, 0,0xAD, 0,0x97, 0,0x19, 0,0x83, 0,0xA5, 0,0xCF -data1 0,0xD1, 0,0xFB, 0,0x1D, 0,0x87, 0,0x09, 0,0xF3, 0,0x15, 0,0xBF -data1 0,0xC1, 0,0x6B, 0,0x8D, 0,0x77, 0,0xF9, 0,0x63, 0,0x85, 0,0xAF -data1 0,0xB1, 0,0xDB, 0,0xFD, 0,0x67, 0,0xE9, 0,0xD3, 0,0xF5, 0,0x9F -data1 0,0xA1, 0,0x4B, 0,0x6D, 0,0x57, 0,0xD9, 0,0x43, 0,0x65, 0,0x8F -data1 0,0x91, 0,0xBB, 0,0xDD, 0,0x47, 0,0xC9, 0,0xB3, 0,0xD5, 0,0x7F -data1 0,0x81, 0,0x2B, 0,0x4D, 0,0x37, 0,0xB9, 0,0x23, 0,0x45, 0,0x6F -data1 0,0x71, 0,0x9B, 0,0xBD, 0,0x27, 0,0xA9, 0,0x93, 0,0xB5, 0,0x5F -data1 0,0x61, 0,0x0B, 0,0x2D, 0,0x17, 0,0x99, 0,0x03, 0,0x25, 0,0x4F -data1 0,0x51, 0,0x7B, 0,0x9D, 0,0x07, 0,0x89, 0,0x73, 0,0x95, 0,0x3F -data1 0,0x41, 0,0xEB, 0,0x0D, 0,0xF7, 0,0x79, 0,0xE3, 0,0x05, 0,0x2F -data1 0,0x31, 0,0x5B, 0,0x7D, 0,0xE7, 0,0x69, 0,0x53, 0,0x75, 0,0x1F -data1 0,0x21, 0,0xCB, 0,0xED, 0,0xD7, 0,0x59, 0,0xC3, 0,0xE5, 0,0x0F -data1 0,0x11, 0,0x3B, 0,0x5D, 0,0xC7, 0,0x49, 0,0x33, 0,0x55, 0,0xFF - - -PROLOGUE(mpn_modexact_1c_odd) - - C r32 src - C r33 size - C r34 divisor - C r35 carry - - .prologue -.Lhere: -{ .mmi; add r33 = -1, r33 C M0 size-1 - mov r14 = 2 C M1 2 - mov r15 = ip C I0 .Lhere -}{.mmi; setf.sig f6 = r34 C M2 divisor - setf.sig f9 = r35 C M3 carry - zxt1 r3 = r34 C I1 divisor low byte -} ;; - -{ .mmi; add r3 = .Ltable-.Lhere, r3 C M0 table offset ip and index - sub r16 = 0, r34 C M1 -divisor - .save ar.lc, r2 - mov r2 = ar.lc C I0 -}{.mmi; .body - setf.sig f13 = r14 C M2 2 in significand - mov r17 = -1 C M3 -1 -ABI32(` zxt4 r33 = r33') C I1 size extend -} ;; - -{ .mmi; add r3 = r3, r15 C M0 table entry address -ABI32(` addp4 r32 = 0, r32') C M1 src extend - mov ar.lc = r33 C I0 size-1 loop count -}{.mmi; setf.sig f12 = r16 C M2 -divisor - setf.sig f8 = r17 C M3 -1 -} ;; - -{ .mmi; ld1 r3 = [r3] C M0 inverse, 8 bits - ldf8 f10 = [r32], 8 C M1 src[0] - cmp.ne p6,p0 = 0, r33 C I0 test size!=1 -} ;; - - C Wait for table load. - C Hope for an L1 hit of 1 cycles to ALU, but could be more. - setf.sig f7 = r3 C M2 inverse, 8 bits -(p6) ldf8 f11 = [r32], 8 C M1 src[1], if size!=1 - ;; - - C 5 cycles - - C f6 divisor - C f7 inverse, being calculated - C f8 -1, will be -inverse - C f9 carry - C f10 src[0] - C f11 src[1] - C f12 -divisor - C f13 2 - C f14 scratch - - xmpy.l f14 = f13, f7 C 2*i - xmpy.l f7 = f7, f7 C i*i - ;; - xma.l f7 = f7, f12, f14 C i*i*-d + 2*i, inverse 16 bits - ;; - - xmpy.l f14 = f13, f7 C 2*i - xmpy.l f7 = f7, f7 C i*i - ;; - xma.l f7 = f7, f12, f14 C i*i*-d + 2*i, inverse 32 bits - ;; - - xmpy.l f14 = f13, f7 C 2*i - xmpy.l f7 = f7, f7 C i*i - ;; - - xma.l f7 = f7, f12, f14 C i*i*-d + 2*i, inverse 64 bits - xma.l f10 = f9, f8, f10 C sc = c * -1 + src[0] - ;; -ASSERT(p6, ` - xmpy.l f15 = f6, f7 ;; C divisor*inverse - getf.sig r31 = f15 ;; - cmp.eq p6,p0 = 1, r31 C should == 1 -') - - xmpy.l f10 = f10, f7 C q = sc * inverse - xmpy.l f8 = f7, f8 C -inverse = inverse * -1 - br.cloop.sptk.few.clr .Lentry C main loop, if size > 1 - ;; - - C size==1, finish up now - xma.hu f9 = f10, f6, f9 C c = high(q * divisor + c) - mov ar.lc = r2 C I0 - ;; - getf.sig r8 = f9 C M2 return c - br.ret.sptk.many b0 - - - -.Ltop: - C r2 saved ar.lc - C f6 divisor - C f7 inverse - C f8 -inverse - C f9 carry - C f10 src[i] * inverse - C f11 scratch src[i+1] - - add r16 = 160, r32 - ldf8 f11 = [r32], 8 C src[i+1] - ;; - C 2 cycles - - lfetch [r16] - xma.l f10 = f9, f8, f10 C q = c * -inverse + si - ;; - C 3 cycles - -.Lentry: - xma.hu f9 = f10, f6, f9 C c = high(q * divisor + c) - xmpy.l f10 = f11, f7 C si = src[i] * inverse - br.cloop.sptk.few.clr .Ltop - ;; - - - - xma.l f10 = f9, f8, f10 C q = c * -inverse + si - mov ar.lc = r2 C I0 - ;; - xma.hu f9 = f10, f6, f9 C c = high(q * divisor + c) - ;; - getf.sig r8 = f9 C M2 return c - br.ret.sptk.many b0 - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/mul_1.asm deleted file mode 100644 index 21bf6d0e14f3e99a413ead7ba40c80278f28da13..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/mul_1.asm +++ /dev/null @@ -1,584 +0,0 @@ -dnl IA-64 mpn_mul_1, mpn_mul_1c -- Multiply a limb vector with a limb and -dnl store the result in a second limb vector. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2000-2004, 2006, 2007 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 4.0 -C Itanium 2: 2.0 - -C TODO -C * Further optimize feed-in and wind-down code, both for speed and code size. -C * Handle low limb input and results specially, using a common stf8 in the -C epilogue. -C * Use 1 c/l carry propagation scheme in wind-down code. -C * Use extra pointer register for `up' to speed up feed-in loads. -C * Work out final differences with addmul_1.asm. - -C INPUT PARAMETERS -define(`rp', `r32') -define(`up', `r33') -define(`n', `r34') -define(`vl', `r35') -define(`cy', `r36') C for mpn_mul_1c - -ASM_START() -PROLOGUE(mpn_mul_1) - .prologue - .save ar.lc, r2 - .body - -ifdef(`HAVE_ABI_32', -` addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - zxt4 n = n C I - ;; -') -{.mfi - adds r15 = -1, n C M I - mov f9 = f0 C F - mov.i r2 = ar.lc C I0 -} -{.mmi - ldf8 f7 = [up], 8 C M - nop.m 0 C M - and r14 = 3, n C M I - ;; -} -.Lcommon: -{.mii - setf.sig f6 = vl C M2 M3 - shr.u r31 = r15, 2 C I0 - cmp.eq p10, p0 = 0, r14 C M I -} -{.mii - cmp.eq p11, p0 = 2, r14 C M I - cmp.eq p12, p0 = 3, r14 C M I - nop.i 0 C I - ;; -} -{.mii - cmp.ne p6, p7 = r0, r0 C M I - mov.i ar.lc = r31 C I0 - cmp.ne p8, p9 = r0, r0 C M I -} -{.bbb - (p10) br.dptk .Lb00 C B - (p11) br.dptk .Lb10 C B - (p12) br.dptk .Lb11 C B - ;; -} - -.Lb01: mov r20 = 0 - br.cloop.dptk .grt1 C B - - xma.l f39 = f7, f6, f9 C F - xma.hu f43 = f7, f6, f9 C F - ;; - getf.sig r8 = f43 C M2 - stf8 [rp] = f39 C M2 M3 - mov.i ar.lc = r2 C I0 - br.ret.sptk.many b0 C B - -.grt1: - ldf8 f32 = [up], 8 - ;; - ldf8 f33 = [up], 8 - ;; - ldf8 f34 = [up], 8 - xma.l f39 = f7, f6, f9 - xma.hu f43 = f7, f6, f9 - ;; - ldf8 f35 = [up], 8 - br.cloop.dptk .grt5 - - xma.l f36 = f32, f6, f0 - xma.hu f40 = f32, f6, f0 - ;; - stf8 [rp] = f39, 8 - xma.l f37 = f33, f6, f0 - xma.hu f41 = f33, f6, f0 - ;; - getf.sig r21 = f43 - getf.sig r18 = f36 - xma.l f38 = f34, f6, f0 - xma.hu f42 = f34, f6, f0 - ;; - getf.sig r22 = f40 - getf.sig r19 = f37 - xma.l f39 = f35, f6, f0 - xma.hu f43 = f35, f6, f0 - ;; - getf.sig r23 = f41 - getf.sig r16 = f38 - br .Lcj5 - -.grt5: - xma.l f36 = f32, f6, f0 - xma.hu f40 = f32, f6, f0 - ;; - getf.sig r17 = f39 - ldf8 f32 = [up], 8 - xma.l f37 = f33, f6, f0 - xma.hu f41 = f33, f6, f0 - ;; - getf.sig r21 = f43 - ldf8 f33 = [up], 8 - xma.l f38 = f34, f6, f0 - ;; - getf.sig r18 = f36 - xma.hu f42 = f34, f6, f0 - ;; - getf.sig r22 = f40 - ldf8 f34 = [up], 8 - xma.l f39 = f35, f6, f0 - ;; - getf.sig r19 = f37 - xma.hu f43 = f35, f6, f0 - br .LL01 - - -.Lb10: ldf8 f35 = [up], 8 - mov r23 = 0 - br.cloop.dptk .grt2 - - xma.l f38 = f7, f6, f9 - xma.hu f42 = f7, f6, f9 - ;; - stf8 [rp] = f38, 8 - xma.l f39 = f35, f6, f42 - xma.hu f43 = f35, f6, f42 - ;; - getf.sig r8 = f43 - stf8 [rp] = f39 - mov.i ar.lc = r2 - br.ret.sptk.many b0 - - -.grt2: - ldf8 f32 = [up], 8 - ;; - ldf8 f33 = [up], 8 - xma.l f38 = f7, f6, f9 - xma.hu f42 = f7, f6, f9 - ;; - ldf8 f34 = [up], 8 - xma.l f39 = f35, f6, f0 - xma.hu f43 = f35, f6, f0 - ;; - ldf8 f35 = [up], 8 - br.cloop.dptk .grt6 - - stf8 [rp] = f38, 8 - xma.l f36 = f32, f6, f0 - xma.hu f40 = f32, f6, f0 - ;; - getf.sig r20 = f42 - getf.sig r17 = f39 - xma.l f37 = f33, f6, f0 - xma.hu f41 = f33, f6, f0 - ;; - getf.sig r21 = f43 - getf.sig r18 = f36 - xma.l f38 = f34, f6, f0 - xma.hu f42 = f34, f6, f0 - ;; - getf.sig r22 = f40 - getf.sig r19 = f37 - xma.l f39 = f35, f6, f0 - xma.hu f43 = f35, f6, f0 - br .Lcj6 - -.grt6: - getf.sig r16 = f38 - xma.l f36 = f32, f6, f0 - xma.hu f40 = f32, f6, f0 - ;; - getf.sig r20 = f42 - ldf8 f32 = [up], 8 - xma.l f37 = f33, f6, f0 - ;; - getf.sig r17 = f39 - xma.hu f41 = f33, f6, f0 - ;; - getf.sig r21 = f43 - ldf8 f33 = [up], 8 - xma.l f38 = f34, f6, f0 - ;; - getf.sig r18 = f36 - xma.hu f42 = f34, f6, f0 - br .LL10 - - -.Lb11: ldf8 f34 = [up], 8 - mov r22 = 0 - ;; - ldf8 f35 = [up], 8 - br.cloop.dptk .grt3 - ;; - - xma.l f37 = f7, f6, f9 - xma.hu f41 = f7, f6, f9 - xma.l f38 = f34, f6, f0 - xma.hu f42 = f34, f6, f0 - xma.l f39 = f35, f6, f0 - xma.hu f43 = f35, f6, f0 - ;; - getf.sig r23 = f41 - stf8 [rp] = f37, 8 - getf.sig r16 = f38 - getf.sig r20 = f42 - getf.sig r17 = f39 - getf.sig r8 = f43 - br .Lcj3 - -.grt3: - ldf8 f32 = [up], 8 - xma.l f37 = f7, f6, f9 - xma.hu f41 = f7, f6, f9 - ;; - ldf8 f33 = [up], 8 - xma.l f38 = f34, f6, f0 - xma.hu f42 = f34, f6, f0 - ;; - getf.sig r19 = f37 - ldf8 f34 = [up], 8 - xma.l f39 = f35, f6, f0 - xma.hu f43 = f35, f6, f0 - ;; - getf.sig r23 = f41 - ldf8 f35 = [up], 8 - br.cloop.dptk .grt7 - - getf.sig r16 = f38 - xma.l f36 = f32, f6, f0 - getf.sig r20 = f42 - xma.hu f40 = f32, f6, f0 - ;; - getf.sig r17 = f39 - xma.l f37 = f33, f6, f0 - getf.sig r21 = f43 - xma.hu f41 = f33, f6, f0 - ;; - getf.sig r18 = f36 - st8 [rp] = r19, 8 - xma.l f38 = f34, f6, f0 - xma.hu f42 = f34, f6, f0 - br .Lcj7 - -.grt7: - getf.sig r16 = f38 - xma.l f36 = f32, f6, f0 - xma.hu f40 = f32, f6, f0 - ;; - getf.sig r20 = f42 - ldf8 f32 = [up], 8 - xma.l f37 = f33, f6, f0 - ;; - getf.sig r17 = f39 - xma.hu f41 = f33, f6, f0 - br .LL11 - - -.Lb00: ldf8 f33 = [up], 8 - mov r21 = 0 - ;; - ldf8 f34 = [up], 8 - ;; - ldf8 f35 = [up], 8 - xma.l f36 = f7, f6, f9 - xma.hu f40 = f7, f6, f9 - br.cloop.dptk .grt4 - - xma.l f37 = f33, f6, f0 - xma.hu f41 = f33, f6, f0 - xma.l f38 = f34, f6, f0 - xma.hu f42 = f34, f6, f0 - ;; - getf.sig r22 = f40 - stf8 [rp] = f36, 8 - xma.l f39 = f35, f6, f0 - getf.sig r19 = f37 - xma.hu f43 = f35, f6, f0 - ;; - getf.sig r23 = f41 - getf.sig r16 = f38 - getf.sig r20 = f42 - getf.sig r17 = f39 - br .Lcj4 - -.grt4: - ldf8 f32 = [up], 8 - xma.l f37 = f33, f6, f0 - xma.hu f41 = f33, f6, f0 - ;; - getf.sig r18 = f36 - ldf8 f33 = [up], 8 - xma.l f38 = f34, f6, f0 - xma.hu f42 = f34, f6, f0 - ;; - getf.sig r22 = f40 - ldf8 f34 = [up], 8 - xma.l f39 = f35, f6, f0 - ;; - getf.sig r19 = f37 - getf.sig r23 = f41 - xma.hu f43 = f35, f6, f0 - ldf8 f35 = [up], 8 - br.cloop.dptk .grt8 - - getf.sig r16 = f38 - xma.l f36 = f32, f6, f0 - getf.sig r20 = f42 - xma.hu f40 = f32, f6, f0 - ;; - getf.sig r17 = f39 - st8 [rp] = r18, 8 - xma.l f37 = f33, f6, f0 - xma.hu f41 = f33, f6, f0 - br .Lcj8 - -.grt8: - getf.sig r16 = f38 - xma.l f36 = f32, f6, f0 - xma.hu f40 = f32, f6, f0 - br .LL00 - - -C *** MAIN LOOP START *** - ALIGN(32) -.Loop: - .pred.rel "mutex",p6,p7 - getf.sig r16 = f38 - xma.l f36 = f32, f6, f0 - (p6) cmp.leu p8, p9 = r24, r17 - st8 [rp] = r24, 8 - xma.hu f40 = f32, f6, f0 - (p7) cmp.ltu p8, p9 = r24, r17 - ;; -.LL00: - .pred.rel "mutex",p8,p9 - getf.sig r20 = f42 - (p8) add r24 = r18, r21, 1 - nop.b 0 - ldf8 f32 = [up], 8 - (p9) add r24 = r18, r21 - nop.b 0 - ;; - .pred.rel "mutex",p8,p9 - getf.sig r17 = f39 - xma.l f37 = f33, f6, f0 - (p8) cmp.leu p6, p7 = r24, r18 - st8 [rp] = r24, 8 - xma.hu f41 = f33, f6, f0 - (p9) cmp.ltu p6, p7 = r24, r18 - ;; -.LL11: - .pred.rel "mutex",p6,p7 - getf.sig r21 = f43 - (p6) add r24 = r19, r22, 1 - nop.b 0 - ldf8 f33 = [up], 8 - (p7) add r24 = r19, r22 - nop.b 0 - ;; - .pred.rel "mutex",p6,p7 - getf.sig r18 = f36 - xma.l f38 = f34, f6, f0 - (p6) cmp.leu p8, p9 = r24, r19 - st8 [rp] = r24, 8 - xma.hu f42 = f34, f6, f0 - (p7) cmp.ltu p8, p9 = r24, r19 - ;; -.LL10: - .pred.rel "mutex",p8,p9 - getf.sig r22 = f40 - (p8) add r24 = r16, r23, 1 - nop.b 0 - ldf8 f34 = [up], 8 - (p9) add r24 = r16, r23 - nop.b 0 - ;; - .pred.rel "mutex",p8,p9 - getf.sig r19 = f37 - xma.l f39 = f35, f6, f0 - (p8) cmp.leu p6, p7 = r24, r16 - st8 [rp] = r24, 8 - xma.hu f43 = f35, f6, f0 - (p9) cmp.ltu p6, p7 = r24, r16 - ;; -.LL01: - .pred.rel "mutex",p6,p7 - getf.sig r23 = f41 - (p6) add r24 = r17, r20, 1 - nop.b 0 - ldf8 f35 = [up], 8 - (p7) add r24 = r17, r20 - br.cloop.dptk .Loop -C *** MAIN LOOP END *** - ;; - -.Lcj9: - .pred.rel "mutex",p6,p7 - getf.sig r16 = f38 - xma.l f36 = f32, f6, f0 - (p6) cmp.leu p8, p9 = r24, r17 - st8 [rp] = r24, 8 - xma.hu f40 = f32, f6, f0 - (p7) cmp.ltu p8, p9 = r24, r17 - ;; - .pred.rel "mutex",p8,p9 - getf.sig r20 = f42 - (p8) add r24 = r18, r21, 1 - (p9) add r24 = r18, r21 - ;; - .pred.rel "mutex",p8,p9 - getf.sig r17 = f39 - xma.l f37 = f33, f6, f0 - (p8) cmp.leu p6, p7 = r24, r18 - st8 [rp] = r24, 8 - xma.hu f41 = f33, f6, f0 - (p9) cmp.ltu p6, p7 = r24, r18 - ;; -.Lcj8: - .pred.rel "mutex",p6,p7 - getf.sig r21 = f43 - (p6) add r24 = r19, r22, 1 - (p7) add r24 = r19, r22 - ;; - .pred.rel "mutex",p6,p7 - getf.sig r18 = f36 - xma.l f38 = f34, f6, f0 - (p6) cmp.leu p8, p9 = r24, r19 - st8 [rp] = r24, 8 - xma.hu f42 = f34, f6, f0 - (p7) cmp.ltu p8, p9 = r24, r19 - ;; -.Lcj7: - .pred.rel "mutex",p8,p9 - getf.sig r22 = f40 - (p8) add r24 = r16, r23, 1 - (p9) add r24 = r16, r23 - ;; - .pred.rel "mutex",p8,p9 - getf.sig r19 = f37 - xma.l f39 = f35, f6, f0 - (p8) cmp.leu p6, p7 = r24, r16 - st8 [rp] = r24, 8 - xma.hu f43 = f35, f6, f0 - (p9) cmp.ltu p6, p7 = r24, r16 - ;; -.Lcj6: - .pred.rel "mutex",p6,p7 - getf.sig r23 = f41 - (p6) add r24 = r17, r20, 1 - (p7) add r24 = r17, r20 - ;; - .pred.rel "mutex",p6,p7 - (p6) cmp.leu p8, p9 = r24, r17 - (p7) cmp.ltu p8, p9 = r24, r17 - getf.sig r16 = f38 - st8 [rp] = r24, 8 - ;; -.Lcj5: - .pred.rel "mutex",p8,p9 - getf.sig r20 = f42 - (p8) add r24 = r18, r21, 1 - (p9) add r24 = r18, r21 - ;; - .pred.rel "mutex",p8,p9 - (p8) cmp.leu p6, p7 = r24, r18 - (p9) cmp.ltu p6, p7 = r24, r18 - getf.sig r17 = f39 - st8 [rp] = r24, 8 - ;; -.Lcj4: - .pred.rel "mutex",p6,p7 - getf.sig r8 = f43 - (p6) add r24 = r19, r22, 1 - (p7) add r24 = r19, r22 - ;; - .pred.rel "mutex",p6,p7 - st8 [rp] = r24, 8 - (p6) cmp.leu p8, p9 = r24, r19 - (p7) cmp.ltu p8, p9 = r24, r19 - ;; -.Lcj3: - .pred.rel "mutex",p8,p9 - (p8) add r24 = r16, r23, 1 - (p9) add r24 = r16, r23 - ;; - .pred.rel "mutex",p8,p9 - st8 [rp] = r24, 8 - (p8) cmp.leu p6, p7 = r24, r16 - (p9) cmp.ltu p6, p7 = r24, r16 - ;; -.Lcj2: - .pred.rel "mutex",p6,p7 - (p6) add r24 = r17, r20, 1 - (p7) add r24 = r17, r20 - ;; - .pred.rel "mutex",p6,p7 - st8 [rp] = r24, 8 - (p6) cmp.leu p8, p9 = r24, r17 - (p7) cmp.ltu p8, p9 = r24, r17 - ;; - (p8) add r8 = 1, r8 - mov.i ar.lc = r2 - br.ret.sptk.many b0 -EPILOGUE() - -PROLOGUE(mpn_mul_1c) - .prologue - .save ar.lc, r2 - .body - -ifdef(`HAVE_ABI_32', -` addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - zxt4 n = n C I - ;; -') -{.mmi - adds r15 = -1, n C M I - setf.sig f9 = cy C M2 M3 - mov.i r2 = ar.lc C I0 -} -{.mmb - ldf8 f7 = [up], 8 C M - and r14 = 3, n C M I - br.sptk .Lcommon - ;; -} -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/mul_2.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/mul_2.asm deleted file mode 100644 index 5343f64427e480dc26b85401200a1e415ec5f6c4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/mul_2.asm +++ /dev/null @@ -1,625 +0,0 @@ -dnl IA-64 mpn_mul_2 -- Multiply a n-limb number with a 2-limb number and store -dnl store the result to a (n+1)-limb number. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2004, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: ? -C Itanium 2: 1.5 - -C TODO -C * Clean up variable names, and try to decrease the number of distinct -C registers used. -C * Clean up feed-in code to not require zeroing several registers. -C * Make sure we don't depend on uninitialized predicate registers. -C * Could perhaps save a few cycles by using 1 c/l carry propagation in -C wind-down code. -C * Ultimately rewrite. The problem with this code is that it first uses a -C loaded u value in one xma pair, then leaves it live over several unrelated -C xma pairs, before it uses it again. It should actually be quite possible -C to just swap some aligned xma pairs around. But we should then schedule -C u loads further from the first use. - -C INPUT PARAMETERS -define(`rp',`r32') -define(`up',`r33') -define(`n',`r34') -define(`vp',`r35') - -define(`srp',`r3') - -define(`v0',`f6') -define(`v1',`f7') - -define(`s0',`r14') -define(`acc0',`r15') - -define(`pr0_0',`r16') define(`pr0_1',`r17') -define(`pr0_2',`r18') define(`pr0_3',`r19') - -define(`pr1_0',`r20') define(`pr1_1',`r21') -define(`pr1_2',`r22') define(`pr1_3',`r23') - -define(`acc1_0',`r24') define(`acc1_1',`r25') -define(`acc1_2',`r26') define(`acc1_3',`r27') - -dnl define(`',`r28') -dnl define(`',`r29') -dnl define(`',`r30') -dnl define(`',`r31') - -define(`fp0b_0',`f8') define(`fp0b_1',`f9') -define(`fp0b_2',`f10') define(`fp0b_3',`f11') - -define(`fp1a_0',`f12') define(`fp1a_1',`f13') -define(`fp1a_2',`f14') define(`fp1a_3',`f15') - -define(`fp1b_0',`f32') define(`fp1b_1',`f33') -define(`fp1b_2',`f34') define(`fp1b_3',`f35') - -define(`fp2a_0',`f36') define(`fp2a_1',`f37') -define(`fp2a_2',`f38') define(`fp2a_3',`f39') - -define(`u_0',`f44') define(`u_1',`f45') -define(`u_2',`f46') define(`u_3',`f47') - -define(`ux',`f49') -define(`uy',`f51') - -ASM_START() -PROLOGUE(mpn_mul_2) - .prologue - .save ar.lc, r2 - .body - -ifdef(`HAVE_ABI_32',` - {.mmi; addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - addp4 vp = 0, vp C M I -}{.mmi; nop 1 - nop 1 - zxt4 n = n C I - ;; -}') - - {.mmi; ldf8 ux = [up], 8 C M - ldf8 v0 = [vp], 8 C M - mov r2 = ar.lc C I0 -}{.mmi; nop 1 C M - and r14 = 3, n C M I - add n = -2, n C M I - ;; -}{.mmi; ldf8 uy = [up], 8 C M - ldf8 v1 = [vp] C M - shr.u n = n, 2 C I0 -}{.mmi; nop 1 C M - cmp.eq p10, p0 = 1, r14 C M I - cmp.eq p11, p0 = 2, r14 C M I - ;; -}{.mmi; nop 1 C M - cmp.eq p12, p0 = 3, r14 C M I - mov ar.lc = n C I0 -}{.bbb; (p10) br.dptk L(b01) C B - (p11) br.dptk L(b10) C B - (p12) br.dptk L(b11) C B - ;; -} - ALIGN(32) -L(b00): ldf8 u_1 = [up], 8 - mov acc1_2 = 0 - mov pr1_2 = 0 - mov pr0_3 = 0 - cmp.ne p8, p9 = r0, r0 - ;; - xma.l fp0b_3 = ux, v0, f0 - cmp.ne p12, p13 = r0, r0 - ldf8 u_2 = [up], 8 - xma.hu fp1a_3 = ux, v0, f0 - br.cloop.dptk L(gt4) - - xma.l fp0b_0 = uy, v0, f0 - xma.hu fp1a_0 = uy, v0, f0 - ;; - getfsig acc0 = fp0b_3 - xma.l fp1b_3 = ux, v1, fp1a_3 - xma.hu fp2a_3 = ux, v1, fp1a_3 - ;; - xma.l fp0b_1 = u_1, v0, f0 - xma.hu fp1a_1 = u_1, v0, f0 - ;; - getfsig pr0_0 = fp0b_0 - xma.l fp1b_0 = uy, v1, fp1a_0 - xma.hu fp2a_0 = uy, v1, fp1a_0 - ;; - getfsig pr1_3 = fp1b_3 - getfsig acc1_3 = fp2a_3 - xma.l fp0b_2 = u_2, v0, f0 - xma.hu fp1a_2 = u_2, v0, f0 - br L(cj4) - -L(gt4): xma.l fp0b_0 = uy, v0, f0 - xma.hu fp1a_0 = uy, v0, f0 - ;; - getfsig acc0 = fp0b_3 - xma.l fp1b_3 = ux, v1, fp1a_3 - ldf8 u_3 = [up], 8 - xma.hu fp2a_3 = ux, v1, fp1a_3 - ;; - xma.l fp0b_1 = u_1, v0, f0 - xma.hu fp1a_1 = u_1, v0, f0 - ;; - getfsig pr0_0 = fp0b_0 - xma.l fp1b_0 = uy, v1, fp1a_0 - xma.hu fp2a_0 = uy, v1, fp1a_0 - ;; - ldf8 u_0 = [up], 8 - getfsig pr1_3 = fp1b_3 - xma.l fp0b_2 = u_2, v0, f0 - ;; - getfsig acc1_3 = fp2a_3 - xma.hu fp1a_2 = u_2, v0, f0 - br L(00) - - - ALIGN(32) -L(b01): ldf8 u_0 = [up], 8 C M - mov acc1_1 = 0 C M I - mov pr1_1 = 0 C M I - mov pr0_2 = 0 C M I - cmp.ne p6, p7 = r0, r0 C M I - ;; - xma.l fp0b_2 = ux, v0, f0 C F - cmp.ne p10, p11 = r0, r0 C M I - ldf8 u_1 = [up], 8 C M - xma.hu fp1a_2 = ux, v0, f0 C F - ;; - xma.l fp0b_3 = uy, v0, f0 C F - xma.hu fp1a_3 = uy, v0, f0 C F - ;; - getfsig acc0 = fp0b_2 C M - xma.l fp1b_2 = ux, v1,fp1a_2 C F - ldf8 u_2 = [up], 8 C M - xma.hu fp2a_2 = ux, v1,fp1a_2 C F - br.cloop.dptk L(gt5) - - xma.l fp0b_0 = u_0, v0, f0 C F - xma.hu fp1a_0 = u_0, v0, f0 C F - ;; - getfsig pr0_3 = fp0b_3 C M - xma.l fp1b_3 = uy, v1,fp1a_3 C F - xma.hu fp2a_3 = uy, v1,fp1a_3 C F - ;; - getfsig pr1_2 = fp1b_2 C M - getfsig acc1_2 = fp2a_2 C M - xma.l fp0b_1 = u_1, v0, f0 C F - xma.hu fp1a_1 = u_1, v0, f0 C F - br L(cj5) - -L(gt5): xma.l fp0b_0 = u_0, v0, f0 - xma.hu fp1a_0 = u_0, v0, f0 - ;; - getfsig pr0_3 = fp0b_3 - xma.l fp1b_3 = uy, v1, fp1a_3 - xma.hu fp2a_3 = uy, v1, fp1a_3 - ;; - ldf8 u_3 = [up], 8 - getfsig pr1_2 = fp1b_2 - xma.l fp0b_1 = u_1, v0, f0 - ;; - getfsig acc1_2 = fp2a_2 - xma.hu fp1a_1 = u_1, v0, f0 - br L(01) - - - ALIGN(32) -L(b10): br.cloop.dptk L(gt2) - xma.l fp0b_1 = ux, v0, f0 - xma.hu fp1a_1 = ux, v0, f0 - ;; - xma.l fp0b_2 = uy, v0, f0 - xma.hu fp1a_2 = uy, v0, f0 - ;; - stf8 [rp] = fp0b_1, 8 - xma.l fp1b_1 = ux, v1, fp1a_1 - xma.hu fp2a_1 = ux, v1, fp1a_1 - ;; - getfsig acc0 = fp0b_2 - xma.l fp1b_2 = uy, v1, fp1a_2 - xma.hu fp2a_2 = uy, v1, fp1a_2 - ;; - getfsig pr1_1 = fp1b_1 - getfsig acc1_1 = fp2a_1 - mov ar.lc = r2 - getfsig pr1_2 = fp1b_2 - getfsig r8 = fp2a_2 - ;; - add s0 = pr1_1, acc0 - ;; - st8 [rp] = s0, 8 - cmp.ltu p8, p9 = s0, pr1_1 - sub r31 = -1, acc1_1 - ;; - .pred.rel "mutex", p8, p9 - (p8) add acc0 = pr1_2, acc1_1, 1 - (p9) add acc0 = pr1_2, acc1_1 - (p8) cmp.leu p10, p0 = r31, pr1_2 - (p9) cmp.ltu p10, p0 = r31, pr1_2 - ;; - st8 [rp] = acc0, 8 - (p10) add r8 = 1, r8 - br.ret.sptk.many b0 - -L(gt2): ldf8 u_3 = [up], 8 - mov acc1_0 = 0 - mov pr1_0 = 0 - ;; - mov pr0_1 = 0 - xma.l fp0b_1 = ux, v0, f0 - ldf8 u_0 = [up], 8 - xma.hu fp1a_1 = ux, v0, f0 - ;; - xma.l fp0b_2 = uy, v0, f0 - xma.hu fp1a_2 = uy, v0, f0 - ;; - getfsig acc0 = fp0b_1 - xma.l fp1b_1 = ux, v1, fp1a_1 - xma.hu fp2a_1 = ux, v1, fp1a_1 - ;; - ldf8 u_1 = [up], 8 - xma.l fp0b_3 = u_3, v0, f0 - xma.hu fp1a_3 = u_3, v0, f0 - ;; - getfsig pr0_2 = fp0b_2 - xma.l fp1b_2 = uy, v1, fp1a_2 - xma.hu fp2a_2 = uy, v1, fp1a_2 - ;; - ldf8 u_2 = [up], 8 - getfsig pr1_1 = fp1b_1 - ;; - {.mfi; getfsig acc1_1 = fp2a_1 - xma.l fp0b_0 = u_0, v0, f0 - cmp.ne p8, p9 = r0, r0 -}{.mfb; cmp.ne p12, p13 = r0, r0 - xma.hu fp1a_0 = u_0, v0, f0 - br L(10) -} - - ALIGN(32) -L(b11): mov acc1_3 = 0 - mov pr1_3 = 0 - mov pr0_0 = 0 - ldf8 u_2 = [up], 8 - cmp.ne p6, p7 = r0, r0 - br.cloop.dptk L(gt3) - ;; - xma.l fp0b_0 = ux, v0, f0 - xma.hu fp1a_0 = ux, v0, f0 - ;; - cmp.ne p10, p11 = r0, r0 - xma.l fp0b_1 = uy, v0, f0 - xma.hu fp1a_1 = uy, v0, f0 - ;; - getfsig acc0 = fp0b_0 - xma.l fp1b_0 = ux, v1, fp1a_0 - xma.hu fp2a_0 = ux, v1, fp1a_0 - ;; - xma.l fp0b_2 = u_2, v0, f0 - xma.hu fp1a_2 = u_2, v0, f0 - ;; - getfsig pr0_1 = fp0b_1 - xma.l fp1b_1 = uy, v1, fp1a_1 - xma.hu fp2a_1 = uy, v1, fp1a_1 - ;; - getfsig pr1_0 = fp1b_0 - getfsig acc1_0 = fp2a_0 - br L(cj3) - -L(gt3): xma.l fp0b_0 = ux, v0, f0 - cmp.ne p10, p11 = r0, r0 - ldf8 u_3 = [up], 8 - xma.hu fp1a_0 = ux, v0, f0 - ;; - xma.l fp0b_1 = uy, v0, f0 - xma.hu fp1a_1 = uy, v0, f0 - ;; - getfsig acc0 = fp0b_0 - xma.l fp1b_0 = ux, v1, fp1a_0 - ldf8 u_0 = [up], 8 - xma.hu fp2a_0 = ux, v1, fp1a_0 - ;; - xma.l fp0b_2 = u_2, v0, f0 - xma.hu fp1a_2 = u_2, v0, f0 - ;; - getfsig pr0_1 = fp0b_1 - xma.l fp1b_1 = uy, v1, fp1a_1 - xma.hu fp2a_1 = uy, v1, fp1a_1 - ;; - ldf8 u_1 = [up], 8 - getfsig pr1_0 = fp1b_0 - ;; - getfsig acc1_0 = fp2a_0 - xma.l fp0b_3 = u_3, v0, f0 - xma.hu fp1a_3 = u_3, v0, f0 - br L(11) - - -C *** MAIN LOOP START *** - ALIGN(32) -L(top): C 00 - .pred.rel "mutex", p8, p9 - .pred.rel "mutex", p12, p13 - ldf8 u_3 = [up], 8 - getfsig pr1_2 = fp1b_2 - (p8) cmp.leu p6, p7 = acc0, pr0_1 - (p9) cmp.ltu p6, p7 = acc0, pr0_1 - (p12) cmp.leu p10, p11 = s0, pr1_0 - (p13) cmp.ltu p10, p11 = s0, pr1_0 - ;; C 01 - .pred.rel "mutex", p6, p7 - getfsig acc1_2 = fp2a_2 - st8 [rp] = s0, 8 - xma.l fp0b_1 = u_1, v0, f0 - (p6) add acc0 = pr0_2, acc1_0, 1 - (p7) add acc0 = pr0_2, acc1_0 - xma.hu fp1a_1 = u_1, v0, f0 - ;; C 02 -L(01): - .pred.rel "mutex", p10, p11 - getfsig pr0_0 = fp0b_0 - xma.l fp1b_0 = u_0, v1, fp1a_0 - (p10) add s0 = pr1_1, acc0, 1 - (p11) add s0 = pr1_1, acc0 - xma.hu fp2a_0 = u_0, v1, fp1a_0 - nop 1 - ;; C 03 - .pred.rel "mutex", p6, p7 - .pred.rel "mutex", p10, p11 - ldf8 u_0 = [up], 8 - getfsig pr1_3 = fp1b_3 - (p6) cmp.leu p8, p9 = acc0, pr0_2 - (p7) cmp.ltu p8, p9 = acc0, pr0_2 - (p10) cmp.leu p12, p13 = s0, pr1_1 - (p11) cmp.ltu p12, p13 = s0, pr1_1 - ;; C 04 - .pred.rel "mutex", p8, p9 - getfsig acc1_3 = fp2a_3 - st8 [rp] = s0, 8 - xma.l fp0b_2 = u_2, v0, f0 - (p8) add acc0 = pr0_3, acc1_1, 1 - (p9) add acc0 = pr0_3, acc1_1 - xma.hu fp1a_2 = u_2, v0, f0 - ;; C 05 -L(00): - .pred.rel "mutex", p12, p13 - getfsig pr0_1 = fp0b_1 - xma.l fp1b_1 = u_1, v1, fp1a_1 - (p12) add s0 = pr1_2, acc0, 1 - (p13) add s0 = pr1_2, acc0 - xma.hu fp2a_1 = u_1, v1, fp1a_1 - nop 1 - ;; C 06 - .pred.rel "mutex", p8, p9 - .pred.rel "mutex", p12, p13 - ldf8 u_1 = [up], 8 - getfsig pr1_0 = fp1b_0 - (p8) cmp.leu p6, p7 = acc0, pr0_3 - (p9) cmp.ltu p6, p7 = acc0, pr0_3 - (p12) cmp.leu p10, p11 = s0, pr1_2 - (p13) cmp.ltu p10, p11 = s0, pr1_2 - ;; C 07 - .pred.rel "mutex", p6, p7 - getfsig acc1_0 = fp2a_0 - st8 [rp] = s0, 8 - xma.l fp0b_3 = u_3, v0, f0 - (p6) add acc0 = pr0_0, acc1_2, 1 - (p7) add acc0 = pr0_0, acc1_2 - xma.hu fp1a_3 = u_3, v0, f0 - ;; C 08 -L(11): - .pred.rel "mutex", p10, p11 - getfsig pr0_2 = fp0b_2 - xma.l fp1b_2 = u_2, v1, fp1a_2 - (p10) add s0 = pr1_3, acc0, 1 - (p11) add s0 = pr1_3, acc0 - xma.hu fp2a_2 = u_2, v1, fp1a_2 - nop 1 - ;; C 09 - .pred.rel "mutex", p6, p7 - .pred.rel "mutex", p10, p11 - ldf8 u_2 = [up], 8 - getfsig pr1_1 = fp1b_1 - (p6) cmp.leu p8, p9 = acc0, pr0_0 - (p7) cmp.ltu p8, p9 = acc0, pr0_0 - (p10) cmp.leu p12, p13 = s0, pr1_3 - (p11) cmp.ltu p12, p13 = s0, pr1_3 - ;; C 10 - .pred.rel "mutex", p8, p9 - getfsig acc1_1 = fp2a_1 - st8 [rp] = s0, 8 - xma.l fp0b_0 = u_0, v0, f0 - (p8) add acc0 = pr0_1, acc1_3, 1 - (p9) add acc0 = pr0_1, acc1_3 - xma.hu fp1a_0 = u_0, v0, f0 - ;; C 11 -L(10): - .pred.rel "mutex", p12, p13 - getfsig pr0_3 = fp0b_3 - xma.l fp1b_3 = u_3, v1, fp1a_3 - (p12) add s0 = pr1_0, acc0, 1 - (p13) add s0 = pr1_0, acc0 - xma.hu fp2a_3 = u_3, v1, fp1a_3 - br.cloop.dptk L(top) - ;; -C *** MAIN LOOP END *** - - .pred.rel "mutex", p8, p9 - .pred.rel "mutex", p12, p13 - {.mmi; getfsig pr1_2 = fp1b_2 - st8 [rp] = s0, 8 - (p8) cmp.leu p6, p7 = acc0, pr0_1 -}{.mmi; (p9) cmp.ltu p6, p7 = acc0, pr0_1 - (p12) cmp.leu p10, p11 = s0, pr1_0 - (p13) cmp.ltu p10, p11 = s0, pr1_0 - ;; -} .pred.rel "mutex", p6, p7 - {.mfi; getfsig acc1_2 = fp2a_2 - xma.l fp0b_1 = u_1, v0, f0 - nop 1 -}{.mmf; (p6) add acc0 = pr0_2, acc1_0, 1 - (p7) add acc0 = pr0_2, acc1_0 - xma.hu fp1a_1 = u_1, v0, f0 - ;; -} -L(cj5): - .pred.rel "mutex", p10, p11 - {.mfi; getfsig pr0_0 = fp0b_0 - xma.l fp1b_0 = u_0, v1, fp1a_0 - (p10) add s0 = pr1_1, acc0, 1 -}{.mfi; (p11) add s0 = pr1_1, acc0 - xma.hu fp2a_0 = u_0, v1, fp1a_0 - nop 1 - ;; -} .pred.rel "mutex", p6, p7 - .pred.rel "mutex", p10, p11 - {.mmi; getfsig pr1_3 = fp1b_3 - st8 [rp] = s0, 8 - (p6) cmp.leu p8, p9 = acc0, pr0_2 -}{.mmi; (p7) cmp.ltu p8, p9 = acc0, pr0_2 - (p10) cmp.leu p12, p13 = s0, pr1_1 - (p11) cmp.ltu p12, p13 = s0, pr1_1 - ;; -} .pred.rel "mutex", p8, p9 - {.mfi; getfsig acc1_3 = fp2a_3 - xma.l fp0b_2 = u_2, v0, f0 - nop 1 -}{.mmf; (p8) add acc0 = pr0_3, acc1_1, 1 - (p9) add acc0 = pr0_3, acc1_1 - xma.hu fp1a_2 = u_2, v0, f0 - ;; -} -L(cj4): - .pred.rel "mutex", p12, p13 - {.mfi; getfsig pr0_1 = fp0b_1 - xma.l fp1b_1 = u_1, v1, fp1a_1 - (p12) add s0 = pr1_2, acc0, 1 -}{.mfi; (p13) add s0 = pr1_2, acc0 - xma.hu fp2a_1 = u_1, v1, fp1a_1 - nop 1 - ;; -} .pred.rel "mutex", p8, p9 - .pred.rel "mutex", p12, p13 - {.mmi; getfsig pr1_0 = fp1b_0 - st8 [rp] = s0, 8 - (p8) cmp.leu p6, p7 = acc0, pr0_3 -}{.mmi; (p9) cmp.ltu p6, p7 = acc0, pr0_3 - (p12) cmp.leu p10, p11 = s0, pr1_2 - (p13) cmp.ltu p10, p11 = s0, pr1_2 - ;; -} .pred.rel "mutex", p6, p7 - {.mmi; getfsig acc1_0 = fp2a_0 - (p6) add acc0 = pr0_0, acc1_2, 1 - (p7) add acc0 = pr0_0, acc1_2 - ;; -} -L(cj3): - .pred.rel "mutex", p10, p11 - {.mfi; getfsig pr0_2 = fp0b_2 - xma.l fp1b_2 = u_2, v1, fp1a_2 - (p10) add s0 = pr1_3, acc0, 1 -}{.mfi; (p11) add s0 = pr1_3, acc0 - xma.hu fp2a_2 = u_2, v1, fp1a_2 - nop 1 - ;; -} .pred.rel "mutex", p6, p7 - .pred.rel "mutex", p10, p11 - {.mmi; getfsig pr1_1 = fp1b_1 - st8 [rp] = s0, 8 - (p6) cmp.leu p8, p9 = acc0, pr0_0 -}{.mmi; (p7) cmp.ltu p8, p9 = acc0, pr0_0 - (p10) cmp.leu p12, p13 = s0, pr1_3 - (p11) cmp.ltu p12, p13 = s0, pr1_3 - ;; -} .pred.rel "mutex", p8, p9 - {.mmi; getfsig acc1_1 = fp2a_1 - (p8) add acc0 = pr0_1, acc1_3, 1 - (p9) add acc0 = pr0_1, acc1_3 - ;; -} .pred.rel "mutex", p12, p13 - {.mmi; (p12) add s0 = pr1_0, acc0, 1 - (p13) add s0 = pr1_0, acc0 - nop 1 - ;; -} .pred.rel "mutex", p8, p9 - .pred.rel "mutex", p12, p13 - {.mmi; getfsig pr1_2 = fp1b_2 - st8 [rp] = s0, 8 - (p8) cmp.leu p6, p7 = acc0, pr0_1 -}{.mmi; (p9) cmp.ltu p6, p7 = acc0, pr0_1 - (p12) cmp.leu p10, p11 = s0, pr1_0 - (p13) cmp.ltu p10, p11 = s0, pr1_0 - ;; -} .pred.rel "mutex", p6, p7 - {.mmi; getfsig r8 = fp2a_2 - (p6) add acc0 = pr0_2, acc1_0, 1 - (p7) add acc0 = pr0_2, acc1_0 - ;; -} .pred.rel "mutex", p10, p11 - {.mmi; (p10) add s0 = pr1_1, acc0, 1 - (p11) add s0 = pr1_1, acc0 - (p6) cmp.leu p8, p9 = acc0, pr0_2 - ;; -} .pred.rel "mutex", p10, p11 - {.mmi; (p7) cmp.ltu p8, p9 = acc0, pr0_2 - (p10) cmp.leu p12, p13 = s0, pr1_1 - (p11) cmp.ltu p12, p13 = s0, pr1_1 - ;; -} .pred.rel "mutex", p8, p9 - {.mmi; st8 [rp] = s0, 8 - (p8) add acc0 = pr1_2, acc1_1, 1 - (p9) add acc0 = pr1_2, acc1_1 - ;; -} .pred.rel "mutex", p8, p9 - {.mmi; (p8) cmp.leu p10, p11 = acc0, pr1_2 - (p9) cmp.ltu p10, p11 = acc0, pr1_2 - (p12) add acc0 = 1, acc0 - ;; -}{.mmi; st8 [rp] = acc0, 8 - (p12) cmpeqor p10, p0 = 0, acc0 - nop 1 - ;; -}{.mib; (p10) add r8 = 1, r8 - mov ar.lc = r2 - br.ret.sptk.many b0 -} -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/popcount.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/popcount.asm deleted file mode 100644 index c0b5c5c1cfa09ab4aaad734b8c900ca7fe7f716a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/popcount.asm +++ /dev/null @@ -1,200 +0,0 @@ -dnl IA-64 mpn_popcount -- mpn population count. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2000-2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 1.5 -C Itanium 2: 1 - -C INPUT PARAMETERS -define(`up', `r32') -define(`n', `r33') - -define(`u0',`r16') define(`u1',`r17') define(`u2',`r18') define(`u3',`r19') -define(`c0',`r28') define(`c1',`r29') define(`c2',`r30') define(`c3',`r31') -define(`s',`r8') - - -ASM_START() -PROLOGUE(mpn_popcount) - .prologue -ifdef(`HAVE_ABI_32', -` addp4 up = 0, up C M I - nop.m 0 - zxt4 n = n C I - ;; -') - - {.mmi; add r9 = 512, up C prefetch pointer M I - ld8 r10 = [up], 8 C load first limb M01 - mov.i r2 = ar.lc C save ar.lc I0 -}{.mmi; and r14 = 3, n C M I - cmp.lt p15, p14 = 4, n C small count? M I - add n = -5, n C M I - ;; -}{.mmi; cmp.eq p6, p0 = 1, r14 C M I - cmp.eq p7, p0 = 2, r14 C M I - cmp.eq p8, p0 = 3, r14 C M I -}{.bbb - (p6) br.dptk .Lb01 C B - (p7) br.dptk .Lb10 C B - (p8) br.dptk .Lb11 C B -} - - -.Lb00: ld8 u1 = [up], 8 C M01 - shr.u n = n, 2 C I0 - mov s = 0 C M I - ;; - ld8 u2 = [up], 8 C M01 - popcnt c0 = r10 C I0 - mov.i ar.lc = n C I0 - ;; - ld8 u3 = [up], 8 C M01 - popcnt c1 = u1 C I0 - (p15) br.cond.dptk .grt4 C B - ;; - nop.m 0 C - - nop.m 0 C - - popcnt c2 = u2 C I0 - ;; - mov s = c0 C M I - popcnt c3 = u3 C I0 - br .Lcj4 C B - -.grt4: ld8 u0 = [up], 8 C M01 - popcnt c2 = u2 C I0 - br .LL00 C B - - -.Lb01: - popcnt s = r10 C I0 - (p14) br.ret.sptk.many b0 C B - -.grt1: ld8 u0 = [up], 8 C M01 - shr.u n = n, 2 C I0 - ;; - ld8 u1 = [up], 8 C M01 - mov.i ar.lc = n C I0 - ;; - ld8 u2 = [up], 8 C M01 - popcnt c0 = u0 C I0 - mov c3 = 0 C I0 - - ;; - ld8 u3 = [up], 8 C M01 - popcnt c1 = u1 C I0 - br.cloop.dptk .Loop C B - br .Lend C B - - -.Lb10: ld8 u3 = [up], 8 C M01 - shr.u n = n, 2 C I0 - (p15) br.cond.dptk .grt2 C B - - popcnt s = r10 C I0 - ;; - popcnt c3 = u3 C I0 - br .Lcj2 C B - -.grt2: ld8 u0 = [up], 8 C M01 - mov.i ar.lc = n C I0 - popcnt c2 = r10 C I0 - ;; - ld8 u1 = [up], 8 C M01 - popcnt c3 = u3 C I0 - mov s = 0 C M I - ;; - ld8 u2 = [up], 8 C M01 - popcnt c0 = u0 C I0 - br .LL10 C B - - -.Lb11: ld8 u2 = [up], 8 C M01 - shr.u n = n, 2 C I0 - mov s = 0 C M I - ;; - ld8 u3 = [up], 8 C M01 - popcnt s = r10 C I0 - (p15) br.cond.dptk .grt3 C B - - popcnt c2 = u2 C I0 - ;; - popcnt c3 = u3 C I0 - br .Lcj3 C B - -.grt3: ld8 u0 = [up], 8 C M01 - popcnt c2 = u2 C I0 - mov.i ar.lc = n C I0 - mov c1 = 0 - ;; - ld8 u1 = [up], 8 C M01 - popcnt c3 = u3 C I0 - br .LL11 C B - - -.Loop: ld8 u0 = [up], 8 C M01 - popcnt c2 = u2 C I0 - add s = s, c3 C M I - ;; -.LL00: ld8 u1 = [up], 8 C M01 - popcnt c3 = u3 C I0 - add s = s, c0 C M I - ;; -.LL11: ld8 u2 = [up], 8 C M01 - popcnt c0 = u0 C I0 - add s = s, c1 C M I - ;; -.LL10: ld8 u3 = [up], 8 C M01 - popcnt c1 = u1 C I0 - add s = s, c2 C M I - lfetch [r9], 32 C M01 - nop.m 0 C - - br.cloop.dptk .Loop C B - ;; - -.Lend: popcnt c2 = u2 C I0 - add s = s, c3 C M I - ;; - popcnt c3 = u3 C I0 - add s = s, c0 C M I - ;; -.Lcj4: add s = s, c1 C M I - ;; -.Lcj3: add s = s, c2 C M I - ;; -.Lcj2: add s = s, c3 C M I - mov.i ar.lc = r2 C I0 - br.ret.sptk.many b0 C B -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/rsh1aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/rsh1aors_n.asm deleted file mode 100644 index 3c7defb0baeb493330eb37f09193745bc84a0017..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/rsh1aors_n.asm +++ /dev/null @@ -1,447 +0,0 @@ -dnl IA-64 mpn_rsh1add_n/mpn_rsh1sub_n -- rp[] = (up[] +- vp[]) >> 1. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2003-2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 2.5 -C Itanium 2: 1.5 - -C TODO -C * Rewrite function entry code using aorslsh1_n.asm style. -C * Micro-optimize feed-in and wind-down code. - -C INPUT PARAMETERS -define(`rp',`r32') -define(`up',`r33') -define(`vp',`r34') -define(`n',`r35') - -ifdef(`OPERATION_rsh1add_n',` - define(ADDSUB, add) - define(PRED, ltu) - define(INCR, 1) - define(LIM, -1) - define(func, mpn_rsh1add_n) -') -ifdef(`OPERATION_rsh1sub_n',` - define(ADDSUB, sub) - define(PRED, gtu) - define(INCR, -1) - define(LIM, 0) - define(func, mpn_rsh1sub_n) -') - -C Some useful aliases for registers we use -define(`u0',`r14') define(`u1',`r15') define(`u2',`r16') define(`u3',`r17') -define(`v0',`r18') define(`v1',`r19') define(`v2',`r20') define(`v3',`r21') -define(`w0',`r22') define(`w1',`r23') define(`w2',`r24') define(`w3',`r25') -define(`x0',`r26') define(`x1',`r9') define(`x2',`r30') define(`x3',`r31') - -MULFUNC_PROLOGUE(mpn_rsh1add_n mpn_rsh1sub_n) - -ASM_START() -PROLOGUE(func) - .prologue - .save ar.lc, r2 - .body -ifdef(`HAVE_ABI_32',` - addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - addp4 vp = 0, vp C M I - nop.m 0 - nop.m 0 - zxt4 n = n C I - ;; -') - {.mmi; ld8 r11 = [vp], 8 C M01 - ld8 r10 = [up], 8 C M01 - mov.i r2 = ar.lc C I0 -}{.mmi; and r14 = 3, n C M I - cmp.lt p15, p0 = 4, n C M I - add n = -4, n C M I - ;; -}{.mmi; cmp.eq p6, p0 = 1, r14 C M I - cmp.eq p7, p0 = 2, r14 C M I - cmp.eq p8, p0 = 3, r14 C M I -}{.bbb - (p6) br.dptk .Lb01 C B - (p7) br.dptk .Lb10 C B - (p8) br.dptk .Lb11 C B -} - -.Lb00: ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - shr.u n = n, 2 C I0 - ;; - ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - ADDSUB w3 = r10, r11 C M I - ;; - ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - (p15) br.dpnt .grt4 C B - ;; - - cmp.PRED p7, p0 = w3, r10 C M I - and r8 = 1, w3 C M I - ADDSUB w0 = u0, v0 C M I - ;; - cmp.PRED p8, p0 = w0, u0 C M I - ADDSUB w1 = u1, v1 C M I - ;; - cmp.PRED p9, p0 = w1, u1 C M I - (p7) cmp.eq.or p8, p0 = LIM, w0 C M I - (p7) add w0 = INCR, w0 C M I - ;; - shrp x3 = w0, w3, 1 C I0 - ADDSUB w2 = u2, v2 C M I - (p8) cmp.eq.or p9, p0 = LIM, w1 C M I - (p8) add w1 = INCR, w1 C M I - br .Lcj4 C B - -.grt4: ld8 v3 = [vp], 8 C M01 - cmp.PRED p7, p0 = w3, r10 C M I - ld8 u3 = [up], 8 C M01 - and r8 = 1, w3 C M I - ;; - ADDSUB w0 = u0, v0 C M I - ld8 v0 = [vp], 8 C M01 - add n = -1, n - ;; - cmp.PRED p8, p0 = w0, u0 C M I - ld8 u0 = [up], 8 C M01 - ADDSUB w1 = u1, v1 C M I - ;; - ld8 v1 = [vp], 8 C M01 - mov.i ar.lc = n C I0 - cmp.PRED p9, p0 = w1, u1 C M I - ld8 u1 = [up], 8 C M01 - (p7) cmp.eq.or p8, p0 = LIM, w0 C M I - (p7) add w0 = INCR, w0 C M I - ;; - ADDSUB w2 = u2, v2 C M I - ld8 v2 = [vp], 8 C M01 - shrp x3 = w0, w3, 1 C I0 - (p8) cmp.eq.or p9, p0 = LIM, w1 C M I - (p8) add w1 = INCR, w1 C M I - br .LL00 C B - - -.Lb01: ADDSUB w2 = r10, r11 C M I - shr.u n = n, 2 C I0 - (p15) br.dpnt .grt1 C B - ;; - - cmp.PRED p6, p7 = w2, r10 C M I - shr.u x2 = w2, 1 C I0 - and r8 = 1, w2 C M I - ;; - (p6) dep x2 = -1, x2, 63, 1 C I0 - br .Lcj1 C B - -.grt1: ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - ;; - ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - mov.i ar.lc = n C FIXME swap with next I0 - ;; - ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - ;; - ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - cmp.PRED p6, p0 = w2, r10 C M I - and r8 = 1, w2 C M I - ADDSUB w3 = u3, v3 C M I - br.cloop.dptk .grt5 C B - ;; - - cmp.PRED p7, p0 = w3, u3 C M I - ;; - ADDSUB w0 = u0, v0 C M I - (p6) cmp.eq.or p7, p0 = LIM, w3 C M I - (p6) add w3 = INCR, w3 C M I - ;; - cmp.PRED p8, p0 = w0, u0 C M I - shrp x2 = w3, w2, 1 C I0 - ADDSUB w1 = u1, v1 C M I - ;; - cmp.PRED p9, p0 = w1, u1 C M I - (p7) cmp.eq.or p8, p0 = LIM, w0 C M I - (p7) add w0 = INCR, w0 C M I - br .Lcj5 C B - -.grt5: ld8 v3 = [vp], 8 C M01 - cmp.PRED p7, p0 = w3, u3 C M I - ld8 u3 = [up], 8 C M01 - ;; - ADDSUB w0 = u0, v0 C M I - ld8 v0 = [vp], 8 C M01 - (p6) cmp.eq.or p7, p0 = LIM, w3 C M I - (p6) add w3 = INCR, w3 C M I - ;; - cmp.PRED p8, p0 = w0, u0 C M I - shrp x2 = w3, w2, 1 C I0 - ld8 u0 = [up], 8 C M01 - ADDSUB w1 = u1, v1 C M I - ;; - ld8 v1 = [vp], 8 C M01 - cmp.PRED p9, p0 = w1, u1 C M I - ld8 u1 = [up], 8 C M01 - (p7) cmp.eq.or p8, p0 = LIM, w0 C M I - (p7) add w0 = INCR, w0 C M I - br .LL01 C B - - -.Lb10: ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - shr.u n = n, 2 C I0 - ADDSUB w1 = r10, r11 C M I - (p15) br.dpnt .grt2 C B - ;; - - cmp.PRED p9, p0 = w1, r10 C M I - and r8 = 1, w1 C M I - ADDSUB w2 = u2, v2 C M I - ;; - cmp.PRED p6, p0 = w2, u2 C M I - ;; - (p9) cmp.eq.or p6, p0 = LIM, w2 C M I - (p9) add w2 = INCR, w2 C M I - ;; - shrp x1 = w2, w1, 1 C I0 - shr.u x2 = w2, 1 C I0 - br .Lcj2 C B - -.grt2: ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - ;; - ld8 v0 = [vp], 8 C M01 - ld8 u0 = [up], 8 C M01 - mov.i ar.lc = n C I0 - ;; - ld8 v1 = [vp], 8 C M01 - cmp.PRED p9, p0 = w1, r10 C M I - ld8 u1 = [up], 8 C M01 - and r8 = 1, w1 C M I - ;; - ADDSUB w2 = u2, v2 C M I - ld8 v2 = [vp], 8 C M01 - ;; - cmp.PRED p6, p0 = w2, u2 C M I - ld8 u2 = [up], 8 C M01 - ADDSUB w3 = u3, v3 C M I - br.cloop.dptk .grt6 C B - ;; - - cmp.PRED p7, p0 = w3, u3 C M I - (p9) cmp.eq.or p6, p0 = LIM, w2 C M I - (p9) add w2 = INCR, w2 C M I - ;; - shrp x1 = w2, w1, 1 C I0 - ADDSUB w0 = u0, v0 C M I - (p6) cmp.eq.or p7, p0 = LIM, w3 C M I - (p6) add w3 = INCR, w3 C M I - br .Lcj6 C B - -.grt6: ld8 v3 = [vp], 8 C M01 - cmp.PRED p7, p0 = w3, u3 C M I - ld8 u3 = [up], 8 C M01 - (p9) cmp.eq.or p6, p0 = LIM, w2 C M I - (p9) add w2 = INCR, w2 C M I - ;; - shrp x1 = w2, w1, 1 C I0 - ADDSUB w0 = u0, v0 C M I - ld8 v0 = [vp], 8 C M01 - (p6) cmp.eq.or p7, p0 = LIM, w3 C M I - (p6) add w3 = INCR, w3 C M I - br .LL10 C B - - -.Lb11: ld8 v1 = [vp], 8 C M01 - ld8 u1 = [up], 8 C M01 - shr.u n = n, 2 C I0 - ;; - ld8 v2 = [vp], 8 C M01 - ld8 u2 = [up], 8 C M01 - ADDSUB w0 = r10, r11 C M I - (p15) br.dpnt .grt3 C B - ;; - - cmp.PRED p8, p0 = w0, r10 C M I - ADDSUB w1 = u1, v1 C M I - and r8 = 1, w0 C M I - ;; - cmp.PRED p9, p0 = w1, u1 C M I - ;; - ADDSUB w2 = u2, v2 C M I - (p8) cmp.eq.or p9, p0 = LIM, w1 C M I - (p8) add w1 = INCR, w1 C M I - ;; - cmp.PRED p6, p0 = w2, u2 C M I - shrp x0 = w1, w0, 1 C I0 - ;; - (p9) cmp.eq.or p6, p0 = LIM, w2 C M I - (p9) add w2 = INCR, w2 C M I - br .Lcj3 C B - -.grt3: ld8 v3 = [vp], 8 C M01 - ld8 u3 = [up], 8 C M01 - ;; - ld8 v0 = [vp], 8 C M01 - mov.i ar.lc = n C I0 - cmp.PRED p8, p0 = w0, r10 C M I - ld8 u0 = [up], 8 C M01 - ADDSUB w1 = u1, v1 C M I - and r8 = 1, w0 C M I - ;; - ld8 v1 = [vp], 8 C M01 - cmp.PRED p9, p0 = w1, u1 C M I - ld8 u1 = [up], 8 C M01 - ;; - ADDSUB w2 = u2, v2 C M I - ld8 v2 = [vp], 8 C M01 - (p8) cmp.eq.or p9, p0 = LIM, w1 C M I - (p8) add w1 = INCR, w1 C M I - ;; - cmp.PRED p6, p0 = w2, u2 C M I - shrp x0 = w1, w0, 1 C I0 - ld8 u2 = [up], 8 C M01 - ADDSUB w3 = u3, v3 C M I - br.cloop.dptk .grt7 C B - ;; - - cmp.PRED p7, p0 = w3, u3 C M I - (p9) cmp.eq.or p6, p0 = LIM, w2 C M I - (p9) add w2 = INCR, w2 C M I - br .Lcj7 C B - -.grt7: ld8 v3 = [vp], 8 C M01 - cmp.PRED p7, p0 = w3, u3 C M I - ld8 u3 = [up], 8 C M01 - (p9) cmp.eq.or p6, p0 = LIM, w2 C M I - (p9) add w2 = INCR, w2 C M I - br .LL11 C B - - -C *** MAIN LOOP START *** - ALIGN(32) -.Loop: st8 [rp] = x3, 8 C M23 - ld8 v3 = [vp], 8 C M01 - cmp.PRED p7, p0 = w3, u3 C M I - ld8 u3 = [up], 8 C M01 - (p9) cmp.eq.or p6, p0 = LIM, w2 C M I - (p9) add w2 = INCR, w2 C M I - ;; -.LL11: st8 [rp] = x0, 8 C M23 - shrp x1 = w2, w1, 1 C I0 - ADDSUB w0 = u0, v0 C M I - ld8 v0 = [vp], 8 C M01 - (p6) cmp.eq.or p7, p0 = LIM, w3 C M I - (p6) add w3 = INCR, w3 C M I - ;; -.LL10: cmp.PRED p8, p0 = w0, u0 C M I - shrp x2 = w3, w2, 1 C I0 - nop.b 0 - ld8 u0 = [up], 8 C M01 - ADDSUB w1 = u1, v1 C M I - nop.b 0 - ;; - st8 [rp] = x1, 8 C M23 - ld8 v1 = [vp], 8 C M01 - cmp.PRED p9, p0 = w1, u1 C M I - ld8 u1 = [up], 8 C M01 - (p7) cmp.eq.or p8, p0 = LIM, w0 C M I - (p7) add w0 = INCR, w0 C M I - ;; -.LL01: st8 [rp] = x2, 8 C M23 - shrp x3 = w0, w3, 1 C I0 - ADDSUB w2 = u2, v2 C M I - ld8 v2 = [vp], 8 C M01 - (p8) cmp.eq.or p9, p0 = LIM, w1 C M I - (p8) add w1 = INCR, w1 C M I - ;; -.LL00: cmp.PRED p6, p0 = w2, u2 C M I - shrp x0 = w1, w0, 1 C I0 - nop.b 0 - ld8 u2 = [up], 8 C M01 - ADDSUB w3 = u3, v3 C M I - br.cloop.dptk .Loop C B - ;; -C *** MAIN LOOP END *** - -.Lskip: st8 [rp] = x3, 8 C M23 - cmp.PRED p7, p0 = w3, u3 C M I - (p9) cmp.eq.or p6, p0 = LIM, w2 C M I - (p9) add w2 = INCR, w2 C M I - ;; -.Lcj7: st8 [rp] = x0, 8 C M23 - shrp x1 = w2, w1, 1 C I0 - ADDSUB w0 = u0, v0 C M I - (p6) cmp.eq.or p7, p0 = LIM, w3 C M I - (p6) add w3 = INCR, w3 C M I - ;; -.Lcj6: cmp.PRED p8, p0 = w0, u0 C M I - shrp x2 = w3, w2, 1 C I0 - ADDSUB w1 = u1, v1 C M I - ;; - st8 [rp] = x1, 8 C M23 - cmp.PRED p9, p0 = w1, u1 C M I - (p7) cmp.eq.or p8, p0 = LIM, w0 C M I - (p7) add w0 = INCR, w0 C M I - ;; -.Lcj5: st8 [rp] = x2, 8 C M23 - shrp x3 = w0, w3, 1 C I0 - ADDSUB w2 = u2, v2 C M I - (p8) cmp.eq.or p9, p0 = LIM, w1 C M I - (p8) add w1 = INCR, w1 C M I - ;; -.Lcj4: cmp.PRED p6, p0 = w2, u2 C M I - shrp x0 = w1, w0, 1 C I0 - ;; - st8 [rp] = x3, 8 C M23 - (p9) cmp.eq.or p6, p0 = LIM, w2 C M I - (p9) add w2 = INCR, w2 C M I - ;; -.Lcj3: st8 [rp] = x0, 8 C M23 - shrp x1 = w2, w1, 1 C I0 - shr.u x2 = w2, 1 C I0 - ;; -.Lcj2: st8 [rp] = x1, 8 C M23 - (p6) dep x2 = -1, x2, 63, 1 C I0 - ;; -.Lcj1: st8 [rp] = x2 C M23 - mov.i ar.lc = r2 C I0 - br.ret.sptk.many b0 C B -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/sec_tabselect.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/sec_tabselect.asm deleted file mode 100644 index 9b11cde8c2f9227466cf5b1d6fd45a4fcaed7349..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/sec_tabselect.asm +++ /dev/null @@ -1,148 +0,0 @@ -dnl IA-64 mpn_sec_tabselect. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: ? -C Itanium 2: 2.5 - -C NOTES -C * Using software pipelining could trivially yield 2 c/l without unrolling, -C or 1+epsilon with unrolling. (This code was modelled after the powerpc64 -C code, for simplicity.) - -C mpn_sec_tabselect (mp_limb_t *rp, mp_limb_t *tp, mp_size_t n, mp_size_t nents, mp_size_t which) -define(`rp', `r32') -define(`tp', `r33') -define(`n', `r34') -define(`nents', `r35') -define(`which', `r36') - -define(`mask', `r8') - -define(`rp1', `r32') -define(`tp1', `r33') -define(`rp2', `r14') -define(`tp2', `r15') - -ASM_START() -PROLOGUE(mpn_sec_tabselect) - .prologue - .save ar.lc, r2 - .body -ifdef(`HAVE_ABI_32',` - {.mmi; addp4 rp = 0, rp C M I - addp4 tp = 0, tp C M I - zxt4 n = n C I -}{.mii; nop 0 - zxt4 nents = nents C I - zxt4 which = which C I - ;; -}') - {.mmi; add rp2 = 8, rp1 - add tp2 = 8, tp1 - add r6 = -2, n - ;; -}{.mmi; cmp.eq p10, p0 = 1, n - and r9 = 1, n C set cr0 for use in inner loop - shr.u r6 = r6, 1 C inner loop count - ;; -}{.mmi; cmp.eq p8, p0 = 0, r9 - sub which = nents, which - shl n = n, 3 - ;; -} -L(outer): - {.mmi; cmp.eq p6, p7 = which, nents C are we at the selected table entry? - nop 0 - mov ar.lc = r6 C I0 - ;; -}{.mmb; - (p6) mov mask = -1 - (p7) mov mask = 0 - (p8) br.dptk L(top) C branch to loop entry if n even - ;; -}{.mmi; ld8 r16 = [tp1], 8 - add tp2 = 8, tp2 - nop 0 - ;; -}{.mmi; ld8 r18 = [rp1] - and r16 = r16, mask - nop 0 - ;; -}{.mmi; andcm r18 = r18, mask - ;; - or r16 = r16, r18 - nop 0 - ;; -}{.mmb; st8 [rp1] = r16, 8 - add rp2 = 8, rp2 - (p10) br.dpnt L(end) -} - ALIGN(32) -L(top): - {.mmi; ld8 r16 = [tp1], 16 - ld8 r17 = [tp2], 16 - nop 0 - ;; -}{.mmi; ld8 r18 = [rp1] - and r16 = r16, mask - nop 0 -}{.mmi; ld8 r19 = [rp2] - and r17 = r17, mask - nop 0 - ;; -}{.mmi; andcm r18 = r18, mask - andcm r19 = r19, mask - nop 0 - ;; -}{.mmi; or r16 = r16, r18 - or r17 = r17, r19 - nop 0 - ;; -}{.mmb; st8 [rp1] = r16, 16 - st8 [rp2] = r17, 16 - br.cloop.dptk L(top) - ;; -} -L(end): - {.mmi; sub rp1 = rp1, n C move rp back to beginning - sub rp2 = rp2, n C move rp back to beginning - cmp.ne p9, p0 = 1, nents -}{.mmb; add nents = -1, nents - nop 0 - (p9) br.dptk L(outer) - ;; -}{.mib; nop 0 - nop 0 - br.ret.sptk.many b0 -} -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/sqr_diag_addlsh1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/sqr_diag_addlsh1.asm deleted file mode 100644 index 727f489b12776ba1cf6a60f73ceeba1160f28cd8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/sqr_diag_addlsh1.asm +++ /dev/null @@ -1,156 +0,0 @@ -dnl IA-64 mpn_sqr_diag_addlsh1 - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2010, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: ? -C Itanium 2: 2 Unrolling could bring it to 1.5 + epsilon - -C Exact performance table. The 2nd line is this code, the 3rd line is ctop- -C less code. In an assembly sqr_basecase, the ctop-full numbers will become a -C few cycles better since we can mitigate the many I0 instructions. -C -C 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -C - 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 Needs updating -C - 13 16 17 18 20 21 23 25 26 30 31 31 33 34 36 38 39 42 43 - -C We should keep in mind that this code takes linear time in a O(n^2) context -C and that it will only be used under SQR_TOOM2_THRESHOLD, which might become -C around 60. Keeping overhead down for smallish operands (< 10) is more -C important than optimal cycle counts. - -C TODO -C * Make sure we don't depend on uninitialised r-registers, f-registers, or -C * p-registers. -C * Optimise by doing first two loop iterations in function header. - -C INPUT PARAMETERS -define(`rp_param', `r32') define(`rp', `r14') C size: 2n -define(`tp_param', `r33') define(`tp', `r15') C size: 2n - 2 -define(`up_param', `r34') define(`up', `r31') C size: n -define(`n', `r35') - -ifdef(`HAVE_ABI_32',` - define(`ABI64', `') - define(`ABI32', `$1') -',` - define(`ABI64', `$1') - define(`ABI32', `') -') - -ASM_START() -PROLOGUE(mpn_sqr_diag_addlsh1) - - .prologue - .save ar.pfs, r2 - .save ar.lc, r3 - .body - - {.mii; alloc r2 = ar.pfs, 4,24,0,24 C M - mov r3 = ar.lc C I0 - ABI64(` nop 4711 ') - ABI32(` zxt4 n = n ') -}{.mmi; ABI64(` mov tp = tp_param ') C M I - ABI32(` addp4 tp = 0, tp_param') C M I - ABI64(` mov up = up_param ') C M I - ABI32(` addp4 up = 0, up_param') C M I - ABI64(` mov rp = rp_param ') C M I - ABI32(` addp4 rp = 0, rp_param') C M I - ;; -}{.mmi; ld8 r36 = [tp], 8 C M - add r20 = -2, n C M I - mov r9 = ar.ec C I0 - ;; -}{.mmi; ld8 r32 = [tp], 8 C M - mov r16 = 0 C M I - mov ar.ec = 7 C I0 - ;; -}{.mmi; nop 4711 - mov r44 = 0 C M I - mov ar.lc = r20 C I0 - ;; -}{.mii; mov r33 = 0 - mov r10 = pr C I0 - mov pr.rot = 0x30000 C I0 - ;; -} br.cexit.spnt.few.clr L(end) - -dnl *** MAIN LOOP START *** - ALIGN(32) -L(top): - {.mfi; (p18) ldf8 f33 = [up], 8 C M - (p20) xma.l f36 = f35, f35, f42 C F - (p41) cmpequc p50, p0 = -1, r44 C M I -}{.mfi; setfsig f40 = r16 C M23 - (p20) xma.hu f38 = f35, f35, f42 C F - (p23) add r50 = r41, r49 C M I - ;; -}{.mmi; (p16) ld8 r36 = [tp], 8 C M - (p23) cmpltu p40, p0 = r50, r41 C cyout hi M I - (p19) shrp r45 = r38, r35, 63 C non-critical I0 -}{.mmi; (p21) getfsig r39 = f39 C hi M2 - (p24) st8 [rp] = r51, 8 C hi M23 - (p41) add r44 = 1, r44 C M I - ;; -}{.mmi; (p16) ld8 r32 = [tp], 8 C M - (p50) cmpeqor p40, p0 = -1, r50 C cyout hi M I - (p17) shrp r16 = r33, r37, 63 C critical I0 -}{.mmi; (p21) getfsig r42 = f37 C lo M2 - (p23) st8 [rp] = r44, 8 C lo M23 - (p50) add r50 = 1, r50 C M I - ;; -} br.ctop.sptk.few.clr L(top) C B -dnl *** MAIN LOOP END *** - ;; -L(end): - {.mmi; nop 4711 - (p41) add r44 = 1, r44 C M I - shr.u r48 = r39, 63 C I0 - ;; -}{.mmi; st8 [rp] = r51, 8 C M23 - (p41) cmpequc p6, p0 = 0, r44 C M I - add r50 = r41, r48 C M I - ;; -}{.mmi; st8 [rp] = r44, 8 C M23 - (p6) add r50 = 1, r50 C M I - mov ar.lc = r3 C I0 - ;; -}{.mii; st8 [rp] = r50 C M23 - mov ar.ec = r9 C I0 - mov pr = r10 C I0 - ;; -}{.mib; nop 4711 - mov ar.pfs = r2 C I0 - br.ret.sptk.many b0 C B -} -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/submul_1.asm deleted file mode 100644 index cb2a5525b5ab4379d7717f0067a64da4a75bc96d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/ia64/submul_1.asm +++ /dev/null @@ -1,647 +0,0 @@ -dnl IA-64 mpn_submul_1 -- Multiply a limb vector with a limb and subtract the -dnl result from a second limb vector. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2000-2004 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C Itanium: 4.0 -C Itanium 2: 2.25 (alignment dependent, sometimes it seems to need 3 c/l) - -C TODO -C * Optimize feed-in and wind-down code, both for speed and code size. -C * Handle low limb input and results specially, using a common stf8 in the -C epilogue. -C * Delay r8, r10 initialization, put cmp-p6 in 1st bundle and br .Ldone in -C 2nd bundle. This will allow the bbb bundle to be one cycle earlier and -C save a cycle. - -C INPUT PARAMETERS -define(`rp', `r32') -define(`up', `r33') -define(`n', `r34') -define(`vl', `r35') - -ASM_START() -PROLOGUE(mpn_submul_1) - .prologue - .save ar.lc, r2 - .body - -ifdef(`HAVE_ABI_32', -` addp4 rp = 0, rp C M I - addp4 up = 0, up C M I - zxt4 n = n C I - ;; -') -{.mmi - mov r10 = rp C M I - mov r9 = up C M I - sub vl = r0, vl C M I negate vl -} -{.mmi - ldf8 f8 = [rp], 8 C M - ldf8 f7 = [up], 8 C M - add r19 = -1, n C M I n - 1 - ;; -} -{.mmi - cmp.eq p6, p0 = 0, vl C M I - mov r8 = 0 C M I zero cylimb - mov r2 = ar.lc C I0 -} -{.mmi - setf.sig f6 = vl C M2 M3 - and r14 = 3, n C M I - shr.u r19 = r19, 2 C I0 - ;; -} -{.mmb - nop 0 - cmp.eq p10, p0 = 0, r14 C M I - (p6) br.spnt .Ldone C B vl == 0 -} -{.mmi - cmp.eq p11, p0 = 2, r14 C M I - cmp.eq p12, p0 = 3, r14 C M I - mov ar.lc = r19 C I0 -} -{.bbb - (p10) br.dptk .Lb00 C B - (p11) br.dptk .Lb10 C B - (p12) br.dptk .Lb11 C B - ;; -} - -.Lb01: br.cloop.dptk .grt1 - - xma.l f39 = f7, f6, f8 - xma.hu f43 = f7, f6, f8 - ;; - getf.sig r27 = f39 C lo - getf.sig r31 = f43 C hi - ld8 r20 = [r9], 8 - br .Lcj1 - -.grt1: ldf8 f44 = [rp], 8 - ldf8 f32 = [up], 8 - ;; - ldf8 f45 = [rp], 8 - ldf8 f33 = [up], 8 - ;; - ldf8 f46 = [rp], 8 - xma.l f39 = f7, f6, f8 - ldf8 f34 = [up], 8 - xma.hu f43 = f7, f6, f8 - ;; - ldf8 f47 = [rp], 8 - xma.l f36 = f32, f6, f44 - ldf8 f35 = [up], 8 - xma.hu f40 = f32, f6, f44 - br.cloop.dptk .grt5 - ;; - - getf.sig r27 = f39 C lo - xma.l f37 = f33, f6, f45 - ld8 r20 = [r9], 8 - xma.hu f41 = f33, f6, f45 - ;; - getf.sig r31 = f43 C hi - getf.sig r24 = f36 C lo - xma.l f38 = f34, f6, f46 - ld8 r21 = [r9], 8 - xma.hu f42 = f34, f6, f46 - ;; - getf.sig r28 = f40 C hi - getf.sig r25 = f37 C lo - xma.l f39 = f35, f6, f47 - ld8 r22 = [r9], 8 - xma.hu f43 = f35, f6, f47 - ;; - getf.sig r29 = f41 C hi - getf.sig r26 = f38 C lo - ld8 r23 = [r9], 8 - br .Lcj5 - -.grt5: ldf8 f44 = [rp], 8 - ldf8 f32 = [up], 8 - ;; - getf.sig r27 = f39 C lo - xma.l f37 = f33, f6, f45 - ld8 r20 = [r9], 8 - xma.hu f41 = f33, f6, f45 - ;; - ldf8 f45 = [rp], 8 - getf.sig r31 = f43 C hi - ldf8 f33 = [up], 8 - ;; - getf.sig r24 = f36 C lo - xma.l f38 = f34, f6, f46 - ld8 r21 = [r9], 8 - xma.hu f42 = f34, f6, f46 - ;; - ldf8 f46 = [rp], 8 - getf.sig r28 = f40 C hi - ldf8 f34 = [up], 8 - ;; - getf.sig r25 = f37 C lo - xma.l f39 = f35, f6, f47 - ld8 r22 = [r9], 8 - xma.hu f43 = f35, f6, f47 - ;; - ldf8 f47 = [rp], 8 - getf.sig r29 = f41 C hi - ldf8 f35 = [up], 8 - ;; - getf.sig r26 = f38 C lo - xma.l f36 = f32, f6, f44 - ld8 r23 = [r9], 8 - xma.hu f40 = f32, f6, f44 - br.cloop.dptk .Loop - br .Lend - - -.Lb10: ldf8 f47 = [rp], 8 - ldf8 f35 = [up], 8 - br.cloop.dptk .grt2 - - xma.l f38 = f7, f6, f8 - xma.hu f42 = f7, f6, f8 - ;; - xma.l f39 = f35, f6, f47 - xma.hu f43 = f35, f6, f47 - ;; - getf.sig r26 = f38 C lo - getf.sig r30 = f42 C hi - ld8 r23 = [r9], 8 - ;; - getf.sig r27 = f39 C lo - getf.sig r31 = f43 C hi - ld8 r20 = [r9], 8 - br .Lcj2 - -.grt2: ldf8 f44 = [rp], 8 - ldf8 f32 = [up], 8 - ;; - ldf8 f45 = [rp], 8 - ldf8 f33 = [up], 8 - xma.l f38 = f7, f6, f8 - xma.hu f42 = f7, f6, f8 - ;; - ldf8 f46 = [rp], 8 - ldf8 f34 = [up], 8 - xma.l f39 = f35, f6, f47 - xma.hu f43 = f35, f6, f47 - ;; - ldf8 f47 = [rp], 8 - ldf8 f35 = [up], 8 - ;; - getf.sig r26 = f38 C lo - xma.l f36 = f32, f6, f44 - ld8 r23 = [r9], 8 - xma.hu f40 = f32, f6, f44 - br.cloop.dptk .grt6 - - getf.sig r30 = f42 C hi - ;; - getf.sig r27 = f39 C lo - xma.l f37 = f33, f6, f45 - ld8 r20 = [r9], 8 - xma.hu f41 = f33, f6, f45 - ;; - getf.sig r31 = f43 C hi - getf.sig r24 = f36 C lo - xma.l f38 = f34, f6, f46 - ld8 r21 = [r9], 8 - xma.hu f42 = f34, f6, f46 - ;; - getf.sig r28 = f40 C hi - getf.sig r25 = f37 C lo - xma.l f39 = f35, f6, f47 - ld8 r22 = [r9], 8 - xma.hu f43 = f35, f6, f47 - br .Lcj6 - -.grt6: ldf8 f44 = [rp], 8 - getf.sig r30 = f42 C hi - ldf8 f32 = [up], 8 - ;; - getf.sig r27 = f39 C lo - xma.l f37 = f33, f6, f45 - ld8 r20 = [r9], 8 - xma.hu f41 = f33, f6, f45 - ;; - ldf8 f45 = [rp], 8 - getf.sig r31 = f43 C hi - ldf8 f33 = [up], 8 - ;; - getf.sig r24 = f36 C lo - xma.l f38 = f34, f6, f46 - ld8 r21 = [r9], 8 - xma.hu f42 = f34, f6, f46 - ;; - ldf8 f46 = [rp], 8 - getf.sig r28 = f40 C hi - ldf8 f34 = [up], 8 - ;; - getf.sig r25 = f37 C lo - xma.l f39 = f35, f6, f47 - ld8 r22 = [r9], 8 - xma.hu f43 = f35, f6, f47 - br .LL10 - - -.Lb11: ldf8 f46 = [rp], 8 - ldf8 f34 = [up], 8 - ;; - ldf8 f47 = [rp], 8 - ldf8 f35 = [up], 8 - br.cloop.dptk .grt3 - - xma.l f37 = f7, f6, f8 - xma.hu f41 = f7, f6, f8 - ;; - xma.l f38 = f34, f6, f46 - xma.hu f42 = f34, f6, f46 - ;; - getf.sig r25 = f37 C lo - xma.l f39 = f35, f6, f47 - xma.hu f43 = f35, f6, f47 - ;; - getf.sig r29 = f41 C hi - ld8 r22 = [r9], 8 - ;; - getf.sig r26 = f38 C lo - getf.sig r30 = f42 C hi - ld8 r23 = [r9], 8 - ;; - getf.sig r27 = f39 C lo - getf.sig r31 = f43 C hi - ld8 r20 = [r9], 8 - br .Lcj3 - -.grt3: ldf8 f44 = [rp], 8 - xma.l f37 = f7, f6, f8 - ldf8 f32 = [up], 8 - xma.hu f41 = f7, f6, f8 - ;; - ldf8 f45 = [rp], 8 - xma.l f38 = f34, f6, f46 - ldf8 f33 = [up], 8 - xma.hu f42 = f34, f6, f46 - ;; - ldf8 f46 = [rp], 8 - ldf8 f34 = [up], 8 - ;; - getf.sig r25 = f37 C lo - xma.l f39 = f35, f6, f47 - ld8 r22 = [r9], 8 - xma.hu f43 = f35, f6, f47 - ;; - ldf8 f47 = [rp], 8 - getf.sig r29 = f41 C hi - ldf8 f35 = [up], 8 - ;; - getf.sig r26 = f38 C lo - xma.l f36 = f32, f6, f44 - ld8 r23 = [r9], 8 - xma.hu f40 = f32, f6, f44 - br.cloop.dptk .grt7 - ;; - - getf.sig r30 = f42 C hi - getf.sig r27 = f39 C lo - xma.l f37 = f33, f6, f45 - ld8 r20 = [r9], 8 - xma.hu f41 = f33, f6, f45 - ;; - getf.sig r31 = f43 C hi - getf.sig r24 = f36 C lo - xma.l f38 = f34, f6, f46 - ld8 r21 = [r9], 8 - xma.hu f42 = f34, f6, f46 - br .Lcj7 - -.grt7: ldf8 f44 = [rp], 8 - getf.sig r30 = f42 C hi - ldf8 f32 = [up], 8 - ;; - getf.sig r27 = f39 C lo - xma.l f37 = f33, f6, f45 - ld8 r20 = [r9], 8 - xma.hu f41 = f33, f6, f45 - ;; - ldf8 f45 = [rp], 8 - getf.sig r31 = f43 C hi - ldf8 f33 = [up], 8 - ;; - getf.sig r24 = f36 C lo - xma.l f38 = f34, f6, f46 - ld8 r21 = [r9], 8 - xma.hu f42 = f34, f6, f46 - br .LL11 - - -.Lb00: ldf8 f45 = [rp], 8 - ldf8 f33 = [up], 8 - ;; - ldf8 f46 = [rp], 8 - ldf8 f34 = [up], 8 - ;; - ldf8 f47 = [rp], 8 - xma.l f36 = f7, f6, f8 - ldf8 f35 = [up], 8 - xma.hu f40 = f7, f6, f8 - br.cloop.dptk .grt4 - - xma.l f37 = f33, f6, f45 - xma.hu f41 = f33, f6, f45 - ;; - getf.sig r24 = f36 C lo - xma.l f38 = f34, f6, f46 - ld8 r21 = [r9], 8 - xma.hu f42 = f34, f6, f46 - ;; - getf.sig r28 = f40 C hi - xma.l f39 = f35, f6, f47 - getf.sig r25 = f37 C lo - ld8 r22 = [r9], 8 - xma.hu f43 = f35, f6, f47 - ;; - getf.sig r29 = f41 C hi - getf.sig r26 = f38 C lo - ld8 r23 = [r9], 8 - ;; - getf.sig r30 = f42 C hi - getf.sig r27 = f39 C lo - ld8 r20 = [r9], 8 - br .Lcj4 - -.grt4: ldf8 f44 = [rp], 8 - xma.l f37 = f33, f6, f45 - ldf8 f32 = [up], 8 - xma.hu f41 = f33, f6, f45 - ;; - ldf8 f45 = [rp], 8 - ldf8 f33 = [up], 8 - xma.l f38 = f34, f6, f46 - getf.sig r24 = f36 C lo - ld8 r21 = [r9], 8 - xma.hu f42 = f34, f6, f46 - ;; - ldf8 f46 = [rp], 8 - getf.sig r28 = f40 C hi - ldf8 f34 = [up], 8 - xma.l f39 = f35, f6, f47 - getf.sig r25 = f37 C lo - ld8 r22 = [r9], 8 - xma.hu f43 = f35, f6, f47 - ;; - ldf8 f47 = [rp], 8 - getf.sig r29 = f41 C hi - ldf8 f35 = [up], 8 - ;; - getf.sig r26 = f38 C lo - xma.l f36 = f32, f6, f44 - ld8 r23 = [r9], 8 - xma.hu f40 = f32, f6, f44 - br.cloop.dptk .grt8 - ;; - - getf.sig r30 = f42 C hi - getf.sig r27 = f39 C lo - xma.l f37 = f33, f6, f45 - ld8 r20 = [r9], 8 - xma.hu f41 = f33, f6, f45 - br .Lcj8 - -.grt8: ldf8 f44 = [rp], 8 - getf.sig r30 = f42 C hi - ldf8 f32 = [up], 8 - ;; - getf.sig r27 = f39 C lo - xma.l f37 = f33, f6, f45 - ld8 r20 = [r9], 8 - xma.hu f41 = f33, f6, f45 - br .LL00 - - ALIGN(32) -.Loop: -{.mmi - ldf8 f44 = [rp], 8 - cmp.ltu p6, p0 = r27, r8 C lo cmp - sub r14 = r27, r8 C lo sub -} -{.mmi - getf.sig r30 = f42 C hi - ldf8 f32 = [up], 8 - sub r8 = r20, r31 C hi sub - ;; C 01 -} -{.mmf - getf.sig r27 = f39 C lo - st8 [r10] = r14, 8 - xma.l f37 = f33, f6, f45 -} -{.mfi - ld8 r20 = [r9], 8 - xma.hu f41 = f33, f6, f45 - (p6) add r8 = 1, r8 - ;; C 02 -} -{.mmi -.LL00: ldf8 f45 = [rp], 8 - cmp.ltu p6, p0 = r24, r8 - sub r14 = r24, r8 -} -{.mmi - getf.sig r31 = f43 C hi - ldf8 f33 = [up], 8 - sub r8 = r21, r28 - ;; C 03 -} -{.mmf - getf.sig r24 = f36 C lo - st8 [r10] = r14, 8 - xma.l f38 = f34, f6, f46 -} -{.mfi - ld8 r21 = [r9], 8 - xma.hu f42 = f34, f6, f46 - (p6) add r8 = 1, r8 - ;; C 04 -} -{.mmi -.LL11: ldf8 f46 = [rp], 8 - cmp.ltu p6, p0 = r25, r8 - sub r14 = r25, r8 -} -{.mmi - getf.sig r28 = f40 C hi - ldf8 f34 = [up], 8 - sub r8 = r22, r29 - ;; C 05 -} -{.mmf - getf.sig r25 = f37 C lo - st8 [r10] = r14, 8 - xma.l f39 = f35, f6, f47 -} -{.mfi - ld8 r22 = [r9], 8 - xma.hu f43 = f35, f6, f47 - (p6) add r8 = 1, r8 - ;; C 06 -} -{.mmi -.LL10: ldf8 f47 = [rp], 8 - cmp.ltu p6, p0 = r26, r8 - sub r14 = r26, r8 -} -{.mmi - getf.sig r29 = f41 C hi - ldf8 f35 = [up], 8 - sub r8 = r23, r30 - ;; C 07 -} -{.mmf - getf.sig r26 = f38 C lo - st8 [r10] = r14, 8 - xma.l f36 = f32, f6, f44 -} -{.mfi - ld8 r23 = [r9], 8 - xma.hu f40 = f32, f6, f44 - (p6) add r8 = 1, r8 -} - br.cloop.dptk .Loop - ;; - -.Lend: - cmp.ltu p6, p0 = r27, r8 - sub r14 = r27, r8 - getf.sig r30 = f42 - sub r8 = r20, r31 - ;; - getf.sig r27 = f39 - st8 [r10] = r14, 8 - xma.l f37 = f33, f6, f45 - ld8 r20 = [r9], 8 - xma.hu f41 = f33, f6, f45 - (p6) add r8 = 1, r8 - ;; -.Lcj8: - cmp.ltu p6, p0 = r24, r8 - sub r14 = r24, r8 - getf.sig r31 = f43 - sub r8 = r21, r28 - ;; - getf.sig r24 = f36 - st8 [r10] = r14, 8 - xma.l f38 = f34, f6, f46 - ld8 r21 = [r9], 8 - xma.hu f42 = f34, f6, f46 - (p6) add r8 = 1, r8 - ;; -.Lcj7: - cmp.ltu p6, p0 = r25, r8 - sub r14 = r25, r8 - getf.sig r28 = f40 - sub r8 = r22, r29 - ;; - getf.sig r25 = f37 - st8 [r10] = r14, 8 - xma.l f39 = f35, f6, f47 - ld8 r22 = [r9], 8 - xma.hu f43 = f35, f6, f47 - (p6) add r8 = 1, r8 - ;; -.Lcj6: - cmp.ltu p6, p0 = r26, r8 - sub r14 = r26, r8 - getf.sig r29 = f41 - sub r8 = r23, r30 - ;; - getf.sig r26 = f38 - st8 [r10] = r14, 8 - ld8 r23 = [r9], 8 - (p6) add r8 = 1, r8 - ;; -.Lcj5: - cmp.ltu p6, p0 = r27, r8 - sub r14 = r27, r8 - getf.sig r30 = f42 - sub r8 = r20, r31 - ;; - getf.sig r27 = f39 - st8 [r10] = r14, 8 - ld8 r20 = [r9], 8 - (p6) add r8 = 1, r8 - ;; -.Lcj4: - cmp.ltu p6, p0 = r24, r8 - sub r14 = r24, r8 - getf.sig r31 = f43 - sub r8 = r21, r28 - ;; - st8 [r10] = r14, 8 - (p6) add r8 = 1, r8 - ;; -.Lcj3: - cmp.ltu p6, p0 = r25, r8 - sub r14 = r25, r8 - sub r8 = r22, r29 - ;; - st8 [r10] = r14, 8 - (p6) add r8 = 1, r8 - ;; -.Lcj2: - cmp.ltu p6, p0 = r26, r8 - sub r14 = r26, r8 - sub r8 = r23, r30 - ;; - st8 [r10] = r14, 8 - (p6) add r8 = 1, r8 - ;; -.Lcj1: - cmp.ltu p6, p0 = r27, r8 - sub r14 = r27, r8 - sub r8 = r20, r31 - ;; - st8 [r10] = r14, 8 - mov ar.lc = r2 - (p6) add r8 = 1, r8 - br.ret.sptk.many b0 -.Ldone: mov ar.lc = r2 - br.ret.sptk.many b0 -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/lisp/gmpasm-mode.el b/src/plugins/e-acsl/contrib/libgmp/mpn/lisp/gmpasm-mode.el deleted file mode 100644 index 06b74bd6ce7eca120706f33a8f4fd5fd77f51b07..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/lisp/gmpasm-mode.el +++ /dev/null @@ -1,385 +0,0 @@ -;;; gmpasm-mode.el -- GNU MP asm and m4 editing mode. - - -;; Copyright 1999-2002 Free Software Foundation, Inc. - -;; This file is part of the GNU MP Library. -;; -;; The GNU MP Library is free software; you can redistribute it and/or modify -;; it under the terms of either: -;; -;; * the GNU Lesser General Public License as published by the Free -;; Software Foundation; either version 3 of the License, or (at your -;; option) any later version. -;; -;; or -;; -;; * the GNU General Public License as published by the Free Software -;; Foundation; either version 2 of the License, or (at your option) any -;; later version. -;; -;; or both in parallel, as here. -;; -;; The GNU MP Library is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -;; for more details. -;; -;; You should have received copies of the GNU General Public License and the -;; GNU Lesser General Public License along with the GNU MP Library. If not, -;; see https://www.gnu.org/licenses/. - - -;;; Commentary: -;; -;; gmpasm-mode is a major mode for editing m4 processed assembler code and -;; m4 macro files in GMP. It's similar to m4-mode, but has a number of -;; settings better suited to GMP. -;; -;; -;; Install -;; ------- -;; -;; To make M-x gmpasm-mode available, put gmpasm-mode.el somewhere in your -;; load-path and the following in your .emacs -;; -;; (autoload 'gmpasm-mode "gmpasm-mode" nil t) -;; -;; To use gmpasm-mode automatically on all .asm and .m4 files, put the -;; following in your .emacs -;; -;; (add-to-list 'auto-mode-alist '("\\.asm\\'" . gmpasm-mode)) -;; (add-to-list 'auto-mode-alist '("\\.m4\\'" . gmpasm-mode)) -;; -;; To have gmpasm-mode only on gmp files, try instead something like the -;; following, which uses it only in a directory starting with "gmp", or a -;; sub-directory of such. -;; -;; (add-to-list 'auto-mode-alist -;; '("/gmp.*/.*\\.\\(asm\\|m4\\)\\'" . gmpasm-mode)) -;; -;; Byte compiling will slightly speed up loading. If you want a docstring -;; in the autoload you can use M-x update-file-autoloads if you set it up -;; right. -;; -;; -;; Emacsen -;; ------- -;; -;; GNU Emacs 20.x, 21.x and XEmacs 20.x all work well. GNU Emacs 19.x -;; should work if replacements for the various 20.x-isms are available, -;; though comment-region with "C" doesn't do the right thing. - - -;;; Code: - -(defgroup gmpasm nil - "GNU MP m4 and asm editing." - :prefix "gmpasm-" - :group 'languages) - -(defcustom gmpasm-mode-hook nil - "*Hook called by `gmpasm-mode'." - :type 'hook - :group 'gmpasm) - -(defcustom gmpasm-comment-start-regexp "\\([#;!@*|C]\\|//\\)" - "*Regexp matching possible comment styles. -See `gmpasm-mode' docstring for how this is used. - -Commenting styles within GMP include - # - alpha, i386, i960, vax, traditional unix - ; - a29k, clipper, hppa, m88k, ppc - ! - sh, sparc, z8000 - | - m68k - @ - arm - * - cray - C - GMP m4, see mpn/asm-defs.m4 - // - ia64" - :type 'regexp - :group 'gmpasm) - - -(defun gmpasm-add-to-list-second (list-var element) - "(gmpasm-add-to-list-second LIST-VAR ELEMENT) - -Add ELEMENT to LIST-VAR as the second element in the list, if it isn't -already in the list. If LIST-VAR is nil, then ELEMENT is just added as the -sole element in the list. - -This is like `add-to-list', but it puts the new value second in the list. - -The first cons cell is copied rather than changed in-place, so references to -the list elsewhere won't be affected." - - (if (member element (symbol-value list-var)) - (symbol-value list-var) - (set list-var - (if (symbol-value list-var) - (cons (car (symbol-value list-var)) - (cons element - (cdr (symbol-value list-var)))) - (list element))))) - - -(defun gmpasm-remove-from-list (list-var element) - "(gmpasm-remove-from-list LIST-VAR ELEMENT) - -Remove ELEMENT from LIST-VAR, using `copy-sequence' and `delete'. -This is vaguely like `add-to-list', but the element is removed from the list. -The list is copied rather than changed in-place, so references to it elsewhere -aren't affected." - -;; Only the portion of the list up to the removed element needs to be -;; copied, but there's no need to bother arranging that, since this function -;; is only used for a couple of initializations. - - (set list-var (delete element (copy-sequence (symbol-value list-var))))) - - -(defvar gmpasm-mode-map - (let ((map (make-sparse-keymap))) - - ;; assembler and dnl commenting - (define-key map "\C-c\C-c" 'comment-region) - (define-key map "\C-c\C-d" 'gmpasm-comment-region-dnl) - - ;; kill an M-x compile, since it's not hard to put m4 into an infinite - ;; loop - (define-key map "\C-c\C-k" 'kill-compilation) - - map) - "Keymap for `gmpasm-mode'.") - - -(defvar gmpasm-mode-syntax-table - (let ((table (make-syntax-table))) - ;; underscore left as a symbol char, like C mode - - ;; m4 quotes - (modify-syntax-entry ?` "('" table) - (modify-syntax-entry ?' ")`" table) - - table) - "Syntax table used in `gmpasm-mode'. - -'#' and '\n' aren't set as comment syntax. In m4 these are a comment -outside quotes, but not inside. Omitting a syntax entry ensures that when -inside quotes emacs treats parentheses and apostrophes the same way that m4 -does. When outside quotes this is not quite right, but having it right when -nesting expressions is more important. - -'*', '!' or '|' aren't setup as comment syntax either, on CPUs which use -these for comments. The GMP macro setups don't set them in m4 changecom(), -since that prevents them being used in eval() expressions, and on that basis -they don't change the way quotes and parentheses are treated by m4 and -should be treated by emacs.") - - -(defvar gmpasm-font-lock-keywords - (eval-when-compile - (list - (cons - (concat - "\\b" - (regexp-opt - '("deflit" "defreg" "defframe" "defframe_pushl" - "define_not_for_expansion" - "m4_error" "m4_warning" - "ASM_START" "ASM_END" - "PROLOGUE" "PROLOGUE_GP" "MULFUNC_PROLOGUE" "EPILOGUE" - "DATASTART" "DATAEND" - "forloop" - "TEXT" "DATA" "ALIGN" "W32" "FLOAT64" - "builtin" "changecom" "changequote" "changeword" "debugfile" - "debugmode" "decr" "define" "defn" "divert" "divnum" "dumpdef" - "errprint" "esyscmd" "eval" "__file__" "format" "gnu" "ifdef" - "ifelse" "include" "incr" "index" "indir" "len" "__line__" - "m4exit" "m4wrap" "maketemp" "patsubst" "popdef" "pushdef" - "regexp" "shift" "sinclude" "substr" "syscmd" "sysval" - "traceoff" "traceon" "translit" "undefine" "undivert" "unix") - t) - "\\b") 'font-lock-keyword-face))) - - "`font-lock-keywords' for `gmpasm-mode'. - -The keywords are m4 builtins and some of the GMP macros used in asm files. -L doesn't look good fontified, so it's omitted. - -The right assembler comment regexp is added dynamically buffer-local (with -dnl too).") - - -;; Initialized if gmpasm-mode finds filladapt loaded. -(defvar gmpasm-filladapt-token-table nil - "Filladapt token table used in `gmpasm-mode'.") -(defvar gmpasm-filladapt-token-match-table nil - "Filladapt token match table used in `gmpasm-mode'.") -(defvar gmpasm-filladapt-token-conversion-table nil - "Filladapt token conversion table used in `gmpasm-mode'.") - - -;;;###autoload -(defun gmpasm-mode () - "A major mode for editing GNU MP asm and m4 files. - -\\{gmpasm-mode-map} -`comment-start' and `comment-end' are set buffer-local to assembler -commenting appropriate for the CPU by looking for something matching -`gmpasm-comment-start-regexp' at the start of a line, or \"#\" is used if -there's no match (if \"#\" isn't what you want, type in a desired comment -and do \\[gmpasm-mode] to reinitialize). - -`adaptive-fill-regexp' is set buffer-local to the standard regexp with -`comment-start' and dnl added. If filladapt.el has been loaded it similarly -gets `comment-start' and dnl added as buffer-local fill prefixes. - -Font locking has the m4 builtins, some of the GMP macros, m4 dnl commenting, -and assembler commenting (based on the `comment-start' determined). - -Note that `gmpasm-comment-start-regexp' is only matched as a whole word, so -the `C' in it is only matched as a whole word, not on something that happens -to start with `C'. Also it's only the particular `comment-start' determined -that's added for filling etc, not the whole `gmpasm-comment-start-regexp'. - -`gmpasm-mode-hook' is run after initializations are complete." - - (interactive) - (kill-all-local-variables) - (setq major-mode 'gmpasm-mode - mode-name "gmpasm") - (use-local-map gmpasm-mode-map) - (set-syntax-table gmpasm-mode-syntax-table) - (setq fill-column 76) - - ;; Short instructions might fit with 32, but anything with labels or - ;; expressions soon needs the comments pushed out to column 40. - (setq comment-column 40) - - ;; Don't want to find out the hard way which dumb assemblers don't like a - ;; missing final newline. - (set (make-local-variable 'require-final-newline) t) - - ;; The first match of gmpasm-comment-start-regexp at the start of a line - ;; determines comment-start, or "#" if no match. - (set (make-local-variable 'comment-start) - (save-excursion - (goto-char (point-min)) - (if (re-search-forward - (concat "^\\(" gmpasm-comment-start-regexp "\\)\\(\\s-\\|$\\)") - nil t) - (match-string 1) - "#"))) - (set (make-local-variable 'comment-end) "") - - ;; If comment-start ends in an alphanumeric then \b is used to match it - ;; only as a separate word. The test is for an alphanumeric rather than - ;; \w since we might try # or ! as \w characters but without wanting \b on - ;; them. - (let ((comment-regexp - (concat (regexp-quote comment-start) - (if (string-match "[a-zA-Z0-9]\\'" comment-start) "\\b")))) - - ;; Whitespace is required before a comment-start so m4 $# doesn't match - ;; when comment-start is "#". - (set (make-local-variable 'comment-start-skip) - (concat "\\(^\\|\\s-\\)\\(\\<dnl\\>\\|" comment-regexp "\\)[ \t]*")) - - ;; Comment fontification based on comment-start, and always with dnl. - ;; Same treatment of a space before "#" as in comment-start-skip, but - ;; don't fontify that space. - (add-to-list (make-local-variable 'gmpasm-font-lock-keywords) - (list (concat "\\(^\\|\\s-\\)\\(\\(\\<dnl\\>\\|" - comment-regexp - "\\).*$\\)") - 2 'font-lock-comment-face)) - - (set (make-local-variable 'font-lock-defaults) - '(gmpasm-font-lock-keywords - t ; no syntactic fontification (of strings etc) - nil ; no case-fold - ((?_ . "w")) ; _ part of a word while fontifying - )) - - ;; Paragraphs are separated by blank lines, or lines with only dnl or - ;; comment-start. - (set (make-local-variable 'paragraph-separate) - (concat "[ \t\f]*\\(\\(" comment-regexp "\\|dnl\\)[ \t]*\\)*$")) - (set (make-local-variable 'paragraph-start) - (concat "\f\\|" paragraph-separate)) - - ;; Some sort of "def...(" m4 define, possibly with ` for quoting. - ;; Could do something with PROLOGUE here, but in GMP the filename is - ;; enough, it's not normally necessary to say the function name. - (set (make-local-variable 'add-log-current-defun-header-regexp) - "^def[a-z0-9_]+(`?\\([a-zA-Z0-9_]+\\)") - - ;; Adaptive fill gets dnl and comment-start as comment style prefixes on - ;; top of the standard regexp (which has # and ; already actually). - (set (make-local-variable 'adaptive-fill-regexp) - (concat "[ \t]*\\(\\(" - comment-regexp - "\\|dnl\\|[-|#;>*]+\\|(?[0-9]+[.)]\\)[ \t]*\\)*")) - (set (make-local-variable 'adaptive-fill-first-line-regexp) - "\\`\\([ \t]*dnl\\)?[ \t]*\\'") - - (when (fboundp 'filladapt-mode) - (unless gmpasm-filladapt-token-table - (setq gmpasm-filladapt-token-table - filladapt-token-table) - (setq gmpasm-filladapt-token-match-table - filladapt-token-match-table) - (setq gmpasm-filladapt-token-conversion-table - filladapt-token-conversion-table) - - ;; Numbered bullet points like "2.1" get matched at the start of a - ;; line when it's really something like "2.1 cycles/limb", so remove - ;; this from the list. The regexp for "1.", "2." etc is left - ;; though. - (gmpasm-remove-from-list 'gmpasm-filladapt-token-table - '("[0-9]+\\(\\.[0-9]+\\)+[ \t]" - bullet)) - - ;; "%" as a comment prefix interferes with register names on some - ;; CPUs, like %eax on x86, so remove this. - (gmpasm-remove-from-list 'gmpasm-filladapt-token-table - '("%+" postscript-comment)) - - (add-to-list 'gmpasm-filladapt-token-match-table - '(gmpasm-comment gmpasm-comment)) - (add-to-list 'gmpasm-filladapt-token-conversion-table - '(gmpasm-comment . exact))) - - (set (make-local-variable 'filladapt-token-table) - gmpasm-filladapt-token-table) - (set (make-local-variable 'filladapt-token-match-table) - gmpasm-filladapt-token-match-table) - (set (make-local-variable 'filladapt-token-conversion-table) - gmpasm-filladapt-token-conversion-table) - - ;; Add dnl and comment-start as fill prefixes. - ;; Comments in filladapt.el say filladapt-token-table must begin - ;; with ("^" beginning-of-line), so put our addition second. - (gmpasm-add-to-list-second 'filladapt-token-table - (list (concat "dnl[ \t]\\|" comment-regexp) - 'gmpasm-comment)))) - - (run-hooks 'gmpasm-mode-hook)) - - -(defun gmpasm-comment-region-dnl (beg end &optional arg) - "(gmpasm-comment-region-dnl BEG END &optional ARG) - -Comment or uncomment each line in the region using `dnl'. -With \\[universal-argument] prefix arg, uncomment each line in region. -This is `comment-region', but using \"dnl\"." - - (interactive "r\nP") - (let ((comment-start "dnl") - (comment-end "")) - (comment-region beg end arg))) - - -(provide 'gmpasm-mode) - -;;; gmpasm-mode.el ends here diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m4-ccas b/src/plugins/e-acsl/contrib/libgmp/mpn/m4-ccas deleted file mode 100755 index 16d80c6f51bdba6ee1c0500eb6c78243feca21ab..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m4-ccas +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/sh -# -# A helper script for Makeasm.am .asm.lo rule. - -# Copyright 2001 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - - -# Usage: m4-ccas --m4=M4 CC ... file.asm ... -# -# Process file.asm with the given M4 plus any -D arguments, then -# assemble with the given CC plus all arguments. -# -# The M4 command must be in a single --m4= argument, and will be split -# on whitespace. When CC is invoked file.asm is replaced with a -# temporary .s file which is the M4 output. -# -# To allow parallel builds, the temp file name is based on the .asm -# file name, which will be the output object filename for all uses we -# put this script to. - -M4= -CC= -DEFS= -ASM= -SEEN_O=no - -for i in "$@"; do - case $i in - --m4=*) - M4=`echo "$i" | sed 's/^--m4=//'` - ;; - -D*) - DEFS="$DEFS $i" - CC="$CC $i" - ;; - *.asm) - if test -n "$ASM"; then - echo "Only one .asm file permitted" - exit 1 - fi - BASENAME=`echo "$i" | sed -e 's/\.asm$//' -e 's/^.*[\\/:]//'` - TMP=tmp-$BASENAME.s - ASM=$i - CC="$CC $TMP" - ;; - -o) - SEEN_O=yes - CC="$CC $i" - ;; - *) - CC="$CC $i" - ;; - esac -done - -if test -z "$M4"; then - echo "No --m4 specified" - exit 1 -fi - -if test -z "$ASM"; then - echo "No .asm specified" - exit 1 -fi - -# Libtool adds it's own -o when sending output to .libs/foo.o, but not -# when just wanting foo.o in the current directory. We need an -# explicit -o in both cases since we're assembling tmp-foo.s. -# -if test $SEEN_O = no; then - CC="$CC -o $BASENAME.o" -fi - -echo "$M4 $DEFS $ASM >$TMP" -$M4 $DEFS $ASM >$TMP || exit - -echo "$CC" -$CC || exit - -# Comment this out to preserve .s intermediates -rm -f $TMP diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/README b/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/README deleted file mode 100644 index 5261564df2bd82ebd160f882c476370de8da825f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/README +++ /dev/null @@ -1,138 +0,0 @@ -Copyright 2001, 2003, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - - M68K MPN SUBROUTINES - - -This directory contains mpn functions for various m68k family chips. - - -CODE ORGANIZATION - - m68k m68000, m68010, m68060 - m68k/mc68020 m68020, m68030, m68040, and CPU32 - - -The m5200 "coldfire", which is m68000 less a few instructions, currently has -no assembler code support. - - -STATUS - -The code herein is old and poorly maintained. If somebody really cared, it -could be optimized substantially. For example, - -* mpn_add_n and mpn_sub_n could, with more unrolling be improved from 6 to - close to 4 c/l (on m68040). - -* The multiplication loops could be sped up by using the FPU. - -* mpn_lshift by 31 should use the special-case mpn_rshift by 1 code, and - vice versa mpn_rshift by 31 use the special lshift by 1, when operand - overlap permits. - -* On 68000, mpn_mul_1, mpn_addmul_1 and mpn_submul_1 could check for a - 16-bit multiplier and use two multiplies per limb, not four. - - Similarly various other _1 operations like mpn_mod_1, mpn_divrem_1, - mpn_divexact_1, mpn_modexact_1c_odd. - -* On 68000, mpn_lshift and mpn_rshift could use a roll and mask instead of - lsrl and lsll. This promises to be a speedup, effectively trading a 6+2*n - shift for one or two 4 cycle masks. Suggested by Jean-Charles Meyrignac. - -* config.guess detects 68000, 68010, CPU32 and 68020 by running some code, - but relies on system information for 030, 040 and 060. Can they be - identified by running some code? Currently this only makes a difference - to the compiler options selected, since we have no specific asm code for - those chips. - -One novel idea for 68000 would be to use a 16-bit limb instead of 32-bits. -This would suit the native 16x16 multiply, but might make it difficult to -get full value from the native 32x32 add/sub/etc. This would be an ABI -option, and would select "__GMP_SHORT_LIMB" in gmp.h. - -Naturally an entirely new set of asm subroutines would be needed for a -16-bit limb. Also there's various places in the C code assuming limb>=long, -which would need to be updated, eg. mpz_set_ui. Some of the nails changes -may have helped cover some of this. - - -ASM FILES - -The .asm files are put through m4 for macro processing, and with the help of -configure give either MIT or Motorola syntax. The generic mpn/asm-defs.m4 -is used, together with mpn/m68k/m68k-defs.m4. See comments in those files. - -Not all possible syntax variations are covered. GCC config/m68k for -instance has things like $ for immediates on CRDS or reversed cmp order for -AT&T SGS. These could probably be handled if anyone really needs it. - - -CALLING CONVENTIONS - -The SVR4 standard has an int of 32 bits, and all parameters 32-bit aligned -on the stack. - -PalmOS and perhaps various embedded systems intended for 68000 however use -an int of 16 bits and parameters only 16-bit aligned on the stack. This is -generated by "gcc -mshort" (and is the default for the PalmOS gcc port, we -believe). - -The asm files adapt to these two ABIs by checking sizeof(unsigned), coming -through config.m4 as SIZEOF_UNSIGNED. Only mpn_lshift and mpn_rshift are -affected, all other routines take longs and pointers, which are 32-bits in -both cases. - -Strictly speaking the size of an int doesn't determine the stack padding -convention. But if int is 16 bits then we can definitely say the host -system is not SVR4, and therefore may as well assume we're in 16-bit stack -alignment. - - -REFERENCES - -"Motorola M68000 Family Programmer's Reference Manual", available online, - - http://e-www.motorola.com/brdata/PDFDB/docs/M68000PM.pdf - -"System V Application Binary Interface: Motorola 68000 Processor Family -Supplement", AT&T, 1990, ISBN 0-13-877553-6. Has details of calling -conventions and ELF style PIC coding. - - - ----------------- -Local variables: -mode: text -fill-column: 76 -End: diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/aors_n.asm deleted file mode 100644 index f7d379ec013a5ba1128c4327e7f380f569e7df67..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/aors_n.asm +++ /dev/null @@ -1,99 +0,0 @@ -dnl mc68020 mpn_add_n, mpn_sub_n -- add or subtract limb vectors - -dnl Copyright 1992, 1994, 1996, 1999-2003, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 68040: 6 - -ifdef(`OPERATION_add_n',` - define(M4_inst, addxl) - define(M4_function_n, mpn_add_n) -',`ifdef(`OPERATION_sub_n',` - define(M4_inst, subxl) - define(M4_function_n, mpn_sub_n) -', -`m4_error(`Need OPERATION_add_n or OPERATION_sub_n -')')') - -MULFUNC_PROLOGUE(mpn_add_n mpn_sub_n) - - -C INPUT PARAMETERS -C res_ptr (sp + 4) -C s1_ptr (sp + 8) -C s2_ptr (sp + 12) -C size (sp + 16) - - -PROLOGUE(M4_function_n) - -C Save used registers on the stack. - movel d2, M(-,sp) - movel a2, M(-,sp) - -C Copy the arguments to registers. Better use movem? - movel M(sp,12), a2 - movel M(sp,16), a0 - movel M(sp,20), a1 - movel M(sp,24), d2 - - eorw #1, d2 - lsrl #1, d2 - bcc L(L1) - subql #1, d2 C clears cy as side effect - -L(Loop): - movel M(a0,+), d0 - movel M(a1,+), d1 - M4_inst d1, d0 - movel d0, M(a2,+) -L(L1): movel M(a0,+), d0 - movel M(a1,+), d1 - M4_inst d1, d0 - movel d0, M(a2,+) - - dbf d2, L(Loop) C loop until 16 lsb of %4 == -1 - subxl d0, d0 C d0 <= -cy; save cy as 0 or -1 in d0 - subl #0x10000, d2 - bcs L(L2) - addl d0, d0 C restore cy - bra L(Loop) - -L(L2): - negl d0 - -C Restore used registers from stack frame. - movel M(sp,+), a2 - movel M(sp,+), d2 - - rts - -EPILOGUE(M4_function_n) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/gmp-mparam.h deleted file mode 100644 index 9ac7b4101971f9c3d1be513df3b56d9edc43da08..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/gmp-mparam.h +++ /dev/null @@ -1,76 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 2000-2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - - -/* 25MHz 68040 */ - -/* Generated by tuneup.c, 2004-02-05, gcc 3.2 */ - -#define MUL_TOOM22_THRESHOLD 14 -#define MUL_TOOM33_THRESHOLD 90 - -#define SQR_BASECASE_THRESHOLD 5 -#define SQR_TOOM2_THRESHOLD 28 -#define SQR_TOOM3_THRESHOLD 98 - -#define DIV_SB_PREINV_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_DC_THRESHOLD 55 -#define POWM_THRESHOLD 65 - -#define HGCD_THRESHOLD 116 -#define GCD_ACCEL_THRESHOLD 3 -#define GCD_DC_THRESHOLD 590 -#define JACOBI_BASE_METHOD 2 - -#define DIVREM_1_NORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVREM_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define MOD_1_NORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define MOD_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define USE_PREINV_DIVREM_1 0 -#define USE_PREINV_MOD_1 0 -#define DIVREM_2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD MP_SIZE_T_MAX /* never */ -#define MODEXACT_1_ODD_THRESHOLD MP_SIZE_T_MAX /* never */ - -#define GET_STR_DC_THRESHOLD 18 -#define GET_STR_PRECOMPUTE_THRESHOLD 43 -#define SET_STR_THRESHOLD 937 - -#define MUL_FFT_TABLE { 336, 672, 1408, 3584, 10240, 24576, 0 } -#define MUL_FFT_MODF_THRESHOLD 296 -#define MUL_FFT_THRESHOLD 1728 - -#define SQR_FFT_TABLE { 336, 736, 1408, 3584, 10240, 24576, 0 } -#define SQR_FFT_MODF_THRESHOLD 296 -#define SQR_FFT_THRESHOLD 2304 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/lshift.asm deleted file mode 100644 index f202abfe434824f41098f31f5ac83030bdce0464..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/lshift.asm +++ /dev/null @@ -1,175 +0,0 @@ -dnl mc68020 mpn_lshift -- mpn left shift. - -dnl Copyright 1996, 1999-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C shift==1 shift>1 -C 68040: 5 12 - - -C mp_limb_t mpn_lshift (mp_ptr res_ptr, mp_srcptr s_ptr, mp_size_t s_size, -C unsigned cnt); -C -C The "cnt" parameter is either 16 bits or 32 bits depending on -C SIZEOF_UNSIGNED (see ABI notes in mpn/m68k/README). The value is of -C course only 1 to 31. When loaded as 16 bits there's garbage in the upper -C half, hence the use of cmpw. The shift instructions take the their count -C modulo 64, so the upper part doesn't matter to them either. -C - -C INPUT PARAMETERS -C res_ptr (sp + 4) -C s_ptr (sp + 8) -C s_size (sp + 12) -C cnt (sp + 16) - -define(res_ptr, `a1') -define(s_ptr, `a0') -define(s_size, `d6') -define(cnt, `d4') - -ifdef(`SIZEOF_UNSIGNED',, -`m4_error(`SIZEOF_UNSIGNED not defined, should be in config.m4 -')') - -PROLOGUE(mpn_lshift) -C Save used registers on the stack. - moveml d2-d6/a2, M(-,sp) - -C Copy the arguments to registers. - movel M(sp,28), res_ptr - movel M(sp,32), s_ptr - movel M(sp,36), s_size -ifelse(SIZEOF_UNSIGNED,2, -` movew M(sp,40), cnt', -` movel M(sp,40), cnt') - - moveql #1, d5 - cmpw d5, cnt - bne L(Lnormal) - cmpl s_ptr, res_ptr - bls L(Lspecial) C jump if s_ptr >= res_ptr - -ifelse(scale_available_p,1,` - lea M(s_ptr,s_size,l,4), a2 -',` - movel s_size, d0 - asll #2, d0 - lea M(s_ptr,d0,l), a2 -') - cmpl res_ptr, a2 - bls L(Lspecial) C jump if res_ptr >= s_ptr + s_size - -L(Lnormal): - moveql #32, d5 - subl cnt, d5 - -ifelse(scale_available_p,1,` - lea M(s_ptr,s_size,l,4), s_ptr - lea M(res_ptr,s_size,l,4), res_ptr -',` - movel s_size, d0 - asll #2, d0 - addl d0, s_ptr - addl d0, res_ptr -') - movel M(-,s_ptr), d2 - movel d2, d0 - lsrl d5, d0 C compute carry limb - - lsll cnt, d2 - movel d2, d1 - subql #1, s_size - beq L(Lend) - lsrl #1, s_size - bcs L(L1) - subql #1, s_size - -L(Loop): - movel M(-,s_ptr), d2 - movel d2, d3 - lsrl d5, d3 - orl d3, d1 - movel d1, M(-,res_ptr) - lsll cnt, d2 -L(L1): - movel M(-,s_ptr), d1 - movel d1, d3 - lsrl d5, d3 - orl d3, d2 - movel d2, M(-,res_ptr) - lsll cnt, d1 - - dbf s_size, L(Loop) - subl #0x10000, s_size - bcc L(Loop) - -L(Lend): - movel d1, M(-,res_ptr) C store least significant limb - -C Restore used registers from stack frame. - moveml M(sp,+), d2-d6/a2 - rts - -C We loop from least significant end of the arrays, which is only -C permissable if the source and destination don't overlap, since the -C function is documented to work for overlapping source and destination. - -L(Lspecial): - clrl d0 C initialize carry - eorw #1, s_size - lsrl #1, s_size - bcc L(LL1) - subql #1, s_size - -L(LLoop): - movel M(s_ptr,+), d2 - addxl d2, d2 - movel d2, M(res_ptr,+) -L(LL1): - movel M(s_ptr,+), d2 - addxl d2, d2 - movel d2, M(res_ptr,+) - - dbf s_size, L(LLoop) - addxl d0, d0 C save cy in lsb - subl #0x10000, s_size - bcs L(LLend) - lsrl #1, d0 C restore cy - bra L(LLoop) - -L(LLend): -C Restore used registers from stack frame. - moveml M(sp,+), d2-d6/a2 - rts - -EPILOGUE(mpn_lshift) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/m68k-defs.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/m68k-defs.m4 deleted file mode 100644 index 15289f676fc63762daf210fcfcbaa76985917285..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/m68k-defs.m4 +++ /dev/null @@ -1,230 +0,0 @@ -divert(-1) - -dnl m4 macros for 68k assembler. - -dnl Copyright 2001-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl The default m4 `#' commenting interferes with the assembler syntax for -dnl immediates. `|' would be correct, but it interferes with "||" in -dnl eval(). Would like to disable commenting, but that's not possible (see -dnl mpn/asm-defs.m4), so use `;' which should be harmless. - -changecom(;) - - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo) -dnl -dnl Same as the standard PROLOGUE, but align to 2 bytes not 4. - -define(`PROLOGUE_cpu', -m4_assert_numargs(1) -` TEXT - ALIGN(2) - GLOBL `$1' GLOBL_ATTR - TYPE(`$1',`function') -`$1'LABEL_SUFFIX') - - -dnl Usage: d0, etc -dnl -dnl Expand to d0 or %d0 according to the assembler's requirements. -dnl -dnl Actually d0 expands to `d0' or %`d0', the quotes protecting against -dnl further expansion. Definitions are made even if d0 is to be just `d0', -dnl so that any m4 quoting problems will show up everywhere, not just on a -dnl %d0 system. -dnl -dnl Care must be taken with quoting when using these in a definition. For -dnl instance the quotes in the following are essential or two %'s will be -dnl produced when `counter' is used. -dnl -dnl define(counter, `d7') -dnl - -dnl Called: m68k_reg(r) -define(m68k_reg, -m4_assert_numargs(1) -m4_assert_defined(`WANT_REGISTER_PERCENT') -`ifelse(WANT_REGISTER_PERCENT,yes,%)`$1'') - -dnl Usage: m68k_defreg(r) -define(m68k_defreg, -m4_assert_numargs(1) -`deflit($1,`m68k_reg(`$1')')') - -m68k_defreg(d0) -m68k_defreg(d1) -m68k_defreg(d2) -m68k_defreg(d3) -m68k_defreg(d4) -m68k_defreg(d5) -m68k_defreg(d6) -m68k_defreg(d7) - -m68k_defreg(a0) -m68k_defreg(a1) -m68k_defreg(a2) -m68k_defreg(a3) -m68k_defreg(a4) -m68k_defreg(a5) -m68k_defreg(a6) -m68k_defreg(a7) - -m68k_defreg(sp) -m68k_defreg(pc) - - -dnl Usage: M(base) -dnl M(base,displacement) -dnl M(base,index,size) -dnl M(base,index,size,scale) -dnl M(base,+) -dnl M(-,base) -dnl -dnl `base' is an address register, `index' is a data register, `size' is w -dnl or l, and scale is 1, 2, 4 or 8. -dnl -dnl M(-,base) has it's arguments that way around to emphasise it's a -dnl pre-decrement, as opposed to M(base,+) a post-increment. -dnl -dnl Enhancement: Add the memory indirect modes, if/when they're needed. - -define(M, -m4_assert_numargs_range(1,4) -m4_assert_defined(`WANT_ADDRESSING') -`ifelse(WANT_ADDRESSING,mit, -`ifelse($#,1, ``$1'@')dnl -ifelse($#,2, -`ifelse($2,+, ``$1'@+', -`ifelse($1,-, ``$2'@-', - ``$1'@($2)')')')dnl -ifelse($#,3, ``$1'@(`$2':`$3')')dnl -ifelse($#,4, ``$1'@(`$2':`$3':$4)')', - -dnl WANT_ADDRESSING `motorola' -`ifelse($#,1, `(`$1')')dnl -ifelse($#,2, -`ifelse($2,+, `(`$1')+', -`ifelse($1,-, `-(`$2')', - `$2(`$1')')')')dnl -ifelse($#,3, `(`$1',`$2'.$3)')dnl -ifelse($#,4, `(`$1',`$2'.$3*$4)')')') - - -dnl Usage: addl etc -dnl -dnl m68k instructions with special handling for the suffix, with for -dnl instance addl expanding to addl or add.l as necessary. -dnl -dnl See also t-m68k-defs.pl which verifies all mnemonics used in the asm -dnl files have entries here. - -dnl Called: m68k_insn(mnemonic,suffix) -define(m68k_insn, -m4_assert_numargs(2) -m4_assert_defined(`WANT_DOT_SIZE') -`ifelse(WANT_DOT_SIZE,yes, ``$1'.``$2''', - ``$1$2'')') - -dnl Usage: m68k_definsn(mnemonic,suffix) -define(m68k_definsn, -m4_assert_numargs(2) -`deflit($1`'$2,`m68k_insn(`$1',`$2')')') - -m68k_definsn(add, l) -m68k_definsn(addx, l) -m68k_definsn(addq, l) -m68k_definsn(asl, l) -m68k_definsn(cmp, l) -m68k_definsn(cmp, w) -m68k_definsn(clr, l) -m68k_definsn(divu, l) -m68k_definsn(eor, w) -m68k_definsn(lsl, l) -m68k_definsn(lsr, l) -m68k_definsn(move, l) -m68k_definsn(move, w) -m68k_definsn(movem,l) -m68k_definsn(moveq,l) -m68k_definsn(mulu, l) -m68k_definsn(neg, l) -m68k_definsn(or, l) -m68k_definsn(roxl, l) -m68k_definsn(roxr, l) -m68k_definsn(sub, l) -m68k_definsn(subx, l) -m68k_definsn(subq, l) - - -dnl Usage: bra etc -dnl -dnl Expand to `bra', `jra' or `jbra' according to what the assembler will -dnl accept. The latter two give variable-sized branches in gas. -dnl -dnl See also t-m68k-defs.pl which verifies all the bXX branches used in the -dnl asm files have entries here. - -dnl Called: m68k_branch(cond) -define(m68k_branch, -m4_assert_numargs(1) -m4_assert_defined(`WANT_BRANCHES') -`ifelse(WANT_BRANCHES,jra, `j$1', -`ifelse(WANT_BRANCHES,jbra,`jb$1', - ``b$1'')')') - -dnl Called: m68k_defbranch(cond) -define(m68k_defbranch, -m4_assert_numargs(1) -`deflit(b$1,`m68k_branch(`$1')')') - -m68k_defbranch(ra) -m68k_defbranch(cc) -m68k_defbranch(cs) -m68k_defbranch(ls) -m68k_defbranch(eq) -m68k_defbranch(ne) - - -dnl Usage: scale_available_p -dnl -dnl Expand to 1 if a scale factor can be used in addressing modes, or 0 if -dnl not. M(a0,d0,l,4), meaning a0+d0*4, is not available in 68000 or -dnl 68010, but is in CPU32 and in 68020 and up. - -define(scale_available_p, -`m4_ifdef_anyof_p( -`HAVE_HOST_CPU_m68360' -`HAVE_HOST_CPU_m68020' -`HAVE_HOST_CPU_m68030' -`HAVE_HOST_CPU_m68040' -`HAVE_HOST_CPU_m68060')') - - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/mc68020/aorsmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/mc68020/aorsmul_1.asm deleted file mode 100644 index 4ee30ad9b3086c0d58fb49596f7ada945b50eba8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/mc68020/aorsmul_1.asm +++ /dev/null @@ -1,101 +0,0 @@ -dnl mc68020 mpn_addmul_1, mpn_submul_1 -- add or subtract mpn multiple. - -dnl Copyright 1992, 1994, 1996, 1999-2002, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 68040: 25 - -ifdef(`OPERATION_addmul_1',` - define(M4_inst, addl) - define(M4_function_1, mpn_addmul_1) -',`ifdef(`OPERATION_submul_1',` - define(M4_inst, subl) - define(M4_function_1, mpn_submul_1) -', -`m4_error(`Need OPERATION_addmul_1 or OPERATION_submul_1 -')')') - - -C INPUT PARAMETERS -C res_ptr (sp + 4) -C s1_ptr (sp + 8) -C s1_size (sp + 12) -C s2_limb (sp + 16) - -define(res_ptr, `a0') -define(s1_ptr, `a1') -define(s1_size, `d2') -define(s2_limb, `d4') - -MULFUNC_PROLOGUE(mpn_addmul_1 mpn_submul_1) - -PROLOGUE(M4_function_1) - -C Save used registers on the stack. - moveml d2-d5, M(-,sp) - -C Copy the arguments to registers. Better use movem? - movel M(sp,20), res_ptr - movel M(sp,24), s1_ptr - movel M(sp,28), s1_size - movel M(sp,32), s2_limb - - eorw #1, s1_size - clrl d1 - clrl d5 - lsrl #1, s1_size - bcc L(L1) - subql #1, s1_size - subl d0, d0 C (d0,cy) <= (0,0) - -L(Loop): - movel M(s1_ptr,+), d3 - mulul s2_limb, d1:d3 - addxl d0, d3 - addxl d5, d1 - M4_inst d3, M(res_ptr,+) -L(L1): movel M(s1_ptr,+), d3 - mulul s2_limb, d0:d3 - addxl d1, d3 - addxl d5, d0 - M4_inst d3, M(res_ptr,+) - - dbf s1_size, L(Loop) - addxl d5, d0 - subl #0x10000, s1_size - bcc L(Loop) - -C Restore used registers from stack frame. - moveml M(sp,+), d2-d5 - - rts - -EPILOGUE(M4_function_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/mc68020/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/mc68020/mul_1.asm deleted file mode 100644 index f5fbb3063b67b60fc68114b9e1f02589b5ac6850..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/mc68020/mul_1.asm +++ /dev/null @@ -1,96 +0,0 @@ -dnl mc68020 mpn_mul_1 -- mpn by limb multiply - -dnl Copyright 1992, 1994, 1996, 1999-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 68040: 24 - -C INPUT PARAMETERS -C res_ptr (sp + 4) -C s1_ptr (sp + 8) -C s1_size (sp + 12) -C s2_limb (sp + 16) - - -define(res_ptr, `a0') -define(s1_ptr, `a1') -define(s1_size, `d2') -define(s2_limb, `d4') - - -PROLOGUE(mpn_mul_1) - -C Save used registers on the stack. - moveml d2-d4, M(-,sp) - -C movel d2, M(-,sp) -C movel d3, M(-,sp) -C movel d4, M(-,sp) - -C Copy the arguments to registers. Better use movem? - movel M(sp,16), res_ptr - movel M(sp,20), s1_ptr - movel M(sp,24), s1_size - movel M(sp,28), s2_limb - - eorw #1, s1_size - clrl d1 - lsrl #1, s1_size - bcc L(L1) - subql #1, s1_size - subl d0, d0 C (d0,cy) <= (0,0) - -L(Loop): - movel M(s1_ptr,+), d3 - mulul s2_limb, d1:d3 - addxl d0, d3 - movel d3, M(res_ptr,+) -L(L1): movel M(s1_ptr,+), d3 - mulul s2_limb, d0:d3 - addxl d1, d3 - movel d3, M(res_ptr,+) - - dbf s1_size, L(Loop) - clrl d3 - addxl d3, d0 - subl #0x10000, s1_size - bcc L(Loop) - -C Restore used registers from stack frame. - moveml M(sp,+), d2-d4 - -C movel M(sp,+),d4 -C movel M(sp,+),d3 -C movel M(sp,+),d2 - - rts - -EPILOGUE(mpn_mul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/mc68020/udiv.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/mc68020/udiv.asm deleted file mode 100644 index aadeab999ae5e6c766c12721d5b2767dfa4ad2a1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/mc68020/udiv.asm +++ /dev/null @@ -1,45 +0,0 @@ -dnl mc68020 mpn_udiv_qrnnd -- 2x1 limb division - -dnl Copyright 1999-2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C mp_limb_t mpn_udiv_qrnnd (mp_limb_t *rp, -C mp_limb_t nh, mp_limb_t nl, mp_limb_t d); -C - -PROLOGUE(mpn_udiv_qrnnd) - movel M(sp,4), a0 C rp - movel M(sp,8), d1 C nh - movel M(sp,12), d0 C nl - divul M(sp,16), d1:d0 - movel d1, M(a0) C r - rts -EPILOGUE(mpn_udiv_qrnnd) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/mc68020/umul.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/mc68020/umul.asm deleted file mode 100644 index f19314e9bbbef7b20a19d0c19bbdd9360603979f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/mc68020/umul.asm +++ /dev/null @@ -1,44 +0,0 @@ -dnl mc68020 mpn_umul_ppmm -- limb by limb multiplication - -dnl Copyright 1999-2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C mp_limb_t mpn_umul_ppmm (mp_limb_t *lp, mp_limb_t x, mp_limb_t y); -C - -PROLOGUE(mpn_umul_ppmm) - movel M(sp,4), a0 C lp - movel M(sp,8), d1 C x - movel M(sp,12), d0 C y - mulul d0, d0:d1 - movel d1, M(a0) C low - rts -EPILOGUE(mpn_umul_ppmm) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/rshift.asm deleted file mode 100644 index 21b5f89f48376569b8755dd45463d8d044b41d88..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/rshift.asm +++ /dev/null @@ -1,175 +0,0 @@ -dnl mc68020 mpn_rshift -- mpn right shift. - -dnl Copyright 1996, 1999-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C shift==1 shift>1 -C 68040: 9 12 - - -C mp_limb_t mpn_rshift (mp_ptr res_ptr, mp_srcptr s_ptr, mp_size_t s_size, -C unsigned cnt); -C -C The "cnt" parameter is either 16 bits or 32 bits depending on -C SIZEOF_UNSIGNED (see ABI notes in mpn/m68k/README). The value is of -C course only 1 to 31. When loaded as 16 bits there's garbage in the upper -C half, hence the use of cmpw. The shift instructions take the their count -C modulo 64, so the upper part doesn't matter to them either. -C - -C INPUT PARAMETERS -C res_ptr (sp + 4) -C s_ptr (sp + 8) -C s_size (sp + 12) -C cnt (sp + 16) - -define(res_ptr, `a1') -define(s_ptr, `a0') -define(s_size, `d6') -define(cnt, `d4') - -ifdef(`SIZEOF_UNSIGNED',, -`m4_error(`SIZEOF_UNSIGNED not defined, should be in config.m4 -')') - -PROLOGUE(mpn_rshift) -C Save used registers on the stack. - moveml d2-d6/a2, M(-,sp) - -C Copy the arguments to registers. - movel M(sp,28), res_ptr - movel M(sp,32), s_ptr - movel M(sp,36), s_size -ifelse(SIZEOF_UNSIGNED,2, -` movew M(sp,40), cnt', -` movel M(sp,40), cnt') - - moveql #1, d5 - cmpw d5, cnt - bne L(Lnormal) - cmpl res_ptr, s_ptr - bls L(Lspecial) C jump if res_ptr >= s_ptr - -ifelse(scale_available_p,1,` - lea M(res_ptr,s_size,l,4), a2 -',` - movel s_size, d0 - asll #2, d0 - lea M(res_ptr,d0,l), a2 -') - cmpl s_ptr, a2 - bls L(Lspecial) C jump if s_ptr >= res_ptr + s_size - -L(Lnormal): - moveql #32, d5 - subl cnt, d5 - movel M(s_ptr,+), d2 - movel d2, d0 - lsll d5, d0 C compute carry limb - - lsrl cnt, d2 - movel d2, d1 - subql #1, s_size - beq L(Lend) - lsrl #1, s_size - bcs L(L1) - subql #1, s_size - -L(Loop): - movel M(s_ptr,+), d2 - movel d2, d3 - lsll d5, d3 - orl d3, d1 - movel d1, M(res_ptr,+) - lsrl cnt, d2 -L(L1): - movel M(s_ptr,+), d1 - movel d1, d3 - lsll d5, d3 - orl d3, d2 - movel d2, M(res_ptr,+) - lsrl cnt, d1 - - dbf s_size, L(Loop) - subl #0x10000, s_size - bcc L(Loop) - -L(Lend): - movel d1, M(res_ptr) C store most significant limb - -C Restore used registers from stack frame. - moveml M(sp,+), d2-d6/a2 - rts - -C We loop from most significant end of the arrays, which is only permissable -C if the source and destination don't overlap, since the function is -C documented to work for overlapping source and destination. - -L(Lspecial): -ifelse(scale_available_p,1,` - lea M(s_ptr,s_size,l,4), s_ptr - lea M(res_ptr,s_size,l,4), res_ptr -',` - movel s_size, d0 - asll #2, d0 - addl d0, s_ptr - addl d0, res_ptr -') - - clrl d0 C initialize carry - eorw #1, s_size - lsrl #1, s_size - bcc L(LL1) - subql #1, s_size - -L(LLoop): - movel M(-,s_ptr), d2 - roxrl #1, d2 - movel d2, M(-,res_ptr) -L(LL1): - movel M(-,s_ptr), d2 - roxrl #1, d2 - movel d2, M(-,res_ptr) - - dbf s_size, L(LLoop) - roxrl #1, d0 C save cy in msb - subl #0x10000, s_size - bcs L(LLend) - addl d0, d0 C restore cy - bra L(LLoop) - -L(LLend): -C Restore used registers from stack frame. - moveml M(sp,+), d2-d6/a2 - rts - -EPILOGUE(mpn_rshift) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/t-m68k-defs.pl b/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/t-m68k-defs.pl deleted file mode 100644 index 91c21fa1f8ad987fd53ab5712d78eb1646bfe43d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m68k/t-m68k-defs.pl +++ /dev/null @@ -1,91 +0,0 @@ -#! /usr/bin/perl -w - -# Copyright 2001, 2003 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - - -# Usage: perl t-m68k-defs.pl [-t] -# -# Run this in the mpn/m68k source directory to check that m68k-defs.m4 has -# m68k_defbranch()s or m68k_definsn()s for each instruction used in *.asm -# and */*.asm. Print nothing if everything is ok. The -t option prints -# some diagnostic traces. - -use strict; -use Getopt::Std; - -my %opt; -getopts('t', \%opt); - -my %branch; -my %insn; - -open(FD, "<m68k-defs.m4") - or die "Cannot open m68k-defs.m4: $!\nIs this the mpn/m68k source directory?\n"; -my ($srcdir, $top_srcdir); -while (<FD>) { - if (/^m68k_defbranch\(\s*(.*)\)/) { $branch{"b".$1} = 1; } - if (/^m68k_definsn\(\s*(.*),\s*(.*)\)/) { $insn{$1.$2} = 1; } -} -close(FD); - -print "branches: ", join(" ",keys(%branch)), "\n" if $opt{'t'}; -print "insns: ", join(" ",keys(%insn)), "\n" if $opt{'t'}; - - -foreach my $file (glob("*.asm"), glob("*/*.asm")) { - print "file $file\n" if $opt{'t'}; - - open(FD, "<$file") or die "Cannot open $file: $!"; - while (<FD>) { - if (/^[ \t]*C/) { next; }; - if (/^\t([a-z0-9]+)/) { - my $opcode = $1; - print "opcode $1\n" if $opt{'t'}; - - # instructions with an l, w or b suffix should have a definsn - # (unless they're already a defbranch) - if ($opcode =~ /[lwb]$/ - && ! defined $insn{$opcode} - && ! defined $branch{$opcode}) - { - print "$file: $.: missing m68k_definsn: $opcode\n"; - } - - # instructions bXX should have a defbranch (unless they're - # already a definsn) - if ($opcode =~ /^b/ - && ! defined $insn{$opcode} - && ! defined $branch{$opcode}) - { - print "$file: $.: missing m68k_defbranch: $opcode\n"; - } - } - } - close(FD); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/README b/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/README deleted file mode 100644 index 1b51e83079e9794014c217c218878f8657fefd0b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/README +++ /dev/null @@ -1,61 +0,0 @@ -Copyright 2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - - M88K MPN SUBROUTINES - -This directory contains mpn functions for various m88k family chips. - -CODE ORGANIZATION - - m88k m88000, m88100 - m88k/mc88110 m88110 - -STATUS - -The code herein is old and poorly maintained. - -* The .s files assume the system uses a "_" underscore prefix, which - should be controlled by configure. - -* The mc88110/*.S files are using the defunct "sysdep.h" configuration - scheme and won't compile. - -Conversion to the current m4 .asm style wouldn't be difficult. - - - - ----------------- -Local variables: -mode: text -fill-column: 76 -End: diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/add_n.s b/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/add_n.s deleted file mode 100644 index dbdb22f8888087739059e89ae4c918f083e686cc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/add_n.s +++ /dev/null @@ -1,113 +0,0 @@ -; mc88100 mpn_add_n -- Add two limb vectors of the same length > 0 and store -; sum in a third limb vector. - -; Copyright 1992, 1994, 1995, 2000 Free Software Foundation, Inc. - -; This file is part of the GNU MP Library. -; -; The GNU MP Library is free software; you can redistribute it and/or modify -; it under the terms of either: -; -; * the GNU Lesser General Public License as published by the Free -; Software Foundation; either version 3 of the License, or (at your -; option) any later version. -; -; or -; -; * the GNU General Public License as published by the Free Software -; Foundation; either version 2 of the License, or (at your option) any -; later version. -; -; or both in parallel, as here. -; -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -; for more details. -; -; You should have received copies of the GNU General Public License and the -; GNU Lesser General Public License along with the GNU MP Library. If not, -; see https://www.gnu.org/licenses/. - - -; INPUT PARAMETERS -; res_ptr r2 -; s1_ptr r3 -; s2_ptr r4 -; size r5 - -; This code has been optimized to run one instruction per clock, avoiding -; load stalls and writeback contention. As a result, the instruction -; order is not always natural. - -; The speed is about 4.6 clocks/limb + 18 clocks/limb-vector on an 88100, -; but on the 88110, it seems to run much slower, 6.6 clocks/limb. - - text - align 16 - global ___gmpn_add_n -___gmpn_add_n: - ld r6,r3,0 ; read first limb from s1_ptr - extu r10,r5,3 - ld r7,r4,0 ; read first limb from s2_ptr - - subu.co r5,r0,r5 ; (clear carry as side effect) - mak r5,r5,3<4> - bcnd eq0,r5,Lzero - - or r12,r0,lo16(Lbase) - or.u r12,r12,hi16(Lbase) - addu r12,r12,r5 ; r12 is address for entering in loop - - extu r5,r5,2 ; divide by 4 - subu r2,r2,r5 ; adjust res_ptr - subu r3,r3,r5 ; adjust s1_ptr - subu r4,r4,r5 ; adjust s2_ptr - - or r8,r6,r0 - - jmp.n r12 - or r9,r7,r0 - -Loop: addu r3,r3,32 - st r8,r2,28 - addu r4,r4,32 - ld r6,r3,0 - addu r2,r2,32 - ld r7,r4,0 -Lzero: subu r10,r10,1 ; add 0 + 8r limbs (adj loop cnt) -Lbase: ld r8,r3,4 - addu.cio r6,r6,r7 - ld r9,r4,4 - st r6,r2,0 - ld r6,r3,8 ; add 7 + 8r limbs - addu.cio r8,r8,r9 - ld r7,r4,8 - st r8,r2,4 - ld r8,r3,12 ; add 6 + 8r limbs - addu.cio r6,r6,r7 - ld r9,r4,12 - st r6,r2,8 - ld r6,r3,16 ; add 5 + 8r limbs - addu.cio r8,r8,r9 - ld r7,r4,16 - st r8,r2,12 - ld r8,r3,20 ; add 4 + 8r limbs - addu.cio r6,r6,r7 - ld r9,r4,20 - st r6,r2,16 - ld r6,r3,24 ; add 3 + 8r limbs - addu.cio r8,r8,r9 - ld r7,r4,24 - st r8,r2,20 - ld r8,r3,28 ; add 2 + 8r limbs - addu.cio r6,r6,r7 - ld r9,r4,28 - st r6,r2,24 - bcnd.n ne0,r10,Loop ; add 1 + 8r limbs - addu.cio r8,r8,r9 - - st r8,r2,28 ; store most significant limb - - jmp.n r1 - addu.ci r2,r0,r0 ; return carry-out from most sign. limb diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mc88110/add_n.S b/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mc88110/add_n.S deleted file mode 100644 index c3b12b3cd05a9e0175d0894d4504da562b3f0495..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mc88110/add_n.S +++ /dev/null @@ -1,209 +0,0 @@ -; mc88110 __gmpn_add_n -- Add two limb vectors of the same length > 0 and store -; sum in a third limb vector. - -; Copyright 1995, 1996, 2000 Free Software Foundation, Inc. - -; This file is part of the GNU MP Library. -; -; The GNU MP Library is free software; you can redistribute it and/or modify -; it under the terms of either: -; -; * the GNU Lesser General Public License as published by the Free -; Software Foundation; either version 3 of the License, or (at your -; option) any later version. -; -; or -; -; * the GNU General Public License as published by the Free Software -; Foundation; either version 2 of the License, or (at your option) any -; later version. -; -; or both in parallel, as here. -; -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -; for more details. -; -; You should have received copies of the GNU General Public License and the -; GNU Lesser General Public License along with the GNU MP Library. If not, -; see https://www.gnu.org/licenses/. - - -; INPUT PARAMETERS -#define res_ptr r2 -#define s1_ptr r3 -#define s2_ptr r4 -#define size r5 - -#include "sysdep.h" - - text - align 16 - global C_SYMBOL_NAME(__gmpn_add_n) -C_SYMBOL_NAME(__gmpn_add_n): - addu.co r0,r0,r0 ; clear cy flag - xor r12,s2_ptr,res_ptr - bb1 2,r12,L1 -; ** V1a ** -L0: bb0 2,res_ptr,L_v1 ; branch if res_ptr is aligned? -/* Add least significant limb separately to align res_ptr and s2_ptr */ - ld r10,s1_ptr,0 - addu s1_ptr,s1_ptr,4 - ld r8,s2_ptr,0 - addu s2_ptr,s2_ptr,4 - subu size,size,1 - addu.co r6,r10,r8 - st r6,res_ptr,0 - addu res_ptr,res_ptr,4 -L_v1: cmp r12,size,2 - bb1 lt,r12,Lend2 - - ld r10,s1_ptr,0 - ld r12,s1_ptr,4 - ld.d r8,s2_ptr,0 - subu size,size,10 - bcnd lt0,size,Lfin1 -/* Add blocks of 8 limbs until less than 8 limbs remain */ - align 8 -Loop1: subu size,size,8 - addu.cio r6,r10,r8 - ld r10,s1_ptr,8 - addu.cio r7,r12,r9 - ld r12,s1_ptr,12 - ld.d r8,s2_ptr,8 - st.d r6,res_ptr,0 - addu.cio r6,r10,r8 - ld r10,s1_ptr,16 - addu.cio r7,r12,r9 - ld r12,s1_ptr,20 - ld.d r8,s2_ptr,16 - st.d r6,res_ptr,8 - addu.cio r6,r10,r8 - ld r10,s1_ptr,24 - addu.cio r7,r12,r9 - ld r12,s1_ptr,28 - ld.d r8,s2_ptr,24 - st.d r6,res_ptr,16 - addu.cio r6,r10,r8 - ld r10,s1_ptr,32 - addu.cio r7,r12,r9 - ld r12,s1_ptr,36 - addu s1_ptr,s1_ptr,32 - ld.d r8,s2_ptr,32 - addu s2_ptr,s2_ptr,32 - st.d r6,res_ptr,24 - addu res_ptr,res_ptr,32 - bcnd ge0,size,Loop1 - -Lfin1: addu size,size,8-2 - bcnd lt0,size,Lend1 -/* Add blocks of 2 limbs until less than 2 limbs remain */ -Loope1: addu.cio r6,r10,r8 - ld r10,s1_ptr,8 - addu.cio r7,r12,r9 - ld r12,s1_ptr,12 - ld.d r8,s2_ptr,8 - st.d r6,res_ptr,0 - subu size,size,2 - addu s1_ptr,s1_ptr,8 - addu s2_ptr,s2_ptr,8 - addu res_ptr,res_ptr,8 - bcnd ge0,size,Loope1 -Lend1: addu.cio r6,r10,r8 - addu.cio r7,r12,r9 - st.d r6,res_ptr,0 - - bb0 0,size,Lret1 -/* Add last limb */ - ld r10,s1_ptr,8 - ld r8,s2_ptr,8 - addu.cio r6,r10,r8 - st r6,res_ptr,8 - -Lret1: jmp.n r1 - addu.ci r2,r0,r0 ; return carry-out from most sign. limb - -L1: xor r12,s1_ptr,res_ptr - bb1 2,r12,L2 -; ** V1b ** - or r12,r0,s2_ptr - or s2_ptr,r0,s1_ptr - or s1_ptr,r0,r12 - br L0 - -; ** V2 ** -/* If we come here, the alignment of s1_ptr and res_ptr as well as the - alignment of s2_ptr and res_ptr differ. Since there are only two ways - things can be aligned (that we care about) we now know that the alignment - of s1_ptr and s2_ptr are the same. */ - -L2: cmp r12,size,1 - bb1 eq,r12,Ljone - bb0 2,s1_ptr,L_v2 ; branch if s1_ptr is aligned -/* Add least significant limb separately to align res_ptr and s2_ptr */ - ld r10,s1_ptr,0 - addu s1_ptr,s1_ptr,4 - ld r8,s2_ptr,0 - addu s2_ptr,s2_ptr,4 - subu size,size,1 - addu.co r6,r10,r8 - st r6,res_ptr,0 - addu res_ptr,res_ptr,4 - -L_v2: subu size,size,8 - bcnd lt0,size,Lfin2 -/* Add blocks of 8 limbs until less than 8 limbs remain */ - align 8 -Loop2: subu size,size,8 - ld.d r8,s1_ptr,0 - ld.d r6,s2_ptr,0 - addu.cio r8,r8,r6 - st r8,res_ptr,0 - addu.cio r9,r9,r7 - st r9,res_ptr,4 - ld.d r8,s1_ptr,8 - ld.d r6,s2_ptr,8 - addu.cio r8,r8,r6 - st r8,res_ptr,8 - addu.cio r9,r9,r7 - st r9,res_ptr,12 - ld.d r8,s1_ptr,16 - ld.d r6,s2_ptr,16 - addu.cio r8,r8,r6 - st r8,res_ptr,16 - addu.cio r9,r9,r7 - st r9,res_ptr,20 - ld.d r8,s1_ptr,24 - ld.d r6,s2_ptr,24 - addu.cio r8,r8,r6 - st r8,res_ptr,24 - addu.cio r9,r9,r7 - st r9,res_ptr,28 - addu s1_ptr,s1_ptr,32 - addu s2_ptr,s2_ptr,32 - addu res_ptr,res_ptr,32 - bcnd ge0,size,Loop2 - -Lfin2: addu size,size,8-2 - bcnd lt0,size,Lend2 -Loope2: ld.d r8,s1_ptr,0 - ld.d r6,s2_ptr,0 - addu.cio r8,r8,r6 - st r8,res_ptr,0 - addu.cio r9,r9,r7 - st r9,res_ptr,4 - subu size,size,2 - addu s1_ptr,s1_ptr,8 - addu s2_ptr,s2_ptr,8 - addu res_ptr,res_ptr,8 - bcnd ge0,size,Loope2 -Lend2: bb0 0,size,Lret2 -/* Add last limb */ -Ljone: ld r10,s1_ptr,0 - ld r8,s2_ptr,0 - addu.cio r6,r10,r8 - st r6,res_ptr,0 - -Lret2: jmp.n r1 - addu.ci r2,r0,r0 ; return carry-out from most sign. limb diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mc88110/addmul_1.s b/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mc88110/addmul_1.s deleted file mode 100644 index 321221f23ca04c19032a3825748911b929ae93b0..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mc88110/addmul_1.s +++ /dev/null @@ -1,70 +0,0 @@ -; mc88110 __gmpn_addmul_1 -- Multiply a limb vector with a single limb and -; store the product in a second limb vector. - -; Copyright 1996, 2000 Free Software Foundation, Inc. - -; This file is part of the GNU MP Library. -; -; The GNU MP Library is free software; you can redistribute it and/or modify -; it under the terms of either: -; -; * the GNU Lesser General Public License as published by the Free -; Software Foundation; either version 3 of the License, or (at your -; option) any later version. -; -; or -; -; * the GNU General Public License as published by the Free Software -; Foundation; either version 2 of the License, or (at your option) any -; later version. -; -; or both in parallel, as here. -; -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -; for more details. -; -; You should have received copies of the GNU General Public License and the -; GNU Lesser General Public License along with the GNU MP Library. If not, -; see https://www.gnu.org/licenses/. - - -; INPUT PARAMETERS -; res_ptr r2 -; s1_ptr r3 -; size r4 -; s2_limb r5 - - text - align 16 - global ___gmpn_addmul_1 -___gmpn_addmul_1: - lda r3,r3[r4] - lda r8,r2[r4] ; RES_PTR in r8 since r2 is retval - subu r4,r0,r4 - addu.co r2,r0,r0 ; r2 = cy = 0 - - ld r6,r3[r4] - addu r4,r4,1 - subu r8,r8,4 - bcnd.n eq0,r4,Lend - mulu.d r10,r6,r5 - -Loop: ld r7,r8[r4] - ld r6,r3[r4] - addu.cio r9,r11,r2 - addu.ci r2,r10,r0 - addu.co r9,r9,r7 - st r9,r8[r4] - addu r4,r4,1 - mulu.d r10,r6,r5 - bcnd ne0,r4,Loop - -Lend: ld r7,r8,0 - addu.cio r9,r11,r2 - addu.ci r2,r10,r0 - addu.co r9,r9,r7 - st r9,r8,0 - jmp.n r1 - addu.ci r2,r2,r0 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mc88110/mul_1.s b/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mc88110/mul_1.s deleted file mode 100644 index 28fd14b77b157182d0d0fd06201e511d148bd481..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mc88110/mul_1.s +++ /dev/null @@ -1,68 +0,0 @@ -; mc88110 __gmpn_mul_1 -- Multiply a limb vector with a single limb and -; store the product in a second limb vector. - -; Copyright 1992, 1994, 1995, 2000 Free Software Foundation, Inc. - -; This file is part of the GNU MP Library. -; -; The GNU MP Library is free software; you can redistribute it and/or modify -; it under the terms of either: -; -; * the GNU Lesser General Public License as published by the Free -; Software Foundation; either version 3 of the License, or (at your -; option) any later version. -; -; or -; -; * the GNU General Public License as published by the Free Software -; Foundation; either version 2 of the License, or (at your option) any -; later version. -; -; or both in parallel, as here. -; -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -; for more details. -; -; You should have received copies of the GNU General Public License and the -; GNU Lesser General Public License along with the GNU MP Library. If not, -; see https://www.gnu.org/licenses/. - - -; INPUT PARAMETERS -; res_ptr r2 -; s1_ptr r3 -; size r4 -; s2_limb r5 - - text - align 16 - global ___gmpn_mul_1 -___gmpn_mul_1: - ; Make S1_PTR and RES_PTR point at the end of their blocks - ; and negate SIZE. - lda r3,r3[r4] - lda r8,r2[r4] ; RES_PTR in r8 since r2 is retval - subu r4,r0,r4 - - addu.co r2,r0,r0 ; r2 = cy = 0 - - ld r6,r3[r4] - addu r4,r4,1 - mulu.d r10,r6,r5 - bcnd.n eq0,r4,Lend - subu r8,r8,8 - -Loop: ld r6,r3[r4] - addu.cio r9,r11,r2 - or r2,r10,r0 ; could be avoided if unrolled - addu r4,r4,1 - mulu.d r10,r6,r5 - bcnd.n ne0,r4,Loop - st r9,r8[r4] - -Lend: addu.cio r9,r11,r2 - st r9,r8,4 - jmp.n r1 - addu.ci r2,r10,r0 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mc88110/sub_n.S b/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mc88110/sub_n.S deleted file mode 100644 index f0a8ecb3f06655cb754a1add602018bc21cbb20e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mc88110/sub_n.S +++ /dev/null @@ -1,285 +0,0 @@ -; mc88110 __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and -; store difference in a third limb vector. - -; Copyright 1995, 1996, 2000 Free Software Foundation, Inc. - -; This file is part of the GNU MP Library. -; -; The GNU MP Library is free software; you can redistribute it and/or modify -; it under the terms of either: -; -; * the GNU Lesser General Public License as published by the Free -; Software Foundation; either version 3 of the License, or (at your -; option) any later version. -; -; or -; -; * the GNU General Public License as published by the Free Software -; Foundation; either version 2 of the License, or (at your option) any -; later version. -; -; or both in parallel, as here. -; -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -; for more details. -; -; You should have received copies of the GNU General Public License and the -; GNU Lesser General Public License along with the GNU MP Library. If not, -; see https://www.gnu.org/licenses/. - - -; INPUT PARAMETERS -#define res_ptr r2 -#define s1_ptr r3 -#define s2_ptr r4 -#define size r5 - -#include "sysdep.h" - - text - align 16 - global C_SYMBOL_NAME(__gmpn_sub_n) -C_SYMBOL_NAME(__gmpn_sub_n): - subu.co r0,r0,r0 ; set cy flag - xor r12,s2_ptr,res_ptr - bb1 2,r12,L1 -; ** V1a ** -L0: bb0 2,res_ptr,L_v1 ; branch if res_ptr is aligned -/* Add least significant limb separately to align res_ptr and s2_ptr */ - ld r10,s1_ptr,0 - addu s1_ptr,s1_ptr,4 - ld r8,s2_ptr,0 - addu s2_ptr,s2_ptr,4 - subu size,size,1 - subu.co r6,r10,r8 - st r6,res_ptr,0 - addu res_ptr,res_ptr,4 -L_v1: cmp r12,size,2 - bb1 lt,r12,Lend2 - - ld r10,s1_ptr,0 - ld r12,s1_ptr,4 - ld.d r8,s2_ptr,0 - subu size,size,10 - bcnd lt0,size,Lfin1 -/* Add blocks of 8 limbs until less than 8 limbs remain */ - align 8 -Loop1: subu size,size,8 - subu.cio r6,r10,r8 - ld r10,s1_ptr,8 - subu.cio r7,r12,r9 - ld r12,s1_ptr,12 - ld.d r8,s2_ptr,8 - st.d r6,res_ptr,0 - subu.cio r6,r10,r8 - ld r10,s1_ptr,16 - subu.cio r7,r12,r9 - ld r12,s1_ptr,20 - ld.d r8,s2_ptr,16 - st.d r6,res_ptr,8 - subu.cio r6,r10,r8 - ld r10,s1_ptr,24 - subu.cio r7,r12,r9 - ld r12,s1_ptr,28 - ld.d r8,s2_ptr,24 - st.d r6,res_ptr,16 - subu.cio r6,r10,r8 - ld r10,s1_ptr,32 - subu.cio r7,r12,r9 - ld r12,s1_ptr,36 - addu s1_ptr,s1_ptr,32 - ld.d r8,s2_ptr,32 - addu s2_ptr,s2_ptr,32 - st.d r6,res_ptr,24 - addu res_ptr,res_ptr,32 - bcnd ge0,size,Loop1 - -Lfin1: addu size,size,8-2 - bcnd lt0,size,Lend1 -/* Add blocks of 2 limbs until less than 2 limbs remain */ -Loope1: subu.cio r6,r10,r8 - ld r10,s1_ptr,8 - subu.cio r7,r12,r9 - ld r12,s1_ptr,12 - ld.d r8,s2_ptr,8 - st.d r6,res_ptr,0 - subu size,size,2 - addu s1_ptr,s1_ptr,8 - addu s2_ptr,s2_ptr,8 - addu res_ptr,res_ptr,8 - bcnd ge0,size,Loope1 -Lend1: subu.cio r6,r10,r8 - subu.cio r7,r12,r9 - st.d r6,res_ptr,0 - - bb0 0,size,Lret1 -/* Add last limb */ - ld r10,s1_ptr,8 - ld r8,s2_ptr,8 - subu.cio r6,r10,r8 - st r6,res_ptr,8 - -Lret1: addu.ci r2,r0,r0 ; return carry-out from most sign. limb - jmp.n r1 - xor r2,r2,1 - -L1: xor r12,s1_ptr,res_ptr - bb1 2,r12,L2 -; ** V1b ** - bb0 2,res_ptr,L_v1b ; branch if res_ptr is aligned -/* Add least significant limb separately to align res_ptr and s1_ptr */ - ld r10,s2_ptr,0 - addu s2_ptr,s2_ptr,4 - ld r8,s1_ptr,0 - addu s1_ptr,s1_ptr,4 - subu size,size,1 - subu.co r6,r8,r10 - st r6,res_ptr,0 - addu res_ptr,res_ptr,4 -L_v1b: cmp r12,size,2 - bb1 lt,r12,Lend2 - - ld r10,s2_ptr,0 - ld r12,s2_ptr,4 - ld.d r8,s1_ptr,0 - subu size,size,10 - bcnd lt0,size,Lfin1b -/* Add blocks of 8 limbs until less than 8 limbs remain */ - align 8 -Loop1b: subu size,size,8 - subu.cio r6,r8,r10 - ld r10,s2_ptr,8 - subu.cio r7,r9,r12 - ld r12,s2_ptr,12 - ld.d r8,s1_ptr,8 - st.d r6,res_ptr,0 - subu.cio r6,r8,r10 - ld r10,s2_ptr,16 - subu.cio r7,r9,r12 - ld r12,s2_ptr,20 - ld.d r8,s1_ptr,16 - st.d r6,res_ptr,8 - subu.cio r6,r8,r10 - ld r10,s2_ptr,24 - subu.cio r7,r9,r12 - ld r12,s2_ptr,28 - ld.d r8,s1_ptr,24 - st.d r6,res_ptr,16 - subu.cio r6,r8,r10 - ld r10,s2_ptr,32 - subu.cio r7,r9,r12 - ld r12,s2_ptr,36 - addu s2_ptr,s2_ptr,32 - ld.d r8,s1_ptr,32 - addu s1_ptr,s1_ptr,32 - st.d r6,res_ptr,24 - addu res_ptr,res_ptr,32 - bcnd ge0,size,Loop1b - -Lfin1b: addu size,size,8-2 - bcnd lt0,size,Lend1b -/* Add blocks of 2 limbs until less than 2 limbs remain */ -Loope1b:subu.cio r6,r8,r10 - ld r10,s2_ptr,8 - subu.cio r7,r9,r12 - ld r12,s2_ptr,12 - ld.d r8,s1_ptr,8 - st.d r6,res_ptr,0 - subu size,size,2 - addu s1_ptr,s1_ptr,8 - addu s2_ptr,s2_ptr,8 - addu res_ptr,res_ptr,8 - bcnd ge0,size,Loope1b -Lend1b: subu.cio r6,r8,r10 - subu.cio r7,r9,r12 - st.d r6,res_ptr,0 - - bb0 0,size,Lret1b -/* Add last limb */ - ld r10,s2_ptr,8 - ld r8,s1_ptr,8 - subu.cio r6,r8,r10 - st r6,res_ptr,8 - -Lret1b: addu.ci r2,r0,r0 ; return carry-out from most sign. limb - jmp.n r1 - xor r2,r2,1 - -; ** V2 ** -/* If we come here, the alignment of s1_ptr and res_ptr as well as the - alignment of s2_ptr and res_ptr differ. Since there are only two ways - things can be aligned (that we care about) we now know that the alignment - of s1_ptr and s2_ptr are the same. */ - -L2: cmp r12,size,1 - bb1 eq,r12,Ljone - bb0 2,s1_ptr,L_v2 ; branch if s1_ptr is aligned -/* Add least significant limb separately to align res_ptr and s2_ptr */ - ld r10,s1_ptr,0 - addu s1_ptr,s1_ptr,4 - ld r8,s2_ptr,0 - addu s2_ptr,s2_ptr,4 - subu size,size,1 - subu.co r6,r10,r8 - st r6,res_ptr,0 - addu res_ptr,res_ptr,4 - -L_v2: subu size,size,8 - bcnd lt0,size,Lfin2 -/* Add blocks of 8 limbs until less than 8 limbs remain */ - align 8 -Loop2: subu size,size,8 - ld.d r8,s1_ptr,0 - ld.d r6,s2_ptr,0 - subu.cio r8,r8,r6 - st r8,res_ptr,0 - subu.cio r9,r9,r7 - st r9,res_ptr,4 - ld.d r8,s1_ptr,8 - ld.d r6,s2_ptr,8 - subu.cio r8,r8,r6 - st r8,res_ptr,8 - subu.cio r9,r9,r7 - st r9,res_ptr,12 - ld.d r8,s1_ptr,16 - ld.d r6,s2_ptr,16 - subu.cio r8,r8,r6 - st r8,res_ptr,16 - subu.cio r9,r9,r7 - st r9,res_ptr,20 - ld.d r8,s1_ptr,24 - ld.d r6,s2_ptr,24 - subu.cio r8,r8,r6 - st r8,res_ptr,24 - subu.cio r9,r9,r7 - st r9,res_ptr,28 - addu s1_ptr,s1_ptr,32 - addu s2_ptr,s2_ptr,32 - addu res_ptr,res_ptr,32 - bcnd ge0,size,Loop2 - -Lfin2: addu size,size,8-2 - bcnd lt0,size,Lend2 -Loope2: ld.d r8,s1_ptr,0 - ld.d r6,s2_ptr,0 - subu.cio r8,r8,r6 - st r8,res_ptr,0 - subu.cio r9,r9,r7 - st r9,res_ptr,4 - subu size,size,2 - addu s1_ptr,s1_ptr,8 - addu s2_ptr,s2_ptr,8 - addu res_ptr,res_ptr,8 - bcnd ge0,size,Loope2 -Lend2: bb0 0,size,Lret2 -/* Add last limb */ -Ljone: ld r10,s1_ptr,0 - ld r8,s2_ptr,0 - subu.cio r6,r10,r8 - st r6,res_ptr,0 - -Lret2: addu.ci r2,r0,r0 ; return carry-out from most sign. limb - jmp.n r1 - xor r2,r2,1 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mul_1.s b/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mul_1.s deleted file mode 100644 index c8abdc0b7f4947279c85715698daf85ae1a04195..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/mul_1.s +++ /dev/null @@ -1,136 +0,0 @@ -; mc88100 __gmpn_mul_1 -- Multiply a limb vector with a single limb and -; store the product in a second limb vector. - -; Copyright 1992, 1994, 1995, 2000 Free Software Foundation, Inc. - -; This file is part of the GNU MP Library. -; -; The GNU MP Library is free software; you can redistribute it and/or modify -; it under the terms of either: -; -; * the GNU Lesser General Public License as published by the Free -; Software Foundation; either version 3 of the License, or (at your -; option) any later version. -; -; or -; -; * the GNU General Public License as published by the Free Software -; Foundation; either version 2 of the License, or (at your option) any -; later version. -; -; or both in parallel, as here. -; -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -; for more details. -; -; You should have received copies of the GNU General Public License and the -; GNU Lesser General Public License along with the GNU MP Library. If not, -; see https://www.gnu.org/licenses/. - - -; INPUT PARAMETERS -; res_ptr r2 -; s1_ptr r3 -; size r4 -; s2_limb r5 - -; Common overhead is about 11 cycles/invocation. - -; The speed for S2_LIMB >= 0x10000 is approximately 21 cycles/limb. (The -; pipeline stalls 2 cycles due to WB contention.) - -; The speed for S2_LIMB < 0x10000 is approximately 16 cycles/limb. (The -; pipeline stalls 2 cycles due to WB contention and 1 cycle due to latency.) - -; To enhance speed: -; 1. Unroll main loop 4-8 times. -; 2. Schedule code to avoid WB contention. It might be tempting to move the -; ld instruction in the loops down to save 2 cycles (less WB contention), -; but that looses because the ultimate value will be read from outside -; the allocated space. But if we handle the ultimate multiplication in -; the tail, we can do this. -; 3. Make the multiplication with less instructions. I think the code for -; (S2_LIMB >= 0x10000) is not minimal. -; With these techniques the (S2_LIMB >= 0x10000) case would run in 17 or -; less cycles/limb; the (S2_LIMB < 0x10000) case would run in 11 -; cycles/limb. (Assuming infinite unrolling.) - - text - align 16 - global ___gmpn_mul_1 -___gmpn_mul_1: - - ; Make S1_PTR and RES_PTR point at the end of their blocks - ; and negate SIZE. - lda r3,r3[r4] - lda r6,r2[r4] ; RES_PTR in r6 since r2 is retval - subu r4,r0,r4 - - addu.co r2,r0,r0 ; r2 = cy = 0 - ld r9,r3[r4] - mask r7,r5,0xffff ; r7 = lo(S2_LIMB) - extu r8,r5,16 ; r8 = hi(S2_LIMB) - bcnd.n eq0,r8,Lsmall ; jump if (hi(S2_LIMB) == 0) - subu r6,r6,4 - -; General code for any value of S2_LIMB. - - ; Make a stack frame and save r25 and r26 - subu r31,r31,16 - st.d r25,r31,8 - - ; Enter the loop in the middle - br.n L1 - addu r4,r4,1 - -Loop: ld r9,r3[r4] - st r26,r6[r4] -; bcnd ne0,r0,0 ; bubble - addu r4,r4,1 -L1: mul r26,r9,r5 ; low word of product mul_1 WB ld - mask r12,r9,0xffff ; r12 = lo(s1_limb) mask_1 - mul r11,r12,r7 ; r11 = prod_0 mul_2 WB mask_1 - mul r10,r12,r8 ; r10 = prod_1a mul_3 - extu r13,r9,16 ; r13 = hi(s1_limb) extu_1 WB mul_1 - mul r12,r13,r7 ; r12 = prod_1b mul_4 WB extu_1 - mul r25,r13,r8 ; r25 = prod_2 mul_5 WB mul_2 - extu r11,r11,16 ; r11 = hi(prod_0) extu_2 WB mul_3 - addu r10,r10,r11 ; addu_1 WB extu_2 -; bcnd ne0,r0,0 ; bubble WB addu_1 - addu.co r10,r10,r12 ; WB mul_4 - mask.u r10,r10,0xffff ; move the 16 most significant bits... - addu.ci r10,r10,r0 ; ...to the low half of the word... - rot r10,r10,16 ; ...and put carry in pos 16. - addu.co r26,r26,r2 ; add old carry limb - bcnd.n ne0,r4,Loop - addu.ci r2,r25,r10 ; compute new carry limb - - st r26,r6[r4] - ld.d r25,r31,8 - jmp.n r1 - addu r31,r31,16 - -; Fast code for S2_LIMB < 0x10000 -Lsmall: - ; Enter the loop in the middle - br.n SL1 - addu r4,r4,1 - -SLoop: ld r9,r3[r4] ; - st r8,r6[r4] ; - addu r4,r4,1 ; -SL1: mul r8,r9,r5 ; low word of product - mask r12,r9,0xffff ; r12 = lo(s1_limb) - extu r13,r9,16 ; r13 = hi(s1_limb) - mul r11,r12,r7 ; r11 = prod_0 - mul r12,r13,r7 ; r12 = prod_1b - addu.cio r8,r8,r2 ; add old carry limb - extu r10,r11,16 ; r11 = hi(prod_0) - addu r10,r10,r12 ; - bcnd.n ne0,r4,SLoop - extu r2,r10,16 ; r2 = new carry limb - - jmp.n r1 - st r8,r6[r4] diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/sub_n.s b/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/sub_n.s deleted file mode 100644 index 2bd8f09ca3df29d3d62fe2960531c550de903f9b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/m88k/sub_n.s +++ /dev/null @@ -1,115 +0,0 @@ -; mc88100 mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -; store difference in a third limb vector. - -; Copyright 1992, 1994, 1996, 2000 Free Software Foundation, Inc. - -; This file is part of the GNU MP Library. -; -; The GNU MP Library is free software; you can redistribute it and/or modify -; it under the terms of either: -; -; * the GNU Lesser General Public License as published by the Free -; Software Foundation; either version 3 of the License, or (at your -; option) any later version. -; -; or -; -; * the GNU General Public License as published by the Free Software -; Foundation; either version 2 of the License, or (at your option) any -; later version. -; -; or both in parallel, as here. -; -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -; for more details. -; -; You should have received copies of the GNU General Public License and the -; GNU Lesser General Public License along with the GNU MP Library. If not, -; see https://www.gnu.org/licenses/. - - -; INPUT PARAMETERS -; res_ptr r2 -; s1_ptr r3 -; s2_ptr r4 -; size r5 - -; This code has been optimized to run one instruction per clock, avoiding -; load stalls and writeback contention. As a result, the instruction -; order is not always natural. - -; The speed is about 4.6 clocks/limb + 18 clocks/limb-vector on an 88100, -; but on the 88110, it seems to run much slower, 6.6 clocks/limb. - - text - align 16 - global ___gmpn_sub_n -___gmpn_sub_n: - ld r6,r3,0 ; read first limb from s1_ptr - extu r10,r5,3 - ld r7,r4,0 ; read first limb from s2_ptr - - subu r5,r0,r5 - mak r5,r5,3<4> - bcnd.n eq0,r5,Lzero - subu.co r0,r0,r0 ; initialize carry - - or r12,r0,lo16(Lbase) - or.u r12,r12,hi16(Lbase) - addu r12,r12,r5 ; r12 is address for entering in loop - - extu r5,r5,2 ; divide by 4 - subu r2,r2,r5 ; adjust res_ptr - subu r3,r3,r5 ; adjust s1_ptr - subu r4,r4,r5 ; adjust s2_ptr - - or r8,r6,r0 - - jmp.n r12 - or r9,r7,r0 - -Loop: addu r3,r3,32 - st r8,r2,28 - addu r4,r4,32 - ld r6,r3,0 - addu r2,r2,32 - ld r7,r4,0 -Lzero: subu r10,r10,1 ; subtract 0 + 8r limbs (adj loop cnt) -Lbase: ld r8,r3,4 - subu.cio r6,r6,r7 - ld r9,r4,4 - st r6,r2,0 - ld r6,r3,8 ; subtract 7 + 8r limbs - subu.cio r8,r8,r9 - ld r7,r4,8 - st r8,r2,4 - ld r8,r3,12 ; subtract 6 + 8r limbs - subu.cio r6,r6,r7 - ld r9,r4,12 - st r6,r2,8 - ld r6,r3,16 ; subtract 5 + 8r limbs - subu.cio r8,r8,r9 - ld r7,r4,16 - st r8,r2,12 - ld r8,r3,20 ; subtract 4 + 8r limbs - subu.cio r6,r6,r7 - ld r9,r4,20 - st r6,r2,16 - ld r6,r3,24 ; subtract 3 + 8r limbs - subu.cio r8,r8,r9 - ld r7,r4,24 - st r8,r2,20 - ld r8,r3,28 ; subtract 2 + 8r limbs - subu.cio r6,r6,r7 - ld r9,r4,28 - st r6,r2,24 - bcnd.n ne0,r10,Loop ; subtract 1 + 8r limbs - subu.cio r8,r8,r9 - - st r8,r2,28 ; store most significant limb - - addu.ci r2,r0,r0 ; return carry-out from most sign. limb - jmp.n r1 - xor r2,r2,1 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/minithres/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/minithres/gmp-mparam.h deleted file mode 100644 index 35fcb7762cbe30719ff8cff0c3cfdc2ffa610526..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/minithres/gmp-mparam.h +++ /dev/null @@ -1,113 +0,0 @@ -/* Minimal values gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000, 2006, 2008-2010, 2012 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* The values in this file are not currently minimal. - Trimming them further would be good. */ - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 2 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 2 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 3 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 4 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 1 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 3 - -#define MUL_TOOM22_THRESHOLD 8 -#define MUL_TOOM33_THRESHOLD 20 -#define MUL_TOOM44_THRESHOLD 24 -#define MUL_TOOM6H_THRESHOLD 70 /* FIXME */ -#define MUL_TOOM8H_THRESHOLD 86 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 50 /* FIXME */ -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 50 /* FIXME */ -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 50 /* FIXME */ -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 50 /* FIXME */ - -#define SQR_BASECASE_THRESHOLD 0 -#define SQR_TOOM2_THRESHOLD 8 -#define SQR_TOOM3_THRESHOLD 20 -#define SQR_TOOM4_THRESHOLD 24 -#define SQR_TOOM6H_THRESHOLD 70 /* FIXME */ -#define SQR_TOOM8H_THRESHOLD 86 - -#define MULMOD_BNM1_THRESHOLD 10 -#define SQRMOD_BNM1_THRESHOLD 10 - -#define MUL_FFT_TABLE {64, 256, 1024, 4096, 8192, 65536, 0} -#define MUL_FFT_MODF_THRESHOLD 65 -#define MUL_FFT_THRESHOLD 200 - -#define SQR_FFT_TABLE {64, 256, 1024, 4096, 8192, 65536, 0} -#define SQR_FFT_MODF_THRESHOLD 65 -#define SQR_FFT_THRESHOLD 200 - -#define MULLO_BASECASE_THRESHOLD 0 -#define MULLO_DC_THRESHOLD 2 -#define MULLO_MUL_N_THRESHOLD 4 -#define SQRLO_BASECASE_THRESHOLD 0 -#define SQRLO_DC_THRESHOLD 2 -#define SQRLO_SQR_THRESHOLD 4 - - -#define DC_DIV_QR_THRESHOLD 6 -#define DC_DIVAPPR_Q_THRESHOLD 6 -#define DC_BDIV_QR_THRESHOLD 4 -#define DC_BDIV_Q_THRESHOLD 4 - -#define INV_MULMOD_BNM1_THRESHOLD 2 -#define INV_NEWTON_THRESHOLD 6 -#define INV_APPR_THRESHOLD 4 - -#define BINV_NEWTON_THRESHOLD 6 -#define REDC_1_TO_REDC_N_THRESHOLD 9 - -#define MU_DIV_QR_THRESHOLD 8 -#define MU_DIVAPPR_Q_THRESHOLD 8 -#define MUPI_DIV_QR_THRESHOLD 8 -#define MU_BDIV_QR_THRESHOLD 8 -#define MU_BDIV_Q_THRESHOLD 8 - -#define MATRIX22_STRASSEN_THRESHOLD 2 -#define HGCD_THRESHOLD 10 -#define GCD_DC_THRESHOLD 20 -#define GCDEXT_SCHOENHAGE_THRESHOLD 20 -#define JACOBI_BASE_METHOD 1 - -#define GET_STR_DC_THRESHOLD 4 -#define GET_STR_PRECOMPUTE_THRESHOLD 10 -#define SET_STR_THRESHOLD 64 -#define SET_STR_PRECOMPUTE_THRESHOLD 100 - -#define FAC_ODD_THRESHOLD 0 /* always */ -#define FAC_DSC_THRESHOLD 70 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/add_n.asm deleted file mode 100644 index e7d4c48f48027a1287c1774103e403cc60f9484d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/add_n.asm +++ /dev/null @@ -1,124 +0,0 @@ -dnl MIPS32 mpn_add_n -- Add two limb vectors of the same length > 0 and store -dnl sum in a third limb vector. - -dnl Copyright 1995, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr $4 -C s1_ptr $5 -C s2_ptr $6 -C size $7 - -ASM_START() -PROLOGUE(mpn_add_n) - - lw $10,0($5) - lw $11,0($6) - - addiu $7,$7,-1 - and $9,$7,4-1 C number of limbs in first loop - beq $9,$0,.L0 C if multiple of 4 limbs, skip first loop - move $2,$0 - - subu $7,$7,$9 - -.Loop0: addiu $9,$9,-1 - lw $12,4($5) - addu $11,$11,$2 - lw $13,4($6) - sltu $8,$11,$2 - addu $11,$10,$11 - sltu $2,$11,$10 - sw $11,0($4) - or $2,$2,$8 - - addiu $5,$5,4 - addiu $6,$6,4 - move $10,$12 - move $11,$13 - bne $9,$0,.Loop0 - addiu $4,$4,4 - -.L0: beq $7,$0,.Lend - nop - -.Loop: addiu $7,$7,-4 - - lw $12,4($5) - addu $11,$11,$2 - lw $13,4($6) - sltu $8,$11,$2 - addu $11,$10,$11 - sltu $2,$11,$10 - sw $11,0($4) - or $2,$2,$8 - - lw $10,8($5) - addu $13,$13,$2 - lw $11,8($6) - sltu $8,$13,$2 - addu $13,$12,$13 - sltu $2,$13,$12 - sw $13,4($4) - or $2,$2,$8 - - lw $12,12($5) - addu $11,$11,$2 - lw $13,12($6) - sltu $8,$11,$2 - addu $11,$10,$11 - sltu $2,$11,$10 - sw $11,8($4) - or $2,$2,$8 - - lw $10,16($5) - addu $13,$13,$2 - lw $11,16($6) - sltu $8,$13,$2 - addu $13,$12,$13 - sltu $2,$13,$12 - sw $13,12($4) - or $2,$2,$8 - - addiu $5,$5,16 - addiu $6,$6,16 - - bne $7,$0,.Loop - addiu $4,$4,16 - -.Lend: addu $11,$11,$2 - sltu $8,$11,$2 - addu $11,$10,$11 - sltu $2,$11,$10 - sw $11,0($4) - j $31 - or $2,$2,$8 -EPILOGUE(mpn_add_n) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/addmul_1.asm deleted file mode 100644 index 9aa9e163ce846b158d171886fd4f154b38441482..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/addmul_1.asm +++ /dev/null @@ -1,101 +0,0 @@ -dnl MIPS32 mpn_addmul_1 -- Multiply a limb vector with a single limb and add -dnl the product to a second limb vector. - -dnl Copyright 1992, 1994, 1996, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr $4 -C s1_ptr $5 -C size $6 -C s2_limb $7 - -ASM_START() -PROLOGUE(mpn_addmul_1) - -C feed-in phase 0 - lw $8,0($5) - -C feed-in phase 1 - addiu $5,$5,4 - multu $8,$7 - - addiu $6,$6,-1 - beq $6,$0,$LC0 - move $2,$0 C zero cy2 - - addiu $6,$6,-1 - beq $6,$0,$LC1 - lw $8,0($5) C load new s1 limb as early as possible - -Loop: lw $10,0($4) - mflo $3 - mfhi $9 - addiu $5,$5,4 - addu $3,$3,$2 C add old carry limb to low product limb - multu $8,$7 - lw $8,0($5) C load new s1 limb as early as possible - addiu $6,$6,-1 C decrement loop counter - sltu $2,$3,$2 C carry from previous addition -> $2 - addu $3,$10,$3 - sltu $10,$3,$10 - addu $2,$2,$10 - sw $3,0($4) - addiu $4,$4,4 - bne $6,$0,Loop - addu $2,$9,$2 C add high product limb and carry from addition - -C wind-down phase 1 -$LC1: lw $10,0($4) - mflo $3 - mfhi $9 - addu $3,$3,$2 - sltu $2,$3,$2 - multu $8,$7 - addu $3,$10,$3 - sltu $10,$3,$10 - addu $2,$2,$10 - sw $3,0($4) - addiu $4,$4,4 - addu $2,$9,$2 C add high product limb and carry from addition - -C wind-down phase 0 -$LC0: lw $10,0($4) - mflo $3 - mfhi $9 - addu $3,$3,$2 - sltu $2,$3,$2 - addu $3,$10,$3 - sltu $10,$3,$10 - addu $2,$2,$10 - sw $3,0($4) - j $31 - addu $2,$9,$2 C add high product limb and carry from addition -EPILOGUE(mpn_addmul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/gmp-mparam.h deleted file mode 100644 index 986135df9642cd1538b5240372ffa0be7502597b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/gmp-mparam.h +++ /dev/null @@ -1,72 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - - -/* Generated by tuneup.c, 2002-02-20, gcc 2.95 (R3000) */ - -#define MUL_TOOM22_THRESHOLD 20 -#define MUL_TOOM33_THRESHOLD 50 - -#define SQR_BASECASE_THRESHOLD 7 -#define SQR_TOOM2_THRESHOLD 57 -#define SQR_TOOM3_THRESHOLD 78 - -#define DIV_SB_PREINV_THRESHOLD 0 /* always */ -#define DIV_DC_THRESHOLD 57 -#define POWM_THRESHOLD 78 - -#define GCD_ACCEL_THRESHOLD 3 -#define JACOBI_BASE_METHOD 2 - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define USE_PREINV_DIVREM_1 1 -#define USE_PREINV_MOD_1 1 -#define DIVREM_2_THRESHOLD 0 /* always */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define MODEXACT_1_ODD_THRESHOLD 0 /* always */ - -#define GET_STR_DC_THRESHOLD 19 -#define GET_STR_PRECOMPUTE_THRESHOLD 25 -#define SET_STR_THRESHOLD 309 - -#define MUL_FFT_TABLE { 496, 1056, 2176, 5632, 14336, 40960, 0 } -#define MUL_FFT_MODF_THRESHOLD 624 -#define MUL_FFT_THRESHOLD 5888 - -#define SQR_FFT_TABLE { 496, 1184, 2176, 5632, 14336, 40960, 0 } -#define SQR_FFT_MODF_THRESHOLD 560 -#define SQR_FFT_THRESHOLD 5376 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/lshift.asm deleted file mode 100644 index 6a58bb4579bd5d9a8828ec46c58d2b0b66c56de8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/lshift.asm +++ /dev/null @@ -1,99 +0,0 @@ -dnl MIPS32 mpn_lshift -- Left shift. - -dnl Copyright 1995, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr $4 -C src_ptr $5 -C size $6 -C cnt $7 - -ASM_START() -PROLOGUE(mpn_lshift) - sll $2,$6,2 - addu $5,$5,$2 C make r5 point at end of src - lw $10,-4($5) C load first limb - subu $13,$0,$7 - addu $4,$4,$2 C make r4 point at end of res - addiu $6,$6,-1 - and $9,$6,4-1 C number of limbs in first loop - beq $9,$0,.L0 C if multiple of 4 limbs, skip first loop - srl $2,$10,$13 C compute function result - - subu $6,$6,$9 - -.Loop0: lw $3,-8($5) - addiu $4,$4,-4 - addiu $5,$5,-4 - addiu $9,$9,-1 - sll $11,$10,$7 - srl $12,$3,$13 - move $10,$3 - or $8,$11,$12 - bne $9,$0,.Loop0 - sw $8,0($4) - -.L0: beq $6,$0,.Lend - nop - -.Loop: lw $3,-8($5) - addiu $4,$4,-16 - addiu $6,$6,-4 - sll $11,$10,$7 - srl $12,$3,$13 - - lw $10,-12($5) - sll $14,$3,$7 - or $8,$11,$12 - sw $8,12($4) - srl $9,$10,$13 - - lw $3,-16($5) - sll $11,$10,$7 - or $8,$14,$9 - sw $8,8($4) - srl $12,$3,$13 - - lw $10,-20($5) - sll $14,$3,$7 - or $8,$11,$12 - sw $8,4($4) - srl $9,$10,$13 - - addiu $5,$5,-16 - or $8,$14,$9 - bgtz $6,.Loop - sw $8,0($4) - -.Lend: sll $8,$10,$7 - j $31 - sw $8,-4($4) -EPILOGUE(mpn_lshift) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/mips-defs.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/mips-defs.m4 deleted file mode 100644 index 5fa89eca35d8fd15d8333c0e0234e68f47b2f0f5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/mips-defs.m4 +++ /dev/null @@ -1,80 +0,0 @@ -divert(-1) - -dnl m4 macros for MIPS assembly code (both 32-bit and 64-bit). - - -dnl Copyright 2000-2002 Free Software Foundation, Inc. -dnl -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl Usage: ASM_START() -define(`ASM_START', -m4_assert_numargs(0) -` .set noreorder - .set nomacro') - -dnl Usage: X(value) -define(`X', -m4_assert_numargs(1) -`0x$1') - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo) -dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) - -define(`PROLOGUE_cpu', -m4_assert_numargs(1) -` .text - .align 4 - .globl $1 - .ent $1 -$1:') - -define(`EPILOGUE_cpu', -m4_assert_numargs(1) -` .end $1') - - -dnl Usage: r0 ... r31 -dnl f0 ... f31 -dnl -dnl Map register names r0 to $0, and f0 to $f0, etc. -dnl -dnl defreg() is used to protect the $ in $0 (otherwise it would represent a -dnl macro argument). Double quoting is used to protect the f0 in $f0 -dnl (otherwise it would be an infinite recursion). - -forloop(i,0,31,`defreg(`r'i,$i)') -forloop(i,0,31,`deflit(`f'i,``$f''i)') - - -dnl Usage: ASM_END() -define(`ASM_END', -m4_assert_numargs(0) -) - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/mips.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/mips.m4 deleted file mode 100644 index 8b49e575e412b8c01469a8fc03eabcc600f9415a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/mips.m4 +++ /dev/null @@ -1,80 +0,0 @@ -divert(-1) - -dnl m4 macros for MIPS assembly code. - - -dnl Copyright 2000-2002 Free Software Foundation, Inc. -dnl -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl Usage: ASM_START() -define(`ASM_START', -m4_assert_numargs(0) -` .set noreorder - .set nomacro') - -dnl Usage: X(value) -define(`X', -m4_assert_numargs(1) -`0x$1') - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo) -dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) - -define(`PROLOGUE_cpu', -m4_assert_numargs(1) -` .text - .align 4 - .globl $1 - .ent $1 -$1:') - -define(`EPILOGUE_cpu', -m4_assert_numargs(1) -` .end $1') - - -dnl Usage: r0 ... r31 -dnl f0 ... f31 -dnl -dnl Map register names r0 to $0, and f0 to $f0, etc. -dnl -dnl defreg() is used to protect the $ in $0 (otherwise it would represent a -dnl macro argument). Double quoting is used to protect the f0 in $f0 -dnl (otherwise it would be an infinite recursion). - -forloop(i,0,31,`defreg(`r'i,$i)') -forloop(i,0,31,`deflit(`f'i,``$f''i)') - - -dnl Usage: ASM_END() -define(`ASM_END', -m4_assert_numargs(0) -) - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/mul_1.asm deleted file mode 100644 index 4337bc2bd40405bd1062db9613f5c4a75dc820d9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/mul_1.asm +++ /dev/null @@ -1,89 +0,0 @@ -dnl MIPS32 mpn_mul_1 -- Multiply a limb vector with a single limb and store -dnl the product in a second limb vector. - -dnl Copyright 1992, 1994, 1996, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr $4 -C s1_ptr $5 -C size $6 -C s2_limb $7 - -ASM_START() -PROLOGUE(mpn_mul_1) - -C feed-in phase 0 - lw $8,0($5) - -C feed-in phase 1 - addiu $5,$5,4 - multu $8,$7 - - addiu $6,$6,-1 - beq $6,$0,$LC0 - move $2,$0 C zero cy2 - - addiu $6,$6,-1 - beq $6,$0,$LC1 - lw $8,0($5) C load new s1 limb as early as possible - -Loop: mflo $10 - mfhi $9 - addiu $5,$5,4 - addu $10,$10,$2 C add old carry limb to low product limb - multu $8,$7 - lw $8,0($5) C load new s1 limb as early as possible - addiu $6,$6,-1 C decrement loop counter - sltu $2,$10,$2 C carry from previous addition -> $2 - sw $10,0($4) - addiu $4,$4,4 - bne $6,$0,Loop - addu $2,$9,$2 C add high product limb and carry from addition - -C wind-down phase 1 -$LC1: mflo $10 - mfhi $9 - addu $10,$10,$2 - sltu $2,$10,$2 - multu $8,$7 - sw $10,0($4) - addiu $4,$4,4 - addu $2,$9,$2 C add high product limb and carry from addition - -C wind-down phase 0 -$LC0: mflo $10 - mfhi $9 - addu $10,$10,$2 - sltu $2,$10,$2 - sw $10,0($4) - j $31 - addu $2,$9,$2 C add high product limb and carry from addition -EPILOGUE(mpn_mul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/rshift.asm deleted file mode 100644 index 4b54510408f5e87c2d4e1a3fec62f748aa6d14b0..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/rshift.asm +++ /dev/null @@ -1,96 +0,0 @@ -dnl MIPS32 mpn_rshift -- Right shift. - -dnl Copyright 1995, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr $4 -C src_ptr $5 -C size $6 -C cnt $7 - -ASM_START() -PROLOGUE(mpn_rshift) - lw $10,0($5) C load first limb - subu $13,$0,$7 - addiu $6,$6,-1 - and $9,$6,4-1 C number of limbs in first loop - beq $9,$0,.L0 C if multiple of 4 limbs, skip first loop - sll $2,$10,$13 C compute function result - - subu $6,$6,$9 - -.Loop0: lw $3,4($5) - addiu $4,$4,4 - addiu $5,$5,4 - addiu $9,$9,-1 - srl $11,$10,$7 - sll $12,$3,$13 - move $10,$3 - or $8,$11,$12 - bne $9,$0,.Loop0 - sw $8,-4($4) - -.L0: beq $6,$0,.Lend - nop - -.Loop: lw $3,4($5) - addiu $4,$4,16 - addiu $6,$6,-4 - srl $11,$10,$7 - sll $12,$3,$13 - - lw $10,8($5) - srl $14,$3,$7 - or $8,$11,$12 - sw $8,-16($4) - sll $9,$10,$13 - - lw $3,12($5) - srl $11,$10,$7 - or $8,$14,$9 - sw $8,-12($4) - sll $12,$3,$13 - - lw $10,16($5) - srl $14,$3,$7 - or $8,$11,$12 - sw $8,-8($4) - sll $9,$10,$13 - - addiu $5,$5,16 - or $8,$14,$9 - bgtz $6,.Loop - sw $8,-4($4) - -.Lend: srl $8,$10,$7 - j $31 - sw $8,0($4) -EPILOGUE(mpn_rshift) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/sub_n.asm deleted file mode 100644 index a962ce1b79dfcda3d86b120469c1d4cddeca2ab9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/sub_n.asm +++ /dev/null @@ -1,123 +0,0 @@ -dnl MIPS32 mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -dnl store difference in a third limb vector. - -dnl Copyright 1995, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr $4 -C s1_ptr $5 -C s2_ptr $6 -C size $7 - -ASM_START() -PROLOGUE(mpn_sub_n) - lw $10,0($5) - lw $11,0($6) - - addiu $7,$7,-1 - and $9,$7,4-1 C number of limbs in first loop - beq $9,$0,.L0 C if multiple of 4 limbs, skip first loop - move $2,$0 - - subu $7,$7,$9 - -.Loop0: addiu $9,$9,-1 - lw $12,4($5) - addu $11,$11,$2 - lw $13,4($6) - sltu $8,$11,$2 - subu $11,$10,$11 - sltu $2,$10,$11 - sw $11,0($4) - or $2,$2,$8 - - addiu $5,$5,4 - addiu $6,$6,4 - move $10,$12 - move $11,$13 - bne $9,$0,.Loop0 - addiu $4,$4,4 - -.L0: beq $7,$0,.Lend - nop - -.Loop: addiu $7,$7,-4 - - lw $12,4($5) - addu $11,$11,$2 - lw $13,4($6) - sltu $8,$11,$2 - subu $11,$10,$11 - sltu $2,$10,$11 - sw $11,0($4) - or $2,$2,$8 - - lw $10,8($5) - addu $13,$13,$2 - lw $11,8($6) - sltu $8,$13,$2 - subu $13,$12,$13 - sltu $2,$12,$13 - sw $13,4($4) - or $2,$2,$8 - - lw $12,12($5) - addu $11,$11,$2 - lw $13,12($6) - sltu $8,$11,$2 - subu $11,$10,$11 - sltu $2,$10,$11 - sw $11,8($4) - or $2,$2,$8 - - lw $10,16($5) - addu $13,$13,$2 - lw $11,16($6) - sltu $8,$13,$2 - subu $13,$12,$13 - sltu $2,$12,$13 - sw $13,12($4) - or $2,$2,$8 - - addiu $5,$5,16 - addiu $6,$6,16 - - bne $7,$0,.Loop - addiu $4,$4,16 - -.Lend: addu $11,$11,$2 - sltu $8,$11,$2 - subu $11,$10,$11 - sltu $2,$10,$11 - sw $11,0($4) - j $31 - or $2,$2,$8 -EPILOGUE(mpn_sub_n) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/submul_1.asm deleted file mode 100644 index 335722b4e5747faad887213acac8512ba1138fad..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/submul_1.asm +++ /dev/null @@ -1,101 +0,0 @@ -dnl MIPS32 mpn_submul_1 -- Multiply a limb vector with a single limb and -dnl subtract the product from a second limb vector. - -dnl Copyright 1992, 1994, 1996, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr $4 -C s1_ptr $5 -C size $6 -C s2_limb $7 - -ASM_START() -PROLOGUE(mpn_submul_1) - -C feed-in phase 0 - lw $8,0($5) - -C feed-in phase 1 - addiu $5,$5,4 - multu $8,$7 - - addiu $6,$6,-1 - beq $6,$0,$LC0 - move $2,$0 C zero cy2 - - addiu $6,$6,-1 - beq $6,$0,$LC1 - lw $8,0($5) C load new s1 limb as early as possible - -Loop: lw $10,0($4) - mflo $3 - mfhi $9 - addiu $5,$5,4 - addu $3,$3,$2 C add old carry limb to low product limb - multu $8,$7 - lw $8,0($5) C load new s1 limb as early as possible - addiu $6,$6,-1 C decrement loop counter - sltu $2,$3,$2 C carry from previous addition -> $2 - subu $3,$10,$3 - sgtu $10,$3,$10 - addu $2,$2,$10 - sw $3,0($4) - addiu $4,$4,4 - bne $6,$0,Loop - addu $2,$9,$2 C add high product limb and carry from addition - -C wind-down phase 1 -$LC1: lw $10,0($4) - mflo $3 - mfhi $9 - addu $3,$3,$2 - sltu $2,$3,$2 - multu $8,$7 - subu $3,$10,$3 - sgtu $10,$3,$10 - addu $2,$2,$10 - sw $3,0($4) - addiu $4,$4,4 - addu $2,$9,$2 C add high product limb and carry from addition - -C wind-down phase 0 -$LC0: lw $10,0($4) - mflo $3 - mfhi $9 - addu $3,$3,$2 - sltu $2,$3,$2 - subu $3,$10,$3 - sgtu $10,$3,$10 - addu $2,$2,$10 - sw $3,0($4) - j $31 - addu $2,$9,$2 C add high product limb and carry from addition -EPILOGUE(mpn_submul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/umul.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/umul.asm deleted file mode 100644 index 1ced0eb883e2e6ab490464837feb72d28fe36f97..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips32/umul.asm +++ /dev/null @@ -1,45 +0,0 @@ -dnl MIPS32 umul_ppmm -- longlong.h support. - -dnl Copyright 1999, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C plp $4 -C u $5 -C v $6 - -ASM_START() -PROLOGUE(mpn_umul_ppmm) - multu $5,$6 - mflo $3 - mfhi $2 - j $31 - sw $3,0($4) -EPILOGUE(mpn_umul_ppmm) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/README b/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/README deleted file mode 100644 index 7ddd0e572c704805a175ef77c2c7b11d104e2c60..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/README +++ /dev/null @@ -1,60 +0,0 @@ -Copyright 1996 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - -This directory contains mpn functions optimized for MIPS3. Example of -processors that implement MIPS3 are R4000, R4400, R4600, R4700, and R8000. - -RELEVANT OPTIMIZATION ISSUES - -1. On the R4000 and R4400, branches, both the plain and the "likely" ones, - take 3 cycles to execute. (The fastest possible loop will take 4 cycles, - because of the delay insn.) - - On the R4600, branches takes a single cycle - - On the R8000, branches often take no noticeable cycles, as they are - executed in a separate function unit.. - -2. The R4000 and R4400 have a load latency of 4 cycles. - -3. On the R4000 and R4400, multiplies take a data-dependent number of - cycles, contrary to the SGI documentation. There seem to be 3 or 4 - possible latencies. - -4. The R1x000 processors can issue one floating-point operation, two integer - operations, and one memory operation per cycle. The FPU has very short - latencies, while the integer multiply unit is non-pipelined. We should - therefore write fp based mpn_Xmul_1. - -STATUS - -Good... diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/add_n.asm deleted file mode 100644 index 6856407efdb85722f897d1066e0d64fc82d23309..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/add_n.asm +++ /dev/null @@ -1,134 +0,0 @@ -dnl MIPS64 mpn_add_n -- Add two limb vectors of the same length > 0 and store -dnl sum in a third limb vector. - -dnl Copyright 1995, 2000-2002, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr $4 -C s1_ptr $5 -C s2_ptr $6 -C size $7 - -ASM_START() -PROLOGUE(mpn_add_nc) - ld $10,0($5) - ld $11,0($6) - - daddiu $7,$7,-1 - and $9,$7,4-1 C number of limbs in first loop - beq $9,$0,.L0 C if multiple of 4 limbs, skip first loop - move $2,$8 - b .Loop0 - dsubu $7,$7,$9 -EPILOGUE() -PROLOGUE(mpn_add_n) - ld $10,0($5) - ld $11,0($6) - - daddiu $7,$7,-1 - and $9,$7,4-1 C number of limbs in first loop - beq $9,$0,.L0 C if multiple of 4 limbs, skip first loop - move $2,$0 - - dsubu $7,$7,$9 - -.Loop0: daddiu $9,$9,-1 - ld $12,8($5) - daddu $11,$11,$2 - ld $13,8($6) - sltu $8,$11,$2 - daddu $11,$10,$11 - sltu $2,$11,$10 - sd $11,0($4) - or $2,$2,$8 - - daddiu $5,$5,8 - daddiu $6,$6,8 - move $10,$12 - move $11,$13 - bne $9,$0,.Loop0 - daddiu $4,$4,8 - -.L0: beq $7,$0,.Lend - nop - -.Loop: daddiu $7,$7,-4 - - ld $12,8($5) - daddu $11,$11,$10 - ld $13,8($6) - sltu $8,$11,$10 - daddu $11,$11,$2 - sltu $2,$11,$2 - sd $11,0($4) - or $2,$2,$8 - - ld $10,16($5) - daddu $13,$13,$12 - ld $11,16($6) - sltu $8,$13,$12 - daddu $13,$13,$2 - sltu $2,$13,$2 - sd $13,8($4) - or $2,$2,$8 - - ld $12,24($5) - daddu $11,$11,$10 - ld $13,24($6) - sltu $8,$11,$10 - daddu $11,$11,$2 - sltu $2,$11,$2 - sd $11,16($4) - or $2,$2,$8 - - ld $10,32($5) - daddu $13,$13,$12 - ld $11,32($6) - sltu $8,$13,$12 - daddu $13,$13,$2 - sltu $2,$13,$2 - sd $13,24($4) - or $2,$2,$8 - - daddiu $5,$5,32 - daddiu $6,$6,32 - - bne $7,$0,.Loop - daddiu $4,$4,32 - -.Lend: daddu $11,$11,$2 - sltu $8,$11,$2 - daddu $11,$10,$11 - sltu $2,$11,$10 - sd $11,0($4) - j $31 - or $2,$2,$8 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/addmul_1.asm deleted file mode 100644 index 8ff0976e2523f3a719a8fd52d092b7f7133dfb97..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/addmul_1.asm +++ /dev/null @@ -1,101 +0,0 @@ -dnl MIPS64 mpn_addmul_1 -- Multiply a limb vector with a single limb and add -dnl the product to a second limb vector. - -dnl Copyright 1992, 1994, 1995, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr $4 -C s1_ptr $5 -C size $6 -C s2_limb $7 - -ASM_START() -PROLOGUE(mpn_addmul_1) - -C feed-in phase 0 - ld $8,0($5) - -C feed-in phase 1 - daddiu $5,$5,8 - dmultu $8,$7 - - daddiu $6,$6,-1 - beq $6,$0,$LC0 - move $2,$0 C zero cy2 - - daddiu $6,$6,-1 - beq $6,$0,$LC1 - ld $8,0($5) C load new s1 limb as early as possible - -Loop: ld $10,0($4) - mflo $3 - mfhi $9 - daddiu $5,$5,8 - daddu $3,$3,$2 C add old carry limb to low product limb - dmultu $8,$7 - ld $8,0($5) C load new s1 limb as early as possible - daddiu $6,$6,-1 C decrement loop counter - sltu $2,$3,$2 C carry from previous addition -> $2 - daddu $3,$10,$3 - sltu $10,$3,$10 - daddu $2,$2,$10 - sd $3,0($4) - daddiu $4,$4,8 - bne $6,$0,Loop - daddu $2,$9,$2 C add high product limb and carry from addition - -C wind-down phase 1 -$LC1: ld $10,0($4) - mflo $3 - mfhi $9 - daddu $3,$3,$2 - sltu $2,$3,$2 - dmultu $8,$7 - daddu $3,$10,$3 - sltu $10,$3,$10 - daddu $2,$2,$10 - sd $3,0($4) - daddiu $4,$4,8 - daddu $2,$9,$2 C add high product limb and carry from addition - -C wind-down phase 0 -$LC0: ld $10,0($4) - mflo $3 - mfhi $9 - daddu $3,$3,$2 - sltu $2,$3,$2 - daddu $3,$10,$3 - sltu $10,$3,$10 - daddu $2,$2,$10 - sd $3,0($4) - j $31 - daddu $2,$9,$2 C add high product limb and carry from addition -EPILOGUE(mpn_addmul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/gmp-mparam.h deleted file mode 100644 index b7fcf24a4136cf2f475035b3c9d68018466b6af7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/gmp-mparam.h +++ /dev/null @@ -1,72 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - - -/* Generated by tuneup.c, 2004-02-10, gcc 3.2 & MIPSpro C 7.2.1 (R1x000) */ - -#define MUL_TOOM22_THRESHOLD 16 -#define MUL_TOOM33_THRESHOLD 89 - -#define SQR_BASECASE_THRESHOLD 6 -#define SQR_TOOM2_THRESHOLD 32 -#define SQR_TOOM3_THRESHOLD 98 - -#define DIV_SB_PREINV_THRESHOLD 0 /* always */ -#define DIV_DC_THRESHOLD 53 -#define POWM_THRESHOLD 61 - -#define HGCD_THRESHOLD 116 -#define GCD_ACCEL_THRESHOLD 3 -#define GCD_DC_THRESHOLD 492 -#define JACOBI_BASE_METHOD 2 - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define USE_PREINV_DIVREM_1 1 -#define USE_PREINV_MOD_1 1 -#define DIVREM_2_THRESHOLD 0 /* always */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define MODEXACT_1_ODD_THRESHOLD 0 /* always */ - -#define GET_STR_DC_THRESHOLD 21 -#define GET_STR_PRECOMPUTE_THRESHOLD 26 -#define SET_STR_THRESHOLD 3962 - -#define MUL_FFT_TABLE { 368, 736, 1600, 3328, 7168, 20480, 49152, 0 } -#define MUL_FFT_MODF_THRESHOLD 264 -#define MUL_FFT_THRESHOLD 1920 - -#define SQR_FFT_TABLE { 368, 736, 1856, 3328, 7168, 20480, 49152, 0 } -#define SQR_FFT_MODF_THRESHOLD 280 -#define SQR_FFT_THRESHOLD 1920 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/lshift.asm deleted file mode 100644 index 3440eaf80b5b62200f602d11b70434f1d8124ca8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/lshift.asm +++ /dev/null @@ -1,99 +0,0 @@ -dnl MIPS64 mpn_lshift -- Left shift. - -dnl Copyright 1995, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr $4 -C src_ptr $5 -C size $6 -C cnt $7 - -ASM_START() -PROLOGUE(mpn_lshift) - dsll $2,$6,3 - daddu $5,$5,$2 C make r5 point at end of src - ld $10,-8($5) C load first limb - dsubu $13,$0,$7 - daddu $4,$4,$2 C make r4 point at end of res - daddiu $6,$6,-1 - and $9,$6,4-1 C number of limbs in first loop - beq $9,$0,.L0 C if multiple of 4 limbs, skip first loop - dsrl $2,$10,$13 C compute function result - - dsubu $6,$6,$9 - -.Loop0: ld $3,-16($5) - daddiu $4,$4,-8 - daddiu $5,$5,-8 - daddiu $9,$9,-1 - dsll $11,$10,$7 - dsrl $12,$3,$13 - move $10,$3 - or $8,$11,$12 - bne $9,$0,.Loop0 - sd $8,0($4) - -.L0: beq $6,$0,.Lend - nop - -.Loop: ld $3,-16($5) - daddiu $4,$4,-32 - daddiu $6,$6,-4 - dsll $11,$10,$7 - dsrl $12,$3,$13 - - ld $10,-24($5) - dsll $14,$3,$7 - or $8,$11,$12 - sd $8,24($4) - dsrl $9,$10,$13 - - ld $3,-32($5) - dsll $11,$10,$7 - or $8,$14,$9 - sd $8,16($4) - dsrl $12,$3,$13 - - ld $10,-40($5) - dsll $14,$3,$7 - or $8,$11,$12 - sd $8,8($4) - dsrl $9,$10,$13 - - daddiu $5,$5,-32 - or $8,$14,$9 - bgtz $6,.Loop - sd $8,0($4) - -.Lend: dsll $8,$10,$7 - j $31 - sd $8,-8($4) -EPILOGUE(mpn_lshift) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/mul_1.asm deleted file mode 100644 index 77acf0ac2576901b0936e0986611650c831e704f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/mul_1.asm +++ /dev/null @@ -1,92 +0,0 @@ -dnl MIPS64 mpn_mul_1 -- Multiply a limb vector with a single limb and store -dnl the product in a second limb vector. - -dnl Copyright 1992, 1994, 1995, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr $4 -C s1_ptr $5 -C size $6 -C s2_limb $7 - -ASM_START() -PROLOGUE(mpn_mul_1) - -C feed-in phase 0 - ld $8,0($5) - -C feed-in phase 1 - daddiu $5,$5,8 - dmultu $8,$7 - - daddiu $6,$6,-1 - beq $6,$0,$LC0 - move $2,$0 C zero cy2 - - daddiu $6,$6,-1 - beq $6,$0,$LC1 - ld $8,0($5) C load new s1 limb as early as possible - -Loop: nop - mflo $10 - mfhi $9 - daddiu $5,$5,8 - daddu $10,$10,$2 C add old carry limb to low product limb - dmultu $8,$7 - ld $8,0($5) C load new s1 limb as early as possible - daddiu $6,$6,-1 C decrement loop counter - sltu $2,$10,$2 C carry from previous addition -> $2 - nop - nop - sd $10,0($4) - daddiu $4,$4,8 - bne $6,$0,Loop - daddu $2,$9,$2 C add high product limb and carry from addition - -C wind-down phase 1 -$LC1: mflo $10 - mfhi $9 - daddu $10,$10,$2 - sltu $2,$10,$2 - dmultu $8,$7 - sd $10,0($4) - daddiu $4,$4,8 - daddu $2,$9,$2 C add high product limb and carry from addition - -C wind-down phase 0 -$LC0: mflo $10 - mfhi $9 - daddu $10,$10,$2 - sltu $2,$10,$2 - sd $10,0($4) - j $31 - daddu $2,$9,$2 C add high product limb and carry from addition -EPILOGUE(mpn_mul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/rshift.asm deleted file mode 100644 index 9253cb51d8548c6b6f40a3a42498d34dbfbd8ad7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/rshift.asm +++ /dev/null @@ -1,96 +0,0 @@ -dnl MIPS64 mpn_rshift -- Right shift. - -dnl Copyright 1995, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr $4 -C src_ptr $5 -C size $6 -C cnt $7 - -ASM_START() -PROLOGUE(mpn_rshift) - ld $10,0($5) C load first limb - dsubu $13,$0,$7 - daddiu $6,$6,-1 - and $9,$6,4-1 C number of limbs in first loop - beq $9,$0,.L0 C if multiple of 4 limbs, skip first loop - dsll $2,$10,$13 C compute function result - - dsubu $6,$6,$9 - -.Loop0: ld $3,8($5) - daddiu $4,$4,8 - daddiu $5,$5,8 - daddiu $9,$9,-1 - dsrl $11,$10,$7 - dsll $12,$3,$13 - move $10,$3 - or $8,$11,$12 - bne $9,$0,.Loop0 - sd $8,-8($4) - -.L0: beq $6,$0,.Lend - nop - -.Loop: ld $3,8($5) - daddiu $4,$4,32 - daddiu $6,$6,-4 - dsrl $11,$10,$7 - dsll $12,$3,$13 - - ld $10,16($5) - dsrl $14,$3,$7 - or $8,$11,$12 - sd $8,-32($4) - dsll $9,$10,$13 - - ld $3,24($5) - dsrl $11,$10,$7 - or $8,$14,$9 - sd $8,-24($4) - dsll $12,$3,$13 - - ld $10,32($5) - dsrl $14,$3,$7 - or $8,$11,$12 - sd $8,-16($4) - dsll $9,$10,$13 - - daddiu $5,$5,32 - or $8,$14,$9 - bgtz $6,.Loop - sd $8,-8($4) - -.Lend: dsrl $8,$10,$7 - j $31 - sd $8,0($4) -EPILOGUE(mpn_rshift) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/sqr_diagonal.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/sqr_diagonal.asm deleted file mode 100644 index dcb87dc21f1361dda15aab77c9801a0504a68241..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/sqr_diagonal.asm +++ /dev/null @@ -1,77 +0,0 @@ -dnl MIPS64 mpn_sqr_diagonal. - -dnl Copyright 2001, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl INPUT PARAMETERS -dnl rp $4 -dnl up $5 -dnl n $6 - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_sqr_diagonal) - ld r8,0(r5) - daddiu r6,r6,-2 - dmultu r8,r8 - bltz r6,$Lend1 - nop - ld r8,8(r5) - beq r6,r0,$Lend2 - nop - -$Loop: mflo r10 - mfhi r9 - daddiu r6,r6,-1 - sd r10,0(r4) - sd r9,8(r4) - dmultu r8,r8 - ld r8,16(r5) - daddiu r5,r5,8 - bne r6,r0,$Loop - daddiu r4,r4,16 - -$Lend2: mflo r10 - mfhi r9 - sd r10,0(r4) - sd r9,8(r4) - dmultu r8,r8 - mflo r10 - mfhi r9 - sd r10,16(r4) - j r31 - sd r9,24(r4) - -$Lend1: mflo r10 - mfhi r9 - sd r10,0(r4) - j r31 - sd r9,8(r4) -EPILOGUE(mpn_sqr_diagonal) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/sub_n.asm deleted file mode 100644 index 6a698976ebab601a5e136dd35786aebcb7084397..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/sub_n.asm +++ /dev/null @@ -1,134 +0,0 @@ -dnl MIPS64 mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -dnl store difference in a third limb vector. - -dnl Copyright 1995, 2000-2002, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr $4 -C s1_ptr $5 -C s2_ptr $6 -C size $7 - -ASM_START() -PROLOGUE(mpn_sub_nc) - ld $10,0($5) - ld $11,0($6) - - daddiu $7,$7,-1 - and $9,$7,4-1 C number of limbs in first loop - beq $9,$0,.L0 C if multiple of 4 limbs, skip first loop - move $2,$8 - b .Loop0 - dsubu $7,$7,$9 -EPILOGUE() -PROLOGUE(mpn_sub_n) - ld $10,0($5) - ld $11,0($6) - - daddiu $7,$7,-1 - and $9,$7,4-1 C number of limbs in first loop - beq $9,$0,.L0 C if multiple of 4 limbs, skip first loop - move $2,$0 - - dsubu $7,$7,$9 - -.Loop0: daddiu $9,$9,-1 - ld $12,8($5) - daddu $11,$11,$2 - ld $13,8($6) - sltu $8,$11,$2 - dsubu $11,$10,$11 - sltu $2,$10,$11 - sd $11,0($4) - or $2,$2,$8 - - daddiu $5,$5,8 - daddiu $6,$6,8 - move $10,$12 - move $11,$13 - bne $9,$0,.Loop0 - daddiu $4,$4,8 - -.L0: beq $7,$0,.Lend - nop - -.Loop: daddiu $7,$7,-4 - - ld $12,8($5) - dsubu $11,$10,$11 - ld $13,8($6) - sltu $8,$10,$11 - dsubu $14,$11,$2 - sltu $2,$11,$14 - sd $14,0($4) - or $2,$2,$8 - - ld $10,16($5) - dsubu $13,$12,$13 - ld $11,16($6) - sltu $8,$12,$13 - dsubu $14,$13,$2 - sltu $2,$13,$14 - sd $14,8($4) - or $2,$2,$8 - - ld $12,24($5) - dsubu $11,$10,$11 - ld $13,24($6) - sltu $8,$10,$11 - dsubu $14,$11,$2 - sltu $2,$11,$14 - sd $14,16($4) - or $2,$2,$8 - - ld $10,32($5) - dsubu $13,$12,$13 - ld $11,32($6) - sltu $8,$12,$13 - dsubu $14,$13,$2 - sltu $2,$13,$14 - sd $14,24($4) - or $2,$2,$8 - - daddiu $5,$5,32 - daddiu $6,$6,32 - - bne $7,$0,.Loop - daddiu $4,$4,32 - -.Lend: daddu $11,$11,$2 - sltu $8,$11,$2 - dsubu $11,$10,$11 - sltu $2,$10,$11 - sd $11,0($4) - j $31 - or $2,$2,$8 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/submul_1.asm deleted file mode 100644 index 089589cd736d402e670060993e052235297cff1d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/submul_1.asm +++ /dev/null @@ -1,101 +0,0 @@ -dnl MIPS64 mpn_submul_1 -- Multiply a limb vector with a single limb and -dnl subtract the product from a second limb vector. - -dnl Copyright 1992, 1994, 1995, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr $4 -C s1_ptr $5 -C size $6 -C s2_limb $7 - -ASM_START() -PROLOGUE(mpn_submul_1) - -C feed-in phase 0 - ld $8,0($5) - -C feed-in phase 1 - daddiu $5,$5,8 - dmultu $8,$7 - - daddiu $6,$6,-1 - beq $6,$0,$LC0 - move $2,$0 C zero cy2 - - daddiu $6,$6,-1 - beq $6,$0,$LC1 - ld $8,0($5) C load new s1 limb as early as possible - -Loop: ld $10,0($4) - mflo $3 - mfhi $9 - daddiu $5,$5,8 - daddu $3,$3,$2 C add old carry limb to low product limb - dmultu $8,$7 - ld $8,0($5) C load new s1 limb as early as possible - daddiu $6,$6,-1 C decrement loop counter - sltu $2,$3,$2 C carry from previous addition -> $2 - dsubu $3,$10,$3 - sgtu $10,$3,$10 - daddu $2,$2,$10 - sd $3,0($4) - daddiu $4,$4,8 - bne $6,$0,Loop - daddu $2,$9,$2 C add high product limb and carry from addition - -C wind-down phase 1 -$LC1: ld $10,0($4) - mflo $3 - mfhi $9 - daddu $3,$3,$2 - sltu $2,$3,$2 - dmultu $8,$7 - dsubu $3,$10,$3 - sgtu $10,$3,$10 - daddu $2,$2,$10 - sd $3,0($4) - daddiu $4,$4,8 - daddu $2,$9,$2 C add high product limb and carry from addition - -C wind-down phase 0 -$LC0: ld $10,0($4) - mflo $3 - mfhi $9 - daddu $3,$3,$2 - sltu $2,$3,$2 - dsubu $3,$10,$3 - sgtu $10,$3,$10 - daddu $2,$2,$10 - sd $3,0($4) - j $31 - daddu $2,$9,$2 C add high product limb and carry from addition -EPILOGUE(mpn_submul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/umul.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/umul.asm deleted file mode 100644 index b9aac575912dd9a73e377b8bf52cb0fabebe84a4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/mips64/umul.asm +++ /dev/null @@ -1,45 +0,0 @@ -dnl MIPS64 umul_ppmm -- longlong.h support. - -dnl Copyright 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C plp $4 -C u $5 -C v $6 - -ASM_START() -PROLOGUE(mpn_umul_ppmm) - dmultu $5,$6 - mflo $3 - mfhi $2 - j $31 - sd $3,0($4) -EPILOGUE(mpn_umul_ppmm) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/README b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/README deleted file mode 100644 index 4323390c9b882d1fe4e07fb998d6b7eda98efda1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/README +++ /dev/null @@ -1,162 +0,0 @@ -Copyright 1996, 1999, 2001, 2002, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - - -This directory contains mpn functions for various HP PA-RISC chips. Code -that runs faster on the PA7100 and later implementations, is in the pa7100 -directory. - -RELEVANT OPTIMIZATION ISSUES - - Load and Store timing - -On the PA7000 no memory instructions can issue the two cycles after a store. -For the PA7100, this is reduced to one cycle. - -The PA7100 has a lookup-free cache, so it helps to schedule loads and the -dependent instruction really far from each other. - -STATUS - -1. mpn_mul_1 could be improved to 6.5 cycles/limb on the PA7100, using the - instructions below (but some sw pipelining is needed to avoid the - xmpyu-fstds delay): - - fldds s1_ptr - - xmpyu - fstds N(%r30) - xmpyu - fstds N(%r30) - - ldws N(%r30) - ldws N(%r30) - ldws N(%r30) - ldws N(%r30) - - addc - stws res_ptr - addc - stws res_ptr - - addib Loop - -2. mpn_addmul_1 could be improved from the current 10 to 7.5 cycles/limb - (asymptotically) on the PA7100, using the instructions below. With proper - sw pipelining and the unrolling level below, the speed becomes 8 - cycles/limb. - - fldds s1_ptr - fldds s1_ptr - - xmpyu - fstds N(%r30) - xmpyu - fstds N(%r30) - xmpyu - fstds N(%r30) - xmpyu - fstds N(%r30) - - ldws N(%r30) - ldws N(%r30) - ldws N(%r30) - ldws N(%r30) - ldws N(%r30) - ldws N(%r30) - ldws N(%r30) - ldws N(%r30) - addc - addc - addc - addc - addc %r0,%r0,cy-limb - - ldws res_ptr - ldws res_ptr - ldws res_ptr - ldws res_ptr - add - stws res_ptr - addc - stws res_ptr - addc - stws res_ptr - addc - stws res_ptr - - addib - -3. For the PA8000 we have to stick to using 32-bit limbs before compiler - support emerges. But we want to use 64-bit operations whenever possible, - in particular for loads and stores. It is possible to handle mpn_add_n - efficiently by rotating (when s1/s2 are aligned), masking+bit field - inserting when (they are not). The speed should double compared to the - code used today. - - - - -LABEL SYNTAX - -The HP-UX assembler takes labels starting in column 0 with no colon, - - L$loop ldws,mb -4(0,%r25),%r22 - -Gas on hppa GNU/Linux however requires a colon, - - L$loop: ldws,mb -4(0,%r25),%r22 - -This is covered by using LDEF() from asm-defs.m4. An alternative would be -to use ".label" which is accepted by both, - - .label L$loop - ldws,mb -4(0,%r25),%r22 - -but that's not as nice to look at, not if you're used to assembler code -having labels in column 0. - - - - -REFERENCES - -Hewlett Packard, "HP Assembler Reference Manual", 9th edition, June 1998, -part number 92432-90012. - - - ----------------- -Local variables: -mode: text -fill-column: 76 -End: diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/add_n.asm deleted file mode 100644 index 46f39377ea87572d34a434a0404fadbe1e4c675a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/add_n.asm +++ /dev/null @@ -1,63 +0,0 @@ -dnl HP-PA mpn_add_n -- Add two limb vectors of the same length > 0 and store -dnl sum in a third limb vector. - -dnl Copyright 1992, 1994, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr gr26 -C s1_ptr gr25 -C s2_ptr gr24 -C size gr23 - -C One might want to unroll this as for other processors, but it turns out that -C the data cache contention after a store makes such unrolling useless. We -C can't come under 5 cycles/limb anyway. - -ASM_START() -PROLOGUE(mpn_add_n) - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - - addib,= -1,%r23,L(end) C check for (SIZE == 1) - add %r20,%r19,%r28 C add first limbs ignoring cy - -LDEF(loop) - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - stws,ma %r28,4(0,%r26) - addib,<> -1,%r23,L(loop) - addc %r20,%r19,%r28 - -LDEF(end) - stws %r28,0(0,%r26) - bv 0(%r2) - addc %r0,%r0,%r28 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/gmp-mparam.h deleted file mode 100644 index 377efcb1565fdc12b0a37d7a940453da7bb7840d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/gmp-mparam.h +++ /dev/null @@ -1,61 +0,0 @@ -/* HP-PA 1.0 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2002, 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* These values are for the PA7100 using GCC. */ -/* Generated by tuneup.c, 2000-10-27. */ - -#ifndef MUL_TOOM22_THRESHOLD -#define MUL_TOOM22_THRESHOLD 30 -#endif -#ifndef MUL_TOOM33_THRESHOLD -#define MUL_TOOM33_THRESHOLD 141 -#endif - -#ifndef SQR_TOOM2_THRESHOLD -#define SQR_TOOM2_THRESHOLD 59 -#endif -#ifndef SQR_TOOM3_THRESHOLD -#define SQR_TOOM3_THRESHOLD 177 -#endif - -#ifndef DIV_DC_THRESHOLD -#define DIV_DC_THRESHOLD 108 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 18 -#endif - -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 33 -#endif diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/addmul_1.asm deleted file mode 100644 index ec2f2198e84a48ee5e9db3cdd2f70c6fccefe392..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/addmul_1.asm +++ /dev/null @@ -1,106 +0,0 @@ -dnl HP-PA 1.1 mpn_addmul_1 -- Multiply a limb vector with a limb and add the -dnl result to a second limb vector. - -dnl Copyright 1992-1994, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr r26 -C s1_ptr r25 -C size r24 -C s2_limb r23 - -C This runs at 11 cycles/limb on a PA7000. With the used instructions, it can -C not become faster due to data cache contention after a store. On the PA7100 -C it runs at 10 cycles/limb. - -C There are some ideas described in mul_1.asm that applies to this code too. - -ASM_START() -PROLOGUE(mpn_addmul_1) -C .callinfo frame=64,no_calls - - ldo 64(%r30),%r30 - fldws,ma 4(%r25),%fr5 - stw %r23,-16(%r30) C move s2_limb ... - addib,= -1,%r24,L(just_one_limb) - fldws -16(%r30),%fr4 C ... into fr4 - add %r0,%r0,%r0 C clear carry - xmpyu %fr4,%fr5,%fr6 - fldws,ma 4(%r25),%fr7 - fstds %fr6,-16(%r30) - xmpyu %fr4,%fr7,%fr8 - ldw -12(%r30),%r19 C least significant limb in product - ldw -16(%r30),%r28 - - fstds %fr8,-16(%r30) - addib,= -1,%r24,L(end) - ldw -12(%r30),%r1 - -C Main loop -LDEF(loop) - ldws 0(%r26),%r29 - fldws,ma 4(%r25),%fr5 - add %r29,%r19,%r19 - stws,ma %r19,4(%r26) - addc %r28,%r1,%r19 - xmpyu %fr4,%fr5,%fr6 - ldw -16(%r30),%r28 - fstds %fr6,-16(%r30) - addc %r0,%r28,%r28 - addib,<> -1,%r24,L(loop) - ldw -12(%r30),%r1 - -LDEF(end) - ldw 0(%r26),%r29 - add %r29,%r19,%r19 - stws,ma %r19,4(%r26) - addc %r28,%r1,%r19 - ldw -16(%r30),%r28 - ldws 0(%r26),%r29 - addc %r0,%r28,%r28 - add %r29,%r19,%r19 - stws,ma %r19,4(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 - -LDEF(just_one_limb) - xmpyu %fr4,%fr5,%fr6 - ldw 0(%r26),%r29 - fstds %fr6,-16(%r30) - ldw -12(%r30),%r1 - ldw -16(%r30),%r28 - add %r29,%r1,%r19 - stw %r19,0(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/gmp-mparam.h deleted file mode 100644 index 1261b24c83ecbe97345b17b76abbf03d5e77b053..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/gmp-mparam.h +++ /dev/null @@ -1,72 +0,0 @@ -/* HP-PA 1.1 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2002, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* Generated by tuneup.c, 2004-02-07, gcc 2.8 (pa7100/100MHz) */ - -#define MUL_TOOM22_THRESHOLD 30 -#define MUL_TOOM33_THRESHOLD 89 - -#define SQR_BASECASE_THRESHOLD 4 -#define SQR_TOOM2_THRESHOLD 55 -#define SQR_TOOM3_THRESHOLD 101 - -#define DIV_SB_PREINV_THRESHOLD 0 /* always */ -#define DIV_DC_THRESHOLD 84 -#define POWM_THRESHOLD 166 - -#define HGCD_THRESHOLD 231 -#define GCD_ACCEL_THRESHOLD 3 -#define GCD_DC_THRESHOLD 823 -#define JACOBI_BASE_METHOD 2 - -#define DIVREM_1_NORM_THRESHOLD 5 -#define DIVREM_1_UNNORM_THRESHOLD 11 -#define MOD_1_NORM_THRESHOLD 5 -#define MOD_1_UNNORM_THRESHOLD 10 -#define USE_PREINV_DIVREM_1 1 -#define USE_PREINV_MOD_1 1 -#define DIVREM_2_THRESHOLD 0 /* always */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define MODEXACT_1_ODD_THRESHOLD 0 /* always */ - -#define GET_STR_DC_THRESHOLD 13 -#define GET_STR_PRECOMPUTE_THRESHOLD 23 -#define SET_STR_THRESHOLD 6589 - -#define MUL_FFT_TABLE { 464, 928, 1920, 4608, 14336, 40960, 0 } -#define MUL_FFT_MODF_THRESHOLD 480 -#define MUL_FFT_THRESHOLD 3328 - -#define SQR_FFT_TABLE { 528, 1184, 2176, 5632, 14336, 40960, 0 } -#define SQR_FFT_MODF_THRESHOLD 520 -#define SQR_FFT_THRESHOLD 3328 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/mul_1.asm deleted file mode 100644 index 6e60c2f61fec0ac96a8491408a471e08ab8fb63e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/mul_1.asm +++ /dev/null @@ -1,102 +0,0 @@ -dnl HP-PA 1.1 mpn_mul_1 -- Multiply a limb vector with a limb and store the -dnl result in a second limb vector. - -dnl Copyright 1992-1994, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr r26 -C s1_ptr r25 -C size r24 -C s2_limb r23 - -C This runs at 9 cycles/limb on a PA7000. With the used instructions, it can -C not become faster due to data cache contention after a store. On the PA7100 -C it runs at 7 cycles/limb. - -C We could use fldds to read two limbs at a time from the S1 array, and that -C could bring down the times to 8.5 and 6.5 cycles/limb for the PA7000 and -C PA7100, respectively. We don't do that since it does not seem worth the -C (alignment) troubles... - -C At least the PA7100 is rumored to be able to deal with cache-misses without -C stalling instruction issue. If this is true, and the cache is actually also -C lockup-free, we should use a deeper software pipeline, and load from S1 very -C early! (The loads and stores to -12(sp) will surely be in the cache.) - -ASM_START() -PROLOGUE(mpn_mul_1) -C .callinfo frame=64,no_calls - - ldo 64(%r30),%r30 - fldws,ma 4(%r25),%fr5 - stw %r23,-16(%r30) C move s2_limb ... - addib,= -1,%r24,L(just_one_limb) - fldws -16(%r30),%fr4 C ... into fr4 - add %r0,%r0,%r0 C clear carry - xmpyu %fr4,%fr5,%fr6 - fldws,ma 4(%r25),%fr7 - fstds %fr6,-16(%r30) - xmpyu %fr4,%fr7,%fr8 - ldw -12(%r30),%r19 C least significant limb in product - ldw -16(%r30),%r28 - - fstds %fr8,-16(%r30) - addib,= -1,%r24,L(end) - ldw -12(%r30),%r1 - -C Main loop -LDEF(loop) - fldws,ma 4(%r25),%fr5 - stws,ma %r19,4(%r26) - addc %r28,%r1,%r19 - xmpyu %fr4,%fr5,%fr6 - ldw -16(%r30),%r28 - fstds %fr6,-16(%r30) - addib,<> -1,%r24,L(loop) - ldw -12(%r30),%r1 - -LDEF(end) - stws,ma %r19,4(%r26) - addc %r28,%r1,%r19 - ldw -16(%r30),%r28 - stws,ma %r19,4(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 - -LDEF(just_one_limb) - xmpyu %fr4,%fr5,%fr6 - fstds %fr6,-16(%r30) - ldw -16(%r30),%r28 - ldo -64(%r30),%r30 - bv 0(%r2) - fstws %fr6R,0(%r26) -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/add_n.asm deleted file mode 100644 index b96d40382687d498d17549d872f583cc08d353ef..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/add_n.asm +++ /dev/null @@ -1,83 +0,0 @@ -dnl HP-PA mpn_add_n -- Add two limb vectors of the same length > 0 and store -dnl sum in a third limb vector. Optimized for the PA7100, where is runs at -dnl 4.25 cycles/limb. - -dnl Copyright 1992, 1994, 2000-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr r26 -C s1_ptr r25 -C s2_ptr r24 -C size r23 - -ASM_START() -PROLOGUE(mpn_add_n) - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - - addib,<= -5,%r23,L(rest) - add %r20,%r19,%r28 C add first limbs ignoring cy - -LDEF(loop) - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - stws,ma %r28,4(0,%r26) - addc %r20,%r19,%r28 - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - stws,ma %r28,4(0,%r26) - addc %r20,%r19,%r28 - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - stws,ma %r28,4(0,%r26) - addc %r20,%r19,%r28 - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - stws,ma %r28,4(0,%r26) - addib,> -4,%r23,L(loop) - addc %r20,%r19,%r28 - -LDEF(rest) - addib,= 4,%r23,L(end) - nop - -LDEF(eloop) - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - stws,ma %r28,4(0,%r26) - addib,> -1,%r23,L(eloop) - addc %r20,%r19,%r28 - -LDEF(end) - stws %r28,0(0,%r26) - bv 0(%r2) - addc %r0,%r0,%r28 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/addmul_1.asm deleted file mode 100644 index fb16100d83d16d6c1c1ca5b0a42b96f832a636e6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/addmul_1.asm +++ /dev/null @@ -1,201 +0,0 @@ -dnl HP-PA 7100/7200 mpn_addmul_1 -- Multiply a limb vector with a limb and -dnl add the result to a second limb vector. - -dnl Copyright 1995, 2000-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -define(`res_ptr',`%r26') -define(`s1_ptr',`%r25') -define(`size_param',`%r24') -define(`s2_limb',`%r23') - -define(`cylimb',`%r28') -define(`s0',`%r19') -define(`s1',`%r20') -define(`s2',`%r3') -define(`s3',`%r4') -define(`lo0',`%r21') -define(`lo1',`%r5') -define(`lo2',`%r6') -define(`lo3',`%r7') -define(`hi0',`%r22') -define(`hi1',`%r23') C safe to reuse -define(`hi2',`%r29') -define(`hi3',`%r1') - -ASM_START() -PROLOGUE(mpn_addmul_1) -C .callinfo frame=128,no_calls - - ldo 128(%r30),%r30 - stws s2_limb,-16(%r30) - add %r0,%r0,cylimb C clear cy and cylimb - addib,< -4,size_param,L(few_limbs) - fldws -16(%r30),%fr31R - - ldo -112(%r30),%r31 - stw %r3,-96(%r30) - stw %r4,-92(%r30) - stw %r5,-88(%r30) - stw %r6,-84(%r30) - stw %r7,-80(%r30) - - bb,>=,n s1_ptr,29,L(0) - - fldws,ma 4(s1_ptr),%fr4 - ldws 0(res_ptr),s0 - xmpyu %fr4,%fr31R,%fr5 - fstds %fr5,-16(%r31) - ldws -16(%r31),cylimb - ldws -12(%r31),lo0 - add s0,lo0,s0 - addib,< -1,size_param,L(few_limbs) - stws,ma s0,4(res_ptr) - -C start software pipeline ---------------------------------------------------- -LDEF(0) - fldds,ma 8(s1_ptr),%fr4 - fldds,ma 8(s1_ptr),%fr8 - - xmpyu %fr4L,%fr31R,%fr5 - xmpyu %fr4R,%fr31R,%fr6 - xmpyu %fr8L,%fr31R,%fr9 - xmpyu %fr8R,%fr31R,%fr10 - - fstds %fr5,-16(%r31) - fstds %fr6,-8(%r31) - fstds %fr9,0(%r31) - fstds %fr10,8(%r31) - - ldws -16(%r31),hi0 - ldws -12(%r31),lo0 - ldws -8(%r31),hi1 - ldws -4(%r31),lo1 - ldws 0(%r31),hi2 - ldws 4(%r31),lo2 - ldws 8(%r31),hi3 - ldws 12(%r31),lo3 - - addc lo0,cylimb,lo0 - addc lo1,hi0,lo1 - addc lo2,hi1,lo2 - addc lo3,hi2,lo3 - - addib,< -4,size_param,L(end) - addc %r0,hi3,cylimb C propagate carry into cylimb -C main loop ------------------------------------------------------------------ -LDEF(loop) - fldds,ma 8(s1_ptr),%fr4 - fldds,ma 8(s1_ptr),%fr8 - - ldws 0(res_ptr),s0 - xmpyu %fr4L,%fr31R,%fr5 - ldws 4(res_ptr),s1 - xmpyu %fr4R,%fr31R,%fr6 - ldws 8(res_ptr),s2 - xmpyu %fr8L,%fr31R,%fr9 - ldws 12(res_ptr),s3 - xmpyu %fr8R,%fr31R,%fr10 - - fstds %fr5,-16(%r31) - add s0,lo0,s0 - fstds %fr6,-8(%r31) - addc s1,lo1,s1 - fstds %fr9,0(%r31) - addc s2,lo2,s2 - fstds %fr10,8(%r31) - addc s3,lo3,s3 - - ldws -16(%r31),hi0 - ldws -12(%r31),lo0 - ldws -8(%r31),hi1 - ldws -4(%r31),lo1 - ldws 0(%r31),hi2 - ldws 4(%r31),lo2 - ldws 8(%r31),hi3 - ldws 12(%r31),lo3 - - addc lo0,cylimb,lo0 - stws,ma s0,4(res_ptr) - addc lo1,hi0,lo1 - stws,ma s1,4(res_ptr) - addc lo2,hi1,lo2 - stws,ma s2,4(res_ptr) - addc lo3,hi2,lo3 - stws,ma s3,4(res_ptr) - - addib,>= -4,size_param,L(loop) - addc %r0,hi3,cylimb C propagate carry into cylimb -C finish software pipeline --------------------------------------------------- -LDEF(end) - ldws 0(res_ptr),s0 - ldws 4(res_ptr),s1 - ldws 8(res_ptr),s2 - ldws 12(res_ptr),s3 - - add s0,lo0,s0 - stws,ma s0,4(res_ptr) - addc s1,lo1,s1 - stws,ma s1,4(res_ptr) - addc s2,lo2,s2 - stws,ma s2,4(res_ptr) - addc s3,lo3,s3 - stws,ma s3,4(res_ptr) - -C restore callee-saves registers --------------------------------------------- - ldw -96(%r30),%r3 - ldw -92(%r30),%r4 - ldw -88(%r30),%r5 - ldw -84(%r30),%r6 - ldw -80(%r30),%r7 - -LDEF(few_limbs) - addib,=,n 4,size_param,L(ret) - -LDEF(loop2) - fldws,ma 4(s1_ptr),%fr4 - ldws 0(res_ptr),s0 - xmpyu %fr4,%fr31R,%fr5 - fstds %fr5,-16(%r30) - ldws -16(%r30),hi0 - ldws -12(%r30),lo0 - addc lo0,cylimb,lo0 - addc %r0,hi0,cylimb - add s0,lo0,s0 - stws,ma s0,4(res_ptr) - addib,<> -1,size_param,L(loop2) - nop - -LDEF(ret) - addc %r0,cylimb,cylimb - bv 0(%r2) - ldo -128(%r30),%r30 -EPILOGUE(mpn_addmul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/lshift.asm deleted file mode 100644 index d65db2a76bfd09a313eeeb5e5b70fd235230a0a5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/lshift.asm +++ /dev/null @@ -1,95 +0,0 @@ -dnl HP-PA mpn_lshift -- Shift a number left. -dnl Optimized for the PA7100, where is runs at 3.25 cycles/limb. - -dnl Copyright 1992, 1994, 2000-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr r26 -C s_ptr r25 -C size r24 -C cnt r23 - -ASM_START() -PROLOGUE(mpn_lshift) - sh2add %r24,%r25,%r25 - sh2add %r24,%r26,%r26 - ldws,mb -4(0,%r25),%r22 - subi 32,%r23,%r1 - mtsar %r1 - addib,= -1,%r24,L(0004) - vshd %r0,%r22,%r28 C compute carry out limb - ldws,mb -4(0,%r25),%r29 - addib,<= -5,%r24,L(rest) - vshd %r22,%r29,%r20 - -LDEF(loop) - ldws,mb -4(0,%r25),%r22 - stws,mb %r20,-4(0,%r26) - vshd %r29,%r22,%r20 - ldws,mb -4(0,%r25),%r29 - stws,mb %r20,-4(0,%r26) - vshd %r22,%r29,%r20 - ldws,mb -4(0,%r25),%r22 - stws,mb %r20,-4(0,%r26) - vshd %r29,%r22,%r20 - ldws,mb -4(0,%r25),%r29 - stws,mb %r20,-4(0,%r26) - addib,> -4,%r24,L(loop) - vshd %r22,%r29,%r20 - -LDEF(rest) - addib,= 4,%r24,L(end1) - nop - -LDEF(eloop) - ldws,mb -4(0,%r25),%r22 - stws,mb %r20,-4(0,%r26) - addib,<= -1,%r24,L(end2) - vshd %r29,%r22,%r20 - ldws,mb -4(0,%r25),%r29 - stws,mb %r20,-4(0,%r26) - addib,> -1,%r24,L(eloop) - vshd %r22,%r29,%r20 - -LDEF(end1) - stws,mb %r20,-4(0,%r26) - vshd %r29,%r0,%r20 - bv 0(%r2) - stw %r20,-4(0,%r26) - -LDEF(end2) - stws,mb %r20,-4(0,%r26) - -LDEF(0004) - vshd %r22,%r0,%r20 - bv 0(%r2) - stw %r20,-4(0,%r26) -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/rshift.asm deleted file mode 100644 index f7896fc949bc02636888b0e08c731d95c8490ed7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/rshift.asm +++ /dev/null @@ -1,92 +0,0 @@ -dnl HP-PA mpn_rshift -- Shift a number right. -dnl Optimized for the PA7100, where is runs at 3.25 cycles/limb. - -dnl Copyright 1992, 1994, 2000-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr r26 -C s_ptr r25 -C size r24 -C cnt r23 - -ASM_START() -PROLOGUE(mpn_rshift) - ldws,ma 4(0,%r25),%r22 - mtsar %r23 - addib,= -1,%r24,L(0004) - vshd %r22,%r0,%r28 C compute carry out limb - ldws,ma 4(0,%r25),%r29 - addib,<= -5,%r24,L(rest) - vshd %r29,%r22,%r20 - -LDEF(loop) - ldws,ma 4(0,%r25),%r22 - stws,ma %r20,4(0,%r26) - vshd %r22,%r29,%r20 - ldws,ma 4(0,%r25),%r29 - stws,ma %r20,4(0,%r26) - vshd %r29,%r22,%r20 - ldws,ma 4(0,%r25),%r22 - stws,ma %r20,4(0,%r26) - vshd %r22,%r29,%r20 - ldws,ma 4(0,%r25),%r29 - stws,ma %r20,4(0,%r26) - addib,> -4,%r24,L(loop) - vshd %r29,%r22,%r20 - -LDEF(rest) - addib,= 4,%r24,L(end1) - nop - -LDEF(eloop) - ldws,ma 4(0,%r25),%r22 - stws,ma %r20,4(0,%r26) - addib,<= -1,%r24,L(end2) - vshd %r22,%r29,%r20 - ldws,ma 4(0,%r25),%r29 - stws,ma %r20,4(0,%r26) - addib,> -1,%r24,L(eloop) - vshd %r29,%r22,%r20 - -LDEF(end1) - stws,ma %r20,4(0,%r26) - vshd %r0,%r29,%r20 - bv 0(%r2) - stw %r20,0(0,%r26) - -LDEF(end2) - stws,ma %r20,4(0,%r26) - -LDEF(0004) - vshd %r0,%r22,%r20 - bv 0(%r2) - stw %r20,0(0,%r26) -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/sub_n.asm deleted file mode 100644 index df3f6e8b819303e4acc5ea2abcd722e6ed935cbf..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/sub_n.asm +++ /dev/null @@ -1,84 +0,0 @@ -dnl HP-PA mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -dnl store difference in a third limb vector. Optimized for the PA7100, where -dnl is runs at 4.25 cycles/limb. - -dnl Copyright 1992, 1994, 2000-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr r26 -C s1_ptr r25 -C s2_ptr r24 -C size r23 - -ASM_START() -PROLOGUE(mpn_sub_n) - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - - addib,<= -5,%r23,L(rest) - sub %r20,%r19,%r28 C subtract first limbs ignoring cy - -LDEF(loop) - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - stws,ma %r28,4(0,%r26) - subb %r20,%r19,%r28 - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - stws,ma %r28,4(0,%r26) - subb %r20,%r19,%r28 - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - stws,ma %r28,4(0,%r26) - subb %r20,%r19,%r28 - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - stws,ma %r28,4(0,%r26) - addib,> -4,%r23,L(loop) - subb %r20,%r19,%r28 - -LDEF(rest) - addib,= 4,%r23,L(end) - nop - -LDEF(eloop) - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - stws,ma %r28,4(0,%r26) - addib,> -1,%r23,L(eloop) - subb %r20,%r19,%r28 - -LDEF(end) - stws %r28,0(0,%r26) - addc %r0,%r0,%r28 - bv 0(%r2) - subi 1,%r28,%r28 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/submul_1.asm deleted file mode 100644 index 5ea08cbee5503dda2ebfe5afc158dba767d064df..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/pa7100/submul_1.asm +++ /dev/null @@ -1,207 +0,0 @@ -dnl HP-PA 7100/7200 mpn_submul_1 -- Multiply a limb vector with a limb and -dnl subtract the result from a second limb vector. - -dnl Copyright 1995, 2000-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -define(`res_ptr',`%r26') -define(`s1_ptr',`%r25') -define(`size_param',`%r24') -define(`s2_limb',`%r23') - -define(`cylimb',`%r28') -define(`s0',`%r19') -define(`s1',`%r20') -define(`s2',`%r3') -define(`s3',`%r4') -define(`lo0',`%r21') -define(`lo1',`%r5') -define(`lo2',`%r6') -define(`lo3',`%r7') -define(`hi0',`%r22') -define(`hi1',`%r23') C safe to reuse -define(`hi2',`%r29') -define(`hi3',`%r1') - -ASM_START() -PROLOGUE(mpn_submul_1) -C .callinfo frame=128,no_calls - - ldo 128(%r30),%r30 - stws s2_limb,-16(%r30) - add %r0,%r0,cylimb C clear cy and cylimb - addib,< -4,size_param,L(few_limbs) - fldws -16(%r30),%fr31R - - ldo -112(%r30),%r31 - stw %r3,-96(%r30) - stw %r4,-92(%r30) - stw %r5,-88(%r30) - stw %r6,-84(%r30) - stw %r7,-80(%r30) - - bb,>=,n s1_ptr,29,L(0) - - fldws,ma 4(s1_ptr),%fr4 - ldws 0(res_ptr),s0 - xmpyu %fr4,%fr31R,%fr5 - fstds %fr5,-16(%r31) - ldws -16(%r31),cylimb - ldws -12(%r31),lo0 - sub s0,lo0,s0 - add s0,lo0,%r0 C invert cy - addib,< -1,size_param,L(few_limbs) - stws,ma s0,4(res_ptr) - -C start software pipeline ---------------------------------------------------- -LDEF(0) - fldds,ma 8(s1_ptr),%fr4 - fldds,ma 8(s1_ptr),%fr8 - - xmpyu %fr4L,%fr31R,%fr5 - xmpyu %fr4R,%fr31R,%fr6 - xmpyu %fr8L,%fr31R,%fr9 - xmpyu %fr8R,%fr31R,%fr10 - - fstds %fr5,-16(%r31) - fstds %fr6,-8(%r31) - fstds %fr9,0(%r31) - fstds %fr10,8(%r31) - - ldws -16(%r31),hi0 - ldws -12(%r31),lo0 - ldws -8(%r31),hi1 - ldws -4(%r31),lo1 - ldws 0(%r31),hi2 - ldws 4(%r31),lo2 - ldws 8(%r31),hi3 - ldws 12(%r31),lo3 - - addc lo0,cylimb,lo0 - addc lo1,hi0,lo1 - addc lo2,hi1,lo2 - addc lo3,hi2,lo3 - - addib,< -4,size_param,L(end) - addc %r0,hi3,cylimb C propagate carry into cylimb -C main loop ------------------------------------------------------------------ -LDEF(loop) - fldds,ma 8(s1_ptr),%fr4 - fldds,ma 8(s1_ptr),%fr8 - - ldws 0(res_ptr),s0 - xmpyu %fr4L,%fr31R,%fr5 - ldws 4(res_ptr),s1 - xmpyu %fr4R,%fr31R,%fr6 - ldws 8(res_ptr),s2 - xmpyu %fr8L,%fr31R,%fr9 - ldws 12(res_ptr),s3 - xmpyu %fr8R,%fr31R,%fr10 - - fstds %fr5,-16(%r31) - sub s0,lo0,s0 - fstds %fr6,-8(%r31) - subb s1,lo1,s1 - fstds %fr9,0(%r31) - subb s2,lo2,s2 - fstds %fr10,8(%r31) - subb s3,lo3,s3 - subb %r0,%r0,lo0 C these two insns ... - add lo0,lo0,%r0 C ... just invert cy - - ldws -16(%r31),hi0 - ldws -12(%r31),lo0 - ldws -8(%r31),hi1 - ldws -4(%r31),lo1 - ldws 0(%r31),hi2 - ldws 4(%r31),lo2 - ldws 8(%r31),hi3 - ldws 12(%r31),lo3 - - addc lo0,cylimb,lo0 - stws,ma s0,4(res_ptr) - addc lo1,hi0,lo1 - stws,ma s1,4(res_ptr) - addc lo2,hi1,lo2 - stws,ma s2,4(res_ptr) - addc lo3,hi2,lo3 - stws,ma s3,4(res_ptr) - - addib,>= -4,size_param,L(loop) - addc %r0,hi3,cylimb C propagate carry into cylimb -C finish software pipeline --------------------------------------------------- -LDEF(end) - ldws 0(res_ptr),s0 - ldws 4(res_ptr),s1 - ldws 8(res_ptr),s2 - ldws 12(res_ptr),s3 - - sub s0,lo0,s0 - stws,ma s0,4(res_ptr) - subb s1,lo1,s1 - stws,ma s1,4(res_ptr) - subb s2,lo2,s2 - stws,ma s2,4(res_ptr) - subb s3,lo3,s3 - stws,ma s3,4(res_ptr) - subb %r0,%r0,lo0 C these two insns ... - add lo0,lo0,%r0 C ... invert cy - -C restore callee-saves registers --------------------------------------------- - ldw -96(%r30),%r3 - ldw -92(%r30),%r4 - ldw -88(%r30),%r5 - ldw -84(%r30),%r6 - ldw -80(%r30),%r7 - -LDEF(few_limbs) - addib,=,n 4,size_param,L(ret) - -LDEF(loop2) - fldws,ma 4(s1_ptr),%fr4 - ldws 0(res_ptr),s0 - xmpyu %fr4,%fr31R,%fr5 - fstds %fr5,-16(%r30) - ldws -16(%r30),hi0 - ldws -12(%r30),lo0 - addc lo0,cylimb,lo0 - addc %r0,hi0,cylimb - sub s0,lo0,s0 - add s0,lo0,%r0 C invert cy - stws,ma s0,4(res_ptr) - addib,<> -1,size_param,L(loop2) - nop - -LDEF(ret) - addc %r0,cylimb,cylimb - bv 0(%r2) - ldo -128(%r30),%r30 -EPILOGUE(mpn_submul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/sqr_diagonal.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/sqr_diagonal.asm deleted file mode 100644 index 1c7a18e37d681f656ddcbf3d3e5b3665038b7cbb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/sqr_diagonal.asm +++ /dev/null @@ -1,60 +0,0 @@ -dnl HP-PA 1.1 32-bit mpn_sqr_diagonal. - -dnl Copyright 2001, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C This code runs at 6 cycles/limb on the PA7100 and 2.5 cycles/limb on PA8x00. -C 2-way unrolling wouldn't help the PA7100; it could however bring times down -C to 2.0 cycles/limb for the PA8x00. - -C INPUT PARAMETERS -define(`rp',`%r26') -define(`up',`%r25') -define(`n',`%r24') - -ASM_START() -PROLOGUE(mpn_sqr_diagonal) - ldo 4(rp),rp - fldws,ma 4(up),%fr4r - addib,= -1,n,L(exit) - xmpyu %fr4r,%fr4r,%fr5 - -LDEF(loop) - fldws,ma 4(up),%fr4r - fstws %fr5r,-4(rp) - fstws,ma %fr5l,8(rp) - addib,<> -1,n,L(loop) - xmpyu %fr4r,%fr4r,%fr5 - -LDEF(exit) - fstws %fr5r,-4(rp) - bv 0(%r2) - fstws %fr5l,0(rp) -EPILOGUE(mpn_sqr_diagonal) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/submul_1.asm deleted file mode 100644 index a9b11d24a893c160e285037c2bc48dd8bbed1a64..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/submul_1.asm +++ /dev/null @@ -1,115 +0,0 @@ -dnl HP-PA 1.1 mpn_submul_1 -- Multiply a limb vector with a limb and subtract -dnl the result from a second limb vector. - -dnl Copyright 1992-1994, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr r26 -C s1_ptr r25 -C size r24 -C s2_limb r23 - -C This runs at 12 cycles/limb on a PA7000. With the used instructions, it can -C not become faster due to data cache contention after a store. On the PA7100 -C it runs at 11 cycles/limb. - -C There are some ideas described in mul_1.asm that applies to this code too. - -C It seems possible to make this run as fast as mpn_addmul_1, if we use -C sub,>>= %r29,%r19,%r22 -C addi 1,%r28,%r28 -C but that requires reworking the hairy software pipeline... - -ASM_START() -PROLOGUE(mpn_submul_1) -C .callinfo frame=64,no_calls - - ldo 64(%r30),%r30 - fldws,ma 4(%r25),%fr5 - stw %r23,-16(%r30) C move s2_limb ... - addib,= -1,%r24,L(just_one_limb) - fldws -16(%r30),%fr4 C ... into fr4 - add %r0,%r0,%r0 C clear carry - xmpyu %fr4,%fr5,%fr6 - fldws,ma 4(%r25),%fr7 - fstds %fr6,-16(%r30) - xmpyu %fr4,%fr7,%fr8 - ldw -12(%r30),%r19 C least significant limb in product - ldw -16(%r30),%r28 - - fstds %fr8,-16(%r30) - addib,= -1,%r24,L(end) - ldw -12(%r30),%r1 - -C Main loop -LDEF(loop) - ldws 0(%r26),%r29 - fldws,ma 4(%r25),%fr5 - sub %r29,%r19,%r22 - add %r22,%r19,%r0 - stws,ma %r22,4(%r26) - addc %r28,%r1,%r19 - xmpyu %fr4,%fr5,%fr6 - ldw -16(%r30),%r28 - fstds %fr6,-16(%r30) - addc %r0,%r28,%r28 - addib,<> -1,%r24,L(loop) - ldw -12(%r30),%r1 - -LDEF(end) - ldw 0(%r26),%r29 - sub %r29,%r19,%r22 - add %r22,%r19,%r0 - stws,ma %r22,4(%r26) - addc %r28,%r1,%r19 - ldw -16(%r30),%r28 - ldws 0(%r26),%r29 - addc %r0,%r28,%r28 - sub %r29,%r19,%r22 - add %r22,%r19,%r0 - stws,ma %r22,4(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 - -LDEF(just_one_limb) - xmpyu %fr4,%fr5,%fr6 - ldw 0(%r26),%r29 - fstds %fr6,-16(%r30) - ldw -12(%r30),%r1 - ldw -16(%r30),%r28 - sub %r29,%r1,%r22 - add %r22,%r1,%r0 - stw %r22,0(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/udiv.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/udiv.asm deleted file mode 100644 index 626ecd202b01406c17ebf9aea2d962fef476f4fe..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/udiv.asm +++ /dev/null @@ -1,102 +0,0 @@ -dnl HP-PA __udiv_qrnnd division support, used from longlong.h. -dnl This version runs fast on PA 7000 and later. - -dnl Copyright 1993, 1994, 2000, 2001, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C rem_ptr gr26 -C n1 gr25 -C n0 gr24 -C d gr23 - -C This file has caused a lot of trouble, since it demands PIC reference to -C static data, which triggers bugs in gas (at least version 2.7 through -C 2.11.2). When the bug is triggered, many bogus relocs are generated. The -C current solution is to stuff data right into the code, and refer it using -C absolute offsets. Fragile to be sure, but nothing else seems to work. - -ASM_START() -ifdef(`PIC',`', -` RODATA - INT64(0000, 0x43f00000, 0x0) C 2^64 -') - -PROLOGUE(mpn_udiv_qrnnd) -C .callinfo frame=64,no_calls - - ldo 64(%r30),%r30 - - stws %r25,-16(0,%r30) C n_hi - stws %r24,-12(0,%r30) C n_lo - -ifdef(`PIC', -` bl .+20,%r31 - dep %r0,31,2,%r31 - .word 0x0 C padding for alignment - .word 0x43f00000, 0x0 C 2^64 - ldo 4(%r31),%r31', -` ldil `L'%L(0000),%r31 - ldo R%L(0000)(%r31),%r31') - - fldds -16(0,%r30),%fr5 - stws %r23,-12(0,%r30) - comib,<= 0,%r25,L(1) - fcnvxf,dbl,dbl %fr5,%fr5 - fldds 0(0,%r31),%fr4 - fadd,dbl %fr4,%fr5,%fr5 - -LDEF(1) - fcpy,sgl %fr0,%fr6L - fldws -12(0,%r30),%fr6R - fcnvxf,dbl,dbl %fr6,%fr4 - - fdiv,dbl %fr5,%fr4,%fr5 - - fcnvfx,dbl,dbl %fr5,%fr4 - fstws %fr4R,-16(%r30) - xmpyu %fr4R,%fr6R,%fr6 - ldws -16(%r30),%r28 - fstds %fr6,-16(0,%r30) - ldws -12(0,%r30),%r21 - ldws -16(0,%r30),%r20 - sub %r24,%r21,%r22 - subb %r25,%r20,%r20 - comib,= 0,%r20,L(2) - ldo -64(%r30),%r30 - - add %r22,%r23,%r22 - ldo -1(%r28),%r28 - -LDEF(2) - bv 0(%r2) - stws %r22,0(0,%r26) - -EPILOGUE(mpn_udiv_qrnnd) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/umul.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/umul.asm deleted file mode 100644 index 18b923cd5a9bc6ac59e7ce616d68132a6f0c65a2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa1_1/umul.asm +++ /dev/null @@ -1,47 +0,0 @@ -dnl Copyright 1999, 2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_umul_ppmm) -C .callinfo frame=64,no_calls - - ldo 64(%r30),%r30 - stw %r25,-16(0,%r30) - fldws -16(0,%r30),%fr22R - stw %r24,-16(0,%r30) - fldws -16(0,%r30),%fr22L - xmpyu %fr22R,%fr22L,%fr22 - fstds %fr22,-16(0,%r30) - ldw -16(0,%r30),%r28 - ldw -12(0,%r30),%r29 - stw %r29,0(0,%r26) - bv 0(%r2) - ldo -64(%r30),%r30 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa2_0/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa2_0/add_n.asm deleted file mode 100644 index 8d881b8b0862577780be201e443106f6d06cd506..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa2_0/add_n.asm +++ /dev/null @@ -1,107 +0,0 @@ -dnl HP-PA 2.0 32-bit mpn_add_n -- Add two limb vectors of the same length > 0 -dnl and store sum in a third limb vector. - -dnl Copyright 1997, 1998, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr gr26 -C s1_ptr gr25 -C s2_ptr gr24 -C size gr23 - -C This runs at 2 cycles/limb on PA8000. - -ASM_START() -PROLOGUE(mpn_add_n) - sub %r0,%r23,%r22 - zdep %r22,30,3,%r28 C r28 = 2 * (-n & 7) - zdep %r22,29,3,%r22 C r22 = 4 * (-n & 7) - sub %r25,%r22,%r25 C offset s1_ptr - sub %r24,%r22,%r24 C offset s2_ptr - sub %r26,%r22,%r26 C offset res_ptr - blr %r28,%r0 C branch into loop - add %r0,%r0,%r0 C reset carry - -LDEF(loop) - ldw 0(%r25),%r20 - ldw 0(%r24),%r31 - addc %r20,%r31,%r20 - stw %r20,0(%r26) - -LDEF(7) - ldw 4(%r25),%r21 - ldw 4(%r24),%r19 - addc %r21,%r19,%r21 - stw %r21,4(%r26) - -LDEF(6) - ldw 8(%r25),%r20 - ldw 8(%r24),%r31 - addc %r20,%r31,%r20 - stw %r20,8(%r26) - -LDEF(5) - ldw 12(%r25),%r21 - ldw 12(%r24),%r19 - addc %r21,%r19,%r21 - stw %r21,12(%r26) - -LDEF(4) - ldw 16(%r25),%r20 - ldw 16(%r24),%r31 - addc %r20,%r31,%r20 - stw %r20,16(%r26) - -LDEF(3) - ldw 20(%r25),%r21 - ldw 20(%r24),%r19 - addc %r21,%r19,%r21 - stw %r21,20(%r26) - -LDEF(2) - ldw 24(%r25),%r20 - ldw 24(%r24),%r31 - addc %r20,%r31,%r20 - stw %r20,24(%r26) - -LDEF(1) - ldw 28(%r25),%r21 - ldo 32(%r25),%r25 - ldw 28(%r24),%r19 - addc %r21,%r19,%r21 - stw %r21,28(%r26) - ldo 32(%r24),%r24 - addib,> -8,%r23,L(loop) - ldo 32(%r26),%r26 - - bv (%r2) - addc %r0,%r0,%r28 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa2_0/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa2_0/gmp-mparam.h deleted file mode 100644 index 6016274714ddf69e7f7b059413f1bec5aabd9721..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa2_0/gmp-mparam.h +++ /dev/null @@ -1,167 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2002, 2009, 2010 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 552 MHz PA8600 (gcc61.fsffrance.org) */ - -#define DIVREM_1_NORM_THRESHOLD 3 -#define DIVREM_1_UNNORM_THRESHOLD 3 -#define MOD_1_NORM_THRESHOLD 3 -#define MOD_1_UNNORM_THRESHOLD 4 -#define MOD_1N_TO_MOD_1_1_THRESHOLD 11 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 8 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 0 /* never mpn_mod_1_1p */ -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 22 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 28 -#define USE_PREINV_DIVREM_1 1 -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD 36 - -#define MUL_TOOM22_THRESHOLD 18 -#define MUL_TOOM33_THRESHOLD 65 -#define MUL_TOOM44_THRESHOLD 166 -#define MUL_TOOM6H_THRESHOLD 202 -#define MUL_TOOM8H_THRESHOLD 333 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 105 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 138 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 105 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 102 - -#define SQR_BASECASE_THRESHOLD 7 -#define SQR_TOOM2_THRESHOLD 55 -#define SQR_TOOM3_THRESHOLD 93 -#define SQR_TOOM4_THRESHOLD 250 -#define SQR_TOOM6_THRESHOLD 306 -#define SQR_TOOM8_THRESHOLD 527 - -#define MULMOD_BNM1_THRESHOLD 13 -#define SQRMOD_BNM1_THRESHOLD 15 - -#define MUL_FFT_MODF_THRESHOLD 244 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 244, 5}, { 8, 4}, { 17, 5}, { 13, 6}, \ - { 7, 5}, { 17, 6}, { 9, 5}, { 19, 6}, \ - { 13, 7}, { 7, 6}, { 17, 7}, { 9, 6}, \ - { 19, 7}, { 11, 6}, { 24, 7}, { 13, 8}, \ - { 7, 7}, { 19, 8}, { 11, 7}, { 25, 8}, \ - { 15, 7}, { 33, 8}, { 23, 9}, { 15, 8}, \ - { 39, 9}, { 23,10}, { 15, 9}, { 31, 8}, \ - { 67, 9}, { 39, 8}, { 79, 9}, { 47,10}, \ - { 31, 9}, { 71, 8}, { 143, 9}, { 79,10}, \ - { 47,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255, 9}, { 135, 8}, { 271, 9}, { 143,10}, \ - { 79, 9}, { 159, 8}, { 319, 9}, { 175, 8}, \ - { 351,10}, { 95, 9}, { 191, 8}, { 383, 9}, \ - { 207,11}, { 63,10}, { 127, 9}, { 255, 8}, \ - { 511, 9}, { 271,10}, { 143, 9}, { 287, 8}, \ - { 575,10}, { 159, 9}, { 319,10}, { 175, 9}, \ - { 351,11}, { 95,10}, { 191, 9}, { 383,10}, \ - { 207, 9}, { 415,12}, { 63,11}, { 127,10}, \ - { 255, 9}, { 511,10}, { 271, 9}, { 543, 8}, \ - { 1087,10}, { 287, 9}, { 575,10}, { 303,11}, \ - { 159,10}, { 351, 9}, { 703, 8}, { 1407,11}, \ - { 191,10}, { 415, 9}, { 831,11}, { 223, 9}, \ - { 895,10}, { 479,12}, { 127,11}, { 255,10}, \ - { 543, 9}, { 1087,11}, { 287,10}, { 607, 9}, \ - { 1215,11}, { 351,10}, { 703, 9}, { 1407,12}, \ - { 191,11}, { 415,10}, { 831,11}, { 479,13}, \ - { 8192,14}, { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 107 -#define MUL_FFT_THRESHOLD 2112 - -#define SQR_FFT_MODF_THRESHOLD 240 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 240, 5}, { 8, 4}, { 17, 5}, { 19, 6}, \ - { 17, 7}, { 9, 6}, { 20, 7}, { 11, 6}, \ - { 23, 7}, { 13, 8}, { 7, 7}, { 19, 8}, \ - { 11, 7}, { 25, 8}, { 15, 7}, { 33, 8}, \ - { 19, 7}, { 39, 8}, { 23, 9}, { 15, 8}, \ - { 39, 9}, { 23,10}, { 15, 9}, { 31, 8}, \ - { 63, 9}, { 47,10}, { 31, 9}, { 63, 8}, \ - { 127, 9}, { 71, 8}, { 143, 9}, { 79,10}, \ - { 47,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255, 7}, { 511, 9}, { 135, 8}, { 271, 9}, \ - { 143,10}, { 79, 9}, { 159, 8}, { 319, 9}, \ - { 175, 8}, { 351, 7}, { 703,10}, { 95, 9}, \ - { 191, 8}, { 383, 9}, { 207,11}, { 63,10}, \ - { 127, 9}, { 255, 8}, { 511, 9}, { 271,10}, \ - { 143, 9}, { 287, 8}, { 575,10}, { 159, 9}, \ - { 319,10}, { 175, 9}, { 351, 8}, { 703,11}, \ - { 95,10}, { 191, 9}, { 383,10}, { 207, 9}, \ - { 415,12}, { 63,11}, { 127,10}, { 255, 9}, \ - { 511,10}, { 271, 9}, { 543, 8}, { 1087,10}, \ - { 287, 9}, { 575,11}, { 159,10}, { 319, 9}, \ - { 639,10}, { 351, 9}, { 703, 8}, { 1407,11}, \ - { 191,10}, { 415, 9}, { 831,11}, { 223, 8}, \ - { 1791,10}, { 479, 9}, { 959,12}, { 127,11}, \ - { 255,10}, { 543,11}, { 287,10}, { 607,11}, \ - { 319,10}, { 639,11}, { 351,10}, { 703, 9}, \ - { 1407,12}, { 191,11}, { 415,10}, { 831,11}, \ - { 479,10}, { 959,13}, { 8192,14}, { 16384,15}, \ - { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 109 -#define SQR_FFT_THRESHOLD 1600 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 116 -#define MULLO_MUL_N_THRESHOLD 3574 - -#define DC_DIV_QR_THRESHOLD 100 -#define DC_DIVAPPR_Q_THRESHOLD 348 -#define DC_BDIV_QR_THRESHOLD 109 -#define DC_BDIV_Q_THRESHOLD 254 - -#define INV_MULMOD_BNM1_THRESHOLD 34 -#define INV_NEWTON_THRESHOLD 276 -#define INV_APPR_THRESHOLD 276 - -#define BINV_NEWTON_THRESHOLD 278 -#define REDC_1_TO_REDC_N_THRESHOLD 78 - -#define MU_DIV_QR_THRESHOLD 979 -#define MU_DIVAPPR_Q_THRESHOLD 263 -#define MUPI_DIV_QR_THRESHOLD 102 -#define MU_BDIV_QR_THRESHOLD 807 -#define MU_BDIV_Q_THRESHOLD 1187 - -#define MATRIX22_STRASSEN_THRESHOLD 11 -#define HGCD_THRESHOLD 100 -#define GCD_DC_THRESHOLD 379 -#define GCDEXT_DC_THRESHOLD 249 -#define JACOBI_BASE_METHOD 2 - -#define GET_STR_DC_THRESHOLD 7 -#define GET_STR_PRECOMPUTE_THRESHOLD 16 -#define SET_STR_DC_THRESHOLD 270 -#define SET_STR_PRECOMPUTE_THRESHOLD 782 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa2_0/sqr_diagonal.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa2_0/sqr_diagonal.asm deleted file mode 100644 index c55112fac53995a450bf5f271dcff379600a5d40..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa2_0/sqr_diagonal.asm +++ /dev/null @@ -1,112 +0,0 @@ -dnl HP-PA 32-bit mpn_sqr_diagonal optimized for the PA8x00. - -dnl Copyright 2001, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C This code runs at 6 cycles/limb on the PA7100 and 2 cycles/limb on PA8x00. -C The 2-way unrolling is actually not helping the PA7100. - -C INPUT PARAMETERS -define(`rp',`%r26') -define(`up',`%r25') -define(`n',`%r24') - -ASM_START() -PROLOGUE(mpn_sqr_diagonal) - - fldws,ma 4(up),%fr4r - addib,= -1,n,L(end1) - ldo 4(rp),rp - - fldws,ma 4(up),%fr6r - addib,= -1,n,L(end2) - xmpyu %fr4r,%fr4r,%fr5 - - fldws,ma 4(up),%fr4r - addib,= -1,n,L(end3) - xmpyu %fr6r,%fr6r,%fr7 - - -LDEF(loop) - fldws,ma 4(up),%fr6r - fstws %fr5r,-4(rp) - fstws,ma %fr5l,8(rp) - addib,= -1,n,L(exite) - xmpyu %fr4r,%fr4r,%fr5 - fldws,ma 4(up),%fr4r - fstws %fr7r,-4(rp) - fstws,ma %fr7l,8(rp) - addib,<> -1,n,L(loop) - xmpyu %fr6r,%fr6r,%fr7 - -LDEF(exito) - fstws %fr5r,-4(rp) - fstws %fr5l,0(rp) - xmpyu %fr4r,%fr4r,%fr5 - fstws %fr7r,4(rp) - fstws %fr7l,8(rp) - fstws,mb %fr5r,12(rp) - bv 0(%r2) - fstws %fr5l,4(rp) - -LDEF(exite) - fstws %fr7r,-4(rp) - fstws %fr7l,0(rp) - xmpyu %fr6r,%fr6r,%fr7 - fstws %fr5r,4(rp) - fstws %fr5l,8(rp) - fstws,mb %fr7r,12(rp) - bv 0(%r2) - fstws %fr7l,4(rp) - -LDEF(end1) - xmpyu %fr4r,%fr4r,%fr5 - fstws %fr5r,-4(rp) - bv 0(%r2) - fstws,ma %fr5l,8(rp) - -LDEF(end2) - xmpyu %fr6r,%fr6r,%fr7 - fstws %fr5r,-4(rp) - fstws %fr5l,0(rp) - fstws %fr7r,4(rp) - bv 0(%r2) - fstws %fr7l,8(rp) - -LDEF(end3) - fstws %fr5r,-4(rp) - fstws %fr5l,0(rp) - xmpyu %fr4r,%fr4r,%fr5 - fstws %fr7r,4(rp) - fstws %fr7l,8(rp) - fstws,mb %fr5r,12(rp) - bv 0(%r2) - fstws %fr5l,4(rp) -EPILOGUE(mpn_sqr_diagonal) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa2_0/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa2_0/sub_n.asm deleted file mode 100644 index 47b3163fe3cae6caca3fc9f4494b3495d6840a60..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/hppa2_0/sub_n.asm +++ /dev/null @@ -1,107 +0,0 @@ -dnl HP-PA 2.0 32-bit mpn_sub_n -- Subtract two limb vectors of the same -dnl length > 0 and store difference in a third limb vector. - -dnl Copyright 1997, 1998, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr gr26 -C s1_ptr gr25 -C s2_ptr gr24 -C size gr23 - -C This runs at 2 cycles/limb on PA8000. - -ASM_START() -PROLOGUE(mpn_sub_n) - sub %r0,%r23,%r22 - zdep %r22,30,3,%r28 C r28 = 2 * (-n & 7) - zdep %r22,29,3,%r22 C r22 = 4 * (-n & 7) - sub %r25,%r22,%r25 C offset s1_ptr - sub %r24,%r22,%r24 C offset s2_ptr - blr %r28,%r0 C branch into loop - sub %r26,%r22,%r26 C offset res_ptr and set carry - -LDEF(loop) - ldw 0(%r25),%r20 - ldw 0(%r24),%r31 - subb %r20,%r31,%r20 - stw %r20,0(%r26) - -LDEF(7) - ldw 4(%r25),%r21 - ldw 4(%r24),%r19 - subb %r21,%r19,%r21 - stw %r21,4(%r26) - -LDEF(6) - ldw 8(%r25),%r20 - ldw 8(%r24),%r31 - subb %r20,%r31,%r20 - stw %r20,8(%r26) - -LDEF(5) - ldw 12(%r25),%r21 - ldw 12(%r24),%r19 - subb %r21,%r19,%r21 - stw %r21,12(%r26) - -LDEF(4) - ldw 16(%r25),%r20 - ldw 16(%r24),%r31 - subb %r20,%r31,%r20 - stw %r20,16(%r26) - -LDEF(3) - ldw 20(%r25),%r21 - ldw 20(%r24),%r19 - subb %r21,%r19,%r21 - stw %r21,20(%r26) - -LDEF(2) - ldw 24(%r25),%r20 - ldw 24(%r24),%r31 - subb %r20,%r31,%r20 - stw %r20,24(%r26) - -LDEF(1) - ldw 28(%r25),%r21 - ldo 32(%r25),%r25 - ldw 28(%r24),%r19 - subb %r21,%r19,%r21 - stw %r21,28(%r26) - ldo 32(%r24),%r24 - addib,> -8,%r23,L(loop) - ldo 32(%r26),%r26 - - addc %r0,%r0,%r28 - bv (%r2) - subi 1,%r28,%r28 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/lshift.asm deleted file mode 100644 index 5ea497c1f1916efea36ef1340bce1cbd60942168..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/lshift.asm +++ /dev/null @@ -1,75 +0,0 @@ -dnl HP-PA mpn_lshift -- Shift a number left. - -dnl Copyright 1992, 1994, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr gr26 -C s_ptr gr25 -C size gr24 -C cnt gr23 - -ASM_START() -PROLOGUE(mpn_lshift) - sh2add %r24,%r25,%r25 - sh2add %r24,%r26,%r26 - ldws,mb -4(0,%r25),%r22 - subi 32,%r23,%r1 - mtsar %r1 - addib,= -1,%r24,L(0004) - vshd %r0,%r22,%r28 C compute carry out limb - ldws,mb -4(0,%r25),%r29 - addib,= -1,%r24,L(0002) - vshd %r22,%r29,%r20 - -LDEF(loop) - ldws,mb -4(0,%r25),%r22 - stws,mb %r20,-4(0,%r26) - addib,= -1,%r24,L(0003) - vshd %r29,%r22,%r20 - ldws,mb -4(0,%r25),%r29 - stws,mb %r20,-4(0,%r26) - addib,<> -1,%r24,L(loop) - vshd %r22,%r29,%r20 - -LDEF(0002) - stws,mb %r20,-4(0,%r26) - vshd %r29,%r0,%r20 - bv 0(%r2) - stw %r20,-4(0,%r26) - -LDEF(0003) - stws,mb %r20,-4(0,%r26) - -LDEF(0004) - vshd %r22,%r0,%r20 - bv 0(%r2) - stw %r20,-4(0,%r26) -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/pa-defs.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/pa-defs.m4 deleted file mode 100644 index b26e715fc5b6ccb2e80d0148a62fdb38e53699bc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/pa-defs.m4 +++ /dev/null @@ -1,64 +0,0 @@ -divert(-1) - -dnl m4 macros for HPPA assembler. - -dnl Copyright 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl hppa assembler comments are introduced with ";". -dnl -dnl For cooperation with cpp, apparently lines "# 123" set the line number, -dnl and other lines starting with a "#" are ignored. - -changecom(;) - - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo) -dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) -dnl -dnl These are the same as the basic PROLOGUE_cpu and EPILOGUE_cpu in -dnl mpn/asm-defs.m4, but using .proc / .procend. These are standard and on -dnl an ELF system they do what .type and .size normally do. - -define(`PROLOGUE_cpu', -m4_assert_numargs(1) - `.code - ALIGN(8) - .export `$1',entry -`$1'LABEL_SUFFIX' - .proc - .callinfo) dnl This is really bogus, but allows us to compile - dnl again on hppa machines. - - -define(`EPILOGUE_cpu', -m4_assert_numargs(1) -` .procend') - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/rshift.asm deleted file mode 100644 index c5eac830c9b7f91d42972bf89775c542523001bb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/rshift.asm +++ /dev/null @@ -1,72 +0,0 @@ -dnl HP-PA mpn_rshift -- Shift a number right. - -dnl Copyright 1992, 1994, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr gr26 -C s_ptr gr25 -C size gr24 -C cnt gr23 - -ASM_START() -PROLOGUE(mpn_rshift) - ldws,ma 4(0,%r25),%r22 - mtsar %r23 - addib,= -1,%r24,L(0004) - vshd %r22,%r0,%r28 C compute carry out limb - ldws,ma 4(0,%r25),%r29 - addib,= -1,%r24,L(0002) - vshd %r29,%r22,%r20 - -LDEF(loop) - ldws,ma 4(0,%r25),%r22 - stws,ma %r20,4(0,%r26) - addib,= -1,%r24,L(0003) - vshd %r22,%r29,%r20 - ldws,ma 4(0,%r25),%r29 - stws,ma %r20,4(0,%r26) - addib,<> -1,%r24,L(loop) - vshd %r29,%r22,%r20 - -LDEF(0002) - stws,ma %r20,4(0,%r26) - vshd %r0,%r29,%r20 - bv 0(%r2) - stw %r20,0(0,%r26) - -LDEF(0003) - stws,ma %r20,4(0,%r26) - -LDEF(0004) - vshd %r0,%r22,%r20 - bv 0(%r2) - stw %r20,0(0,%r26) -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/sub_n.asm deleted file mode 100644 index 9c71655b9838cef998deb524ae3d0d23c47d87d2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/sub_n.asm +++ /dev/null @@ -1,64 +0,0 @@ -dnl HP-PA mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -dnl store difference in a third limb vector. - -dnl Copyright 1992, 1994, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr gr26 -C s1_ptr gr25 -C s2_ptr gr24 -C size gr23 - -C One might want to unroll this as for other processors, but it turns out that -C the data cache contention after a store makes such unrolling useless. We -C can't come under 5 cycles/limb anyway. - -ASM_START() -PROLOGUE(mpn_sub_n) - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - - addib,= -1,%r23,L(end) C check for (SIZE == 1) - sub %r20,%r19,%r28 C subtract first limbs ignoring cy - -LDEF(loop) - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - stws,ma %r28,4(0,%r26) - addib,<> -1,%r23,L(loop) - subb %r20,%r19,%r28 - -LDEF(end) - stws %r28,0(0,%r26) - addc %r0,%r0,%r28 - bv 0(%r2) - subi 1,%r28,%r28 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/udiv.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/udiv.asm deleted file mode 100644 index addbf41ef5161d5484ecfbd31e8c91aa901a4669..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa32/udiv.asm +++ /dev/null @@ -1,291 +0,0 @@ -dnl HP-PA __udiv_qrnnd division support, used from longlong.h. -dnl This version runs fast on pre-PA7000 CPUs. - -dnl Copyright 1993, 1994, 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -C rem_ptr gr26 -C n1 gr25 -C n0 gr24 -C d gr23 - -C The code size is a bit excessive. We could merge the last two ds;addc -C sequences by simply moving the "bb,< Odd" instruction down. The only -C trouble is the FFFFFFFF code that would need some hacking. - -ASM_START() -PROLOGUE(mpn_udiv_qrnnd) - comb,< %r23,0,L(largedivisor) - sub %r0,%r23,%r1 C clear cy as side-effect - ds %r0,%r1,%r0 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r28 - ds %r25,%r23,%r25 - comclr,>= %r25,%r0,%r0 - addl %r25,%r23,%r25 - stws %r25,0(0,%r26) - bv 0(%r2) - addc %r28,%r28,%r28 - -LDEF(largedivisor) - extru %r24,31,1,%r19 C r19 = n0 & 1 - bb,< %r23,31,L(odd) - extru %r23,30,31,%r22 C r22 = d >> 1 - shd %r25,%r24,1,%r24 C r24 = new n0 - extru %r25,30,31,%r25 C r25 = new n1 - sub %r0,%r22,%r21 - ds %r0,%r21,%r0 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - comclr,>= %r25,%r0,%r0 - addl %r25,%r22,%r25 - sh1addl %r25,%r19,%r25 - stws %r25,0(0,%r26) - bv 0(%r2) - addc %r24,%r24,%r28 - -LDEF(odd) - addib,sv,n 1,%r22,L(FFFFFFFF) C r22 = (d / 2 + 1) - shd %r25,%r24,1,%r24 C r24 = new n0 - extru %r25,30,31,%r25 C r25 = new n1 - sub %r0,%r22,%r21 - ds %r0,%r21,%r0 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r28 - comclr,>= %r25,%r0,%r0 - addl %r25,%r22,%r25 - sh1addl %r25,%r19,%r25 -C We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25 - add,nuv %r28,%r25,%r25 - addl %r25,%r1,%r25 - addc %r0,%r28,%r28 - sub,<< %r25,%r23,%r0 - addl %r25,%r1,%r25 - stws %r25,0(0,%r26) - bv 0(%r2) - addc %r0,%r28,%r28 - -C This is just a special case of the code above. -C We come here when d == 0xFFFFFFFF -LDEF(FFFFFFFF) - add,uv %r25,%r24,%r24 - sub,<< %r24,%r23,%r0 - ldo 1(%r24),%r24 - stws %r24,0(0,%r26) - bv 0(%r2) - addc %r0,%r25,%r28 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/README b/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/README deleted file mode 100644 index a51ce028a4e3ded325e16b6520c1e815b3bbe9c5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/README +++ /dev/null @@ -1,78 +0,0 @@ -Copyright 1999, 2001, 2002, 2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - -This directory contains mpn functions for 64-bit PA-RISC 2.0. - -PIPELINE SUMMARY - -The PA8x00 processors have an orthogonal 4-way out-of-order pipeline. Each -cycle two ALU operations and two MEM operations can issue, but just one of the -MEM operations may be a store. The two ALU operations can be almost any -combination of non-memory operations. Unlike every other processor, integer -and fp operations are completely equal here; they both count as just ALU -operations. - -Unfortunately, some operations cause hickups in the pipeline. Combining -carry-consuming operations like ADD,DC with operations that does not set carry -like ADD,L cause long delays. Skip operations also seem to cause hickups. If -several ADD,DC are issued consecutively, or if plain carry-generating ADD feed -ADD,DC, stalling does not occur. We can effectively issue two ADD,DC -operations/cycle. - -Latency scheduling is not as important as making sure to have a mix of ALU and -MEM operations, but for full pipeline utilization, it is still a good idea to -do some amount of latency scheduling. - -Like for all other processors, RAW memory scheduling is critically important. -Since integer multiplication takes place in the floating-point unit, the GMP -code needs to handle this problem frequently. - -STATUS - -* mpn_lshift and mpn_rshift run at 1.5 cycles/limb on PA8000 and at 1.0 - cycles/limb on PA8500. With latency scheduling, the numbers could - probably be improved to 1.0 cycles/limb for all PA8x00 chips. - -* mpn_add_n and mpn_sub_n run at 2.0 cycles/limb on PA8000 and at about - 1.6875 cycles/limb on PA8500. With latency scheduling, this could - probably be improved to get close to 1.5 cycles/limb. A problem is the - stalling of carry-inputting instructions after instructions that do not - write to carry. - -* mpn_mul_1, mpn_addmul_1, and mpn_submul_1 run at between 5.625 and 6.375 - on PA8500 and later, and about a cycle/limb slower on older chips. The - code uses ADD,DC for adjacent limbs, and relies heavily on reordering. - - -REFERENCES - -Hewlett Packard, "64-Bit Runtime Architecture for PA-RISC 2.0", version 3.3, -October 1997. diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/addmul_1.asm deleted file mode 100644 index 2cb9af9f147a3c5e2b3e13a23be066d24df2dd78..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/addmul_1.asm +++ /dev/null @@ -1,693 +0,0 @@ -dnl HP-PA 2.0 64-bit mpn_addmul_1 -- Multiply a limb vector with a limb and -dnl add the result to a second limb vector. - -dnl Copyright 1998-2000, 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 8000,8200: 7 -C 8500,8600,8700: 6.375 - -C The feed-in and wind-down code has not yet been scheduled. Many cycles -C could be saved there per call. - -C DESCRIPTION: -C The main loop "BIG" is 4-way unrolled, mainly to allow -C effective use of ADD,DC. Delays in moving data via the cache from the FP -C registers to the IU registers, have demanded a deep software pipeline, and -C a lot of stack slots for partial products in flight. -C -C CODE STRUCTURE: -C save-some-registers -C do 0, 1, 2, or 3 limbs -C if done, restore-some-regs and return -C save-many-regs -C do 4, 8, ... limb -C restore-all-regs - -C STACK LAYOUT: -C HP-PA stack grows upwards. We could allocate 8 fewer slots by using the -C slots marked FREE, as well as some slots in the caller's "frame marker". -C -C -00 <- r30 -C -08 FREE -C -10 tmp -C -18 tmp -C -20 tmp -C -28 tmp -C -30 tmp -C -38 tmp -C -40 tmp -C -48 tmp -C -50 tmp -C -58 tmp -C -60 tmp -C -68 tmp -C -70 tmp -C -78 tmp -C -80 tmp -C -88 tmp -C -90 FREE -C -98 FREE -C -a0 FREE -C -a8 FREE -C -b0 r13 -C -b8 r12 -C -c0 r11 -C -c8 r10 -C -d0 r8 -C -d8 r8 -C -e0 r7 -C -e8 r6 -C -f0 r5 -C -f8 r4 -C -100 r3 -C Previous frame: -C [unused area] -C -38/-138 vlimb home slot. For 2.0N, the vlimb arg will arrive here. - - -include(`../config.m4') - -C INPUT PARAMETERS: -define(`rp',`%r26') C -define(`up',`%r25') C -define(`n',`%r24') C -define(`vlimb',`%r23') C - -define(`climb',`%r23') C - -ifdef(`HAVE_ABI_2_0w', -` .level 2.0w -',` .level 2.0 -') -PROLOGUE(mpn_addmul_1) - -ifdef(`HAVE_ABI_2_0w', -` std vlimb, -0x38(%r30) C store vlimb into "home" slot -') - std,ma %r3, 0x100(%r30) - std %r4, -0xf8(%r30) - std %r5, -0xf0(%r30) - ldo 0(%r0), climb C clear climb - fldd -0x138(%r30), %fr8 C put vlimb in fp register - -define(`p032a1',`%r1') C -define(`p032a2',`%r19') C - -define(`m032',`%r20') C -define(`m096',`%r21') C - -define(`p000a',`%r22') C -define(`p064a',`%r29') C - -define(`s000',`%r31') C - -define(`ma000',`%r4') C -define(`ma064',`%r20') C - -define(`r000',`%r3') C - - extrd,u n, 63, 2, %r5 - cmpb,= %r5, %r0, L(BIG) - nop - - fldd 0(up), %fr4 - ldo 8(up), up - xmpyu %fr8R, %fr4L, %fr22 - xmpyu %fr8L, %fr4R, %fr23 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr4R, %fr24 - xmpyu %fr8L, %fr4L, %fr25 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - fstd %fr24, -0x80(%r30) C low product to -0x80..-0x79 - addib,<> -1, %r5, L(two_or_more) - fstd %fr25, -0x68(%r30) C high product to -0x68..-0x61 -LDEF(one) - ldd -0x78(%r30), p032a1 - ldd -0x70(%r30), p032a2 - ldd -0x80(%r30), p000a - b L(0_one_out) - ldd -0x68(%r30), p064a - -LDEF(two_or_more) - fldd 0(up), %fr4 - ldo 8(up), up - xmpyu %fr8R, %fr4L, %fr22 - xmpyu %fr8L, %fr4R, %fr23 - ldd -0x78(%r30), p032a1 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr4R, %fr24 - xmpyu %fr8L, %fr4L, %fr25 - ldd -0x70(%r30), p032a2 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - ldd -0x80(%r30), p000a - fstd %fr24, -0x80(%r30) C low product to -0x80..-0x79 - ldd -0x68(%r30), p064a - addib,<> -1, %r5, L(three_or_more) - fstd %fr25, -0x68(%r30) C high product to -0x68..-0x61 -LDEF(two) - add p032a1, p032a2, m032 - add,dc %r0, %r0, m096 - depd,z m032, 31, 32, ma000 - extrd,u m032, 31, 32, ma064 - ldd 0(rp), r000 - b L(0_two_out) - depd m096, 31, 32, ma064 - -LDEF(three_or_more) - fldd 0(up), %fr4 - add p032a1, p032a2, m032 - add,dc %r0, %r0, m096 - depd,z m032, 31, 32, ma000 - extrd,u m032, 31, 32, ma064 - ldd 0(rp), r000 -C addib,= -1, %r5, L(0_out) - depd m096, 31, 32, ma064 -LDEF(loop0) -C xmpyu %fr8R, %fr4L, %fr22 -C xmpyu %fr8L, %fr4R, %fr23 -C ldd -0x78(%r30), p032a1 -C fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 -C -C xmpyu %fr8R, %fr4R, %fr24 -C xmpyu %fr8L, %fr4L, %fr25 -C ldd -0x70(%r30), p032a2 -C fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 -C -C ldo 8(rp), rp -C add climb, p000a, s000 -C ldd -0x80(%r30), p000a -C fstd %fr24, -0x80(%r30) C low product to -0x80..-0x79 -C -C add,dc p064a, %r0, climb -C ldo 8(up), up -C ldd -0x68(%r30), p064a -C fstd %fr25, -0x68(%r30) C high product to -0x68..-0x61 -C -C add ma000, s000, s000 -C add,dc ma064, climb, climb -C fldd 0(up), %fr4 -C -C add r000, s000, s000 -C add,dc %r0, climb, climb -C std s000, -8(rp) -C -C add p032a1, p032a2, m032 -C add,dc %r0, %r0, m096 -C -C depd,z m032, 31, 32, ma000 -C extrd,u m032, 31, 32, ma064 -C ldd 0(rp), r000 -C addib,<> -1, %r5, L(loop0) -C depd m096, 31, 32, ma064 -LDEF(0_out) - ldo 8(up), up - xmpyu %fr8R, %fr4L, %fr22 - xmpyu %fr8L, %fr4R, %fr23 - ldd -0x78(%r30), p032a1 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr4R, %fr24 - xmpyu %fr8L, %fr4L, %fr25 - ldd -0x70(%r30), p032a2 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - ldo 8(rp), rp - add climb, p000a, s000 - ldd -0x80(%r30), p000a - fstd %fr24, -0x80(%r30) C low product to -0x80..-0x79 - add,dc p064a, %r0, climb - ldd -0x68(%r30), p064a - fstd %fr25, -0x68(%r30) C high product to -0x68..-0x61 - add ma000, s000, s000 - add,dc ma064, climb, climb - add r000, s000, s000 - add,dc %r0, climb, climb - std s000, -8(rp) - add p032a1, p032a2, m032 - add,dc %r0, %r0, m096 - depd,z m032, 31, 32, ma000 - extrd,u m032, 31, 32, ma064 - ldd 0(rp), r000 - depd m096, 31, 32, ma064 -LDEF(0_two_out) - ldd -0x78(%r30), p032a1 - ldd -0x70(%r30), p032a2 - ldo 8(rp), rp - add climb, p000a, s000 - ldd -0x80(%r30), p000a - add,dc p064a, %r0, climb - ldd -0x68(%r30), p064a - add ma000, s000, s000 - add,dc ma064, climb, climb - add r000, s000, s000 - add,dc %r0, climb, climb - std s000, -8(rp) -LDEF(0_one_out) - add p032a1, p032a2, m032 - add,dc %r0, %r0, m096 - depd,z m032, 31, 32, ma000 - extrd,u m032, 31, 32, ma064 - ldd 0(rp), r000 - depd m096, 31, 32, ma064 - - add climb, p000a, s000 - add,dc p064a, %r0, climb - add ma000, s000, s000 - add,dc ma064, climb, climb - add r000, s000, s000 - add,dc %r0, climb, climb - std s000, 0(rp) - - cmpib,>= 4, n, L(done) - ldo 8(rp), rp - -C 4-way unrolled code. - -LDEF(BIG) - -define(`p032a1',`%r1') C -define(`p032a2',`%r19') C -define(`p096b1',`%r20') C -define(`p096b2',`%r21') C -define(`p160c1',`%r22') C -define(`p160c2',`%r29') C -define(`p224d1',`%r31') C -define(`p224d2',`%r3') C - C -define(`m032',`%r4') C -define(`m096',`%r5') C -define(`m160',`%r6') C -define(`m224',`%r7') C -define(`m288',`%r8') C - C -define(`p000a',`%r1') C -define(`p064a',`%r19') C -define(`p064b',`%r20') C -define(`p128b',`%r21') C -define(`p128c',`%r22') C -define(`p192c',`%r29') C -define(`p192d',`%r31') C -define(`p256d',`%r3') C - C -define(`s000',`%r10') C -define(`s064',`%r11') C -define(`s128',`%r12') C -define(`s192',`%r13') C - C -define(`ma000',`%r9') C -define(`ma064',`%r4') C -define(`ma128',`%r5') C -define(`ma192',`%r6') C -define(`ma256',`%r7') C - C -define(`r000',`%r1') C -define(`r064',`%r19') C -define(`r128',`%r20') C -define(`r192',`%r21') C - - std %r6, -0xe8(%r30) - std %r7, -0xe0(%r30) - std %r8, -0xd8(%r30) - std %r9, -0xd0(%r30) - std %r10, -0xc8(%r30) - std %r11, -0xc0(%r30) - std %r12, -0xb8(%r30) - std %r13, -0xb0(%r30) - -ifdef(`HAVE_ABI_2_0w', -` extrd,u n, 61, 62, n C right shift 2 -',` extrd,u n, 61, 30, n C right shift 2, zero extend -') - -LDEF(4_or_more) - fldd 0(up), %fr4 - fldd 8(up), %fr5 - fldd 16(up), %fr6 - fldd 24(up), %fr7 - xmpyu %fr8R, %fr4L, %fr22 - xmpyu %fr8L, %fr4R, %fr23 - xmpyu %fr8R, %fr5L, %fr24 - xmpyu %fr8L, %fr5R, %fr25 - xmpyu %fr8R, %fr6L, %fr26 - xmpyu %fr8L, %fr6R, %fr27 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr7L, %fr28 - xmpyu %fr8L, %fr7R, %fr29 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - xmpyu %fr8R, %fr4R, %fr30 - xmpyu %fr8L, %fr4L, %fr31 - fstd %fr24, -0x38(%r30) C mid product to -0x38..-0x31 - xmpyu %fr8R, %fr5R, %fr22 - xmpyu %fr8L, %fr5L, %fr23 - fstd %fr25, -0x30(%r30) C mid product to -0x30..-0x29 - xmpyu %fr8R, %fr6R, %fr24 - xmpyu %fr8L, %fr6L, %fr25 - fstd %fr26, -0x58(%r30) C mid product to -0x58..-0x51 - xmpyu %fr8R, %fr7R, %fr26 - fstd %fr27, -0x50(%r30) C mid product to -0x50..-0x49 - addib,<> -1, n, L(8_or_more) - xmpyu %fr8L, %fr7L, %fr27 - fstd %fr28, -0x18(%r30) C mid product to -0x18..-0x11 - fstd %fr29, -0x10(%r30) C mid product to -0x10..-0x09 - fstd %fr30, -0x80(%r30) C low product to -0x80..-0x79 - fstd %fr31, -0x68(%r30) C high product to -0x68..-0x61 - fstd %fr22, -0x40(%r30) C low product to -0x40..-0x39 - fstd %fr23, -0x28(%r30) C high product to -0x28..-0x21 - fstd %fr24, -0x60(%r30) C low product to -0x60..-0x59 - fstd %fr25, -0x48(%r30) C high product to -0x48..-0x41 - fstd %fr26, -0x20(%r30) C low product to -0x20..-0x19 - fstd %fr27, -0x88(%r30) C high product to -0x88..-0x81 - ldd -0x78(%r30), p032a1 - ldd -0x70(%r30), p032a2 - ldd -0x38(%r30), p096b1 - ldd -0x30(%r30), p096b2 - ldd -0x58(%r30), p160c1 - ldd -0x50(%r30), p160c2 - ldd -0x18(%r30), p224d1 - ldd -0x10(%r30), p224d2 - b L(end1) - nop - -LDEF(8_or_more) - fstd %fr28, -0x18(%r30) C mid product to -0x18..-0x11 - fstd %fr29, -0x10(%r30) C mid product to -0x10..-0x09 - ldo 32(up), up - fstd %fr30, -0x80(%r30) C low product to -0x80..-0x79 - fstd %fr31, -0x68(%r30) C high product to -0x68..-0x61 - fstd %fr22, -0x40(%r30) C low product to -0x40..-0x39 - fstd %fr23, -0x28(%r30) C high product to -0x28..-0x21 - fstd %fr24, -0x60(%r30) C low product to -0x60..-0x59 - fstd %fr25, -0x48(%r30) C high product to -0x48..-0x41 - fstd %fr26, -0x20(%r30) C low product to -0x20..-0x19 - fstd %fr27, -0x88(%r30) C high product to -0x88..-0x81 - fldd 0(up), %fr4 - fldd 8(up), %fr5 - fldd 16(up), %fr6 - fldd 24(up), %fr7 - xmpyu %fr8R, %fr4L, %fr22 - ldd -0x78(%r30), p032a1 - xmpyu %fr8L, %fr4R, %fr23 - xmpyu %fr8R, %fr5L, %fr24 - ldd -0x70(%r30), p032a2 - xmpyu %fr8L, %fr5R, %fr25 - xmpyu %fr8R, %fr6L, %fr26 - ldd -0x38(%r30), p096b1 - xmpyu %fr8L, %fr6R, %fr27 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr7L, %fr28 - ldd -0x30(%r30), p096b2 - xmpyu %fr8L, %fr7R, %fr29 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - xmpyu %fr8R, %fr4R, %fr30 - ldd -0x58(%r30), p160c1 - xmpyu %fr8L, %fr4L, %fr31 - fstd %fr24, -0x38(%r30) C mid product to -0x38..-0x31 - xmpyu %fr8R, %fr5R, %fr22 - ldd -0x50(%r30), p160c2 - xmpyu %fr8L, %fr5L, %fr23 - fstd %fr25, -0x30(%r30) C mid product to -0x30..-0x29 - xmpyu %fr8R, %fr6R, %fr24 - ldd -0x18(%r30), p224d1 - xmpyu %fr8L, %fr6L, %fr25 - fstd %fr26, -0x58(%r30) C mid product to -0x58..-0x51 - xmpyu %fr8R, %fr7R, %fr26 - ldd -0x10(%r30), p224d2 - fstd %fr27, -0x50(%r30) C mid product to -0x50..-0x49 - addib,= -1, n, L(end2) - xmpyu %fr8L, %fr7L, %fr27 -LDEF(loop) - add p032a1, p032a2, m032 - ldd -0x80(%r30), p000a - add,dc p096b1, p096b2, m096 - fstd %fr28, -0x18(%r30) C mid product to -0x18..-0x11 - - add,dc p160c1, p160c2, m160 - ldd -0x68(%r30), p064a - add,dc p224d1, p224d2, m224 - fstd %fr29, -0x10(%r30) C mid product to -0x10..-0x09 - - add,dc %r0, %r0, m288 - ldd -0x40(%r30), p064b - ldo 32(up), up - fstd %fr30, -0x80(%r30) C low product to -0x80..-0x79 - - depd,z m032, 31, 32, ma000 - ldd -0x28(%r30), p128b - extrd,u m032, 31, 32, ma064 - fstd %fr31, -0x68(%r30) C high product to -0x68..-0x61 - - depd m096, 31, 32, ma064 - ldd -0x60(%r30), p128c - extrd,u m096, 31, 32, ma128 - fstd %fr22, -0x40(%r30) C low product to -0x40..-0x39 - - depd m160, 31, 32, ma128 - ldd -0x48(%r30), p192c - extrd,u m160, 31, 32, ma192 - fstd %fr23, -0x28(%r30) C high product to -0x28..-0x21 - - depd m224, 31, 32, ma192 - ldd -0x20(%r30), p192d - extrd,u m224, 31, 32, ma256 - fstd %fr24, -0x60(%r30) C low product to -0x60..-0x59 - - depd m288, 31, 32, ma256 - ldd -0x88(%r30), p256d - add climb, p000a, s000 - fstd %fr25, -0x48(%r30) C high product to -0x48..-0x41 - - add,dc p064a, p064b, s064 - ldd 0(rp), r000 - add,dc p128b, p128c, s128 - fstd %fr26, -0x20(%r30) C low product to -0x20..-0x19 - - add,dc p192c, p192d, s192 - ldd 8(rp), r064 - add,dc p256d, %r0, climb - fstd %fr27, -0x88(%r30) C high product to -0x88..-0x81 - - ldd 16(rp), r128 - add ma000, s000, s000 C accum mid 0 - ldd 24(rp), r192 - add,dc ma064, s064, s064 C accum mid 1 - - add,dc ma128, s128, s128 C accum mid 2 - fldd 0(up), %fr4 - add,dc ma192, s192, s192 C accum mid 3 - fldd 8(up), %fr5 - - add,dc ma256, climb, climb - fldd 16(up), %fr6 - add r000, s000, s000 C accum rlimb 0 - fldd 24(up), %fr7 - - add,dc r064, s064, s064 C accum rlimb 1 - add,dc r128, s128, s128 C accum rlimb 2 - std s000, 0(rp) - - add,dc r192, s192, s192 C accum rlimb 3 - add,dc %r0, climb, climb - std s064, 8(rp) - - xmpyu %fr8R, %fr4L, %fr22 - ldd -0x78(%r30), p032a1 - xmpyu %fr8L, %fr4R, %fr23 - std s128, 16(rp) - - xmpyu %fr8R, %fr5L, %fr24 - ldd -0x70(%r30), p032a2 - xmpyu %fr8L, %fr5R, %fr25 - std s192, 24(rp) - - xmpyu %fr8R, %fr6L, %fr26 - ldd -0x38(%r30), p096b1 - xmpyu %fr8L, %fr6R, %fr27 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - - xmpyu %fr8R, %fr7L, %fr28 - ldd -0x30(%r30), p096b2 - xmpyu %fr8L, %fr7R, %fr29 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - - xmpyu %fr8R, %fr4R, %fr30 - ldd -0x58(%r30), p160c1 - xmpyu %fr8L, %fr4L, %fr31 - fstd %fr24, -0x38(%r30) C mid product to -0x38..-0x31 - - xmpyu %fr8R, %fr5R, %fr22 - ldd -0x50(%r30), p160c2 - xmpyu %fr8L, %fr5L, %fr23 - fstd %fr25, -0x30(%r30) C mid product to -0x30..-0x29 - - xmpyu %fr8R, %fr6R, %fr24 - ldd -0x18(%r30), p224d1 - xmpyu %fr8L, %fr6L, %fr25 - fstd %fr26, -0x58(%r30) C mid product to -0x58..-0x51 - - xmpyu %fr8R, %fr7R, %fr26 - ldd -0x10(%r30), p224d2 - fstd %fr27, -0x50(%r30) C mid product to -0x50..-0x49 - xmpyu %fr8L, %fr7L, %fr27 - - addib,<> -1, n, L(loop) - ldo 32(rp), rp - -LDEF(end2) - add p032a1, p032a2, m032 - ldd -0x80(%r30), p000a - add,dc p096b1, p096b2, m096 - fstd %fr28, -0x18(%r30) C mid product to -0x18..-0x11 - add,dc p160c1, p160c2, m160 - ldd -0x68(%r30), p064a - add,dc p224d1, p224d2, m224 - fstd %fr29, -0x10(%r30) C mid product to -0x10..-0x09 - add,dc %r0, %r0, m288 - ldd -0x40(%r30), p064b - fstd %fr30, -0x80(%r30) C low product to -0x80..-0x79 - depd,z m032, 31, 32, ma000 - ldd -0x28(%r30), p128b - extrd,u m032, 31, 32, ma064 - fstd %fr31, -0x68(%r30) C high product to -0x68..-0x61 - depd m096, 31, 32, ma064 - ldd -0x60(%r30), p128c - extrd,u m096, 31, 32, ma128 - fstd %fr22, -0x40(%r30) C low product to -0x40..-0x39 - depd m160, 31, 32, ma128 - ldd -0x48(%r30), p192c - extrd,u m160, 31, 32, ma192 - fstd %fr23, -0x28(%r30) C high product to -0x28..-0x21 - depd m224, 31, 32, ma192 - ldd -0x20(%r30), p192d - extrd,u m224, 31, 32, ma256 - fstd %fr24, -0x60(%r30) C low product to -0x60..-0x59 - depd m288, 31, 32, ma256 - ldd -0x88(%r30), p256d - add climb, p000a, s000 - fstd %fr25, -0x48(%r30) C high product to -0x48..-0x41 - add,dc p064a, p064b, s064 - ldd 0(rp), r000 - add,dc p128b, p128c, s128 - fstd %fr26, -0x20(%r30) C low product to -0x20..-0x19 - add,dc p192c, p192d, s192 - ldd 8(rp), r064 - add,dc p256d, %r0, climb - fstd %fr27, -0x88(%r30) C high product to -0x88..-0x81 - ldd 16(rp), r128 - add ma000, s000, s000 C accum mid 0 - ldd 24(rp), r192 - add,dc ma064, s064, s064 C accum mid 1 - add,dc ma128, s128, s128 C accum mid 2 - add,dc ma192, s192, s192 C accum mid 3 - add,dc ma256, climb, climb - add r000, s000, s000 C accum rlimb 0 - add,dc r064, s064, s064 C accum rlimb 1 - add,dc r128, s128, s128 C accum rlimb 2 - std s000, 0(rp) - add,dc r192, s192, s192 C accum rlimb 3 - add,dc %r0, climb, climb - std s064, 8(rp) - ldd -0x78(%r30), p032a1 - std s128, 16(rp) - ldd -0x70(%r30), p032a2 - std s192, 24(rp) - ldd -0x38(%r30), p096b1 - ldd -0x30(%r30), p096b2 - ldd -0x58(%r30), p160c1 - ldd -0x50(%r30), p160c2 - ldd -0x18(%r30), p224d1 - ldd -0x10(%r30), p224d2 - ldo 32(rp), rp - -LDEF(end1) - add p032a1, p032a2, m032 - ldd -0x80(%r30), p000a - add,dc p096b1, p096b2, m096 - add,dc p160c1, p160c2, m160 - ldd -0x68(%r30), p064a - add,dc p224d1, p224d2, m224 - add,dc %r0, %r0, m288 - ldd -0x40(%r30), p064b - depd,z m032, 31, 32, ma000 - ldd -0x28(%r30), p128b - extrd,u m032, 31, 32, ma064 - depd m096, 31, 32, ma064 - ldd -0x60(%r30), p128c - extrd,u m096, 31, 32, ma128 - depd m160, 31, 32, ma128 - ldd -0x48(%r30), p192c - extrd,u m160, 31, 32, ma192 - depd m224, 31, 32, ma192 - ldd -0x20(%r30), p192d - extrd,u m224, 31, 32, ma256 - depd m288, 31, 32, ma256 - ldd -0x88(%r30), p256d - add climb, p000a, s000 - add,dc p064a, p064b, s064 - ldd 0(rp), r000 - add,dc p128b, p128c, s128 - add,dc p192c, p192d, s192 - ldd 8(rp), r064 - add,dc p256d, %r0, climb - ldd 16(rp), r128 - add ma000, s000, s000 C accum mid 0 - ldd 24(rp), r192 - add,dc ma064, s064, s064 C accum mid 1 - add,dc ma128, s128, s128 C accum mid 2 - add,dc ma192, s192, s192 C accum mid 3 - add,dc ma256, climb, climb - add r000, s000, s000 C accum rlimb 0 - add,dc r064, s064, s064 C accum rlimb 1 - add,dc r128, s128, s128 C accum rlimb 2 - std s000, 0(rp) - add,dc r192, s192, s192 C accum rlimb 3 - add,dc %r0, climb, climb - std s064, 8(rp) - std s128, 16(rp) - std s192, 24(rp) - - ldd -0xb0(%r30), %r13 - ldd -0xb8(%r30), %r12 - ldd -0xc0(%r30), %r11 - ldd -0xc8(%r30), %r10 - ldd -0xd0(%r30), %r9 - ldd -0xd8(%r30), %r8 - ldd -0xe0(%r30), %r7 - ldd -0xe8(%r30), %r6 -LDEF(done) -ifdef(`HAVE_ABI_2_0w', -` copy climb, %r28 -',` extrd,u climb, 63, 32, %r29 - extrd,u climb, 31, 32, %r28 -') - ldd -0xf0(%r30), %r5 - ldd -0xf8(%r30), %r4 - bve (%r2) - ldd,mb -0x100(%r30), %r3 -EPILOGUE(mpn_addmul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/aors_n.asm deleted file mode 100644 index ab4536fefba87bd0f425537c6165459b46e355ad..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/aors_n.asm +++ /dev/null @@ -1,130 +0,0 @@ -dnl HP-PA 2.0 mpn_add_n, mpn_sub_n - -dnl Copyright 1997, 2000, 2002, 2003, 2009, 2010 Free Software Foundation, -dnl Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl This runs at 2 cycles/limb on PA8000 and 1.6875 cycles/limb on PA8500. It -dnl should be possible to reach the cache bandwidth 1.5 cycles/limb at least -dnl with PA8500. The problem now is stalling of the first ADD,DC after LDO, -dnl where the processor gets confused about where carry comes from. - -include(`../config.m4') - -dnl INPUT PARAMETERS -define(`rp',`%r26') -define(`up',`%r25') -define(`vp',`%r24') -define(`n',`%r23') - -ifdef(`OPERATION_add_n', ` - define(ADCSBC, `add,dc') - define(INITCY, `addi -1,%r22,%r0') - define(func, mpn_add_n) - define(func_nc, mpn_add_nc)') -ifdef(`OPERATION_sub_n', ` - define(ADCSBC, `sub,db') - define(INITCY, `subi 0,%r22,%r0') - define(func, mpn_sub_n) - define(func_nc, mpn_sub_nc)') - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc) - -ifdef(`HAVE_ABI_2_0w', -` .level 2.0w -',` .level 2.0 -') -PROLOGUE(func_nc) -ifdef(`HAVE_ABI_2_0w', -` b L(com) - nop -',` b L(com) - ldw -52(%r30), %r22 -') -EPILOGUE() -PROLOGUE(func) - ldi 0, %r22 -LDEF(com) - sub %r0, n, %r21 - depw,z %r21, 30, 3, %r28 C r28 = 2 * (-n & 7) - depw,z %r21, 28, 3, %r21 C r21 = 8 * (-n & 7) - sub up, %r21, up C offset up - sub vp, %r21, vp C offset vp - sub rp, %r21, rp C offset rp - blr %r28, %r0 C branch into loop - INITCY - -LDEF(loop) - ldd 0(up), %r20 - ldd 0(vp), %r31 - ADCSBC %r20, %r31, %r20 - std %r20, 0(rp) -LDEF(7) ldd 8(up), %r21 - ldd 8(vp), %r19 - ADCSBC %r21, %r19, %r21 - std %r21, 8(rp) -LDEF(6) ldd 16(up), %r20 - ldd 16(vp), %r31 - ADCSBC %r20, %r31, %r20 - std %r20, 16(rp) -LDEF(5) ldd 24(up), %r21 - ldd 24(vp), %r19 - ADCSBC %r21, %r19, %r21 - std %r21, 24(rp) -LDEF(4) ldd 32(up), %r20 - ldd 32(vp), %r31 - ADCSBC %r20, %r31, %r20 - std %r20, 32(rp) -LDEF(3) ldd 40(up), %r21 - ldd 40(vp), %r19 - ADCSBC %r21, %r19, %r21 - std %r21, 40(rp) -LDEF(2) ldd 48(up), %r20 - ldd 48(vp), %r31 - ADCSBC %r20, %r31, %r20 - std %r20, 48(rp) -LDEF(1) ldd 56(up), %r21 - ldd 56(vp), %r19 - ADCSBC %r21, %r19, %r21 - ldo 64(up), up - std %r21, 56(rp) - ldo 64(vp), vp - addib,> -8, n, L(loop) - ldo 64(rp), rp - - add,dc %r0, %r0, %r29 -ifdef(`OPERATION_sub_n',` - subi 1, %r29, %r29 -') - bve (%r2) -ifdef(`HAVE_ABI_2_0w', -` copy %r29, %r28 -',` ldi 0, %r28 -') -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/aorslsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/aorslsh1_n.asm deleted file mode 100644 index 2a55ddea30ffda195791f8de9e5abcd148765020..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/aorslsh1_n.asm +++ /dev/null @@ -1,228 +0,0 @@ -dnl PA64 mpn_addlsh1_n/mpn_sublsh1_n -- rp[] = up[] +- (vp[] << 1). - -dnl Copyright 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 8000,8200: 2 -C 8500,8600,8700: 1.75 - -C TODO -C * Write special feed-in code for each (n mod 8). (See the ia64 code.) -C * Try to make this run at closer to 1.5 c/l. -C * Set up register aliases (define(`u0',`%r19')). -C * Explicitly align loop. - -dnl INPUT PARAMETERS -define(`rp',`%r26') -define(`up',`%r25') -define(`vp',`%r24') -define(`n',`%r23') - -ifdef(`OPERATION_addlsh1_n',` - define(ADCSBC, `add,dc') - define(INITC, `ldi 0,') - define(func, mpn_addlsh1_n) -') -ifdef(`OPERATION_sublsh1_n',` - define(ADCSBC, `sub,db') - define(INITC, `ldi 1,') - define(func, mpn_sublsh1_n) -') - -MULFUNC_PROLOGUE(mpn_addlsh1_n mpn_sublsh1_n) - -ifdef(`HAVE_ABI_2_0w',` - define(LEVEL, `.level 2.0w') - define(RETREG, `%r28') - define(CLRRET1, `dnl') -') -ifdef(`HAVE_ABI_2_0n',` - define(LEVEL, `.level 2.0') - define(RETREG, `%r29') - define(CLRRET1, `ldi 0, %r28') -') - - LEVEL -PROLOGUE(func) - std,ma %r3, 0x100(%r30) C save reg - - INITC %r1 C init saved cy - -C Primitive code for the first (n mod 8) limbs: - extrd,u n, 63, 3, %r22 C count for loop0 - comib,= 0, %r22, L(unrolled) C skip loop0? - copy %r0, %r28 -LDEF(loop0) - ldd 0(vp), %r21 - ldo 8(vp), vp - ldd 0(up), %r19 - ldo 8(up), up - shrpd %r21, %r28, 63, %r31 - addi -1, %r1, %r0 C restore cy - ADCSBC %r19, %r31, %r29 - std %r29, 0(rp) - add,dc %r0, %r0, %r1 C save cy - copy %r21, %r28 - addib,> -1, %r22, L(loop0) - ldo 8(rp), rp - - addib,>= -8, n, L(unrolled) - addi -1, %r1, %r0 C restore cy - - shrpd %r0, %r28, 63, %r28 - ADCSBC %r0, %r28, RETREG -ifdef(`OPERATION_sublsh1_n', -` sub %r0, RETREG, RETREG') - CLRRET1 - - bve (%r2) - ldd,mb -0x100(%r30), %r3 - - -LDEF(unrolled) - std %r4, -0xf8(%r30) C save reg - ldd 0(vp), %r4 - std %r5, -0xf0(%r30) C save reg - ldd 8(vp), %r5 - std %r6, -0xe8(%r30) C save reg - ldd 16(vp), %r6 - std %r7, -0xe0(%r30) C save reg - - ldd 24(vp), %r7 - shrpd %r4, %r28, 63, %r31 - std %r8, -0xd8(%r30) C save reg - ldd 32(vp), %r8 - shrpd %r5, %r4, 63, %r4 - std %r9, -0xd0(%r30) C save reg - ldd 40(vp), %r9 - shrpd %r6, %r5, 63, %r5 - ldd 48(vp), %r3 - shrpd %r7, %r6, 63, %r6 - ldd 56(vp), %r28 - shrpd %r8, %r7, 63, %r7 - ldd 0(up), %r19 - shrpd %r9, %r8, 63, %r8 - ldd 8(up), %r20 - shrpd %r3, %r9, 63, %r9 - ldd 16(up), %r21 - shrpd %r28, %r3, 63, %r3 - ldd 24(up), %r22 - - nop C alignment FIXME - addib,<= -8, n, L(end) - addi -1, %r1, %r0 C restore cy -LDEF(loop) - ADCSBC %r19, %r31, %r29 - ldd 32(up), %r19 - std %r29, 0(rp) - ADCSBC %r20, %r4, %r29 - ldd 40(up), %r20 - std %r29, 8(rp) - ADCSBC %r21, %r5, %r29 - ldd 48(up), %r21 - std %r29, 16(rp) - ADCSBC %r22, %r6, %r29 - ldd 56(up), %r22 - std %r29, 24(rp) - ADCSBC %r19, %r7, %r29 - ldd 64(vp), %r4 - std %r29, 32(rp) - ADCSBC %r20, %r8, %r29 - ldd 72(vp), %r5 - std %r29, 40(rp) - ADCSBC %r21, %r9, %r29 - ldd 80(vp), %r6 - std %r29, 48(rp) - ADCSBC %r22, %r3, %r29 - std %r29, 56(rp) - - add,dc %r0, %r0, %r1 C save cy - - ldd 88(vp), %r7 - shrpd %r4, %r28, 63, %r31 - ldd 96(vp), %r8 - shrpd %r5, %r4, 63, %r4 - ldd 104(vp), %r9 - shrpd %r6, %r5, 63, %r5 - ldd 112(vp), %r3 - shrpd %r7, %r6, 63, %r6 - ldd 120(vp), %r28 - shrpd %r8, %r7, 63, %r7 - ldd 64(up), %r19 - shrpd %r9, %r8, 63, %r8 - ldd 72(up), %r20 - shrpd %r3, %r9, 63, %r9 - ldd 80(up), %r21 - shrpd %r28, %r3, 63, %r3 - ldd 88(up), %r22 - - ldo 64(vp), vp - ldo 64(rp), rp - ldo 64(up), up - addib,> -8, n, L(loop) - addi -1, %r1, %r0 C restore cy -LDEF(end) - ADCSBC %r19, %r31, %r29 - ldd 32(up), %r19 - std %r29, 0(rp) - ADCSBC %r20, %r4, %r29 - ldd 40(up), %r20 - std %r29, 8(rp) - ADCSBC %r21, %r5, %r29 - ldd 48(up), %r21 - std %r29, 16(rp) - ADCSBC %r22, %r6, %r29 - ldd 56(up), %r22 - std %r29, 24(rp) - ADCSBC %r19, %r7, %r29 - ldd -0xf8(%r30), %r4 C restore reg - std %r29, 32(rp) - ADCSBC %r20, %r8, %r29 - ldd -0xf0(%r30), %r5 C restore reg - std %r29, 40(rp) - ADCSBC %r21, %r9, %r29 - ldd -0xe8(%r30), %r6 C restore reg - std %r29, 48(rp) - ADCSBC %r22, %r3, %r29 - ldd -0xe0(%r30), %r7 C restore reg - std %r29, 56(rp) - - shrpd %r0, %r28, 63, %r28 - ldd -0xd8(%r30), %r8 C restore reg - ADCSBC %r0, %r28, RETREG -ifdef(`OPERATION_sublsh1_n', -` sub %r0, RETREG, RETREG') - CLRRET1 - - ldd -0xd0(%r30), %r9 C restore reg - bve (%r2) - ldd,mb -0x100(%r30), %r3 C restore reg -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/gmp-mparam.h deleted file mode 100644 index c2719c3c897dfeae4bf5b6c84a8a2ef5f6472d25..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/gmp-mparam.h +++ /dev/null @@ -1,247 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2004, 2008-2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* 440MHz PA8200 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1P_METHOD 2 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 4 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 10 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 0 /* never mpn_mod_1_1p */ -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 14 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 11 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_2_PI2_THRESHOLD 21 -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ - -#define MUL_TOOM22_THRESHOLD 31 -#define MUL_TOOM33_THRESHOLD 114 -#define MUL_TOOM44_THRESHOLD 179 -#define MUL_TOOM6H_THRESHOLD 222 -#define MUL_TOOM8H_THRESHOLD 296 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 130 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 229 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 129 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 54 - -#define SQR_BASECASE_THRESHOLD 5 -#define SQR_TOOM2_THRESHOLD 58 -#define SQR_TOOM3_THRESHOLD 153 -#define SQR_TOOM4_THRESHOLD 278 -#define SQR_TOOM6_THRESHOLD 0 /* always */ -#define SQR_TOOM8_THRESHOLD 0 /* always */ - -#define MULMID_TOOM42_THRESHOLD 56 - -#define MULMOD_BNM1_THRESHOLD 15 -#define SQRMOD_BNM1_THRESHOLD 19 - -#define POWM_SEC_TABLE 2,23,228,1084 - -#define MUL_FFT_MODF_THRESHOLD 336 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 336, 5}, { 11, 4}, { 23, 5}, { 21, 6}, \ - { 11, 5}, { 23, 6}, { 21, 7}, { 11, 6}, \ - { 23, 7}, { 15, 6}, { 31, 7}, { 21, 8}, \ - { 11, 7}, { 24, 8}, { 13, 7}, { 27, 8}, \ - { 15, 7}, { 31, 8}, { 19, 7}, { 39, 8}, \ - { 27, 9}, { 15, 8}, { 33, 9}, { 19, 8}, \ - { 39, 9}, { 23, 8}, { 47, 9}, { 27,10}, \ - { 15, 9}, { 39,10}, { 23, 9}, { 51,10}, \ - { 31, 9}, { 67,10}, { 39, 9}, { 79,10}, \ - { 47, 9}, { 95,10}, { 55,11}, { 31,10}, \ - { 63, 9}, { 127,10}, { 71, 8}, { 287,10}, \ - { 79,11}, { 47,10}, { 95, 9}, { 191, 8}, \ - { 383, 7}, { 767,10}, { 103, 9}, { 207, 8}, \ - { 415, 7}, { 831,12}, { 31,11}, { 63,10}, \ - { 127, 9}, { 255, 8}, { 543, 7}, { 1087, 6}, \ - { 2175,10}, { 143, 9}, { 287, 8}, { 575,11}, \ - { 79, 9}, { 319, 8}, { 639, 7}, { 1279, 9}, \ - { 335, 8}, { 671,10}, { 175, 9}, { 351, 8}, \ - { 703,11}, { 95,10}, { 191, 9}, { 383, 8}, \ - { 767,10}, { 207, 9}, { 415, 8}, { 831, 7}, \ - { 1663,11}, { 111,10}, { 223, 9}, { 447, 8}, \ - { 895,12}, { 63,11}, { 127,10}, { 255, 9}, \ - { 543, 8}, { 1087, 7}, { 2175,10}, { 287, 9}, \ - { 575, 8}, { 1215, 7}, { 2431,10}, { 319, 9}, \ - { 639, 8}, { 1279,10}, { 335, 9}, { 671, 8}, \ - { 1343, 9}, { 703, 8}, { 1407,12}, { 95,11}, \ - { 191,10}, { 383,11}, { 207, 9}, { 831, 8}, \ - { 1663,11}, { 223,10}, { 447, 9}, { 959,13}, \ - { 63,12}, { 127,11}, { 255, 8}, { 2047,11}, \ - { 271,10}, { 543, 9}, { 1087, 8}, { 2175,11}, \ - { 287,10}, { 575, 9}, { 1215, 8}, { 2431,11}, \ - { 319,10}, { 671, 9}, { 1343, 8}, { 2687,11}, \ - { 351,10}, { 703, 9}, { 1471, 8}, { 2943,12}, \ - { 191,11}, { 383, 8}, { 3071,11}, { 415,10}, \ - { 831, 9}, { 1663,11}, { 479,10}, { 959, 9}, \ - { 1919, 8}, { 3839,13}, { 127,12}, { 255,11}, \ - { 543,10}, { 1087, 9}, { 2175,12}, { 287,11}, \ - { 607,10}, { 1215, 9}, { 2431, 8}, { 4863,12}, \ - { 319,11}, { 671,10}, { 1343,13}, { 191, 9}, \ - { 3071,12}, { 415,11}, { 831,10}, { 1663, 8}, \ - { 6655, 9}, { 3455,12}, { 447, 9}, { 3583,13}, \ - { 255,12}, { 511,11}, { 1023,10}, { 2175,13}, \ - { 319,11}, { 1279,12}, { 671,10}, { 2815,12}, \ - { 735,10}, { 2943, 9}, { 5887,13}, { 383,12}, \ - { 767,11}, { 1535,10}, { 3071,13}, { 447,10}, \ - { 3583,12}, { 959,13}, { 511,12}, { 1087,13}, \ - { 639,12}, { 1343,13}, { 767,11}, { 3071,13}, \ - { 831,12}, { 1663,11}, { 3455,10}, { 6911,13}, \ - { 895,14}, { 511,13}, { 1023,12}, { 2047,13}, \ - { 1087,12}, { 2303,13}, { 1215,12}, { 2431,14}, \ - { 639,13}, { 1279,12}, { 2559,13}, { 1343,12}, \ - { 2687,11}, { 5375,13}, { 1407,12}, { 2815,11}, \ - { 5631,12}, { 2943,13}, { 1535,12}, { 3199,13}, \ - { 1663,12}, { 3327,13}, { 1727,14}, { 895,13}, \ - { 1791,12}, { 3583,13}, { 1919,15}, { 511,14}, \ - { 1023,13}, { 2047,12}, { 4095,14}, { 1151,13}, \ - { 2431,14}, { 1279,13}, { 2687,14}, { 1407,13}, \ - { 2815,12}, { 5631,15}, { 767,14}, { 1535,13}, \ - { 3071,14}, { 1663,13}, { 3327,14}, { 1791,13}, \ - { 3583,14}, { 1919,15}, { 1023,14}, { 2303,13}, \ - { 4607,14}, { 2431,13}, { 4863,15}, { 32768,16}, \ - { 65536,17}, { 131072,18}, { 262144,19}, { 524288,20}, \ - {1048576,21}, {2097152,22}, {4194304,23}, {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 252 -#define MUL_FFT_THRESHOLD 2368 - -#define SQR_FFT_MODF_THRESHOLD 284 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 284, 5}, { 9, 4}, { 21, 5}, { 21, 6}, \ - { 11, 5}, { 23, 6}, { 25, 7}, { 25, 8}, \ - { 13, 7}, { 27, 8}, { 15, 7}, { 31, 8}, \ - { 27, 9}, { 15, 8}, { 33, 9}, { 19, 8}, \ - { 39, 9}, { 23, 8}, { 47, 9}, { 27,10}, \ - { 15, 9}, { 39,10}, { 23, 9}, { 51,11}, \ - { 15,10}, { 31, 9}, { 67,10}, { 39, 9}, \ - { 79,10}, { 47, 9}, { 95,10}, { 55,11}, \ - { 31,10}, { 63, 8}, { 255, 7}, { 511,10}, \ - { 71, 8}, { 287, 7}, { 575,10}, { 79,11}, \ - { 47,10}, { 95, 9}, { 191, 8}, { 383, 7}, \ - { 767,10}, { 103, 9}, { 207, 8}, { 415,12}, \ - { 31,11}, { 63,10}, { 127, 9}, { 255, 8}, \ - { 543, 7}, { 1087, 8}, { 575, 7}, { 1151,11}, \ - { 79, 8}, { 639, 7}, { 1279, 9}, { 335, 8}, \ - { 671, 7}, { 1343,10}, { 175, 8}, { 703, 7}, \ - { 1407,11}, { 95,10}, { 191, 9}, { 383, 8}, \ - { 767,10}, { 207, 9}, { 415, 8}, { 831, 7}, \ - { 1663, 9}, { 447, 8}, { 895,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 543, 8}, { 1087, 7}, \ - { 2175, 9}, { 575, 8}, { 1151,10}, { 303, 9}, \ - { 607, 8}, { 1215, 7}, { 2431,10}, { 319, 9}, \ - { 639, 8}, { 1279, 9}, { 671, 8}, { 1343, 7}, \ - { 2687,10}, { 351, 9}, { 703, 8}, { 1407,12}, \ - { 95,11}, { 191,10}, { 383, 9}, { 767,11}, \ - { 207,10}, { 415, 9}, { 831, 8}, { 1663,11}, \ - { 223,10}, { 447, 9}, { 895,13}, { 63,11}, \ - { 255,10}, { 543, 8}, { 2175,11}, { 287,10}, \ - { 575, 9}, { 1151,10}, { 607, 9}, { 1215, 8}, \ - { 2431,11}, { 319, 9}, { 1279,10}, { 671, 9}, \ - { 1343, 8}, { 2687,11}, { 351,10}, { 703, 9}, \ - { 1407,10}, { 735,12}, { 191,11}, { 383,10}, \ - { 831, 9}, { 1663,12}, { 223,11}, { 447,10}, \ - { 895,11}, { 479, 9}, { 1919, 8}, { 3839,12}, \ - { 255,11}, { 511,10}, { 1023,11}, { 543,10}, \ - { 1087, 9}, { 2175,12}, { 287,11}, { 575,10}, \ - { 1151,11}, { 607,10}, { 1215, 9}, { 2431, 8}, \ - { 4863,10}, { 1279,11}, { 671,10}, { 1343, 9}, \ - { 2687,12}, { 351,11}, { 703,10}, { 1407,11}, \ - { 735,13}, { 191, 9}, { 3071, 7}, { 12287,11}, \ - { 799,12}, { 415,11}, { 831,10}, { 1663,12}, \ - { 447, 8}, { 7167,12}, { 479, 9}, { 3839,14}, \ - { 127,13}, { 255,12}, { 511,11}, { 1023,12}, \ - { 543,10}, { 2175, 9}, { 4607,11}, { 1215,10}, \ - { 2431,11}, { 1279,10}, { 2559,13}, { 383,12}, \ - { 767,11}, { 1535,12}, { 799,10}, { 3199, 9}, \ - { 6399,12}, { 895,13}, { 511,12}, { 1023,11}, \ - { 2047,12}, { 1087,13}, { 575,12}, { 1151,10}, \ - { 4607,13}, { 639,12}, { 1279,11}, { 2687,14}, \ - { 383,13}, { 767,11}, { 3071,12}, { 1599,13}, \ - { 895,12}, { 1791,11}, { 3583,13}, { 959,15}, \ - { 255,12}, { 2175,13}, { 1215,14}, { 639,13}, \ - { 1279,12}, { 2559,13}, { 1343,12}, { 2687,13}, \ - { 1471,11}, { 5887,14}, { 767,13}, { 1535,12}, \ - { 3071,13}, { 1599,12}, { 3199,13}, { 1663,12}, \ - { 3327,13}, { 1727,14}, { 895,13}, { 1791,12}, \ - { 3583,15}, { 511,14}, { 1023,13}, { 2175,14}, \ - { 1151,12}, { 4607,13}, { 2431,14}, { 1279,13}, \ - { 2687,14}, { 1407,13}, { 2815,15}, { 767,13}, \ - { 3199,14}, { 1663,13}, { 3327,14}, { 1791,13}, \ - { 3583,14}, { 1919,15}, { 1023,14}, { 2047,13}, \ - { 4095,14}, { 2303,13}, { 4607,14}, { 2431,15}, \ - { 32768,16}, { 65536,17}, { 131072,18}, { 262144,19}, \ - { 524288,20}, {1048576,21}, {2097152,22}, {4194304,23}, \ - {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 257 -#define SQR_FFT_THRESHOLD 1856 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 113 -#define MULLO_MUL_N_THRESHOLD 4658 - -#define DC_DIV_QR_THRESHOLD 123 -#define DC_DIVAPPR_Q_THRESHOLD 372 -#define DC_BDIV_QR_THRESHOLD 142 -#define DC_BDIV_Q_THRESHOLD 312 - -#define INV_MULMOD_BNM1_THRESHOLD 58 -#define INV_NEWTON_THRESHOLD 315 -#define INV_APPR_THRESHOLD 315 - -#define BINV_NEWTON_THRESHOLD 360 -#define REDC_1_TO_REDC_N_THRESHOLD 101 - -#define MU_DIV_QR_THRESHOLD 979 -#define MU_DIVAPPR_Q_THRESHOLD 1142 -#define MUPI_DIV_QR_THRESHOLD 93 -#define MU_BDIV_QR_THRESHOLD 889 -#define MU_BDIV_Q_THRESHOLD 1187 - -#define MATRIX22_STRASSEN_THRESHOLD 9 -#define HGCD_THRESHOLD 234 -#define HGCD_APPR_THRESHOLD 300 -#define HGCD_REDUCE_THRESHOLD 1553 -#define GCD_DC_THRESHOLD 684 -#define GCDEXT_DC_THRESHOLD 525 -#define JACOBI_BASE_METHOD 2 - -#define GET_STR_DC_THRESHOLD 21 -#define GET_STR_PRECOMPUTE_THRESHOLD 24 -#define SET_STR_DC_THRESHOLD 1951 -#define SET_STR_PRECOMPUTE_THRESHOLD 4034 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/lshift.asm deleted file mode 100644 index c0fc2921c1654a7b9960f92719e4787f64176326..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/lshift.asm +++ /dev/null @@ -1,114 +0,0 @@ -dnl HP-PA 2.0 mpn_lshift -- Left shift. - -dnl Copyright 1997, 2000, 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl This runs at 1.5 cycles/limb on PA8000 and 1.0 cycles/limb on PA8500. - -include(`../config.m4') - -dnl INPUT PARAMETERS -define(`rp',`%r26') -define(`up',`%r25') -define(`n',`%r24') -define(`cnt',`%r23') - -ifdef(`HAVE_ABI_2_0w', -` .level 2.0w -',` .level 2.0 -') -PROLOGUE(mpn_lshift) - shladd n, 3, up, up - shladd n, 3, rp, rp - subi 64, cnt, cnt - mtsar cnt - ldd -8(up), %r21 - addib,= -1, n, L(end) - shrpd %r0, %r21, %sar, %r29 C compute carry out limb - depw,z n, 31, 3, %r28 C r28 = (size & 7) - sub %r0, n, %r22 - depw,z %r22, 28, 3, %r22 C r22 = 8 * (-size & 7) - add up, %r22, up C offset up - blr %r28, %r0 C branch into jump table - add rp, %r22, rp C offset rp - b L(0) - nop - b L(1) - copy %r21, %r20 - b L(2) - nop - b L(3) - copy %r21, %r20 - b L(4) - nop - b L(5) - copy %r21, %r20 - b L(6) - nop - b L(7) - copy %r21, %r20 - -LDEF(loop) -LDEF(0) ldd -16(up), %r20 - shrpd %r21, %r20, %sar, %r21 - std %r21, -8(rp) -LDEF(7) ldd -24(up), %r21 - shrpd %r20, %r21, %sar, %r20 - std %r20, -16(rp) -LDEF(6) ldd -32(up), %r20 - shrpd %r21, %r20, %sar, %r21 - std %r21, -24(rp) -LDEF(5) ldd -40(up), %r21 - shrpd %r20, %r21, %sar, %r20 - std %r20, -32(rp) -LDEF(4) ldd -48(up), %r20 - shrpd %r21, %r20, %sar, %r21 - std %r21, -40(rp) -LDEF(3) ldd -56(up), %r21 - shrpd %r20, %r21, %sar, %r20 - std %r20, -48(rp) -LDEF(2) ldd -64(up), %r20 - shrpd %r21, %r20, %sar, %r21 - std %r21, -56(rp) -LDEF(1) ldd -72(up), %r21 - ldo -64(up), up - shrpd %r20, %r21, %sar, %r20 - std %r20, -64(rp) - addib,> -8, n, L(loop) - ldo -64(rp), rp - -LDEF(end) - shrpd %r21, %r0, %sar, %r21 - std %r21, -8(rp) - bve (%r2) -ifdef(`HAVE_ABI_2_0w', -` copy %r29,%r28 -',` extrd,u %r29, 31, 32, %r28 -') -EPILOGUE(mpn_lshift) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/mul_1.asm deleted file mode 100644 index 6935c23ccd7cfb83080b63256cd674676f8a2d50..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/mul_1.asm +++ /dev/null @@ -1,646 +0,0 @@ -dnl HP-PA 2.0 64-bit mpn_mul_1 -- Multiply a limb vector with a limb and store -dnl the result in a second limb vector. - -dnl Copyright 1998-2000, 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 8000,8200: 6.5 -C 8500,8600,8700: 5.625 - -C The feed-in and wind-down code has not yet been scheduled. Many cycles -C could be saved there per call. - -C DESCRIPTION: -C The main loop "BIG" is 4-way unrolled, mainly to allow -C effective use of ADD,DC. Delays in moving data via the cache from the FP -C registers to the IU registers, have demanded a deep software pipeline, and -C a lot of stack slots for partial products in flight. -C -C CODE STRUCTURE: -C save-some-registers -C do 0, 1, 2, or 3 limbs -C if done, restore-some-regs and return -C save-many-regs -C do 4, 8, ... limb -C restore-all-regs - -C STACK LAYOUT: -C HP-PA stack grows upwards. We could allocate 8 fewer slots by using the -C slots marked FREE, as well as some slots in the caller's "frame marker". -C -C -00 <- r30 -C -08 FREE -C -10 tmp -C -18 tmp -C -20 tmp -C -28 tmp -C -30 tmp -C -38 tmp -C -40 tmp -C -48 tmp -C -50 tmp -C -58 tmp -C -60 tmp -C -68 tmp -C -70 tmp -C -78 tmp -C -80 tmp -C -88 tmp -C -90 FREE -C -98 FREE -C -a0 FREE -C -a8 FREE -C -b0 r13 -C -b8 r12 -C -c0 r11 -C -c8 r10 -C -d0 r8 -C -d8 r8 -C -e0 r7 -C -e8 r6 -C -f0 r5 -C -f8 r4 -C -100 r3 -C Previous frame: -C [unused area] -C -38/-138 vlimb home slot. For 2.0N, the vlimb arg will arrive here. - - -include(`../config.m4') - -C INPUT PARAMETERS: -define(`rp',`%r26') C -define(`up',`%r25') C -define(`n',`%r24') C -define(`vlimb',`%r23') C - -define(`climb',`%r23') C - -ifdef(`HAVE_ABI_2_0w', -` .level 2.0w -',` .level 2.0 -') -PROLOGUE(mpn_mul_1) - -ifdef(`HAVE_ABI_2_0w', -` std vlimb, -0x38(%r30) C store vlimb into "home" slot -') - std,ma %r3, 0x100(%r30) - std %r4, -0xf8(%r30) - std %r5, -0xf0(%r30) - ldo 0(%r0), climb C clear climb - fldd -0x138(%r30), %fr8 C put vlimb in fp register - -define(`p032a1',`%r1') C -define(`p032a2',`%r19') C - -define(`m032',`%r20') C -define(`m096',`%r21') C - -define(`p000a',`%r22') C -define(`p064a',`%r29') C - -define(`s000',`%r31') C - -define(`ma000',`%r4') C -define(`ma064',`%r20') C - -C define(`r000',`%r3') C FIXME don't save r3 for n < 4. - - extrd,u n, 63, 2, %r5 - cmpb,= %r5, %r0, L(BIG) - nop - - fldd 0(up), %fr4 - ldo 8(up), up - xmpyu %fr8R, %fr4L, %fr22 - xmpyu %fr8L, %fr4R, %fr23 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr4R, %fr24 - xmpyu %fr8L, %fr4L, %fr25 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - fstd %fr24, -0x80(%r30) C low product to -0x80..-0x79 - addib,<> -1, %r5, L(two_or_more) - fstd %fr25, -0x68(%r30) C high product to -0x68..-0x61 -LDEF(one) - ldd -0x78(%r30), p032a1 - ldd -0x70(%r30), p032a2 - ldd -0x80(%r30), p000a - b L(0_one_out) - ldd -0x68(%r30), p064a - -LDEF(two_or_more) - fldd 0(up), %fr4 - ldo 8(up), up - xmpyu %fr8R, %fr4L, %fr22 - xmpyu %fr8L, %fr4R, %fr23 - ldd -0x78(%r30), p032a1 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr4R, %fr24 - xmpyu %fr8L, %fr4L, %fr25 - ldd -0x70(%r30), p032a2 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - ldd -0x80(%r30), p000a - fstd %fr24, -0x80(%r30) C low product to -0x80..-0x79 - ldd -0x68(%r30), p064a - addib,<> -1, %r5, L(three_or_more) - fstd %fr25, -0x68(%r30) C high product to -0x68..-0x61 -LDEF(two) - add p032a1, p032a2, m032 - add,dc %r0, %r0, m096 - depd,z m032, 31, 32, ma000 - extrd,u m032, 31, 32, ma064 - b L(0_two_out) - depd m096, 31, 32, ma064 - -LDEF(three_or_more) - fldd 0(up), %fr4 - add p032a1, p032a2, m032 - add,dc %r0, %r0, m096 - depd,z m032, 31, 32, ma000 - extrd,u m032, 31, 32, ma064 -C addib,= -1, %r5, L(0_out) - depd m096, 31, 32, ma064 -LDEF(loop0) -C xmpyu %fr8R, %fr4L, %fr22 -C xmpyu %fr8L, %fr4R, %fr23 -C ldd -0x78(%r30), p032a1 -C fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 -C -C xmpyu %fr8R, %fr4R, %fr24 -C xmpyu %fr8L, %fr4L, %fr25 -C ldd -0x70(%r30), p032a2 -C fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 -C -C ldo 8(rp), rp -C add climb, p000a, s000 -C ldd -0x80(%r30), p000a -C fstd %fr24, -0x80(%r30) C low product to -0x80..-0x79 -C -C add,dc p064a, %r0, climb -C ldo 8(up), up -C ldd -0x68(%r30), p064a -C fstd %fr25, -0x68(%r30) C high product to -0x68..-0x61 -C -C add ma000, s000, s000 -C add,dc ma064, climb, climb -C fldd 0(up), %fr4 -C -C std s000, -8(rp) -C -C add p032a1, p032a2, m032 -C add,dc %r0, %r0, m096 -C -C depd,z m032, 31, 32, ma000 -C extrd,u m032, 31, 32, ma064 -C addib,<> -1, %r5, L(loop0) -C depd m096, 31, 32, ma064 -LDEF(0_out) - ldo 8(up), up - xmpyu %fr8R, %fr4L, %fr22 - xmpyu %fr8L, %fr4R, %fr23 - ldd -0x78(%r30), p032a1 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr4R, %fr24 - xmpyu %fr8L, %fr4L, %fr25 - ldd -0x70(%r30), p032a2 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - ldo 8(rp), rp - add climb, p000a, s000 - ldd -0x80(%r30), p000a - fstd %fr24, -0x80(%r30) C low product to -0x80..-0x79 - add,dc p064a, %r0, climb - ldd -0x68(%r30), p064a - fstd %fr25, -0x68(%r30) C high product to -0x68..-0x61 - add ma000, s000, s000 - add,dc ma064, climb, climb - std s000, -8(rp) - add p032a1, p032a2, m032 - add,dc %r0, %r0, m096 - depd,z m032, 31, 32, ma000 - extrd,u m032, 31, 32, ma064 - depd m096, 31, 32, ma064 -LDEF(0_two_out) - ldd -0x78(%r30), p032a1 - ldd -0x70(%r30), p032a2 - ldo 8(rp), rp - add climb, p000a, s000 - ldd -0x80(%r30), p000a - add,dc p064a, %r0, climb - ldd -0x68(%r30), p064a - add ma000, s000, s000 - add,dc ma064, climb, climb - std s000, -8(rp) -LDEF(0_one_out) - add p032a1, p032a2, m032 - add,dc %r0, %r0, m096 - depd,z m032, 31, 32, ma000 - extrd,u m032, 31, 32, ma064 - depd m096, 31, 32, ma064 - - add climb, p000a, s000 - add,dc p064a, %r0, climb - add ma000, s000, s000 - add,dc ma064, climb, climb - std s000, 0(rp) - - cmpib,>= 4, n, L(done) - ldo 8(rp), rp - -C 4-way unrolled code. - -LDEF(BIG) - -define(`p032a1',`%r1') C -define(`p032a2',`%r19') C -define(`p096b1',`%r20') C -define(`p096b2',`%r21') C -define(`p160c1',`%r22') C -define(`p160c2',`%r29') C -define(`p224d1',`%r31') C -define(`p224d2',`%r3') C - C -define(`m032',`%r4') C -define(`m096',`%r5') C -define(`m160',`%r6') C -define(`m224',`%r7') C -define(`m288',`%r8') C - C -define(`p000a',`%r1') C -define(`p064a',`%r19') C -define(`p064b',`%r20') C -define(`p128b',`%r21') C -define(`p128c',`%r22') C -define(`p192c',`%r29') C -define(`p192d',`%r31') C -define(`p256d',`%r3') C - C -define(`s000',`%r10') C -define(`s064',`%r11') C -define(`s128',`%r12') C -define(`s192',`%r13') C - C -define(`ma000',`%r9') C -define(`ma064',`%r4') C -define(`ma128',`%r5') C -define(`ma192',`%r6') C -define(`ma256',`%r7') C - - std %r6, -0xe8(%r30) - std %r7, -0xe0(%r30) - std %r8, -0xd8(%r30) - std %r9, -0xd0(%r30) - std %r10, -0xc8(%r30) - std %r11, -0xc0(%r30) - std %r12, -0xb8(%r30) - std %r13, -0xb0(%r30) - -ifdef(`HAVE_ABI_2_0w', -` extrd,u n, 61, 62, n C right shift 2 -',` extrd,u n, 61, 30, n C right shift 2, zero extend -') - -LDEF(4_or_more) - fldd 0(up), %fr4 - fldd 8(up), %fr5 - fldd 16(up), %fr6 - fldd 24(up), %fr7 - xmpyu %fr8R, %fr4L, %fr22 - xmpyu %fr8L, %fr4R, %fr23 - xmpyu %fr8R, %fr5L, %fr24 - xmpyu %fr8L, %fr5R, %fr25 - xmpyu %fr8R, %fr6L, %fr26 - xmpyu %fr8L, %fr6R, %fr27 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr7L, %fr28 - xmpyu %fr8L, %fr7R, %fr29 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - xmpyu %fr8R, %fr4R, %fr30 - xmpyu %fr8L, %fr4L, %fr31 - fstd %fr24, -0x38(%r30) C mid product to -0x38..-0x31 - xmpyu %fr8R, %fr5R, %fr22 - xmpyu %fr8L, %fr5L, %fr23 - fstd %fr25, -0x30(%r30) C mid product to -0x30..-0x29 - xmpyu %fr8R, %fr6R, %fr24 - xmpyu %fr8L, %fr6L, %fr25 - fstd %fr26, -0x58(%r30) C mid product to -0x58..-0x51 - xmpyu %fr8R, %fr7R, %fr26 - fstd %fr27, -0x50(%r30) C mid product to -0x50..-0x49 - addib,<> -1, n, L(8_or_more) - xmpyu %fr8L, %fr7L, %fr27 - fstd %fr28, -0x18(%r30) C mid product to -0x18..-0x11 - fstd %fr29, -0x10(%r30) C mid product to -0x10..-0x09 - fstd %fr30, -0x80(%r30) C low product to -0x80..-0x79 - fstd %fr31, -0x68(%r30) C high product to -0x68..-0x61 - fstd %fr22, -0x40(%r30) C low product to -0x40..-0x39 - fstd %fr23, -0x28(%r30) C high product to -0x28..-0x21 - fstd %fr24, -0x60(%r30) C low product to -0x60..-0x59 - fstd %fr25, -0x48(%r30) C high product to -0x48..-0x41 - fstd %fr26, -0x20(%r30) C low product to -0x20..-0x19 - fstd %fr27, -0x88(%r30) C high product to -0x88..-0x81 - ldd -0x78(%r30), p032a1 - ldd -0x70(%r30), p032a2 - ldd -0x38(%r30), p096b1 - ldd -0x30(%r30), p096b2 - ldd -0x58(%r30), p160c1 - ldd -0x50(%r30), p160c2 - ldd -0x18(%r30), p224d1 - ldd -0x10(%r30), p224d2 - b L(end1) - nop - -LDEF(8_or_more) - fstd %fr28, -0x18(%r30) C mid product to -0x18..-0x11 - fstd %fr29, -0x10(%r30) C mid product to -0x10..-0x09 - ldo 32(up), up - fstd %fr30, -0x80(%r30) C low product to -0x80..-0x79 - fstd %fr31, -0x68(%r30) C high product to -0x68..-0x61 - fstd %fr22, -0x40(%r30) C low product to -0x40..-0x39 - fstd %fr23, -0x28(%r30) C high product to -0x28..-0x21 - fstd %fr24, -0x60(%r30) C low product to -0x60..-0x59 - fstd %fr25, -0x48(%r30) C high product to -0x48..-0x41 - fstd %fr26, -0x20(%r30) C low product to -0x20..-0x19 - fstd %fr27, -0x88(%r30) C high product to -0x88..-0x81 - fldd 0(up), %fr4 - fldd 8(up), %fr5 - fldd 16(up), %fr6 - fldd 24(up), %fr7 - xmpyu %fr8R, %fr4L, %fr22 - ldd -0x78(%r30), p032a1 - xmpyu %fr8L, %fr4R, %fr23 - xmpyu %fr8R, %fr5L, %fr24 - ldd -0x70(%r30), p032a2 - xmpyu %fr8L, %fr5R, %fr25 - xmpyu %fr8R, %fr6L, %fr26 - ldd -0x38(%r30), p096b1 - xmpyu %fr8L, %fr6R, %fr27 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr7L, %fr28 - ldd -0x30(%r30), p096b2 - xmpyu %fr8L, %fr7R, %fr29 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - xmpyu %fr8R, %fr4R, %fr30 - ldd -0x58(%r30), p160c1 - xmpyu %fr8L, %fr4L, %fr31 - fstd %fr24, -0x38(%r30) C mid product to -0x38..-0x31 - xmpyu %fr8R, %fr5R, %fr22 - ldd -0x50(%r30), p160c2 - xmpyu %fr8L, %fr5L, %fr23 - fstd %fr25, -0x30(%r30) C mid product to -0x30..-0x29 - xmpyu %fr8R, %fr6R, %fr24 - ldd -0x18(%r30), p224d1 - xmpyu %fr8L, %fr6L, %fr25 - fstd %fr26, -0x58(%r30) C mid product to -0x58..-0x51 - xmpyu %fr8R, %fr7R, %fr26 - ldd -0x10(%r30), p224d2 - fstd %fr27, -0x50(%r30) C mid product to -0x50..-0x49 - addib,= -1, n, L(end2) - xmpyu %fr8L, %fr7L, %fr27 -LDEF(loop) - add p032a1, p032a2, m032 - ldd -0x80(%r30), p000a - add,dc p096b1, p096b2, m096 - fstd %fr28, -0x18(%r30) C mid product to -0x18..-0x11 - - add,dc p160c1, p160c2, m160 - ldd -0x68(%r30), p064a - add,dc p224d1, p224d2, m224 - fstd %fr29, -0x10(%r30) C mid product to -0x10..-0x09 - - add,dc %r0, %r0, m288 - ldd -0x40(%r30), p064b - ldo 32(up), up - fstd %fr30, -0x80(%r30) C low product to -0x80..-0x79 - - depd,z m032, 31, 32, ma000 - ldd -0x28(%r30), p128b - extrd,u m032, 31, 32, ma064 - fstd %fr31, -0x68(%r30) C high product to -0x68..-0x61 - - depd m096, 31, 32, ma064 - ldd -0x60(%r30), p128c - extrd,u m096, 31, 32, ma128 - fstd %fr22, -0x40(%r30) C low product to -0x40..-0x39 - - depd m160, 31, 32, ma128 - ldd -0x48(%r30), p192c - extrd,u m160, 31, 32, ma192 - fstd %fr23, -0x28(%r30) C high product to -0x28..-0x21 - - depd m224, 31, 32, ma192 - ldd -0x20(%r30), p192d - extrd,u m224, 31, 32, ma256 - fstd %fr24, -0x60(%r30) C low product to -0x60..-0x59 - - depd m288, 31, 32, ma256 - ldd -0x88(%r30), p256d - add climb, p000a, s000 - fstd %fr25, -0x48(%r30) C high product to -0x48..-0x41 - - add,dc p064a, p064b, s064 - add,dc p128b, p128c, s128 - fstd %fr26, -0x20(%r30) C low product to -0x20..-0x19 - - add,dc p192c, p192d, s192 - add,dc p256d, %r0, climb - fstd %fr27, -0x88(%r30) C high product to -0x88..-0x81 - - add ma000, s000, s000 C accum mid 0 - fldd 0(up), %fr4 - add,dc ma064, s064, s064 C accum mid 1 - std s000, 0(rp) - - add,dc ma128, s128, s128 C accum mid 2 - fldd 8(up), %fr5 - add,dc ma192, s192, s192 C accum mid 3 - std s064, 8(rp) - - add,dc ma256, climb, climb - fldd 16(up), %fr6 - std s128, 16(rp) - - xmpyu %fr8R, %fr4L, %fr22 - ldd -0x78(%r30), p032a1 - xmpyu %fr8L, %fr4R, %fr23 - fldd 24(up), %fr7 - - xmpyu %fr8R, %fr5L, %fr24 - ldd -0x70(%r30), p032a2 - xmpyu %fr8L, %fr5R, %fr25 - std s192, 24(rp) - - xmpyu %fr8R, %fr6L, %fr26 - ldd -0x38(%r30), p096b1 - xmpyu %fr8L, %fr6R, %fr27 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - - xmpyu %fr8R, %fr7L, %fr28 - ldd -0x30(%r30), p096b2 - xmpyu %fr8L, %fr7R, %fr29 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - - xmpyu %fr8R, %fr4R, %fr30 - ldd -0x58(%r30), p160c1 - xmpyu %fr8L, %fr4L, %fr31 - fstd %fr24, -0x38(%r30) C mid product to -0x38..-0x31 - - xmpyu %fr8R, %fr5R, %fr22 - ldd -0x50(%r30), p160c2 - xmpyu %fr8L, %fr5L, %fr23 - fstd %fr25, -0x30(%r30) C mid product to -0x30..-0x29 - - xmpyu %fr8R, %fr6R, %fr24 - ldd -0x18(%r30), p224d1 - xmpyu %fr8L, %fr6L, %fr25 - fstd %fr26, -0x58(%r30) C mid product to -0x58..-0x51 - - xmpyu %fr8R, %fr7R, %fr26 - ldd -0x10(%r30), p224d2 - fstd %fr27, -0x50(%r30) C mid product to -0x50..-0x49 - xmpyu %fr8L, %fr7L, %fr27 - - addib,<> -1, n, L(loop) - ldo 32(rp), rp - -LDEF(end2) - add p032a1, p032a2, m032 - ldd -0x80(%r30), p000a - add,dc p096b1, p096b2, m096 - fstd %fr28, -0x18(%r30) C mid product to -0x18..-0x11 - add,dc p160c1, p160c2, m160 - ldd -0x68(%r30), p064a - add,dc p224d1, p224d2, m224 - fstd %fr29, -0x10(%r30) C mid product to -0x10..-0x09 - add,dc %r0, %r0, m288 - ldd -0x40(%r30), p064b - fstd %fr30, -0x80(%r30) C low product to -0x80..-0x79 - depd,z m032, 31, 32, ma000 - ldd -0x28(%r30), p128b - extrd,u m032, 31, 32, ma064 - fstd %fr31, -0x68(%r30) C high product to -0x68..-0x61 - depd m096, 31, 32, ma064 - ldd -0x60(%r30), p128c - extrd,u m096, 31, 32, ma128 - fstd %fr22, -0x40(%r30) C low product to -0x40..-0x39 - depd m160, 31, 32, ma128 - ldd -0x48(%r30), p192c - extrd,u m160, 31, 32, ma192 - fstd %fr23, -0x28(%r30) C high product to -0x28..-0x21 - depd m224, 31, 32, ma192 - ldd -0x20(%r30), p192d - extrd,u m224, 31, 32, ma256 - fstd %fr24, -0x60(%r30) C low product to -0x60..-0x59 - depd m288, 31, 32, ma256 - ldd -0x88(%r30), p256d - add climb, p000a, s000 - fstd %fr25, -0x48(%r30) C high product to -0x48..-0x41 - add,dc p064a, p064b, s064 - add,dc p128b, p128c, s128 - fstd %fr26, -0x20(%r30) C low product to -0x20..-0x19 - add,dc p192c, p192d, s192 - add,dc p256d, %r0, climb - fstd %fr27, -0x88(%r30) C high product to -0x88..-0x81 - add ma000, s000, s000 C accum mid 0 - add,dc ma064, s064, s064 C accum mid 1 - add,dc ma128, s128, s128 C accum mid 2 - add,dc ma192, s192, s192 C accum mid 3 - add,dc ma256, climb, climb - std s000, 0(rp) - std s064, 8(rp) - ldd -0x78(%r30), p032a1 - std s128, 16(rp) - ldd -0x70(%r30), p032a2 - std s192, 24(rp) - ldd -0x38(%r30), p096b1 - ldd -0x30(%r30), p096b2 - ldd -0x58(%r30), p160c1 - ldd -0x50(%r30), p160c2 - ldd -0x18(%r30), p224d1 - ldd -0x10(%r30), p224d2 - ldo 32(rp), rp - -LDEF(end1) - add p032a1, p032a2, m032 - ldd -0x80(%r30), p000a - add,dc p096b1, p096b2, m096 - add,dc p160c1, p160c2, m160 - ldd -0x68(%r30), p064a - add,dc p224d1, p224d2, m224 - add,dc %r0, %r0, m288 - ldd -0x40(%r30), p064b - depd,z m032, 31, 32, ma000 - ldd -0x28(%r30), p128b - extrd,u m032, 31, 32, ma064 - depd m096, 31, 32, ma064 - ldd -0x60(%r30), p128c - extrd,u m096, 31, 32, ma128 - depd m160, 31, 32, ma128 - ldd -0x48(%r30), p192c - extrd,u m160, 31, 32, ma192 - depd m224, 31, 32, ma192 - ldd -0x20(%r30), p192d - extrd,u m224, 31, 32, ma256 - depd m288, 31, 32, ma256 - ldd -0x88(%r30), p256d - add climb, p000a, s000 - add,dc p064a, p064b, s064 - add,dc p128b, p128c, s128 - add,dc p192c, p192d, s192 - add,dc p256d, %r0, climb - add ma000, s000, s000 C accum mid 0 - add,dc ma064, s064, s064 C accum mid 1 - add,dc ma128, s128, s128 C accum mid 2 - add,dc ma192, s192, s192 C accum mid 3 - add,dc ma256, climb, climb - std s000, 0(rp) - std s064, 8(rp) - std s128, 16(rp) - std s192, 24(rp) - - ldd -0xb0(%r30), %r13 - ldd -0xb8(%r30), %r12 - ldd -0xc0(%r30), %r11 - ldd -0xc8(%r30), %r10 - ldd -0xd0(%r30), %r9 - ldd -0xd8(%r30), %r8 - ldd -0xe0(%r30), %r7 - ldd -0xe8(%r30), %r6 -LDEF(done) -ifdef(`HAVE_ABI_2_0w', -` copy climb, %r28 -',` extrd,u climb, 63, 32, %r29 - extrd,u climb, 31, 32, %r28 -') - ldd -0xf0(%r30), %r5 - ldd -0xf8(%r30), %r4 - bve (%r2) - ldd,mb -0x100(%r30), %r3 -EPILOGUE(mpn_mul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/rshift.asm deleted file mode 100644 index cfc242ea9ca274248c375a3444bc8014478a88d3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/rshift.asm +++ /dev/null @@ -1,111 +0,0 @@ -dnl HP-PA 2.0 mpn_rshift -- Right shift. - -dnl Copyright 1997, 2000, 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl This runs at 1.5 cycles/limb on PA8000 and 1.0 cycles/limb on PA8500. - -include(`../config.m4') - -dnl INPUT PARAMETERS -define(`rp',`%r26') -define(`up',`%r25') -define(`n',`%r24') -define(`cnt',`%r23') - -ifdef(`HAVE_ABI_2_0w', -` .level 2.0w -',` .level 2.0 -') -PROLOGUE(mpn_rshift) - mtsar cnt - ldd 0(up), %r21 - addib,= -1, n, L(end) - shrpd %r21, %r0, %sar, %r29 C compute carry out limb - depw,z n, 31, 3, %r28 C r28 = (size & 7) - sub %r0, n, %r22 - depw,z %r22, 28, 3, %r22 C r22 = 8 * (-size & 7) - sub up, %r22, up C offset up - blr %r28, %r0 C branch into jump table - sub rp, %r22, rp C offset rp - b L(0) - nop - b L(1) - copy %r21, %r20 - b L(2) - nop - b L(3) - copy %r21, %r20 - b L(4) - nop - b L(5) - copy %r21, %r20 - b L(6) - nop - b L(7) - copy %r21, %r20 - -LDEF(loop) -LDEF(0) ldd 8(up), %r20 - shrpd %r20, %r21, %sar, %r21 - std %r21, 0(rp) -LDEF(7) ldd 16(up), %r21 - shrpd %r21, %r20, %sar, %r20 - std %r20, 8(rp) -LDEF(6) ldd 24(up), %r20 - shrpd %r20, %r21, %sar, %r21 - std %r21, 16(rp) -LDEF(5) ldd 32(up), %r21 - shrpd %r21, %r20, %sar, %r20 - std %r20, 24(rp) -LDEF(4) ldd 40(up), %r20 - shrpd %r20, %r21, %sar, %r21 - std %r21, 32(rp) -LDEF(3) ldd 48(up), %r21 - shrpd %r21, %r20, %sar, %r20 - std %r20, 40(rp) -LDEF(2) ldd 56(up), %r20 - shrpd %r20, %r21, %sar, %r21 - std %r21, 48(rp) -LDEF(1) ldd 64(up), %r21 - ldo 64(up), up - shrpd %r21, %r20, %sar, %r20 - std %r20, 56(rp) - addib,> -8, n, L(loop) - ldo 64(rp), rp - -LDEF(end) - shrpd %r0, %r21, %sar, %r21 - std %r21, 0(rp) - bve (%r2) -ifdef(`HAVE_ABI_2_0w', -` copy %r29,%r28 -',` extrd,u %r29, 31, 32, %r28 -') -EPILOGUE(mpn_rshift) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/sqr_diagonal.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/sqr_diagonal.asm deleted file mode 100644 index f6fadc93c63a095db5fb465cce8be209168414d6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/sqr_diagonal.asm +++ /dev/null @@ -1,191 +0,0 @@ -dnl HP-PA 2.0 64-bit mpn_sqr_diagonal. - -dnl Copyright 2001-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl This code runs at 7.25 cycles/limb on PA8000 and 7.75 cycles/limb on -dnl PA8500. The cache would saturate at 5 cycles/limb, so there is some room -dnl for optimization. - -include(`../config.m4') - -C INPUT PARAMETERS -define(`rp',`%r26') -define(`up',`%r25') -define(`n',`%r24') - -define(`p00',`%r28') -define(`p32',`%r29') -define(`p64',`%r31') -define(`t0',`%r19') -define(`t1',`%r20') - -ifdef(`HAVE_ABI_2_0w', -` .level 2.0w -',` .level 2.0 -') -PROLOGUE(mpn_sqr_diagonal) - ldo 128(%r30),%r30 - - fldds,ma 8(up),%fr8 - addib,= -1,n,L(end1) - nop - fldds,ma 8(up),%fr4 - xmpyu %fr8l,%fr8r,%fr10 - fstd %fr10,-120(%r30) - xmpyu %fr8r,%fr8r,%fr9 - fstd %fr9,0(rp) - xmpyu %fr8l,%fr8l,%fr11 - fstd %fr11,8(rp) - addib,= -1,n,L(end2) - ldo 16(rp),rp - -LDEF(loop) - fldds,ma 8(up),%fr8 C load next up limb - xmpyu %fr4l,%fr4r,%fr6 - fstd %fr6,-128(%r30) - xmpyu %fr4r,%fr4r,%fr5 C multiply in fp regs - fstd %fr5,0(rp) - xmpyu %fr4l,%fr4l,%fr7 - fstd %fr7,8(rp) - ldd -120(%r30),p32 - ldd -16(rp),p00 C accumulate in int regs - ldd -8(rp),p64 - depd,z p32,30,31,t0 - add t0,p00,p00 - std p00,-16(rp) - extrd,u p32,32,33,t1 - add,dc t1,p64,p64 - std p64,-8(rp) - addib,= -1,n,L(exit) - ldo 16(rp),rp - - fldds,ma 8(up),%fr4 - xmpyu %fr8l,%fr8r,%fr10 - fstd %fr10,-120(%r30) - xmpyu %fr8r,%fr8r,%fr9 - fstd %fr9,0(rp) - xmpyu %fr8l,%fr8l,%fr11 - fstd %fr11,8(rp) - ldd -128(%r30),p32 - ldd -16(rp),p00 - ldd -8(rp),p64 - depd,z p32,30,31,t0 - add t0,p00,p00 - std p00,-16(rp) - extrd,u p32,32,33,t1 - add,dc t1,p64,p64 - std p64,-8(rp) - addib,<> -1,n,L(loop) - ldo 16(rp),rp - -LDEF(end2) - xmpyu %fr4l,%fr4r,%fr6 - fstd %fr6,-128(%r30) - xmpyu %fr4r,%fr4r,%fr5 - fstd %fr5,0(rp) - xmpyu %fr4l,%fr4l,%fr7 - fstd %fr7,8(rp) - ldd -120(%r30),p32 - ldd -16(rp),p00 - ldd -8(rp),p64 - depd,z p32,30,31,t0 - add t0,p00,p00 - std p00,-16(rp) - extrd,u p32,32,33,t1 - add,dc t1,p64,p64 - std p64,-8(rp) - ldo 16(rp),rp - ldd -128(%r30),p32 - ldd -16(rp),p00 - ldd -8(rp),p64 - depd,z p32,30,31,t0 - add t0,p00,p00 - std p00,-16(rp) - extrd,u p32,32,33,t1 - add,dc t1,p64,p64 - std p64,-8(rp) - bve (%r2) - ldo -128(%r30),%r30 - -LDEF(exit) - xmpyu %fr8l,%fr8r,%fr10 - fstd %fr10,-120(%r30) - xmpyu %fr8r,%fr8r,%fr9 - fstd %fr9,0(rp) - xmpyu %fr8l,%fr8l,%fr11 - fstd %fr11,8(rp) - ldd -128(%r30),p32 - ldd -16(rp),p00 - ldd -8(rp),p64 - depd,z p32,31,32,t0 - add t0,p00,p00 - extrd,u p32,31,32,t1 - add,dc t1,p64,p64 - add t0,p00,p00 - add,dc t1,p64,p64 - std p00,-16(rp) - std p64,-8(rp) - ldo 16(rp),rp - ldd -120(%r30),p32 - ldd -16(rp),p00 - ldd -8(rp),p64 - depd,z p32,31,32,t0 - add t0,p00,p00 - extrd,u p32,31,32,t1 - add,dc t1,p64,p64 - add t0,p00,p00 - add,dc t1,p64,p64 - std p00,-16(rp) - std p64,-8(rp) - bve (%r2) - ldo -128(%r30),%r30 - -LDEF(end1) - xmpyu %fr8l,%fr8r,%fr10 - fstd %fr10,-128(%r30) - xmpyu %fr8r,%fr8r,%fr9 - fstd %fr9,0(rp) - xmpyu %fr8l,%fr8l,%fr11 - fstd %fr11,8(rp) - ldo 16(rp),rp - ldd -128(%r30),p32 - ldd -16(rp),p00 - ldd -8(rp),p64 - depd,z p32,31,32,t0 - add t0,p00,p00 - extrd,u p32,31,32,t1 - add,dc t1,p64,p64 - add t0,p00,p00 - add,dc t1,p64,p64 - std p00,-16(rp) - std p64,-8(rp) - bve (%r2) - ldo -128(%r30),%r30 -EPILOGUE(mpn_sqr_diagonal) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/submul_1.asm deleted file mode 100644 index f8a1968e45b495196dec62c39d15a646f9687243..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/submul_1.asm +++ /dev/null @@ -1,700 +0,0 @@ -dnl HP-PA 2.0 64-bit mpn_submul_1 -- Multiply a limb vector with a limb and -dnl subtract the result from a second limb vector. - -dnl Copyright 1998-2000, 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 8000,8200: 7 -C 8500,8600,8700: 6.5 - -C The feed-in and wind-down code has not yet been scheduled. Many cycles -C could be saved there per call. - -C DESCRIPTION: -C The main loop "BIG" is 4-way unrolled, mainly to allow -C effective use of ADD,DC. Delays in moving data via the cache from the FP -C registers to the IU registers, have demanded a deep software pipeline, and -C a lot of stack slots for partial products in flight. -C -C CODE STRUCTURE: -C save-some-registers -C do 0, 1, 2, or 3 limbs -C if done, restore-some-regs and return -C save-many-regs -C do 4, 8, ... limb -C restore-all-regs - -C STACK LAYOUT: -C HP-PA stack grows upwards. We could allocate 8 fewer slots by using the -C slots marked FREE, as well as some slots in the caller's "frame marker". -C -C -00 <- r30 -C -08 FREE -C -10 tmp -C -18 tmp -C -20 tmp -C -28 tmp -C -30 tmp -C -38 tmp -C -40 tmp -C -48 tmp -C -50 tmp -C -58 tmp -C -60 tmp -C -68 tmp -C -70 tmp -C -78 tmp -C -80 tmp -C -88 tmp -C -90 FREE -C -98 FREE -C -a0 FREE -C -a8 FREE -C -b0 r13 -C -b8 r12 -C -c0 r11 -C -c8 r10 -C -d0 r8 -C -d8 r8 -C -e0 r7 -C -e8 r6 -C -f0 r5 -C -f8 r4 -C -100 r3 -C Previous frame: -C [unused area] -C -38/-138 vlimb home slot. For 2.0N, the vlimb arg will arrive here. - - -include(`../config.m4') - -C INPUT PARAMETERS: -define(`rp',`%r26') C -define(`up',`%r25') C -define(`n',`%r24') C -define(`vlimb',`%r23') C - -define(`climb',`%r23') C - -ifdef(`HAVE_ABI_2_0w', -` .level 2.0w -',` .level 2.0 -') -PROLOGUE(mpn_submul_1) - -ifdef(`HAVE_ABI_2_0w', -` std vlimb, -0x38(%r30) C store vlimb into "home" slot -') - std,ma %r3, 0x100(%r30) - std %r4, -0xf8(%r30) - std %r5, -0xf0(%r30) - ldo 0(%r0), climb C clear climb - fldd -0x138(%r30), %fr8 C put vlimb in fp register - -define(`p032a1',`%r1') C -define(`p032a2',`%r19') C - -define(`m032',`%r20') C -define(`m096',`%r21') C - -define(`p000a',`%r22') C -define(`p064a',`%r29') C - -define(`s000',`%r31') C - -define(`ma000',`%r4') C -define(`ma064',`%r20') C - -define(`r000',`%r3') C - - extrd,u n, 63, 2, %r5 - cmpb,= %r5, %r0, L(BIG) - nop - - fldd 0(up), %fr4 - ldo 8(up), up - xmpyu %fr8R, %fr4L, %fr22 - xmpyu %fr8L, %fr4R, %fr23 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr4R, %fr24 - xmpyu %fr8L, %fr4L, %fr25 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - fstd %fr24, -0x80(%r30) C low product to -0x80..-0x79 - addib,<> -1, %r5, L(two_or_more) - fstd %fr25, -0x68(%r30) C high product to -0x68..-0x61 -LDEF(one) - ldd -0x78(%r30), p032a1 - ldd -0x70(%r30), p032a2 - ldd -0x80(%r30), p000a - b L(0_one_out) - ldd -0x68(%r30), p064a - -LDEF(two_or_more) - fldd 0(up), %fr4 - ldo 8(up), up - xmpyu %fr8R, %fr4L, %fr22 - xmpyu %fr8L, %fr4R, %fr23 - ldd -0x78(%r30), p032a1 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr4R, %fr24 - xmpyu %fr8L, %fr4L, %fr25 - ldd -0x70(%r30), p032a2 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - ldd -0x80(%r30), p000a - fstd %fr24, -0x80(%r30) C low product to -0x80..-0x79 - ldd -0x68(%r30), p064a - addib,<> -1, %r5, L(three_or_more) - fstd %fr25, -0x68(%r30) C high product to -0x68..-0x61 -LDEF(two) - add p032a1, p032a2, m032 - add,dc %r0, %r0, m096 - depd,z m032, 31, 32, ma000 - extrd,u m032, 31, 32, ma064 - ldd 0(rp), r000 - b L(0_two_out) - depd m096, 31, 32, ma064 - -LDEF(three_or_more) - fldd 0(up), %fr4 - add p032a1, p032a2, m032 - add,dc %r0, %r0, m096 - depd,z m032, 31, 32, ma000 - extrd,u m032, 31, 32, ma064 - ldd 0(rp), r000 -C addib,= -1, %r5, L(0_out) - depd m096, 31, 32, ma064 -LDEF(loop0) -C xmpyu %fr8R, %fr4L, %fr22 -C xmpyu %fr8L, %fr4R, %fr23 -C ldd -0x78(%r30), p032a1 -C fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 -C -C xmpyu %fr8R, %fr4R, %fr24 -C xmpyu %fr8L, %fr4L, %fr25 -C ldd -0x70(%r30), p032a2 -C fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 -C -C ldo 8(rp), rp -C add climb, p000a, s000 -C ldd -0x80(%r30), p000a -C fstd %fr24, -0x80(%r30) C low product to -0x80..-0x79 -C -C add,dc p064a, %r0, climb -C ldo 8(up), up -C ldd -0x68(%r30), p064a -C fstd %fr25, -0x68(%r30) C high product to -0x68..-0x61 -C -C add ma000, s000, s000 -C add,dc ma064, climb, climb -C fldd 0(up), %fr4 -C -C sub r000, s000, s000 -C sub,db %r0, climb, climb -C sub %r0, climb, climb -C std s000, -8(rp) -C -C add p032a1, p032a2, m032 -C add,dc %r0, %r0, m096 -C -C depd,z m032, 31, 32, ma000 -C extrd,u m032, 31, 32, ma064 -C ldd 0(rp), r000 -C addib,<> -1, %r5, L(loop0) -C depd m096, 31, 32, ma064 -LDEF(0_out) - ldo 8(up), up - xmpyu %fr8R, %fr4L, %fr22 - xmpyu %fr8L, %fr4R, %fr23 - ldd -0x78(%r30), p032a1 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr4R, %fr24 - xmpyu %fr8L, %fr4L, %fr25 - ldd -0x70(%r30), p032a2 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - ldo 8(rp), rp - add climb, p000a, s000 - ldd -0x80(%r30), p000a - fstd %fr24, -0x80(%r30) C low product to -0x80..-0x79 - add,dc p064a, %r0, climb - ldd -0x68(%r30), p064a - fstd %fr25, -0x68(%r30) C high product to -0x68..-0x61 - add ma000, s000, s000 - add,dc ma064, climb, climb - sub r000, s000, s000 - sub,db %r0, climb, climb - sub %r0, climb, climb - std s000, -8(rp) - add p032a1, p032a2, m032 - add,dc %r0, %r0, m096 - depd,z m032, 31, 32, ma000 - extrd,u m032, 31, 32, ma064 - ldd 0(rp), r000 - depd m096, 31, 32, ma064 -LDEF(0_two_out) - ldd -0x78(%r30), p032a1 - ldd -0x70(%r30), p032a2 - ldo 8(rp), rp - add climb, p000a, s000 - ldd -0x80(%r30), p000a - add,dc p064a, %r0, climb - ldd -0x68(%r30), p064a - add ma000, s000, s000 - add,dc ma064, climb, climb - sub r000, s000, s000 - sub,db %r0, climb, climb - sub %r0, climb, climb - std s000, -8(rp) -LDEF(0_one_out) - add p032a1, p032a2, m032 - add,dc %r0, %r0, m096 - depd,z m032, 31, 32, ma000 - extrd,u m032, 31, 32, ma064 - ldd 0(rp), r000 - depd m096, 31, 32, ma064 - - add climb, p000a, s000 - add,dc p064a, %r0, climb - add ma000, s000, s000 - add,dc ma064, climb, climb - sub r000, s000, s000 - sub,db %r0, climb, climb - sub %r0, climb, climb - std s000, 0(rp) - - cmpib,>= 4, n, L(done) - ldo 8(rp), rp - -C 4-way unrolled code. - -LDEF(BIG) - -define(`p032a1',`%r1') C -define(`p032a2',`%r19') C -define(`p096b1',`%r20') C -define(`p096b2',`%r21') C -define(`p160c1',`%r22') C -define(`p160c2',`%r29') C -define(`p224d1',`%r31') C -define(`p224d2',`%r3') C - C -define(`m032',`%r4') C -define(`m096',`%r5') C -define(`m160',`%r6') C -define(`m224',`%r7') C -define(`m288',`%r8') C - C -define(`p000a',`%r1') C -define(`p064a',`%r19') C -define(`p064b',`%r20') C -define(`p128b',`%r21') C -define(`p128c',`%r22') C -define(`p192c',`%r29') C -define(`p192d',`%r31') C -define(`p256d',`%r3') C - C -define(`s000',`%r10') C -define(`s064',`%r11') C -define(`s128',`%r12') C -define(`s192',`%r13') C - C -define(`ma000',`%r9') C -define(`ma064',`%r4') C -define(`ma128',`%r5') C -define(`ma192',`%r6') C -define(`ma256',`%r7') C - C -define(`r000',`%r1') C -define(`r064',`%r19') C -define(`r128',`%r20') C -define(`r192',`%r21') C - - std %r6, -0xe8(%r30) - std %r7, -0xe0(%r30) - std %r8, -0xd8(%r30) - std %r9, -0xd0(%r30) - std %r10, -0xc8(%r30) - std %r11, -0xc0(%r30) - std %r12, -0xb8(%r30) - std %r13, -0xb0(%r30) - -ifdef(`HAVE_ABI_2_0w', -` extrd,u n, 61, 62, n C right shift 2 -',` extrd,u n, 61, 30, n C right shift 2, zero extend -') - -LDEF(4_or_more) - fldd 0(up), %fr4 - fldd 8(up), %fr5 - fldd 16(up), %fr6 - fldd 24(up), %fr7 - xmpyu %fr8R, %fr4L, %fr22 - xmpyu %fr8L, %fr4R, %fr23 - xmpyu %fr8R, %fr5L, %fr24 - xmpyu %fr8L, %fr5R, %fr25 - xmpyu %fr8R, %fr6L, %fr26 - xmpyu %fr8L, %fr6R, %fr27 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr7L, %fr28 - xmpyu %fr8L, %fr7R, %fr29 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - xmpyu %fr8R, %fr4R, %fr30 - xmpyu %fr8L, %fr4L, %fr31 - fstd %fr24, -0x38(%r30) C mid product to -0x38..-0x31 - xmpyu %fr8R, %fr5R, %fr22 - xmpyu %fr8L, %fr5L, %fr23 - fstd %fr25, -0x30(%r30) C mid product to -0x30..-0x29 - xmpyu %fr8R, %fr6R, %fr24 - xmpyu %fr8L, %fr6L, %fr25 - fstd %fr26, -0x58(%r30) C mid product to -0x58..-0x51 - xmpyu %fr8R, %fr7R, %fr26 - fstd %fr27, -0x50(%r30) C mid product to -0x50..-0x49 - addib,<> -1, n, L(8_or_more) - xmpyu %fr8L, %fr7L, %fr27 - fstd %fr28, -0x18(%r30) C mid product to -0x18..-0x11 - fstd %fr29, -0x10(%r30) C mid product to -0x10..-0x09 - fstd %fr30, -0x80(%r30) C low product to -0x80..-0x79 - fstd %fr31, -0x68(%r30) C high product to -0x68..-0x61 - fstd %fr22, -0x40(%r30) C low product to -0x40..-0x39 - fstd %fr23, -0x28(%r30) C high product to -0x28..-0x21 - fstd %fr24, -0x60(%r30) C low product to -0x60..-0x59 - fstd %fr25, -0x48(%r30) C high product to -0x48..-0x41 - fstd %fr26, -0x20(%r30) C low product to -0x20..-0x19 - fstd %fr27, -0x88(%r30) C high product to -0x88..-0x81 - ldd -0x78(%r30), p032a1 - ldd -0x70(%r30), p032a2 - ldd -0x38(%r30), p096b1 - ldd -0x30(%r30), p096b2 - ldd -0x58(%r30), p160c1 - ldd -0x50(%r30), p160c2 - ldd -0x18(%r30), p224d1 - ldd -0x10(%r30), p224d2 - b L(end1) - nop - -LDEF(8_or_more) - fstd %fr28, -0x18(%r30) C mid product to -0x18..-0x11 - fstd %fr29, -0x10(%r30) C mid product to -0x10..-0x09 - ldo 32(up), up - fstd %fr30, -0x80(%r30) C low product to -0x80..-0x79 - fstd %fr31, -0x68(%r30) C high product to -0x68..-0x61 - fstd %fr22, -0x40(%r30) C low product to -0x40..-0x39 - fstd %fr23, -0x28(%r30) C high product to -0x28..-0x21 - fstd %fr24, -0x60(%r30) C low product to -0x60..-0x59 - fstd %fr25, -0x48(%r30) C high product to -0x48..-0x41 - fstd %fr26, -0x20(%r30) C low product to -0x20..-0x19 - fstd %fr27, -0x88(%r30) C high product to -0x88..-0x81 - fldd 0(up), %fr4 - fldd 8(up), %fr5 - fldd 16(up), %fr6 - fldd 24(up), %fr7 - xmpyu %fr8R, %fr4L, %fr22 - ldd -0x78(%r30), p032a1 - xmpyu %fr8L, %fr4R, %fr23 - xmpyu %fr8R, %fr5L, %fr24 - ldd -0x70(%r30), p032a2 - xmpyu %fr8L, %fr5R, %fr25 - xmpyu %fr8R, %fr6L, %fr26 - ldd -0x38(%r30), p096b1 - xmpyu %fr8L, %fr6R, %fr27 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - xmpyu %fr8R, %fr7L, %fr28 - ldd -0x30(%r30), p096b2 - xmpyu %fr8L, %fr7R, %fr29 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - xmpyu %fr8R, %fr4R, %fr30 - ldd -0x58(%r30), p160c1 - xmpyu %fr8L, %fr4L, %fr31 - fstd %fr24, -0x38(%r30) C mid product to -0x38..-0x31 - xmpyu %fr8R, %fr5R, %fr22 - ldd -0x50(%r30), p160c2 - xmpyu %fr8L, %fr5L, %fr23 - fstd %fr25, -0x30(%r30) C mid product to -0x30..-0x29 - xmpyu %fr8R, %fr6R, %fr24 - ldd -0x18(%r30), p224d1 - xmpyu %fr8L, %fr6L, %fr25 - fstd %fr26, -0x58(%r30) C mid product to -0x58..-0x51 - xmpyu %fr8R, %fr7R, %fr26 - ldd -0x10(%r30), p224d2 - fstd %fr27, -0x50(%r30) C mid product to -0x50..-0x49 - addib,= -1, n, L(end2) - xmpyu %fr8L, %fr7L, %fr27 -LDEF(loop) - add p032a1, p032a2, m032 - ldd -0x80(%r30), p000a - add,dc p096b1, p096b2, m096 - fstd %fr28, -0x18(%r30) C mid product to -0x18..-0x11 - - add,dc p160c1, p160c2, m160 - ldd -0x68(%r30), p064a - add,dc p224d1, p224d2, m224 - fstd %fr29, -0x10(%r30) C mid product to -0x10..-0x09 - - add,dc %r0, %r0, m288 - ldd -0x40(%r30), p064b - ldo 32(up), up - fstd %fr30, -0x80(%r30) C low product to -0x80..-0x79 - - depd,z m032, 31, 32, ma000 - ldd -0x28(%r30), p128b - extrd,u m032, 31, 32, ma064 - fstd %fr31, -0x68(%r30) C high product to -0x68..-0x61 - - depd m096, 31, 32, ma064 - ldd -0x60(%r30), p128c - extrd,u m096, 31, 32, ma128 - fstd %fr22, -0x40(%r30) C low product to -0x40..-0x39 - - depd m160, 31, 32, ma128 - ldd -0x48(%r30), p192c - extrd,u m160, 31, 32, ma192 - fstd %fr23, -0x28(%r30) C high product to -0x28..-0x21 - - depd m224, 31, 32, ma192 - ldd -0x20(%r30), p192d - extrd,u m224, 31, 32, ma256 - fstd %fr24, -0x60(%r30) C low product to -0x60..-0x59 - - depd m288, 31, 32, ma256 - ldd -0x88(%r30), p256d - add climb, p000a, s000 - fstd %fr25, -0x48(%r30) C high product to -0x48..-0x41 - - add,dc p064a, p064b, s064 - ldd 0(rp), r000 - add,dc p128b, p128c, s128 - fstd %fr26, -0x20(%r30) C low product to -0x20..-0x19 - - add,dc p192c, p192d, s192 - ldd 8(rp), r064 - add,dc p256d, %r0, climb - fstd %fr27, -0x88(%r30) C high product to -0x88..-0x81 - - ldd 16(rp), r128 - add ma000, s000, s000 C accum mid 0 - ldd 24(rp), r192 - add,dc ma064, s064, s064 C accum mid 1 - - add,dc ma128, s128, s128 C accum mid 2 - fldd 0(up), %fr4 - add,dc ma192, s192, s192 C accum mid 3 - fldd 8(up), %fr5 - - add,dc ma256, climb, climb - fldd 16(up), %fr6 - sub r000, s000, s000 C accum rlimb 0 - fldd 24(up), %fr7 - - sub,db r064, s064, s064 C accum rlimb 1 - sub,db r128, s128, s128 C accum rlimb 2 - std s000, 0(rp) - - sub,db r192, s192, s192 C accum rlimb 3 - sub,db %r0, climb, climb - sub %r0, climb, climb - std s064, 8(rp) - - xmpyu %fr8R, %fr4L, %fr22 - ldd -0x78(%r30), p032a1 - xmpyu %fr8L, %fr4R, %fr23 - std s128, 16(rp) - - xmpyu %fr8R, %fr5L, %fr24 - ldd -0x70(%r30), p032a2 - xmpyu %fr8L, %fr5R, %fr25 - std s192, 24(rp) - - xmpyu %fr8R, %fr6L, %fr26 - ldd -0x38(%r30), p096b1 - xmpyu %fr8L, %fr6R, %fr27 - fstd %fr22, -0x78(%r30) C mid product to -0x78..-0x71 - - xmpyu %fr8R, %fr7L, %fr28 - ldd -0x30(%r30), p096b2 - xmpyu %fr8L, %fr7R, %fr29 - fstd %fr23, -0x70(%r30) C mid product to -0x70..-0x69 - - xmpyu %fr8R, %fr4R, %fr30 - ldd -0x58(%r30), p160c1 - xmpyu %fr8L, %fr4L, %fr31 - fstd %fr24, -0x38(%r30) C mid product to -0x38..-0x31 - - xmpyu %fr8R, %fr5R, %fr22 - ldd -0x50(%r30), p160c2 - xmpyu %fr8L, %fr5L, %fr23 - fstd %fr25, -0x30(%r30) C mid product to -0x30..-0x29 - - xmpyu %fr8R, %fr6R, %fr24 - ldd -0x18(%r30), p224d1 - xmpyu %fr8L, %fr6L, %fr25 - fstd %fr26, -0x58(%r30) C mid product to -0x58..-0x51 - - xmpyu %fr8R, %fr7R, %fr26 - ldd -0x10(%r30), p224d2 - fstd %fr27, -0x50(%r30) C mid product to -0x50..-0x49 - xmpyu %fr8L, %fr7L, %fr27 - - addib,<> -1, n, L(loop) - ldo 32(rp), rp - -LDEF(end2) - add p032a1, p032a2, m032 - ldd -0x80(%r30), p000a - add,dc p096b1, p096b2, m096 - fstd %fr28, -0x18(%r30) C mid product to -0x18..-0x11 - add,dc p160c1, p160c2, m160 - ldd -0x68(%r30), p064a - add,dc p224d1, p224d2, m224 - fstd %fr29, -0x10(%r30) C mid product to -0x10..-0x09 - add,dc %r0, %r0, m288 - ldd -0x40(%r30), p064b - fstd %fr30, -0x80(%r30) C low product to -0x80..-0x79 - depd,z m032, 31, 32, ma000 - ldd -0x28(%r30), p128b - extrd,u m032, 31, 32, ma064 - fstd %fr31, -0x68(%r30) C high product to -0x68..-0x61 - depd m096, 31, 32, ma064 - ldd -0x60(%r30), p128c - extrd,u m096, 31, 32, ma128 - fstd %fr22, -0x40(%r30) C low product to -0x40..-0x39 - depd m160, 31, 32, ma128 - ldd -0x48(%r30), p192c - extrd,u m160, 31, 32, ma192 - fstd %fr23, -0x28(%r30) C high product to -0x28..-0x21 - depd m224, 31, 32, ma192 - ldd -0x20(%r30), p192d - extrd,u m224, 31, 32, ma256 - fstd %fr24, -0x60(%r30) C low product to -0x60..-0x59 - depd m288, 31, 32, ma256 - ldd -0x88(%r30), p256d - add climb, p000a, s000 - fstd %fr25, -0x48(%r30) C high product to -0x48..-0x41 - add,dc p064a, p064b, s064 - ldd 0(rp), r000 - add,dc p128b, p128c, s128 - fstd %fr26, -0x20(%r30) C low product to -0x20..-0x19 - add,dc p192c, p192d, s192 - ldd 8(rp), r064 - add,dc p256d, %r0, climb - fstd %fr27, -0x88(%r30) C high product to -0x88..-0x81 - ldd 16(rp), r128 - add ma000, s000, s000 C accum mid 0 - ldd 24(rp), r192 - add,dc ma064, s064, s064 C accum mid 1 - add,dc ma128, s128, s128 C accum mid 2 - add,dc ma192, s192, s192 C accum mid 3 - add,dc ma256, climb, climb - sub r000, s000, s000 C accum rlimb 0 - sub,db r064, s064, s064 C accum rlimb 1 - sub,db r128, s128, s128 C accum rlimb 2 - std s000, 0(rp) - sub,db r192, s192, s192 C accum rlimb 3 - sub,db %r0, climb, climb - sub %r0, climb, climb - std s064, 8(rp) - ldd -0x78(%r30), p032a1 - std s128, 16(rp) - ldd -0x70(%r30), p032a2 - std s192, 24(rp) - ldd -0x38(%r30), p096b1 - ldd -0x30(%r30), p096b2 - ldd -0x58(%r30), p160c1 - ldd -0x50(%r30), p160c2 - ldd -0x18(%r30), p224d1 - ldd -0x10(%r30), p224d2 - ldo 32(rp), rp - -LDEF(end1) - add p032a1, p032a2, m032 - ldd -0x80(%r30), p000a - add,dc p096b1, p096b2, m096 - add,dc p160c1, p160c2, m160 - ldd -0x68(%r30), p064a - add,dc p224d1, p224d2, m224 - add,dc %r0, %r0, m288 - ldd -0x40(%r30), p064b - depd,z m032, 31, 32, ma000 - ldd -0x28(%r30), p128b - extrd,u m032, 31, 32, ma064 - depd m096, 31, 32, ma064 - ldd -0x60(%r30), p128c - extrd,u m096, 31, 32, ma128 - depd m160, 31, 32, ma128 - ldd -0x48(%r30), p192c - extrd,u m160, 31, 32, ma192 - depd m224, 31, 32, ma192 - ldd -0x20(%r30), p192d - extrd,u m224, 31, 32, ma256 - depd m288, 31, 32, ma256 - ldd -0x88(%r30), p256d - add climb, p000a, s000 - add,dc p064a, p064b, s064 - ldd 0(rp), r000 - add,dc p128b, p128c, s128 - add,dc p192c, p192d, s192 - ldd 8(rp), r064 - add,dc p256d, %r0, climb - ldd 16(rp), r128 - add ma000, s000, s000 C accum mid 0 - ldd 24(rp), r192 - add,dc ma064, s064, s064 C accum mid 1 - add,dc ma128, s128, s128 C accum mid 2 - add,dc ma192, s192, s192 C accum mid 3 - add,dc ma256, climb, climb - sub r000, s000, s000 C accum rlimb 0 - sub,db r064, s064, s064 C accum rlimb 1 - sub,db r128, s128, s128 C accum rlimb 2 - std s000, 0(rp) - sub,db r192, s192, s192 C accum rlimb 3 - sub,db %r0, climb, climb - sub %r0, climb, climb - std s064, 8(rp) - std s128, 16(rp) - std s192, 24(rp) - - ldd -0xb0(%r30), %r13 - ldd -0xb8(%r30), %r12 - ldd -0xc0(%r30), %r11 - ldd -0xc8(%r30), %r10 - ldd -0xd0(%r30), %r9 - ldd -0xd8(%r30), %r8 - ldd -0xe0(%r30), %r7 - ldd -0xe8(%r30), %r6 -LDEF(done) -ifdef(`HAVE_ABI_2_0w', -` copy climb, %r28 -',` extrd,u climb, 63, 32, %r29 - extrd,u climb, 31, 32, %r28 -') - ldd -0xf0(%r30), %r5 - ldd -0xf8(%r30), %r4 - bve (%r2) - ldd,mb -0x100(%r30), %r3 -EPILOGUE(mpn_submul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/udiv.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/udiv.asm deleted file mode 100644 index 1380a85932ee995e0b5c1cf9beb559a96af6f3f6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/udiv.asm +++ /dev/null @@ -1,125 +0,0 @@ -dnl HP-PA 2.0 64-bit mpn_udiv_qrnnd_r. - -dnl Copyright 2001-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C This runs at about 280 cycles on both PA8000 and PA8500, corresponding to a -C bit more than 4 cycles/bit. - -C INPUT PARAMETERS -define(`n1',`%r26') -define(`n0',`%r25') -define(`d',`%r24') -define(`remptr',`%r23') - -define(`q',`%r28') -define(`dn',`%r29') - -define(`old_divstep', - `add,dc n0,n0,n0 - add,dc n1,n1,n1 - sub,*<< n1,d,%r22 - copy %r22,n1') - -define(`divstep', - `add n0,n0,n0 - add,dc n1,n1,n1 - sub n1,d,%r1 - add,dc q,q,q - cmpclr,*<< n1,d,%r0 - copy %r1,n1 -') - -ifdef(`HAVE_ABI_2_0w', -` .level 2.0w -',` .level 2.0 -') -PROLOGUE(mpn_udiv_qrnnd_r) -ifdef(`HAVE_ABI_2_0n', -` depd %r25,31,32,%r26 - depd %r23,31,32,%r24 - copy %r24,%r25 - ldd -56(%r30),%r24 - ldw -60(%r30),%r23 -') - ldi 0,q - cmpib,*>= 0,d,L(large_divisor) - ldi 8,%r31 C setup loop counter - - sub %r0,d,dn -LDEF(Loop) - divstep divstep divstep divstep divstep divstep divstep divstep - addib,<> -1,%r31,L(Loop) - nop - -ifdef(`HAVE_ABI_2_0n', -` copy %r28,%r29 - extrd,u %r28,31,32,%r28 -') - bve (%r2) - std n1,0(remptr) C store remainder - -LDEF(large_divisor) - extrd,u n0,63,1,%r19 C save lsb of dividend - shrpd n1,n0,1,n0 C n0 = lo(n1n0 >> 1) - shrpd %r0,n1,1,n1 C n1 = hi(n1n0 >> 1) - extrd,u d,63,1,%r20 C save lsb of divisor - shrpd %r0,d,1,d C d = floor(orig_d / 2) - add,l %r20,d,d C d = ceil(orig_d / 2) - - sub %r0,d,dn -LDEF(Loop2) - divstep divstep divstep divstep divstep divstep divstep divstep - addib,<> -1,%r31,L(Loop2) - nop - - cmpib,*= 0,%r20,L(even_divisor) - shladd n1,1,%r19,n1 C shift in omitted dividend lsb - - add d,d,d C restore orig... - sub d,%r20,d C ...d value - sub %r0,d,dn C r21 = -d - - add,*nuv n1,q,n1 C fix remainder for omitted divisor lsb - add,l n1,dn,n1 C adjust remainder if rem. fix carried - add,dc %r0,q,q C adjust quotient accordingly - - sub,*<< n1,d,%r0 C remainder >= divisor? - add,l n1,dn,n1 C adjust remainder - add,dc %r0,q,q C adjust quotient - -LDEF(even_divisor) -ifdef(`HAVE_ABI_2_0n', -` copy %r28,%r29 - extrd,u %r28,31,32,%r28 -') - bve (%r2) - std n1,0(remptr) C store remainder -EPILOGUE(mpn_udiv_qrnnd_r) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/umul.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/umul.asm deleted file mode 100644 index c3341ecfe60d72894fc0baf6fbe40d0ec47b9101..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/pa64/umul.asm +++ /dev/null @@ -1,98 +0,0 @@ -dnl Copyright 1999, 2000, 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl Optimizations: -dnl * Avoid skip instructions -dnl * Put carry-generating and carry-consuming insns consecutively -dnl * Don't allocate any stack, "home" positions for parameters could be used. - -include(`../config.m4') - -define(`p0',`%r28') -define(`p1',`%r29') -define(`t32',`%r19') -define(`t0',`%r20') -define(`t1',`%r21') -define(`x',`%r22') -define(`m0',`%r23') -define(`m1',`%r24') - -ifdef(`HAVE_ABI_2_0w', -` .level 2.0w -',` .level 2.0 -') -PROLOGUE(mpn_umul_ppmm_r) - ldo 128(%r30),%r30 -ifdef(`HAVE_ABI_2_0w', -` std %r26,-64(%r30) - std %r25,-56(%r30) - copy %r24,%r31 -',` - depd %r25,31,32,%r26 - std %r26,-64(%r30) - depd %r23,31,32,%r24 - std %r24,-56(%r30) - ldw -180(%r30),%r31 -') - - fldd -64(%r30),%fr4 - fldd -56(%r30),%fr5 - - xmpyu %fr5R,%fr4R,%fr6 - fstd %fr6,-128(%r30) - xmpyu %fr5R,%fr4L,%fr7 - fstd %fr7,-120(%r30) - xmpyu %fr5L,%fr4R,%fr8 - fstd %fr8,-112(%r30) - xmpyu %fr5L,%fr4L,%fr9 - fstd %fr9,-104(%r30) - - depdi,z 1,31,1,t32 C t32 = 2^32 - - ldd -128(%r30),p0 C lo = low 64 bit of product - ldd -120(%r30),m0 C m0 = mid0 64 bit of product - ldd -112(%r30),m1 C m1 = mid1 64 bit of product - ldd -104(%r30),p1 C hi = high 64 bit of product - - add,l,*nuv m0,m1,x C x = m1+m0 - add,l t32,p1,p1 C propagate carry to mid of p1 - depd,z x,31,32,t0 C lo32(m1+m0) - add t0,p0,p0 - extrd,u x,31,32,t1 C hi32(m1+m0) - add,dc t1,p1,p1 - - std p0,0(%r31) C store low half of product -ifdef(`HAVE_ABI_2_0w', -` copy p1,%r28 C return val in %r28 -',` extrd,u p1,31,32,%r28 C return val in %r28,%r29 -') - bve (%r2) - ldo -128(%r30),%r30 -EPILOGUE(mpn_umul_ppmm_r) - diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/power/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/power/add_n.asm deleted file mode 100644 index 6d6ca73da9809e451548095234a1611a4d7dceaf..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/power/add_n.asm +++ /dev/null @@ -1,83 +0,0 @@ -dnl IBM POWER mpn_add_n -- Add two limb vectors of equal, non-zero length. - -dnl Copyright 1992, 1994-1996, 1999-2001, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl INPUT PARAMETERS -dnl res_ptr r3 -dnl s1_ptr r4 -dnl s2_ptr r5 -dnl size r6 - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_add_n) - andil. 10,6,1 C odd or even number of limbs? - l 8,0(4) C load least significant s1 limb - l 0,0(5) C load least significant s2 limb - cal 3,-4(3) C offset res_ptr, it's updated before it's used - sri 10,6,1 C count for unrolled loop - a 7,0,8 C add least significant limbs, set cy - mtctr 10 C copy count into CTR - beq 0,Leven C branch if even # of limbs (# of limbs >= 2) - -C We have an odd # of limbs. Add the first limbs separately. - cmpi 1,10,0 C is count for unrolled loop zero? - bc 4,6,L1 C bne cr1,L1 (misassembled by gas) - st 7,4(3) - aze 3,10 C use the fact that r10 is zero... - br C return - -C We added least significant limbs. Now reload the next limbs to enter loop. -L1: lu 8,4(4) C load s1 limb and update s1_ptr - lu 0,4(5) C load s2 limb and update s2_ptr - stu 7,4(3) - ae 7,0,8 C add limbs, set cy -Leven: lu 9,4(4) C load s1 limb and update s1_ptr - lu 10,4(5) C load s2 limb and update s2_ptr - bdz Lend C If done, skip loop - -Loop: lu 8,4(4) C load s1 limb and update s1_ptr - lu 0,4(5) C load s2 limb and update s2_ptr - ae 11,10,9 C add previous limbs with cy, set cy - stu 7,4(3) C - lu 9,4(4) C load s1 limb and update s1_ptr - lu 10,4(5) C load s2 limb and update s2_ptr - ae 7,0,8 C add previous limbs with cy, set cy - stu 11,4(3) C - bdn Loop C decrement CTR and loop back - -Lend: ae 11,10,9 C add limbs with cy, set cy - st 7,4(3) C - st 11,8(3) C - lil 3,0 C load cy into ... - aze 3,3 C ... return value register - br -EPILOGUE(mpn_add_n) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/power/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/power/addmul_1.asm deleted file mode 100644 index 76d8df3c76c174b8471c790753dd818348d83bfa..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/power/addmul_1.asm +++ /dev/null @@ -1,126 +0,0 @@ -dnl IBM POWER mpn_addmul_1 -- Multiply a limb vector with a limb and add the -dnl result to a second limb vector. - -dnl Copyright 1992, 1994, 1999-2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl INPUT PARAMETERS -dnl res_ptr r3 -dnl s1_ptr r4 -dnl size r5 -dnl s2_limb r6 - -dnl The POWER architecture has no unsigned 32x32->64 bit multiplication -dnl instruction. To obtain that operation, we have to use the 32x32->64 -dnl signed multiplication instruction, and add the appropriate compensation to -dnl the high limb of the result. We add the multiplicand if the multiplier -dnl has its most significant bit set, and we add the multiplier if the -dnl multiplicand has its most significant bit set. We need to preserve the -dnl carry flag between each iteration, so we have to compute the compensation -dnl carefully (the natural, srai+and doesn't work). Since all POWER can -dnl branch in zero cycles, we use conditional branches for the compensation. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_addmul_1) - cal 3,-4(3) - l 0,0(4) - cmpi 0,6,0 - mtctr 5 - mul 9,0,6 - srai 7,0,31 - and 7,7,6 - mfmq 8 - cax 9,9,7 - l 7,4(3) - a 8,8,7 C add res_limb - blt Lneg -Lpos: bdz Lend - -Lploop: lu 0,4(4) - stu 8,4(3) - cmpi 0,0,0 - mul 10,0,6 - mfmq 0 - ae 8,0,9 C low limb + old_cy_limb + old cy - l 7,4(3) - aze 10,10 C propagate cy to new cy_limb - a 8,8,7 C add res_limb - bge Lp0 - cax 10,10,6 C adjust high limb for negative limb from s1 -Lp0: bdz Lend0 - lu 0,4(4) - stu 8,4(3) - cmpi 0,0,0 - mul 9,0,6 - mfmq 0 - ae 8,0,10 - l 7,4(3) - aze 9,9 - a 8,8,7 - bge Lp1 - cax 9,9,6 C adjust high limb for negative limb from s1 -Lp1: bdn Lploop - - b Lend - -Lneg: cax 9,9,0 - bdz Lend -Lnloop: lu 0,4(4) - stu 8,4(3) - cmpi 0,0,0 - mul 10,0,6 - mfmq 7 - ae 8,7,9 - l 7,4(3) - ae 10,10,0 C propagate cy to new cy_limb - a 8,8,7 C add res_limb - bge Ln0 - cax 10,10,6 C adjust high limb for negative limb from s1 -Ln0: bdz Lend0 - lu 0,4(4) - stu 8,4(3) - cmpi 0,0,0 - mul 9,0,6 - mfmq 7 - ae 8,7,10 - l 7,4(3) - ae 9,9,0 C propagate cy to new cy_limb - a 8,8,7 C add res_limb - bge Ln1 - cax 9,9,6 C adjust high limb for negative limb from s1 -Ln1: bdn Lnloop - b Lend - -Lend0: cal 9,0(10) -Lend: st 8,4(3) - aze 3,9 - br -EPILOGUE(mpn_addmul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/power/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/power/gmp-mparam.h deleted file mode 100644 index 7cb36f963e7a39b556dbfbc3f3cef3d6fe17a803..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/power/gmp-mparam.h +++ /dev/null @@ -1,69 +0,0 @@ -/* POWER gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 2002-2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* Generated by tuneup.c, 2003-02-10, gcc 3.2, POWER2 66.7MHz */ - -#define MUL_TOOM22_THRESHOLD 12 -#define MUL_TOOM33_THRESHOLD 75 - -#define SQR_BASECASE_THRESHOLD 7 -#define SQR_TOOM2_THRESHOLD 28 -#define SQR_TOOM3_THRESHOLD 86 - -#define DIV_SB_PREINV_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_DC_THRESHOLD 36 -#define POWM_THRESHOLD 69 - -#define HGCD_THRESHOLD 97 -#define GCD_ACCEL_THRESHOLD 3 -#define GCD_DC_THRESHOLD 590 -#define JACOBI_BASE_METHOD 2 - -#define DIVREM_1_NORM_THRESHOLD 12 -#define DIVREM_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define MOD_1_NORM_THRESHOLD 10 -#define MOD_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define USE_PREINV_DIVREM_1 0 -#define USE_PREINV_MOD_1 1 -#define DIVREM_2_THRESHOLD 11 -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define MODEXACT_1_ODD_THRESHOLD 0 /* always */ - -#define GET_STR_DC_THRESHOLD 10 -#define GET_STR_PRECOMPUTE_THRESHOLD 20 -#define SET_STR_THRESHOLD 2899 - -#define MUL_FFT_TABLE { 336, 800, 1408, 3584, 10240, 24576, 0 } -#define MUL_FFT_MODF_THRESHOLD 296 -#define MUL_FFT_THRESHOLD 2304 - -#define SQR_FFT_TABLE { 336, 800, 1408, 3584, 10240, 24576, 0 } -#define SQR_FFT_MODF_THRESHOLD 296 -#define SQR_FFT_THRESHOLD 2304 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/power/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/power/lshift.asm deleted file mode 100644 index efa210556d00f4454a6c5afea9c933fee6be2737..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/power/lshift.asm +++ /dev/null @@ -1,61 +0,0 @@ -dnl IBM POWER mpn_lshift -- Shift a number left. - -dnl Copyright 1992, 1994, 1999-2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl INPUT PARAMETERS -dnl res_ptr r3 -dnl s_ptr r4 -dnl size r5 -dnl cnt r6 - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_lshift) - sli 0,5,2 - cax 9,3,0 - cax 4,4,0 - sfi 8,6,32 - mtctr 5 C put limb count in CTR loop register - lu 0,-4(4) C read most significant limb - sre 3,0,8 C compute carry out limb, and init MQ register - bdz Lend2 C if just one limb, skip loop - lu 0,-4(4) C read 2:nd most significant limb - sreq 7,0,8 C compute most significant limb of result - bdz Lend C if just two limb, skip loop -Loop: lu 0,-4(4) C load next lower limb - stu 7,-4(9) C store previous result during read latency - sreq 7,0,8 C compute result limb - bdn Loop C loop back until CTR is zero -Lend: stu 7,-4(9) C store 2:nd least significant limb -Lend2: sle 7,0,6 C compute least significant limb - st 7,-4(9) C store it - br -EPILOGUE(mpn_lshift) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/power/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/power/mul_1.asm deleted file mode 100644 index 38b7b66be0b69470a6aee83d77c62092fcd3a890..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/power/mul_1.asm +++ /dev/null @@ -1,113 +0,0 @@ -dnl IBM POWER mpn_mul_1 -- Multiply a limb vector with a limb and store the -dnl result in a second limb vector. - -dnl Copyright 1992, 1994, 1999-2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl INPUT PARAMETERS -dnl res_ptr r3 -dnl s1_ptr r4 -dnl size r5 -dnl s2_limb r6 - -dnl The POWER architecture has no unsigned 32x32->64 bit multiplication -dnl instruction. To obtain that operation, we have to use the 32x32->64 -dnl signed multiplication instruction, and add the appropriate compensation to -dnl the high limb of the result. We add the multiplicand if the multiplier -dnl has its most significant bit set, and we add the multiplier if the -dnl multiplicand has its most significant bit set. We need to preserve the -dnl carry flag between each iteration, so we have to compute the compensation -dnl carefully (the natural, srai+and doesn't work). Since all POWER can -dnl branch in zero cycles, we use conditional branches for the compensation. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_mul_1) - cal 3,-4(3) - l 0,0(4) - cmpi 0,6,0 - mtctr 5 - mul 9,0,6 - srai 7,0,31 - and 7,7,6 - mfmq 8 - ai 0,0,0 C reset carry - cax 9,9,7 - blt Lneg -Lpos: bdz Lend -Lploop: lu 0,4(4) - stu 8,4(3) - cmpi 0,0,0 - mul 10,0,6 - mfmq 0 - ae 8,0,9 - bge Lp0 - cax 10,10,6 C adjust high limb for negative limb from s1 -Lp0: bdz Lend0 - lu 0,4(4) - stu 8,4(3) - cmpi 0,0,0 - mul 9,0,6 - mfmq 0 - ae 8,0,10 - bge Lp1 - cax 9,9,6 C adjust high limb for negative limb from s1 -Lp1: bdn Lploop - b Lend - -Lneg: cax 9,9,0 - bdz Lend -Lnloop: lu 0,4(4) - stu 8,4(3) - cmpi 0,0,0 - mul 10,0,6 - cax 10,10,0 C adjust high limb for negative s2_limb - mfmq 0 - ae 8,0,9 - bge Ln0 - cax 10,10,6 C adjust high limb for negative limb from s1 -Ln0: bdz Lend0 - lu 0,4(4) - stu 8,4(3) - cmpi 0,0,0 - mul 9,0,6 - cax 9,9,0 C adjust high limb for negative s2_limb - mfmq 0 - ae 8,0,10 - bge Ln1 - cax 9,9,6 C adjust high limb for negative limb from s1 -Ln1: bdn Lnloop - b Lend - -Lend0: cal 9,0(10) -Lend: st 8,4(3) - aze 3,9 - br -EPILOGUE(mpn_mul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/power/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/power/rshift.asm deleted file mode 100644 index 1d1815ccb51447c02a9f1f1eabd67a4d5efd4e87..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/power/rshift.asm +++ /dev/null @@ -1,59 +0,0 @@ -dnl IBM POWER mpn_rshift -- Shift a number right. - -dnl Copyright 1992, 1994, 1999-2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl INPUT PARAMETERS -dnl res_ptr r3 -dnl s_ptr r4 -dnl size r5 -dnl cnt r6 - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_rshift) - sfi 8,6,32 - mtctr 5 C put limb count in CTR loop register - l 0,0(4) C read least significant limb - ai 9,3,-4 C adjust res_ptr since it's offset in the stu:s - sle 3,0,8 C compute carry limb, and init MQ register - bdz Lend2 C if just one limb, skip loop - lu 0,4(4) C read 2:nd least significant limb - sleq 7,0,8 C compute least significant limb of result - bdz Lend C if just two limb, skip loop -Loop: lu 0,4(4) C load next higher limb - stu 7,4(9) C store previous result during read latency - sleq 7,0,8 C compute result limb - bdn Loop C loop back until CTR is zero -Lend: stu 7,4(9) C store 2:nd most significant limb -Lend2: sre 7,0,6 C compute most significant limb - st 7,4(9) C store it - br -EPILOGUE(mpn_rshift) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/power/sdiv.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/power/sdiv.asm deleted file mode 100644 index 4a9ed143b8a4e56ab5efd2cc7cd7315f5bf9a262..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/power/sdiv.asm +++ /dev/null @@ -1,39 +0,0 @@ -dnl Copyright 1999, 2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_sdiv_qrnnd) - mtmq 5 - div 0,4,6 - mfmq 9 - st 9,0(3) - mr 3,0 - br -EPILOGUE(mpn_sdiv_qrnnd) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/power/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/power/sub_n.asm deleted file mode 100644 index 390c802d8bca5bc32f74e169cc1a3e2dabbc945a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/power/sub_n.asm +++ /dev/null @@ -1,85 +0,0 @@ -dnl IBM POWER mpn_sub_n -- Subtract two limb vectors of equal, non-zero -dnl length. - -dnl Copyright 1992, 1994-1996, 1999-2001, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl INPUT PARAMETERS -dnl res_ptr r3 -dnl s1_ptr r4 -dnl s2_ptr r5 -dnl size r6 - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_sub_n) - andil. 10,6,1 C odd or even number of limbs? - l 8,0(4) C load least significant s1 limb - l 0,0(5) C load least significant s2 limb - cal 3,-4(3) C offset res_ptr, it's updated before it's used - sri 10,6,1 C count for unrolled loop - sf 7,0,8 C subtract least significant limbs, set cy - mtctr 10 C copy count into CTR - beq 0,Leven C branch if even # of limbs (# of limbs >= 2) - -C We have an odd # of limbs. Add the first limbs separately. - cmpi 1,10,0 C is count for unrolled loop zero? - bc 4,6,L1 C bne cr1,L1 (misassembled by gas) - st 7,4(3) - sfe 3,0,0 C load !cy into ... - sfi 3,3,0 C ... return value register - br C return - -C We added least significant limbs. Now reload the next limbs to enter loop. -L1: lu 8,4(4) C load s1 limb and update s1_ptr - lu 0,4(5) C load s2 limb and update s2_ptr - stu 7,4(3) - sfe 7,0,8 C subtract limbs, set cy -Leven: lu 9,4(4) C load s1 limb and update s1_ptr - lu 10,4(5) C load s2 limb and update s2_ptr - bdz Lend C If done, skip loop - -Loop: lu 8,4(4) C load s1 limb and update s1_ptr - lu 0,4(5) C load s2 limb and update s2_ptr - sfe 11,10,9 C subtract previous limbs with cy, set cy - stu 7,4(3) C - lu 9,4(4) C load s1 limb and update s1_ptr - lu 10,4(5) C load s2 limb and update s2_ptr - sfe 7,0,8 C subtract previous limbs with cy, set cy - stu 11,4(3) C - bdn Loop C decrement CTR and loop back - -Lend: sfe 11,10,9 C subtract limbs with cy, set cy - st 7,4(3) C - st 11,8(3) C - sfe 3,0,0 C load !cy into ... - sfi 3,3,0 C ... return value register - br -EPILOGUE(mpn_sub_n) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/power/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/power/submul_1.asm deleted file mode 100644 index 1788e0d4f4f9b7358a59e0b47ef85e3aa9c11074..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/power/submul_1.asm +++ /dev/null @@ -1,131 +0,0 @@ -dnl IBM POWER mpn_submul_1 -- Multiply a limb vector with a limb and subtract -dnl the result from a second limb vector. - -dnl Copyright 1992, 1994, 1999-2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl INPUT PARAMETERS -dnl res_ptr r3 -dnl s1_ptr r4 -dnl size r5 -dnl s2_limb r6 - -dnl The POWER architecture has no unsigned 32x32->64 bit multiplication -dnl instruction. To obtain that operation, we have to use the 32x32->64 -dnl signed multiplication instruction, and add the appropriate compensation to -dnl the high limb of the result. We add the multiplicand if the multiplier -dnl has its most significant bit set, and we add the multiplier if the -dnl multiplicand has its most significant bit set. We need to preserve the -dnl carry flag between each iteration, so we have to compute the compensation -dnl carefully (the natural, srai+and doesn't work). Since all POWER can -dnl branch in zero cycles, we use conditional branches for the compensation. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_submul_1) - cal 3,-4(3) - l 0,0(4) - cmpi 0,6,0 - mtctr 5 - mul 9,0,6 - srai 7,0,31 - and 7,7,6 - mfmq 11 - cax 9,9,7 - l 7,4(3) - sf 8,11,7 C add res_limb - a 11,8,11 C invert cy (r11 is junk) - blt Lneg -Lpos: bdz Lend - -Lploop: lu 0,4(4) - stu 8,4(3) - cmpi 0,0,0 - mul 10,0,6 - mfmq 0 - ae 11,0,9 C low limb + old_cy_limb + old cy - l 7,4(3) - aze 10,10 C propagate cy to new cy_limb - sf 8,11,7 C add res_limb - a 11,8,11 C invert cy (r11 is junk) - bge Lp0 - cax 10,10,6 C adjust high limb for negative limb from s1 -Lp0: bdz Lend0 - lu 0,4(4) - stu 8,4(3) - cmpi 0,0,0 - mul 9,0,6 - mfmq 0 - ae 11,0,10 - l 7,4(3) - aze 9,9 - sf 8,11,7 - a 11,8,11 C invert cy (r11 is junk) - bge Lp1 - cax 9,9,6 C adjust high limb for negative limb from s1 -Lp1: bdn Lploop - - b Lend - -Lneg: cax 9,9,0 - bdz Lend -Lnloop: lu 0,4(4) - stu 8,4(3) - cmpi 0,0,0 - mul 10,0,6 - mfmq 7 - ae 11,7,9 - l 7,4(3) - ae 10,10,0 C propagate cy to new cy_limb - sf 8,11,7 C add res_limb - a 11,8,11 C invert cy (r11 is junk) - bge Ln0 - cax 10,10,6 C adjust high limb for negative limb from s1 -Ln0: bdz Lend0 - lu 0,4(4) - stu 8,4(3) - cmpi 0,0,0 - mul 9,0,6 - mfmq 7 - ae 11,7,10 - l 7,4(3) - ae 9,9,0 C propagate cy to new cy_limb - sf 8,11,7 C add res_limb - a 11,8,11 C invert cy (r11 is junk) - bge Ln1 - cax 9,9,6 C adjust high limb for negative limb from s1 -Ln1: bdn Lnloop - b Lend - -Lend0: cal 9,0(10) -Lend: st 8,4(3) - aze 3,9 - br -EPILOGUE(mpn_submul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/power/umul.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/power/umul.asm deleted file mode 100644 index 5a0599e21d94f2d42319c13bd8c5a17fac3bdaa5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/power/umul.asm +++ /dev/null @@ -1,43 +0,0 @@ -dnl Copyright 1999, 2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_umul_ppmm) - mul 9,4,5 - srai 0,4,31 - and 0,0,5 - srai 5,5,31 - and 5,5,4 - cax 0,0,5 - mfmq 11 - st 11,0(3) - cax 3,9,0 - br -EPILOGUE(mpn_umul_ppmm) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/750/com.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/750/com.asm deleted file mode 100644 index 1b8b574b9cc3e3b16c8c5e1532bfef75450066aa..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/750/com.asm +++ /dev/null @@ -1,79 +0,0 @@ -dnl PowerPC 750 mpn_com -- mpn bitwise one's complement - -dnl Copyright 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C 603e: ? -C 604e: 3.0 -C 75x (G3): 2.0 -C 7400,7410 (G4): 2.0 -C 744x,745x (G4+): 3.0 - -C void mpn_com (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C This loop form is necessary for the claimed speed. - -ASM_START() -PROLOGUE(mpn_com) - - C r3 dst - C r4 src - C r5 size - - mtctr r5 C size - lwz r5, 0(r4) C src low limb - - sub r4, r4, r3 C src-dst - subi r3, r3, 4 C dst-4 - - addi r4, r4, 8 C src-dst+8 - bdz L(one) - -L(top): - C r3 &dst[i-1] - C r4 src-dst - C r5 src[i] - C r6 scratch - - not r6, r5 C ~src[i] - lwzx r5, r4,r3 C src[i+1] - - stwu r6, 4(r3) C dst[i] - bdnz L(top) - -L(one): - not r6, r5 - - stw r6, 4(r3) C dst[size-1] - blr - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/750/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/750/gmp-mparam.h deleted file mode 100644 index 3667e8596d2d9b45c97aa0fd73fb1c381d2a17b4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/750/gmp-mparam.h +++ /dev/null @@ -1,192 +0,0 @@ -/* PowerPC-32 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 2002, 2004, 2009, 2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - - -/* This file is used for 75x (G3) and for 7400/7410 (G4), both which have - much slow multiply instructions. */ - -/* 450 MHz PPC 7400 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_NORM_THRESHOLD 3 -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 11 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 11 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 18 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 38 -#define USE_PREINV_DIVREM_1 1 -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ - -#define MUL_TOOM22_THRESHOLD 10 -#define MUL_TOOM33_THRESHOLD 38 -#define MUL_TOOM44_THRESHOLD 99 -#define MUL_TOOM6H_THRESHOLD 141 -#define MUL_TOOM8H_THRESHOLD 212 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 65 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 69 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 65 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 66 - -#define SQR_BASECASE_THRESHOLD 4 -#define SQR_TOOM2_THRESHOLD 18 -#define SQR_TOOM3_THRESHOLD 57 -#define SQR_TOOM4_THRESHOLD 142 -#define SQR_TOOM6_THRESHOLD 173 -#define SQR_TOOM8_THRESHOLD 309 - -#define MULMOD_BNM1_THRESHOLD 9 -#define SQRMOD_BNM1_THRESHOLD 11 - -#define MUL_FFT_MODF_THRESHOLD 220 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 220, 5}, { 13, 6}, { 7, 5}, { 15, 6}, \ - { 8, 5}, { 17, 6}, { 9, 5}, { 19, 6}, \ - { 13, 7}, { 7, 6}, { 17, 7}, { 9, 6}, \ - { 19, 7}, { 11, 6}, { 23, 7}, { 13, 8}, \ - { 7, 7}, { 19, 8}, { 11, 7}, { 23, 9}, \ - { 7, 8}, { 15, 7}, { 33, 8}, { 19, 7}, \ - { 39, 8}, { 23, 9}, { 15, 8}, { 39, 9}, \ - { 23, 8}, { 47,10}, { 15, 9}, { 31, 8}, \ - { 67, 9}, { 55,10}, { 31, 9}, { 63, 8}, \ - { 127, 7}, { 255, 9}, { 71, 8}, { 143, 7}, \ - { 287, 9}, { 79,10}, { 47, 9}, { 95,11}, \ - { 31,10}, { 63, 9}, { 127, 8}, { 255, 9}, \ - { 143, 8}, { 287,10}, { 79, 9}, { 159, 8}, \ - { 319, 9}, { 175, 8}, { 351, 7}, { 703,10}, \ - { 95, 9}, { 191, 8}, { 383, 9}, { 207,10}, \ - { 111,11}, { 63,10}, { 127, 9}, { 255,10}, \ - { 143, 9}, { 287, 8}, { 575,10}, { 159, 9}, \ - { 319,10}, { 175, 9}, { 351, 8}, { 703,11}, \ - { 95,10}, { 191, 9}, { 383,10}, { 207, 9}, \ - { 415, 8}, { 831,12}, { 63,11}, { 127,10}, \ - { 255, 9}, { 511,10}, { 271, 9}, { 543,10}, \ - { 287, 9}, { 575,11}, { 159,10}, { 351, 9}, \ - { 703, 8}, { 1407,11}, { 191,10}, { 415, 9}, \ - { 831,11}, { 223,10}, { 447, 9}, { 895,12}, \ - { 127,11}, { 255,10}, { 543,11}, { 287,10}, \ - { 575,11}, { 351,10}, { 703, 9}, { 1407,12}, \ - { 191,11}, { 415,10}, { 831,11}, { 447,10}, \ - { 895,13}, { 127,12}, { 255,11}, { 543,10}, \ - { 1087,11}, { 575,12}, { 319,11}, { 703,10}, \ - { 1407,12}, { 383,11}, { 831,12}, { 447,11}, \ - { 895,10}, { 1791,11}, { 959,13}, { 255,12}, \ - { 511,11}, { 1087,12}, { 575,11}, { 1215,12}, \ - { 703,11}, { 1407,13}, { 383,12}, { 895,11}, \ - { 1791,12}, { 959,14}, { 255,13}, { 511,12}, \ - { 1215,13}, { 639,12}, { 1407,13}, { 895,12}, \ - { 1919,14}, { 511,13}, { 1023,12}, { 2047,13}, \ - { 1151,12}, { 2303,13}, { 1407,14}, { 767,13}, \ - { 1919,10}, { 15359,12}, { 4096,13}, { 8192,14}, \ - { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 154 -#define MUL_FFT_THRESHOLD 2688 - -#define SQR_FFT_MODF_THRESHOLD 184 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 184, 5}, { 6, 4}, { 13, 5}, { 13, 6}, \ - { 7, 5}, { 15, 6}, { 13, 7}, { 7, 6}, \ - { 16, 7}, { 9, 6}, { 19, 7}, { 11, 6}, \ - { 23, 7}, { 13, 8}, { 7, 7}, { 19, 8}, \ - { 11, 7}, { 25, 9}, { 7, 8}, { 15, 7}, \ - { 31, 8}, { 19, 7}, { 39, 8}, { 27, 9}, \ - { 15, 8}, { 39, 9}, { 23,10}, { 15, 9}, \ - { 31, 8}, { 63, 9}, { 39, 8}, { 79, 9}, \ - { 47, 8}, { 95,10}, { 31, 9}, { 63, 8}, \ - { 127, 7}, { 255, 9}, { 71, 8}, { 143, 7}, \ - { 287, 9}, { 79, 8}, { 159,10}, { 47, 9}, \ - { 95,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255, 9}, { 143, 8}, { 287, 7}, { 575,10}, \ - { 79, 9}, { 159, 8}, { 319, 9}, { 175, 8}, \ - { 351,10}, { 95, 9}, { 191, 8}, { 383, 9}, \ - { 207,10}, { 111,11}, { 63,10}, { 127, 9}, \ - { 255,10}, { 143, 9}, { 287, 8}, { 575,10}, \ - { 159, 9}, { 319,10}, { 175, 9}, { 351,11}, \ - { 95,10}, { 191, 9}, { 383,10}, { 207, 9}, \ - { 415, 8}, { 831,10}, { 223,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,10}, { 287, 9}, \ - { 575,11}, { 159,10}, { 351, 9}, { 703,11}, \ - { 191,10}, { 415, 9}, { 831,11}, { 223,10}, \ - { 447, 9}, { 895,12}, { 127,11}, { 255,10}, \ - { 511,11}, { 287,10}, { 575,11}, { 319,10}, \ - { 639,11}, { 351,10}, { 703, 9}, { 1407,12}, \ - { 191,11}, { 383,10}, { 767,11}, { 415,10}, \ - { 831,11}, { 447,10}, { 895,13}, { 127,12}, \ - { 255,11}, { 511,10}, { 1023,11}, { 575,12}, \ - { 319,11}, { 703,10}, { 1407,12}, { 383,11}, \ - { 831,12}, { 447,11}, { 895,10}, { 1791,11}, \ - { 959,13}, { 255,12}, { 511,11}, { 1023,12}, \ - { 575,11}, { 1215,12}, { 703,11}, { 1407,13}, \ - { 383,12}, { 895,11}, { 1791,12}, { 959,14}, \ - { 255,13}, { 511,12}, { 1215,13}, { 639,12}, \ - { 1471,13}, { 767,12}, { 1535,13}, { 895,12}, \ - { 1919,14}, { 511,13}, { 1151,12}, { 2431,13}, \ - { 1407,14}, { 767,13}, { 1919,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 152 -#define SQR_FFT_THRESHOLD 1728 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 33 -#define MULLO_MUL_N_THRESHOLD 5240 - -#define DC_DIV_QR_THRESHOLD 31 -#define DC_DIVAPPR_Q_THRESHOLD 108 -#define DC_BDIV_QR_THRESHOLD 35 -#define DC_BDIV_Q_THRESHOLD 88 - -#define INV_MULMOD_BNM1_THRESHOLD 42 -#define INV_NEWTON_THRESHOLD 149 -#define INV_APPR_THRESHOLD 125 - -#define BINV_NEWTON_THRESHOLD 156 -#define REDC_1_TO_REDC_N_THRESHOLD 39 - -#define MU_DIV_QR_THRESHOLD 807 -#define MU_DIVAPPR_Q_THRESHOLD 807 -#define MUPI_DIV_QR_THRESHOLD 66 -#define MU_BDIV_QR_THRESHOLD 667 -#define MU_BDIV_Q_THRESHOLD 807 - -#define MATRIX22_STRASSEN_THRESHOLD 11 -#define HGCD_THRESHOLD 87 -#define GCD_DC_THRESHOLD 233 -#define GCDEXT_DC_THRESHOLD 198 -#define JACOBI_BASE_METHOD 1 - -#define GET_STR_DC_THRESHOLD 12 -#define GET_STR_PRECOMPUTE_THRESHOLD 28 -#define SET_STR_DC_THRESHOLD 390 -#define SET_STR_PRECOMPUTE_THRESHOLD 814 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/750/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/750/lshift.asm deleted file mode 100644 index 3a1c1a7212e81ccf2e5a99953b6d7a1e4c039dd5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/750/lshift.asm +++ /dev/null @@ -1,155 +0,0 @@ -dnl PowerPC 750 mpn_lshift -- mpn left shift. - -dnl Copyright 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C 750: 3.0 -C 7400: 3.0 - - -C mp_limb_t mpn_lshift (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned shift); -C -C This code is the same per-limb speed as mpn/powerpc32/lshift.asm, but -C smaller and saving about 30 or so cycles of overhead. - -ASM_START() -PROLOGUE(mpn_lshift) - - C r3 dst - C r4 src - C r5 size - C r6 shift - - mtctr r5 C size - slwi r5, r5, 2 C 4*size - - subfic r7, r6, 32 C 32-shift - add r4, r4, r5 C &src[size] - - add r5, r3, r5 C &dst[size] - lwz r8, -4(r4) C src[size-1] - bdz L(one) - - lwzu r9, -8(r4) C src[size-2] - - srw r3, r8, r7 C return value - slw r8, r8, r6 C src[size-1] << shift - bdz L(two) - - -L(top): - C r3 return value - C r4 src, incrementing - C r5 dst, incrementing - C r6 lshift - C r7 32-shift - C r8 src[i+1] << shift - C r9 src[i] - C r10 - - lwzu r10, -4(r4) - srw r11, r9, r7 - - or r8, r8, r11 - stwu r8, -4(r5) - - slw r8, r9, r6 - bdz L(odd) - - C r8 src[i+1] << shift - C r9 - C r10 src[i] - - lwzu r9, -4(r4) - srw r11, r10, r7 - - or r8, r8, r11 - stwu r8, -4(r5) - - slw r8, r10, r6 - bdnz L(top) - - -L(two): - C r3 return value - C r4 - C r5 &dst[2] - C r6 shift - C r7 32-shift - C r8 src[1] << shift - C r9 src[0] - C r10 - - srw r11, r9, r7 - slw r12, r9, r6 C src[0] << shift - - or r8, r8, r11 - stw r12, -8(r5) C dst[0] - - stw r8, -4(r5) C dst[1] - blr - - -L(odd): - C r3 return value - C r4 - C r5 &dst[2] - C r6 shift - C r7 32-shift - C r8 src[1] << shift - C r9 - C r10 src[0] - - srw r11, r10, r7 - slw r12, r10, r6 - - or r8, r8, r11 - stw r12, -8(r5) C dst[0] - - stw r8, -4(r5) C dst[1] - blr - - -L(one): - C r5 &dst[1] - C r6 shift - C r7 32-shift - C r8 src[0] - - srw r3, r8, r7 C return value - slw r8, r8, r6 C src[size-1] << shift - - stw r8, -4(r5) C dst[0] - blr - -EPILOGUE(mpn_lshift) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/750/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/750/rshift.asm deleted file mode 100644 index 4825fee61833e2194a07f8212b7b1e880fb90fc4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/750/rshift.asm +++ /dev/null @@ -1,153 +0,0 @@ -dnl PowerPC 750 mpn_rshift -- mpn right shift. - -dnl Copyright 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C 750: 3.0 -C 7400: 3.0 - - -C mp_limb_t mpn_rshift (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned shift); -C -C This code is the same per-limb speed as mpn/powerpc32/rshift.asm, but -C smaller and saving about 30 or so cycles of overhead. - -ASM_START() -PROLOGUE(mpn_rshift) - - C r3 dst - C r4 src - C r5 size - C r6 shift - - mtctr r5 C size - lwz r8, 0(r4) C src[0] - - subfic r7, r6, 32 C 32-shift - addi r5, r3, -4 C dst-4 - - slw r3, r8, r7 C return value - bdz L(one) - - lwzu r9, 4(r4) C src[1] - srw r8, r8, r6 C src[0] >> shift - bdz L(two) - - -L(top): - C r3 return value - C r4 src, incrementing - C r5 dst, incrementing - C r6 shift - C r7 32-shift - C r8 src[i-1] >> shift - C r9 src[i] - C r10 - - lwzu r10, 4(r4) - slw r11, r9, r7 - - or r8, r8, r11 - stwu r8, 4(r5) - - srw r8, r9, r6 - bdz L(odd) - - C r8 src[i-1] >> shift - C r9 - C r10 src[i] - - lwzu r9, 4(r4) - slw r11, r10, r7 - - or r8, r8, r11 - stwu r8, 4(r5) - - srw r8, r10, r6 - bdnz L(top) - - -L(two): - C r3 return value - C r4 - C r5 &dst[size-2] - C r6 shift - C r7 32-shift - C r8 src[size-2] >> shift - C r9 src[size-1] - C r10 - - slw r11, r9, r7 - srw r12, r9, r6 C src[size-1] >> shift - - or r8, r8, r11 - stw r12, 8(r5) C dst[size-1] - - stw r8, 4(r5) C dst[size-2] - blr - - -L(odd): - C r3 return value - C r4 - C r5 &dst[size-2] - C r6 shift - C r7 32-shift - C r8 src[size-2] >> shift - C r9 - C r10 src[size-1] - - slw r11, r10, r7 - srw r12, r10, r6 - - or r8, r8, r11 - stw r12, 8(r5) C dst[size-1] - - stw r8, 4(r5) C dst[size-2] - blr - - -L(one): - C r3 return value - C r4 - C r5 dst-4 - C r6 shift - C r7 - C r8 src[0] - - srw r8, r8, r6 - - stw r8, 4(r5) C dst[0] - blr - -EPILOGUE(mpn_rshift) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/README b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/README deleted file mode 100644 index 887e78b290327e2fd21b5910c87d56efc9dce764..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/README +++ /dev/null @@ -1,180 +0,0 @@ -Copyright 2002, 2005 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - - POWERPC 32-BIT MPN SUBROUTINES - - -This directory contains mpn functions for various 32-bit PowerPC chips. - - -CODE ORGANIZATION - - directory used for - ================================================ - powerpc generic, 604, 604e, 744x, 745x - powerpc/750 740, 750, 7400, 7410 - - -The top-level powerpc directory is currently mostly aimed at 604/604e but -should be reasonable on all powerpcs. - - - -STATUS - -The code is quite well optimized for the 604e, other chips have had less -attention. - -Altivec SIMD available in 74xx might hold some promise, but unfortunately -GMP only guarantees 32-bit data alignment, so there's lots of fiddling -around with partial operations at the start and end of limb vectors. A -128-bit limb would be a novel idea, but is unlikely to be practical, since -it would have to work with ordinary +, -, * etc in the C code. - -Also, Altivec isn't very well suited for the GMP multiplication needs. -Using floating-point based multiplication has much better better performance -potential for all current powerpcs, both the ones with slow integer multiply -units (603, 740, 750, 7400, 7410) and those with fast (604, 604e, 744x, -745x). This is because all powerpcs do some level of pipelining in the FPU: - -603 and 750 can sustain one fmadd every 2nd cycle. -604 and 604e can sustain one fmadd per cycle. -7400 and 7410 can sustain 3 fmadd in 4 cycles. -744x and 745x can sustain 4 fmadd in 5 cycles. - - - -REGISTER NAMES - -The normal powerpc convention is to give registers as plain numbers, like -"mtctr 6", but on Apple MacOS X (powerpc*-*-rhapsody* and -powerpc*-*-darwin*) the assembler demands an "r" like "mtctr r6". Note -however when register 0 in an instruction means a literal zero the "r" is -omitted, for instance "lwzx r6,0,r7". - -The GMP code uses the "r" forms, powerpc-defs.m4 transforms them to plain -numbers according to what GMP_ASM_POWERPC_R_REGISTERS finds is needed. -(Note that this style isn't fully general, as the identifier r4 and the -register r4 will not be distinguishable on some systems. However, this is -not a problem for the limited GMP assembly usage.) - - - -GLOBAL REFERENCES - -Linux non-PIC - lis 9, __gmp_binvert_limb_table@ha - rlwinm 11, 5, 31, 25, 31 - la 9, __gmp_binvert_limb_table@l(9) - lbzx 11, 9, 11 - -Linux PIC (FIXME) -.LCL0: - .long .LCTOC1-.LCF0 - bcl 20, 31, .LCF0 -.LCF0: - mflr 30 - lwz 7, .LCL0-.LCF0(30) - add 30, 7, 30 - lwz 11, .LC0-.LCTOC1(30) - rlwinm 3, 5, 31, 25, 31 - lbzx 7, 11, 3 - -AIX (always PIC) -LC..0: - .tc __gmp_binvert_limb_table[TC],__gmp_binvert_limb_table[RW] - lwz 9, LC..0(2) - rlwinm 0, 5, 31, 25, 31 - lbzx 0, 9, 0 - -Darwin (non-PIC) - lis r2, ha16(___gmp_binvert_limb_table) - rlwinm r9, r5, 31, 25, 31 - la r2, lo16(___gmp_binvert_limb_table)(r2) - lbzx r0, r2, r9 -Darwin (PIC) - mflr r0 - bcl 20, 31, L0001$pb -L0001$pb: - mflr r7 - mtlr r0 - addis r2, r7, ha16(L___gmp_binvert_limb_table$non_lazy_ptr-L0001$pb) - rlwinm r9, r5, 31, 25, 31 - lwz r2, lo16(L___gmp_binvert_limb_table$non_lazy_ptr-L0001$pb)(r2) - lbzx r0, r2, r9 ------- - .non_lazy_symbol_pointer -L___gmp_binvert_limb_table$non_lazy_ptr: - .indirect_symbol ___gmp_binvert_limb_table - .long 0 - .subsections_via_symbols - - -For GNU/Linux and Darwin, we might want to duplicate __gmp_binvert_limb_table -into the text section in this file. We should thus be able to reach it like -this: - - blr L0 -L0: mflr r2 - rlwinm r9, r5, 31, 25, 31 - addi r9, r9, lo16(local_binvert_table-L0) - lbzx r0, r2, r9 - - - -REFERENCES - -PowerPC Microprocessor Family: The Programming Environments for 32-bit -Microprocessors, IBM document G522-0290-01, 2000. - -PowerPC 604e RISC Microprocessor User's Manual with Supplement for PowerPC -604 Microprocessor, IBM document G552-0330-00, Freescale document -MPC604EUM/AD, 3/1998. - -MPC7410/MPC7400 RISC Microprocessor User's Manual, Freescale document -MPC7400UM/D, rev 1, 11/2002. - -MPC7450 RISC Microprocessor Family Reference Manual, Freescale document -MPC7450UM, rev 5, 1/2005. - -The above are available online from - - http://www.ibm.com/chips/techlib/techlib.nsf/productfamilies/PowerPC - http://www.freescale.com/PowerPC - - - ----------------- -Local variables: -mode: text -fill-column: 76 -End: diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/addlsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/addlsh1_n.asm deleted file mode 100644 index 71645c3ec32a87818d8f907944c48f0c41bc50de..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/addlsh1_n.asm +++ /dev/null @@ -1,100 +0,0 @@ -dnl PowerPC-32 mpn_addlsh1_n -- rp[] = up[] + (vp[] << 1) - -dnl Copyright 2003, 2005, 2007 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 603e: ? -C 604e: 4.0 -C 75x (G3): 5.0 -C 7400,7410 (G4): 5.0 -C 744x,745x (G4+): 5.0 -C power4/ppc970: 4.25 -C power5: 5.0 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C vp r5 -C n r6 - -define(`rp',`r3') -define(`up',`r4') -define(`vp',`r5') - -define(`s0',`r6') -define(`s1',`r7') -define(`u0',`r8') -define(`v0',`r10') -define(`v1',`r11') - -ASM_START() -PROLOGUE(mpn_addlsh1_n) - mtctr r6 C copy n in ctr - addic r31, r31, 0 C clear cy - - lwz v0, 0(vp) C load v limb - lwz u0, 0(up) C load u limb - addi up, up, -4 C update up - addi rp, rp, -4 C update rp - slwi s1, v0, 1 - bdz L(end) C If done, skip loop - -L(loop): - lwz v1, 4(vp) C load v limb - adde s1, s1, u0 C add limbs with cy, set cy - srwi s0, v0, 31 C shift down previous v limb - stw s1, 4(rp) C store result limb - lwzu u0, 8(up) C load u limb and update up - rlwimi s0, v1, 1, 0,30 C left shift v limb and merge with prev v limb - - bdz L(exit) C decrement ctr and exit if done - - lwzu v0, 8(vp) C load v limb and update vp - adde s0, s0, u0 C add limbs with cy, set cy - srwi s1, v1, 31 C shift down previous v limb - stwu s0, 8(rp) C store result limb and update rp - lwz u0, 4(up) C load u limb - rlwimi s1, v0, 1, 0,30 C left shift v limb and merge with prev v limb - - bdnz L(loop) C decrement ctr and loop back - -L(end): adde r7, s1, u0 - srwi r4, v0, 31 - stw r7, 4(rp) C store last result limb - addze r3, r4 - blr -L(exit): - adde r7, s0, u0 - srwi r4, v1, 31 - stw r7, 8(rp) C store last result limb - addze r3, r4 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/addmul_1.asm deleted file mode 100644 index 07486df2facdcd8649b418a1fd9bf5e02d49624f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/addmul_1.asm +++ /dev/null @@ -1,159 +0,0 @@ -dnl PowerPC-32 mpn_addmul_1 -- Multiply a limb vector with a limb and add the -dnl result to a second limb vector. - -dnl Copyright 1995, 1997, 1998, 2000-2003, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 603e: ? -C 604e: 6.75 -C 75x (G3): 8.7-14.3 -C 7400,7410 (G4): 8.7-14.3 -C 744x,745x (G4+): 9.5 -C power4/ppc970: 6.25 -C power5: 6.25 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C n r5 -C vl r6 - -C This is optimized for the PPC604. It has not been tuned for other -C PowerPC processors. -C -C Loop Analysis for the 604: -C 12 mem insn -C 8 serializing insn -C 8 int multiply -C 25 int reg write -C 9 int ops (8 of which serialize) -C -C The multiply insns need 16 cycles/4limb. -C The integer register writes will need 13 cycles/4limb. -C All-in-all, it should be possible to get to 4 or 5 cycles/limb on PPC604, -C but that will require some clever FPNOPS and BNOPS for exact -C issue control. - - -ASM_START() -PROLOGUE(mpn_addmul_1) - cmpwi cr0,r5,9 C more than 9 limbs? - bgt cr0,L(big) C branch if more than 9 limbs - - mtctr r5 - lwz r0,0(r4) - mullw r7,r0,r6 - mulhwu r10,r0,r6 - lwz r9,0(r3) - addc r8,r7,r9 - addi r3,r3,-4 - bdz L(end) -L(loop): - lwzu r0,4(r4) - stwu r8,4(r3) - mullw r8,r0,r6 - adde r7,r8,r10 - mulhwu r10,r0,r6 - lwz r9,4(r3) - addze r10,r10 - addc r8,r7,r9 - bdnz L(loop) -L(end): stw r8,4(r3) - addze r3,r10 - blr - -L(big): stwu r1,-16(r1) - addi r5,r5,-1 - stw r30,8(r1) - srwi r0,r5,2 - stw r31,12(r1) - mtctr r0 - - lwz r7,0(r4) - mullw r8,r7,r6 - mulhwu r0,r7,r6 - lwz r7,0(r3) - addc r8,r8,r7 - stw r8,0(r3) - -L(loopU): - lwz r7,4(r4) - lwz r12,8(r4) - lwz r30,12(r4) - lwzu r31,16(r4) - mullw r8,r7,r6 - mullw r9,r12,r6 - mullw r10,r30,r6 - mullw r11,r31,r6 - adde r8,r8,r0 C add cy_limb - mulhwu r0,r7,r6 - lwz r7,4(r3) - adde r9,r9,r0 - mulhwu r0,r12,r6 - lwz r12,8(r3) - adde r10,r10,r0 - mulhwu r0,r30,r6 - lwz r30,12(r3) - adde r11,r11,r0 - mulhwu r0,r31,r6 - lwz r31,16(r3) - addze r0,r0 C new cy_limb - addc r8,r8,r7 - stw r8,4(r3) - adde r9,r9,r12 - stw r9,8(r3) - adde r10,r10,r30 - stw r10,12(r3) - adde r11,r11,r31 - stwu r11,16(r3) - bdnz L(loopU) - - andi. r31,r5,3 - mtctr r31 - beq cr0,L(endx) - -L(loopE): - lwzu r7,4(r4) - mullw r8,r7,r6 - adde r8,r8,r0 C add cy_limb - mulhwu r0,r7,r6 - lwz r7,4(r3) - addze r0,r0 C new cy_limb - addc r8,r8,r7 - stwu r8,4(r3) - bdnz L(loopE) -L(endx): - addze r3,r0 - lwz r30,8(r1) - lwz r31,12(r1) - addi r1,r1,16 - blr -EPILOGUE(mpn_addmul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/aix.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/aix.m4 deleted file mode 100644 index fde20200b2440b2535a07d90d9257132d0a02591..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/aix.m4 +++ /dev/null @@ -1,82 +0,0 @@ -divert(-1) -dnl m4 macros for AIX 32-bit assembly. - -dnl Copyright 2000-2002, 2005, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -define(`ASM_START', -` .toc') - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo) -dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) -dnl -dnl Don't want ELF style .size in the epilogue. - -define(`PROLOGUE_cpu', -m4_assert_numargs(1) - ` - .globl $1 - .globl .$1 - .csect [DS], 2 -$1: - .long .$1, TOC[tc0], 0 - .csect [PR] - .align 2 -.$1:') - -define(`EPILOGUE_cpu', -m4_assert_numargs(1) -`') - -define(`TOC_ENTRY', `') - -define(`LEA', -m4_assert_numargs(2) -`define(`TOC_ENTRY', -` .toc -tc$2: - .tc $2[TC], $2')' -` lwz $1, tc$2(2)') - -define(`EXTERN', -m4_assert_numargs(1) -` .globl $1') - -define(`DEF_OBJECT', -m4_assert_numargs_range(1,2) -` .csect [RO], 3 - ALIGN(ifelse($#,1,2,$2)) -$1: -') - -define(`END_OBJECT', -m4_assert_numargs(1)) - -define(`ASM_END', `TOC_ENTRY') - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/aors_n.asm deleted file mode 100644 index 25ece0966e9a115be2d45b472538e3817a930f73..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/aors_n.asm +++ /dev/null @@ -1,157 +0,0 @@ -dnl PowerPC-32 mpn_add_n and mpn_sub_n. - -dnl Copyright 2002, 2005, 2007 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 603e: ? -C 604e: ? old: 3.25 -C 75x (G3): ? old: 3.5 -C 7400,7410 (G4): 3.25 -C 744x,745x (G4+): 4 -C POWER3/PPC630 2 -C POWER4/PPC970 2.4 -C POWER5 2.75 -C POWER6 40-140 -C POWER7 3 - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`vp', `r5') -define(`n', `r6') -define(`cy', `r7') - -ifdef(`OPERATION_add_n', ` - define(ADCSBC, adde) - define(func, mpn_add_n) - define(func_nc, mpn_add_nc) - define(IFADD, `$1') - define(IFSUB, `')') -ifdef(`OPERATION_sub_n', ` - define(ADCSBC, subfe) - define(func, mpn_sub_n) - define(func_nc, mpn_sub_nc) - define(IFADD, `') - define(IFSUB, `$1')') - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc) - -ASM_START() - -PROLOGUE(func_nc) -IFADD(` addic r0, cy, -1') C set carry from argument -IFSUB(` subfic r0, cy, 0') C set carry from argument - b L(ent) -EPILOGUE() - -PROLOGUE(func) -IFADD(` addic r0, n, 0') C clear carry -IFSUB(` addic r0, n, -1') C set carry -L(ent): andi. r0, n, 3 - addi r3, r3, -12 - addi n, n, 1 - cmpwi cr7, r0, 2 - srwi r0, n, 2 - sub r4, r4, r3 - sub r5, r5, r3 - mtctr r0 - bne cr0, L(n00) - - lwzx r7, r4, r3 C n = 4, 8, 12, ... - lwzx r8, r5, r3 - addi r3, r3, 4 - lwzx r9, r4, r3 - ADCSBC r7, r8, r7 - lwzx r10, r5, r3 - addi r3, r3, 4 - b L(00) - -L(n00): bge cr7, L(n01) - cmpwi cr0, r0, 0 C n = 1, 5, 9, 13, ... - lwzx r0, r4, r3 - lwzx r6, r5, r3 - addi r3, r3, 4 - ADCSBC r0, r6, r0 - ble L(ret) -L(gt1): lwzx r7, r4, r3 - lwzx r8, r5, r3 - addi r3, r3, 4 - b L(01) - -L(n10): - lwzx r9, r4, r3 C n = 3, 7, 11, 15, ... - lwzx r10, r5, r3 - addi r3, r3, 4 - lwzx r11, r4, r3 - ADCSBC r9, r10, r9 - lwzx r12, r5, r3 - addi r3, r3, 4 - b L(11) - -L(n01): bne cr7, L(n10) - cmpwi cr0, r0, 0 C n = 2, 6, 10, 14, ... - lwzx r11, r4, r3 - lwzx r12, r5, r3 - addi r3, r3, 4 - lwzx r0, r4, r3 - ADCSBC r11, r12, r11 - lwzx r6, r5, r3 - addi r3, r3, 4 - ble cr0, L(end) - - -L(lp): lwzx r7, r4, r3 - ADCSBC r0, r6, r0 - lwzx r8, r5, r3 - stwu r11, 4(r3) -L(01): lwzx r9, r4, r3 - ADCSBC r7, r8, r7 - lwzx r10, r5, r3 - stwu r0, 4(r3) -L(00): lwzx r11, r4, r3 - ADCSBC r9, r10, r9 - lwzx r12, r5, r3 - stwu r7, 4(r3) -L(11): lwzx r0, r4, r3 - ADCSBC r11, r12, r11 - lwzx r6, r5, r3 - stwu r9, 4(r3) - bdnz L(lp) - -L(end): ADCSBC r0, r6, r0 - stw r11, 4(r3) -L(ret): stw r0, 8(r3) -IFADD(` li r3, 0 ') -IFADD(` addze r3, r3 ') -IFSUB(` subfe r3, r0, r0') -IFSUB(` neg r3, r3') - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/bdiv_dbm1c.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/bdiv_dbm1c.asm deleted file mode 100644 index 72b2c482e4d36e23f58b4327f1e5926382c5e8df..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/bdiv_dbm1c.asm +++ /dev/null @@ -1,131 +0,0 @@ -dnl PPC32 mpn_bdiv_dbm1c. - -dnl Copyright 2008 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 603e: ? -C 604e: ? -C 75x (G3): ? -C 7400,7410 (G4): 9.43 -C 744x,745x (G4+): 6.28 -C power4/ppc970: ? -C power5: ? - -C TODO -C * Nothing to do... - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') -define(`bd', `r6') -define(`cy', `r7') - -ASM_START() -PROLOGUE(mpn_bdiv_dbm1c) - lwz r0, 0(r4) - - rlwinm. r12, r5, 0,30,31 - cmplwi cr6, r12, 2 - cmplwi cr7, r5, 4 - addi r5, r5, 1 - srwi r5, r5, 2 - mtctr r5 - beq cr0, L(b00) - blt cr6, L(b01) - beq cr6, L(b10) - -L(b11): mullw r5, r0, r6 - mulhwu r12, r0, r6 - lwz r0, 4(r4) - addi r4, r4, -12 - addi r3, r3, -12 - b L(3) - -L(b00): mullw r9, r0, r6 - mulhwu r8, r0, r6 - lwz r0, 4(r4) - addi r4, r4, -8 - addi r3, r3, -8 - b L(0) - -L(b01): mullw r5, r0, r6 - mulhwu r12, r0, r6 - addi r3, r3, -4 - ble cr7, L(e1) - lwz r0, 4(r4) - addi r4, r4, -4 - b L(1) - -L(b10): mullw r9, r0, r6 - mulhwu r8, r0, r6 - lwz r0, 4(r4) - ble cr7, L(e2) - - ALIGN(16) -L(top): mullw r5, r0, r6 - mulhwu r12, r0, r6 - subfc r11, r9, r7 - lwz r0, 8(r4) - subfe r7, r8, r11 - stw r11, 0(r3) -L(1): mullw r9, r0, r6 - mulhwu r8, r0, r6 - subfc r11, r5, r7 - lwz r0, 12(r4) - subfe r7, r12, r11 - stw r11, 4(r3) -L(0): mullw r5, r0, r6 - mulhwu r12, r0, r6 - subfc r11, r9, r7 - lwz r0, 16(r4) - subfe r7, r8, r11 - stw r11, 8(r3) -L(3): mullw r9, r0, r6 - mulhwu r8, r0, r6 - subfc r11, r5, r7 - lwz r0, 20(r4) - subfe r7, r12, r11 - stw r11, 12(r3) - addi r4, r4, 16 - addi r3, r3, 16 - bdnz L(top) - -L(e2): mullw r5, r0, r6 - mulhwu r12, r0, r6 - subfc r11, r9, r7 - subfe r7, r8, r11 - stw r11, 0(r3) -L(e1): subfc r11, r5, r7 - stw r11, 4(r3) - subfe r3, r12, r11 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/darwin.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/darwin.m4 deleted file mode 100644 index db4226800b363ec63d2a123648d5c6b2421174a5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/darwin.m4 +++ /dev/null @@ -1,91 +0,0 @@ -divert(-1) -dnl m4 macros for Mac OS 32-bit assembly. - -dnl Copyright 2005, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -define(`ASM_START',`') - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo[,toc]) -dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) -dnl - -define(`PROLOGUE_cpu', -m4_assert_numargs_range(1,2) -`ifelse(`$2',toc,, -`ifelse(`$2',,,`m4_error(`Unrecognised PROLOGUE parameter')')')dnl - .text - .globl $1 - .align 3 -$1:') - -define(`EPILOGUE_cpu', -m4_assert_numargs(1)) - - -dnl LEA -- Load Effective Address. - -define(`LEA', -m4_assert_numargs(2) -`ifdef(`PIC', -` mflr r0 C save return address - bcl 20, 31, 1f -1: mflr $1 - addis $1, $1, ha16($2-1b) - la $1, lo16($2-1b)($1) - mtlr r0 C restore return address -',` - lis $1, ha16($2) - la $1, lo16($2)($1) -')') - -define(`LEAL', -m4_assert_numargs(2) -`LEA($1,$2)') - - -define(`EXTERN', -m4_assert_numargs(1) -`dnl') - -define(`DEF_OBJECT', -m4_assert_numargs_range(1,2) -` .const - ALIGN(ifelse($#,1,2,$2)) -$1: -') - -define(`END_OBJECT', -m4_assert_numargs(1)) - -define(`ASM_END', `dnl') - -ifdef(`PIC',` -define(`PIC_SLOW')') - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/diveby3.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/diveby3.asm deleted file mode 100644 index 288a7d30ac8a0327566e86e6c6e63173fe1c6c50..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/diveby3.asm +++ /dev/null @@ -1,93 +0,0 @@ -dnl PowerPC-32 mpn_divexact_by3 -- mpn by 3 exact division - -dnl Copyright 2002, 2003, 2005, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 603e: ? -C 604e: 5 -C 75x (G3): ? -C 7400,7410 (G4): 8 -C 744x,745x (G4+): 6 -C power4/ppc970: 12 -C power5: ? - -C void mpn_divexact_by3 (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C We avoid the slow subfe instruction and instead rely on an extremely unlikely -C branch. -C -C The mullw has the inverse in the first operand, since 0xAA..AB won't allow -C any early-out. The src[] data normally won't either, but there's at least -C a chance, whereas 0xAA..AB never will. If, for instance, src[] is all -C zeros (not a sensible input of course) we run at 7.0 c/l on ppc750. -C -C The mulhwu has the "3" multiplier in the second operand, which lets 750 and -C 7400 use an early-out. - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') -define(`cy', `r6') - -ASM_START() -PROLOGUE(mpn_divexact_by3c) - lwz r11, 0(up) - mtctr n - lis r12, 0xAAAA - ori r12, r12, 0xAAAB - li r10, 3 - - cmplw cr7, cy, r11 - subf r11, cy, r11 - - mullw r0, r11, r12 - stw r0, 0(rp) - bdz L(one) - -L(top): lwzu r9, 4(up) - mulhwu r7, r0, r10 - bgt- cr7, L(adj) C very unlikely branch -L(bko): cmplw cr7, r7, r9 - subf r0, r7, r9 - mullw r0, r12, r0 - stwu r0, 4(rp) - bdnz L(top) - -L(one): mulhwu r3, r0, r10 - blelr+ cr7 - addi r3, r3, 1 - blr - -L(adj): addi r7, r7, 1 - b L(bko) -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/divrem_2.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/divrem_2.asm deleted file mode 100644 index c6e64efe2333b940e12360762ccaade511edc2c2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/divrem_2.asm +++ /dev/null @@ -1,182 +0,0 @@ -dnl PPC-32 mpn_divrem_2 -- Divide an mpn number by a normalized 2-limb number. - -dnl Copyright 2007, 2008, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C norm frac -C 7410 ~36.5 ~36.5 -C 744x, 745x 29 29 - -C INPUT PARAMETERS -C qp = r3 -C fn = r4 -C up = r5 -C un = r6 -C d = r7 - -C TODO -C * Decrease register usage. -C * Make sure mul operands and optimal for early-out. -C * Check that things work well for a shared library build. -C * Write an invert_limb, perhaps inline, perhaps as a private call. Or at -C least vastly improve the current __udiv_qrnnd_c based code. - - -ASM_START() -PROLOGUE(mpn_divrem_2) - stwu r1, -32(r1) - slwi r0, r6, 2 - add r5, r5, r0 - stmw r28, 8(r1) - addi r29, r5, -8 C up = up_param + un - 2 - lwz r10, 4(r7) - lwz r12, 4(r29) - addi r8, r3, -12 - lwz r7, 0(r7) - cmplw cr7, r12, r10 - lwz r28, 0(r29) - blt- cr7, L(2) - bgt+ cr7, L(4) - cmplw cr7, r28, r7 - blt- cr7, L(2) -L(4): subfc r28, r7, r28 - subfe r12, r10, r12 - li r3, 1 - b L(6) -L(2): li r3, 0 - -L(6): add r0, r4, r6 - addic. r30, r0, -2 - ble- cr0, L(ret) - - slwi r9, r0, 2 - add r8, r8, r9 C rp += un + fn - mtctr r30 - -C Compute di from d1 - srwi r11, r10, 16 - nor r0, r10, r10 - divwu r31, r0, r11 - rlwinm r5, r10, 0, 16, 31 - mullw r9, r11, r31 - mullw r6, r5, r31 - subf r0, r9, r0 - slwi r0, r0, 16 - ori r0, r0, 65535 - cmplw cr7, r0, r6 - bge- cr7, L(9) - add r0, r0, r10 - cmplw cr7, r0, r10 - cmplw cr6, r6, r0 - addi r31, r31, -1 C q1-- - crorc 28, 28, 25 - bc+ 12, 28, L(9) - addi r31, r31, -1 C q1-- - add r0, r0, r10 -L(9): subf r0, r6, r0 - divwu r6, r0, r11 - mullw r9, r11, r6 - mullw r11, r5, r6 - subf r0, r9, r0 - slwi r0, r0, 16 - ori r0, r0, 65535 - cmplw cr7, r0, r11 - bge- cr7, L(13) - add r0, r0, r10 - cmplw cr7, r0, r10 - cmplw cr6, r11, r0 - addi r6, r6, -1 C q0-- - crorc 28, 28, 25 - bc+ 12, 28, L(13) -C add r0, r0, r10 C final remainder - addi r6, r6, -1 C q0-- -L(13): rlwimi r6, r31, 16, 0, 15 C assemble final quotient - -C Adjust di by including d0 - mullw r9, r10, r6 C t0 = LO(di * d1) - addc r11, r9, r7 - subfe r0, r1, r1 - mulhwu r9, r6, r7 C s1 = HI(di * d0) - addc r9, r11, r9 - addze. r0, r0 - blt cr0, L(17) -L(18): subfc r9, r10, r9 - addi r6, r6, -1 - addme. r0, r0 - bge+ cr0, L(18) -L(17): - -C r0 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r28 r29 r30 r31 -C msl di d0 qp d1 fn up un -L(loop): - mullw r0, r12, r6 C q0 = LO(n2 * di) - cmpw cr7, r30, r4 - addc r31, r0, r28 C q0 += n1 - mulhwu r9, r12, r6 C q = HI(n2 * di) - adde r12, r9, r12 C q += n2 - addi r30, r30, -1 - mullw r0, r10, r12 C d1 * q - li r9, 0 - subf r0, r0, r28 C n1 -= d1 * q - addi r5, r12, 1 - ble- cr7, L(23) - lwzu r9, -4(r29) -L(23): mullw r11, r12, r7 C t0 = LO(d0 * q) - subfc r28, r7, r9 C n0 -= d0 - subfe r0, r10, r0 C n1 -= d1 - mulhwu r12, r12, r7 C t1 = HI(d0 * q) - subfc r28, r11, r28 C n0 -= t0 - subfe r12, r12, r0 C n1 -= t1 - cmplw cr7, r12, r31 - blt+ cr7, L(24) - addc r28, r28, r7 - adde r12, r12, r10 - addi r5, r5, -1 -L(24): cmplw cr7, r12, r10 - bge- cr7, L(fix) -L(bck): stw r5, 0(r8) - addi r8, r8, -4 - bdnz L(loop) - -L(ret): stw r28, 0(r29) - stw r12, 4(r29) - lmw r28, 8(r1) - addi r1, r1, 32 - blr - -L(fix): cmplw cr6, r28, r7 - bgt+ cr7, L(28) - blt- cr6, L(bck) -L(28): subfc r28, r7, r28 - subfe r12, r10, r12 - addi r5, r5, 1 - b L(bck) -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/eabi.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/eabi.m4 deleted file mode 100644 index cd7633c6330ee34106eeb8b50cdb6208c68d5394..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/eabi.m4 +++ /dev/null @@ -1,86 +0,0 @@ -divert(-1) -dnl m4 macros for powerpc32 eABI assembly. - -dnl Copyright 2003, 2005, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -define(`ASM_START',`') - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo) -dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) -dnl - -define(`PROLOGUE_cpu', -m4_assert_numargs(1) - ` - .section ".text" - .align 3 - .globl $1 - .type $1, @function -$1:') - -define(`EPILOGUE_cpu', -m4_assert_numargs(1) -` .size $1, .-$1') - -dnl This ought to support PIC, but it is unclear how that is done for eABI -define(`LEA', -m4_assert_numargs(2) -` - lis $1, $2@ha - la $1, $2@l($1) -') - -define(`EXTERN', -m4_assert_numargs(1) -`dnl') - -define(`DEF_OBJECT', -m4_assert_numargs_range(1,2) -` - .section .rodata - ALIGN(ifelse($#,1,2,$2)) - .type $1, @object -$1: -') - -define(`END_OBJECT', -m4_assert_numargs(1) -` .size $1, .-$1') - -define(`ASM_END', `dnl') - -ifdef(`PIC',` -define(`PIC_SLOW')') - -dnl 64-bit "long long" parameters are put in an even-odd pair, skipping an -dnl even register if that was in turn. I wish somebody could explain why that -dnl is a good idea. -define(`BROKEN_LONGLONG_PARAM') - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/elf.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/elf.m4 deleted file mode 100644 index 1ed9c124d788f3ac5a4bdbe3084da9420f9c409a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/elf.m4 +++ /dev/null @@ -1,100 +0,0 @@ -divert(-1) -dnl m4 macros for powerpc32 GNU/Linux assembly. - -dnl Copyright 2003, 2005, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -define(`ASM_START',`') - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo[,toc]) -dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) -dnl - -define(`PROLOGUE_cpu', -m4_assert_numargs_range(1,2) -`ifelse(`$2',toc,, -`ifelse(`$2',,,`m4_error(`Unrecognised PROLOGUE parameter')')')dnl - .section ".text" - .align 3 - .globl $1 - .type $1, @function -$1:') - -define(`EPILOGUE_cpu', -m4_assert_numargs(1) -` .size $1, .-$1') - -define(`LEA', -m4_assert_numargs(2) -`ifdef(`PIC',` - mflr r0 - bcl 20, 31, 1f -1: mflr $1 - addis $1, $1, (_GLOBAL_OFFSET_TABLE_-1b)@ha - addi $1, $1, (_GLOBAL_OFFSET_TABLE_-1b)@l - mtlr r0 - lwz $1, $2@got($1) -',` - lis $1, $2@ha - la $1, $2@l($1) -')') - - -define(`LEAL', -m4_assert_numargs(2) -`LEA($1,$2)') - - -define(`EXTERN', -m4_assert_numargs(1) -`dnl') - -define(`DEF_OBJECT', -m4_assert_numargs_range(1,2) -` - .section .rodata - ALIGN(ifelse($#,1,2,$2)) - .type $1, @object -$1: -') - -define(`END_OBJECT', -m4_assert_numargs(1) -` .size $1, .-$1') - -define(`ASM_END', `dnl') - -ifdef(`PIC',` -define(`PIC_SLOW')') - -dnl 64-bit "long long" parameters are put in an even-odd pair, skipping an -dnl even register if that was in turn. I wish somebody could explain why that -dnl is a good idea. -define(`BROKEN_LONGLONG_PARAM') - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/gmp-mparam.h deleted file mode 100644 index e835a39b3e6be1ac4205c5e9e6aca03cb5896e32..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/gmp-mparam.h +++ /dev/null @@ -1,222 +0,0 @@ -/* PowerPC-32 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2004, 2008-2010, 2014, 2015 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - - -/* This file is supposed to be used for 604, 604e, 744x/745x/747x (G4+), i.e., - 32-bit PowerPC processors with reasonably fast integer multiply insns. The - values below are chosen to be best for the latter processors, since 604 is - largely irrelevant today. - - In mpn/powerpc32/750/gmp-mparam.h there are values for 75x (G3) and for - 7400/7410 (G4), both which have much slower multiply instructions. */ - -/* 1417 MHz PPC 7447A */ -/* FFT tuning limit = 15 M */ -/* Generated by tuneup.c, 2015-10-08, gcc 4.6 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1P_METHOD 1 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 8 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 6 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 8 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 45 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 18 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 2 -#define DIV_QR_1_UNNORM_THRESHOLD 1 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD 69 - -#define MUL_TOOM22_THRESHOLD 14 -#define MUL_TOOM33_THRESHOLD 73 -#define MUL_TOOM44_THRESHOLD 106 -#define MUL_TOOM6H_THRESHOLD 156 -#define MUL_TOOM8H_THRESHOLD 236 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 73 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 71 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 73 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 72 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 82 - -#define SQR_BASECASE_THRESHOLD 0 /* always */ -#define SQR_TOOM2_THRESHOLD 22 -#define SQR_TOOM3_THRESHOLD 74 -#define SQR_TOOM4_THRESHOLD 142 -#define SQR_TOOM6_THRESHOLD 190 -#define SQR_TOOM8_THRESHOLD 333 - -#define MULMID_TOOM42_THRESHOLD 32 - -#define MULMOD_BNM1_THRESHOLD 9 -#define SQRMOD_BNM1_THRESHOLD 13 - -#define MUL_FFT_MODF_THRESHOLD 284 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 284, 5}, { 15, 6}, { 8, 5}, { 17, 6}, \ - { 9, 5}, { 19, 6}, { 17, 7}, { 9, 6}, \ - { 20, 7}, { 11, 6}, { 23, 7}, { 13, 8}, \ - { 7, 7}, { 19, 8}, { 11, 7}, { 25, 9}, \ - { 7, 8}, { 15, 7}, { 33, 8}, { 19, 7}, \ - { 39, 8}, { 23, 7}, { 47, 8}, { 27, 9}, \ - { 15, 8}, { 39, 9}, { 23, 8}, { 47,10}, \ - { 15, 9}, { 31, 8}, { 67, 9}, { 39, 8}, \ - { 79, 9}, { 47, 8}, { 95,10}, { 31, 9}, \ - { 71, 8}, { 143, 9}, { 79,10}, { 47, 9}, \ - { 95,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255, 9}, { 135, 8}, { 271, 9}, { 143,10}, \ - { 79, 9}, { 159, 8}, { 319, 9}, { 175,10}, \ - { 95, 9}, { 191, 8}, { 383, 9}, { 207, 8}, \ - { 415,11}, { 63,10}, { 127, 9}, { 255, 8}, \ - { 511, 9}, { 271,10}, { 143, 9}, { 287, 8}, \ - { 575,10}, { 159, 9}, { 319,10}, { 175,11}, \ - { 95,10}, { 191, 9}, { 383,10}, { 207, 9}, \ - { 415, 8}, { 831,12}, { 63,11}, { 127,10}, \ - { 255, 9}, { 511,10}, { 271, 9}, { 543, 8}, \ - { 1087,10}, { 287, 9}, { 575,11}, { 159,10}, \ - { 319, 9}, { 639,10}, { 351, 9}, { 703,11}, \ - { 191,10}, { 415, 9}, { 831,11}, { 223,10}, \ - { 447, 9}, { 895,10}, { 479, 9}, { 959,12}, \ - { 127,11}, { 255,10}, { 543, 9}, { 1087,11}, \ - { 287,10}, { 607,11}, { 319,10}, { 639,11}, \ - { 351,10}, { 703, 9}, { 1407,12}, { 191,11}, \ - { 383,10}, { 767,11}, { 415,10}, { 831,11}, \ - { 447,10}, { 895,11}, { 479,10}, { 959,13}, \ - { 127,12}, { 255,11}, { 543,10}, { 1087,11}, \ - { 607,12}, { 319,11}, { 639,10}, { 1279,11}, \ - { 703,10}, { 1407,12}, { 383,11}, { 831,12}, \ - { 447,11}, { 959,13}, { 255,12}, { 511,11}, \ - { 1087,12}, { 575,11}, { 1215,10}, { 2431,12}, \ - { 639,11}, { 1279,12}, { 703,11}, { 1407,13}, \ - { 383,12}, { 959,14}, { 255,13}, { 511,12}, \ - { 1215,11}, { 2431,13}, { 639,12}, { 1471,13}, \ - { 767,12}, { 1599,13}, { 895,12}, { 1919,14}, \ - { 511,13}, { 1023,12}, { 2111,13}, { 1151,12}, \ - { 2431,13}, { 1407,14}, { 767,13}, { 1535,12}, \ - { 3071,13}, { 8192,14}, { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 164 -#define MUL_FFT_THRESHOLD 3712 - -#define SQR_FFT_MODF_THRESHOLD 248 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 248, 5}, { 17, 6}, { 9, 5}, { 19, 6}, \ - { 17, 7}, { 9, 6}, { 20, 7}, { 11, 6}, \ - { 23, 7}, { 13, 8}, { 7, 7}, { 19, 8}, \ - { 11, 7}, { 25, 9}, { 7, 8}, { 15, 7}, \ - { 33, 8}, { 19, 7}, { 39, 8}, { 27, 9}, \ - { 15, 8}, { 39, 9}, { 23, 8}, { 47,10}, \ - { 15, 9}, { 31, 8}, { 63, 9}, { 39, 8}, \ - { 79, 9}, { 47,10}, { 31, 9}, { 63, 8}, \ - { 127, 9}, { 71, 8}, { 143, 9}, { 79,10}, \ - { 47, 9}, { 95,11}, { 31,10}, { 63, 9}, \ - { 127, 8}, { 255, 7}, { 511, 9}, { 143,10}, \ - { 79, 9}, { 159, 8}, { 319, 9}, { 175, 8}, \ - { 351,10}, { 95, 9}, { 191, 8}, { 383, 9}, \ - { 207, 8}, { 415, 7}, { 831,11}, { 63,10}, \ - { 127, 9}, { 255, 8}, { 511,10}, { 143, 9}, \ - { 287, 8}, { 575,10}, { 159, 9}, { 319,10}, \ - { 175, 9}, { 351,11}, { 95,10}, { 191, 9}, \ - { 383,10}, { 207, 9}, { 415, 8}, { 831,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 511,10}, \ - { 271, 9}, { 543,10}, { 287, 9}, { 575,11}, \ - { 159,10}, { 319, 9}, { 639,10}, { 351, 9}, \ - { 703,11}, { 191,10}, { 383, 9}, { 767,10}, \ - { 415, 9}, { 831,11}, { 223,10}, { 447, 9}, \ - { 895,12}, { 127,11}, { 255,10}, { 543,11}, \ - { 287,10}, { 607,11}, { 319,10}, { 639,11}, \ - { 351,10}, { 703, 9}, { 1407,12}, { 191,11}, \ - { 383,10}, { 767,11}, { 415,10}, { 831,11}, \ - { 447,10}, { 895,11}, { 479,13}, { 127,12}, \ - { 255,11}, { 543,10}, { 1087,11}, { 607,12}, \ - { 319,11}, { 639,10}, { 1279,11}, { 703,10}, \ - { 1407,12}, { 383,11}, { 831,12}, { 447,11}, \ - { 959,13}, { 255,12}, { 511,11}, { 1087,12}, \ - { 575,11}, { 1215,12}, { 639,11}, { 1279,12}, \ - { 703,11}, { 1407,13}, { 383,12}, { 959,14}, \ - { 255,13}, { 511,12}, { 1215,13}, { 639,12}, \ - { 1471,13}, { 767,12}, { 1599,13}, { 895,12}, \ - { 1919,14}, { 511,13}, { 1023,12}, { 2111,13}, \ - { 1151,12}, { 2431,13}, { 1407,14}, { 767,13}, \ - { 1535,12}, { 3199,13}, { 8192,14}, { 16384,15}, \ - { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 157 -#define SQR_FFT_THRESHOLD 2688 - -#define MULLO_BASECASE_THRESHOLD 2 -#define MULLO_DC_THRESHOLD 50 -#define MULLO_MUL_N_THRESHOLD 6633 -#define SQRLO_BASECASE_THRESHOLD 4 -#define SQRLO_DC_THRESHOLD 115 -#define SQRLO_SQR_THRESHOLD 5274 - -#define DC_DIV_QR_THRESHOLD 43 -#define DC_DIVAPPR_Q_THRESHOLD 141 -#define DC_BDIV_QR_THRESHOLD 51 -#define DC_BDIV_Q_THRESHOLD 120 - -#define INV_MULMOD_BNM1_THRESHOLD 43 -#define INV_NEWTON_THRESHOLD 173 -#define INV_APPR_THRESHOLD 156 - -#define BINV_NEWTON_THRESHOLD 204 -#define REDC_1_TO_REDC_N_THRESHOLD 51 - -#define MU_DIV_QR_THRESHOLD 1017 -#define MU_DIVAPPR_Q_THRESHOLD 1078 -#define MUPI_DIV_QR_THRESHOLD 84 -#define MU_BDIV_QR_THRESHOLD 872 -#define MU_BDIV_Q_THRESHOLD 1078 - -#define POWM_SEC_TABLE 1,16,102,428,1378 - -#define GET_STR_DC_THRESHOLD 12 -#define GET_STR_PRECOMPUTE_THRESHOLD 27 -#define SET_STR_DC_THRESHOLD 781 -#define SET_STR_PRECOMPUTE_THRESHOLD 1505 - -#define FAC_DSC_THRESHOLD 141 -#define FAC_ODD_THRESHOLD 34 - -#define MATRIX22_STRASSEN_THRESHOLD 12 -#define HGCD_THRESHOLD 118 -#define HGCD_APPR_THRESHOLD 161 -#define HGCD_REDUCE_THRESHOLD 1679 -#define GCD_DC_THRESHOLD 351 -#define GCDEXT_DC_THRESHOLD 273 -#define JACOBI_BASE_METHOD 4 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/invert_limb.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/invert_limb.asm deleted file mode 100644 index 612bfe523c7413fe63f846ecf7ff66e981efdd93..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/invert_limb.asm +++ /dev/null @@ -1,142 +0,0 @@ -dnl PowerPC-32 mpn_invert_limb -- Invert a normalized limb. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 603e: ? -C 604e: ? -C 75x (G3): ? -C 7400,7410 (G4): ? -C 744x,745x (G4+): 32 -C power4/ppc970: ? -C power5: ? - -EXTERN(approx_tab) - -ASM_START() -PROLOGUE(mpn_invert_limb) - rlwinm r6, r3, 11, 22, 30 C extract bits 30..22 to pos 2^1 - srwi r10, r3, 11 C extract bits 31..11 - LEA( r9, approx_tab) C N.B. clobbers r0 for ELF and Darwin - lhzx r9, r9, r6 C w2 - addi r0, r10, 1 - mullw r11, r9, r9 - slwi r9, r9, 4 - mulhwu r7, r11, r0 - rlwinm r11, r3, 0, 31, 31 C extract bit 0 - addi r0, r9, -1 - srwi r9, r3, 1 C d >> 1 - subf r0, r7, r0 C w1 - add r9, r9, r11 C d31 - mullw r9, r0, r9 C w1 * d31 - srwi r10, r0, 1 C w1 >> 1 - neg r11, r11 - and r11, r10, r11 - subf r11, r9, r11 - mulhwu r9, r11, r0 - slwi r0, r0, 15 - srwi r9, r9, 1 - add r0, r9, r0 C w0 - mullw r10, r0, r3 - mulhwu r9, r0, r3 - addc r11, r10, r3 - adde r3, r9, r3 - subf r3, r3, r0 - blr -EPILOGUE() - -DEF_OBJECT(approx_tab) - .short 0x7fe1,0x7fa1,0x7f61,0x7f22,0x7ee3,0x7ea4,0x7e65,0x7e27 - .short 0x7de9,0x7dab,0x7d6d,0x7d30,0x7cf3,0x7cb6,0x7c79,0x7c3d - .short 0x7c00,0x7bc4,0x7b89,0x7b4d,0x7b12,0x7ad7,0x7a9c,0x7a61 - .short 0x7a27,0x79ec,0x79b2,0x7979,0x793f,0x7906,0x78cc,0x7894 - .short 0x785b,0x7822,0x77ea,0x77b2,0x777a,0x7742,0x770b,0x76d3 - .short 0x769c,0x7665,0x762f,0x75f8,0x75c2,0x758c,0x7556,0x7520 - .short 0x74ea,0x74b5,0x7480,0x744b,0x7416,0x73e2,0x73ad,0x7379 - .short 0x7345,0x7311,0x72dd,0x72aa,0x7277,0x7243,0x7210,0x71de - .short 0x71ab,0x7179,0x7146,0x7114,0x70e2,0x70b1,0x707f,0x704e - .short 0x701c,0x6feb,0x6fba,0x6f8a,0x6f59,0x6f29,0x6ef9,0x6ec8 - .short 0x6e99,0x6e69,0x6e39,0x6e0a,0x6ddb,0x6dab,0x6d7d,0x6d4e - .short 0x6d1f,0x6cf1,0x6cc2,0x6c94,0x6c66,0x6c38,0x6c0a,0x6bdd - .short 0x6bb0,0x6b82,0x6b55,0x6b28,0x6afb,0x6acf,0x6aa2,0x6a76 - .short 0x6a49,0x6a1d,0x69f1,0x69c6,0x699a,0x696e,0x6943,0x6918 - .short 0x68ed,0x68c2,0x6897,0x686c,0x6842,0x6817,0x67ed,0x67c3 - .short 0x6799,0x676f,0x6745,0x671b,0x66f2,0x66c8,0x669f,0x6676 - .short 0x664d,0x6624,0x65fc,0x65d3,0x65aa,0x6582,0x655a,0x6532 - .short 0x650a,0x64e2,0x64ba,0x6493,0x646b,0x6444,0x641c,0x63f5 - .short 0x63ce,0x63a7,0x6381,0x635a,0x6333,0x630d,0x62e7,0x62c1 - .short 0x629a,0x6275,0x624f,0x6229,0x6203,0x61de,0x61b8,0x6193 - .short 0x616e,0x6149,0x6124,0x60ff,0x60da,0x60b6,0x6091,0x606d - .short 0x6049,0x6024,0x6000,0x5fdc,0x5fb8,0x5f95,0x5f71,0x5f4d - .short 0x5f2a,0x5f07,0x5ee3,0x5ec0,0x5e9d,0x5e7a,0x5e57,0x5e35 - .short 0x5e12,0x5def,0x5dcd,0x5dab,0x5d88,0x5d66,0x5d44,0x5d22 - .short 0x5d00,0x5cde,0x5cbd,0x5c9b,0x5c7a,0x5c58,0x5c37,0x5c16 - .short 0x5bf5,0x5bd4,0x5bb3,0x5b92,0x5b71,0x5b51,0x5b30,0x5b10 - .short 0x5aef,0x5acf,0x5aaf,0x5a8f,0x5a6f,0x5a4f,0x5a2f,0x5a0f - .short 0x59ef,0x59d0,0x59b0,0x5991,0x5972,0x5952,0x5933,0x5914 - .short 0x58f5,0x58d6,0x58b7,0x5899,0x587a,0x585b,0x583d,0x581f - .short 0x5800,0x57e2,0x57c4,0x57a6,0x5788,0x576a,0x574c,0x572e - .short 0x5711,0x56f3,0x56d5,0x56b8,0x569b,0x567d,0x5660,0x5643 - .short 0x5626,0x5609,0x55ec,0x55cf,0x55b2,0x5596,0x5579,0x555d - .short 0x5540,0x5524,0x5507,0x54eb,0x54cf,0x54b3,0x5497,0x547b - .short 0x545f,0x5443,0x5428,0x540c,0x53f0,0x53d5,0x53b9,0x539e - .short 0x5383,0x5368,0x534c,0x5331,0x5316,0x52fb,0x52e0,0x52c6 - .short 0x52ab,0x5290,0x5276,0x525b,0x5240,0x5226,0x520c,0x51f1 - .short 0x51d7,0x51bd,0x51a3,0x5189,0x516f,0x5155,0x513b,0x5121 - .short 0x5108,0x50ee,0x50d5,0x50bb,0x50a2,0x5088,0x506f,0x5056 - .short 0x503c,0x5023,0x500a,0x4ff1,0x4fd8,0x4fbf,0x4fa6,0x4f8e - .short 0x4f75,0x4f5c,0x4f44,0x4f2b,0x4f13,0x4efa,0x4ee2,0x4eca - .short 0x4eb1,0x4e99,0x4e81,0x4e69,0x4e51,0x4e39,0x4e21,0x4e09 - .short 0x4df1,0x4dda,0x4dc2,0x4daa,0x4d93,0x4d7b,0x4d64,0x4d4d - .short 0x4d35,0x4d1e,0x4d07,0x4cf0,0x4cd8,0x4cc1,0x4caa,0x4c93 - .short 0x4c7d,0x4c66,0x4c4f,0x4c38,0x4c21,0x4c0b,0x4bf4,0x4bde - .short 0x4bc7,0x4bb1,0x4b9a,0x4b84,0x4b6e,0x4b58,0x4b41,0x4b2b - .short 0x4b15,0x4aff,0x4ae9,0x4ad3,0x4abd,0x4aa8,0x4a92,0x4a7c - .short 0x4a66,0x4a51,0x4a3b,0x4a26,0x4a10,0x49fb,0x49e5,0x49d0 - .short 0x49bb,0x49a6,0x4990,0x497b,0x4966,0x4951,0x493c,0x4927 - .short 0x4912,0x48fe,0x48e9,0x48d4,0x48bf,0x48ab,0x4896,0x4881 - .short 0x486d,0x4858,0x4844,0x482f,0x481b,0x4807,0x47f3,0x47de - .short 0x47ca,0x47b6,0x47a2,0x478e,0x477a,0x4766,0x4752,0x473e - .short 0x472a,0x4717,0x4703,0x46ef,0x46db,0x46c8,0x46b4,0x46a1 - .short 0x468d,0x467a,0x4666,0x4653,0x4640,0x462c,0x4619,0x4606 - .short 0x45f3,0x45e0,0x45cd,0x45ba,0x45a7,0x4594,0x4581,0x456e - .short 0x455b,0x4548,0x4536,0x4523,0x4510,0x44fe,0x44eb,0x44d8 - .short 0x44c6,0x44b3,0x44a1,0x448f,0x447c,0x446a,0x4458,0x4445 - .short 0x4433,0x4421,0x440f,0x43fd,0x43eb,0x43d9,0x43c7,0x43b5 - .short 0x43a3,0x4391,0x437f,0x436d,0x435c,0x434a,0x4338,0x4327 - .short 0x4315,0x4303,0x42f2,0x42e0,0x42cf,0x42bd,0x42ac,0x429b - .short 0x4289,0x4278,0x4267,0x4256,0x4244,0x4233,0x4222,0x4211 - .short 0x4200,0x41ef,0x41de,0x41cd,0x41bc,0x41ab,0x419a,0x418a - .short 0x4179,0x4168,0x4157,0x4147,0x4136,0x4125,0x4115,0x4104 - .short 0x40f4,0x40e3,0x40d3,0x40c2,0x40b2,0x40a2,0x4091,0x4081 - .short 0x4071,0x4061,0x4050,0x4040,0x4030,0x4020,0x4010,0x4000 -END_OBJECT(approx_tab) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/lshift.asm deleted file mode 100644 index ce85d4d33eb30037f9e611a611686396cc6e71c1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/lshift.asm +++ /dev/null @@ -1,168 +0,0 @@ -dnl PowerPC-32 mpn_lshift -- Shift a number left. - -dnl Copyright 1995, 1998, 2000, 2002-2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 603e: ? -C 604e: 3.0 -C 75x (G3): 3.0 -C 7400,7410 (G4): 3.0 -C 7445,7455 (G4+): 2.5 -C 7447,7457 (G4+): 2.25 -C power4/ppc970: 2.5 -C power5: 2.5 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C n r5 -C cnt r6 - -ASM_START() -PROLOGUE(mpn_lshift) - cmpwi cr0, r5, 30 C more than 30 limbs? - slwi r0, r5, 2 - add r4, r4, r0 C make r4 point at end of s1 - add r7, r3, r0 C make r7 point at end of res - bgt L(BIG) C branch if more than 12 limbs - - mtctr r5 C copy size into CTR - subfic r8, r6, 32 - lwzu r11, -4(r4) C load first s1 limb - srw r3, r11, r8 C compute function return value - bdz L(end1) - -L(oop): lwzu r10, -4(r4) - slw r9, r11, r6 - srw r12, r10, r8 - or r9, r9, r12 - stwu r9, -4(r7) - bdz L(end2) - lwzu r11, -4(r4) - slw r9, r10, r6 - srw r12, r11, r8 - or r9, r9, r12 - stwu r9, -4(r7) - bdnz L(oop) - -L(end1): - slw r0, r11, r6 - stw r0, -4(r7) - blr -L(end2): - slw r0, r10, r6 - stw r0, -4(r7) - blr - -L(BIG): - stwu r1, -48(r1) - stmw r24, 8(r1) C save registers we are supposed to preserve - lwzu r9, -4(r4) - subfic r8, r6, 32 - srw r3, r9, r8 C compute function return value - slw r0, r9, r6 - addi r5, r5, -1 - - andi. r10, r5, 3 C count for spill loop - beq L(e) - mtctr r10 - lwzu r28, -4(r4) - bdz L(xe0) - -L(loop0): - slw r12, r28, r6 - srw r24, r28, r8 - lwzu r28, -4(r4) - or r24, r0, r24 - stwu r24, -4(r7) - mr r0, r12 - bdnz L(loop0) C taken at most once! - -L(xe0): slw r12, r28, r6 - srw r24, r28, r8 - or r24, r0, r24 - stwu r24, -4(r7) - mr r0, r12 - -L(e): srwi r5, r5, 2 C count for unrolled loop - addi r5, r5, -1 - mtctr r5 - lwz r28, -4(r4) - lwz r29, -8(r4) - lwz r30, -12(r4) - lwzu r31, -16(r4) - -L(loopU): - slw r9, r28, r6 - srw r24, r28, r8 - lwz r28, -4(r4) - slw r10, r29, r6 - srw r25, r29, r8 - lwz r29, -8(r4) - slw r11, r30, r6 - srw r26, r30, r8 - lwz r30, -12(r4) - slw r12, r31, r6 - srw r27, r31, r8 - lwzu r31, -16(r4) - or r24, r0, r24 - stw r24, -4(r7) - or r25, r9, r25 - stw r25, -8(r7) - or r26, r10, r26 - stw r26, -12(r7) - or r27, r11, r27 - stwu r27, -16(r7) - mr r0, r12 - bdnz L(loopU) - - slw r9, r28, r6 - srw r24, r28, r8 - slw r10, r29, r6 - srw r25, r29, r8 - slw r11, r30, r6 - srw r26, r30, r8 - slw r12, r31, r6 - srw r27, r31, r8 - or r24, r0, r24 - stw r24, -4(r7) - or r25, r9, r25 - stw r25, -8(r7) - or r26, r10, r26 - stw r26, -12(r7) - or r27, r11, r27 - stw r27, -16(r7) - - stw r12, -20(r7) - lmw r24, 8(r1) C restore registers - addi r1, r1, 48 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/lshiftc.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/lshiftc.asm deleted file mode 100644 index b683def0d9ca40fd09f418ca856386ee1ee2053b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/lshiftc.asm +++ /dev/null @@ -1,170 +0,0 @@ -dnl PowerPC-32 mpn_lshiftc. - -dnl Copyright 1995, 1998, 2000, 2002-2005, 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 603e: ? -C 604e: 3.0 -C 75x (G3): 3.0 -C 7400,7410 (G4): 3.0 -C 7445,7455 (G4+): 2.5 -C 7447,7457 (G4+): 2.25 -C power4/ppc970: 2.5 -C power5: 2.5 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C n r5 -C cnt r6 - -ASM_START() -PROLOGUE(mpn_lshiftc) - cmpwi cr0, r5, 30 C more than 30 limbs? - slwi r0, r5, 2 - add r4, r4, r0 C make r4 point at end of s1 - add r7, r3, r0 C make r7 point at end of res - bgt L(BIG) C branch if more than 12 limbs - - mtctr r5 C copy size into CTR - subfic r8, r6, 32 - lwzu r11, -4(r4) C load first s1 limb - srw r3, r11, r8 C compute function return value - bdz L(end1) - -L(oop): lwzu r10, -4(r4) - slw r9, r11, r6 - srw r12, r10, r8 - nor r9, r9, r12 - stwu r9, -4(r7) - bdz L(end2) - lwzu r11, -4(r4) - slw r9, r10, r6 - srw r12, r11, r8 - nor r9, r9, r12 - stwu r9, -4(r7) - bdnz L(oop) - -L(end1): - slw r0, r11, r6 - nor r0, r0, r0 - stw r0, -4(r7) - blr -L(end2): - slw r0, r10, r6 - nor r0, r0, r0 - stw r0, -4(r7) - blr - -L(BIG): - stwu r1, -48(r1) - stmw r24, 8(r1) C save registers we are supposed to preserve - lwzu r9, -4(r4) - subfic r8, r6, 32 - srw r3, r9, r8 C compute function return value - slw r0, r9, r6 - addi r5, r5, -1 - - andi. r10, r5, 3 C count for spill loop - beq L(e) - mtctr r10 - lwzu r28, -4(r4) - bdz L(xe0) - -L(loop0): - slw r12, r28, r6 - srw r24, r28, r8 - lwzu r28, -4(r4) - nor r24, r0, r24 - stwu r24, -4(r7) - mr r0, r12 - bdnz L(loop0) C taken at most once! - -L(xe0): slw r12, r28, r6 - srw r24, r28, r8 - nor r24, r0, r24 - stwu r24, -4(r7) - mr r0, r12 - -L(e): srwi r5, r5, 2 C count for unrolled loop - addi r5, r5, -1 - mtctr r5 - lwz r28, -4(r4) - lwz r29, -8(r4) - lwz r30, -12(r4) - lwzu r31, -16(r4) - -L(loopU): - slw r9, r28, r6 - srw r24, r28, r8 - lwz r28, -4(r4) - slw r10, r29, r6 - srw r25, r29, r8 - lwz r29, -8(r4) - slw r11, r30, r6 - srw r26, r30, r8 - lwz r30, -12(r4) - slw r12, r31, r6 - srw r27, r31, r8 - lwzu r31, -16(r4) - nor r24, r0, r24 - stw r24, -4(r7) - nor r25, r9, r25 - stw r25, -8(r7) - nor r26, r10, r26 - stw r26, -12(r7) - nor r27, r11, r27 - stwu r27, -16(r7) - mr r0, r12 - bdnz L(loopU) - - slw r9, r28, r6 - srw r24, r28, r8 - slw r10, r29, r6 - srw r25, r29, r8 - slw r11, r30, r6 - srw r26, r30, r8 - slw r12, r31, r6 - srw r27, r31, r8 - nor r24, r0, r24 - stw r24, -4(r7) - nor r25, r9, r25 - stw r25, -8(r7) - nor r26, r10, r26 - stw r26, -12(r7) - nor r27, r11, r27 - stw r27, -16(r7) - nor r12, r12, r12 - stw r12, -20(r7) - lmw r24, 8(r1) C restore registers - addi r1, r1, 48 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/mod_34lsub1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/mod_34lsub1.asm deleted file mode 100644 index 6d7fe4d0890c474ada4ed984cf0154c57515a644..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/mod_34lsub1.asm +++ /dev/null @@ -1,145 +0,0 @@ -dnl PowerPC-32 mpn_mod_34lsub1 -- mpn remainder mod 2^24-1. - -dnl Copyright 2002, 2003, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C 603e: ? -C 604e: 3 -C 75x (G3): 3 -C 7400,7410 (G4): 3 -C 744x,745x (G4+): 3 -C power4/ppc970: 2.5 -C power5: 2.5 - -C mp_limb_t mpn_mod_34lsub1 (mp_srcptr src, mp_size_t size) -C -C There seems no need to schedule the loads back, the code is still 3.0 c/l -C on 750/7400 no matter where they're placed. -C -C Alternatives: -C -C Fetching half words would allow add instead for accumulating, instead of -C adde and its serialization. An outer loop would be required though, since -C 2^16 halfwords can overflow. lhz+add would be 2.0 c/l, but if there's -C also a bdz or bdnz for each and a pointer update say every three limbs -C then the total would be 2.67 c/l which isn't much faster than the current -C simpler code. - -ASM_START() -PROLOGUE(mpn_mod_34lsub1) - - C r3 src - C r4 size - - mtctr r4 - addic r6, r3, 8 C &src[2], and clear CA - - lwz r3, 0(r3) C acc0 = src[0] - bdz L(done) - - lwz r4, -4(r6) C acc1 = src[1] - bdz L(two) - - lwz r5, 0(r6) C acc2 = src[2] - lis r7, 0 C no carry if just three limbs - - bdz L(three) - lis r7, 1 C 0x10000 carry pos - -L(top): - C r3 acc0 - C r4 acc1 - C r5 acc2 - C r6 src, incrementing - C r7 carry pos - - lwz r0, 4(r6) - adde r3, r3, r0 - bdz L(end0) - - lwz r0, 8(r6) - adde r4, r4, r0 - bdz L(end1) - - lwzu r0, 12(r6) - adde r5, r5, r0 - bdnz L(top) - - - srwi r7, r7, 8 -L(end0): - srwi r7, r7, 8 -L(end1): - subfe r0, r0, r0 C -1 if not CA - - andc r7, r7, r0 C final carry, 0x10000, 0x100, 1 or 0 -L(three): - rlwinm r6, r3, 0,8,31 C acc0 low - - add r7, r7, r6 - rlwinm r6, r3, 8,24,31 C acc0 high - - add r7, r7, r6 - rlwinm r6, r4, 8,8,23 C acc1 low - - add r7, r7, r6 - rlwinm r6, r4, 16,16,31 C acc1 high - - add r7, r7, r6 - rlwinm r6, r5, 16,8,15 C acc2 low - - add r7, r7, r6 - rlwinm r6, r5, 24,8,31 C acc2 high - - add r3, r7, r6 - -L(done): - blr - -L(two): - C r3 acc0 - C r4 acc1 - - rlwinm r5, r3, 8,24,31 C acc0 high - rlwinm r3, r3, 0,8,31 C acc0 low - - add r3, r3, r5 C acc0 high + low - rlwinm r5, r4, 16,16,31 C acc1 high - - add r3, r3, r5 C add acc1 high - rlwinm r5, r4, 8,8,23 C acc1 low - - add r3, r3, r5 C add acc1 low - - blr - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/mode1o.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/mode1o.asm deleted file mode 100644 index e8a6b5e28ad9a14a8654c83f6848020d8a88f9a1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/mode1o.asm +++ /dev/null @@ -1,127 +0,0 @@ -dnl PowerPC-32 mpn_modexact_1_odd -- mpn by limb exact remainder. - -dnl Copyright 2002, 2003, 2005, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C 603e: ? -C 604e: 6.0 -C 75x (G3): 6.0-13.0, depending on divisor -C 7400,7410 (G4): 6.0-13.0, depending on divisor -C 744x,745x (G4+): 8.0-10.0, depending on divisor -C power4/ppc970: 12.0 -C power5: 12.0 - - -C mp_limb_t mpn_modexact_1_odd (mp_srcptr src, mp_size_t size, -C mp_limb_t divisor); -C mp_limb_t mpn_modexact_1c_odd (mp_srcptr src, mp_size_t size, -C mp_limb_t divisor, mp_limb_t carry); -C -C For PIC, the inverse is established arithmetically since it measures about -C 5 cycles faster than the nonsense needed to access binvert_limb_table in -C SVR4 or Darwin style PIC. AIX might be better, since it avoids bl/mflr to -C get at the GOT/TOC/whatever. -C -C Using divwu for size==1 measured about 10 cycles slower on 604e, or about -C 3-5 cycles faster on 750. For now it doesn't seem worth bothering with. -C -C The loop allows an early-out on mullw for the inverse, and on mulhwu for -C the divisor. So the fastest is for instance divisor==1 (inverse==-1), and -C the slowest is anything giving a full 32-bits in both, such as -C divisor==0xDEADBEEF (inverse==0x904B300F). These establish the stated -C range above for 750 and 7400. - - -ASM_START() - -EXTERN(binvert_limb_table) - -PROLOGUE(mpn_modexact_1_odd) - li r6, 0 - -PROLOGUE(mpn_modexact_1c_odd) - - mtctr r4 C size - -ifdef(`PIC_SLOW',` -C Load from our table with PIC is so slow on Linux and Darwin that we avoid it - rlwinm r7, r5, 1,28,28 C (divisor << 1) & 8 - rlwinm r8, r5, 2,28,28 C (divisor << 2) & 8 - xor r7, r7, r8 C ((divisor << 1) ^ (divisor << 2)) & 8 - rlwinm r4, r5, 0,28,31 C divisor low 4 bits, speedup mullw - xor r4, r4, r7 C inverse, 4 bits - mullw r7, r4, r4 C i*i - slwi r4, r4, 1 C 2*i - rlwinm r8, r5, 0,24,31 C divisor low 8 bits, speedup mullw - mullw r7, r7, r8 C i*i*d - sub r4, r4, r7 C inverse, 8 bits -',` - LEA( r7, binvert_limb_table) - rlwinm r4, r5, 31,25,31 C (divisor/2) & 0x7F - lbzx r4, r4,r7 C inverse, 8 bits -') - - mullw r7, r4, r4 C i*i - slwi r4, r4, 1 C 2*i - mullw r7, r5, r7 C i*i*d [i*i is 16 bits, so second operand] - sub r4, r4, r7 C inverse, 16 bits - mullw r7, r4, r4 C i*i - slwi r4, r4, 1 C 2*i - mullw r7, r7, r5 C i*i*d - lwz r0, 0(r3) C src[0] - sub r4, r4, r7 C inverse, 32 bits - subfc r7, r6, r0 C l = src[0] - carry - - mullw r7, r7, r4 C q = l * inverse - bdz L(one) - - lwzu r0, 4(r3) C src[1] - mulhwu r6, r7, r5 C carry = high(q*divisor) - subfe r7, r6, r0 C l = src[1] - carry - bdz L(two) - -L(top): - mullw r7, r7, r4 C q = l * inverse - lwzu r0, 4(r3) C src[i] - mulhwu r6, r7, r5 C carry = high(q*divisor) - subfe r7, r6, r0 C l = src[i] - carry - bdnz L(top) - -L(two): mullw r7, r7, r4 C q = l * inverse -L(one): subfe r3, r3, r3 C ca 0 or -1 - mulhwu r6, r7, r5 C carry = high(q*divisor) - subf r3, r3, r6 C carry + ca - blr - -EPILOGUE(mpn_modexact_1c_odd) -EPILOGUE(mpn_modexact_1_odd) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/mul_1.asm deleted file mode 100644 index e42087cfa8b2bcb9bdd9bea706d741575357c9ad..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/mul_1.asm +++ /dev/null @@ -1,101 +0,0 @@ -dnl PowerPC-32 mpn_mul_1 -- Multiply a limb vector with a limb and store the -dnl result in a second limb vector. - -dnl Copyright 1995, 1997, 2000, 2002, 2003, 2005 Free Software Foundation, -dnl Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 603e: ? -C 604e: 4.0 -C 75x (G3): 4.5-11 -C 7400,7410 (G4): 4.5-11 -C 744x,745x (G4+): 6.0 -C power4/ppc970: 6.0 -C power5: 5.63 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C n r5 -C vl r6 - -ASM_START() -PROLOGUE(mpn_mul_1) - mtctr r5 - addi r3,r3,-4 C adjust res_ptr, it's offset before it's used - li r12,0 C clear upper product reg - addic r0,r0,0 C clear cy -C Start software pipeline - lwz r8,0(r4) - bdz L(end3) - lwzu r9,4(r4) - mullw r11,r8,r6 - mulhwu r0,r8,r6 - bdz L(end1) -C Software pipelined main loop -L(loop): - lwz r8,4(r4) - mullw r10,r9,r6 - adde r5,r11,r12 - mulhwu r12,r9,r6 - stw r5,4(r3) - bdz L(end2) - lwzu r9,8(r4) - mullw r11,r8,r6 - adde r7,r10,r0 - mulhwu r0,r8,r6 - stwu r7,8(r3) - bdnz L(loop) -C Finish software pipeline -L(end1): - mullw r10,r9,r6 - adde r5,r11,r12 - mulhwu r12,r9,r6 - stw r5,4(r3) - adde r7,r10,r0 - stwu r7,8(r3) - addze r3,r12 - blr -L(end2): - mullw r11,r8,r6 - adde r7,r10,r0 - mulhwu r0,r8,r6 - stwu r7,8(r3) - adde r5,r11,r12 - stw r5,4(r3) - addze r3,r0 - blr -L(end3): - mullw r11,r8,r6 - stw r11,4(r3) - mulhwu r3,r8,r6 - blr -EPILOGUE(mpn_mul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p3-p7/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p3-p7/aors_n.asm deleted file mode 100644 index 3b6685e70ccf02d4269c7296504f021a764b0ffd..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p3-p7/aors_n.asm +++ /dev/null @@ -1,187 +0,0 @@ -dnl PowerPC-32 mpn_add_n/mpn_sub_n -- mpn addition and subtraction. - -dnl Copyright 1999-2001, 2003-2005, 2007, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 1.5 -C POWER4/PPC970 2 -C POWER5 2 -C POWER6 2.78 -C POWER7 2.15-2.87 - -C This code is based on powerpc64/aors_n.asm. - -C INPUT PARAMETERS -C rp r3 -C up r4 -C vp r5 -C n r6 - -ifdef(`OPERATION_add_n',` - define(ADDSUBC, adde) - define(ADDSUB, addc) - define(func, mpn_add_n) - define(func_nc, mpn_add_nc) - define(GENRVAL, `addi r3, r3, 1') - define(SETCBR, `addic r0, $1, -1') - define(CLRCB, `addic r0, r0, 0') -') -ifdef(`OPERATION_sub_n',` - define(ADDSUBC, subfe) - define(ADDSUB, subfc) - define(func, mpn_sub_n) - define(func_nc, mpn_sub_nc) - define(GENRVAL, `neg r3, r3') - define(SETCBR, `subfic r0, $1, 0') - define(CLRCB, `addic r0, r1, -1') -') - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc) - -ASM_START() -PROLOGUE(func_nc) - SETCBR(r7) - b L(ent) -EPILOGUE() - -PROLOGUE(func) - CLRCB -L(ent): stwu r1, -32(r1) - rlwinm. r0, r6, 0,30,31 C r0 = n & 3, set cr0 - cmpwi cr6, r0, 2 - stw r28, 8(r1) - addi r6, r6, 3 C compute count... - stw r29, 12(r1) - srwi r6, r6, 2 C ...for ctr - stw r30, 16(r1) - mtctr r6 C copy count into ctr - stw r31, 20(r1) - beq cr0, L(b00) - blt cr6, L(b01) - beq cr6, L(b10) - -L(b11): lwz r8, 0(r4) C load s1 limb - lwz r9, 0(r5) C load s2 limb - lwz r10, 4(r4) C load s1 limb - lwz r11, 4(r5) C load s2 limb - lwz r12, 8(r4) C load s1 limb - addi r4, r4, 12 - lwz r0, 8(r5) C load s2 limb - addi r5, r5, 12 - ADDSUBC r29, r9, r8 - ADDSUBC r30, r11, r10 - ADDSUBC r31, r0, r12 - stw r29, 0(r3) - stw r30, 4(r3) - stw r31, 8(r3) - addi r3, r3, 12 - bdnz L(go) - b L(ret) - -L(b01): lwz r12, 0(r4) C load s1 limb - addi r4, r4, 4 - lwz r0, 0(r5) C load s2 limb - addi r5, r5, 4 - ADDSUBC r31, r0, r12 C add - stw r31, 0(r3) - addi r3, r3, 4 - bdnz L(go) - b L(ret) - -L(b10): lwz r10, 0(r4) C load s1 limb - lwz r11, 0(r5) C load s2 limb - lwz r12, 4(r4) C load s1 limb - addi r4, r4, 8 - lwz r0, 4(r5) C load s2 limb - addi r5, r5, 8 - ADDSUBC r30, r11, r10 C add - ADDSUBC r31, r0, r12 C add - stw r30, 0(r3) - stw r31, 4(r3) - addi r3, r3, 8 - bdnz L(go) - b L(ret) - -L(b00): C INITCY C clear/set cy -L(go): lwz r6, 0(r4) C load s1 limb - lwz r7, 0(r5) C load s2 limb - lwz r8, 4(r4) C load s1 limb - lwz r9, 4(r5) C load s2 limb - lwz r10, 8(r4) C load s1 limb - lwz r11, 8(r5) C load s2 limb - lwz r12, 12(r4) C load s1 limb - lwz r0, 12(r5) C load s2 limb - bdz L(end) - - addi r4, r4, 16 - addi r5, r5, 16 - - ALIGN(16) -L(top): ADDSUBC r28, r7, r6 - lwz r6, 0(r4) C load s1 limb - lwz r7, 0(r5) C load s2 limb - ADDSUBC r29, r9, r8 - lwz r8, 4(r4) C load s1 limb - lwz r9, 4(r5) C load s2 limb - ADDSUBC r30, r11, r10 - lwz r10, 8(r4) C load s1 limb - lwz r11, 8(r5) C load s2 limb - ADDSUBC r31, r0, r12 - lwz r12, 12(r4) C load s1 limb - lwz r0, 12(r5) C load s2 limb - stw r28, 0(r3) - addi r4, r4, 16 - stw r29, 4(r3) - addi r5, r5, 16 - stw r30, 8(r3) - stw r31, 12(r3) - addi r3, r3, 16 - bdnz L(top) C decrement ctr and loop back - -L(end): ADDSUBC r28, r7, r6 - ADDSUBC r29, r9, r8 - ADDSUBC r30, r11, r10 - ADDSUBC r31, r0, r12 - stw r28, 0(r3) - stw r29, 4(r3) - stw r30, 8(r3) - stw r31, 12(r3) - -L(ret): - lwz r28, 8(r1) - lwz r29, 12(r1) - subfe r3, r0, r0 C -cy - lwz r30, 16(r1) - GENRVAL - lwz r31, 20(r1) - addi r1, r1, 32 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p3/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p3/gmp-mparam.h deleted file mode 100644 index 33826956a2effea4cabeb67d8c4587b24e86083d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p3/gmp-mparam.h +++ /dev/null @@ -1,155 +0,0 @@ -/* PowerPC-32 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2004, 2008-2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 450 MHz POWER3 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1P_METHOD 2 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 3 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 2 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 12 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 18 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 8 -#define USE_PREINV_DIVREM_1 1 -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ - -#define MUL_TOOM22_THRESHOLD 10 -#define MUL_TOOM33_THRESHOLD 38 -#define MUL_TOOM44_THRESHOLD 58 -#define MUL_TOOM6H_THRESHOLD 129 -#define MUL_TOOM8H_THRESHOLD 212 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 65 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 63 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 59 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 64 - -#define SQR_BASECASE_THRESHOLD 0 /* always */ -#define SQR_TOOM2_THRESHOLD 14 -#define SQR_TOOM3_THRESHOLD 53 -#define SQR_TOOM4_THRESHOLD 76 -#define SQR_TOOM6_THRESHOLD 106 -#define SQR_TOOM8_THRESHOLD 284 - -#define MULMOD_BNM1_THRESHOLD 9 -#define SQRMOD_BNM1_THRESHOLD 9 - -#define MUL_FFT_MODF_THRESHOLD 220 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 220, 5}, { 13, 6}, { 7, 5}, { 15, 6}, \ - { 9, 5}, { 19, 6}, { 13, 7}, { 7, 6}, \ - { 16, 7}, { 13, 8}, { 7, 7}, { 19, 8}, \ - { 11, 7}, { 23, 9}, { 7, 8}, { 15, 7}, \ - { 33, 8}, { 23, 9}, { 15, 8}, { 35, 9}, \ - { 23,10}, { 15, 9}, { 31, 8}, { 67, 9}, \ - { 39, 8}, { 79, 9}, { 47,10}, { 31, 9}, \ - { 63, 8}, { 127, 9}, { 71, 8}, { 143, 9}, \ - { 79,10}, { 47,11}, { 31,10}, { 63, 9}, \ - { 127, 8}, { 255, 9}, { 143,10}, { 79, 9}, \ - { 159, 8}, { 319, 9}, { 175, 8}, { 351,10}, \ - { 95, 9}, { 191, 8}, { 383,10}, { 111,11}, \ - { 63,10}, { 127, 9}, { 255,10}, { 143, 9}, \ - { 287, 8}, { 575,10}, { 159, 9}, { 319,10}, \ - { 175, 9}, { 351,11}, { 95,10}, { 191, 9}, \ - { 383,10}, { 207, 9}, { 415,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,10}, { 287, 9}, \ - { 575,11}, { 159,10}, { 351, 9}, { 703, 8}, \ - { 1407,11}, { 191,10}, { 415,11}, { 223,10}, \ - { 447, 9}, { 895,12}, { 4096,13}, { 8192,14}, \ - { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 82 -#define MUL_FFT_THRESHOLD 2688 - -#define SQR_FFT_MODF_THRESHOLD 176 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 176, 5}, { 13, 6}, { 7, 5}, { 15, 6}, \ - { 13, 7}, { 7, 6}, { 16, 7}, { 9, 6}, \ - { 19, 7}, { 11, 6}, { 23, 7}, { 13, 8}, \ - { 7, 7}, { 19, 8}, { 11, 7}, { 23, 9}, \ - { 7, 8}, { 15, 7}, { 31, 8}, { 23, 9}, \ - { 15, 8}, { 39, 9}, { 23,10}, { 15, 9}, \ - { 31, 8}, { 63, 9}, { 39, 8}, { 79, 9}, \ - { 47, 8}, { 95,10}, { 31, 9}, { 63, 8}, \ - { 127, 9}, { 71, 8}, { 143, 7}, { 287, 6}, \ - { 575, 9}, { 79, 8}, { 159,10}, { 47, 9}, \ - { 95,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255, 9}, { 143, 8}, { 287, 7}, { 575,10}, \ - { 79, 9}, { 159, 8}, { 319, 9}, { 175,10}, \ - { 95, 9}, { 191, 8}, { 383,10}, { 111, 9}, \ - { 223,11}, { 63,10}, { 127, 9}, { 255,10}, \ - { 143, 9}, { 287, 8}, { 575,10}, { 159, 9}, \ - { 319,10}, { 175,11}, { 95,10}, { 191, 9}, \ - { 383,10}, { 223,12}, { 63,11}, { 127,10}, \ - { 287, 9}, { 575,11}, { 159,10}, { 351, 9}, \ - { 703, 8}, { 1407,11}, { 191,10}, { 383,11}, \ - { 223,10}, { 447, 9}, { 895,12}, { 4096,13}, \ - { 8192,14}, { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 87 -#define SQR_FFT_THRESHOLD 1728 - -#define MULLO_BASECASE_THRESHOLD 2 -#define MULLO_DC_THRESHOLD 33 -#define MULLO_MUL_N_THRESHOLD 5240 - -#define DC_DIV_QR_THRESHOLD 32 -#define DC_DIVAPPR_Q_THRESHOLD 123 -#define DC_BDIV_QR_THRESHOLD 34 -#define DC_BDIV_Q_THRESHOLD 84 - -#define INV_MULMOD_BNM1_THRESHOLD 42 -#define INV_NEWTON_THRESHOLD 129 -#define INV_APPR_THRESHOLD 124 - -#define BINV_NEWTON_THRESHOLD 148 -#define REDC_1_TO_REDC_N_THRESHOLD 38 - -#define MU_DIV_QR_THRESHOLD 748 -#define MU_DIVAPPR_Q_THRESHOLD 748 -#define MUPI_DIV_QR_THRESHOLD 59 -#define MU_BDIV_QR_THRESHOLD 562 -#define MU_BDIV_Q_THRESHOLD 654 - -#define MATRIX22_STRASSEN_THRESHOLD 11 -#define HGCD_THRESHOLD 76 -#define GCD_DC_THRESHOLD 205 -#define GCDEXT_DC_THRESHOLD 174 -#define JACOBI_BASE_METHOD 1 - -#define GET_STR_DC_THRESHOLD 14 -#define GET_STR_PRECOMPUTE_THRESHOLD 27 -#define SET_STR_DC_THRESHOLD 181 -#define SET_STR_PRECOMPUTE_THRESHOLD 525 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p4/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p4/gmp-mparam.h deleted file mode 100644 index 20830a0bd728633c40c72822c5d1d49b23d67771..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p4/gmp-mparam.h +++ /dev/null @@ -1,204 +0,0 @@ -/* PowerPC-32 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2004, 2008-2011, 2014 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* 1800 MHz PowerPC-970 */ -/* FFT tuning limit = 10000000 */ -/* Generated by tuneup.c, 2014-03-12, gcc 4.0 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1P_METHOD 1 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 5 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 9 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 42 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 14 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 1 -#define DIV_QR_1_UNNORM_THRESHOLD 1 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD 45 - -#define MUL_TOOM22_THRESHOLD 20 -#define MUL_TOOM33_THRESHOLD 73 -#define MUL_TOOM44_THRESHOLD 130 -#define MUL_TOOM6H_THRESHOLD 222 -#define MUL_TOOM8H_THRESHOLD 333 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 107 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 108 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 89 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 92 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 100 - -#define SQR_BASECASE_THRESHOLD 5 -#define SQR_TOOM2_THRESHOLD 30 -#define SQR_TOOM3_THRESHOLD 85 -#define SQR_TOOM4_THRESHOLD 160 -#define SQR_TOOM6_THRESHOLD 197 -#define SQR_TOOM8_THRESHOLD 357 - -#define MULMID_TOOM42_THRESHOLD 32 - -#define MULMOD_BNM1_THRESHOLD 15 -#define SQRMOD_BNM1_THRESHOLD 16 - -#define MUL_FFT_MODF_THRESHOLD 444 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 444, 5}, { 17, 6}, { 9, 5}, { 21, 6}, \ - { 11, 5}, { 23, 6}, { 21, 7}, { 11, 6}, \ - { 24, 7}, { 13, 6}, { 28, 7}, { 15, 6}, \ - { 31, 7}, { 21, 8}, { 11, 7}, { 27, 8}, \ - { 15, 7}, { 33, 8}, { 19, 7}, { 41, 8}, \ - { 23, 7}, { 47, 8}, { 27, 9}, { 15, 8}, \ - { 39, 9}, { 23, 8}, { 51,10}, { 15, 9}, \ - { 31, 8}, { 67, 9}, { 39, 8}, { 79, 9}, \ - { 47, 8}, { 95,10}, { 31, 9}, { 63, 8}, \ - { 127, 9}, { 79,10}, { 47, 9}, { 95,11}, \ - { 31,10}, { 63, 9}, { 135,10}, { 79, 9}, \ - { 167,10}, { 95, 9}, { 191, 8}, { 383,10}, \ - { 111,11}, { 63,10}, { 127, 9}, { 255, 8}, \ - { 511,10}, { 143, 9}, { 287, 8}, { 575, 9}, \ - { 303,10}, { 159, 9}, { 319,11}, { 95,10}, \ - { 191, 9}, { 383,12}, { 63,11}, { 127,10}, \ - { 255, 9}, { 511,10}, { 271, 9}, { 543, 8}, \ - { 1087,10}, { 287, 9}, { 575,10}, { 303,11}, \ - { 159,10}, { 335, 9}, { 671, 8}, { 1343,10}, \ - { 351, 9}, { 703,11}, { 191,10}, { 383, 9}, \ - { 767,10}, { 415, 9}, { 831,11}, { 223,10}, \ - { 447,12}, { 127,11}, { 255,10}, { 543, 9}, \ - { 1087,11}, { 287,10}, { 607, 9}, { 1215,11}, \ - { 319,10}, { 671, 9}, { 1343,11}, { 351,10}, \ - { 703, 9}, { 1407,12}, { 191,11}, { 383,10}, \ - { 767,11}, { 415,10}, { 831,11}, { 447,13}, \ - { 127,12}, { 255,11}, { 543,10}, { 1087,11}, \ - { 607,10}, { 1215,12}, { 319,11}, { 671,10}, \ - { 1343,11}, { 703,10}, { 1407,11}, { 735,12}, \ - { 383,11}, { 767,10}, { 1535,11}, { 831,12}, \ - { 447,10}, { 1791,11}, { 959,13}, { 255,12}, \ - { 511,11}, { 1087,12}, { 575,11}, { 1215,10}, \ - { 2431,12}, { 639,11}, { 1343,12}, { 703,11}, \ - { 1407,13}, { 383,12}, { 767,11}, { 1535,12}, \ - { 831,11}, { 1727,10}, { 3455,11}, { 1791,12}, \ - { 959,14}, { 255,13}, { 511,12}, { 1215,11}, \ - { 2431,13}, { 639,12}, { 1471,13}, { 767,12}, \ - { 1727,11}, { 3455,12}, { 1791,14}, { 511,13}, \ - { 1151,12}, { 2431,13}, { 8192,14}, { 16384,15}, \ - { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 157 -#define MUL_FFT_THRESHOLD 6784 - -#define SQR_FFT_MODF_THRESHOLD 340 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 340, 5}, { 21, 6}, { 11, 5}, { 23, 6}, \ - { 21, 7}, { 11, 6}, { 24, 7}, { 13, 6}, \ - { 28, 7}, { 21, 8}, { 11, 7}, { 27, 8}, \ - { 15, 7}, { 33, 8}, { 19, 7}, { 39, 8}, \ - { 23, 7}, { 47, 8}, { 27, 9}, { 15, 8}, \ - { 39, 9}, { 23, 8}, { 47,10}, { 15, 9}, \ - { 31, 8}, { 63, 9}, { 39, 8}, { 79, 9}, \ - { 47,10}, { 31, 9}, { 79,10}, { 47, 9}, \ - { 95,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255, 9}, { 135,10}, { 79, 9}, { 159, 8}, \ - { 319,10}, { 95, 9}, { 191, 8}, { 383, 9}, \ - { 207,11}, { 63,10}, { 127, 9}, { 255, 8}, \ - { 511, 9}, { 271,10}, { 143, 9}, { 287, 8}, \ - { 575, 9}, { 303, 8}, { 607,10}, { 159, 9}, \ - { 319,10}, { 175,11}, { 95,10}, { 191, 9}, \ - { 383,10}, { 207,12}, { 63,11}, { 127,10}, \ - { 255, 9}, { 511,10}, { 271, 9}, { 543, 8}, \ - { 1087,10}, { 287, 9}, { 575,10}, { 303, 9}, \ - { 607,11}, { 159,10}, { 319, 9}, { 639,10}, \ - { 335, 9}, { 671,10}, { 351, 9}, { 703,11}, \ - { 191,10}, { 383, 9}, { 767,10}, { 415, 9}, \ - { 831,11}, { 223,10}, { 447,12}, { 127,11}, \ - { 255,10}, { 543, 9}, { 1087,11}, { 287,10}, \ - { 607, 9}, { 1215,11}, { 319,10}, { 671,11}, \ - { 351,10}, { 703,12}, { 191,11}, { 383,10}, \ - { 767,11}, { 415,10}, { 831,11}, { 479,13}, \ - { 127,12}, { 255,11}, { 543,10}, { 1087,11}, \ - { 607,10}, { 1215,12}, { 319,11}, { 671,10}, \ - { 1343,11}, { 703,10}, { 1407,11}, { 735,12}, \ - { 383,11}, { 831,12}, { 447,11}, { 959,13}, \ - { 255,12}, { 511,11}, { 1087,12}, { 575,11}, \ - { 1215,12}, { 639,11}, { 1343,12}, { 703,11}, \ - { 1407,13}, { 383,12}, { 831,11}, { 1727,12}, \ - { 959,14}, { 255,13}, { 511,12}, { 1215,13}, \ - { 639,12}, { 1471,13}, { 767,12}, { 1727,13}, \ - { 895,12}, { 1919,14}, { 511,13}, { 1023,12}, \ - { 2111,13}, { 1151,12}, { 2431,13}, { 8192,14}, \ - { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 150 -#define SQR_FFT_THRESHOLD 4736 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 55 -#define MULLO_MUL_N_THRESHOLD 13463 - -#define DC_DIV_QR_THRESHOLD 50 -#define DC_DIVAPPR_Q_THRESHOLD 196 -#define DC_BDIV_QR_THRESHOLD 51 -#define DC_BDIV_Q_THRESHOLD 166 - -#define INV_MULMOD_BNM1_THRESHOLD 50 -#define INV_NEWTON_THRESHOLD 226 -#define INV_APPR_THRESHOLD 202 - -#define BINV_NEWTON_THRESHOLD 228 -#define REDC_1_TO_REDC_N_THRESHOLD 67 - -#define MU_DIV_QR_THRESHOLD 1187 -#define MU_DIVAPPR_Q_THRESHOLD 1308 -#define MUPI_DIV_QR_THRESHOLD 114 -#define MU_BDIV_QR_THRESHOLD 998 -#define MU_BDIV_Q_THRESHOLD 1142 - -#define POWM_SEC_TABLE 3,28,78,480,1099 - -#define MATRIX22_STRASSEN_THRESHOLD 9 -#define HGCD_THRESHOLD 93 -#define HGCD_APPR_THRESHOLD 109 -#define HGCD_REDUCE_THRESHOLD 2479 -#define GCD_DC_THRESHOLD 379 -#define GCDEXT_DC_THRESHOLD 273 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 11 -#define GET_STR_PRECOMPUTE_THRESHOLD 24 -#define SET_STR_DC_THRESHOLD 381 -#define SET_STR_PRECOMPUTE_THRESHOLD 1002 - -#define FAC_DSC_THRESHOLD 179 -#define FAC_ODD_THRESHOLD 28 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p5/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p5/gmp-mparam.h deleted file mode 100644 index faa1e81da41bdb5203e81e0bf9ee16cf2c82be09..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p5/gmp-mparam.h +++ /dev/null @@ -1,156 +0,0 @@ -/* PowerPC-32 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2004, 2008-2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 1650 MHz POWER5 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1P_METHOD 1 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 8 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 6 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 9 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 50 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 18 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD 61 - -#define MUL_TOOM22_THRESHOLD 22 -#define MUL_TOOM33_THRESHOLD 57 -#define MUL_TOOM44_THRESHOLD 130 -#define MUL_TOOM6H_THRESHOLD 189 -#define MUL_TOOM8H_THRESHOLD 309 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 89 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 99 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 83 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 88 - -#define SQR_BASECASE_THRESHOLD 6 -#define SQR_TOOM2_THRESHOLD 40 -#define SQR_TOOM3_THRESHOLD 77 -#define SQR_TOOM4_THRESHOLD 124 -#define SQR_TOOM6_THRESHOLD 140 -#define SQR_TOOM8_THRESHOLD 238 - -#define MULMID_TOOM42_THRESHOLD 40 - -#define MULMOD_BNM1_THRESHOLD 15 -#define SQRMOD_BNM1_THRESHOLD 16 - -#define POWM_SEC_TABLE 4,29,252,840,2080 - -#define MUL_FFT_MODF_THRESHOLD 412 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 412, 5}, { 21, 6}, { 11, 5}, { 23, 6}, \ - { 12, 5}, { 25, 6}, { 21, 7}, { 11, 6}, \ - { 25, 7}, { 13, 6}, { 27, 7}, { 21, 8}, \ - { 11, 7}, { 27, 8}, { 15, 7}, { 33, 8}, \ - { 19, 7}, { 39, 8}, { 23, 7}, { 47, 8}, \ - { 27, 9}, { 15, 8}, { 39, 9}, { 23, 8}, \ - { 51,10}, { 15, 9}, { 31, 8}, { 67, 9}, \ - { 39, 8}, { 79, 9}, { 55,10}, { 31, 9}, \ - { 79,10}, { 47, 9}, { 95,11}, { 31,10}, \ - { 63, 9}, { 135,10}, { 79, 9}, { 159,10}, \ - { 95,11}, { 63,10}, { 127, 9}, { 255,10}, \ - { 143, 9}, { 287,10}, { 159,11}, { 95,10}, \ - { 191,12}, { 63,11}, { 127,10}, { 255, 9}, \ - { 511,10}, { 271, 9}, { 543,10}, { 287,11}, \ - { 159,10}, { 335, 9}, { 671,10}, { 351, 9}, \ - { 703,11}, { 191,10}, { 383, 9}, { 767,10}, \ - { 415, 9}, { 831,11}, { 223,12}, { 4096,13}, \ - { 8192,14}, { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 71 -#define MUL_FFT_THRESHOLD 4736 - -#define SQR_FFT_MODF_THRESHOLD 340 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 340, 5}, { 21, 6}, { 11, 5}, { 23, 6}, \ - { 21, 7}, { 11, 6}, { 24, 7}, { 13, 6}, \ - { 27, 7}, { 21, 8}, { 11, 7}, { 27, 8}, \ - { 15, 7}, { 33, 8}, { 19, 7}, { 39, 8}, \ - { 23, 7}, { 47, 8}, { 27, 9}, { 15, 8}, \ - { 39, 9}, { 23, 8}, { 47,10}, { 15, 9}, \ - { 31, 8}, { 67, 9}, { 47,10}, { 31, 9}, \ - { 71,10}, { 47,11}, { 31,10}, { 63, 9}, \ - { 127, 8}, { 255, 9}, { 135,10}, { 79, 9}, \ - { 159,10}, { 95, 9}, { 191,11}, { 63,10}, \ - { 127, 9}, { 255, 8}, { 511, 9}, { 271,10}, \ - { 143, 9}, { 287, 8}, { 575, 9}, { 303,10}, \ - { 159,11}, { 95,10}, { 191,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,10}, { 271, 9}, \ - { 543,10}, { 287, 9}, { 575,10}, { 303,11}, \ - { 159,10}, { 319, 9}, { 639,10}, { 335, 9}, \ - { 671,10}, { 351,11}, { 191,10}, { 383, 9}, \ - { 767,10}, { 415,11}, { 223,10}, { 447,12}, \ - { 4096,13}, { 8192,14}, { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 76 -#define SQR_FFT_THRESHOLD 3712 - -#define MULLO_BASECASE_THRESHOLD 2 -#define MULLO_DC_THRESHOLD 68 -#define MULLO_MUL_N_THRESHOLD 9236 - -#define DC_DIV_QR_THRESHOLD 69 -#define DC_DIVAPPR_Q_THRESHOLD 220 -#define DC_BDIV_QR_THRESHOLD 75 -#define DC_BDIV_Q_THRESHOLD 188 - -#define INV_MULMOD_BNM1_THRESHOLD 54 -#define INV_NEWTON_THRESHOLD 230 -#define INV_APPR_THRESHOLD 230 - -#define BINV_NEWTON_THRESHOLD 278 -#define REDC_1_TO_REDC_N_THRESHOLD 87 - -#define MU_DIV_QR_THRESHOLD 1210 -#define MU_DIVAPPR_Q_THRESHOLD 1308 -#define MUPI_DIV_QR_THRESHOLD 106 -#define MU_BDIV_QR_THRESHOLD 1017 -#define MU_BDIV_Q_THRESHOLD 1210 - -#define MATRIX22_STRASSEN_THRESHOLD 14 -#define HGCD_THRESHOLD 110 -#define HGCD_APPR_THRESHOLD 138 -#define HGCD_REDUCE_THRESHOLD 2578 -#define GCD_DC_THRESHOLD 408 -#define GCDEXT_DC_THRESHOLD 298 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 13 -#define GET_STR_PRECOMPUTE_THRESHOLD 24 -#define SET_STR_DC_THRESHOLD 527 -#define SET_STR_PRECOMPUTE_THRESHOLD 1090 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p6/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p6/gmp-mparam.h deleted file mode 100644 index c9504b63b3134a2d2a15a0e519df9eb345182c99..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p6/gmp-mparam.h +++ /dev/null @@ -1,165 +0,0 @@ -/* PowerPC-32 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2004, 2008-2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 3500 MHz POWER6 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1P_METHOD 2 -#define MOD_1_NORM_THRESHOLD 3 -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 3 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 3 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD MP_SIZE_T_MAX -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 8 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ - -#define MUL_TOOM22_THRESHOLD 19 -#define MUL_TOOM33_THRESHOLD 55 -#define MUL_TOOM44_THRESHOLD 88 -#define MUL_TOOM6H_THRESHOLD 137 -#define MUL_TOOM8H_THRESHOLD 181 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 57 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 56 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 57 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 56 - -#define SQR_BASECASE_THRESHOLD 0 /* always */ -#define SQR_TOOM2_THRESHOLD 30 -#define SQR_TOOM3_THRESHOLD 56 -#define SQR_TOOM4_THRESHOLD 130 -#define SQR_TOOM6_THRESHOLD 189 -#define SQR_TOOM8_THRESHOLD 296 - -#define MULMID_TOOM42_THRESHOLD 26 - -#define MULMOD_BNM1_THRESHOLD 7 -#define SQRMOD_BNM1_THRESHOLD 12 - -#define POWM_SEC_TABLE 2,26,127,453,1068 - -#define MUL_FFT_MODF_THRESHOLD 212 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 212, 5}, { 13, 6}, { 7, 5}, { 15, 6}, \ - { 13, 7}, { 7, 6}, { 16, 7}, { 9, 6}, \ - { 19, 7}, { 13, 8}, { 7, 7}, { 19, 8}, \ - { 11, 7}, { 25, 9}, { 7, 8}, { 15, 7}, \ - { 31, 8}, { 19, 7}, { 39, 8}, { 23, 9}, \ - { 15, 8}, { 39, 9}, { 23, 8}, { 47,10}, \ - { 15, 9}, { 31, 8}, { 63, 9}, { 39, 8}, \ - { 79, 9}, { 47,10}, { 31, 9}, { 63, 8}, \ - { 127, 9}, { 71, 8}, { 143, 7}, { 287, 9}, \ - { 79,10}, { 47,11}, { 31,10}, { 63, 9}, \ - { 127, 8}, { 255, 7}, { 511, 9}, { 143, 8}, \ - { 287,10}, { 79, 9}, { 159, 8}, { 319, 9}, \ - { 175, 8}, { 351,10}, { 95, 9}, { 191, 8}, \ - { 383, 9}, { 207,10}, { 111,11}, { 63,10}, \ - { 127, 9}, { 255, 8}, { 511,10}, { 143, 9}, \ - { 287, 8}, { 575,10}, { 159, 9}, { 319,10}, \ - { 175, 9}, { 351,11}, { 95,10}, { 191, 9}, \ - { 383,10}, { 207, 9}, { 415,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,10}, { 287, 9}, \ - { 575,11}, { 159,10}, { 351, 9}, { 703,11}, \ - { 191,10}, { 415, 9}, { 831,11}, { 223,10}, \ - { 447,12}, { 4096,13}, { 8192,14}, { 16384,15}, \ - { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 89 -#define MUL_FFT_THRESHOLD 1728 - -#define SQR_FFT_MODF_THRESHOLD 184 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 184, 5}, { 6, 4}, { 13, 5}, { 13, 6}, \ - { 7, 5}, { 15, 6}, { 13, 7}, { 7, 6}, \ - { 16, 7}, { 9, 6}, { 19, 7}, { 11, 6}, \ - { 23, 7}, { 13, 8}, { 7, 7}, { 19, 8}, \ - { 11, 7}, { 23, 9}, { 7, 8}, { 23, 9}, \ - { 15, 8}, { 39, 9}, { 23,10}, { 15, 9}, \ - { 31, 8}, { 63, 9}, { 39, 8}, { 79, 9}, \ - { 47,10}, { 31, 9}, { 63, 8}, { 127, 7}, \ - { 255, 9}, { 71, 8}, { 143, 7}, { 287, 6}, \ - { 575, 9}, { 79,10}, { 47,11}, { 31,10}, \ - { 63, 9}, { 127, 8}, { 255, 9}, { 143, 8}, \ - { 287, 7}, { 575,10}, { 79, 9}, { 159, 8}, \ - { 319, 9}, { 175, 8}, { 351,10}, { 95, 9}, \ - { 191, 8}, { 383, 9}, { 207,10}, { 111, 9}, \ - { 223,11}, { 63,10}, { 127, 9}, { 255,10}, \ - { 143, 9}, { 287, 8}, { 575,10}, { 159, 9}, \ - { 319,10}, { 175, 9}, { 351,11}, { 95,10}, \ - { 191, 9}, { 383,10}, { 207, 9}, { 415,10}, \ - { 223,12}, { 63,11}, { 127,10}, { 255, 9}, \ - { 511,10}, { 287, 9}, { 575,11}, { 159,10}, \ - { 351, 9}, { 703, 8}, { 1407,11}, { 191,10}, \ - { 415,11}, { 223,10}, { 447, 9}, { 895,12}, \ - { 4096,13}, { 8192,14}, { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 92 -#define SQR_FFT_THRESHOLD 1600 - -#define MULLO_BASECASE_THRESHOLD 2 -#define MULLO_DC_THRESHOLD 57 -#define MULLO_MUL_N_THRESHOLD 3176 - -#define DC_DIV_QR_THRESHOLD 52 -#define DC_DIVAPPR_Q_THRESHOLD 187 -#define DC_BDIV_QR_THRESHOLD 64 -#define DC_BDIV_Q_THRESHOLD 146 - -#define INV_MULMOD_BNM1_THRESHOLD 68 -#define INV_NEWTON_THRESHOLD 182 -#define INV_APPR_THRESHOLD 182 - -#define BINV_NEWTON_THRESHOLD 186 -#define REDC_1_TO_REDC_N_THRESHOLD 60 - -#define MU_DIV_QR_THRESHOLD 924 -#define MU_DIVAPPR_Q_THRESHOLD 807 -#define MUPI_DIV_QR_THRESHOLD 73 -#define MU_BDIV_QR_THRESHOLD 667 -#define MU_BDIV_Q_THRESHOLD 823 - -#define MATRIX22_STRASSEN_THRESHOLD 8 -#define HGCD_THRESHOLD 61 -#define HGCD_APPR_THRESHOLD 50 -#define HGCD_REDUCE_THRESHOLD 974 -#define GCD_DC_THRESHOLD 195 -#define GCDEXT_DC_THRESHOLD 134 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 9 -#define GET_STR_PRECOMPUTE_THRESHOLD 21 -#define SET_STR_DC_THRESHOLD 190 -#define SET_STR_PRECOMPUTE_THRESHOLD 411 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p7/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p7/gmp-mparam.h deleted file mode 100644 index 35bb61dca26074b5b06d3a0edb4889c736e19e49..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/p7/gmp-mparam.h +++ /dev/null @@ -1,159 +0,0 @@ -/* PowerPC-32 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2004, 2008-2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 3550 MHz POWER7/T4 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1P_METHOD 1 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 0 /* never mpn_mod_1_1p */ -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 34 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 15 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD 34 - -#define MUL_TOOM22_THRESHOLD 20 -#define MUL_TOOM33_THRESHOLD 89 -#define MUL_TOOM44_THRESHOLD 130 -#define MUL_TOOM6H_THRESHOLD 286 -#define MUL_TOOM8H_THRESHOLD 363 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 121 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 114 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 89 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 113 - -#define SQR_BASECASE_THRESHOLD 4 -#define SQR_TOOM2_THRESHOLD 50 -#define SQR_TOOM3_THRESHOLD 89 -#define SQR_TOOM4_THRESHOLD 154 -#define SQR_TOOM6_THRESHOLD 222 -#define SQR_TOOM8_THRESHOLD 381 - -#define MULMID_TOOM42_THRESHOLD 40 - -#define MULMOD_BNM1_THRESHOLD 18 -#define SQRMOD_BNM1_THRESHOLD 17 - -#define POWM_SEC_TABLE 4,35,225,780,2212 - -#define MUL_FFT_MODF_THRESHOLD 476 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 476, 5}, { 21, 6}, { 11, 5}, { 23, 6}, \ - { 12, 5}, { 25, 6}, { 13, 5}, { 27, 6}, \ - { 14, 5}, { 29, 6}, { 21, 7}, { 11, 6}, \ - { 25, 7}, { 13, 6}, { 29, 7}, { 15, 6}, \ - { 31, 7}, { 17, 6}, { 35, 7}, { 19, 6}, \ - { 39, 7}, { 21, 8}, { 11, 7}, { 27, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 41, 8}, \ - { 27, 9}, { 15, 8}, { 39, 9}, { 23, 8}, \ - { 51,10}, { 15, 9}, { 31, 8}, { 67, 9}, \ - { 39, 8}, { 79, 9}, { 47, 8}, { 95, 9}, \ - { 55,10}, { 31, 9}, { 79,10}, { 47, 9}, \ - { 95,11}, { 31,10}, { 63, 9}, { 135,10}, \ - { 79, 9}, { 159,10}, { 95,11}, { 63,10}, \ - { 159,11}, { 95,12}, { 63,11}, { 127,10}, \ - { 255, 9}, { 511,10}, { 271, 9}, { 543, 8}, \ - { 1087,11}, { 159,10}, { 319, 9}, { 639,10}, \ - { 335, 9}, { 671, 8}, { 1343,10}, { 351,11}, \ - { 191,10}, { 415, 9}, { 831,10}, { 431,11}, \ - { 223,12}, { 4096,13}, { 8192,14}, { 16384,15}, \ - { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 77 -#define MUL_FFT_THRESHOLD 5312 - -#define SQR_FFT_MODF_THRESHOLD 344 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 344, 5}, { 21, 6}, { 11, 5}, { 23, 6}, \ - { 21, 7}, { 11, 6}, { 24, 7}, { 13, 6}, \ - { 27, 7}, { 15, 6}, { 31, 7}, { 21, 8}, \ - { 11, 7}, { 27, 8}, { 15, 7}, { 33, 8}, \ - { 19, 7}, { 39, 8}, { 27, 9}, { 15, 8}, \ - { 39, 9}, { 23, 8}, { 47,10}, { 15, 9}, \ - { 31, 8}, { 63, 9}, { 39, 8}, { 79, 9}, \ - { 47,10}, { 31, 9}, { 79,10}, { 47,11}, \ - { 31,10}, { 63, 9}, { 135,10}, { 79, 9}, \ - { 159,10}, { 95, 9}, { 191,11}, { 63,10}, \ - { 127, 9}, { 255, 8}, { 511, 9}, { 271,10}, \ - { 143, 9}, { 287, 8}, { 575, 9}, { 303,10}, \ - { 159,11}, { 95,10}, { 191,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,10}, { 271, 9}, \ - { 543, 8}, { 1087,10}, { 287, 9}, { 575,10}, \ - { 303,11}, { 159,10}, { 319, 9}, { 639,10}, \ - { 335, 9}, { 671,10}, { 351, 9}, { 703,11}, \ - { 191,10}, { 383, 9}, { 767,10}, { 415, 9}, \ - { 831,11}, { 223,10}, { 447,12}, { 4096,13}, \ - { 8192,14}, { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 79 -#define SQR_FFT_THRESHOLD 3712 - -#define MULLO_BASECASE_THRESHOLD 2 -#define MULLO_DC_THRESHOLD 34 -#define MULLO_MUL_N_THRESHOLD 10323 - -#define DC_DIV_QR_THRESHOLD 52 -#define DC_DIVAPPR_Q_THRESHOLD 202 -#define DC_BDIV_QR_THRESHOLD 68 -#define DC_BDIV_Q_THRESHOLD 152 - -#define INV_MULMOD_BNM1_THRESHOLD 66 -#define INV_NEWTON_THRESHOLD 226 -#define INV_APPR_THRESHOLD 189 - -#define BINV_NEWTON_THRESHOLD 292 -#define REDC_1_TO_REDC_N_THRESHOLD 79 - -#define MU_DIV_QR_THRESHOLD 1442 -#define MU_DIVAPPR_Q_THRESHOLD 1442 -#define MUPI_DIV_QR_THRESHOLD 91 -#define MU_BDIV_QR_THRESHOLD 1308 -#define MU_BDIV_Q_THRESHOLD 1442 - -#define MATRIX22_STRASSEN_THRESHOLD 16 -#define HGCD_THRESHOLD 126 -#define HGCD_APPR_THRESHOLD 139 -#define HGCD_REDUCE_THRESHOLD 2681 -#define GCD_DC_THRESHOLD 573 -#define GCDEXT_DC_THRESHOLD 448 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 9 -#define GET_STR_PRECOMPUTE_THRESHOLD 20 -#define SET_STR_DC_THRESHOLD 834 -#define SET_STR_PRECOMPUTE_THRESHOLD 1888 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/powerpc-defs.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/powerpc-defs.m4 deleted file mode 100644 index 0c142a2e0cf49c75f6416b7561288dfc5220088e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/powerpc-defs.m4 +++ /dev/null @@ -1,104 +0,0 @@ -divert(-1) - -dnl m4 macros for PowerPC assembler (32 and 64 bit). - -dnl Copyright 2000, 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo) -dnl -dnl This is the same as the default in mpn/asm-defs.m4, but with ALIGN(4) -dnl not 8. -dnl -dnl 4-byte alignment is normally enough, certainly it's what gcc gives. We -dnl don't want bigger alignment within PROLOGUE since it can introduce -dnl padding into multiple-entrypoint routines, and with gas such padding is -dnl zero words, which are not valid instructions. - -define(`PROLOGUE_cpu', -m4_assert_numargs(1) -` TEXT - ALIGN(4) - GLOBL `$1' GLOBL_ATTR - TYPE(`$1',`function') -`$1'LABEL_SUFFIX') - - -dnl Usage: r0 ... r31, cr0 ... cr7 -dnl -dnl Registers names, either left as "r0" etc or mapped to plain 0 etc, -dnl according to the result of the GMP_ASM_POWERPC_REGISTERS configure -dnl test. - -ifelse(WANT_R_REGISTERS,no,` -forloop(i,0,31,`deflit(`r'i,i)') -forloop(i,0,31,`deflit(`v'i,i)') -forloop(i,0,31,`deflit(`f'i,i)') -forloop(i,0,7, `deflit(`cr'i,i)') -') - - -dnl Usage: ASSERT(cond,instructions) -dnl -dnl If WANT_ASSERT is 1, output the given instructions and expect the given -dnl flags condition to then be satisfied. For example, -dnl -dnl ASSERT(eq, `cmpwi r6, 123') -dnl -dnl The instructions can be omitted to just assert a flags condition with -dnl no extra calculation. For example, -dnl -dnl ASSERT(ne) -dnl -dnl The condition can be omitted to just output the given instructions when -dnl assertion checking is wanted. For example, -dnl -dnl ASSERT(, `mr r11, r0') -dnl -dnl Using a zero word for an illegal instruction is probably not ideal, -dnl since it marks the beginning of a traceback table in the 64-bit ABI. -dnl But assertions are only for development, so it doesn't matter too much. - -define(ASSERT, -m4_assert_numargs_range(1,2) -m4_assert_defined(`WANT_ASSERT') -`ifelse(WANT_ASSERT,1, - `C ASSERT - $2 -ifelse(`$1',,, -` b$1 L(ASSERT_ok`'ASSERT_counter) - W32 0 C assertion failed -L(ASSERT_ok`'ASSERT_counter): -define(`ASSERT_counter',incr(ASSERT_counter)) -')')') - -define(ASSERT_counter,1) - - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/rshift.asm deleted file mode 100644 index d86cdcbd6301c1b8e25d72d464d8fa3e03b69d59..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/rshift.asm +++ /dev/null @@ -1,166 +0,0 @@ -dnl PowerPC-32 mpn_rshift -- Shift a number right. - -dnl Copyright 1995, 1998, 2000, 2002-2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 603e: ? -C 604e: 3.0 -C 75x (G3): 3.0 -C 7400,7410 (G4): 3.0 -C 7445,7455 (G4+): 2.5 -C 7447,7457 (G4+): 2.25 -C power4/ppc970: 2.5 -C power5: 2.5 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C n r5 -C cnt r6 - -ASM_START() -PROLOGUE(mpn_rshift) - cmpwi cr0, r5, 30 C more than 30 limbs? - addi r7, r3, -4 C dst-4 - bgt L(BIG) C branch if more than 12 limbs - - mtctr r5 C copy size into CTR - subfic r8, r6, 32 - lwz r11, 0(r4) C load first s1 limb - slw r3, r11, r8 C compute function return value - bdz L(end1) - -L(oop): lwzu r10, 4(r4) - srw r9, r11, r6 - slw r12, r10, r8 - or r9, r9, r12 - stwu r9, 4(r7) - bdz L(end2) - lwzu r11, 4(r4) - srw r9, r10, r6 - slw r12, r11, r8 - or r9, r9, r12 - stwu r9, 4(r7) - bdnz L(oop) - -L(end1): - srw r0, r11, r6 - stw r0, 4(r7) - blr -L(end2): - srw r0, r10, r6 - stw r0, 4(r7) - blr - -L(BIG): - stwu r1, -48(r1) - stmw r24, 8(r1) C save registers we are supposed to preserve - lwz r9, 0(r4) - subfic r8, r6, 32 - slw r3, r9, r8 C compute function return value - srw r0, r9, r6 - addi r5, r5, -1 - - andi. r10, r5, 3 C count for spill loop - beq L(e) - mtctr r10 - lwzu r28, 4(r4) - bdz L(xe0) - -L(loop0): - srw r12, r28, r6 - slw r24, r28, r8 - lwzu r28, 4(r4) - or r24, r0, r24 - stwu r24, 4(r7) - mr r0, r12 - bdnz L(loop0) C taken at most once! - -L(xe0): srw r12, r28, r6 - slw r24, r28, r8 - or r24, r0, r24 - stwu r24, 4(r7) - mr r0, r12 - -L(e): srwi r5, r5, 2 C count for unrolled loop - addi r5, r5, -1 - mtctr r5 - lwz r28, 4(r4) - lwz r29, 8(r4) - lwz r30, 12(r4) - lwzu r31, 16(r4) - -L(loopU): - srw r9, r28, r6 - slw r24, r28, r8 - lwz r28, 4(r4) - srw r10, r29, r6 - slw r25, r29, r8 - lwz r29, 8(r4) - srw r11, r30, r6 - slw r26, r30, r8 - lwz r30, 12(r4) - srw r12, r31, r6 - slw r27, r31, r8 - lwzu r31, 16(r4) - or r24, r0, r24 - stw r24, 4(r7) - or r25, r9, r25 - stw r25, 8(r7) - or r26, r10, r26 - stw r26, 12(r7) - or r27, r11, r27 - stwu r27, 16(r7) - mr r0, r12 - bdnz L(loopU) - - srw r9, r28, r6 - slw r24, r28, r8 - srw r10, r29, r6 - slw r25, r29, r8 - srw r11, r30, r6 - slw r26, r30, r8 - srw r12, r31, r6 - slw r27, r31, r8 - or r24, r0, r24 - stw r24, 4(r7) - or r25, r9, r25 - stw r25, 8(r7) - or r26, r10, r26 - stw r26, 12(r7) - or r27, r11, r27 - stw r27, 16(r7) - - stw r12, 20(r7) - lmw r24, 8(r1) C restore registers - addi r1, r1, 48 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/sec_tabselect.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/sec_tabselect.asm deleted file mode 100644 index d50718e7c82035da117a4ea58b21ba1ec0903a3b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/sec_tabselect.asm +++ /dev/null @@ -1,143 +0,0 @@ -dnl PowerPC-32 mpn_sec_tabselect. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2011-2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 603e: ? -C 604e: ? -C 75x (G3): ? -C 7400,7410 (G4): 2.5 -C 744x,745x (G4+): 2.0 -C power4/ppc970: 2.0 -C power5: ? - -define(`rp', `r3') -define(`tp', `r4') -define(`n', `r5') -define(`nents', `r6') -define(`which', `r7') - -define(`i', `r8') -define(`j', `r9') -define(`stride', `r12') -define(`mask', `r11') - - -ASM_START() -PROLOGUE(mpn_sec_tabselect) - stwu r1, -32(r1) - addic. j, n, -4 C outer loop induction variable - stmw r27, 8(r1) - slwi stride, n, 2 - - blt cr0, L(outer_end) -L(outer_top): - mtctr nents - mr r10, tp - li r28, 0 - li r29, 0 - li r30, 0 - li r31, 0 - addic. j, j, -4 C outer loop induction variable - mr i, which - - ALIGN(16) -L(top): addic i, i, -1 C set carry iff i != 0 - subfe mask, mask, mask - lwz r0, 0(tp) - lwz r27, 4(tp) - and r0, r0, mask - and r27, r27, mask - or r28, r28, r0 - or r29, r29, r27 - lwz r0, 8(tp) - lwz r27, 12(tp) - and r0, r0, mask - and r27, r27, mask - or r30, r30, r0 - or r31, r31, r27 - add tp, tp, stride - bdnz L(top) - - stw r28, 0(rp) - stw r29, 4(rp) - stw r30, 8(rp) - stw r31, 12(rp) - addi tp, r10, 16 - addi rp, rp, 16 - bge cr0, L(outer_top) -L(outer_end): - - andi. r0, n, 2 - beq cr0, L(b0x) -L(b1x): mtctr nents - mr r10, tp - li r28, 0 - li r29, 0 - mr i, which - ALIGN(16) -L(tp2): addic i, i, -1 - subfe mask, mask, mask - lwz r0, 0(tp) - lwz r27, 4(tp) - and r0, r0, mask - and r27, r27, mask - or r28, r28, r0 - or r29, r29, r27 - add tp, tp, stride - bdnz L(tp2) - stw r28, 0(rp) - stw r29, 4(rp) - addi tp, r10, 8 - addi rp, rp, 8 - -L(b0x): andi. r0, n, 1 - beq cr0, L(b00) -L(b01): mtctr nents - mr r10, tp - li r28, 0 - mr i, which - ALIGN(16) -L(tp1): addic i, i, -1 - subfe mask, mask, mask - lwz r0, 0(tp) - and r0, r0, mask - or r28, r28, r0 - add tp, tp, stride - bdnz L(tp1) - stw r28, 0(rp) - -L(b00): lmw r27, 8(r1) - addi r1, r1, 32 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/sqr_diag_addlsh1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/sqr_diag_addlsh1.asm deleted file mode 100644 index f7aba33ee59249731a329ef97d84d2f77ec77ea6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/sqr_diag_addlsh1.asm +++ /dev/null @@ -1,80 +0,0 @@ -dnl PowerPC-32 mpn_sqr_diag_addlsh1. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 603e ? -C 604e ? -C 75x (G3) ? -C 7400,7410 (G4) ? -C 744x,745x (G4+) 6 -C power4/ppc970 ? -C power5 ? - -C This has been feebly optimised for 7447 but not for any other CPU. - -define(`rp', r3) -define(`tp', r4) -define(`up', r5) -define(`n', r6) - -ASM_START() -PROLOGUE(mpn_sqr_diag_addlsh1) - addi n, n, -1 - addi tp, tp, -4 - mtctr n - lwz r0, 0(up) - li r10, 0 - mullw r7, r0, r0 - stw r7, 0(rp) - mulhwu r6, r0, r0 - addic r31, r31, 0 C clear CF - - ALIGN(16) -L(top): lwzu r0, 4(up) - mullw r7, r0, r0 - lwz r8, 4(tp) - lwzu r9, 8(tp) - rlwimi r10, r8, 1,0,30 - srwi r11, r8, 31 - rlwimi r11, r9, 1,0,30 - adde r10, r10, r6 - adde r11, r11, r7 - stw r10, 4(rp) - srwi r10, r9, 31 - mulhwu r6, r0, r0 - stwu r11, 8(rp) - bdnz L(top) - - adde r10, r10, r6 - stw r10, 4(rp) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/sublsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/sublsh1_n.asm deleted file mode 100644 index 6dc6460016f9faa972727cd218d8804655e3f7b3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/sublsh1_n.asm +++ /dev/null @@ -1,101 +0,0 @@ -dnl PowerPC-32 mpn_sublsh1_n -- rp[] = up[] - (vp[] << 1) - -dnl Copyright 2003, 2005, 2007 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 603e: ? -C 604e: 4.0 -C 75x (G3): 5.0 -C 7400,7410 (G4): 5.0 -C 744x,745x (G4+): 5.0 -C power4/ppc970: 4.25 -C power5: 5.0 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C vp r5 -C n r6 - -define(`rp',`r3') -define(`up',`r4') -define(`vp',`r5') - -define(`s0',`r6') -define(`s1',`r7') -define(`u0',`r8') -define(`v0',`r10') -define(`v1',`r11') - -ASM_START() -PROLOGUE(mpn_sublsh1_n) - mtctr r6 C copy n in ctr - - lwz v0, 0(vp) C load v limb - lwz u0, 0(up) C load u limb - addic up, up, -4 C update up; set cy - addi rp, rp, -4 C update rp - slwi s1, v0, 1 - bdz L(end) C If done, skip loop - -L(loop): - lwz v1, 4(vp) C load v limb - subfe s1, s1, u0 C add limbs with cy, set cy - srwi s0, v0, 31 C shift down previous v limb - stw s1, 4(rp) C store result limb - lwzu u0, 8(up) C load u limb and update up - rlwimi s0, v1, 1, 0,30 C left shift v limb and merge with prev v limb - - bdz L(exit) C decrement ctr and exit if done - - lwzu v0, 8(vp) C load v limb and update vp - subfe s0, s0, u0 C add limbs with cy, set cy - srwi s1, v1, 31 C shift down previous v limb - stwu s0, 8(rp) C store result limb and update rp - lwz u0, 4(up) C load u limb - rlwimi s1, v0, 1, 0,30 C left shift v limb and merge with prev v limb - - bdnz L(loop) C decrement ctr and loop back - -L(end): subfe r7, s1, u0 - srwi r4, v0, 31 - stw r7, 4(rp) C store last result limb - subfze r3, r4 - neg r3, r3 - blr -L(exit): - subfe r7, s0, u0 - srwi r4, v1, 31 - stw r7, 8(rp) C store last result limb - subfze r3, r4 - neg r3, r3 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/submul_1.asm deleted file mode 100644 index 8ef37b04202402debd3463a4681ead5ec27714ae..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/submul_1.asm +++ /dev/null @@ -1,151 +0,0 @@ -dnl PowerPC-32 mpn_submul_1 -- Multiply a limb vector with a limb and subtract -dnl the result from a second limb vector. - -dnl Copyright 1995, 1997, 1998, 2000, 2002, 2005 Free Software Foundation, -dnl Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 603e: ? -C 604e: 7.5 -C 75x (G3): 9.3-15 -C 7400,7410 (G4): 9.3-15 -C 744x,745x (G4+): 10.5 -C power4/ppc970: 6.75 -C power5: 6.5 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C n r5 -C vl r6 - -C This is optimized for the PPC604. See addmul_1.asm for additional comments. - -ASM_START() -PROLOGUE(mpn_submul_1) - cmpwi cr0,r5,9 C more than 9 limbs? - bgt cr0,L(big) C branch if more than 9 limbs - - mtctr r5 - lwz r0,0(r4) - mullw r7,r0,r6 - mulhwu r10,r0,r6 - lwz r9,0(r3) - subfc r8,r7,r9 - addc r7,r7,r8 C invert cy (r7 is junk) - addi r3,r3,-4 - bdz L(end) -L(loop): - lwzu r0,4(r4) - stwu r8,4(r3) - mullw r8,r0,r6 - adde r7,r8,r10 - mulhwu r10,r0,r6 - lwz r9,4(r3) - addze r10,r10 - subfc r8,r7,r9 - addc r7,r7,r8 C invert cy (r7 is junk) - bdnz L(loop) -L(end): stw r8,4(r3) - addze r3,r10 - blr - -L(big): stwu r1,-16(r1) - addi r5,r5,-1 - stw r30,8(r1) - srwi r0,r5,2 - stw r31,12(r1) - mtctr r0 - - lwz r7,0(r4) - mullw r8,r7,r6 - mulhwu r0,r7,r6 - lwz r7,0(r3) - subfc r7,r8,r7 - addc r8,r8,r7 - stw r7,0(r3) - -L(loopU): - lwz r7,4(r4) - lwz r12,8(r4) - lwz r30,12(r4) - lwzu r31,16(r4) - mullw r8,r7,r6 - mullw r9,r12,r6 - mullw r10,r30,r6 - mullw r11,r31,r6 - adde r8,r8,r0 C add cy_limb - mulhwu r0,r7,r6 - lwz r7,4(r3) - adde r9,r9,r0 - mulhwu r0,r12,r6 - lwz r12,8(r3) - adde r10,r10,r0 - mulhwu r0,r30,r6 - lwz r30,12(r3) - adde r11,r11,r0 - mulhwu r0,r31,r6 - lwz r31,16(r3) - addze r0,r0 C new cy_limb - subfc r7,r8,r7 - stw r7,4(r3) - subfe r12,r9,r12 - stw r12,8(r3) - subfe r30,r10,r30 - stw r30,12(r3) - subfe r31,r11,r31 - stwu r31,16(r3) - subfe r11,r11,r11 C invert ... - addic r11,r11,1 C ... carry - bdnz L(loopU) - - andi. r31,r5,3 - mtctr r31 - beq cr0,L(endx) - -L(loopE): - lwzu r7,4(r4) - mullw r8,r7,r6 - adde r8,r8,r0 C add cy_limb - mulhwu r0,r7,r6 - lwz r7,4(r3) - addze r0,r0 C new cy_limb - subfc r7,r8,r7 - addc r8,r8,r7 - stwu r7,4(r3) - bdnz L(loopE) -L(endx): - addze r3,r0 - lwz r30,8(r1) - lwz r31,12(r1) - addi r1,r1,16 - blr -EPILOGUE(mpn_submul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/umul.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/umul.asm deleted file mode 100644 index a5811e1651f296b2ce84d550a56cc88e7ac84600..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/umul.asm +++ /dev/null @@ -1,50 +0,0 @@ -dnl PowerPC-32 umul_ppmm -- support for longlong.h - -dnl Copyright 2000, 2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C mp_limb_t mpn_umul_ppmm (mp_limb_t *lowptr, mp_limb_t m1, mp_limb_t m2); -C - -ASM_START() -PROLOGUE(mpn_umul_ppmm) - - C r3 lowptr - C r4 m1 - C r5 m2 - - mullw r0, r4, r5 - mulhwu r9, r4, r5 - stw r0, 0(r3) - mr r3, r9 - blr - -EPILOGUE(mpn_umul_ppmm) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/copyd.asm deleted file mode 100644 index dee7266200ec60543c0d5f37beeeb32cec2ce357..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/copyd.asm +++ /dev/null @@ -1,203 +0,0 @@ -dnl PowerPC-32/VMX and PowerPC-64/VMX mpn_copyd. - -dnl Copyright 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C 16-byte coaligned unaligned -C cycles/limb cycles/limb -C 7400,7410 (G4): 0.5 0.64 -C 744x,745x (G4+): 0.75 0.82 -C 970 (G5): 0.78 1.02 (64-bit limbs) - -C STATUS -C * Works for all sizes and alignments. - -C TODO -C * Optimize unaligned case. Some basic tests with 2-way and 4-way unrolling -C indicate that we can reach 0.56 c/l for 7400, 0.75 c/l for 745x, and 0.80 -C c/l for 970. -C * Consider using VMX instructions also for head and tail, by using some -C read-modify-write tricks. -C * The VMX code is used from the smallest sizes it handles, but measurements -C show a large speed bump at the cutoff points. Small copying (perhaps -C using some read-modify-write technique) should be optimized. -C * Make an mpn_com based on this code. - -define(`GMP_LIMB_BYTES', eval(GMP_LIMB_BITS/8)) -define(`LIMBS_PER_VR', eval(16/GMP_LIMB_BYTES)) -define(`LIMBS_PER_2VR', eval(32/GMP_LIMB_BYTES)) - - -ifelse(GMP_LIMB_BITS,32,` - define(`LIMB32',` $1') - define(`LIMB64',`') -',` - define(`LIMB32',`') - define(`LIMB64',` $1') -') - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') - -define(`us', `v4') - - -ASM_START() -PROLOGUE(mpn_copyd) - -LIMB32(`slwi. r0, n, 2 ') -LIMB64(`sldi. r0, n, 3 ') - add rp, rp, r0 - add up, up, r0 - -LIMB32(`cmpi cr7, n, 11 ') -LIMB64(`cmpdi cr7, n, 5 ') - bge cr7, L(big) - - beqlr cr0 - -C Handle small cases with plain operations - mtctr n -L(topS): -LIMB32(`lwz r0, -4(up) ') -LIMB64(`ld r0, -8(up) ') - addi up, up, -GMP_LIMB_BYTES -LIMB32(`stw r0, -4(rp) ') -LIMB64(`std r0, -8(rp) ') - addi rp, rp, -GMP_LIMB_BYTES - bdnz L(topS) - blr - -C Handle large cases with VMX operations -L(big): - addi rp, rp, -16 - addi up, up, -16 - mfspr r12, 256 - oris r0, r12, 0xf800 C Set VRSAVE bit 0-4 - mtspr 256, r0 - -LIMB32(`rlwinm. r7, rp, 30,30,31') C (rp >> 2) mod 4 -LIMB64(`rlwinm. r7, rp, 29,31,31') C (rp >> 3) mod 2 - beq L(rp_aligned) - - subf n, r7, n -L(top0): -LIMB32(`lwz r0, 12(up) ') -LIMB64(`ld r0, 8(up) ') - addi up, up, -GMP_LIMB_BYTES -LIMB32(`addic. r7, r7, -1 ') -LIMB32(`stw r0, 12(rp) ') -LIMB64(`std r0, 8(rp) ') - addi rp, rp, -GMP_LIMB_BYTES -LIMB32(`bne L(top0) ') - -L(rp_aligned): - -LIMB32(`rlwinm. r0, up, 30,30,31') C (up >> 2) mod 4 -LIMB64(`rlwinm. r0, up, 29,31,31') C (up >> 3) mod 2 - -LIMB64(`srdi r7, n, 2 ') C loop count corresponding to n -LIMB32(`srwi r7, n, 3 ') C loop count corresponding to n - mtctr r7 C copy n to count register - - li r10, -16 - - beq L(up_aligned) - - lvsl us, 0, up - - addi up, up, 16 -LIMB32(`andi. r0, n, 0x4 ') -LIMB64(`andi. r0, n, 0x2 ') - beq L(1) - lvx v0, 0, up - lvx v2, r10, up - vperm v3, v2, v0, us - stvx v3, 0, rp - addi up, up, -32 - addi rp, rp, -16 - b L(lpu) -L(1): lvx v2, 0, up - addi up, up, -16 - b L(lpu) - - ALIGN(32) -L(lpu): lvx v0, 0, up - vperm v3, v0, v2, us - stvx v3, 0, rp - lvx v2, r10, up - addi up, up, -32 - vperm v3, v2, v0, us - stvx v3, r10, rp - addi rp, rp, -32 - bdnz L(lpu) - - b L(tail) - -L(up_aligned): - -LIMB32(`andi. r0, n, 0x4 ') -LIMB64(`andi. r0, n, 0x2 ') - beq L(lpa) - lvx v0, 0, up - stvx v0, 0, rp - addi up, up, -16 - addi rp, rp, -16 - b L(lpa) - - ALIGN(32) -L(lpa): lvx v0, 0, up - lvx v1, r10, up - addi up, up, -32 - nop - stvx v0, 0, rp - stvx v1, r10, rp - addi rp, rp, -32 - bdnz L(lpa) - -L(tail): -LIMB32(`rlwinm. r7, n, 0,30,31 ') C r7 = n mod 4 -LIMB64(`rlwinm. r7, n, 0,31,31 ') C r7 = n mod 2 - beq L(ret) -LIMB32(`li r10, 12 ') -L(top2): -LIMB32(`lwzx r0, r10, up ') -LIMB64(`ld r0, 8(up) ') -LIMB32(`addic. r7, r7, -1 ') -LIMB32(`stwx r0, r10, rp ') -LIMB64(`std r0, 8(rp) ') -LIMB32(`addi r10, r10, -GMP_LIMB_BYTES') -LIMB32(`bne L(top2) ') - -L(ret): mtspr 256, r12 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/copyi.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/copyi.asm deleted file mode 100644 index 992b46873e354934f03e57fd960a4ef901175748..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/copyi.asm +++ /dev/null @@ -1,198 +0,0 @@ -dnl PowerPC-32/VMX and PowerPC-64/VMX mpn_copyi. - -dnl Copyright 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C 16-byte coaligned unaligned -C cycles/limb cycles/limb -C 7400,7410 (G4): 0.5 0.64 -C 744x,745x (G4+): 0.75 0.82 -C 970 (G5): 0.78 1.02 (64-bit limbs) - -C STATUS -C * Works for all sizes and alignments. - -C TODO -C * Optimize unaligned case. Some basic tests with 2-way and 4-way unrolling -C indicate that we can reach 0.56 c/l for 7400, 0.75 c/l for 745x, and 0.80 -C c/l for 970. -C * Consider using VMX instructions also for head and tail, by using some -C read-modify-write tricks. -C * The VMX code is used from the smallest sizes it handles, but measurements -C show a large speed bump at the cutoff points. Small copying (perhaps -C using some read-modify-write technique) should be optimized. -C * Make an mpn_com based on this code. - -define(`GMP_LIMB_BYTES', eval(GMP_LIMB_BITS/8)) -define(`LIMBS_PER_VR', eval(16/GMP_LIMB_BYTES)) -define(`LIMBS_PER_2VR', eval(32/GMP_LIMB_BYTES)) - - -ifelse(GMP_LIMB_BITS,32,` - define(`LIMB32',` $1') - define(`LIMB64',`') -',` - define(`LIMB32',`') - define(`LIMB64',` $1') -') - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') - -define(`us', `v4') - - -ASM_START() -PROLOGUE(mpn_copyi) - -LIMB32(`cmpi cr7, n, 11 ') -LIMB64(`cmpdi cr7, n, 5 ') - bge cr7, L(big) - - or. r0, n, n - beqlr cr0 - -C Handle small cases with plain operations - mtctr n -L(topS): -LIMB32(`lwz r0, 0(up) ') -LIMB64(`ld r0, 0(up) ') - addi up, up, GMP_LIMB_BYTES -LIMB32(`stw r0, 0(rp) ') -LIMB64(`std r0, 0(rp) ') - addi rp, rp, GMP_LIMB_BYTES - bdnz L(topS) - blr - -C Handle large cases with VMX operations -L(big): - mfspr r12, 256 - oris r0, r12, 0xf800 C Set VRSAVE bit 0-4 - mtspr 256, r0 - -LIMB32(`rlwinm. r7, rp, 30,30,31') C (rp >> 2) mod 4 -LIMB64(`rlwinm. r7, rp, 29,31,31') C (rp >> 3) mod 2 - beq L(rp_aligned) - - subfic r7, r7, LIMBS_PER_VR - subf n, r7, n -L(top0): -LIMB32(`lwz r0, 0(up) ') -LIMB64(`ld r0, 0(up) ') - addi up, up, GMP_LIMB_BYTES -LIMB32(`addic. r7, r7, -1 ') -LIMB32(`stw r0, 0(rp) ') -LIMB64(`std r0, 0(rp) ') - addi rp, rp, GMP_LIMB_BYTES -LIMB32(`bne L(top0) ') - -L(rp_aligned): - -LIMB32(`rlwinm. r0, up, 30,30,31') C (up >> 2) mod 4 -LIMB64(`rlwinm. r0, up, 29,31,31') C (up >> 3) mod 2 - -LIMB64(`srdi r7, n, 2 ') C loop count corresponding to n -LIMB32(`srwi r7, n, 3 ') C loop count corresponding to n - mtctr r7 C copy n to count register - - li r10, 16 - - beq L(up_aligned) - - lvsl us, 0, up - -LIMB32(`andi. r0, n, 0x4 ') -LIMB64(`andi. r0, n, 0x2 ') - beq L(1) - lvx v0, 0, up - lvx v2, r10, up - vperm v3, v0, v2, us - stvx v3, 0, rp - addi up, up, 32 - addi rp, rp, 16 - b L(lpu) -L(1): lvx v2, 0, up - addi up, up, 16 - b L(lpu) - - ALIGN(32) -L(lpu): lvx v0, 0, up - vperm v3, v2, v0, us - stvx v3, 0, rp - lvx v2, r10, up - addi up, up, 32 - vperm v3, v0, v2, us - stvx v3, r10, rp - addi rp, rp, 32 - bdnz L(lpu) - - addi up, up, -16 - b L(tail) - -L(up_aligned): - -LIMB32(`andi. r0, n, 0x4 ') -LIMB64(`andi. r0, n, 0x2 ') - beq L(lpa) - lvx v0, 0, up - stvx v0, 0, rp - addi up, up, 16 - addi rp, rp, 16 - b L(lpa) - - ALIGN(32) -L(lpa): lvx v0, 0, up - lvx v1, r10, up - addi up, up, 32 - nop - stvx v0, 0, rp - stvx v1, r10, rp - addi rp, rp, 32 - bdnz L(lpa) - -L(tail): -LIMB32(`rlwinm. r7, n, 0,30,31 ') C r7 = n mod 4 -LIMB64(`rlwinm. r7, n, 0,31,31 ') C r7 = n mod 2 - beq L(ret) -LIMB32(`li r10, 0 ') -L(top2): -LIMB32(`lwzx r0, r10, up ') -LIMB64(`ld r0, 0(up) ') -LIMB32(`addic. r7, r7, -1 ') -LIMB32(`stwx r0, r10, rp ') -LIMB64(`std r0, 0(rp) ') -LIMB32(`addi r10, r10, GMP_LIMB_BYTES') -LIMB32(`bne L(top2) ') - -L(ret): mtspr 256, r12 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/logops_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/logops_n.asm deleted file mode 100644 index d656d3b73f7bc2780cbe87dfaeabf26a13afe389..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/logops_n.asm +++ /dev/null @@ -1,310 +0,0 @@ -dnl PowerPC-32/VMX and PowerPC-64/VMX mpn_and_n, mpn_andn_n, mpn_nand_n, -dnl mpn_ior_n, mpn_iorn_n, mpn_nior_n, mpn_xor_n, mpn_xnor_n -- mpn bitwise -dnl logical operations. - -dnl Copyright 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C and,ior,andn,nior,xor iorn,xnor nand -C cycles/limb cycles/limb cycles/limb -C 7400,7410 (G4): 1.39 ? ? -C 744x,745x (G4+): 1.14 1.39 1.39 -C 970: 1.7 2.0 2.0 - -C STATUS -C * Works for all sizes and alignment for 32-bit limbs. -C * Works for n >= 4 for 64-bit limbs; untested for smaller operands. -C * Current performance makes this pointless for 970 - -C TODO -C * Might want to make variants when just one of the source operands needs -C vperm, and when neither needs it. The latter runs 50% faster on 7400. -C * Idea: If the source operands are equally aligned, we could do the logops -C first, then vperm before storing! That means we never need more than one -C vperm, ever! -C * Perhaps align `rp' after initial alignment loop? -C * Instead of having scalar code in the beginning and end, consider using -C read-modify-write vector code. -C * Software pipeline? Hopefully not too important, this is hairy enough -C already. -C * At least be more clever about operand loading, i.e., load v operands before -C u operands, since v operands are sometimes negated. - -define(`GMP_LIMB_BYTES', eval(GMP_LIMB_BITS/8)) -define(`LIMBS_PER_VR', eval(16/GMP_LIMB_BYTES)) -define(`LIMBS_PER_2VR', eval(32/GMP_LIMB_BYTES)) - -define(`vnegb', `') C default neg-before to null -define(`vnega', `') C default neg-before to null - -ifdef(`OPERATION_and_n', -` define(`func', `mpn_and_n') - define(`logopS',`and $1,$2,$3') - define(`logop', `vand $1,$2,$3')') -ifdef(`OPERATION_andn_n', -` define(`func', `mpn_andn_n') - define(`logopS',`andc $1,$2,$3') - define(`logop', `vandc $1,$2,$3')') -ifdef(`OPERATION_nand_n', -` define(`func', `mpn_nand_n') - define(`logopS',`nand $1,$2,$3') - define(`logop', `vand $1,$2,$3') - define(`vnega', `vnor $1,$2,$2')') -ifdef(`OPERATION_ior_n', -` define(`func', `mpn_ior_n') - define(`logopS',`or $1,$2,$3') - define(`logop', `vor $1,$2,$3')') -ifdef(`OPERATION_iorn_n', -` define(`func', `mpn_iorn_n') - define(`logopS',`orc $1,$2,$3') - define(`vnegb', `vnor $1,$2,$2') - define(`logop', `vor $1,$2,$3')') -ifdef(`OPERATION_nior_n', -` define(`func', `mpn_nior_n') - define(`logopS',`nor $1,$2,$3') - define(`logop', `vnor $1,$2,$3')') -ifdef(`OPERATION_xor_n', -` define(`func', `mpn_xor_n') - define(`logopS',`xor $1,$2,$3') - define(`logop', `vxor $1,$2,$3')') -ifdef(`OPERATION_xnor_n', -` define(`func',`mpn_xnor_n') - define(`logopS',`eqv $1,$2,$3') - define(`vnegb', `vnor $1,$2,$2') - define(`logop', `vxor $1,$2,$3')') - -ifelse(GMP_LIMB_BITS,`32',` - define(`LIMB32',` $1') - define(`LIMB64',`') -',` - define(`LIMB32',`') - define(`LIMB64',` $1') -') - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`vp', `r5') -define(`n', `r6') - -define(`us', `v8') -define(`vs', `v9') - -MULFUNC_PROLOGUE(mpn_and_n mpn_andn_n mpn_nand_n mpn_ior_n mpn_iorn_n mpn_nior_n mpn_xor_n mpn_xnor_n) - -ASM_START() -PROLOGUE(func) - -LIMB32(`cmpwi cr0, n, 8 ') -LIMB64(`cmpdi cr0, n, 4 ') - bge L(big) - - mtctr n - -LIMB32(`lwz r8, 0(up) ') -LIMB32(`lwz r9, 0(vp) ') -LIMB32(`logopS( r0, r8, r9) ') -LIMB32(`stw r0, 0(rp) ') -LIMB32(`bdz L(endS) ') - -L(topS): -LIMB32(`lwzu r8, 4(up) ') -LIMB64(`ld r8, 0(up) ') -LIMB64(`addi up, up, GMP_LIMB_BYTES ') -LIMB32(`lwzu r9, 4(vp) ') -LIMB64(`ld r9, 0(vp) ') -LIMB64(`addi vp, vp, GMP_LIMB_BYTES ') - logopS( r0, r8, r9) -LIMB32(`stwu r0, 4(rp) ') -LIMB64(`std r0, 0(rp) ') -LIMB64(`addi rp, rp, GMP_LIMB_BYTES ') - bdnz L(topS) -L(endS): - blr - -L(big): mfspr r12, 256 - oris r0, r12, 0xfffc C Set VRSAVE bit 0-13 FIXME - mtspr 256, r0 - -C First loop until the destination is 16-byte aligned. This will execute 0 or 1 -C times for 64-bit machines, and 0 to 3 times for 32-bit machines. - -LIMB32(`rlwinm. r0, rp, 30,30,31') C (rp >> 2) mod 4 -LIMB64(`rlwinm. r0, rp, 29,31,31') C (rp >> 3) mod 2 - beq L(aligned) - - subfic r7, r0, LIMBS_PER_VR -LIMB32(`li r10, 0 ') - subf n, r7, n -L(top0): -LIMB32(`lwz r8, 0(up) ') -LIMB64(`ld r8, 0(up) ') - addi up, up, GMP_LIMB_BYTES -LIMB32(`lwz r9, 0(vp) ') -LIMB64(`ld r9, 0(vp) ') - addi vp, vp, GMP_LIMB_BYTES -LIMB32(`addic. r7, r7, -1 ') - logopS( r0, r8, r9) -LIMB32(`stwx r0, r10, rp ') -LIMB64(`std r0, 0(rp) ') -LIMB32(`addi r10, r10, GMP_LIMB_BYTES') -LIMB32(`bne L(top0) ') - - addi rp, rp, 16 C update rp, but preserve its alignment - -L(aligned): -LIMB64(`srdi r7, n, 1 ') C loop count corresponding to n -LIMB32(`srwi r7, n, 2 ') C loop count corresponding to n - mtctr r7 C copy n to count register - - li r10, 16 - lvsl us, 0, up - lvsl vs, 0, vp - - lvx v2, 0, up - lvx v3, 0, vp - bdnz L(gt1) - lvx v0, r10, up - lvx v1, r10, vp - vperm v4, v2, v0, us - vperm v5, v3, v1, vs - vnegb( v5, v5) - logop( v6, v4, v5) - vnega( v6, v6) - stvx v6, 0, rp - addi up, up, 16 - addi vp, vp, 16 - addi rp, rp, 4 - b L(tail) - -L(gt1): addi up, up, 16 - addi vp, vp, 16 - -L(top): lvx v0, 0, up - lvx v1, 0, vp - vperm v4, v2, v0, us - vperm v5, v3, v1, vs - vnegb( v5, v5) - logop( v6, v4, v5) - vnega( v6, v6) - stvx v6, 0, rp - bdz L(end) - lvx v2, r10, up - lvx v3, r10, vp - vperm v4, v0, v2, us - vperm v5, v1, v3, vs - vnegb( v5, v5) - logop( v6, v4, v5) - vnega( v6, v6) - stvx v6, r10, rp - addi up, up, 32 - addi vp, vp, 32 - addi rp, rp, 32 - bdnz L(top) - - andi. r0, up, 15 - vxor v0, v0, v0 - beq 1f - lvx v0, 0, up -1: andi. r0, vp, 15 - vxor v1, v1, v1 - beq 1f - lvx v1, 0, vp -1: vperm v4, v2, v0, us - vperm v5, v3, v1, vs - vnegb( v5, v5) - logop( v6, v4, v5) - vnega( v6, v6) - stvx v6, 0, rp - addi rp, rp, 4 - b L(tail) - -L(end): andi. r0, up, 15 - vxor v2, v2, v2 - beq 1f - lvx v2, r10, up -1: andi. r0, vp, 15 - vxor v3, v3, v3 - beq 1f - lvx v3, r10, vp -1: vperm v4, v0, v2, us - vperm v5, v1, v3, vs - vnegb( v5, v5) - logop( v6, v4, v5) - vnega( v6, v6) - stvx v6, r10, rp - - addi up, up, 16 - addi vp, vp, 16 - addi rp, rp, 20 - -L(tail): -LIMB32(`rlwinm. r7, n, 0,30,31 ') C r7 = n mod 4 -LIMB64(`rlwinm. r7, n, 0,31,31 ') C r7 = n mod 2 - beq L(ret) - addi rp, rp, 15 -LIMB32(`rlwinm rp, rp, 0,0,27 ') -LIMB64(`rldicr rp, rp, 0,59 ') - li r10, 0 -L(top2): -LIMB32(`lwzx r8, r10, up ') -LIMB64(`ldx r8, r10, up ') -LIMB32(`lwzx r9, r10, vp ') -LIMB64(`ldx r9, r10, vp ') -LIMB32(`addic. r7, r7, -1 ') - logopS( r0, r8, r9) -LIMB32(`stwx r0, r10, rp ') -LIMB64(`std r0, 0(rp) ') -LIMB32(`addi r10, r10, GMP_LIMB_BYTES') -LIMB32(`bne L(top2) ') - -L(ret): mtspr 256, r12 - blr -EPILOGUE() - -C This works for 64-bit PowerPC, since a limb ptr can only be aligned -C in 2 relevant ways, which means we can always find a pair of aligned -C pointers of rp, up, and vp. -C process words until rp is 16-byte aligned -C if (((up | vp) & 15) == 0) -C process with VMX without any vperm -C else if ((up & 15) != 0 && (vp & 15) != 0) -C process with VMX using vperm on store data -C else if ((up & 15) != 0) -C process with VMX using vperm on up data -C else -C process with VMX using vperm on vp data -C -C rlwinm, r0, up, 0,28,31 -C rlwinm r0, vp, 0,28,31 -C cmpwi cr7, r0, 0 -C cror cr6, cr0, cr7 -C crand cr0, cr0, cr7 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/mod_34lsub1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/mod_34lsub1.asm deleted file mode 100644 index 2bb11cd17321631af3db934351c0fa8e05476887..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/mod_34lsub1.asm +++ /dev/null @@ -1,388 +0,0 @@ -dnl PowerPC-32 mpn_mod_34lsub1 -- mpn remainder mod 2^24-1. - -dnl Copyright 2002, 2003, 2005-2007, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - - -C cycles/limb -C 603e: - -C 604e: - -C 75x (G3): - -C 7400,7410 (G4): 1 simple load-use scheduling results in 0.75 -C 744x,745x (G4+): 0.75 -C ppc970: 0.75 -C power4: - -C power5: - - -C TODO -C * Either start using the low-end masking constants, or remove them. -C * Merge multiple feed-in cases into a parameterized code block. -C * Reduce register usage. It should be possible to almost halve it. - -define(`up', `r3') -define(`n', `r4') - -define(`a0', `v3') -define(`a1', `v4') -define(`a2', `v5') -define(`c0', `v6') -define(`c1', `v7') -define(`c2', `v8') -define(`z', `v9') -define(`x0', `v10') -define(`x1', `v11') -define(`x2', `v12') -define(`x3', `v13') -define(`pv', `v14') -define(`y0', `v0') -define(`y1', `v1') -define(`y2', `v2') -define(`y3', `v15') - -ASM_START() -PROLOGUE(mpn_mod_34lsub1) - cmpwi cr0, n, 20 C tuned cutoff point - bge L(large) - - li r9, 0 C result accumulator - mulli r10, n, 0xb C 0xb = ceil(32/3) - srwi. r10, r10, 5 C r10 = floor(n/3), n < 32 - beq L(small_tail) - mtctr r10 - lwz r6, 0(up) - lwz r7, 4(up) - lwzu r8, 8(up) - subf n, r10, n - subf n, r10, n - subf n, r10, n - bdz L(small_end) - - ALIGN(16) -L(los): rlwinm r0, r6, 0,8,31 - add r9, r9, r0 C add 24b from u0 - srwi r0, r6, 24 - lwz r6, 4(up) - rlwimi r0, r7, 8, 0x00ffff00 C --111100 - add r9, r9, r0 C add 8b from u0 and 16b from u1 - srwi r0, r7, 16 - lwz r7, 8(up) - rlwimi r0, r8, 16, 0x00ff0000 C --221111 - add r9, r9, r0 C add 16b from u1 and 8b from u2 - srwi r0, r8, 8 C --222222 - lwzu r8, 12(up) - add r9, r9, r0 C add 24b from u2 - bdnz L(los) -L(small_end): - rlwinm r0, r6, 0,8,31 - add r9, r9, r0 C add 24b from u0 - srwi r0, r6, 24 - rlwimi r0, r7, 8, 0x00ffff00 C --111100 - add r9, r9, r0 C add 8b from u0 and 16b from u1 - srwi r0, r7, 16 - rlwimi r0, r8, 16, 0x00ff0000 C --221111 - add r9, r9, r0 C add 16b from u1 and 8b from u2 - srwi r0, r8, 8 C --222222 - add r9, r9, r0 C add 24b from u2 - - addi up, up, 4 - rlwinm r0, r9, 0,8,31 - srwi r9, r9, 24 - add r9, r9, r0 - -L(small_tail): - cmpi cr0, n, 1 - blt L(ret) - - lwz r6, 0(up) - rlwinm r0, r6, 0,8,31 - srwi r6, r6, 24 - add r9, r9, r0 - add r9, r9, r6 - - beq L(ret) - - lwz r6, 4(up) - rlwinm r0, r6, 8,8,23 - srwi r6, r6, 16 - add r9, r9, r0 - add r9, r9, r6 - -L(ret): mr r3, r9 - blr - - -L(large): - stwu r1, -32(r1) - mfspr r10, 256 - oris r0, r10, 0xffff C Set VRSAVE bit 0-15 - mtspr 256, r0 - - andi. r7, up, 15 - vxor a0, v0, v0 - lis r9, 0xaaaa - vxor a1, v0, v0 - ori r9, r9, 0xaaab - vxor a2, v0, v0 - li r5, 16 - vxor c0, v0, v0 - li r6, 32 - vxor c1, v0, v0 - LEAL( r11, cnsts) C CAUTION clobbers r0 for elf, darwin - vxor c2, v0, v0 - vxor z, v0, v0 - - beq L(aligned16) - - cmpwi cr7, r7, 8 - bge cr7, L(na4) - - lvx a2, 0, up - addi up, up, 16 - vsldoi a2, a2, z, 4 - vsldoi a2, z, a2, 12 - - addi n, n, 9 - mulhwu r0, n, r9 - srwi r0, r0, 3 C r0 = floor(n/12) - mtctr r0 - - mulli r8, r0, 12 - subf n, r8, n - b L(2) - -L(na4): bne cr7, L(na8) - - lvx a1, 0, up - addi up, up, -16 - vsldoi a1, a1, z, 8 - vsldoi a1, z, a1, 8 - - addi n, n, 6 - mulhwu r0, n, r9 - srwi r0, r0, 3 C r0 = floor(n/12) - mtctr r0 - - mulli r8, r0, 12 - subf n, r8, n - b L(1) - -L(na8): - lvx a0, 0, up - vsldoi a0, a0, z, 12 - vsldoi a0, z, a0, 4 - - addi n, n, 3 - mulhwu r0, n, r9 - srwi r0, r0, 3 C r0 = floor(n/12) - mtctr r0 - - mulli r8, r0, 12 - subf n, r8, n - b L(0) - -L(aligned16): - mulhwu r0, n, r9 - srwi r0, r0, 3 C r0 = floor(n/12) - mtctr r0 - - mulli r8, r0, 12 - subf n, r8, n - - lvx a0, 0, up -L(0): lvx a1, r5, up -L(1): lvx a2, r6, up - addi up, up, 48 -L(2): bdz L(end) - li r12, 256 - li r9, 288 - ALIGN(32) -L(top): - lvx v0, 0, up - vaddcuw v10, a0, v0 - vadduwm a0, a0, v0 - vadduwm c0, c0, v10 - - lvx v1, r5, up - vaddcuw v10, a1, v1 - vadduwm a1, a1, v1 - vadduwm c1, c1, v10 - - lvx v2, r6, up - dcbt up, r12 - dcbt up, r9 - addi up, up, 48 - vaddcuw v10, a2, v2 - vadduwm a2, a2, v2 - vadduwm c2, c2, v10 - bdnz L(top) - -L(end): -C n = 0...11 - cmpwi cr0, n, 0 - beq L(sum) - cmpwi cr0, n, 4 - ble L(tail.1..4) - cmpwi cr0, n, 8 - ble L(tail.5..8) - -L(tail.9..11): - lvx v0, 0, up - vaddcuw v10, a0, v0 - vadduwm a0, a0, v0 - vadduwm c0, c0, v10 - - lvx v1, r5, up - vaddcuw v10, a1, v1 - vadduwm a1, a1, v1 - vadduwm c1, c1, v10 - - lvx v2, r6, up - - addi r8, r11, 96 - rlwinm r3, n ,4,26,27 - lvx v11, r3, r8 - vand v2, v2, v11 - - vaddcuw v10, a2, v2 - vadduwm a2, a2, v2 - vadduwm c2, c2, v10 - b L(sum) - -L(tail.5..8): - lvx v0, 0, up - vaddcuw v10, a0, v0 - vadduwm a0, a0, v0 - vadduwm c0, c0, v10 - - lvx v1, r5, up - - addi r8, r11, 96 - rlwinm r3, n ,4,26,27 - lvx v11, r3, r8 - vand v1, v1, v11 - - vaddcuw v10, a1, v1 - vadduwm a1, a1, v1 - vadduwm c1, c1, v10 - b L(sum) - -L(tail.1..4): - lvx v0, 0, up - - addi r8, r11, 96 - rlwinm r3, n ,4,26,27 - lvx v11, r3, r8 - vand v0, v0, v11 - - vaddcuw v10, a0, v0 - vadduwm a0, a0, v0 - vadduwm c0, c0, v10 - -L(sum): lvx pv, 0, r11 - vperm x0, a0, z, pv C extract 4 24-bit field from a0 - vperm y0, c2, z, pv - lvx pv, r5, r11 - vperm x1, a1, z, pv C extract 4 24-bit field from a1 - vperm y1, c0, z, pv C extract 4 24-bit field from a1 - lvx pv, r6, r11 - vperm x2, a2, z, pv C extract 4 24-bit field from a1 - vperm y2, c1, z, pv C extract 4 24-bit field from a1 - li r10, 48 - lvx pv, r10, r11 - vperm x3, a0, z, pv C extract remaining/partial a0 fields - vperm y3, c2, z, pv C extract remaining/partial a0 fields - li r10, 64 - lvx pv, r10, r11 - vperm x3, a1, x3, pv C insert remaining/partial a1 fields - vperm y3, c0, y3, pv C insert remaining/partial a1 fields - li r10, 80 - lvx pv, r10, r11 - vperm x3, a2, x3, pv C insert remaining/partial a2 fields - vperm y3, c1, y3, pv C insert remaining/partial a2 fields - -C We now have 4 128-bit accumulators to sum - vadduwm x0, x0, x1 - vadduwm x2, x2, x3 - vadduwm x0, x0, x2 - - vadduwm y0, y0, y1 - vadduwm y2, y2, y3 - vadduwm y0, y0, y2 - - vadduwm x0, x0, y0 - -C Reduce 32-bit fields - vsumsws x0, x0, z - - li r7, 16 - stvx x0, r7, r1 - lwz r3, 28(r1) - - mtspr 256, r10 - addi r1, r1, 32 - blr -EPILOGUE() - -C load | v0 | v1 | v2 | -C acc | a0 | a1 | a2 | -C carry | c0 | c1 | c2 | -C | 0 1 2 3 | 4 5 6 7 | 8 9 10 11 | 128 -C |---|---|---|---|---|---|---|---|---|---|---|---| 32 -C | | | | | | | | | | | | | | | | | 24 -C | | | | | | | | | 48 - -C $---------------$---------------$---------------$---------------$ -C | . . . . . . . . . . . . . . . | -C |_______________________________________________________________| -C | | | | | | | -C <-hi16-> <--- 24 --> <--- 24 --> <--- 24 --> <--- 24 --> <-lo16-> - - -DEF_OBJECT(cnsts,16) -C Permutation vectors in the order they are used above -C # 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f - .byte 0x10,0x01,0x02,0x03, 0x10,0x06,0x07,0x00, 0x10,0x0b,0x04,0x05, 0x10,0x08,0x09,0x0a C a0 - .byte 0x10,0x07,0x00,0x01, 0x10,0x04,0x05,0x06, 0x10,0x09,0x0a,0x0b, 0x10,0x0e,0x0f,0x08 C a1 - .byte 0x10,0x00,0x01,0x02, 0x10,0x05,0x06,0x07, 0x10,0x0a,0x0b,0x04, 0x10,0x0f,0x08,0x09 C a2 - .byte 0x10,0x0d,0x0e,0x0f, 0x10,0x10,0x10,0x0c, 0x10,0x10,0x10,0x10, 0x10,0x10,0x10,0x10 C part a0 - .byte 0x10,0x11,0x12,0x13, 0x10,0x02,0x03,0x17, 0x10,0x10,0x0c,0x0d, 0x10,0x10,0x10,0x10 C part a1 - .byte 0x10,0x11,0x12,0x13, 0x10,0x15,0x16,0x17, 0x10,0x03,0x1a,0x1b, 0x10,0x0c,0x0d,0x0e C part a2 -C Masks for high end of number - .byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff - .byte 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - .byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - .byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00 -C Masks for low end of number -C .byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff -C .byte 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff -C .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff -C .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff -END_OBJECT(cnsts) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/popcount.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/popcount.asm deleted file mode 100644 index 943c92d127305abf99e51c3b5b8bf99e24821546..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc32/vmx/popcount.asm +++ /dev/null @@ -1,34 +0,0 @@ -dnl PowerPC-32/VMX mpn_popcount. - -dnl Copyright 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_popcount) -include_mpn(`powerpc64/vmx/popcount.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/README b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/README deleted file mode 100644 index 50dd3995c3db0936b0254338290d376599935c37..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/README +++ /dev/null @@ -1,166 +0,0 @@ -Copyright 1999-2001, 2003-2005 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - POWERPC-64 MPN SUBROUTINES - - -This directory contains mpn functions for 64-bit PowerPC chips. - - -CODE ORGANIZATION - - mpn/powerpc64 mode-neutral code - mpn/powerpc64/mode32 code for mode32 - mpn/powerpc64/mode64 code for mode64 - - -The mode32 and mode64 sub-directories contain code which is for use in the -respective chip mode, 32 or 64. The top-level directory is code that's -unaffected by the mode. - -The "adde" instruction is the main difference between mode32 and mode64. It -operates on either on a 32-bit or 64-bit quantity according to the chip mode. -Other instructions have an operand size in their opcode and hence don't vary. - - - -POWER3/PPC630 pipeline information: - -Decoding is 4-way + branch and issue is 8-way with some out-of-order -capability. - -Functional units: -LS1 - ld/st unit 1 -LS2 - ld/st unit 2 -FXU1 - integer unit 1, handles any simple integer instruction -FXU2 - integer unit 2, handles any simple integer instruction -FXU3 - integer unit 3, handles integer multiply and divide -FPU1 - floating-point unit 1 -FPU2 - floating-point unit 2 - -Memory: Any two memory operations can issue, but memory subsystem - can sustain just one store per cycle. No need for data - prefetch; the hardware has very sophisticated prefetch logic. -Simple integer: 2 operations (such as add, rl*) -Integer multiply: 1 operation every 9th cycle worst case; exact timing depends - on 2nd operand's most significant bit position (10 bits per - cycle). Multiply unit is not pipelined, only one multiply - operation in progress is allowed. -Integer divide: ? -Floating-point: Any plain 2 arithmetic instructions (such as fmul, fadd, and - fmadd), latency 4 cycles. -Floating-point divide: - ? -Floating-point square root: - ? - -POWER3/PPC630 best possible times for the main loops: -shift: 1.5 cycles limited by integer unit contention. - With 63 special loops, one for each shift count, we could - reduce the needed integer instructions to 2, which would - reduce the best possible time to 1 cycle. -add/sub: 1.5 cycles, limited by ld/st unit contention. -mul: 18 cycles (average) unless floating-point operations are used, - but that would only help for multiplies of perhaps 10 and more - limbs. -addmul/submul:Same situation as for mul. - - -POWER4/PPC970 and POWER5 pipeline information: - -This is a very odd pipeline, it is basically a VLIW masquerading as a plain -architecture. Its issue rules are not made public, and since it is so weird, -it is very hard to figure out any useful information from experimentation. -An example: - - A well-aligned loop with nop's take 3, 4, 6, 7, ... cycles. - 3 cycles for 0, 1, 2, 3, 4, 5, 6, 7 nop's - 4 cycles for 8, 9, 10, 11, 12, 13, 14, 15 nop's - 6 cycles for 16, 17, 18, 19, 20, 21, 22, 23 nop's - 7 cycles for 24, 25, 26, 27 nop's - 8 cycles for 28, 29, 30, 31 nop's - ... continues regularly - - -Functional units: -LS1 - ld/st unit 1 -LS2 - ld/st unit 2 -FXU1 - integer unit 1, handles any integer instruction -FXU2 - integer unit 2, handles any integer instruction -FPU1 - floating-point unit 1 -FPU2 - floating-point unit 2 - -While this is one integer unit less than POWER3/PPC630, the remaining units -are more powerful; here they handle multiply and divide. - -Memory: 2 ld/st. Stores go to the L2 cache, which can sustain just - one store per cycle. - L1 load latency: to gregs 3-4 cycles, to fregs 5-6 cycles. - Operations that modify the address register might be split - to use also an integer issue slot. -Simple integer: 2 operations every cycle, latency 2. -Integer multiply: 2 operations every 6th cycle, latency 7 cycles. -Integer divide: ? -Floating-point: Any plain 2 arithmetic instructions (such as fmul, fadd, and - fmadd), latency 6 cycles. -Floating-point divide: - ? -Floating-point square root: - ? - - -IDEAS - -*mul_1: Handling one limb using mulld/mulhdu and two limbs using floating- -point operations should give performance of about 20 cycles for 3 limbs, or 7 -cycles/limb. - -We should probably split the single-limb operand in 32-bit chunks, and the -multi-limb operand in 16-bit chunks, allowing us to accumulate well in fp -registers. - -Problem is to get 32-bit or 16-bit words to the fp registers. Only 64-bit fp -memops copies bits without fiddling with them. We might therefore need to -load to integer registers with zero extension, store as 64 bits into temp -space, and then load to fp regs. Alternatively, load directly to fp space -and add well-chosen constants to get cancellation. (Other part after given by -subsequent subtraction.) - -Possible code mix for load-via-intregs variant: - -lwz,std,lfd -fmadd,fmadd,fmul,fmul -fctidz,stfd,ld,fctidz,stfd,ld -add,adde -lwz,std,lfd -fmadd,fmadd,fmul,fmul -fctidz,stfd,ld,fctidz,stfd,ld -add,adde -srd,sld,add,adde,add,adde diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/aix.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/aix.m4 deleted file mode 100644 index bf6517d69d93fed72312195fc376baf701466c09..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/aix.m4 +++ /dev/null @@ -1,97 +0,0 @@ -divert(-1) -dnl m4 macros for AIX 64-bit assembly. - -dnl Copyright 2000-2002, 2005, 2006, 2010, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -define(`ASM_START', - `.machine "any" - .toc') - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo[,toc]) -dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) -dnl -dnl Don't want ELF style .size in the epilogue. - -define(`PROLOGUE_cpu', -m4_assert_numargs_range(1,2) -`ifelse(`$2',toc,, -`ifelse(`$2',,,`m4_error(`Unrecognised PROLOGUE parameter')')')dnl - .globl $1 - .globl .$1 - .csect [DS], 3 -$1: - .llong .$1, TOC[tc0], 0 - .csect .$1[PR], 6 -.$1:') - -define(`EPILOGUE_cpu', -m4_assert_numargs(1) -`') - -define(`TOC_ENTRY', `') - -define(`LEA', -m4_assert_numargs(2) -`define(`TOC_ENTRY', -` .toc -..$2: .tc $2[TC], $2')' - `ld $1, ..$2(2)') - -define(`LEAL', -m4_assert_numargs(2) -`LEA($1,$2)') - - -define(`EXTERN', -m4_assert_numargs(1) -` .globl $1') - -define(`EXTERN_FUNC', -m4_assert_numargs(1) -` .globl .$1') - -define(`DEF_OBJECT', -m4_assert_numargs_range(1,2) -` .csect [RO], 3 - ALIGN(ifelse($#,1,2,$2)) -$1: -') - -define(`END_OBJECT', -m4_assert_numargs(1)) - -define(`CALL', - `bl .$1 - nop') - -define(`ASM_END', `TOC_ENTRY') - -undefine(`EXTRA_REGISTER') - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/com.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/com.asm deleted file mode 100644 index 074b7ff6e4f10a223bee45a1ae3c1eea4524dc00..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/com.asm +++ /dev/null @@ -1,136 +0,0 @@ -dnl PowerPC-64 mpn_com. - -dnl Copyright 2004, 2005, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 1.25 -C POWER5 ? -C POWER6 1.32 -C POWER7 1.13 - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') - -ASM_START() -PROLOGUE(mpn_com) - -ifdef(`HAVE_ABI_mode32', -` rldicl n, n, 0,32') - - cmpdi cr0, n, 4 - blt L(sml) - - addi r10, n, 4 - srdi r10, r10, 3 - mtctr r10 - - andi. r0, n, 1 - rlwinm r11, n, 0,30,30 - rlwinm r12, n, 0,29,29 - cmpdi cr6, r11, 0 - cmpdi cr7, r12, 0 - - beq cr0, L(xx0) -L(xx1): ld r6, 0(up) - addi up, up, 8 - nor r6, r6, r6 - std r6, 0(rp) - addi rp, rp, 8 - -L(xx0): bne cr6, L(x10) -L(x00): ld r6, 0(r4) - ld r7, 8(r4) - bne cr7, L(100) -L(000): addi rp, rp, -32 - b L(lo0) -L(100): addi up, up, -32 - b L(lo4) -L(x10): ld r8, 0(r4) - ld r9, 8(r4) - bne cr7, L(110) -L(010): addi up, up, 16 - addi rp, rp, -16 - b L(lo2) -L(110): addi up, up, -16 - addi rp, rp, -48 - b L(lo6) - -L(sml): mtctr n -L(t): ld r6, 0(up) - addi up, up, 8 - nor r6, r6, r6 - std r6, 0(rp) - addi rp, rp, 8 - bdnz L(t) - blr - - ALIGN(32) -L(top): nor r6, r6, r6 - nor r7, r7, r7 - std r6, 0(rp) - std r7, 8(rp) -L(lo2): ld r6, 0(up) - ld r7, 8(up) - nor r8, r8, r8 - nor r9, r9, r9 - std r8, 16(rp) - std r9, 24(rp) -L(lo0): ld r8, 16(up) - ld r9, 24(up) - nor r6, r6, r6 - nor r7, r7, r7 - std r6, 32(rp) - std r7, 40(rp) -L(lo6): ld r6, 32(up) - ld r7, 40(up) - nor r8, r8, r8 - nor r9, r9, r9 - std r8, 48(rp) - std r9, 56(rp) - addi rp, rp, 64 -L(lo4): ld r8, 48(up) - ld r9, 56(up) - addi up, up, 64 - bdnz L(top) - -L(end): nor r6, r6, r6 - nor r7, r7, r7 - std r6, 0(rp) - std r7, 8(rp) - nor r8, r8, r8 - nor r9, r9, r9 - std r8, 16(rp) - std r9, 24(rp) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/copyd.asm deleted file mode 100644 index c6ce9309f1d689a19680b17c39f160ba3ad10f98..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/copyd.asm +++ /dev/null @@ -1,84 +0,0 @@ -dnl PowerPC-64 mpn_copyd - -dnl Copyright 2004, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 1 -C POWER4/PPC970 1 -C POWER5 ? -C POWER6 ? -C POWER7 1.4 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C n r5 - -ASM_START() -PROLOGUE(mpn_copyd) - rldic. r0, r5, 3, 59 C r0 = (r5 & 3) << 3; cr0 = (n == 4t)? - cmpldi cr6, r0, 16 C cr6 = (n cmp 4t + 2)? - -ifdef(`HAVE_ABI_mode32', -` rldic r6, r5, 3, 32', C byte count corresponding to n -` rldicr r6, r5, 3, 60') C byte count corresponding to n - - addi r5, r5, 4 C compute... -ifdef(`HAVE_ABI_mode32', -` rldicl r5, r5, 62,34', C ...branch count -` rldicl r5, r5, 62, 2') C ...branch count - mtctr r5 - - add r4, r4, r6 - add r3, r3, r6 - sub r4, r4, r0 C offset up - sub r3, r3, r0 C offset rp - - beq cr0, L(L00) - blt cr6, L(L01) - beq cr6, L(L10) - b L(L11) - - ALIGN(16) -L(oop): ld r6, 24(r4) - std r6, 24(r3) -L(L11): ld r6, 16(r4) - std r6, 16(r3) -L(L10): ld r6, 8(r4) - std r6, 8(r3) -L(L01): ld r6, 0(r4) - std r6, 0(r3) -L(L00): addi r4, r4, -32 - addi r3, r3, -32 - bdnz L(oop) - - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/copyi.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/copyi.asm deleted file mode 100644 index 9a86cb21cc62d6c3efb7b7e8a44a79268d6eb8f8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/copyi.asm +++ /dev/null @@ -1,78 +0,0 @@ -dnl PowerPC-64 mpn_copyi. - -dnl Copyright 2004, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 1 -C POWER4/PPC970 1 -C POWER5 ? -C POWER6 ? -C POWER7 1.4 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C n r5 - -ASM_START() -PROLOGUE(mpn_copyi) - rldic. r0, r5, 3, 59 C r0 = (r5 & 3) << 3; cr0 = (n == 4t)? - cmpldi cr6, r0, 16 C cr6 = (n cmp 4t + 2)? - - addi r5, r5, 4 C compute... -ifdef(`HAVE_ABI_mode32', -` rldicl r5, r5, 62,34', C ...branch count -` rldicl r5, r5, 62, 2') C ...branch count - mtctr r5 - - add r4, r4, r0 C offset up - add r3, r3, r0 C offset rp - - beq cr0, L(L00) - blt cr6, L(L01) - beq cr6, L(L10) - b L(L11) - - ALIGN(16) -L(oop): ld r6, -32(r4) - std r6, -32(r3) -L(L11): ld r6, -24(r4) - std r6, -24(r3) -L(L10): ld r6, -16(r4) - std r6, -16(r3) -L(L01): ld r6, -8(r4) - std r6, -8(r3) -L(L00): addi r4, r4, 32 - addi r3, r3, 32 - bdnz L(oop) - - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/darwin.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/darwin.m4 deleted file mode 100644 index a3180e48fd77312ce150e879819f715e2d99e075..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/darwin.m4 +++ /dev/null @@ -1,119 +0,0 @@ -divert(-1) -dnl m4 macros for Mac OS 64-bit assembly. - -dnl Copyright 2005, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -define(`ASM_START',`') - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo[,toc]) -dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) -dnl - -define(`DARWIN') - -define(`PROLOGUE_cpu', -m4_assert_numargs_range(1,2) -`ifelse(`$2',toc,, -`ifelse(`$2',,,`m4_error(`Unrecognised PROLOGUE parameter')')')dnl - .text - .globl $1 - .align 5 -$1:') - -define(`EPILOGUE_cpu', -m4_assert_numargs(1)) - -dnl LEAL -- Load Effective Address Local. This is to be used for symbols -dnl defined in the same file. It will not work for externally defined -dnl symbols. - -define(`LEAL', -m4_assert_numargs(2) -`ifdef(`PIC', -` - mflr r0 C save return address - bcl 20, 31, 1f -1: mflr $1 - addis $1, $1, ha16($2-1b) - la $1, lo16($2-1b)($1) - mtlr r0 C restore return address -',` - lis $1, ha16($2) - la $1, lo16($2)($1) -')') - -dnl LEA -- Load Effective Address. This is to be used for symbols defined in -dnl another file. It will not work for locally defined symbols. - -define(`LEA', -m4_assert_numargs(2) -`ifdef(`PIC', -`define(`EPILOGUE_cpu', -` .non_lazy_symbol_pointer -`L'$2`'$non_lazy_ptr: - .indirect_symbol $2 - .quad 0 -') - mflr r0 C save return address - bcl 20, 31, 1f -1: mflr $1 - addis $1, $1, ha16(`L'$2`'$non_lazy_ptr-1b) - ld $1, lo16(`L'$2`'$non_lazy_ptr-1b)($1) - mtlr r0 C restore return address -',` - lis $1, ha16($2) - la $1, lo16($2)($1) -')') - -define(`EXTERN', -m4_assert_numargs(1) -`dnl') - -define(`EXTERN_FUNC', -m4_assert_numargs(1) -`dnl') - -define(`DEF_OBJECT', -m4_assert_numargs_range(1,2) -` .const - ALIGN(ifelse($#,1,2,$2)) -$1: -') - -define(`END_OBJECT', -m4_assert_numargs(1)) - -define(`CALL', - `bl GSYM_PREFIX`'$1') - -define(`ASM_END', `dnl') - -define(`EXTRA_REGISTER', r2) - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/elf.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/elf.m4 deleted file mode 100644 index ddb5a8ed79ddc1a20782b87a775a651bbce84a3c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/elf.m4 +++ /dev/null @@ -1,123 +0,0 @@ -divert(-1) -dnl m4 macros for powerpc64 GNU/Linux assembly. - -dnl Copyright 2003, 2005, 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -define(`ASM_START', -`ifdef(`ELFv2_ABI', -` - .abiversion 2 -')') - -dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo[,toc]) -dnl EPILOGUE_cpu(GSYM_PREFIX`'foo) -dnl - -define(`PROLOGUE_cpu', -m4_assert_numargs_range(1,2) -`ifelse(`$2',toc,, -`ifelse(`$2',,,`m4_error(`Unrecognised PROLOGUE parameter')')')dnl -ifdef(`ELFv2_ABI', -` - .globl $1 - .type $1, @function - .section ".text" - .align 5 -$1: -ifelse(`$2',toc,` -0: addis 2, 12, (.TOC.-0b)@ha - addi 2, 2, (.TOC.-0b)@l - .localentry $1, .-$1 -',) -',` - .globl $1 - .globl .$1 - .section ".opd","aw" - .align 3 -$1: - .llong .$1, .TOC.@tocbase, 0 - .size $1, 24 - .type .$1, @function - .section ".text" - .align 5 -.$1: -')') - -define(`EPILOGUE_cpu', -m4_assert_numargs(1) -`ifdef(`ELFv2_ABI',` - .size $1, .-$1 -',` - .size .$1, .-.$1 -')') - -define(`TOC_ENTRY', `') - -define(`LEA', -m4_assert_numargs(2) -`define(`TOC_ENTRY', -` .section ".toc", "aw" -..$2: .tc $2[TC], $2')' - `ld $1, ..$2@toc(2)') - -define(`LEAL', -m4_assert_numargs(2) -`LEA($1,$2)') - - -define(`EXTERN', -m4_assert_numargs(1) -`dnl') - -define(`EXTERN_FUNC', -m4_assert_numargs(1) -`dnl') - -define(`DEF_OBJECT', -m4_assert_numargs_range(1,2) -` - .section .rodata - ALIGN(ifelse($#,1,2,$2)) - .type $1, @object -$1: -') - -define(`END_OBJECT', -m4_assert_numargs(1) -` .size $1, .-$1') - -define(`CALL', - `bl GSYM_PREFIX`'$1 - nop') - -define(`ASM_END', `TOC_ENTRY') - -undefine(`EXTRA_REGISTER') - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/logops_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/logops_n.asm deleted file mode 100644 index 2fa6985d7a43a84a942ad865c7fb68d388a85bee..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/logops_n.asm +++ /dev/null @@ -1,151 +0,0 @@ -dnl PowerPC-64 mpn_and_n, mpn_andn_n, mpn_nand_n, mpn_ior_n, mpn_iorn_n, -dnl mpn_nior_n, mpn_xor_n, mpn_xnor_n -- mpn bitwise logical operations. - -dnl Copyright 2003-2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 1.75 -C POWER4/PPC970 2.10 -C POWER5 ? -C POWER6 ? -C POWER7 1.75 - -C n POWER3/PPC630 POWER4/PPC970 -C 1 15.00 15.33 -C 2 7.50 7.99 -C 3 5.33 6.00 -C 4 4.50 4.74 -C 5 4.20 4.39 -C 6 3.50 3.99 -C 7 3.14 3.64 -C 8 3.00 3.36 -C 9 3.00 3.36 -C 10 2.70 3.25 -C 11 2.63 3.11 -C 12 2.58 3.00 -C 13 2.61 3.02 -C 14 2.42 2.82 -C 15 2.40 2.79 -C 50 2.08 2.67 -C 100 1.85 2.31 -C 200 1.80 2.18 -C 400 1.77 2.14 -C 1000 1.76 2.10# -C 2000 1.75# 2.13 -C 4000 2.30 2.57 -C 8000 2.62 2.58 -C 16000 2.52 4.25 -C 32000 2.49 16.25 -C 64000 2.66 18.76 - -ifdef(`OPERATION_and_n', -` define(`func',`mpn_and_n') - define(`logop', `and')') -ifdef(`OPERATION_andn_n', -` define(`func',`mpn_andn_n') - define(`logop', `andc')') -ifdef(`OPERATION_nand_n', -` define(`func',`mpn_nand_n') - define(`logop', `nand')') -ifdef(`OPERATION_ior_n', -` define(`func',`mpn_ior_n') - define(`logop', `or')') -ifdef(`OPERATION_iorn_n', -` define(`func',`mpn_iorn_n') - define(`logop', `orc')') -ifdef(`OPERATION_nior_n', -` define(`func',`mpn_nior_n') - define(`logop', `nor')') -ifdef(`OPERATION_xor_n', -` define(`func',`mpn_xor_n') - define(`logop', `xor')') -ifdef(`OPERATION_xnor_n', -` define(`func',`mpn_xnor_n') - define(`logop', `eqv')') - -C INPUT PARAMETERS -C rp r3 -C up r4 -C vp r5 -C n r6 - -MULFUNC_PROLOGUE(mpn_and_n mpn_andn_n mpn_nand_n mpn_ior_n mpn_iorn_n mpn_nior_n mpn_xor_n mpn_xnor_n) - -ASM_START() -PROLOGUE(func) - ld r8, 0(r4) C read lowest u limb - ld r9, 0(r5) C read lowest v limb - addi r6, r6, 3 C compute branch count (1) - rldic. r0, r6, 3, 59 C r0 = (n-1 & 3) << 3; cr0 = (n == 4(t+1))? - cmpldi cr6, r0, 16 C cr6 = (n cmp 4t + 3) - -ifdef(`HAVE_ABI_mode32', -` rldicl r6, r6, 62,34', C ...branch count -` rldicl r6, r6, 62, 2') C ...branch count - mtctr r6 - - ld r6, 0(r4) C read lowest u limb (again) - ld r7, 0(r5) C read lowest v limb (again) - - add r5, r5, r0 C offset vp - add r4, r4, r0 C offset up - add r3, r3, r0 C offset rp - - beq cr0, L(L01) - blt cr6, L(L10) - beq cr6, L(L11) - b L(L00) - -L(oop): ld r8, -24(r4) - ld r9, -24(r5) - logop r10, r6, r7 - std r10, -32(r3) -L(L00): ld r6, -16(r4) - ld r7, -16(r5) - logop r10, r8, r9 - std r10, -24(r3) -L(L11): ld r8, -8(r4) - ld r9, -8(r5) - logop r10, r6, r7 - std r10, -16(r3) -L(L10): ld r6, 0(r4) - ld r7, 0(r5) - logop r10, r8, r9 - std r10, -8(r3) -L(L01): addi r5, r5, 32 - addi r4, r4, 32 - addi r3, r3, 32 - bdnz L(oop) - - logop r10, r6, r7 - std r10, -32(r3) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/lshift.asm deleted file mode 100644 index 880944a4aed4ca70a307ee952d0cc407e0221de4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/lshift.asm +++ /dev/null @@ -1,207 +0,0 @@ -dnl PowerPC-64 mpn_lshift -- rp[] = up[] << cnt - -dnl Copyright 2003, 2005, 2010, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 ? -C POWER5 2.25 -C POWER6 9.75 -C POWER7 2.15 - -C TODO -C * Try to reduce the number of needed live registers -C * Micro-optimise header code -C * Keep in synch with rshift.asm and lshiftc.asm - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') -define(`cnt', `r6') - -define(`tnc',`r0') -define(`u0',`r30') -define(`u1',`r31') -define(`retval',`r5') - -ASM_START() -PROLOGUE(mpn_lshift) - std r31, -8(r1) - std r30, -16(r1) - subfic tnc, cnt, 64 - sldi r7, n, 3 C byte count corresponding to n - add up, up, r7 C up = up + n - add rp, rp, r7 C rp = rp + n - rldicl. r30, n, 0,62 C r30 = n & 3, set cr0 - cmpdi cr6, r30, 2 - addi r31, n, 3 C compute count... - ld r10, -8(up) C load 1st limb for b00...b11 - srd retval, r10, tnc -ifdef(`HAVE_ABI_mode32', -` rldicl r31, r31, 62,34', C ...branch count -` srdi r31, r31, 2') C ...for ctr - mtctr r31 C copy count into ctr - beq cr0, L(b00) - blt cr6, L(b01) - ld r11, -16(up) C load 2nd limb for b10 and b11 - beq cr6, L(b10) - - ALIGN(16) -L(b11): sld r8, r10, cnt - srd r9, r11, tnc - ld u1, -24(up) - addi up, up, -24 - sld r12, r11, cnt - srd r7, u1, tnc - addi rp, rp, 16 - bdnz L(gt3) - - or r11, r8, r9 - sld r8, u1, cnt - b L(cj3) - - ALIGN(16) -L(gt3): ld u0, -8(up) - or r11, r8, r9 - sld r8, u1, cnt - srd r9, u0, tnc - ld u1, -16(up) - or r10, r12, r7 - b L(L11) - - ALIGN(32) -L(b10): sld r12, r10, cnt - addi rp, rp, 24 - srd r7, r11, tnc - bdnz L(gt2) - - sld r8, r11, cnt - or r10, r12, r7 - b L(cj2) - -L(gt2): ld u0, -24(up) - sld r8, r11, cnt - srd r9, u0, tnc - ld u1, -32(up) - or r10, r12, r7 - sld r12, u0, cnt - srd r7, u1, tnc - ld u0, -40(up) - or r11, r8, r9 - addi up, up, -16 - b L(L10) - - ALIGN(16) -L(b00): ld u1, -16(up) - sld r12, r10, cnt - srd r7, u1, tnc - ld u0, -24(up) - sld r8, u1, cnt - srd r9, u0, tnc - ld u1, -32(up) - or r10, r12, r7 - sld r12, u0, cnt - srd r7, u1, tnc - addi rp, rp, 8 - bdz L(cj4) - -L(gt4): addi up, up, -32 - ld u0, -8(up) - or r11, r8, r9 - b L(L00) - - ALIGN(16) -L(b01): bdnz L(gt1) - sld r8, r10, cnt - std r8, -8(rp) - b L(ret) - -L(gt1): ld u0, -16(up) - sld r8, r10, cnt - srd r9, u0, tnc - ld u1, -24(up) - sld r12, u0, cnt - srd r7, u1, tnc - ld u0, -32(up) - or r11, r8, r9 - sld r8, u1, cnt - srd r9, u0, tnc - ld u1, -40(up) - addi up, up, -40 - or r10, r12, r7 - bdz L(end) - - ALIGN(32) -L(top): sld r12, u0, cnt - srd r7, u1, tnc - ld u0, -8(up) - std r11, -8(rp) - or r11, r8, r9 -L(L00): sld r8, u1, cnt - srd r9, u0, tnc - ld u1, -16(up) - std r10, -16(rp) - or r10, r12, r7 -L(L11): sld r12, u0, cnt - srd r7, u1, tnc - ld u0, -24(up) - std r11, -24(rp) - or r11, r8, r9 -L(L10): sld r8, u1, cnt - srd r9, u0, tnc - ld u1, -32(up) - addi up, up, -32 - std r10, -32(rp) - addi rp, rp, -32 - or r10, r12, r7 - bdnz L(top) - - ALIGN(32) -L(end): sld r12, u0, cnt - srd r7, u1, tnc - std r11, -8(rp) -L(cj4): or r11, r8, r9 - sld r8, u1, cnt - std r10, -16(rp) -L(cj3): or r10, r12, r7 - std r11, -24(rp) -L(cj2): std r10, -32(rp) - std r8, -40(rp) - -L(ret): ld r31, -8(r1) - ld r30, -16(r1) -ifdef(`HAVE_ABI_mode32', -` srdi r3, retval, 32 - mr r4, retval -',` mr r3, retval') - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/lshiftc.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/lshiftc.asm deleted file mode 100644 index 7cf6a83428c59b2e4dc2f673845909be6c2f1886..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/lshiftc.asm +++ /dev/null @@ -1,210 +0,0 @@ -dnl PowerPC-64 mpn_lshiftc -- rp[] = ~up[] << cnt - -dnl Copyright 2003, 2005, 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 ? -C POWER5 2.25 -C POWER6 9.5 -C POWER7 2.15 - -C TODO -C * Try to reduce the number of needed live registers -C * Micro-optimise header code -C * Keep in synch with lshift.asm and rshift.asm -C * Could the long-scheduled std insns be less scheduled? - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') -define(`cnt', `r6') - -define(`tnc',`r0') -define(`u0',`r30') -define(`u1',`r31') -define(`retval',`r5') - -ASM_START() -PROLOGUE(mpn_lshiftc) - std r31, -8(r1) - std r30, -16(r1) - subfic tnc, cnt, 64 - sldi r7, n, 3 C byte count corresponding to n - add up, up, r7 C up = up + n - add rp, rp, r7 C rp = rp + n - rldicl. r30, n, 0,62 C r30 = n & 3, set cr0 - cmpdi cr6, r30, 2 - addi r31, n, 3 C compute count... - ld r10, -8(up) C load 1st limb for b00...b11 - srd retval, r10, tnc - srdi r31, r31, 2 C ...for ctr - mtctr r31 C copy count into ctr - beq cr0, L(b00) - blt cr6, L(b01) - ld r11, -16(up) C load 2nd limb for b10 and b11 - beq cr6, L(b10) - - ALIGN(16) -L(b11): sld r8, r10, cnt - srd r9, r11, tnc - ld u1, -24(up) - addi up, up, -24 - sld r12, r11, cnt - srd r7, u1, tnc - addi rp, rp, 16 - bdnz L(gt3) - - nor r11, r8, r9 - sld r8, u1, cnt - nor r8, r8, r8 - b L(cj3) - - ALIGN(16) -L(gt3): ld u0, -8(up) - nor r11, r8, r9 - sld r8, u1, cnt - srd r9, u0, tnc - ld u1, -16(up) - nor r10, r12, r7 - b L(L11) - - ALIGN(32) -L(b10): sld r12, r10, cnt - addi rp, rp, 24 - srd r7, r11, tnc - bdnz L(gt2) - - sld r8, r11, cnt - nor r10, r12, r7 - nor r8, r8, r8 - b L(cj2) - -L(gt2): ld u0, -24(up) - sld r8, r11, cnt - srd r9, u0, tnc - ld u1, -32(up) - nor r10, r12, r7 - sld r12, u0, cnt - srd r7, u1, tnc - ld u0, -40(up) - nor r11, r8, r9 - addi up, up, -16 - b L(L10) - - ALIGN(16) -L(b00): ld u1, -16(up) - sld r12, r10, cnt - srd r7, u1, tnc - ld u0, -24(up) - sld r8, u1, cnt - srd r9, u0, tnc - ld u1, -32(up) - nor r10, r12, r7 - sld r12, u0, cnt - srd r7, u1, tnc - addi rp, rp, 8 - bdz L(cj4) - -L(gt4): addi up, up, -32 - ld u0, -8(up) - nor r11, r8, r9 - b L(L00) - - ALIGN(16) -L(b01): bdnz L(gt1) - sld r8, r10, cnt - nor r8, r8, r8 - std r8, -8(rp) - b L(ret) - -L(gt1): ld u0, -16(up) - sld r8, r10, cnt - srd r9, u0, tnc - ld u1, -24(up) - sld r12, u0, cnt - srd r7, u1, tnc - ld u0, -32(up) - nor r11, r8, r9 - sld r8, u1, cnt - srd r9, u0, tnc - ld u1, -40(up) - addi up, up, -40 - nor r10, r12, r7 - bdz L(end) - - ALIGN(32) -L(top): sld r12, u0, cnt - srd r7, u1, tnc - ld u0, -8(up) - std r11, -8(rp) - nor r11, r8, r9 -L(L00): sld r8, u1, cnt - srd r9, u0, tnc - ld u1, -16(up) - std r10, -16(rp) - nor r10, r12, r7 -L(L11): sld r12, u0, cnt - srd r7, u1, tnc - ld u0, -24(up) - std r11, -24(rp) - nor r11, r8, r9 -L(L10): sld r8, u1, cnt - srd r9, u0, tnc - ld u1, -32(up) - addi up, up, -32 - std r10, -32(rp) - addi rp, rp, -32 - nor r10, r12, r7 - bdnz L(top) - - ALIGN(32) -L(end): sld r12, u0, cnt - srd r7, u1, tnc - std r11, -8(rp) -L(cj4): nor r11, r8, r9 - sld r8, u1, cnt - std r10, -16(rp) - nor r8, r8, r8 -L(cj3): nor r10, r12, r7 - std r11, -24(rp) -L(cj2): std r10, -32(rp) - std r8, -40(rp) - -L(ret): ld r31, -8(r1) - ld r30, -16(r1) -ifdef(`HAVE_ABI_mode32', -` srdi r3, retval, 32 - mr r4, retval -',` mr r3, retval') - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/add_n.asm deleted file mode 100644 index 1da8087fe136b8c681e127ce833c997f143df340..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/add_n.asm +++ /dev/null @@ -1,86 +0,0 @@ -dnl PowerPC-64/mode32 mpn_add_n -- Add two limb vectors of the same length > 0 -dnl and store sum in a third limb vector. - -dnl Copyright 1999-2001, 2003, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630: ? -C POWER4/PPC970: 4.25 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C vp r5 -C n r6 - -ASM_START() -PROLOGUE(mpn_add_n) - mtctr r6 C copy size into CTR - addic r0, r0, 0 C clear cy - ld r8, 0(r4) C load least significant s1 limb - ld r0, 0(r5) C load least significant s2 limb - addi r3, r3, -8 C offset res_ptr, it's updated before it's used - bdz L(end) C If done, skip loop - -L(oop): ld r9, 8(r4) C load s1 limb - ld r10, 8(r5) C load s2 limb - adde r7, r0, r8 C add limbs with cy, set cy - srdi r6, r0, 32 - srdi r11, r8, 32 - adde r6, r6, r11 C add high limb parts, set cy - std r7, 8(r3) C store result limb - bdz L(exit) C decrement CTR and exit if done - ldu r8, 16(r4) C load s1 limb and update s1_ptr - ldu r0, 16(r5) C load s2 limb and update s2_ptr - adde r7, r10, r9 C add limbs with cy, set cy - srdi r6, r10, 32 - srdi r11, r9, 32 - adde r6, r6, r11 C add high limb parts, set cy - stdu r7, 16(r3) C store result limb and update res_ptr - bdnz L(oop) C decrement CTR and loop back - -L(end): adde r7, r0, r8 - srdi r6, r0, 32 - srdi r11, r8, 32 - adde r6, r6, r11 C add limbs with cy, set cy - std r7, 8(r3) C store ultimate result limb - li r3, 0 C load cy into ... - addze r4, r3 C ... return value register - blr -L(exit): adde r7, r10, r9 - srdi r6, r10, 32 - srdi r11, r9, 32 - adde r6, r6, r11 C add limbs with cy, set cy - std r7, 16(r3) - li r3, 0 C load cy into ... - addze r4, r3 C ... return value register - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/addmul_1.asm deleted file mode 100644 index bdc39512ac58af4aa38f31a832b0927b9ed8a5a7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/addmul_1.asm +++ /dev/null @@ -1,79 +0,0 @@ -dnl PowerPC-64 mpn_addmul_1 -- Multiply a limb vector with a limb and add -dnl the result to a second limb vector. - -dnl Copyright 1999-2001, 2003, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630: ? -C POWER4/PPC970: 12.5 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C n r5 -C v r6,r7 or r7,r8 - -ASM_START() -PROLOGUE(mpn_addmul_1) - -ifdef(`BROKEN_LONGLONG_PARAM', -` rldimi r8, r7, 32,0 C assemble vlimb from separate 32-bit arguments - mr r6, r8 -',` - rldimi r7, r6, 32,0 C assemble vlimb from separate 32-bit arguments - mr r6, r7 -') - li r7, 0 C cy_limb = 0 - mtctr r5 - addic r0, r0, 0 - addi r3, r3, -8 - addi r4, r4, -8 - -L(oop): ldu r0, 8(r4) - mulld r9, r0, r6 - adde r12, r9, r7 C add old high limb and new low limb - srdi r5, r9, 32 - srdi r11, r7, 32 - adde r5, r5, r11 C add high limb parts, set cy - mulhdu r7, r0, r6 - addze r7, r7 - ld r10, 8(r3) - addc r9, r12, r10 - srdi r5, r12, 32 - srdi r11, r10, 32 - adde r5, r5, r11 C add high limb parts, set cy - stdu r9, 8(r3) - bdnz L(oop) - - addze r4, r7 - srdi r3, r4, 32 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/mul_1.asm deleted file mode 100644 index 3a17e98797279becf557da3215a44f048d4240ab..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/mul_1.asm +++ /dev/null @@ -1,73 +0,0 @@ -dnl PowerPC-64 mpn_mul_1 -- Multiply a limb vector with a limb and add -dnl the result to a second limb vector. - -dnl Copyright 1999-2001, 2003, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630: ? -C POWER4/PPC970: 10 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C n r5 -C v r6,r7 or r7,r8 - -ASM_START() -PROLOGUE(mpn_mul_1) - -ifdef(`BROKEN_LONGLONG_PARAM', -` rldimi r8, r7, 32,0 C assemble vlimb from separate 32-bit arguments - mr r6, r8 -',` - rldimi r7, r6, 32,0 C assemble vlimb from separate 32-bit arguments - mr r6, r7 -') - li r7, 0 C cy_limb = 0 - mtctr r5 - addic r0, r0, 0 - addi r3, r3, -8 - addi r4, r4, -8 - -L(oop): ldu r0, 8(r4) - mulld r9, r0, r6 - adde r12, r9, r7 C add old high limb and new low limb - srdi r5, r9, 32 - srdi r11, r7, 32 - adde r5, r5, r11 C add high limb parts, set cy - mulhdu r7, r0, r6 - stdu r12, 8(r3) - bdnz L(oop) - - addze r4, r7 - srdi r3, r4, 32 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/p4/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/p4/gmp-mparam.h deleted file mode 100644 index a7271381c5ca2c018fad023cd1fe98944653c842..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/p4/gmp-mparam.h +++ /dev/null @@ -1,173 +0,0 @@ -/* PowerPC-64 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 2008, 2009, 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* 1800 MHz PPC970 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1P_METHOD 1 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 5 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 6 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 46 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 14 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_2_PI2_THRESHOLD 12 -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD 90 - -#define MUL_TOOM22_THRESHOLD 16 -#define MUL_TOOM33_THRESHOLD 57 -#define MUL_TOOM44_THRESHOLD 94 -#define MUL_TOOM6H_THRESHOLD 125 -#define MUL_TOOM8H_THRESHOLD 187 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 65 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 99 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 61 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 56 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 70 - -#define SQR_BASECASE_THRESHOLD 4 -#define SQR_TOOM2_THRESHOLD 30 -#define SQR_TOOM3_THRESHOLD 98 -#define SQR_TOOM4_THRESHOLD 136 -#define SQR_TOOM6_THRESHOLD 180 -#define SQR_TOOM8_THRESHOLD 272 - -#define MULMID_TOOM42_THRESHOLD 34 - -#define MULMOD_BNM1_THRESHOLD 12 -#define SQRMOD_BNM1_THRESHOLD 13 - -#define MUL_FFT_MODF_THRESHOLD 244 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 244, 5}, { 13, 6}, { 7, 5}, { 15, 6}, \ - { 15, 7}, { 8, 6}, { 17, 7}, { 9, 6}, \ - { 19, 7}, { 13, 8}, { 7, 7}, { 17, 8}, \ - { 9, 7}, { 20, 8}, { 11, 7}, { 23, 8}, \ - { 13, 7}, { 29, 8}, { 19, 9}, { 11, 8}, \ - { 27,10}, { 7, 9}, { 15, 8}, { 33, 9}, \ - { 19, 8}, { 39, 9}, { 23, 8}, { 47, 9}, \ - { 27,10}, { 15, 9}, { 39,10}, { 23, 9}, \ - { 47,11}, { 15,10}, { 31, 9}, { 67,10}, \ - { 39, 9}, { 83,10}, { 47, 9}, { 95, 8}, \ - { 191, 9}, { 99,10}, { 55,11}, { 31,10}, \ - { 63, 9}, { 127, 8}, { 255,10}, { 71, 9}, \ - { 143, 8}, { 287,10}, { 79, 9}, { 159, 8}, \ - { 319,11}, { 47,10}, { 95, 9}, { 191, 8}, \ - { 383,10}, { 103,12}, { 31,11}, { 63,10}, \ - { 127, 9}, { 255, 8}, { 511,10}, { 143, 9}, \ - { 287,11}, { 79,10}, { 159, 9}, { 319, 8}, \ - { 639,10}, { 175, 9}, { 351, 8}, { 703,11}, \ - { 95,10}, { 191, 9}, { 383, 8}, { 767,10}, \ - { 207, 9}, { 415,10}, { 223, 9}, { 447,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 511,11}, \ - { 143,10}, { 287, 9}, { 575, 8}, { 1151,11}, \ - { 159,10}, { 319, 9}, { 639,11}, { 175,10}, \ - { 351, 9}, { 703,12}, { 95,11}, { 191,10}, \ - { 383, 9}, { 767,11}, { 207,10}, { 415, 9}, \ - { 831,11}, { 223,10}, { 447,13}, { 8192,14}, \ - { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 106 -#define MUL_FFT_THRESHOLD 2688 - -#define SQR_FFT_MODF_THRESHOLD 212 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 212, 5}, { 13, 6}, { 15, 7}, { 8, 6}, \ - { 17, 7}, { 9, 6}, { 19, 7}, { 13, 8}, \ - { 7, 7}, { 17, 8}, { 9, 7}, { 20, 8}, \ - { 11, 7}, { 23, 8}, { 13, 7}, { 27, 9}, \ - { 7, 8}, { 21, 9}, { 11, 8}, { 25,10}, \ - { 7, 9}, { 15, 8}, { 33, 9}, { 19, 8}, \ - { 39, 9}, { 23, 8}, { 47, 9}, { 27,10}, \ - { 15, 9}, { 39,10}, { 23, 9}, { 47,11}, \ - { 15,10}, { 31, 9}, { 63, 8}, { 127, 9}, \ - { 67,10}, { 39, 9}, { 79, 8}, { 159,10}, \ - { 47, 9}, { 95, 8}, { 191,11}, { 31,10}, \ - { 63, 9}, { 127, 8}, { 255,10}, { 71, 9}, \ - { 143, 8}, { 287,10}, { 79, 9}, { 159, 8}, \ - { 319,11}, { 47, 9}, { 191, 8}, { 383,12}, \ - { 31,11}, { 63,10}, { 127, 9}, { 255, 8}, \ - { 511,10}, { 143, 9}, { 287, 8}, { 575,11}, \ - { 79,10}, { 159, 9}, { 319, 8}, { 639,10}, \ - { 175, 9}, { 351, 8}, { 703,10}, { 191, 9}, \ - { 383, 8}, { 767,10}, { 207, 9}, { 415,11}, \ - { 111,10}, { 223,12}, { 63,11}, { 127,10}, \ - { 255, 9}, { 511,11}, { 143,10}, { 287, 9}, \ - { 575,11}, { 159,10}, { 319, 9}, { 639,11}, \ - { 175,10}, { 351, 9}, { 703, 8}, { 1407,11}, \ - { 191,10}, { 383, 9}, { 767,11}, { 207,10}, \ - { 415,11}, { 223,10}, { 447,13}, { 8192,14}, \ - { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 102 -#define SQR_FFT_THRESHOLD 1984 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 55 -#define MULLO_MUL_N_THRESHOLD 5240 - -#define DC_DIV_QR_THRESHOLD 27 -#define DC_DIVAPPR_Q_THRESHOLD 108 -#define DC_BDIV_QR_THRESHOLD 51 -#define DC_BDIV_Q_THRESHOLD 126 - -#define INV_MULMOD_BNM1_THRESHOLD 38 -#define INV_NEWTON_THRESHOLD 129 -#define INV_APPR_THRESHOLD 116 - -#define BINV_NEWTON_THRESHOLD 198 -#define REDC_1_TO_REDC_N_THRESHOLD 51 - -#define MU_DIV_QR_THRESHOLD 807 -#define MU_DIVAPPR_Q_THRESHOLD 807 -#define MUPI_DIV_QR_THRESHOLD 54 -#define MU_BDIV_QR_THRESHOLD 748 -#define MU_BDIV_Q_THRESHOLD 872 - -#define POWM_SEC_TABLE 4,35,152,780,2145 - -#define MATRIX22_STRASSEN_THRESHOLD 11 -#define HGCD_THRESHOLD 104 -#define HGCD_APPR_THRESHOLD 118 -#define HGCD_REDUCE_THRESHOLD 1329 -#define GCD_DC_THRESHOLD 268 -#define GCDEXT_DC_THRESHOLD 241 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 9 -#define GET_STR_PRECOMPUTE_THRESHOLD 18 -#define SET_STR_DC_THRESHOLD 996 -#define SET_STR_PRECOMPUTE_THRESHOLD 2170 - -#define FAC_DSC_THRESHOLD 442 -#define FAC_ODD_THRESHOLD 26 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/sqr_diagonal.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/sqr_diagonal.asm deleted file mode 100644 index ff5f4b3cfba7142bd24d2444973cce26ab149073..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/sqr_diagonal.asm +++ /dev/null @@ -1,117 +0,0 @@ -dnl PowerPC-64 mpn_sqr_diagonal. - -dnl Copyright 2001-2003, 2005, 2006, 20010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 18 -C POWER4/PPC970 ? -C POWER5 7.25 -C POWER6 9.5 - -C INPUT PARAMETERS -define(`rp', r3) -define(`up', r4) -define(`n', r5) - -ASM_START() -PROLOGUE(mpn_sqr_diagonal) -ifdef(`HAVE_ABI_mode32', -` rldicl n, n, 0, 32') C zero extend n - - rldicl. r0, n, 0,62 C r0 = n & 3, set cr0 - addi n, n, 3 C compute count... - cmpdi cr6, r0, 2 - srdi n, n, 2 C ...for ctr - mtctr n C copy count into ctr - beq cr0, L(b00) - blt cr6, L(b01) - beq cr6, L(b10) - -L(b11): ld r0, 0(up) - ld r10, 8(up) - ld r12, 16(up) - addi rp, rp, -16 - mulld r7, r0, r0 - mulhdu r8, r0, r0 - mulld r9, r10, r10 - mulhdu r10, r10, r10 - mulld r11, r12, r12 - mulhdu r12, r12, r12 - addi up, up, 24 - b L(11) - - ALIGN(16) -L(b01): ld r0, 0(up) - addi rp, rp, -48 - addi up, up, 8 - mulld r11, r0, r0 - mulhdu r12, r0, r0 - b L(01) - - ALIGN(16) -L(b10): ld r0, 0(up) - ld r12, 8(up) - addi rp, rp, -32 - addi up, up, 16 - mulld r9, r0, r0 - mulhdu r10, r0, r0 - mulld r11, r12, r12 - mulhdu r12, r12, r12 - b L(10) - - ALIGN(32) -L(b00): -L(top): ld r0, 0(up) - ld r8, 8(up) - ld r10, 16(up) - ld r12, 24(up) - mulld r5, r0, r0 - mulhdu r6, r0, r0 - mulld r7, r8, r8 - mulhdu r8, r8, r8 - mulld r9, r10, r10 - mulhdu r10, r10, r10 - mulld r11, r12, r12 - mulhdu r12, r12, r12 - addi up, up, 32 - std r5, 0(rp) - std r6, 8(rp) -L(11): std r7, 16(rp) - std r8, 24(rp) -L(10): std r9, 32(rp) - std r10, 40(rp) -L(01): std r11, 48(rp) - std r12, 56(rp) - addi rp, rp, 64 - bdnz L(top) - - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/sub_n.asm deleted file mode 100644 index 6fdc1d471970fda25cd4ed6c05a53cf33710e16b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/sub_n.asm +++ /dev/null @@ -1,88 +0,0 @@ -dnl PowerPC-64/mode32 mpn_sub_n -- Subtract two limb vectors of the same -dnl length and store difference in a third limb vector. - -dnl Copyright 1999-2001, 2003, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630: ? -C POWER4/PPC970: 4.25 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C vp r5 -C n r6 - -ASM_START() -PROLOGUE(mpn_sub_n) - mtctr r6 C copy size into CTR - addic r0, r6, -1 C set cy - ld r8, 0(r4) C load least significant s1 limb - ld r0, 0(r5) C load least significant s2 limb - addi r3, r3, -8 C offset res_ptr, it's updated before it's used - bdz L(end) C If done, skip loop - -L(oop): ld r9, 8(r4) C load s1 limb - ld r10, 8(r5) C load s2 limb - subfe r7, r0, r8 C subtract limbs with cy, set cy - srdi r6, r0, 32 - srdi r11, r8, 32 - subfe r6, r6, r11 - std r7, 8(r3) C store result limb - bdz L(exit) C decrement CTR and exit if done - ldu r8, 16(r4) C load s1 limb and update s1_ptr - ldu r0, 16(r5) C load s2 limb and update s2_ptr - subfe r7, r10, r9 C subtract limbs with cy, set cy - srdi r6, r10, 32 - srdi r11, r9, 32 - subfe r6, r6, r11 - stdu r7, 16(r3) C store result limb and update res_ptr - bdnz L(oop) C decrement CTR and loop back - -L(end): subfe r7, r0, r8 - srdi r6, r0, 32 - srdi r11, r8, 32 - subfe r6, r6, r11 - std r7, 8(r3) C store ultimate result limb - subfe r3, r0, r0 C load !cy into ... - subfic r4, r3, 0 C ... return value register - li r3, 0 C zero extend return value - blr -L(exit): subfe r7, r10, r9 - srdi r6, r10, 32 - srdi r11, r9, 32 - subfe r6, r6, r11 - std r7, 16(r3) - subfe r3, r0, r0 C load !cy into ... - subfic r4, r3, 0 C ... return value register - li r3, 0 C zero extend return value - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/submul_1.asm deleted file mode 100644 index 22601c417e2fcca97f0e3b2d37d5088a37343f9f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode32/submul_1.asm +++ /dev/null @@ -1,82 +0,0 @@ -dnl PowerPC-64 mpn_submul_1 -- Multiply a limb vector with a limb and subtract -dnl the result from a second limb vector. - -dnl Copyright 1999-2001, 2003, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630: ? -C POWER4/PPC970: 16 - -C INPUT PARAMETERS -C rp r3 -C up r4 -C n r5 -C v r6,r7 or r7,r8 - -ASM_START() -PROLOGUE(mpn_submul_1) - -ifdef(`BROKEN_LONGLONG_PARAM', -` rldimi r8, r7, 32,0 C assemble vlimb from separate 32-bit arguments - mr r6, r8 -',` - rldimi r7, r6, 32,0 C assemble vlimb from separate 32-bit arguments - mr r6, r7 -') - li r7, 0 C cy_limb = 0 - mtctr r5 - addic r0, r0, 0 - addi r3, r3, -8 - addi r4, r4, -8 - -L(oop): ldu r0, 8(r4) - mulld r9, r0, r6 - adde r12, r9, r7 C add old high limb and new low limb - srdi r5, r9, 32 - srdi r11, r7, 32 - adde r5, r5, r11 C add high limb parts, set cy - mulhdu r7, r0, r6 - addze r7, r7 - ld r10, 8(r3) - subfc r9, r12, r10 - srdi r5, r12, 32 - srdi r11, r10, 32 - subfe r5, r5, r11 C subtract high limb parts, set cy - stdu r9, 8(r3) - subfe r11, r11, r11 C invert ... - addic r11, r11, 1 C ... carry - bdnz L(oop) - - addze r4, r7 - srdi r3, r4, 32 - blr -EPILOGUE() - diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aors_n.asm deleted file mode 100644 index 0e8474fdcc227b99917c75a2c4c4bf58d028ef86..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aors_n.asm +++ /dev/null @@ -1,189 +0,0 @@ -dnl PowerPC-64 mpn_add_n/mpn_sub_n -- mpn addition and subtraction. - -dnl Copyright 1999-2001, 2003-2005, 2007, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 1.5 -C POWER4/PPC970 2 -C POWER5 2 -C POWER6 2.63 -C POWER7 2.25-2.87 - -C This code is a little bit slower for POWER3/PPC630 than the simple code used -C previously, but it is much faster for POWER4/PPC970. The reason for the -C POWER3/PPC630 slowdown can be attributed to the saving and restoring of 4 -C registers. - -C INPUT PARAMETERS -C rp r3 -C up r4 -C vp r5 -C n r6 - -ifdef(`OPERATION_add_n',` - define(ADDSUBC, adde) - define(ADDSUB, addc) - define(func, mpn_add_n) - define(func_nc, mpn_add_nc) - define(GENRVAL, `addi r3, r3, 1') - define(SETCBR, `addic r0, $1, -1') - define(CLRCB, `addic r0, r0, 0') -') -ifdef(`OPERATION_sub_n',` - define(ADDSUBC, subfe) - define(ADDSUB, subfc) - define(func, mpn_sub_n) - define(func_nc, mpn_sub_nc) - define(GENRVAL, `neg r3, r3') - define(SETCBR, `subfic r0, $1, 0') - define(CLRCB, `addic r0, r1, -1') -') - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc) - -ASM_START() -PROLOGUE(func_nc) - SETCBR(r7) - b L(ent) -EPILOGUE() - -PROLOGUE(func) - CLRCB -L(ent): std r31, -8(r1) - std r30, -16(r1) - std r29, -24(r1) - std r28, -32(r1) - - rldicl. r0, r6, 0,62 C r0 = n & 3, set cr0 - cmpdi cr6, r0, 2 - addi r6, r6, 3 C compute count... - srdi r6, r6, 2 C ...for ctr - mtctr r6 C copy count into ctr - beq cr0, L(b00) - blt cr6, L(b01) - beq cr6, L(b10) - -L(b11): ld r8, 0(r4) C load s1 limb - ld r9, 0(r5) C load s2 limb - ld r10, 8(r4) C load s1 limb - ld r11, 8(r5) C load s2 limb - ld r12, 16(r4) C load s1 limb - addi r4, r4, 24 - ld r0, 16(r5) C load s2 limb - addi r5, r5, 24 - ADDSUBC r29, r9, r8 - ADDSUBC r30, r11, r10 - ADDSUBC r31, r0, r12 - std r29, 0(r3) - std r30, 8(r3) - std r31, 16(r3) - addi r3, r3, 24 - bdnz L(go) - b L(ret) - -L(b01): ld r12, 0(r4) C load s1 limb - addi r4, r4, 8 - ld r0, 0(r5) C load s2 limb - addi r5, r5, 8 - ADDSUBC r31, r0, r12 C add - std r31, 0(r3) - addi r3, r3, 8 - bdnz L(go) - b L(ret) - -L(b10): ld r10, 0(r4) C load s1 limb - ld r11, 0(r5) C load s2 limb - ld r12, 8(r4) C load s1 limb - addi r4, r4, 16 - ld r0, 8(r5) C load s2 limb - addi r5, r5, 16 - ADDSUBC r30, r11, r10 C add - ADDSUBC r31, r0, r12 C add - std r30, 0(r3) - std r31, 8(r3) - addi r3, r3, 16 - bdnz L(go) - b L(ret) - -L(b00): C INITCY C clear/set cy -L(go): ld r6, 0(r4) C load s1 limb - ld r7, 0(r5) C load s2 limb - ld r8, 8(r4) C load s1 limb - ld r9, 8(r5) C load s2 limb - ld r10, 16(r4) C load s1 limb - ld r11, 16(r5) C load s2 limb - ld r12, 24(r4) C load s1 limb - ld r0, 24(r5) C load s2 limb - bdz L(end) - - addi r4, r4, 32 - addi r5, r5, 32 - - ALIGN(16) -L(top): ADDSUBC r28, r7, r6 - ld r6, 0(r4) C load s1 limb - ld r7, 0(r5) C load s2 limb - ADDSUBC r29, r9, r8 - ld r8, 8(r4) C load s1 limb - ld r9, 8(r5) C load s2 limb - ADDSUBC r30, r11, r10 - ld r10, 16(r4) C load s1 limb - ld r11, 16(r5) C load s2 limb - ADDSUBC r31, r0, r12 - ld r12, 24(r4) C load s1 limb - ld r0, 24(r5) C load s2 limb - std r28, 0(r3) - addi r4, r4, 32 - std r29, 8(r3) - addi r5, r5, 32 - std r30, 16(r3) - std r31, 24(r3) - addi r3, r3, 32 - bdnz L(top) C decrement ctr and loop back - -L(end): ADDSUBC r28, r7, r6 - ADDSUBC r29, r9, r8 - ADDSUBC r30, r11, r10 - ADDSUBC r31, r0, r12 - std r28, 0(r3) - std r29, 8(r3) - std r30, 16(r3) - std r31, 24(r3) - -L(ret): ld r31, -8(r1) - ld r30, -16(r1) - ld r29, -24(r1) - ld r28, -32(r1) - - subfe r3, r0, r0 C -cy - GENRVAL - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aorsmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aorsmul_1.asm deleted file mode 100644 index 0c12f9b6608c6d2b596d8bbae2bd8856c2daa206..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aorsmul_1.asm +++ /dev/null @@ -1,225 +0,0 @@ -dnl PowerPC-64 mpn_addmul_1 and mpn_submul_1. - -dnl Copyright 1999-2001, 2003-2006, 2010-2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C mpn_addmul_1 mpn_submul_1 -C cycles/limb cycles/limb -C POWER3/PPC630 6-18 6-18 -C POWER4/PPC970 8 8.3 -C POWER5 8 8.25 -C POWER6 16.25 16.75 -C POWER7 3.77 4.9 - -C TODO -C * Try to reduce the number of needed live registers -C * Add support for _1c entry points - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') -define(`vl', `r6') - -ifdef(`OPERATION_addmul_1',` - define(ADDSUBC, adde) - define(ADDSUB, addc) - define(func, mpn_addmul_1) - define(func_nc, mpn_addmul_1c) C FIXME: not really supported - define(SM, `') -') -ifdef(`OPERATION_submul_1',` - define(ADDSUBC, subfe) - define(ADDSUB, subfc) - define(func, mpn_submul_1) - define(func_nc, mpn_submul_1c) C FIXME: not really supported - define(SM, `$1') -') - -MULFUNC_PROLOGUE(mpn_addmul_1 mpn_submul_1) - -ASM_START() -PROLOGUE(func) - std r31, -8(r1) - rldicl. r0, n, 0,62 C r0 = n & 3, set cr0 - std r30, -16(r1) - cmpdi cr6, r0, 2 - std r29, -24(r1) - addi n, n, 3 C compute count... - std r28, -32(r1) - srdi n, n, 2 C ...for ctr - std r27, -40(r1) - mtctr n C copy count into ctr - beq cr0, L(b00) - blt cr6, L(b01) - beq cr6, L(b10) - -L(b11): ld r9, 0(up) - ld r28, 0(rp) - mulld r0, r9, r6 - mulhdu r12, r9, r6 - ADDSUB r0, r0, r28 - std r0, 0(rp) - addi rp, rp, 8 - ld r9, 8(up) - ld r27, 16(up) - addi up, up, 24 -SM(` subfe r11, r11, r11 ') - b L(bot) - - ALIGN(16) -L(b00): ld r9, 0(up) - ld r27, 8(up) - ld r28, 0(rp) - ld r29, 8(rp) - mulld r0, r9, r6 - mulhdu r5, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - addc r7, r7, r5 - addze r12, r8 - ADDSUB r0, r0, r28 - std r0, 0(rp) - ADDSUBC r7, r7, r29 - std r7, 8(rp) - addi rp, rp, 16 - ld r9, 16(up) - ld r27, 24(up) - addi up, up, 32 -SM(` subfe r11, r11, r11 ') - b L(bot) - - ALIGN(16) -L(b01): bdnz L(gt1) - ld r9, 0(up) - ld r11, 0(rp) - mulld r0, r9, r6 - mulhdu r8, r9, r6 - ADDSUB r0, r0, r11 - std r0, 0(rp) -SM(` subfe r11, r11, r11 ') -SM(` addic r11, r11, 1 ') - addze r3, r8 - blr -L(gt1): ld r9, 0(up) - ld r27, 8(up) - mulld r0, r9, r6 - mulhdu r5, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - ld r9, 16(up) - ld r28, 0(rp) - ld r29, 8(rp) - ld r30, 16(rp) - mulld r11, r9, r6 - mulhdu r10, r9, r6 - addc r7, r7, r5 - adde r11, r11, r8 - addze r12, r10 - ADDSUB r0, r0, r28 - std r0, 0(rp) - ADDSUBC r7, r7, r29 - std r7, 8(rp) - ADDSUBC r11, r11, r30 - std r11, 16(rp) - addi rp, rp, 24 - ld r9, 24(up) - ld r27, 32(up) - addi up, up, 40 -SM(` subfe r11, r11, r11 ') - b L(bot) - -L(b10): addic r0, r0, 0 - li r12, 0 C cy_limb = 0 - ld r9, 0(up) - ld r27, 8(up) - bdz L(end) - addi up, up, 16 - - ALIGN(16) -L(top): mulld r0, r9, r6 - mulhdu r5, r9, r6 C 9 - mulld r7, r27, r6 - mulhdu r8, r27, r6 C 27 - ld r9, 0(up) - ld r28, 0(rp) - ld r27, 8(up) - ld r29, 8(rp) - adde r0, r0, r12 C 0 12 - adde r7, r7, r5 C 5 7 - mulld r5, r9, r6 - mulhdu r10, r9, r6 C 9 - mulld r11, r27, r6 - mulhdu r12, r27, r6 C 27 - ld r9, 16(up) - ld r30, 16(rp) - ld r27, 24(up) - ld r31, 24(rp) - adde r5, r5, r8 C 8 5 - adde r11, r11, r10 C 10 11 - addze r12, r12 C 12 - ADDSUB r0, r0, r28 C 0 28 - std r0, 0(rp) C 0 - ADDSUBC r7, r7, r29 C 7 29 - std r7, 8(rp) C 7 - ADDSUBC r5, r5, r30 C 5 30 - std r5, 16(rp) C 5 - ADDSUBC r11, r11, r31 C 11 31 - std r11, 24(rp) C 11 - addi up, up, 32 -SM(` subfe r11, r11, r11 ') - addi rp, rp, 32 -L(bot): -SM(` addic r11, r11, 1 ') - bdnz L(top) - -L(end): mulld r0, r9, r6 - mulhdu r5, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - ld r28, 0(rp) - ld r29, 8(rp) - adde r0, r0, r12 - adde r7, r7, r5 - addze r8, r8 - ADDSUB r0, r0, r28 - std r0, 0(rp) - ADDSUBC r7, r7, r29 - std r7, 8(rp) -SM(` subfe r11, r11, r11 ') -SM(` addic r11, r11, 1 ') - addze r3, r8 - ld r31, -8(r1) - ld r30, -16(r1) - ld r29, -24(r1) - ld r28, -32(r1) - ld r27, -40(r1) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aorsorrlsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aorsorrlsh1_n.asm deleted file mode 100644 index 2c5400ab526dbc1dab3d2c00df63c900af4090fa..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aorsorrlsh1_n.asm +++ /dev/null @@ -1,43 +0,0 @@ -dnl PowerPC-64 mpn_addlsh1_n, mpn_sublsh1_n, mpn_rsblsh1_n. - -dnl Copyright 2003, 2005, 2009, 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -define(LSH, 1) -define(RSH, 63) - -ifdef(`OPERATION_addlsh1_n',`define(`DO_add')') -ifdef(`OPERATION_sublsh1_n',`define(`DO_sub')') -ifdef(`OPERATION_rsblsh1_n',`define(`DO_rsb')') - -MULFUNC_PROLOGUE(mpn_addlsh1_n mpn_sublsh1_n mpn_rsblsh1_n) - -include_mpn(`powerpc64/mode64/aorsorrlshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aorsorrlsh2_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aorsorrlsh2_n.asm deleted file mode 100644 index 447791abb06ebf9864183617d1b6156e6f3eb248..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aorsorrlsh2_n.asm +++ /dev/null @@ -1,43 +0,0 @@ -dnl PowerPC-64 mpn_addlsh2_n, mpn_sublsh2_n, mpn_rsblsh2_n. - -dnl Copyright 2003, 2005, 2009, 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -define(LSH, 2) -define(RSH, 62) - -ifdef(`OPERATION_addlsh2_n',`define(`DO_add')') -ifdef(`OPERATION_sublsh2_n',`define(`DO_sub')') -ifdef(`OPERATION_rsblsh2_n',`define(`DO_rsb')') - -MULFUNC_PROLOGUE(mpn_addlsh2_n mpn_sublsh2_n mpn_rsblsh2_n) - -include_mpn(`powerpc64/mode64/aorsorrlshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aorsorrlshC_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aorsorrlshC_n.asm deleted file mode 100644 index 6158f541fc0c2f50d8814e85b7f982a8bea15efa..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/aorsorrlshC_n.asm +++ /dev/null @@ -1,187 +0,0 @@ -dnl PowerPC-64 mpn_addlshC_n, mpn_sublshC_n, mpn_rsblshC_n. - -dnl Copyright 2003, 2005, 2009, 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -C cycles/limb -C POWER3/PPC630 1.83 (1.5 c/l should be possible) -C POWER4/PPC970 3 (2.0 c/l should be possible) -C POWER5 3 -C POWER6 3.5-47 -C POWER7 3 - -C STATUS -C * Try combining upx+up, and vpx+vp. -C * The worst case 47 c/l for POWER6 happens if the 3rd operand for ldx is -C greater than the 2nd operand. Yes, this addition is non-commutative wrt -C performance. - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`vp', `r5') -define(`n', `r6') - -ifdef(`DO_add', ` - define(`ADDSUBC', `addc $1, $2, $3') - define(`ADDSUBE', `adde $1, $2, $3') - define(INITCY, `addic $1, r1, 0') - define(RETVAL, `addze r3, $1') - define(`func', mpn_addlsh`'LSH`'_n)') -ifdef(`DO_sub', ` - define(`ADDSUBC', `subfc $1, $2, $3') - define(`ADDSUBE', `subfe $1, $2, $3') - define(INITCY, `addic $1, r1, -1') - define(RETVAL, `subfze r3, $1 - neg r3, r3') - define(`func', mpn_sublsh`'LSH`'_n)') -ifdef(`DO_rsb', ` - define(`ADDSUBC', `subfc $1, $3, $2') - define(`ADDSUBE', `subfe $1, $3, $2') - define(INITCY, `addic $1, r1, -1') - define(RETVAL, `addme r3, $1') - define(`func', mpn_rsblsh`'LSH`'_n)') - -define(`rpx', `r6') -define(`upx', `r7') -define(`vpx', `r12') - -define(`s0', `r0') define(`s1', `r9') -define(`u0', `r8') -define(`v0', `r10') define(`v1', `r11') - - -ASM_START() -PROLOGUE(func) - cmpldi cr0, n, 13 - bgt L(big) - - mtctr n C copy n in ctr - INITCY( r0) C clear cy - - ld v0, 0(vp) C load v limb - ld u0, 0(up) C load u limb - addi up, up, -8 C update up - addi rp, rp, -8 C update rp - sldi s1, v0, LSH - bdz L(ex1) C If done, skip loop - - ALIGN(16) -L(lo0): ld v1, 8(vp) C load v limb - ADDSUBE(s1, s1, u0) C add limbs with cy, set cy - ldu u0, 16(up) C load u limb and update up - srdi s0, v0, RSH C shift down previous v limb - std s1, 8(rp) C store result limb - rldimi s0, v1, LSH, 0 C left shift v limb and merge with prev v limb - bdz L(ex0) C decrement ctr and exit if done - ldu v0, 16(vp) C load v limb and update vp - ADDSUBE(s0, s0, u0) C add limbs with cy, set cy - ld u0, 8(up) C load u limb - srdi s1, v1, RSH C shift down previous v limb - stdu s0, 16(rp) C store result limb and update rp - rldimi s1, v0, LSH, 0 C left shift v limb and merge with prev v limb - bdnz L(lo0) C decrement ctr and loop back - -L(ex1): ADDSUBE(r7, s1, u0) - std r7, 8(rp) C store last result limb - srdi r0, v0, RSH - RETVAL( r0) - blr -L(ex0): ADDSUBE(r7, s0, u0) - std r7, 16(rp) C store last result limb - srdi r0, v1, RSH - RETVAL( r0) - blr - - -L(big): rldicl. r0, n, 0,63 C r0 = n & 1, set cr0 - addi r6, n, -1 C ...for ctr - srdi r6, r6, 1 C ...for ctr - mtctr r6 C copy count into ctr - beq cr0, L(b0) - -L(b1): ld v1, 0(vp) - ld u0, 0(up) - sldi s1, v1, LSH - srdi s0, v1, RSH - ld v0, 8(vp) - ADDSUBC(s1, s1, u0) C add limbs without cy, set cy - addi rpx, rp, -16 - addi rp, rp, -8 - sub upx, up, rp - sub vpx, vp, rp - sub up, up, rpx - sub vp, vp, rpx - addi up, up, 8 - addi upx, upx, 16 - addi vp, vp, 16 - addi vpx, vpx, 24 - b L(mid) - -L(b0): ld v0, 0(vp) - ld u0, 0(up) - sldi s0, v0, LSH - srdi s1, v0, RSH - ld v1, 8(vp) - ADDSUBC(s0, s0, u0) C add limbs without cy, set cy - addi rpx, rp, -8 - addi rp, rp, -16 - sub upx, up, rpx - sub vpx, vp, rpx - sub up, up, rp - sub vp, vp, rp - addi up, up, 8 - addi upx, upx, 16 - addi vp, vp, 16 - addi vpx, vpx, 24 - - ALIGN(32) -L(top): ldx u0, rp, up - ldx v0, rp, vp - rldimi s1, v1, LSH, 0 - stdu s0, 16(rp) - srdi s0, v1, RSH - ADDSUBE(s1, s1, u0) C add limbs with cy, set cy -L(mid): ldx u0, rpx, upx - ldx v1, rpx, vpx - rldimi s0, v0, LSH, 0 - stdu s1, 16(rpx) - srdi s1, v0, RSH - ADDSUBE(s0, s0, u0) C add limbs with cy, set cy - bdnz L(top) C decrement CTR and loop back - - ldx u0, rp, up - rldimi s1, v1, LSH, 0 - std s0, 16(rp) - srdi s0, v1, RSH - ADDSUBE(s1, s1, u0) C add limbs with cy, set cy - std s1, 24(rp) - - RETVAL( s0) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/bdiv_dbm1c.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/bdiv_dbm1c.asm deleted file mode 100644 index 45cded971594cc12fea3ccb313f4ce632623bee3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/bdiv_dbm1c.asm +++ /dev/null @@ -1,132 +0,0 @@ -dnl PPC64 mpn_bdiv_dbm1c. - -dnl Copyright 2008, 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 6-18 -C POWER4/PPC970 8.25 -C POWER5 8.5 fluctuating as function of n % 3 -C POWER6 15 -C POWER7 4.75 - -C TODO -C * Nothing to do... - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') -define(`bd', `r6') -define(`cy', `r7') - -ASM_START() -PROLOGUE(mpn_bdiv_dbm1c) - ld r0, 0(r4) - - rldicl. r12, r5, 0,62 - cmpldi cr6, r12, 2 - cmpldi cr7, r5, 4 - addi r5, r5, 1 - srwi r5, r5, 2 - mtctr r5 - beq cr0, L(b00) - blt cr6, L(b01) - beq cr6, L(b10) - - ALIGN(16) -L(b11): mulld r5, r0, r6 - mulhdu r12, r0, r6 - ld r0, 8(r4) - addi r4, r4, -24 - addi r3, r3, -24 - b L(3) - - ALIGN(16) -L(b00): mulld r9, r0, r6 - mulhdu r8, r0, r6 - addi r4, r4, -16 - addi r3, r3, -16 - b L(0) - - ALIGN(16) -L(b01): mulld r5, r0, r6 - mulhdu r12, r0, r6 - addi r3, r3, -8 - ble cr7, L(e1) - ld r0, 8(r4) - addi r4, r4, -8 - b L(1) - - ALIGN(16) -L(b10): mulld r9, r0, r6 - mulhdu r8, r0, r6 - ble cr7, L(e2) - - ALIGN(16) -L(top): subfc r11, r9, r7 - ld r10, 8(r4) - ld r0, 16(r4) - subfe r7, r8, r11 - std r11, 0(r3) - mulld r5, r10, r6 - mulhdu r12, r10, r6 -L(1): mulld r9, r0, r6 - mulhdu r8, r0, r6 - subfc r11, r5, r7 - subfe r7, r12, r11 - std r11, 8(r3) -L(0): subfc r11, r9, r7 - ld r10, 24(r4) - ld r0, 32(r4) - subfe r7, r8, r11 - std r11, 16(r3) - mulld r5, r10, r6 - mulhdu r12, r10, r6 -L(3): mulld r9, r0, r6 - mulhdu r8, r0, r6 - subfc r11, r5, r7 - subfe r7, r12, r11 - std r11, 24(r3) - addi r4, r4, 32 - addi r3, r3, 32 - bdnz L(top) - -L(e2): ld r10, 8(r4) - mulld r5, r10, r6 - mulhdu r12, r10, r6 - subfc r11, r9, r7 - subfe r7, r8, r11 - std r11, 0(r3) -L(e1): subfc r11, r5, r7 - std r11, 8(r3) - subfe r3, r12, r11 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/cnd_aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/cnd_aors_n.asm deleted file mode 100644 index 24968c19125c20602ca1136e2d0de289cf90c1bc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/cnd_aors_n.asm +++ /dev/null @@ -1,196 +0,0 @@ -dnl PowerPC-64 mpn_cnd_add_n/mpn_cnd_sub_n. - -dnl Copyright 1999-2001, 2003-2005, 2007, 2011, 2012 Free Software Foundation, -dnl Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 2.25 -C POWER5 ? -C POWER6 3 -C POWER7 2 - -C INPUT PARAMETERS -define(`cnd', `r3') -define(`rp', `r4') -define(`up', `r5') -define(`vp', `r6') -define(`n', `r7') - -ifdef(`OPERATION_cnd_add_n',` - define(ADDSUBC, adde) - define(ADDSUB, addc) - define(func, mpn_cnd_add_n) - define(GENRVAL, `addi r3, r3, 1') - define(SETCBR, `addic r0, $1, -1') - define(CLRCB, `addic r0, r0, 0') -') -ifdef(`OPERATION_cnd_sub_n',` - define(ADDSUBC, subfe) - define(ADDSUB, subfc) - define(func, mpn_cnd_sub_n) - define(GENRVAL, `neg r3, r3') - define(SETCBR, `subfic r0, $1, 0') - define(CLRCB, `addic r0, r1, -1') -') - -MULFUNC_PROLOGUE(mpn_cnd_add_n mpn_cnd_sub_n) - -ASM_START() -PROLOGUE(func) - std r31, -8(r1) - std r30, -16(r1) - std r29, -24(r1) - std r28, -32(r1) - std r27, -40(r1) - - subfic cnd, cnd, 0 - subfe cnd, cnd, cnd - - rldicl. r0, n, 0,62 C r0 = n & 3, set cr0 - cmpdi cr6, r0, 2 - addi n, n, 3 C compute count... - srdi n, n, 2 C ...for ctr - mtctr n C copy count into ctr - beq cr0, L(b00) - blt cr6, L(b01) - beq cr6, L(b10) - -L(b11): ld r8, 0(up) C load s1 limb - ld r9, 0(vp) C load s2 limb - ld r10, 8(up) C load s1 limb - ld r11, 8(vp) C load s2 limb - ld r12, 16(up) C load s1 limb - addi up, up, 24 - ld r0, 16(vp) C load s2 limb - addi vp, vp, 24 - and r9, r9, cnd - and r11, r11, cnd - and r0, r0, cnd - ADDSUB r29, r9, r8 - ADDSUBC r30, r11, r10 - ADDSUBC r31, r0, r12 - std r29, 0(rp) - std r30, 8(rp) - std r31, 16(rp) - addi rp, rp, 24 - bdnz L(go) - b L(ret) - -L(b01): ld r12, 0(up) C load s1 limb - addi up, up, 8 - ld r0, 0(vp) C load s2 limb - addi vp, vp, 8 - and r0, r0, cnd - ADDSUB r31, r0, r12 C add - std r31, 0(rp) - addi rp, rp, 8 - bdnz L(go) - b L(ret) - -L(b10): ld r10, 0(up) C load s1 limb - ld r11, 0(vp) C load s2 limb - ld r12, 8(up) C load s1 limb - addi up, up, 16 - ld r0, 8(vp) C load s2 limb - addi vp, vp, 16 - and r11, r11, cnd - and r0, r0, cnd - ADDSUB r30, r11, r10 C add - ADDSUBC r31, r0, r12 C add - std r30, 0(rp) - std r31, 8(rp) - addi rp, rp, 16 - bdnz L(go) - b L(ret) - -L(b00): CLRCB C clear/set cy -L(go): ld r7, 0(up) C load s1 limb - ld r27, 0(vp) C load s2 limb - ld r8, 8(up) C load s1 limb - ld r9, 8(vp) C load s2 limb - ld r10, 16(up) C load s1 limb - ld r11, 16(vp) C load s2 limb - ld r12, 24(up) C load s1 limb - ld r0, 24(vp) C load s2 limb - and r27, r27, cnd - and r9, r9, cnd - and r11, r11, cnd - and r0, r0, cnd - bdz L(end) - - addi up, up, 32 - addi vp, vp, 32 - -L(top): ADDSUBC r28, r27, r7 - ld r7, 0(up) C load s1 limb - ld r27, 0(vp) C load s2 limb - ADDSUBC r29, r9, r8 - ld r8, 8(up) C load s1 limb - ld r9, 8(vp) C load s2 limb - ADDSUBC r30, r11, r10 - ld r10, 16(up) C load s1 limb - ld r11, 16(vp) C load s2 limb - ADDSUBC r31, r0, r12 - ld r12, 24(up) C load s1 limb - ld r0, 24(vp) C load s2 limb - std r28, 0(rp) - addi up, up, 32 - std r29, 8(rp) - addi vp, vp, 32 - std r30, 16(rp) - std r31, 24(rp) - addi rp, rp, 32 - and r27, r27, cnd - and r9, r9, cnd - and r11, r11, cnd - and r0, r0, cnd - bdnz L(top) C decrement ctr and loop back - -L(end): ADDSUBC r28, r27, r7 - ADDSUBC r29, r9, r8 - ADDSUBC r30, r11, r10 - ADDSUBC r31, r0, r12 - std r28, 0(rp) - std r29, 8(rp) - std r30, 16(rp) - std r31, 24(rp) - -L(ret): ld r31, -8(r1) - ld r30, -16(r1) - ld r29, -24(r1) - ld r28, -32(r1) - ld r27, -40(r1) - - subfe r3, r0, r0 C -cy - GENRVAL - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/dive_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/dive_1.asm deleted file mode 100644 index 434dde9145c4b541d19f0f8b3fd7ad815cc00a5a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/dive_1.asm +++ /dev/null @@ -1,132 +0,0 @@ -dnl PowerPC-64 mpn_divexact_1 -- mpn by limb exact division. - -dnl Copyright 2006, 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C norm unorm -C POWER3/PPC630 13-19 -C POWER4/PPC970 16 -C POWER5 16 16 -C POWER6 37 46 -C POWER7 12 12 - -C TODO -C * Check if n=1 code is really an improvement. It probably isn't. -C * Make more similar to mode1o.asm. - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') -define(`d', `r6') - - -ASM_START() - -EXTERN(binvert_limb_table) - -PROLOGUE(mpn_divexact_1,toc) - addic. n, n, -1 - ld r12, 0(up) - bne cr0, L(2) - divdu r0, r12, d - std r0, 0(rp) - blr -L(2): - rldicl. r0, d, 0, 63 - li r10, 0 - bne cr0, L(7) - neg r0, d - and r0, d, r0 - cntlzd r0, r0 - subfic r0, r0, 63 - rldicl r10, r0, 0, 32 - srd d, d, r0 -L(7): - mtctr n - LEA( r5, binvert_limb_table) - rldicl r11, d, 63, 57 - lbzx r0, r5, r11 - mulld r9, r0, r0 - sldi r0, r0, 1 - mulld r9, d, r9 - subf r0, r9, r0 - mulld r5, r0, r0 - sldi r0, r0, 1 - mulld r5, d, r5 - subf r0, r5, r0 - mulld r9, r0, r0 - sldi r0, r0, 1 - mulld r9, d, r9 - subf r7, r9, r0 C r7 = 1/d mod 2^64 - bne cr0, L(norm) - subfic r8, r10, 64 C set carry as side effect - li r5, 0 - srd r11, r12, r10 - - ALIGN(16) -L(loop0): - ld r12, 8(up) - nop - addi up, up, 8 - sld r0, r12, r8 - or r11, r11, r0 - subfe r9, r5, r11 - srd r11, r12, r10 - mulld r0, r7, r9 - mulhdu r5, r0, d - std r0, 0(rp) - addi rp, rp, 8 - bdnz L(loop0) - - subfe r0, r5, r11 - mulld r0, r7, r0 - std r0, 0(rp) - blr - - ALIGN(16) -L(norm): - mulld r11, r12, r7 - mulhdu r5, r11, d - std r11, 0(rp) - ALIGN(16) -L(loop1): - ld r9, 8(up) - addi up, up, 8 - subfe r5, r5, r9 - mulld r11, r7, r5 - mulhdu r5, r11, d C result not used - std r11, 8(rp) - addi rp, rp, 8 - bdnz L(loop1) - blr -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/divrem_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/divrem_1.asm deleted file mode 100644 index b283877006437007d7eccc59430a6bdf3c1bc2f9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/divrem_1.asm +++ /dev/null @@ -1,274 +0,0 @@ -dnl PowerPC-64 mpn_divrem_1 -- Divide an mpn number by an unnormalized limb. - -dnl Copyright 2003-2005, 2007, 2008, 2010, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C norm unorm frac -C POWER3/PPC630 16-34 16-34 ~11 outdated figures -C POWER4/PPC970 28 28 19 -C POWER5 29 29 ~19 -C POWER6 49 59 ~42 -C POWER7 24.5 23 ~14 - -C INPUT PARAMETERS -C qp = r3 -C fn = r4 -C up = r5 -C un = r6 -C d = r7 - -C We use a not very predictable branch in the frac code, therefore the cycle -C count wobbles somewhat. With the alternative branch-free code, things run -C considerably slower on POWER4/PPC970 and POWER5. - -C Add preinv entry point. - - -ASM_START() - -EXTERN_FUNC(mpn_invert_limb) - -PROLOGUE(mpn_divrem_1,toc) - - mfcr r12 - add. r10, r6, r4 - std r25, -56(r1) - mr r25, r4 - mflr r0 - std r26, -48(r1) - mr r26, r5 - std r28, -32(r1) - mr r28, r6 - std r29, -24(r1) - mr r29, r3 - li r3, 0 - std r30, -16(r1) - mr r30, r7 - std r31, -8(r1) - li r31, 0 - std r27, -40(r1) - std r0, 16(r1) - stw r12, 8(r1) - stdu r1, -176(r1) - beq- cr0, L(1) - cmpdi cr7, r7, 0 - sldi r0, r10, 3 - add r11, r0, r29 - addi r29, r11, -8 - blt- cr7, L(162) - cmpdi cr4, r6, 0 - beq+ cr4, L(71) -L(163): - sldi r9, r6, 3 - add r9, r9, r5 - ld r7, -8(r9) - cmpld cr7, r7, r30 - bge- cr7, L(71) - cmpdi cr7, r10, 1 - li r0, 0 - mr r31, r7 - std r0, -8(r11) - addi r29, r29, -8 - mr r3, r7 - beq- cr7, L(1) - addi r28, r6, -1 - cmpdi cr4, r28, 0 -L(71): - cntlzd r27, r30 - sld r30, r30, r27 - sld r31, r31, r27 - mr r3, r30 - CALL( mpn_invert_limb) - beq- cr4, L(110) - sldi r9, r28, 3 - addic. r6, r28, -2 - add r9, r9, r26 - subfic r5, r27, 64 - ld r8, -8(r9) - srd r0, r8, r5 - or r31, r31, r0 - sld r7, r8, r27 - blt- cr0, L(154) - addi r28, r28, -1 - mtctr r28 - sldi r6, r6, 3 - ALIGN(16) -L(uloop): - ldx r8, r26, r6 - nop - mulld r0, r31, r3 - mulhdu r10, r31, r3 - addi r11, r31, 1 - srd r9, r8, r5 - addi r6, r6, -8 - or r9, r7, r9 - addc r0, r0, r9 - adde r10, r10, r11 - mulld r31, r10, r30 - subf r31, r31, r9 - subfc r0, r31, r0 C r <= ql - subfe r0, r0, r0 C r0 = -(r <= ql) - and r9, r30, r0 - add r31, r31, r9 - add r10, r0, r10 C qh -= (r >= ql) - cmpld cr7, r31, r30 - bge- cr7, L(164) -L(123): - std r10, 0(r29) - addi r29, r29, -8 - sld r7, r8, r27 - bdnz L(uloop) -L(154): - addi r11, r31, 1 - nop - mulld r0, r31, r3 - mulhdu r8, r31, r3 - addc r0, r0, r7 - adde r8, r8, r11 - mulld r31, r8, r30 - subf r31, r31, r7 - subfc r0, r0, r31 C r >= ql - subfe r0, r0, r0 C r0 = -(r >= ql) - not r7, r0 - add r8, r7, r8 C qh -= (r >= ql) - andc r0, r30, r0 - add r31, r31, r0 - cmpld cr7, r31, r30 - bge- cr7, L(165) -L(134): - std r8, 0(r29) - addi r29, r29, -8 -L(110): - addic. r0, r25, -1 - blt- cr0, L(156) - mtctr r25 - neg r9, r30 - ALIGN(16) -L(ufloop): - addi r11, r31, 1 - nop - mulld r0, r3, r31 - mulhdu r10, r3, r31 - add r10, r10, r11 - mulld r31, r9, r10 -ifelse(0,1,` - subfc r0, r0, r31 - subfe r0, r0, r0 C r0 = -(r >= ql) - not r7, r0 - add r10, r7, r10 C qh -= (r >= ql) - andc r0, r30, r0 - add r31, r31, r0 -',` - cmpld cr7, r31, r0 - blt cr7, L(29) - add r31, r30, r31 - addi r10, r10, -1 -L(29): -') - std r10, 0(r29) - addi r29, r29, -8 - bdnz L(ufloop) -L(156): - srd r3, r31, r27 -L(1): - addi r1, r1, 176 - ld r0, 16(r1) - lwz r12, 8(r1) - mtlr r0 - ld r25, -56(r1) - ld r26, -48(r1) - mtcrf 8, r12 - ld r27, -40(r1) - ld r28, -32(r1) - ld r29, -24(r1) - ld r30, -16(r1) - ld r31, -8(r1) - blr -L(162): - cmpdi cr7, r6, 0 - beq- cr7, L(8) - sldi r9, r6, 3 - addi r29, r29, -8 - add r9, r9, r5 - addi r28, r6, -1 - ld r31, -8(r9) - subfc r9, r7, r31 - li r9, 0 - adde r9, r9, r9 - neg r0, r9 - std r9, -8(r11) - and r0, r0, r7 - subf r31, r0, r31 -L(8): - mr r3, r30 - CALL( mpn_invert_limb) - li r27, 0 - addic. r6, r28, -1 - blt- cr0, L(110) - mtctr r28 - sldi r6, r6, 3 - ALIGN(16) -L(nloop): - addi r11, r31, 1 - ldx r8, r26, r6 - mulld r0, r31, r3 - mulhdu r10, r31, r3 - addi r6, r6, -8 - addc r0, r0, r8 - adde r10, r10, r11 - mulld r31, r10, r30 - subf r31, r31, r8 C r = nl - qh * d - subfc r0, r31, r0 C r <= ql - subfe r0, r0, r0 C r0 = -(r <= ql) - and r9, r30, r0 - add r31, r31, r9 - add r10, r0, r10 C qh -= (r >= ql) - cmpld cr7, r31, r30 - bge- cr7, L(167) -L(51): - std r10, 0(r29) - addi r29, r29, -8 - bdnz L(nloop) - b L(110) - -L(164): - subf r31, r30, r31 - addi r10, r10, 1 - b L(123) -L(167): - subf r31, r30, r31 - addi r10, r10, 1 - b L(51) -L(165): - subf r31, r30, r31 - addi r8, r8, 1 - b L(134) -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/divrem_2.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/divrem_2.asm deleted file mode 100644 index 73ec23c94d5dee20fe05c118f74d420173ded73b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/divrem_2.asm +++ /dev/null @@ -1,187 +0,0 @@ -dnl PPC-64 mpn_divrem_2 -- Divide an mpn number by a normalized 2-limb number. - -dnl Copyright 2007, 2008 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C norm frac -C POWER3/PPC630 -C POWER4/PPC970 ? ? -C POWER5 37 ? -C POWER6 62 ? -C POWER6 30.5 ? - -C INPUT PARAMETERS -C qp = r3 -C fn = r4 -C up = r5 -C un = r6 -C dp = r7 - - -ifdef(`DARWIN',,` -define(`r2',`r31')') C FIXME! - -ASM_START() - -EXTERN_FUNC(mpn_invert_limb) - -PROLOGUE(mpn_divrem_2,toc) - mflr r0 - std r23, -72(r1) - std r24, -64(r1) - std r25, -56(r1) - std r26, -48(r1) - std r27, -40(r1) - std r28, -32(r1) - std r29, -24(r1) - std r30, -16(r1) - std r31, -8(r1) - std r0, 16(r1) - stdu r1, -192(r1) - mr r24, r3 - mr r25, r4 - sldi r0, r6, 3 - add r26, r5, r0 - addi r26, r26, -24 - ld r30, 8(r7) - ld r28, 0(r7) - ld r29, 16(r26) - ld r31, 8(r26) - -ifelse(0,1,` - li r23, 0 - cmpld cr7, r29, r30 - blt cr7, L(8) - bgt cr7, L(9) - cmpld cr0, r31, r28 - blt cr0, L(8) -L(9): subfc r31, r28, r31 - subfe r29, r30, r29 - li r23, 1 -',` - li r23, 0 - cmpld cr7, r29, r30 - blt cr7, L(8) - mfcr r0 - rlwinm r0, r0, 30, 1 - subfc r9, r28, r31 - addze. r0, r0 - nop - beq cr0, L(8) - subfc r31, r28, r31 - subfe r29, r30, r29 - li r23, 1 -') - -L(8): - add r27, r25, r6 - addic. r27, r27, -3 - blt cr0, L(18) - mr r3, r30 - CALL( mpn_invert_limb) - mulld r10, r3, r30 - mulhdu r0, r3, r28 - addc r8, r10, r28 - subfe r11, r1, r1 - addc r10, r8, r0 - addze. r11, r11 - blt cr0, L(91) -L(40): - subfc r10, r30, r10 - addme. r11, r11 - addi r3, r3, -1 - bge cr0, L(40) -L(91): - addi r5, r27, 1 - mtctr r5 - sldi r0, r27, 3 - add r24, r24, r0 - ALIGN(16) -L(loop): - mulhdu r8, r29, r3 - mulld r6, r29, r3 - addc r6, r6, r31 - adde r8, r8, r29 - cmpd cr7, r27, r25 - mulld r0, r30, r8 - mulhdu r11, r28, r8 - mulld r10, r28, r8 - subf r31, r0, r31 - li r7, 0 - blt cr7, L(60) - ld r7, 0(r26) - addi r26, r26, -8 - nop -L(60): subfc r7, r28, r7 - subfe r31, r30, r31 - subfc r7, r10, r7 - subfe r4, r11, r31 - subfc r9, r6, r4 - subfe r9, r1, r1 - andc r6, r28, r9 - andc r0, r30, r9 - addc r31, r7, r6 - adde r29, r4, r0 - subf r8, r9, r8 - cmpld cr7, r29, r30 - bge- cr7, L(fix) -L(bck): std r8, 0(r24) - addi r24, r24, -8 - addi r27, r27, -1 - bdnz L(loop) -L(18): - std r31, 8(r26) - std r29, 16(r26) - mr r3, r23 - addi r1, r1, 192 - ld r0, 16(r1) - mtlr r0 - ld r23, -72(r1) - ld r24, -64(r1) - ld r25, -56(r1) - ld r26, -48(r1) - ld r27, -40(r1) - ld r28, -32(r1) - ld r29, -24(r1) - ld r30, -16(r1) - ld r31, -8(r1) - blr -L(fix): - mfcr r0 - rlwinm r0, r0, 30, 1 - subfc r9, r28, r31 - addze. r0, r0 - beq cr0, L(bck) - subfc r31, r28, r31 - subfe r29, r30, r29 - addi r8, r8, 1 - b L(bck) -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/gcd_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/gcd_1.asm deleted file mode 100644 index a207344168430a2b69a07e3995ad6bdb3a9ff0ab..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/gcd_1.asm +++ /dev/null @@ -1,125 +0,0 @@ -dnl PowerPC-64 mpn_gcd_1. - -dnl Copyright 2000-2002, 2005, 2009, 2011-2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/bit (approx) -C POWER3/PPC630 ? -C POWER4/PPC970 8.5 -C POWER5 ? -C POWER6 10.1 -C POWER7 9.4 -C Numbers measured with: speed -CD -s16-64 -t48 mpn_gcd_1 - -C INPUT PARAMETERS -define(`up', `r3') -define(`n', `r4') -define(`v0', `r5') - -ifdef(`BMOD_1_TO_MOD_1_THRESHOLD',, - `define(`BMOD_1_TO_MOD_1_THRESHOLD',30)') - -EXTERN_FUNC(mpn_mod_1) -EXTERN_FUNC(mpn_modexact_1c_odd) - -ASM_START() -PROLOGUE(mpn_gcd_1,toc) - mflr r0 - std r30, -16(r1) - std r31, -8(r1) - std r0, 16(r1) - stdu r1, -128(r1) - - ld r7, 0(up) C U low limb - or r0, r5, r7 C x | y - - neg r6, r0 - and r6, r6, r0 - cntlzd r31, r6 C common twos - subfic r31, r31, 63 - - neg r6, r5 - and r6, r6, r5 - cntlzd r8, r6 - subfic r8, r8, 63 - srd r5, r5, r8 - mr r30, r5 C v0 saved - - cmpdi r4, BMOD_1_TO_MOD_1_THRESHOLD - blt L(bmod) - CALL( mpn_mod_1) - b L(reduced) -L(bmod): - li r6, 0 - CALL( mpn_modexact_1c_odd) -L(reduced): - -define(`mask', `r0')dnl -define(`a1', `r4')dnl -define(`a2', `r5')dnl -define(`d1', `r6')dnl -define(`d2', `r7')dnl -define(`cnt', `r9')dnl - - neg. r6, r3 - and r6, r6, r3 - cntlzd cnt, r6 - subfic cnt, cnt, 63 - li r12, 63 - bne L(mid) - b L(end) - - ALIGN(16) -L(top): - and a1, r10, mask C d - a - andc a2, r11, mask C a - d - and d1, r3, mask C a - andc d2, r30, mask C d - or r3, a1, a2 C new a - subf cnt, cnt, r12 - or r30, d1, d2 C new d -L(mid): srd r3, r3, cnt - sub. r10, r30, r3 C r10 = d - a - subc r11, r3, r30 C r11 = a - d - neg r8, r10 - and r8, r8, r10 - subfe mask, mask, mask - cntlzd cnt, r8 - bne L(top) - -L(end): sld r3, r30, r31 - - addi r1, r1, 128 - ld r0, 16(r1) - ld r30, -16(r1) - ld r31, -8(r1) - mtlr r0 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/gmp-mparam.h deleted file mode 100644 index f8305f47202e7263038b96ea935ca1d43274c4a2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/gmp-mparam.h +++ /dev/null @@ -1,82 +0,0 @@ -/* PowerPC-64 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 2008, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* 1600MHz PPC970 */ - -/* Generated by tuneup.c, 2009-01-14, gcc 4.0 */ - -#define MUL_TOOM22_THRESHOLD 14 -#define MUL_TOOM33_THRESHOLD 93 -#define MUL_TOOM44_THRESHOLD 135 - -#define SQR_BASECASE_THRESHOLD 6 -#define SQR_TOOM2_THRESHOLD 32 -#define SQR_TOOM3_THRESHOLD 74 -#define SQR_TOOM4_THRESHOLD 136 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 44 -#define MULLO_MUL_N_THRESHOLD 234 - -#define DIV_SB_PREINV_THRESHOLD 0 /* always */ -#define DIV_DC_THRESHOLD 33 -#define POWM_THRESHOLD 89 - -#define MATRIX22_STRASSEN_THRESHOLD 15 -#define HGCD_THRESHOLD 93 -#define GCD_DC_THRESHOLD 237 -#define GCDEXT_DC_THRESHOLD 273 -#define JACOBI_BASE_METHOD 1 - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1_THRESHOLD 6 -#define MOD_1_2_THRESHOLD 9 -#define MOD_1_4_THRESHOLD 23 -#define USE_PREINV_DIVREM_1 0 -#define USE_PREINV_MOD_1 0 -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define MODEXACT_1_ODD_THRESHOLD 0 /* always (native) */ - -#define GET_STR_DC_THRESHOLD 12 -#define GET_STR_PRECOMPUTE_THRESHOLD 24 -#define SET_STR_DC_THRESHOLD 650 -#define SET_STR_PRECOMPUTE_THRESHOLD 1713 - -#define MUL_FFT_TABLE { 336, 672, 1856, 2816, 7168, 20480, 81920, 327680, 0 } -#define MUL_FFT_MODF_THRESHOLD 304 -#define MUL_FFT_THRESHOLD 4224 - -#define SQR_FFT_TABLE { 272, 672, 1600, 2816, 7168, 20480, 81920, 327680, 786432, 0 } -#define SQR_FFT_MODF_THRESHOLD 272 -#define SQR_FFT_THRESHOLD 2688 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/invert_limb.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/invert_limb.asm deleted file mode 100644 index dfdba6451ed7fd2b2c8e8f519906621543338a22..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/invert_limb.asm +++ /dev/null @@ -1,88 +0,0 @@ -dnl PowerPC-64 mpn_invert_limb -- Invert a normalized limb. - -dnl Copyright 2004-2006, 2008, 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb (approximate) -C POWER3/PPC630 80 -C POWER4/PPC970 86 -C POWER5 86 -C POWER6 170 -C POWER7 66 - -ASM_START() -PROLOGUE(mpn_invert_limb,toc) - LEAL( r12, approx_tab) - srdi r9, r3, 32 - rlwinm r9, r9, 10, 23, 30 C (d >> 55) & 0x1fe - srdi r10, r3, 24 C d >> 24 - lis r11, 0x1000 - rldicl r8, r3, 0, 63 C d mod 2 - addi r10, r10, 1 C d40 - sldi r11, r11, 32 C 2^60 - srdi r7, r3, 1 C d/2 - add r7, r7, r8 C d63 = ceil(d/2) - neg r8, r8 C mask = -(d mod 2) - lhzx r0, r9, r12 - mullw r9, r0, r0 C v0*v0 - sldi r6, r0, 11 C v0 << 11 - addi r0, r6, -1 C (v0 << 11) - 1 - mulld r9, r9, r10 C v0*v0*d40 - srdi r9, r9, 40 C v0*v0*d40 >> 40 - subf r9, r9, r0 C v1 = (v0 << 11) - (v0*v0*d40 >> 40) - 1 - mulld r0, r9, r10 C v1*d40 - sldi r6, r9, 13 C v1 << 13 - subf r0, r0, r11 C 2^60 - v1*d40 - mulld r0, r0, r9 C v1 * (2^60 - v1*d40) - srdi r0, r0, 47 C v1 * (2^60 - v1*d40) >> 47 - add r0, r0, r6 C v2 = (v1 << 13) + (v1 * (2^60 - v1*d40) >> 47) - mulld r11, r0, r7 C v2 * d63 - srdi r10, r0, 1 C v2 >> 1 - sldi r9, r0, 31 C v2 << 31 - and r8, r10, r8 C (v2 >> 1) & mask - subf r8, r11, r8 C ((v2 >> 1) & mask) - v2 * d63 - mulhdu r0, r8, r0 C p1 = v2 * (((v2 >> 1) & mask) - v2 * d63) - srdi r0, r0, 1 C p1 >> 1 - add r0, r0, r9 C v3 = (v2 << 31) + (p1 >> 1) - nop - mulld r11, r0, r3 - mulhdu r9, r0, r3 - addc r10, r11, r3 - adde r3, r9, r3 - subf r3, r3, r0 - blr -EPILOGUE() - -DEF_OBJECT(approx_tab) -forloop(i,256,512-1,dnl -` .short eval(0x7fd00/i) -')dnl -END_OBJECT(approx_tab) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mod_1_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mod_1_1.asm deleted file mode 100644 index 873373054f5194bd1175df9fc189da9ed4e7ac97..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mod_1_1.asm +++ /dev/null @@ -1,164 +0,0 @@ -dnl PowerPC-64 mpn_mod_1_1p - -dnl Copyright 2010, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 17 -C POWER5 16 -C POWER6 30 -C POWER7 10.2 - -C TODO -C * Optimise, in particular the cps function. This was compiler-generated and -C then hand optimised. - -C INPUT PARAMETERS -define(`ap', `r3') -define(`n', `r4') -define(`d', `r5') -define(`cps', `r6') - -ASM_START() - -EXTERN_FUNC(mpn_invert_limb) - -PROLOGUE(mpn_mod_1_1p) - sldi r10, r4, 3 - addi r4, r4, -1 - add r3, r3, r10 - ld r0, 16(r6) C B1modb - ld r12, 24(r6) C B2modb - ld r9, -8(r3) - ld r10, -16(r3) - mtctr r4 - mulhdu r8, r9, r0 - mulld r7, r9, r0 - addc r11, r7, r10 - addze r9, r8 - bdz L(end) - - ALIGN(16) -L(top): ld r4, -24(r3) - addi r3, r3, -8 - nop - mulld r10, r11, r0 - mulld r8, r9, r12 - mulhdu r11, r11, r0 - mulhdu r9, r9, r12 - addc r7, r10, r4 - addze r10, r11 - addc r11, r8, r7 - adde r9, r9, r10 - bdnz L(top) - -L(end): -ifdef(`HAVE_LIMB_LITTLE_ENDIAN', -` lwz r0, 8(r6)', -` lwz r0, 12(r6)') - ld r3, 0(r6) - cmpdi cr7, r0, 0 - beq- cr7, L(4) - subfic r10, r0, 64 - sld r9, r9, r0 - srd r10, r11, r10 - or r9, r10, r9 -L(4): subfc r10, r5, r9 - subfe r10, r10, r10 - nand r10, r10, r10 - sld r11, r11, r0 - and r10, r10, r5 - subf r9, r10, r9 - mulhdu r10, r9, r3 - mulld r3, r9, r3 - addi r9, r9, 1 - addc r8, r3, r11 - adde r3, r10, r9 - mulld r3, r3, r5 - subf r3, r3, r11 - cmpld cr7, r8, r3 - bge cr7, L(5) C FIXME: Make branch-less - add r3, r3, r5 -L(5): cmpld cr7, r3, r5 - bge- cr7, L(10) - srd r3, r3, r0 - blr - -L(10): subf r3, r5, r3 - srd r3, r3, r0 - blr -EPILOGUE() - -PROLOGUE(mpn_mod_1_1p_cps,toc) - mflr r0 - std r29, -24(r1) - std r30, -16(r1) - std r31, -8(r1) - cntlzd r31, r4 - std r0, 16(r1) - extsw r31, r31 - mr r29, r3 - stdu r1, -144(r1) - sld r30, r4, r31 - mr r3, r30 - CALL( mpn_invert_limb) - cmpdi cr7, r31, 0 - neg r0, r30 - beq- cr7, L(13) - subfic r11, r31, 64 - li r0, 1 - neg r9, r30 - srd r11, r3, r11 - sld r0, r0, r31 - or r0, r11, r0 - mulld r0, r0, r9 -L(13): mulhdu r9, r0, r3 - mulld r11, r0, r3 - add r9, r0, r9 - nor r9, r9, r9 - mulld r9, r9, r30 - cmpld cr7, r11, r9 - bge cr7, L(14) - add r9, r9, r30 -L(14): addi r1, r1, 144 - srd r0, r0, r31 - std r31, 8(r29) - std r3, 0(r29) - std r0, 16(r29) - ld r0, 16(r1) - srd r9, r9, r31 - ld r30, -16(r1) - ld r31, -8(r1) - std r9, 24(r29) - ld r29, -24(r1) - mtlr r0 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mod_1_4.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mod_1_4.asm deleted file mode 100644 index 0b7d6bf6997f85fa93417ab1bbf926648fce9499..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mod_1_4.asm +++ /dev/null @@ -1,270 +0,0 @@ -dnl PowerPC-64 mpn_mod_1s_4p - -dnl Copyright 2010, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 9 -C POWER5 9 -C POWER6 13 -C POWER7 3.5 - -C TODO -C * Optimise, in particular the cps function. This was compiler-generated and -C then hand optimised. - -C INPUT PARAMETERS -define(`ap', `r3') -define(`n', `r4') -define(`d', `r5') -define(`cps', `r6') - -ASM_START() - -EXTERN_FUNC(mpn_invert_limb) - -PROLOGUE(mpn_mod_1s_4p) - std r23, -72(r1) - ld r23, 48(cps) - std r24, -64(r1) - std r25, -56(r1) - ld r24, 32(cps) - ld r25, 24(cps) - std r26, -48(r1) - std r27, -40(r1) - ld r26, 16(cps) - std r28, -32(r1) - std r29, -24(r1) - std r30, -16(r1) - std r31, -8(r1) - ld r30, 40(cps) - - rldicl. r0, n, 0,62 - sldi r31, n, 3 - add ap, ap, r31 C make ap point at end of operand - - cmpdi cr7, r0, 2 - beq cr0, L(b00) - blt cr7, L(b01) - beq cr7, L(b10) - -L(b11): ld r11, -16(ap) - ld r9, -8(ap) - ld r0, -24(ap) - mulhdu r27, r11, r26 - mulld r8, r11, r26 - mulhdu r11, r9, r25 - mulld r9, r9, r25 - addc r31, r8, r0 - addze r10, r27 - addc r0, r9, r31 - adde r9, r11, r10 - addi ap, ap, -40 - b L(6) - - ALIGN(16) -L(b00): ld r11, -24(ap) - ld r10, -16(ap) - ld r9, -8(ap) - ld r0, -32(ap) - mulld r8, r11, r26 - mulhdu r7, r10, r25 - mulhdu r27, r11, r26 - mulhdu r11, r9, r24 - mulld r10, r10, r25 - mulld r9, r9, r24 - addc r31, r8, r0 - addze r0, r27 - addc r8, r31, r10 - adde r10, r0, r7 - addc r0, r9, r8 - adde r9, r11, r10 - addi ap, ap, -48 - b L(6) - - ALIGN(16) -L(b01): li r9, 0 - ld r0, -8(ap) - addi ap, ap, -24 - b L(6) - - ALIGN(16) -L(b10): ld r9, -8(ap) - ld r0, -16(ap) - addi ap, ap, -32 - - ALIGN(16) -L(6): addi r10, n, 3 - srdi r7, r10, 2 - mtctr r7 - bdz L(end) - - ALIGN(16) -L(top): ld r31, -16(ap) - ld r10, -8(ap) - ld r11, 8(ap) - ld r12, 0(ap) - mulld r29, r0, r30 C rl * B4modb - mulhdu r0, r0, r30 C rl * B4modb - mulhdu r27, r10, r26 - mulld r10, r10, r26 - mulhdu r7, r9, r23 C rh * B5modb - mulld r9, r9, r23 C rh * B5modb - mulhdu r28, r11, r24 - mulld r11, r11, r24 - mulhdu r4, r12, r25 - mulld r12, r12, r25 - addc r8, r10, r31 - addze r10, r27 - addi ap, ap, -32 - addc r27, r8, r12 - adde r12, r10, r4 - addc r11, r27, r11 - adde r31, r12, r28 - addc r12, r11, r29 - adde r4, r31, r0 - addc r0, r9, r12 - adde r9, r7, r4 - bdnz L(top) - -L(end): -ifdef(`HAVE_LIMB_LITTLE_ENDIAN', -` lwz r3, 8(cps)', -` lwz r3, 12(cps)') - mulld r10, r9, r26 - mulhdu r9, r9, r26 - addc r11, r0, r10 - addze r9, r9 - ld r10, 0(cps) - subfic r8, r3, 64 - sld r9, r9, r3 - srd r8, r11, r8 - sld r11, r11, r3 - or r9, r8, r9 - mulld r0, r9, r10 - mulhdu r10, r9, r10 - addi r9, r9, 1 - addc r8, r0, r11 - adde r0, r10, r9 - mulld r0, r0, d - subf r0, r0, r11 - cmpld cr7, r8, r0 - bge cr7, L(9) - add r0, r0, d -L(9): cmpld cr7, r0, d - bge- cr7, L(16) -L(10): srd r3, r0, r3 - ld r23, -72(r1) - ld r24, -64(r1) - ld r25, -56(r1) - ld r26, -48(r1) - ld r27, -40(r1) - ld r28, -32(r1) - ld r29, -24(r1) - ld r30, -16(r1) - ld r31, -8(r1) - blr - -L(16): subf r0, d, r0 - b L(10) -EPILOGUE() - -PROLOGUE(mpn_mod_1s_4p_cps,toc) - mflr r0 - std r29, -24(r1) - std r30, -16(r1) - mr r29, r3 - std r0, 16(r1) - std r31, -8(r1) - stdu r1, -144(r1) - cntlzd r31, r4 - sld r30, r4, r31 - mr r3, r30 - CALL( mpn_invert_limb) - subfic r9, r31, 64 - li r10, 1 - sld r10, r10, r31 - srd r9, r3, r9 - neg r0, r30 - or r10, r10, r9 - mulld r10, r10, r0 - mulhdu r11, r10, r3 - nor r11, r11, r11 - subf r11, r10, r11 - mulld r11, r11, r30 - mulld r0, r10, r3 - cmpld cr7, r0, r11 - bge cr7, L(18) - add r11, r11, r30 -L(18): mulhdu r9, r11, r3 - add r9, r11, r9 - nor r9, r9, r9 - mulld r9, r9, r30 - mulld r0, r11, r3 - cmpld cr7, r0, r9 - bge cr7, L(19) - add r9, r9, r30 -L(19): mulhdu r0, r9, r3 - add r0, r9, r0 - nor r0, r0, r0 - mulld r0, r0, r30 - mulld r8, r9, r3 - cmpld cr7, r8, r0 - bge cr7, L(20) - add r0, r0, r30 -L(20): mulhdu r8, r0, r3 - add r8, r0, r8 - nor r8, r8, r8 - mulld r8, r8, r30 - mulld r7, r0, r3 - cmpld cr7, r7, r8 - bge cr7, L(21) - add r8, r8, r30 -L(21): srd r0, r0, r31 - addi r1, r1, 144 - srd r8, r8, r31 - srd r10, r10, r31 - srd r11, r11, r31 - std r0, 40(r29) - std r31, 8(r29) - srd r9, r9, r31 - ld r0, 16(r1) - ld r30, -16(r1) - std r8, 48(r29) - std r3, 0(r29) - mtlr r0 - ld r31, -8(r1) - std r10, 16(r29) - std r11, 24(r29) - std r9, 32(r29) - ld r29, -24(r1) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mod_34lsub1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mod_34lsub1.asm deleted file mode 100644 index c35e0e37a4a119cff54919e11b52b2bec9ae0c0f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mod_34lsub1.asm +++ /dev/null @@ -1,132 +0,0 @@ -dnl PowerPC-64 mpn_mod_34lsub1 -- modulo 2^48-1. - -dnl Copyright 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 1.33 -C POWER4/PPC970 1.5 -C POWER5 1.32 -C POWER6 2.35 -C POWER7 1 - -C INPUT PARAMETERS -define(`up',`r3') -define(`n',`r4') - -ASM_START() -PROLOGUE(mpn_mod_34lsub1) - li r8, 0 - li r9, 0 - li r10, 0 - li r11, 0 - - cmpdi cr6, n, 3 - blt cr6, L(lt3) - - li r0, -0x5556 C 0xFFFFFFFFFFFFAAAA - rldimi r0, r0, 16, 32 C 0xFFFFFFFFAAAAAAAA - rldimi r0, r0, 32, 63 C 0xAAAAAAAAAAAAAAAB - mulhdu r0, r0, n - srdi r0, r0, 1 C r0 = [n / 3] - mtctr r0 - - ld r5, 0(up) - ld r6, 8(up) - ld r7, 16(up) - addi up, up, 24 - bdz L(end) - - ALIGN(16) -L(top): addc r8, r8, r5 - nop - ld r5, 0(up) - adde r9, r9, r6 - ld r6, 8(up) - adde r10, r10, r7 - ld r7, 16(up) - addi up, up, 48 - addze r11, r11 - bdz L(endx) - addc r8, r8, r5 - nop - ld r5, -24(up) - adde r9, r9, r6 - ld r6, -16(up) - adde r10, r10, r7 - ld r7, -8(up) - addze r11, r11 - bdnz L(top) - - addi up, up, 24 -L(endx): - addi up, up, -24 - -L(end): addc r8, r8, r5 - adde r9, r9, r6 - adde r10, r10, r7 - addze r11, r11 - - sldi r5, r0, 1 - add r5, r5, r0 C r11 = n / 3 * 3 - sub n, n, r5 C n = n mod 3 -L(lt3): cmpdi cr6, n, 1 - blt cr6, L(2) - - ld r5, 0(up) - addc r8, r8, r5 - li r6, 0 - beq cr6, L(1) - - ld r6, 8(up) -L(1): adde r9, r9, r6 - addze r10, r10 - addze r11, r11 - -L(2): rldicl r0, r8, 0, 16 C r0 = r8 mod 2^48 - srdi r3, r8, 48 C r3 = r8 div 2^48 - rldic r4, r9, 16, 16 C r4 = (r9 mod 2^32) << 16 - srdi r5, r9, 32 C r5 = r9 div 2^32 - rldic r6, r10, 32, 16 C r6 = (r10 mod 2^16) << 32 - srdi r7, r10, 16 C r7 = r10 div 2^16 - - add r0, r0, r3 - add r4, r4, r5 - add r6, r6, r7 - - add r0, r0, r4 - add r6, r6, r11 - - add r3, r0, r6 - blr -EPILOGUE() - -C |__r10__|__r9___|__r8___| -C |-----|-----|-----|-----| diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mode1o.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mode1o.asm deleted file mode 100644 index 726339a9310541d34d71ed93e400148edb749f3c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mode1o.asm +++ /dev/null @@ -1,117 +0,0 @@ -dnl PowerPC-64 mpn_modexact_1_odd -- mpn by limb exact remainder. - -dnl Copyright 2006 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 13-19 -C POWER4/PPC970 16 -C POWER5 16 -C POWER6 ? -C POWER7 12 - -C TODO -C * Check if n=1 code is really an improvement. It probably isn't. -C * Make more similar to dive_1.asm. - -C INPUT PARAMETERS -define(`up', `r3') -define(`n', `r4') -define(`d', `r5') -define(`cy', `r6') - - -ASM_START() - -EXTERN(binvert_limb_table) - -PROLOGUE(mpn_modexact_1c_odd,toc) - addic. n, n, -1 C set carry as side effect - ld r8, 0(up) - bne cr0, L(2) - cmpld cr7, r6, r8 - bge cr7, L(4) - subf r8, r6, r8 - divdu r3, r8, d - mulld r3, r3, d - subf. r3, r3, r8 - beqlr cr0 - subf r3, r3, d - blr - -L(4): subf r3, r8, r6 - divdu r8, r3, d - mulld r8, r8, d - subf r3, r8, r3 - blr - -L(2): LEA( r7, binvert_limb_table) - rldicl r9, d, 63, 57 - mtctr n - lbzx r0, r7, r9 - mulld r7, r0, r0 - sldi r0, r0, 1 - mulld r7, d, r7 - subf r0, r7, r0 - mulld r9, r0, r0 - sldi r0, r0, 1 - mulld r9, d, r9 - subf r0, r9, r0 - mulld r7, r0, r0 - sldi r0, r0, 1 - mulld r7, d, r7 - subf r9, r7, r0 - - ALIGN(16) -L(loop): - subfe r0, r6, r8 - ld r8, 8(up) - addi up, up, 8 - mulld r0, r9, r0 - mulhdu r6, r0, d - bdnz L(loop) - - cmpld cr7, d, r8 - blt cr7, L(10) - - subfe r0, r0, r0 - subf r6, r0, r6 - cmpld cr7, r6, r8 - subf r3, r8, r6 - bgelr cr7 - add r3, d, r3 - blr - -L(10): subfe r0, r6, r8 - mulld r0, r9, r0 - mulhdu r3, r0, d - blr -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mul_1.asm deleted file mode 100644 index 27a8f8fb4d1524c62f8ac8cfeb155e69da74bb68..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mul_1.asm +++ /dev/null @@ -1,168 +0,0 @@ -dnl PowerPC-64 mpn_mul_1 -- Multiply a limb vector with a limb and store -dnl the result in a second limb vector. - -dnl Copyright 1999-2001, 2003-2006, 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 6-18 -C POWER4/PPC970 7.25? not updated for last file revision -C POWER5 7.25 -C POWER6 14 -C POWER7 2.9 - -C TODO -C * Try to reduce the number of needed live registers (at least r5 and r10 -C could be combined) -C * Optimize feed-in code, for speed and size. -C * Clean up r12/r7 usage in feed-in code. - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') -define(`vl', `r6') - -ASM_START() -PROLOGUE(mpn_mul_1c) - std r27, -40(r1) - std r26, -48(r1) - mr r12, r7 - b L(ent) -EPILOGUE() -PROLOGUE(mpn_mul_1) - std r27, -40(r1) - std r26, -48(r1) - li r12, 0 C cy_limb = 0 -L(ent): ld r26, 0(up) - - rldicl. r0, n, 0,62 C r0 = n & 3, set cr0 - cmpdi cr6, r0, 2 - addic n, n, 3 C compute count... - srdi n, n, 2 C ...for ctr - mtctr n C copy count into ctr - beq cr0, L(b00) - blt cr6, L(b01) - beq cr6, L(b10) - -L(b11): mr r7, r12 - mulld r0, r26, r6 - mulhdu r12, r26, r6 - addi up, up, 8 - addc r0, r0, r7 - std r0, 0(rp) - addi rp, rp, 8 - b L(fic) - -L(b00): ld r27, 8(up) - addi up, up, 16 - mulld r0, r26, r6 - mulhdu r5, r26, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - addc r0, r0, r12 - adde r7, r7, r5 - addze r12, r8 - std r0, 0(rp) - std r7, 8(rp) - addi rp, rp, 16 - b L(fic) - - nop C alignment -L(b01): bdnz L(gt1) - mulld r0, r26, r6 - mulhdu r8, r26, r6 - addc r0, r0, r12 - std r0, 0(rp) - b L(ret) -L(gt1): ld r27, 8(up) - nop - mulld r0, r26, r6 - mulhdu r5, r26, r6 - ld r26, 16(up) - mulld r7, r27, r6 - mulhdu r8, r27, r6 - mulld r9, r26, r6 - mulhdu r10, r26, r6 - addc r0, r0, r12 - adde r7, r7, r5 - adde r9, r9, r8 - addze r12, r10 - std r0, 0(rp) - std r7, 8(rp) - std r9, 16(rp) - addi up, up, 24 - addi rp, rp, 24 - b L(fic) - - nop -L(fic): ld r26, 0(up) -L(b10): ld r27, 8(up) - addi up, up, 16 - bdz L(end) - -L(top): mulld r0, r26, r6 - mulhdu r5, r26, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - ld r26, 0(up) - ld r27, 8(up) - adde r0, r0, r12 - adde r7, r7, r5 - mulld r9, r26, r6 - mulhdu r10, r26, r6 - mulld r11, r27, r6 - mulhdu r12, r27, r6 - ld r26, 16(up) - ld r27, 24(up) - std r0, 0(rp) - adde r9, r9, r8 - std r7, 8(rp) - adde r11, r11, r10 - std r9, 16(rp) - addi up, up, 32 - std r11, 24(rp) - - addi rp, rp, 32 - bdnz L(top) - -L(end): mulld r0, r26, r6 - mulhdu r5, r26, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - adde r0, r0, r12 - adde r7, r7, r5 - std r0, 0(rp) - std r7, 8(rp) -L(ret): addze r3, r8 - ld r27, -40(r1) - ld r26, -48(r1) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mul_basecase.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mul_basecase.asm deleted file mode 100644 index 18731879e4bb09682e30e632c6ea9259babb12f8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/mul_basecase.asm +++ /dev/null @@ -1,708 +0,0 @@ -dnl PowerPC-64 mpn_mul_basecase. - -dnl Copyright 1999-2001, 2003-2006, 2008 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 6-18 -C POWER4/PPC970 8 -C POWER5 8 -C POWER6 24 - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`un', `r5') -define(`vp', `r6') -define(`vn', `r7') - -define(`v0', `r25') -define(`outer_rp', `r22') -define(`outer_up', `r23') - -ASM_START() -PROLOGUE(mpn_mul_basecase) - -C Special code for un <= 2, for efficiency of these important cases, -C and since it simplifies the default code. - cmpdi cr0, un, 2 - bgt cr0, L(un_gt2) - cmpdi cr6, vn, 1 - ld r7, 0(vp) - ld r5, 0(up) - mulld r8, r5, r7 C weight 0 - mulhdu r9, r5, r7 C weight 1 - std r8, 0(rp) - beq cr0, L(2x) - std r9, 8(rp) - blr - ALIGN(16) -L(2x): ld r0, 8(up) - mulld r8, r0, r7 C weight 1 - mulhdu r10, r0, r7 C weight 2 - addc r9, r9, r8 - addze r10, r10 - bne cr6, L(2x2) - std r9, 8(rp) - std r10, 16(rp) - blr - ALIGN(16) -L(2x2): ld r6, 8(vp) - nop - mulld r8, r5, r6 C weight 1 - mulhdu r11, r5, r6 C weight 2 - addc r9, r9, r8 - std r9, 8(rp) - adde r11, r11, r10 - mulld r12, r0, r6 C weight 2 - mulhdu r0, r0, r6 C weight 3 - addze r0, r0 - addc r11, r11, r12 - addze r0, r0 - std r11, 16(rp) - std r0, 24(rp) - blr - -L(un_gt2): - std r31, -8(r1) - std r30, -16(r1) - std r29, -24(r1) - std r28, -32(r1) - std r27, -40(r1) - std r26, -48(r1) - std r25, -56(r1) - std r24, -64(r1) - std r23, -72(r1) - std r22, -80(r1) - - mr outer_rp, rp - mr outer_up, up - - ld v0, 0(vp) C new v limb - addi vp, vp, 8 - ld r26, 0(up) - - rldicl. r0, un, 0,62 C r0 = n & 3, set cr0 - cmpdi cr6, r0, 2 - addi un, un, 1 C compute count... - srdi un, un, 2 C ...for ctr - mtctr un C copy inner loop count into ctr - beq cr0, L(b0) - blt cr6, L(b1) - beq cr6, L(b2) - - - ALIGN(16) -L(b3): mulld r0, r26, v0 - mulhdu r12, r26, v0 - addic r0, r0, 0 - std r0, 0(rp) - ld r26, 8(up) - ld r27, 16(up) - bdz L(end_m_3) - - ALIGN(16) -L(lo_m_3): - mulld r0, r26, v0 - mulhdu r31, r26, v0 - ld r26, 24(up) - nop - mulld r24, r27, v0 - mulhdu r8, r27, v0 - ld r27, 32(up) - nop - adde r0, r0, r12 - adde r24, r24, r31 - mulld r9, r26, v0 - mulhdu r10, r26, v0 - ld r26, 40(up) - nop - mulld r11, r27, v0 - mulhdu r12, r27, v0 - ld r27, 48(up) - std r0, 8(rp) - adde r9, r9, r8 - std r24, 16(rp) - adde r11, r11, r10 - std r9, 24(rp) - addi up, up, 32 - std r11, 32(rp) - addi rp, rp, 32 - bdnz L(lo_m_3) - - ALIGN(16) -L(end_m_3): - mulld r0, r26, v0 - mulhdu r31, r26, v0 - - mulld r24, r27, v0 - mulhdu r8, r27, v0 - - adde r0, r0, r12 - adde r24, r24, r31 - - std r0, 8(rp) - std r24, 16(rp) - addze r8, r8 - std r8, 24(rp) - addic. vn, vn, -1 - beq L(ret) - - ALIGN(16) -L(outer_lo_3): - mtctr un C copy inner loop count into ctr - addi rp, outer_rp, 8 - mr up, outer_up - addi outer_rp, outer_rp, 8 - ld v0, 0(vp) C new v limb - addi vp, vp, 8 - ld r26, 0(up) - ld r28, 0(rp) - mulld r0, r26, v0 - mulhdu r12, r26, v0 - addc r0, r0, r28 - std r0, 0(rp) - ld r26, 8(up) - ld r27, 16(up) - bdz L(end_3) - - ALIGN(16) C registers dying -L(lo_3): - mulld r0, r26, v0 C - mulhdu r10, r26, v0 C 26 - ld r26, 24(up) C - ld r28, 8(rp) C - mulld r24, r27, v0 C - mulhdu r8, r27, v0 C 27 - ld r27, 32(up) C - ld r29, 16(rp) C - adde r0, r0, r12 C 0 12 - adde r24, r24, r10 C 24 10 - mulld r9, r26, v0 C - mulhdu r10, r26, v0 C 26 - ld r26, 40(up) C - ld r30, 24(rp) C - mulld r11, r27, v0 C - mulhdu r12, r27, v0 C 27 - ld r27, 48(up) C - ld r31, 32(rp) C - adde r9, r9, r8 C 8 9 - adde r11, r11, r10 C 10 11 - addze r12, r12 C 12 - addc r0, r0, r28 C 0 28 - std r0, 8(rp) C 0 - adde r24, r24, r29 C 7 29 - std r24, 16(rp) C 7 - adde r9, r9, r30 C 9 30 - std r9, 24(rp) C 9 - adde r11, r11, r31 C 11 31 - std r11, 32(rp) C 11 - addi up, up, 32 C - addi rp, rp, 32 C - bdnz L(lo_3) C - - ALIGN(16) -L(end_3): - mulld r0, r26, v0 - mulhdu r10, r26, v0 - ld r28, 8(rp) - nop - mulld r24, r27, v0 - mulhdu r8, r27, v0 - ld r29, 16(rp) - nop - adde r0, r0, r12 - adde r24, r24, r10 - addze r8, r8 - addc r0, r0, r28 - std r0, 8(rp) - adde r24, r24, r29 - std r24, 16(rp) - addze r8, r8 - std r8, 24(rp) - - addic. vn, vn, -1 - bne L(outer_lo_3) - b L(ret) - - - ALIGN(16) -L(b0): ld r27, 8(up) - addi up, up, 8 - mulld r0, r26, v0 - mulhdu r10, r26, v0 - mulld r24, r27, v0 - mulhdu r8, r27, v0 - addc r24, r24, r10 - addze r12, r8 - std r0, 0(rp) - std r24, 8(rp) - addi rp, rp, 8 - ld r26, 8(up) - ld r27, 16(up) - bdz L(end_m_0) - - ALIGN(16) -L(lo_m_0): - mulld r0, r26, v0 - mulhdu r31, r26, v0 - ld r26, 24(up) - nop - mulld r24, r27, v0 - mulhdu r8, r27, v0 - ld r27, 32(up) - nop - adde r0, r0, r12 - adde r24, r24, r31 - mulld r9, r26, v0 - mulhdu r10, r26, v0 - ld r26, 40(up) - nop - mulld r11, r27, v0 - mulhdu r12, r27, v0 - ld r27, 48(up) - std r0, 8(rp) - adde r9, r9, r8 - std r24, 16(rp) - adde r11, r11, r10 - std r9, 24(rp) - addi up, up, 32 - std r11, 32(rp) - addi rp, rp, 32 - bdnz L(lo_m_0) - - ALIGN(16) -L(end_m_0): - mulld r0, r26, v0 - mulhdu r31, r26, v0 - - mulld r24, r27, v0 - mulhdu r8, r27, v0 - - adde r0, r0, r12 - adde r24, r24, r31 - - std r0, 8(rp) - addze r8, r8 - std r24, 16(rp) - addic. vn, vn, -1 - std r8, 24(rp) - nop - beq L(ret) - - ALIGN(16) -L(outer_lo_0): - mtctr un C copy inner loop count into ctr - addi rp, outer_rp, 16 - addi up, outer_up, 8 - addi outer_rp, outer_rp, 8 - ld v0, 0(vp) C new v limb - addi vp, vp, 8 - ld r26, -8(up) - ld r27, 0(up) - ld r28, -8(rp) - ld r29, 0(rp) - nop - nop - mulld r0, r26, v0 - mulhdu r10, r26, v0 - mulld r24, r27, v0 - mulhdu r8, r27, v0 - addc r24, r24, r10 - addze r12, r8 - addc r0, r0, r28 - std r0, -8(rp) - adde r24, r24, r29 - std r24, 0(rp) - ld r26, 8(up) - ld r27, 16(up) - bdz L(end_0) - - ALIGN(16) C registers dying -L(lo_0): - mulld r0, r26, v0 C - mulhdu r10, r26, v0 C 26 - ld r26, 24(up) C - ld r28, 8(rp) C - mulld r24, r27, v0 C - mulhdu r8, r27, v0 C 27 - ld r27, 32(up) C - ld r29, 16(rp) C - adde r0, r0, r12 C 0 12 - adde r24, r24, r10 C 24 10 - mulld r9, r26, v0 C - mulhdu r10, r26, v0 C 26 - ld r26, 40(up) C - ld r30, 24(rp) C - mulld r11, r27, v0 C - mulhdu r12, r27, v0 C 27 - ld r27, 48(up) C - ld r31, 32(rp) C - adde r9, r9, r8 C 8 9 - adde r11, r11, r10 C 10 11 - addze r12, r12 C 12 - addc r0, r0, r28 C 0 28 - std r0, 8(rp) C 0 - adde r24, r24, r29 C 7 29 - std r24, 16(rp) C 7 - adde r9, r9, r30 C 9 30 - std r9, 24(rp) C 9 - adde r11, r11, r31 C 11 31 - std r11, 32(rp) C 11 - addi up, up, 32 C - addi rp, rp, 32 C - bdnz L(lo_0) C - - ALIGN(16) -L(end_0): - mulld r0, r26, v0 - mulhdu r10, r26, v0 - ld r28, 8(rp) - nop - mulld r24, r27, v0 - mulhdu r8, r27, v0 - ld r29, 16(rp) - nop - adde r0, r0, r12 - adde r24, r24, r10 - addze r8, r8 - addic. vn, vn, -1 - addc r0, r0, r28 - std r0, 8(rp) - adde r24, r24, r29 - std r24, 16(rp) - addze r8, r8 - std r8, 24(rp) - bne L(outer_lo_0) - b L(ret) - - - ALIGN(16) -L(b1): ld r27, 8(up) - nop - mulld r0, r26, v0 - mulhdu r31, r26, v0 - ld r26, 16(up) - mulld r24, r27, v0 - mulhdu r8, r27, v0 - mulld r9, r26, v0 - mulhdu r10, r26, v0 - addc r24, r24, r31 - adde r9, r9, r8 - addze r12, r10 - std r0, 0(rp) - std r24, 8(rp) - std r9, 16(rp) - addi up, up, 16 - addi rp, rp, 16 - ld r26, 8(up) - ld r27, 16(up) - bdz L(end_m_1) - - ALIGN(16) -L(lo_m_1): - mulld r0, r26, v0 - mulhdu r31, r26, v0 - ld r26, 24(up) - nop - mulld r24, r27, v0 - mulhdu r8, r27, v0 - ld r27, 32(up) - nop - adde r0, r0, r12 - adde r24, r24, r31 - mulld r9, r26, v0 - mulhdu r10, r26, v0 - ld r26, 40(up) - nop - mulld r11, r27, v0 - mulhdu r12, r27, v0 - ld r27, 48(up) - std r0, 8(rp) - adde r9, r9, r8 - std r24, 16(rp) - adde r11, r11, r10 - std r9, 24(rp) - addi up, up, 32 - std r11, 32(rp) - addi rp, rp, 32 - bdnz L(lo_m_1) - - ALIGN(16) -L(end_m_1): - mulld r0, r26, v0 - mulhdu r31, r26, v0 - - mulld r24, r27, v0 - mulhdu r8, r27, v0 - - adde r0, r0, r12 - adde r24, r24, r31 - - std r0, 8(rp) - addze r8, r8 - std r24, 16(rp) - addic. vn, vn, -1 - std r8, 24(rp) - nop - beq L(ret) - - ALIGN(16) -L(outer_lo_1): - mtctr un C copy inner loop count into ctr - addi rp, outer_rp, 24 - addi up, outer_up, 16 - addi outer_rp, outer_rp, 8 - ld v0, 0(vp) C new v limb - addi vp, vp, 8 - ld r26, -16(up) - ld r27, -8(up) - mulld r0, r26, v0 - mulhdu r31, r26, v0 - ld r26, 0(up) - ld r28, -16(rp) - mulld r24, r27, v0 - mulhdu r8, r27, v0 - ld r29, -8(rp) - ld r30, 0(rp) - mulld r9, r26, v0 - mulhdu r10, r26, v0 - addc r24, r24, r31 - adde r9, r9, r8 - addze r12, r10 - addc r0, r0, r28 - std r0, -16(rp) - adde r24, r24, r29 - std r24, -8(rp) - adde r9, r9, r30 - std r9, 0(rp) - ld r26, 8(up) - ld r27, 16(up) - bdz L(end_1) - - ALIGN(16) C registers dying -L(lo_1): - mulld r0, r26, v0 C - mulhdu r10, r26, v0 C 26 - ld r26, 24(up) C - ld r28, 8(rp) C - mulld r24, r27, v0 C - mulhdu r8, r27, v0 C 27 - ld r27, 32(up) C - ld r29, 16(rp) C - adde r0, r0, r12 C 0 12 - adde r24, r24, r10 C 24 10 - mulld r9, r26, v0 C - mulhdu r10, r26, v0 C 26 - ld r26, 40(up) C - ld r30, 24(rp) C - mulld r11, r27, v0 C - mulhdu r12, r27, v0 C 27 - ld r27, 48(up) C - ld r31, 32(rp) C - adde r9, r9, r8 C 8 9 - adde r11, r11, r10 C 10 11 - addze r12, r12 C 12 - addc r0, r0, r28 C 0 28 - std r0, 8(rp) C 0 - adde r24, r24, r29 C 7 29 - std r24, 16(rp) C 7 - adde r9, r9, r30 C 9 30 - std r9, 24(rp) C 9 - adde r11, r11, r31 C 11 31 - std r11, 32(rp) C 11 - addi up, up, 32 C - addi rp, rp, 32 C - bdnz L(lo_1) C - - ALIGN(16) -L(end_1): - mulld r0, r26, v0 - mulhdu r10, r26, v0 - ld r28, 8(rp) - nop - mulld r24, r27, v0 - mulhdu r8, r27, v0 - ld r29, 16(rp) - nop - adde r0, r0, r12 - adde r24, r24, r10 - addze r8, r8 - addic. vn, vn, -1 - addc r0, r0, r28 - std r0, 8(rp) - adde r24, r24, r29 - std r24, 16(rp) - addze r8, r8 - std r8, 24(rp) - bne L(outer_lo_1) - b L(ret) - - - ALIGN(16) -L(b2): ld r27, 8(up) - addi up, up, -8 - addi rp, rp, -8 - li r12, 0 - addic r12, r12, 0 - - ALIGN(16) -L(lo_m_2): - mulld r0, r26, v0 - mulhdu r31, r26, v0 - ld r26, 24(up) - nop - mulld r24, r27, v0 - mulhdu r8, r27, v0 - ld r27, 32(up) - nop - adde r0, r0, r12 - adde r24, r24, r31 - mulld r9, r26, v0 - mulhdu r10, r26, v0 - ld r26, 40(up) - nop - mulld r11, r27, v0 - mulhdu r12, r27, v0 - ld r27, 48(up) - std r0, 8(rp) - adde r9, r9, r8 - std r24, 16(rp) - adde r11, r11, r10 - std r9, 24(rp) - addi up, up, 32 - std r11, 32(rp) - - addi rp, rp, 32 - bdnz L(lo_m_2) - - ALIGN(16) -L(end_m_2): - mulld r0, r26, v0 - mulhdu r31, r26, v0 - - mulld r24, r27, v0 - mulhdu r8, r27, v0 - - adde r0, r0, r12 - adde r24, r24, r31 - - std r0, 8(rp) - addze r8, r8 - std r24, 16(rp) - addic. vn, vn, -1 - std r8, 24(rp) - nop - beq L(ret) - - ALIGN(16) -L(outer_lo_2): - mtctr un C copy inner loop count into ctr - addi rp, outer_rp, 0 - addi up, outer_up, -8 - addi outer_rp, outer_rp, 8 - ld v0, 0(vp) C new v limb - addi vp, vp, 8 - ld r26, 8(up) - ld r27, 16(up) - li r12, 0 - addic r12, r12, 0 - - ALIGN(16) C registers dying -L(lo_2): - mulld r0, r26, v0 C - mulhdu r10, r26, v0 C 26 - ld r26, 24(up) C - ld r28, 8(rp) C - mulld r24, r27, v0 C - mulhdu r8, r27, v0 C 27 - ld r27, 32(up) C - ld r29, 16(rp) C - adde r0, r0, r12 C 0 12 - adde r24, r24, r10 C 24 10 - mulld r9, r26, v0 C - mulhdu r10, r26, v0 C 26 - ld r26, 40(up) C - ld r30, 24(rp) C - mulld r11, r27, v0 C - mulhdu r12, r27, v0 C 27 - ld r27, 48(up) C - ld r31, 32(rp) C - adde r9, r9, r8 C 8 9 - adde r11, r11, r10 C 10 11 - addze r12, r12 C 12 - addc r0, r0, r28 C 0 28 - std r0, 8(rp) C 0 - adde r24, r24, r29 C 7 29 - std r24, 16(rp) C 7 - adde r9, r9, r30 C 9 30 - std r9, 24(rp) C 9 - adde r11, r11, r31 C 11 31 - std r11, 32(rp) C 11 - addi up, up, 32 C - addi rp, rp, 32 C - bdnz L(lo_2) C - - ALIGN(16) -L(end_2): - mulld r0, r26, v0 - mulhdu r10, r26, v0 - ld r28, 8(rp) - nop - mulld r24, r27, v0 - mulhdu r8, r27, v0 - ld r29, 16(rp) - nop - adde r0, r0, r12 - adde r24, r24, r10 - addze r8, r8 - addic. vn, vn, -1 - addc r0, r0, r28 - std r0, 8(rp) - adde r24, r24, r29 - std r24, 16(rp) - addze r8, r8 - std r8, 24(rp) - bne L(outer_lo_2) - b L(ret) - - -L(ret): ld r31, -8(r1) - ld r30, -16(r1) - ld r29, -24(r1) - ld r28, -32(r1) - ld r27, -40(r1) - ld r26, -48(r1) - ld r25, -56(r1) - ld r24, -64(r1) - ld r23, -72(r1) - ld r22, -80(r1) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p3/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p3/gmp-mparam.h deleted file mode 100644 index 61a437b6e6cd3306ad051283afc6485adcd447ba..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p3/gmp-mparam.h +++ /dev/null @@ -1,179 +0,0 @@ -/* POWER3/PowerPC630 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 2008-2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 3 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 18 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 17 -#define USE_PREINV_DIVREM_1 0 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ - -#define MUL_TOOM22_THRESHOLD 10 -#define MUL_TOOM33_THRESHOLD 33 -#define MUL_TOOM44_THRESHOLD 46 -#define MUL_TOOM6H_THRESHOLD 77 -#define MUL_TOOM8H_THRESHOLD 139 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 49 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 47 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 49 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 49 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 34 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 14 -#define SQR_TOOM3_THRESHOLD 45 -#define SQR_TOOM4_THRESHOLD 64 -#define SQR_TOOM6_THRESHOLD 85 -#define SQR_TOOM8_THRESHOLD 139 - -#define MULMID_TOOM42_THRESHOLD 22 - -#define MULMOD_BNM1_THRESHOLD 8 -#define SQRMOD_BNM1_THRESHOLD 10 - -#define MUL_FFT_MODF_THRESHOLD 220 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 220, 5}, { 9, 6}, { 5, 5}, { 11, 6}, \ - { 13, 7}, { 7, 6}, { 15, 7}, { 13, 8}, \ - { 7, 7}, { 15, 8}, { 13, 9}, { 7, 8}, \ - { 19, 9}, { 11, 8}, { 23,10}, { 7, 9}, \ - { 15, 8}, { 33, 9}, { 23,10}, { 15, 9}, \ - { 35, 8}, { 71,10}, { 23, 9}, { 47,11}, \ - { 15,10}, { 31, 9}, { 71,10}, { 39, 9}, \ - { 79,10}, { 55,11}, { 31,10}, { 63, 9}, \ - { 127,10}, { 71, 9}, { 143, 8}, { 287,10}, \ - { 79,11}, { 47,10}, { 95, 9}, { 191,12}, \ - { 31,11}, { 63,10}, { 127, 9}, { 255, 8}, \ - { 511,10}, { 143, 9}, { 287,11}, { 79,10}, \ - { 159, 9}, { 319, 8}, { 639,10}, { 175, 9}, \ - { 351,11}, { 95,10}, { 191, 9}, { 383,11}, \ - { 111,10}, { 223,12}, { 63,11}, { 127,10}, \ - { 255, 9}, { 511,11}, { 143,10}, { 287, 9}, \ - { 575,11}, { 159,10}, { 319, 9}, { 639,11}, \ - { 175,10}, { 351,12}, { 95,11}, { 191,10}, \ - { 383, 9}, { 767,11}, { 223,13}, { 63,12}, \ - { 127,11}, { 255,10}, { 511,11}, { 287,10}, \ - { 575, 9}, { 1151,12}, { 159,11}, { 319,10}, \ - { 639,11}, { 351,12}, { 191,11}, { 383,10}, \ - { 767,12}, { 223,11}, { 447,10}, { 895,13}, \ - { 127,12}, { 255,11}, { 511,12}, { 287,11}, \ - { 575,10}, { 1151,12}, { 319,11}, { 639,12}, \ - { 351,11}, { 703,13}, { 191,12}, { 383,11}, \ - { 767,12}, { 415,11}, { 831,10}, { 1663,12}, \ - { 447,11}, { 895,14}, { 16384,15}, { 32768,16}, \ - { 65536,17}, { 131072,18}, { 262144,19}, { 524288,20}, \ - {1048576,21}, {2097152,22}, {4194304,23}, {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 120 -#define MUL_FFT_THRESHOLD 2688 - -#define SQR_FFT_MODF_THRESHOLD 188 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 188, 5}, { 9, 6}, { 5, 5}, { 11, 6}, \ - { 13, 7}, { 13, 8}, { 7, 7}, { 16, 8}, \ - { 9, 7}, { 19, 8}, { 13, 9}, { 7, 8}, \ - { 19, 9}, { 11, 8}, { 23,10}, { 7, 9}, \ - { 15, 8}, { 31, 9}, { 19, 8}, { 39, 9}, \ - { 23,10}, { 15, 9}, { 39,10}, { 23,11}, \ - { 15,10}, { 31, 9}, { 67,10}, { 39, 9}, \ - { 79, 8}, { 159,10}, { 47, 9}, { 95, 8}, \ - { 191,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255,10}, { 71, 9}, { 143, 8}, { 287,10}, \ - { 79, 9}, { 159,11}, { 47,10}, { 95, 9}, \ - { 191,12}, { 31,11}, { 63,10}, { 127, 9}, \ - { 255, 8}, { 511,10}, { 143, 9}, { 287,11}, \ - { 79,10}, { 159, 9}, { 319, 8}, { 639,10}, \ - { 175,11}, { 95,10}, { 191, 9}, { 383,11}, \ - { 111,10}, { 223,12}, { 63,11}, { 127,10}, \ - { 255, 9}, { 511,11}, { 143,10}, { 287, 9}, \ - { 575,11}, { 159,10}, { 319, 9}, { 639,11}, \ - { 175,12}, { 95,11}, { 191,10}, { 383, 9}, \ - { 767,11}, { 223,13}, { 63,12}, { 127,11}, \ - { 255,10}, { 511,11}, { 287,10}, { 575,12}, \ - { 159,11}, { 319,10}, { 639,11}, { 351,12}, \ - { 191,11}, { 383,10}, { 767,12}, { 223,11}, \ - { 447,10}, { 895,13}, { 127,12}, { 255,11}, \ - { 511,12}, { 287,11}, { 575,10}, { 1151,12}, \ - { 319,11}, { 639,12}, { 351,13}, { 191,12}, \ - { 383,11}, { 767,12}, { 447,11}, { 895,14}, \ - { 16384,15}, { 32768,16}, { 65536,17}, { 131072,18}, \ - { 262144,19}, { 524288,20}, {1048576,21}, {2097152,22}, \ - {4194304,23}, {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 118 -#define SQR_FFT_THRESHOLD 1728 - -#define MULLO_BASECASE_THRESHOLD 2 -#define MULLO_DC_THRESHOLD 27 -#define MULLO_MUL_N_THRESHOLD 2511 - -#define DC_DIV_QR_THRESHOLD 23 -#define DC_DIVAPPR_Q_THRESHOLD 87 -#define DC_BDIV_QR_THRESHOLD 27 -#define DC_BDIV_Q_THRESHOLD 60 - -#define INV_MULMOD_BNM1_THRESHOLD 27 -#define INV_NEWTON_THRESHOLD 91 -#define INV_APPR_THRESHOLD 91 - -#define BINV_NEWTON_THRESHOLD 115 -#define REDC_1_TO_REDC_N_THRESHOLD 31 - -#define MU_DIV_QR_THRESHOLD 551 -#define MU_DIVAPPR_Q_THRESHOLD 551 -#define MUPI_DIV_QR_THRESHOLD 42 -#define MU_BDIV_QR_THRESHOLD 483 -#define MU_BDIV_Q_THRESHOLD 492 - -#define POWM_SEC_TABLE 2,23,140,556,713,746 - -#define MATRIX22_STRASSEN_THRESHOLD 8 -#define HGCD_THRESHOLD 56 -#define HGCD_APPR_THRESHOLD 51 -#define HGCD_REDUCE_THRESHOLD 688 -#define GCD_DC_THRESHOLD 333 -#define GCDEXT_DC_THRESHOLD 126 -#define JACOBI_BASE_METHOD 1 - -#define GET_STR_DC_THRESHOLD 17 -#define GET_STR_PRECOMPUTE_THRESHOLD 28 -#define SET_STR_DC_THRESHOLD 375 -#define SET_STR_PRECOMPUTE_THRESHOLD 812 - -#define FAC_DSC_THRESHOLD 351 -#define FAC_ODD_THRESHOLD 0 /* always */ diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p4/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p4/gmp-mparam.h deleted file mode 100644 index d5eff84b741b77d31a1a2b0d38a9e332f40bd4f0..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p4/gmp-mparam.h +++ /dev/null @@ -1,212 +0,0 @@ -/* POWER4/PowerPC970 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 2008-2010, 2014, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* 1800 MHz PPC970 */ -/* FFT tuning limit = 15 M */ -/* Generated by tuneup.c, 2015-10-09, gcc 4.0 */ - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 5 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 9 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 22 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 16 -#define USE_PREINV_DIVREM_1 0 -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 1 -#define DIV_QR_1_UNNORM_THRESHOLD 1 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 35 - -#define MUL_TOOM22_THRESHOLD 14 -#define MUL_TOOM33_THRESHOLD 53 -#define MUL_TOOM44_THRESHOLD 136 -#define MUL_TOOM6H_THRESHOLD 197 -#define MUL_TOOM8H_THRESHOLD 272 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 89 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 91 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 89 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 90 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 76 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 22 -#define SQR_TOOM3_THRESHOLD 73 -#define SQR_TOOM4_THRESHOLD 202 -#define SQR_TOOM6_THRESHOLD 0 /* always */ -#define SQR_TOOM8_THRESHOLD 430 - -#define MULMID_TOOM42_THRESHOLD 34 - -#define MULMOD_BNM1_THRESHOLD 11 -#define SQRMOD_BNM1_THRESHOLD 13 - -#define MUL_FFT_MODF_THRESHOLD 444 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 444, 5}, { 17, 6}, { 9, 5}, { 19, 6}, \ - { 10, 5}, { 21, 6}, { 13, 5}, { 28, 6}, \ - { 19, 7}, { 10, 6}, { 21, 7}, { 11, 6}, \ - { 23, 7}, { 12, 6}, { 25, 7}, { 21, 8}, \ - { 11, 7}, { 25, 8}, { 13, 7}, { 28, 8}, \ - { 15, 7}, { 31, 8}, { 21, 9}, { 11, 8}, \ - { 27, 9}, { 15, 8}, { 35, 9}, { 19, 8}, \ - { 39, 9}, { 23, 8}, { 49, 9}, { 27,10}, \ - { 15, 9}, { 39,10}, { 23, 9}, { 55,11}, \ - { 15,10}, { 31, 9}, { 71,10}, { 39, 9}, \ - { 83,10}, { 47, 9}, { 95,10}, { 55,11}, \ - { 31,10}, { 63, 9}, { 127,10}, { 87,11}, \ - { 47,10}, { 103,12}, { 31,11}, { 63,10}, \ - { 135, 9}, { 271,11}, { 79,10}, { 159, 9}, \ - { 319,10}, { 167,11}, { 95, 9}, { 383, 8}, \ - { 767,10}, { 199,11}, { 111,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,10}, { 271, 9}, \ - { 543,11}, { 143,10}, { 287, 9}, { 575,10}, \ - { 303, 9}, { 607,11}, { 159,10}, { 319, 9}, \ - { 639,10}, { 335, 9}, { 671,10}, { 351,12}, \ - { 95,10}, { 383, 9}, { 767,10}, { 415, 9}, \ - { 831,13}, { 63,12}, { 127,11}, { 255,10}, \ - { 511,11}, { 271,10}, { 543,11}, { 287,10}, \ - { 575,11}, { 303,10}, { 607,12}, { 159,11}, \ - { 319,10}, { 639,11}, { 335,10}, { 671,11}, \ - { 351,10}, { 703,11}, { 383,10}, { 767,11}, \ - { 415,10}, { 831,12}, { 223,10}, { 895,13}, \ - { 127,12}, { 255,11}, { 543,12}, { 287,11}, \ - { 607,12}, { 319,11}, { 671,12}, { 351,11}, \ - { 703,12}, { 383,11}, { 767,12}, { 415,11}, \ - { 895,14}, { 127,13}, { 255,12}, { 607,13}, \ - { 319,12}, { 703,13}, { 383,12}, { 895,14}, \ - { 255,13}, { 511,12}, { 1023,13}, { 575,12}, \ - { 1151,13}, { 703,14}, { 383,13}, { 895,15}, \ - { 255,14}, { 511,13}, { 1023,12}, { 2047,13}, \ - { 1087,12}, { 2175,13}, { 1151,14}, { 639,13}, \ - { 1343,12}, { 2687,13}, { 1407,14}, { 767,13}, \ - { 1663,14}, { 895,15}, { 32768,16}, { 65536,17}, \ - { 131072,18}, { 262144,19}, { 524288,20}, {1048576,21}, \ - {2097152,22}, {4194304,23}, {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 159 -#define MUL_FFT_THRESHOLD 9088 - -#define SQR_FFT_MODF_THRESHOLD 344 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 344, 5}, { 15, 6}, { 8, 5}, { 17, 6}, \ - { 9, 5}, { 19, 6}, { 10, 5}, { 21, 6}, \ - { 13, 5}, { 28, 6}, { 21, 7}, { 11, 6}, \ - { 23, 7}, { 12, 6}, { 25, 7}, { 14, 6}, \ - { 29, 7}, { 21, 8}, { 11, 7}, { 25, 8}, \ - { 13, 7}, { 27, 8}, { 15, 7}, { 31, 8}, \ - { 21, 9}, { 11, 8}, { 27, 9}, { 15, 8}, \ - { 35, 9}, { 19, 8}, { 39, 9}, { 23, 8}, \ - { 47, 9}, { 27,10}, { 15, 9}, { 39,10}, \ - { 23, 9}, { 51,11}, { 15,10}, { 31, 9}, \ - { 67,10}, { 39, 9}, { 79,10}, { 47, 9}, \ - { 95,10}, { 55,11}, { 31,10}, { 79,11}, \ - { 47,10}, { 95, 9}, { 191,10}, { 103,12}, \ - { 31,11}, { 63,10}, { 127, 9}, { 255, 8}, \ - { 511,10}, { 135, 9}, { 271, 8}, { 543,11}, \ - { 79, 9}, { 319, 8}, { 639,11}, { 95,10}, \ - { 191, 9}, { 383, 8}, { 767,10}, { 207, 9}, \ - { 415,12}, { 63,11}, { 127,10}, { 255, 9}, \ - { 511,10}, { 271, 9}, { 543,10}, { 287, 9}, \ - { 575,10}, { 303, 9}, { 607,10}, { 319, 9}, \ - { 639,10}, { 335,11}, { 175,10}, { 351, 9}, \ - { 703,11}, { 191,10}, { 383, 9}, { 767,11}, \ - { 207,10}, { 415, 9}, { 831,13}, { 63,12}, \ - { 127,11}, { 255,10}, { 511,11}, { 271,10}, \ - { 543,11}, { 287,10}, { 575,11}, { 303,10}, \ - { 607,11}, { 319,10}, { 639,11}, { 335,10}, \ - { 671,11}, { 351,10}, { 703,12}, { 191,11}, \ - { 383,10}, { 767,11}, { 415,10}, { 831,12}, \ - { 223,10}, { 895,11}, { 479,13}, { 127,12}, \ - { 255,11}, { 543,12}, { 287,11}, { 607,12}, \ - { 319,11}, { 671,12}, { 351,11}, { 703,13}, \ - { 191,12}, { 383,11}, { 767,12}, { 415,11}, \ - { 831,10}, { 1663,11}, { 895,12}, { 479,14}, \ - { 127,13}, { 255,12}, { 607,13}, { 319,12}, \ - { 703,13}, { 383,12}, { 831,11}, { 1663,12}, \ - { 927,14}, { 255,13}, { 511,12}, { 1023,13}, \ - { 575,12}, { 1151,13}, { 639,12}, { 1279,13}, \ - { 703,14}, { 383,13}, { 895,15}, { 255,14}, \ - { 511,13}, { 1023,12}, { 2175,13}, { 1151,12}, \ - { 2303,13}, { 1215,14}, { 639,13}, { 1343,12}, \ - { 2687,13}, { 1407,14}, { 767,13}, { 1663,14}, \ - { 895,15}, { 32768,16}, { 65536,17}, { 131072,18}, \ - { 262144,19}, { 524288,20}, {1048576,21}, {2097152,22}, \ - {4194304,23}, {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 174 -#define SQR_FFT_THRESHOLD 6272 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 43 -#define MULLO_MUL_N_THRESHOLD 18087 -#define SQRLO_BASECASE_THRESHOLD 2 -#define SQRLO_DC_THRESHOLD 79 -#define SQRLO_SQR_THRESHOLD 12322 - -#define DC_DIV_QR_THRESHOLD 42 -#define DC_DIVAPPR_Q_THRESHOLD 159 -#define DC_BDIV_QR_THRESHOLD 46 -#define DC_BDIV_Q_THRESHOLD 110 - -#define INV_MULMOD_BNM1_THRESHOLD 26 -#define INV_NEWTON_THRESHOLD 177 -#define INV_APPR_THRESHOLD 165 - -#define BINV_NEWTON_THRESHOLD 198 -#define REDC_1_TO_REDC_N_THRESHOLD 56 - -#define MU_DIV_QR_THRESHOLD 1017 -#define MU_DIVAPPR_Q_THRESHOLD 1142 -#define MUPI_DIV_QR_THRESHOLD 90 -#define MU_BDIV_QR_THRESHOLD 924 -#define MU_BDIV_Q_THRESHOLD 1017 - -#define POWM_SEC_TABLE 7,17,86,579,1925 - -#define GET_STR_DC_THRESHOLD 14 -#define GET_STR_PRECOMPUTE_THRESHOLD 23 -#define SET_STR_DC_THRESHOLD 788 -#define SET_STR_PRECOMPUTE_THRESHOLD 1713 - -#define FAC_DSC_THRESHOLD 512 -#define FAC_ODD_THRESHOLD 25 - -#define MATRIX22_STRASSEN_THRESHOLD 10 -#define HGCD_THRESHOLD 113 -#define HGCD_APPR_THRESHOLD 115 -#define HGCD_REDUCE_THRESHOLD 4633 -#define GCD_DC_THRESHOLD 330 -#define GCDEXT_DC_THRESHOLD 242 -#define JACOBI_BASE_METHOD 4 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p5/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p5/gmp-mparam.h deleted file mode 100644 index 15b009c357a6b2cf5452afafca395c5526e8e309..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p5/gmp-mparam.h +++ /dev/null @@ -1,219 +0,0 @@ -/* POWER5 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2003, 2009, 2010 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* POWER5 (friggms.hpc.ntnu.no) */ - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 6 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 5 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 15 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 11 -#define USE_PREINV_DIVREM_1 0 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 40 - -#define MUL_TOOM22_THRESHOLD 21 -#define MUL_TOOM33_THRESHOLD 24 -#define MUL_TOOM44_THRESHOLD 70 -#define MUL_TOOM6H_THRESHOLD 262 -#define MUL_TOOM8H_THRESHOLD 393 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 49 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 126 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 85 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 94 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 70 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 24 -#define SQR_TOOM3_THRESHOLD 81 -#define SQR_TOOM4_THRESHOLD 142 -#define SQR_TOOM6_THRESHOLD 189 -#define SQR_TOOM8_THRESHOLD 284 - -#define MULMID_TOOM42_THRESHOLD 36 - -#define MULMOD_BNM1_THRESHOLD 12 -#define SQRMOD_BNM1_THRESHOLD 15 - -#define MUL_FFT_MODF_THRESHOLD 304 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 348, 5}, { 17, 6}, { 9, 5}, { 19, 6}, \ - { 10, 5}, { 21, 6}, { 21, 7}, { 11, 6}, \ - { 23, 7}, { 12, 6}, { 25, 7}, { 21, 8}, \ - { 11, 7}, { 25, 8}, { 13, 7}, { 27, 8}, \ - { 15, 7}, { 31, 8}, { 21, 9}, { 11, 8}, \ - { 27, 9}, { 15, 8}, { 33, 9}, { 19, 8}, \ - { 39, 9}, { 23, 8}, { 47, 9}, { 27,10}, \ - { 15, 9}, { 39,10}, { 23, 9}, { 51,11}, \ - { 15,10}, { 31, 9}, { 67,10}, { 39, 9}, \ - { 79,10}, { 47, 9}, { 95,10}, { 55,11}, \ - { 31,10}, { 79,11}, { 47,10}, { 95,12}, \ - { 31,11}, { 63,10}, { 127, 9}, { 255,10}, \ - { 135,11}, { 79,10}, { 159, 9}, { 319,11}, \ - { 95,10}, { 191, 9}, { 383,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,10}, { 271,11}, \ - { 143,10}, { 287, 9}, { 575,10}, { 319,12}, \ - { 95,11}, { 191,10}, { 383,13}, { 63,12}, \ - { 127,11}, { 255,10}, { 511,11}, { 271,10}, \ - { 543,11}, { 287,10}, { 575, 9}, { 1151,11}, \ - { 319,10}, { 639,11}, { 351,10}, { 703,12}, \ - { 191,11}, { 383,10}, { 767,11}, { 415,12}, \ - { 223,11}, { 447,13}, { 127,12}, { 255,11}, \ - { 511,10}, { 1023,11}, { 543,10}, { 1087,12}, \ - { 287,11}, { 575,10}, { 1151,12}, { 319,11}, \ - { 639,12}, { 351,11}, { 703,13}, { 191,12}, \ - { 383,11}, { 767,12}, { 415,11}, { 831,12}, \ - { 447,11}, { 895,14}, { 127,13}, { 255,12}, \ - { 511,11}, { 1023,12}, { 543,11}, { 1087,10}, \ - { 2175,12}, { 575,11}, { 1151,12}, { 607,13}, \ - { 319,12}, { 639,11}, { 1279,12}, { 671,11}, \ - { 1343,12}, { 703,11}, { 1407,13}, { 383,12}, \ - { 767,11}, { 1535,12}, { 831,13}, { 447,12}, \ - { 959,11}, { 1919,14}, { 255,13}, { 511,12}, \ - { 1087,11}, { 2175,13}, { 575,12}, { 1215,11}, \ - { 2431,10}, { 4863,13}, { 639,12}, { 1343,13}, \ - { 703,12}, { 1407,14}, { 383,13}, { 767,12}, \ - { 1535,13}, { 831,12}, { 1663,13}, { 959,12}, \ - { 1919,11}, { 3839,15}, { 255,14}, { 511,13}, \ - { 1087,12}, { 2175,13}, { 1215,12}, { 2431,11}, \ - { 4863,14}, { 639,13}, { 1343,12}, { 2687,13}, \ - { 1407,12}, { 2815,13}, { 1471,12}, { 2943,14}, \ - { 767,13}, { 1599,12}, { 3199,13}, { 1663,14}, \ - { 895,13}, { 1919,12}, { 3839,15}, { 511,14}, \ - { 1023,13}, { 2175,14}, { 1151,13}, { 2431,12}, \ - { 4863,14}, { 1279,13}, { 2687,14}, { 1407,13}, \ - { 2943,15}, { 767,14}, { 1535,13}, { 3199,14}, \ - { 1663,13}, { 3327,14}, { 1919,13}, { 3839,16}, \ - { 511,15}, { 1023,14}, { 2431,13}, { 4863,15}, \ - { 1279,14}, { 2943,12}, { 11775,15}, { 1535,14}, \ - { 3327,15}, { 1791,14}, { 16384,15}, { 32768,16}, \ - { 65536,17}, { 131072,18}, { 262144,19}, { 524288,20}, \ - {1048576,21}, {2097152,22}, {4194304,23}, {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 208 -#define MUL_FFT_THRESHOLD 4224 - -#define SQR_FFT_MODF_THRESHOLD 284 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 272, 5}, { 15, 6}, { 8, 5}, { 17, 6}, \ - { 19, 7}, { 17, 8}, { 9, 7}, { 21, 8}, \ - { 11, 7}, { 24, 8}, { 13, 7}, { 27, 8}, \ - { 15, 7}, { 31, 8}, { 21, 9}, { 11, 8}, \ - { 27, 9}, { 15, 8}, { 33, 9}, { 19, 8}, \ - { 39, 9}, { 23, 8}, { 47, 9}, { 27,10}, \ - { 15, 9}, { 39,10}, { 23, 9}, { 47,11}, \ - { 15,10}, { 31, 9}, { 63,10}, { 47,11}, \ - { 31,10}, { 71, 9}, { 143,10}, { 79,11}, \ - { 47,10}, { 95,12}, { 31,11}, { 63,10}, \ - { 127, 9}, { 255, 8}, { 511, 9}, { 271,10}, \ - { 143,11}, { 79,10}, { 159, 9}, { 319,10}, \ - { 175, 9}, { 351,11}, { 95,10}, { 191, 9}, \ - { 383,10}, { 207, 9}, { 415,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,10}, { 271,11}, \ - { 143,10}, { 287, 9}, { 575,11}, { 159,10}, \ - { 319,11}, { 175,10}, { 351,12}, { 95,11}, \ - { 191,10}, { 383,11}, { 207,10}, { 415,13}, \ - { 63,12}, { 127,11}, { 255,10}, { 511,11}, \ - { 271,10}, { 543,11}, { 287,10}, { 575,12}, \ - { 159,11}, { 319,10}, { 639,11}, { 351,10}, \ - { 703,12}, { 191,11}, { 383,10}, { 767,11}, \ - { 415,12}, { 223,11}, { 447,10}, { 895,11}, \ - { 479,10}, { 959,12}, { 255,11}, { 511,10}, \ - { 1023,11}, { 543,12}, { 287,11}, { 575,12}, \ - { 319,11}, { 639,12}, { 351,11}, { 703,13}, \ - { 191,12}, { 383,11}, { 767,12}, { 415,11}, \ - { 831,12}, { 447,11}, { 895,12}, { 479,11}, \ - { 959,13}, { 255,12}, { 511,11}, { 1023,12}, \ - { 543,11}, { 1087,12}, { 575,13}, { 319,12}, \ - { 639,11}, { 1279,12}, { 703,11}, { 1407,13}, \ - { 383,12}, { 831,13}, { 447,12}, { 959,14}, \ - { 255,13}, { 511,12}, { 1087,13}, { 575,12}, \ - { 1215,13}, { 639,12}, { 1279,13}, { 703,12}, \ - { 1407,14}, { 383,13}, { 831,12}, { 1663,13}, \ - { 959,12}, { 1919,15}, { 255,14}, { 511,13}, \ - { 1023,12}, { 2047,13}, { 1087,12}, { 2175,13}, \ - { 1215,14}, { 639,13}, { 1407,12}, { 2815,14}, \ - { 767,13}, { 1663,14}, { 895,13}, { 1919,15}, \ - { 511,14}, { 1023,13}, { 2175,14}, { 1151,13}, \ - { 2431,12}, { 4863,14}, { 1407,13}, { 2815,15}, \ - { 767,14}, { 1663,13}, { 3327,14}, { 1919,13}, \ - { 3839,16}, { 511,15}, { 1023,14}, { 2431,13}, \ - { 4863,15}, { 1279,14}, { 2943,13}, { 5887,12}, \ - { 11775,15}, { 1535,14}, { 3327,15}, { 1791,14}, \ - { 16384,15}, { 32768,16}, { 65536,17}, { 131072,18}, \ - { 262144,19}, { 524288,20}, {1048576,21}, {2097152,22}, \ - {4194304,23}, {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 190 -#define SQR_FFT_THRESHOLD 3264 - -#define MULLO_BASECASE_THRESHOLD 6 -#define MULLO_DC_THRESHOLD 60 -#define MULLO_MUL_N_THRESHOLD 7463 - -#define DC_DIV_QR_THRESHOLD 58 -#define DC_DIVAPPR_Q_THRESHOLD 232 -#define DC_BDIV_QR_THRESHOLD 78 -#define DC_BDIV_Q_THRESHOLD 238 - -#define INV_MULMOD_BNM1_THRESHOLD 92 -#define INV_NEWTON_THRESHOLD 155 -#define INV_APPR_THRESHOLD 157 - -#define BINV_NEWTON_THRESHOLD 155 -#define REDC_1_TO_REDC_N_THRESHOLD 61 - -#define MU_DIV_QR_THRESHOLD 998 -#define MU_DIVAPPR_Q_THRESHOLD 979 -#define MUPI_DIV_QR_THRESHOLD 79 -#define MU_BDIV_QR_THRESHOLD 823 -#define MU_BDIV_Q_THRESHOLD 942 - -#define MATRIX22_STRASSEN_THRESHOLD 14 -#define HGCD_THRESHOLD 74 -#define HGCD_APPR_THRESHOLD 155 -#define HGCD_REDUCE_THRESHOLD 2479 -#define GCD_DC_THRESHOLD 351 -#define GCDEXT_DC_THRESHOLD 288 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 12 -#define GET_STR_PRECOMPUTE_THRESHOLD 21 -#define SET_STR_DC_THRESHOLD 650 -#define SET_STR_PRECOMPUTE_THRESHOLD 1585 - -#define FAC_DSC_THRESHOLD 662 -#define FAC_ODD_THRESHOLD 28 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p6/aorsmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p6/aorsmul_1.asm deleted file mode 100644 index c572b917e225c23c7e5eabc50b3ddd0c8bb94250..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p6/aorsmul_1.asm +++ /dev/null @@ -1,185 +0,0 @@ -dnl PowerPC-64 mpn_addmul_1 and mpn_submul_1 optimised for power6. - -dnl Copyright 1999-2001, 2003-2006, 2008, 2010, 2011 Free Software Foundation, -dnl Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C mpn_addmul_1 mpn_submul_1 -C cycles/limb cycles/limb -C POWER3/PPC630 ? ? -C POWER4/PPC970 ? ? -C POWER5 ? ? -C POWER6 12.25 12.8 -C POWER7 ? ? - -C TODO -C * Reduce register usage. -C * Schedule function entry code. -C * Unroll more. 8-way unrolling would bring us to 10 c/l, 16-way unrolling -C would bring us to 9 c/l. -C * Handle n = 1 and perhaps n = 2 separately, without saving any registers. - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') -define(`v0', `r6') - -ifdef(`OPERATION_addmul_1',` - define(ADDSUBC, adde) - define(ADDSUB, addc) - define(func, mpn_addmul_1) - define(func_nc, mpn_addmul_1c) C FIXME: not really supported - define(AM, `$1') - define(SM, `') - define(CLRRSC, `addic $1, r0, 0') -') -ifdef(`OPERATION_submul_1',` - define(ADDSUBC, subfe) - define(ADDSUB, subfc) - define(func, mpn_submul_1) - define(func_nc, mpn_submul_1c) C FIXME: not really supported - define(AM, `') - define(SM, `$1') - define(CLRRSC, `subfc $1, r0, r0') -') - -MULFUNC_PROLOGUE(mpn_addmul_1 mpn_submul_1) - -ASM_START() -PROLOGUE(func) - std r31, -8(r1) - std r30, -16(r1) - std r29, -24(r1) - std r28, -32(r1) - std r27, -40(r1) - - rldicl. r0, n, 0,62 C r0 = n & 3, set cr0 - cmpdi cr6, r0, 2 - addi n, n, 3 C compute count... - srdi n, n, 2 C ...for ctr - mtctr n C copy loop count into ctr - beq cr0, L(b0) - blt cr6, L(b1) - beq cr6, L(b2) - -L(b3): ld r8, 0(up) - ld r7, 8(up) - ld r27, 16(up) - addi up, up, 16 - addi rp, rp, 16 - mulld r5, r8, v0 - mulhdu r8, r8, v0 - mulld r9, r7, v0 - mulhdu r7, r7, v0 - mulld r11, r27, v0 - mulhdu r27, r27, v0 - ld r29, -16(rp) - ld r30, -8(rp) - ld r31, 0(rp) - addc r9, r9, r8 - adde r11, r11, r7 - addze r12, r27 - ADDSUB r5, r5, r29 - b L(l3) - -L(b2): ld r7, 0(up) - ld r27, 8(up) - addi up, up, 8 - addi rp, rp, 8 - mulld r9, r7, v0 - mulhdu r7, r7, v0 - mulld r11, r27, v0 - mulhdu r27, r27, v0 - ld r30, -8(rp) - ld r31, 0(rp) - addc r11, r11, r7 - addze r12, r27 - ADDSUB r9, r9, r30 - b L(l2) - -L(b1): ld r27, 0(up) - ld r31, 0(rp) - mulld r11, r27, v0 - mulhdu r12, r27, v0 - ADDSUB r11, r11, r31 - b L(l1) - -L(b0): addi up, up, -8 - addi rp, rp, -8 - CLRRSC( r12) C clear r12 and clr/set cy - - ALIGN(32) -L(top): -SM(` subfe r11, r0, r0') C complement... -SM(` addic r11, r11, 1') C ...carry flag - ld r10, 8(up) - ld r8, 16(up) - ld r7, 24(up) - ld r27, 32(up) - addi up, up, 32 - addi rp, rp, 32 - mulld r0, r10, v0 - mulhdu r10, r10, v0 - mulld r5, r8, v0 - mulhdu r8, r8, v0 - mulld r9, r7, v0 - mulhdu r7, r7, v0 - mulld r11, r27, v0 - mulhdu r27, r27, v0 - ld r28, -24(rp) - adde r0, r0, r12 - ld r29, -16(rp) - adde r5, r5, r10 - ld r30, -8(rp) - ld r31, 0(rp) - adde r9, r9, r8 - adde r11, r11, r7 - addze r12, r27 - ADDSUB r0, r0, r28 - std r0, -24(rp) - ADDSUBC r5, r5, r29 -L(l3): std r5, -16(rp) - ADDSUBC r9, r9, r30 -L(l2): std r9, -8(rp) - ADDSUBC r11, r11, r31 -L(l1): std r11, 0(rp) - bdnz L(top) - -AM(` addze r3, r12') -SM(` subfe r11, r0, r0') C complement... - ld r31, -8(r1) -SM(` subf r3, r11, r12') - ld r30, -16(r1) - ld r29, -24(r1) - ld r28, -32(r1) - ld r27, -40(r1) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p6/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p6/gmp-mparam.h deleted file mode 100644 index c7e2f894ad4e78555462c10532c31e3af72ed56a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p6/gmp-mparam.h +++ /dev/null @@ -1,160 +0,0 @@ -/* POWER6 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2003, 2009-2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* 3500 MHz POWER6 (kolga.bibsys.no) */ - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 3 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 3 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 12 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 6 -#define USE_PREINV_DIVREM_1 0 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 21 - -#define MUL_TOOM22_THRESHOLD 20 -#define MUL_TOOM33_THRESHOLD 50 -#define MUL_TOOM44_THRESHOLD 106 -#define MUL_TOOM6H_THRESHOLD 274 -#define MUL_TOOM8H_THRESHOLD 339 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 62 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 76 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 73 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 66 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 88 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 24 -#define SQR_TOOM3_THRESHOLD 49 -#define SQR_TOOM4_THRESHOLD 130 -#define SQR_TOOM6_THRESHOLD 226 -#define SQR_TOOM8_THRESHOLD 272 - -#define MULMID_TOOM42_THRESHOLD 36 - -#define MULMOD_BNM1_THRESHOLD 14 -#define SQRMOD_BNM1_THRESHOLD 14 - -#define MUL_FFT_MODF_THRESHOLD 380 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 340, 5}, { 19, 6}, { 10, 5}, { 21, 6}, \ - { 11, 5}, { 23, 6}, { 21, 7}, { 11, 6}, \ - { 23, 7}, { 12, 6}, { 25, 7}, { 21, 8}, \ - { 11, 7}, { 24, 8}, { 13, 7}, { 27, 8}, \ - { 21, 9}, { 11, 8}, { 25, 9}, { 15, 8}, \ - { 33, 9}, { 23, 8}, { 47, 9}, { 27,10}, \ - { 15, 9}, { 39,10}, { 23, 9}, { 47,11}, \ - { 15,10}, { 31, 9}, { 63,10}, { 47,11}, \ - { 31,10}, { 71,11}, { 47,12}, { 31,11}, \ - { 63,10}, { 127, 9}, { 255, 8}, { 511,10}, \ - { 135, 9}, { 271,11}, { 79, 9}, { 319, 8}, \ - { 639,10}, { 175,11}, { 95,10}, { 191, 9}, \ - { 383,10}, { 207,12}, { 63,10}, { 255, 9}, \ - { 511,10}, { 271, 9}, { 543,11}, { 143,10}, \ - { 287, 9}, { 575,10}, { 303, 9}, { 607,10}, \ - { 319, 9}, { 639,11}, { 175,12}, { 95,11}, \ - { 191,10}, { 383,11}, { 207,10}, { 415,13}, \ - { 8192,14}, { 16384,15}, { 32768,16}, { 65536,17}, \ - { 131072,18}, { 262144,19}, { 524288,20}, {1048576,21}, \ - {2097152,22}, {4194304,23}, {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 79 -#define MUL_FFT_THRESHOLD 3520 - -#define SQR_FFT_MODF_THRESHOLD 308 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 280, 5}, { 17, 6}, { 9, 5}, { 19, 6}, \ - { 21, 7}, { 11, 6}, { 23, 7}, { 21, 8}, \ - { 11, 7}, { 24, 8}, { 13, 7}, { 27, 8}, \ - { 21, 9}, { 11, 8}, { 25, 9}, { 15, 8}, \ - { 33, 9}, { 19, 8}, { 39, 9}, { 23, 8}, \ - { 47, 9}, { 27,10}, { 15, 9}, { 39,10}, \ - { 23, 9}, { 47,11}, { 15,10}, { 31, 9}, \ - { 63,10}, { 47,11}, { 31,10}, { 71, 9}, \ - { 143,11}, { 47,12}, { 31,11}, { 63, 9}, \ - { 255, 8}, { 511, 9}, { 271,10}, { 143,11}, \ - { 79,10}, { 159, 9}, { 319,10}, { 175, 9}, \ - { 351,11}, { 95,10}, { 191, 9}, { 383,10}, \ - { 207,12}, { 63,11}, { 127,10}, { 255, 9}, \ - { 511, 8}, { 1023,10}, { 271, 9}, { 543,11}, \ - { 143,10}, { 287, 9}, { 575,11}, { 159,10}, \ - { 319, 9}, { 639,11}, { 175,10}, { 351,12}, \ - { 95,11}, { 191,10}, { 383,11}, { 207,10}, \ - { 415,13}, { 8192,14}, { 16384,15}, { 32768,16}, \ - { 65536,17}, { 131072,18}, { 262144,19}, { 524288,20}, \ - {1048576,21}, {2097152,22}, {4194304,23}, {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 80 -#define SQR_FFT_THRESHOLD 2752 - -#define MULLO_BASECASE_THRESHOLD 5 -#define MULLO_DC_THRESHOLD 62 -#define MULLO_MUL_N_THRESHOLD 2995 - -#define DC_DIV_QR_THRESHOLD 59 -#define DC_DIVAPPR_Q_THRESHOLD 200 -#define DC_BDIV_QR_THRESHOLD 70 -#define DC_BDIV_Q_THRESHOLD 168 - -#define INV_MULMOD_BNM1_THRESHOLD 53 -#define INV_NEWTON_THRESHOLD 170 -#define INV_APPR_THRESHOLD 166 - -#define BINV_NEWTON_THRESHOLD 220 -#define REDC_1_TO_REDC_N_THRESHOLD 67 - -#define MU_DIV_QR_THRESHOLD 998 -#define MU_DIVAPPR_Q_THRESHOLD 942 -#define MUPI_DIV_QR_THRESHOLD 57 -#define MU_BDIV_QR_THRESHOLD 889 -#define MU_BDIV_Q_THRESHOLD 1078 - -#define POWM_SEC_TABLE 4,26,216,804,1731 - -#define MATRIX22_STRASSEN_THRESHOLD 13 -#define HGCD_THRESHOLD 106 -#define HGCD_APPR_THRESHOLD 109 -#define HGCD_REDUCE_THRESHOLD 2205 -#define GCD_DC_THRESHOLD 492 -#define GCDEXT_DC_THRESHOLD 327 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 16 -#define GET_STR_PRECOMPUTE_THRESHOLD 28 -#define SET_STR_DC_THRESHOLD 537 -#define SET_STR_PRECOMPUTE_THRESHOLD 1576 - -#define FAC_DSC_THRESHOLD 426 -#define FAC_ODD_THRESHOLD 0 /* always */ diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p6/mul_basecase.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p6/mul_basecase.asm deleted file mode 100644 index 3d32b46c353b50fd6acd33ba19a8a37babb991da..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p6/mul_basecase.asm +++ /dev/null @@ -1,589 +0,0 @@ -dnl PowerPC-64 mpn_mul_basecase. - -dnl Copyright 1999-2001, 2003-2006, 2008, 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 ? -C POWER5 ? -C POWER6 12.25 - -C TODO -C * Reduce register usage. At least 4 register less can be used. -C * Unroll more. 8-way unrolling would bring us to 10 c/l, 16-way unrolling -C would bring us to 9 c/l. -C * The bdz insns for b1 and b2 will never branch, -C * Align things better, perhaps by moving things like pointer updates from -C before to after loops. - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`un', `r5') -define(`vp', `r6') -define(`vn', `r7') - -define(`v0', `r25') -define(`outer_rp', `r22') -define(`outer_up', `r23') - -ASM_START() -PROLOGUE(mpn_mul_basecase) - -C Special code for un <= 2, for efficiency of these important cases, -C and since it simplifies the default code. - cmpdi cr0, un, 2 - bgt cr0, L(un_gt2) - cmpdi cr6, vn, 1 - ld r7, 0(vp) - ld r5, 0(up) - mulld r8, r5, r7 C weight 0 - mulhdu r9, r5, r7 C weight 1 - std r8, 0(rp) - beq cr0, L(2x) - std r9, 8(rp) - blr - ALIGN(16) -L(2x): ld r0, 8(up) - mulld r8, r0, r7 C weight 1 - mulhdu r10, r0, r7 C weight 2 - addc r9, r9, r8 - addze r10, r10 - bne cr6, L(2x2) - std r9, 8(rp) - std r10, 16(rp) - blr - ALIGN(16) -L(2x2): ld r6, 8(vp) - nop - mulld r8, r5, r6 C weight 1 - mulhdu r11, r5, r6 C weight 2 - mulld r12, r0, r6 C weight 2 - mulhdu r0, r0, r6 C weight 3 - addc r9, r9, r8 - std r9, 8(rp) - adde r11, r11, r10 - addze r0, r0 - addc r11, r11, r12 - addze r0, r0 - std r11, 16(rp) - std r0, 24(rp) - blr - -L(un_gt2): - std r31, -8(r1) - std r30, -16(r1) - std r29, -24(r1) - std r28, -32(r1) - std r27, -40(r1) - std r26, -48(r1) - std r25, -56(r1) - std r24, -64(r1) - std r23, -72(r1) - std r22, -80(r1) - std r21, -88(r1) - std r20, -96(r1) - - mr outer_rp, rp - mr outer_up, up - - ld v0, 0(vp) C new v limb - addi vp, vp, 8 - ld r26, 0(up) - - rldicl. r0, un, 0,62 C r0 = n & 3, set cr0 - cmpdi cr6, r0, 2 - addi un, un, 4 C compute count... - srdi un, un, 2 C ...for ctr - mtctr un C copy inner loop count into ctr - beq cr0, L(b0) - blt cr6, L(b1) - beq cr6, L(b2) - - - ALIGN(16) -L(b3): - ld r27, 8(up) - ld r20, 16(up) - mulld r0, r26, v0 - mulhdu r31, r26, v0 - mulld r24, r27, v0 - mulhdu r8, r27, v0 - mulld r9, r20, v0 - mulhdu r10, r20, v0 - addc r24, r24, r31 - adde r9, r9, r8 - addze r12, r10 - std r0, 0(rp) - std r24, 8(rp) - std r9, 16(rp) - addi up, up, 16 - addi rp, rp, 16 - bdz L(end_m_3) - - ALIGN(32) -L(lo_m_3): - ld r26, 8(up) - ld r27, 16(up) - ld r20, 24(up) - ld r21, 32(up) - mulld r0, r26, v0 - mulhdu r31, r26, v0 - mulld r24, r27, v0 - mulhdu r8, r27, v0 - mulld r9, r20, v0 - mulhdu r27, r20, v0 - mulld r11, r21, v0 - mulhdu r26, r21, v0 - adde r0, r0, r12 - adde r24, r24, r31 - std r0, 8(rp) - adde r9, r9, r8 - std r24, 16(rp) - adde r11, r11, r27 - std r9, 24(rp) - addi up, up, 32 - std r11, 32(rp) - addi rp, rp, 32 - mr r12, r26 - bdnz L(lo_m_3) - - ALIGN(16) -L(end_m_3): - addze r12, r12 - addic. vn, vn, -1 - std r12, 8(rp) - beq L(ret) - - ALIGN(16) -L(outer_lo_3): - mtctr un C copy inner loop count into ctr - addi rp, outer_rp, 24 - addi up, outer_up, 16 - addi outer_rp, outer_rp, 8 - ld v0, 0(vp) C new v limb - addi vp, vp, 8 - ld r26, -16(up) - ld r27, -8(up) - ld r20, 0(up) - mulld r0, r26, v0 - mulhdu r31, r26, v0 - mulld r24, r27, v0 - mulhdu r8, r27, v0 - mulld r9, r20, v0 - mulhdu r10, r20, v0 - ld r28, -16(rp) - ld r29, -8(rp) - ld r30, 0(rp) - addc r24, r24, r31 - adde r9, r9, r8 - addze r12, r10 - addc r0, r0, r28 - std r0, -16(rp) - adde r24, r24, r29 - std r24, -8(rp) - adde r9, r9, r30 - std r9, 0(rp) - bdz L(end_3) - - ALIGN(32) C registers dying -L(lo_3): - ld r26, 8(up) - ld r27, 16(up) - ld r20, 24(up) C - ld r21, 32(up) C - addi up, up, 32 C - addi rp, rp, 32 C - mulld r0, r26, v0 C - mulhdu r10, r26, v0 C 26 - mulld r24, r27, v0 C - mulhdu r8, r27, v0 C 27 - mulld r9, r20, v0 C - mulhdu r27, r20, v0 C 26 - mulld r11, r21, v0 C - mulhdu r26, r21, v0 C 27 - ld r28, -24(rp) C - adde r0, r0, r12 C 0 12 - ld r29, -16(rp) C - adde r24, r24, r10 C 24 10 - ld r30, -8(rp) C - ld r31, 0(rp) C - adde r9, r9, r8 C 8 9 - adde r11, r11, r27 C 27 11 - addze r12, r26 C 26 - addc r0, r0, r28 C 0 28 - std r0, -24(rp) C 0 - adde r24, r24, r29 C 7 29 - std r24, -16(rp) C 7 - adde r9, r9, r30 C 9 30 - std r9, -8(rp) C 9 - adde r11, r11, r31 C 11 31 - std r11, 0(rp) C 11 - bdnz L(lo_3) C - - ALIGN(16) -L(end_3): - addze r12, r12 - addic. vn, vn, -1 - std r12, 8(rp) - bne L(outer_lo_3) - b L(ret) - - - ALIGN(16) -L(b1): - mulld r0, r26, v0 - mulhdu r12, r26, v0 - addic r0, r0, 0 - std r0, 0(rp) - bdz L(end_m_1) - - ALIGN(16) -L(lo_m_1): - ld r26, 8(up) - ld r27, 16(up) - ld r20, 24(up) - ld r21, 32(up) - mulld r0, r26, v0 - mulhdu r31, r26, v0 - mulld r24, r27, v0 - mulhdu r8, r27, v0 - mulld r9, r20, v0 - mulhdu r27, r20, v0 - mulld r11, r21, v0 - mulhdu r26, r21, v0 - adde r0, r0, r12 - adde r24, r24, r31 - std r0, 8(rp) - adde r9, r9, r8 - std r24, 16(rp) - adde r11, r11, r27 - std r9, 24(rp) - addi up, up, 32 - std r11, 32(rp) - addi rp, rp, 32 - mr r12, r26 - bdnz L(lo_m_1) - - ALIGN(16) -L(end_m_1): - addze r12, r12 - addic. vn, vn, -1 - std r12, 8(rp) - beq L(ret) - - ALIGN(16) -L(outer_lo_1): - mtctr un C copy inner loop count into ctr - addi rp, outer_rp, 8 - mr up, outer_up - addi outer_rp, outer_rp, 8 - ld v0, 0(vp) C new v limb - addi vp, vp, 8 - ld r26, 0(up) - ld r28, 0(rp) - mulld r0, r26, v0 - mulhdu r12, r26, v0 - addc r0, r0, r28 - std r0, 0(rp) - bdz L(end_1) - - ALIGN(32) C registers dying -L(lo_1): - ld r26, 8(up) - ld r27, 16(up) - ld r20, 24(up) C - ld r21, 32(up) C - addi up, up, 32 C - addi rp, rp, 32 C - mulld r0, r26, v0 C - mulhdu r10, r26, v0 C 26 - mulld r24, r27, v0 C - mulhdu r8, r27, v0 C 27 - mulld r9, r20, v0 C - mulhdu r27, r20, v0 C 26 - mulld r11, r21, v0 C - mulhdu r26, r21, v0 C 27 - ld r28, -24(rp) C - adde r0, r0, r12 C 0 12 - ld r29, -16(rp) C - adde r24, r24, r10 C 24 10 - ld r30, -8(rp) C - ld r31, 0(rp) C - adde r9, r9, r8 C 8 9 - adde r11, r11, r27 C 27 11 - addze r12, r26 C 26 - addc r0, r0, r28 C 0 28 - std r0, -24(rp) C 0 - adde r24, r24, r29 C 7 29 - std r24, -16(rp) C 7 - adde r9, r9, r30 C 9 30 - std r9, -8(rp) C 9 - adde r11, r11, r31 C 11 31 - std r11, 0(rp) C 11 - bdnz L(lo_1) C - - ALIGN(16) -L(end_1): - addze r12, r12 - addic. vn, vn, -1 - std r12, 8(rp) - bne L(outer_lo_1) - b L(ret) - - - ALIGN(16) -L(b0): - addi up, up, -8 - addi rp, rp, -8 - li r12, 0 - addic r12, r12, 0 - bdz L(end_m_0) - - ALIGN(16) -L(lo_m_0): - ld r26, 8(up) - ld r27, 16(up) - ld r20, 24(up) - ld r21, 32(up) - mulld r0, r26, v0 - mulhdu r31, r26, v0 - mulld r24, r27, v0 - mulhdu r8, r27, v0 - mulld r9, r20, v0 - mulhdu r27, r20, v0 - mulld r11, r21, v0 - mulhdu r26, r21, v0 - adde r0, r0, r12 - adde r24, r24, r31 - std r0, 8(rp) - adde r9, r9, r8 - std r24, 16(rp) - adde r11, r11, r27 - std r9, 24(rp) - addi up, up, 32 - std r11, 32(rp) - addi rp, rp, 32 - mr r12, r26 - bdnz L(lo_m_0) - - ALIGN(16) -L(end_m_0): - addze r12, r12 - addic. vn, vn, -1 - std r12, 8(rp) - beq L(ret) - - ALIGN(16) -L(outer_lo_0): - mtctr un C copy inner loop count into ctr - addi rp, outer_rp, 0 - addi up, outer_up, -8 - addi outer_rp, outer_rp, 8 - ld v0, 0(vp) C new v limb - addi vp, vp, 8 - li r12, 0 - addic r12, r12, 0 - bdz L(end_0) - - ALIGN(32) C registers dying -L(lo_0): - ld r26, 8(up) - ld r27, 16(up) - ld r20, 24(up) C - ld r21, 32(up) C - addi up, up, 32 C - addi rp, rp, 32 C - mulld r0, r26, v0 C - mulhdu r10, r26, v0 C 26 - mulld r24, r27, v0 C - mulhdu r8, r27, v0 C 27 - mulld r9, r20, v0 C - mulhdu r27, r20, v0 C 26 - mulld r11, r21, v0 C - mulhdu r26, r21, v0 C 27 - ld r28, -24(rp) C - adde r0, r0, r12 C 0 12 - ld r29, -16(rp) C - adde r24, r24, r10 C 24 10 - ld r30, -8(rp) C - ld r31, 0(rp) C - adde r9, r9, r8 C 8 9 - adde r11, r11, r27 C 27 11 - addze r12, r26 C 26 - addc r0, r0, r28 C 0 28 - std r0, -24(rp) C 0 - adde r24, r24, r29 C 7 29 - std r24, -16(rp) C 7 - adde r9, r9, r30 C 9 30 - std r9, -8(rp) C 9 - adde r11, r11, r31 C 11 31 - std r11, 0(rp) C 11 - bdnz L(lo_0) C - - ALIGN(16) -L(end_0): - addze r12, r12 - addic. vn, vn, -1 - std r12, 8(rp) - bne L(outer_lo_0) - b L(ret) - - - ALIGN(16) -L(b2): ld r27, 8(up) - addi up, up, 8 - mulld r0, r26, v0 - mulhdu r10, r26, v0 - mulld r24, r27, v0 - mulhdu r8, r27, v0 - addc r24, r24, r10 - addze r12, r8 - std r0, 0(rp) - std r24, 8(rp) - addi rp, rp, 8 - bdz L(end_m_2) - - ALIGN(16) -L(lo_m_2): - ld r26, 8(up) - ld r27, 16(up) - ld r20, 24(up) - ld r21, 32(up) - mulld r0, r26, v0 - mulhdu r31, r26, v0 - mulld r24, r27, v0 - mulhdu r8, r27, v0 - mulld r9, r20, v0 - mulhdu r27, r20, v0 - mulld r11, r21, v0 - mulhdu r26, r21, v0 - adde r0, r0, r12 - adde r24, r24, r31 - std r0, 8(rp) - adde r9, r9, r8 - std r24, 16(rp) - adde r11, r11, r27 - std r9, 24(rp) - addi up, up, 32 - std r11, 32(rp) - addi rp, rp, 32 - mr r12, r26 - bdnz L(lo_m_2) - - ALIGN(16) -L(end_m_2): - addze r12, r12 - addic. vn, vn, -1 - std r12, 8(rp) - beq L(ret) - - ALIGN(16) -L(outer_lo_2): - mtctr un C copy inner loop count into ctr - addi rp, outer_rp, 16 - addi up, outer_up, 8 - addi outer_rp, outer_rp, 8 - ld v0, 0(vp) C new v limb - addi vp, vp, 8 - ld r26, -8(up) - ld r27, 0(up) - ld r28, -8(rp) - ld r29, 0(rp) - mulld r0, r26, v0 - mulhdu r10, r26, v0 - mulld r24, r27, v0 - mulhdu r8, r27, v0 - addc r24, r24, r10 - addze r12, r8 - addc r0, r0, r28 - std r0, -8(rp) - adde r24, r24, r29 - std r24, 0(rp) - bdz L(end_2) - - ALIGN(16) C registers dying -L(lo_2): - ld r26, 8(up) - ld r27, 16(up) - ld r20, 24(up) C - ld r21, 32(up) C - addi up, up, 32 C - addi rp, rp, 32 C - mulld r0, r26, v0 C - mulhdu r10, r26, v0 C 26 - mulld r24, r27, v0 C - mulhdu r8, r27, v0 C 27 - mulld r9, r20, v0 C - mulhdu r27, r20, v0 C 26 - mulld r11, r21, v0 C - mulhdu r26, r21, v0 C 27 - ld r28, -24(rp) C - adde r0, r0, r12 C 0 12 - ld r29, -16(rp) C - adde r24, r24, r10 C 24 10 - ld r30, -8(rp) C - ld r31, 0(rp) C - adde r9, r9, r8 C 8 9 - adde r11, r11, r27 C 27 11 - addze r12, r26 C 26 - addc r0, r0, r28 C 0 28 - std r0, -24(rp) C 0 - adde r24, r24, r29 C 7 29 - std r24, -16(rp) C 7 - adde r9, r9, r30 C 9 30 - std r9, -8(rp) C 9 - adde r11, r11, r31 C 11 31 - std r11, 0(rp) C 11 - bdnz L(lo_2) C - - ALIGN(16) -L(end_2): - addze r12, r12 - addic. vn, vn, -1 - std r12, 8(rp) - bne L(outer_lo_2) -C b L(ret) - -L(ret): ld r31, -8(r1) - ld r30, -16(r1) - ld r29, -24(r1) - ld r28, -32(r1) - ld r27, -40(r1) - ld r26, -48(r1) - ld r25, -56(r1) - ld r24, -64(r1) - ld r23, -72(r1) - ld r22, -80(r1) - ld r21, -88(r1) - ld r20, -96(r1) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aormul_2.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aormul_2.asm deleted file mode 100644 index 8731e01a8949230fb92c270e70db90fb09a89e1d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aormul_2.asm +++ /dev/null @@ -1,135 +0,0 @@ -dnl PowerPC-64 mpn_mul_2 and mpn_addmul_2. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb cycles/limb -C mul_2 addmul_2 -C POWER3/PPC630 ? ? -C POWER4/PPC970 ? ? -C POWER5 ? ? -C POWER6 ? ? -C POWER7-SMT4 3 3 -C POWER7-SMT2 ? ? -C POWER7-SMT1 ? ? - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') -define(`vp', `r6') - -define(`cy0', `r10') -ifdef(`EXTRA_REGISTER', -` define(`cy1', EXTRA_REGISTER)', -` define(`cy1', `r31')') - -ifdef(`OPERATION_mul_2',` - define(`AM', `') - define(`ADDX', `addc') - define(`func', `mpn_mul_2') -') -ifdef(`OPERATION_addmul_2',` - define(`AM', `$1') - define(`ADDX', `adde') - define(`func', `mpn_addmul_2') -') - -MULFUNC_PROLOGUE(mpn_mul_2 mpn_addmul_2) - -ASM_START() -PROLOGUE(func) - -ifdef(`EXTRA_REGISTER',,` - std r31, -8(r1) -') - andi. r12, n, 1 - addi r0, n, 1 - srdi r0, r0, 1 - mtctr r0 - ld r11, 0(vp) C v0 - li cy0, 0 - ld r12, 8(vp) C v1 - li cy1, 0 - ld r5, 0(up) - beq L(lo0) - addi up, up, -8 - addi rp, rp, -8 - b L(lo1) - - ALIGN(32) -L(top): -AM(` ld r0, -8(rp)') - ld r5, 0(up) -AM(` addc r6, r6, r0') - ADDX r7, r7, r8 - addze r9, r9 - addc r6, r6, cy0 - adde cy0, r7, cy1 - std r6, -8(rp) - addze cy1, r9 -L(lo0): mulld r6, r11, r5 C v0 * u[i] weight 0 - mulhdu r7, r11, r5 C v0 * u[i] weight 1 - mulld r8, r12, r5 C v1 * u[i] weight 1 - mulhdu r9, r12, r5 C v1 * u[i] weight 2 -AM(` ld r0, 0(rp)') - ld r5, 8(up) -AM(` addc r6, r6, r0') - ADDX r7, r7, r8 - addze r9, r9 - addc r6, r6, cy0 - adde cy0, r7, cy1 - std r6, 0(rp) - addze cy1, r9 -L(lo1): mulld r6, r11, r5 C v0 * u[i] weight 0 - mulhdu r7, r11, r5 C v0 * u[i] weight 1 - addi up, up, 16 - addi rp, rp, 16 - mulld r8, r12, r5 C v1 * u[i] weight 1 - mulhdu r9, r12, r5 C v1 * u[i] weight 2 - bdnz L(top) - -L(end): -AM(` ld r0, -8(rp)') -AM(` addc r6, r6, r0') - ADDX r7, r7, r8 - addze r9, r9 - addc r6, r6, cy0 - std r6, -8(rp) - adde cy0, r7, cy1 - addze cy1, r9 - std cy0, 0(rp) - mr r3, cy1 - -ifdef(`EXTRA_REGISTER',,` - ld r31, -8(r1) -') - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aors_n.asm deleted file mode 100644 index 857c701dec363c1b3fcff75143ea458a136f4ac9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aors_n.asm +++ /dev/null @@ -1,128 +0,0 @@ -dnl PowerPC-64 mpn_add_n, mpn_sub_n optimised for POWER7. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 ? -C POWER5 ? -C POWER6 ? -C POWER7 2.18 - -C This is a tad bit slower than the cnd_aors_n.asm code, which is of course an -C anomaly. - -ifdef(`OPERATION_add_n',` - define(ADDSUBC, adde) - define(ADDSUB, addc) - define(func, mpn_add_n) - define(func_nc, mpn_add_nc) - define(GENRVAL, `addi r3, r3, 1') - define(SETCBR, `addic r0, $1, -1') - define(CLRCB, `addic r0, r0, 0') -') -ifdef(`OPERATION_sub_n',` - define(ADDSUBC, subfe) - define(ADDSUB, subfc) - define(func, mpn_sub_n) - define(func_nc, mpn_sub_nc) - define(GENRVAL, `neg r3, r3') - define(SETCBR, `subfic r0, $1, 0') - define(CLRCB, `addic r0, r1, -1') -') - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc) - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`vp', `r5') -define(`n', `r6') - -ASM_START() -PROLOGUE(func_nc) - SETCBR(r7) - b L(ent) -EPILOGUE() - -PROLOGUE(func) - CLRCB -L(ent): - andi. r7, n, 1 - beq L(bx0) - -L(bx1): ld r7, 0(up) - ld r9, 0(vp) - ADDSUBC r11, r9, r7 - std r11, 0(rp) - cmpldi cr6, n, 1 - beq cr6, L(end) - addi up, up, 8 - addi vp, vp, 8 - addi rp, rp, 8 - -L(bx0): addi r0, n, 2 C compute branch... - srdi r0, r0, 2 C ...count - mtctr r0 - - andi. r7, n, 2 - bne L(mid) - - addi up, up, 16 - addi vp, vp, 16 - addi rp, rp, 16 - - ALIGN(32) -L(top): ld r6, -16(up) - ld r7, -8(up) - ld r8, -16(vp) - ld r9, -8(vp) - ADDSUBC r10, r8, r6 - ADDSUBC r11, r9, r7 - std r10, -16(rp) - std r11, -8(rp) -L(mid): ld r6, 0(up) - ld r7, 8(up) - ld r8, 0(vp) - ld r9, 8(vp) - ADDSUBC r10, r8, r6 - ADDSUBC r11, r9, r7 - std r10, 0(rp) - std r11, 8(rp) - addi up, up, 32 - addi vp, vp, 32 - addi rp, rp, 32 - bdnz L(top) - -L(end): subfe r3, r0, r0 C -cy - GENRVAL - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aorsorrlsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aorsorrlsh1_n.asm deleted file mode 100644 index ddf5fd84b10eba6e1bac5fef8b6a8b868e63da3b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aorsorrlsh1_n.asm +++ /dev/null @@ -1,43 +0,0 @@ -dnl PowerPC-64 mpn_addlsh1_n, mpn_sublsh1_n, mpn_rsblsh1_n. - -dnl Copyright 2003, 2005, 2009, 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -define(LSH, 1) -define(RSH, 63) - -ifdef(`OPERATION_addlsh1_n',`define(`DO_add')') -ifdef(`OPERATION_sublsh1_n',`define(`DO_sub')') -ifdef(`OPERATION_rsblsh1_n',`define(`DO_rsb')') - -MULFUNC_PROLOGUE(mpn_addlsh1_n mpn_sublsh1_n mpn_rsblsh1_n) - -include_mpn(`powerpc64/mode64/p7/aorsorrlshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aorsorrlsh2_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aorsorrlsh2_n.asm deleted file mode 100644 index 3f9d88d6ca618e99c29308bc7965b10ccdf43483..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aorsorrlsh2_n.asm +++ /dev/null @@ -1,43 +0,0 @@ -dnl PowerPC-64 mpn_addlsh2_n, mpn_sublsh2_n, mpn_rsblsh2_n. - -dnl Copyright 2003, 2005, 2009, 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -define(LSH, 2) -define(RSH, 62) - -ifdef(`OPERATION_addlsh2_n',`define(`DO_add')') -ifdef(`OPERATION_sublsh2_n',`define(`DO_sub')') -ifdef(`OPERATION_rsblsh2_n',`define(`DO_rsb')') - -MULFUNC_PROLOGUE(mpn_addlsh2_n mpn_sublsh2_n mpn_rsblsh2_n) - -include_mpn(`powerpc64/mode64/p7/aorsorrlshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aorsorrlshC_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aorsorrlshC_n.asm deleted file mode 100644 index 525120262fcf568957899072148bd8234d8973ba..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/aorsorrlshC_n.asm +++ /dev/null @@ -1,129 +0,0 @@ -dnl PowerPC-64 mpn_addlshC_n, mpn_sublshC_n, mpn_rsblshC_n. - -dnl Copyright 2003, 2005, 2009, 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 ? -C POWER5 ? -C POWER6 ? -C POWER7 2.5 - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`vp', `r5') -define(`n', `r6') - -ifdef(`DO_add', ` - define(`ADDSUBC', `addc $1, $2, $3') - define(`ADDSUBE', `adde $1, $2, $3') - define(INITCY, `addic $1, r1, 0') - define(RETVAL, `addze r3, $1') - define(`func', mpn_addlsh`'LSH`'_n)') -ifdef(`DO_sub', ` - define(`ADDSUBC', `subfc $1, $2, $3') - define(`ADDSUBE', `subfe $1, $2, $3') - define(INITCY, `addic $1, r1, -1') - define(RETVAL, `subfze r3, $1 - neg r3, r3') - define(`func', mpn_sublsh`'LSH`'_n)') -ifdef(`DO_rsb', ` - define(`ADDSUBC', `subfc $1, $3, $2') - define(`ADDSUBE', `subfe $1, $3, $2') - define(INITCY, `addic $1, r1, -1') - define(RETVAL, `addme r3, $1') - define(`func', mpn_rsblsh`'LSH`'_n)') - -define(`s0', `r0') define(`s1', `r9') -define(`u0', `r6') define(`u1', `r7') -define(`v0', `r10') define(`v1', `r11') - - -ASM_START() -PROLOGUE(func) - rldic r7, n, 3, 59 - add up, up, r7 - add vp, vp, r7 - add rp, rp, r7 - -ifdef(`DO_add', ` - addic r0, n, 3 C set cy flag as side effect -',` - subfc r0, r0, r0 C set cy flag - addi r0, n, 3 -') - srdi r0, r0, 2 - mtctr r0 - - andi. r0, n, 1 - beq L(bx0) - -L(bx1): andi. r0, n, 2 - li s0, 0 - bne L(lo3) - b L(lo1) - -L(bx0): andi. r0, n, 2 - li s1, 0 - bne L(lo2) - - ALIGN(32) -L(top): addi rp, rp, 32 - ld v0, 0(vp) - addi vp, vp, 32 - rldimi s1, v0, LSH, 0 - ld u0, 0(up) - addi up, up, 32 - srdi s0, v0, RSH - ADDSUBE(s1, s1, u0) - std s1, -32(rp) -L(lo3): ld v1, -24(vp) - rldimi s0, v1, LSH, 0 - ld u1, -24(up) - srdi s1, v1, RSH - ADDSUBE(s0, s0, u1) - std s0, -24(rp) -L(lo2): ld v0, -16(vp) - rldimi s1, v0, LSH, 0 - ld u0, -16(up) - srdi s0, v0, RSH - ADDSUBE(s1, s1, u0) - std s1, -16(rp) -L(lo1): ld v1, -8(vp) - rldimi s0, v1, LSH, 0 - ld u1, -8(up) - srdi s1, v1, RSH - ADDSUBE(s0, s0, u1) - std s0, -8(rp) - bdnz L(top) C decrement CTR and loop back - - RETVAL( s1) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/gcd_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/gcd_1.asm deleted file mode 100644 index 47cb40bdc5508a56bf8f62c8faf3fb08716e9fcf..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/gcd_1.asm +++ /dev/null @@ -1,110 +0,0 @@ -dnl PowerPC-64 mpn_gcd_1. - -dnl Copyright 2000-2002, 2005, 2009, 2011-2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/bit (approx) -C POWER3/PPC630 - -C POWER4/PPC970 - -C POWER5 - -C POWER6 - -C POWER7 7.6 -C Numbers measured with: speed -CD -s16-64 -t48 mpn_gcd_1 - -C INPUT PARAMETERS -define(`up', `r3') -define(`n', `r4') -define(`v0', `r5') - -EXTERN_FUNC(mpn_mod_1) -EXTERN_FUNC(mpn_modexact_1c_odd) - -ASM_START() -PROLOGUE(mpn_gcd_1,toc) - mflr r0 - std r30, -16(r1) - std r31, -8(r1) - std r0, 16(r1) - stdu r1, -128(r1) - - ld r7, 0(up) C U low limb - or r0, r5, r7 C x | y - - neg r6, r0 - and r6, r6, r0 - cntlzd r31, r6 C common twos - subfic r31, r31, 63 - - neg r6, r5 - and r6, r6, r5 - cntlzd r8, r6 - subfic r8, r8, 63 - srd r5, r5, r8 - mr r30, r5 C v0 saved - - cmpdi r4, BMOD_1_TO_MOD_1_THRESHOLD - blt L(bmod) - CALL( mpn_mod_1) - b L(reduced) -L(bmod): - li r6, 0 - CALL( mpn_modexact_1c_odd) -L(reduced): - -define(`cnt', `r9')dnl - - neg. r6, r3 - and r6, r6, r3 - cntlzd cnt, r6 - li r12, 63 - bne L(mid) - b L(end) - - ALIGN(16) -L(top): isel r30, r3, r30, 29 C y = min(x,y) - isel r3, r10, r11, 29 C x = |y - x| -L(mid): subf cnt, cnt, r12 C cnt = 63-cnt - srd r3, r3, cnt - subf r10, r3, r30 C r10 = y - x - subf r11, r30, r3 C r11 = x - y - cmpld cr7, r30, r3 - and r8, r11, r10 C isolate lsb - cntlzd cnt, r8 - bne cr7, L(top) - -L(end): sld r3, r30, r31 - - addi r1, r1, 128 - ld r0, 16(r1) - ld r30, -16(r1) - ld r31, -8(r1) - mtlr r0 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/gmp-mparam.h deleted file mode 100644 index 783f3c6bf7594315cfc621ee827ea371aedcd4cf..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p7/gmp-mparam.h +++ /dev/null @@ -1,245 +0,0 @@ -/* POWER7 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2003, 2009-2011, 2013-2015 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* 3425 MHz POWER8/SMT4 (gcc112.fsffrance.org) */ -/* FFT tuning limit = 100 M */ -/* Generated by tuneup.c, 2015-10-09, gcc 4.9 */ - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 6 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 13 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 26 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 9 -#define USE_PREINV_DIVREM_1 0 -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 2 -#define DIV_QR_1_UNNORM_THRESHOLD 1 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 35 - -#define MUL_TOOM22_THRESHOLD 22 -#define MUL_TOOM33_THRESHOLD 72 -#define MUL_TOOM44_THRESHOLD 202 -#define MUL_TOOM6H_THRESHOLD 278 -#define MUL_TOOM8H_THRESHOLD 406 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 69 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 134 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 128 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 137 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 106 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 32 -#define SQR_TOOM3_THRESHOLD 96 -#define SQR_TOOM4_THRESHOLD 178 -#define SQR_TOOM6_THRESHOLD 270 -#define SQR_TOOM8_THRESHOLD 357 - -#define MULMID_TOOM42_THRESHOLD 42 - -#define MULMOD_BNM1_THRESHOLD 16 -#define SQRMOD_BNM1_THRESHOLD 19 - -#define MUL_FFT_MODF_THRESHOLD 404 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 404, 5}, { 19, 6}, { 10, 5}, { 21, 6}, \ - { 21, 7}, { 12, 6}, { 25, 7}, { 21, 8}, \ - { 11, 7}, { 25, 8}, { 13, 7}, { 28, 8}, \ - { 15, 7}, { 32, 8}, { 17, 7}, { 35, 8}, \ - { 19, 7}, { 39, 8}, { 21, 9}, { 11, 8}, \ - { 27, 9}, { 15, 8}, { 35, 9}, { 19, 8}, \ - { 41, 9}, { 23, 8}, { 47, 9}, { 27,10}, \ - { 15, 9}, { 39,10}, { 23, 9}, { 51,11}, \ - { 15,10}, { 31, 9}, { 67,10}, { 39, 9}, \ - { 79,10}, { 47, 9}, { 95,10}, { 55,11}, \ - { 31,10}, { 79,11}, { 47,10}, { 95,12}, \ - { 31,11}, { 63,10}, { 135,11}, { 79,10}, \ - { 159,11}, { 95,10}, { 191, 9}, { 383,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 511,10}, \ - { 271,11}, { 143,10}, { 287, 9}, { 575,11}, \ - { 159,10}, { 319,12}, { 95,11}, { 191,10}, \ - { 383,13}, { 63,12}, { 127,11}, { 255, 9}, \ - { 1023,10}, { 543, 9}, { 1087,11}, { 287,10}, \ - { 575, 9}, { 1151,11}, { 303,12}, { 159,11}, \ - { 319,10}, { 639,11}, { 335,10}, { 671,11}, \ - { 351,10}, { 703, 9}, { 1407,11}, { 383,10}, \ - { 767,11}, { 415,10}, { 831,12}, { 223,11}, \ - { 447,10}, { 895,13}, { 127,12}, { 255,11}, \ - { 511,10}, { 1023,11}, { 543,10}, { 1087,12}, \ - { 287,11}, { 575,10}, { 1151,11}, { 607,10}, \ - { 1215,12}, { 319,11}, { 639,10}, { 1279,11}, \ - { 671,12}, { 351,11}, { 703,10}, { 1407,13}, \ - { 191,12}, { 383,11}, { 767,12}, { 415,11}, \ - { 831,10}, { 1663,12}, { 447,11}, { 895,14}, \ - { 127,13}, { 255,12}, { 511,11}, { 1023,12}, \ - { 543,11}, { 1087,10}, { 2175,12}, { 575,11}, \ - { 1151,12}, { 607,11}, { 1215,13}, { 319,12}, \ - { 639,11}, { 1279,12}, { 671,11}, { 1343,12}, \ - { 703,13}, { 383,12}, { 767,11}, { 1535,12}, \ - { 831,11}, { 1663,13}, { 447,12}, { 959,11}, \ - { 1919,14}, { 255,13}, { 511,12}, { 1087,11}, \ - { 2175,13}, { 575,12}, { 1215,11}, { 2431,13}, \ - { 639,12}, { 1343,13}, { 703,12}, { 1407,14}, \ - { 383,13}, { 767,12}, { 1535,13}, { 831,12}, \ - { 1663,13}, { 959,12}, { 1919,15}, { 255,14}, \ - { 511,13}, { 1023,11}, { 4223,13}, { 1087,12}, \ - { 2175,13}, { 1215,12}, { 2431,14}, { 639,13}, \ - { 1343,12}, { 2687,13}, { 1407,12}, { 2815,14}, \ - { 767,13}, { 1535,12}, { 3071,13}, { 1599,12}, \ - { 3199,13}, { 1663,14}, { 895,13}, { 1919,15}, \ - { 511,14}, { 1023,13}, { 2047,12}, { 4095,13}, \ - { 2175,14}, { 1151,13}, { 2431,12}, { 4863,14}, \ - { 1279,13}, { 2687,14}, { 1407,13}, { 2815,15}, \ - { 767,14}, { 1535,13}, { 3199,14}, { 1663,13}, \ - { 3327,12}, { 6655,13}, { 3455,12}, { 6911,14}, \ - { 1919,13}, { 3839,16}, { 511,15}, { 1023,14}, \ - { 2047,13}, { 4095,14}, { 2175,13}, { 4351,12}, \ - { 8703,14}, { 2431,13}, { 4863,15}, { 1279,14}, \ - { 2943,13}, { 5887,12}, { 11775,15}, { 1535,14}, \ - { 3327,13}, { 6655,14}, { 3455,13}, { 6911,15}, \ - { 1791,14}, { 3583,13}, { 7167,14}, { 3839,16}, \ - { 1023,15}, { 2047,14}, { 4351,13}, { 8703,14}, \ - { 4479,15}, { 2303,14}, { 4863,13}, { 9983,15}, \ - { 2559,14}, { 5247,15}, { 2815,14}, { 5631,13}, \ - { 11263,14}, { 5887,13}, { 11775,16}, { 65536,17}, \ - { 131072,18}, { 262144,19}, { 524288,20}, {1048576,21}, \ - {2097152,22}, {4194304,23}, {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 247 -#define MUL_FFT_THRESHOLD 4544 - -#define SQR_FFT_MODF_THRESHOLD 344 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 344, 5}, { 19, 6}, { 10, 5}, { 21, 6}, \ - { 21, 7}, { 11, 6}, { 23, 7}, { 21, 8}, \ - { 11, 7}, { 25, 8}, { 13, 7}, { 27, 8}, \ - { 15, 7}, { 31, 8}, { 21, 9}, { 11, 8}, \ - { 27, 9}, { 15, 8}, { 35, 9}, { 19, 8}, \ - { 41, 9}, { 23, 8}, { 47, 9}, { 27,10}, \ - { 15, 9}, { 39,10}, { 23, 9}, { 51,11}, \ - { 15,10}, { 31, 9}, { 67,10}, { 39, 9}, \ - { 79,10}, { 55,11}, { 31,10}, { 79,11}, \ - { 47,10}, { 95,12}, { 31,11}, { 63,10}, \ - { 127, 9}, { 255,11}, { 79, 9}, { 319,11}, \ - { 95,10}, { 191, 9}, { 383,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,10}, { 271, 9}, \ - { 543,11}, { 143,10}, { 287, 9}, { 575,10}, \ - { 303, 9}, { 607,10}, { 319,12}, { 95,11}, \ - { 191,10}, { 383,13}, { 63,12}, { 127,11}, \ - { 255,10}, { 511,11}, { 271,10}, { 543,11}, \ - { 287,10}, { 575,11}, { 303,10}, { 607,11}, \ - { 319,10}, { 639,11}, { 351,10}, { 703,12}, \ - { 191,11}, { 383,10}, { 767,11}, { 415,12}, \ - { 223,11}, { 447,10}, { 895,13}, { 127,12}, \ - { 255,11}, { 511,10}, { 1023,11}, { 543,12}, \ - { 287,11}, { 575,10}, { 1151,11}, { 607,12}, \ - { 319,11}, { 639,10}, { 1279,12}, { 351,11}, \ - { 703,13}, { 191,12}, { 383,11}, { 767,12}, \ - { 415,11}, { 831,12}, { 447,11}, { 895,14}, \ - { 127,13}, { 255,12}, { 511,11}, { 1023,12}, \ - { 575,11}, { 1151,12}, { 607,13}, { 319,12}, \ - { 639,11}, { 1279,12}, { 671,11}, { 1343,12}, \ - { 703,11}, { 1407,13}, { 383,12}, { 767,11}, \ - { 1535,12}, { 831,11}, { 1663,13}, { 447,12}, \ - { 959,11}, { 1919,14}, { 255,13}, { 511,12}, \ - { 1087,11}, { 2175,13}, { 575,12}, { 1215,11}, \ - { 2431,13}, { 639,12}, { 1343,13}, { 703,12}, \ - { 1407,14}, { 383,13}, { 767,12}, { 1535,13}, \ - { 831,12}, { 1663,13}, { 959,12}, { 1919,15}, \ - { 255,14}, { 511,13}, { 1087,12}, { 2175,13}, \ - { 1215,12}, { 2431,14}, { 639,13}, { 1343,12}, \ - { 2687,13}, { 1407,12}, { 2815,14}, { 767,13}, \ - { 1663,14}, { 895,13}, { 1919,12}, { 3839,15}, \ - { 511,14}, { 1023,13}, { 2175,14}, { 1151,13}, \ - { 2431,12}, { 4863,14}, { 1407,13}, { 2815,15}, \ - { 767,14}, { 1535,13}, { 3071,14}, { 1663,13}, \ - { 3455,14}, { 1791,13}, { 3583,14}, { 1919,13}, \ - { 3839,16}, { 511,15}, { 1023,14}, { 2431,13}, \ - { 4863,15}, { 1279,14}, { 2815,13}, { 5631,14}, \ - { 2943,13}, { 5887,12}, { 11775,15}, { 1535,14}, \ - { 3199,15}, { 1791,14}, { 3583,13}, { 7679,12}, \ - { 15359,16}, { 1023,15}, { 2047,14}, { 4223,15}, \ - { 2303,14}, { 4863,13}, { 9983,15}, { 2815,14}, \ - { 5631,13}, { 11263,14}, { 5887,13}, { 11775,16}, \ - { 65536,17}, { 131072,18}, { 262144,19}, { 524288,20}, \ - {1048576,21}, {2097152,22}, {4194304,23}, {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 212 -#define SQR_FFT_THRESHOLD 2880 - -#define MULLO_BASECASE_THRESHOLD 3 -#define MULLO_DC_THRESHOLD 23 -#define MULLO_MUL_N_THRESHOLD 8907 -#define SQRLO_BASECASE_THRESHOLD 3 -#define SQRLO_DC_THRESHOLD 114 -#define SQRLO_SQR_THRESHOLD 5742 - -#define DC_DIV_QR_THRESHOLD 32 -#define DC_DIVAPPR_Q_THRESHOLD 148 -#define DC_BDIV_QR_THRESHOLD 47 -#define DC_BDIV_Q_THRESHOLD 108 - -#define INV_MULMOD_BNM1_THRESHOLD 58 -#define INV_NEWTON_THRESHOLD 147 -#define INV_APPR_THRESHOLD 132 - -#define BINV_NEWTON_THRESHOLD 278 -#define REDC_1_TO_REDC_2_THRESHOLD 59 -#define REDC_2_TO_REDC_N_THRESHOLD 0 /* always */ - -#define MU_DIV_QR_THRESHOLD 1142 -#define MU_DIVAPPR_Q_THRESHOLD 1142 -#define MUPI_DIV_QR_THRESHOLD 50 -#define MU_BDIV_QR_THRESHOLD 1120 -#define MU_BDIV_Q_THRESHOLD 1470 - -#define POWM_SEC_TABLE 3,25,194,712,2177 - -#define GET_STR_DC_THRESHOLD 8 -#define GET_STR_PRECOMPUTE_THRESHOLD 17 -#define SET_STR_DC_THRESHOLD 795 -#define SET_STR_PRECOMPUTE_THRESHOLD 2655 - -#define FAC_DSC_THRESHOLD 378 -#define FAC_ODD_THRESHOLD 24 - -#define MATRIX22_STRASSEN_THRESHOLD 11 -#define HGCD_THRESHOLD 90 -#define HGCD_APPR_THRESHOLD 136 -#define HGCD_REDUCE_THRESHOLD 2479 -#define GCD_DC_THRESHOLD 393 -#define GCDEXT_DC_THRESHOLD 408 -#define JACOBI_BASE_METHOD 4 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p8/invert_limb.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p8/invert_limb.asm deleted file mode 100644 index 9c2b79859def267d2350a79841d4bf87b24fd173..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/p8/invert_limb.asm +++ /dev/null @@ -1,53 +0,0 @@ -dnl PowerPC-64 mpn_invert_limb -- Invert a normalized limb. - -dnl Copyright 2015 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb (approximate) -C POWER3/PPC630 - -C POWER4/PPC970 - -C POWER5 - -C POWER6 - -C POWER7 ? -C POWER8 32 - -C This runs on POWER7 and later, but is faster only on later CPUs. -C We might want to inline this, considering its small footprint. - -ASM_START() -PROLOGUE(mpn_invert_limb) - sldi. r4, r3, 1 - neg r5, r3 - divdeu r3, r5, r3 - beq- L(1) - blr -L(1): li r3, -1 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/rsh1aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/rsh1aors_n.asm deleted file mode 100644 index 1f57bdf8d3f6ff0ee90aeb684c327ac6344224bf..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/rsh1aors_n.asm +++ /dev/null @@ -1,173 +0,0 @@ -dnl PowerPC-64 mpn_rsh1add_n, mpn_rsh1sub_n - -dnl Copyright 2003, 2005, 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 2.9 -C POWER5 ? -C POWER6 3.5 -C POWER7 2.25 - -define(`rp', `r3') -define(`up', `r4') -define(`vp', `r5') -define(`n', `r6') - -ifdef(`OPERATION_rsh1add_n', ` - define(`ADDSUBC', `addc') - define(`ADDSUBE', `adde') - define(INITCY, `addic $1, r1, 0') - define(`func', mpn_rsh1add_n)') -ifdef(`OPERATION_rsh1sub_n', ` - define(`ADDSUBC', `subfc') - define(`ADDSUBE', `subfe') - define(INITCY, `addic $1, r1, -1') - define(`func', mpn_rsh1sub_n)') - -define(`s0', `r9') -define(`s1', `r7') -define(`x0', `r0') -define(`x1', `r12') -define(`u0', `r8') -define(`v0', `r10') - -MULFUNC_PROLOGUE(mpn_rsh1add_n mpn_rsh1sub_n) - -ASM_START() -PROLOGUE(func) - ld u0, 0(up) - ld v0, 0(vp) - - cmpdi cr6, n, 2 - - addi r0, n, 1 - srdi r0, r0, 2 - mtctr r0 C copy size to count register - - andi. r0, n, 1 - bne cr0, L(bx1) - -L(bx0): ADDSUBC x1, v0, u0 - ld u0, 8(up) - ld v0, 8(vp) - ADDSUBE x0, v0, u0 - ble cr6, L(n2) - ld u0, 16(up) - ld v0, 16(vp) - srdi s0, x1, 1 - rldicl r11, x1, 0, 63 C return value - ADDSUBE x1, v0, u0 - andi. n, n, 2 - bne cr0, L(b10) -L(b00): addi rp, rp, -24 - b L(lo0) -L(b10): addi up, up, 16 - addi vp, vp, 16 - addi rp, rp, -8 - b L(lo2) - - ALIGN(16) -L(bx1): ADDSUBC x0, v0, u0 - ble cr6, L(n1) - ld u0, 8(up) - ld v0, 8(vp) - ADDSUBE x1, v0, u0 - ld u0, 16(up) - ld v0, 16(vp) - srdi s1, x0, 1 - rldicl r11, x0, 0, 63 C return value - ADDSUBE x0, v0, u0 - andi. n, n, 2 - bne cr0, L(b11) -L(b01): addi up, up, 8 - addi vp, vp, 8 - addi rp, rp, -16 - b L(lo1) -L(b11): addi up, up, 24 - addi vp, vp, 24 - bdz L(end) - - ALIGN(32) -L(top): ld u0, 0(up) - ld v0, 0(vp) - srdi s0, x1, 1 - rldimi s1, x1, 63, 0 - std s1, 0(rp) - ADDSUBE x1, v0, u0 -L(lo2): ld u0, 8(up) - ld v0, 8(vp) - srdi s1, x0, 1 - rldimi s0, x0, 63, 0 - std s0, 8(rp) - ADDSUBE x0, v0, u0 -L(lo1): ld u0, 16(up) - ld v0, 16(vp) - srdi s0, x1, 1 - rldimi s1, x1, 63, 0 - std s1, 16(rp) - ADDSUBE x1, v0, u0 -L(lo0): ld u0, 24(up) - ld v0, 24(vp) - srdi s1, x0, 1 - rldimi s0, x0, 63, 0 - std s0, 24(rp) - ADDSUBE x0, v0, u0 - addi up, up, 32 - addi vp, vp, 32 - addi rp, rp, 32 - bdnz L(top) - -L(end): srdi s0, x1, 1 - rldimi s1, x1, 63, 0 - std s1, 0(rp) -L(cj2): srdi s1, x0, 1 - rldimi s0, x0, 63, 0 - std s0, 8(rp) -L(cj1): ADDSUBE x1, x1, x1 C pseudo-depends on x1 - rldimi s1, x1, 63, 0 - std s1, 16(rp) - mr r3, r11 - blr - -L(n1): srdi s1, x0, 1 - rldicl r11, x0, 0, 63 C return value - ADDSUBE x1, x1, x1 C pseudo-depends on x1 - rldimi s1, x1, 63, 0 - std s1, 0(rp) - mr r3, r11 - blr - -L(n2): addi rp, rp, -8 - srdi s0, x1, 1 - rldicl r11, x1, 0, 63 C return value - b L(cj2) -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/sqr_basecase.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/sqr_basecase.asm deleted file mode 100644 index e76bb8878d81527c55928fb94d47930ee4d450e1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/mode64/sqr_basecase.asm +++ /dev/null @@ -1,863 +0,0 @@ -dnl PowerPC-64 mpn_sqr_basecase. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 1999-2001, 2003-2006, 2008, 2010, 2011 Free Software Foundation, -dnl Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 6-18 -C POWER4/PPC970 8 -C POWER5 8 -C POWER6 16.25 -C POWER7 3.77 - -C NOTES -C * This is very crude, cleanup! -C * Try to reduce the number of needed live registers. -C * Rewrite for POWER6 to use 8 consecutive muls, not 2 groups of 4. The -C cost will be more live registers. -C * Rewrite for POWER7 to use addmul_2 building blocks; this will reduce code -C size a lot and speed things up perhaps 25%. -C * Use computed goto in order to compress the code. -C * Implement a larger final corner. -C * Schedule callee-saves register saves into other insns. This could save -C about 5 cycles/call. (We cannot analogously optimise the restores, since -C the sqr_diag_addlsh1 loop has no wind-down code as currently written.) -C * Should the alternating std/adde sequences be split? Some pipelines handle -C adde poorly, and might sequentialise all these instructions. -C * The sqr_diag_addlsh1 loop was written for POWER6 and its preferences for -C adjacent integer multiply insns. Except for the multiply insns, the code -C was not carefully optimised for POWER6 or any other CPU. -C * Perform cross-jumping in sqr_diag_addlsh1's feed-in code, into the loop. - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') - -define(`rp_outer', `r25') -define(`up_outer', `r21') -define(`rp_saved', `r22') -define(`up_saved', `r23') -define(`n_saved', `r24') - -ASM_START() -PROLOGUE(mpn_sqr_basecase) - cmpdi cr0, n, 2 - bge cr0, L(ge2) - ld r5, 0(up) C n = 1 - nop - mulld r8, r5, r5 C weight 0 - mulhdu r9, r5, r5 C weight 1 - std r8, 0(rp) - std r9, 8(rp) - blr - ALIGN(16) -L(ge2): bgt cr0, L(gt2) - ld r0, 0(up) C n = 2 - nop - mulld r8, r0, r0 C u0 * u0 - mulhdu r9, r0, r0 C u0 * u0 - ld r6, 8(up) - mulld r10, r6, r6 C u1 * u1 - mulhdu r11, r6, r6 C u1 * u1 - mulld r4, r6, r0 C u1 * u0 - mulhdu r5, r6, r0 C u1 * u0 - addc r4, r4, r4 - adde r5, r5, r5 - addze r11, r11 - addc r9, r9, r4 - adde r10, r10, r5 - addze r11, r11 - std r8, 0(rp) - std r9, 8(rp) - std r10, 16(rp) - std r11, 24(rp) - blr - - ALIGN(16) -L(gt2): std r31, -8(r1) - std r30, -16(r1) - std r29, -24(r1) - std r28, -32(r1) - std r27, -40(r1) - std r26, -48(r1) - std r25, -56(r1) - std r24, -64(r1) - std r23, -72(r1) - std r22, -80(r1) - std r21, -88(r1) - - mr rp_saved, rp - mr up_saved, up - mr n_saved, n - mr rp_outer, rp - mr up_outer, up - - rldicl. r0, n, 0,62 C r0 = n & 3, set cr0 - cmpdi cr6, r0, 2 - addic r7, n, 2 C compute count... - srdi r7, r7, 2 C ...for ctr - mtctr r7 C copy count into ctr - beq- cr0, L(b0) - blt- cr6, L(b1) - beq- cr6, L(b2) - -L(b3): ld r6, 0(up) - ld r9, 8(up) - ld r27, 16(up) - addi up, up, 24 - li r12, 0 C carry limb - bdz L(em3) - - ALIGN(16) -L(tm3): mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - ld r9, 0(up) - ld r27, 8(up) - adde r0, r0, r12 - adde r7, r7, r26 - mulld r26, r9, r6 - mulhdu r10, r9, r6 - mulld r11, r27, r6 - mulhdu r12, r27, r6 - ld r9, 16(up) - ld r27, 24(up) - std r0, 8(rp) - adde r26, r26, r8 - std r7, 16(rp) - adde r11, r11, r10 - std r26, 24(rp) - addi up, up, 32 - std r11, 32(rp) - addi rp, rp, 32 - bdnz L(tm3) - -L(em3): mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - adde r0, r0, r12 - adde r7, r7, r26 - std r0, 8(rp) - std r7, 16(rp) - addze r8, r8 - std r8, 24(rp) - addi n, n, 2 - b L(outer_loop) - -L(b0): ld r6, 0(up) - ld r27, 8(up) - mulld r7, r27, r6 - mulhdu r12, r27, r6 - std r7, 8(rp) - addi rp, rp, 8 - ld r9, 16(up) - ld r27, 24(up) - addi up, up, 32 - bdz L(em0) - - ALIGN(16) -L(tm0): mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - ld r9, 0(up) - ld r27, 8(up) - adde r0, r0, r12 - adde r7, r7, r26 - mulld r26, r9, r6 - mulhdu r10, r9, r6 - mulld r11, r27, r6 - mulhdu r12, r27, r6 - ld r9, 16(up) - ld r27, 24(up) - std r0, 8(rp) - adde r26, r26, r8 - std r7, 16(rp) - adde r11, r11, r10 - std r26, 24(rp) - addi up, up, 32 - std r11, 32(rp) - addi rp, rp, 32 - bdnz L(tm0) - -L(em0): mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - adde r0, r0, r12 - adde r7, r7, r26 - std r0, 8(rp) - std r7, 16(rp) - addze r8, r8 - std r8, 24(rp) - addi n, n, 2 - b L(outer_loop_ent_2) - -L(b1): ld r6, 0(up) - ld r9, 8(up) - ld r27, 16(up) - mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r12, r27, r6 - addc r7, r7, r26 - std r0, 8(rp) - std r7, 16(rp) - addi rp, rp, 16 - ld r9, 24(up) - ld r27, 32(up) - addi up, up, 40 - bdz L(em1) - - ALIGN(16) -L(tm1): mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - ld r9, 0(up) - ld r27, 8(up) - adde r0, r0, r12 - adde r7, r7, r26 - mulld r26, r9, r6 - mulhdu r10, r9, r6 - mulld r11, r27, r6 - mulhdu r12, r27, r6 - ld r9, 16(up) - ld r27, 24(up) - std r0, 8(rp) - adde r26, r26, r8 - std r7, 16(rp) - adde r11, r11, r10 - std r26, 24(rp) - addi up, up, 32 - std r11, 32(rp) - addi rp, rp, 32 - bdnz L(tm1) - -L(em1): mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - adde r0, r0, r12 - adde r7, r7, r26 - std r0, 8(rp) - std r7, 16(rp) - addze r8, r8 - std r8, 24(rp) - addi n, n, 2 - b L(outer_loop_ent_3) - -L(b2): addi r7, r7, -1 C FIXME - mtctr r7 C FIXME - ld r6, 0(up) - ld r9, 8(up) - ld r27, 16(up) - mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - ld r9, 24(up) - mulld r11, r9, r6 - mulhdu r10, r9, r6 - addc r7, r7, r26 - adde r11, r11, r8 - addze r12, r10 - std r0, 8(rp) - std r7, 16(rp) - std r11, 24(rp) - addi rp, rp, 24 - ld r9, 32(up) - ld r27, 40(up) - addi up, up, 48 - bdz L(em2) - - ALIGN(16) -L(tm2): mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - ld r9, 0(up) - ld r27, 8(up) - adde r0, r0, r12 - adde r7, r7, r26 - mulld r26, r9, r6 - mulhdu r10, r9, r6 - mulld r11, r27, r6 - mulhdu r12, r27, r6 - ld r9, 16(up) - ld r27, 24(up) - std r0, 8(rp) - adde r26, r26, r8 - std r7, 16(rp) - adde r11, r11, r10 - std r26, 24(rp) - addi up, up, 32 - std r11, 32(rp) - addi rp, rp, 32 - bdnz L(tm2) - -L(em2): mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - adde r0, r0, r12 - adde r7, r7, r26 - std r0, 8(rp) - std r7, 16(rp) - addze r8, r8 - std r8, 24(rp) - addi n, n, 2 - b L(outer_loop_ent_0) - - -L(outer_loop): - addi n, n, -1 - addi up_outer, up_outer, 8 - addi rp_outer, rp_outer, 16 - - mr up, up_outer - addi rp, rp_outer, 8 - - srdi r0, n, 2 - mtctr r0 - - bdz L(outer_end) - - ld r6, 0(up) - ld r9, 8(up) - ld r27, 16(up) - mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - ld r9, 24(up) - ld r28, 0(rp) - ld r29, 8(rp) - ld r30, 16(rp) - mulld r11, r9, r6 - mulhdu r10, r9, r6 - addc r7, r7, r26 - adde r11, r11, r8 - addze r12, r10 - addc r0, r0, r28 - std r0, 0(rp) - adde r7, r7, r29 - std r7, 8(rp) - adde r11, r11, r30 - std r11, 16(rp) - addi rp, rp, 24 - ld r9, 32(up) - ld r27, 40(up) - addi up, up, 48 - bdz L(ea1) - - ALIGN(16) -L(ta1): mulld r0, r9, r6 - mulhdu r26, r9, r6 C 9 - mulld r7, r27, r6 - mulhdu r8, r27, r6 C 27 - ld r9, 0(up) - ld r28, 0(rp) - ld r27, 8(up) - ld r29, 8(rp) - adde r0, r0, r12 C 0 12 - adde r7, r7, r26 C 5 7 - mulld r26, r9, r6 - mulhdu r10, r9, r6 C 9 - mulld r11, r27, r6 - mulhdu r12, r27, r6 C 27 - ld r9, 16(up) - ld r30, 16(rp) - ld r27, 24(up) - ld r31, 24(rp) - adde r26, r26, r8 C 8 5 - adde r11, r11, r10 C 10 11 - addze r12, r12 C 12 - addc r0, r0, r28 C 0 28 - std r0, 0(rp) C 0 - adde r7, r7, r29 C 7 29 - std r7, 8(rp) C 7 - adde r26, r26, r30 C 5 30 - std r26, 16(rp) C 5 - adde r11, r11, r31 C 11 31 - std r11, 24(rp) C 11 - addi up, up, 32 - addi rp, rp, 32 - bdnz L(ta1) - -L(ea1): mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - ld r28, 0(rp) - ld r29, 8(rp) - adde r0, r0, r12 - adde r7, r7, r26 - addze r8, r8 - addc r0, r0, r28 - std r0, 0(rp) - adde r7, r7, r29 - std r7, 8(rp) - addze r8, r8 - std r8, 16(rp) - -L(outer_loop_ent_0): - addi n, n, -1 - addi up_outer, up_outer, 8 - addi rp_outer, rp_outer, 16 - - mr up, up_outer - addi rp, rp_outer, 8 - - srdi r0, n, 2 - mtctr r0 - - ld r6, 0(up) - ld r9, 8(up) - ld r27, 16(up) - ld r28, 0(rp) - ld r29, 8(rp) - mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - addc r0, r0, r28 - adde r7, r7, r26 - addze r12, r8 - std r0, 0(rp) - adde r7, r7, r29 - std r7, 8(rp) - addi rp, rp, 16 - ld r9, 24(up) - ld r27, 32(up) - addi up, up, 40 - bdz L(ea0) - - ALIGN(16) -L(ta0): mulld r0, r9, r6 - mulhdu r26, r9, r6 C 9 - mulld r7, r27, r6 - mulhdu r8, r27, r6 C 27 - ld r9, 0(up) - ld r28, 0(rp) - ld r27, 8(up) - ld r29, 8(rp) - adde r0, r0, r12 C 0 12 - adde r7, r7, r26 C 5 7 - mulld r26, r9, r6 - mulhdu r10, r9, r6 C 9 - mulld r11, r27, r6 - mulhdu r12, r27, r6 C 27 - ld r9, 16(up) - ld r30, 16(rp) - ld r27, 24(up) - ld r31, 24(rp) - adde r26, r26, r8 C 8 5 - adde r11, r11, r10 C 10 11 - addze r12, r12 C 12 - addc r0, r0, r28 C 0 28 - std r0, 0(rp) C 0 - adde r7, r7, r29 C 7 29 - std r7, 8(rp) C 7 - adde r26, r26, r30 C 5 30 - std r26, 16(rp) C 5 - adde r11, r11, r31 C 11 31 - std r11, 24(rp) C 11 - addi up, up, 32 - addi rp, rp, 32 - bdnz L(ta0) - -L(ea0): mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - ld r28, 0(rp) - ld r29, 8(rp) - adde r0, r0, r12 - adde r7, r7, r26 - addze r8, r8 - addc r0, r0, r28 - std r0, 0(rp) - adde r7, r7, r29 - std r7, 8(rp) - addze r8, r8 - std r8, 16(rp) - -L(outer_loop_ent_3): - addi n, n, -1 - addi up_outer, up_outer, 8 - addi rp_outer, rp_outer, 16 - - mr up, up_outer - addi rp, rp_outer, 8 - - srdi r0, n, 2 - mtctr r0 - - ld r6, 0(up) - ld r9, 8(up) - ld r28, 0(rp) - mulld r0, r9, r6 - mulhdu r12, r9, r6 - addc r0, r0, r28 - std r0, 0(rp) - addi rp, rp, 8 - ld r9, 16(up) - ld r27, 24(up) - addi up, up, 32 - bdz L(ea3) - - ALIGN(16) -L(ta3): mulld r0, r9, r6 - mulhdu r26, r9, r6 C 9 - mulld r7, r27, r6 - mulhdu r8, r27, r6 C 27 - ld r9, 0(up) - ld r28, 0(rp) - ld r27, 8(up) - ld r29, 8(rp) - adde r0, r0, r12 C 0 12 - adde r7, r7, r26 C 5 7 - mulld r26, r9, r6 - mulhdu r10, r9, r6 C 9 - mulld r11, r27, r6 - mulhdu r12, r27, r6 C 27 - ld r9, 16(up) - ld r30, 16(rp) - ld r27, 24(up) - ld r31, 24(rp) - adde r26, r26, r8 C 8 5 - adde r11, r11, r10 C 10 11 - addze r12, r12 C 12 - addc r0, r0, r28 C 0 28 - std r0, 0(rp) C 0 - adde r7, r7, r29 C 7 29 - std r7, 8(rp) C 7 - adde r26, r26, r30 C 5 30 - std r26, 16(rp) C 5 - adde r11, r11, r31 C 11 31 - std r11, 24(rp) C 11 - addi up, up, 32 - addi rp, rp, 32 - bdnz L(ta3) - -L(ea3): mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - ld r28, 0(rp) - ld r29, 8(rp) - adde r0, r0, r12 - adde r7, r7, r26 - addze r8, r8 - addc r0, r0, r28 - std r0, 0(rp) - adde r7, r7, r29 - std r7, 8(rp) - addze r8, r8 - std r8, 16(rp) - - -L(outer_loop_ent_2): - addi n, n, -1 - addi up_outer, up_outer, 8 - addi rp_outer, rp_outer, 16 - - mr up, up_outer - addi rp, rp_outer, 8 - - srdi r0, n, 2 - mtctr r0 - - addic r0, r0, 0 - li r12, 0 C cy_limb = 0 - ld r6, 0(up) - ld r9, 8(up) - ld r27, 16(up) - bdz L(ea2) - addi up, up, 24 - - ALIGN(16) -L(ta2): mulld r0, r9, r6 - mulhdu r26, r9, r6 C 9 - mulld r7, r27, r6 - mulhdu r8, r27, r6 C 27 - ld r9, 0(up) - ld r28, 0(rp) - ld r27, 8(up) - ld r29, 8(rp) - adde r0, r0, r12 C 0 12 - adde r7, r7, r26 C 5 7 - mulld r26, r9, r6 - mulhdu r10, r9, r6 C 9 - mulld r11, r27, r6 - mulhdu r12, r27, r6 C 27 - ld r9, 16(up) - ld r30, 16(rp) - ld r27, 24(up) - ld r31, 24(rp) - adde r26, r26, r8 C 8 5 - adde r11, r11, r10 C 10 11 - addze r12, r12 C 12 - addc r0, r0, r28 C 0 28 - std r0, 0(rp) C 0 - adde r7, r7, r29 C 7 29 - std r7, 8(rp) C 7 - adde r26, r26, r30 C 5 30 - std r26, 16(rp) C 5 - adde r11, r11, r31 C 11 31 - std r11, 24(rp) C 11 - addi up, up, 32 - addi rp, rp, 32 - bdnz L(ta2) - -L(ea2): mulld r0, r9, r6 - mulhdu r26, r9, r6 - mulld r7, r27, r6 - mulhdu r8, r27, r6 - ld r28, 0(rp) - ld r29, 8(rp) - adde r0, r0, r12 - adde r7, r7, r26 - addze r8, r8 - addc r0, r0, r28 - std r0, 0(rp) - adde r7, r7, r29 - std r7, 8(rp) - addze r8, r8 - std r8, 16(rp) - - b L(outer_loop) - -L(outer_end): - ld r6, 0(up) - ld r9, 8(up) - ld r11, 0(rp) - mulld r0, r9, r6 - mulhdu r8, r9, r6 - addc r0, r0, r11 - std r0, 0(rp) - addze r8, r8 - std r8, 8(rp) - -define(`rp', `rp_saved') -define(`up', `r5') -define(`n', `r6') -define(`climb', `r0') - - addi r4, rp_saved, 8 - mr r5, up_saved - mr r6, n_saved - - rldicl. r0, n, 0,62 C r0 = n & 3, set cr0 - cmpdi cr6, r0, 2 - addi n, n, 2 C compute count... - srdi n, n, 2 C ...for ctr - mtctr n C put loop count into ctr - beq cr0, L(xb0) - blt cr6, L(xb1) - beq cr6, L(xb2) - -L(xb3): ld r6, 0(up) - ld r7, 8(up) - ld r12, 16(up) - addi up, up, 24 - mulld r24, r6, r6 - mulhdu r25, r6, r6 - mulld r26, r7, r7 - mulhdu r27, r7, r7 - mulld r28, r12, r12 - mulhdu r29, r12, r12 - ld r10, 8(rp) - ld r11, 16(rp) - ld r6, 24(rp) - ld r7, 32(rp) - addc r10, r10, r10 - adde r11, r11, r11 - adde r6, r6, r6 - adde r7, r7, r7 - addze climb, r29 - addc r10, r10, r25 - adde r11, r11, r26 - adde r6, r6, r27 - adde r7, r7, r28 - std r24, 0(rp) - std r10, 8(rp) - std r11, 16(rp) - std r6, 24(rp) - std r7, 32(rp) - addi rp, rp, 40 - bdnz L(top) - b L(end) - -L(xb2): ld r6, 0(up) - ld r7, 8(up) - addi up, up, 16 - mulld r24, r6, r6 - mulhdu r25, r6, r6 - mulld r26, r7, r7 - mulhdu r27, r7, r7 - ld r10, 8(rp) - ld r11, 16(rp) - addc r10, r10, r10 - adde r11, r11, r11 - addze climb, r27 - addc r10, r10, r25 - adde r11, r11, r26 - std r24, 0(rp) - std r10, 8(rp) - std r11, 16(rp) - addi rp, rp, 24 - bdnz L(top) - b L(end) - -L(xb0): ld r6, 0(up) - ld r7, 8(up) - ld r12, 16(up) - ld r23, 24(up) - addi up, up, 32 - mulld r24, r6, r6 - mulhdu r25, r6, r6 - mulld r26, r7, r7 - mulhdu r27, r7, r7 - mulld r28, r12, r12 - mulhdu r29, r12, r12 - mulld r30, r23, r23 - mulhdu r31, r23, r23 - ld r10, 8(rp) - ld r11, 16(rp) - ld r6, 24(rp) - ld r7, 32(rp) - ld r12, 40(rp) - ld r23, 48(rp) - addc r10, r10, r10 - adde r11, r11, r11 - adde r6, r6, r6 - adde r7, r7, r7 - adde r12, r12, r12 - adde r23, r23, r23 - addze climb, r31 - std r24, 0(rp) - addc r10, r10, r25 - std r10, 8(rp) - adde r11, r11, r26 - std r11, 16(rp) - adde r6, r6, r27 - std r6, 24(rp) - adde r7, r7, r28 - std r7, 32(rp) - adde r12, r12, r29 - std r12, 40(rp) - adde r23, r23, r30 - std r23, 48(rp) - addi rp, rp, 56 - bdnz L(top) - b L(end) - -L(xb1): ld r6, 0(up) - addi up, up, 8 - mulld r24, r6, r6 - mulhdu climb, r6, r6 - std r24, 0(rp) - addic rp, rp, 8 C clear carry as side-effect - - ALIGN(32) -L(top): ld r6, 0(up) - ld r7, 8(up) - ld r12, 16(up) - ld r23, 24(up) - addi up, up, 32 - mulld r24, r6, r6 - mulhdu r25, r6, r6 - mulld r26, r7, r7 - mulhdu r27, r7, r7 - mulld r28, r12, r12 - mulhdu r29, r12, r12 - mulld r30, r23, r23 - mulhdu r31, r23, r23 - ld r8, 0(rp) - ld r9, 8(rp) - adde r8, r8, r8 - adde r9, r9, r9 - ld r10, 16(rp) - ld r11, 24(rp) - adde r10, r10, r10 - adde r11, r11, r11 - ld r6, 32(rp) - ld r7, 40(rp) - adde r6, r6, r6 - adde r7, r7, r7 - ld r12, 48(rp) - ld r23, 56(rp) - adde r12, r12, r12 - adde r23, r23, r23 - addze r31, r31 - addc r8, r8, climb - std r8, 0(rp) - adde r9, r9, r24 - std r9, 8(rp) - adde r10, r10, r25 - std r10, 16(rp) - adde r11, r11, r26 - std r11, 24(rp) - adde r6, r6, r27 - std r6, 32(rp) - adde r7, r7, r28 - std r7, 40(rp) - adde r12, r12, r29 - std r12, 48(rp) - adde r23, r23, r30 - std r23, 56(rp) - mr climb, r31 - addi rp, rp, 64 - bdnz L(top) - -L(end): addze climb, climb - std climb, 0(rp) - - ld r31, -8(r1) - ld r30, -16(r1) - ld r29, -24(r1) - ld r28, -32(r1) - ld r27, -40(r1) - ld r26, -48(r1) - ld r25, -56(r1) - ld r24, -64(r1) - ld r23, -72(r1) - ld r22, -80(r1) - ld r21, -88(r1) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p6/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p6/lshift.asm deleted file mode 100644 index 1a200fb3463669b5875fa06aebd12b68248911cc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p6/lshift.asm +++ /dev/null @@ -1,132 +0,0 @@ -dnl PowerPC-64 mpn_lshift -- rp[] = up[] << cnt - -dnl Copyright 2003, 2005, 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 ? -C POWER5 2.25 -C POWER6 4 - -C TODO -C * Micro-optimise header code -C * Perhaps do 4-way unrolling, for 2.5 c/l on POWER6. The code is 4236 -C bytes, 4-way code would become about 50% larger. - -C INPUT PARAMETERS -define(`rp_param', `r3') -define(`up', `r4') -define(`n', `r5') -define(`cnt', `r6') - -define(`tnc',`r0') -define(`retval',`r3') -define(`rp', `r7') - -ASM_START() -PROLOGUE(mpn_lshift,toc) - -ifdef(`HAVE_ABI_mode32',` - rldicl n, n, 0,32 C FIXME: avoid this zero extend -') - mflr r12 - sldi r8, n, 3 - sldi r10, cnt, 6 C multiply cnt by size of a SHIFT block - LEAL( r11, L(e1)) C address of L(e1) label in SHIFT(1) - add up, up, r8 C make up point at end of up[] - add r11, r11, r10 C address of L(oN) for N = cnt - srdi r10, n, 1 - add rp, rp_param, r8 C make rp point at end of rp[] - subfic tnc, cnt, 64 - rlwinm. r8, n, 0,31,31 C extract bit 0 - mtctr r10 - beq L(evn) - -L(odd): ld r9, -8(up) - cmpdi cr0, n, 1 C n = 1? - beq L(1) - ld r8, -16(up) - addi r11, r11, -84 C L(o1) - L(e1) - 64 - mtlr r11 - srd r3, r9, tnc C retval - addi up, up, 8 - addi rp, rp, -8 - blr C branch to L(oN) - -L(evn): ld r8, -8(up) - ld r9, -16(up) - addi r11, r11, -64 - mtlr r11 - srd r3, r8, tnc C retval - blr C branch to L(eN) - -L(1): srd r3, r9, tnc C retval - sld r8, r9, cnt - std r8, -8(rp) - mtlr r12 -ifdef(`HAVE_ABI_mode32', -` mr r4, r3 - srdi r3, r3, 32 -') - blr - - -define(SHIFT,` -L(lo$1):ld r8, -24(up) - std r11, -8(rp) - addi rp, rp, -16 -L(o$1): srdi r10, r8, eval(64-$1) - rldimi r10, r9, $1, 0 - ld r9, -32(up) - addi up, up, -16 - std r10, 0(rp) -L(e$1): srdi r11, r9, eval(64-$1) - rldimi r11, r8, $1, 0 - bdnz L(lo$1) - std r11, -8(rp) - sldi r10, r9, $1 - b L(com) - nop - nop -') - - ALIGN(64) -forloop(`i',1,63,`SHIFT(i)') - -L(com): std r10, -16(rp) - mtlr r12 -ifdef(`HAVE_ABI_mode32', -` mr r4, r3 - srdi r3, r3, 32 -') - blr -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p6/lshiftc.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p6/lshiftc.asm deleted file mode 100644 index e4b3caaab8a5d78c659380541233daf9b792c92a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p6/lshiftc.asm +++ /dev/null @@ -1,136 +0,0 @@ -dnl PowerPC-64 mpn_lshiftc -- rp[] = ~up[] << cnt - -dnl Copyright 2003, 2005, 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 ? -C POWER5 2.25 -C POWER6 4 - -C TODO -C * Micro-optimise header code -C * Perhaps do 4-way unrolling, for 2.5 c/l on POWER6. The code is 4236 -C bytes, 4-way code would become about 50% larger. - -C INPUT PARAMETERS -define(`rp_param', `r3') -define(`up', `r4') -define(`n', `r5') -define(`cnt', `r6') - -define(`tnc',`r0') -define(`retval',`r3') -define(`rp', `r7') - -ASM_START() -PROLOGUE(mpn_lshiftc,toc) - -ifdef(`HAVE_ABI_mode32',` - rldicl n, n, 0,32 C FIXME: avoid this zero extend -') - mflr r12 - sldi r8, n, 3 - sldi r10, cnt, 6 C multiply cnt by size of a SHIFT block - LEAL( r11, L(e1)) C address of L(e1) label in SHIFT(1) - add up, up, r8 C make up point at end of up[] - add r11, r11, r10 C address of L(oN) for N = cnt - srdi r10, n, 1 - add rp, rp_param, r8 C make rp point at end of rp[] - subfic tnc, cnt, 64 - rlwinm. r8, n, 0,31,31 C extract bit 0 - mtctr r10 - beq L(evn) - -L(odd): ld r9, -8(up) - cmpdi cr0, n, 1 C n = 1? - beq L(1) - ld r8, -16(up) - addi r11, r11, -88 C L(o1) - L(e1) - 64 - mtlr r11 - srd r3, r9, tnc C retval - addi up, up, 8 - addi rp, rp, -8 - blr C branch to L(oN) - -L(evn): ld r8, -8(up) - ld r9, -16(up) - addi r11, r11, -64 - mtlr r11 - srd r3, r8, tnc C retval - blr C branch to L(eN) - -L(1): srd r3, r9, tnc C retval - sld r8, r9, cnt - nor r8, r8, r8 - std r8, -8(rp) - mtlr r12 -ifdef(`HAVE_ABI_mode32', -` mr r4, r3 - srdi r3, r3, 32 -') - blr - - -define(SHIFT,` -L(lo$1):ld r8, -24(up) - nor r11, r11, r11 - std r11, -8(rp) - addi rp, rp, -16 -L(o$1): srdi r10, r8, eval(64-$1) - rldimi r10, r9, $1, 0 - ld r9, -32(up) - addi up, up, -16 - nor r10, r10, r10 - std r10, 0(rp) -L(e$1): srdi r11, r9, eval(64-$1) - rldimi r11, r8, $1, 0 - bdnz L(lo$1) - sldi r10, r9, $1 - b L(com) - nop -') - - ALIGN(64) -forloop(`i',1,63,`SHIFT(i)') - -L(com): nor r11, r11, r11 - nor r10, r10, r10 - std r11, -8(rp) - std r10, -16(rp) - mtlr r12 -ifdef(`HAVE_ABI_mode32', -` mr r4, r3 - srdi r3, r3, 32 -') - blr -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p6/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p6/rshift.asm deleted file mode 100644 index 9e848c1fc78ca56b4b3a02a762470c89b1f8c97f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p6/rshift.asm +++ /dev/null @@ -1,131 +0,0 @@ -dnl PowerPC-64 mpn_rshift -- rp[] = up[] << cnt - -dnl Copyright 2003, 2005, 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 ? -C POWER5 2 -C POWER6 3.5 (mysteriously 3.0 for cnt=1) - -C TODO -C * Micro-optimise header code -C * Perhaps do 4-way unrolling, for 2.5 c/l on POWER6. The code is 4248 -C bytes, 4-way code would become about 50% larger. - -C INPUT PARAMETERS -define(`rp_param', `r3') -define(`up', `r4') -define(`n', `r5') -define(`cnt', `r6') - -define(`tnc',`r0') -define(`retval',`r3') -define(`rp', `r7') - -ASM_START() -PROLOGUE(mpn_rshift,toc) - -ifdef(`HAVE_ABI_mode32',` - rldicl n, n, 0,32 C FIXME: avoid this zero extend -') - mflr r12 - LEAL( r11, L(e1)) C address of L(e1) label in SHIFT(1) - sldi r10, cnt, 6 C multiply cnt by size of a SHIFT block - add r11, r11, r10 C address of L(oN) for N = cnt - srdi r10, n, 1 - mr rp, rp_param - subfic tnc, cnt, 64 - rlwinm. r8, n, 0,31,31 C extract bit 0 - mtctr r10 - beq L(evn) - -L(odd): ld r9, 0(up) - cmpdi cr0, n, 1 C n = 1? - beq L(1) - ld r8, 8(up) - addi r11, r11, -84 C L(o1) - L(e1) - 64 - mtlr r11 - sld r3, r9, tnc C retval - addi up, up, 8 - addi rp, rp, 8 - blr C branch to L(oN) - -L(evn): ld r8, 0(up) - ld r9, 8(up) - addi r11, r11, -64 - mtlr r11 - sld r3, r8, tnc C retval - addi up, up, 16 - blr C branch to L(eN) - -L(1): sld r3, r9, tnc C retval - srd r8, r9, cnt - std r8, 0(rp) - mtlr r12 -ifdef(`HAVE_ABI_mode32', -` mr r4, r3 - srdi r3, r3, 32 -') - blr - - -define(SHIFT,` -L(lo$1):ld r8, 0(up) - std r11, 0(rp) - addi rp, rp, 16 -L(o$1): srdi r10, r9, $1 - rldimi r10, r8, eval(64-$1), 0 - ld r9, 8(up) - addi up, up, 16 - std r10, -8(rp) -L(e$1): srdi r11, r8, $1 - rldimi r11, r9, eval(64-$1), 0 - bdnz L(lo$1) - std r11, 0(rp) - srdi r10, r9, $1 - b L(com) - nop - nop -') - - ALIGN(64) -forloop(`i',1,63,`SHIFT(i)') - -L(com): std r10, 8(rp) - mtlr r12 -ifdef(`HAVE_ABI_mode32', -` mr r4, r3 - srdi r3, r3, 32 -') - blr -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p7/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p7/copyd.asm deleted file mode 100644 index f04ca586e886778c5b2a968080a3c23ce1dedb85..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p7/copyd.asm +++ /dev/null @@ -1,128 +0,0 @@ -dnl PowerPC-64 mpn_copyd. - -dnl Copyright 2004, 2005, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 ? -C POWER5 ? -C POWER6 1.25 -C POWER7 1.09 - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') - -ASM_START() -PROLOGUE(mpn_copyd) - -ifdef(`HAVE_ABI_mode32', -` rldicl n, n, 0,32') - - sldi r0, n, 3 - add up, up, r0 C point at u[] end - add rp, rp, r0 C point at r[] end - - cmpdi cr0, n, 4 - blt L(sml) - - addi r10, n, 4 - srdi r10, r10, 3 - mtctr r10 - - andi. r0, n, 1 - rlwinm r11, n, 0,30,30 - rlwinm r12, n, 0,29,29 - cmpdi cr6, r11, 0 - cmpdi cr7, r12, 0 - - beq cr0, L(xx0) -L(xx1): ld r6, -8(up) - addi up, up, -8 - std r6, -8(rp) - addi rp, rp, -8 - -L(xx0): bne cr6, L(x10) -L(x00): ld r6, -8(up) - ld r7, -16(up) - bne cr7, L(100) -L(000): addi rp, rp, 32 - b L(lo0) -L(100): addi up, up, 32 - b L(lo4) -L(x10): ld r8, -8(up) - ld r9, -16(up) - bne cr7, L(110) -L(010): addi up, up, -16 - addi rp, rp, 16 - b L(lo2) -L(110): addi up, up, 16 - addi rp, rp, 48 - b L(lo6) - -L(sml): cmpdi cr0, n, 0 - beqlr- cr0 - mtctr n -L(t): ld r6, -8(up) - addi up, up, -8 - std r6, -8(rp) - addi rp, rp, -8 - bdnz L(t) - blr - - ALIGN(32) -L(top): std r6, -8(rp) - std r7, -16(rp) -L(lo2): ld r6, -8(up) - ld r7, -16(up) - std r8, -24(rp) - std r9, -32(rp) -L(lo0): ld r8, -24(up) - ld r9, -32(up) - std r6, -40(rp) - std r7, -48(rp) -L(lo6): ld r6, -40(up) - ld r7, -48(up) - std r8, -56(rp) - std r9, -64(rp) - addi rp, rp, -64 -L(lo4): ld r8, -56(up) - ld r9, -64(up) - addi up, up, -64 - bdnz L(top) - -L(end): std r6, -8(rp) - std r7, -16(rp) - std r8, -24(rp) - std r9, -32(rp) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p7/copyi.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p7/copyi.asm deleted file mode 100644 index 854cf9f8090f39671d27a236719d9142f3caa301..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p7/copyi.asm +++ /dev/null @@ -1,129 +0,0 @@ -dnl PowerPC-64 mpn_copyi. - -dnl Copyright 2004, 2005, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 ? -C POWER5 ? -C POWER6 1.25 -C POWER7 1.09 - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') - -C TODO -C * Try rolling the two loop leading std to the end, allowing the code to -C handle also n = 2. -C * Consider using 4 pointers, schedule ptr update early wrt use. - -ASM_START() -PROLOGUE(mpn_copyi) - -ifdef(`HAVE_ABI_mode32', -` rldicl n, n, 0,32') - - cmpdi cr0, n, 4 - blt L(sml) - - addi r10, n, 4 - srdi r10, r10, 3 - mtctr r10 - - andi. r0, n, 1 - rlwinm r11, n, 0,30,30 - rlwinm r12, n, 0,29,29 - cmpdi cr6, r11, 0 - cmpdi cr7, r12, 0 - - beq cr0, L(xx0) -L(xx1): ld r6, 0(up) - addi up, up, 8 - std r6, 0(rp) - addi rp, rp, 8 - -L(xx0): bne cr6, L(x10) -L(x00): ld r6, 0(up) - ld r7, 8(up) - bne cr7, L(100) -L(000): addi rp, rp, -32 - b L(lo0) -L(100): addi up, up, -32 - b L(lo4) -L(x10): ld r8, 0(up) - ld r9, 8(up) - bne cr7, L(110) -L(010): addi up, up, 16 - addi rp, rp, -16 - b L(lo2) -L(110): addi up, up, -16 - addi rp, rp, -48 - b L(lo6) - -L(sml): cmpdi cr0, n, 0 - beqlr- cr0 - mtctr n -L(t): ld r6, 0(up) - addi up, up, 8 - std r6, 0(rp) - addi rp, rp, 8 - bdnz L(t) - blr - - ALIGN(32) -L(top): std r6, 0(rp) - std r7, 8(rp) -L(lo2): ld r6, 0(up) - ld r7, 8(up) - std r8, 16(rp) - std r9, 24(rp) -L(lo0): ld r8, 16(up) - ld r9, 24(up) - std r6, 32(rp) - std r7, 40(rp) -L(lo6): ld r6, 32(up) - ld r7, 40(up) - std r8, 48(rp) - std r9, 56(rp) - addi rp, rp, 64 -L(lo4): ld r8, 48(up) - ld r9, 56(up) - addi up, up, 64 - bdnz L(top) - -L(end): std r6, 0(rp) - std r7, 8(rp) - std r8, 16(rp) - std r9, 24(rp) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p7/hamdist.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p7/hamdist.asm deleted file mode 100644 index 5af98946f7534651f402ff323622a454e0f18783..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p7/hamdist.asm +++ /dev/null @@ -1,110 +0,0 @@ -dnl PowerPC-64 mpn_hamdist. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 - -C POWER4/PPC970 - -C POWER5 - -C POWER6 - -C POWER7 2.87 - -define(`up', r3) -define(`vp', r4) -define(`n', r5) - -ASM_START() -PROLOGUE(mpn_hamdist) - std r30, -16(r1) - std r31, -8(r1) - - addi r0, n, 1 -ifdef(`HAVE_ABI_mode32', -` rldicl r0, r0, 63,33', C ...branch count -` srdi r0, r0, 1') C ...for ctr - mtctr r0 - - andi. r0, n, 1 - - li r0, 0 - li r12, 0 - - beq L(evn) - -L(odd): ld r6, 0(up) - addi up, up, 8 - ld r8, 0(vp) - addi vp, vp, 8 - xor r10, r6, r8 - popcntd r0, r10 - bdz L(e1) - -L(evn): ld r6, 0(up) - ld r8, 0(vp) - ld r7, 8(up) - ld r9, 8(vp) - xor r10, r6, r8 - addi up, up, 16 - addi vp, vp, 16 - li r30, 0 - li r31, 0 - bdz L(end) - - nop - nop -C ALIGN(16) -L(top): add r0, r0, r30 - ld r6, 0(up) - ld r8, 0(vp) - xor r11, r7, r9 - popcntd r30, r10 - add r12, r12, r31 - ld r7, 8(up) - ld r9, 8(vp) - xor r10, r6, r8 - popcntd r31, r11 - addi up, up, 16 - addi vp, vp, 16 - bdnz L(top) - -L(end): add r0, r0, r30 - xor r11, r7, r9 - popcntd r30, r10 - add r12, r12, r31 - popcntd r31, r11 - - add r0, r0, r30 - add r12, r12, r31 -L(e1): add r3, r0, r12 - ld r30, -16(r1) - ld r31, -8(r1) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p7/popcount.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p7/popcount.asm deleted file mode 100644 index eac72a64935797c8141047476e832f91097278b6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/p7/popcount.asm +++ /dev/null @@ -1,90 +0,0 @@ -dnl PowerPC-64 mpn_popcount. - -dnl Copyright 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 - -C POWER4/PPC970 - -C POWER5 - -C POWER6 - -C POWER7 2 - -define(`up', r3) -define(`n', r4) - -ASM_START() -PROLOGUE(mpn_popcount) - addi r0, n, 1 -ifdef(`HAVE_ABI_mode32', -` rldicl r0, r0, 63,33', C ...branch count -` srdi r0, r0, 1') C ...for ctr - mtctr r0 - - andi. r0, n, 1 - - li r0, 0 - li r12, 0 - beq L(evn) - -L(odd): ld r4, 0(up) - addi up, up, 8 - popcntd r0, r4 - bdz L(e1) - -L(evn): ld r4, 0(up) - ld r5, 8(up) - popcntd r8, r4 - popcntd r9, r5 - bdz L(e2) - - ld r4, 16(up) - ld r5, 24(up) - bdz L(e4) - addi up, up, 32 - -L(top): add r0, r0, r8 - popcntd r8, r4 - ld r4, 0(up) - add r12, r12, r9 - popcntd r9, r5 - ld r5, 8(up) - addi up, up, 16 - bdnz L(top) - -L(e4): add r0, r0, r8 - popcntd r8, r4 - add r12, r12, r9 - popcntd r9, r5 -L(e2): add r0, r0, r8 - add r12, r12, r9 -L(e1): add r3, r0, r12 - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/rshift.asm deleted file mode 100644 index 7654a16ae8c8d9a691cc1ba9ae18fcf9564810a0..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/rshift.asm +++ /dev/null @@ -1,207 +0,0 @@ -dnl PowerPC-64 mpn_rshift -- rp[] = up[] >> cnt - -dnl Copyright 2003, 2005, 2010, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 ? -C POWER4/PPC970 ? -C POWER5 2.25 -C POWER6 9.75 -C POWER7 2.15 - -C TODO -C * Try to reduce the number of needed live registers -C * Micro-optimise header code -C * Keep in synch with lshift.asm and lshiftc.asm - -C INPUT PARAMETERS -define(`rp', `r3') -define(`up', `r4') -define(`n', `r5') -define(`cnt', `r6') - -define(`tnc',`r0') -define(`u0',`r30') -define(`u1',`r31') -define(`retval',`r5') - -ASM_START() -PROLOGUE(mpn_rshift) - std r31, -8(r1) - std r30, -16(r1) - subfic tnc, cnt, 64 -C sldi r30, n, 3 C byte count corresponding to n -C add rp, rp, r30 C rp = rp + n -C add up, up, r30 C up = up + n - rldicl. r30, n, 0,62 C r30 = n & 3, set cr0 - cmpdi cr6, r30, 2 - addi r31, n, 3 C compute count... - ld r10, 0(up) C load 1st limb for b00...b11 - sld retval, r10, tnc -ifdef(`HAVE_ABI_mode32', -` rldicl r31, r31, 62,34', C ...branch count -` srdi r31, r31, 2') C ...for ctr - mtctr r31 C copy count into ctr - beq cr0, L(b00) - blt cr6, L(b01) - ld r11, 8(up) C load 2nd limb for b10 and b11 - beq cr6, L(b10) - - ALIGN(16) -L(b11): srd r8, r10, cnt - sld r9, r11, tnc - ld u1, 16(up) - addi up, up, 24 - srd r12, r11, cnt - sld r7, u1, tnc - addi rp, rp, -16 - bdnz L(gt3) - - or r11, r8, r9 - srd r8, u1, cnt - b L(cj3) - - ALIGN(16) -L(gt3): ld u0, 0(up) - or r11, r8, r9 - srd r8, u1, cnt - sld r9, u0, tnc - ld u1, 8(up) - or r10, r12, r7 - b L(L11) - - ALIGN(32) -L(b10): srd r12, r10, cnt - addi rp, rp, -24 - sld r7, r11, tnc - bdnz L(gt2) - - srd r8, r11, cnt - or r10, r12, r7 - b L(cj2) - -L(gt2): ld u0, 16(up) - srd r8, r11, cnt - sld r9, u0, tnc - ld u1, 24(up) - or r10, r12, r7 - srd r12, u0, cnt - sld r7, u1, tnc - ld u0, 32(up) - or r11, r8, r9 - addi up, up, 16 - b L(L10) - - ALIGN(16) -L(b00): ld u1, 8(up) - srd r12, r10, cnt - sld r7, u1, tnc - ld u0, 16(up) - srd r8, u1, cnt - sld r9, u0, tnc - ld u1, 24(up) - or r10, r12, r7 - srd r12, u0, cnt - sld r7, u1, tnc - addi rp, rp, -8 - bdz L(cj4) - -L(gt4): addi up, up, 32 - ld u0, 0(up) - or r11, r8, r9 - b L(L00) - - ALIGN(16) -L(b01): bdnz L(gt1) - srd r8, r10, cnt - std r8, 0(rp) - b L(ret) - -L(gt1): ld u0, 8(up) - srd r8, r10, cnt - sld r9, u0, tnc - ld u1, 16(up) - srd r12, u0, cnt - sld r7, u1, tnc - ld u0, 24(up) - or r11, r8, r9 - srd r8, u1, cnt - sld r9, u0, tnc - ld u1, 32(up) - addi up, up, 40 - or r10, r12, r7 - bdz L(end) - - ALIGN(32) -L(top): srd r12, u0, cnt - sld r7, u1, tnc - ld u0, 0(up) - std r11, 0(rp) - or r11, r8, r9 -L(L00): srd r8, u1, cnt - sld r9, u0, tnc - ld u1, 8(up) - std r10, 8(rp) - or r10, r12, r7 -L(L11): srd r12, u0, cnt - sld r7, u1, tnc - ld u0, 16(up) - std r11, 16(rp) - or r11, r8, r9 -L(L10): srd r8, u1, cnt - sld r9, u0, tnc - ld u1, 24(up) - addi up, up, 32 - std r10, 24(rp) - addi rp, rp, 32 - or r10, r12, r7 - bdnz L(top) - - ALIGN(32) -L(end): srd r12, u0, cnt - sld r7, u1, tnc - std r11, 0(rp) -L(cj4): or r11, r8, r9 - srd r8, u1, cnt - std r10, 8(rp) -L(cj3): or r10, r12, r7 - std r11, 16(rp) -L(cj2): std r10, 24(rp) - std r8, 32(rp) - -L(ret): ld r31, -8(r1) - ld r30, -16(r1) -ifdef(`HAVE_ABI_mode32', -` srdi r3, retval, 32 - mr r4, retval -',` mr r3, retval') - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/sec_tabselect.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/sec_tabselect.asm deleted file mode 100644 index 085577ca9be0213f6ce552a308d97390f90091ca..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/sec_tabselect.asm +++ /dev/null @@ -1,147 +0,0 @@ -dnl PowerPC-64 mpn_sec_tabselect. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2011-2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C POWER3/PPC630 1.75 -C POWER4/PPC970 2.0 -C POWER5 ? -C POWER6 5.0 -C POWER7 1.75 - -define(`rp', `r3') -define(`tp', `r4') -define(`n', `r5') -define(`nents', `r6') -define(`which', `r7') - -define(`i', `r8') -define(`j', `r9') -define(`stride', `r12') -define(`mask', `r11') - - -ASM_START() -PROLOGUE(mpn_sec_tabselect) - addic. j, n, -4 C outer loop induction variable - std r31, -8(r1) - std r30, -16(r1) - std r29, -24(r1) - std r28, -32(r1) - std r27, -40(r1) - sldi stride, n, 3 - - blt cr0, L(outer_end) -L(outer_top): - mtctr nents - mr r10, tp - li r28, 0 - li r29, 0 - li r30, 0 - li r31, 0 - addic. j, j, -4 C outer loop induction variable - mr i, which - - ALIGN(16) -L(top): addic i, i, -1 C set carry iff i != 0 - subfe mask, mask, mask - ld r0, 0(tp) - ld r27, 8(tp) - and r0, r0, mask - and r27, r27, mask - or r28, r28, r0 - or r29, r29, r27 - ld r0, 16(tp) - ld r27, 24(tp) - and r0, r0, mask - and r27, r27, mask - or r30, r30, r0 - or r31, r31, r27 - add tp, tp, stride - bdnz L(top) - - std r28, 0(rp) - std r29, 8(rp) - std r30, 16(rp) - std r31, 24(rp) - addi tp, r10, 32 - addi rp, rp, 32 - bge cr0, L(outer_top) -L(outer_end): - - rldicl. r0, n, 63, 63 - beq cr0, L(b0x) -L(b1x): mtctr nents - mr r10, tp - li r28, 0 - li r29, 0 - mr i, which - ALIGN(16) -L(tp2): addic i, i, -1 - subfe mask, mask, mask - ld r0, 0(tp) - ld r27, 8(tp) - and r0, r0, mask - and r27, r27, mask - or r28, r28, r0 - or r29, r29, r27 - add tp, tp, stride - bdnz L(tp2) - std r28, 0(rp) - std r29, 8(rp) - addi tp, r10, 16 - addi rp, rp, 16 - -L(b0x): rldicl. r0, n, 0, 63 - beq cr0, L(b00) -L(b01): mtctr nents - mr r10, tp - li r28, 0 - mr i, which - ALIGN(16) -L(tp1): addic i, i, -1 - subfe mask, mask, mask - ld r0, 0(tp) - and r0, r0, mask - or r28, r28, r0 - add tp, tp, stride - bdnz L(tp1) - std r28, 0(rp) - -L(b00): ld r31, -8(r1) - ld r30, -16(r1) - ld r29, -24(r1) - ld r28, -32(r1) - ld r27, -40(r1) - blr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/umul.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/umul.asm deleted file mode 100644 index 7fcc72f18f562b9dee899094f5edb908a0f04927..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/umul.asm +++ /dev/null @@ -1,53 +0,0 @@ -dnl PowerPC-64 umul_ppmm -- support for longlong.h - -dnl Copyright 2000, 2001, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C mp_limb_t mpn_umul_ppmm (mp_limb_t *lowptr, mp_limb_t m1, mp_limb_t m2); -C - -ASM_START() -PROLOGUE(mpn_umul_ppmm) - - C r3 lowptr - C r4 m1 - C r5 m2 - - mulld r0, r4, r5 - mulhdu r4, r4, r5 - std r0, 0(r3) -ifdef(`HAVE_ABI_mode32', -` srdi r3, r4, 32 -',` mr r3, r4 -') - blr - -EPILOGUE(mpn_umul_ppmm) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/vmx/popcount.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/vmx/popcount.asm deleted file mode 100644 index b95fb88b1ae0cd38ca6f0d1e6d3f6f41d23da9d4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/powerpc64/vmx/popcount.asm +++ /dev/null @@ -1,230 +0,0 @@ -dnl PowerPC-32/VMX and PowerPC-64/VMX mpn_popcount. - -dnl Copyright 2006, 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C 7400,7410 (G4): ? -C 744x,745x (G4+): 1.125 -C 970 (G5): 2.25 - -C TODO -C * Rewrite the awkward huge n outer loop code. -C * Two lvx, two vperm, and two vxor could make us a similar hamdist. -C * Compress cnsts table in 64-bit mode, only half the values are needed. - -define(`GMP_LIMB_BYTES', eval(GMP_LIMB_BITS/8)) -define(`LIMBS_PER_VR', eval(16/GMP_LIMB_BYTES)) -define(`LIMBS_PER_2VR', eval(32/GMP_LIMB_BYTES)) - -define(`OPERATION_popcount') - -define(`ap', `r3') -define(`n', `r4') - -define(`rtab', `v10') -define(`cnt4', `v11') - -ifelse(GMP_LIMB_BITS,32,` - define(`LIMB32',` $1') - define(`LIMB64',`') -',` - define(`LIMB32',`') - define(`LIMB64',` $1') -') - -C The inner loop handles up to 2^34 bits, i.e., 2^31 64-limbs, due to overflow -C in vsum4ubs. For large operands, we work in chunks, of size LIMBS_PER_CHUNK. -define(`LIMBS_PER_CHUNK', 0x1000) -define(`LIMBS_CHUNK_THRES', 0x1001) - -ASM_START() -PROLOGUE(mpn_popcount,toc) - mfspr r10, 256 - oris r0, r10, 0xfffc C Set VRSAVE bit 0-13 - mtspr 256, r0 - -ifdef(`HAVE_ABI_mode32', -` rldicl n, n, 0, 32') C zero extend n - -C Load various constants into vector registers - LEAL( r11, cnsts) - li r12, 16 - vspltisb cnt4, 4 C 0x0404...04 used as shift count - - li r7, 160 - lvx rtab, 0, r11 - -LIMB64(`lis r0, LIMBS_CHUNK_THRES ') -LIMB64(`cmpd cr7, n, r0 ') - - lvx v0, 0, ap - addi r7, r11, 80 - rlwinm r6, ap, 2,26,29 - lvx v8, r7, r6 - vand v0, v0, v8 - -LIMB32(`rlwinm r8, ap, 30,30,31 ') -LIMB64(`rlwinm r8, ap, 29,31,31 ') - add n, n, r8 C compensate n for rounded down `ap' - - vxor v1, v1, v1 - li r8, 0 C grand total count - - vxor v12, v12, v12 C zero total count - vxor v13, v13, v13 C zero total count - - addic. n, n, -LIMBS_PER_VR - ble L(sum) - - addic. n, n, -LIMBS_PER_VR - ble L(lsum) - -C For 64-bit machines, handle huge n that would overflow vsum4ubs -LIMB64(`ble cr7, L(small) ') -LIMB64(`addis r9, n, -LIMBS_PER_CHUNK ') C remaining n -LIMB64(`lis n, LIMBS_PER_CHUNK ') - - ALIGN(16) -L(small): -LIMB32(`srwi r7, n, 3 ') C loop count corresponding to n -LIMB64(`srdi r7, n, 2 ') C loop count corresponding to n - addi r7, r7, 1 - mtctr r7 C copy n to count register - b L(ent) - - ALIGN(16) -L(top): - lvx v0, 0, ap -L(ent): lvx v1, r12, ap - addi ap, ap, 32 - vsrb v8, v0, cnt4 - vsrb v9, v1, cnt4 - vperm v2, rtab, rtab, v0 - vperm v3, rtab, rtab, v8 - vperm v4, rtab, rtab, v1 - vperm v5, rtab, rtab, v9 - vaddubm v6, v2, v3 - vaddubm v7, v4, v5 - vsum4ubs v12, v6, v12 - vsum4ubs v13, v7, v13 - bdnz L(top) - - andi. n, n, eval(LIMBS_PER_2VR-1) - beq L(rt) - - lvx v0, 0, ap - vxor v1, v1, v1 - cmpwi n, LIMBS_PER_VR - ble L(sum) -L(lsum): - vor v1, v0, v0 - lvx v0, r12, ap -L(sum): -LIMB32(`rlwinm r6, n, 4,26,27 ') -LIMB64(`rlwinm r6, n, 5,26,26 ') - addi r7, r11, 16 - lvx v8, r7, r6 - vand v0, v0, v8 - vsrb v8, v0, cnt4 - vsrb v9, v1, cnt4 - vperm v2, rtab, rtab, v0 - vperm v3, rtab, rtab, v8 - vperm v4, rtab, rtab, v1 - vperm v5, rtab, rtab, v9 - vaddubm v6, v2, v3 - vaddubm v7, v4, v5 - vsum4ubs v12, v6, v12 - vsum4ubs v13, v7, v13 - - ALIGN(16) -L(rt): vadduwm v3, v12, v13 - li r7, -16 C FIXME: does all ppc32 and ppc64 ABIs - stvx v3, r7, r1 C FIXME: ...support storing below sp? - - lwz r7, -16(r1) - add r8, r8, r7 - lwz r7, -12(r1) - add r8, r8, r7 - lwz r7, -8(r1) - add r8, r8, r7 - lwz r7, -4(r1) - add r8, r8, r7 - -C Handle outer loop for huge n. We inherit cr7 and r0 from above. -LIMB64(`ble cr7, L(ret) - vxor v12, v12, v12 C zero total count - vxor v13, v13, v13 C zero total count - mr n, r9 - cmpd cr7, n, r0 - ble cr7, L(2) - addis r9, n, -LIMBS_PER_CHUNK C remaining n - lis n, LIMBS_PER_CHUNK -L(2): srdi r7, n, 2 C loop count corresponding to n - mtctr r7 C copy n to count register - b L(top) -') - - ALIGN(16) -L(ret): mr r3, r8 - mtspr 256, r10 - blr -EPILOGUE() - -DEF_OBJECT(cnsts,16) -C Counts for vperm - .byte 0x00,0x01,0x01,0x02,0x01,0x02,0x02,0x03 - .byte 0x01,0x02,0x02,0x03,0x02,0x03,0x03,0x04 -C Masks for high end of number - .byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff - .byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff - - .byte 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00 - .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - - .byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff - .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - - .byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff - .byte 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00 -C Masks for low end of number - .byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff - .byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff - - .byte 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff - .byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff - - .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - .byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff - - .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - .byte 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff -END_OBJECT(cnsts) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/README b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/README deleted file mode 100644 index 59519ba538461b1da9933df9ee41ce6a4a5f52fc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/README +++ /dev/null @@ -1,37 +0,0 @@ -All current (2001) S/390 and z/Architecture machines are single-issue, -but some newer machines have a deep pipeline. Software-pipelining is -therefore beneficial. - -* mpn_add_n, mpn_sub_n: Use code along the lines below. Two-way unrolling - would be adequate. - - mp_limb_t - mpn_add_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n) - { - mp_limb_t a, b, r, cy; - mp_size_t i; - mp_limb_t mm = -1; - - cy = 0; - up += n; - vp += n; - rp += n; - i = -n; - do - { - a = up[i]; - b = vp[i]; - r = a + b + cy; - rp[i] = r; - cy = (((a & b) | ((a | b) & (r ^ mm)))) >> 31; - i++; - } - while (i < 0); - return cy; - } - -* mpn_lshift, mpn_rshift: Use SLDL/SRDL, and two-way unrolling. - -* mpn_mul_1, mpn_addmul_1, mpn_submul_1: For machines with just signed - multiply (MR), use two loops, similar to the corresponding VAX or - POWER functions. Handle carry like for mpn_add_n. diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/addmul_1.asm deleted file mode 100644 index 97189a8e765fa014f19a9d3c01865ee25b827071..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/addmul_1.asm +++ /dev/null @@ -1,93 +0,0 @@ -dnl S/390 mpn_addmul_1 -- Multiply a limb vector with a limb and add the -dnl result to a second limb vector. - -dnl Copyright 2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -define(`rp',2) -define(`up',3) -define(`n',4) -define(`vlimb',5) -define(`cylimb',7) - -ASM_START() -PROLOGUE(mpn_addmul_1) - stm 6,7,24(15) - slr cylimb,cylimb # clear cylimb - ltr vlimb,vlimb - jnl .Loopp - -.Loopn: l 1,0(up) # load from u - lr 6,1 # - mr 0,vlimb # multiply signed - alr 0,6 # add vlimb to phi - sra 6,31 # make mask - nr 6,vlimb # 0 or vlimb - alr 0,6 # conditionally add vlimb to phi - alr 1,cylimb # add carry limb to plo - brc 8+4,+8 # branch if not carry - ahi 0,1 # increment phi - l 6,0(rp) # load r limb - alr 6,1 # add u limb to plo - brc 8+4,+8 # branch if not carry - ahi 0,1 # increment phi - lr cylimb,0 # new cylimb - st 6,0(rp) # store - la up,4(,up) - la rp,4(,rp) - brct n,.Loopn - - lr 2,cylimb - lm 6,7,24(15) - br 14 - -.Loopp: l 1,0(up) # load from u - lr 6,1 # - mr 0,vlimb # multiply signed - sra 6,31 # make mask - nr 6,vlimb # 0 or vlimb - alr 0,6 # conditionally add vlimb to phi - alr 1,cylimb # add carry limb to plo - brc 8+4,+8 # branch if not carry - ahi 0,1 # increment phi - l 6,0(rp) # load r limb - alr 6,1 # add u limb to plo - brc 8+4,+8 # branch if not carry - ahi 0,1 # increment phi - lr cylimb,0 # new cylimb - st 6,0(rp) # store - la up,4(,up) - la rp,4(,rp) - brct n,.Loopp - - lr 2,cylimb - lm 6,7,24(15) - br 14 -EPILOGUE(mpn_addmul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/copyd.asm deleted file mode 100644 index ff252bc1a6e1ae2acb21f606e22b20b500e94040..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/copyd.asm +++ /dev/null @@ -1,145 +0,0 @@ -dnl S/390-32 mpn_copyd - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C cycles/limb -C cycles/limb -C z900 1.65 -C z990 1.125 -C z9 ? -C z10 ? -C z196 ? - -C FIXME: -C * Avoid saving/restoring callee-saves registers for n < 3. This could be -C done by setting rp=r1, up=r2, i=r0 and r3,r4,r5 for clock regs. -C We could then use r3...r10 in main loop. - -C INPUT PARAMETERS -define(`rp_param', `%r2') -define(`up_param', `%r3') -define(`n', `%r4') - -define(`rp', `%r8') -define(`up', `%r9') - -ASM_START() -PROLOGUE(mpn_copyd) - stm %r6, %r11, 24(%r15) - - lr %r1, n - sll %r1, 2 - la %r10, 8(n) - ahi %r1, -32 - srl %r10, 3 - lhi %r11, -32 - - la rp, 0(%r1,rp_param) C FIXME use lay on z990 and later - la up, 0(%r1,up_param) C FIXME use lay on z990 and later - - lhi %r7, 7 - nr %r7, n C n mod 8 - chi %r7, 2 - jh L(b34567) - chi %r7, 1 - je L(b1) - jh L(b2) - -L(b0): brct %r10, L(top) - j L(end) - -L(b1): l %r0, 28(up) - ahi up, -4 - st %r0, 28(rp) - ahi rp, -4 - brct %r10, L(top) - j L(end) - -L(b2): lm %r0, %r1, 24(up) - ahi up, -8 - stm %r0, %r1, 24(rp) - ahi rp, -8 - brct %r10, L(top) - j L(end) - -L(b34567): - chi %r7, 4 - jl L(b3) - je L(b4) - chi %r7, 6 - je L(b6) - jh L(b7) - -L(b5): lm %r0, %r4, 12(up) - ahi up, -20 - stm %r0, %r4, 12(rp) - ahi rp, -20 - brct %r10, L(top) - j L(end) - -L(b3): lm %r0, %r2, 20(up) - ahi up, -12 - stm %r0, %r2, 20(rp) - ahi rp, -12 - brct %r10, L(top) - j L(end) - -L(b4): lm %r0, %r3, 16(up) - ahi up, -16 - stm %r0, %r3, 16(rp) - ahi rp, -16 - brct %r10, L(top) - j L(end) - -L(b6): lm %r0, %r5, 8(up) - ahi up, -24 - stm %r0, %r5, 8(rp) - ahi rp, -24 - brct %r10, L(top) - j L(end) - -L(b7): lm %r0, %r6, 4(up) - ahi up, -28 - stm %r0, %r6, 4(rp) - ahi rp, -28 - brct %r10, L(top) - j L(end) - -L(top): lm %r0, %r7, 0(up) - la up, 0(%r11,up) - stm %r0, %r7, 0(rp) - la rp, 0(%r11,rp) - brct %r10, L(top) - -L(end): lm %r6, %r11, 24(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/copyi.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/copyi.asm deleted file mode 100644 index 1df32f100e5af28e68980cad7aa941733ebdccb4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/copyi.asm +++ /dev/null @@ -1,69 +0,0 @@ -dnl S/390-32 mpn_copyi - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C cycles/limb -C z900 0.75 -C z990 0.375 -C z9 ? -C z10 ? -C z196 ? - -C NOTE -C * This is based on GNU libc memcpy which was written by Martin Schwidefsky. - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') - -ASM_START() -PROLOGUE(mpn_copyi) - ltr %r4, %r4 - sll %r4, 2 - je L(rtn) - ahi %r4, -1 - lr %r5, %r4 - srl %r5, 8 - ltr %r5, %r5 C < 256 bytes to copy? - je L(1) - -L(top): mvc 0(256, rp), 0(up) - la rp, 256(rp) - la up, 256(up) - brct %r5, L(top) - -L(1): bras %r5, L(2) C make r5 point to mvc insn - mvc 0(1, rp), 0(up) -L(2): ex %r4, 0(%r5) C execute mvc with length ((n-1) mod 256)+1 -L(rtn): br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/addmul_1.asm deleted file mode 100644 index 4375b74ae0961db76c6216f0563c654a0d603d2c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/addmul_1.asm +++ /dev/null @@ -1,72 +0,0 @@ -dnl S/390-32 mpn_addmul_1 for systems with MLR instruction - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 18.5 -C z990 10 -C z9 ? -C z10 ? -C z196 ? - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') -define(`v0', `%r5') - -define(`z', `%r9') - -ASM_START() -PROLOGUE(mpn_addmul_1) - stm %r9, %r12, 36(%r15) - lhi %r12, 0 C zero index register - ahi %r12, 0 C clear carry fla - lhi %r11, 0 C clear carry limb - lhi z, 0 C clear carry limb - -L(top): l %r1, 0(%r12,up) - l %r10, 0(%r12,rp) - mlr %r0, v0 - alcr %r1, %r10 - alcr %r0, z - alr %r1, %r11 - lr %r11, %r0 - st %r1, 0(%r12,rp) - la %r12, 4(%r12) - brct n, L(top) - - lhi %r2, 0 - alcr %r2, %r11 - - lm %r9, %r12, 36(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/aors_n.asm deleted file mode 100644 index 98b0dbc7b08dfb345488e24e775d050687751d62..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/aors_n.asm +++ /dev/null @@ -1,137 +0,0 @@ -dnl S/390-32 mpn_add_n and mpn_sub_n. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 ? -C z990 2.75-3 (fast for even n, slow for odd n) -C z9 ? -C z10 ? -C z196 ? - -C TODO -C * Optimise for small n -C * Use r0 and save/restore one less register -C * Using logops_n's v1 inner loop operand order make the loop about 20% -C faster, at the expense of highly alignment-dependent performance. - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`vp', `%r4') -define(`n', `%r5') - -ifdef(`OPERATION_add_n', ` - define(ADSB, al) - define(ADSBCR, alcr) - define(ADSBC, alc) - define(RETVAL,`dnl - lhi %r2, 0 - alcr %r2, %r2') - define(func, mpn_add_n) - define(func_nc, mpn_add_nc)') -ifdef(`OPERATION_sub_n', ` - define(ADSB, sl) - define(ADSBCR, slbr) - define(ADSBC, slb) - define(RETVAL,`dnl - slbr %r2, %r2 - lcr %r2, %r2') - define(func, mpn_sub_n) - define(func_nc, mpn_sub_nc)') - -MULFUNC_PROLOGUE(mpn_add_n mpn_sub_n) - -ASM_START() -PROLOGUE(func) - stm %r6, %r8, 24(%r15) - - ahi n, 3 - lhi %r7, 3 - lr %r1, n - srl %r1, 2 - nr %r7, n C n mod 4 - je L(b1) - chi %r7, 2 - jl L(b2) - jne L(b0) - -L(b3): lm %r5, %r7, 0(up) - la up, 12(up) - ADSB %r5, 0(vp) - ADSBC %r6, 4(vp) - ADSBC %r7, 8(vp) - la vp, 12(vp) - stm %r5, %r7, 0(rp) - la rp, 12(rp) - brct %r1, L(top) - j L(end) - -L(b0): lm %r5, %r8, 0(up) C This redundant insns is no mistake, - la up, 16(up) C it is needed to make main loop run - ADSB %r5, 0(vp) C fast for n = 0 (mod 4). - ADSBC %r6, 4(vp) - j L(m0) - -L(b1): l %r5, 0(up) - la up, 4(up) - ADSB %r5, 0(vp) - la vp, 4(vp) - st %r5, 0(rp) - la rp, 4(rp) - brct %r1, L(top) - j L(end) - -L(b2): lm %r5, %r6, 0(up) - la up, 8(up) - ADSB %r5, 0(vp) - ADSBC %r6, 4(vp) - la vp, 8(vp) - stm %r5, %r6, 0(rp) - la rp, 8(rp) - brct %r1, L(top) - j L(end) - -L(top): lm %r5, %r8, 0(up) - la up, 16(up) - ADSBC %r5, 0(vp) - ADSBC %r6, 4(vp) -L(m0): ADSBC %r7, 8(vp) - ADSBC %r8, 12(vp) - la vp, 16(vp) - stm %r5, %r8, 0(rp) - la rp, 16(rp) - brct %r1, L(top) - -L(end): RETVAL - lm %r6, %r8, 24(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/aorslsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/aorslsh1_n.asm deleted file mode 100644 index f2b222b121d08822ff9b81814fdc115bbd651053..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/aorslsh1_n.asm +++ /dev/null @@ -1,173 +0,0 @@ -dnl S/390-32 mpn_addlsh1_n - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 9.25 -C z990 5 -C z9 ? -C z10 ? -C z196 ? - -C TODO -C * Optimise for small n -C * Compute RETVAL for sublsh1_n less stupidly - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`vp', `%r4') -define(`n', `%r5') - -ifdef(`OPERATION_addlsh1_n',` - define(ADDSUBC, alr) - define(ADDSUBE, alcr) - define(INITCY, `lhi %r13, -1') - define(RETVAL, `alr %r1, %r13 - lhi %r2, 2 - alr %r2, %r1') - define(func, mpn_addlsh1_n) -') -ifdef(`OPERATION_sublsh1_n',` - define(ADDSUBC, slr) - define(ADDSUBE, slbr) - define(INITCY, `lhi %r13, 0') - define(RETVAL, `slr %r1, %r13 - lhi %r2, 1 - alr %r2, %r1') - define(func, mpn_sublsh1_n) -') - -MULFUNC_PROLOGUE(mpn_addlsh1_n mpn_sublsh1_n) - -ASM_START() -PROLOGUE(func) - stm %r6, %r13, 24(%r15) - - la %r0, 3(n) - lhi %r7, 3 - srl %r0, 2 - nr %r7, n C n mod 4 - je L(b0) - chi %r7, 2 - jl L(b1) - je L(b2) - -L(b3): lm %r5, %r7, 0(up) - la up, 12(up) - lm %r9, %r11, 0(vp) - la vp, 12(vp) - - alr %r9, %r9 - alcr %r10, %r10 - alcr %r11, %r11 - slbr %r1, %r1 - - ADDSUBC %r5, %r9 - ADDSUBE %r6, %r10 - ADDSUBE %r7, %r11 - slbr %r13, %r13 - - stm %r5, %r7, 0(rp) - la rp, 12(rp) - brct %r0, L(top) - j L(end) - -L(b0): lhi %r1, -1 - INITCY - j L(top) - -L(b1): l %r5, 0(up) - la up, 4(up) - l %r9, 0(vp) - la vp, 4(vp) - - alr %r9, %r9 - slbr %r1, %r1 - ADDSUBC %r5, %r9 - slbr %r13, %r13 - - st %r5, 0(rp) - la rp, 4(rp) - brct %r0, L(top) - j L(end) - -L(b2): lm %r5, %r6, 0(up) - la up, 8(up) - lm %r9, %r10, 0(vp) - la vp, 8(vp) - - alr %r9, %r9 - alcr %r10, %r10 - slbr %r1, %r1 - - ADDSUBC %r5, %r9 - ADDSUBE %r6, %r10 - slbr %r13, %r13 - - stm %r5, %r6, 0(rp) - la rp, 8(rp) - brct %r0, L(top) - j L(end) - -L(top): lm %r9, %r12, 0(vp) - la vp, 16(vp) - - ahi %r1, 1 C restore carry - - alcr %r9, %r9 - alcr %r10, %r10 - alcr %r11, %r11 - alcr %r12, %r12 - - slbr %r1, %r1 C save carry - - lm %r5, %r8, 0(up) - la up, 16(up) - - ahi %r13, 1 C restore carry - - ADDSUBE %r5, %r9 - ADDSUBE %r6, %r10 - ADDSUBE %r7, %r11 - ADDSUBE %r8, %r12 - - slbr %r13, %r13 - - stm %r5, %r8, 0(rp) - la rp, 16(rp) - brct %r0, L(top) - -L(end): - RETVAL - lm %r6, %r13, 24(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/bdiv_dbm1c.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/bdiv_dbm1c.asm deleted file mode 100644 index 568a2a44e8f6df2cea83f3188cb0c312a961bd84..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/bdiv_dbm1c.asm +++ /dev/null @@ -1,65 +0,0 @@ -dnl S/390-32 mpn_bdiv_dbm1c for systems with MLR instruction. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 14 -C z990 10 -C z9 ? -C z10 ? -C z196 ? - -C INPUT PARAMETERS -define(`qp', `%r2') -define(`up', `%r3') -define(`n', `%r4') -define(`bd', `%r5') -define(`cy', `%r6') - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(mpn_bdiv_dbm1c) - stm %r6, %r7, 24(%r15) - lhi %r7, 0 C zero index register - -L(top): l %r1, 0(%r7,up) - mlr %r0, bd - slr %r6, %r1 - st %r6, 0(%r7,qp) - slbr %r6, %r0 - la %r7, 4(%r7) - brct n, L(top) - - lr %r2, %r6 - lm %r6, %r7, 24(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/gmp-mparam.h deleted file mode 100644 index a805fa1492d3e122d4a20870ce02baa50344cb1b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/gmp-mparam.h +++ /dev/null @@ -1,207 +0,0 @@ -/* S/390-32 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2008-2011, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 4400 MHz IBM z10 running in 32-bit mode */ -/* FFT tuning limit = 15000000 */ -/* Generated by tuneup.c, 2014-03-12, gcc 4.7 */ - -#define DIVREM_1_NORM_THRESHOLD 3 -#define DIVREM_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define MOD_1_1P_METHOD 1 -#define MOD_1_NORM_THRESHOLD 4 -#define MOD_1_UNNORM_THRESHOLD 8 -#define MOD_1N_TO_MOD_1_1_THRESHOLD 16 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 8 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 0 /* never mpn_mod_1_1p */ -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 38 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 30 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 3 -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD 56 - -#define MUL_TOOM22_THRESHOLD 8 -#define MUL_TOOM33_THRESHOLD 59 -#define MUL_TOOM44_THRESHOLD 88 -#define MUL_TOOM6H_THRESHOLD 125 -#define MUL_TOOM8H_THRESHOLD 169 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 57 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 55 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 57 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 56 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 82 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 14 -#define SQR_TOOM3_THRESHOLD 90 -#define SQR_TOOM4_THRESHOLD 144 -#define SQR_TOOM6_THRESHOLD 196 -#define SQR_TOOM8_THRESHOLD 309 - -#define MULMID_TOOM42_THRESHOLD 24 - -#define MULMOD_BNM1_THRESHOLD 12 -#define SQRMOD_BNM1_THRESHOLD 10 - -#define MUL_FFT_MODF_THRESHOLD 252 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 252, 5}, { 9, 6}, { 5, 5}, { 13, 6}, \ - { 7, 5}, { 15, 6}, { 13, 7}, { 7, 6}, \ - { 15, 7}, { 9, 6}, { 19, 7}, { 11, 6}, \ - { 23, 7}, { 13, 8}, { 7, 7}, { 15, 6}, \ - { 31, 7}, { 19, 8}, { 11, 7}, { 23, 9}, \ - { 7, 8}, { 15, 7}, { 31, 8}, { 19, 7}, \ - { 39, 8}, { 27, 9}, { 15, 8}, { 39, 9}, \ - { 23,10}, { 15, 9}, { 31, 8}, { 63, 9}, \ - { 39, 8}, { 79, 9}, { 47,10}, { 31, 9}, \ - { 79,10}, { 47,11}, { 31,10}, { 63, 9}, \ - { 127, 8}, { 255,10}, { 79, 8}, { 319, 9}, \ - { 175, 8}, { 351, 7}, { 703, 6}, { 1407,10}, \ - { 95, 9}, { 191, 8}, { 383, 9}, { 207, 8}, \ - { 415, 7}, { 831, 9}, { 223,11}, { 63,10}, \ - { 127, 9}, { 255,10}, { 143, 9}, { 287, 8}, \ - { 575, 9}, { 319,10}, { 175, 9}, { 351, 8}, \ - { 703, 7}, { 1407,11}, { 95,10}, { 191, 9}, \ - { 383,10}, { 207, 9}, { 415, 8}, { 831,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 575,11}, \ - { 159,10}, { 351, 9}, { 703, 8}, { 1407,11}, \ - { 191,10}, { 415, 9}, { 831,11}, { 223,10}, \ - { 447, 9}, { 895, 8}, { 1791,10}, { 479, 9}, \ - { 959,12}, { 127,11}, { 287,10}, { 575,11}, \ - { 351,10}, { 703, 9}, { 1407,12}, { 191,11}, \ - { 415,10}, { 831,11}, { 447,10}, { 895, 9}, \ - { 1791,11}, { 479,10}, { 959,13}, { 127,12}, \ - { 255,11}, { 575,12}, { 319,11}, { 703,10}, \ - { 1407,12}, { 383,11}, { 831,12}, { 447,11}, \ - { 895,10}, { 1791,11}, { 959,10}, { 1919, 9}, \ - { 3839,13}, { 255,12}, { 575,11}, { 1215,10}, \ - { 2431,12}, { 703,11}, { 1407,13}, { 383,12}, \ - { 895,11}, { 1791,12}, { 959,11}, { 1919,10}, \ - { 3839,14}, { 255,13}, { 511,12}, { 1215,11}, \ - { 2431,13}, { 639,12}, { 1471,13}, { 895,12}, \ - { 1919,11}, { 3839,10}, { 7679,14}, { 511,13}, \ - { 1023,12}, { 2047,13}, { 1151,12}, { 2431,13}, \ - { 1407,14}, { 767,13}, { 8192,14}, { 16384,15}, \ - { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 149 -#define MUL_FFT_THRESHOLD 2240 - -#define SQR_FFT_MODF_THRESHOLD 244 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 244, 5}, { 11, 6}, { 6, 5}, { 13, 6}, \ - { 7, 5}, { 15, 6}, { 8, 5}, { 17, 6}, \ - { 11, 5}, { 23, 6}, { 13, 7}, { 7, 6}, \ - { 16, 7}, { 9, 6}, { 19, 7}, { 11, 6}, \ - { 23, 7}, { 13, 8}, { 7, 7}, { 19, 8}, \ - { 11, 7}, { 23, 9}, { 7, 8}, { 15, 7}, \ - { 31, 8}, { 19, 7}, { 39, 8}, { 23, 9}, \ - { 15, 8}, { 39, 9}, { 23,10}, { 15, 9}, \ - { 31, 8}, { 63, 9}, { 39, 8}, { 79, 9}, \ - { 47,10}, { 31, 9}, { 63, 8}, { 127, 9}, \ - { 71, 8}, { 143, 7}, { 287,10}, { 47,11}, \ - { 31,10}, { 63, 9}, { 127, 8}, { 255, 9}, \ - { 143, 8}, { 287,10}, { 79, 9}, { 159, 8}, \ - { 319, 9}, { 175, 8}, { 351, 7}, { 703, 6}, \ - { 1407,10}, { 95, 9}, { 191, 8}, { 383,11}, \ - { 63,10}, { 127, 9}, { 255,10}, { 143, 9}, \ - { 287, 8}, { 575,10}, { 159, 9}, { 319,10}, \ - { 175, 9}, { 351, 8}, { 703, 7}, { 1407,11}, \ - { 95,10}, { 191, 9}, { 383,10}, { 207,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 511,10}, \ - { 287, 9}, { 575,11}, { 159,10}, { 351, 9}, \ - { 703, 8}, { 1407,11}, { 191,10}, { 415,11}, \ - { 223,10}, { 447, 9}, { 895, 8}, { 1791,10}, \ - { 479, 9}, { 959,12}, { 127,11}, { 255,10}, \ - { 511,11}, { 287,10}, { 575,11}, { 319,10}, \ - { 639,11}, { 351,10}, { 703, 9}, { 1407,12}, \ - { 191,11}, { 415,10}, { 831,11}, { 447,10}, \ - { 895, 9}, { 1791,11}, { 479,13}, { 127,12}, \ - { 255,11}, { 575,12}, { 319,11}, { 703,10}, \ - { 1407,12}, { 383,11}, { 831,12}, { 447,11}, \ - { 895,10}, { 1791,11}, { 959,10}, { 1919,13}, \ - { 255,12}, { 511,11}, { 1023,12}, { 575,11}, \ - { 1215,10}, { 2431,12}, { 703,11}, { 1407,13}, \ - { 383,12}, { 895,11}, { 1791,12}, { 959,11}, \ - { 1919,14}, { 255,13}, { 511,12}, { 1215,11}, \ - { 2431,13}, { 639,12}, { 1471,11}, { 2943,10}, \ - { 5887,13}, { 895,12}, { 1919,11}, { 3839,10}, \ - { 7679,14}, { 511,13}, { 1023,12}, { 2047,13}, \ - { 1151,12}, { 2431,13}, { 1407,12}, { 2943,11}, \ - { 5887,14}, { 767,13}, { 8192,14}, { 16384,15}, \ - { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 161 -#define SQR_FFT_THRESHOLD 1728 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 33 -#define MULLO_MUL_N_THRESHOLD 4392 - -#define DC_DIV_QR_THRESHOLD 43 -#define DC_DIVAPPR_Q_THRESHOLD 150 -#define DC_BDIV_QR_THRESHOLD 38 -#define DC_BDIV_Q_THRESHOLD 107 - -#define INV_MULMOD_BNM1_THRESHOLD 14 -#define INV_NEWTON_THRESHOLD 165 -#define INV_APPR_THRESHOLD 149 - -#define BINV_NEWTON_THRESHOLD 147 -#define REDC_1_TO_REDC_N_THRESHOLD 43 - -#define MU_DIV_QR_THRESHOLD 777 -#define MU_DIVAPPR_Q_THRESHOLD 942 -#define MUPI_DIV_QR_THRESHOLD 69 -#define MU_BDIV_QR_THRESHOLD 654 -#define MU_BDIV_Q_THRESHOLD 777 - -#define POWM_SEC_TABLE 3,32,126,692,1486 - -#define MATRIX22_STRASSEN_THRESHOLD 17 -#define HGCD_THRESHOLD 103 -#define HGCD_APPR_THRESHOLD 144 -#define HGCD_REDUCE_THRESHOLD 1437 -#define GCD_DC_THRESHOLD 275 -#define GCDEXT_DC_THRESHOLD 206 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 9 -#define GET_STR_PRECOMPUTE_THRESHOLD 20 -#define SET_STR_DC_THRESHOLD 532 -#define SET_STR_PRECOMPUTE_THRESHOLD 999 - -#define FAC_DSC_THRESHOLD 156 -#define FAC_ODD_THRESHOLD 24 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/mul_1.asm deleted file mode 100644 index 04be96365182fc4250ad892a27c70377b1f9b41d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/mul_1.asm +++ /dev/null @@ -1,66 +0,0 @@ -dnl S/390-32 mpn_mul_1 for systems with MLR instruction - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 14 -C z990 9 -C z9 ? -C z10 ? -C z196 ? - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') -define(`v0', `%r5') - -ASM_START() -PROLOGUE(mpn_mul_1) - stm %r11, %r12, 44(%r15) - lhi %r12, 0 C zero index register - ahi %r12, 0 C clear carry flag - lhi %r11, 0 C clear carry limb - -L(top): l %r1, 0(%r12,up) - mlr %r0, v0 - alcr %r1, %r11 - lr %r11, %r0 C copy high part to carry limb - st %r1, 0(%r12,rp) - la %r12, 4(%r12) - brct n, L(top) - - lhi %r2, 0 - alcr %r2, %r11 - - lm %r11, %r12, 44(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/mul_basecase.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/mul_basecase.asm deleted file mode 100644 index 2c8138d8d2826692d96ffb8ec8cb8d39c02516c4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/mul_basecase.asm +++ /dev/null @@ -1,130 +0,0 @@ -dnl S/390-32/esame mpn_mul_basecase. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 ? -C z990 ? -C z9 ? -C z10 ? -C z196 ? - -C TODO -C * Perhaps add special case for un <= 2. -C * Replace loops by faster code. The mul_1 and addmul_1 loops could be sped -C up by about 10%. - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`un', `%r4') -define(`vp', `%r5') -define(`vn', `%r6') - -define(`zero', `%r8') - -ASM_START() -PROLOGUE(mpn_mul_basecase) - chi un, 2 - jhe L(ge2) - -C un = vn = 1 - l %r1, 0(vp) - ml %r0, 0(up) - st %r1, 0(rp) - st %r0, 4(rp) - br %r14 - -L(ge2): C jne L(gen) - - -L(gen): -C mul_1 ======================================================================= - - stm %r6, %r12, 24(%r15) - lhi zero, 0 - ahi un, -1 - - l %r7, 0(vp) - l %r11, 0(up) - lhi %r12, 4 C init index register - mlr %r10, %r7 - lr %r9, un - st %r11, 0(rp) - cr %r15, %r15 C clear carry flag - -L(tm): l %r1, 0(%r12,up) - mlr %r0, %r7 - alcr %r1, %r10 - lr %r10, %r0 C copy high part to carry limb - st %r1, 0(%r12,rp) - la %r12, 4(%r12) - brct %r9, L(tm) - - alcr %r0, zero - st %r0, 0(%r12,rp) - -C addmul_1 loop =============================================================== - - ahi vn, -1 - je L(outer_end) -L(outer_loop): - - la rp, 4(rp) C rp += 1 - la vp, 4(vp) C up += 1 - l %r7, 0(vp) - l %r11, 0(up) - lhi %r12, 4 C init index register - mlr %r10, %r7 - lr %r9, un - al %r11, 0(rp) - st %r11, 0(rp) - -L(tam): l %r1, 0(%r12,up) - l %r11, 0(%r12,rp) - mlr %r0, %r7 - alcr %r1, %r11 - alcr %r0, zero - alr %r1, %r10 - lr %r10, %r0 - st %r1, 0(%r12,rp) - la %r12, 4(%r12) - brct %r9, L(tam) - - alcr %r0, zero - st %r0, 0(%r12,rp) - - brct vn, L(outer_loop) -L(outer_end): - - lm %r6, %r12, 24(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/sqr_basecase.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/sqr_basecase.asm deleted file mode 100644 index dcc13112bf3b28a95abcb7e4afeede02bef01dcd..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/sqr_basecase.asm +++ /dev/null @@ -1,203 +0,0 @@ -dnl S/390-32 mpn_sqr_basecase. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 ? -C z990 23 -C z9 ? -C z10 ? -C z196 ? - -C TODO -C * Clean up. -C * Stop iterating addmul_1 loop at latest for n = 2, implement longer tail. -C This will ask for basecase handling of n = 3. -C * Update counters and pointers more straightforwardly, possibly lowering -C register usage. -C * Should we use this allocation-free style for more sqr_basecase asm -C implementations? The only disadvantage is that it requires R != U. -C * Replace loops by faster code. The mul_1 and addmul_1 loops could be sped -C up by about 10%. The sqr_diag_addlsh1 loop could probably be sped up even -C more. - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') - -define(`zero', `%r8') -define(`rp_saved', `%r9') -define(`up_saved', `%r13') -define(`n_saved', `%r14') - -ASM_START() -PROLOGUE(mpn_sqr_basecase) - ahi n, -2 - jhe L(ge2) - -C n = 1 - l %r5, 0(up) - mlr %r4, %r5 - st %r5, 0(rp) - st %r4, 4(rp) - br %r14 - -L(ge2): jne L(gen) - -C n = 2 - stm %r6, %r8, 24(%r15) - lhi zero, 0 - - l %r5, 0(up) - mlr %r4, %r5 C u0 * u0 - l %r1, 4(up) - mlr %r0, %r1 C u1 * u1 - st %r5, 0(rp) - - l %r7, 0(up) - ml %r6, 4(up) C u0 * u1 - alr %r7, %r7 - alcr %r6, %r6 - alcr %r0, zero - - alr %r4, %r7 - alcr %r1, %r6 - alcr %r0, zero - st %r4, 4(rp) - st %r1, 8(rp) - st %r0, 12(rp) - - lm %r6, %r8, 24(%r15) - br %r14 - -L(gen): -C mul_1 ======================================================================= - - stm %r6, %r14, 24(%r15) - lhi zero, 0 - lr up_saved, up - lr rp_saved, rp - lr n_saved, n - - l %r6, 0(up) - l %r11, 4(up) - lhi %r12, 8 C init index register - mlr %r10, %r6 - lr %r5, n - st %r11, 4(rp) - cr %r15, %r15 C clear carry flag - -L(tm): l %r1, 0(%r12,up) - mlr %r0, %r6 - alcr %r1, %r10 - lr %r10, %r0 C copy high part to carry limb - st %r1, 0(%r12,rp) - la %r12, 4(%r12) - brct %r5, L(tm) - - alcr %r0, zero - st %r0, 0(%r12,rp) - -C addmul_1 loop =============================================================== - - ahi n, -1 - je L(outer_end) -L(outer_loop): - - la rp, 8(rp) C rp += 2 - la up, 4(up) C up += 1 - l %r6, 0(up) - l %r11, 4(up) - lhi %r12, 8 C init index register - mlr %r10, %r6 - lr %r5, n - al %r11, 4(rp) - st %r11, 4(rp) - -L(tam): l %r1, 0(%r12,up) - l %r7, 0(%r12,rp) - mlr %r0, %r6 - alcr %r1, %r7 - alcr %r0, zero - alr %r1, %r10 - lr %r10, %r0 - st %r1, 0(%r12,rp) - la %r12, 4(%r12) - brct %r5, L(tam) - - alcr %r0, zero - st %r0, 0(%r12,rp) - - brct n, L(outer_loop) -L(outer_end): - - l %r6, 4(up) - l %r1, 8(up) - lr %r7, %r0 C Same as: l %r7, 12(,rp) - mlr %r0, %r6 - alr %r1, %r7 - alcr %r0, zero - st %r1, 12(rp) - st %r0, 16(rp) - -C sqr_dia_addlsh1 ============================================================ - -define(`up', `up_saved') -define(`rp', `rp_saved') - la n, 1(n_saved) - - l %r1, 0(up) - mlr %r0, %r1 - st %r1, 0(rp) -C clr %r15, %r15 C clear carry (already clear per above) - -L(top): l %r11, 4(up) - la up, 4(up) - l %r6, 4(rp) - l %r7, 8(rp) - mlr %r10, %r11 - alcr %r6, %r6 - alcr %r7, %r7 - alcr %r10, zero C propagate carry to high product limb - alr %r6, %r0 - alcr %r7, %r11 - stm %r6, %r7, 4(rp) - la rp, 8(rp) - lr %r0, %r10 C copy carry limb - brct n, L(top) - - alcr %r0, zero - st %r0, 4(rp) - - lm %r6, %r14, 24(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/submul_1.asm deleted file mode 100644 index a71e57e2307d8614d613cb8c629299cb7019c408..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/esame/submul_1.asm +++ /dev/null @@ -1,70 +0,0 @@ -dnl S/390-32 mpn_submul_1 for systems with MLR instruction. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 20 -C z990 11 -C z9 ? -C z10 ? -C z196 ? - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') -define(`v0', `%r5') - -ASM_START() -PROLOGUE(mpn_submul_1) - stm %r9, %r12, 36(%r15) - lhi %r12, 0 - slr %r11, %r11 - -L(top): l %r1, 0(%r12, up) - l %r10, 0(%r12, rp) - mlr %r0, v0 - slbr %r10, %r1 - slbr %r9, %r9 - slr %r0, %r9 C conditional incr - slr %r10, %r11 - lr %r11, %r0 - st %r10, 0(%r12, rp) - la %r12, 4(%r12) - brct %r4, L(top) - - lr %r2, %r11 - slbr %r9, %r9 - slr %r2, %r9 - - lm %r9, %r12, 36(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/gmp-mparam.h deleted file mode 100644 index 1aca74a8188b0f863b1787fe5a4f55327e56649c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/gmp-mparam.h +++ /dev/null @@ -1,138 +0,0 @@ -/* S/390-32 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 770 MHz IBM z900 running in 32-bit mode, using just traditional insns */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 5 -#define MOD_1_1P_METHOD 2 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 5 -#define MOD_1N_TO_MOD_1_1_THRESHOLD MP_SIZE_T_MAX /* never */ -#define MOD_1U_TO_MOD_1_1_THRESHOLD 15 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 0 /* never mpn_mod_1_1p */ -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 30 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ - -#define MUL_TOOM22_THRESHOLD 19 -#define MUL_TOOM33_THRESHOLD 114 -#define MUL_TOOM44_THRESHOLD 166 -#define MUL_TOOM6H_THRESHOLD 226 -#define MUL_TOOM8H_THRESHOLD 333 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 106 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 122 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 105 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 113 - -#define SQR_BASECASE_THRESHOLD 7 -#define SQR_TOOM2_THRESHOLD 40 -#define SQR_TOOM3_THRESHOLD 126 -#define SQR_TOOM4_THRESHOLD 192 -#define SQR_TOOM6_THRESHOLD 246 -#define SQR_TOOM8_THRESHOLD 357 - -#define MULMID_TOOM42_THRESHOLD 28 - -#define MULMOD_BNM1_THRESHOLD 12 -#define SQRMOD_BNM1_THRESHOLD 18 - -#define MUL_FFT_MODF_THRESHOLD 244 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 244, 5}, { 13, 6}, { 7, 5}, { 15, 6}, \ - { 8, 5}, { 17, 6}, { 13, 7}, { 7, 6}, \ - { 16, 7}, { 9, 6}, { 19, 7}, { 11, 6}, \ - { 23, 7}, { 13, 8}, { 7, 7}, { 19, 8}, \ - { 11, 7}, { 25, 9}, { 7, 8}, { 15, 7}, \ - { 33, 8}, { 19, 7}, { 39, 8}, { 23, 7}, \ - { 47, 8}, { 27, 9}, { 15, 8}, { 39, 9}, \ - { 23, 8}, { 47,10}, { 15, 9}, { 31, 8}, \ - { 63, 9}, { 39, 8}, { 79, 9}, { 47,10}, \ - { 31, 9}, { 63, 8}, { 127, 9}, { 71, 8}, \ - { 143, 9}, { 79,10}, { 47,11}, { 2048,12}, \ - { 4096,13}, { 8192,14}, { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 48 -#define MUL_FFT_THRESHOLD 2688 - -#define SQR_FFT_MODF_THRESHOLD 216 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 216, 5}, { 7, 4}, { 15, 5}, { 17, 6}, \ - { 13, 7}, { 7, 6}, { 17, 7}, { 9, 6}, \ - { 20, 7}, { 11, 6}, { 23, 7}, { 13, 8}, \ - { 7, 7}, { 19, 8}, { 11, 7}, { 25, 9}, \ - { 7, 8}, { 15, 7}, { 33, 8}, { 19, 7}, \ - { 39, 8}, { 23, 9}, { 15, 8}, { 39, 9}, \ - { 23, 8}, { 47,10}, { 15, 9}, { 31, 8}, \ - { 63, 9}, { 39, 8}, { 79, 9}, { 47,10}, \ - { 31, 9}, { 63, 8}, { 127, 9}, { 71, 8}, \ - { 143, 9}, { 79,10}, { 47,11}, { 2048,12}, \ - { 4096,13}, { 8192,14}, { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 44 -#define SQR_FFT_THRESHOLD 1856 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 61 -#define MULLO_MUL_N_THRESHOLD 5240 - -#define DC_DIV_QR_THRESHOLD 70 -#define DC_DIVAPPR_Q_THRESHOLD 234 -#define DC_BDIV_QR_THRESHOLD 59 -#define DC_BDIV_Q_THRESHOLD 137 - -#define INV_MULMOD_BNM1_THRESHOLD 36 -#define INV_NEWTON_THRESHOLD 327 -#define INV_APPR_THRESHOLD 268 - -#define BINV_NEWTON_THRESHOLD 324 -#define REDC_1_TO_REDC_N_THRESHOLD 63 - -#define MU_DIV_QR_THRESHOLD 1099 -#define MU_DIVAPPR_Q_THRESHOLD 1360 -#define MUPI_DIV_QR_THRESHOLD 138 -#define MU_BDIV_QR_THRESHOLD 889 -#define MU_BDIV_Q_THRESHOLD 1234 - -#define MATRIX22_STRASSEN_THRESHOLD 18 -#define HGCD_THRESHOLD 167 -#define GCD_DC_THRESHOLD 518 -#define GCDEXT_DC_THRESHOLD 378 -#define JACOBI_BASE_METHOD 2 - -#define GET_STR_DC_THRESHOLD 14 -#define GET_STR_PRECOMPUTE_THRESHOLD 25 -#define SET_STR_DC_THRESHOLD 577 -#define SET_STR_PRECOMPUTE_THRESHOLD 1217 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/logops_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/logops_n.asm deleted file mode 100644 index 1f2cd2a8f6384bf51f6325c2eae82ef2d9f901de..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/logops_n.asm +++ /dev/null @@ -1,295 +0,0 @@ -dnl S/390-32 logops. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb variant 1 variant 2 variant 3 -C rp!=up rp=up -C z900 ? ? ? ? -C z990 2.5 1 2.75 2.75 -C z9 ? ? ? -C z10 ? ? ? -C z196 ? ? ? - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`vp', `%r4') -define(`nn', `%r5') - -ifdef(`OPERATION_and_n',` - define(`func',`mpn_and_n') - define(`VARIANT_1') - define(`LOGOPC',`nc') - define(`LOGOP',`n')') -ifdef(`OPERATION_andn_n',` - define(`func',`mpn_andn_n') - define(`VARIANT_2') - define(`LOGOP',`n')') -ifdef(`OPERATION_nand_n',` - define(`func',`mpn_nand_n') - define(`VARIANT_3') - define(`LOGOP',`n')') -ifdef(`OPERATION_ior_n',` - define(`func',`mpn_ior_n') - define(`VARIANT_1') - define(`LOGOPC',`oc') - define(`LOGOP',`o')') -ifdef(`OPERATION_iorn_n',` - define(`func',`mpn_iorn_n') - define(`VARIANT_2') - define(`LOGOP',`o')') -ifdef(`OPERATION_nior_n',` - define(`func',`mpn_nior_n') - define(`VARIANT_3') - define(`LOGOP',`o')') -ifdef(`OPERATION_xor_n',` - define(`func',`mpn_xor_n') - define(`VARIANT_1') - define(`LOGOPC',`xc') - define(`LOGOP',`x')') -ifdef(`OPERATION_xnor_n',` - define(`func',`mpn_xnor_n') - define(`VARIANT_2') - define(`LOGOP',`x')') - -MULFUNC_PROLOGUE(mpn_and_n mpn_andn_n mpn_nand_n mpn_ior_n mpn_iorn_n mpn_nior_n mpn_xor_n mpn_xnor_n) - -ASM_START() -PROLOGUE(func) -ifdef(`VARIANT_1',` - cr rp, up - jne L(normal) - - sll nn, 2 - ahi nn, -1 - lr %r1, nn - srl %r1, 8 - ltr %r1, %r1 C < 256 bytes to copy? - je L(1) - -L(tp): LOGOPC 0(256, rp), 0(vp) - la rp, 256(rp) - la vp, 256(vp) - brct %r1, L(tp) - -L(1): bras %r1, L(2) C make r1 point to mvc insn - LOGOPC 0(1, rp), 0(vp) -L(2): ex nn, 0(%r1) C execute mvc with length ((nn-1) mod 256)+1 -L(rtn): br %r14 - - -L(normal): - stm %r6, %r8, 12(%r15) - ahi nn, 3 - lhi %r7, 3 - lr %r0, nn - srl %r0, 2 - nr %r7, nn C nn mod 4 - je L(b1) - chi %r7, 2 - jl L(b2) - jne L(top) - -L(b3): lm %r5, %r7, 0(up) - la up, 12(up) - LOGOP %r5, 0(vp) - LOGOP %r6, 4(vp) - LOGOP %r7, 8(vp) - stm %r5, %r7, 0(rp) - la rp, 12(rp) - la vp, 12(vp) - j L(mid) - -L(b1): l %r5, 0(up) - la up, 4(up) - LOGOP %r5, 0(vp) - st %r5, 0(rp) - la rp, 4(rp) - la vp, 4(vp) - j L(mid) - -L(b2): lm %r5, %r6, 0(up) - la up, 8(up) - LOGOP %r5, 0(vp) - LOGOP %r6, 4(vp) - stm %r5, %r6, 0(rp) - la rp, 8(rp) - la vp, 8(vp) - j L(mid) - -L(top): lm %r5, %r8, 0(up) - la up, 16(up) - LOGOP %r5, 0(vp) - LOGOP %r6, 4(vp) - LOGOP %r7, 8(vp) - LOGOP %r8, 12(vp) - stm %r5, %r8, 0(rp) - la rp, 16(rp) - la vp, 16(vp) -L(mid): brct %r0, L(top) - - lm %r6, %r8, 12(%r15) - br %r14 -') - -ifdef(`VARIANT_2',` - stm %r6, %r8, 12(%r15) - lhi %r1, -1 - - ahi nn, 3 - lhi %r7, 3 - lr %r0, nn - srl %r0, 2 - nr %r7, nn C nn mod 4 - je L(b1) - chi %r7, 2 - jl L(b2) - jne L(top) - -L(b3): lm %r5, %r7, 0(vp) - la vp, 12(vp) - xr %r5, %r1 - xr %r6, %r1 - xr %r7, %r1 - LOGOP %r5, 0(up) - LOGOP %r6, 4(up) - LOGOP %r7, 8(up) - stm %r5, %r7, 0(rp) - la rp, 12(rp) - la up, 12(up) - j L(mid) - -L(b1): l %r5, 0(vp) - la vp, 4(vp) - xr %r5, %r1 - LOGOP %r5, 0(up) - st %r5, 0(rp) - la rp, 4(rp) - la up, 4(up) - j L(mid) - -L(b2): lm %r5, %r6, 0(vp) - la vp, 8(vp) - xr %r5, %r1 - xr %r6, %r1 - LOGOP %r5, 0(up) - LOGOP %r6, 4(up) - stm %r5, %r6, 0(rp) - la rp, 8(rp) - la up, 8(up) - j L(mid) - -L(top): lm %r5, %r8, 0(vp) - la vp, 16(vp) - xr %r5, %r1 - xr %r6, %r1 - xr %r7, %r1 - xr %r8, %r1 - LOGOP %r5, 0(up) - LOGOP %r6, 4(up) - LOGOP %r7, 8(up) - LOGOP %r8, 12(up) - la up, 16(up) - stm %r5, %r8, 0(rp) - la rp, 16(rp) -L(mid): brct %r0, L(top) - - lm %r6, %r8, 12(%r15) - br %r14 -') - -ifdef(`VARIANT_3',` - stm %r6, %r8, 12(%r15) - lhi %r1, -1 - - ahi nn, 3 - lhi %r7, 3 - lr %r0, nn - srl %r0, 2 - nr %r7, nn C nn mod 4 - je L(b1) - chi %r7, 2 - jl L(b2) - jne L(top) - -L(b3): lm %r5, %r7, 0(vp) - la vp, 12(vp) - LOGOP %r5, 0(up) - LOGOP %r6, 4(up) - xr %r5, %r1 - xr %r6, %r1 - LOGOP %r7, 8(up) - xr %r7, %r1 - stm %r5, %r7, 0(rp) - la rp, 12(rp) - la up, 12(up) - j L(mid) - -L(b1): l %r5, 0(vp) - la vp, 4(vp) - LOGOP %r5, 0(up) - xr %r5, %r1 - st %r5, 0(rp) - la rp, 4(rp) - la up, 4(up) - j L(mid) - -L(b2): lm %r5, %r6, 0(vp) - la vp, 8(vp) - LOGOP %r5, 0(up) - LOGOP %r6, 4(up) - xr %r5, %r1 - xr %r6, %r1 - stm %r5, %r6, 0(rp) - la rp, 8(rp) - la up, 8(up) - j L(mid) - -L(top): lm %r5, %r8, 0(vp) - la vp, 16(vp) - LOGOP %r5, 0(up) - LOGOP %r6, 4(up) - xr %r5, %r1 - xr %r6, %r1 - LOGOP %r7, 8(up) - LOGOP %r8, 12(up) - xr %r7, %r1 - xr %r8, %r1 - stm %r5, %r8, 0(rp) - la up, 16(up) - la rp, 16(rp) -L(mid): brct %r0, L(top) - - lm %r6, %r8, 12(%r15) - br %r14 -') - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/lshift.asm deleted file mode 100644 index da7d76e844aff7a76ba857990119c3b855901ed2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/lshift.asm +++ /dev/null @@ -1,144 +0,0 @@ -dnl S/390-32 mpn_lshift. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 6 -C z990 3 -C z9 ? -C z10 ? -C z196 ? - -C TODO -C * - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') -define(`cnt', `%r5') - -ASM_START() -PROLOGUE(mpn_lshift) - lr %r1, n - sll %r1, 2 - stm %r6, %r12, 24(%r15) - la up, 0(%r1,up) C put up near end of U - la rp, 0(%r1,rp) C put rp near end of R - ahi up, -20 - ahi rp, -16 - lhi %r8, 32 - sr %r8, cnt - l %r12, 16(up) - srl %r12, 0(%r8) C return value - lhi %r7, 3 - nr %r7, n - srl n, 2 - je L(b0) - chi %r7, 2 - jl L(b1) - je L(b2) - -L(b3): l %r10, 16(up) - l %r11, 12(up) - l %r9, 8(up) - ahi up, -8 - lr %r8, %r11 - sldl %r10, 0(cnt) - sldl %r8, 0(cnt) - st %r10, 12(rp) - st %r8, 8(rp) - ahi rp, -8 - ltr n, n - je L(end) - j L(top) - -L(b2): l %r10, 16(up) - l %r11, 12(up) - ahi up, -4 - sldl %r10, 0(cnt) - st %r10, 12(rp) - ahi rp, -4 - ltr n, n - je L(end) - j L(top) - -L(b1): ltr n, n - je L(end) - j L(top) - -L(b0): l %r10,16(up) - l %r8, 12(up) - l %r6, 8(up) - l %r0, 4(up) - ahi up, -12 - lr %r11, %r8 - lr %r9, %r6 - lr %r7, %r0 - sldl %r10,0(cnt) - sldl %r8, 0(cnt) - sldl %r6, 0(cnt) - st %r10, 12(rp) - st %r8, 8(rp) - st %r6, 4(rp) - ahi rp, -12 - ahi n, -1 - je L(end) - - ALIGN(8) -L(top): l %r10, 16(up) - l %r8, 12(up) - l %r6, 8(up) - l %r0, 4(up) - l %r1, 0(up) - lr %r11, %r8 - lr %r9, %r6 - lr %r7, %r0 - ahi up, -16 - sldl %r10, 0(cnt) - sldl %r8, 0(cnt) - sldl %r6, 0(cnt) - sldl %r0, 0(cnt) - st %r10, 12(rp) - st %r8, 8(rp) - st %r6, 4(rp) - st %r0, 0(rp) - ahi rp, -16 - brct n, L(top) - -L(end): l %r10, 16(up) - sll %r10, 0(cnt) - st %r10, 12(rp) - - lr %r2, %r12 - lm %r6, %r12, 24(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/lshiftc.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/lshiftc.asm deleted file mode 100644 index f6016732494a607c2663e6fa5230edaa290efa6c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/lshiftc.asm +++ /dev/null @@ -1,156 +0,0 @@ -dnl S/390-32 mpn_lshiftc. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 7 -C z990 3.375 -C z9 ? -C z10 ? -C z196 ? - -C TODO -C * - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') -define(`cnt', `%r5') - -ASM_START() -PROLOGUE(mpn_lshiftc) - lr %r1, n - sll %r1, 2 - stm %r6, %r13, 24(%r15) - la up, 0(%r1,up) C put up near end of U - la rp, 0(%r1,rp) C put rp near end of R - ahi up, -20 - ahi rp, -16 - lhi %r8, 32 - sr %r8, cnt - l %r12, 16(up) - srl %r12, 0(%r8) C return value - lhi %r13, -1 - lhi %r7, 3 - nr %r7, n - srl n, 2 - je L(b0) - chi %r7, 2 - jl L(b1) - je L(b2) - -L(b3): l %r10, 16(up) - l %r11, 12(up) - l %r9, 8(up) - ahi up, -8 - lr %r8, %r11 - sldl %r10, 0(cnt) - sldl %r8, 0(cnt) - xr %r10, %r13 - xr %r8, %r13 - st %r10, 12(rp) - st %r8, 8(rp) - ahi rp, -8 - ltr n, n - je L(end) - j L(top) - -L(b2): l %r10, 16(up) - l %r11, 12(up) - ahi up, -4 - sldl %r10, 0(cnt) - xr %r10, %r13 - st %r10, 12(rp) - ahi rp, -4 - ltr n, n - je L(end) - j L(top) - -L(b1): ltr n, n - je L(end) - j L(top) - -L(b0): l %r10,16(up) - l %r8, 12(up) - l %r6, 8(up) - l %r0, 4(up) - ahi up, -12 - lr %r11, %r8 - lr %r9, %r6 - lr %r7, %r0 - sldl %r10,0(cnt) - sldl %r8, 0(cnt) - sldl %r6, 0(cnt) - xr %r10, %r13 - xr %r8, %r13 - xr %r6, %r13 - st %r10, 12(rp) - st %r8, 8(rp) - st %r6, 4(rp) - ahi rp, -12 - ahi n, -1 - je L(end) - - ALIGN(8) -L(top): l %r10, 16(up) - l %r8, 12(up) - l %r6, 8(up) - l %r0, 4(up) - l %r1, 0(up) - lr %r11, %r8 - lr %r9, %r6 - lr %r7, %r0 - ahi up, -16 - sldl %r10, 0(cnt) - sldl %r8, 0(cnt) - sldl %r6, 0(cnt) - sldl %r0, 0(cnt) - xr %r10, %r13 - xr %r8, %r13 - xr %r6, %r13 - xr %r0, %r13 - st %r10, 12(rp) - st %r8, 8(rp) - st %r6, 4(rp) - st %r0, 0(rp) - ahi rp, -16 - brct n, L(top) - -L(end): l %r10, 16(up) - sll %r10, 0(cnt) - xr %r10, %r13 - st %r10, 12(rp) - - lr %r2, %r12 - lm %r6, %r13, 24(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/mul_1.asm deleted file mode 100644 index e3ad0c59d8ce364aad70ef7ccec8cb456db64ee1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/mul_1.asm +++ /dev/null @@ -1,85 +0,0 @@ -dnl S/390 mpn_mul_1 -- Multiply a limb vector with a limb and store the -dnl result in a second limb vector. - -dnl Copyright 2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -define(`rp',2) -define(`up',3) -define(`n',4) -define(`vlimb',5) -define(`cylimb',7) - -ASM_START() -PROLOGUE(mpn_mul_1) - stm 6,7,24(15) - slr cylimb,cylimb # clear cylimb - ltr vlimb,vlimb - jnl .Loopp - -.Loopn: l 1,0(up) # load from u - lr 6,1 # - mr 0,vlimb # multiply signed - alr 0,6 # add vlimb to phi - sra 6,31 # make mask - nr 6,vlimb # 0 or vlimb - alr 0,6 # conditionally add vlimb to phi - alr 1,cylimb # add carry limb to plo - brc 8+4,+8 # branch if not carry - ahi 0,1 # increment phi - lr cylimb,0 # new cylimb - st 1,0(rp) # store - la up,4(,up) - la rp,4(,rp) - brct n,.Loopn - - lr 2,cylimb - lm 6,7,24(15) - br 14 - -.Loopp: l 1,0(up) # load from u - lr 6,1 # - mr 0,vlimb # multiply signed - sra 6,31 # make mask - nr 6,vlimb # 0 or vlimb - alr 0,6 # conditionally add vlimb to phi - alr 1,cylimb # add carry limb to plo - brc 8+4,+8 # branch if not carry - ahi 0,1 # increment phi - lr cylimb,0 # new cylimb - st 1,0(rp) # store - la up,4(,up) - la rp,4(,rp) - brct n,.Loopp - - lr 2,cylimb - lm 6,7,24(15) - br 14 -EPILOGUE(mpn_mul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/rshift.asm deleted file mode 100644 index 5f2cf37ca0a6928bbbfd1f4c18c721697d66381b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/rshift.asm +++ /dev/null @@ -1,138 +0,0 @@ -dnl S/390-32 mpn_rshift. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 6 -C z990 3 -C z9 ? -C z10 ? -C z196 ? - -C TODO -C * - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') -define(`cnt', `%r5') - -ASM_START() -PROLOGUE(mpn_rshift) - stm %r6, %r12, 24(%r15) - lhi %r8, 32 - sr %r8, cnt - l %r12, 0(up) - sll %r12, 0(%r8) C return value - lhi %r7, 3 - nr %r7, n - srl n, 2 - je L(b0) - chi %r7, 2 - jl L(b1) - je L(b2) - -L(b3): l %r11, 0(up) - l %r10, 4(up) - l %r8, 8(up) - ahi up, 8 - lr %r9, %r10 - srdl %r10, 0(cnt) - srdl %r8, 0(cnt) - st %r11, 0(rp) - st %r9, 4(rp) - ahi rp, 8 - ltr n, n - je L(end) - j L(top) - -L(b2): l %r11, 0(up) - l %r10, 4(up) - ahi up, 4 - srdl %r10, 0(cnt) - st %r11, 0(rp) - ahi rp, 4 - ltr n, n - je L(end) - j L(top) - -L(b1): ltr n, n - je L(end) - j L(top) - -L(b0): l %r11, 0(up) - l %r9, 4(up) - l %r7, 8(up) - l %r1, 12(up) - ahi up, 12 - lr %r10, %r9 - lr %r8, %r7 - lr %r6, %r1 - srdl %r10, 0(cnt) - srdl %r8, 0(cnt) - srdl %r6, 0(cnt) - st %r11, 0(rp) - st %r9, 4(rp) - st %r7, 8(rp) - ahi rp, 12 - ahi n, -1 - je L(end) - - ALIGN(8) -L(top): l %r11, 0(up) - l %r9, 4(up) - l %r7, 8(up) - l %r1, 12(up) - l %r0, 16(up) - lr %r10, %r9 - lr %r8, %r7 - lr %r6, %r1 - ahi up, 16 - srdl %r10, 0(cnt) - srdl %r8, 0(cnt) - srdl %r6, 0(cnt) - srdl %r0, 0(cnt) - st %r11, 0(rp) - st %r9, 4(rp) - st %r7, 8(rp) - st %r1, 12(rp) - ahi rp, 16 - brct n, L(top) - -L(end): l %r11, 0(up) - srl %r11, 0(cnt) - st %r11, 0(rp) - - lr %r2, %r12 - lm %r6, %r12, 24(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/submul_1.asm deleted file mode 100644 index da7d849d5d379bba4e82816d54d0dc571292d1ba..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_32/submul_1.asm +++ /dev/null @@ -1,93 +0,0 @@ -dnl S/390 mpn_submul_1 -- Multiply a limb vector with a limb and subtract the -dnl result from a second limb vector. - -dnl Copyright 2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -define(`rp',2) -define(`up',3) -define(`n',4) -define(`vlimb',5) -define(`cylimb',7) - -ASM_START() -PROLOGUE(mpn_submul_1) - stm 6,7,24(15) - slr cylimb,cylimb # clear cylimb - ltr vlimb,vlimb - jnl .Loopp - -.Loopn: l 1,0(up) # load from u - lr 6,1 # - mr 0,vlimb # multiply signed - alr 0,6 # add vlimb to phi - sra 6,31 # make mask - nr 6,vlimb # 0 or vlimb - alr 0,6 # conditionally add vlimb to phi - alr 1,cylimb # add carry limb to plo - brc 8+4,+8 # branch if not carry - ahi 0,1 # increment phi - l 6,0(rp) # load r limb - slr 6,1 # add u limb to plo - brc 2+1,+8 # branch if not carry - ahi 0,1 # increment phi - lr cylimb,0 # new cylimb - st 6,0(rp) # store - la up,4(,up) - la rp,4(,rp) - brct n,.Loopn - - lr 2,cylimb - lm 6,7,24(15) - br 14 - -.Loopp: l 1,0(up) # load from u - lr 6,1 # - mr 0,vlimb # multiply signed - sra 6,31 # make mask - nr 6,vlimb # 0 or vlimb - alr 0,6 # conditionally add vlimb to phi - alr 1,cylimb # add carry limb to plo - brc 8+4,+8 # branch if not carry - ahi 0,1 # increment phi - l 6,0(rp) # load r limb - slr 6,1 # add u limb to plo - brc 2+1,+8 # branch if not carry - ahi 0,1 # increment phi - lr cylimb,0 # new cylimb - st 6,0(rp) # store - la up,4(,up) - la rp,4(,rp) - brct n,.Loopp - - lr 2,cylimb - lm 6,7,24(15) - br 14 -EPILOGUE(mpn_submul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/README b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/README deleted file mode 100644 index 52609e8f1df788060d8c79cea05f84b6f078665b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/README +++ /dev/null @@ -1,88 +0,0 @@ -Copyright 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - -There are 5 generations of 64-but s390 processors, z900, z990, z9, -z10, and z196. The current GMP code was optimised for the two oldest, -z900 and z990. - - -mpn_copyi - -This code makes use of a loop around MVC. It almost surely runs very -close to optimally. A small improvement could be done by using one -MVC for size 256 bytes, now we use two (we use an extra MVC when -copying any multiple of 256 bytes). - - -mpn_copyd - -We have tried several feed-in variants here, branch tree, jump table -and computed goto. The fastest (on z990) turned out to be computed -goto. - -An approach not tried is EX of LMG and STMG, modifying the register set -on-the-fly. Using that trick, we could completely avoid using -separate feed-in paths. - - -mpn_lshift, mpn_rshift - -The current code runs at pipeline decode bandwidth on z990. - - -mpn_add_n, mpn_sub_n - -The current code is 4-way unrolled. It should be unrolled more, at -least 8x, in order to reach 2.5 c/l. - - -mpn_mul_1, mpn_addmul_1, mpn_submul_1 - -The current code is very naive, but due to the non-pipelined nature of -MLGR on z900 and z990, more sophisticated code would not gain much. - -On z10 one would need to cluster at least 4 MLGR together, in order to -reduce stalling. - -On z196, one surely want to use unrolling and pipelining, to perhaps -reach around 12 c/l. A major issue here and on z10 is ALCGR's 3 cycle -stalling. - - -mpn_mul_2, mpn_addmul_2 - -At least for older machines (z900, z990) with very slow MLGR, we -should use Karatsuba's algorithm on 2-limb units, making mul_2 and -addmul_2 the main multiplication primitives. The newer machines might -benefit less from this approach, perhaps in particular z10, where MLGR -clustering is more important. - -With Karatsuba, one could hope for around 16 cycles per accumulated -128 cross product, on z990. diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/addmul_1.asm deleted file mode 100644 index 84cca123613637b57c9872c214b7bd1a5cf110d5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/addmul_1.asm +++ /dev/null @@ -1,72 +0,0 @@ -dnl S/390-64 mpn_addmul_1 - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 34 -C z990 23 -C z9 ? -C z10 28 -C z196 ? - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') -define(`v0', `%r5') - -define(`z', `%r9') - -ASM_START() -PROLOGUE(mpn_addmul_1) - stmg %r9, %r12, 72(%r15) - lghi %r12, 0 C zero index register - aghi %r12, 0 C clear carry flag - lghi %r11, 0 C clear carry limb - lghi z, 0 C keep register zero - -L(top): lg %r1, 0(%r12,up) - lg %r10, 0(%r12,rp) - mlgr %r0, v0 - alcgr %r1, %r10 - alcgr %r0, z - algr %r1, %r11 - lgr %r11, %r0 - stg %r1, 0(%r12,rp) - la %r12, 8(%r12) - brctg n, L(top) - - lghi %r2, 0 - alcgr %r2, %r11 - - lmg %r9, %r12, 72(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/aorrlsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/aorrlsh1_n.asm deleted file mode 100644 index 697259efefbbe1c027804659e647798f16d2b70f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/aorrlsh1_n.asm +++ /dev/null @@ -1,168 +0,0 @@ -dnl S/390-64 mpn_addlsh1_n and mpn_rsblsh1_n. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 9 -C z990 4.75 -C z9 ? -C z10 11 -C z196 ? - -C TODO -C * Optimise for small n, avoid 'la' like in aors_n.asm. -C * Tune to reach 3.5 c/l. For addlsh1, we could let the main alcgr propagate -C carry to the lsh1 alcgr. -C * Compute RETVAL for sublsh1_n less stupidly. - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`vp', `%r4') -define(`n', `%r5') - -ifdef(`OPERATION_addlsh1_n',` - define(ADSB, alg) - define(ADSBC, alcg) - define(INITCY, `lghi %r9, -1') - define(RETVAL, `la %r2, 2(%r1,%r9)') - define(func, mpn_addlsh1_n) -') -ifdef(`OPERATION_rsblsh1_n',` - define(ADSB, slg) - define(ADSBC, slbg) - define(INITCY, `lghi %r9, 0') - define(RETVAL,`dnl - algr %r1, %r9 - lghi %r2, 1 - algr %r2, %r1') - define(func, mpn_rsblsh1_n) -') - -MULFUNC_PROLOGUE(mpn_addlsh1_n mpn_rsblsh1_n) - -ASM_START() -PROLOGUE(func) - stmg %r6, %r9, 48(%r15) - - aghi n, 3 - lghi %r7, 3 - srlg %r0, n, 2 - ngr %r7, n C n mod 4 - je L(b1) - cghi %r7, 2 - jl L(b2) - jne L(b0) - -L(b3): lmg %r5, %r7, 0(vp) - la vp, 24(vp) - - algr %r5, %r5 - alcgr %r6, %r6 - alcgr %r7, %r7 - slbgr %r1, %r1 - - ADSB %r5, 0(up) - ADSBC %r6, 8(up) - ADSBC %r7, 16(up) - la up, 24(up) - slbgr %r9, %r9 - - stmg %r5, %r7, 0(rp) - la rp, 24(rp) - brctg %r0, L(top) - j L(end) - -L(b0): lghi %r1, -1 - INITCY - j L(top) - -L(b1): lg %r5, 0(vp) - la vp, 8(vp) - - algr %r5, %r5 - slbgr %r1, %r1 - ADSB %r5, 0(up) - la up, 8(up) - slbgr %r9, %r9 - - stg %r5, 0(rp) - la rp, 8(rp) - brctg %r0, L(top) - j L(end) - -L(b2): lmg %r5, %r6, 0(vp) - la vp, 16(vp) - - algr %r5, %r5 - alcgr %r6, %r6 - slbgr %r1, %r1 - - ADSB %r5, 0(up) - ADSBC %r6, 8(up) - la up, 16(up) - slbgr %r9, %r9 - - stmg %r5, %r6, 0(rp) - la rp, 16(rp) - brctg %r0, L(top) - j L(end) - -L(top): lmg %r5, %r8, 0(vp) - la vp, 32(vp) - - aghi %r1, 1 C restore carry - - alcgr %r5, %r5 - alcgr %r6, %r6 - alcgr %r7, %r7 - alcgr %r8, %r8 - - slbgr %r1, %r1 C save carry - - aghi %r9, 1 C restore carry - - ADSBC %r5, 0(up) - ADSBC %r6, 8(up) - ADSBC %r7, 16(up) - ADSBC %r8, 24(up) - la up, 32(up) - - slbgr %r9, %r9 C save carry - - stmg %r5, %r8, 0(rp) - la rp, 32(rp) - brctg %r0, L(top) - -L(end): RETVAL - lmg %r6, %r9, 48(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/aors_n.asm deleted file mode 100644 index a3c3ca791c2345f5831a7dbc9e0f8e13b126cc1f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/aors_n.asm +++ /dev/null @@ -1,136 +0,0 @@ -dnl S/390-64 mpn_add_n and mpn_sub_n. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 5.5 -C z990 3 -C z9 ? -C z10 6 -C z196 ? - -C TODO -C * Optimise for small n -C * Use r0 and save/restore one less register -C * Using logops_n's v1 inner loop operand order make the loop about 20% -C faster, at the expense of highly alignment-dependent performance. - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`vp', `%r4') -define(`n', `%r5') - -ifdef(`OPERATION_add_n', ` - define(ADSB, alg) - define(ADSBCR, alcgr) - define(ADSBC, alcg) - define(RETVAL,`dnl - lghi %r2, 0 - alcgr %r2, %r2') - define(func, mpn_add_n) - define(func_nc, mpn_add_nc)') -ifdef(`OPERATION_sub_n', ` - define(ADSB, slg) - define(ADSBCR, slbgr) - define(ADSBC, slbg) - define(RETVAL,`dnl - slbgr %r2, %r2 - lcgr %r2, %r2') - define(func, mpn_sub_n) - define(func_nc, mpn_sub_nc)') - -MULFUNC_PROLOGUE(mpn_add_n mpn_sub_n) - -ASM_START() -PROLOGUE(func) - stmg %r6, %r8, 48(%r15) - - aghi n, 3 - lghi %r7, 3 - srlg %r1, n, 2 - ngr %r7, n C n mod 4 - je L(b1) - cghi %r7, 2 - jl L(b2) - jne L(b0) - -L(b3): lmg %r5, %r7, 0(up) - la up, 24(up) - ADSB %r5, 0(vp) - ADSBC %r6, 8(vp) - ADSBC %r7, 16(vp) - la vp, 24(vp) - stmg %r5, %r7, 0(rp) - la rp, 24(rp) - brctg %r1, L(top) - j L(end) - -L(b0): lmg %r5, %r8, 0(up) C This redundant insns is no mistake, - la up, 32(up) C it is needed to make main loop run - ADSB %r5, 0(vp) C fast for n = 0 (mod 4). - ADSBC %r6, 8(vp) - j L(m0) - -L(b1): lg %r5, 0(up) - la up, 8(up) - ADSB %r5, 0(vp) - la vp, 8(vp) - stg %r5, 0(rp) - la rp, 8(rp) - brctg %r1, L(top) - j L(end) - -L(b2): lmg %r5, %r6, 0(up) - la up, 16(up) - ADSB %r5, 0(vp) - ADSBC %r6, 8(vp) - la vp, 16(vp) - stmg %r5, %r6, 0(rp) - la rp, 16(rp) - brctg %r1, L(top) - j L(end) - -L(top): lmg %r5, %r8, 0(up) - la up, 32(up) - ADSBC %r5, 0(vp) - ADSBC %r6, 8(vp) -L(m0): ADSBC %r7, 16(vp) - ADSBC %r8, 24(vp) - la vp, 32(vp) - stmg %r5, %r8, 0(rp) - la rp, 32(rp) - brctg %r1, L(top) - -L(end): RETVAL - lmg %r6, %r8, 48(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/bdiv_dbm1c.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/bdiv_dbm1c.asm deleted file mode 100644 index 35e900a27975a95caceb749b272c7006ff16326b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/bdiv_dbm1c.asm +++ /dev/null @@ -1,65 +0,0 @@ -dnl S/390-64 mpn_bdiv_dbm1c - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 29 -C z990 22 -C z9 ? -C z10 19 -C z196 ? - -C INPUT PARAMETERS -define(`qp', `%r2') -define(`up', `%r3') -define(`n', `%r4') -define(`bd', `%r5') -define(`cy', `%r6') - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(mpn_bdiv_dbm1c) - stmg %r6, %r7, 48(%r15) - lghi %r7, 0 C zero index register - -L(top): lg %r1, 0(%r7,up) - mlgr %r0, bd - slgr %r6, %r1 - stg %r6, 0(%r7,qp) - la %r7, 8(%r7) - slbgr %r6, %r0 - brctg n, L(top) - - lgr %r2, %r6 - lmg %r6, %r7, 48(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/copyd.asm deleted file mode 100644 index 8631e19f00850145a2842f7bdd046a16be35741d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/copyd.asm +++ /dev/null @@ -1,144 +0,0 @@ -dnl S/390-64 mpn_copyd - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C cycles/limb -C z900 2.67 -C z990 1.5 -C z9 ? -C z10 1.8 -C z196 ? - -C FIXME: -C * Avoid saving/restoring callee-saves registers for n < 3. This could be -C done by setting rp=r1, up=r2, i=r0 and r3,r4,r5 for clock regs. -C We could then use r3...r10 in main loop. -C * Could we use some EX trick, modifying lmg/stmg, for the feed-in code? - -C INPUT PARAMETERS -define(`rp_param', `%r2') -define(`up_param', `%r3') -define(`n', `%r4') - -define(`rp', `%r8') -define(`up', `%r9') - -ASM_START() -PROLOGUE(mpn_copyd) - stmg %r6, %r11, 48(%r15) - - sllg %r1, n, 3 - la %r10, 8(n) - aghi %r1, -64 - srlg %r10, %r10, 3 - lghi %r11, -64 - - la rp, 0(%r1,rp_param) C FIXME use lay on z990 and later - la up, 0(%r1,up_param) C FIXME use lay on z990 and later - - lghi %r7, 7 - ngr %r7, n C n mod 8 - cghi %r7, 2 - jh L(b34567) - cghi %r7, 1 - je L(b1) - jh L(b2) - -L(b0): brctg %r10, L(top) - j L(end) - -L(b1): lg %r0, 56(up) - aghi up, -8 - stg %r0, 56(rp) - aghi rp, -8 - brctg %r10, L(top) - j L(end) - -L(b2): lmg %r0, %r1, 48(up) - aghi up, -16 - stmg %r0, %r1, 48(rp) - aghi rp, -16 - brctg %r10, L(top) - j L(end) - -L(b34567): - cghi %r7, 4 - jl L(b3) - je L(b4) - cghi %r7, 6 - je L(b6) - jh L(b7) - -L(b5): lmg %r0, %r4, 24(up) - aghi up, -40 - stmg %r0, %r4, 24(rp) - aghi rp, -40 - brctg %r10, L(top) - j L(end) - -L(b3): lmg %r0, %r2, 40(up) - aghi up, -24 - stmg %r0, %r2, 40(rp) - aghi rp, -24 - brctg %r10, L(top) - j L(end) - -L(b4): lmg %r0, %r3, 32(up) - aghi up, -32 - stmg %r0, %r3, 32(rp) - aghi rp, -32 - brctg %r10, L(top) - j L(end) - -L(b6): lmg %r0, %r5, 16(up) - aghi up, -48 - stmg %r0, %r5, 16(rp) - aghi rp, -48 - brctg %r10, L(top) - j L(end) - -L(b7): lmg %r0, %r6, 8(up) - aghi up, -56 - stmg %r0, %r6, 8(rp) - aghi rp, -56 - brctg %r10, L(top) - j L(end) - -L(top): lmg %r0, %r7, 0(up) - la up, 0(%r11,up) - stmg %r0, %r7, 0(rp) - la rp, 0(%r11,rp) - brctg %r10, L(top) - -L(end): lmg %r6, %r11, 48(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/copyi.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/copyi.asm deleted file mode 100644 index bfb88814eaac1ebc8693ca455dae35bb3835750f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/copyi.asm +++ /dev/null @@ -1,68 +0,0 @@ -dnl S/390-64 mpn_copyi - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C cycles/limb -C z900 1.25 -C z990 0.75 -C z9 ? -C z10 1 -C z196 ? - -C NOTE -C * This is based on GNU libc memcpy which was written by Martin Schwidefsky. - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') - -ASM_START() -PROLOGUE(mpn_copyi) - ltgr %r4, %r4 - sllg %r4, %r4, 3 - je L(rtn) - aghi %r4, -1 - srlg %r5, %r4, 8 - ltgr %r5, %r5 C < 256 bytes to copy? - je L(1) - -L(top): mvc 0(256, rp), 0(up) - la rp, 256(rp) - la up, 256(up) - brctg %r5, L(top) - -L(1): bras %r5, L(2) C make r5 point to mvc insn - mvc 0(1, rp), 0(up) -L(2): ex %r4, 0(%r5) C execute mvc with length ((n-1) mod 256)+1 -L(rtn): br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/gmp-mparam.h deleted file mode 100644 index dacd9966a4be215414f85f08d77972f0fd4cc821..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/gmp-mparam.h +++ /dev/null @@ -1,175 +0,0 @@ -/* S/390-64 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* 1200 MHz z990 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1P_METHOD 2 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 9 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 6 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 62 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 17 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 1 -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD 98 - -#define MUL_TOOM22_THRESHOLD 10 -#define MUL_TOOM33_THRESHOLD 41 -#define MUL_TOOM44_THRESHOLD 105 -#define MUL_TOOM6H_THRESHOLD 149 -#define MUL_TOOM8H_THRESHOLD 212 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 65 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 69 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 72 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 64 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 55 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 16 -#define SQR_TOOM3_THRESHOLD 57 -#define SQR_TOOM4_THRESHOLD 153 -#define SQR_TOOM6_THRESHOLD 204 -#define SQR_TOOM8_THRESHOLD 309 - -#define MULMID_TOOM42_THRESHOLD 20 - -#define MULMOD_BNM1_THRESHOLD 10 -#define SQRMOD_BNM1_THRESHOLD 11 - -#define MUL_FFT_MODF_THRESHOLD 220 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 220, 5}, { 11, 6}, { 6, 5}, { 13, 6}, \ - { 7, 5}, { 15, 6}, { 13, 7}, { 7, 6}, \ - { 15, 7}, { 8, 6}, { 17, 7}, { 9, 6}, \ - { 19, 7}, { 13, 8}, { 7, 7}, { 17, 8}, \ - { 9, 7}, { 19, 8}, { 13, 9}, { 7, 8}, \ - { 19, 9}, { 11, 8}, { 23,10}, { 7, 9}, \ - { 15, 8}, { 33, 9}, { 19, 8}, { 39, 9}, \ - { 23,10}, { 15, 9}, { 39,10}, { 23,11}, \ - { 15,10}, { 31, 9}, { 63,10}, { 39, 9}, \ - { 79,10}, { 47,11}, { 31,10}, { 63, 9}, \ - { 127, 8}, { 255,10}, { 71, 9}, { 143, 8}, \ - { 287,10}, { 79,11}, { 47,12}, { 31,11}, \ - { 63,10}, { 127, 9}, { 255, 8}, { 511,10}, \ - { 143, 9}, { 287,11}, { 79,10}, { 159, 9}, \ - { 319,10}, { 175, 9}, { 351, 8}, { 703, 7}, \ - { 1407,11}, { 95,10}, { 191, 9}, { 383,10}, \ - { 207,11}, { 111,10}, { 223,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,11}, { 143,10}, \ - { 287, 9}, { 575, 8}, { 1151,10}, { 319,11}, \ - { 175,10}, { 351, 9}, { 703,12}, { 95,11}, \ - { 191,10}, { 383, 9}, { 767,11}, { 207,10}, \ - { 415,11}, { 223,13}, { 8192,14}, { 16384,15}, \ - { 32768,16}, { 65536,17}, { 131072,18}, { 262144,19}, \ - { 524288,20}, {1048576,21}, {2097152,22}, {4194304,23}, \ - {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 97 -#define MUL_FFT_THRESHOLD 1728 - -#define SQR_FFT_MODF_THRESHOLD 212 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 212, 5}, { 7, 4}, { 15, 5}, { 13, 6}, \ - { 7, 5}, { 15, 6}, { 15, 7}, { 8, 6}, \ - { 17, 7}, { 13, 8}, { 7, 7}, { 17, 8}, \ - { 9, 7}, { 19, 8}, { 11, 7}, { 23, 8}, \ - { 13, 9}, { 7, 8}, { 19, 9}, { 11, 8}, \ - { 25,10}, { 7, 9}, { 15, 8}, { 31, 9}, \ - { 19, 8}, { 39, 9}, { 23,10}, { 15, 9}, \ - { 39,10}, { 23,11}, { 15,10}, { 31, 9}, \ - { 63,10}, { 47,11}, { 31,10}, { 63, 9}, \ - { 127, 8}, { 255,10}, { 71, 9}, { 143, 8}, \ - { 287,10}, { 79,11}, { 47,12}, { 31,11}, \ - { 63,10}, { 127, 9}, { 255, 8}, { 511,10}, \ - { 143, 9}, { 287,11}, { 79,10}, { 159, 9}, \ - { 319, 8}, { 639,10}, { 175, 9}, { 351, 8}, \ - { 703,10}, { 191, 9}, { 383, 8}, { 767,10}, \ - { 207, 9}, { 415,11}, { 111,10}, { 223,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 511,11}, \ - { 143,10}, { 287, 9}, { 575, 8}, { 1151,11}, \ - { 159,10}, { 319,11}, { 175,10}, { 351, 9}, \ - { 703,11}, { 191,10}, { 383,11}, { 207,10}, \ - { 415,11}, { 223,13}, { 8192,14}, { 16384,15}, \ - { 32768,16}, { 65536,17}, { 131072,18}, { 262144,19}, \ - { 524288,20}, {1048576,21}, {2097152,22}, {4194304,23}, \ - {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 93 -#define SQR_FFT_THRESHOLD 1600 - -#define MULLO_BASECASE_THRESHOLD 2 -#define MULLO_DC_THRESHOLD 33 -#define MULLO_MUL_N_THRESHOLD 3176 - -#define DC_DIV_QR_THRESHOLD 28 -#define DC_DIVAPPR_Q_THRESHOLD 107 -#define DC_BDIV_QR_THRESHOLD 31 -#define DC_BDIV_Q_THRESHOLD 78 - -#define INV_MULMOD_BNM1_THRESHOLD 43 -#define INV_NEWTON_THRESHOLD 129 -#define INV_APPR_THRESHOLD 117 - -#define BINV_NEWTON_THRESHOLD 149 -#define REDC_1_TO_REDC_N_THRESHOLD 38 - -#define MU_DIV_QR_THRESHOLD 748 -#define MU_DIVAPPR_Q_THRESHOLD 748 -#define MUPI_DIV_QR_THRESHOLD 65 -#define MU_BDIV_QR_THRESHOLD 562 -#define MU_BDIV_Q_THRESHOLD 734 - -#define POWM_SEC_TABLE 4,23,274,961,2783 - -#define MATRIX22_STRASSEN_THRESHOLD 11 -#define HGCD_THRESHOLD 79 -#define HGCD_APPR_THRESHOLD 70 -#define HGCD_REDUCE_THRESHOLD 1094 -#define GCD_DC_THRESHOLD 183 -#define GCDEXT_DC_THRESHOLD 148 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 30 -#define GET_STR_PRECOMPUTE_THRESHOLD 41 -#define SET_STR_DC_THRESHOLD 402 -#define SET_STR_PRECOMPUTE_THRESHOLD 1104 - -#define FAC_DSC_THRESHOLD 842 -#define FAC_ODD_THRESHOLD 0 /* always */ diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/invert_limb.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/invert_limb.asm deleted file mode 100644 index edcebddf1c03f80df87e1b73aa61747b9b0fd5e7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/invert_limb.asm +++ /dev/null @@ -1,94 +0,0 @@ -dnl S/390-64 mpn_invert_limb - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2011, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 142 -C z990 86 -C z9 ? -C z10 120 -C z196 ? - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(mpn_invert_limb) - stg %r9, 72(%r15) - srlg %r9, %r2, 55 - agr %r9, %r9 - larl %r4, approx_tab-512 - srlg %r3, %r2, 24 - aghi %r3, 1 - lghi %r5, 1 - llgh %r4, 0(%r9, %r4) - sllg %r9, %r4, 11 - msgr %r4, %r4 - msgr %r4, %r3 - srlg %r4, %r4, 40 - aghi %r9, -1 - sgr %r9, %r4 - sllg %r0, %r9, 60 - sllg %r1, %r9, 13 - msgr %r9, %r9 - msgr %r9, %r3 - sgr %r0, %r9 - ngr %r5, %r2 - srlg %r4, %r2, 1 - srlg %r3, %r0, 47 - agr %r3, %r1 - agr %r4, %r5 - msgr %r4, %r3 - srlg %r1, %r3, 1 - lcgr %r5, %r5 - ngr %r1, %r5 - sgr %r1, %r4 - mlgr %r0, %r3 - srlg %r9, %r0, 1 - sllg %r4, %r3, 31 - agr %r4, %r9 - lgr %r1, %r4 - mlgr %r0, %r2 - algr %r1, %r2 - alcgr %r0, %r2 - lgr %r2, %r4 - sgr %r2, %r0 - lg %r9, 72(%r15) - br %r14 -EPILOGUE() - RODATA - ALIGN(2) -approx_tab: -forloop(i,256,512-1,dnl -` .word eval(0x7fd00/i) -')dnl -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/logops_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/logops_n.asm deleted file mode 100644 index 914cfb6a41503e709bfd82b70ba86508b783451d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/logops_n.asm +++ /dev/null @@ -1,291 +0,0 @@ -dnl S/390-64 logops. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb variant 1 variant 2 variant 3 -C rp!=up rp=up -C z900 4.5 2.25 5.5 5.5 -C z990 2.75 2 3.25 3.25 -C z9 ? ? ? -C z10 3.25 3.75 3.75 -C z196 ? ? ? - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`vp', `%r4') -define(`n', `%r5') - -ifdef(`OPERATION_and_n',` - define(`func',`mpn_and_n') - define(`VARIANT_1') - define(`LOGOPC',`nc') - define(`LOGOP',`ng')') -ifdef(`OPERATION_andn_n',` - define(`func',`mpn_andn_n') - define(`VARIANT_2') - define(`LOGOP',`ng')') -ifdef(`OPERATION_nand_n',` - define(`func',`mpn_nand_n') - define(`VARIANT_3') - define(`LOGOP',`ng')') -ifdef(`OPERATION_ior_n',` - define(`func',`mpn_ior_n') - define(`VARIANT_1') - define(`LOGOPC',`oc') - define(`LOGOP',`og')') -ifdef(`OPERATION_iorn_n',` - define(`func',`mpn_iorn_n') - define(`VARIANT_2') - define(`LOGOP',`og')') -ifdef(`OPERATION_nior_n',` - define(`func',`mpn_nior_n') - define(`VARIANT_3') - define(`LOGOP',`og')') -ifdef(`OPERATION_xor_n',` - define(`func',`mpn_xor_n') - define(`VARIANT_1') - define(`LOGOPC',`xc') - define(`LOGOP',`xg')') -ifdef(`OPERATION_xnor_n',` - define(`func',`mpn_xnor_n') - define(`VARIANT_2') - define(`LOGOP',`xg')') - -MULFUNC_PROLOGUE(mpn_and_n mpn_andn_n mpn_nand_n mpn_ior_n mpn_iorn_n mpn_nior_n mpn_xor_n mpn_xnor_n) - -ASM_START() -PROLOGUE(func) -ifdef(`VARIANT_1',` - cgr rp, up - jne L(normal) - - sllg n, n, 3 - aghi n, -1 - srlg %r1, n, 8 - ltgr %r1, %r1 C < 256 bytes to copy? - je L(1) - -L(tp): LOGOPC 0(256, rp), 0(vp) - la rp, 256(rp) - la vp, 256(vp) - brctg %r1, L(tp) - -L(1): bras %r1, L(2) C make r1 point to mvc insn - LOGOPC 0(1, rp), 0(vp) -L(2): ex n, 0(%r1) C execute mvc with length ((n-1) mod 256)+1 -L(rtn): br %r14 - - -L(normal): - stmg %r6, %r8, 48(%r15) - aghi n, 3 - lghi %r7, 3 - srlg %r0, n, 2 - ngr %r7, n C n mod 4 - je L(b1) - cghi %r7, 2 - jl L(b2) - jne L(top) - -L(b3): lmg %r5, %r7, 0(up) - la up, 24(up) - LOGOP %r5, 0(vp) - LOGOP %r6, 8(vp) - LOGOP %r7, 16(vp) - stmg %r5, %r7, 0(rp) - la rp, 24(rp) - la vp, 24(vp) - j L(mid) - -L(b1): lg %r5, 0(up) - la up, 8(up) - LOGOP %r5, 0(vp) - stg %r5, 0(rp) - la rp, 8(rp) - la vp, 8(vp) - j L(mid) - -L(b2): lmg %r5, %r6, 0(up) - la up, 16(up) - LOGOP %r5, 0(vp) - LOGOP %r6, 8(vp) - stmg %r5, %r6, 0(rp) - la rp, 16(rp) - la vp, 16(vp) - j L(mid) - -L(top): lmg %r5, %r8, 0(up) - la up, 32(up) - LOGOP %r5, 0(vp) - LOGOP %r6, 8(vp) - LOGOP %r7, 16(vp) - LOGOP %r8, 24(vp) - stmg %r5, %r8, 0(rp) - la rp, 32(rp) - la vp, 32(vp) -L(mid): brctg %r0, L(top) - - lmg %r6, %r8, 48(%r15) - br %r14 -') - -ifdef(`VARIANT_2',` - stmg %r6, %r8, 48(%r15) - lghi %r1, -1 - - aghi n, 3 - lghi %r7, 3 - srlg %r0, n, 2 - ngr %r7, n C n mod 4 - je L(b1) - cghi %r7, 2 - jl L(b2) - jne L(top) - -L(b3): lmg %r5, %r7, 0(vp) - la vp, 24(vp) - xgr %r5, %r1 - xgr %r6, %r1 - xgr %r7, %r1 - LOGOP %r5, 0(up) - LOGOP %r6, 8(up) - LOGOP %r7, 16(up) - stmg %r5, %r7, 0(rp) - la rp, 24(rp) - la up, 24(up) - j L(mid) - -L(b1): lg %r5, 0(vp) - la vp, 8(vp) - xgr %r5, %r1 - LOGOP %r5, 0(up) - stg %r5, 0(rp) - la rp, 8(rp) - la up, 8(up) - j L(mid) - -L(b2): lmg %r5, %r6, 0(vp) - la vp, 16(vp) - xgr %r5, %r1 - xgr %r6, %r1 - LOGOP %r5, 0(up) - LOGOP %r6, 8(up) - stmg %r5, %r6, 0(rp) - la rp, 16(rp) - la up, 16(up) - j L(mid) - -L(top): lmg %r5, %r8, 0(vp) - la vp, 32(vp) - xgr %r5, %r1 - xgr %r6, %r1 - xgr %r7, %r1 - xgr %r8, %r1 - LOGOP %r5, 0(up) - LOGOP %r6, 8(up) - LOGOP %r7, 16(up) - LOGOP %r8, 24(up) - la up, 32(up) - stmg %r5, %r8, 0(rp) - la rp, 32(rp) -L(mid): brctg %r0, L(top) - - lmg %r6, %r8, 48(%r15) - br %r14 -') - -ifdef(`VARIANT_3',` - stmg %r6, %r8, 48(%r15) - lghi %r1, -1 - - aghi n, 3 - lghi %r7, 3 - srlg %r0, n, 2 - ngr %r7, n C n mod 4 - je L(b1) - cghi %r7, 2 - jl L(b2) - jne L(top) - -L(b3): lmg %r5, %r7, 0(vp) - la vp, 24(vp) - LOGOP %r5, 0(up) - LOGOP %r6, 8(up) - xgr %r5, %r1 - xgr %r6, %r1 - LOGOP %r7, 16(up) - xgr %r7, %r1 - stmg %r5, %r7, 0(rp) - la rp, 24(rp) - la up, 24(up) - j L(mid) - -L(b1): lg %r5, 0(vp) - la vp, 8(vp) - LOGOP %r5, 0(up) - xgr %r5, %r1 - stg %r5, 0(rp) - la rp, 8(rp) - la up, 8(up) - j L(mid) - -L(b2): lmg %r5, %r6, 0(vp) - la vp, 16(vp) - LOGOP %r5, 0(up) - LOGOP %r6, 8(up) - xgr %r5, %r1 - xgr %r6, %r1 - stmg %r5, %r6, 0(rp) - la rp, 16(rp) - la up, 16(up) - j L(mid) - -L(top): lmg %r5, %r8, 0(vp) - la vp, 32(vp) - LOGOP %r5, 0(up) - LOGOP %r6, 8(up) - xgr %r5, %r1 - xgr %r6, %r1 - LOGOP %r7, 16(up) - LOGOP %r8, 24(up) - xgr %r7, %r1 - xgr %r8, %r1 - stmg %r5, %r8, 0(rp) - la up, 32(up) - la rp, 32(rp) -L(mid): brctg %r0, L(top) - - lmg %r6, %r8, 48(%r15) - br %r14 -') - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/lshift.asm deleted file mode 100644 index 4dae035a62fae333a49510fb44ee3dbdaee365d5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/lshift.asm +++ /dev/null @@ -1,196 +0,0 @@ -dnl S/390-64 mpn_lshift. - -dnl Copyright 2011, 2012, 2014 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 7 -C z990 3 -C z9 ? -C z10 6 -C z196 ? - -C NOTES -C * This uses discrete loads and stores in a software pipeline. Using lmg and -C stmg is not faster. -C * One could assume more pipelining could approach 2.5 c/l, but we have not -C found any 8-way loop that runs better than the current 4-way loop. -C * Consider using the same feed-in code for 1 <= n <= 3 as for n mod 4, -C similarly to the x86_64 sqr_basecase feed-in. - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') -define(`cnt', `%r5') - -define(`tnc', `%r6') - -ASM_START() -PROLOGUE(mpn_lshift) - cghi n, 3 - jh L(gt1) - - stmg %r6, %r7, 48(%r15) - larl %r1, L(tab)-4 - lcgr tnc, cnt - sllg n, n, 2 - b 0(n,%r1) -L(tab): j L(n1) - j L(n2) - j L(n3) - -L(n1): lg %r1, 0(up) - sllg %r0, %r1, 0(cnt) - stg %r0, 0(rp) - srlg %r2, %r1, 0(tnc) - lg %r6, 48(%r15) C restoring r7 not needed - br %r14 - -L(n2): lg %r1, 8(up) - srlg %r4, %r1, 0(tnc) - sllg %r0, %r1, 0(cnt) - j L(cj) - -L(n3): lg %r1, 16(up) - srlg %r4, %r1, 0(tnc) - sllg %r0, %r1, 0(cnt) - lg %r1, 8(up) - srlg %r7, %r1, 0(tnc) - ogr %r7, %r0 - sllg %r0, %r1, 0(cnt) - stg %r7, 16(rp) -L(cj): lg %r1, 0(up) - srlg %r7, %r1, 0(tnc) - ogr %r7, %r0 - sllg %r0, %r1, 0(cnt) - stg %r7, 8(rp) - stg %r0, 0(rp) - lgr %r2, %r4 - lmg %r6, %r7, 48(%r15) - br %r14 - -L(gt1): stmg %r6, %r13, 48(%r15) - lcgr tnc, cnt C tnc = -cnt - - sllg %r1, n, 3 - srlg %r0, n, 2 C loop count - - agr up, %r1 C point up at end of U - agr rp, %r1 C point rp at end of R - aghi up, -56 - aghi rp, -40 - - lghi %r7, 3 - ngr %r7, n - je L(b0) - cghi %r7, 2 - jl L(b1) - je L(b2) - -L(b3): lg %r7, 48(up) - srlg %r9, %r7, 0(tnc) - sllg %r11, %r7, 0(cnt) - lg %r8, 40(up) - lg %r7, 32(up) - srlg %r4, %r8, 0(tnc) - sllg %r13, %r8, 0(cnt) - ogr %r11, %r4 - la rp, 16(rp) - j L(lm3) - -L(b2): lg %r8, 48(up) - lg %r7, 40(up) - srlg %r9, %r8, 0(tnc) - sllg %r13, %r8, 0(cnt) - la rp, 24(rp) - la up, 8(up) - j L(lm2) - -L(b1): lg %r7, 48(up) - srlg %r9, %r7, 0(tnc) - sllg %r11, %r7, 0(cnt) - lg %r8, 40(up) - lg %r7, 32(up) - srlg %r4, %r8, 0(tnc) - sllg %r10, %r8, 0(cnt) - ogr %r11, %r4 - la rp, 32(rp) - la up, 16(up) - j L(lm1) - -L(b0): lg %r8, 48(up) - lg %r7, 40(up) - srlg %r9, %r8, 0(tnc) - sllg %r10, %r8, 0(cnt) - la rp, 40(rp) - la up, 24(up) - j L(lm0) - - ALIGN(8) -L(top): srlg %r4, %r8, 0(tnc) - sllg %r13, %r8, 0(cnt) - ogr %r11, %r4 - stg %r10, 24(rp) -L(lm3): stg %r11, 16(rp) -L(lm2): srlg %r12, %r7, 0(tnc) - sllg %r11, %r7, 0(cnt) - lg %r8, 24(up) - lg %r7, 16(up) - ogr %r13, %r12 - srlg %r4, %r8, 0(tnc) - sllg %r10, %r8, 0(cnt) - ogr %r11, %r4 - stg %r13, 8(rp) -L(lm1): stg %r11, 0(rp) -L(lm0): srlg %r12, %r7, 0(tnc) - aghi rp, -32 - sllg %r11, %r7, 0(cnt) - lg %r8, 8(up) - lg %r7, 0(up) - aghi up, -32 - ogr %r10, %r12 - brctg %r0, L(top) - -L(end): srlg %r4, %r8, 0(tnc) - sllg %r13, %r8, 0(cnt) - ogr %r11, %r4 - stg %r10, 24(rp) - stg %r11, 16(rp) - srlg %r12, %r7, 0(tnc) - sllg %r11, %r7, 0(cnt) - ogr %r13, %r12 - stg %r13, 8(rp) - stg %r11, 0(rp) - lgr %r2, %r9 - - lmg %r6, %r13, 48(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/lshiftc.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/lshiftc.asm deleted file mode 100644 index 92552d529a31942117379f22289f1ad987abb9dc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/lshiftc.asm +++ /dev/null @@ -1,207 +0,0 @@ -dnl S/390-64 mpn_lshiftc. - -dnl Copyright 2011, 2014 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 9 -C z990 3.5 -C z9 ? -C z10 7 -C z196 ? - -C NOTES -C * See notes in lshift.asm. - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') -define(`cnt', `%r5') - -define(`tnc', `%r6') - -ASM_START() -PROLOGUE(mpn_lshiftc) - cghi n, 3 - jh L(gt1) - - stmg %r6, %r8, 48(%r15) - larl %r1, L(tab)-4 - lcgr tnc, cnt - sllg n, n, 2 - lghi %r8, -1 - b 0(n,%r1) -L(tab): j L(n1) - j L(n2) - j L(n3) - -L(n1): lg %r1, 0(up) - sllg %r0, %r1, 0(cnt) - xgr %r0, %r8 - stg %r0, 0(rp) - srlg %r2, %r1, 0(tnc) - lmg %r6, %r8, 48(%r15) - br %r14 - -L(n2): lg %r1, 8(up) - srlg %r4, %r1, 0(tnc) - sllg %r0, %r1, 0(cnt) - j L(cj) - -L(n3): lg %r1, 16(up) - srlg %r4, %r1, 0(tnc) - sllg %r0, %r1, 0(cnt) - lg %r1, 8(up) - srlg %r7, %r1, 0(tnc) - ogr %r7, %r0 - sllg %r0, %r1, 0(cnt) - xgr %r7, %r8 - stg %r7, 16(rp) -L(cj): lg %r1, 0(up) - srlg %r7, %r1, 0(tnc) - ogr %r7, %r0 - sllg %r0, %r1, 0(cnt) - xgr %r7, %r8 - xgr %r0, %r8 - stg %r7, 8(rp) - stg %r0, 0(rp) - lgr %r2, %r4 - lmg %r6, %r8, 48(%r15) - br %r14 - -L(gt1): stmg %r6, %r14, 48(%r15) - lcgr tnc, cnt C tnc = -cnt - - sllg %r1, n, 3 - srlg %r0, n, 2 C loop count - - agr up, %r1 C point up at end of U - agr rp, %r1 C point rp at end of R - aghi up, -56 - aghi rp, -40 - - lghi %r7, 3 - lghi %r14, -1 - ngr %r7, n - je L(b0) - cghi %r7, 2 - jl L(b1) - je L(b2) - -L(b3): lg %r7, 48(up) - srlg %r9, %r7, 0(tnc) - sllg %r11, %r7, 0(cnt) - lg %r8, 40(up) - lg %r7, 32(up) - srlg %r4, %r8, 0(tnc) - sllg %r13, %r8, 0(cnt) - ogr %r11, %r4 - la rp, 16(rp) - xgr %r11, %r14 - j L(lm3) - -L(b2): lg %r8, 48(up) - lg %r7, 40(up) - srlg %r9, %r8, 0(tnc) - sllg %r13, %r8, 0(cnt) - la rp, 24(rp) - la up, 8(up) - j L(lm2) - -L(b1): lg %r7, 48(up) - srlg %r9, %r7, 0(tnc) - sllg %r11, %r7, 0(cnt) - lg %r8, 40(up) - lg %r7, 32(up) - srlg %r4, %r8, 0(tnc) - sllg %r10, %r8, 0(cnt) - ogr %r11, %r4 - la rp, 32(rp) - la up, 16(up) - xgr %r11, %r14 - j L(lm1) - -L(b0): lg %r8, 48(up) - lg %r7, 40(up) - srlg %r9, %r8, 0(tnc) - sllg %r10, %r8, 0(cnt) - la rp, 40(rp) - la up, 24(up) - j L(lm0) - - ALIGN(8) -L(top): srlg %r4, %r8, 0(tnc) - sllg %r13, %r8, 0(cnt) - ogr %r11, %r4 - xgr %r10, %r14 - xgr %r11, %r14 - stg %r10, 24(rp) -L(lm3): stg %r11, 16(rp) -L(lm2): srlg %r12, %r7, 0(tnc) - sllg %r11, %r7, 0(cnt) - lg %r8, 24(up) - lg %r7, 16(up) - ogr %r13, %r12 - srlg %r4, %r8, 0(tnc) - sllg %r10, %r8, 0(cnt) - ogr %r11, %r4 - xgr %r13, %r14 - xgr %r11, %r14 - stg %r13, 8(rp) -L(lm1): stg %r11, 0(rp) -L(lm0): srlg %r12, %r7, 0(tnc) - aghi rp, -32 - sllg %r11, %r7, 0(cnt) - lg %r8, 8(up) - lg %r7, 0(up) - aghi up, -32 - ogr %r10, %r12 - brctg %r0, L(top) - -L(end): srlg %r4, %r8, 0(tnc) - sllg %r13, %r8, 0(cnt) - ogr %r11, %r4 - xgr %r10, %r14 - xgr %r11, %r14 - stg %r10, 24(rp) - stg %r11, 16(rp) - srlg %r12, %r7, 0(tnc) - sllg %r11, %r7, 0(cnt) - ogr %r13, %r12 - xgr %r13, %r14 - xgr %r11, %r14 - stg %r13, 8(rp) - stg %r11, 0(rp) - lgr %r2, %r9 - - lmg %r6, %r14, 48(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/mod_34lsub1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/mod_34lsub1.asm deleted file mode 100644 index fd40011a8c7ce5b1688f1d15a4d9fde6a9cae00b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/mod_34lsub1.asm +++ /dev/null @@ -1,109 +0,0 @@ -dnl S/390-64 mpn_mod_34lsub1 - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 5.8 -C z990 2 -C z9 ? -C z10 4.5 -C z196 ? - -C TODO -C * Optimise summation code, see x86_64. - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`n', `%r3') - -ASM_START() -PROLOGUE(mpn_mod_34lsub1) - stmg %r7, %r12, 56(%r15) - lghi %r11, 0 - lghi %r12, 0 - lghi %r0, 0 - lghi %r8, 0 - lghi %r9, 0 - lghi %r10, 0 - lghi %r7, 0 - aghi %r3, -3 - jl .L3 - -L(top): alg %r0, 0(%r2) - alcg %r12, 8(%r2) - alcg %r11, 16(%r2) - alcgr %r8, %r7 - la %r2, 24(%r2) - aghi %r3, -3 - jnl L(top) - - lgr %r7, %r8 - srlg %r1, %r11, 16 - nihh %r7, 0 C 0xffffffffffff - agr %r7, %r1 - srlg %r8, %r8, 48 - agr %r7, %r8 - sllg %r11, %r11, 32 - nihh %r11, 0 - agr %r7, %r11 -.L3: - cghi %r3, -3 - je .L6 - alg %r0, 0(%r2) - alcgr %r10, %r10 - cghi %r3, -2 - je .L6 - alg %r12, 8(%r2) - alcgr %r9, %r9 -.L6: - srlg %r1, %r0, 48 - nihh %r0, 0 C 0xffffffffffff - agr %r0, %r1 - agr %r0, %r7 - srlg %r1, %r12, 32 - agr %r0, %r1 - srlg %r1, %r10, 32 - agr %r0, %r1 - llgfr %r12, %r12 - srlg %r1, %r9, 16 - sllg %r12, %r12, 16 - llgfr %r10, %r10 - agr %r0, %r1 - llill %r2, 65535 - agr %r0, %r12 - sllg %r10, %r10, 16 - ngr %r2, %r9 - agr %r0, %r10 - sllg %r2, %r2, 32 - agr %r2, %r0 - lmg %r7, %r12, 56(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/mul_1.asm deleted file mode 100644 index a8f6da9a0fb6687228876d46d5f268520530b3ec..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/mul_1.asm +++ /dev/null @@ -1,66 +0,0 @@ -dnl S/390-64 mpn_mul_1 - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 29 -C z990 22 -C z9 ? -C z10 20 -C z196 ? - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') -define(`v0', `%r5') - -ASM_START() -PROLOGUE(mpn_mul_1) - stmg %r11, %r12, 88(%r15) - lghi %r12, 0 C zero index register - aghi %r12, 0 C clear carry flag - lghi %r11, 0 C clear carry limb - -L(top): lg %r1, 0(%r12,up) - mlgr %r0, v0 - alcgr %r1, %r11 - lgr %r11, %r0 C copy high part to carry limb - stg %r1, 0(%r12,rp) - la %r12, 8(%r12) - brctg n, L(top) - - lghi %r2, 0 - alcgr %r2, %r11 - - lmg %r11, %r12, 88(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/mul_basecase.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/mul_basecase.asm deleted file mode 100644 index 7d14ea98d262bc9e011615b0fbf319e83096b51c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/mul_basecase.asm +++ /dev/null @@ -1,130 +0,0 @@ -dnl S/390-64 mpn_mul_basecase. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 ? -C z990 23 -C z9 ? -C z10 28 -C z196 ? - -C TODO -C * Perhaps add special case for un <= 2. -C * Replace loops by faster code. The mul_1 and addmul_1 loops could be sped -C up by about 10%. - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`un', `%r4') -define(`vp', `%r5') -define(`vn', `%r6') - -define(`zero', `%r8') - -ASM_START() -PROLOGUE(mpn_mul_basecase) - cghi un, 2 - jhe L(ge2) - -C un = vn = 1 - lg %r1, 0(vp) - mlg %r0, 0(up) - stg %r1, 0(rp) - stg %r0, 8(rp) - br %r14 - -L(ge2): C jne L(gen) - - -L(gen): -C mul_1 ======================================================================= - - stmg %r6, %r12, 48(%r15) - lghi zero, 0 - aghi un, -1 - - lg %r7, 0(vp) - lg %r11, 0(up) - lghi %r12, 8 C init index register - mlgr %r10, %r7 - lgr %r9, un - stg %r11, 0(rp) - cr %r15, %r15 C clear carry flag - -L(tm): lg %r1, 0(%r12,up) - mlgr %r0, %r7 - alcgr %r1, %r10 - lgr %r10, %r0 C copy high part to carry limb - stg %r1, 0(%r12,rp) - la %r12, 8(%r12) - brctg %r9, L(tm) - - alcgr %r0, zero - stg %r0, 0(%r12,rp) - -C addmul_1 loop =============================================================== - - aghi vn, -1 - je L(outer_end) -L(outer_loop): - - la rp, 8(rp) C rp += 1 - la vp, 8(vp) C up += 1 - lg %r7, 0(vp) - lg %r11, 0(up) - lghi %r12, 8 C init index register - mlgr %r10, %r7 - lgr %r9, un - alg %r11, 0(rp) - stg %r11, 0(rp) - -L(tam): lg %r1, 0(%r12,up) - lg %r11, 0(%r12,rp) - mlgr %r0, %r7 - alcgr %r1, %r11 - alcgr %r0, zero - algr %r1, %r10 - lgr %r10, %r0 - stg %r1, 0(%r12,rp) - la %r12, 8(%r12) - brctg %r9, L(tam) - - alcgr %r0, zero - stg %r0, 0(%r12,rp) - - brctg vn, L(outer_loop) -L(outer_end): - - lmg %r6, %r12, 48(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/rshift.asm deleted file mode 100644 index e870971650c139eef764e0f7e12a02135802c9a3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/rshift.asm +++ /dev/null @@ -1,195 +0,0 @@ -dnl S/390-64 mpn_rshift. - -dnl Copyright 2011, 2014 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 7 -C z990 3 -C z9 ? -C z10 6 -C z196 ? - -C NOTES -C * See notes in lshift.asm. - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') -define(`cnt', `%r5') - -define(`tnc', `%r6') - -ASM_START() -PROLOGUE(mpn_rshift) - cghi n, 3 - jh L(gt1) - - stmg %r6, %r7, 48(%r15) - larl %r1, L(tab)-4 - lcgr tnc, cnt - sllg n, n, 2 - b 0(n,%r1) -L(tab): j L(n1) - j L(n2) - j L(n3) - -L(n1): lg %r1, 0(up) - srlg %r0, %r1, 0(cnt) - stg %r0, 0(rp) - sllg %r2, %r1, 0(tnc) - lg %r6, 48(%r15) C restoring r7 not needed - br %r14 - -L(n2): lg %r1, 0(up) - sllg %r4, %r1, 0(tnc) - srlg %r0, %r1, 0(cnt) - lg %r1, 8(up) - sllg %r7, %r1, 0(tnc) - ogr %r7, %r0 - srlg %r0, %r1, 0(cnt) - stg %r7, 0(rp) - stg %r0, 8(rp) - lgr %r2, %r4 - lmg %r6, %r7, 48(%r15) - br %r14 - - -L(n3): lg %r1, 0(up) - sllg %r4, %r1, 0(tnc) - srlg %r0, %r1, 0(cnt) - lg %r1, 8(up) - sllg %r7, %r1, 0(tnc) - ogr %r7, %r0 - srlg %r0, %r1, 0(cnt) - stg %r7, 0(rp) - lg %r1, 16(up) - sllg %r7, %r1, 0(tnc) - ogr %r7, %r0 - srlg %r0, %r1, 0(cnt) - stg %r7, 8(rp) - stg %r0, 16(rp) - lgr %r2, %r4 - lmg %r6, %r7, 48(%r15) - br %r14 - -L(gt1): stmg %r6, %r13, 48(%r15) - lcgr tnc, cnt C tnc = -cnt - - sllg %r1, n, 3 - srlg %r0, n, 2 C loop count - - lghi %r7, 3 - ngr %r7, n - je L(b0) - cghi %r7, 2 - jl L(b1) - je L(b2) - -L(b3): aghi rp, -8 - lg %r7, 0(up) - sllg %r9, %r7, 0(tnc) - srlg %r11, %r7, 0(cnt) - lg %r8, 8(up) - lg %r7, 16(up) - sllg %r4, %r8, 0(tnc) - srlg %r13, %r8, 0(cnt) - ogr %r11, %r4 - la up, 24(up) - j L(lm3) - -L(b2): aghi rp, -16 - lg %r8, 0(up) - lg %r7, 8(up) - sllg %r9, %r8, 0(tnc) - srlg %r13, %r8, 0(cnt) - la up, 16(up) - j L(lm2) - -L(b1): aghi rp, -24 - lg %r7, 0(up) - sllg %r9, %r7, 0(tnc) - srlg %r11, %r7, 0(cnt) - lg %r8, 8(up) - lg %r7, 16(up) - sllg %r4, %r8, 0(tnc) - srlg %r10, %r8, 0(cnt) - ogr %r11, %r4 - la up, 8(up) - j L(lm1) - -L(b0): aghi rp, -32 - lg %r8, 0(up) - lg %r7, 8(up) - sllg %r9, %r8, 0(tnc) - srlg %r10, %r8, 0(cnt) - j L(lm0) - - ALIGN(8) -L(top): sllg %r4, %r8, 0(tnc) - srlg %r13, %r8, 0(cnt) - ogr %r11, %r4 - stg %r10, 0(rp) -L(lm3): stg %r11, 8(rp) -L(lm2): sllg %r12, %r7, 0(tnc) - srlg %r11, %r7, 0(cnt) - lg %r8, 0(up) - lg %r7, 8(up) - ogr %r13, %r12 - sllg %r4, %r8, 0(tnc) - srlg %r10, %r8, 0(cnt) - ogr %r11, %r4 - stg %r13, 16(rp) -L(lm1): stg %r11, 24(rp) -L(lm0): sllg %r12, %r7, 0(tnc) - aghi rp, 32 - srlg %r11, %r7, 0(cnt) - lg %r8, 16(up) - lg %r7, 24(up) - aghi up, 32 - ogr %r10, %r12 - brctg %r0, L(top) - -L(end): sllg %r4, %r8, 0(tnc) - srlg %r13, %r8, 0(cnt) - ogr %r11, %r4 - stg %r10, 0(rp) - stg %r11, 8(rp) - sllg %r12, %r7, 0(tnc) - srlg %r11, %r7, 0(cnt) - ogr %r13, %r12 - stg %r13, 16(rp) - stg %r11, 24(rp) - lgr %r2, %r9 - - lmg %r6, %r13, 48(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/sqr_basecase.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/sqr_basecase.asm deleted file mode 100644 index bf31bd5546856d77d782aa7a2793c71712671de7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/sqr_basecase.asm +++ /dev/null @@ -1,203 +0,0 @@ -dnl S/390-64 mpn_sqr_basecase. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 ? -C z990 23 -C z9 ? -C z10 28 -C z196 ? - -C TODO -C * Clean up. -C * Stop iterating addmul_1 loop at latest for n = 2, implement longer tail. -C This will ask for basecase handling of n = 3. -C * Update counters and pointers more straightforwardly, possibly lowering -C register usage. -C * Should we use this allocation-free style for more sqr_basecase asm -C implementations? The only disadvantage is that it requires R != U. -C * Replace loops by faster code. The mul_1 and addmul_1 loops could be sped -C up by about 10%. The sqr_diag_addlsh1 loop could probably be sped up even -C more. - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') - -define(`zero', `%r8') -define(`rp_saved', `%r9') -define(`up_saved', `%r13') -define(`n_saved', `%r14') - -ASM_START() -PROLOGUE(mpn_sqr_basecase) - aghi n, -2 - jhe L(ge2) - -C n = 1 - lg %r5, 0(up) - mlgr %r4, %r5 - stg %r5, 0(rp) - stg %r4, 8(rp) - br %r14 - -L(ge2): jne L(gen) - -C n = 2 - stmg %r6, %r8, 48(%r15) - lghi zero, 0 - - lg %r5, 0(up) - mlgr %r4, %r5 C u0 * u0 - lg %r1, 8(up) - mlgr %r0, %r1 C u1 * u1 - stg %r5, 0(rp) - - lg %r7, 0(up) - mlg %r6, 8(up) C u0 * u1 - algr %r7, %r7 - alcgr %r6, %r6 - alcgr %r0, zero - - algr %r4, %r7 - alcgr %r1, %r6 - alcgr %r0, zero - stg %r4, 8(rp) - stg %r1, 16(rp) - stg %r0, 24(rp) - - lmg %r6, %r8, 48(%r15) - br %r14 - -L(gen): -C mul_1 ======================================================================= - - stmg %r6, %r14, 48(%r15) - lghi zero, 0 - lgr up_saved, up - lgr rp_saved, rp - lgr n_saved, n - - lg %r6, 0(up) - lg %r11, 8(up) - lghi %r12, 16 C init index register - mlgr %r10, %r6 - lgr %r5, n - stg %r11, 8(rp) - cr %r15, %r15 C clear carry flag - -L(tm): lg %r1, 0(%r12,up) - mlgr %r0, %r6 - alcgr %r1, %r10 - lgr %r10, %r0 C copy high part to carry limb - stg %r1, 0(%r12,rp) - la %r12, 8(%r12) - brctg %r5, L(tm) - - alcgr %r0, zero - stg %r0, 0(%r12,rp) - -C addmul_1 loop =============================================================== - - aghi n, -1 - je L(outer_end) -L(outer_loop): - - la rp, 16(rp) C rp += 2 - la up, 8(up) C up += 1 - lg %r6, 0(up) - lg %r11, 8(up) - lghi %r12, 16 C init index register - mlgr %r10, %r6 - lgr %r5, n - alg %r11, 8(rp) - stg %r11, 8(rp) - -L(tam): lg %r1, 0(%r12,up) - lg %r7, 0(%r12,rp) - mlgr %r0, %r6 - alcgr %r1, %r7 - alcgr %r0, zero - algr %r1, %r10 - lgr %r10, %r0 - stg %r1, 0(%r12,rp) - la %r12, 8(%r12) - brctg %r5, L(tam) - - alcgr %r0, zero - stg %r0, 0(%r12,rp) - - brctg n, L(outer_loop) -L(outer_end): - - lg %r6, 8(up) - lg %r1, 16(up) - lgr %r7, %r0 C Same as: lg %r7, 24(,rp) - mlgr %r0, %r6 - algr %r1, %r7 - alcgr %r0, zero - stg %r1, 24(rp) - stg %r0, 32(rp) - -C sqr_diag_addlsh1 ============================================================ - -define(`up', `up_saved') -define(`rp', `rp_saved') - la n, 1(n_saved) - - lg %r1, 0(up) - mlgr %r0, %r1 - stg %r1, 0(rp) -C clr %r15, %r15 C clear carry (already clear per above) - -L(top): lg %r11, 8(up) - la up, 8(up) - lg %r6, 8(rp) - lg %r7, 16(rp) - mlgr %r10, %r11 - alcgr %r6, %r6 - alcgr %r7, %r7 - alcgr %r10, zero C propagate carry to high product limb - algr %r6, %r0 - alcgr %r7, %r11 - stmg %r6, %r7, 8(rp) - la rp, 16(rp) - lgr %r0, %r10 C copy carry limb - brctg n, L(top) - - alcgr %r0, zero - stg %r0, 8(rp) - - lmg %r6, %r14, 48(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/sublsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/sublsh1_n.asm deleted file mode 100644 index 50f127acef9b1e21e29f8c4ef5e877a40da0b906..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/sublsh1_n.asm +++ /dev/null @@ -1,169 +0,0 @@ -dnl S/390-64 mpn_sublsh1_n - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 10 -C z990 5 -C z9 ? -C z10 12 -C z196 ? - -C TODO -C * Optimise for small n -C * Compute RETVAL for sublsh1_n less stupidly - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`vp', `%r4') -define(`n', `%r5') - -ifdef(`OPERATION_addlsh1_n',` - define(ADSBR, algr) - define(ADSBCR, alcgr) - define(INITCY, `lghi %r13, -1') - define(RETVAL, `la %r2, 2(%r1,%r13)') - define(func, mpn_addlsh1_n) -') -ifdef(`OPERATION_sublsh1_n',` - define(ADSBR, slgr) - define(ADSBCR, slbgr) - define(INITCY, `lghi %r13, 0') - define(RETVAL,`dnl - slgr %r1, %r13 - lghi %r2, 1 - algr %r2, %r1') - define(func, mpn_sublsh1_n) -') - -ASM_START() -PROLOGUE(mpn_sublsh1_n) - stmg %r6, %r13, 48(%r15) - - aghi n, 3 - lghi %r7, 3 - srlg %r0, n, 2 - ngr %r7, n C n mod 4 - je L(b1) - cghi %r7, 2 - jl L(b2) - jne L(b0) - -L(b3): lmg %r5, %r7, 0(up) - la up, 24(up) - lmg %r9, %r11, 0(vp) - la vp, 24(vp) - - algr %r9, %r9 - alcgr %r10, %r10 - alcgr %r11, %r11 - slbgr %r1, %r1 - - ADSBR %r5, %r9 - ADSBCR %r6, %r10 - ADSBCR %r7, %r11 - slbgr %r13, %r13 - - stmg %r5, %r7, 0(rp) - la rp, 24(rp) - brctg %r0, L(top) - j L(end) - -L(b0): lghi %r1, -1 - INITCY - j L(top) - -L(b1): lg %r5, 0(up) - la up, 8(up) - lg %r9, 0(vp) - la vp, 8(vp) - - algr %r9, %r9 - slbgr %r1, %r1 - ADSBR %r5, %r9 - slbgr %r13, %r13 - - stg %r5, 0(rp) - la rp, 8(rp) - brctg %r0, L(top) - j L(end) - -L(b2): lmg %r5, %r6, 0(up) - la up, 16(up) - lmg %r9, %r10, 0(vp) - la vp, 16(vp) - - algr %r9, %r9 - alcgr %r10, %r10 - slbgr %r1, %r1 - - ADSBR %r5, %r9 - ADSBCR %r6, %r10 - slbgr %r13, %r13 - - stmg %r5, %r6, 0(rp) - la rp, 16(rp) - brctg %r0, L(top) - j L(end) - -L(top): lmg %r9, %r12, 0(vp) - la vp, 32(vp) - - aghi %r1, 1 C restore carry - - alcgr %r9, %r9 - alcgr %r10, %r10 - alcgr %r11, %r11 - alcgr %r12, %r12 - - slbgr %r1, %r1 C save carry - - lmg %r5, %r8, 0(up) - la up, 32(up) - - aghi %r13, 1 C restore carry - - ADSBCR %r5, %r9 - ADSBCR %r6, %r10 - ADSBCR %r7, %r11 - ADSBCR %r8, %r12 - - slbgr %r13, %r13 C save carry - - stmg %r5, %r8, 0(rp) - la rp, 32(rp) - brctg %r0, L(top) - -L(end): RETVAL - lmg %r6, %r13, 48(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/submul_1.asm deleted file mode 100644 index 91c4b06631be3c1f0e0d6c687bbfd6721ce37483..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/submul_1.asm +++ /dev/null @@ -1,70 +0,0 @@ -dnl S/390-64 mpn_submul_1 - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C z900 35 -C z990 24 -C z9 ? -C z10 28 -C z196 ? - -C INPUT PARAMETERS -define(`rp', `%r2') -define(`up', `%r3') -define(`n', `%r4') -define(`v0', `%r5') - -ASM_START() -PROLOGUE(mpn_submul_1) - stmg %r9, %r12, 72(%r15) - lghi %r12, 0 - slgr %r11, %r11 - -L(top): lg %r1, 0(%r12, up) - lg %r10, 0(%r12, rp) - mlgr %r0, v0 - slbgr %r10, %r1 - slbgr %r9, %r9 - slgr %r0, %r9 C conditional incr - slgr %r10, %r11 - lgr %r11, %r0 - stg %r10, 0(%r12, rp) - la %r12, 8(%r12) - brctg %r4, L(top) - - lgr %r2, %r11 - slbgr %r9, %r9 - slgr %r2, %r9 - - lmg %r9, %r12, 72(%r15) - br %r14 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/z10/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/z10/gmp-mparam.h deleted file mode 100644 index c3a9416131ce5bb11e02834031a9d1773101a522..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/s390_64/z10/gmp-mparam.h +++ /dev/null @@ -1,233 +0,0 @@ -/* S/390-64 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2011, 2014, 2015 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* 4400 MHz IBM z10 */ -/* FFT tuning limit = 30 M */ -/* Generated by tuneup.c, 2015-10-09, gcc 4.8 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 3 -#define MOD_1_1P_METHOD 2 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 3 -#define MOD_1N_TO_MOD_1_1_THRESHOLD 6 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 5 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 15 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 17 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 24 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 2 -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD 48 - -#define MUL_TOOM22_THRESHOLD 9 -#define MUL_TOOM33_THRESHOLD 65 -#define MUL_TOOM44_THRESHOLD 94 -#define MUL_TOOM6H_THRESHOLD 129 -#define MUL_TOOM8H_THRESHOLD 187 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 65 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 61 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 62 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 64 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 85 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 11 -#define SQR_TOOM3_THRESHOLD 80 -#define SQR_TOOM4_THRESHOLD 118 -#define SQR_TOOM6_THRESHOLD 189 -#define SQR_TOOM8_THRESHOLD 236 - -#define MULMID_TOOM42_THRESHOLD 24 - -#define MULMOD_BNM1_THRESHOLD 7 -#define SQRMOD_BNM1_THRESHOLD 9 - -#define MUL_FFT_MODF_THRESHOLD 252 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 252, 5}, { 9, 6}, { 5, 5}, { 11, 6}, \ - { 6, 5}, { 13, 6}, { 7, 5}, { 15, 6}, \ - { 13, 7}, { 7, 6}, { 15, 7}, { 13, 8}, \ - { 7, 7}, { 15, 8}, { 9, 7}, { 19, 8}, \ - { 11, 7}, { 23, 8}, { 13, 9}, { 7, 8}, \ - { 15, 7}, { 31, 8}, { 19, 9}, { 11, 8}, \ - { 27,10}, { 7, 9}, { 15, 8}, { 31, 9}, \ - { 19, 8}, { 41, 9}, { 27,10}, { 15, 9}, \ - { 39,10}, { 23, 9}, { 47,11}, { 15,10}, \ - { 31, 9}, { 67,10}, { 39, 9}, { 79,10}, \ - { 47,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255,10}, { 71, 9}, { 143, 8}, { 287, 7}, \ - { 575, 6}, { 1151,10}, { 79,11}, { 47,12}, \ - { 31,11}, { 63,10}, { 127, 9}, { 255, 8}, \ - { 511,10}, { 143,11}, { 79,10}, { 159, 9}, \ - { 319, 8}, { 639,10}, { 175, 8}, { 703,11}, \ - { 95,10}, { 191, 9}, { 383, 8}, { 767, 9}, \ - { 415, 8}, { 831, 7}, { 1663,10}, { 239, 9}, \ - { 479,12}, { 63,11}, { 127,10}, { 255, 9}, \ - { 511,11}, { 143,10}, { 287, 9}, { 575, 8}, \ - { 1151,10}, { 319, 9}, { 639,11}, { 175,10}, \ - { 351, 9}, { 703, 8}, { 1407, 7}, { 2815,11}, \ - { 191,10}, { 383, 9}, { 767,10}, { 415,11}, \ - { 223,10}, { 447, 9}, { 895,13}, { 63,11}, \ - { 255,10}, { 575, 9}, { 1151,12}, { 159,11}, \ - { 319,10}, { 639, 9}, { 1279,10}, { 703, 9}, \ - { 1407,12}, { 191,10}, { 767,11}, { 415,12}, \ - { 223,11}, { 447,10}, { 895,11}, { 479,13}, \ - { 127,12}, { 255,11}, { 511,12}, { 287,10}, \ - { 1151,12}, { 319,11}, { 703,10}, { 1407, 9}, \ - { 2815,12}, { 383,11}, { 767,12}, { 415,11}, \ - { 831,10}, { 1663,12}, { 447,11}, { 895,10}, \ - { 1791, 9}, { 3583,12}, { 479,11}, { 959,10}, \ - { 1919, 9}, { 3839,12}, { 511, 9}, { 4095, 6}, \ - { 32767, 8}, { 8447,11}, { 1151,13}, { 319,12}, \ - { 639,10}, { 2559,12}, { 703,10}, { 2815,12}, \ - { 831,11}, { 1663,12}, { 895,11}, { 1791,12}, \ - { 959,11}, { 1919,14}, { 255,13}, { 511,11}, \ - { 2047,12}, { 1215,10}, { 4863,11}, { 2559,14}, \ - { 383,12}, { 1535,13}, { 831,12}, { 1663,13}, \ - { 895,12}, { 1791,11}, { 3583,15}, { 255,14}, \ - { 511,13}, { 1151,14}, { 639,13}, { 1279,12}, \ - { 2559,13}, { 1407,12}, { 2815,14}, { 767,13}, \ - { 1663,10}, { 13311,14}, { 895,13}, { 1791,12}, \ - { 3583,13}, { 1919,12}, { 3839,10}, { 15359,14}, \ - { 1151,13}, { 2431,12}, { 4863,14}, { 1279,13}, \ - { 2559,14}, { 1407,13}, { 2815,15}, { 767,14}, \ - { 1791,13}, { 8192,14}, { 16384,15}, { 32768,16}, \ - { 65536,17}, { 131072,18}, { 262144,19}, { 524288,20}, \ - {1048576,21}, {2097152,22}, {4194304,23}, {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 200 -#define MUL_FFT_THRESHOLD 1728 - -#define SQR_FFT_MODF_THRESHOLD 212 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 212, 5}, { 7, 4}, { 15, 5}, { 9, 4}, \ - { 19, 6}, { 5, 5}, { 11, 6}, { 6, 5}, \ - { 13, 6}, { 7, 5}, { 15, 6}, { 9, 5}, \ - { 19, 6}, { 13, 7}, { 7, 6}, { 15, 7}, \ - { 9, 6}, { 19, 7}, { 13, 8}, { 7, 7}, \ - { 16, 8}, { 9, 7}, { 19, 8}, { 11, 7}, \ - { 23, 8}, { 13, 9}, { 7, 8}, { 19, 9}, \ - { 11, 8}, { 25,10}, { 7, 9}, { 15, 8}, \ - { 31, 9}, { 23,10}, { 15, 9}, { 39,10}, \ - { 23,11}, { 15,10}, { 31, 9}, { 63,10}, \ - { 47,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255,10}, { 71, 9}, { 143, 8}, { 287, 7}, \ - { 575,11}, { 47,12}, { 31,11}, { 63,10}, \ - { 127, 9}, { 255, 8}, { 511,10}, { 143, 9}, \ - { 287, 8}, { 575, 7}, { 1151,11}, { 79,10}, \ - { 159, 9}, { 319,10}, { 175, 9}, { 351, 8}, \ - { 703, 7}, { 1407,10}, { 191, 9}, { 383,10}, \ - { 207,11}, { 111,10}, { 223,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,11}, { 143,10}, \ - { 287, 9}, { 575, 8}, { 1151,11}, { 159,10}, \ - { 319, 9}, { 639,11}, { 175,10}, { 351, 9}, \ - { 703, 8}, { 1407,11}, { 191,10}, { 383,11}, \ - { 207,10}, { 415,11}, { 223,10}, { 447,13}, \ - { 63,12}, { 127,11}, { 255,10}, { 511,11}, \ - { 287,10}, { 575, 9}, { 1151,12}, { 159,11}, \ - { 319,10}, { 639,11}, { 351,10}, { 703, 9}, \ - { 1407,12}, { 191,11}, { 383,10}, { 767,11}, \ - { 415,12}, { 223,11}, { 447,10}, { 895, 9}, \ - { 1791,13}, { 127,12}, { 255,11}, { 511,12}, \ - { 287,11}, { 575,10}, { 1151,11}, { 607,12}, \ - { 319,11}, { 639,12}, { 351,11}, { 703,10}, \ - { 1407,13}, { 191,12}, { 383,11}, { 767,12}, \ - { 415,11}, { 831,10}, { 1663,12}, { 447,11}, \ - { 895,10}, { 1791,14}, { 127,13}, { 255,12}, \ - { 511,11}, { 1023,10}, { 2047,11}, { 1151,12}, \ - { 607,13}, { 319,11}, { 1279, 9}, { 5119, 8}, \ - { 10751, 4}, { 172031, 7}, { 22015,11}, { 1407,10}, \ - { 2943, 8}, { 11775, 9}, { 6143,12}, { 831, 8}, \ - { 13311,11}, { 1791,14}, { 255,11}, { 2047,13}, \ - { 575,12}, { 1151,13}, { 639,12}, { 1279,13}, \ - { 703,12}, { 1407,11}, { 2815,12}, { 1471, 9}, \ - { 11775,13}, { 767,12}, { 1535,13}, { 831,12}, \ - { 1663,13}, { 895,11}, { 3583,13}, { 959,12}, \ - { 1919,10}, { 7679, 9}, { 15359,11}, { 3967,14}, \ - { 511,13}, { 1151,12}, { 2303,13}, { 1215,14}, \ - { 639,13}, { 1279,12}, { 2559,14}, { 767,13}, \ - { 1663,14}, { 895,15}, { 511,13}, { 2047,14}, \ - { 1279,13}, { 2815,15}, { 767,14}, { 1791,13}, \ - { 3583,16}, { 65536,17}, { 131072,18}, { 262144,19}, \ - { 524288,20}, {1048576,21}, {2097152,22}, {4194304,23}, \ - {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 201 -#define SQR_FFT_THRESHOLD 1344 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 33 -#define MULLO_MUL_N_THRESHOLD 2586 -#define SQRLO_BASECASE_THRESHOLD 0 /* always */ -#define SQRLO_DC_THRESHOLD 63 -#define SQRLO_SQR_THRESHOLD 2663 - -#define DC_DIV_QR_THRESHOLD 37 -#define DC_DIVAPPR_Q_THRESHOLD 143 -#define DC_BDIV_QR_THRESHOLD 37 -#define DC_BDIV_Q_THRESHOLD 86 - -#define INV_MULMOD_BNM1_THRESHOLD 16 -#define INV_NEWTON_THRESHOLD 147 -#define INV_APPR_THRESHOLD 141 - -#define BINV_NEWTON_THRESHOLD 141 -#define REDC_1_TO_REDC_N_THRESHOLD 39 - -#define MU_DIV_QR_THRESHOLD 807 -#define MU_DIVAPPR_Q_THRESHOLD 807 -#define MUPI_DIV_QR_THRESHOLD 81 -#define MU_BDIV_QR_THRESHOLD 654 -#define MU_BDIV_Q_THRESHOLD 792 - -#define POWM_SEC_TABLE 1,28,163,1083,2111 - -#define GET_STR_DC_THRESHOLD 19 -#define GET_STR_PRECOMPUTE_THRESHOLD 33 -#define SET_STR_DC_THRESHOLD 898 -#define SET_STR_PRECOMPUTE_THRESHOLD 2031 - -#define FAC_DSC_THRESHOLD 372 -#define FAC_ODD_THRESHOLD 23 - -#define MATRIX22_STRASSEN_THRESHOLD 17 -#define HGCD_THRESHOLD 105 -#define HGCD_APPR_THRESHOLD 111 -#define HGCD_REDUCE_THRESHOLD 1137 -#define GCD_DC_THRESHOLD 285 -#define GCDEXT_DC_THRESHOLD 210 -#define JACOBI_BASE_METHOD 4 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sh/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sh/add_n.asm deleted file mode 100644 index 79d17d01299baee9c37717fb1f8d5bc9919066a3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sh/add_n.asm +++ /dev/null @@ -1,59 +0,0 @@ -dnl SH mpn_add_n -- Add two limb vectors of the same length > 0 and store sum -dnl in a third limb vector. - -dnl Copyright 1995, 1997, 2000, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C rp r4 -C up r5 -C vp r6 -C n r7 - -changecom(blah) C disable # to make all C comments below work - -ASM_START() -PROLOGUE(mpn_add_n) - mov #0,r3 C clear cy save reg - -L(top): mov.l @r5+,r1 - mov.l @r6+,r2 - shlr r3 C restore cy - addc r2,r1 - movt r3 C save cy - mov.l r1,@r4 - dt r7 - bf.s L(top) - add #4,r4 - - rts - mov r3,r0 C return carry-out from most significant limb -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sh/sh2/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sh/sh2/addmul_1.asm deleted file mode 100644 index c914b29541e53d7fe0afce2e71526dc7b2de0232..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sh/sh2/addmul_1.asm +++ /dev/null @@ -1,65 +0,0 @@ -dnl SH2 mpn_addmul_1 -- Multiply a limb vector with a limb and add the result -dnl to a second limb vector. - -dnl Copyright 1995, 2000, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr r4 -C s1_ptr r5 -C size r6 -C s2_limb r7 - -changecom(blah) C disable # to make all C comments below work - -ASM_START() -PROLOGUE(mpn_addmul_1) - mov #0,r2 C cy_limb = 0 - mov #0,r0 C Keep r0 = 0 for entire loop - clrt - -L(top): mov.l @r5+,r3 - dmulu.l r3,r7 - sts macl,r1 - addc r2,r1 C lo_prod += old cy_limb - sts mach,r2 C new cy_limb = hi_prod - mov.l @r4,r3 - addc r0,r2 C cy_limb += T, T = 0 - addc r3,r1 - addc r0,r2 C cy_limb += T, T = 0 - dt r6 - mov.l r1,@r4 - bf.s L(top) - add #4,r4 - - rts - mov r2,r0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sh/sh2/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sh/sh2/mul_1.asm deleted file mode 100644 index 83548a6953bc4ef853fcbbcc1de2d86b627e6fa5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sh/sh2/mul_1.asm +++ /dev/null @@ -1,62 +0,0 @@ -dnl SH2 mpn_mul_1 -- Multiply a limb vector with a limb and store the result -dnl in a second limb vector. - -dnl Copyright 1995, 2000, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr r4 -C s1_ptr r5 -C size r6 -C s2_limb r7 - -changecom(blah) C disable # to make all C comments below work - -ASM_START() -PROLOGUE(mpn_mul_1) - mov #0,r2 C cy_limb = 0 - mov #0,r0 C Keep r0 = 0 for entire loop - clrt - -L(top): mov.l @r5+,r3 - dmulu.l r3,r7 - sts macl,r1 - addc r2,r1 - sts mach,r2 - addc r0,r2 C propagate carry to cy_limb (dt clobbers T) - dt r6 - mov.l r1,@r4 - bf.s L(top) - add #4,r4 - - rts - mov r2,r0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sh/sh2/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sh/sh2/submul_1.asm deleted file mode 100644 index bef2abd9b2533bcccbbf2af898e57d9bbb6f8796..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sh/sh2/submul_1.asm +++ /dev/null @@ -1,65 +0,0 @@ -dnl SH2 mpn_submul_1 -- Multiply a limb vector with a limb and subtract the -dnl result from a second limb vector. - -dnl Copyright 1995, 2000, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr r4 -C s1_ptr r5 -C size r6 -C s2_limb r7 - -changecom(blah) C disable # to make all C comments below work - -ASM_START() -PROLOGUE(mpn_submul_1) - mov #0,r2 C cy_limb = 0 - mov #0,r0 C Keep r0 = 0 for entire loop - clrt - -L(top): mov.l @r5+,r3 - dmulu.l r3,r7 - sts macl,r1 - addc r2,r1 C lo_prod += old cy_limb - sts mach,r2 C new cy_limb = hi_prod - mov.l @r4,r3 - addc r0,r2 C cy_limb += T, T = 0 - subc r1,r3 - addc r0,r2 C cy_limb += T, T = 0 - dt r6 - mov.l r3,@r4 - bf.s L(top) - add #4,r4 - - rts - mov r2,r0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sh/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sh/sub_n.asm deleted file mode 100644 index 465bc806fa9581d32743af220303846a137df704..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sh/sub_n.asm +++ /dev/null @@ -1,59 +0,0 @@ -dnl SH mpn_sub_n -- Subtract two limb vectors of the same length > 0 and store -dnl difference in a third limb vector. - -dnl Copyright 1995, 1997, 2000, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C rp r4 -C up r5 -C vp r6 -C n r7 - -changecom(blah) C disable # to make all C comments below work - -ASM_START() -PROLOGUE(mpn_sub_n) - mov #0,r3 C clear cy save reg - -L(top): mov.l @r5+,r1 - mov.l @r6+,r2 - shlr r3 C restore cy - subc r2,r1 - movt r3 C save cy - mov.l r1,@r4 - dt r7 - bf.s L(top) - add #4,r4 - - rts - mov r3,r0 C return carry-out from most significant limb -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/README b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/README deleted file mode 100644 index f2dd1160f79b05400479072a02178fd5e694874a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/README +++ /dev/null @@ -1,71 +0,0 @@ -Copyright 1996, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - -This directory contains mpn functions for various SPARC chips. Code that -runs only on version 8 SPARC implementations, is in the v8 subdirectory. - -RELEVANT OPTIMIZATION ISSUES - - Load and Store timing - -On most early SPARC implementations, the ST instructions takes multiple -cycles, while a STD takes just a single cycle more than an ST. For the CPUs -in SPARCstation I and II, the times are 3 and 4 cycles, respectively. -Therefore, combining two ST instructions into a STD when possible is a -significant optimization. - -Later SPARC implementations have single cycle ST. - -For SuperSPARC, we can perform just one memory instruction per cycle, even -if up to two integer instructions can be executed in its pipeline. For -programs that perform so many memory operations that there are not enough -non-memory operations to issue in parallel with all memory operations, using -LDD and STD when possible helps. - -UltraSPARC-1/2 has very slow integer multiplication. In the v9 subdirectory, -we therefore use floating-point multiplication. - -STATUS - -1. On a SuperSPARC, mpn_lshift and mpn_rshift run at 3 cycles/limb, or 2.5 - cycles/limb asymptotically. We could optimize speed for special counts - by using ADDXCC. - -2. On a SuperSPARC, mpn_add_n and mpn_sub_n runs at 2.5 cycles/limb, or 2 - cycles/limb asymptotically. - -3. mpn_mul_1 runs at what is believed to be optimal speed. - -4. On SuperSPARC, mpn_addmul_1 and mpn_submul_1 could both be improved by a - cycle by avoiding one of the add instructions. See a29k/addmul_1. - -The speed of the code for other SPARC implementations is uncertain. diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/add_n.asm deleted file mode 100644 index 8549195d92c2b9fd345db028b91c711b1c4814d1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/add_n.asm +++ /dev/null @@ -1,245 +0,0 @@ -dnl SPARC mpn_add_n -- Add two limb vectors of the same length > 0 and store -dnl sum in a third limb vector. - -dnl Copyright 1995, 1996, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -define(res_ptr,%o0) -define(s1_ptr,%o1) -define(s2_ptr,%o2) -define(n,%o3) - -ASM_START() -PROLOGUE(mpn_add_n) - xor s2_ptr,res_ptr,%g1 - andcc %g1,4,%g0 - bne L(1) C branch if alignment differs - nop -C ** V1a ** -L(0): andcc res_ptr,4,%g0 C res_ptr unaligned? Side effect: cy=0 - be L(v1) C if no, branch - nop -C Add least significant limb separately to align res_ptr and s2_ptr - ld [s1_ptr],%g4 - add s1_ptr,4,s1_ptr - ld [s2_ptr],%g2 - add s2_ptr,4,s2_ptr - add n,-1,n - addcc %g4,%g2,%o4 - st %o4,[res_ptr] - add res_ptr,4,res_ptr -L(v1): addx %g0,%g0,%o4 C save cy in register - cmp n,2 C if n < 2 ... - bl L(end2) C ... branch to tail code - subcc %g0,%o4,%g0 C restore cy - - ld [s1_ptr+0],%g4 - addcc n,-10,n - ld [s1_ptr+4],%g1 - ldd [s2_ptr+0],%g2 - blt L(fin1) - subcc %g0,%o4,%g0 C restore cy -C Add blocks of 8 limbs until less than 8 limbs remain -L(loop1): - addxcc %g4,%g2,%o4 - ld [s1_ptr+8],%g4 - addxcc %g1,%g3,%o5 - ld [s1_ptr+12],%g1 - ldd [s2_ptr+8],%g2 - std %o4,[res_ptr+0] - addxcc %g4,%g2,%o4 - ld [s1_ptr+16],%g4 - addxcc %g1,%g3,%o5 - ld [s1_ptr+20],%g1 - ldd [s2_ptr+16],%g2 - std %o4,[res_ptr+8] - addxcc %g4,%g2,%o4 - ld [s1_ptr+24],%g4 - addxcc %g1,%g3,%o5 - ld [s1_ptr+28],%g1 - ldd [s2_ptr+24],%g2 - std %o4,[res_ptr+16] - addxcc %g4,%g2,%o4 - ld [s1_ptr+32],%g4 - addxcc %g1,%g3,%o5 - ld [s1_ptr+36],%g1 - ldd [s2_ptr+32],%g2 - std %o4,[res_ptr+24] - addx %g0,%g0,%o4 C save cy in register - addcc n,-8,n - add s1_ptr,32,s1_ptr - add s2_ptr,32,s2_ptr - add res_ptr,32,res_ptr - bge L(loop1) - subcc %g0,%o4,%g0 C restore cy - -L(fin1): - addcc n,8-2,n - blt L(end1) - subcc %g0,%o4,%g0 C restore cy -C Add blocks of 2 limbs until less than 2 limbs remain -L(loope1): - addxcc %g4,%g2,%o4 - ld [s1_ptr+8],%g4 - addxcc %g1,%g3,%o5 - ld [s1_ptr+12],%g1 - ldd [s2_ptr+8],%g2 - std %o4,[res_ptr+0] - addx %g0,%g0,%o4 C save cy in register - addcc n,-2,n - add s1_ptr,8,s1_ptr - add s2_ptr,8,s2_ptr - add res_ptr,8,res_ptr - bge L(loope1) - subcc %g0,%o4,%g0 C restore cy -L(end1): - addxcc %g4,%g2,%o4 - addxcc %g1,%g3,%o5 - std %o4,[res_ptr+0] - addx %g0,%g0,%o4 C save cy in register - - andcc n,1,%g0 - be L(ret1) - subcc %g0,%o4,%g0 C restore cy -C Add last limb - ld [s1_ptr+8],%g4 - ld [s2_ptr+8],%g2 - addxcc %g4,%g2,%o4 - st %o4,[res_ptr+8] - -L(ret1): - retl - addx %g0,%g0,%o0 C return carry-out from most sign. limb - -L(1): xor s1_ptr,res_ptr,%g1 - andcc %g1,4,%g0 - bne L(2) - nop -C ** V1b ** - mov s2_ptr,%g1 - mov s1_ptr,s2_ptr - b L(0) - mov %g1,s1_ptr - -C ** V2 ** -C If we come here, the alignment of s1_ptr and res_ptr as well as the -C alignment of s2_ptr and res_ptr differ. Since there are only two ways -C things can be aligned (that we care about) we now know that the alignment -C of s1_ptr and s2_ptr are the same. - -L(2): cmp n,1 - be L(jone) - nop - andcc s1_ptr,4,%g0 C s1_ptr unaligned? Side effect: cy=0 - be L(v2) C if no, branch - nop -C Add least significant limb separately to align s1_ptr and s2_ptr - ld [s1_ptr],%g4 - add s1_ptr,4,s1_ptr - ld [s2_ptr],%g2 - add s2_ptr,4,s2_ptr - add n,-1,n - addcc %g4,%g2,%o4 - st %o4,[res_ptr] - add res_ptr,4,res_ptr - -L(v2): addx %g0,%g0,%o4 C save cy in register - addcc n,-8,n - blt L(fin2) - subcc %g0,%o4,%g0 C restore cy -C Add blocks of 8 limbs until less than 8 limbs remain -L(loop2): - ldd [s1_ptr+0],%g2 - ldd [s2_ptr+0],%o4 - addxcc %g2,%o4,%g2 - st %g2,[res_ptr+0] - addxcc %g3,%o5,%g3 - st %g3,[res_ptr+4] - ldd [s1_ptr+8],%g2 - ldd [s2_ptr+8],%o4 - addxcc %g2,%o4,%g2 - st %g2,[res_ptr+8] - addxcc %g3,%o5,%g3 - st %g3,[res_ptr+12] - ldd [s1_ptr+16],%g2 - ldd [s2_ptr+16],%o4 - addxcc %g2,%o4,%g2 - st %g2,[res_ptr+16] - addxcc %g3,%o5,%g3 - st %g3,[res_ptr+20] - ldd [s1_ptr+24],%g2 - ldd [s2_ptr+24],%o4 - addxcc %g2,%o4,%g2 - st %g2,[res_ptr+24] - addxcc %g3,%o5,%g3 - st %g3,[res_ptr+28] - addx %g0,%g0,%o4 C save cy in register - addcc n,-8,n - add s1_ptr,32,s1_ptr - add s2_ptr,32,s2_ptr - add res_ptr,32,res_ptr - bge L(loop2) - subcc %g0,%o4,%g0 C restore cy - -L(fin2): - addcc n,8-2,n - blt L(end2) - subcc %g0,%o4,%g0 C restore cy -L(loope2): - ldd [s1_ptr+0],%g2 - ldd [s2_ptr+0],%o4 - addxcc %g2,%o4,%g2 - st %g2,[res_ptr+0] - addxcc %g3,%o5,%g3 - st %g3,[res_ptr+4] - addx %g0,%g0,%o4 C save cy in register - addcc n,-2,n - add s1_ptr,8,s1_ptr - add s2_ptr,8,s2_ptr - add res_ptr,8,res_ptr - bge L(loope2) - subcc %g0,%o4,%g0 C restore cy -L(end2): - andcc n,1,%g0 - be L(ret2) - subcc %g0,%o4,%g0 C restore cy -C Add last limb -L(jone): - ld [s1_ptr],%g4 - ld [s2_ptr],%g2 - addxcc %g4,%g2,%o4 - st %o4,[res_ptr] - -L(ret2): - retl - addx %g0,%g0,%o0 C return carry-out from most sign. limb -EPILOGUE(mpn_add_n) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/addmul_1.asm deleted file mode 100644 index 92d5d78d511156398f35af2de071212e507850e0..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/addmul_1.asm +++ /dev/null @@ -1,155 +0,0 @@ -dnl SPARC mpn_addmul_1 -- Multiply a limb vector with a limb and add the -dnl result to a second limb vector. - -dnl Copyright 1992-1994, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr o0 -C s1_ptr o1 -C size o2 -C s2_limb o3 - -ASM_START() -PROLOGUE(mpn_addmul_1) - C Make S1_PTR and RES_PTR point at the end of their blocks - C and put (- 4 x SIZE) in index/loop counter. - sll %o2,2,%o2 - add %o0,%o2,%o4 C RES_PTR in o4 since o0 is retval - add %o1,%o2,%o1 - sub %g0,%o2,%o2 - - cmp %o3,0xfff - bgu L(large) - nop - - ld [%o1+%o2],%o5 - mov 0,%o0 - b L(0) - add %o4,-4,%o4 -L(loop0): - addcc %o5,%g1,%g1 - ld [%o1+%o2],%o5 - addx %o0,%g0,%o0 - st %g1,[%o4+%o2] -L(0): wr %g0,%o3,%y - sra %o5,31,%g2 - and %o3,%g2,%g2 - andcc %g1,0,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,0,%g1 - sra %g1,20,%g4 - sll %g1,12,%g1 - rd %y,%g3 - srl %g3,20,%g3 - or %g1,%g3,%g1 - - addcc %g1,%o0,%g1 - addx %g2,%g4,%o0 C add sign-compensation and cy to hi limb - addcc %o2,4,%o2 C loop counter - bne L(loop0) - ld [%o4+%o2],%o5 - - addcc %o5,%g1,%g1 - addx %o0,%g0,%o0 - retl - st %g1,[%o4+%o2] - -L(large): - ld [%o1+%o2],%o5 - mov 0,%o0 - sra %o3,31,%g4 C g4 = mask of ones iff S2_LIMB < 0 - b L(1) - add %o4,-4,%o4 -L(loop): - addcc %o5,%g3,%g3 - ld [%o1+%o2],%o5 - addx %o0,%g0,%o0 - st %g3,[%o4+%o2] -L(1): wr %g0,%o5,%y - and %o5,%g4,%g2 - andcc %g0,%g0,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%g0,%g1 - rd %y,%g3 - addcc %g3,%o0,%g3 - addx %g2,%g1,%o0 - addcc %o2,4,%o2 - bne L(loop) - ld [%o4+%o2],%o5 - - addcc %o5,%g3,%g3 - addx %o0,%g0,%o0 - retl - st %g3,[%o4+%o2] -EPILOGUE(mpn_addmul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/gmp-mparam.h deleted file mode 100644 index a3bc61254303ea6daff486f0a11cf049a8008edb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/gmp-mparam.h +++ /dev/null @@ -1,67 +0,0 @@ -/* SPARC v7 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* Generated by tuneup.c, 2002-03-13, gcc 2.95, Weitek 8701 */ - -#define MUL_TOOM22_THRESHOLD 8 -#define MUL_TOOM33_THRESHOLD 466 - -#define SQR_BASECASE_THRESHOLD 4 -#define SQR_TOOM2_THRESHOLD 16 -#define SQR_TOOM3_THRESHOLD 258 - -#define DIV_SB_PREINV_THRESHOLD 4 -#define DIV_DC_THRESHOLD 28 -#define POWM_THRESHOLD 28 - -#define GCD_ACCEL_THRESHOLD 3 -#define JACOBI_BASE_METHOD 2 - -#define DIVREM_1_NORM_THRESHOLD 3 -#define DIVREM_1_UNNORM_THRESHOLD 4 -#define MOD_1_NORM_THRESHOLD 3 -#define MOD_1_UNNORM_THRESHOLD 4 -#define USE_PREINV_DIVREM_1 1 -#define USE_PREINV_MOD_1 1 -#define DIVREM_2_THRESHOLD 0 /* always */ -#define DIVEXACT_1_THRESHOLD 120 -#define MODEXACT_1_ODD_THRESHOLD MP_SIZE_T_MAX /* never */ - -#define GET_STR_DC_THRESHOLD 21 -#define GET_STR_PRECOMPUTE_THRESHOLD 25 -#define SET_STR_THRESHOLD 1012 - -#define MUL_FFT_TABLE { 272, 672, 1152, 3584, 10240, 24576, 0 } -#define MUL_FFT_MODF_THRESHOLD 264 -#define MUL_FFT_THRESHOLD 2304 - -#define SQR_FFT_TABLE { 304, 736, 1152, 3584, 10240, 24576, 0 } -#define SQR_FFT_MODF_THRESHOLD 248 -#define SQR_FFT_THRESHOLD 2304 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/lshift.asm deleted file mode 100644 index 8321343d6bb73531edc1dd7d919320a25e14a7e0..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/lshift.asm +++ /dev/null @@ -1,105 +0,0 @@ -dnl SPARC mpn_lshift -- Shift a number left. - -dnl Copyright 1995, 1996, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr %o0 -C src_ptr %o1 -C size %o2 -C cnt %o3 - -ASM_START() -PROLOGUE(mpn_lshift) - sll %o2,2,%g1 - add %o1,%g1,%o1 C make %o1 point at end of src - ld [%o1-4],%g2 C load first limb - sub %g0,%o3,%o5 C negate shift count - add %o0,%g1,%o0 C make %o0 point at end of res - add %o2,-1,%o2 - andcc %o2,4-1,%g4 C number of limbs in first loop - srl %g2,%o5,%g1 C compute function result - be L(0) C if multiple of 4 limbs, skip first loop - st %g1,[%sp+80] - - sub %o2,%g4,%o2 C adjust count for main loop - -L(loop0): - ld [%o1-8],%g3 - add %o0,-4,%o0 - add %o1,-4,%o1 - addcc %g4,-1,%g4 - sll %g2,%o3,%o4 - srl %g3,%o5,%g1 - mov %g3,%g2 - or %o4,%g1,%o4 - bne L(loop0) - st %o4,[%o0+0] - -L(0): tst %o2 - be L(end) - nop - -L(loop): - ld [%o1-8],%g3 - add %o0,-16,%o0 - addcc %o2,-4,%o2 - sll %g2,%o3,%o4 - srl %g3,%o5,%g1 - - ld [%o1-12],%g2 - sll %g3,%o3,%g4 - or %o4,%g1,%o4 - st %o4,[%o0+12] - srl %g2,%o5,%g1 - - ld [%o1-16],%g3 - sll %g2,%o3,%o4 - or %g4,%g1,%g4 - st %g4,[%o0+8] - srl %g3,%o5,%g1 - - ld [%o1-20],%g2 - sll %g3,%o3,%g4 - or %o4,%g1,%o4 - st %o4,[%o0+4] - srl %g2,%o5,%g1 - - add %o1,-16,%o1 - or %g4,%g1,%g4 - bne L(loop) - st %g4,[%o0+0] - -L(end): sll %g2,%o3,%g2 - st %g2,[%o0-4] - retl - ld [%sp+80],%o0 -EPILOGUE(mpn_lshift) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/mul_1.asm deleted file mode 100644 index 42b4168be1454e8d165b8fc98e3e2b7cdaacf6e2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/mul_1.asm +++ /dev/null @@ -1,146 +0,0 @@ -dnl SPARC mpn_mul_1 -- Multiply a limb vector with a limb and store -dnl the result in a second limb vector. - -dnl Copyright 1992-1994, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr o0 -C s1_ptr o1 -C size o2 -C s2_limb o3 - -ASM_START() -PROLOGUE(mpn_mul_1) - C Make S1_PTR and RES_PTR point at the end of their blocks - C and put (- 4 x SIZE) in index/loop counter. - sll %o2,2,%o2 - add %o0,%o2,%o4 C RES_PTR in o4 since o0 is retval - add %o1,%o2,%o1 - sub %g0,%o2,%o2 - - cmp %o3,0xfff - bgu L(large) - nop - - ld [%o1+%o2],%o5 - mov 0,%o0 - b L(0) - add %o4,-4,%o4 -L(loop0): - st %g1,[%o4+%o2] -L(0): wr %g0,%o3,%y - sra %o5,31,%g2 - and %o3,%g2,%g2 - andcc %g1,0,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,0,%g1 - sra %g1,20,%g4 - sll %g1,12,%g1 - rd %y,%g3 - srl %g3,20,%g3 - or %g1,%g3,%g1 - - addcc %g1,%o0,%g1 - addx %g2,%g4,%o0 C add sign-compensation and cy to hi limb - addcc %o2,4,%o2 C loop counter - bne,a L(loop0) - ld [%o1+%o2],%o5 - - retl - st %g1,[%o4+%o2] - - -L(large): - ld [%o1+%o2],%o5 - mov 0,%o0 - sra %o3,31,%g4 C g4 = mask of ones iff S2_LIMB < 0 - b L(1) - add %o4,-4,%o4 -L(loop): - st %g3,[%o4+%o2] -L(1): wr %g0,%o5,%y - and %o5,%g4,%g2 C g2 = S1_LIMB iff S2_LIMB < 0, else 0 - andcc %g0,%g0,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%g0,%g1 - rd %y,%g3 - addcc %g3,%o0,%g3 - addx %g2,%g1,%o0 C add sign-compensation and cy to hi limb - addcc %o2,4,%o2 C loop counter - bne,a L(loop) - ld [%o1+%o2],%o5 - - retl - st %g3,[%o4+%o2] -EPILOGUE(mpn_mul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/rshift.asm deleted file mode 100644 index e1554766fe1dc015ce96eb7af9617d2d533e03b9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/rshift.asm +++ /dev/null @@ -1,102 +0,0 @@ -dnl SPARC mpn_rshift -- Shift a number right. - -dnl Copyright 1995, 1996, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr %o0 -C src_ptr %o1 -C size %o2 -C cnt %o3 - -ASM_START() -PROLOGUE(mpn_rshift) - ld [%o1],%g2 C load first limb - sub %g0,%o3,%o5 C negate shift count - add %o2,-1,%o2 - andcc %o2,4-1,%g4 C number of limbs in first loop - sll %g2,%o5,%g1 C compute function result - be L(0) C if multiple of 4 limbs, skip first loop - st %g1,[%sp+80] - - sub %o2,%g4,%o2 C adjust count for main loop - -L(loop0): - ld [%o1+4],%g3 - add %o0,4,%o0 - add %o1,4,%o1 - addcc %g4,-1,%g4 - srl %g2,%o3,%o4 - sll %g3,%o5,%g1 - mov %g3,%g2 - or %o4,%g1,%o4 - bne L(loop0) - st %o4,[%o0-4] - -L(0): tst %o2 - be L(end) - nop - -L(loop): - ld [%o1+4],%g3 - add %o0,16,%o0 - addcc %o2,-4,%o2 - srl %g2,%o3,%o4 - sll %g3,%o5,%g1 - - ld [%o1+8],%g2 - srl %g3,%o3,%g4 - or %o4,%g1,%o4 - st %o4,[%o0-16] - sll %g2,%o5,%g1 - - ld [%o1+12],%g3 - srl %g2,%o3,%o4 - or %g4,%g1,%g4 - st %g4,[%o0-12] - sll %g3,%o5,%g1 - - ld [%o1+16],%g2 - srl %g3,%o3,%g4 - or %o4,%g1,%o4 - st %o4,[%o0-8] - sll %g2,%o5,%g1 - - add %o1,16,%o1 - or %g4,%g1,%g4 - bne L(loop) - st %g4,[%o0-4] - -L(end): srl %g2,%o3,%g2 - st %g2,[%o0-0] - retl - ld [%sp+80],%o0 -EPILOGUE(mpn_rshift) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/sparc-defs.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/sparc-defs.m4 deleted file mode 100644 index 5a0d425204774318078a2054e0f7cb96a4337a05..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/sparc-defs.m4 +++ /dev/null @@ -1,79 +0,0 @@ -divert(-1) - -dnl m4 macros for SPARC assembler (32 and 64 bit). - - -dnl Copyright 2002, 2011, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -changecom(;) dnl cannot use default # since that's used in REGISTER decls - - -dnl Usage: REGISTER(reg,attr) -dnl -dnl Give a ".register reg,attr" directive, if the assembler supports it. -dnl HAVE_REGISTER comes from the GMP_ASM_SPARC_REGISTER configure test. - -define(REGISTER, -m4_assert_numargs(2) -m4_assert_defined(`HAVE_REGISTER') -`ifelse(HAVE_REGISTER,yes, -`.register `$1',`$2'')') - - -C Testing mechanism for running newer code on older processors -ifdef(`FAKE_T3',` - include_mpn(`sparc64/ultrasparct3/missing.m4') -',` - define(`addxccc', ``addxccc' $1, $2, $3') - define(`addxc', ``addxc' $1, $2, $3') - define(`umulxhi', ``umulxhi' $1, $2, $3') - define(`lzcnt', ``lzd' $1, $2') -') - -dnl Usage: LEA64(symbol,reg,pic_reg) -dnl -dnl Use whatever 64-bit code sequence is appropriate to load "symbol" into -dnl register "reg", potentially using register "pic_reg" to perform the -dnl calculations. - -define(LEA64, -m4_assert_numargs(3) -m4_assert_defined(`HAVE_GOTDATA') -`ifdef(`PIC',` - rd %pc, %`$2' - sethi %hi(_GLOBAL_OFFSET_TABLE_+4), %`$3' - add %`$3', %lo(_GLOBAL_OFFSET_TABLE_+8), %`$3' - add %`$2', %`$3', %`$3' - sethi %hi(`$1'), %`$2' - or %`$2', %lo(`$1'), %`$2' - ldx [%`$3' + %`$2'], %`$2'',` - setx `$1', %`$3', %`$2'')') - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/sub_n.asm deleted file mode 100644 index 24a576d82b8a4543229756b41ed0fc89e721a2b4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/sub_n.asm +++ /dev/null @@ -1,335 +0,0 @@ -dnl SPARC mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -dnl store difference in a third limb vector. - -dnl Copyright 1995, 1996, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -define(res_ptr,%o0) -define(s1_ptr,%o1) -define(s2_ptr,%o2) -define(n,%o3) - -ASM_START() -PROLOGUE(mpn_sub_n) - xor s2_ptr,res_ptr,%g1 - andcc %g1,4,%g0 - bne L(1) C branch if alignment differs - nop -C ** V1a ** - andcc res_ptr,4,%g0 C res_ptr unaligned? Side effect: cy=0 - be L(v1) C if no, branch - nop -C Add least significant limb separately to align res_ptr and s2_ptr - ld [s1_ptr],%g4 - add s1_ptr,4,s1_ptr - ld [s2_ptr],%g2 - add s2_ptr,4,s2_ptr - add n,-1,n - subcc %g4,%g2,%o4 - st %o4,[res_ptr] - add res_ptr,4,res_ptr -L(v1): addx %g0,%g0,%o4 C save cy in register - cmp n,2 C if n < 2 ... - bl L(end2) C ... branch to tail code - subcc %g0,%o4,%g0 C restore cy - - ld [s1_ptr+0],%g4 - addcc n,-10,n - ld [s1_ptr+4],%g1 - ldd [s2_ptr+0],%g2 - blt L(fin1) - subcc %g0,%o4,%g0 C restore cy -C Add blocks of 8 limbs until less than 8 limbs remain -L(loop1): - subxcc %g4,%g2,%o4 - ld [s1_ptr+8],%g4 - subxcc %g1,%g3,%o5 - ld [s1_ptr+12],%g1 - ldd [s2_ptr+8],%g2 - std %o4,[res_ptr+0] - subxcc %g4,%g2,%o4 - ld [s1_ptr+16],%g4 - subxcc %g1,%g3,%o5 - ld [s1_ptr+20],%g1 - ldd [s2_ptr+16],%g2 - std %o4,[res_ptr+8] - subxcc %g4,%g2,%o4 - ld [s1_ptr+24],%g4 - subxcc %g1,%g3,%o5 - ld [s1_ptr+28],%g1 - ldd [s2_ptr+24],%g2 - std %o4,[res_ptr+16] - subxcc %g4,%g2,%o4 - ld [s1_ptr+32],%g4 - subxcc %g1,%g3,%o5 - ld [s1_ptr+36],%g1 - ldd [s2_ptr+32],%g2 - std %o4,[res_ptr+24] - addx %g0,%g0,%o4 C save cy in register - addcc n,-8,n - add s1_ptr,32,s1_ptr - add s2_ptr,32,s2_ptr - add res_ptr,32,res_ptr - bge L(loop1) - subcc %g0,%o4,%g0 C restore cy - -L(fin1): - addcc n,8-2,n - blt L(end1) - subcc %g0,%o4,%g0 C restore cy -C Add blocks of 2 limbs until less than 2 limbs remain -L(loope1): - subxcc %g4,%g2,%o4 - ld [s1_ptr+8],%g4 - subxcc %g1,%g3,%o5 - ld [s1_ptr+12],%g1 - ldd [s2_ptr+8],%g2 - std %o4,[res_ptr+0] - addx %g0,%g0,%o4 C save cy in register - addcc n,-2,n - add s1_ptr,8,s1_ptr - add s2_ptr,8,s2_ptr - add res_ptr,8,res_ptr - bge L(loope1) - subcc %g0,%o4,%g0 C restore cy -L(end1): - subxcc %g4,%g2,%o4 - subxcc %g1,%g3,%o5 - std %o4,[res_ptr+0] - addx %g0,%g0,%o4 C save cy in register - - andcc n,1,%g0 - be L(ret1) - subcc %g0,%o4,%g0 C restore cy -C Add last limb - ld [s1_ptr+8],%g4 - ld [s2_ptr+8],%g2 - subxcc %g4,%g2,%o4 - st %o4,[res_ptr+8] - -L(ret1): - retl - addx %g0,%g0,%o0 C return carry-out from most sign. limb - -L(1): xor s1_ptr,res_ptr,%g1 - andcc %g1,4,%g0 - bne L(2) - nop -C ** V1b ** - andcc res_ptr,4,%g0 C res_ptr unaligned? Side effect: cy=0 - be L(v1b) C if no, branch - nop -C Add least significant limb separately to align res_ptr and s1_ptr - ld [s2_ptr],%g4 - add s2_ptr,4,s2_ptr - ld [s1_ptr],%g2 - add s1_ptr,4,s1_ptr - add n,-1,n - subcc %g2,%g4,%o4 - st %o4,[res_ptr] - add res_ptr,4,res_ptr -L(v1b): addx %g0,%g0,%o4 C save cy in register - cmp n,2 C if n < 2 ... - bl L(end2) C ... branch to tail code - subcc %g0,%o4,%g0 C restore cy - - ld [s2_ptr+0],%g4 - addcc n,-10,n - ld [s2_ptr+4],%g1 - ldd [s1_ptr+0],%g2 - blt L(fin1b) - subcc %g0,%o4,%g0 C restore cy -C Add blocks of 8 limbs until less than 8 limbs remain -L(loop1b): - subxcc %g2,%g4,%o4 - ld [s2_ptr+8],%g4 - subxcc %g3,%g1,%o5 - ld [s2_ptr+12],%g1 - ldd [s1_ptr+8],%g2 - std %o4,[res_ptr+0] - subxcc %g2,%g4,%o4 - ld [s2_ptr+16],%g4 - subxcc %g3,%g1,%o5 - ld [s2_ptr+20],%g1 - ldd [s1_ptr+16],%g2 - std %o4,[res_ptr+8] - subxcc %g2,%g4,%o4 - ld [s2_ptr+24],%g4 - subxcc %g3,%g1,%o5 - ld [s2_ptr+28],%g1 - ldd [s1_ptr+24],%g2 - std %o4,[res_ptr+16] - subxcc %g2,%g4,%o4 - ld [s2_ptr+32],%g4 - subxcc %g3,%g1,%o5 - ld [s2_ptr+36],%g1 - ldd [s1_ptr+32],%g2 - std %o4,[res_ptr+24] - addx %g0,%g0,%o4 C save cy in register - addcc n,-8,n - add s1_ptr,32,s1_ptr - add s2_ptr,32,s2_ptr - add res_ptr,32,res_ptr - bge L(loop1b) - subcc %g0,%o4,%g0 C restore cy - -L(fin1b): - addcc n,8-2,n - blt L(end1b) - subcc %g0,%o4,%g0 C restore cy -C Add blocks of 2 limbs until less than 2 limbs remain -L(loope1b): - subxcc %g2,%g4,%o4 - ld [s2_ptr+8],%g4 - subxcc %g3,%g1,%o5 - ld [s2_ptr+12],%g1 - ldd [s1_ptr+8],%g2 - std %o4,[res_ptr+0] - addx %g0,%g0,%o4 C save cy in register - addcc n,-2,n - add s1_ptr,8,s1_ptr - add s2_ptr,8,s2_ptr - add res_ptr,8,res_ptr - bge L(loope1b) - subcc %g0,%o4,%g0 C restore cy -L(end1b): - subxcc %g2,%g4,%o4 - subxcc %g3,%g1,%o5 - std %o4,[res_ptr+0] - addx %g0,%g0,%o4 C save cy in register - - andcc n,1,%g0 - be L(ret1b) - subcc %g0,%o4,%g0 C restore cy -C Add last limb - ld [s2_ptr+8],%g4 - ld [s1_ptr+8],%g2 - subxcc %g2,%g4,%o4 - st %o4,[res_ptr+8] - -L(ret1b): - retl - addx %g0,%g0,%o0 C return carry-out from most sign. limb - -C ** V2 ** -C If we come here, the alignment of s1_ptr and res_ptr as well as the -C alignment of s2_ptr and res_ptr differ. Since there are only two ways -C things can be aligned (that we care about) we now know that the alignment -C of s1_ptr and s2_ptr are the same. - -L(2): cmp n,1 - be L(jone) - nop - andcc s1_ptr,4,%g0 C s1_ptr unaligned? Side effect: cy=0 - be L(v2) C if no, branch - nop -C Add least significant limb separately to align s1_ptr and s2_ptr - ld [s1_ptr],%g4 - add s1_ptr,4,s1_ptr - ld [s2_ptr],%g2 - add s2_ptr,4,s2_ptr - add n,-1,n - subcc %g4,%g2,%o4 - st %o4,[res_ptr] - add res_ptr,4,res_ptr - -L(v2): addx %g0,%g0,%o4 C save cy in register - addcc n,-8,n - blt L(fin2) - subcc %g0,%o4,%g0 C restore cy -C Add blocks of 8 limbs until less than 8 limbs remain -L(loop2): - ldd [s1_ptr+0],%g2 - ldd [s2_ptr+0],%o4 - subxcc %g2,%o4,%g2 - st %g2,[res_ptr+0] - subxcc %g3,%o5,%g3 - st %g3,[res_ptr+4] - ldd [s1_ptr+8],%g2 - ldd [s2_ptr+8],%o4 - subxcc %g2,%o4,%g2 - st %g2,[res_ptr+8] - subxcc %g3,%o5,%g3 - st %g3,[res_ptr+12] - ldd [s1_ptr+16],%g2 - ldd [s2_ptr+16],%o4 - subxcc %g2,%o4,%g2 - st %g2,[res_ptr+16] - subxcc %g3,%o5,%g3 - st %g3,[res_ptr+20] - ldd [s1_ptr+24],%g2 - ldd [s2_ptr+24],%o4 - subxcc %g2,%o4,%g2 - st %g2,[res_ptr+24] - subxcc %g3,%o5,%g3 - st %g3,[res_ptr+28] - addx %g0,%g0,%o4 C save cy in register - addcc n,-8,n - add s1_ptr,32,s1_ptr - add s2_ptr,32,s2_ptr - add res_ptr,32,res_ptr - bge L(loop2) - subcc %g0,%o4,%g0 C restore cy - -L(fin2): - addcc n,8-2,n - blt L(end2) - subcc %g0,%o4,%g0 C restore cy -L(loope2): - ldd [s1_ptr+0],%g2 - ldd [s2_ptr+0],%o4 - subxcc %g2,%o4,%g2 - st %g2,[res_ptr+0] - subxcc %g3,%o5,%g3 - st %g3,[res_ptr+4] - addx %g0,%g0,%o4 C save cy in register - addcc n,-2,n - add s1_ptr,8,s1_ptr - add s2_ptr,8,s2_ptr - add res_ptr,8,res_ptr - bge L(loope2) - subcc %g0,%o4,%g0 C restore cy -L(end2): - andcc n,1,%g0 - be L(ret2) - subcc %g0,%o4,%g0 C restore cy -C Add last limb -L(jone): - ld [s1_ptr],%g4 - ld [s2_ptr],%g2 - subxcc %g4,%g2,%o4 - st %o4,[res_ptr] - -L(ret2): - retl - addx %g0,%g0,%o0 C return carry-out from most sign. limb -EPILOGUE(mpn_sub_n) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/submul_1.asm deleted file mode 100644 index 73f93770067f296dc21fff400f9d8f193d6b4726..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/submul_1.asm +++ /dev/null @@ -1,155 +0,0 @@ -dnl SPARC mpn_submul_1 -- Multiply a limb vector with a limb and subtract -dnl the result from a second limb vector. - -dnl Copyright 1992-1994, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr o0 -C s1_ptr o1 -C size o2 -C s2_limb o3 - -ASM_START() -PROLOGUE(mpn_submul_1) - C Make S1_PTR and RES_PTR point at the end of their blocks - C and put (- 4 x SIZE) in index/loop counter. - sll %o2,2,%o2 - add %o0,%o2,%o4 C RES_PTR in o4 since o0 is retval - add %o1,%o2,%o1 - sub %g0,%o2,%o2 - - cmp %o3,0xfff - bgu L(large) - nop - - ld [%o1+%o2],%o5 - mov 0,%o0 - b L(0) - add %o4,-4,%o4 -L(loop0): - subcc %o5,%g1,%g1 - ld [%o1+%o2],%o5 - addx %o0,%g0,%o0 - st %g1,[%o4+%o2] -L(0): wr %g0,%o3,%y - sra %o5,31,%g2 - and %o3,%g2,%g2 - andcc %g1,0,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,0,%g1 - sra %g1,20,%g4 - sll %g1,12,%g1 - rd %y,%g3 - srl %g3,20,%g3 - or %g1,%g3,%g1 - - addcc %g1,%o0,%g1 - addx %g2,%g4,%o0 C add sign-compensation and cy to hi limb - addcc %o2,4,%o2 C loop counter - bne L(loop0) - ld [%o4+%o2],%o5 - - subcc %o5,%g1,%g1 - addx %o0,%g0,%o0 - retl - st %g1,[%o4+%o2] - -L(large): - ld [%o1+%o2],%o5 - mov 0,%o0 - sra %o3,31,%g4 C g4 = mask of ones iff S2_LIMB < 0 - b L(1) - add %o4,-4,%o4 -L(loop): - subcc %o5,%g3,%g3 - ld [%o1+%o2],%o5 - addx %o0,%g0,%o0 - st %g3,[%o4+%o2] -L(1): wr %g0,%o5,%y - and %o5,%g4,%g2 - andcc %g0,%g0,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%g0,%g1 - rd %y,%g3 - addcc %g3,%o0,%g3 - addx %g2,%g1,%o0 - addcc %o2,4,%o2 - bne L(loop) - ld [%o4+%o2],%o5 - - subcc %o5,%g3,%g3 - addx %o0,%g0,%o0 - retl - st %g3,[%o4+%o2] -EPILOGUE(mpn_submul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/udiv.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/udiv.asm deleted file mode 100644 index 23ab3de1dbb7f7cc5a09e99266751038c190887e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/udiv.asm +++ /dev/null @@ -1,167 +0,0 @@ -dnl SPARC v7 __udiv_qrnnd division support, used from longlong.h. -dnl This is for v7 CPUs with a floating-point unit. - -dnl Copyright 1993, 1994, 1996, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C rem_ptr i0 -C n1 i1 -C n0 i2 -C d i3 - -ASM_START() - -ifdef(`PIC', -` TEXT -L(getpc): - retl - nop') - - TEXT - ALIGN(8) -L(C0): .double 0r4294967296 -L(C1): .double 0r2147483648 - -PROLOGUE(mpn_udiv_qrnnd) - save %sp,-104,%sp - st %i1,[%fp-8] - ld [%fp-8],%f10 - -ifdef(`PIC', -`L(pc): call L(getpc) C put address of this insn in %o7 - ldd [%o7+L(C0)-L(pc)],%f8', -` sethi %hi(L(C0)),%o7 - ldd [%o7+%lo(L(C0))],%f8') - - fitod %f10,%f4 - cmp %i1,0 - bge L(248) - mov %i0,%i5 - faddd %f4,%f8,%f4 -L(248): - st %i2,[%fp-8] - ld [%fp-8],%f10 - fmuld %f4,%f8,%f6 - cmp %i2,0 - bge L(249) - fitod %f10,%f2 - faddd %f2,%f8,%f2 -L(249): - st %i3,[%fp-8] - faddd %f6,%f2,%f2 - ld [%fp-8],%f10 - cmp %i3,0 - bge L(250) - fitod %f10,%f4 - faddd %f4,%f8,%f4 -L(250): - fdivd %f2,%f4,%f2 - -ifdef(`PIC', -` ldd [%o7+L(C1)-L(pc)],%f4', -` sethi %hi(L(C1)),%o7 - ldd [%o7+%lo(L(C1))],%f4') - - fcmped %f2,%f4 - nop - fbge,a L(251) - fsubd %f2,%f4,%f2 - fdtoi %f2,%f2 - st %f2,[%fp-8] - b L(252) - ld [%fp-8],%i4 -L(251): - fdtoi %f2,%f2 - st %f2,[%fp-8] - ld [%fp-8],%i4 - sethi %hi(-2147483648),%g2 - xor %i4,%g2,%i4 -L(252): - wr %g0,%i4,%y - sra %i3,31,%g2 - and %i4,%g2,%g2 - andcc %g0,0,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,%i3,%g1 - mulscc %g1,0,%g1 - add %g1,%g2,%i0 - rd %y,%g3 - subcc %i2,%g3,%o7 - subxcc %i1,%i0,%g0 - be L(253) - cmp %o7,%i3 - - add %i4,-1,%i0 - add %o7,%i3,%o7 - st %o7,[%i5] - ret - restore -L(253): - blu L(246) - mov %i4,%i0 - add %i4,1,%i0 - sub %o7,%i3,%o7 -L(246): - st %o7,[%i5] - ret - restore -EPILOGUE(mpn_udiv_qrnnd) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/udiv_nfp.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/udiv_nfp.asm deleted file mode 100644 index ebbb820639e7f30a0335268f9b4bf5ece1965bc3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/udiv_nfp.asm +++ /dev/null @@ -1,202 +0,0 @@ -dnl SPARC v7 __udiv_qrnnd division support, used from longlong.h. -dnl This is for v7 CPUs without a floating-point unit. - -dnl Copyright 1993, 1994, 1996, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C rem_ptr o0 -C n1 o1 -C n0 o2 -C d o3 - -ASM_START() -PROLOGUE(mpn_udiv_qrnnd) - tst %o3 - bneg L(largedivisor) - mov 8,%g1 - - b L(p1) - addxcc %o2,%o2,%o2 - -L(plop): - bcc L(n1) - addxcc %o2,%o2,%o2 -L(p1): addx %o1,%o1,%o1 - subcc %o1,%o3,%o4 - bcc L(n2) - addxcc %o2,%o2,%o2 -L(p2): addx %o1,%o1,%o1 - subcc %o1,%o3,%o4 - bcc L(n3) - addxcc %o2,%o2,%o2 -L(p3): addx %o1,%o1,%o1 - subcc %o1,%o3,%o4 - bcc L(n4) - addxcc %o2,%o2,%o2 -L(p4): addx %o1,%o1,%o1 - addcc %g1,-1,%g1 - bne L(plop) - subcc %o1,%o3,%o4 - bcc L(n5) - addxcc %o2,%o2,%o2 -L(p5): st %o1,[%o0] - retl - xnor %g0,%o2,%o0 - -L(nlop): - bcc L(p1) - addxcc %o2,%o2,%o2 -L(n1): addx %o4,%o4,%o4 - subcc %o4,%o3,%o1 - bcc L(p2) - addxcc %o2,%o2,%o2 -L(n2): addx %o4,%o4,%o4 - subcc %o4,%o3,%o1 - bcc L(p3) - addxcc %o2,%o2,%o2 -L(n3): addx %o4,%o4,%o4 - subcc %o4,%o3,%o1 - bcc L(p4) - addxcc %o2,%o2,%o2 -L(n4): addx %o4,%o4,%o4 - addcc %g1,-1,%g1 - bne L(nlop) - subcc %o4,%o3,%o1 - bcc L(p5) - addxcc %o2,%o2,%o2 -L(n5): st %o4,[%o0] - retl - xnor %g0,%o2,%o0 - -L(largedivisor): - and %o2,1,%o5 C %o5 = n0 & 1 - - srl %o2,1,%o2 - sll %o1,31,%g2 - or %g2,%o2,%o2 C %o2 = lo(n1n0 >> 1) - srl %o1,1,%o1 C %o1 = hi(n1n0 >> 1) - - and %o3,1,%g2 - srl %o3,1,%g3 C %g3 = floor(d / 2) - add %g3,%g2,%g3 C %g3 = ceil(d / 2) - - b L(Lp1) - addxcc %o2,%o2,%o2 - -L(Lplop): - bcc L(Ln1) - addxcc %o2,%o2,%o2 -L(Lp1): addx %o1,%o1,%o1 - subcc %o1,%g3,%o4 - bcc L(Ln2) - addxcc %o2,%o2,%o2 -L(Lp2): addx %o1,%o1,%o1 - subcc %o1,%g3,%o4 - bcc L(Ln3) - addxcc %o2,%o2,%o2 -L(Lp3): addx %o1,%o1,%o1 - subcc %o1,%g3,%o4 - bcc L(Ln4) - addxcc %o2,%o2,%o2 -L(Lp4): addx %o1,%o1,%o1 - addcc %g1,-1,%g1 - bne L(Lplop) - subcc %o1,%g3,%o4 - bcc L(Ln5) - addxcc %o2,%o2,%o2 -L(Lp5): add %o1,%o1,%o1 C << 1 - tst %g2 - bne L(oddp) - add %o5,%o1,%o1 - st %o1,[%o0] - retl - xnor %g0,%o2,%o0 - -L(Lnlop): - bcc L(Lp1) - addxcc %o2,%o2,%o2 -L(Ln1): addx %o4,%o4,%o4 - subcc %o4,%g3,%o1 - bcc L(Lp2) - addxcc %o2,%o2,%o2 -L(Ln2): addx %o4,%o4,%o4 - subcc %o4,%g3,%o1 - bcc L(Lp3) - addxcc %o2,%o2,%o2 -L(Ln3): addx %o4,%o4,%o4 - subcc %o4,%g3,%o1 - bcc L(Lp4) - addxcc %o2,%o2,%o2 -L(Ln4): addx %o4,%o4,%o4 - addcc %g1,-1,%g1 - bne L(Lnlop) - subcc %o4,%g3,%o1 - bcc L(Lp5) - addxcc %o2,%o2,%o2 -L(Ln5): add %o4,%o4,%o4 C << 1 - tst %g2 - bne L(oddn) - add %o5,%o4,%o4 - st %o4,[%o0] - retl - xnor %g0,%o2,%o0 - -L(oddp): - xnor %g0,%o2,%o2 - C q' in %o2. r' in %o1 - addcc %o1,%o2,%o1 - bcc L(Lp6) - addx %o2,0,%o2 - sub %o1,%o3,%o1 -L(Lp6): subcc %o1,%o3,%g0 - bcs L(Lp7) - subx %o2,-1,%o2 - sub %o1,%o3,%o1 -L(Lp7): st %o1,[%o0] - retl - mov %o2,%o0 - -L(oddn): - xnor %g0,%o2,%o2 - C q' in %o2. r' in %o4 - addcc %o4,%o2,%o4 - bcc L(Ln6) - addx %o2,0,%o2 - sub %o4,%o3,%o4 -L(Ln6): subcc %o4,%o3,%g0 - bcs L(Ln7) - subx %o2,-1,%o2 - sub %o4,%o3,%o4 -L(Ln7): st %o4,[%o0] - retl - mov %o2,%o0 -EPILOGUE(mpn_udiv_qrnnd) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/add_n.asm deleted file mode 100644 index c781596dadc13e346708002010e835067721ca55..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/add_n.asm +++ /dev/null @@ -1,70 +0,0 @@ -dnl SPARC T1 32-bit mpn_add_n. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -define(`rp', %o0) -define(`ap', %o1) -define(`bp', %o2) -define(`n', %o3) -define(`cy', %o4) - -define(`i', %o3) - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc) - -ASM_START() -PROLOGUE(mpn_add_nc) - b L(ent) - srl cy, 0, cy C strip any bogus high bits -EPILOGUE() - -PROLOGUE(mpn_add_n) - mov 0, cy -L(ent): srl n, 0, n C strip any bogus high bits - sll n, 2, n - add ap, n, ap - add bp, n, bp - add rp, n, rp - neg n, i - -L(top): lduw [ap+i], %g1 - lduw [bp+i], %g2 - add %g1, %g2, %g3 - add %g3, cy, %g3 - stw %g3, [rp+i] - add i, 4, i - brnz i, L(top) - srlx %g3, 32, cy - - retl - mov cy, %o0 C return value -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/addmul_1.asm deleted file mode 100644 index 89da1864577fff16bbf385d2be203b4513560b7f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/addmul_1.asm +++ /dev/null @@ -1,90 +0,0 @@ -dnl SPARC T1 32-bit mpn_addmul_1. - -dnl Contributed to the GNU project by David Miller. - -dnl Copyright 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T1: 24 -C UltraSPARC T2: 19 -C UltraSPARC T3: 19 -C UltraSPARC T4: 5 - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`n', `%i2') -define(`v0', `%i3') - -ASM_START() -PROLOGUE(mpn_addmul_1) - save %sp, -96, %sp - srl n, 0, %o4 - srl v0, 0, %g1 - subcc %o4, 1, %o4 - be L(final_one) - clr %o5 - -L(top): lduw [up+0], %l0 - lduw [rp+0], %l2 - lduw [up+4], %l1 - lduw [rp+4], %l3 - mulx %l0, %g1, %g3 - add up, 8, up - mulx %l1, %g1, %o3 - sub %o4, 2, %o4 - add rp, 8, rp - add %l2, %g3, %g3 - add %o5, %g3, %g3 - stw %g3, [rp-8] - srlx %g3, 32, %o5 - add %l3, %o3, %o3 - add %o5, %o3, %o3 - stw %o3, [rp-4] - brgz %o4, L(top) - srlx %o3, 32, %o5 - - brlz,pt %o4, L(done) - nop - -L(final_one): - lduw [up+0], %l0 - lduw [rp+0], %l2 - mulx %l0, %g1, %g3 - add %l2, %g3, %g3 - add %o5, %g3, %g3 - stw %g3, [rp+0] - srlx %g3, 32, %o5 - -L(done): - ret - restore %o5, 0, %o0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/gmp-mparam.h deleted file mode 100644 index 6f9d5a44ca66ac772d2b5b32aad7af999da95801..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/gmp-mparam.h +++ /dev/null @@ -1,153 +0,0 @@ -/* UltraSPARC T 32-bit gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 3 -#define MOD_1_1P_METHOD 2 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 9 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 10 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 0 /* never mpn_mod_1_1p */ -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 21 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 22 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD 35 - -#define MUL_TOOM22_THRESHOLD 14 -#define MUL_TOOM33_THRESHOLD 98 -#define MUL_TOOM44_THRESHOLD 166 -#define MUL_TOOM6H_THRESHOLD 226 -#define MUL_TOOM8H_THRESHOLD 333 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 97 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 139 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 97 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 98 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 120 - -#define SQR_BASECASE_THRESHOLD 6 -#define SQR_TOOM2_THRESHOLD 34 -#define SQR_TOOM3_THRESHOLD 110 -#define SQR_TOOM4_THRESHOLD 178 -#define SQR_TOOM6_THRESHOLD 240 -#define SQR_TOOM8_THRESHOLD 333 - -#define MULMID_TOOM42_THRESHOLD 22 - -#define MULMOD_BNM1_THRESHOLD 9 -#define SQRMOD_BNM1_THRESHOLD 13 - -#define MUL_FFT_MODF_THRESHOLD 280 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 280, 5}, { 15, 6}, { 8, 5}, { 17, 6}, \ - { 9, 5}, { 19, 6}, { 13, 7}, { 7, 6}, \ - { 17, 7}, { 9, 6}, { 20, 7}, { 11, 6}, \ - { 23, 7}, { 13, 8}, { 7, 7}, { 21, 8}, \ - { 11, 7}, { 25, 9}, { 7, 8}, { 15, 7}, \ - { 33, 8}, { 19, 7}, { 41, 8}, { 23, 7}, \ - { 49, 8}, { 27, 9}, { 15, 8}, { 31, 7}, \ - { 63, 8}, { 39, 9}, { 23, 8}, { 47,10}, \ - { 15, 9}, { 31, 8}, { 67, 9}, { 39, 8}, \ - { 79, 9}, { 47,10}, { 31, 9}, { 79,10}, \ - { 47,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255,10}, { 79, 9}, { 159, 8}, { 319,10}, \ - { 95, 9}, { 191, 8}, { 383,11}, { 63,10}, \ - { 127, 9}, { 255,10}, { 143, 9}, { 287,10}, \ - { 159, 9}, { 319,10}, { 175,11}, { 95,10}, \ - { 191, 9}, { 383,12}, { 4096,13}, { 8192,14}, \ - { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 66 -#define MUL_FFT_THRESHOLD 3712 - -#define SQR_FFT_MODF_THRESHOLD 240 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 240, 5}, { 15, 6}, { 8, 5}, { 17, 6}, \ - { 13, 7}, { 7, 6}, { 17, 7}, { 9, 6}, \ - { 20, 7}, { 11, 6}, { 23, 7}, { 13, 8}, \ - { 7, 7}, { 19, 8}, { 11, 7}, { 25, 9}, \ - { 7, 8}, { 15, 7}, { 33, 8}, { 19, 7}, \ - { 39, 8}, { 23, 7}, { 47, 8}, { 27, 9}, \ - { 15, 8}, { 39, 9}, { 23, 8}, { 47,10}, \ - { 15, 9}, { 31, 8}, { 63, 9}, { 39, 8}, \ - { 79, 9}, { 47,10}, { 31, 9}, { 63, 8}, \ - { 127, 9}, { 71, 8}, { 143, 9}, { 79,10}, \ - { 47,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255, 9}, { 143,10}, { 79, 9}, { 159, 8}, \ - { 319, 9}, { 175,10}, { 95, 9}, { 191, 8}, \ - { 383, 9}, { 207,11}, { 63,10}, { 127, 9}, \ - { 255,10}, { 143, 9}, { 287,10}, { 159, 9}, \ - { 319,10}, { 175,11}, { 95,10}, { 191, 9}, \ - { 383,10}, { 207,12}, { 4096,13}, { 8192,14}, \ - { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 70 -#define SQR_FFT_THRESHOLD 2624 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 51 -#define MULLO_MUL_N_THRESHOLD 6633 - -#define DC_DIV_QR_THRESHOLD 51 -#define DC_DIVAPPR_Q_THRESHOLD 202 -#define DC_BDIV_QR_THRESHOLD 47 -#define DC_BDIV_Q_THRESHOLD 124 - -#define INV_MULMOD_BNM1_THRESHOLD 26 -#define INV_NEWTON_THRESHOLD 266 -#define INV_APPR_THRESHOLD 222 - -#define BINV_NEWTON_THRESHOLD 296 -#define REDC_1_TO_REDC_N_THRESHOLD 59 - -#define MU_DIV_QR_THRESHOLD 1334 -#define MU_DIVAPPR_Q_THRESHOLD 1499 -#define MUPI_DIV_QR_THRESHOLD 116 -#define MU_BDIV_QR_THRESHOLD 1057 -#define MU_BDIV_Q_THRESHOLD 1334 - -#define POWM_SEC_TABLE 6,35,213,724,2618 - -#define MATRIX22_STRASSEN_THRESHOLD 15 -#define HGCD_THRESHOLD 84 -#define HGCD_APPR_THRESHOLD 101 -#define HGCD_REDUCE_THRESHOLD 1437 -#define GCD_DC_THRESHOLD 372 -#define GCDEXT_DC_THRESHOLD 253 -#define JACOBI_BASE_METHOD 2 - -#define GET_STR_DC_THRESHOLD 12 -#define GET_STR_PRECOMPUTE_THRESHOLD 27 -#define SET_STR_DC_THRESHOLD 399 -#define SET_STR_PRECOMPUTE_THRESHOLD 885 - -#define FAC_DSC_THRESHOLD 179 -#define FAC_ODD_THRESHOLD 29 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/mul_1.asm deleted file mode 100644 index 0239cd28cd359718b2c21da60b31a14cb7011a32..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/mul_1.asm +++ /dev/null @@ -1,83 +0,0 @@ -dnl SPARC T1 32-bit mpn_mul_1. - -dnl Contributed to the GNU project by David Miller. - -dnl Copyright 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T1: 20 -C UltraSPARC T2: 18 -C UltraSPARC T3: 18 -C UltraSPARC T4: 4 - -C INPUT PARAMETERS -define(`rp', `%o0') -define(`up', `%o1') -define(`n', `%o2') -define(`v0', `%o3') - -ASM_START() -PROLOGUE(mpn_mul_1) - srl n, 0, n - srl v0, 0, v0 - subcc n, 1, n - be L(final_one) - clr %o5 - -L(top): lduw [up+0], %g1 - lduw [up+4], %g2 - mulx %g1, v0, %g3 - add up, 8, up - mulx %g2, v0, %o4 - sub n, 2, n - add rp, 8, rp - add %o5, %g3, %g3 - stw %g3, [rp-8] - srlx %g3, 32, %o5 - add %o5, %o4, %o4 - stw %o4, [rp-4] - brgz n, L(top) - srlx %o4, 32, %o5 - - brlz,pt n, L(done) - nop - -L(final_one): - lduw [up+0], %g1 - mulx %g1, v0, %g3 - add %o5, %g3, %g3 - stw %g3, [rp+0] - srlx %g3, 32, %o5 - -L(done): - retl - mov %o5, %o0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/sqr_diagonal.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/sqr_diagonal.asm deleted file mode 100644 index 3b906ef202ed11bc7a5d00ffd15383d26d2b058a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/sqr_diagonal.asm +++ /dev/null @@ -1,55 +0,0 @@ -dnl SPARC T1 32-bit mpn_sqr_diagonal. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -define(`rp', `%o0') -define(`up', `%o1') -define(`n', `%o2') - -ASM_START() -PROLOGUE(mpn_sqr_diagonal) - deccc n C n-- - nop - -L(top): lduw [up+0], %g1 - add up, 4, up C up++ - mulx %g1, %g1, %g3 - stw %g3, [rp+0] - srlx %g3, 32, %g4 - stw %g4, [rp+4] - add rp, 8, rp C rp += 2 - bnz %icc, L(top) - deccc n C n-- - - retl - nop -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/sub_n.asm deleted file mode 100644 index 946bc3ff8e26f5746933c3423c70096bff56c4bd..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/sub_n.asm +++ /dev/null @@ -1,70 +0,0 @@ -dnl SPARC T1 32-bit mpn_sub_n. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -define(`rp', %o0) -define(`ap', %o1) -define(`bp', %o2) -define(`n', %o3) -define(`cy', %o4) - -define(`i', %o3) - -MULFUNC_PROLOGUE(mpn_sub_n mpn_sub_nc) - -ASM_START() -PROLOGUE(mpn_sub_nc) - b L(ent) - srl cy, 0, cy C strip any bogus high bits -EPILOGUE() - -PROLOGUE(mpn_sub_n) - mov 0, cy -L(ent): srl n, 0, n C strip any bogus high bits - sll n, 2, n - add ap, n, ap - add bp, n, bp - add rp, n, rp - neg n, i - -L(top): lduw [ap+i], %g1 - lduw [bp+i], %g2 - sub %g1, %g2, %g3 - sub %g3, cy, %g3 - stw %g3, [rp+i] - add i, 4, i - brnz i, L(top) - srlx %g3, 63, cy - - retl - mov cy, %o0 C return value -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/submul_1.asm deleted file mode 100644 index 89200709c4cbe009c7eb5e39dadcacd879448b97..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/ultrasparct1/submul_1.asm +++ /dev/null @@ -1,91 +0,0 @@ -dnl SPARC T1 32-bit mpn_submul_1. - -dnl Contributed to the GNU project by David Miller. - -dnl Copyright 2010, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T1: 24 -C UltraSPARC T2: 19 -C UltraSPARC T3: 19 -C UltraSPARC T4: 5 - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`n', `%i2') -define(`v0', `%i3') - -ASM_START() -PROLOGUE(mpn_submul_1) - save %sp, -96, %sp - srl n, 0, %o4 - srl v0, 0, %g1 - subcc %o4, 1, %o4 - be L(final_one) - subcc %g0, 0, %o5 - -L(top): lduw [up+0], %l0 - lduw [rp+0], %l2 - lduw [up+4], %l1 - lduw [rp+4], %l3 - mulx %l0, %g1, %g3 - add up, 8, up - mulx %l1, %g1, %o3 - sub %o4, 2, %o4 - add rp, 8, rp - addx %o5, %g3, %g3 - srlx %g3, 32, %o5 - subcc %l2, %g3, %g3 - stw %g3, [rp-8] - addx %o5, %o3, %o3 - srlx %o3, 32, %o5 - subcc %l3, %o3, %o3 - brgz %o4, L(top) - stw %o3, [rp-4] - - brlz,pt %o4, L(done) - nop - -L(final_one): - lduw [up+0], %l0 - lduw [rp+0], %l2 - mulx %l0, %g1, %g3 - addx %o5, %g3, %g3 - srlx %g3, 32, %o5 - subcc %l2, %g3, %g3 - stw %g3, [rp+0] - -L(done): - addx %o5, 0, %o5 - ret - restore %o5, 0, %o0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/umul.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/umul.asm deleted file mode 100644 index 3a20b95cb50ba0b48e65be0e4e85d0c68ddd11c7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/umul.asm +++ /dev/null @@ -1,77 +0,0 @@ -dnl SPARC mpn_umul_ppmm -- support for longlong.h for non-gcc. - -dnl Copyright 1995, 1996, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_umul_ppmm) - wr %g0,%o1,%y - sra %o2,31,%g2 C Don't move this insn - and %o1,%g2,%g2 C Don't move this insn - andcc %g0,0,%g1 C Don't move this insn - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,%o2,%g1 - mulscc %g1,0,%g1 - rd %y,%g3 - st %g3,[%o0] - retl - add %g1,%g2,%o0 -EPILOGUE(mpn_umul_ppmm) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/addmul_1.asm deleted file mode 100644 index 0052092784374040428be68f34c38f338072f3c4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/addmul_1.asm +++ /dev/null @@ -1,131 +0,0 @@ -dnl SPARC v8 mpn_addmul_1 -- Multiply a limb vector with a limb and -dnl add the result to a second limb vector. - -dnl Copyright 1992-1995, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr o0 -C s1_ptr o1 -C size o2 -C s2_limb o3 - -ASM_START() -PROLOGUE(mpn_addmul_1) - orcc %g0,%g0,%g2 - ld [%o1+0],%o4 C 1 - - sll %o2,4,%g1 - and %g1,(4-1)<<4,%g1 -ifdef(`PIC', -` mov %o7,%g4 C Save return address register -0: call 1f - add %o7,L(1)-0b,%g3 -1: mov %g4,%o7 C Restore return address register -', -` sethi %hi(L(1)),%g3 - or %g3,%lo(L(1)),%g3 -') - jmp %g3+%g1 - nop -L(1): -L(L00): add %o0,-4,%o0 - b L(loop00) C 4, 8, 12, ... - add %o1,-4,%o1 - nop -L(L01): b L(loop01) C 1, 5, 9, ... - nop - nop - nop -L(L10): add %o0,-12,%o0 C 2, 6, 10, ... - b L(loop10) - add %o1,4,%o1 - nop -L(L11): add %o0,-8,%o0 C 3, 7, 11, ... - b L(loop11) - add %o1,-8,%o1 - nop - -L(loop): - addcc %g3,%g2,%g3 C 1 - ld [%o1+4],%o4 C 2 - rd %y,%g2 C 1 - addx %g0,%g2,%g2 - ld [%o0+0],%g1 C 2 - addcc %g1,%g3,%g3 - st %g3,[%o0+0] C 1 -L(loop00): - umul %o4,%o3,%g3 C 2 - ld [%o0+4],%g1 C 2 - addxcc %g3,%g2,%g3 C 2 - ld [%o1+8],%o4 C 3 - rd %y,%g2 C 2 - addx %g0,%g2,%g2 - nop - addcc %g1,%g3,%g3 - st %g3,[%o0+4] C 2 -L(loop11): - umul %o4,%o3,%g3 C 3 - addxcc %g3,%g2,%g3 C 3 - ld [%o1+12],%o4 C 4 - rd %y,%g2 C 3 - add %o1,16,%o1 - addx %g0,%g2,%g2 - ld [%o0+8],%g1 C 2 - addcc %g1,%g3,%g3 - st %g3,[%o0+8] C 3 -L(loop10): - umul %o4,%o3,%g3 C 4 - addxcc %g3,%g2,%g3 C 4 - ld [%o1+0],%o4 C 1 - rd %y,%g2 C 4 - addx %g0,%g2,%g2 - ld [%o0+12],%g1 C 2 - addcc %g1,%g3,%g3 - st %g3,[%o0+12] C 4 - add %o0,16,%o0 - addx %g0,%g2,%g2 -L(loop01): - addcc %o2,-4,%o2 - bg L(loop) - umul %o4,%o3,%g3 C 1 - - addcc %g3,%g2,%g3 C 4 - rd %y,%g2 C 4 - addx %g0,%g2,%g2 - ld [%o0+0],%g1 C 2 - addcc %g1,%g3,%g3 - st %g3,[%o0+0] C 4 - addx %g0,%g2,%o0 - - retl - nop -EPILOGUE(mpn_addmul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/gmp-mparam.h deleted file mode 100644 index e57897b439d5effe33b1232ec4ca11fdf32dc821..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/gmp-mparam.h +++ /dev/null @@ -1,73 +0,0 @@ -/* SPARC v8 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* Generated by tuneup.c, 2004-02-07, gcc 2.95 */ - -#define MUL_TOOM22_THRESHOLD 10 -#define MUL_TOOM33_THRESHOLD 65 - -#define SQR_BASECASE_THRESHOLD 4 -#define SQR_TOOM2_THRESHOLD 18 -#define SQR_TOOM3_THRESHOLD 65 - -#define DIV_SB_PREINV_THRESHOLD 5 -#define DIV_DC_THRESHOLD 24 -#define POWM_THRESHOLD 38 - -#define HGCD_THRESHOLD 69 -#define GCD_ACCEL_THRESHOLD 3 -#define GCD_DC_THRESHOLD 498 -#define JACOBI_BASE_METHOD 2 - -#define DIVREM_1_NORM_THRESHOLD 6 -#define DIVREM_1_UNNORM_THRESHOLD 11 -#define MOD_1_NORM_THRESHOLD 5 -#define MOD_1_UNNORM_THRESHOLD 9 -#define USE_PREINV_DIVREM_1 1 -#define USE_PREINV_MOD_1 1 -#define DIVREM_2_THRESHOLD 0 /* always */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define MODEXACT_1_ODD_THRESHOLD 4 - -#define GET_STR_DC_THRESHOLD 14 -#define GET_STR_PRECOMPUTE_THRESHOLD 23 -#define SET_STR_THRESHOLD 1679 - -#define MUL_FFT_TABLE { 272, 672, 1152, 2560, 10240, 24576, 0 } -#define MUL_FFT_MODF_THRESHOLD 264 -#define MUL_FFT_THRESHOLD 1792 - -#define SQR_FFT_TABLE { 304, 672, 1152, 3584, 10240, 24576, 0 } -#define SQR_FFT_MODF_THRESHOLD 264 -#define SQR_FFT_THRESHOLD 1728 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/mul_1.asm deleted file mode 100644 index e26c853aed8ce73cd7e6d4ae491f014bddc171c5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/mul_1.asm +++ /dev/null @@ -1,112 +0,0 @@ -dnl SPARC v8 mpn_mul_1 -- Multiply a limb vector with a single limb and -dnl store the product in a second limb vector. - -dnl Copyright 1992, 1994, 1995, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr o0 -C s1_ptr o1 -C size o2 -C s2_limb o3 - -ASM_START() -PROLOGUE(mpn_mul_1) - sll %o2,4,%g1 - and %g1,(4-1)<<4,%g1 -ifdef(`PIC', -` mov %o7,%g4 C Save return address register -0: call 1f - add %o7,L(1)-0b,%g3 -1: mov %g4,%o7 C Restore return address register -', -` sethi %hi(L(1)),%g3 - or %g3,%lo(L(1)),%g3 -') - jmp %g3+%g1 - ld [%o1+0],%o4 C 1 -L(1): -L(L00): add %o0,-4,%o0 - add %o1,-4,%o1 - b L(loop00) C 4, 8, 12, ... - orcc %g0,%g0,%g2 -L(L01): b L(loop01) C 1, 5, 9, ... - orcc %g0,%g0,%g2 - nop - nop -L(L10): add %o0,-12,%o0 C 2, 6, 10, ... - add %o1,4,%o1 - b L(loop10) - orcc %g0,%g0,%g2 - nop -L(L11): add %o0,-8,%o0 C 3, 7, 11, ... - add %o1,-8,%o1 - b L(loop11) - orcc %g0,%g0,%g2 - -L(loop): - addcc %g3,%g2,%g3 C 1 - ld [%o1+4],%o4 C 2 - st %g3,[%o0+0] C 1 - rd %y,%g2 C 1 -L(loop00): - umul %o4,%o3,%g3 C 2 - addxcc %g3,%g2,%g3 C 2 - ld [%o1+8],%o4 C 3 - st %g3,[%o0+4] C 2 - rd %y,%g2 C 2 -L(loop11): - umul %o4,%o3,%g3 C 3 - addxcc %g3,%g2,%g3 C 3 - ld [%o1+12],%o4 C 4 - add %o1,16,%o1 - st %g3,[%o0+8] C 3 - rd %y,%g2 C 3 -L(loop10): - umul %o4,%o3,%g3 C 4 - addxcc %g3,%g2,%g3 C 4 - ld [%o1+0],%o4 C 1 - st %g3,[%o0+12] C 4 - add %o0,16,%o0 - rd %y,%g2 C 4 - addx %g0,%g2,%g2 -L(loop01): - addcc %o2,-4,%o2 - bg L(loop) - umul %o4,%o3,%g3 C 1 - - addcc %g3,%g2,%g3 C 4 - st %g3,[%o0+0] C 4 - rd %y,%g2 C 4 - - retl - addx %g0,%g2,%o0 -EPILOGUE(mpn_mul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/submul_1.asm deleted file mode 100644 index 187314eceff425fb70563fbfbec65db7427bbcc8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/submul_1.asm +++ /dev/null @@ -1,67 +0,0 @@ -dnl SPARC v8 mpn_submul_1 -- Multiply a limb vector with a limb and -dnl subtract the result from a second limb vector. - -dnl Copyright 1992-1994, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr o0 -C s1_ptr o1 -C size o2 -C s2_limb o3 - -ASM_START() -PROLOGUE(mpn_submul_1) - sub %g0,%o2,%o2 C negate ... - sll %o2,2,%o2 C ... and scale size - sub %o1,%o2,%o1 C o1 is offset s1_ptr - sub %o0,%o2,%g1 C g1 is offset res_ptr - - mov 0,%o0 C clear cy_limb - -L(loop): - ld [%o1+%o2],%o4 - ld [%g1+%o2],%g2 - umul %o4,%o3,%o5 - rd %y,%g3 - addcc %o5,%o0,%o5 - addx %g3,0,%o0 - subcc %g2,%o5,%g2 - addx %o0,0,%o0 - st %g2,[%g1+%o2] - - addcc %o2,4,%o2 - bne L(loop) - nop - - retl - nop -EPILOGUE(mpn_submul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/supersparc/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/supersparc/gmp-mparam.h deleted file mode 100644 index 1ac9239e3c53f6b263d35a66e5d896989080e6c9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/supersparc/gmp-mparam.h +++ /dev/null @@ -1,73 +0,0 @@ -/* SuperSPARC gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2004 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* Generated by tuneup.c, 2004-02-10, gcc 3.3 */ - -#define MUL_TOOM22_THRESHOLD 14 -#define MUL_TOOM33_THRESHOLD 81 - -#define SQR_BASECASE_THRESHOLD 5 -#define SQR_TOOM2_THRESHOLD 28 -#define SQR_TOOM3_THRESHOLD 86 - -#define DIV_SB_PREINV_THRESHOLD 0 /* always */ -#define DIV_DC_THRESHOLD 26 -#define POWM_THRESHOLD 79 - -#define HGCD_THRESHOLD 97 -#define GCD_ACCEL_THRESHOLD 3 -#define GCD_DC_THRESHOLD 470 -#define JACOBI_BASE_METHOD 2 - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 3 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 3 -#define USE_PREINV_DIVREM_1 1 -#define USE_PREINV_MOD_1 1 -#define DIVREM_2_THRESHOLD 0 /* always */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define MODEXACT_1_ODD_THRESHOLD 0 /* always */ - -#define GET_STR_DC_THRESHOLD 19 -#define GET_STR_PRECOMPUTE_THRESHOLD 34 -#define SET_STR_THRESHOLD 3524 - -#define MUL_FFT_TABLE { 304, 800, 1408, 3584, 10240, 24576, 0 } -#define MUL_FFT_MODF_THRESHOLD 264 -#define MUL_FFT_THRESHOLD 2304 - -#define SQR_FFT_TABLE { 336, 800, 1408, 3584, 10240, 24576, 0 } -#define SQR_FFT_MODF_THRESHOLD 280 -#define SQR_FFT_THRESHOLD 2304 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/supersparc/udiv.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/supersparc/udiv.asm deleted file mode 100644 index 12f66ce6a27735060d845ce67fb7531e3ea06f01..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/supersparc/udiv.asm +++ /dev/null @@ -1,131 +0,0 @@ -dnl SuperSPARC mpn_udiv_qrnnd division support, used from longlong.h. -dnl This is for SuperSPARC only, to compensate for its semi-functional -dnl udiv instruction. - -dnl Copyright 1993, 1994, 1996, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C rem_ptr i0 -C n1 i1 -C n0 i2 -C d i3 - -ASM_START() - -ifdef(`PIC', -` TEXT -L(getpc): - retl - nop') - - TEXT - ALIGN(8) -L(C0): .double 0r4294967296 -L(C1): .double 0r2147483648 - -PROLOGUE(mpn_udiv_qrnnd) - save %sp,-104,%sp - st %i1,[%fp-8] - ld [%fp-8],%f10 - -ifdef(`PIC', -`L(pc): call L(getpc) C put address of this insn in %o7 - ldd [%o7+L(C0)-L(pc)],%f8', -` sethi %hi(L(C0)),%o7 - ldd [%o7+%lo(L(C0))],%f8') - - fitod %f10,%f4 - cmp %i1,0 - bge L(248) - mov %i0,%i5 - faddd %f4,%f8,%f4 -L(248): - st %i2,[%fp-8] - ld [%fp-8],%f10 - fmuld %f4,%f8,%f6 - cmp %i2,0 - bge L(249) - fitod %f10,%f2 - faddd %f2,%f8,%f2 -L(249): - st %i3,[%fp-8] - faddd %f6,%f2,%f2 - ld [%fp-8],%f10 - cmp %i3,0 - bge L(250) - fitod %f10,%f4 - faddd %f4,%f8,%f4 -L(250): - fdivd %f2,%f4,%f2 - -ifdef(`PIC', -` ldd [%o7+L(C1)-L(pc)],%f4', -` sethi %hi(L(C1)),%o7 - ldd [%o7+%lo(L(C1))],%f4') - - fcmped %f2,%f4 - nop - fbge,a L(251) - fsubd %f2,%f4,%f2 - fdtoi %f2,%f2 - st %f2,[%fp-8] - b L(252) - ld [%fp-8],%i4 -L(251): - fdtoi %f2,%f2 - st %f2,[%fp-8] - ld [%fp-8],%i4 - sethi %hi(-2147483648),%g2 - xor %i4,%g2,%i4 -L(252): - umul %i3,%i4,%g3 - rd %y,%i0 - subcc %i2,%g3,%o7 - subxcc %i1,%i0,%g0 - be L(253) - cmp %o7,%i3 - - add %i4,-1,%i0 - add %o7,%i3,%o7 - st %o7,[%i5] - ret - restore -L(253): - blu L(246) - mov %i4,%i0 - add %i4,1,%i0 - sub %o7,%i3,%o7 -L(246): - st %o7,[%i5] - ret - restore -EPILOGUE(mpn_udiv_qrnnd) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/udiv.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/udiv.asm deleted file mode 100644 index 12f66ce6a27735060d845ce67fb7531e3ea06f01..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/udiv.asm +++ /dev/null @@ -1,131 +0,0 @@ -dnl SuperSPARC mpn_udiv_qrnnd division support, used from longlong.h. -dnl This is for SuperSPARC only, to compensate for its semi-functional -dnl udiv instruction. - -dnl Copyright 1993, 1994, 1996, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C rem_ptr i0 -C n1 i1 -C n0 i2 -C d i3 - -ASM_START() - -ifdef(`PIC', -` TEXT -L(getpc): - retl - nop') - - TEXT - ALIGN(8) -L(C0): .double 0r4294967296 -L(C1): .double 0r2147483648 - -PROLOGUE(mpn_udiv_qrnnd) - save %sp,-104,%sp - st %i1,[%fp-8] - ld [%fp-8],%f10 - -ifdef(`PIC', -`L(pc): call L(getpc) C put address of this insn in %o7 - ldd [%o7+L(C0)-L(pc)],%f8', -` sethi %hi(L(C0)),%o7 - ldd [%o7+%lo(L(C0))],%f8') - - fitod %f10,%f4 - cmp %i1,0 - bge L(248) - mov %i0,%i5 - faddd %f4,%f8,%f4 -L(248): - st %i2,[%fp-8] - ld [%fp-8],%f10 - fmuld %f4,%f8,%f6 - cmp %i2,0 - bge L(249) - fitod %f10,%f2 - faddd %f2,%f8,%f2 -L(249): - st %i3,[%fp-8] - faddd %f6,%f2,%f2 - ld [%fp-8],%f10 - cmp %i3,0 - bge L(250) - fitod %f10,%f4 - faddd %f4,%f8,%f4 -L(250): - fdivd %f2,%f4,%f2 - -ifdef(`PIC', -` ldd [%o7+L(C1)-L(pc)],%f4', -` sethi %hi(L(C1)),%o7 - ldd [%o7+%lo(L(C1))],%f4') - - fcmped %f2,%f4 - nop - fbge,a L(251) - fsubd %f2,%f4,%f2 - fdtoi %f2,%f2 - st %f2,[%fp-8] - b L(252) - ld [%fp-8],%i4 -L(251): - fdtoi %f2,%f2 - st %f2,[%fp-8] - ld [%fp-8],%i4 - sethi %hi(-2147483648),%g2 - xor %i4,%g2,%i4 -L(252): - umul %i3,%i4,%g3 - rd %y,%i0 - subcc %i2,%g3,%o7 - subxcc %i1,%i0,%g0 - be L(253) - cmp %o7,%i3 - - add %i4,-1,%i0 - add %o7,%i3,%o7 - st %o7,[%i5] - ret - restore -L(253): - blu L(246) - mov %i4,%i0 - add %i4,1,%i0 - sub %o7,%i3,%o7 -L(246): - st %o7,[%i5] - ret - restore -EPILOGUE(mpn_udiv_qrnnd) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/umul.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/umul.asm deleted file mode 100644 index 1a2e84b1f6e6fc1f7171faa16587d513fa3f2931..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v8/umul.asm +++ /dev/null @@ -1,40 +0,0 @@ -dnl SPARC v8 mpn_umul_ppmm -- support for longlong.h for non-gcc. - -dnl Copyright 1995, 1996, 2000 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_umul_ppmm) - umul %o1,%o2,%g2 - st %g2,[%o0] - retl - rd %y,%o0 -EPILOGUE(mpn_umul_ppmm) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/README b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/README deleted file mode 100644 index 9b39713271d8f01899482c3be3be494dc361a577..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/README +++ /dev/null @@ -1,4 +0,0 @@ -Code for SPARC processors implementing version 9 of the SPARC architecture. -This code is for systems that doesn't preserve the full 64-bit contents of -integer register at context switch. For other systems (such as Solaris 7 or -later) use the code in ../../sparc64. diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/add_n.asm deleted file mode 100644 index 7bd5974fd38f73ede7b342c118f1bd83fc98dfd1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/add_n.asm +++ /dev/null @@ -1,129 +0,0 @@ -dnl SPARC mpn_add_n -- Add two limb vectors of the same length > 0 and store -dnl sum in a third limb vector. - -dnl Copyright 2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -define(rp,%o0) -define(s1p,%o1) -define(s2p,%o2) -define(n,%o3) -define(cy,%g1) - -C This code uses 64-bit operations on `o' and `g' registers. It doesn't -C require that `o' registers' upper 32 bits are preserved by the operating -C system, but if they are not, they must be zeroed. That is indeed what -C happens at least on Slowaris 2.5 and 2.6. - -C On UltraSPARC 1 and 2, this code runs at 3 cycles/limb from the Dcache and at -C about 10 cycles/limb from the Ecache. - -ASM_START() -PROLOGUE(mpn_add_n) - lduw [s1p+0],%o4 - lduw [s2p+0],%o5 - addcc n,-2,n - bl,pn %icc,L(end1) - lduw [s1p+4],%g2 - lduw [s2p+4],%g3 - be,pn %icc,L(end2) - mov 0,cy - - .align 16 -L(loop): - add %o4,%o5,%g4 - add rp,8,rp - lduw [s1p+8],%o4 - fitod %f0,%f2 -C --- - add cy,%g4,%g4 - addcc n,-1,n - lduw [s2p+8],%o5 - fitod %f0,%f2 -C --- - srlx %g4,32,cy - add s2p,8,s2p - stw %g4,[rp-8] - be,pn %icc,L(exito)+4 -C --- - add %g2,%g3,%g4 - addcc n,-1,n - lduw [s1p+12],%g2 - fitod %f0,%f2 -C --- - add cy,%g4,%g4 - add s1p,8,s1p - lduw [s2p+4],%g3 - fitod %f0,%f2 -C --- - srlx %g4,32,cy - bne,pt %icc,L(loop) - stw %g4,[rp-4] -C --- -L(exite): - add %o4,%o5,%g4 - add cy,%g4,%g4 - srlx %g4,32,cy - stw %g4,[rp+0] - add %g2,%g3,%g4 - add cy,%g4,%g4 - stw %g4,[rp+4] - retl - srlx %g4,32,%o0 - -L(exito): - add %g2,%g3,%g4 - add cy,%g4,%g4 - srlx %g4,32,cy - stw %g4,[rp-4] - add %o4,%o5,%g4 - add cy,%g4,%g4 - stw %g4,[rp+0] - retl - srlx %g4,32,%o0 - -L(end1): - add %o4,%o5,%g4 - stw %g4,[rp+0] - retl - srlx %g4,32,%o0 - -L(end2): - add %o4,%o5,%g4 - srlx %g4,32,cy - stw %g4,[rp+0] - add %g2,%g3,%g4 - add cy,%g4,%g4 - stw %g4,[rp+4] - retl - srlx %g4,32,%o0 -EPILOGUE(mpn_add_n) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/addmul_1.asm deleted file mode 100644 index 2adf7a8a2f707d49ba1c88b2dacb1954299c11af..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/addmul_1.asm +++ /dev/null @@ -1,306 +0,0 @@ -dnl SPARC v9 32-bit mpn_addmul_1 -- Multiply a limb vector with a limb and add -dnl the result to a second limb vector. - -dnl Copyright 1998, 2000, 2001, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C Algorithm: We use two floating-point multiplies per limb product, with the -C invariant v operand split into two 16-bit pieces, and the u operand split -C into 32-bit pieces. We convert the two 48-bit products and transfer them to -C the integer unit. - -C cycles/limb -C UltraSPARC 1&2: 6.5 -C UltraSPARC 3: ? - -C Possible optimizations: -C 1. Combine 32-bit memory operations into 64-bit operations. Since we're -C memory bandwidth limited, this could save 1.5 cycles/limb. -C 2. Unroll the inner loop. Since we already use alternate temporary areas, -C it is very straightforward to unroll, using an exit branch midways. -C Unrolling would allow deeper scheduling which could improve speed for L2 -C cache case. -C 3. For mpn_mul_1: Use more alternating temp areas. The std'es and ldx'es -C aren't sufficiently apart-scheduled with just two temp areas. -C 4. Specialize for particular v values. If its upper 16 bits are zero, we -C could save many operations. - -C INPUT PARAMETERS -C rp i0 -C up i1 -C n i2 -C v i3 - -define(`FSIZE',224) - -ASM_START() -PROLOGUE(mpn_addmul_1) - add %sp, -FSIZE, %sp - sethi %hi(0xffff), %g1 - srl %o3, 16, %g2 - or %g1, %lo(0xffff), %g1 - and %o3, %g1, %g1 - stx %g1, [%sp+104] - stx %g2, [%sp+112] - ldd [%sp+104], %f6 - ldd [%sp+112], %f8 - fxtod %f6, %f6 - fxtod %f8, %f8 - ld [%sp+104], %f10 C zero f10 - - mov 0, %g3 C cy = 0 - -define(`fanop', `fitod %f18, %f0') C A quasi nop running in the FA pipe - - add %sp, 160, %o5 C point in scratch area - and %o5, -32, %o5 C align at 0 (mod 32) in scratch area - - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - add %o1, 4, %o1 C up++ - bne,pt %icc, .L_two_or_more - fxtod %f10, %f2 - - fmuld %f2, %f8, %f16 - fmuld %f2, %f6, %f4 - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+16] - std %f12, [%o5+24] - ldx [%o5+16], %g2 C p16 - ldx [%o5+24], %g1 C p0 - lduw [%o0], %g5 C read rp[i] - b .L1 - add %o0, -16, %o0 - - .align 16 -.L_two_or_more: - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fmuld %f2, %f8, %f16 - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - bne,pt %icc, .L_three_or_more - fxtod %f10, %f2 - - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+16] - fmuld %f2, %f8, %f16 - std %f12, [%o5+24] - fmuld %f2, %f6, %f4 - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+0] - std %f12, [%o5+8] - lduw [%o0], %g5 C read rp[i] - ldx [%o5+16], %g2 C p16 - ldx [%o5+24], %g1 C p0 - b .L2 - add %o0, -12, %o0 - - .align 16 -.L_three_or_more: - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+16] - fmuld %f2, %f8, %f16 - std %f12, [%o5+24] - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - bne,pt %icc, .L_four_or_more - fxtod %f10, %f2 - - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+0] - fmuld %f2, %f8, %f16 - std %f12, [%o5+8] - fmuld %f2, %f6, %f4 - fdtox %f16, %f14 - ldx [%o5+16], %g2 C p16 - fdtox %f4, %f12 - ldx [%o5+24], %g1 C p0 - std %f14, [%o5+16] - std %f12, [%o5+24] - lduw [%o0], %g5 C read rp[i] - b .L3 - add %o0, -8, %o0 - - .align 16 -.L_four_or_more: - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+0] - fmuld %f2, %f8, %f16 - std %f12, [%o5+8] - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - bne,pt %icc, .L_five_or_more - fxtod %f10, %f2 - - fdtox %f16, %f14 - ldx [%o5+16], %g2 C p16 - fdtox %f4, %f12 - ldx [%o5+24], %g1 C p0 - std %f14, [%o5+16] - fmuld %f2, %f8, %f16 - std %f12, [%o5+24] - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - lduw [%o0], %g5 C read rp[i] - b .L4 - add %o0, -4, %o0 - - .align 16 -.L_five_or_more: - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fdtox %f16, %f14 - ldx [%o5+16], %g2 C p16 - fdtox %f4, %f12 - ldx [%o5+24], %g1 C p0 - std %f14, [%o5+16] - fmuld %f2, %f8, %f16 - std %f12, [%o5+24] - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - lduw [%o0], %g5 C read rp[i] - bne,pt %icc, .Loop - fxtod %f10, %f2 - b,a .L5 - -C BEGIN MAIN LOOP - .align 16 -C -- 0 -.Loop: nop - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fdtox %f16, %f14 -C -- 1 - sllx %g2, 16, %g4 C (p16 << 16) - add %o0, 4, %o0 C rp++ - ldx [%o5+0], %g2 C p16 - fdtox %f4, %f12 -C -- 2 - nop - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - fanop -C -- 3 - nop - add %g3, %g4, %g4 C p += cy - std %f14, [%o5+0] - fmuld %f2, %f8, %f16 -C -- 4 - nop - add %g5, %g4, %g4 C p += rp[i] - std %f12, [%o5+8] - fmuld %f2, %f6, %f4 -C -- 5 - xor %o5, 16, %o5 C alternate scratch variables - add %o1, 4, %o1 C up++ - stw %g4, [%o0-4] - fanop -C -- 6 - srlx %g4, 32, %g3 C new cy - lduw [%o0], %g5 C read rp[i] - bne,pt %icc, .Loop - fxtod %f10, %f2 -C END MAIN LOOP - -.L5: fdtox %f16, %f14 - sllx %g2, 16, %g4 C (p16 << 16) - ldx [%o5+0], %g2 C p16 - fdtox %f4, %f12 - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - add %g4, %g3, %g4 C p += cy - std %f14, [%o5+0] - fmuld %f2, %f8, %f16 - add %g5, %g4, %g4 C p += rp[i] - std %f12, [%o5+8] - fmuld %f2, %f6, %f4 - xor %o5, 16, %o5 - stw %g4, [%o0+0] - srlx %g4, 32, %g3 C new cy - lduw [%o0+4], %g5 C read rp[i] - -.L4: fdtox %f16, %f14 - sllx %g2, 16, %g4 C (p16 << 16) - ldx [%o5+0], %g2 C p16 - fdtox %f4, %f12 - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - add %g3, %g4, %g4 C p += cy - std %f14, [%o5+0] - add %g5, %g4, %g4 C p += rp[i] - std %f12, [%o5+8] - xor %o5, 16, %o5 - stw %g4, [%o0+4] - srlx %g4, 32, %g3 C new cy - lduw [%o0+8], %g5 C read rp[i] - -.L3: sllx %g2, 16, %g4 C (p16 << 16) - ldx [%o5+0], %g2 C p16 - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - add %g3, %g4, %g4 C p += cy - add %g5, %g4, %g4 C p += rp[i] - xor %o5, 16, %o5 - stw %g4, [%o0+8] - srlx %g4, 32, %g3 C new cy - lduw [%o0+12], %g5 C read rp[i] - -.L2: sllx %g2, 16, %g4 C (p16 << 16) - ldx [%o5+0], %g2 C p16 - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - add %g3, %g4, %g4 C p += cy - add %g5, %g4, %g4 C p += rp[i] - stw %g4, [%o0+12] - srlx %g4, 32, %g3 C new cy - lduw [%o0+16], %g5 C read rp[i] - -.L1: sllx %g2, 16, %g4 C (p16 << 16) - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - add %g3, %g4, %g4 C p += cy - add %g5, %g4, %g4 C p += rp[i] - stw %g4, [%o0+16] - srlx %g4, 32, %g3 C new cy - - mov %g3, %o0 - retl - sub %sp, -FSIZE, %sp -EPILOGUE(mpn_addmul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/gmp-mparam.h deleted file mode 100644 index f909e2cf18ef18cce7312c06cc8c1046a86c71ba..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/gmp-mparam.h +++ /dev/null @@ -1,204 +0,0 @@ -/* SPARC v9 32-bit gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2002, 2004, 2009-2011, 2014 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 1593 MHz ultrasparc3 running Solaris 10 (swift.nada.kth.se) */ -/* FFT tuning limit = 25000000 */ -/* Generated by tuneup.c, 2014-03-16, gcc 3.4 */ - -#define DIVREM_1_NORM_THRESHOLD 3 -#define DIVREM_1_UNNORM_THRESHOLD 4 -#define MOD_1_1P_METHOD 2 -#define MOD_1_NORM_THRESHOLD 3 -#define MOD_1_UNNORM_THRESHOLD 4 -#define MOD_1N_TO_MOD_1_1_THRESHOLD 13 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 12 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 0 /* never mpn_mod_1_1p */ -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 22 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 32 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 4 -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ - -#define MUL_TOOM22_THRESHOLD 28 -#define MUL_TOOM33_THRESHOLD 43 -#define MUL_TOOM44_THRESHOLD 126 -#define MUL_TOOM6H_THRESHOLD 161 -#define MUL_TOOM8H_THRESHOLD 208 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 73 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 80 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 85 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 55 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 72 - -#define SQR_BASECASE_THRESHOLD 4 -#define SQR_TOOM2_THRESHOLD 64 -#define SQR_TOOM3_THRESHOLD 85 -#define SQR_TOOM4_THRESHOLD 152 -#define SQR_TOOM6_THRESHOLD 185 -#define SQR_TOOM8_THRESHOLD 324 - -#define MULMID_TOOM42_THRESHOLD 64 - -#define MULMOD_BNM1_THRESHOLD 12 -#define SQRMOD_BNM1_THRESHOLD 16 - -#define MUL_FFT_MODF_THRESHOLD 288 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 288, 5}, { 9, 4}, { 19, 5}, { 11, 6}, \ - { 6, 5}, { 14, 6}, { 8, 5}, { 17, 6}, \ - { 9, 5}, { 20, 6}, { 13, 7}, { 7, 6}, \ - { 16, 7}, { 9, 6}, { 19, 7}, { 11, 6}, \ - { 23, 7}, { 13, 8}, { 7, 7}, { 15, 6}, \ - { 31, 7}, { 19, 8}, { 11, 7}, { 23, 9}, \ - { 7, 8}, { 15, 7}, { 31, 8}, { 19, 7}, \ - { 39, 8}, { 27, 9}, { 15, 8}, { 31, 7}, \ - { 63, 8}, { 39, 9}, { 23, 8}, { 47,10}, \ - { 15, 9}, { 31, 8}, { 67, 9}, { 39, 8}, \ - { 79, 9}, { 47,10}, { 31, 9}, { 71, 8}, \ - { 143, 9}, { 79,10}, { 47, 9}, { 95,11}, \ - { 31,10}, { 63, 9}, { 135, 8}, { 271, 9}, \ - { 143, 8}, { 287,10}, { 79, 9}, { 175,10}, \ - { 95, 9}, { 191, 8}, { 383,10}, { 111,11}, \ - { 63,10}, { 143, 9}, { 287, 8}, { 575,10}, \ - { 175,11}, { 95,10}, { 191, 9}, { 415, 8}, \ - { 831,12}, { 63,11}, { 127,10}, { 287, 9}, \ - { 575,11}, { 159,10}, { 351, 9}, { 703,11}, \ - { 191,10}, { 415, 9}, { 831,11}, { 223,10}, \ - { 447, 9}, { 895, 8}, { 1791,12}, { 127,11}, \ - { 287,10}, { 607, 9}, { 1215, 8}, { 2431,11}, \ - { 319, 9}, { 1279,11}, { 351,12}, { 191,11}, \ - { 415,10}, { 831,11}, { 447,10}, { 895, 9}, \ - { 1791,11}, { 479,13}, { 127,12}, { 255,11}, \ - { 575,10}, { 1151,11}, { 607,12}, { 319,11}, \ - { 703,12}, { 383,11}, { 831,12}, { 447,11}, \ - { 895,10}, { 1791,11}, { 959,13}, { 255,12}, \ - { 575,11}, { 1215,10}, { 2431,12}, { 703,13}, \ - { 383,12}, { 959,14}, { 255,13}, { 511,12}, \ - { 1087,11}, { 2175,12}, { 1215,11}, { 2431,13}, \ - { 639,12}, { 1407,11}, { 2943,13}, { 895,12}, \ - { 1919,14}, { 511,13}, { 1151,12}, { 2431,13}, \ - { 1407,14}, { 767,13}, { 1791,15}, { 511,14}, \ - { 1023,13}, { 2431,14}, { 1279,13}, { 2943,12}, \ - { 5887,14}, { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 143 -#define MUL_FFT_THRESHOLD 2240 - -#define SQR_FFT_MODF_THRESHOLD 244 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 244, 5}, { 8, 4}, { 17, 5}, { 17, 6}, \ - { 9, 5}, { 19, 6}, { 17, 7}, { 9, 6}, \ - { 20, 7}, { 11, 6}, { 23, 7}, { 13, 8}, \ - { 7, 7}, { 19, 8}, { 11, 7}, { 25, 9}, \ - { 7, 8}, { 15, 7}, { 33, 8}, { 19, 7}, \ - { 39, 8}, { 23, 9}, { 15, 8}, { 39, 9}, \ - { 23,10}, { 15, 9}, { 31, 8}, { 63, 9}, \ - { 47,10}, { 31, 9}, { 63, 8}, { 127, 9}, \ - { 71, 8}, { 143, 7}, { 287, 9}, { 79,10}, \ - { 47,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255, 9}, { 143, 8}, { 287,10}, { 79, 9}, \ - { 159, 8}, { 319, 9}, { 175, 8}, { 351, 7}, \ - { 703,10}, { 95, 9}, { 191, 8}, { 383, 9}, \ - { 207, 8}, { 415, 9}, { 223,11}, { 63,10}, \ - { 127, 9}, { 271,10}, { 143, 9}, { 287, 8}, \ - { 575,10}, { 159, 9}, { 319,10}, { 175, 9}, \ - { 351, 8}, { 703,11}, { 95,10}, { 191, 9}, \ - { 383,10}, { 207, 9}, { 415, 8}, { 831,10}, \ - { 223,12}, { 63,11}, { 127,10}, { 271, 9}, \ - { 543,10}, { 287, 9}, { 575,11}, { 159,10}, \ - { 319, 9}, { 639,10}, { 351, 9}, { 703, 8}, \ - { 1407,11}, { 191,10}, { 415, 9}, { 831,11}, \ - { 223,10}, { 447, 9}, { 895,10}, { 479,12}, \ - { 127,11}, { 255,10}, { 543,11}, { 287,10}, \ - { 575,11}, { 319,10}, { 639,11}, { 351,10}, \ - { 703,12}, { 191,11}, { 415,10}, { 831,11}, \ - { 447,10}, { 895, 9}, { 1791,13}, { 127,12}, \ - { 255,11}, { 575,12}, { 319,11}, { 703,10}, \ - { 1407,12}, { 383,11}, { 831,12}, { 447,11}, \ - { 959,10}, { 1919, 9}, { 3839,13}, { 255,12}, \ - { 575,11}, { 1151,12}, { 703,11}, { 1407,13}, \ - { 383,12}, { 959,14}, { 255,13}, { 511,12}, \ - { 1215,11}, { 2431,13}, { 639,12}, { 1407,13}, \ - { 767,12}, { 1599,13}, { 895,12}, { 1919,14}, \ - { 511,13}, { 1151,12}, { 2431,13}, { 1407,12}, \ - { 2815,14}, { 767,13}, { 1535,12}, { 3071,13}, \ - { 1919,15}, { 511,14}, { 1023,13}, { 2431,14}, \ - { 1279,13}, { 2943,12}, { 5887,14}, { 16384,15}, \ - { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 153 -#define SQR_FFT_THRESHOLD 2112 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 144 -#define MULLO_MUL_N_THRESHOLD 4292 - -#define DC_DIV_QR_THRESHOLD 74 -#define DC_DIVAPPR_Q_THRESHOLD 406 -#define DC_BDIV_QR_THRESHOLD 63 -#define DC_BDIV_Q_THRESHOLD 363 - -#define INV_MULMOD_BNM1_THRESHOLD 108 -#define INV_NEWTON_THRESHOLD 351 -#define INV_APPR_THRESHOLD 303 - -#define BINV_NEWTON_THRESHOLD 354 -#define REDC_1_TO_REDC_N_THRESHOLD 61 - -#define MU_DIV_QR_THRESHOLD 998 -#define MU_DIVAPPR_Q_THRESHOLD 1099 -#define MUPI_DIV_QR_THRESHOLD 118 -#define MU_BDIV_QR_THRESHOLD 807 -#define MU_BDIV_Q_THRESHOLD 979 - -#define POWM_SEC_TABLE 3,22,127,624,779,2351 - -#define MATRIX22_STRASSEN_THRESHOLD 7 -#define HGCD_THRESHOLD 90 -#define HGCD_APPR_THRESHOLD 123 -#define HGCD_REDUCE_THRESHOLD 1494 -#define GCD_DC_THRESHOLD 283 -#define GCDEXT_DC_THRESHOLD 192 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 12 -#define GET_STR_PRECOMPUTE_THRESHOLD 27 -#define SET_STR_DC_THRESHOLD 290 -#define SET_STR_PRECOMPUTE_THRESHOLD 634 - -#define FAC_DSC_THRESHOLD 156 -#define FAC_ODD_THRESHOLD 25 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/mul_1.asm deleted file mode 100644 index 40aeffad4f31568415c17448b601cf8038ec5e2a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/mul_1.asm +++ /dev/null @@ -1,287 +0,0 @@ -dnl SPARC v9 32-bit mpn_mul_1 -- Multiply a limb vector with a limb and store -dnl the result in a second limb vector. - -dnl Copyright 1998, 2000, 2001, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C Algorithm: We use two floating-point multiplies per limb product, with the -C invariant v operand split into two 16-bit pieces, and the u operand split -C into 32-bit pieces. We convert the two 48-bit products and transfer them to -C the integer unit. - -C cycles/limb -C UltraSPARC 1&2: 6.5 -C UltraSPARC 3: ? - -C Possible optimizations: -C 1. Combine 32-bit memory operations into 64-bit operations. Since we're -C memory bandwidth limited, this could save 1.5 cycles/limb. -C 2. Unroll the inner loop. Since we already use alternate temporary areas, -C it is very straightforward to unroll, using an exit branch midways. -C Unrolling would allow deeper scheduling which could improve speed for L2 -C cache case. -C 3. For mpn_mul_1: Use more alternating temp areas. The std'es and ldx'es -C aren't sufficiently apart-scheduled with just two temp areas. -C 4. Specialize for particular v values. If its upper 16 bits are zero, we -C could save many operations. - -C INPUT PARAMETERS -C rp i0 -C up i1 -C n i2 -C v i3 - -define(`FSIZE',224) - -ASM_START() -PROLOGUE(mpn_mul_1) - add %sp, -FSIZE, %sp - sethi %hi(0xffff), %g1 - srl %o3, 16, %g2 - or %g1, %lo(0xffff), %g1 - and %o3, %g1, %g1 - stx %g1, [%sp+104] - stx %g2, [%sp+112] - ldd [%sp+104], %f6 - ldd [%sp+112], %f8 - fxtod %f6, %f6 - fxtod %f8, %f8 - ld [%sp+104], %f10 C zero f10 - - mov 0, %g3 C cy = 0 - -define(`fanop', `fitod %f18, %f0') C A quasi nop running in the FA pipe - - add %sp, 160, %o5 C point in scratch area - and %o5, -32, %o5 C align at 0 (mod 32) in scratch area - - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - add %o1, 4, %o1 C up++ - bne,pt %icc, .L_two_or_more - fxtod %f10, %f2 - - fmuld %f2, %f8, %f16 - fmuld %f2, %f6, %f4 - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+16] - std %f12, [%o5+24] - ldx [%o5+16], %g2 C p16 - ldx [%o5+24], %g1 C p0 - b .L1 - add %o0, -16, %o0 - - .align 16 -.L_two_or_more: - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fmuld %f2, %f8, %f16 - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - bne,pt %icc, .L_three_or_more - fxtod %f10, %f2 - - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+16] - fmuld %f2, %f8, %f16 - std %f12, [%o5+24] - fmuld %f2, %f6, %f4 - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+0] - std %f12, [%o5+8] - ldx [%o5+16], %g2 C p16 - ldx [%o5+24], %g1 C p0 - b .L2 - add %o0, -12, %o0 - - .align 16 -.L_three_or_more: - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+16] - fmuld %f2, %f8, %f16 - std %f12, [%o5+24] - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - bne,pt %icc, .L_four_or_more - fxtod %f10, %f2 - - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+0] - fmuld %f2, %f8, %f16 - std %f12, [%o5+8] - fmuld %f2, %f6, %f4 - fdtox %f16, %f14 - ldx [%o5+16], %g2 C p16 - fdtox %f4, %f12 - ldx [%o5+24], %g1 C p0 - std %f14, [%o5+16] - std %f12, [%o5+24] - b .L3 - add %o0, -8, %o0 - - .align 16 -.L_four_or_more: - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+0] - fmuld %f2, %f8, %f16 - std %f12, [%o5+8] - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - bne,pt %icc, .L_five_or_more - fxtod %f10, %f2 - - fdtox %f16, %f14 - ldx [%o5+16], %g2 C p16 - fdtox %f4, %f12 - ldx [%o5+24], %g1 C p0 - std %f14, [%o5+16] - fmuld %f2, %f8, %f16 - std %f12, [%o5+24] - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - b .L4 - add %o0, -4, %o0 - - .align 16 -.L_five_or_more: - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fdtox %f16, %f14 - ldx [%o5+16], %g2 C p16 - fdtox %f4, %f12 - ldx [%o5+24], %g1 C p0 - std %f14, [%o5+16] - fmuld %f2, %f8, %f16 - std %f12, [%o5+24] - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - bne,pt %icc, .Loop - fxtod %f10, %f2 - b,a .L5 - -C BEGIN MAIN LOOP - .align 16 -C -- 0 -.Loop: nop - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fdtox %f16, %f14 -C -- 1 - sllx %g2, 16, %g4 C (p16 << 16) - add %o0, 4, %o0 C rp++ - ldx [%o5+0], %g2 C p16 - fdtox %f4, %f12 -C -- 2 - nop - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - fanop -C -- 3 - nop - add %g3, %g4, %g4 C p += cy - std %f14, [%o5+0] - fmuld %f2, %f8, %f16 -C -- 4 - srlx %g4, 32, %g3 C new cy - add %o1, 4, %o1 C up++ - std %f12, [%o5+8] - fmuld %f2, %f6, %f4 -C -- 5 - xor %o5, 16, %o5 C alternate scratch variables - stw %g4, [%o0-4] - bne,pt %icc, .Loop - fxtod %f10, %f2 -C END MAIN LOOP - -.L5: fdtox %f16, %f14 - sllx %g2, 16, %g4 C (p16 << 16) - ldx [%o5+0], %g2 C p16 - fdtox %f4, %f12 - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - add %g4, %g3, %g4 C p += cy - std %f14, [%o5+0] - fmuld %f2, %f8, %f16 - std %f12, [%o5+8] - fmuld %f2, %f6, %f4 - xor %o5, 16, %o5 - stw %g4, [%o0+0] - srlx %g4, 32, %g3 C new cy - -.L4: fdtox %f16, %f14 - sllx %g2, 16, %g4 C (p16 << 16) - ldx [%o5+0], %g2 C p16 - fdtox %f4, %f12 - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - add %g3, %g4, %g4 C p += cy - std %f14, [%o5+0] - std %f12, [%o5+8] - xor %o5, 16, %o5 - stw %g4, [%o0+4] - srlx %g4, 32, %g3 C new cy - -.L3: sllx %g2, 16, %g4 C (p16 << 16) - ldx [%o5+0], %g2 C p16 - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - add %g3, %g4, %g4 C p += cy - xor %o5, 16, %o5 - stw %g4, [%o0+8] - srlx %g4, 32, %g3 C new cy - -.L2: sllx %g2, 16, %g4 C (p16 << 16) - ldx [%o5+0], %g2 C p16 - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - add %g3, %g4, %g4 C p += cy - stw %g4, [%o0+12] - srlx %g4, 32, %g3 C new cy - -.L1: sllx %g2, 16, %g4 C (p16 << 16) - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - add %g3, %g4, %g4 C p += cy - stw %g4, [%o0+16] - srlx %g4, 32, %g3 C new cy - - mov %g3, %o0 - retl - sub %sp, -FSIZE, %sp -EPILOGUE(mpn_mul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/sqr_diagonal.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/sqr_diagonal.asm deleted file mode 100644 index e0242798496a15a36977e7980123aec54deb5471..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/sqr_diagonal.asm +++ /dev/null @@ -1,462 +0,0 @@ -dnl SPARC v9 32-bit mpn_sqr_diagonal. - -dnl Copyright 2001, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C rp i0 -C up i1 -C n i2 - -C This code uses a very deep software pipeline, due to the need for moving data -C forth and back between the integer registers and floating-point registers. -C -C A VIS variant of this code would make the pipeline less deep, since the -C masking now done in the integer unit could take place in the floating-point -C unit using the FAND instruction. It would be possible to save several cycles -C too. -C -C On UltraSPARC 1 and 2, this code runs at 11 cycles/limb from the Dcache and -C not much slower from the Ecache. It would perhaps be possible to shave off -C one cycle, but not easily. We cannot do better than 10 cycles/limb with the -C used instructions, since we have 10 memory operations per limb. But a VIS -C variant could run three cycles faster than the corresponding non-VIS code. - -C This is non-pipelined code showing the algorithm: -C -C .Loop: -C lduw [up+0],%g4 C 00000000hhhhllll -C sllx %g4,16,%g3 C 0000hhhhllll0000 -C or %g3,%g4,%g2 C 0000hhhhXXXXllll -C andn %g2,%g5,%g2 C 0000hhhh0000llll -C stx %g2,[%fp+80] -C ldd [%fp+80],%f0 -C fitod %f0,%f4 C hi16 -C fitod %f1,%f6 C lo16 -C ld [up+0],%f9 -C fxtod %f8,%f2 -C fmuld %f2,%f4,%f4 -C fmuld %f2,%f6,%f6 -C fdtox %f4,%f4 -C fdtox %f6,%f6 -C std %f4,[%fp-24] -C std %f6,[%fp-16] -C ldx [%fp-24],%g2 -C ldx [%fp-16],%g1 -C sllx %g2,16,%g2 -C add %g2,%g1,%g1 -C stw %g1,[rp+0] -C srlx %g1,32,%l0 -C stw %l0,[rp+4] -C add up,4,up -C subcc n,1,n -C bne,pt %icc,.Loop -C add rp,8,rp - -define(`fanop',`fitod %f12,%f10') dnl A quasi nop running in the FA pipe - -ASM_START() - - TEXT - ALIGN(4) -.Lnoll: - .word 0 - -PROLOGUE(mpn_sqr_diagonal) - save %sp,-256,%sp - -ifdef(`PIC', -`.Lpc: rd %pc,%o7 - ld [%o7+.Lnoll-.Lpc],%f8', -` sethi %hi(.Lnoll),%g1 - ld [%g1+%lo(.Lnoll)],%f8') - - sethi %hi(0xffff0000),%g5 - add %i1,-8,%i1 - - lduw [%i1+8],%g4 - add %i1,4,%i1 C s1_ptr++ - sllx %g4,16,%g3 C 0000hhhhllll0000 - or %g3,%g4,%g2 C 0000hhhhXXXXllll - subcc %i2,1,%i2 - bne,pt %icc,.L_grt_1 - andn %g2,%g5,%g2 C 0000hhhh0000llll - - add %i1,4,%i1 C s1_ptr++ - stx %g2,[%fp+80] - ld [%i1],%f9 - ldd [%fp+80],%f0 - fxtod %f8,%f2 - fitod %f0,%f4 - fitod %f1,%f6 - fmuld %f2,%f4,%f4 - fmuld %f2,%f6,%f6 - fdtox %f4,%f4 - fdtox %f6,%f6 - std %f4,[%fp-24] - std %f6,[%fp-16] - - add %fp, 80, %l3 - add %fp, -24, %l4 - add %fp, 72, %l5 - b .L1 - add %fp, -40, %l6 - -.L_grt_1: - stx %g2,[%fp+80] - lduw [%i1+8],%g4 - add %i1,4,%i1 C s1_ptr++ - sllx %g4,16,%g3 C 0000hhhhllll0000 - or %g3,%g4,%g2 C 0000hhhhXXXXllll - subcc %i2,1,%i2 - bne,pt %icc,.L_grt_2 - andn %g2,%g5,%g2 C 0000hhhh0000llll - - stx %g2,[%fp+72] - ld [%i1],%f9 - add %i1,4,%i1 C s1_ptr++ - ldd [%fp+80],%f0 - fxtod %f8,%f2 - fitod %f0,%f4 - fitod %f1,%f6 - fmuld %f2,%f4,%f4 - ld [%i1],%f9 - fmuld %f2,%f6,%f6 - ldd [%fp+72],%f0 - fdtox %f4,%f4 - fdtox %f6,%f6 - std %f4,[%fp-24] - fxtod %f8,%f2 - std %f6,[%fp-16] - fitod %f0,%f4 - fitod %f1,%f6 - fmuld %f2,%f4,%f4 - fmuld %f2,%f6,%f6 - fdtox %f4,%f4 - - add %fp, 72, %l3 - add %fp, -40, %l4 - add %fp, 80, %l5 - b .L2 - add %fp, -24, %l6 - -.L_grt_2: - stx %g2,[%fp+72] - lduw [%i1+8],%g4 - ld [%i1],%f9 - add %i1,4,%i1 C s1_ptr++ - ldd [%fp+80],%f0 - sllx %g4,16,%g3 C 0000hhhhllll0000 - or %g3,%g4,%g2 C 0000hhhhXXXXllll - subcc %i2,1,%i2 - fxtod %f8,%f2 - bne,pt %icc,.L_grt_3 - andn %g2,%g5,%g2 C 0000hhhh0000llll - - stx %g2,[%fp+80] - fitod %f0,%f4 - fitod %f1,%f6 - fmuld %f2,%f4,%f4 - ld [%i1],%f9 - fmuld %f2,%f6,%f6 - add %i1,4,%i1 C s1_ptr++ - ldd [%fp+72],%f0 - fdtox %f4,%f4 - fdtox %f6,%f6 - std %f4,[%fp-24] - fxtod %f8,%f2 - std %f6,[%fp-16] - fitod %f0,%f4 - fitod %f1,%f6 - fmuld %f2,%f4,%f4 - ld [%i1],%f9 - add %fp, 80, %l3 - fmuld %f2,%f6,%f6 - add %fp, -24, %l4 - ldd [%fp+80],%f0 - add %fp, 72, %l5 - fdtox %f4,%f4 - b .L3 - add %fp, -40, %l6 - -.L_grt_3: - stx %g2,[%fp+80] - fitod %f0,%f4 - lduw [%i1+8],%g4 - fitod %f1,%f6 - fmuld %f2,%f4,%f4 - ld [%i1],%f9 - fmuld %f2,%f6,%f6 - add %i1,4,%i1 C s1_ptr++ - ldd [%fp+72],%f0 - fdtox %f4,%f4 - sllx %g4,16,%g3 C 0000hhhhllll0000 - fdtox %f6,%f6 - or %g3,%g4,%g2 C 0000hhhhXXXXllll - subcc %i2,1,%i2 - std %f4,[%fp-24] - fxtod %f8,%f2 - std %f6,[%fp-16] - bne,pt %icc,.L_grt_4 - andn %g2,%g5,%g2 C 0000hhhh0000llll - - stx %g2,[%fp+72] - fitod %f0,%f4 - fitod %f1,%f6 - add %fp, 72, %l3 - fmuld %f2,%f4,%f4 - add %fp, -40, %l4 - ld [%i1],%f9 - fmuld %f2,%f6,%f6 - add %i1,4,%i1 C s1_ptr++ - ldd [%fp+80],%f0 - add %fp, 80, %l5 - fdtox %f4,%f4 - b .L4 - add %fp, -24, %l6 - -.L_grt_4: - stx %g2,[%fp+72] - fitod %f0,%f4 - lduw [%i1+8],%g4 - fitod %f1,%f6 - fmuld %f2,%f4,%f4 - ld [%i1],%f9 - fmuld %f2,%f6,%f6 - add %i1,4,%i1 C s1_ptr++ - ldd [%fp+80],%f0 - fdtox %f4,%f4 - sllx %g4,16,%g3 C 0000hhhhllll0000 - fdtox %f6,%f6 - or %g3,%g4,%g2 C 0000hhhhXXXXllll - subcc %i2,1,%i2 - std %f4,[%fp-40] - fxtod %f8,%f2 - std %f6,[%fp-32] - be,pn %icc,.L5 - andn %g2,%g5,%g2 C 0000hhhh0000llll - - b,a .Loop - - .align 16 -C --- LOOP BEGIN -.Loop: nop - nop - stx %g2,[%fp+80] - fitod %f0,%f4 -C --- - nop - nop - lduw [%i1+8],%g4 - fitod %f1,%f6 -C --- - nop - nop - ldx [%fp-24],%g2 C p16 - fanop -C --- - nop - nop - ldx [%fp-16],%g1 C p0 - fmuld %f2,%f4,%f4 -C --- - sllx %g2,16,%g2 C align p16 - add %i0,8,%i0 C res_ptr++ - ld [%i1],%f9 - fmuld %f2,%f6,%f6 -C --- - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i1,4,%i1 C s1_ptr++ - ldd [%fp+72],%f0 - fanop -C --- - srlx %g1,32,%l0 - nop - stw %g1,[%i0-8] - fdtox %f4,%f4 -C --- - sllx %g4,16,%g3 C 0000hhhhllll0000 - nop - stw %l0,[%i0-4] - fdtox %f6,%f6 -C --- - or %g3,%g4,%g2 C 0000hhhhXXXXllll - subcc %i2,1,%i2 - std %f4,[%fp-24] - fxtod %f8,%f2 -C --- - std %f6,[%fp-16] - andn %g2,%g5,%g2 C 0000hhhh0000llll - be,pn %icc,.Lend - fanop -C --- LOOP MIDDLE - nop - nop - stx %g2,[%fp+72] - fitod %f0,%f4 -C --- - nop - nop - lduw [%i1+8],%g4 - fitod %f1,%f6 -C --- - nop - nop - ldx [%fp-40],%g2 C p16 - fanop -C --- - nop - nop - ldx [%fp-32],%g1 C p0 - fmuld %f2,%f4,%f4 -C --- - sllx %g2,16,%g2 C align p16 - add %i0,8,%i0 C res_ptr++ - ld [%i1],%f9 - fmuld %f2,%f6,%f6 -C --- - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i1,4,%i1 C s1_ptr++ - ldd [%fp+80],%f0 - fanop -C --- - srlx %g1,32,%l0 - nop - stw %g1,[%i0-8] - fdtox %f4,%f4 -C --- - sllx %g4,16,%g3 C 0000hhhhllll0000 - nop - stw %l0,[%i0-4] - fdtox %f6,%f6 -C --- - or %g3,%g4,%g2 C 0000hhhhXXXXllll - subcc %i2,1,%i2 - std %f4,[%fp-40] - fxtod %f8,%f2 -C --- - std %f6,[%fp-32] - andn %g2,%g5,%g2 C 0000hhhh0000llll - bne,pt %icc,.Loop - fanop -C --- LOOP END - -.L5: add %fp, 80, %l3 - add %fp, -24, %l4 - add %fp, 72, %l5 - b .Ltail - add %fp, -40, %l6 - -.Lend: add %fp, 72, %l3 - add %fp, -40, %l4 - add %fp, 80, %l5 - add %fp, -24, %l6 -.Ltail: stx %g2,[%l3] - fitod %f0,%f4 - fitod %f1,%f6 - ldx [%l4],%g2 C p16 - ldx [%l4+8],%g1 C p0 - fmuld %f2,%f4,%f4 - sllx %g2,16,%g2 C align p16 - add %i0,8,%i0 C res_ptr++ - ld [%i1],%f9 - fmuld %f2,%f6,%f6 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i1,4,%i1 C s1_ptr++ - ldd [%l5],%f0 - srlx %g1,32,%l0 - stw %g1,[%i0-8] - fdtox %f4,%f4 - stw %l0,[%i0-4] -.L4: fdtox %f6,%f6 - std %f4,[%l4] - fxtod %f8,%f2 - std %f6,[%l4+8] - - fitod %f0,%f4 - fitod %f1,%f6 - ldx [%l6],%g2 C p16 - ldx [%l6+8],%g1 C p0 - fmuld %f2,%f4,%f4 - sllx %g2,16,%g2 C align p16 - add %i0,8,%i0 C res_ptr++ - ld [%i1],%f9 - fmuld %f2,%f6,%f6 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - ldd [%l3],%f0 - srlx %g1,32,%l0 - stw %g1,[%i0-8] - fdtox %f4,%f4 - stw %l0,[%i0-4] -.L3: fdtox %f6,%f6 - std %f4,[%l6] - fxtod %f8,%f2 - std %f6,[%l6+8] - - fitod %f0,%f4 - fitod %f1,%f6 - ldx [%l4],%g2 C p16 - ldx [%l4+8],%g1 C p0 - fmuld %f2,%f4,%f4 - sllx %g2,16,%g2 C align p16 - add %i0,8,%i0 C res_ptr++ - fmuld %f2,%f6,%f6 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - srlx %g1,32,%l0 - stw %g1,[%i0-8] - fdtox %f4,%f4 - stw %l0,[%i0-4] -.L2: fdtox %f6,%f6 - std %f4,[%l4] - std %f6,[%l4+8] - - ldx [%l6],%g2 C p16 - ldx [%l6+8],%g1 C p0 - sllx %g2,16,%g2 C align p16 - add %i0,8,%i0 C res_ptr++ - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - srlx %g1,32,%l0 - stw %g1,[%i0-8] - stw %l0,[%i0-4] - -.L1: ldx [%l4],%g2 C p16 - ldx [%l4+8],%g1 C p0 - sllx %g2,16,%g2 C align p16 - add %i0,8,%i0 C res_ptr++ - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - srlx %g1,32,%l0 - stw %g1,[%i0-8] - stw %l0,[%i0-4] - - ret - restore %g0,%g0,%o0 - -EPILOGUE(mpn_sqr_diagonal) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/sub_n.asm deleted file mode 100644 index 636c73bf35c3d925b8a04f654f537024acba8223..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/sub_n.asm +++ /dev/null @@ -1,129 +0,0 @@ -dnl SPARC mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -dnl store difference in a third limb vector. - -dnl Copyright 2001 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -define(rp,%o0) -define(s1p,%o1) -define(s2p,%o2) -define(n,%o3) -define(cy,%g1) - -C This code uses 64-bit operations on `o' and `g' registers. It doesn't -C require that `o' registers' upper 32 bits are preserved by the operating -C system, but if they are not, they must be zeroed. That is indeed what -C happens at least on Slowaris 2.5 and 2.6. - -C On UltraSPARC 1 and 2, this code runs at 3 cycles/limb from the Dcache and at -C about 10 cycles/limb from the Ecache. - -ASM_START() -PROLOGUE(mpn_sub_n) - lduw [s1p+0],%o4 - lduw [s2p+0],%o5 - addcc n,-2,n - bl,pn %icc,L(end1) - lduw [s1p+4],%g2 - lduw [s2p+4],%g3 - be,pn %icc,L(end2) - mov 0,cy - - .align 16 -L(loop): - sub %o4,%o5,%g4 - add rp,8,rp - lduw [s1p+8],%o4 - fitod %f0,%f2 -C --- - sub %g4,cy,%g4 - addcc n,-1,n - lduw [s2p+8],%o5 - fitod %f0,%f2 -C --- - srlx %g4,63,cy - add s2p,8,s2p - stw %g4,[rp-8] - be,pn %icc,L(exito)+4 -C --- - sub %g2,%g3,%g4 - addcc n,-1,n - lduw [s1p+12],%g2 - fitod %f0,%f2 -C --- - sub %g4,cy,%g4 - add s1p,8,s1p - lduw [s2p+4],%g3 - fitod %f0,%f2 -C --- - srlx %g4,63,cy - bne,pt %icc,L(loop) - stw %g4,[rp-4] -C --- -L(exite): - sub %o4,%o5,%g4 - sub %g4,cy,%g4 - srlx %g4,63,cy - stw %g4,[rp+0] - sub %g2,%g3,%g4 - sub %g4,cy,%g4 - stw %g4,[rp+4] - retl - srlx %g4,63,%o0 - -L(exito): - sub %g2,%g3,%g4 - sub %g4,cy,%g4 - srlx %g4,63,cy - stw %g4,[rp-4] - sub %o4,%o5,%g4 - sub %g4,cy,%g4 - stw %g4,[rp+0] - retl - srlx %g4,63,%o0 - -L(end1): - sub %o4,%o5,%g4 - stw %g4,[rp+0] - retl - srlx %g4,63,%o0 - -L(end2): - sub %o4,%o5,%g4 - srlx %g4,63,cy - stw %g4,[rp+0] - sub %g2,%g3,%g4 - sub %g4,cy,%g4 - stw %g4,[rp+4] - retl - srlx %g4,63,%o0 -EPILOGUE(mpn_sub_n) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/submul_1.asm deleted file mode 100644 index 92d0ce7db9ea1086d3db53a092a7f7f70a6447c3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/submul_1.asm +++ /dev/null @@ -1,316 +0,0 @@ -dnl SPARC v9 32-bit mpn_submul_1 -- Multiply a limb vector with a limb and -dnl subtract the result from a second limb vector. - -dnl Copyright 1998, 2000, 2001, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C Algorithm: We use two floating-point multiplies per limb product, with the -C invariant v operand split into two 16-bit pieces, and the u operand split -C into 32-bit pieces. We convert the two 48-bit products and transfer them to -C the integer unit. - -C cycles/limb -C UltraSPARC 1&2: 6.5 -C UltraSPARC 3: ? - -C Possible optimizations: -C 1. Combine 32-bit memory operations into 64-bit operations. Since we're -C memory bandwidth limited, this could save 1.5 cycles/limb. -C 2. Unroll the inner loop. Since we already use alternate temporary areas, -C it is very straightforward to unroll, using an exit branch midways. -C Unrolling would allow deeper scheduling which could improve speed for L2 -C cache case. -C 3. For mpn_mul_1: Use more alternating temp areas. The std'es and ldx'es -C aren't sufficiently apart-scheduled with just two temp areas. -C 4. Specialize for particular v values. If its upper 16 bits are zero, we -C could save many operations. - -C INPUT PARAMETERS -C rp i0 -C up i1 -C n i2 -C v i3 - -define(`FSIZE',224) - -ASM_START() -PROLOGUE(mpn_submul_1) - add %sp, -FSIZE, %sp - sethi %hi(0xffff), %g1 - srl %o3, 16, %g2 - or %g1, %lo(0xffff), %g1 - and %o3, %g1, %g1 - stx %g1, [%sp+104] - stx %g2, [%sp+112] - ldd [%sp+104], %f6 - ldd [%sp+112], %f8 - fxtod %f6, %f6 - fxtod %f8, %f8 - ld [%sp+104], %f10 C zero f10 - - mov 0, %g3 C cy = 0 - -define(`fanop', `fitod %f18, %f0') C A quasi nop running in the FA pipe - - add %sp, 160, %o5 C point in scratch area - and %o5, -32, %o5 C align at 0 (mod 32) in scratch area - - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - add %o1, 4, %o1 C up++ - bne,pt %icc, .L_two_or_more - fxtod %f10, %f2 - - fmuld %f2, %f8, %f16 - fmuld %f2, %f6, %f4 - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+16] - std %f12, [%o5+24] - ldx [%o5+16], %g2 C p16 - ldx [%o5+24], %g1 C p0 - lduw [%o0], %g5 C read rp[i] - b .L1 - add %o0, -16, %o0 - - .align 16 -.L_two_or_more: - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fmuld %f2, %f8, %f16 - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - bne,pt %icc, .L_three_or_more - fxtod %f10, %f2 - - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+16] - fmuld %f2, %f8, %f16 - std %f12, [%o5+24] - fmuld %f2, %f6, %f4 - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+0] - std %f12, [%o5+8] - lduw [%o0], %g5 C read rp[i] - ldx [%o5+16], %g2 C p16 - ldx [%o5+24], %g1 C p0 - b .L2 - add %o0, -12, %o0 - - .align 16 -.L_three_or_more: - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+16] - fmuld %f2, %f8, %f16 - std %f12, [%o5+24] - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - bne,pt %icc, .L_four_or_more - fxtod %f10, %f2 - - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+0] - fmuld %f2, %f8, %f16 - std %f12, [%o5+8] - fmuld %f2, %f6, %f4 - fdtox %f16, %f14 - ldx [%o5+16], %g2 C p16 - fdtox %f4, %f12 - ldx [%o5+24], %g1 C p0 - std %f14, [%o5+16] - std %f12, [%o5+24] - lduw [%o0], %g5 C read rp[i] - b .L3 - add %o0, -8, %o0 - - .align 16 -.L_four_or_more: - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fdtox %f16, %f14 - fdtox %f4, %f12 - std %f14, [%o5+0] - fmuld %f2, %f8, %f16 - std %f12, [%o5+8] - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - bne,pt %icc, .L_five_or_more - fxtod %f10, %f2 - - fdtox %f16, %f14 - ldx [%o5+16], %g2 C p16 - fdtox %f4, %f12 - ldx [%o5+24], %g1 C p0 - std %f14, [%o5+16] - fmuld %f2, %f8, %f16 - std %f12, [%o5+24] - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - lduw [%o0], %g5 C read rp[i] - b .L4 - add %o0, -4, %o0 - - .align 16 -.L_five_or_more: - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fdtox %f16, %f14 - ldx [%o5+16], %g2 C p16 - fdtox %f4, %f12 - ldx [%o5+24], %g1 C p0 - std %f14, [%o5+16] - fmuld %f2, %f8, %f16 - std %f12, [%o5+24] - fmuld %f2, %f6, %f4 - add %o1, 4, %o1 C up++ - lduw [%o0], %g5 C read rp[i] - bne,pt %icc, .Loop - fxtod %f10, %f2 - b,a .L5 - -C BEGIN MAIN LOOP - .align 16 -C -- 0 -.Loop: sub %g0, %g3, %g3 - subcc %o2, 1, %o2 - ld [%o1], %f11 C read up[i] - fdtox %f16, %f14 -C -- 1 - sllx %g2, 16, %g4 C (p16 << 16) - add %o0, 4, %o0 C rp++ - ldx [%o5+0], %g2 C p16 - fdtox %f4, %f12 -C -- 2 - srl %g3, 0, %g3 C zero most significant 32 bits - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - fanop -C -- 3 - nop - add %g3, %g4, %g4 C p += cy - std %f14, [%o5+0] - fmuld %f2, %f8, %f16 -C -- 4 - nop - sub %g5, %g4, %g4 C p += rp[i] - std %f12, [%o5+8] - fmuld %f2, %f6, %f4 -C -- 5 - xor %o5, 16, %o5 C alternate scratch variables - add %o1, 4, %o1 C up++ - stw %g4, [%o0-4] - fanop -C -- 6 - srlx %g4, 32, %g3 C new cy - lduw [%o0], %g5 C read rp[i] - bne,pt %icc, .Loop - fxtod %f10, %f2 -C END MAIN LOOP - -.L5: sub %g0, %g3, %g3 - fdtox %f16, %f14 - sllx %g2, 16, %g4 C (p16 << 16) - ldx [%o5+0], %g2 C p16 - fdtox %f4, %f12 - srl %g3, 0, %g3 C zero most significant 32 bits - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - add %g4, %g3, %g4 C p += cy - std %f14, [%o5+0] - fmuld %f2, %f8, %f16 - sub %g5, %g4, %g4 C p += rp[i] - std %f12, [%o5+8] - fmuld %f2, %f6, %f4 - xor %o5, 16, %o5 - stw %g4, [%o0+0] - srlx %g4, 32, %g3 C new cy - lduw [%o0+4], %g5 C read rp[i] - - sub %g0, %g3, %g3 -.L4: fdtox %f16, %f14 - sllx %g2, 16, %g4 C (p16 << 16) - ldx [%o5+0], %g2 C p16 - fdtox %f4, %f12 - srl %g3, 0, %g3 C zero most significant 32 bits - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - add %g3, %g4, %g4 C p += cy - std %f14, [%o5+0] - sub %g5, %g4, %g4 C p += rp[i] - std %f12, [%o5+8] - xor %o5, 16, %o5 - stw %g4, [%o0+4] - srlx %g4, 32, %g3 C new cy - lduw [%o0+8], %g5 C read rp[i] - - sub %g0, %g3, %g3 -.L3: sllx %g2, 16, %g4 C (p16 << 16) - ldx [%o5+0], %g2 C p16 - srl %g3, 0, %g3 C zero most significant 32 bits - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - add %g3, %g4, %g4 C p += cy - sub %g5, %g4, %g4 C p += rp[i] - xor %o5, 16, %o5 - stw %g4, [%o0+8] - srlx %g4, 32, %g3 C new cy - lduw [%o0+12], %g5 C read rp[i] - - sub %g0, %g3, %g3 -.L2: sllx %g2, 16, %g4 C (p16 << 16) - ldx [%o5+0], %g2 C p16 - srl %g3, 0, %g3 C zero most significant 32 bits - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - ldx [%o5+8], %g1 C p0 - add %g3, %g4, %g4 C p += cy - sub %g5, %g4, %g4 C p += rp[i] - stw %g4, [%o0+12] - srlx %g4, 32, %g3 C new cy - lduw [%o0+16], %g5 C read rp[i] - - sub %g0, %g3, %g3 -.L1: sllx %g2, 16, %g4 C (p16 << 16) - srl %g3, 0, %g3 C zero most significant 32 bits - add %g1, %g4, %g4 C p = p0 + (p16 << 16) - add %g3, %g4, %g4 C p += cy - sub %g5, %g4, %g4 C p += rp[i] - stw %g4, [%o0+16] - srlx %g4, 32, %g3 C new cy - - sub %g0, %g3, %o0 - retl - sub %sp, -FSIZE, %sp -EPILOGUE(mpn_submul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/udiv.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/udiv.asm deleted file mode 100644 index 61dde97a66ea3cb456f4943950a7b62fabf42a4b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc32/v9/udiv.asm +++ /dev/null @@ -1,52 +0,0 @@ -dnl SPARC v9 32-bit mpn_udiv_qrnnd - division support for longlong.h. - -dnl Copyright 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C INPUT PARAMETERS -C rem_ptr o0 -C n1 o1 -C n0 o2 -C d o3 - -ASM_START() -PROLOGUE(mpn_udiv_qrnnd) - sllx %o1, 32, %g1 C shift upper dividend limb - srl %o2, 0, %g2 C zero extend lower dividend limb - srl %o3, 0, %g3 C zero extend divisor - or %g2, %g1, %g1 C assemble 64-bit dividend - udivx %g1, %g3, %g1 - mulx %g1, %g3, %g4 - sub %g2, %g4, %g2 - st %g2, [%o0] C store remainder - retl - mov %g1, %o0 C return quotient -EPILOGUE(mpn_udiv_qrnnd) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/README b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/README deleted file mode 100644 index e2c051a02b807619ba0fc81986d95192f6fc81b7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/README +++ /dev/null @@ -1,125 +0,0 @@ -Copyright 1997, 1999-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - -This directory contains mpn functions for 64-bit V9 SPARC - -RELEVANT OPTIMIZATION ISSUES - -Notation: - IANY = shift/add/sub/logical/sethi - IADDLOG = add/sub/logical/sethi - MEM = ld*/st* - FA = fadd*/fsub*/f*to*/fmov* - FM = fmul* - -UltraSPARC can issue four instructions per cycle, with these restrictions: -* Two IANY instructions, but only one of these may be a shift. If there is a - shift and an IANY instruction, the shift must precede the IANY instruction. -* One FA. -* One FM. -* One branch. -* One MEM. -* IANY/IADDLOG/MEM must be insn 1, 2, or 3 in an issue bundle. Taken branches - should not be in slot 4, since that makes the delay insn come from separate - bundle. -* If two IANY/IADDLOG instructions are to be executed in the same cycle and one - of these is setting the condition codes, that instruction must be the second - one. - -To summarize, ignoring branches, these are the bundles that can reach the peak -execution speed: - -insn1 iany iany mem iany iany mem iany iany mem -insn2 iaddlog mem iany mem iaddlog iany mem iaddlog iany -insn3 mem iaddlog iaddlog fa fa fa fm fm fm -insn4 fa/fm fa/fm fa/fm fm fm fm fa fa fa - -The 64-bit integer multiply instruction mulx takes from 5 cycles to 35 cycles, -depending on the position of the most significant bit of the first source -operand. When used for 32x32->64 multiplication, it needs 20 cycles. -Furthermore, it stalls the processor while executing. We stay away from that -instruction, and instead use floating-point operations. - -Floating-point add and multiply units are fully pipelined. The latency for -UltraSPARC-1/2 is 3 cycles and for UltraSPARC-3 it is 4 cycles. - -Integer conditional move instructions cannot dual-issue with other integer -instructions. No conditional move can issue 1-5 cycles after a load. (This -might have been fixed for UltraSPARC-3.) - -The UltraSPARC-3 pipeline is very simular to the one of UltraSPARC-1/2 , but is -somewhat slower. Branches execute slower, and there may be other new stalls. -But integer multiply doesn't stall the entire CPU and also has a much lower -latency. But it's still not pipelined, and thus useless for our needs. - -STATUS - -* mpn_lshift, mpn_rshift: The current code runs at 2.0 cycles/limb on - UltraSPARC-1/2 and 2.65 on UltraSPARC-3. For UltraSPARC-1/2, the IEU0 - functional unit is saturated with shifts. - -* mpn_add_n, mpn_sub_n: The current code runs at 4 cycles/limb on - UltraSPARC-1/2 and 4.5 cycles/limb on UltraSPARC-3. The 4 instruction - recurrency is the speed limiter. - -* mpn_addmul_1: The current code runs at 14 cycles/limb asymptotically on - UltraSPARC-1/2 and 17.5 cycles/limb on UltraSPARC-3. On UltraSPARC-1/2, the - code sustains 4 instructions/cycle. It might be possible to invent a better - way of summing the intermediate 49-bit operands, but it is unlikely that it - will save enough instructions to save an entire cycle. - - The load-use of the u operand is not enough scheduled for good L2 cache - performance. The UltraSPARC-1/2 L1 cache is direct mapped, and since we use - temporary stack slots that will conflict with the u and r operands, we miss - to L2 very often. The load-use of the std/ldx pairs via the stack are - perhaps over-scheduled. - - It would be possible to save two instructions: (1) The mov could be avoided - if the std/ldx were less scheduled. (2) The ldx of the r operand could be - split into two ld instructions, saving the shifts/masks. - - It should be possible to reach 14 cycles/limb for UltraSPARC-3 if the fp - operations where rescheduled for this processor's 4-cycle latency. - -* mpn_mul_1: The current code is a straightforward edit of the mpn_addmul_1 - code. It would be possible to shave one or two cycles from it, with some - labour. - -* mpn_submul_1: Simpleminded code just calling mpn_mul_1 + mpn_sub_n. This - means that it runs at 18 cycles/limb on UltraSPARC-1/2 and 23 cycles/limb on - UltraSPARC-3. It would be possible to either match the mpn_addmul_1 - performance, or in the worst case use one more instruction group. - -* US1/US2 cache conflict resolving. The direct mapped L1 date cache of US1/US2 - is a problem for mul_1, addmul_1 (and a prospective submul_1). We should - allocate a larger cache area, and put the stack temp area in a place that - doesn't cause cache conflicts. diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/copyd.asm deleted file mode 100644 index ab105d39c7852ddcfccb3e76bbb13266efc4d8a4..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/copyd.asm +++ /dev/null @@ -1,89 +0,0 @@ -dnl SPARC v9 mpn_copyd -- Copy a limb vector, decrementing. - -dnl Copyright 1999-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC 1&2: 2 -C UltraSPARC 3: 2.5 -C UltraSPARC T1: 17 -C UltraSPARC T3: 6 -C UltraSPARC T4/T5: 2 - -C INPUT PARAMETERS -C rptr %o0 -C sptr %o1 -C n %o2 - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_copyd) - sllx %o2,3,%g1 - add %g1,%o0,%o0 - add %g1,%o1,%o1 - addcc %o2,-8,%o2 - bl,pt %xcc,L(end01234567) - nop -L(loop1): - ldx [%o1-8],%g1 - ldx [%o1-16],%g2 - ldx [%o1-24],%g3 - ldx [%o1-32],%g4 - ldx [%o1-40],%g5 - ldx [%o1-48],%o3 - ldx [%o1-56],%o4 - ldx [%o1-64],%o5 - add %o1,-64,%o1 - stx %g1,[%o0-8] - stx %g2,[%o0-16] - stx %g3,[%o0-24] - stx %g4,[%o0-32] - stx %g5,[%o0-40] - stx %o3,[%o0-48] - stx %o4,[%o0-56] - stx %o5,[%o0-64] - addcc %o2,-8,%o2 - bge,pt %xcc,L(loop1) - add %o0,-64,%o0 -L(end01234567): - addcc %o2,8,%o2 - bz,pn %xcc,L(end) - nop -L(loop2): - ldx [%o1-8],%g1 - add %o1,-8,%o1 - addcc %o2,-1,%o2 - stx %g1,[%o0-8] - bg,pt %xcc,L(loop2) - add %o0,-8,%o0 -L(end): retl - nop -EPILOGUE(mpn_copyd) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/copyi.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/copyi.asm deleted file mode 100644 index 45663dc2a35f4d55a33458ba8b28a0edc8f48d63..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/copyi.asm +++ /dev/null @@ -1,86 +0,0 @@ -dnl SPARC v9 mpn_copyi -- Copy a limb vector, incrementing. - -dnl Copyright 1999-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC 1&2: 2 -C UltraSPARC 3: 2.5 -C UltraSPARC T1: 17 -C UltraSPARC T3: 6 -C UltraSPARC T4/T5: 2 - -C INPUT PARAMETERS -C rptr %o0 -C sptr %o1 -C n %o2 - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_copyi) - addcc %o2,-8,%o2 - bl,pt %xcc,L(end01234567) - nop -L(loop1): - ldx [%o1+0],%g1 - ldx [%o1+8],%g2 - ldx [%o1+16],%g3 - ldx [%o1+24],%g4 - ldx [%o1+32],%g5 - ldx [%o1+40],%o3 - ldx [%o1+48],%o4 - ldx [%o1+56],%o5 - add %o1,64,%o1 - stx %g1,[%o0+0] - stx %g2,[%o0+8] - stx %g3,[%o0+16] - stx %g4,[%o0+24] - stx %g5,[%o0+32] - stx %o3,[%o0+40] - stx %o4,[%o0+48] - stx %o5,[%o0+56] - addcc %o2,-8,%o2 - bge,pt %xcc,L(loop1) - add %o0,64,%o0 -L(end01234567): - addcc %o2,8,%o2 - bz,pn %xcc,L(end) - nop -L(loop2): - ldx [%o1+0],%g1 - add %o1,8,%o1 - addcc %o2,-1,%o2 - stx %g1,[%o0+0] - bg,pt %xcc,L(loop2) - add %o0,8,%o0 -L(end): retl - nop -EPILOGUE(mpn_copyi) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/dive_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/dive_1.c deleted file mode 100644 index c3fbf01b14c3081b644caa5a8342689a6e16b52d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/dive_1.c +++ /dev/null @@ -1,158 +0,0 @@ -/* UltraSPARC 64 mpn_divexact_1 -- mpn by limb exact division. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2000, 2001, 2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#include "mpn/sparc64/sparc64.h" - - -/* 64-bit divisor 32-bit divisor - cycles/limb cycles/limb - (approx) (approx) - Ultrasparc 2i: 110 70 -*/ - - -/* There are two key ideas here to reduce mulx's. Firstly when the divisor - is 32-bits the high of q*d can be calculated without the two 32x32->64 - cross-products involving the high 32-bits of the divisor, that being zero - of course. Secondly umul_ppmm_lowequal and umul_ppmm_half_lowequal save - one mulx (each) knowing the low of q*d is equal to the input limb l. - - For size==1, a simple udivx is used. This is faster than calculating an - inverse. - - For a 32-bit divisor and small sizes, an attempt was made at a simple - udivx loop (two per 64-bit limb), but it turned out to be slower than - mul-by-inverse. At size==2 the inverse is about 260 cycles total - compared to a udivx at 291. Perhaps the latter would suit when size==2 - but the high 32-bits of the second limb is zero (saving one udivx), but - it doesn't seem worth a special case just for that. */ - -void -mpn_divexact_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, mp_limb_t divisor) -{ - mp_limb_t inverse, s, s_next, c, l, ls, q; - unsigned rshift, lshift; - mp_limb_t lshift_mask; - mp_limb_t divisor_h; - - ASSERT (size >= 1); - ASSERT (divisor != 0); - ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, size)); - ASSERT_MPN (src, size); - ASSERT_LIMB (divisor); - - s = *src++; /* src low limb */ - size--; - if (size == 0) - { - *dst = s / divisor; - return; - } - - if ((divisor & 1) == 0) - { - count_trailing_zeros (rshift, divisor); - divisor >>= rshift; - } - else - rshift = 0; - - binvert_limb (inverse, divisor); - - lshift = 64 - rshift; - - /* lshift==64 means no shift, so must mask out other part in this case */ - lshift_mask = (rshift == 0 ? 0 : MP_LIMB_T_MAX); - - c = 0; - divisor_h = HIGH32 (divisor); - - if (divisor_h == 0) - { - /* 32-bit divisor */ - do - { - s_next = *src++; - ls = (s >> rshift) | ((s_next << lshift) & lshift_mask); - s = s_next; - - SUBC_LIMB (c, l, ls, c); - - q = l * inverse; - *dst++ = q; - - umul_ppmm_half_lowequal (l, q, divisor, l); - c += l; - - size--; - } - while (size != 0); - - ls = s >> rshift; - l = ls - c; - q = l * inverse; - *dst = q; - } - else - { - /* 64-bit divisor */ - mp_limb_t divisor_l = LOW32 (divisor); - do - { - s_next = *src++; - ls = (s >> rshift) | ((s_next << lshift) & lshift_mask); - s = s_next; - - SUBC_LIMB (c, l, ls, c); - - q = l * inverse; - *dst++ = q; - - umul_ppmm_lowequal (l, q, divisor, divisor_h, divisor_l, l); - c += l; - - size--; - } - while (size != 0); - - ls = s >> rshift; - l = ls - c; - q = l * inverse; - *dst = q; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/divrem_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/divrem_1.c deleted file mode 100644 index 531494a94f6c8d35cc6e7301b1680c8e3c8a4ea1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/divrem_1.c +++ /dev/null @@ -1,243 +0,0 @@ -/* UltraSparc 64 mpn_divrem_1 -- mpn by limb division. - -Copyright 1991, 1993, 1994, 1996, 1998-2001, 2003 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#include "mpn/sparc64/sparc64.h" - - -/* 64-bit divisor 32-bit divisor - cycles/limb cycles/limb - (approx) (approx) - integer fraction integer fraction - Ultrasparc 2i: 160 160 122 96 -*/ - - -/* 32-bit divisors are treated in special case code. This requires 4 mulx - per limb instead of 8 in the general case. - - For big endian systems we need HALF_ENDIAN_ADJ included in the src[i] - addressing, to get the two halves of each limb read in the correct order. - This is kept in an adj variable. Doing that measures about 4 c/l faster - than just writing HALF_ENDIAN_ADJ(i) in the integer loop. The latter - shouldn't be 6 cycles worth of work, but perhaps it doesn't schedule well - (on gcc 3.2.1 at least). The fraction loop doesn't seem affected, but we - still use a variable since that ought to work out best. */ - -mp_limb_t -mpn_divrem_1 (mp_ptr qp_limbptr, mp_size_t xsize_limbs, - mp_srcptr ap_limbptr, mp_size_t size_limbs, mp_limb_t d_limb) -{ - mp_size_t total_size_limbs; - mp_size_t i; - - ASSERT (xsize_limbs >= 0); - ASSERT (size_limbs >= 0); - ASSERT (d_limb != 0); - /* FIXME: What's the correct overlap rule when xsize!=0? */ - ASSERT (MPN_SAME_OR_SEPARATE_P (qp_limbptr + xsize_limbs, - ap_limbptr, size_limbs)); - - total_size_limbs = size_limbs + xsize_limbs; - if (UNLIKELY (total_size_limbs == 0)) - return 0; - - /* udivx is good for total_size==1, and no need to bother checking - limb<divisor, since if that's likely the caller should check */ - if (UNLIKELY (total_size_limbs == 1)) - { - mp_limb_t a, q; - a = (LIKELY (size_limbs != 0) ? ap_limbptr[0] : 0); - q = a / d_limb; - qp_limbptr[0] = q; - return a - q*d_limb; - } - - if (d_limb <= CNST_LIMB(0xFFFFFFFF)) - { - mp_size_t size, xsize, total_size, adj; - unsigned *qp, n1, n0, q, r, nshift, norm_rmask; - mp_limb_t dinv_limb; - const unsigned *ap; - int norm, norm_rshift; - - size = 2 * size_limbs; - xsize = 2 * xsize_limbs; - total_size = size + xsize; - - ap = (unsigned *) ap_limbptr; - qp = (unsigned *) qp_limbptr; - - qp += xsize; - r = 0; /* initial remainder */ - - if (LIKELY (size != 0)) - { - n1 = ap[size-1 + HALF_ENDIAN_ADJ(1)]; - - /* If the length of the source is uniformly distributed, then - there's a 50% chance of the high 32-bits being zero, which we - can skip. */ - if (n1 == 0) - { - n1 = ap[size-2 + HALF_ENDIAN_ADJ(0)]; - total_size--; - size--; - ASSERT (size > 0); /* because always even */ - qp[size + HALF_ENDIAN_ADJ(1)] = 0; - } - - /* Skip a division if high < divisor (high quotient 0). Testing - here before before normalizing will still skip as often as - possible. */ - if (n1 < d_limb) - { - r = n1; - size--; - qp[size + HALF_ENDIAN_ADJ(size)] = 0; - total_size--; - if (total_size == 0) - return r; - } - } - - count_leading_zeros_32 (norm, d_limb); - norm -= 32; - d_limb <<= norm; - r <<= norm; - - norm_rshift = 32 - norm; - norm_rmask = (norm == 0 ? 0 : 0xFFFFFFFF); - - invert_half_limb (dinv_limb, d_limb); - - if (LIKELY (size != 0)) - { - i = size - 1; - adj = HALF_ENDIAN_ADJ (i); - n1 = ap[i + adj]; - adj = -adj; - r |= ((n1 >> norm_rshift) & norm_rmask); - for ( ; i > 0; i--) - { - n0 = ap[i-1 + adj]; - adj = -adj; - nshift = (n1 << norm) | ((n0 >> norm_rshift) & norm_rmask); - udiv_qrnnd_half_preinv (q, r, r, nshift, d_limb, dinv_limb); - qp[i + adj] = q; - n1 = n0; - } - nshift = n1 << norm; - udiv_qrnnd_half_preinv (q, r, r, nshift, d_limb, dinv_limb); - qp[0 + HALF_ENDIAN_ADJ(0)] = q; - } - qp -= xsize; - adj = HALF_ENDIAN_ADJ (0); - for (i = xsize-1; i >= 0; i--) - { - udiv_qrnnd_half_preinv (q, r, r, 0, d_limb, dinv_limb); - adj = -adj; - qp[i + adj] = q; - } - - return r >> norm; - } - else - { - mp_srcptr ap; - mp_ptr qp; - mp_size_t size, xsize, total_size; - mp_limb_t d, n1, n0, q, r, dinv, nshift, norm_rmask; - int norm, norm_rshift; - - ap = ap_limbptr; - qp = qp_limbptr; - size = size_limbs; - xsize = xsize_limbs; - total_size = total_size_limbs; - d = d_limb; - - qp += total_size; /* above high limb */ - r = 0; /* initial remainder */ - - if (LIKELY (size != 0)) - { - /* Skip a division if high < divisor (high quotient 0). Testing - here before before normalizing will still skip as often as - possible. */ - n1 = ap[size-1]; - if (n1 < d) - { - r = n1; - *--qp = 0; - total_size--; - if (total_size == 0) - return r; - size--; - } - } - - count_leading_zeros (norm, d); - d <<= norm; - r <<= norm; - - norm_rshift = GMP_LIMB_BITS - norm; - norm_rmask = (norm == 0 ? 0 : ~CNST_LIMB(0)); - - invert_limb (dinv, d); - - if (LIKELY (size != 0)) - { - n1 = ap[size-1]; - r |= ((n1 >> norm_rshift) & norm_rmask); - for (i = size-2; i >= 0; i--) - { - n0 = ap[i]; - nshift = (n1 << norm) | ((n0 >> norm_rshift) & norm_rmask); - udiv_qrnnd_preinv (q, r, r, nshift, d, dinv); - *--qp = q; - n1 = n0; - } - nshift = n1 << norm; - udiv_qrnnd_preinv (q, r, r, nshift, d, dinv); - *--qp = q; - } - for (i = 0; i < xsize; i++) - { - udiv_qrnnd_preinv (q, r, r, CNST_LIMB(0), d, dinv); - *--qp = q; - } - return r >> norm; - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/gcd_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/gcd_1.asm deleted file mode 100644 index e4d8de6a28e882b1c31e372e104cd00fc69300b7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/gcd_1.asm +++ /dev/null @@ -1,135 +0,0 @@ -dnl SPARC64 mpn_gcd_1. - -dnl Based on the K7 gcd_1.asm, by Kevin Ryde. Rehacked for SPARC by Torbjörn -dnl Granlund. - -dnl Copyright 2000-2002, 2005, 2009, 2011-2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/bit (approx) -C UltraSPARC 1&2: 5.1 -C UltraSPARC 3: 5.0 -C UltraSPARC T1: 11.4 -C UltraSPARC T3: 10 -C UltraSPARC T4: 6 -C Numbers measured with: speed -CD -s32-64 -t32 mpn_gcd_1 - -C ctz_table[n] is the number of trailing zeros on n, or MAXSHIFT if n==0. - -deflit(MAXSHIFT, 7) -deflit(MASK, eval((m4_lshift(1,MAXSHIFT))-1)) - - RODATA - TYPE(ctz_table,object) -ctz_table: - .byte MAXSHIFT -forloop(i,1,MASK, -` .byte m4_count_trailing_zeros(i) -') - SIZE(ctz_table,.-ctz_table) - -C Threshold of when to call bmod when U is one limb. Should be about -C (time_in_cycles(bmod_1,1) + call_overhead) / (cycles/bit). -define(`BMOD_THRES_LOG2', 14) - -C INPUT PARAMETERS -define(`up', `%i0') -define(`n', `%i1') -define(`v0', `%i2') - - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_gcd_1) - save %sp, -192, %sp - ldx [up+0], %g1 C U low limb - mov -1, %i4 - or v0, %g1, %g2 C x | y - -L(twos): - inc %i4 - andcc %g2, 1, %g0 - bz,a %xcc, L(twos) - srlx %g2, 1, %g2 - -L(divide_strip_y): - andcc v0, 1, %g0 - bz,a %xcc, L(divide_strip_y) - srlx v0, 1, v0 - - cmp n, 1 C if n > 1 we need - bnz %xcc, L(bmod) C to call bmod_1 - nop - -C Both U and V are single limbs, reduce with bmod if u0 >> v0. - srlx %g1, BMOD_THRES_LOG2, %g2 - cmp %g2, v0 - bleu %xcc, L(noreduce) - mov %g1, %o0 - -L(bmod): - mov up, %o0 - mov n, %o1 - mov v0, %o2 - call mpn_modexact_1c_odd - mov 0, %o3 - -L(noreduce): - - LEA64(ctz_table, i5, g4) - - cmp %o0, 0 - bnz %xcc, L(mid) - and %o0, MASK, %g3 C - - return %i7+8 - sllx %o2, %o4, %o0 C CAUTION: v0 alias for o2 - - ALIGN(16) -L(top): movcc %xcc, %l4, v0 C v = min(u,v) - movcc %xcc, %l2, %o0 C u = |v - u] -L(mid): ldub [%i5+%g3], %g5 C - brz,a,pn %g3, L(shift_alot) C - srlx %o0, MAXSHIFT, %o0 - srlx %o0, %g5, %l4 C new u, odd - subcc v0, %l4, %l2 C v - u, set flags for branch and movcc - sub %l4, v0, %o0 C u - v - bnz,pt %xcc, L(top) C - and %l2, MASK, %g3 C extract low MAXSHIFT bits from (v-u) - - return %i7+8 - sllx %o2, %o4, %o0 C CAUTION: v0 alias for o2 - -L(shift_alot): - b L(mid) - and %o0, MASK, %g3 C -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/gmp-mparam.h deleted file mode 100644 index 5ac2c461c5e26ec13631001f52b28795b25bae01..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/gmp-mparam.h +++ /dev/null @@ -1,139 +0,0 @@ -/* Sparc64 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2002, 2004, 2006, 2008-2010 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* 500 MHz ultrasparc2 running GNU/Linux */ - -#define DIVREM_1_NORM_THRESHOLD 3 -#define DIVREM_1_UNNORM_THRESHOLD 4 -#define MOD_1_NORM_THRESHOLD 3 -#define MOD_1_UNNORM_THRESHOLD 3 -#define MOD_1N_TO_MOD_1_1_THRESHOLD MP_SIZE_T_MAX /* never */ -#define MOD_1U_TO_MOD_1_1_THRESHOLD 22 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 0 /* never mpn_mod_1_1p */ -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 27 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ -#define USE_PREINV_DIVREM_1 1 -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ - -#define MUL_TOOM22_THRESHOLD 30 -#define MUL_TOOM33_THRESHOLD 187 -#define MUL_TOOM44_THRESHOLD 278 -#define MUL_TOOM6H_THRESHOLD 278 -#define MUL_TOOM8H_THRESHOLD 357 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 201 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 199 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 154 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 107 - -#define SQR_BASECASE_THRESHOLD 13 -#define SQR_TOOM2_THRESHOLD 69 -#define SQR_TOOM3_THRESHOLD 116 -#define SQR_TOOM4_THRESHOLD 336 -#define SQR_TOOM6_THRESHOLD 336 -#define SQR_TOOM8_THRESHOLD 454 - -#define MULMOD_BNM1_THRESHOLD 17 -#define SQRMOD_BNM1_THRESHOLD 23 - -#define MUL_FFT_MODF_THRESHOLD 248 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 248, 5}, { 9, 4}, { 19, 6}, { 5, 5}, \ - { 15, 6}, { 8, 5}, { 17, 6}, { 21, 7}, \ - { 19, 8}, { 11, 7}, { 25, 8}, { 15, 7}, \ - { 31, 8}, { 27, 9}, { 15, 8}, { 33, 9}, \ - { 19, 8}, { 39, 9}, { 27,10}, { 15, 9}, \ - { 39,10}, { 23, 9}, { 47,11}, { 15,10}, \ - { 31, 9}, { 67,10}, { 39, 9}, { 79,10}, \ - { 47,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255,10}, { 71, 9}, { 143, 8}, { 287,10}, \ - { 79,11}, { 47,12}, { 4096,13}, { 8192,14}, \ - { 16384,15}, { 32768,16}, { 65536,17}, { 131072,18}, \ - { 262144,19}, { 524288,20}, {1048576,21}, {2097152,22}, \ - {4194304,23}, {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 50 -#define MUL_FFT_THRESHOLD 1984 - -#define SQR_FFT_MODF_THRESHOLD 236 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 236, 5}, { 8, 4}, { 17, 5}, { 19, 6}, \ - { 10, 5}, { 21, 6}, { 19, 7}, { 10, 6}, \ - { 21, 7}, { 21, 8}, { 21, 9}, { 11, 8}, \ - { 23, 9}, { 19, 8}, { 43, 9}, { 23,10}, \ - { 15, 9}, { 43,10}, { 23,11}, { 15,10}, \ - { 31, 9}, { 63,10}, { 47, 8}, { 191,11}, \ - { 31,10}, { 63, 8}, { 255, 7}, { 511, 9}, \ - { 135, 8}, { 271,10}, { 71, 9}, { 143, 8}, \ - { 287, 7}, { 575,11}, { 47, 9}, { 191, 8}, \ - { 383,12}, { 4096,13}, { 8192,14}, { 16384,15}, \ - { 32768,16}, { 65536,17}, { 131072,18}, { 262144,19}, \ - { 524288,20}, {1048576,21}, {2097152,22}, {4194304,23}, \ - {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 49 -#define SQR_FFT_THRESHOLD 1120 - -#define MULLO_BASECASE_THRESHOLD 16 -#define MULLO_DC_THRESHOLD 41 -#define MULLO_MUL_N_THRESHOLD 3791 - -#define DC_DIV_QR_THRESHOLD 27 -#define DC_DIVAPPR_Q_THRESHOLD 100 -#define DC_BDIV_QR_THRESHOLD 47 -#define DC_BDIV_Q_THRESHOLD 174 - -#define INV_MULMOD_BNM1_THRESHOLD 58 -#define INV_NEWTON_THRESHOLD 13 -#define INV_APPR_THRESHOLD 9 - -#define BINV_NEWTON_THRESHOLD 187 -#define REDC_1_TO_REDC_2_THRESHOLD 10 -#define REDC_2_TO_REDC_N_THRESHOLD 115 - -#define MU_DIV_QR_THRESHOLD 680 -#define MU_DIVAPPR_Q_THRESHOLD 618 -#define MUPI_DIV_QR_THRESHOLD 0 /* always */ -#define MU_BDIV_QR_THRESHOLD 748 -#define MU_BDIV_Q_THRESHOLD 889 - -#define MATRIX22_STRASSEN_THRESHOLD 13 -#define HGCD_THRESHOLD 53 -#define GCD_DC_THRESHOLD 283 -#define GCDEXT_DC_THRESHOLD 186 -#define JACOBI_BASE_METHOD 2 - -#define GET_STR_DC_THRESHOLD 13 -#define GET_STR_PRECOMPUTE_THRESHOLD 16 -#define SET_STR_DC_THRESHOLD 390 -#define SET_STR_PRECOMPUTE_THRESHOLD 1665 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/lshift.asm deleted file mode 100644 index 90bbb454f0cf8b812ec014dfdec83ad840b8b10b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/lshift.asm +++ /dev/null @@ -1,140 +0,0 @@ -dnl SPARC v9 mpn_lshift - -dnl Contributed to the GNU project by David Miller. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC 1&2: 2 -C UltraSPARC 3: 2.5 -C UltraSPARC T1: 17.5 -C UltraSPARC T3: 8 -C UltraSPARC T4: 3 - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`n', `%i2') -define(`cnt', `%i3') - -define(`tcnt', `%i4') -define(`retval', `%i5') -define(`u0', `%l0') -define(`u1', `%l1') -define(`r0', `%l6') -define(`r1', `%l7') -define(`u0_off', `%o0') -define(`u1_off', `%o1') -define(`r0_off', `%o2') -define(`r1_off', `%o3') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_lshift) - save %sp, -176, %sp - - sllx n, 3, n - sub %g0, cnt, tcnt - - sub up, 8, u1_off - add rp, (5 * 8), r1_off - - ldx [n + u1_off], u1 C WAS: up - 8 - add u1_off, (3 * 8), u1_off - - sub r1_off, 8, r0_off - sub u1_off, 8, u0_off - - subcc n, (3 * 8), n - srlx u1, tcnt, retval - - bl,pn %xcc, L(end12) - sllx u1, cnt, %l3 - - ldx [n + u0_off], u0 C WAS: up - 16 - subcc n, (2 * 8), n - - ldx [n + u1_off], u1 C WAS: up - 24 - - bl,pn %xcc, L(end34) - srlx u0, tcnt, %l4 - - b,a L(top) - ALIGN(16) -L(top): - sllx u0, cnt, %l2 - or %l4, %l3, r0 - - ldx [n + u0_off], u0 C WAS: up - 16 - srlx u1, tcnt, %l5 - - stx r0, [n + r0_off] C WAS: rp - 8 - subcc n, (2 * 8), n - - sllx u1, cnt, %l3 - or %l2, %l5, r1 - - ldx [n + u1_off], u1 C WAS: up - 24 - srlx u0, tcnt, %l4 - - bge,pt %xcc, L(top) - stx r1, [n + r1_off] C WAS: rp - 16 - -L(end34): - sllx u0, cnt, %l2 - or %l4, %l3, r0 - - srlx u1, tcnt, %l5 - stx r0, [n + r0_off] C WAS: rp - 8 - - or %l2, %l5, r1 - sub n, (2 * 8), %o5 - - sllx u1, cnt, %l3 - stx r1, [%o5 + r1_off] C WAS: rp - 16 - -L(end12): - andcc n, 8, %g0 - bz,pn %xcc, L(done) - nop - - ldx [n + u0_off], u1 - srlx u1, tcnt, %l4 - or %l4, %l3, r0 - stx r0, [r0_off - 24] - sllx u1, cnt, %l3 -L(done): - stx %l3, [r0_off - 32] - - ret - restore retval, 0, %o0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/lshiftc.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/lshiftc.asm deleted file mode 100644 index 4a0f0a3e40c1db1f81cb071da35335b06084efde..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/lshiftc.asm +++ /dev/null @@ -1,147 +0,0 @@ -dnl SPARC v9 mpn_lshiftc - -dnl Contributed to the GNU project by David Miller. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC 1&2: 3 -C UltraSPARC 3: 3 -C UltraSPARC T1: 17 -C UltraSPARC T3: 10 -C UltraSPARC T4: 3.5 - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`n', `%i2') -define(`cnt', `%i3') - -define(`tcnt', `%i4') -define(`retval', `%i5') -define(`u0', `%l0') -define(`u1', `%l1') -define(`r0', `%l6') -define(`r1', `%l7') -define(`u0_off', `%o0') -define(`u1_off', `%o1') -define(`r0_off', `%o2') -define(`r1_off', `%o3') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_lshiftc) - save %sp, -176, %sp - - sllx n, 3, n - sub %g0, cnt, tcnt - - sub up, 8, u1_off - add rp, (5 * 8), r1_off - - ldx [n + u1_off], u1 C WAS: up - 8 - add u1_off, (3 * 8), u1_off - - sub r1_off, 8, r0_off - sub u1_off, 8, u0_off - - subcc n, (3 * 8), n - srlx u1, tcnt, retval - - bl,pn %xcc, L(end12) - sllx u1, cnt, %l3 - - ldx [n + u0_off], u0 C WAS: up - 16 - subcc n, (2 * 8), n - - ldx [n + u1_off], u1 C WAS: up - 24 - - bl,pn %xcc, L(end34) - srlx u0, tcnt, %l4 - - b,a L(top) - ALIGN(16) -L(top): - not %l3, %l3 - sllx u0, cnt, %l2 - - andn %l3, %l4, r0 - ldx [n + u0_off], u0 C WAS: up - 16 - - srlx u1, tcnt, %l5 - stx r0, [n + r0_off] C WAS: rp - 8 - - subcc n, (2 * 8), n - not %l2, %l2 - - sllx u1, cnt, %l3 - andn %l2, %l5, r1 - - ldx [n + u1_off], u1 C WAS: up - 24 - srlx u0, tcnt, %l4 - - bge,pt %xcc, L(top) - stx r1, [n + r1_off] C WAS: rp - 16 - -L(end34): - not %l3, %l3 - sllx u0, cnt, %l2 - - andn %l3, %l4, r0 - srlx u1, tcnt, %l5 - - stx r0, [n + r0_off] C WAS: rp - 8 - not %l2, %l2 - - andn %l2, %l5, r1 - sub n, (2 * 8), %o5 - - sllx u1, cnt, %l3 - stx r1, [%o5 + r1_off] C WAS: rp - 16 - -L(end12): - andcc n, 8, %g0 - bz %xcc, L(done)+4 - not %l3, %l3 - - ldx [n + u0_off], u1 - srlx u1, tcnt, %l4 - andn %l3, %l4, r0 - stx r0, [r0_off - 24] - sllx u1, cnt, %l3 -L(done): - not %l3, %l3 - stx %l3, [r0_off - 32] - - ret - restore retval, 0, %o0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/mod_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/mod_1.c deleted file mode 100644 index f1c51970d976ea48dbab066c60b2c54da1a89bdd..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/mod_1.c +++ /dev/null @@ -1,239 +0,0 @@ -/* UltraSPARC 64 mpn_mod_1 -- mpn by limb remainder. - -Copyright 1991, 1993, 1994, 1999-2001, 2003, 2010 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#include "mpn/sparc64/sparc64.h" - - -/* 64-bit divisor 32-bit divisor - cycles/limb cycles/limb - (approx) (approx) - Ultrasparc 2i: 160 120 -*/ - - -/* 32-bit divisors are treated in special case code. This requires 4 mulx - per limb instead of 8 in the general case. - - For big endian systems we need HALF_ENDIAN_ADJ included in the src[i] - addressing, to get the two halves of each limb read in the correct order. - This is kept in an adj variable. Doing that measures about 6 c/l faster - than just writing HALF_ENDIAN_ADJ(i) in the loop. The latter shouldn't - be 6 cycles worth of work, but perhaps it doesn't schedule well (on gcc - 3.2.1 at least). - - A simple udivx/umulx loop for the 32-bit case was attempted for small - sizes, but at size==2 it was only about the same speed and at size==3 was - slower. */ - -static mp_limb_t -mpn_mod_1_anynorm (mp_srcptr src_limbptr, mp_size_t size_limbs, mp_limb_t d_limb) -{ - int norm, norm_rshift; - mp_limb_t src_high_limb; - mp_size_t i; - - ASSERT (size_limbs >= 0); - ASSERT (d_limb != 0); - - if (UNLIKELY (size_limbs == 0)) - return 0; - - src_high_limb = src_limbptr[size_limbs-1]; - - /* udivx is good for size==1, and no need to bother checking limb<divisor, - since if that's likely the caller should check */ - if (UNLIKELY (size_limbs == 1)) - return src_high_limb % d_limb; - - if (d_limb <= CNST_LIMB(0xFFFFFFFF)) - { - unsigned *src, n1, n0, r, dummy_q, nshift, norm_rmask; - mp_size_t size, adj; - mp_limb_t dinv_limb; - - size = 2 * size_limbs; /* halfwords */ - src = (unsigned *) src_limbptr; - - /* prospective initial remainder, if < d */ - r = src_high_limb >> 32; - - /* If the length of the source is uniformly distributed, then there's - a 50% chance of the high 32-bits being zero, which we can skip. */ - if (r == 0) - { - r = (unsigned) src_high_limb; - size--; - ASSERT (size > 0); /* because always even */ - } - - /* Skip a division if high < divisor. Having the test here before - normalizing will still skip as often as possible. */ - if (r < d_limb) - { - size--; - ASSERT (size > 0); /* because size==1 handled above */ - } - else - r = 0; - - count_leading_zeros_32 (norm, d_limb); - norm -= 32; - d_limb <<= norm; - - norm_rshift = 32 - norm; - norm_rmask = (norm == 0 ? 0 : 0xFFFFFFFF); - i = size-1; - adj = HALF_ENDIAN_ADJ (i); - n1 = src [i + adj]; - r = (r << norm) | ((n1 >> norm_rshift) & norm_rmask); - - invert_half_limb (dinv_limb, d_limb); - adj = -adj; - - for (i--; i >= 0; i--) - { - n0 = src [i + adj]; - adj = -adj; - nshift = (n1 << norm) | ((n0 >> norm_rshift) & norm_rmask); - udiv_qrnnd_half_preinv (dummy_q, r, r, nshift, d_limb, dinv_limb); - n1 = n0; - } - - /* same as loop, but without n0 */ - nshift = n1 << norm; - udiv_qrnnd_half_preinv (dummy_q, r, r, nshift, d_limb, dinv_limb); - - ASSERT ((r & ((1 << norm) - 1)) == 0); - return r >> norm; - } - else - { - mp_srcptr src; - mp_size_t size; - mp_limb_t n1, n0, r, dinv, dummy_q, nshift, norm_rmask; - - src = src_limbptr; - size = size_limbs; - r = src_high_limb; /* initial remainder */ - - /* Skip a division if high < divisor. Having the test here before - normalizing will still skip as often as possible. */ - if (r < d_limb) - { - size--; - ASSERT (size > 0); /* because size==1 handled above */ - } - else - r = 0; - - count_leading_zeros (norm, d_limb); - d_limb <<= norm; - - norm_rshift = GMP_LIMB_BITS - norm; - norm_rmask = (norm == 0 ? 0 : 0xFFFFFFFF); - - src += size; - n1 = *--src; - r = (r << norm) | ((n1 >> norm_rshift) & norm_rmask); - - invert_limb (dinv, d_limb); - - for (i = size-2; i >= 0; i--) - { - n0 = *--src; - nshift = (n1 << norm) | ((n0 >> norm_rshift) & norm_rmask); - udiv_qrnnd_preinv (dummy_q, r, r, nshift, d_limb, dinv); - n1 = n0; - } - - /* same as loop, but without n0 */ - nshift = n1 << norm; - udiv_qrnnd_preinv (dummy_q, r, r, nshift, d_limb, dinv); - - ASSERT ((r & ((CNST_LIMB(1) << norm) - 1)) == 0); - return r >> norm; - } -} - -mp_limb_t -mpn_mod_1 (mp_srcptr ap, mp_size_t n, mp_limb_t b) -{ - ASSERT (n >= 0); - ASSERT (b != 0); - - /* Should this be handled at all? Rely on callers? Note un==0 is currently - required by mpz/fdiv_r_ui.c and possibly other places. */ - if (n == 0) - return 0; - - if (UNLIKELY ((b & GMP_NUMB_HIGHBIT) != 0)) - { - if (BELOW_THRESHOLD (n, MOD_1N_TO_MOD_1_1_THRESHOLD)) - { - return mpn_mod_1_anynorm (ap, n, b); - } - else - { - mp_limb_t pre[4]; - mpn_mod_1_1p_cps (pre, b); - return mpn_mod_1_1p (ap, n, b, pre); - } - } - else - { - if (BELOW_THRESHOLD (n, MOD_1U_TO_MOD_1_1_THRESHOLD)) - { - return mpn_mod_1_anynorm (ap, n, b); - } - else if (BELOW_THRESHOLD (n, MOD_1_1_TO_MOD_1_2_THRESHOLD)) - { - mp_limb_t pre[4]; - mpn_mod_1_1p_cps (pre, b); - return mpn_mod_1_1p (ap, n, b << pre[1], pre); - } - else if (BELOW_THRESHOLD (n, MOD_1_2_TO_MOD_1_4_THRESHOLD) || UNLIKELY (b > GMP_NUMB_MASK / 4)) - { - mp_limb_t pre[5]; - mpn_mod_1s_2p_cps (pre, b); - return mpn_mod_1s_2p (ap, n, b << pre[1], pre); - } - else - { - mp_limb_t pre[7]; - mpn_mod_1s_4p_cps (pre, b); - return mpn_mod_1s_4p (ap, n, b << pre[1], pre); - } - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/mod_1_4.c b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/mod_1_4.c deleted file mode 100644 index cc1b9484bccfba6b599a535d2be6ddc6a07aed61..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/mod_1_4.c +++ /dev/null @@ -1,236 +0,0 @@ -/* mpn_mod_1s_4p (ap, n, b, cps) - Divide (ap,,n) by b. Return the single-limb remainder. - Requires that d < B / 4. - - Contributed to the GNU project by Torbjorn Granlund. - Based on a suggestion by Peter L. Montgomery. - - THE FUNCTIONS IN THIS FILE ARE INTERNAL WITH MUTABLE INTERFACES. IT IS ONLY - SAFE TO REACH THEM THROUGH DOCUMENTED INTERFACES. IN FACT, IT IS ALMOST - GUARANTEED THAT THEY WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE. - -Copyright 2008-2010 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#include "mpn/sparc64/sparc64.h" - -void -mpn_mod_1s_4p_cps (mp_limb_t cps[7], mp_limb_t b) -{ - mp_limb_t bi; - mp_limb_t B1modb, B2modb, B3modb, B4modb, B5modb; - int cnt; - - ASSERT (b <= (~(mp_limb_t) 0) / 4); - - count_leading_zeros (cnt, b); - - b <<= cnt; - invert_limb (bi, b); - - cps[0] = bi; - cps[1] = cnt; - - B1modb = -b * ((bi >> (GMP_LIMB_BITS-cnt)) | (CNST_LIMB(1) << cnt)); - ASSERT (B1modb <= b); /* NB: not fully reduced mod b */ - cps[2] = B1modb >> cnt; - - udiv_rnnd_preinv (B2modb, B1modb, CNST_LIMB(0), b, bi); - cps[3] = B2modb >> cnt; - - udiv_rnnd_preinv (B3modb, B2modb, CNST_LIMB(0), b, bi); - cps[4] = B3modb >> cnt; - - udiv_rnnd_preinv (B4modb, B3modb, CNST_LIMB(0), b, bi); - cps[5] = B4modb >> cnt; - - udiv_rnnd_preinv (B5modb, B4modb, CNST_LIMB(0), b, bi); - cps[6] = B5modb >> cnt; - -#if WANT_ASSERT - { - int i; - b = cps[2]; - for (i = 3; i <= 6; i++) - { - b += cps[i]; - ASSERT (b >= cps[i]); - } - } -#endif -} - -mp_limb_t -mpn_mod_1s_4p (mp_srcptr ap, mp_size_t n, mp_limb_t b, const mp_limb_t cps[7]) -{ - mp_limb_t rh, rl, bi, ph, pl, ch, cl, r; - mp_limb_t B1modb, B2modb, B3modb, B4modb, B5modb; - mp_size_t i; - int cnt; - - ASSERT (n >= 1); - - B1modb = cps[2]; - B2modb = cps[3]; - B3modb = cps[4]; - B4modb = cps[5]; - B5modb = cps[6]; - - if ((b >> 32) == 0) - { - switch (n & 3) - { - case 0: - umul_ppmm_s (ph, pl, ap[n - 3], B1modb); - add_ssaaaa (ph, pl, ph, pl, CNST_LIMB(0), ap[n - 4]); - umul_ppmm_s (ch, cl, ap[n - 2], B2modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - umul_ppmm_s (rh, rl, ap[n - 1], B3modb); - add_ssaaaa (rh, rl, rh, rl, ph, pl); - n -= 4; - break; - case 1: - rh = 0; - rl = ap[n - 1]; - n -= 1; - break; - case 2: - rh = ap[n - 1]; - rl = ap[n - 2]; - n -= 2; - break; - case 3: - umul_ppmm_s (ph, pl, ap[n - 2], B1modb); - add_ssaaaa (ph, pl, ph, pl, CNST_LIMB(0), ap[n - 3]); - umul_ppmm_s (rh, rl, ap[n - 1], B2modb); - add_ssaaaa (rh, rl, rh, rl, ph, pl); - n -= 3; - break; - } - - for (i = n - 4; i >= 0; i -= 4) - { - /* rr = ap[i] < B - + ap[i+1] * (B mod b) <= (B-1)(b-1) - + ap[i+2] * (B^2 mod b) <= (B-1)(b-1) - + ap[i+3] * (B^3 mod b) <= (B-1)(b-1) - + LO(rr) * (B^4 mod b) <= (B-1)(b-1) - + HI(rr) * (B^5 mod b) <= (B-1)(b-1) - */ - umul_ppmm_s (ph, pl, ap[i + 1], B1modb); - add_ssaaaa (ph, pl, ph, pl, CNST_LIMB(0), ap[i + 0]); - - umul_ppmm_s (ch, cl, ap[i + 2], B2modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - - umul_ppmm_s (ch, cl, ap[i + 3], B3modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - - umul_ppmm_s (ch, cl, rl, B4modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - - umul_ppmm_s (rh, rl, rh, B5modb); - add_ssaaaa (rh, rl, rh, rl, ph, pl); - } - - umul_ppmm_s (rh, cl, rh, B1modb); - add_ssaaaa (rh, rl, rh, rl, CNST_LIMB(0), cl); - } - else - { - switch (n & 3) - { - case 0: - umul_ppmm (ph, pl, ap[n - 3], B1modb); - add_ssaaaa (ph, pl, ph, pl, 0, ap[n - 4]); - umul_ppmm (ch, cl, ap[n - 2], B2modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - umul_ppmm (rh, rl, ap[n - 1], B3modb); - add_ssaaaa (rh, rl, rh, rl, ph, pl); - n -= 4; - break; - case 1: - rh = 0; - rl = ap[n - 1]; - n -= 1; - break; - case 2: - rh = ap[n - 1]; - rl = ap[n - 2]; - n -= 2; - break; - case 3: - umul_ppmm (ph, pl, ap[n - 2], B1modb); - add_ssaaaa (ph, pl, ph, pl, 0, ap[n - 3]); - umul_ppmm (rh, rl, ap[n - 1], B2modb); - add_ssaaaa (rh, rl, rh, rl, ph, pl); - n -= 3; - break; - } - - for (i = n - 4; i >= 0; i -= 4) - { - /* rr = ap[i] < B - + ap[i+1] * (B mod b) <= (B-1)(b-1) - + ap[i+2] * (B^2 mod b) <= (B-1)(b-1) - + ap[i+3] * (B^3 mod b) <= (B-1)(b-1) - + LO(rr) * (B^4 mod b) <= (B-1)(b-1) - + HI(rr) * (B^5 mod b) <= (B-1)(b-1) - */ - umul_ppmm (ph, pl, ap[i + 1], B1modb); - add_ssaaaa (ph, pl, ph, pl, 0, ap[i + 0]); - - umul_ppmm (ch, cl, ap[i + 2], B2modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - - umul_ppmm (ch, cl, ap[i + 3], B3modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - - umul_ppmm (ch, cl, rl, B4modb); - add_ssaaaa (ph, pl, ph, pl, ch, cl); - - umul_ppmm (rh, rl, rh, B5modb); - add_ssaaaa (rh, rl, rh, rl, ph, pl); - } - - umul_ppmm (rh, cl, rh, B1modb); - add_ssaaaa (rh, rl, rh, rl, 0, cl); - } - - bi = cps[0]; - cnt = cps[1]; - - r = (rh << cnt) | (rl >> (GMP_LIMB_BITS - cnt)); - udiv_rnnd_preinv (r, r, rl << cnt, b, bi); - - return r >> cnt; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/mode1o.c b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/mode1o.c deleted file mode 100644 index 7c8fc1cf3d8cecd2d35a6c639b0365527fde350b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/mode1o.c +++ /dev/null @@ -1,197 +0,0 @@ -/* UltraSPARC 64 mpn_modexact_1c_odd -- mpn by limb exact style remainder. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2000-2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#include "mpn/sparc64/sparc64.h" - - -/* 64-bit divisor 32-bit divisor - cycles/limb cycles/limb - (approx) (approx) - Ultrasparc 2i: ? ? -*/ - - -/* This implementation reduces the number of multiplies done, knowing that - on ultrasparc 1 and 2 the mulx instruction stalls the whole chip. - - The key idea is to use the fact that the low limb of q*d equals l, this - being the whole purpose of the q calculated. It means there's no need to - calculate the lowest 32x32->64 part of the q*d, instead it can be - inferred from l and the other three 32x32->64 parts. See sparc64.h for - details. - - When d is 32-bits, the same applies, but in this case there's only one - other 32x32->64 part (ie. HIGH(q)*d). - - The net effect is that for 64-bit divisor each limb is 4 mulx, or for - 32-bit divisor each is 2 mulx. - - Enhancements: - - No doubt this could be done in assembler, if that helped the scheduling, - or perhaps guaranteed good code irrespective of the compiler. - - Alternatives: - - It might be possibly to use floating point. The loop is dominated by - multiply latency, so not sure if floats would improve that. One - possibility would be to take two limbs at a time, with a 128 bit inverse, - if there's enough registers, which could effectively use float throughput - to reduce total latency across two limbs. */ - -#define ASSERT_RETVAL(r) \ - ASSERT (orig_c < d ? r < d : r <= d) - -mp_limb_t -mpn_modexact_1c_odd (mp_srcptr src, mp_size_t size, mp_limb_t d, mp_limb_t orig_c) -{ - mp_limb_t c = orig_c; - mp_limb_t s, l, q, h, inverse; - - ASSERT (size >= 1); - ASSERT (d & 1); - ASSERT_MPN (src, size); - ASSERT_LIMB (d); - ASSERT_LIMB (c); - - /* udivx is faster than 10 or 12 mulx's for one limb via an inverse */ - if (size == 1) - { - s = src[0]; - if (s > c) - { - l = s-c; - h = l % d; - if (h != 0) - h = d - h; - } - else - { - l = c-s; - h = l % d; - } - return h; - } - - binvert_limb (inverse, d); - - if (d <= 0xFFFFFFFF) - { - s = *src++; - size--; - do - { - SUBC_LIMB (c, l, s, c); - s = *src++; - q = l * inverse; - umul_ppmm_half_lowequal (h, q, d, l); - c += h; - size--; - } - while (size != 0); - - if (s <= d) - { - /* With high s <= d the final step can be a subtract and addback. - If c==0 then the addback will restore to l>=0. If c==d then - will get l==d if s==0, but that's ok per the function - definition. */ - - l = c - s; - l += (l > c ? d : 0); - - ASSERT_RETVAL (l); - return l; - } - else - { - /* Can't skip a divide, just do the loop code once more. */ - SUBC_LIMB (c, l, s, c); - q = l * inverse; - umul_ppmm_half_lowequal (h, q, d, l); - c += h; - - ASSERT_RETVAL (c); - return c; - } - } - else - { - mp_limb_t dl = LOW32 (d); - mp_limb_t dh = HIGH32 (d); - long i; - - s = *src++; - size--; - do - { - SUBC_LIMB (c, l, s, c); - s = *src++; - q = l * inverse; - umul_ppmm_lowequal (h, q, d, dh, dl, l); - c += h; - size--; - } - while (size != 0); - - if (s <= d) - { - /* With high s <= d the final step can be a subtract and addback. - If c==0 then the addback will restore to l>=0. If c==d then - will get l==d if s==0, but that's ok per the function - definition. */ - - l = c - s; - l += (l > c ? d : 0); - - ASSERT_RETVAL (l); - return l; - } - else - { - /* Can't skip a divide, just do the loop code once more. */ - SUBC_LIMB (c, l, s, c); - q = l * inverse; - umul_ppmm_lowequal (h, q, d, dh, dl, l); - c += h; - - ASSERT_RETVAL (c); - return c; - } - } -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/rshift.asm deleted file mode 100644 index 3f8e11fee7d657506b5431f87ac55049da05a321..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/rshift.asm +++ /dev/null @@ -1,142 +0,0 @@ -dnl SPARC v9 mpn_rshift - -dnl Contributed to the GNU project by David Miller. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC 1&2: 2 -C UltraSPARC 3: 2.5 -C UltraSPARC T1: 17.5 -C UltraSPARC T3: 8 -C UltraSPARC T4: 3 - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`n', `%i2') -define(`cnt', `%i3') - -define(`tcnt', `%i4') -define(`retval', `%i5') -define(`u0', `%l0') -define(`u1', `%l1') -define(`r0', `%l6') -define(`r1', `%l7') -define(`u0_off', `%o0') -define(`u1_off', `%o1') -define(`r0_off', `%o2') -define(`r1_off', `%o3') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_rshift) - save %sp, -176, %sp - - sllx n, 3, n - sub %g0, cnt, tcnt - - add up, n, up - add rp, n, rp - - neg n, n - sub up, (2 * 8), u0_off - sub rp, (5 * 8), r0_off - - ldx [n + up], u1 C WAS: up + 0 - sub u0_off, (1 * 8), u1_off - sub r0_off, (1 * 8), r1_off - - subcc n, -(3 * 8), n - sllx u1, tcnt, retval - - bg,pn %xcc, L(end12) - srlx u1, cnt, %l3 - - ldx [n + u0_off], u0 C WAS: up + 0 - subcc n, -(2 * 8), n - - ldx [n + u1_off], u1 C WAS: up + 8 - - bg,pn %xcc, L(end34) - sllx u0, tcnt, %l4 - - b,a L(top) - ALIGN(16) -L(top): - srlx u0, cnt, %l2 - or %l3, %l4, r0 - - ldx [n + u0_off], u0 C WAS: up + 0 - sllx u1, tcnt, %l5 - - stx r0, [n + r0_off] C WAS: rp + 0 - subcc n, -(2 * 8), n - - srlx u1, cnt, %l3 - or %l2, %l5, r1 - - ldx [n + u1_off], u1 C WAS: up + 8 - sllx u0, tcnt, %l4 - - ble,pt %xcc, L(top) - stx r1, [n + r1_off] C WAS: rp + 8 - -L(end34): - srlx u0, cnt, %l2 - or %l3, %l4, r0 - - sllx u1, tcnt, %l5 - stx r0, [n + r0_off] C WAS: rp + 0 - - or %l2, %l5, r1 - sub n, -(2 * 8), %o5 - - srlx u1, cnt, %l3 - stx r1, [%o5 + r1_off] C WAS: rp + 8 - -L(end12): - andcc n, 8, %g0 - bz,pn %xcc, L(done) - nop - - ldx [n + u0_off], u1 - sllx u1, tcnt, %l4 - or %l3, %l4, r0 - stx r0, [r0_off + 24] - srlx u1, cnt, %l3 -L(done): - stx %l3, [r0_off + 32] - - ret - restore retval, 0, %o0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/sec_tabselect.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/sec_tabselect.asm deleted file mode 100644 index 22e0dc5ef1276c1940fd63ce6281639a1141a0b7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/sec_tabselect.asm +++ /dev/null @@ -1,162 +0,0 @@ -dnl SPARC v9 mpn_sec_tabselect. - -dnl Contributed to the GNU project by Torbjörn Granlund and David Miller. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC 1&2: 2 hopefully -C UltraSPARC 3: 3 -C UltraSPARC T1: 17 -C UltraSPARC T3: ? -C UltraSPARC T4/T5: 2.25 hopefully - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`tp', `%i1') -define(`n', `%i2') -define(`nents', `%i3') -define(`which', `%i4') - -define(`i', `%g1') -define(`j', `%g3') -define(`stride', `%g4') -define(`tporig', `%g5') -define(`mask', `%o0') - -define(`data0', `%l0') -define(`data1', `%l1') -define(`data2', `%l2') -define(`data3', `%l3') -define(`t0', `%l4') -define(`t1', `%l5') -define(`t2', `%l6') -define(`t3', `%l7') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_sec_tabselect) - save %sp, -176, %sp - - sllx n, 3, stride - sub n, 4, j - brlz j, L(outer_end) - mov tp, tporig - -L(outer_loop): - clr data0 - clr data1 - clr data2 - clr data3 - mov tporig, tp - mov nents, i - mov which, %o1 - -L(top): subcc %o1, 1, %o1 C set carry iff o1 = 0 - ldx [tp + 0], t0 - subc %g0, %g0, mask - ldx [tp + 8], t1 - sub i, 1, i - ldx [tp + 16], t2 - ldx [tp + 24], t3 - add tp, stride, tp - and t0, mask, t0 - and t1, mask, t1 - or t0, data0, data0 - and t2, mask, t2 - or t1, data1, data1 - and t3, mask, t3 - or t2, data2, data2 - brnz i, L(top) - or t3, data3, data3 - - stx data0, [rp + 0] - subcc j, 4, j - stx data1, [rp + 8] - stx data2, [rp + 16] - stx data3, [rp + 24] - add tporig, (4 * 8), tporig - - brgez j, L(outer_loop) - add rp, (4 * 8), rp -L(outer_end): - - - andcc n, 2, %g0 - be L(b0x) - nop -L(b1x): clr data0 - clr data1 - mov tporig, tp - mov nents, i - mov which, %o1 - -L(tp2): subcc %o1, 1, %o1 - ldx [tp + 0], t0 - subc %g0, %g0, mask - ldx [tp + 8], t1 - sub i, 1, i - add tp, stride, tp - and t0, mask, t0 - and t1, mask, t1 - or t0, data0, data0 - brnz i, L(tp2) - or t1, data1, data1 - - stx data0, [rp + 0] - stx data1, [rp + 8] - add tporig, (2 * 8), tporig - add rp, (2 * 8), rp - - -L(b0x): andcc n, 1, %g0 - be L(b00) - nop -L(b01): clr data0 - mov tporig, tp - mov nents, i - mov which, %o1 - -L(tp1): subcc %o1, 1, %o1 - ldx [tp + 0], t0 - subc %g0, %g0, mask - sub i, 1, i - add tp, stride, tp - and t0, mask, t0 - brnz i, L(tp1) - or t0, data0, data0 - - stx data0, [rp + 0] - -L(b00): ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/sparc64.h b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/sparc64.h deleted file mode 100644 index 09fc16d46a4417c4733815d6b4e7edbd7e7d8dac..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/sparc64.h +++ /dev/null @@ -1,219 +0,0 @@ -/* UltraSPARC 64 support macros. - - THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST - CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN - FUTURE GNU MP RELEASES. - -Copyright 2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#define LOW32(x) ((x) & 0xFFFFFFFF) -#define HIGH32(x) ((x) >> 32) - - -/* Halfword number i in src is accessed as src[i+HALF_ENDIAN_ADJ(i)]. - Plain src[i] would be incorrect in big endian, HALF_ENDIAN_ADJ has the - effect of swapping the two halves in this case. */ -#if HAVE_LIMB_BIG_ENDIAN -#define HALF_ENDIAN_ADJ(i) (1 - (((i) & 1) << 1)) /* +1 even, -1 odd */ -#endif -#if HAVE_LIMB_LITTLE_ENDIAN -#define HALF_ENDIAN_ADJ(i) 0 /* no adjust */ -#endif -#ifndef HALF_ENDIAN_ADJ -Error, error, unknown limb endianness; -#endif - - -/* umul_ppmm_lowequal sets h to the high limb of q*d, assuming the low limb - of that product is equal to l. dh and dl are the 32-bit halves of d. - - |-----high----||----low-----| - +------+------+ - | | ph = qh * dh - +------+------+ - +------+------+ - | | pm1 = ql * dh - +------+------+ - +------+------+ - | | pm2 = qh * dl - +------+------+ - +------+------+ - | | pl = ql * dl (not calculated) - +------+------+ - - Knowing that the low 64 bits is equal to l means that LOW(pm1) + LOW(pm2) - + HIGH(pl) == HIGH(l). The only thing we need from those product parts - is whether they produce a carry into the high. - - pm_l = LOW(pm1)+LOW(pm2) is done to contribute its carry, then the only - time there's a further carry from LOW(pm_l)+HIGH(pl) is if LOW(pm_l) > - HIGH(l). pl is never actually calculated. */ - -#define umul_ppmm_lowequal(h, q, d, dh, dl, l) \ - do { \ - mp_limb_t ql, qh, ph, pm1, pm2, pm_l; \ - ASSERT (dh == HIGH32(d)); \ - ASSERT (dl == LOW32(d)); \ - ASSERT (q*d == l); \ - \ - ql = LOW32 (q); \ - qh = HIGH32 (q); \ - \ - pm1 = ql * dh; \ - pm2 = qh * dl; \ - ph = qh * dh; \ - \ - pm_l = LOW32 (pm1) + LOW32 (pm2); \ - \ - (h) = ph + HIGH32 (pm1) + HIGH32 (pm2) \ - + HIGH32 (pm_l) + ((pm_l << 32) > l); \ - \ - ASSERT_HIGH_PRODUCT (h, q, d); \ - } while (0) - - -/* Set h to the high of q*d, assuming the low limb of that product is equal - to l, and that d fits in 32-bits. - - |-----high----||----low-----| - +------+------+ - | | pm = qh * dl - +------+------+ - +------+------+ - | | pl = ql * dl (not calculated) - +------+------+ - - Knowing that LOW(pm) + HIGH(pl) == HIGH(l) (mod 2^32) means that the only - time there's a carry from that sum is when LOW(pm) > HIGH(l). There's no - need to calculate pl to determine this. */ - -#define umul_ppmm_half_lowequal(h, q, d, l) \ - do { \ - mp_limb_t pm; \ - ASSERT (q*d == l); \ - ASSERT (HIGH32(d) == 0); \ - \ - pm = HIGH32(q) * d; \ - (h) = HIGH32(pm) + ((pm << 32) > l); \ - ASSERT_HIGH_PRODUCT (h, q, d); \ - } while (0) - - -/* check that h is the high limb of x*y */ -#if WANT_ASSERT -#define ASSERT_HIGH_PRODUCT(h, x, y) \ - do { \ - mp_limb_t want_h, dummy; \ - umul_ppmm (want_h, dummy, x, y); \ - ASSERT (h == want_h); \ - } while (0) -#else -#define ASSERT_HIGH_PRODUCT(h, q, d) \ - do { } while (0) -#endif - - -/* Multiply u anv v, where v < 2^32. */ -#define umul_ppmm_s(w1, w0, u, v) \ - do { \ - UWtype __x0, __x2; \ - UWtype __ul, __vl, __uh; \ - UWtype __u = (u), __v = (v); \ - \ - __ul = __ll_lowpart (__u); \ - __uh = __ll_highpart (__u); \ - __vl = __ll_lowpart (__v); \ - \ - __x0 = (UWtype) __ul * __vl; \ - __x2 = (UWtype) __uh * __vl; \ - \ - (w1) = (__x2 + (__x0 >> W_TYPE_SIZE/2)) >> W_TYPE_SIZE/2; \ - (w0) = (__x2 << W_TYPE_SIZE/2) + __x0; \ - } while (0) - -/* Count the leading zeros on a limb, but assuming it fits in 32 bits. - The count returned will be in the range 32 to 63. - This is the 32-bit generic C count_leading_zeros from longlong.h. */ -#define count_leading_zeros_32(count, x) \ - do { \ - mp_limb_t __xr = (x); \ - unsigned __a; \ - ASSERT ((x) != 0); \ - ASSERT ((x) <= CNST_LIMB(0xFFFFFFFF)); \ - __a = __xr < ((UWtype) 1 << 16) ? (__xr < ((UWtype) 1 << 8) ? 1 : 8 + 1) \ - : (__xr < ((UWtype) 1 << 24) ? 16 + 1 : 24 + 1); \ - \ - (count) = W_TYPE_SIZE + 1 - __a - __clz_tab[__xr >> __a]; \ - } while (0) - - -/* Set inv to a 32-bit inverse floor((b*(b-d)-1) / d), knowing that d fits - 32 bits and is normalized (high bit set). */ -#define invert_half_limb(inv, d) \ - do { \ - mp_limb_t _n; \ - ASSERT ((d) <= 0xFFFFFFFF); \ - ASSERT ((d) & 0x80000000); \ - _n = (((mp_limb_t) -(d)) << 32) - 1; \ - (inv) = (mp_limb_t) (unsigned) (_n / (d)); \ - } while (0) - - -/* Divide nh:nl by d, setting q to the quotient and r to the remainder. - q, r, nh and nl are 32-bits each, d_limb is 32-bits but in an mp_limb_t, - dinv_limb is similarly a 32-bit inverse but in an mp_limb_t. */ - -#define udiv_qrnnd_half_preinv(q, r, nh, nl, d_limb, dinv_limb) \ - do { \ - unsigned _n2, _n10, _n1, _nadj, _q11n, _xh, _r, _q; \ - mp_limb_t _n, _x; \ - ASSERT (d_limb <= 0xFFFFFFFF); \ - ASSERT (dinv_limb <= 0xFFFFFFFF); \ - ASSERT (d_limb & 0x80000000); \ - ASSERT (nh < d_limb); \ - _n10 = (nl); \ - _n2 = (nh); \ - _n1 = (int) _n10 >> 31; \ - _nadj = _n10 + (_n1 & d_limb); \ - _x = dinv_limb * (_n2 - _n1) + _nadj; \ - _q11n = ~(_n2 + HIGH32 (_x)); /* -q1-1 */ \ - _n = ((mp_limb_t) _n2 << 32) + _n10; \ - _x = _n + d_limb * _q11n; /* n-q1*d-d */ \ - _xh = HIGH32 (_x) - d_limb; /* high(n-q1*d-d) */ \ - ASSERT (_xh == 0 || _xh == ~0); \ - _r = _x + (d_limb & _xh); /* addback */ \ - _q = _xh - _q11n; /* q1+1-addback */ \ - ASSERT (_r < d_limb); \ - ASSERT (d_limb * _q + _r == _n); \ - (r) = _r; \ - (q) = _q; \ - } while (0) - - diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/add_n.asm deleted file mode 100644 index 92374d2552d5d3a913c5467f88e7800a128106e9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/add_n.asm +++ /dev/null @@ -1,241 +0,0 @@ -dnl SPARC v9 mpn_add_n -- Add two limb vectors of the same length > 0 and -dnl store sum in a third limb vector. - -dnl Copyright 2001-2003, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC 1&2: 4 -C UltraSPARC 3: 4.5 - -C Compute carry-out from the most significant bits of u,v, and r, where -C r=u+v+carry_in, using logic operations. - -C This code runs at 4 cycles/limb on UltraSPARC 1 and 2. It has a 4 insn -C recurrency, and the UltraSPARC 1 and 2 the IE units are 100% saturated. -C Therefore, it seems futile to try to optimize this any further... - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`vp', `%i2') -define(`n', `%i3') - -define(`u0', `%l0') -define(`u1', `%l2') -define(`u2', `%l4') -define(`u3', `%l6') -define(`v0', `%l1') -define(`v1', `%l3') -define(`v2', `%l5') -define(`v3', `%l7') - -define(`cy',`%i4') - -define(`fanop',`fitod %f0,%f2') dnl A quasi nop running in the FA pipe -define(`fmnop',`fmuld %f0,%f0,%f4') dnl A quasi nop running in the FM pipe - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_add_nc) - save %sp,-160,%sp - - fitod %f0,%f0 C make sure f0 contains small, quiet number - subcc n,4,%g0 - bl,pn %xcc,.Loop0 - nop - b,a L(com) -EPILOGUE() - -PROLOGUE(mpn_add_n) - save %sp,-160,%sp - - fitod %f0,%f0 C make sure f0 contains small, quiet number - subcc n,4,%g0 - bl,pn %xcc,.Loop0 - mov 0,cy -L(com): - ldx [up+0],u0 - ldx [vp+0],v0 - add up,32,up - ldx [up-24],u1 - ldx [vp+8],v1 - add vp,32,vp - ldx [up-16],u2 - ldx [vp-16],v2 - ldx [up-8],u3 - ldx [vp-8],v3 - subcc n,8,n - add u0,v0,%g1 C main add - add %g1,cy,%g5 C carry add - or u0,v0,%g2 - bl,pn %xcc,.Lend4567 - fanop - b,a .Loop - - .align 16 -C START MAIN LOOP -.Loop: andn %g2,%g5,%g2 - and u0,v0,%g3 - ldx [up+0],u0 - fanop -C -- - or %g3,%g2,%g2 - ldx [vp+0],v0 - add up,32,up - fanop -C -- - srlx %g2,63,cy - add u1,v1,%g1 - stx %g5,[rp+0] - fanop -C -- - add %g1,cy,%g5 - or u1,v1,%g2 - fmnop - fanop -C -- - andn %g2,%g5,%g2 - and u1,v1,%g3 - ldx [up-24],u1 - fanop -C -- - or %g3,%g2,%g2 - ldx [vp+8],v1 - add vp,32,vp - fanop -C -- - srlx %g2,63,cy - add u2,v2,%g1 - stx %g5,[rp+8] - fanop -C -- - add %g1,cy,%g5 - or u2,v2,%g2 - fmnop - fanop -C -- - andn %g2,%g5,%g2 - and u2,v2,%g3 - ldx [up-16],u2 - fanop -C -- - or %g3,%g2,%g2 - ldx [vp-16],v2 - add rp,32,rp - fanop -C -- - srlx %g2,63,cy - add u3,v3,%g1 - stx %g5,[rp-16] - fanop -C -- - add %g1,cy,%g5 - or u3,v3,%g2 - fmnop - fanop -C -- - andn %g2,%g5,%g2 - and u3,v3,%g3 - ldx [up-8],u3 - fanop -C -- - or %g3,%g2,%g2 - subcc n,4,n - ldx [vp-8],v3 - fanop -C -- - srlx %g2,63,cy - add u0,v0,%g1 - stx %g5,[rp-8] - fanop -C -- - add %g1,cy,%g5 - or u0,v0,%g2 - bge,pt %xcc,.Loop - fanop -C END MAIN LOOP -.Lend4567: - andn %g2,%g5,%g2 - and u0,v0,%g3 - or %g3,%g2,%g2 - srlx %g2,63,cy - add u1,v1,%g1 - stx %g5,[rp+0] - add %g1,cy,%g5 - or u1,v1,%g2 - andn %g2,%g5,%g2 - and u1,v1,%g3 - or %g3,%g2,%g2 - srlx %g2,63,cy - add u2,v2,%g1 - stx %g5,[rp+8] - add %g1,cy,%g5 - or u2,v2,%g2 - andn %g2,%g5,%g2 - and u2,v2,%g3 - or %g3,%g2,%g2 - add rp,32,rp - srlx %g2,63,cy - add u3,v3,%g1 - stx %g5,[rp-16] - add %g1,cy,%g5 - or u3,v3,%g2 - andn %g2,%g5,%g2 - and u3,v3,%g3 - or %g3,%g2,%g2 - srlx %g2,63,cy - stx %g5,[rp-8] - - addcc n,4,n - bz,pn %xcc,.Lret - fanop - -.Loop0: ldx [up],u0 - add up,8,up - ldx [vp],v0 - add vp,8,vp - add rp,8,rp - subcc n,1,n - add u0,v0,%g1 - or u0,v0,%g2 - add %g1,cy,%g5 - and u0,v0,%g3 - andn %g2,%g5,%g2 - stx %g5,[rp-8] - or %g3,%g2,%g2 - bnz,pt %xcc,.Loop0 - srlx %g2,63,cy - -.Lret: mov cy,%i0 - ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/addmul_1.asm deleted file mode 100644 index 48a94146ff618581e03a5fabb33e6403b5e437d5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/addmul_1.asm +++ /dev/null @@ -1,606 +0,0 @@ -dnl SPARC v9 64-bit mpn_addmul_1 -- Multiply a limb vector with a limb and add -dnl the result to a second limb vector. - -dnl Copyright 1998, 2000-2004 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC 1&2: 14 -C UltraSPARC 3: 17.5 - -C Algorithm: We use eight floating-point multiplies per limb product, with the -C invariant v operand split into four 16-bit pieces, and the up operand split -C into 32-bit pieces. We sum pairs of 48-bit partial products using -C floating-point add, then convert the four 49-bit product-sums and transfer -C them to the integer unit. - -C Possible optimizations: -C 0. Rewrite to use algorithm of mpn_addmul_2. -C 1. Align the stack area where we transfer the four 49-bit product-sums -C to a 32-byte boundary. That would minimize the cache collision. -C (UltraSPARC-1/2 use a direct-mapped cache.) (Perhaps even better would -C be to align the area to map to the area immediately before up?) -C 2. Sum the 4 49-bit quantities using 32-bit operations, as in the -C develop mpn_addmul_2. This would save many integer instructions. -C 3. Unrolling. Questionable if it is worth the code expansion, given that -C it could only save 1 cycle/limb. -C 4. Specialize for particular v values. If its upper 32 bits are zero, we -C could save many operations, in the FPU (fmuld), but more so in the IEU -C since we'll be summing 48-bit quantities, which might be simpler. -C 5. Ideally, we should schedule the f2/f3 and f4/f5 RAW further apart, and -C the i00,i16,i32,i48 RAW less apart. The latter apart-scheduling should -C not be greater than needed for L2 cache latency, and also not so great -C that i16 needs to be copied. -C 6. Avoid performing mem+fa+fm in the same cycle, at least not when we want -C to get high IEU bandwidth. (12 of the 14 cycles will be free for 2 IEU -C ops.) - -C Instruction classification (as per UltraSPARC-1/2 functional units): -C 8 FM -C 10 FA -C 12 MEM -C 10 ISHIFT + 14 IADDLOG -C 1 BRANCH -C 55 insns totally (plus one mov insn that should be optimized out) - -C The loop executes 56 instructions in 14 cycles on UltraSPARC-1/2, i.e we -C sustain the peak execution rate of 4 instructions/cycle. - -C INPUT PARAMETERS -C rp i0 -C up i1 -C n i2 -C v i3 - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) - -define(`p00', `%f8') define(`p16',`%f10') define(`p32',`%f12') define(`p48',`%f14') -define(`r32',`%f16') define(`r48',`%f18') define(`r64',`%f20') define(`r80',`%f22') -define(`v00',`%f24') define(`v16',`%f26') define(`v32',`%f28') define(`v48',`%f30') -define(`u00',`%f32') define(`u32', `%f34') -define(`a00',`%f36') define(`a16',`%f38') define(`a32',`%f40') define(`a48',`%f42') -define(`cy',`%g1') -define(`rlimb',`%g3') -define(`i00',`%l0') define(`i16',`%l1') define(`i32',`%l2') define(`i48',`%l3') -define(`xffffffff',`%l7') -define(`xffff',`%o0') - -PROLOGUE(mpn_addmul_1) - -C Initialization. (1) Split v operand into four 16-bit chunks and store them -C as IEEE double in fp registers. (2) Clear upper 32 bits of fp register pairs -C f2 and f4. (3) Store masks in registers aliased to `xffff' and `xffffffff'. - - save %sp, -256, %sp - mov -1, %g4 - srlx %g4, 48, xffff C store mask in register `xffff' - and %i3, xffff, %g2 - stx %g2, [%sp+2223+0] - srlx %i3, 16, %g3 - and %g3, xffff, %g3 - stx %g3, [%sp+2223+8] - srlx %i3, 32, %g2 - and %g2, xffff, %g2 - stx %g2, [%sp+2223+16] - srlx %i3, 48, %g3 - stx %g3, [%sp+2223+24] - srlx %g4, 32, xffffffff C store mask in register `xffffffff' - - sllx %i2, 3, %i2 - mov 0, cy C clear cy - add %i0, %i2, %i0 - add %i1, %i2, %i1 - neg %i2 - add %i1, 4, %i5 - add %i0, -32, %i4 - add %i0, -16, %i0 - - ldd [%sp+2223+0], v00 - ldd [%sp+2223+8], v16 - ldd [%sp+2223+16], v32 - ldd [%sp+2223+24], v48 - ld [%sp+2223+0],%f2 C zero f2 - ld [%sp+2223+0],%f4 C zero f4 - ld [%i5+%i2], %f3 C read low 32 bits of up[i] - ld [%i1+%i2], %f5 C read high 32 bits of up[i] - fxtod v00, v00 - fxtod v16, v16 - fxtod v32, v32 - fxtod v48, v48 - -C Start real work. (We sneakingly read f3 and f5 above...) -C The software pipeline is very deep, requiring 4 feed-in stages. - - fxtod %f2, u00 - fxtod %f4, u32 - fmuld u00, v00, a00 - fmuld u00, v16, a16 - fmuld u00, v32, p32 - fmuld u32, v00, r32 - fmuld u00, v48, p48 - addcc %i2, 8, %i2 - bnz,pt %xcc, .L_two_or_more - fmuld u32, v16, r48 - -.L_one: - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 - fdtox a00, a00 - faddd p48, r48, a48 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 - fdtox a32, a32 - fdtox a48, a48 - std a00, [%sp+2223+0] - std a16, [%sp+2223+8] - std a32, [%sp+2223+16] - std a48, [%sp+2223+24] - add %i2, 8, %i2 - - fdtox r64, a00 - ldx [%i0+%i2], rlimb C read rp[i] - fdtox r80, a16 - ldx [%sp+2223+0], i00 - ldx [%sp+2223+8], i16 - ldx [%sp+2223+16], i32 - ldx [%sp+2223+24], i48 - std a00, [%sp+2223+0] - std a16, [%sp+2223+8] - add %i2, 8, %i2 - - srlx rlimb, 32, %g4 C HI(rlimb) - and rlimb, xffffffff, %g5 C LO(rlimb) - add i00, %g5, %g5 C i00+ now in g5 - ldx [%sp+2223+0], i00 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - srlx i48, 16, %l5 C (i48 >> 16) - add i32, %g4, %g4 C i32+ now in g4 - sllx i48, 32, %l6 C (i48 << 32) - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - std a00, [%sp+2223+0] - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - std a16, [%sp+2223+8] - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - add %l6, %o2, %o2 C mi64- in %o2 - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - add cy, %g5, %o4 C x = prev(i00) + cy - b .L_out_1 - add %i2, 8, %i2 - -.L_two_or_more: - ld [%i5+%i2], %f3 C read low 32 bits of up[i] - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 - ld [%i1+%i2], %f5 C read high 32 bits of up[i] - fdtox a00, a00 - faddd p48, r48, a48 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 - fdtox a32, a32 - fxtod %f2, u00 - fxtod %f4, u32 - fdtox a48, a48 - std a00, [%sp+2223+0] - fmuld u00, v00, p00 - std a16, [%sp+2223+8] - fmuld u00, v16, p16 - std a32, [%sp+2223+16] - fmuld u00, v32, p32 - std a48, [%sp+2223+24] - faddd p00, r64, a00 - fmuld u32, v00, r32 - faddd p16, r80, a16 - fmuld u00, v48, p48 - addcc %i2, 8, %i2 - bnz,pt %xcc, .L_three_or_more - fmuld u32, v16, r48 - -.L_two: - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 - fdtox a00, a00 - ldx [%i0+%i2], rlimb C read rp[i] - faddd p48, r48, a48 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 - ldx [%sp+2223+0], i00 - fdtox a32, a32 - ldx [%sp+2223+8], i16 - ldx [%sp+2223+16], i32 - ldx [%sp+2223+24], i48 - fdtox a48, a48 - std a00, [%sp+2223+0] - std a16, [%sp+2223+8] - std a32, [%sp+2223+16] - std a48, [%sp+2223+24] - add %i2, 8, %i2 - - fdtox r64, a00 - srlx rlimb, 32, %g4 C HI(rlimb) - and rlimb, xffffffff, %g5 C LO(rlimb) - ldx [%i0+%i2], rlimb C read rp[i] - add i00, %g5, %g5 C i00+ now in g5 - fdtox r80, a16 - ldx [%sp+2223+0], i00 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - srlx i48, 16, %l5 C (i48 >> 16) - add i32, %g4, %g4 C i32+ now in g4 - ldx [%sp+2223+16], i32 - sllx i48, 32, %l6 C (i48 << 32) - ldx [%sp+2223+24], i48 - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - std a00, [%sp+2223+0] - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - std a16, [%sp+2223+8] - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - add %l6, %o2, %o2 C mi64- in %o2 - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - add cy, %g5, %o4 C x = prev(i00) + cy - b .L_out_2 - add %i2, 8, %i2 - -.L_three_or_more: - ld [%i5+%i2], %f3 C read low 32 bits of up[i] - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 - ld [%i1+%i2], %f5 C read high 32 bits of up[i] - fdtox a00, a00 - ldx [%i0+%i2], rlimb C read rp[i] - faddd p48, r48, a48 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 - ldx [%sp+2223+0], i00 - fdtox a32, a32 - ldx [%sp+2223+8], i16 - fxtod %f2, u00 - ldx [%sp+2223+16], i32 - fxtod %f4, u32 - ldx [%sp+2223+24], i48 - fdtox a48, a48 - std a00, [%sp+2223+0] - fmuld u00, v00, p00 - std a16, [%sp+2223+8] - fmuld u00, v16, p16 - std a32, [%sp+2223+16] - fmuld u00, v32, p32 - std a48, [%sp+2223+24] - faddd p00, r64, a00 - fmuld u32, v00, r32 - faddd p16, r80, a16 - fmuld u00, v48, p48 - addcc %i2, 8, %i2 - bnz,pt %xcc, .L_four_or_more - fmuld u32, v16, r48 - -.L_three: - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 - fdtox a00, a00 - srlx rlimb, 32, %g4 C HI(rlimb) - and rlimb, xffffffff, %g5 C LO(rlimb) - ldx [%i0+%i2], rlimb C read rp[i] - faddd p48, r48, a48 - add i00, %g5, %g5 C i00+ now in g5 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 - ldx [%sp+2223+0], i00 - fdtox a32, a32 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - srlx i48, 16, %l5 C (i48 >> 16) - add i32, %g4, %g4 C i32+ now in g4 - ldx [%sp+2223+16], i32 - sllx i48, 32, %l6 C (i48 << 32) - ldx [%sp+2223+24], i48 - fdtox a48, a48 - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - std a00, [%sp+2223+0] - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - std a16, [%sp+2223+8] - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - std a32, [%sp+2223+16] - add %l6, %o2, %o2 C mi64- in %o2 - std a48, [%sp+2223+24] - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - add cy, %g5, %o4 C x = prev(i00) + cy - b .L_out_3 - add %i2, 8, %i2 - -.L_four_or_more: - ld [%i5+%i2], %f3 C read low 32 bits of up[i] - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 - ld [%i1+%i2], %f5 C read high 32 bits of up[i] - fdtox a00, a00 - srlx rlimb, 32, %g4 C HI(rlimb) - and rlimb, xffffffff, %g5 C LO(rlimb) - ldx [%i0+%i2], rlimb C read rp[i] - faddd p48, r48, a48 - add i00, %g5, %g5 C i00+ now in g5 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 - ldx [%sp+2223+0], i00 - fdtox a32, a32 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - fxtod %f2, u00 - srlx i48, 16, %l5 C (i48 >> 16) - add i32, %g4, %g4 C i32+ now in g4 - ldx [%sp+2223+16], i32 - fxtod %f4, u32 - sllx i48, 32, %l6 C (i48 << 32) - ldx [%sp+2223+24], i48 - fdtox a48, a48 - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - std a00, [%sp+2223+0] - fmuld u00, v00, p00 - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - std a16, [%sp+2223+8] - fmuld u00, v16, p16 - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - std a32, [%sp+2223+16] - fmuld u00, v32, p32 - add %l6, %o2, %o2 C mi64- in %o2 - std a48, [%sp+2223+24] - faddd p00, r64, a00 - fmuld u32, v00, r32 - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - faddd p16, r80, a16 - fmuld u00, v48, p48 - add cy, %g5, %o4 C x = prev(i00) + cy - addcc %i2, 8, %i2 - bnz,pt %xcc, .Loop - fmuld u32, v16, r48 - -.L_four: - b,a .L_out_4 - -C BEGIN MAIN LOOP - .align 16 -.Loop: -C 00 - srlx %o4, 16, %o5 C (x >> 16) - ld [%i5+%i2], %f3 C read low 32 bits of up[i] - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 -C 01 - add %o5, %o2, %o2 C mi64 in %o2 2nd ASSIGNMENT - and %o4, xffff, %o5 C (x & 0xffff) - ld [%i1+%i2], %f5 C read high 32 bits of up[i] - fdtox a00, a00 -C 02 - srlx rlimb, 32, %g4 C HI(rlimb) - and rlimb, xffffffff, %g5 C LO(rlimb) - ldx [%i0+%i2], rlimb C read rp[i] - faddd p48, r48, a48 -C 03 - srlx %o2, 48, %o7 C (mi64 >> 48) - add i00, %g5, %g5 C i00+ now in g5 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 -C 04 - sllx %o2, 16, %i3 C (mi64 << 16) - add %o7, %o1, cy C new cy - ldx [%sp+2223+0], i00 - fdtox a32, a32 -C 05 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - fxtod %f2, u00 -C 06 - srlx i48, 16, %l5 C (i48 >> 16) - add i32, %g4, %g4 C i32+ now in g4 - ldx [%sp+2223+16], i32 - fxtod %f4, u32 -C 07 - sllx i48, 32, %l6 C (i48 << 32) - or %i3, %o5, %o5 - ldx [%sp+2223+24], i48 - fdtox a48, a48 -C 08 - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - std a00, [%sp+2223+0] - fmuld u00, v00, p00 -C 09 - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - std a16, [%sp+2223+8] - fmuld u00, v16, p16 -C 10 - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - std a32, [%sp+2223+16] - fmuld u00, v32, p32 -C 11 - add %l6, %o2, %o2 C mi64- in %o2 - std a48, [%sp+2223+24] - faddd p00, r64, a00 - fmuld u32, v00, r32 -C 12 - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - stx %o5, [%i4+%i2] - faddd p16, r80, a16 - fmuld u00, v48, p48 -C 13 - add cy, %g5, %o4 C x = prev(i00) + cy - addcc %i2, 8, %i2 - bnz,pt %xcc, .Loop - fmuld u32, v16, r48 -C END MAIN LOOP - -.L_out_4: - srlx %o4, 16, %o5 C (x >> 16) - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 - add %o5, %o2, %o2 C mi64 in %o2 2nd ASSIGNMENT - and %o4, xffff, %o5 C (x & 0xffff) - fdtox a00, a00 - srlx rlimb, 32, %g4 C HI(rlimb) - and rlimb, xffffffff, %g5 C LO(rlimb) - ldx [%i0+%i2], rlimb C read rp[i] - faddd p48, r48, a48 - srlx %o2, 48, %o7 C (mi64 >> 48) - add i00, %g5, %g5 C i00+ now in g5 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 - sllx %o2, 16, %i3 C (mi64 << 16) - add %o7, %o1, cy C new cy - ldx [%sp+2223+0], i00 - fdtox a32, a32 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - srlx i48, 16, %l5 C (i48 >> 16) - add i32, %g4, %g4 C i32+ now in g4 - ldx [%sp+2223+16], i32 - sllx i48, 32, %l6 C (i48 << 32) - or %i3, %o5, %o5 - ldx [%sp+2223+24], i48 - fdtox a48, a48 - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - std a00, [%sp+2223+0] - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - std a16, [%sp+2223+8] - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - std a32, [%sp+2223+16] - add %l6, %o2, %o2 C mi64- in %o2 - std a48, [%sp+2223+24] - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - stx %o5, [%i4+%i2] - add cy, %g5, %o4 C x = prev(i00) + cy - add %i2, 8, %i2 -.L_out_3: - srlx %o4, 16, %o5 C (x >> 16) - add %o5, %o2, %o2 C mi64 in %o2 2nd ASSIGNMENT - and %o4, xffff, %o5 C (x & 0xffff) - fdtox r64, a00 - srlx rlimb, 32, %g4 C HI(rlimb) - and rlimb, xffffffff, %g5 C LO(rlimb) - ldx [%i0+%i2], rlimb C read rp[i] - srlx %o2, 48, %o7 C (mi64 >> 48) - add i00, %g5, %g5 C i00+ now in g5 - fdtox r80, a16 - sllx %o2, 16, %i3 C (mi64 << 16) - add %o7, %o1, cy C new cy - ldx [%sp+2223+0], i00 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - srlx i48, 16, %l5 C (i48 >> 16) - add i32, %g4, %g4 C i32+ now in g4 - ldx [%sp+2223+16], i32 - sllx i48, 32, %l6 C (i48 << 32) - or %i3, %o5, %o5 - ldx [%sp+2223+24], i48 - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - std a00, [%sp+2223+0] - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - std a16, [%sp+2223+8] - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - add %l6, %o2, %o2 C mi64- in %o2 - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - stx %o5, [%i4+%i2] - add cy, %g5, %o4 C x = prev(i00) + cy - add %i2, 8, %i2 -.L_out_2: - srlx %o4, 16, %o5 C (x >> 16) - add %o5, %o2, %o2 C mi64 in %o2 2nd ASSIGNMENT - and %o4, xffff, %o5 C (x & 0xffff) - srlx rlimb, 32, %g4 C HI(rlimb) - and rlimb, xffffffff, %g5 C LO(rlimb) - srlx %o2, 48, %o7 C (mi64 >> 48) - add i00, %g5, %g5 C i00+ now in g5 - sllx %o2, 16, %i3 C (mi64 << 16) - add %o7, %o1, cy C new cy - ldx [%sp+2223+0], i00 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - srlx i48, 16, %l5 C (i48 >> 16) - add i32, %g4, %g4 C i32+ now in g4 - sllx i48, 32, %l6 C (i48 << 32) - or %i3, %o5, %o5 - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - add %l6, %o2, %o2 C mi64- in %o2 - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - stx %o5, [%i4+%i2] - add cy, %g5, %o4 C x = prev(i00) + cy - add %i2, 8, %i2 -.L_out_1: - srlx %o4, 16, %o5 C (x >> 16) - add %o5, %o2, %o2 C mi64 in %o2 2nd ASSIGNMENT - and %o4, xffff, %o5 C (x & 0xffff) - srlx %o2, 48, %o7 C (mi64 >> 48) - sllx %o2, 16, %i3 C (mi64 << 16) - add %o7, %o1, cy C new cy - or %i3, %o5, %o5 - stx %o5, [%i4+%i2] - - sllx i00, 0, %g2 - add %g2, cy, cy - sllx i16, 16, %g3 - add %g3, cy, cy - - return %i7+8 - mov cy, %o0 -EPILOGUE(mpn_addmul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/addmul_2.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/addmul_2.asm deleted file mode 100644 index 37674d7423bfef876e1cc2dd1e53778f08d88f5f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/addmul_2.asm +++ /dev/null @@ -1,551 +0,0 @@ -dnl SPARC v9 64-bit mpn_addmul_2 -- Multiply an n limb number with 2-limb -dnl number and add the result to a n limb vector. - -dnl Copyright 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC 1&2: 9 -C UltraSPARC 3: 10 - -C Algorithm: We use 16 floating-point multiplies per limb product, with the -C 2-limb v operand split into eight 16-bit pieces, and the n-limb u operand -C split into 32-bit pieces. We sum four 48-bit partial products using -C floating-point add, then convert the resulting four 50-bit quantities and -C transfer them to the integer unit. - -C Possible optimizations: -C 1. Align the stack area where we transfer the four 50-bit product-sums -C to a 32-byte boundary. That would minimize the cache collision. -C (UltraSPARC-1/2 use a direct-mapped cache.) (Perhaps even better would -C be to align the area to map to the area immediately before up?) -C 2. Perform two of the fp->int conversions with integer instructions. We -C can get almost ten free IEU slots, if we clean up bookkeeping and the -C silly carry-limb code. -C 3. For an mpn_addmul_1 based on this, we need to fix the silly carry-limb -C code. - -C OSP (Overlapping software pipeline) version of mpn_mul_basecase: -C Operand swap will require 8 LDDA and 8 FXTOD, which will mean 8 cycles. -C FI = 20 -C L = 9 x un * vn -C WDFI = 10 x vn / 2 -C WD = 4 - -C Instruction classification (as per UltraSPARC functional units). -C Assuming silly carry code is fixed. Includes bookkeeping. -C -C mpn_addmul_X mpn_mul_X -C 1 2 1 2 -C ========== ========== -C FM 8 16 8 16 -C FA 10 18 10 18 -C MEM 12 12 10 10 -C ISHIFT 6 6 6 6 -C IADDLOG 11 11 10 10 -C BRANCH 1 1 1 1 -C -C TOTAL IEU 17 17 16 16 -C TOTAL 48 64 45 61 -C -C IEU cycles 8.5 8.5 8 8 -C MEM cycles 12 12 10 10 -C ISSUE cycles 12 16 11.25 15.25 -C FPU cycles 10 18 10 18 -C cycles/loop 12 18 12 18 -C cycles/limb 12 9 12 9 - - -C INPUT PARAMETERS -C rp[n + 1] i0 -C up[n] i1 -C n i2 -C vp[2] i3 - - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) - -C Combine registers: -C u00_hi= u32_hi -C u00_lo= u32_lo -C a000 = out000 -C a016 = out016 -C Free: f52 f54 - - -define(`p000', `%f8') define(`p016',`%f10') -define(`p032',`%f12') define(`p048',`%f14') -define(`p064',`%f16') define(`p080',`%f18') -define(`p096a',`%f20') define(`p112a',`%f22') -define(`p096b',`%f56') define(`p112b',`%f58') - -define(`out000',`%f0') define(`out016',`%f6') - -define(`v000',`%f24') define(`v016',`%f26') -define(`v032',`%f28') define(`v048',`%f30') -define(`v064',`%f44') define(`v080',`%f46') -define(`v096',`%f48') define(`v112',`%f50') - -define(`u00',`%f32') define(`u32', `%f34') - -define(`a000',`%f36') define(`a016',`%f38') -define(`a032',`%f40') define(`a048',`%f42') -define(`a064',`%f60') define(`a080',`%f62') - -define(`u00_hi',`%f2') define(`u32_hi',`%f4') -define(`u00_lo',`%f3') define(`u32_lo',`%f5') - -define(`cy',`%g1') -define(`rlimb',`%g3') -define(`i00',`%l0') define(`i16',`%l1') -define(`r00',`%l2') define(`r32',`%l3') -define(`xffffffff',`%l7') -define(`xffff',`%o0') - - -PROLOGUE(mpn_addmul_2) - -C Initialization. (1) Split v operand into eight 16-bit chunks and store them -C as IEEE double in fp registers. (2) Clear upper 32 bits of fp register pairs -C f2 and f4. (3) Store masks in registers aliased to `xffff' and `xffffffff'. -C This code could be better scheduled. - - save %sp, -256, %sp - -ifdef(`HAVE_VIS', -` mov -1, %g4 - wr %g0, 0xD2, %asi - srlx %g4, 32, xffffffff C store mask in register `xffffffff' - ldda [%i3+6] %asi, v000 - ldda [%i3+4] %asi, v016 - ldda [%i3+2] %asi, v032 - ldda [%i3+0] %asi, v048 - fxtod v000, v000 - ldda [%i3+14] %asi, v064 - fxtod v016, v016 - ldda [%i3+12] %asi, v080 - fxtod v032, v032 - ldda [%i3+10] %asi, v096 - fxtod v048, v048 - ldda [%i3+8] %asi, v112 - fxtod v064, v064 - fxtod v080, v080 - fxtod v096, v096 - fxtod v112, v112 - fzero u00_hi - fzero u32_hi -', -` mov -1, %g4 - ldx [%i3+0], %l0 C vp[0] - srlx %g4, 48, xffff C store mask in register `xffff' - ldx [%i3+8], %l1 C vp[1] - - and %l0, xffff, %g2 - stx %g2, [%sp+2223+0] - srlx %l0, 16, %g3 - and %g3, xffff, %g3 - stx %g3, [%sp+2223+8] - srlx %l0, 32, %g2 - and %g2, xffff, %g2 - stx %g2, [%sp+2223+16] - srlx %l0, 48, %g3 - stx %g3, [%sp+2223+24] - and %l1, xffff, %g2 - stx %g2, [%sp+2223+32] - srlx %l1, 16, %g3 - and %g3, xffff, %g3 - stx %g3, [%sp+2223+40] - srlx %l1, 32, %g2 - and %g2, xffff, %g2 - stx %g2, [%sp+2223+48] - srlx %l1, 48, %g3 - stx %g3, [%sp+2223+56] - - srlx %g4, 32, xffffffff C store mask in register `xffffffff' - - ldd [%sp+2223+0], v000 - ldd [%sp+2223+8], v016 - ldd [%sp+2223+16], v032 - ldd [%sp+2223+24], v048 - fxtod v000, v000 - ldd [%sp+2223+32], v064 - fxtod v016, v016 - ldd [%sp+2223+40], v080 - fxtod v032, v032 - ldd [%sp+2223+48], v096 - fxtod v048, v048 - ldd [%sp+2223+56], v112 - fxtod v064, v064 - ld [%sp+2223+0], u00_hi C zero u00_hi - fxtod v080, v080 - ld [%sp+2223+0], u32_hi C zero u32_hi - fxtod v096, v096 - fxtod v112, v112 -') -C Initialization done. - mov 0, %g2 - mov 0, rlimb - mov 0, %g4 - add %i0, -8, %i0 C BOOKKEEPING - -C Start software pipeline. - - ld [%i1+4], u00_lo C read low 32 bits of up[i] - fxtod u00_hi, u00 -C mid - ld [%i1+0], u32_lo C read high 32 bits of up[i] - fmuld u00, v000, a000 - fmuld u00, v016, a016 - fmuld u00, v032, a032 - fmuld u00, v048, a048 - add %i2, -1, %i2 C BOOKKEEPING - fmuld u00, v064, p064 - add %i1, 8, %i1 C BOOKKEEPING - fxtod u32_hi, u32 - fmuld u00, v080, p080 - fmuld u00, v096, p096a - brnz,pt %i2, .L_2_or_more - fmuld u00, v112, p112a - -.L1: fdtox a000, out000 - fmuld u32, v000, p000 - fdtox a016, out016 - fmuld u32, v016, p016 - fmovd p064, a064 - fmuld u32, v032, p032 - fmovd p080, a080 - fmuld u32, v048, p048 - std out000, [%sp+2223+16] - faddd p000, a032, a000 - fmuld u32, v064, p064 - std out016, [%sp+2223+24] - fxtod u00_hi, u00 - faddd p016, a048, a016 - fmuld u32, v080, p080 - faddd p032, a064, a032 - fmuld u32, v096, p096b - faddd p048, a080, a048 - fmuld u32, v112, p112b -C mid - fdtox a000, out000 - fdtox a016, out016 - faddd p064, p096a, a064 - faddd p080, p112a, a080 - std out000, [%sp+2223+0] - b .L_wd2 - std out016, [%sp+2223+8] - -.L_2_or_more: - ld [%i1+4], u00_lo C read low 32 bits of up[i] - fdtox a000, out000 - fmuld u32, v000, p000 - fdtox a016, out016 - fmuld u32, v016, p016 - fmovd p064, a064 - fmuld u32, v032, p032 - fmovd p080, a080 - fmuld u32, v048, p048 - std out000, [%sp+2223+16] - faddd p000, a032, a000 - fmuld u32, v064, p064 - std out016, [%sp+2223+24] - fxtod u00_hi, u00 - faddd p016, a048, a016 - fmuld u32, v080, p080 - faddd p032, a064, a032 - fmuld u32, v096, p096b - faddd p048, a080, a048 - fmuld u32, v112, p112b -C mid - ld [%i1+0], u32_lo C read high 32 bits of up[i] - fdtox a000, out000 - fmuld u00, v000, p000 - fdtox a016, out016 - fmuld u00, v016, p016 - faddd p064, p096a, a064 - fmuld u00, v032, p032 - faddd p080, p112a, a080 - fmuld u00, v048, p048 - add %i2, -1, %i2 C BOOKKEEPING - std out000, [%sp+2223+0] - faddd p000, a032, a000 - fmuld u00, v064, p064 - add %i1, 8, %i1 C BOOKKEEPING - std out016, [%sp+2223+8] - fxtod u32_hi, u32 - faddd p016, a048, a016 - fmuld u00, v080, p080 - faddd p032, a064, a032 - fmuld u00, v096, p096a - faddd p048, a080, a048 - brnz,pt %i2, .L_3_or_more - fmuld u00, v112, p112a - - b .Lend - nop - -C 64 32 0 -C . . . -C . |__rXXX_| 32 -C . |___cy___| 34 -C . |_______i00__| 50 -C |_______i16__| . 50 - - -C BEGIN MAIN LOOP - .align 16 -.L_3_or_more: -.Loop: ld [%i1+4], u00_lo C read low 32 bits of up[i] - and %g2, xffffffff, %g2 - fdtox a000, out000 - fmuld u32, v000, p000 -C - lduw [%i0+4+8], r00 C read low 32 bits of rp[i] - add %g2, rlimb, %l5 - fdtox a016, out016 - fmuld u32, v016, p016 -C - srlx %l5, 32, cy - ldx [%sp+2223+16], i00 - faddd p064, p096b, a064 - fmuld u32, v032, p032 -C - add %g4, cy, cy C new cy - ldx [%sp+2223+24], i16 - faddd p080, p112b, a080 - fmuld u32, v048, p048 -C - nop - std out000, [%sp+2223+16] - faddd p000, a032, a000 - fmuld u32, v064, p064 -C - add i00, r00, rlimb - add %i0, 8, %i0 C BOOKKEEPING - std out016, [%sp+2223+24] - fxtod u00_hi, u00 -C - sllx i16, 16, %g2 - add cy, rlimb, rlimb - faddd p016, a048, a016 - fmuld u32, v080, p080 -C - srlx i16, 16, %g4 - add %g2, rlimb, %l5 - faddd p032, a064, a032 - fmuld u32, v096, p096b -C - stw %l5, [%i0+4] - nop - faddd p048, a080, a048 - fmuld u32, v112, p112b -C midloop - ld [%i1+0], u32_lo C read high 32 bits of up[i] - and %g2, xffffffff, %g2 - fdtox a000, out000 - fmuld u00, v000, p000 -C - lduw [%i0+0], r32 C read high 32 bits of rp[i] - add %g2, rlimb, %l5 - fdtox a016, out016 - fmuld u00, v016, p016 -C - srlx %l5, 32, cy - ldx [%sp+2223+0], i00 - faddd p064, p096a, a064 - fmuld u00, v032, p032 -C - add %g4, cy, cy C new cy - ldx [%sp+2223+8], i16 - faddd p080, p112a, a080 - fmuld u00, v048, p048 -C - add %i2, -1, %i2 C BOOKKEEPING - std out000, [%sp+2223+0] - faddd p000, a032, a000 - fmuld u00, v064, p064 -C - add i00, r32, rlimb - add %i1, 8, %i1 C BOOKKEEPING - std out016, [%sp+2223+8] - fxtod u32_hi, u32 -C - sllx i16, 16, %g2 - add cy, rlimb, rlimb - faddd p016, a048, a016 - fmuld u00, v080, p080 -C - srlx i16, 16, %g4 - add %g2, rlimb, %l5 - faddd p032, a064, a032 - fmuld u00, v096, p096a -C - stw %l5, [%i0+0] - faddd p048, a080, a048 - brnz,pt %i2, .Loop - fmuld u00, v112, p112a -C END MAIN LOOP - -C WIND-DOWN PHASE 1 -.Lend: and %g2, xffffffff, %g2 - fdtox a000, out000 - fmuld u32, v000, p000 - lduw [%i0+4+8], r00 C read low 32 bits of rp[i] - add %g2, rlimb, %l5 - fdtox a016, out016 - fmuld u32, v016, p016 - srlx %l5, 32, cy - ldx [%sp+2223+16], i00 - faddd p064, p096b, a064 - fmuld u32, v032, p032 - add %g4, cy, cy C new cy - ldx [%sp+2223+24], i16 - faddd p080, p112b, a080 - fmuld u32, v048, p048 - std out000, [%sp+2223+16] - faddd p000, a032, a000 - fmuld u32, v064, p064 - add i00, r00, rlimb - add %i0, 8, %i0 C BOOKKEEPING - std out016, [%sp+2223+24] - sllx i16, 16, %g2 - add cy, rlimb, rlimb - faddd p016, a048, a016 - fmuld u32, v080, p080 - srlx i16, 16, %g4 - add %g2, rlimb, %l5 - faddd p032, a064, a032 - fmuld u32, v096, p096b - stw %l5, [%i0+4] - faddd p048, a080, a048 - fmuld u32, v112, p112b -C mid - and %g2, xffffffff, %g2 - fdtox a000, out000 - lduw [%i0+0], r32 C read high 32 bits of rp[i] - add %g2, rlimb, %l5 - fdtox a016, out016 - srlx %l5, 32, cy - ldx [%sp+2223+0], i00 - faddd p064, p096a, a064 - add %g4, cy, cy C new cy - ldx [%sp+2223+8], i16 - faddd p080, p112a, a080 - std out000, [%sp+2223+0] - add i00, r32, rlimb - std out016, [%sp+2223+8] - sllx i16, 16, %g2 - add cy, rlimb, rlimb - srlx i16, 16, %g4 - add %g2, rlimb, %l5 - stw %l5, [%i0+0] - -C WIND-DOWN PHASE 2 -.L_wd2: and %g2, xffffffff, %g2 - fdtox a032, out000 - lduw [%i0+4+8], r00 C read low 32 bits of rp[i] - add %g2, rlimb, %l5 - fdtox a048, out016 - srlx %l5, 32, cy - ldx [%sp+2223+16], i00 - add %g4, cy, cy C new cy - ldx [%sp+2223+24], i16 - std out000, [%sp+2223+16] - add i00, r00, rlimb - add %i0, 8, %i0 C BOOKKEEPING - std out016, [%sp+2223+24] - sllx i16, 16, %g2 - add cy, rlimb, rlimb - srlx i16, 16, %g4 - add %g2, rlimb, %l5 - stw %l5, [%i0+4] -C mid - and %g2, xffffffff, %g2 - fdtox a064, out000 - lduw [%i0+0], r32 C read high 32 bits of rp[i] - add %g2, rlimb, %l5 - fdtox a080, out016 - srlx %l5, 32, cy - ldx [%sp+2223+0], i00 - add %g4, cy, cy C new cy - ldx [%sp+2223+8], i16 - std out000, [%sp+2223+0] - add i00, r32, rlimb - std out016, [%sp+2223+8] - sllx i16, 16, %g2 - add cy, rlimb, rlimb - srlx i16, 16, %g4 - add %g2, rlimb, %l5 - stw %l5, [%i0+0] - -C WIND-DOWN PHASE 3 -.L_wd3: and %g2, xffffffff, %g2 - fdtox p096b, out000 - add %g2, rlimb, %l5 - fdtox p112b, out016 - srlx %l5, 32, cy - ldx [%sp+2223+16], rlimb - add %g4, cy, cy C new cy - ldx [%sp+2223+24], i16 - std out000, [%sp+2223+16] - add %i0, 8, %i0 C BOOKKEEPING - std out016, [%sp+2223+24] - sllx i16, 16, %g2 - add cy, rlimb, rlimb - srlx i16, 16, %g4 - add %g2, rlimb, %l5 - stw %l5, [%i0+4] -C mid - and %g2, xffffffff, %g2 - add %g2, rlimb, %l5 - srlx %l5, 32, cy - ldx [%sp+2223+0], rlimb - add %g4, cy, cy C new cy - ldx [%sp+2223+8], i16 - sllx i16, 16, %g2 - add cy, rlimb, rlimb - srlx i16, 16, %g4 - add %g2, rlimb, %l5 - stw %l5, [%i0+0] - - and %g2, xffffffff, %g2 - add %g2, rlimb, %l5 - srlx %l5, 32, cy - ldx [%sp+2223+16], i00 - add %g4, cy, cy C new cy - ldx [%sp+2223+24], i16 - - sllx i16, 16, %g2 - add i00, cy, cy - return %i7+8 - add %g2, cy, %o0 -EPILOGUE(mpn_addmul_2) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/lshiftc.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/lshiftc.asm deleted file mode 100644 index 47286d569e75d77173037b99940acd2049b52e1c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/lshiftc.asm +++ /dev/null @@ -1,165 +0,0 @@ -dnl SPARC v9 mpn_lshiftc - -dnl Copyright 1996, 2000-2003, 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -include(`../config.m4') - -C cycles/limb -C UltraSPARC 1&2: 3 -C UltraSPARC 3: 2.67 - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`n', `%i2') -define(`cnt',`%i3') - -define(`u0', `%l0') -define(`u1', `%l2') -define(`u2', `%l4') -define(`u3', `%l6') - -define(`tnc',`%i4') - -define(`fanop',`fitod %f0,%f2') dnl A quasi nop running in the FA pipe - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_lshiftc) - save %sp,-160,%sp - - sllx n,3,%g1 - sub %g0,cnt,tnc C negate shift count - add up,%g1,up C make %o1 point at end of src - add rp,%g1,rp C make %o0 point at end of res - ldx [up-8],u3 C load first limb - subcc n,5,n - srlx u3,tnc,%i5 C compute function result - bl,pn %xcc,.Lend1234 - sllx u3,cnt,%g3 - - subcc n,4,n - ldx [up-16],u0 - ldx [up-24],u1 - add up,-32,up - ldx [up-0],u2 - ldx [up-8],u3 - srlx u0,tnc,%g2 - bl,pn %xcc,.Lend5678 - not %g3, %g3 - - b,a .Loop - ALIGN(16) -.Loop: - sllx u0,cnt,%g1 - andn %g3,%g2,%g3 - ldx [up-16],u0 - fanop -C -- - srlx u1,tnc,%g2 - subcc n,4,n - stx %g3,[rp-8] - not %g1, %g1 -C -- - sllx u1,cnt,%g3 - andn %g1,%g2,%g1 - ldx [up-24],u1 - fanop -C -- - srlx u2,tnc,%g2 - stx %g1,[rp-16] - add up,-32,up - not %g3, %g3 -C -- - sllx u2,cnt,%g1 - andn %g3,%g2,%g3 - ldx [up-0],u2 - fanop -C -- - srlx u3,tnc,%g2 - stx %g3,[rp-24] - add rp,-32,rp - not %g1, %g1 -C -- - sllx u3,cnt,%g3 - andn %g1,%g2,%g1 - ldx [up-8],u3 - fanop -C -- - srlx u0,tnc,%g2 - stx %g1,[rp-0] - bge,pt %xcc,.Loop - not %g3, %g3 -C -- -.Lend5678: - sllx u0,cnt,%g1 - andn %g3,%g2,%g3 - srlx u1,tnc,%g2 - stx %g3,[rp-8] - not %g1, %g1 - sllx u1,cnt,%g3 - andn %g1,%g2,%g1 - srlx u2,tnc,%g2 - stx %g1,[rp-16] - not %g3, %g3 - sllx u2,cnt,%g1 - andn %g3,%g2,%g3 - srlx u3,tnc,%g2 - stx %g3,[rp-24] - add rp,-32,rp - not %g1, %g1 - sllx u3,cnt,%g3 C carry... - andn %g1,%g2,%g1 - stx %g1,[rp-0] - -.Lend1234: - addcc n,4,n - bz,pn %xcc,.Lret - fanop -.Loop0: - add rp,-8,rp - subcc n,1,n - ldx [up-16],u3 - add up,-8,up - srlx u3,tnc,%g2 - not %g3, %g3 - andn %g3,%g2,%g3 - stx %g3,[rp] - sllx u3,cnt,%g3 - bnz,pt %xcc,.Loop0 - fanop -.Lret: - not %g3, %g3 - stx %g3,[rp-8] - mov %i5,%i0 - ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/mul_1.asm deleted file mode 100644 index 871d562fcb2209cc6c19ec4c8c5416b94daaa0f7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/mul_1.asm +++ /dev/null @@ -1,580 +0,0 @@ -dnl SPARC v9 64-bit mpn_mul_1 -- Multiply a limb vector with a limb and store -dnl the result in a second limb vector. - -dnl Copyright 1998, 2000-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC 1&2: 14 -C UltraSPARC 3: 18.5 - -C Algorithm: We use eight floating-point multiplies per limb product, with the -C invariant v operand split into four 16-bit pieces, and the s1 operand split -C into 32-bit pieces. We sum pairs of 48-bit partial products using -C floating-point add, then convert the four 49-bit product-sums and transfer -C them to the integer unit. - -C Possible optimizations: -C 1. Align the stack area where we transfer the four 49-bit product-sums -C to a 32-byte boundary. That would minimize the cache collision. -C (UltraSPARC-1/2 use a direct-mapped cache.) (Perhaps even better would -C be to align the area to map to the area immediately before s1?) -C 2. Sum the 4 49-bit quantities using 32-bit operations, as in the -C develop mpn_addmul_2. This would save many integer instructions. -C 3. Unrolling. Questionable if it is worth the code expansion, given that -C it could only save 1 cycle/limb. -C 4. Specialize for particular v values. If its upper 32 bits are zero, we -C could save many operations, in the FPU (fmuld), but more so in the IEU -C since we'll be summing 48-bit quantities, which might be simpler. -C 5. Ideally, we should schedule the f2/f3 and f4/f5 RAW further apart, and -C the i00,i16,i32,i48 RAW less apart. The latter apart-scheduling should -C not be greater than needed for L2 cache latency, and also not so great -C that i16 needs to be copied. -C 6. Avoid performing mem+fa+fm in the same cycle, at least not when we want -C to get high IEU bandwidth. (12 of the 14 cycles will be free for 2 IEU -C ops.) - -C Instruction classification (as per UltraSPARC-1/2 functional units): -C 8 FM -C 10 FA -C 11 MEM -C 9 ISHIFT + 10? IADDLOG -C 1 BRANCH -C 49 insns totally (plus three mov insns that should be optimized out) - -C The loop executes 53 instructions in 14 cycles on UltraSPARC-1/2, i.e we -C sustain 3.79 instructions/cycle. - -C INPUT PARAMETERS -C rp i0 -C up i1 -C n i2 -C v i3 - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) - -define(`p00', `%f8') define(`p16',`%f10') define(`p32',`%f12') define(`p48',`%f14') -define(`r32',`%f16') define(`r48',`%f18') define(`r64',`%f20') define(`r80',`%f22') -define(`v00',`%f24') define(`v16',`%f26') define(`v32',`%f28') define(`v48',`%f30') -define(`u00',`%f32') define(`u32', `%f34') -define(`a00',`%f36') define(`a16',`%f38') define(`a32',`%f40') define(`a48',`%f42') -define(`cy',`%g1') -define(`rlimb',`%g3') -define(`i00',`%l0') define(`i16',`%l1') define(`i32',`%l2') define(`i48',`%l3') -define(`xffffffff',`%l7') -define(`xffff',`%o0') - -PROLOGUE(mpn_mul_1) - -C Initialization. (1) Split v operand into four 16-bit chunks and store them -C as IEEE double in fp registers. (2) Clear upper 32 bits of fp register pairs -C f2 and f4. (3) Store masks in registers aliased to `xffff' and `xffffffff'. - - save %sp, -256, %sp - mov -1, %g4 - srlx %g4, 48, xffff C store mask in register `xffff' - and %i3, xffff, %g2 - stx %g2, [%sp+2223+0] - srlx %i3, 16, %g3 - and %g3, xffff, %g3 - stx %g3, [%sp+2223+8] - srlx %i3, 32, %g2 - and %g2, xffff, %g2 - stx %g2, [%sp+2223+16] - srlx %i3, 48, %g3 - stx %g3, [%sp+2223+24] - srlx %g4, 32, xffffffff C store mask in register `xffffffff' - - sllx %i2, 3, %i2 - mov 0, cy C clear cy - add %i0, %i2, %i0 - add %i1, %i2, %i1 - neg %i2 - add %i1, 4, %i5 - add %i0, -32, %i4 - add %i0, -16, %i0 - - ldd [%sp+2223+0], v00 - ldd [%sp+2223+8], v16 - ldd [%sp+2223+16], v32 - ldd [%sp+2223+24], v48 - ld [%sp+2223+0],%f2 C zero f2 - ld [%sp+2223+0],%f4 C zero f4 - ld [%i5+%i2], %f3 C read low 32 bits of up[i] - ld [%i1+%i2], %f5 C read high 32 bits of up[i] - fxtod v00, v00 - fxtod v16, v16 - fxtod v32, v32 - fxtod v48, v48 - -C Start real work. (We sneakingly read f3 and f5 above...) -C The software pipeline is very deep, requiring 4 feed-in stages. - - fxtod %f2, u00 - fxtod %f4, u32 - fmuld u00, v00, a00 - fmuld u00, v16, a16 - fmuld u00, v32, p32 - fmuld u32, v00, r32 - fmuld u00, v48, p48 - addcc %i2, 8, %i2 - bnz,pt %xcc, .L_two_or_more - fmuld u32, v16, r48 - -.L_one: - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 - fdtox a00, a00 - faddd p48, r48, a48 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 - fdtox a32, a32 - fdtox a48, a48 - std a00, [%sp+2223+0] - std a16, [%sp+2223+8] - std a32, [%sp+2223+16] - std a48, [%sp+2223+24] - add %i2, 8, %i2 - - fdtox r64, a00 - fdtox r80, a16 - ldx [%sp+2223+0], i00 - ldx [%sp+2223+8], i16 - ldx [%sp+2223+16], i32 - ldx [%sp+2223+24], i48 - std a00, [%sp+2223+0] - std a16, [%sp+2223+8] - add %i2, 8, %i2 - - mov i00, %g5 C i00+ now in g5 - ldx [%sp+2223+0], i00 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - srlx i48, 16, %l5 C (i48 >> 16) - mov i32, %g4 C i32+ now in g4 - sllx i48, 32, %l6 C (i48 << 32) - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - std a00, [%sp+2223+0] - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - std a16, [%sp+2223+8] - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - add %l6, %o2, %o2 C mi64- in %o2 - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - add cy, %g5, %o4 C x = prev(i00) + cy - b .L_out_1 - add %i2, 8, %i2 - -.L_two_or_more: - ld [%i5+%i2], %f3 C read low 32 bits of up[i] - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 - ld [%i1+%i2], %f5 C read high 32 bits of up[i] - fdtox a00, a00 - faddd p48, r48, a48 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 - fdtox a32, a32 - fxtod %f2, u00 - fxtod %f4, u32 - fdtox a48, a48 - std a00, [%sp+2223+0] - fmuld u00, v00, p00 - std a16, [%sp+2223+8] - fmuld u00, v16, p16 - std a32, [%sp+2223+16] - fmuld u00, v32, p32 - std a48, [%sp+2223+24] - faddd p00, r64, a00 - fmuld u32, v00, r32 - faddd p16, r80, a16 - fmuld u00, v48, p48 - addcc %i2, 8, %i2 - bnz,pt %xcc, .L_three_or_more - fmuld u32, v16, r48 - -.L_two: - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 - fdtox a00, a00 - faddd p48, r48, a48 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 - ldx [%sp+2223+0], i00 - fdtox a32, a32 - ldx [%sp+2223+8], i16 - ldx [%sp+2223+16], i32 - ldx [%sp+2223+24], i48 - fdtox a48, a48 - std a00, [%sp+2223+0] - std a16, [%sp+2223+8] - std a32, [%sp+2223+16] - std a48, [%sp+2223+24] - add %i2, 8, %i2 - - fdtox r64, a00 - mov i00, %g5 C i00+ now in g5 - fdtox r80, a16 - ldx [%sp+2223+0], i00 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - srlx i48, 16, %l5 C (i48 >> 16) - mov i32, %g4 C i32+ now in g4 - ldx [%sp+2223+16], i32 - sllx i48, 32, %l6 C (i48 << 32) - ldx [%sp+2223+24], i48 - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - std a00, [%sp+2223+0] - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - std a16, [%sp+2223+8] - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - add %l6, %o2, %o2 C mi64- in %o2 - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - add cy, %g5, %o4 C x = prev(i00) + cy - b .L_out_2 - add %i2, 8, %i2 - -.L_three_or_more: - ld [%i5+%i2], %f3 C read low 32 bits of up[i] - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 - ld [%i1+%i2], %f5 C read high 32 bits of up[i] - fdtox a00, a00 - faddd p48, r48, a48 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 - ldx [%sp+2223+0], i00 - fdtox a32, a32 - ldx [%sp+2223+8], i16 - fxtod %f2, u00 - ldx [%sp+2223+16], i32 - fxtod %f4, u32 - ldx [%sp+2223+24], i48 - fdtox a48, a48 - std a00, [%sp+2223+0] - fmuld u00, v00, p00 - std a16, [%sp+2223+8] - fmuld u00, v16, p16 - std a32, [%sp+2223+16] - fmuld u00, v32, p32 - std a48, [%sp+2223+24] - faddd p00, r64, a00 - fmuld u32, v00, r32 - faddd p16, r80, a16 - fmuld u00, v48, p48 - addcc %i2, 8, %i2 - bnz,pt %xcc, .L_four_or_more - fmuld u32, v16, r48 - -.L_three: - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 - fdtox a00, a00 - faddd p48, r48, a48 - mov i00, %g5 C i00+ now in g5 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 - ldx [%sp+2223+0], i00 - fdtox a32, a32 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - srlx i48, 16, %l5 C (i48 >> 16) - mov i32, %g4 C i32+ now in g4 - ldx [%sp+2223+16], i32 - sllx i48, 32, %l6 C (i48 << 32) - ldx [%sp+2223+24], i48 - fdtox a48, a48 - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - std a00, [%sp+2223+0] - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - std a16, [%sp+2223+8] - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - std a32, [%sp+2223+16] - add %l6, %o2, %o2 C mi64- in %o2 - std a48, [%sp+2223+24] - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - add cy, %g5, %o4 C x = prev(i00) + cy - b .L_out_3 - add %i2, 8, %i2 - -.L_four_or_more: - ld [%i5+%i2], %f3 C read low 32 bits of up[i] - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 - ld [%i1+%i2], %f5 C read high 32 bits of up[i] - fdtox a00, a00 - faddd p48, r48, a48 - mov i00, %g5 C i00+ now in g5 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 - ldx [%sp+2223+0], i00 - fdtox a32, a32 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - fxtod %f2, u00 - srlx i48, 16, %l5 C (i48 >> 16) - mov i32, %g4 C i32+ now in g4 - ldx [%sp+2223+16], i32 - fxtod %f4, u32 - sllx i48, 32, %l6 C (i48 << 32) - ldx [%sp+2223+24], i48 - fdtox a48, a48 - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - std a00, [%sp+2223+0] - fmuld u00, v00, p00 - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - std a16, [%sp+2223+8] - fmuld u00, v16, p16 - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - std a32, [%sp+2223+16] - fmuld u00, v32, p32 - add %l6, %o2, %o2 C mi64- in %o2 - std a48, [%sp+2223+24] - faddd p00, r64, a00 - fmuld u32, v00, r32 - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - faddd p16, r80, a16 - fmuld u00, v48, p48 - add cy, %g5, %o4 C x = prev(i00) + cy - addcc %i2, 8, %i2 - bnz,pt %xcc, .Loop - fmuld u32, v16, r48 - -.L_four: - b,a .L_out_4 - -C BEGIN MAIN LOOP - .align 16 -.Loop: -C 00 - srlx %o4, 16, %o5 C (x >> 16) - ld [%i5+%i2], %f3 C read low 32 bits of up[i] - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 -C 01 - add %o5, %o2, %o2 C mi64 in %o2 2nd ASSIGNMENT - and %o4, xffff, %o5 C (x & 0xffff) - ld [%i1+%i2], %f5 C read high 32 bits of up[i] - fdtox a00, a00 -C 02 - faddd p48, r48, a48 -C 03 - srlx %o2, 48, %o7 C (mi64 >> 48) - mov i00, %g5 C i00+ now in g5 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 -C 04 - sllx %o2, 16, %i3 C (mi64 << 16) - add %o7, %o1, cy C new cy - ldx [%sp+2223+0], i00 - fdtox a32, a32 -C 05 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - fxtod %f2, u00 -C 06 - srlx i48, 16, %l5 C (i48 >> 16) - mov i32, %g4 C i32+ now in g4 - ldx [%sp+2223+16], i32 - fxtod %f4, u32 -C 07 - sllx i48, 32, %l6 C (i48 << 32) - or %i3, %o5, %o5 - ldx [%sp+2223+24], i48 - fdtox a48, a48 -C 08 - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - std a00, [%sp+2223+0] - fmuld u00, v00, p00 -C 09 - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - std a16, [%sp+2223+8] - fmuld u00, v16, p16 -C 10 - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - std a32, [%sp+2223+16] - fmuld u00, v32, p32 -C 11 - add %l6, %o2, %o2 C mi64- in %o2 - std a48, [%sp+2223+24] - faddd p00, r64, a00 - fmuld u32, v00, r32 -C 12 - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - stx %o5, [%i4+%i2] - faddd p16, r80, a16 - fmuld u00, v48, p48 -C 13 - add cy, %g5, %o4 C x = prev(i00) + cy - addcc %i2, 8, %i2 - bnz,pt %xcc, .Loop - fmuld u32, v16, r48 -C END MAIN LOOP - -.L_out_4: - srlx %o4, 16, %o5 C (x >> 16) - fmuld u32, v32, r64 C FIXME not urgent - faddd p32, r32, a32 - add %o5, %o2, %o2 C mi64 in %o2 2nd ASSIGNMENT - and %o4, xffff, %o5 C (x & 0xffff) - fdtox a00, a00 - faddd p48, r48, a48 - srlx %o2, 48, %o7 C (mi64 >> 48) - mov i00, %g5 C i00+ now in g5 - fmuld u32, v48, r80 C FIXME not urgent - fdtox a16, a16 - sllx %o2, 16, %i3 C (mi64 << 16) - add %o7, %o1, cy C new cy - ldx [%sp+2223+0], i00 - fdtox a32, a32 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - srlx i48, 16, %l5 C (i48 >> 16) - mov i32, %g4 C i32+ now in g4 - ldx [%sp+2223+16], i32 - sllx i48, 32, %l6 C (i48 << 32) - or %i3, %o5, %o5 - ldx [%sp+2223+24], i48 - fdtox a48, a48 - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - std a00, [%sp+2223+0] - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - std a16, [%sp+2223+8] - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - std a32, [%sp+2223+16] - add %l6, %o2, %o2 C mi64- in %o2 - std a48, [%sp+2223+24] - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - stx %o5, [%i4+%i2] - add cy, %g5, %o4 C x = prev(i00) + cy - add %i2, 8, %i2 -.L_out_3: - srlx %o4, 16, %o5 C (x >> 16) - add %o5, %o2, %o2 C mi64 in %o2 2nd ASSIGNMENT - and %o4, xffff, %o5 C (x & 0xffff) - fdtox r64, a00 - srlx %o2, 48, %o7 C (mi64 >> 48) - mov i00, %g5 C i00+ now in g5 - fdtox r80, a16 - sllx %o2, 16, %i3 C (mi64 << 16) - add %o7, %o1, cy C new cy - ldx [%sp+2223+0], i00 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - srlx i48, 16, %l5 C (i48 >> 16) - mov i32, %g4 C i32+ now in g4 - ldx [%sp+2223+16], i32 - sllx i48, 32, %l6 C (i48 << 32) - or %i3, %o5, %o5 - ldx [%sp+2223+24], i48 - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - std a00, [%sp+2223+0] - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - std a16, [%sp+2223+8] - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - add %l6, %o2, %o2 C mi64- in %o2 - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - stx %o5, [%i4+%i2] - add cy, %g5, %o4 C x = prev(i00) + cy - add %i2, 8, %i2 -.L_out_2: - srlx %o4, 16, %o5 C (x >> 16) - add %o5, %o2, %o2 C mi64 in %o2 2nd ASSIGNMENT - and %o4, xffff, %o5 C (x & 0xffff) - srlx %o2, 48, %o7 C (mi64 >> 48) - mov i00, %g5 C i00+ now in g5 - sllx %o2, 16, %i3 C (mi64 << 16) - add %o7, %o1, cy C new cy - ldx [%sp+2223+0], i00 - srlx i16, 48, %l4 C (i16 >> 48) - mov i16, %g2 - ldx [%sp+2223+8], i16 - srlx i48, 16, %l5 C (i48 >> 16) - mov i32, %g4 C i32+ now in g4 - sllx i48, 32, %l6 C (i48 << 32) - or %i3, %o5, %o5 - srlx %g4, 32, %o3 C (i32 >> 32) - add %l5, %l4, %o1 C hi64- in %o1 - sllx %g4, 16, %o2 C (i32 << 16) - add %o3, %o1, %o1 C hi64 in %o1 1st ASSIGNMENT - sllx %o1, 48, %o3 C (hi64 << 48) - add %g2, %o2, %o2 C mi64- in %o2 - add %l6, %o2, %o2 C mi64- in %o2 - sub %o2, %o3, %o2 C mi64 in %o2 1st ASSIGNMENT - stx %o5, [%i4+%i2] - add cy, %g5, %o4 C x = prev(i00) + cy - add %i2, 8, %i2 -.L_out_1: - srlx %o4, 16, %o5 C (x >> 16) - add %o5, %o2, %o2 C mi64 in %o2 2nd ASSIGNMENT - and %o4, xffff, %o5 C (x & 0xffff) - srlx %o2, 48, %o7 C (mi64 >> 48) - sllx %o2, 16, %i3 C (mi64 << 16) - add %o7, %o1, cy C new cy - or %i3, %o5, %o5 - stx %o5, [%i4+%i2] - - sllx i00, 0, %g2 - add %g2, cy, cy - sllx i16, 16, %g3 - add %g3, cy, cy - - return %i7+8 - mov cy, %o0 -EPILOGUE(mpn_mul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/sqr_diagonal.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/sqr_diagonal.asm deleted file mode 100644 index 43c69d31d120fad62a2753b1a08043f09385c2c5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/sqr_diagonal.asm +++ /dev/null @@ -1,342 +0,0 @@ -dnl SPARC v9 64-bit mpn_sqr_diagonal. - -dnl Copyright 2001, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC 1&2: 22 -C UltraSPARC 3: 36 - -C This was generated by the Sun C compiler. It runs at 22 cycles/limb on the -C UltraSPARC-1/2, three cycles slower than theoretically possible for optimal -C code using the same algorithm. For 1-3 limbs, a special loop was generated, -C which causes performance problems in particular for 2 and 3 limbs. -C Ultimately, this should be replaced by hand-written code in the same software -C pipeline style as e.g., addmul_1.asm. - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_sqr_diagonal) - save %sp, -240, %sp - - sethi %hi(0x1ffc00), %o0 - sethi %hi(0x3ffc00), %o1 - add %o0, 1023, %o7 - cmp %i2, 4 - add %o1, 1023, %o4 - or %g0, %i1, %g1 - or %g0, %i0, %o0 - bl,pn %xcc, .Lsmall - or %g0, 0, %g2 - - ldx [%i1], %o1 - add %i1, 24, %g1 - or %g0, 3, %g2 - srlx %o1, 42, %g3 - stx %g3, [%sp+2279] - and %o1, %o7, %o2 - stx %o2, [%sp+2263] - srlx %o1, 21, %o1 - ldd [%sp+2279], %f0 - and %o1, %o7, %o1 - stx %o1, [%sp+2271] - ldx [%i1+8], %o2 - fxtod %f0, %f12 - srlx %o2, 21, %o1 - and %o2, %o7, %g3 - ldd [%sp+2263], %f2 - fmuld %f12, %f12, %f10 - srlx %o2, 42, %o2 - ldd [%sp+2271], %f0 - and %o1, %o7, %o1 - fxtod %f2, %f8 - stx %o2, [%sp+2279] - stx %o1, [%sp+2271] - fxtod %f0, %f0 - stx %g3, [%sp+2263] - fdtox %f10, %f14 - fmuld %f12, %f8, %f6 - ldx [%i1+16], %o2 - std %f14, [%sp+2255] - fmuld %f0, %f0, %f2 - fmuld %f8, %f8, %f10 - srlx %o2, 42, %o1 - faddd %f6, %f6, %f6 - fmuld %f12, %f0, %f12 - fmuld %f0, %f8, %f8 - ldd [%sp+2279], %f0 - ldd [%sp+2263], %f4 - fdtox %f10, %f10 - std %f10, [%sp+2239] - faddd %f2, %f6, %f6 - ldd [%sp+2271], %f2 - fdtox %f12, %f12 - std %f12, [%sp+2247] - fdtox %f8, %f8 - std %f8, [%sp+2231] - fdtox %f6, %f6 - std %f6, [%sp+2223] - -.Loop: srlx %o2, 21, %g3 - stx %o1, [%sp+2279] - add %g2, 1, %g2 - and %g3, %o7, %o1 - ldx [%sp+2255], %g4 - cmp %g2, %i2 - stx %o1, [%sp+2271] - add %g1, 8, %g1 - add %o0, 16, %o0 - ldx [%sp+2239], %o1 - fxtod %f0, %f10 - fxtod %f4, %f14 - ldx [%sp+2231], %i0 - ldx [%sp+2223], %g5 - ldx [%sp+2247], %g3 - and %o2, %o7, %o2 - fxtod %f2, %f8 - fmuld %f10, %f10, %f0 - stx %o2, [%sp+2263] - fmuld %f10, %f14, %f6 - ldx [%g1-8], %o2 - fmuld %f10, %f8, %f12 - fdtox %f0, %f2 - ldd [%sp+2279], %f0 - fmuld %f8, %f8, %f4 - faddd %f6, %f6, %f6 - fmuld %f14, %f14, %f10 - std %f2, [%sp+2255] - sllx %g4, 20, %g4 - ldd [%sp+2271], %f2 - fmuld %f8, %f14, %f8 - sllx %i0, 22, %i1 - fdtox %f12, %f12 - std %f12, [%sp+2247] - sllx %g5, 42, %i0 - add %o1, %i1, %o1 - faddd %f4, %f6, %f6 - ldd [%sp+2263], %f4 - add %o1, %i0, %o1 - add %g3, %g4, %g3 - fdtox %f10, %f10 - std %f10, [%sp+2239] - srlx %o1, 42, %g4 - and %g5, %o4, %i0 - fdtox %f8, %f8 - std %f8, [%sp+2231] - srlx %g5, 22, %g5 - sub %g4, %i0, %g4 - fdtox %f6, %f6 - std %f6, [%sp+2223] - srlx %g4, 63, %g4 - add %g3, %g5, %g3 - add %g3, %g4, %g3 - stx %o1, [%o0-16] - srlx %o2, 42, %o1 - bl,pt %xcc, .Loop - stx %g3, [%o0-8] - - stx %o1, [%sp+2279] - srlx %o2, 21, %o1 - fxtod %f0, %f16 - ldx [%sp+2223], %g3 - fxtod %f4, %f6 - and %o2, %o7, %o3 - stx %o3, [%sp+2263] - fxtod %f2, %f4 - and %o1, %o7, %o1 - ldx [%sp+2231], %o2 - sllx %g3, 42, %g4 - fmuld %f16, %f16, %f14 - stx %o1, [%sp+2271] - fmuld %f16, %f6, %f8 - add %o0, 48, %o0 - ldx [%sp+2239], %o1 - sllx %o2, 22, %o2 - fmuld %f4, %f4, %f10 - ldx [%sp+2255], %o3 - fdtox %f14, %f14 - fmuld %f4, %f6, %f2 - std %f14, [%sp+2255] - faddd %f8, %f8, %f12 - add %o1, %o2, %o2 - fmuld %f16, %f4, %f4 - ldd [%sp+2279], %f0 - sllx %o3, 20, %g5 - add %o2, %g4, %o2 - fmuld %f6, %f6, %f6 - srlx %o2, 42, %o3 - and %g3, %o4, %g4 - srlx %g3, 22, %g3 - faddd %f10, %f12, %f16 - ldd [%sp+2271], %f12 - ldd [%sp+2263], %f8 - fxtod %f0, %f0 - sub %o3, %g4, %o3 - ldx [%sp+2247], %o1 - srlx %o3, 63, %o3 - fdtox %f2, %f10 - fxtod %f8, %f8 - std %f10, [%sp+2231] - fdtox %f6, %f6 - std %f6, [%sp+2239] - add %o1, %g5, %o1 - fmuld %f0, %f0, %f2 - fdtox %f16, %f16 - std %f16, [%sp+2223] - add %o1, %g3, %o1 - fdtox %f4, %f4 - std %f4, [%sp+2247] - fmuld %f0, %f8, %f10 - fxtod %f12, %f12 - add %o1, %o3, %o1 - stx %o2, [%o0-48] - fmuld %f8, %f8, %f6 - stx %o1, [%o0-40] - fdtox %f2, %f2 - ldx [%sp+2231], %o2 - faddd %f10, %f10, %f10 - ldx [%sp+2223], %g3 - fmuld %f12, %f12, %f4 - fdtox %f6, %f6 - ldx [%sp+2239], %o1 - sllx %o2, 22, %o2 - fmuld %f12, %f8, %f8 - sllx %g3, 42, %g5 - ldx [%sp+2255], %o3 - fmuld %f0, %f12, %f0 - add %o1, %o2, %o2 - faddd %f4, %f10, %f4 - ldx [%sp+2247], %o1 - add %o2, %g5, %o2 - and %g3, %o4, %g4 - fdtox %f8, %f8 - sllx %o3, 20, %g5 - std %f8, [%sp+2231] - fdtox %f0, %f0 - srlx %o2, 42, %o3 - add %o1, %g5, %o1 - fdtox %f4, %f4 - srlx %g3, 22, %g3 - sub %o3, %g4, %o3 - std %f6, [%sp+2239] - std %f4, [%sp+2223] - srlx %o3, 63, %o3 - add %o1, %g3, %o1 - std %f2, [%sp+2255] - add %o1, %o3, %o1 - std %f0, [%sp+2247] - stx %o2, [%o0-32] - stx %o1, [%o0-24] - ldx [%sp+2231], %o2 - ldx [%sp+2223], %o3 - ldx [%sp+2239], %o1 - sllx %o2, 22, %o2 - sllx %o3, 42, %g5 - ldx [%sp+2255], %g4 - and %o3, %o4, %g3 - add %o1, %o2, %o2 - ldx [%sp+2247], %o1 - add %o2, %g5, %o2 - stx %o2, [%o0-16] - sllx %g4, 20, %g4 - srlx %o2, 42, %o2 - add %o1, %g4, %o1 - srlx %o3, 22, %o3 - sub %o2, %g3, %o2 - srlx %o2, 63, %o2 - add %o1, %o3, %o1 - add %o1, %o2, %o1 - stx %o1, [%o0-8] - ret - restore %g0, %g0, %g0 -.Lsmall: - ldx [%g1], %o2 -.Loop0: - and %o2, %o7, %o1 - stx %o1, [%sp+2263] - add %g2, 1, %g2 - srlx %o2, 21, %o1 - add %g1, 8, %g1 - srlx %o2, 42, %o2 - stx %o2, [%sp+2279] - and %o1, %o7, %o1 - ldd [%sp+2263], %f0 - cmp %g2, %i2 - stx %o1, [%sp+2271] - fxtod %f0, %f6 - ldd [%sp+2279], %f0 - ldd [%sp+2271], %f4 - fxtod %f0, %f2 - fmuld %f6, %f6, %f0 - fxtod %f4, %f10 - fmuld %f2, %f6, %f4 - fdtox %f0, %f0 - std %f0, [%sp+2239] - fmuld %f10, %f6, %f8 - fmuld %f10, %f10, %f0 - faddd %f4, %f4, %f6 - fmuld %f2, %f2, %f4 - fdtox %f8, %f8 - std %f8, [%sp+2231] - fmuld %f2, %f10, %f2 - faddd %f0, %f6, %f0 - fdtox %f4, %f4 - std %f4, [%sp+2255] - fdtox %f2, %f2 - std %f2, [%sp+2247] - fdtox %f0, %f0 - std %f0, [%sp+2223] - ldx [%sp+2239], %o1 - ldx [%sp+2255], %g4 - ldx [%sp+2231], %o2 - sllx %g4, 20, %g4 - ldx [%sp+2223], %o3 - sllx %o2, 22, %o2 - sllx %o3, 42, %g5 - add %o1, %o2, %o2 - ldx [%sp+2247], %o1 - add %o2, %g5, %o2 - stx %o2, [%o0] - and %o3, %o4, %g3 - srlx %o2, 42, %o2 - add %o1, %g4, %o1 - srlx %o3, 22, %o3 - sub %o2, %g3, %o2 - srlx %o2, 63, %o2 - add %o1, %o3, %o1 - add %o1, %o2, %o1 - stx %o1, [%o0+8] - add %o0, 16, %o0 - bl,a,pt %xcc, .Loop0 - ldx [%g1], %o2 - ret - restore %g0, %g0, %g0 -EPILOGUE(mpn_sqr_diagonal) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/sub_n.asm deleted file mode 100644 index 9fb7f70747572280c19a09fc6322be0b3c26157f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/sub_n.asm +++ /dev/null @@ -1,241 +0,0 @@ -dnl SPARC v9 mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -dnl store difference in a third limb vector. - -dnl Copyright 2001-2003, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC 1&2: 4 -C UltraSPARC 3: 4.5 - -C Compute carry-out from the most significant bits of u,v, and r, where -C r=u-v-carry_in, using logic operations. - -C This code runs at 4 cycles/limb on UltraSPARC 1 and 2. It has a 4 insn -C recurrency, and the UltraSPARC 1 and 2 the IE units are 100% saturated. -C Therefore, it seems futile to try to optimize this any further... - -C INPUT PARAMETERS -define(`rp',`%i0') -define(`up',`%i1') -define(`vp',`%i2') -define(`n',`%i3') - -define(`u0',`%l0') -define(`u1',`%l2') -define(`u2',`%l4') -define(`u3',`%l6') -define(`v0',`%l1') -define(`v1',`%l3') -define(`v2',`%l5') -define(`v3',`%l7') - -define(`cy',`%i4') - -define(`fanop',`fitod %f0,%f2') dnl A quasi nop running in the FA pipe -define(`fmnop',`fmuld %f0,%f0,%f4') dnl A quasi nop running in the FM pipe - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_sub_nc) - save %sp,-160,%sp - - fitod %f0,%f0 C make sure f0 contains small, quiet number - subcc n,4,%g0 - bl,pn %xcc,.Loop0 - nop - b,a L(com) -EPILOGUE() - -PROLOGUE(mpn_sub_n) - save %sp,-160,%sp - - fitod %f0,%f0 C make sure f0 contains small, quiet number - subcc n,4,%g0 - bl,pn %xcc,.Loop0 - mov 0,cy -L(com): - ldx [up+0],u0 - ldx [vp+0],v0 - add up,32,up - ldx [up-24],u1 - ldx [vp+8],v1 - add vp,32,vp - ldx [up-16],u2 - ldx [vp-16],v2 - ldx [up-8],u3 - ldx [vp-8],v3 - subcc n,8,n - sub u0,v0,%g1 C main sub - sub %g1,cy,%g5 C carry sub - orn u0,v0,%g2 - bl,pn %xcc,.Lend4567 - fanop - b,a .Loop - - .align 16 -C START MAIN LOOP -.Loop: orn %g5,%g2,%g2 - andn u0,v0,%g3 - ldx [up+0],u0 - fanop -C -- - andn %g2,%g3,%g2 - ldx [vp+0],v0 - add up,32,up - fanop -C -- - srlx %g2,63,cy - sub u1,v1,%g1 - stx %g5,[rp+0] - fanop -C -- - sub %g1,cy,%g5 - orn u1,v1,%g2 - fmnop - fanop -C -- - orn %g5,%g2,%g2 - andn u1,v1,%g3 - ldx [up-24],u1 - fanop -C -- - andn %g2,%g3,%g2 - ldx [vp+8],v1 - add vp,32,vp - fanop -C -- - srlx %g2,63,cy - sub u2,v2,%g1 - stx %g5,[rp+8] - fanop -C -- - sub %g1,cy,%g5 - orn u2,v2,%g2 - fmnop - fanop -C -- - orn %g5,%g2,%g2 - andn u2,v2,%g3 - ldx [up-16],u2 - fanop -C -- - andn %g2,%g3,%g2 - ldx [vp-16],v2 - add rp,32,rp - fanop -C -- - srlx %g2,63,cy - sub u3,v3,%g1 - stx %g5,[rp-16] - fanop -C -- - sub %g1,cy,%g5 - orn u3,v3,%g2 - fmnop - fanop -C -- - orn %g5,%g2,%g2 - andn u3,v3,%g3 - ldx [up-8],u3 - fanop -C -- - andn %g2,%g3,%g2 - subcc n,4,n - ldx [vp-8],v3 - fanop -C -- - srlx %g2,63,cy - sub u0,v0,%g1 - stx %g5,[rp-8] - fanop -C -- - sub %g1,cy,%g5 - orn u0,v0,%g2 - bge,pt %xcc,.Loop - fanop -C END MAIN LOOP -.Lend4567: - orn %g5,%g2,%g2 - andn u0,v0,%g3 - andn %g2,%g3,%g2 - srlx %g2,63,cy - sub u1,v1,%g1 - stx %g5,[rp+0] - sub %g1,cy,%g5 - orn u1,v1,%g2 - orn %g5,%g2,%g2 - andn u1,v1,%g3 - andn %g2,%g3,%g2 - srlx %g2,63,cy - sub u2,v2,%g1 - stx %g5,[rp+8] - sub %g1,cy,%g5 - orn u2,v2,%g2 - orn %g5,%g2,%g2 - andn u2,v2,%g3 - andn %g2,%g3,%g2 - add rp,32,rp - srlx %g2,63,cy - sub u3,v3,%g1 - stx %g5,[rp-16] - sub %g1,cy,%g5 - orn u3,v3,%g2 - orn %g5,%g2,%g2 - andn u3,v3,%g3 - andn %g2,%g3,%g2 - srlx %g2,63,cy - stx %g5,[rp-8] - - addcc n,4,n - bz,pn %xcc,.Lret - fanop - -.Loop0: ldx [up],u0 - add up,8,up - ldx [vp],v0 - add vp,8,vp - add rp,8,rp - subcc n,1,n - sub u0,v0,%g1 - orn u0,v0,%g2 - sub %g1,cy,%g5 - andn u0,v0,%g3 - orn %g5,%g2,%g2 - stx %g5,[rp-8] - andn %g2,%g3,%g2 - bnz,pt %xcc,.Loop0 - srlx %g2,63,cy - -.Lret: mov cy,%i0 - ret - restore -EPILOGUE(mpn_sub_n) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/submul_1.asm deleted file mode 100644 index 0bdb566b9f3cad499def04542688d994bf683080..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc1234/submul_1.asm +++ /dev/null @@ -1,68 +0,0 @@ -dnl SPARC v9 64-bit mpn_submul_1 -- Multiply a limb vector with a limb and -dnl subtract the result from a second limb vector. - -dnl Copyright 2001-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC 1&2: 18 -C UltraSPARC 3: 23 - -C INPUT PARAMETERS -C rp i0 -C up i1 -C n i2 -C v i3 - -ASM_START() - REGISTER(%g2,#scratch) - -PROLOGUE(mpn_submul_1) - save %sp,-176,%sp - - sllx %i2, 3, %g2 - or %g0, %i1, %o1 - add %g2, 15, %o0 - or %g0, %i2, %o2 - and %o0, -16, %o0 - sub %sp, %o0, %sp - add %sp, 2223, %o0 - or %g0, %o0, %l0 - call mpn_mul_1 - or %g0, %i3, %o3 - or %g0, %o0, %l1 C preserve carry value from mpn_mul_1 - or %g0, %i0, %o0 - or %g0, %i0, %o1 - or %g0, %l0, %o2 - call mpn_sub_n - or %g0, %i2, %o3 - ret - restore %l1, %o0, %o0 C sum carry values -EPILOGUE(mpn_submul_1) diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc34/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc34/gmp-mparam.h deleted file mode 100644 index c88e68059a38d9e83f11e39de9c6923b502d6ea6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparc34/gmp-mparam.h +++ /dev/null @@ -1,222 +0,0 @@ -/* ultrasparc3/4 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2002, 2004, 2006, 2008-2010, 2014, 2015 Free -Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* 1593 MHz ultrasparc3 running Solaris 10 (swift.nada.kth.se) */ -/* FFT tuning limit = 100 M */ -/* Generated by tuneup.c, 2015-10-09, gcc 3.4 */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1P_METHOD 2 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 5 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 22 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 29 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 2 -#define DIV_QR_1_UNNORM_THRESHOLD 1 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ - -#define MUL_TOOM22_THRESHOLD 28 -#define MUL_TOOM33_THRESHOLD 93 -#define MUL_TOOM44_THRESHOLD 142 -#define MUL_TOOM6H_THRESHOLD 165 -#define MUL_TOOM8H_THRESHOLD 278 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 93 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 114 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 88 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 50 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 67 - -#define SQR_BASECASE_THRESHOLD 7 -#define SQR_TOOM2_THRESHOLD 70 -#define SQR_TOOM3_THRESHOLD 101 -#define SQR_TOOM4_THRESHOLD 184 -#define SQR_TOOM6_THRESHOLD 0 /* always */ -#define SQR_TOOM8_THRESHOLD 339 - -#define MULMID_TOOM42_THRESHOLD 40 - -#define MULMOD_BNM1_THRESHOLD 14 -#define SQRMOD_BNM1_THRESHOLD 9 - -#define MUL_FFT_MODF_THRESHOLD 212 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 212, 5}, { 13, 6}, { 17, 7}, { 9, 6}, \ - { 19, 7}, { 17, 8}, { 9, 7}, { 20, 8}, \ - { 11, 7}, { 23, 8}, { 13, 9}, { 7, 8}, \ - { 19, 9}, { 11, 8}, { 25,10}, { 7, 9}, \ - { 15, 8}, { 33, 9}, { 19, 8}, { 39, 9}, \ - { 23, 8}, { 47, 9}, { 27,10}, { 15, 9}, \ - { 39,10}, { 23, 9}, { 47,11}, { 15,10}, \ - { 31, 9}, { 63, 8}, { 127, 7}, { 255, 9}, \ - { 67,10}, { 39, 9}, { 79, 8}, { 159, 7}, \ - { 319, 9}, { 83,10}, { 47, 9}, { 95, 8}, \ - { 191, 7}, { 383,10}, { 55,11}, { 31,10}, \ - { 63, 9}, { 127, 8}, { 255, 7}, { 511,10}, \ - { 71, 9}, { 143, 8}, { 287,10}, { 79, 9}, \ - { 159, 8}, { 319, 9}, { 175, 8}, { 351,11}, \ - { 47,10}, { 95, 9}, { 191, 8}, { 383, 7}, \ - { 767,10}, { 103,12}, { 31,11}, { 63,10}, \ - { 127, 9}, { 287,11}, { 79,10}, { 159, 9}, \ - { 319, 8}, { 639,10}, { 175, 9}, { 351, 8}, \ - { 703,11}, { 95,10}, { 207, 9}, { 415,11}, \ - { 111,10}, { 223, 9}, { 479,12}, { 63,11}, \ - { 127,10}, { 255,11}, { 143,10}, { 287, 9}, \ - { 575,10}, { 319, 9}, { 639,11}, { 175,10}, \ - { 351,11}, { 191,10}, { 383,11}, { 207,10}, \ - { 415,11}, { 223,10}, { 447,13}, { 63,12}, \ - { 127,11}, { 287,10}, { 575,11}, { 319,10}, \ - { 703,12}, { 191,11}, { 383,12}, { 223,11}, \ - { 447,13}, { 127,12}, { 287,11}, { 575,12}, \ - { 351,13}, { 191,12}, { 479,14}, { 127,13}, \ - { 255,12}, { 575,13}, { 319,12}, { 703,13}, \ - { 383,12}, { 767,13}, { 447,12}, { 895,14}, \ - { 255,13}, { 511,12}, { 1023,13}, { 575,12}, \ - { 1151,13}, { 703,14}, { 383,13}, { 831,12}, \ - { 1663,13}, { 895,15}, { 255,14}, { 511,13}, \ - { 1151,14}, { 639,13}, { 1407,12}, { 2815,14}, \ - { 767,13}, { 1663,14}, { 895,13}, { 1791,15}, \ - { 511,14}, { 1023,13}, { 2047,14}, { 1151,13}, \ - { 2303,14}, { 1407,13}, { 2815,15}, { 767,14}, \ - { 1791,16}, { 511,15}, { 1023,14}, { 2303,15}, \ - { 1279,14}, { 2815,15}, { 1535,14}, { 3199,15}, \ - { 1791,16}, { 1023,15}, { 2047,14}, { 4223,15}, \ - { 2303,14}, { 4863,15}, { 2815,16}, { 65536,17}, \ - { 131072,18}, { 262144,19}, { 524288,20}, {1048576,21}, \ - {2097152,22}, {4194304,23}, {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 171 -#define MUL_FFT_THRESHOLD 2240 - -#define SQR_FFT_MODF_THRESHOLD 244 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 244, 5}, { 8, 4}, { 17, 5}, { 15, 6}, \ - { 8, 5}, { 17, 6}, { 17, 7}, { 9, 6}, \ - { 19, 7}, { 17, 8}, { 9, 7}, { 20, 8}, \ - { 11, 7}, { 23, 8}, { 13, 9}, { 7, 8}, \ - { 19, 9}, { 11, 8}, { 25,10}, { 7, 9}, \ - { 15, 8}, { 31, 9}, { 19, 8}, { 39, 9}, \ - { 27,10}, { 15, 9}, { 39,10}, { 23, 9}, \ - { 47,11}, { 15,10}, { 31, 9}, { 67,10}, \ - { 39, 9}, { 79, 8}, { 159,10}, { 47, 9}, \ - { 95,10}, { 55,11}, { 31,10}, { 63, 9}, \ - { 127, 8}, { 255,10}, { 71, 9}, { 143, 8}, \ - { 287, 7}, { 575,10}, { 79, 9}, { 159,11}, \ - { 47, 9}, { 191, 8}, { 383, 7}, { 767, 9}, \ - { 207,12}, { 31,11}, { 63,10}, { 127, 9}, \ - { 255, 8}, { 511,10}, { 135, 9}, { 271,10}, \ - { 143, 9}, { 287,11}, { 79,10}, { 159, 9}, \ - { 319, 8}, { 639,10}, { 175, 9}, { 351, 8}, \ - { 703, 7}, { 1407,11}, { 95,10}, { 191, 9}, \ - { 383, 8}, { 767,10}, { 207, 9}, { 415,10}, \ - { 223, 9}, { 447,12}, { 63,11}, { 127,10}, \ - { 271, 9}, { 543,10}, { 287, 9}, { 575, 8}, \ - { 1151,11}, { 159,10}, { 319, 9}, { 639,10}, \ - { 351, 9}, { 703, 8}, { 1407, 7}, { 2815,11}, \ - { 207,10}, { 415, 9}, { 831,11}, { 223,10}, \ - { 447, 9}, { 895,13}, { 63,11}, { 271,10}, \ - { 543,11}, { 287,12}, { 159,11}, { 351,10}, \ - { 703,12}, { 191,11}, { 415,10}, { 831,12}, \ - { 223,13}, { 127,12}, { 255,11}, { 511,10}, \ - { 1023,11}, { 543,12}, { 287,11}, { 607,12}, \ - { 319,11}, { 639,12}, { 415,11}, { 895,12}, \ - { 479,14}, { 127,13}, { 255,12}, { 543,11}, \ - { 1087,12}, { 575,11}, { 1151,13}, { 319,12}, \ - { 639,11}, { 1279,12}, { 703,10}, { 2815,12}, \ - { 831,11}, { 1663,13}, { 447,12}, { 959,14}, \ - { 255,13}, { 511,12}, { 1087,13}, { 703,12}, \ - { 1407,14}, { 383,13}, { 767,12}, { 1535,13}, \ - { 895,15}, { 255,14}, { 511,13}, { 1215,14}, \ - { 639,13}, { 1279,14}, { 767,13}, { 1663,14}, \ - { 895,13}, { 1919,15}, { 511,14}, { 1023,13}, \ - { 2175,14}, { 1151,13}, { 2431,14}, { 1407,15}, \ - { 767,14}, { 1791,16}, { 511,15}, { 1023,14}, \ - { 2303,15}, { 1279,14}, { 2815,15}, { 1535,14}, \ - { 3199,15}, { 1791,16}, { 1023,15}, { 2047,14}, \ - { 4351,15}, { 2303,14}, { 4863,15}, { 2815,16}, \ - { 65536,17}, { 131072,18}, { 262144,19}, { 524288,20}, \ - {1048576,21}, {2097152,22}, {4194304,23}, {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 184 -#define SQR_FFT_THRESHOLD 1728 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 29 -#define MULLO_MUL_N_THRESHOLD 4392 -#define SQRLO_BASECASE_THRESHOLD 2 -#define SQRLO_DC_THRESHOLD 63 -#define SQRLO_SQR_THRESHOLD 3176 - -#define DC_DIV_QR_THRESHOLD 16 -#define DC_DIVAPPR_Q_THRESHOLD 64 -#define DC_BDIV_QR_THRESHOLD 30 -#define DC_BDIV_Q_THRESHOLD 86 - -#define INV_MULMOD_BNM1_THRESHOLD 58 -#define INV_NEWTON_THRESHOLD 17 -#define INV_APPR_THRESHOLD 15 - -#define BINV_NEWTON_THRESHOLD 109 -#define REDC_1_TO_REDC_2_THRESHOLD 0 /* always */ -#define REDC_2_TO_REDC_N_THRESHOLD 117 - -#define MU_DIV_QR_THRESHOLD 618 -#define MU_DIVAPPR_Q_THRESHOLD 618 -#define MUPI_DIV_QR_THRESHOLD 0 /* always */ -#define MU_BDIV_QR_THRESHOLD 680 -#define MU_BDIV_Q_THRESHOLD 807 - -#define POWM_SEC_TABLE 3,22,102,579,1555 - -#define GET_STR_DC_THRESHOLD 20 -#define GET_STR_PRECOMPUTE_THRESHOLD 28 -#define SET_STR_DC_THRESHOLD 381 -#define SET_STR_PRECOMPUTE_THRESHOLD 1042 - -#define FAC_DSC_THRESHOLD 462 -#define FAC_ODD_THRESHOLD 0 /* always */ - -#define MATRIX22_STRASSEN_THRESHOLD 12 -#define HGCD_THRESHOLD 45 -#define HGCD_APPR_THRESHOLD 50 -#define HGCD_REDUCE_THRESHOLD 1094 -#define GCD_DC_THRESHOLD 126 -#define GCDEXT_DC_THRESHOLD 132 -#define JACOBI_BASE_METHOD 4 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/add_n.asm deleted file mode 100644 index 954c7f6d357287c22fa89fd387442aed1a4a0a85..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/add_n.asm +++ /dev/null @@ -1,68 +0,0 @@ -dnl SPARC v9 mpn_add_n for T1/T2. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T1: ? -C UltraSPARC T2: ? - -C INPUT PARAMETERS -define(`rp', `%o0') -define(`up', `%o1') -define(`vp', `%o2') -define(`n', `%o3') -define(`cy', `%o4') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_add_nc) - b,a L(ent) -EPILOGUE() -PROLOGUE(mpn_add_n) - mov 0, cy -L(ent): cmp %g0, cy -L(top): ldx [up+0], %o4 - add up, 8, up - ldx [vp+0], %o5 - add vp, 8, vp - add rp, 8, rp - add n, -1, n - srlx %o4, 32, %g1 - srlx %o5, 32, %g2 - addccc %o4, %o5, %g3 - addccc %g1, %g2, %g0 - brgz n, L(top) - stx %g3, [rp-8] - - retl - addc %g0, %g0, %o0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/addlsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/addlsh1_n.asm deleted file mode 100644 index 313479773fd4c8d8ceedb0d74e6234abd1bec447..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/addlsh1_n.asm +++ /dev/null @@ -1,41 +0,0 @@ -dnl SPARC v9 mpn_addlsh1_n for T1/T2. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -define(LSH, 1) -define(RSH, 63) - -define(func, mpn_addlsh1_n) - -MULFUNC_PROLOGUE(mpn_addlsh1_n) - -include_mpn(`sparc64/ultrasparct1/addlshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/addlsh2_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/addlsh2_n.asm deleted file mode 100644 index ee1afd011602a2aded80974bd7912f34e7cc1572..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/addlsh2_n.asm +++ /dev/null @@ -1,41 +0,0 @@ -dnl SPARC v9 mpn_addlsh2_n for T1/T2. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -define(LSH, 2) -define(RSH, 62) - -define(func, mpn_addlsh2_n) - -MULFUNC_PROLOGUE(mpn_addlsh2_n) - -include_mpn(`sparc64/ultrasparct1/addlshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/addlshC_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/addlshC_n.asm deleted file mode 100644 index 5be9a0d30aafd7e7d811c2df4b91f96922423544..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/addlshC_n.asm +++ /dev/null @@ -1,69 +0,0 @@ -dnl SPARC v9 mpn_addlshC_n for T1/T2. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -C cycles/limb -C UltraSPARC T1: 21 -C UltraSPARC T2: ? - -C INPUT PARAMETERS -define(`rp', `%o0') -define(`up', `%o1') -define(`vp', `%o2') -define(`n', `%o3') -define(`cy', `%o4') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(func) - mov 0, cy - mov 0, %g5 - cmp %g0, cy -L(top): ldx [up+0], %o4 - add up, 8, up - ldx [vp+0], %o5 - add vp, 8, vp - add rp, 8, rp - - sllx %o5, LSH, %g4 - add n, -1, n - or %g5, %g4, %g4 - srlx %o5, RSH, %g5 - - srlx %o4, 32, %g1 - srlx %g4, 32, %g2 - addccc %o4, %g4, %g3 - addccc %g1, %g2, %g0 - brgz n, L(top) - stx %g3, [rp-8] - - retl - addc %g5, %g0, %o0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/addmul_1.asm deleted file mode 100644 index 29dba966f3d1a89b75ca9fd68f504151063d42e3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/addmul_1.asm +++ /dev/null @@ -1,86 +0,0 @@ -dnl SPARC v9 mpn_addmul_1 for T1/T2. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T1: 74 -C UltraSPARC T2: ? - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`n', `%i2') -define(`v0', `%i3') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_addmul_1) - save %sp, -176, %sp - mov 1, %o2 - mov %i0, %g2 - srlx %i3, 32, %o4 - sllx %o2, 32, %o2 - srl %i3, 0, %i3 - mov 0, %g3 - mov 0, %i0 - -L(top): ldx [%i1+%g3], %g1 - srl %g1, 0, %g4 - mulx %g4, %i3, %o5 - srlx %g1, 32, %g1 - mulx %g1, %i3, %g5 - mulx %g4, %o4, %g4 - mulx %g1, %o4, %g1 - srlx %o5, 32, %o1 - add %g5, %o1, %o1 - addcc %o1, %g4, %g4 - srl %o5, 0, %o0 - ldx [%g2+%g3], %o5 - sllx %g4, 32, %o1 - add %g1, %o2, %l1 - movlu %xcc, %l1, %g1 - add %o1, %o0, %l0 - addcc %l0, %i0, %g5 - srlx %g4, 32, %i0 - add %i0, 1, %g4 - movlu %xcc, %g4, %i0 - addcc %o5, %g5, %g5 - stx %g5, [%g2+%g3] - add %i0, 1, %g4 - movlu %xcc, %g4, %i0 - add %i2, -1, %i2 - add %i0, %g1, %i0 - brnz,pt %i2, L(top) - add %g3, 8, %g3 - return %i7+8 - nop -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/gmp-mparam.h deleted file mode 100644 index 99db78ac0f22d3bddc9d0fc96ff672851b67e436..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/gmp-mparam.h +++ /dev/null @@ -1,154 +0,0 @@ -/* Sparc64 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 1999-2002, 2004, 2006, 2008-2010 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 64 -#define GMP_LIMB_BYTES 8 - -/* 1000 MHz ultrasparc t1 running GNU/Linux */ - -#define DIVREM_1_NORM_THRESHOLD 0 /* always */ -#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1_1P_METHOD 2 -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 13 -#define MOD_1U_TO_MOD_1_1_THRESHOLD MP_SIZE_T_MAX -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 0 /* never mpn_mod_1_1p */ -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 34 -#define USE_PREINV_DIVREM_1 1 -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always */ -#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ - -#define MUL_TOOM22_THRESHOLD 8 -#define MUL_TOOM33_THRESHOLD 50 -#define MUL_TOOM44_THRESHOLD 99 -#define MUL_TOOM6H_THRESHOLD 125 -#define MUL_TOOM8H_THRESHOLD 187 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 65 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 77 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 65 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 50 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 34 - -#define SQR_BASECASE_THRESHOLD 0 /* always */ -#define SQR_TOOM2_THRESHOLD 14 -#define SQR_TOOM3_THRESHOLD 57 -#define SQR_TOOM4_THRESHOLD 133 -#define SQR_TOOM6_THRESHOLD 156 -#define SQR_TOOM8_THRESHOLD 260 - -#define MULMID_TOOM42_THRESHOLD 12 - -#define MULMOD_BNM1_THRESHOLD 7 -#define SQRMOD_BNM1_THRESHOLD 7 - -#define MUL_FFT_MODF_THRESHOLD 176 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 176, 5}, { 7, 6}, { 4, 5}, { 9, 6}, \ - { 5, 5}, { 11, 6}, { 11, 7}, { 6, 6}, \ - { 13, 7}, { 7, 6}, { 15, 7}, { 9, 8}, \ - { 5, 7}, { 13, 8}, { 7, 7}, { 15, 6}, \ - { 32, 7}, { 24, 8}, { 21, 9}, { 11, 8}, \ - { 23,10}, { 7, 9}, { 15, 8}, { 33, 9}, \ - { 19, 8}, { 39, 9}, { 23,10}, { 15, 9}, \ - { 43,10}, { 23,11}, { 15,10}, { 31, 9}, \ - { 63, 8}, { 127, 9}, { 67,10}, { 39, 9}, \ - { 79, 8}, { 159,10}, { 47, 9}, { 95,11}, \ - { 2048,12}, { 4096,13}, { 8192,14}, { 16384,15}, \ - { 32768,16}, { 65536,17}, { 131072,18}, { 262144,19}, \ - { 524288,20}, {1048576,21}, {2097152,22}, {4194304,23}, \ - {8388608,24} } -#define MUL_FFT_TABLE3_SIZE 53 -#define MUL_FFT_THRESHOLD 1728 - - -#define SQR_FFT_MODF_THRESHOLD 148 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 148, 5}, { 7, 6}, { 4, 5}, { 9, 6}, \ - { 5, 5}, { 11, 6}, { 11, 7}, { 6, 6}, \ - { 13, 7}, { 7, 6}, { 15, 7}, { 13, 8}, \ - { 7, 7}, { 16, 8}, { 9, 6}, { 38, 7}, \ - { 20, 8}, { 11, 7}, { 24, 8}, { 13, 9}, \ - { 7, 7}, { 30, 8}, { 19, 9}, { 11, 8}, \ - { 25,10}, { 7, 9}, { 15, 8}, { 31, 9}, \ - { 19, 8}, { 39, 9}, { 27,10}, { 15, 9}, \ - { 39,10}, { 23, 9}, { 47, 8}, { 95, 9}, \ - { 51,11}, { 15,10}, { 31, 8}, { 127,10}, \ - { 39, 9}, { 79, 8}, { 159,10}, { 47, 9}, \ - { 95,11}, { 2048,12}, { 4096,13}, { 8192,14}, \ - { 16384,15}, { 32768,16}, { 65536,17}, { 131072,18}, \ - { 262144,19}, { 524288,20}, {1048576,21}, {2097152,22}, \ - {4194304,23}, {8388608,24} } -#define SQR_FFT_TABLE3_SIZE 58 -#define SQR_FFT_THRESHOLD 1344 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 28 -#define MULLO_MUL_N_THRESHOLD 3176 - -#define DC_DIV_QR_THRESHOLD 27 -#define DC_DIVAPPR_Q_THRESHOLD 106 -#define DC_BDIV_QR_THRESHOLD 27 -#define DC_BDIV_Q_THRESHOLD 62 - -#define INV_MULMOD_BNM1_THRESHOLD 14 -#define INV_NEWTON_THRESHOLD 163 -#define INV_APPR_THRESHOLD 117 - -#define BINV_NEWTON_THRESHOLD 166 -#define REDC_1_TO_REDC_N_THRESHOLD 31 - -#define MU_DIV_QR_THRESHOLD 734 -#define MU_DIVAPPR_Q_THRESHOLD 748 -#define MUPI_DIV_QR_THRESHOLD 67 -#define MU_BDIV_QR_THRESHOLD 562 -#define MU_BDIV_Q_THRESHOLD 734 - -#define POWM_SEC_TABLE 4,29,188,643,2741 - -#define MATRIX22_STRASSEN_THRESHOLD 11 -#define HGCD_THRESHOLD 58 -#define HGCD_APPR_THRESHOLD 55 -#define HGCD_REDUCE_THRESHOLD 637 -#define GCD_DC_THRESHOLD 186 -#define GCDEXT_DC_THRESHOLD 140 -#define JACOBI_BASE_METHOD 3 - -#define GET_STR_DC_THRESHOLD 20 -#define GET_STR_PRECOMPUTE_THRESHOLD 33 -#define SET_STR_DC_THRESHOLD 268 -#define SET_STR_PRECOMPUTE_THRESHOLD 960 - -#define FAC_DSC_THRESHOLD 268 -#define FAC_ODD_THRESHOLD 0 /* always */ diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/mul_1.asm deleted file mode 100644 index 1fea2a19ef9c60311de43cc61855fcecdb05a677..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/mul_1.asm +++ /dev/null @@ -1,82 +0,0 @@ -dnl SPARC v9 mpn_mul_1 for T1/T2. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T1: 68 -C UltraSPARC T2: ? - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`n', `%i2') -define(`v0', `%i3') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_mul_1) - save %sp, -176, %sp - mov 1, %o2 - mov %i0, %g2 - srlx %i3, 32, %o4 - sllx %o2, 32, %o2 - srl %i3, 0, %i3 - mov 0, %g3 - mov 0, %i0 - -L(top): ldx [%i1+%g3], %g1 - srl %g1, 0, %g4 - mulx %g4, %i3, %o5 - srlx %g1, 32, %g1 - mulx %g1, %i3, %g5 - mulx %g4, %o4, %g4 - mulx %g1, %o4, %g1 - srlx %o5, 32, %o1 - add %g5, %o1, %o1 - addcc %o1, %g4, %g4 - srl %o5, 0, %o0 - sllx %g4, 32, %o1 - add %g1, %o2, %l1 - movlu %xcc, %l1, %g1 - add %o1, %o0, %l0 - addcc %l0, %i0, %g5 - srlx %g4, 32, %i0 - add %i0, 1, %g4 - movlu %xcc, %g4, %i0 - stx %g5, [%g2+%g3] - add %i2, -1, %i2 - add %i0, %g1, %i0 - brnz,pt %i2, L(top) - add %g3, 8, %g3 - return %i7+8 - nop -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/rsblsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/rsblsh1_n.asm deleted file mode 100644 index 51bd4ab45b8f70b46ac0abfd329ab0d5642691c5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/rsblsh1_n.asm +++ /dev/null @@ -1,41 +0,0 @@ -dnl SPARC v9 mpn_rsblsh1_n for T1/T2. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -define(LSH, 1) -define(RSH, 63) - -define(func, mpn_rsblsh1_n) - -MULFUNC_PROLOGUE(mpn_rsblsh1_n) - -include_mpn(`sparc64/ultrasparct1/rsblshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/rsblsh2_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/rsblsh2_n.asm deleted file mode 100644 index f0d208e198f9ed40713835a9066d45ac74e35642..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/rsblsh2_n.asm +++ /dev/null @@ -1,41 +0,0 @@ -dnl SPARC v9 mpn_rsblsh2_n for T1/T2. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -define(LSH, 2) -define(RSH, 62) - -define(func, mpn_rsblsh2_n) - -MULFUNC_PROLOGUE(mpn_rsblsh2_n) - -include_mpn(`sparc64/ultrasparct1/rsblshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/rsblshC_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/rsblshC_n.asm deleted file mode 100644 index 7c03e9f97f294d800be5ca43d56a63dcdbd0048e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/rsblshC_n.asm +++ /dev/null @@ -1,69 +0,0 @@ -dnl SPARC v9 mpn_rsblshC_n for T1/T2. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -C cycles/limb -C UltraSPARC T1: 21 -C UltraSPARC T2: ? - -C INPUT PARAMETERS -define(`rp', `%o0') -define(`up', `%o1') -define(`vp', `%o2') -define(`n', `%o3') -define(`cy', `%o4') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(func) - mov 0, cy - mov 0, %g5 - cmp %g0, cy -L(top): ldx [up+0], %o4 - add up, 8, up - ldx [vp+0], %o5 - add vp, 8, vp - add rp, 8, rp - - sllx %o5, LSH, %g4 - add n, -1, n - or %g5, %g4, %g4 - srlx %o5, RSH, %g5 - - srlx %o4, 32, %g1 - srlx %g4, 32, %g2 - subccc %g4, %o4, %g3 - subccc %g2, %g1, %g0 - brgz n, L(top) - stx %g3, [rp-8] - - retl - subc %g5, %g0, %o0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/sub_n.asm deleted file mode 100644 index c2af89f08f915ac7f9a3a4e2a237fb340bad89ca..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/sub_n.asm +++ /dev/null @@ -1,68 +0,0 @@ -dnl SPARC v9 mpn_sub_n for T1/T2. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T1: ? -C UltraSPARC T2: ? - -C INPUT PARAMETERS -define(`rp', `%o0') -define(`up', `%o1') -define(`vp', `%o2') -define(`n', `%o3') -define(`cy', `%o4') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_sub_nc) - b,a L(ent) -EPILOGUE() -PROLOGUE(mpn_sub_n) - mov 0, cy -L(ent): cmp %g0, cy -L(top): ldx [up+0], %o4 - add up, 8, up - ldx [vp+0], %o5 - add vp, 8, vp - add rp, 8, rp - add n, -1, n - srlx %o4, 32, %g1 - srlx %o5, 32, %g2 - subccc %o4, %o5, %g3 - subccc %g1, %g2, %g0 - brgz n, L(top) - stx %g3, [rp-8] - - retl - addc %g0, %g0, %o0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/sublsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/sublsh1_n.asm deleted file mode 100644 index 8c8fa80401e928d9c39ff6a4328119278d287518..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/sublsh1_n.asm +++ /dev/null @@ -1,41 +0,0 @@ -dnl SPARC v9 mpn_sublsh1_n for T1/T2. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -define(LSH, 1) -define(RSH, 63) - -define(func, mpn_sublsh1_n) - -MULFUNC_PROLOGUE(mpn_sublsh1_n) - -include_mpn(`sparc64/ultrasparct1/sublshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/sublsh2_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/sublsh2_n.asm deleted file mode 100644 index 2fd5eee71af0e2b3bed2b0b4094989de7af67d53..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/sublsh2_n.asm +++ /dev/null @@ -1,41 +0,0 @@ -dnl SPARC v9 mpn_sublsh2_n for T1/T2. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -define(LSH, 2) -define(RSH, 62) - -define(func, mpn_sublsh2_n) - -MULFUNC_PROLOGUE(mpn_sublsh2_n) - -include_mpn(`sparc64/ultrasparct1/sublshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/sublshC_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/sublshC_n.asm deleted file mode 100644 index 01eafef1bce7db1803ae74fd09b4dab0a384dba2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/sublshC_n.asm +++ /dev/null @@ -1,69 +0,0 @@ -dnl SPARC v9 mpn_sublshC_n for T1/T2. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -C cycles/limb -C UltraSPARC T1: 21 -C UltraSPARC T2: ? - -C INPUT PARAMETERS -define(`rp', `%o0') -define(`up', `%o1') -define(`vp', `%o2') -define(`n', `%o3') -define(`cy', `%o4') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(func) - mov 0, cy - mov 0, %g5 - cmp %g0, cy -L(top): ldx [up+0], %o4 - add up, 8, up - ldx [vp+0], %o5 - add vp, 8, vp - add rp, 8, rp - - sllx %o5, LSH, %g4 - add n, -1, n - or %g5, %g4, %g4 - srlx %o5, RSH, %g5 - - srlx %o4, 32, %g1 - srlx %g4, 32, %g2 - subccc %o4, %g4, %g3 - subccc %g1, %g2, %g0 - brgz n, L(top) - stx %g3, [rp-8] - - retl - addc %g5, %g0, %o0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/submul_1.asm deleted file mode 100644 index 4f553a806381c6bdbe926037374824e8b2f21021..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct1/submul_1.asm +++ /dev/null @@ -1,86 +0,0 @@ -dnl SPARC v9 mpn_submul_1 for T1/T2. - -dnl Copyright 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T1: 74 -C UltraSPARC T2: ? - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`n', `%i2') -define(`v0', `%i3') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_submul_1) - save %sp, -176, %sp - mov 1, %o2 - mov %i0, %g2 - srlx %i3, 32, %o4 - sllx %o2, 32, %o2 - srl %i3, 0, %i3 - mov 0, %g3 - mov 0, %i0 - -L(top): ldx [%i1+%g3], %g1 - srl %g1, 0, %g4 - mulx %g4, %i3, %o5 - srlx %g1, 32, %g1 - mulx %g1, %i3, %g5 - mulx %g4, %o4, %g4 - mulx %g1, %o4, %g1 - srlx %o5, 32, %o1 - add %g5, %o1, %o1 - addcc %o1, %g4, %g4 - srl %o5, 0, %o0 - ldx [%g2+%g3], %o5 - sllx %g4, 32, %o1 - add %g1, %o2, %l1 - movlu %xcc, %l1, %g1 - add %o1, %o0, %l0 - addcc %l0, %i0, %g5 - srlx %g4, 32, %i0 - add %i0, 1, %g4 - movlu %xcc, %g4, %i0 - subcc %o5, %g5, %g5 - stx %g5, [%g2+%g3] - add %i0, 1, %g4 - movlu %xcc, %g4, %i0 - add %i2, -1, %i2 - add %i0, %g1, %i0 - brnz,pt %i2, L(top) - add %g3, 8, %g3 - return %i7+8 - nop -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/add_n.asm deleted file mode 100644 index 017074689565ee19675f0aaf7ad5d16b21998947..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/add_n.asm +++ /dev/null @@ -1,126 +0,0 @@ -dnl SPARC v9 mpn_add_n for T3/T4. - -dnl Contributed to the GNU project by David Miller. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: 8 -C UltraSPARC T4: 3 - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`vp', `%i2') -define(`n', `%i3') -define(`cy', `%i4') - -define(`u0_off', `%l2') -define(`u1_off', `%l3') -define(`loop_n', `%l6') -define(`tmp', `%l7') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_add_nc) - save %sp, -176, %sp - b,a L(ent) -EPILOGUE() -PROLOGUE(mpn_add_n) - save %sp, -176, %sp - - mov 0, cy -L(ent): - subcc n, 1, n - be L(final_one) - cmp %g0, cy - - ldx [up + 0], %o4 - sllx n, 3, tmp - - ldx [vp + 0], %o5 - add up, tmp, u0_off - - ldx [up + 8], %g5 - neg tmp, loop_n - - ldx [vp + 8], %g1 - add u0_off, 8, u1_off - - sub loop_n, -(2 * 8), loop_n - - brgez,pn loop_n, L(loop_tail) - add vp, (2 * 8), vp - - b,a L(top) - ALIGN(16) -L(top): - addxccc(%o4, %o5, tmp) - ldx [vp + 0], %o5 - - add rp, (2 * 8), rp - ldx [loop_n + u0_off], %o4 - - add vp, (2 * 8), vp - stx tmp, [rp - 16] - - addxccc(%g1, %g5, tmp) - ldx [vp - 8], %g1 - - ldx [loop_n + u1_off], %g5 - sub loop_n, -(2 * 8), loop_n - - brlz loop_n, L(top) - stx tmp, [rp - 8] - -L(loop_tail): - addxccc(%o4, %o5, %g3) - add loop_n, u0_off, up - - addxccc(%g1, %g5, %g5) - stx %g3, [rp + 0] - - brgz,pt loop_n, L(done) - stx %g5, [rp + 8] - - add rp, (2 * 8), rp -L(final_one): - ldx [up+0], %o4 - ldx [vp+0], %o5 - addxccc(%o4, %o5, %g3) - stx %g3, [rp+0] - -L(done): - addxc(%g0, %g0, %i0) - ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/addmul_1.asm deleted file mode 100644 index 939811e1ce2f35e79e46830fdb0dd70ee04a6b4d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/addmul_1.asm +++ /dev/null @@ -1,182 +0,0 @@ -dnl SPARC v9 mpn_addmul_1 for T3/T4/T5. - -dnl Contributed to the GNU project by David Miller and Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: 26 -C UltraSPARC T4: 4.5 - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`n', `%i2') -define(`v0', `%i3') - -define(`u0', `%l0') -define(`u1', `%l1') -define(`u2', `%l2') -define(`u3', `%l3') -define(`r0', `%l4') -define(`r1', `%l5') -define(`r2', `%l6') -define(`r3', `%l7') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_addmul_1) - save %sp, -176, %sp - ldx [up+0], %g1 - - and n, 3, %g3 - brz %g3, L(b0) - addcc %g0, %g0, %g5 C clear carry limb, flag - cmp %g3, 2 - bcs %xcc, L(b01) - nop - be %xcc, L(b10) - ldx [up+8], %g5 - -L(b11): ldx [up+16], u3 - mulx %g1, v0, %o2 - umulxhi(%g1, v0, %o3) - ldx [rp+0], r1 - mulx %g5, v0, %o4 - ldx [rp+8], r2 - umulxhi(%g5, v0, %o5) - ldx [rp+16], r3 - mulx u3, v0, %g4 - umulxhi(u3, v0, %g5) - addcc %o3, %o4, %o4 - addxccc(%o5, %g4, %g4) - addxc( %g0, %g5, %g5) - addcc r1, %o2, r1 - stx r1, [rp+0] - addxccc(r2, %o4, r2) - stx r2, [rp+8] - addxccc(r3, %g4, r3) - stx r3, [rp+16] - add n, -3, n - add up, 24, up - brz n, L(xit) - add rp, 24, rp - b L(com) - nop - -L(b10): mulx %g1, v0, %o4 - ldx [rp+0], r2 - umulxhi(%g1, v0, %o5) - ldx [rp+8], r3 - mulx %g5, v0, %g4 - umulxhi(%g5, v0, %g5) - addcc %o5, %g4, %g4 - addxc( %g0, %g5, %g5) - addcc r2, %o4, r2 - stx r2, [rp+0] - addxccc(r3, %g4, r3) - stx r3, [rp+8] - add n, -2, n - add up, 16, up - brz n, L(xit) - add rp, 16, rp - b L(com) - nop - -L(b01): ldx [rp+0], r3 - mulx %g1, v0, %g4 - umulxhi(%g1, v0, %g5) - addcc r3, %g4, r3 - stx r3, [rp+0] - add n, -1, n - add up, 8, up - brz n, L(xit) - add rp, 8, rp - -L(com): ldx [up+0], %g1 -L(b0): ldx [up+8], u1 - ldx [up+16], u2 - ldx [up+24], u3 - mulx %g1, v0, %o0 - umulxhi(%g1, v0, %o1) - b L(lo0) - nop - - ALIGN(16) -L(top): ldx [up+0], u0 - addxc( %g0, %g5, %g5) C propagate carry into carry limb - ldx [up+8], u1 - addcc r0, %o0, r0 - ldx [up+16], u2 - addxccc(r1, %o2, r1) - ldx [up+24], u3 - addxccc(r2, %o4, r2) - stx r0, [rp-32] - addxccc(r3, %g4, r3) - stx r1, [rp-24] - mulx u0, v0, %o0 - stx r2, [rp-16] - umulxhi(u0, v0, %o1) - stx r3, [rp-8] -L(lo0): mulx u1, v0, %o2 - ldx [rp+0], r0 - umulxhi(u1, v0, %o3) - ldx [rp+8], r1 - mulx u2, v0, %o4 - ldx [rp+16], r2 - umulxhi(u2, v0, %o5) - ldx [rp+24], r3 - mulx u3, v0, %g4 - addxccc(%g5, %o0, %o0) - umulxhi(u3, v0, %g5) - add up, 32, up - addxccc(%o1, %o2, %o2) - add rp, 32, rp - addxccc(%o3, %o4, %o4) - add n, -4, n - addxccc(%o5, %g4, %g4) - brgz n, L(top) - nop - - addxc( %g0, %g5, %g5) - addcc r0, %o0, r0 - stx r0, [rp-32] - addxccc(r1, %o2, r1) - stx r1, [rp-24] - addxccc(r2, %o4, r2) - stx r2, [rp-16] - addxccc(r3, %g4, r3) - stx r3, [rp-8] -L(xit): addxc( %g0, %g5, %i0) - ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/aormul_2.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/aormul_2.asm deleted file mode 100644 index ccc6a4408d599d4131c00d6892026d011f55d3b8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/aormul_2.asm +++ /dev/null @@ -1,228 +0,0 @@ -dnl SPARC v9 mpn_mul_2 and mpn_addmul_2 for T3/T4/T5. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb cycles/limb -C mul_2 addmul_2 -C UltraSPARC T3: 22.5 23.5 -C UltraSPARC T4: 3.25 3.75 - - -C The code is reasonably scheduled but also relies on OoO. There was hope that -C this could run at around 3.0 and 3.5 c/l respectively, on T4. Two cycles per -C iteration needs to be removed. -C -C We could almost use 2-way unrolling, but currently the wN registers live too -C long. By changing add x,w1,w1 to add x,w1,w0, i.e. migrate the values down- -C wards, 2-way unrolling should become possible. With n-indexed addressing it -C should run no slower. -C -C The rp loads to g1/g3 are very much over-scheduled. Presumably, they could -C be postponed a full way, and then just one register could be used. - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`n', `%i2') -define(`vp', `%i3') - -define(`v0', `%o0') -define(`v1', `%o1') - -define(`w0', `%o2') -define(`w1', `%o3') -define(`w2', `%o4') -define(`w3', `%o5') - -ifdef(`OPERATION_mul_2',` - define(`AM2', `') - define(`ADDX', `addcc`'$1') - define(`func', `mpn_mul_2') -') -ifdef(`OPERATION_addmul_2',` - define(`AM2', `$1') - define(`ADDX', `addxccc($1,$2,$3)') - define(`func', `mpn_addmul_2') -') - - -MULFUNC_PROLOGUE(mpn_mul_2 mpn_addmul_2) - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(func) - save %sp, -176, %sp - - ldx [vp+0], v0 C load v0 - and n, 3, %g5 - ldx [vp+8], v1 C load v1 - add n, -6, n - ldx [up+0], %g4 - brz %g5, L(b0) - cmp %g5, 2 - bcs L(b1) - nop - be L(b2) - nop - -L(b3): -AM2(` ldx [rp+0], %g1') - mulx %g4, v0, w2 - umulxhi(%g4, v0, w3) - ldx [up+8], %i5 - mulx %g4, v1, %l3 - umulxhi(%g4, v1, %l7) -AM2(` ldx [rp+8], %g3') - add up, -8, up - add rp, -8, rp - b L(lo3) - mov 0, w0 - -L(b2): -AM2(` ldx [rp+0], %g3') - mulx %g4, v0, w3 - umulxhi(%g4, v0, w0) - ldx [up+8], %i4 - mulx %g4, v1, %l1 - umulxhi(%g4, v1, %l5) -AM2(` ldx [rp+8], %g1') - add rp, 16, rp - brlz n, L(end) - mov 0, w1 - ba L(top) - add up, 16, up - -L(b1): -AM2(` ldx [rp+0], %g1') - mulx %g4, v0, w0 - umulxhi(%g4, v0, w1) - ldx [up+8], %i5 - mulx %g4, v1, %l3 - umulxhi(%g4, v1, %l7) -AM2(` ldx [rp+8], %g3') - add up, 8, up - add rp, 8, rp - b L(lo1) - mov 0, w2 - -L(b0): -AM2(` ldx [rp+0], %g3') - mulx %g4, v0, w1 - umulxhi(%g4, v0, w2) - ldx [up+8], %i4 - mulx %g4, v1, %l1 - umulxhi(%g4, v1, %l5) -AM2(` ldx [rp+8], %g1') - b L(lo0) - mov 0, w3 - - ALIGN(16) C cycle -L(top): mulx %i4, v0, %l2 C 0->5 - umulxhi(%i4, v0, %l6) C 0->5 - ldx [up+0], %i5 C 1->6 -AM2(` addcc w3, %g3, w3') C 1 - stx w3, [rp-16] C 2 - ADDX(` %l1, w0, w0') C 2 - addxccc(%l5, w1, w1) C 3 - mulx %i4, v1, %l3 C 3->9 - umulxhi(%i4, v1, %l7) C 4->9 -AM2(` ldx [rp+0], %g3') C 4 - addcc %l2, w0, w0 C 5 - addxccc(%l6, w1, w1) C 5 - addxc( %g0, %g0, w2) C 6 -L(lo1): mulx %i5, v0, %l0 C 6 - umulxhi(%i5, v0, %l4) C 7 - ldx [up+8], %i4 C 7 -AM2(` addcc w0, %g1, w0') C 8 - stx w0, [rp-8] C 8 - ADDX(` %l3, w1, w1') C 9 - addxccc(%l7, w2, w2) C 9 - mulx %i5, v1, %l1 C 10 - umulxhi(%i5, v1, %l5) C 10 -AM2(` ldx [rp+8], %g1') C 11 - addcc %l0, w1, w1 C 11 - addxccc(%l4, w2, w2) C 12 - addxc( %g0, %g0, w3) C 12 -L(lo0): mulx %i4, v0, %l2 C 13 - umulxhi(%i4, v0, %l6) C 13 - ldx [up+16], %i5 C 14 -AM2(` addcc w1, %g3, w1') C 14 - stx w1, [rp+0] C 15 - ADDX(` %l1, w2, w2') C 15 - addxccc(%l5, w3, w3) C 16 - mulx %i4, v1, %l3 C 16 - umulxhi(%i4, v1, %l7) C 17 -AM2(` ldx [rp+16], %g3') C 17 - addcc %l2, w2, w2 C 18 - addxccc(%l6, w3, w3) C 18 - addxc( %g0, %g0, w0) C 19 -L(lo3): mulx %i5, v0, %l0 C 19 - umulxhi(%i5, v0, %l4) C 20 - ldx [up+24], %i4 C 20 -AM2(` addcc w2, %g1, w2') C 21 - stx w2, [rp+8] C 21 - ADDX(` %l3, w3, w3') C 22 - addxccc(%l7, w0, w0) C 22 - mulx %i5, v1, %l1 C 23 - umulxhi(%i5, v1, %l5) C 23 -AM2(` ldx [rp+24], %g1') C 24 - addcc %l0, w3, w3 C 24 - addxccc(%l4, w0, w0) C 25 - addxc( %g0, %g0, w1) C 25 - add up, 32, up - add rp, 32, rp - brgz n, L(top) - add n, -4, n - -L(end): mulx %i4, v0, %l2 - umulxhi(%i4, v0, %l6) -AM2(` addcc w3, %g3, w3') - stx w3, [rp-16] - ADDX(` %l1, w0, w0') - addxccc(%l5, w1, w1) - mulx %i4, v1, %l3 - umulxhi(%i4, v1, %l7) - addcc %l2, w0, w0 - addxccc(%l6, w1, w1) - addxc( %g0, %g0, w2) -AM2(` addcc w0, %g1, w0') - stx w0, [rp-8] - ADDX(` %l3, w1, w1') - stx w1, [rp+0] - addxc(%l7, w2, %i0) - - ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/aormul_4.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/aormul_4.asm deleted file mode 100644 index 845f6d6d69210994223b93669976e6ba91a2949e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/aormul_4.asm +++ /dev/null @@ -1,219 +0,0 @@ -dnl SPARC v9 mpn_mul_4 and mpn_addmul_4 for T3/T4/T5. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb cycles/limb -C mul_4 addmul_4 -C UltraSPARC T3: 21.5 22.0 -C UltraSPARC T4: 2.625 2.75 - - -C The code is well-scheduled and relies on OoO very little. There is hope that -C this will run at around 2.5 and 2.75 c/l respectively, on T4. - -define(`rp', `%i0') -define(`up', `%i1') -define(`n', `%i2') -define(`vp', `%i3') - -define(`v0', `%g1') -define(`v1', `%o7') -define(`v2', `%g2') -define(`v3', `%i3') - -define(`w0', `%o0') -define(`w1', `%o1') -define(`w2', `%o2') -define(`w3', `%o3') -define(`w4', `%o4') - -define(`r0', `%o5') - -define(`u0', `%i4') -define(`u1', `%i5') - -define(`rp0', `rp') -define(`rp1', `%g3') -define(`rp2', `%g4') -define(`up0', `up') -define(`up1', `%g5') - -ifdef(`OPERATION_mul_4',` - define(`AM4', `') - define(`ADDX', `addcc`'$1') - define(`func', `mpn_mul_4') -') -ifdef(`OPERATION_addmul_4',` - define(`AM4', `$1') - define(`ADDX', `addxccc($1,$2,$3)') - define(`func', `mpn_addmul_4') -') - - -MULFUNC_PROLOGUE(mpn_mul_4 mpn_addmul_4) - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(func) - save %sp, -176, %sp - - ldx [up + 0], u1 C load up[0] early - andcc n, 1, %g0 C is n odd? - ldx [vp + 0], v0 - sllx n, 3, n - ldx [vp + 8], v1 - add n, -28, n - ldx [vp + 16], v2 - add rp, -16, rp - ldx [vp + 24], v3 - add up, n, up0 - add rp, n, rp0 - add up0, 8, up1 - add rp0, 8, rp1 - add rp0, 16, rp2 - mulx u1, v0, %l0 - mov 0, w0 - mulx u1, v1, %l1 - mov 0, w1 - mulx u1, v2, %l2 - mov 0, w2 - mulx u1, v3, %l3 - mov 0, w3 - - be L(evn) - neg n, n - -L(odd): mov u1, u0 - ldx [up1 + n], u1 -AM4(` ldx [rp2 + n], r0') - umulxhi(u0, v0, %l4) - umulxhi(u0, v1, %l5) - umulxhi(u0, v2, %l6) - umulxhi(u0, v3, %l7) - b L(mid) - add n, 8, n - -L(evn): ldx [up1 + n], u0 -AM4(` ldx [rp2 + n], r0') - umulxhi(u1, v0, %l4) - umulxhi(u1, v1, %l5) - umulxhi(u1, v2, %l6) - umulxhi(u1, v3, %l7) - add n, 16, n - - ALIGN(16) -L(top): addcc %l0, w0, w0 - mulx u0, v0, %l0 C w 0 - addxccc(%l1, w1, w1) - mulx u0, v1, %l1 C w 1 - addxccc(%l2, w2, w2) - mulx u0, v2, %l2 C w 2 - addxccc(%l3, w3, w3) - mulx u0, v3, %l3 C w 3 - ldx [up0 + n], u1 - addxc( %g0, %g0, w4) -AM4(` addcc r0, w0, w0') - stx w0, [rp0 + n] - ADDX(` %l4, w1, w0') - umulxhi(u0, v0, %l4) C w 1 -AM4(` ldx [rp1 + n], r0') - addxccc(%l5, w2, w1) - umulxhi(u0, v1, %l5) C w 2 - addxccc(%l6, w3, w2) - umulxhi(u0, v2, %l6) C w 3 - addxc( %l7, w4, w3) - umulxhi(u0, v3, %l7) C w 4 -L(mid): addcc %l0, w0, w0 - mulx u1, v0, %l0 C w 1 - addxccc(%l1, w1, w1) - mulx u1, v1, %l1 C w 2 - addxccc(%l2, w2, w2) - mulx u1, v2, %l2 C w 3 - addxccc(%l3, w3, w3) - mulx u1, v3, %l3 C w 4 - ldx [up1 + n], u0 - addxc( %g0, %g0, w4) -AM4(` addcc r0, w0, w0') - stx w0, [rp1 + n] - ADDX(` %l4, w1, w0') - umulxhi(u1, v0, %l4) C w 2 -AM4(` ldx [rp2 + n], r0') - addxccc(%l5, w2, w1) - umulxhi(u1, v1, %l5) C w 3 - addxccc(%l6, w3, w2) - umulxhi(u1, v2, %l6) C w 4 - addxc( %l7, w4, w3) - umulxhi(u1, v3, %l7) C w 5 - brlz n, L(top) - add n, 16, n - -L(end): addcc %l0, w0, w0 - mulx u0, v0, %l0 - addxccc(%l1, w1, w1) - mulx u0, v1, %l1 - addxccc(%l2, w2, w2) - mulx u0, v2, %l2 - addxccc(%l3, w3, w3) - mulx u0, v3, %l3 - addxc( %g0, %g0, w4) -AM4(` addcc r0, w0, w0') - stx w0, [rp0 + n] - ADDX(` %l4, w1, w0') - umulxhi(u0, v0, %l4) -AM4(` ldx [rp1 + n], r0') - addxccc(%l5, w2, w1) - umulxhi(u0, v1, %l5) - addxccc(%l6, w3, w2) - umulxhi(u0, v2, %l6) - addxc( %l7, w4, w3) - umulxhi(u0, v3, %l7) - addcc %l0, w0, w0 - addxccc(%l1, w1, w1) - addxccc(%l2, w2, w2) - addxccc(%l3, w3, w3) - addxc( %g0, %g0, w4) -AM4(` addcc r0, w0, w0') - stx w0, [rp1 + n] - ADDX(` %l4, w1, w0') - addxccc(%l5, w2, w1) - addxccc(%l6, w3, w2) - stx w0, [rp2 + n] - add n, 16, n - stx w1, [rp1 + n] - stx w2, [rp2 + n] - addxc( %l7, w4, %i0) - ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/aorslsh_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/aorslsh_n.asm deleted file mode 100644 index 1014b1ba23a531331466b3e388ce82f692595dbf..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/aorslsh_n.asm +++ /dev/null @@ -1,147 +0,0 @@ -dnl SPARC v9 mpn_addlsh_n and mpn_sublsh_n for T3/T4/T5. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: 11 -C UltraSPARC T4: 4 - -C For sublsh_n we combine the two shifted limbs using xnor, using the identity -C (a xor not b) = (not (a xor b)) which equals (not (a or b)) when (a and b) = -C 0 as it is in our usage. This gives us the ones complement for free. -C Unfortunately, the same trick will not work for rsblsh_n, which will instead -C require a separate negation. -C -C FIXME: Add rsblsh_n to this file. - -define(`rp', `%i0') -define(`up', `%i1') -define(`vp', `%i2') -define(`n', `%i3') -define(`cnt',`%i4') - -define(`tnc',`%o5') - -ifdef(`OPERATION_addlsh_n',` - define(`INITCY', `subcc %g0, 0, %g0') - define(`MERGE', `or') - define(`func', `mpn_addlsh_n') -') -ifdef(`OPERATION_sublsh_n',` - define(`INITCY', `subcc %g0, 1, %g0') - define(`MERGE', `xnor') - define(`func', `mpn_sublsh_n') -') - -define(`rp0', `rp') -define(`rp1', `%o2') -define(`up0', `up') -define(`up1', `%o3') -define(`vp0', `vp') -define(`vp1', `%o4') - -MULFUNC_PROLOGUE(mpn_addlsh_n mpn_sublsh_n) -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(func) - save %sp, -176, %sp - mov 64, tnc - sub tnc, cnt, tnc - - andcc n, 1, %g0 - sllx n, 3, n - add n, -16, n - add up, n, up0 - add vp, n, vp0 - add rp, n, rp0 - add up0, 8, up1 - add vp0, 8, vp1 - add rp0, -8, rp1 - add rp0, -16, rp0 - neg n, n - be L(evn) - INITCY - -L(odd): ldx [vp0 + n], %l1 - mov 0, %l2 - ldx [up0 + n], %l5 - sllx %l1, cnt, %g3 - brgez n, L(wd1) - add n, 8, n - ldx [vp0 + n], %l0 - b L(lo1) - sllx %l1, cnt, %g3 - -L(evn): ldx [vp0 + n], %l0 - mov 0, %l3 - ldx [up0 + n], %l4 - ldx [vp1 + n], %l1 - b L(lo0) - sllx %l0, cnt, %g1 - -L(top): addxccc(%l6, %l4, %o0) - ldx [vp0 + n], %l0 - sllx %l1, cnt, %g3 - stx %o0, [rp0 + n] -L(lo1): srlx %l1, tnc, %l3 - MERGE %l2, %g3, %l7 - ldx [up0 + n], %l4 - addxccc(%l7, %l5, %o1) - ldx [vp1 + n], %l1 - sllx %l0, cnt, %g1 - stx %o1, [rp1 + n] -L(lo0): srlx %l0, tnc, %l2 - MERGE %l3, %g1, %l6 - ldx [up1 + n], %l5 - brlz,pt n, L(top) - add n, 16, n - - addxccc(%l6, %l4, %o0) - sllx %l1, cnt, %g3 - stx %o0, [rp0 + n] -L(wd1): srlx %l1, tnc, %l3 - MERGE %l2, %g3, %l7 - addxccc(%l7, %l5, %o1) - stx %o1, [rp1 + n] - -ifdef(`OPERATION_addlsh_n', -` addxc( %l3, %g0, %i0)') -ifdef(`OPERATION_sublsh_n', -` addxc( %g0, %g0, %g1) - add %g1, -1, %g1 - sub %l3, %g1, %i0') - - ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/bdiv_dbm1c.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/bdiv_dbm1c.asm deleted file mode 100644 index 550860d36892472a2924338732013f8ec544c0c2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/bdiv_dbm1c.asm +++ /dev/null @@ -1,147 +0,0 @@ -dnl SPARC T3/T4/T5 mpn_bdiv_dbm1c. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: 25 -C UltraSPARC T4/T5: 4 - -C INPUT PARAMETERS -define(`qp', `%i0') -define(`ap', `%i1') -define(`n', `%i2') -define(`bd', `%i3') -define(`h', `%i4') - -define(`plo0',`%g4') define(`plo1',`%g5') -define(`phi0',`%l0') define(`phi1',`%l1') -define(`a0', `%g1') define(`a1', `%g3') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_bdiv_dbm1c) - save %sp, -176, %sp - - and n, 3, %g5 - ldx [ap + 0], %g2 - add n, -5, n - brz %g5, L(b0) - cmp %g5, 2 - bcs %xcc, L(b1) - nop - be %xcc, L(b2) - nop - -L(b3): ldx [ap + 8], a0 - mulx bd, %g2, plo1 - umulxhi(bd, %g2, phi1) - ldx [ap + 16], a1 - add qp, -24, qp - b L(lo3) - add ap, -8, ap - -L(b2): ldx [ap + 8], a1 - mulx bd, %g2, plo0 - umulxhi(bd, %g2, phi0) - brlz,pt n, L(wd2) - nop -L(gt2): ldx [ap + 16], a0 - add ap, 16, ap - b L(lo2) - add n, -1, n - -L(b1): mulx bd, %g2, plo1 - umulxhi(bd, %g2, phi1) - brlz,pn n, L(wd1) - add qp, -8, qp -L(gt1): ldx [ap + 8], a0 - ldx [ap + 16], a1 - b L(lo1) - add ap, 8, ap - -L(b0): ldx [ap + 8], a1 - mulx bd, %g2, plo0 - umulxhi(bd, %g2, phi0) - ldx [ap + 16], a0 - b L(lo0) - add qp, -16, qp - -L(top): ldx [ap + 0], a0 - sub h, phi1, h -L(lo2): mulx bd, a1, plo1 - umulxhi(bd, a1, phi1) - subcc h, plo0, h - addxc( phi0, %g0, phi0) - stx h, [qp + 0] - ldx [ap + 8], a1 - sub h, phi0, h -L(lo1): mulx bd, a0, plo0 - umulxhi(bd, a0, phi0) - subcc h, plo1, h - addxc( phi1, %g0, phi1) - stx h, [qp + 8] - ldx [ap + 16], a0 - sub h, phi1, h -L(lo0): mulx bd, a1, plo1 - umulxhi(bd, a1, phi1) - subcc h, plo0, h - addxc( phi0, %g0, phi0) - stx h, [qp + 16] - ldx [ap + 24], a1 - sub h, phi0, h -L(lo3): mulx bd, a0, plo0 - umulxhi(bd, a0, phi0) - subcc h, plo1, h - addxc( phi1, %g0, phi1) - stx h, [qp + 24] - add ap, 32, ap - add qp, 32, qp - brgz,pt n, L(top) - add n, -4, n - -L(end): sub h, phi1, h -L(wd2): mulx bd, a1, plo1 - umulxhi(bd, a1, phi1) - subcc h, plo0, h - addxc( phi0, %g0, phi0) - stx h, [qp + 0] - sub h, phi0, h -L(wd1): subcc h, plo1, h - addxc( phi1, %g0, phi1) - stx h, [qp + 8] - sub h, phi1, %i0 - - ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/cnd_aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/cnd_aors_n.asm deleted file mode 100644 index f10ee72c1ffc23ae5b61bbd3b5afe77c909fea41..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/cnd_aors_n.asm +++ /dev/null @@ -1,143 +0,0 @@ -dnl SPARC v9 mpn_cnd_add_n and mpn_cnd_sub_n for T3/T4/T5. - -dnl Contributed to the GNU project by David Miller and Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: 8.5 -C UltraSPARC T4: 3 - -C We use a double-pointer trick to allow indexed addressing. Its setup -C cost might be a problem in these functions, since we don't expect huge n -C arguments. -C -C For sub we need ~(a & mask) = (~a | ~mask) but by complementing mask we can -C instead do ~(a & ~mask) = (~a | mask), allowing us to use the orn insn. - -C INPUT PARAMETERS -define(`cnd', `%i0') -define(`rp', `%i1') -define(`up', `%i2') -define(`vp', `%i3') -define(`n', `%i4') - -define(`mask', `cnd') -define(`up0', `%l0') define(`up1', `%l1') -define(`vp0', `%l2') define(`vp1', `%l3') -define(`rp0', `%g4') define(`rp1', `%g5') -define(`u0', `%l4') define(`u1', `%l5') -define(`v0', `%l6') define(`v1', `%l7') -define(`x0', `%g1') define(`x1', `%g3') -define(`w0', `%g1') define(`w1', `%g3') - -ifdef(`OPERATION_cnd_add_n',` - define(`LOGOP', `and $1, $2, $3') - define(`MAKEMASK',`cmp %g0, $1 - subc %g0, %g0, $2') - define(`INITCY', `addcc %g0, 0, %g0') - define(`RETVAL', `addxc( %g0, %g0, %i0)') - define(`func', `mpn_cnd_add_n') -') -ifdef(`OPERATION_cnd_sub_n',` - define(`LOGOP', `orn $2, $1, $3') - define(`MAKEMASK',`cmp $1, 1 - subc %g0, %g0, $2') - define(`INITCY', `subcc %g0, 1, %g0') - define(`RETVAL', `addxc( %g0, %g0, %i0) - xor %i0, 1, %i0') - define(`func', `mpn_cnd_sub_n') -') - -MULFUNC_PROLOGUE(mpn_cnd_add_n mpn_cnd_sub_n) - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(func) - save %sp, -176, %sp - - MAKEMASK(cnd,mask) - - andcc n, 1, %g0 - sllx n, 3, n - add n, -16, n - add vp, n, vp0 - add up, n, up0 - add rp, n, rp0 - neg n, n - be L(evn) - INITCY - -L(odd): ldx [vp0 + n], v1 - ldx [up0 + n], u1 - LOGOP( v1, mask, x1) - addxccc(u1, x1, w1) - stx w1, [rp0 + n] - add n, 8, n - brgz n, L(rtn) - nop - -L(evn): add vp0, 8, vp1 - add up0, 8, up1 - add rp0, -24, rp1 - ldx [vp0 + n], v0 - ldx [vp1 + n], v1 - ldx [up0 + n], u0 - ldx [up1 + n], u1 - add n, 16, n - brgz n, L(end) - add rp0, -16, rp0 - -L(top): LOGOP( v0, mask, x0) - ldx [vp0 + n], v0 - LOGOP( v1, mask, x1) - ldx [vp1 + n], v1 - addxccc(u0, x0, w0) - ldx [up0 + n], u0 - addxccc(u1, x1, w1) - ldx [up1 + n], u1 - stx w0, [rp0 + n] - add n, 16, n - brlez n, L(top) - stx w1, [rp1 + n] - -L(end): LOGOP( v0, mask, x0) - LOGOP( v1, mask, x1) - addxccc(u0, x0, w0) - addxccc(u1, x1, w1) - stx w0, [rp0 + n] - stx w1, [rp1 + 32] - -L(rtn): RETVAL - ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/dive_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/dive_1.asm deleted file mode 100644 index d7dbdf953c17a964907b711ee1157179f185b7b8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/dive_1.asm +++ /dev/null @@ -1,129 +0,0 @@ -dnl SPARC T3/T4/T5 mpn_divexact_1. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: 31 -C UltraSPARC T4/T5: 20-26 hits 20 early, then sharply drops - -C INPUT PARAMETERS -define(`qp', `%i0') -define(`ap', `%i1') -define(`n', `%i2') -define(`d', `%i3') - -define(`dinv',`%o4') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_divexact_1) - save %sp, -176, %sp - cmp n, 1 - bne,pt %xcc, L(gt1) - ldx [ap], %o5 - udivx %o5, d, %g1 - stx %g1, [qp] - return %i7+8 - nop - -L(gt1): add d, -1, %g1 - andn %g1, d, %g1 - popc %g1, %i4 C i4 = count_trailing_zeros(d) - - srlx d, %i4, d - srlx d, 1, %g1 - and %g1, 127, %g1 - - LEA64(binvert_limb_table, g2, g4) - ldub [%g2+%g1], %g1 - add %g1, %g1, %g2 - mulx %g1, %g1, %g1 - mulx %g1, d, %g1 - sub %g2, %g1, %g2 - add %g2, %g2, %g1 - mulx %g2, %g2, %g2 - mulx %g2, d, %g2 - sub %g1, %g2, %g1 - add %g1, %g1, %o7 - mulx %g1, %g1, %g1 - mulx %g1, d, %g1 - add n, -2, n - brz,pt %i4, L(norm) - sub %o7, %g1, dinv - -L(unnorm): - mov 0, %g4 - sub %g0, %i4, %o2 - srlx %o5, %i4, %o5 -L(top_unnorm): - ldx [ap+8], %g3 - add ap, 8, ap - sllx %g3, %o2, %g5 - or %g5, %o5, %g5 - srlx %g3, %i4, %o5 - subcc %g5, %g4, %g4 - mulx %g4, dinv, %g1 - stx %g1, [qp] - add qp, 8, qp - umulxhi(d, %g1, %g1) - addxc( %g1, %g0, %g4) - brgz,pt n, L(top_unnorm) - add n, -1, n - - sub %o5, %g4, %g4 - mulx %g4, dinv, %g1 - stx %g1, [qp] - return %i7+8 - nop - -L(norm): - mulx dinv, %o5, %g1 - stx %g1, [qp] - add qp, 8, qp - addcc %g0, 0, %g4 -L(top_norm): - umulxhi(d, %g1, %g1) - ldx [ap+8], %g5 - add ap, 8, ap - addxc( %g1, %g0, %g1) - subcc %g5, %g1, %g1 - mulx %g1, dinv, %g1 - stx %g1, [qp] - add qp, 8, qp - brgz,pt n, L(top_norm) - add n, -1, n - - return %i7+8 - nop -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/hamdist.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/hamdist.asm deleted file mode 100644 index 20ed8bf15b29315de46b04cebe9cafd8eff7a983..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/hamdist.asm +++ /dev/null @@ -1,78 +0,0 @@ -dnl SPARC v9 mpn_hamdist for T3/T4. - -dnl Contributed to the GNU project by David Miller. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: 18 -C UltraSPARC T4: 3.5 - -C INPUT PARAMETERS -define(`up', `%o0') -define(`vp', `%o1') -define(`n', `%o2') -define(`pcnt', `%o5') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_hamdist) - subcc n, 1, n - be L(final_one) - clr pcnt -L(top): - ldx [up + 0], %g1 - ldx [vp + 0], %g2 - ldx [up + 8], %o4 - ldx [vp + 8], %g3 - sub n, 2, n - xor %g1, %g2, %g1 - add up, 16, up - popc %g1, %g2 - add vp, 16, vp - xor %o4, %g3, %o4 - add pcnt, %g2, pcnt - popc %o4, %g3 - brgz n, L(top) - add pcnt, %g3, pcnt - brlz,pt n, L(done) - nop -L(final_one): - ldx [up + 0], %g1 - ldx [vp + 0], %g2 - xor %g1,%g2, %g1 - popc %g1, %g2 - add pcnt, %g2, pcnt -L(done): - retl - mov pcnt, %o0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/invert_limb.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/invert_limb.asm deleted file mode 100644 index 4da49cf030128d0b06dbe90be8105b522a0a639a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/invert_limb.asm +++ /dev/null @@ -1,92 +0,0 @@ -dnl SPARC T3/T4/T5 mpn_invert_limb. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: ? -C UltraSPARC T4/T5: ? - -C INPUT PARAMETERS -define(`d', `%o0') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_invert_limb) - srlx d, 54, %g1 - LEA64(approx_tab, g2, g3) - and %g1, 0x1fe, %g1 - srlx d, 24, %g4 - lduh [%g2+%g1], %g3 - add %g4, 1, %g4 - sllx %g3, 11, %g2 - add %g2, -1, %g2 - mulx %g3, %g3, %g3 - mulx %g3, %g4, %g3 - srlx %g3, 40, %g3 - sub %g2, %g3, %g2 - sllx %g2, 60, %g1 - mulx %g2, %g2, %g3 - mulx %g3, %g4, %g4 - sub %g1, %g4, %g1 - srlx %g1, 47, %g1 - sllx %g2, 13, %g2 - add %g1, %g2, %g1 - and d, 1, %g2 - srlx %g1, 1, %g4 - sub %g0, %g2, %g3 - and %g4, %g3, %g3 - srlx d, 1, %g4 - add %g4, %g2, %g2 - mulx %g1, %g2, %g2 - sub %g3, %g2, %g2 - umulxhi(%g1, %g2, %g2) - srlx %g2, 1, %g2 - sllx %g1, 31, %g1 - add %g2, %g1, %g1 - mulx %g1, d, %g3 - umulxhi(d, %g1, %g4) - addcc %g3, d, %g0 - addxc( %g4, d, %o0) - jmp %o7+8 - sub %g1, %o0, %o0 -EPILOGUE() - - RODATA - ALIGN(2) - TYPE( approx_tab, object) - SIZE( approx_tab, 512) -approx_tab: -forloop(i,256,512-1,dnl -` .half eval(0x7fd00/i) -')dnl diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/missing.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/missing.asm deleted file mode 100644 index c79032dd388675448fe2904ebdc3640e392e9124..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/missing.asm +++ /dev/null @@ -1,77 +0,0 @@ -dnl SPARC v9-2011 simulation support. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -ASM_START() -PROLOGUE(__gmpn_umulh) - save %sp, -176, %sp - ldx [%sp+2047+176+256], %o0 - ldx [%sp+2047+176+256+8], %o1 - rd %ccr, %o4 - srl %o0, 0, %l4 - srl %o1, 0, %l1 - srlx %o1, 32, %o1 - mulx %o1, %l4, %l2 - srlx %o0, 32, %o0 - mulx %o0, %l1, %l3 - mulx %l1, %l4, %l1 - srlx %l1, 32, %l1 - add %l2, %l1, %l2 - addcc %l2, %l3, %l2 - mulx %o1, %o0, %o1 - mov 0, %l1 - movcs %xcc, 1, %l1 - sllx %l1, 32, %l1 - add %o1, %l1, %o1 - srlx %l2, 32, %o0 - add %o1, %o0, %o0 - stx %o0, [%sp+2047+176+256] - wr %o4, 0, %ccr - ret - restore -EPILOGUE() - -PROLOGUE(__gmpn_lzcnt) - save %sp, -176, %sp - ldx [%sp+2047+176+256], %o0 - brz,a %o0, 2f - mov 64, %o1 - brlz %o0, 2f - mov 0, %o1 -1: sllx %o0, 1, %o0 - brgz %o0, 1b - add %o1, 1, %o1 - stx %o1, [%sp+2047+176+256] -2: ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/missing.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/missing.m4 deleted file mode 100644 index e5d6d8e98e622237df750e8a3c21e92ae7660b08..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/missing.m4 +++ /dev/null @@ -1,88 +0,0 @@ -dnl SPARC v9-2011 simulation support. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -dnl Usage addxccc(r1,r2,r3, t1) -dnl 64-bit add with carry-in and carry-out -dnl FIXME: Register g2 must not be destination - -define(`addxccc',`dnl - add %sp, -512, %sp - stx %g2, [%sp+2047+256+16] - mov 0, %g2 - movcs %xcc, -1, %g2 - addcc %g2, 1, %g0 - addccc $1, $2, $3 - ldx [%sp+2047+256+16], %g2 - sub %sp, -512, %sp -') - - -dnl Usage addxc(r1,r2,r3, t1,t2) -dnl 64-bit add with carry-in - -define(`addxc',`dnl - bcc %xcc, 1f - add $1, $2, $3 - add $3, 1, $3 -1: -') - - -dnl Usage umulxhi(r1,r2,r3) -dnl 64-bit multiply returning upper 64 bits -dnl Calls __gmpn_umulh using a non-standard calling convention - -define(`umulxhi',`dnl - add %sp, -512, %sp - stx $1, [%sp+2047+256] - stx $2, [%sp+2047+256+8] - stx %o7, [%sp+2047+256+16] - call __gmpn_umulh - nop - ldx [%sp+2047+256+16], %o7 - ldx [%sp+2047+256], $3 - sub %sp, -512, %sp -') -dnl Usage lzcnt(r1,r2) -dnl Plain count leading zeros -dnl Calls __gmpn_lzcnt using a non-standard calling convention - -define(`lzcnt',`dnl - add %sp, -512, %sp - stx %o7, [%sp+2047+256+16] - call __gmpn_lzcnt - stx $1, [%sp+2047+256] - ldx [%sp+2047+256+16], %o7 - ldx [%sp+2047+256], $2 - sub %sp, -512, %sp -') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/mod_1_4.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/mod_1_4.asm deleted file mode 100644 index 08facbd1ccde4c386fbdcaa1dfcec2236d696dc9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/mod_1_4.asm +++ /dev/null @@ -1,233 +0,0 @@ -dnl SPARC T3/T4/T5 mpn_mod_1s_4p. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: 30 -C UltraSPARC T4/T5: 4 - -C INPUT PARAMETERS -define(`ap', `%o0') -define(`n', `%o1') -define(`d', `%o2') -define(`cps', `%o3') - - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_mod_1s_4p) - save %sp, -176, %sp - ldx [%i3+16], %o4 - ldx [%i3+24], %o3 - ldx [%i3+32], %o2 - ldx [%i3+40], %o1 - ldx [%i3+48], %o0 - - and %i1, 3, %g3 - sllx %i1, 3, %g1 - add %i0, %g1, %i0 - brz %g3, L(b00) - cmp %g3, 2 - bcs %xcc, L(b01) - nop - be %xcc, L(b10) - nop - -L(b11): ldx [%i0-16], %g2 - mulx %g2, %o4, %g5 - umulxhi(%g2, %o4, %g3) - ldx [%i0-24], %g4 - addcc %g5, %g4, %g5 - addxc( %g3, %g0, %g4) - ldx [%i0-8], %g2 - mulx %g2, %o3, %g1 - umulxhi(%g2, %o3, %g3) - addcc %g1, %g5, %g1 - addxc( %g3, %g4, %g2) - ba,pt %xcc, .L8 - add %i0, -32, %i0 - -L(b00): ldx [%i0-24], %g3 - mulx %g3, %o4, %g2 - umulxhi(%g3, %o4, %g5) - ldx [%i0-32], %g4 - addcc %g2, %g4, %g2 - addxc( %g5, %g0, %g3) - ldx [%i0-16], %g4 - mulx %g4, %o3, %g5 - umulxhi(%g4, %o3, %i5) - addcc %g2, %g5, %g5 - addxc( %g3, %i5, %g4) - ldx [%i0-8], %g2 - mulx %g2, %o2, %g1 - umulxhi(%g2, %o2, %g3) - addcc %g1, %g5, %g1 - addxc( %g3, %g4, %g2) - ba,pt %xcc, .L8 - add %i0, -40, %i0 - -L(b01): ldx [%i0-8], %g1 - mov 0, %g2 - ba,pt %xcc, .L8 - add %i0, -16, %i0 - -L(b10): ldx [%i0-8], %g2 - ldx [%i0-16], %g1 - add %i0, -24, %i0 - -.L8: add %i1, -5, %g3 - brlz,pn %g3, L(end) - nop - -L(top): ldx [%i0-16], %i4 - mulx %i4, %o4, %o5 - umulxhi(%i4, %o4, %i1) - ldx [%i0-24], %i5 - addcc %o5, %i5, %o5 - addxc( %i1, %g0, %i4) - ldx [%i0-8], %i5 - mulx %i5, %o3, %o7 - umulxhi(%i5, %o3, %i1) - addcc %o5, %o7, %o7 - addxc( %i4, %i1, %i5) - ldx [%i0+0], %g4 - mulx %g4, %o2, %i1 - umulxhi(%g4, %o2, %i4) - addcc %o7, %i1, %i1 - addxc( %i5, %i4, %g4) - mulx %g1, %o1, %i5 - umulxhi(%g1, %o1, %i4) - addcc %i1, %i5, %i5 - addxc( %g4, %i4, %g5) - mulx %g2, %o0, %g1 - umulxhi(%g2, %o0, %g4) - addcc %g1, %i5, %g1 - addxc( %g4, %g5, %g2) - add %g3, -4, %g3 - brgez,pt %g3, L(top) - add %i0, -32, %i0 - -L(end): mulx %g2, %o4, %g5 - umulxhi(%g2, %o4, %g3) - addcc %g1, %g5, %g5 - addxc( %g3, %g0, %g2) - ldx [%i3+8], %i0 - ldx [%i3], %g4 - sub %g0, %i0, %i5 - srlx %g5, %i5, %i5 - sllx %g2, %i0, %g2 - or %i5, %g2, %g1 - mulx %g1, %g4, %l7 - umulxhi(%g1, %g4, %g3) - sllx %g5, %i0, %g2 - add %g1, 1, %g1 - addcc %l7, %g2, %g5 - addxc( %g3, %g1, %g1) - mulx %g1, %i2, %g1 - sub %g2, %g1, %g2 - cmp %g2, %g5 - add %i2, %g2, %g1 - movlu %xcc, %g2, %g1 - subcc %g1, %i2, %g2 - movgeu %xcc, %g2, %g1 - return %i7+8 - srlx %g1, %o0, %o0 -EPILOGUE() - -PROLOGUE(mpn_mod_1s_4p_cps) - save %sp, -176, %sp - lzcnt( %i1, %i5) - sllx %i1, %i5, %i1 - call mpn_invert_limb, 0 - mov %i1, %o0 - stx %o0, [%i0] - sra %i5, 0, %g1 - stx %g1, [%i0+8] - sub %g0, %i5, %g2 - srlx %o0, %g2, %g2 - mov 1, %g1 - sllx %g1, %i5, %g1 - or %g2, %g1, %g2 - sub %g0, %i1, %g1 - mulx %g2, %g1, %g2 - srlx %g2, %i5, %g1 - stx %g1, [%i0+16] - - umulxhi(%o0, %g2, %g3) - add %g2, %g3, %g3 - xnor %g0, %g3, %g3 - mulx %g3, %i1, %g3 - mulx %g2, %o0, %g2 - cmp %g2, %g3 - add %i1, %g3, %g1 - movgeu %xcc, %g3, %g1 - srlx %g1, %i5, %g2 - stx %g2, [%i0+24] - - umulxhi(%o0, %g1, %g3) - add %g1, %g3, %g3 - xnor %g0, %g3, %g3 - mulx %g3, %i1, %g3 - mulx %g1, %o0, %g1 - cmp %g1, %g3 - add %i1, %g3, %g2 - movgeu %xcc, %g3, %g2 - srlx %g2, %i5, %g1 - stx %g1, [%i0+32] - - umulxhi(%o0, %g2, %g3) - add %g2, %g3, %g3 - xnor %g0, %g3, %g3 - mulx %g3, %i1, %g3 - mulx %g2, %o0, %g2 - cmp %g2, %g3 - add %i1, %g3, %g1 - movgeu %xcc, %g3, %g1 - srlx %g1, %i5, %g2 - stx %g2, [%i0+40] - - umulxhi(%o0, %g1, %g2) - add %g1, %g2, %g2 - xnor %g0, %g2, %g2 - mulx %g2, %i1, %g2 - mulx %g1, %o0, %o0 - cmp %o0, %g2 - add %i1, %g2, %g3 - movgeu %xcc, %g2, %g3 - srlx %g3, %i5, %i5 - stx %i5, [%i0+48] - - return %i7+8 - nop -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/mod_34lsub1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/mod_34lsub1.asm deleted file mode 100644 index 874428069e854dbc9b552586316f1d3d5c176945..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/mod_34lsub1.asm +++ /dev/null @@ -1,117 +0,0 @@ -dnl SPARC v9 mpn_mod_34lsub1 for T3/T4/T5. - -dnl Copyright 2005, 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T1: - -C UltraSPARC T3: 5 -C UltraSPARC T4: 1.57 - -C This is based on the powerpc64/mode64 code. - -C INPUT PARAMETERS -define(`up', `%i0') -define(`n', `%i1') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_mod_34lsub1) - save %sp, -176, %sp - - mov 0, %g1 - mov 0, %g3 - mov 0, %g4 - addcc %g0, 0, %g5 - - add n, -3, n - brlz n, L(lt3) - nop - - add n, -3, n - ldx [up+0], %l5 - ldx [up+8], %l6 - ldx [up+16], %l7 - brlz n, L(end) - add up, 24, up - - ALIGN(16) -L(top): addxccc(%g1, %l5, %g1) - ldx [up+0], %l5 - addxccc(%g3, %l6, %g3) - ldx [up+8], %l6 - addxccc(%g4, %l7, %g4) - ldx [up+16], %l7 - add n, -3, n - brgez n, L(top) - add up, 24, up - -L(end): addxccc( %g1, %l5, %g1) - addxccc(%g3, %l6, %g3) - addxccc(%g4, %l7, %g4) - addxc( %g5, %g0, %g5) - -L(lt3): cmp n, -2 - blt L(2) - nop - - ldx [up+0], %l5 - mov 0, %l6 - beq L(1) - addcc %g1, %l5, %g1 - - ldx [up+8], %l6 -L(1): addxccc(%g3, %l6, %g3) - addxccc(%g4, %g0, %g4) - addxc( %g5, %g0, %g5) - -L(2): sllx %g1, 16, %l0 - srlx %l0, 16, %l0 C %l0 = %g1 mod 2^48 - srlx %g1, 48, %l3 C %l3 = %g1 div 2^48 - srl %g3, 0, %g1 - sllx %g1, 16, %l4 C %l4 = (%g3 mod 2^32) << 16 - srlx %g3, 32, %l5 C %l5 = %g3 div 2^32 - sethi %hi(0xffff0000), %g1 - andn %g4, %g1, %g1 - sllx %g1, 32, %l6 C %l6 = (%g4 mod 2^16) << 32 - srlx %g4, 16, %l7 C %l7 = %g4 div 2^16 - - add %l0, %l3, %l0 - add %l4, %l5, %l4 - add %l6, %l7, %l6 - - add %l0, %l4, %l0 - add %l6, %g5, %l6 - - add %l0, %l6, %i0 - ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/mode1o.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/mode1o.asm deleted file mode 100644 index 494e1d3f4f3ac78c7d156f43f2208e257f0c60ac..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/mode1o.asm +++ /dev/null @@ -1,82 +0,0 @@ -dnl SPARC T3/T4/T5 mpn_modexact_1c_odd. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: 30 -C UltraSPARC T4/T5: 26 - -C INPUT PARAMETERS -define(`ap', `%o0') -define(`n', `%o1') -define(`d', `%o2') -define(`cy', `%o3') - -define(`dinv',`%o5') -define(`a0', `%g1') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_modexact_1c_odd) - srlx d, 1, %g1 - and %g1, 127, %g1 - - LEA64(binvert_limb_table, g2, g4) - ldub [%g2+%g1], %g1 - add %g1, %g1, %g2 - mulx %g1, %g1, %g1 - mulx %g1, d, %g1 - sub %g2, %g1, %g2 - add %g2, %g2, %g1 - mulx %g2, %g2, %g2 - mulx %g2, d, %g2 - sub %g1, %g2, %g1 - add %g1, %g1, %o5 - mulx %g1, %g1, %g1 - mulx %g1, d, %g1 - sub %o5, %g1, dinv - add n, -1, n - -L(top): ldx [ap], a0 - add ap, 8, ap - subcc a0, cy, %g3 - mulx %g3, dinv, %g5 - umulxhi(d, %g5, %g5) - addxc( %g5, %g0, cy) - brnz,pt n, L(top) - add n, -1, n - - retl - mov cy, %o0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/mul_1.asm deleted file mode 100644 index af05d627bcfd804c0e7e5e9ca86de28451e6d1f0..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/mul_1.asm +++ /dev/null @@ -1,174 +0,0 @@ -dnl SPARC v9 mpn_mul_1 for T3/T4/T5. - -dnl Contributed to the GNU project by David Miller and Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: 23 -C UltraSPARC T4: 3 - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`n', `%i2') -define(`v0', `%i3') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_mul_1) - save %sp, -176, %sp - - and n, 3, %g5 - add n, -4, n - brz %g5, L(b0) - cmp %g5, 2 - bcs %xcc, L(b1) - nop - be %xcc, L(b2) - nop - -L(b3): addcc %g0, %g0, %i5 - ldx [up+0], %l0 - ldx [up+8], %l1 - ldx [up+16], %l2 - mulx %l0, v0, %o0 - umulxhi(%l0, v0, %o1) - brgz n, L(gt3) - add rp, -8, rp - mulx %l1, v0, %o2 - umulxhi(%l1, v0, %o3) - b L(wd3) - nop -L(gt3): ldx [up+24], %l3 - mulx %l1, v0, %o2 - umulxhi(%l1, v0, %o3) - add up, 24, up - b L(lo3) - add n, -3, n - -L(b2): addcc %g0, %g0, %o1 - ldx [up+0], %l1 - ldx [up+8], %l2 - brgz n, L(gt2) - add rp, -16, rp - mulx %l1, v0, %o2 - umulxhi(%l1, v0, %o3) - mulx %l2, v0, %o4 - umulxhi(%l2, v0, %o5) - b L(wd2) - nop -L(gt2): ldx [up+16], %l3 - mulx %l1, v0, %o2 - umulxhi(%l1, v0, %o3) - ldx [up+24], %l0 - mulx %l2, v0, %o4 - umulxhi(%l2, v0, %o5) - add up, 16, up - b L(lo2) - add n, -2, n - -L(b1): addcc %g0, %g0, %o3 - ldx [up+0], %l2 - brgz n, L(gt1) - nop - mulx %l2, v0, %o4 - stx %o4, [rp+0] - umulxhi(%l2, v0, %i0) - ret - restore -L(gt1): ldx [up+8], %l3 - ldx [up+16], %l0 - mulx %l2, v0, %o4 - umulxhi(%l2, v0, %o5) - ldx [up+24], %l1 - mulx %l3, v0, %i4 - umulxhi(%l3, v0, %i5) - add rp, -24, rp - add up, 8, up - b L(lo1) - add n, -1, n - -L(b0): addcc %g0, %g0, %o5 - ldx [up+0], %l3 - ldx [up+8], %l0 - ldx [up+16], %l1 - mulx %l3, v0, %i4 - umulxhi(%l3, v0, %i5) - ldx [up+24], %l2 - mulx %l0, v0, %o0 - umulxhi(%l0, v0, %o1) - b L(lo0) - nop - - ALIGN(16) -L(top): ldx [up+0], %l3 C 0 - addxccc(%i4, %o5, %i4) C 0 - mulx %l1, v0, %o2 C 1 - stx %i4, [rp+0] C 1 - umulxhi(%l1, v0, %o3) C 2 -L(lo3): ldx [up+8], %l0 C 2 - addxccc(%o0, %i5, %o0) C 3 - mulx %l2, v0, %o4 C 3 - stx %o0, [rp+8] C 4 - umulxhi(%l2, v0, %o5) C 4 -L(lo2): ldx [up+16], %l1 C 5 - addxccc(%o2, %o1, %o2) C 5 - mulx %l3, v0, %i4 C 6 - stx %o2, [rp+16] C 6 - umulxhi(%l3, v0, %i5) C 7 -L(lo1): ldx [up+24], %l2 C 7 - addxccc(%o4, %o3, %o4) C 8 - mulx %l0, v0, %o0 C 8 - stx %o4, [rp+24] C 9 - umulxhi(%l0, v0, %o1) C 9 - add rp, 32, rp C 10 -L(lo0): add up, 32, up C 10 - brgz n, L(top) C 11 - add n, -4, n C 11 - -L(end): addxccc(%i4, %o5, %i4) - mulx %l1, v0, %o2 - stx %i4, [rp+0] - umulxhi(%l1, v0, %o3) - addxccc(%o0, %i5, %o0) -L(wd3): mulx %l2, v0, %o4 - stx %o0, [rp+8] - umulxhi(%l2, v0, %o5) - addxccc(%o2, %o1, %o2) -L(wd2): stx %o2, [rp+16] - addxccc(%o4, %o3, %o4) - stx %o4, [rp+24] - addxc( %g0, %o5, %i0) - ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/popcount.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/popcount.asm deleted file mode 100644 index de80f3c8098e7ddac7c1521ee1efb226122918b3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/popcount.asm +++ /dev/null @@ -1,70 +0,0 @@ -dnl SPARC v9 mpn_popcount for T3/T4. - -dnl Contributed to the GNU project by David Miller. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: 15 -C UltraSPARC T4: 2.5 - -C INPUT PARAMETERS -define(`up', `%o0') -define(`n', `%o1') -define(`pcnt', `%o5') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_popcount) - subcc n, 1, n - be L(final_one) - clr pcnt -L(top): - ldx [up + 0], %g1 - sub n, 2, n - ldx [up + 8], %o4 - add up, 16, up - popc %g1, %g2 - popc %o4, %g3 - add pcnt, %g2, pcnt - brgz n, L(top) - add pcnt, %g3, pcnt - brlz,pt n, L(done) - nop -L(final_one): - ldx [up + 0], %g1 - popc %g1, %g2 - add pcnt, %g2, pcnt -L(done): - retl - mov pcnt, %o0 -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/sqr_diag_addlsh1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/sqr_diag_addlsh1.asm deleted file mode 100644 index 216ddc0ba1e4b8cac3aba724ab6de96a1b41b0cf..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/sqr_diag_addlsh1.asm +++ /dev/null @@ -1,93 +0,0 @@ -dnl SPARC v9 mpn_sqr_dial_addlsh1 for T3/T4/T5. - -dnl Contributed to the GNU project by Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: ? -C UltraSPARC T4: >= 4.5 - - -define(`rp', `%i0') -define(`tp', `%i1') -define(`up', `%i2') -define(`n', `%i3') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_sqr_diag_addlsh1) - save %sp, -176, %sp - - ldx [up+0], %g1 - mulx %g1, %g1, %o0 - umulxhi(%g1, %g1, %g2) - stx %o0, [rp+0] - - ldx [up+8], %g1 - ldx [tp+0], %g4 - ldx [tp+8], %g5 - mulx %g1, %g1, %o0 - orcc %g0, %g0, %o5 - b L(dm) - add n, -2, n - - ALIGN(16) -L(top): ldx [up+8], %g1 - addcc %g4, %o2, %o2 - addxccc(%g5, %o0, %g3) - ldx [tp+16], %g4 - ldx [tp+24], %g5 - mulx %g1, %g1, %o0 - stx %o2, [rp+8] - stx %g3, [rp+16] - add rp, 16, rp - add tp, 16, tp -L(dm): add %g2, %o5, %o2 - umulxhi(%g1, %g1, %g2) - addxccc(%g4, %g4, %g4) - addxccc(%g5, %g5, %g5) - add up, 8, up - addxc( %g0, %g0, %o5) - brnz n, L(top) - add n, -1, n - - addcc %o2, %g4, %g4 - addxccc(%o0, %g5, %g5) - stx %g4, [rp+8] - stx %g5, [rp+16] - addxc( %o5, %g2, %g2) - stx %g2, [rp+24] - - ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/sub_n.asm deleted file mode 100644 index 0e4bc939e30dbe95bf82efb9aa18279b6bd1650d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/sub_n.asm +++ /dev/null @@ -1,144 +0,0 @@ -dnl SPARC v9 mpn_sub_n for T3/T4. - -dnl Contributed to the GNU project by David Miller. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: 8 -C UltraSPARC T4: 3 - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`vp', `%i2') -define(`n', `%i3') -define(`cy', `%i4') - -define(`u0_off', `%l0') -define(`u1_off', `%l1') -define(`v0_off', `%l2') -define(`v1_off', `%l3') -define(`r0_off', `%l4') -define(`r1_off', `%l5') -define(`loop_n', `%l6') -define(`tmp', `%l7') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_sub_nc) - save %sp, -176, %sp - ba,pt %xcc, L(ent) - xor cy, 1, cy -EPILOGUE() -PROLOGUE(mpn_sub_n) - save %sp, -176, %sp - mov 1, cy -L(ent): - subcc n, 1, n - be L(final_one) - cmp %g0, cy - - ldx [up + 0], %o4 - sllx n, 3, tmp - - ldx [vp + 0], %o5 - add up, tmp, u0_off - - ldx [up + 8], %g5 - add vp, tmp, v0_off - - ldx [vp + 8], %g1 - add rp, tmp, r0_off - - neg tmp, loop_n - add u0_off, 8, u1_off - - add v0_off, 8, v1_off - sub loop_n, -(2 * 8), loop_n - - sub r0_off, 16, r0_off - brgez,pn loop_n, L(loop_tail) - sub r0_off, 8, r1_off - - b,a L(top) - ALIGN(16) -L(top): - xnor %o5, 0, tmp - ldx [loop_n + v0_off], %o5 - - addxccc(%o4, tmp, %g3) - ldx [loop_n + u0_off], %o4 - - xnor %g1, 0, %g1 - stx %g3, [loop_n + r0_off] - - addxccc(%g5, %g1, tmp) - ldx [loop_n + v1_off], %g1 - - ldx [loop_n + u1_off], %g5 - sub loop_n, -(2 * 8), loop_n - - brlz loop_n, L(top) - stx tmp, [loop_n + r1_off] - -L(loop_tail): - xnor %o5, 0, tmp - xnor %g1, 0, %g1 - - addxccc(%o4, tmp, %g3) - add loop_n, u0_off, up - - addxccc(%g5, %g1, %g5) - add loop_n, r0_off, rp - - stx %g3, [rp + 0] - add loop_n, v0_off, vp - - brgz,pt loop_n, L(done) - stx %g5, [rp + 8] - - add rp, (2 * 8), rp - -L(final_one): - ldx [up+0], %o4 - ldx [vp+0], %o5 - xnor %o5, %g0, %o5 - addxccc(%o4, %o5, %g3) - stx %g3, [rp+0] - -L(done): - clr %i0 - movcc %xcc, 1, %i0 - ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/submul_1.asm deleted file mode 100644 index 5635d1bdbd858a83080a8b05ec1dba14db15e3f7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/sparc64/ultrasparct3/submul_1.asm +++ /dev/null @@ -1,170 +0,0 @@ -dnl SPARC v9 mpn_submul_1 for T3/T4/T5. - -dnl Contributed to the GNU project by David Miller and Torbjörn Granlund. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C UltraSPARC T3: 26 -C UltraSPARC T4: 4.5 - -C INPUT PARAMETERS -define(`rp', `%i0') -define(`up', `%i1') -define(`n', `%i2') -define(`v0', `%i3') - -ASM_START() - REGISTER(%g2,#scratch) - REGISTER(%g3,#scratch) -PROLOGUE(mpn_submul_1) - save %sp, -176, %sp - ldx [up+0], %g1 - - and n, 3, %g5 - add n, -4, n - brz %g5, L(b00) - cmp %g5, 2 - bcs %xcc, L(b01) - nop - bne %xcc, L(b11) - ldx [up+8], %g4 - -L(b10): add up, 16, up - addcc %g0, 0, %g3 - mulx %g1, v0, %l4 - umulxhi(%g1, v0, %l5) - ldx [rp+0], %o2 - mulx %g4, v0, %l6 - umulxhi(%g4, v0, %l7) - brlz n, L(wd2) - nop -L(gt2): ldx [up+0], %o0 - b L(lo2) - nop - -L(b00): add rp, -16, rp - addcc %g0, 0, %g3 - ldx [up+8], %o1 - mulx %g1, v0, %l0 - umulxhi(%g1, v0, %l1) - ldx [up+16], %o0 - ldx [rp+16], %o2 - mulx %o1, v0, %l2 - umulxhi(%o1, v0, %l3) - b L(lo0) - nop - -L(b01): add up, 8, up - add rp, -8, rp - addcc %g0, 0, %g3 - ldx [rp+8], %o3 - mulx %g1, v0, %l6 - umulxhi(%g1, v0, %l7) - brlz n, L(wd1) - nop - ldx [up+0], %o0 - ldx [up+8], %o1 - mulx %o0, v0, %l0 - umulxhi(%o0, v0, %l1) - b L(lo1) - nop - -L(b11): add up, 24, up - add rp, 8, rp - addcc %g0, 0, %g3 - mulx %g1, v0, %l2 - umulxhi(%g1, v0, %l3) - ldx [up-8], %o1 - ldx [rp-8], %o3 - mulx %g4, v0, %l4 - umulxhi(%g4, v0, %l5) - brlz n, L(end) - nop - - ALIGN(16) -L(top): ldx [up+0], %o0 - addxccc(%g3, %l2, %g1) - ldx [rp+0], %o2 - addxc( %g0, %l3, %g3) - mulx %o1, v0, %l6 - subcc %o3, %g1, %g4 - umulxhi(%o1, v0, %l7) - stx %g4, [rp-8] -L(lo2): ldx [up+8], %o1 - addxccc(%g3, %l4, %g1) - ldx [rp+8], %o3 - addxc( %g0, %l5, %g3) - mulx %o0, v0, %l0 - subcc %o2, %g1, %g4 - umulxhi(%o0, v0, %l1) - stx %g4, [rp+0] -L(lo1): ldx [up+16], %o0 - addxccc(%g3, %l6, %g1) - ldx [rp+16], %o2 - addxc( %g0, %l7, %g3) - mulx %o1, v0, %l2 - subcc %o3, %g1, %g4 - umulxhi(%o1, v0, %l3) - stx %g4, [rp+8] -L(lo0): ldx [up+24], %o1 - addxccc(%g3, %l0, %g1) - ldx [rp+24], %o3 - addxc( %g0, %l1, %g3) - mulx %o0, v0, %l4 - subcc %o2, %g1, %g4 - umulxhi(%o0, v0, %l5) - stx %g4, [rp+16] - add n, -4, n - add up, 32, up - brgez n, L(top) - add rp, 32, rp - -L(end): addxccc(%g3, %l2, %g1) - ldx [rp+0], %o2 - addxc( %g0, %l3, %g3) - mulx %o1, v0, %l6 - subcc %o3, %g1, %g4 - umulxhi(%o1, v0, %l7) - stx %g4, [rp-8] -L(wd2): addxccc(%g3, %l4, %g1) - ldx [rp+8], %o3 - addxc( %g0, %l5, %g3) - subcc %o2, %g1, %g4 - stx %g4, [rp+0] -L(wd1): addxccc(%g3, %l6, %g1) - addxc( %g0, %l7, %g3) - subcc %o3, %g1, %g4 - stx %g4, [rp+8] - addxc( %g0, %g3, %i0) - ret - restore -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/thumb/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/thumb/add_n.asm deleted file mode 100644 index 08ed60b9be089223bc65bec52533a32b3251761e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/thumb/add_n.asm +++ /dev/null @@ -1,63 +0,0 @@ -dnl ARM/Thumb mpn_add_n. - -dnl Copyright 1997, 2000, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -define(`rp', r0) -define(`up', r1) -define(`vp', r2) -define(`n', r3) - -ASM_START() - .thumb -PROLOGUE(mpn_add_nc) - push {r4, r5, r6} - ldr r6, [sp, #12] C init carry save register - sub r6, #1 - b L(top) -EPILOGUE() -PROLOGUE(mpn_add_n) - push {r4, r5, r6} - neg r6, n C init carry save register - -L(top): ldmia up!, {r4} C load next limb from S1 - cmp n, r6 C tricky carry restore - ldmia vp!, {r5} C load next limb from S2 - adc r4, r5 - stmia rp!, {r4} C store result limb to RES - sbc r6, r6 C save negated carry - sub n, #1 - bne L(top) - - add r0, r6, #1 - pop {r4, r5, r6} - bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/thumb/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/thumb/sub_n.asm deleted file mode 100644 index a38572048eef7e3566725dc4b2c027496c6cb0d5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/thumb/sub_n.asm +++ /dev/null @@ -1,63 +0,0 @@ -dnl ARM/Thumb mpn_sub_n. - -dnl Copyright 1997, 2000, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C INPUT PARAMETERS -define(`rp', r0) -define(`up', r1) -define(`vp', r2) -define(`n', r3) - -ASM_START() - .thumb -PROLOGUE(mpn_sub_nc) - push {r4, r5, r6} - ldr r6, [sp, #12] C init carry save register - neg r6, r6 - b L(top) -EPILOGUE() -PROLOGUE(mpn_sub_n) - push {r4, r5, r6} - mov r6, n C init carry save register - -L(top): ldmia up!, {r4} C load next limb from S1 - cmp n, r6 C tricky carry restore - ldmia vp!, {r5} C load next limb from S2 - sbc r4, r5 - stmia rp!, {r4} C store result limb to RES - sbc r6, r6 C save negated carry - sub n, #1 - bne L(top) - - neg r0, r6 - pop {r4, r5, r6} - bx lr -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/vax/add_n.asm deleted file mode 100644 index 0a0bf78ab345d40b32ab8fff44ca17a3f49fc634..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/add_n.asm +++ /dev/null @@ -1,64 +0,0 @@ -dnl VAX mpn_add_n -- Add two limb vectors of the same length > 0 and store sum -dnl in a third limb vector. - -dnl Copyright 1999, 2000, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_add_n) - .word 0x0 - movl 16(ap), r0 - movl 12(ap), r1 - movl 8(ap), r2 - movl 4(ap), r3 - mnegl r0, r5 - addl2 $3, r0 - ashl $-2, r0, r0 C unroll loop count - bicl2 $-4, r5 C mask out low 2 bits - movaq (r5)[r5], r5 C 9x - jmp L(top)[r5] - -L(top): movl (r2)+, r4 - adwc (r1)+, r4 - movl r4, (r3)+ - movl (r2)+, r4 - adwc (r1)+, r4 - movl r4, (r3)+ - movl (r2)+, r4 - adwc (r1)+, r4 - movl r4, (r3)+ - movl (r2)+, r4 - adwc (r1)+, r4 - movl r4, (r3)+ - sobgtr r0, L(top) - - adwc r0, r0 - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/addmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/vax/addmul_1.asm deleted file mode 100644 index 8a6f636bdf0ada02f6ba401b897a62241096d3bb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/addmul_1.asm +++ /dev/null @@ -1,124 +0,0 @@ -dnl VAX mpn_addmul_1 -- Multiply a limb vector with a limb and add the result -dnl to a second limb vector. - -dnl Copyright 1992, 1994, 1996, 2000, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_addmul_1) - .word 0xfc0 - movl 12(ap), r4 - movl 8(ap), r8 - movl 4(ap), r9 - clrl r3 - incl r4 - ashl $-1, r4, r7 - clrl r11 - movl 16(ap), r6 - jlss L(v0_big) - jlbc r4, L(1) - -C Loop for v0 < 0x80000000 -L(tp1): movl (r8)+, r1 - jlss L(1n0) - emul r1, r6, $0, r2 - addl2 r11, r2 - adwc $0, r3 - addl2 r2, (r9)+ - adwc $0, r3 -L(1): movl (r8)+, r1 - jlss L(1n1) -L(1p1): emul r1, r6, $0, r10 - addl2 r3, r10 - adwc $0, r11 - addl2 r10, (r9)+ - adwc $0, r11 - - sobgtr r7, L(tp1) - movl r11, r0 - ret - -L(1n0): emul r1, r6, $0, r2 - addl2 r11, r2 - adwc r6, r3 - addl2 r2, (r9)+ - adwc $0, r3 - movl (r8)+, r1 - jgeq L(1p1) -L(1n1): emul r1, r6, $0, r10 - addl2 r3, r10 - adwc r6, r11 - addl2 r10, (r9)+ - adwc $0, r11 - - sobgtr r7, L(tp1) - movl r11, r0 - ret - -L(v0_big): - jlbc r4, L(2) - -C Loop for v0 >= 0x80000000 -L(tp2): movl (r8)+, r1 - jlss L(2n0) - emul r1, r6, $0, r2 - addl2 r11, r2 - adwc r1, r3 - addl2 r2, (r9)+ - adwc $0, r3 -L(2): movl (r8)+, r1 - jlss L(2n1) -L(2p1): emul r1, r6, $0, r10 - addl2 r3, r10 - adwc r1, r11 - addl2 r10, (r9)+ - adwc $0, r11 - - sobgtr r7, L(tp2) - movl r11, r0 - ret - -L(2n0): emul r1, r6, $0, r2 - addl2 r11, r2 - adwc r6, r3 - addl2 r2, (r9)+ - adwc r1, r3 - movl (r8)+, r1 - jgeq L(2p1) -L(2n1): emul r1, r6, $0, r10 - addl2 r3, r10 - adwc r6, r11 - addl2 r10, (r9)+ - adwc r1, r11 - - sobgtr r7, L(tp2) - movl r11, r0 - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/elf.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/vax/elf.m4 deleted file mode 100644 index e04f0bafc9ffc58b4931ab4561b2adcaf610e9c1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/elf.m4 +++ /dev/null @@ -1,54 +0,0 @@ -divert(-1) - -dnl m4 macros for VAX assembler. - -dnl Copyright 2001, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - - -defreg(r0,`%r``''0') -defreg(r1,`%r``''1') -defreg(r2,`%r``''2') -defreg(r3,`%r``''3') -defreg(r4,`%r``''4') -defreg(r5,`%r``''5') -defreg(r6,`%r``''6') -defreg(r7,`%r``''7') -defreg(r8,`%r``''8') -defreg(r9,`%r``''9') -defreg(r10,`%r``''10') -defreg(r11,`%r``''11') -defreg(r12,`%r``''12') -defreg(r13,`%r``''13') -defreg(r14,`%r``''14') -defreg(r15,`%r``''15') -defreg(ap,`%a``''p') - -define(`foo', blablabla) - -divert diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/vax/gmp-mparam.h deleted file mode 100644 index 9f20b9b783e669496bd91c7d0a15f40315c4ce6b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/gmp-mparam.h +++ /dev/null @@ -1,60 +0,0 @@ -/* VAX gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 2000-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* These numbers were measured manually using the tune/speed program. - The standard tune/tuneup takes too long. (VAX 8800) */ - -#define MUL_TOOM22_THRESHOLD 14 -#define MUL_TOOM33_THRESHOLD 110 - -#define SQR_BASECASE_THRESHOLD 6 -#define SQR_TOOM2_THRESHOLD 42 -#define SQR_TOOM3_THRESHOLD 250 - -/* #define DIV_SB_PREINV_THRESHOLD */ -/* #define DIV_DC_THRESHOLD */ -/* #define POWM_THRESHOLD */ - -/* #define GCD_ACCEL_THRESHOLD */ -/* #define JACOBI_BASE_METHOD */ - -/* #define DIVREM_1_NORM_THRESHOLD */ -/* #define DIVREM_1_UNNORM_THRESHOLD */ -/* #define MOD_1_NORM_THRESHOLD */ -/* #define MOD_1_UNNORM_THRESHOLD */ -/* #define USE_PREINV_DIVREM_1 */ -/* #define USE_PREINV_MOD_1 */ -/* #define DIVREM_2_THRESHOLD */ -/* #define DIVEXACT_1_THRESHOLD */ -/* #define MODEXACT_1_ODD_THRESHOLD */ - -/* #define GET_STR_DC_THRESHOLD */ -/* #define GET_STR_PRECOMPUTE_THRESHOLD */ -#define SET_STR_THRESHOLD 3400 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/vax/lshift.asm deleted file mode 100644 index 941e9994b87cb83432c9ba361243aafdd1599e0b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/lshift.asm +++ /dev/null @@ -1,59 +0,0 @@ -dnl VAX mpn_lshift -- left shift. - -dnl Copyright 1999-2001, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_lshift) - .word 0x1c0 - movl 4(ap), r7 - movl 8(ap), r6 - movl 12(ap), r1 - movl 16(ap), r8 - - moval (r6)[r1], r6 - moval (r7)[r1], r7 - clrl r3 - movl -(r6), r2 - ashq r8, r2, r4 - movl r5, r0 - movl r2, r3 - decl r1 - jeql L(end) - -L(top): movl -(r6), r2 - ashq r8, r2, r4 - movl r5, -(r7) - movl r2, r3 - sobgtr r1, L(top) - -L(end): movl r4, -4(r7) - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/vax/mul_1.asm deleted file mode 100644 index 8e4dcd217758ff52798b5ef66056f757ba604a99..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/mul_1.asm +++ /dev/null @@ -1,118 +0,0 @@ -dnl VAX mpn_mul_1 -- Multiply a limb vector with a limb and store the result -dnl in a second limb vector. - -dnl Copyright 1992, 1994, 1996, 2000, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_mul_1) - .word 0xfc0 - movl 12(ap), r4 - movl 8(ap), r8 - movl 4(ap), r9 - clrl r3 - incl r4 - ashl $-1, r4, r7 - clrl r11 - movl 16(ap), r6 - jlss L(v0_big) - jlbc r4, L(1) - -C Loop for v0 < 0x80000000 -L(tp1): movl (r8)+, r1 - jlss L(1n0) - emul r1, r6, $0, r2 - addl2 r11, r2 - adwc $0, r3 - movl r2, (r9)+ -L(1): movl (r8)+, r1 - jlss L(1n1) -L(1p1): emul r1, r6, $0, r10 - addl2 r3, r10 - adwc $0, r11 - movl r10, (r9)+ - - sobgtr r7, L(tp1) - movl r11, r0 - ret - -L(1n0): emul r1, r6, $0, r2 - addl2 r11, r2 - adwc r6, r3 - movl r2, (r9)+ - movl (r8)+, r1 - jgeq L(1p1) -L(1n1): emul r1, r6, $0, r10 - addl2 r3, r10 - adwc r6, r11 - movl r10, (r9)+ - - sobgtr r7, L(tp1) - movl r11, r0 - ret - -L(v0_big): - jlbc r4, L(2) - -C Loop for v0 >= 0x80000000 -L(tp2): movl (r8)+, r1 - jlss L(2n0) - emul r1, r6, $0, r2 - addl2 r11, r2 - adwc r1, r3 - movl r2, (r9)+ -L(2): movl (r8)+, r1 - jlss L(2n1) -L(2p1): emul r1, r6, $0, r10 - addl2 r3, r10 - adwc r1, r11 - movl r10, (r9)+ - - sobgtr r7, L(tp2) - movl r11, r0 - ret - -L(2n0): emul r1, r6, $0, r2 - addl2 r1, r3 - addl2 r11, r2 - adwc r6, r3 - movl r2, (r9)+ - movl (r8)+, r1 - jgeq L(2p1) -L(2n1): emul r1, r6, $0, r10 - addl2 r1, r11 - addl2 r3, r10 - adwc r6, r11 - movl r10, (r9)+ - - sobgtr r7, L(tp2) - movl r11, r0 - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/vax/rshift.asm deleted file mode 100644 index 00b2daac01e5d15fa4973cdff934ac48c114702a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/rshift.asm +++ /dev/null @@ -1,57 +0,0 @@ -dnl VAX mpn_rshift -- right shift. - -dnl Copyright 1999-2001, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_rshift) - .word 0x1c0 - movl 4(ap), r7 - movl 8(ap), r6 - movl 12(ap), r1 - movl 16(ap), r8 - - movl (r6)+, r2 - subl3 r8, $32, r8 - ashl r8, r2, r0 - decl r1 - jeql L(end) - -L(top): movl (r6)+, r3 - ashq r8, r2, r4 - movl r5, (r7)+ - movl r3, r2 - sobgtr r1, L(top) - -L(end): clrl r3 - ashq r8, r2, r4 - movl r5, (r7) - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/vax/sub_n.asm deleted file mode 100644 index 2844ef2cc1c537622e8b1a91dc9b452caea4e3ab..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/sub_n.asm +++ /dev/null @@ -1,64 +0,0 @@ -dnl VAX mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -dnl store difference in a third limb vector. - -dnl Copyright 1999, 2000, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_sub_n) - .word 0x0 - movl 16(ap), r0 - movl 12(ap), r1 - movl 8(ap), r2 - movl 4(ap), r3 - mnegl r0, r5 - addl2 $3, r0 - ashl $-2, r0, r0 C unroll loop count - bicl2 $-4, r5 C mask out low 2 bits - movaq (r5)[r5], r5 C 9x - jmp L(top)[r5] - -L(top): movl (r2)+, r4 - sbwc (r1)+, r4 - movl r4, (r3)+ - movl (r2)+, r4 - sbwc (r1)+, r4 - movl r4, (r3)+ - movl (r2)+, r4 - sbwc (r1)+, r4 - movl r4, (r3)+ - movl (r2)+, r4 - sbwc (r1)+, r4 - movl r4, (r3)+ - sobgtr r0, L(top) - - adwc r0, r0 - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/submul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/vax/submul_1.asm deleted file mode 100644 index 60d47fcd6f73c0e6b2d8dc29e386c0ba8a1fad6c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/vax/submul_1.asm +++ /dev/null @@ -1,124 +0,0 @@ -dnl VAX mpn_submul_1 -- Multiply a limb vector with a limb and subtract the -dnl result from a second limb vector. - -dnl Copyright 1992, 1994, 1996, 2000, 2012 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_submul_1) - .word 0xfc0 - movl 12(ap), r4 - movl 8(ap), r8 - movl 4(ap), r9 - clrl r3 - incl r4 - ashl $-1, r4, r7 - clrl r11 - movl 16(ap), r6 - jlss L(v0_big) - jlbc r4, L(1) - -C Loop for v0 < 0x80000000 -L(tp1): movl (r8)+, r1 - jlss L(1n0) - emul r1, r6, $0, r2 - addl2 r11, r2 - adwc $0, r3 - subl2 r2, (r9)+ - adwc $0, r3 -L(1): movl (r8)+, r1 - jlss L(1n1) -L(1p1): emul r1, r6, $0, r10 - addl2 r3, r10 - adwc $0, r11 - subl2 r10, (r9)+ - adwc $0, r11 - - sobgtr r7, L(tp1) - movl r11, r0 - ret - -L(1n0): emul r1, r6, $0, r2 - addl2 r11, r2 - adwc r6, r3 - subl2 r2, (r9)+ - adwc $0, r3 - movl (r8)+, r1 - jgeq L(1p1) -L(1n1): emul r1, r6, $0, r10 - addl2 r3, r10 - adwc r6, r11 - subl2 r10, (r9)+ - adwc $0, r11 - - sobgtr r7, L(tp1) - movl r11, r0 - ret - -L(v0_big): - jlbc r4, L(2) - -C Loop for v0 >= 0x80000000 -L(tp2): movl (r8)+, r1 - jlss L(2n0) - emul r1, r6, $0, r2 - addl2 r11, r2 - adwc r1, r3 - subl2 r2, (r9)+ - adwc $0, r3 -L(2): movl (r8)+, r1 - jlss L(2n1) -L(2p1): emul r1, r6, $0, r10 - addl2 r3, r10 - adwc r1, r11 - subl2 r10, (r9)+ - adwc $0, r11 - - sobgtr r7, L(tp2) - movl r11, r0 - ret - -L(2n0): emul r1, r6, $0, r2 - addl2 r11, r2 - adwc r6, r3 - subl2 r2, (r9)+ - adwc r1, r3 - movl (r8)+, r1 - jgeq L(2p1) -L(2n1): emul r1, r6, $0, r10 - addl2 r3, r10 - adwc r6, r11 - subl2 r10, (r9)+ - adwc r1, r11 - - sobgtr r7, L(tp2) - movl r11, r0 - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/README b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/README deleted file mode 100644 index 8d7ac9080ddcf6ef3ab31488493b9147ca0ed17a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/README +++ /dev/null @@ -1,525 +0,0 @@ -Copyright 1999-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - - X86 MPN SUBROUTINES - - -This directory contains mpn functions for various 80x86 chips. - - -CODE ORGANIZATION - - x86 i386, generic - x86/i486 i486 - x86/pentium Intel Pentium (P5, P54) - x86/pentium/mmx Intel Pentium with MMX (P55) - x86/p6 Intel Pentium Pro - x86/p6/mmx Intel Pentium II, III - x86/p6/p3mmx Intel Pentium III - x86/k6 \ AMD K6 - x86/k6/mmx / - x86/k6/k62mmx AMD K6-2 - x86/k7 \ AMD Athlon - x86/k7/mmx / - x86/pentium4 \ - x86/pentium4/mmx | Intel Pentium 4 - x86/pentium4/sse2 / - - -The top-level x86 directory contains blended style code, meant to be -reasonable on all x86s. - - - -STATUS - -The code is well-optimized for AMD and Intel chips, but there's nothing -specific for Cyrix chips, nor for actual 80386 and 80486 chips. - - - -ASM FILES - -The x86 .asm files are BSD style assembler code, first put through m4 for -macro processing. The generic mpn/asm-defs.m4 is used, together with -mpn/x86/x86-defs.m4. See comments in those files. - -The code is meant for use with GNU "gas" or a system "as". There's no -support for assemblers that demand Intel style code. - - - -STACK FRAME - -m4 macros are used to define the parameters passed on the stack, and these -act like comments on what the stack frame looks like too. For example, -mpn_mul_1() has the following. - - defframe(PARAM_MULTIPLIER, 16) - defframe(PARAM_SIZE, 12) - defframe(PARAM_SRC, 8) - defframe(PARAM_DST, 4) - -PARAM_MULTIPLIER becomes `FRAME+16(%esp)', and the others similarly. The -return address is at offset 0, but there's not normally any need to access -that. - -FRAME is redefined as necessary through the code so it's the number of bytes -pushed on the stack, and hence the offsets in the parameter macros stay -correct. At the start of a routine FRAME should be zero. - - deflit(`FRAME',0) - ... - deflit(`FRAME',4) - ... - deflit(`FRAME',8) - ... - -Helper macros FRAME_pushl(), FRAME_popl(), FRAME_addl_esp() and -FRAME_subl_esp() exist to adjust FRAME for the effect of those instructions, -and can be used instead of explicit definitions if preferred. -defframe_pushl() is a combination FRAME_pushl() and defframe(). - -There's generally some slackness in redefining FRAME. If new values aren't -going to get used then the redefinitions are omitted to keep from cluttering -up the code. This happens for instance at the end of a routine, where there -might be just four pops and then a ret, so FRAME isn't getting used. - -Local variables and saved registers can be similarly defined, with negative -offsets representing stack space below the initial stack pointer. For -example, - - defframe(SAVE_ESI, -4) - defframe(SAVE_EDI, -8) - defframe(VAR_COUNTER,-12) - - deflit(STACK_SPACE, 12) - -Here STACK_SPACE gets used in a "subl $STACK_SPACE, %esp" to allocate the -space, and that instruction must be followed by a redefinition of FRAME -(setting it equal to STACK_SPACE) to reflect the change in %esp. - -Definitions for pushed registers are only put in when they're going to be -used. If registers are just saved and restored with pushes and pops then -definitions aren't made. - - - -ASSEMBLER EXPRESSIONS - -Only addition and subtraction seem to be universally available, certainly -that's all the Solaris 8 "as" seems to accept. If expressions are wanted -then m4 eval() should be used. - -In particular note that a "/" anywhere in a line starts a comment in Solaris -"as", and in some configurations of gas too. - - addl $32/2, %eax <-- wrong - - addl $eval(32/2), %eax <-- right - -Binutils gas/config/tc-i386.c has a choice between "/" being a comment -anywhere in a line, or only at the start. FreeBSD patches 2.9.1 to select -the latter, and from 2.9.5 it's the default for GNU/Linux too. - - - -ASSEMBLER COMMENTS - -Solaris "as" doesn't support "#" commenting, using /* */ instead. For that -reason "C" commenting is used (see asm-defs.m4) and the intermediate ".s" -files have no comments. - -Any comments before include(`../config.m4') must use m4 "dnl", since it's -only after the include that "C" is available. By convention "dnl" is also -used for comments about m4 macros. - - - -TEMPORARY LABELS - -Temporary numbered labels like "1:" used as "1f" or "1b" are available in -"gas" and Solaris "as", but not in SCO "as". Normal L() labels should be -used instead, possibly with a counter to make them unique, see jadcl0() in -x86-defs.m4 for instance. A separate counter for each macro makes it -possible to nest them, for instance movl_text_address() can be used within -an ASSERT(). - -"1:" etc must be avoided in gcc __asm__ blocks too. "%=" for generating a -unique number looks like a good alternative, but is that actually a -documented feature? In any case this problem doesn't currently arise. - - - -ZERO DISPLACEMENTS - -In a couple of places addressing modes like 0(%ebx) with a byte-sized zero -displacement are wanted, rather than (%ebx) with no displacement. These are -either for computed jumps or to get desirable code alignment. Explicit -.byte sequences are used to ensure the assembler doesn't turn 0(%ebx) into -(%ebx). The Zdisp() macro in x86-defs.m4 is used for this. - -Current gas 2.9.5 or recent 2.9.1 leave 0(%ebx) as written, but old gas -1.92.3 changes it. In general changing would be the sort of "optimization" -an assembler might perform, hence explicit ".byte"s are used where -necessary. - - - -SHLD/SHRD INSTRUCTIONS - -The %cl count forms of double shift instructions like "shldl %cl,%eax,%ebx" -must be written "shldl %eax,%ebx" for some assemblers. gas takes either, -Solaris "as" doesn't allow %cl, gcc generates %cl for gas and NeXT (which is -gas), and omits %cl elsewhere. - -For GMP an autoconf test GMP_ASM_X86_SHLDL_CL is used to determine whether -%cl should be used, and the macros shldl, shrdl, shldw and shrdw in -mpn/x86/x86-defs.m4 pass through or omit %cl as necessary. See the comments -with those macros for usage. - - - -IMUL INSTRUCTION - -GCC config/i386/i386.md (cvs rev 1.187, 21 Oct 00) under *mulsi3_1 notes -that the following two forms produce identical object code - - imul $12, %eax - imul $12, %eax, %eax - -but that the former isn't accepted by some assemblers, in particular the SCO -OSR5 COFF assembler. GMP follows GCC and uses only the latter form. - -(This applies only to immediate operands, the three operand form is only -valid with an immediate.) - - - -DIRECTION FLAG - -The x86 calling conventions say that the direction flag should be clear at -function entry and exit. (See iBCS2 and SVR4 ABI books, references below.) -Although this has been so since the year dot, it's not absolutely clear -whether it's universally respected. Since it's better to be safe than -sorry, GMP follows glibc and does a "cld" if it depends on the direction -flag being clear. This happens only in a few places. - - - -POSITION INDEPENDENT CODE - - Coding Style - - Defining the symbol PIC in m4 processing selects SVR4 / ELF style - position independent code. This is necessary for shared libraries - because they can be mapped into different processes at different virtual - addresses. Actually, relocations are allowed but text pages with - relocations aren't shared, defeating the purpose of a shared library. - - The GOT is used to access global data, and the PLT is used for - functions. The use of the PLT adds a fixed cost to every function call, - and the GOT adds a cost to any function accessing global variables. - These are small but might be noticeable when working with small - operands. - - Scope - - It's intended, as a matter of policy, that references within libgmp are - resolved within libgmp. Certainly there's no need for an application to - replace any internals, and we take the view that there's no value in an - application subverting anything documented either. - - Resolving references within libgmp in theory means calls can be made with a - plain PC-relative call instruction, which is faster and smaller than going - through the PLT, and data references can be similarly PC-relative, saving a - GOT entry and fetch from there. Unfortunately the normal linker behaviour - doesn't allow us to do this. - - By default an R_386_PC32 PC-relative reference, either for a call or for - data, is left in libgmp.so by the linker so that it can be resolved at - runtime to a location in the application or another shared library. This - means a text segment relocation which we don't want. - - -Bsymbolic - - Under the "-Bsymbolic" option, the linker resolves references to symbols - within libgmp.so. This gives us the desired effect for R_386_PC32, - ie. it's resolved at link time. It also resolves R_386_PLT32 calls - directly to their target without creating a PLT entry (though if this is - done to normal compiler-generated code it still leaves a setup of %ebx - to _GLOBAL_OFFSET_TABLE_ which may then be unnecessary). - - Unfortunately -Bsymbolic does bad things to global variables defined in - a shared library but accessed by non-PIC code from the mainline (or a - static library). - - The problem is that the mainline needs a fixed data address to avoid - text segment relocations, so space is allocated in its data segment and - the value from the variable is copied from the shared library's data - segment when the library is loaded. Under -Bsymbolic, however, - references in the shared library are then resolved still to the shared - library data area. Not surprisingly it bombs badly to have mainline - code and library code accessing different locations for what should be - one variable. - - Note that this -Bsymbolic effect for the shared library is not just for - R_386_PC32 offsets which might have been cooked up in assembler, but is - done also for the contents of GOT entries. -Bsymbolic simply applies a - general rule that symbols are resolved first from the local module. - - Visibility Attributes - - GCC __attribute__ ((visibility ("protected"))), which is available in - recent versions, eg. 3.3, is probably what we'd like to use. It makes - gcc generate plain PC-relative calls to indicated functions, and directs - the linker to resolve references to the given function within the link - module. - - Unfortunately, as of debian binutils 2.13.90.0.16 at least, the - resulting libgmp.so comes out with text segment relocations, references - are not resolved at link time. If the gcc description is to be believed - this is this not how it should work. If a symbol cannot be overridden - by another module then surely references within that module can be - resolved immediately (ie. at link time). - - Present - - In any case, all this means that we have no optimizations we can - usefully make to function or variable usages, neither for assembler nor - C code. Perhaps in the future the visibility attribute will work as - we'd like. - - - - -GLOBAL OFFSET TABLE - -The magic _GLOBAL_OFFSET_TABLE_ used by code establishing the address of the -GOT sometimes requires an extra underscore prefix. SVR4 systems and NetBSD -don't need a prefix, OpenBSD does need one. Note that NetBSD and OpenBSD -are both a.out underscore systems, so the prefix for _GLOBAL_OFFSET_TABLE_ -is not simply the same as the prefix for ordinary globals. - -In any case in the asm code we write _GLOBAL_OFFSET_TABLE_ and let a macro -in x86-defs.m4 add an extra underscore if required (according to a configure -test). - -Old gas 1.92.3 which comes with FreeBSD 2.2.8 gets a segmentation fault when -asked to assemble the following, - - L1: - addl $_GLOBAL_OFFSET_TABLE_+[.-L1], %ebx - -It seems that using the label in the same instruction it refers to is the -problem, since a nop in between works. But the simplest workaround is to -follow gcc and omit the +[.-L1] since it does nothing, - - addl $_GLOBAL_OFFSET_TABLE_, %ebx - -Current gas 2.10 generates incorrect object code when %eax is used in such a -construction (with or without +[.-L1]), - - addl $_GLOBAL_OFFSET_TABLE_, %eax - -The R_386_GOTPC gets a displacement of 2 rather than the 1 appropriate for -the 1 byte opcode of "addl $n,%eax". The best workaround is just to use any -other register, since then it's a two byte opcode+mod/rm. GCC for example -always uses %ebx (which is needed for calls through the PLT). - -A similar problem occurs in an leal (again with or without a +[.-L1]), - - leal _GLOBAL_OFFSET_TABLE_(%edi), %ebx - -This time the R_386_GOTPC gets a displacement of 0 rather than the 2 -appropriate for the opcode and mod/rm, making this form unusable. - - - - -SIMPLE LOOPS - -The overheads in setting up for an unrolled loop can mean that at small -sizes a simple loop is faster. Making small sizes go fast is important, -even if it adds a cycle or two to bigger sizes. To this end various -routines choose between a simple loop and an unrolled loop according to -operand size. The path to the simple loop, or to special case code for -small sizes, is always as fast as possible. - -Adding a simple loop requires a conditional jump to choose between the -simple and unrolled code. The size of a branch misprediction penalty -affects whether a simple loop is worthwhile. - -The convention is for an m4 definition UNROLL_THRESHOLD to set the crossover -point, with sizes < UNROLL_THRESHOLD using the simple loop, sizes >= -UNROLL_THRESHOLD using the unrolled loop. If position independent code adds -a couple of cycles to an unrolled loop setup, the threshold will vary with -PIC or non-PIC. Something like the following is typical. - - deflit(UNROLL_THRESHOLD, ifdef(`PIC',10,8)) - -There's no automated way to determine the threshold. Setting it to a small -value and then to a big value makes it possible to measure the simple and -unrolled loops each over a range of sizes, from which the crossover point -can be determined. Alternately, just adjust the threshold up or down until -there's no more speedups. - - - -UNROLLED LOOP CODING - -The x86 addressing modes allow a byte displacement of -128 to +127, making -it possible to access 256 bytes, which is 64 limbs, without adjusting -pointer registers within the loop. Dword sized displacements can be used -too, but they increase code size, and unrolling to 64 ought to be enough. - -When unrolling to the full 64 limbs/loop, the limb at the top of the loop -will have a displacement of -128, so pointers have to have a corresponding -+128 added before entering the loop. When unrolling to 32 limbs/loop -displacements 0 to 127 can be used with 0 at the top of the loop and no -adjustment needed to the pointers. - -Where 64 limbs/loop is supported, the +128 adjustment is done only when 64 -limbs/loop is selected. Usually the gain in speed using 64 instead of 32 or -16 is small, so support for 64 limbs/loop is generally only for comparison. - - - -COMPUTED JUMPS - -When working from least significant limb to most significant limb (most -routines) the computed jump and pointer calculations in preparation for an -unrolled loop are as follows. - - S = operand size in limbs - N = number of limbs per loop (UNROLL_COUNT) - L = log2 of unrolling (UNROLL_LOG2) - M = mask for unrolling (UNROLL_MASK) - C = code bytes per limb in the loop - B = bytes per limb (4 for x86) - - computed jump (-S & M) * C + entrypoint - subtract from pointers (-S & M) * B - initial loop counter (S-1) >> L - displacements 0 to B*(N-1) - -The loop counter is decremented at the end of each loop, and the looping -stops when the decrement takes the counter to -1. The displacements are for -the addressing accessing each limb, eg. a load with "movl disp(%ebx), %eax". - -Usually the multiply by "C" can be handled without an imul, using instead an -leal, or a shift and subtract. - -When working from most significant to least significant limb (eg. mpn_lshift -and mpn_copyd), the calculations change as follows. - - add to pointers (-S & M) * B - displacements 0 to -B*(N-1) - - - -OLD GAS 1.92.3 - -This version comes with FreeBSD 2.2.8 and has a couple of gremlins that -affect GMP code. - -Firstly, an expression involving two forward references to labels comes out -as zero. For example, - - addl $bar-foo, %eax - foo: - nop - bar: - -This should lead to "addl $1, %eax", but it comes out as "addl $0, %eax". -When only one forward reference is involved, it works correctly, as for -example, - - foo: - addl $bar-foo, %eax - nop - bar: - -Secondly, an expression involving two labels can't be used as the -displacement for an leal. For example, - - foo: - nop - bar: - leal bar-foo(%eax,%ebx,8), %ecx - -A slightly cryptic error is given, "Unimplemented segment type 0 in -parse_operand". When only one label is used it's ok, and the label can be a -forward reference too, as for example, - - leal foo(%eax,%ebx,8), %ecx - nop - foo: - -These problems only affect PIC computed jump calculations. The workarounds -are just to do an leal without a displacement and then an addl, and to make -sure the code is placed so that there's at most one forward reference in the -addl. - - - -REFERENCES - -"Intel Architecture Software Developer's Manual", volumes 1, 2a, 2b, 3a, 3b, -2006, order numbers 253665 through 253669. Available on-line, - - ftp://download.intel.com/design/Pentium4/manuals/25366518.pdf - ftp://download.intel.com/design/Pentium4/manuals/25366618.pdf - ftp://download.intel.com/design/Pentium4/manuals/25366718.pdf - ftp://download.intel.com/design/Pentium4/manuals/25366818.pdf - ftp://download.intel.com/design/Pentium4/manuals/25366918.pdf - - -"System V Application Binary Interface", Unix System Laboratories Inc, 1992, -published by Prentice Hall, ISBN 0-13-880410-9. And the "Intel386 Processor -Supplement", AT&T, 1991, ISBN 0-13-877689-X. These have details of calling -conventions and ELF shared library PIC coding. Versions of both available -on-line, - - http://www.sco.com/developer/devspecs - -"Intel386 Family Binary Compatibility Specification 2", Intel Corporation, -published by McGraw-Hill, 1991, ISBN 0-07-031219-2. (Same as the above 386 -ABI supplement.) - - - ----------------- -Local variables: -mode: text -fill-column: 76 -End: diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/aors_n.asm deleted file mode 100644 index 5d359f59b6583f9e3ab73496e7149725d90de9a3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/aors_n.asm +++ /dev/null @@ -1,202 +0,0 @@ -dnl x86 mpn_add_n/mpn_sub_n -- mpn addition and subtraction. - -dnl Copyright 1992, 1994-1996, 1999-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C P5 3.375 -C P6 3.125 -C K6 3.5 -C K7 2.25 -C P4 8.75 - - -ifdef(`OPERATION_add_n',` - define(M4_inst, adcl) - define(M4_function_n, mpn_add_n) - define(M4_function_nc, mpn_add_nc) - -',`ifdef(`OPERATION_sub_n',` - define(M4_inst, sbbl) - define(M4_function_n, mpn_sub_n) - define(M4_function_nc, mpn_sub_nc) - -',`m4_error(`Need OPERATION_add_n or OPERATION_sub_n -')')') - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc) - - -C mp_limb_t M4_function_n (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size); -C mp_limb_t M4_function_nc (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size, mp_limb_t carry); - -defframe(PARAM_CARRY,20) -defframe(PARAM_SIZE, 16) -defframe(PARAM_SRC2, 12) -defframe(PARAM_SRC1, 8) -defframe(PARAM_DST, 4) - - TEXT - ALIGN(8) - -PROLOGUE(M4_function_nc) -deflit(`FRAME',0) - - pushl %edi FRAME_pushl() - pushl %esi FRAME_pushl() - - movl PARAM_DST,%edi - movl PARAM_SRC1,%esi - movl PARAM_SRC2,%edx - movl PARAM_SIZE,%ecx - - movl %ecx,%eax - shrl $3,%ecx C compute count for unrolled loop - negl %eax - andl $7,%eax C get index where to start loop - jz L(oopgo) C necessary special case for 0 - incl %ecx C adjust loop count - shll $2,%eax C adjustment for pointers... - subl %eax,%edi C ... since they are offset ... - subl %eax,%esi C ... by a constant when we ... - subl %eax,%edx C ... enter the loop - shrl $2,%eax C restore previous value - -ifdef(`PIC',` - C Calculate start address in loop for PIC. Due to limitations in - C old gas, LF(M4_function_n,oop)-L(0a)-3 cannot be put into the leal - call L(0a) -L(0a): leal (%eax,%eax,8),%eax - addl (%esp),%eax - addl $L(oop)-L(0a)-3,%eax - addl $4,%esp -',` - C Calculate start address in loop for non-PIC. - leal L(oop)-3(%eax,%eax,8),%eax -') - - C These lines initialize carry from the 5th parameter. Should be - C possible to simplify. - pushl %ebp FRAME_pushl() - movl PARAM_CARRY,%ebp - shrl %ebp C shift bit 0 into carry - popl %ebp FRAME_popl() - - jmp *%eax C jump into loop - -EPILOGUE() - - - ALIGN(16) -PROLOGUE(M4_function_n) -deflit(`FRAME',0) - - pushl %edi FRAME_pushl() - pushl %esi FRAME_pushl() - - movl PARAM_DST,%edi - movl PARAM_SRC1,%esi - movl PARAM_SRC2,%edx - movl PARAM_SIZE,%ecx - - movl %ecx,%eax - shrl $3,%ecx C compute count for unrolled loop - negl %eax - andl $7,%eax C get index where to start loop - jz L(oop) C necessary special case for 0 - incl %ecx C adjust loop count - shll $2,%eax C adjustment for pointers... - subl %eax,%edi C ... since they are offset ... - subl %eax,%esi C ... by a constant when we ... - subl %eax,%edx C ... enter the loop - shrl $2,%eax C restore previous value - -ifdef(`PIC',` - C Calculate start address in loop for PIC. Due to limitations in - C some assemblers, L(oop)-L(0b)-3 cannot be put into the leal - call L(0b) -L(0b): leal (%eax,%eax,8),%eax - addl (%esp),%eax - addl $L(oop)-L(0b)-3,%eax - addl $4,%esp -',` - C Calculate start address in loop for non-PIC. - leal L(oop)-3(%eax,%eax,8),%eax -') - jmp *%eax C jump into loop - -L(oopgo): - pushl %ebp FRAME_pushl() - movl PARAM_CARRY,%ebp - shrl %ebp C shift bit 0 into carry - popl %ebp FRAME_popl() - - ALIGN(16) -L(oop): movl (%esi),%eax - M4_inst (%edx),%eax - movl %eax,(%edi) - movl 4(%esi),%eax - M4_inst 4(%edx),%eax - movl %eax,4(%edi) - movl 8(%esi),%eax - M4_inst 8(%edx),%eax - movl %eax,8(%edi) - movl 12(%esi),%eax - M4_inst 12(%edx),%eax - movl %eax,12(%edi) - movl 16(%esi),%eax - M4_inst 16(%edx),%eax - movl %eax,16(%edi) - movl 20(%esi),%eax - M4_inst 20(%edx),%eax - movl %eax,20(%edi) - movl 24(%esi),%eax - M4_inst 24(%edx),%eax - movl %eax,24(%edi) - movl 28(%esi),%eax - M4_inst 28(%edx),%eax - movl %eax,28(%edi) - leal 32(%edi),%edi - leal 32(%esi),%esi - leal 32(%edx),%edx - decl %ecx - jnz L(oop) - - sbbl %eax,%eax - negl %eax - - popl %esi - popl %edi - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/aorsmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/aorsmul_1.asm deleted file mode 100644 index 54a8905441d63ad418dab51a22f807844a5235fc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/aorsmul_1.asm +++ /dev/null @@ -1,156 +0,0 @@ -dnl x86 __gmpn_addmul_1 (for 386 and 486) -- Multiply a limb vector with a -dnl limb and add the result to a second limb vector. - -dnl Copyright 1992, 1994, 1997, 1999-2002, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C P5 14.75 -C P6 model 0-8,10-12 7.5 -C P6 model 9 (Banias) 6.7 -C P6 model 13 (Dothan) 6.75 -C P4 model 0 (Willamette) 24.0 -C P4 model 1 (?) 24.0 -C P4 model 2 (Northwood) 24.0 -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C Intel Atom -C AMD K6 12.5 -C AMD K7 5.25 -C AMD K8 -C AMD K10 - - -ifdef(`OPERATION_addmul_1',` - define(M4_inst, addl) - define(M4_function_1, mpn_addmul_1) - -',`ifdef(`OPERATION_submul_1',` - define(M4_inst, subl) - define(M4_function_1, mpn_submul_1) - -',`m4_error(`Need OPERATION_addmul_1 or OPERATION_submul_1 -')')') - -MULFUNC_PROLOGUE(mpn_addmul_1 mpn_submul_1) - - -C mp_limb_t M4_function_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t mult); - -define(PARAM_MULTIPLIER, `FRAME+16(%esp)') -define(PARAM_SIZE, `FRAME+12(%esp)') -define(PARAM_SRC, `FRAME+8(%esp)') -define(PARAM_DST, `FRAME+4(%esp)') - - TEXT - ALIGN(8) - -PROLOGUE(M4_function_1) -deflit(`FRAME',0) - - pushl %edi - pushl %esi - pushl %ebx - pushl %ebp -deflit(`FRAME',16) - - movl PARAM_DST,%edi - movl PARAM_SRC,%esi - movl PARAM_SIZE,%ecx - - xorl %ebx,%ebx - andl $3,%ecx - jz L(end0) - -L(oop0): - movl (%esi),%eax - mull PARAM_MULTIPLIER - leal 4(%esi),%esi - addl %ebx,%eax - movl $0,%ebx - adcl %ebx,%edx - M4_inst %eax,(%edi) - adcl %edx,%ebx C propagate carry into cylimb - - leal 4(%edi),%edi - decl %ecx - jnz L(oop0) - -L(end0): - movl PARAM_SIZE,%ecx - shrl $2,%ecx - jz L(end) - - ALIGN(8) -L(oop): movl (%esi),%eax - mull PARAM_MULTIPLIER - addl %eax,%ebx - movl $0,%ebp - adcl %edx,%ebp - - movl 4(%esi),%eax - mull PARAM_MULTIPLIER - M4_inst %ebx,(%edi) - adcl %eax,%ebp C new lo + cylimb - movl $0,%ebx - adcl %edx,%ebx - - movl 8(%esi),%eax - mull PARAM_MULTIPLIER - M4_inst %ebp,4(%edi) - adcl %eax,%ebx C new lo + cylimb - movl $0,%ebp - adcl %edx,%ebp - - movl 12(%esi),%eax - mull PARAM_MULTIPLIER - M4_inst %ebx,8(%edi) - adcl %eax,%ebp C new lo + cylimb - movl $0,%ebx - adcl %edx,%ebx - - M4_inst %ebp,12(%edi) - adcl $0,%ebx C propagate carry into cylimb - - leal 16(%esi),%esi - leal 16(%edi),%edi - decl %ecx - jnz L(oop) - -L(end): movl %ebx,%eax - - popl %ebp - popl %ebx - popl %esi - popl %edi - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aorrlsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aorrlsh1_n.asm deleted file mode 100644 index cd1a650022f6d3fbc4a6a2603d1fc0c5ce2364eb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aorrlsh1_n.asm +++ /dev/null @@ -1,53 +0,0 @@ -dnl Intel Atom mpn_rsblsh1_n -- rp[] = (vp[] << 1) - up[] - -dnl Contributed to the GNU project by Marco Bodrato. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -define(LSH, 1) -define(RSH, 31) - -ifdef(`OPERATION_addlsh1_n', ` - define(M4_inst, adc) - define(M4_opp, sub) - define(M4_function, mpn_addlsh1_n) - define(M4_function_c, mpn_addlsh1_nc) -',`ifdef(`OPERATION_rsblsh1_n', ` - define(M4_inst, sbb) - define(M4_opp, add) - define(M4_function, mpn_rsblsh1_n) - define(M4_function_c, mpn_rsblsh1_nc) -',`m4_error(`Need OPERATION_addlsh1_n or OPERATION_rsblsh1_n -')')') - -MULFUNC_PROLOGUE(mpn_addlsh1_n mpn_addlsh1_nc mpn_rsblsh1_n mpn_rsblsh1_nc) - -include_mpn(`x86/atom/aorrlshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aorrlsh2_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aorrlsh2_n.asm deleted file mode 100644 index 10f4419de9e7a4230a53fa2d1e7578df751e988c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aorrlsh2_n.asm +++ /dev/null @@ -1,53 +0,0 @@ -dnl Intel Atom mpn_addlsh2_n/mpn_rsblsh2_n -- rp[] = (vp[] << 2) +- up[] - -dnl Contributed to the GNU project by Marco Bodrato. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -define(LSH, 2) -define(RSH, 30) - -ifdef(`OPERATION_addlsh2_n', ` - define(M4_inst, adcl) - define(M4_opp, subl) - define(M4_function, mpn_addlsh2_n) - define(M4_function_c, mpn_addlsh2_nc) -',`ifdef(`OPERATION_rsblsh2_n', ` - define(M4_inst, sbbl) - define(M4_opp, addl) - define(M4_function, mpn_rsblsh2_n) - define(M4_function_c, mpn_rsblsh2_nc) -',`m4_error(`Need OPERATION_addlsh2_n or OPERATION_rsblsh2_n -')')') - -MULFUNC_PROLOGUE(mpn_addlsh2_n mpn_addlsh2_nc mpn_rsblsh2_n mpn_rsblsh2_nc) - -include_mpn(`x86/atom/aorrlshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aorrlshC_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aorrlshC_n.asm deleted file mode 100644 index 71cfe490d6e8736f4e036e0f8cd00ecfe9b89508..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aorrlshC_n.asm +++ /dev/null @@ -1,156 +0,0 @@ -dnl Intel Atom mpn_addlshC_n/mpn_rsblshC_n -- rp[] = (vp[] << C) +- up[] - -dnl Contributed to the GNU project by Marco Bodrato. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C mp_limb_t mpn_addlshC_n (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size); -C mp_limb_t mpn_addlshC_nc (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size, mp_limb_t carry); -C mp_limb_t mpn_rsblshC_n (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size); -C mp_limb_t mpn_rsblshC_nc (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size, mp_signed_limb_t carry); - -C cycles/limb -C P5 -C P6 model 0-8,10-12 -C P6 model 9 (Banias) -C P6 model 13 (Dothan) -C P4 model 0 (Willamette) -C P4 model 1 (?) -C P4 model 2 (Northwood) -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C Intel Atom 6 -C AMD K6 -C AMD K7 -C AMD K8 -C AMD K10 - -defframe(PARAM_CORB, 20) -defframe(PARAM_SIZE, 16) -defframe(PARAM_DBLD, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl re-use parameter space -define(VAR_COUNT,`PARAM_SIZE') -define(SAVE_EBP,`PARAM_DBLD') -define(SAVE_VP,`PARAM_SRC') -define(SAVE_UP,`PARAM_DST') - -define(M, eval(m4_lshift(1,LSH))) -define(`rp', `%edi') -define(`up', `%esi') -define(`vp', `%ebx') - -ASM_START() - TEXT - ALIGN(8) - -PROLOGUE(M4_function_c) -deflit(`FRAME',0) - movl PARAM_CORB, %eax - movl %eax, %edx - shr $LSH, %edx - andl $1, %edx - M4_opp %edx, %eax - jmp L(start_nc) -EPILOGUE() - -PROLOGUE(M4_function) -deflit(`FRAME',0) - - xor %eax, %eax - xor %edx, %edx -L(start_nc): - push rp FRAME_pushl() - - mov PARAM_SIZE, %ecx C size - mov PARAM_DST, rp - mov up, SAVE_UP - incl %ecx C size + 1 - mov PARAM_SRC, up - mov vp, SAVE_VP - shr %ecx C (size+1)\2 - mov PARAM_DBLD, vp - mov %ebp, SAVE_EBP - mov %ecx, VAR_COUNT - jnc L(entry) C size odd - - shr %edx C size even - mov (vp), %ecx - lea 4(vp), vp - lea (%eax,%ecx,M), %edx - mov %ecx, %eax - lea -4(up), up - lea -4(rp), rp - jmp L(enteven) - - ALIGN(16) -L(oop): - lea (%eax,%ecx,M), %ebp - shr $RSH, %ecx - mov 4(vp), %eax - shr %edx - lea 8(vp), vp - M4_inst (up), %ebp - lea (%ecx,%eax,M), %edx - mov %ebp, (rp) -L(enteven): - M4_inst 4(up), %edx - lea 8(up), up - mov %edx, 4(rp) - adc %edx, %edx - shr $RSH, %eax - lea 8(rp), rp -L(entry): - mov (vp), %ecx - decl VAR_COUNT - jnz L(oop) - - lea (%eax,%ecx,M), %ebp - shr $RSH, %ecx - shr %edx - mov SAVE_VP, vp - M4_inst (up), %ebp - mov %ecx, %eax - mov SAVE_UP, up - M4_inst $0, %eax - mov %ebp, (rp) - mov SAVE_EBP, %ebp - pop rp FRAME_popl() - ret -EPILOGUE() - -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aors_n.asm deleted file mode 100644 index 45ec287c3a173c1fc309226e2460ee24b267ddb9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aors_n.asm +++ /dev/null @@ -1,159 +0,0 @@ -dnl Intel Atom mpn_add_n/mpn_sub_n -- rp[] = up[] +- vp[]. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl Contributed to the GNU project by Marco Bodrato. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C P5 -C P6 model 0-8,10-12 -C P6 model 9 (Banias) -C P6 model 13 (Dothan) -C P4 model 0 (Willamette) -C P4 model 1 (?) -C P4 model 2 (Northwood) -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C Intel Atom 3 -C AMD K6 -C AMD K7 -C AMD K8 -C AMD K10 - -ifdef(`OPERATION_add_n', ` - define(M4_inst, adcl) - define(M4_function_n, mpn_add_n) - define(M4_function_nc, mpn_add_nc) - define(M4_description, add) -',`ifdef(`OPERATION_sub_n', ` - define(M4_inst, sbbl) - define(M4_function_n, mpn_sub_n) - define(M4_function_nc, mpn_sub_nc) - define(M4_description, subtract) -',`m4_error(`Need OPERATION_add_n or OPERATION_sub_n -')')') - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc) - -C mp_limb_t M4_function_n (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size); -C mp_limb_t M4_function_nc (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size, mp_limb_t carry); -C -C Calculate src1,size M4_description src2,size, and store the result in -C dst,size. The return value is the carry bit from the top of the result (1 -C or 0). -C -C The _nc version accepts 1 or 0 for an initial carry into the low limb of -C the calculation. Note values other than 1 or 0 here will lead to garbage -C results. - -defframe(PARAM_CARRY,20) -defframe(PARAM_SIZE, 16) -defframe(PARAM_SRC2, 12) -defframe(PARAM_SRC1, 8) -defframe(PARAM_DST, 4) - -dnl re-use parameter space -define(SAVE_RP,`PARAM_SIZE') -define(SAVE_VP,`PARAM_SRC1') -define(SAVE_UP,`PARAM_DST') - -define(`rp', `%edi') -define(`up', `%esi') -define(`vp', `%ebx') -define(`cy', `%ecx') -define(`r1', `%ecx') -define(`r2', `%edx') - -ASM_START() - TEXT - ALIGN(16) -deflit(`FRAME',0) - -PROLOGUE(M4_function_n) - xor cy, cy C carry -L(start): - mov PARAM_SIZE, %eax C size - mov rp, SAVE_RP - mov PARAM_DST, rp - mov up, SAVE_UP - mov PARAM_SRC1, up - shr %eax C size >> 1 - mov vp, SAVE_VP - mov PARAM_SRC2, vp - jz L(one) C size == 1 - jc L(three) C size % 2 == 1 - - shr cy - mov (up), r2 - lea 4(up), up - lea 4(vp), vp - lea -4(rp), rp - jmp L(entry) -L(one): - shr cy - mov (up), r1 - jmp L(end) -L(three): - shr cy - mov (up), r1 - - ALIGN(16) -L(oop): - M4_inst (vp), r1 - lea 8(up), up - mov -4(up), r2 - lea 8(vp), vp - mov r1, (rp) -L(entry): - M4_inst -4(vp), r2 - lea 8(rp), rp - dec %eax - mov (up), r1 - mov r2, -4(rp) - jnz L(oop) - -L(end): C %eax is zero here - mov SAVE_UP, up - M4_inst (vp), r1 - mov SAVE_VP, vp - mov r1, (rp) - adc %eax, %eax - mov SAVE_RP, rp - ret -EPILOGUE() - -PROLOGUE(M4_function_nc) - mov PARAM_CARRY, cy C carry - jmp L(start) -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aorslshC_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aorslshC_n.asm deleted file mode 100644 index 75ace65e513e7b1e1de5290a7ded3f9a89f977d9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/aorslshC_n.asm +++ /dev/null @@ -1,247 +0,0 @@ -dnl Intel Atom mpn_addlshC_n/mpn_sublshC_n -- rp[] = up[] +- (vp[] << C) - -dnl Contributed to the GNU project by Marco Bodrato. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C mp_limb_t mpn_addlshC_n_ip1 (mp_ptr dst, mp_srcptr src, mp_size_t size); -C mp_limb_t mpn_addlshC_nc_ip1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t carry); -C mp_limb_t mpn_sublshC_n_ip1 (mp_ptr dst, mp_srcptr src, mp_size_t size,); -C mp_limb_t mpn_sublshC_nc_ip1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_signed_limb_t borrow); - -defframe(PARAM_CORB, 16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -C mp_limb_t mpn_addlshC_n (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size,); -C mp_limb_t mpn_addlshC_nc (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size, mp_limb_t carry); -C mp_limb_t mpn_sublshC_n (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size,); -C mp_limb_t mpn_sublshC_nc (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size, mp_limb_t borrow); - -C if src1 == dst, _ip1 is used - -C cycles/limb -C dst!=src1,src2 dst==src1 -C P5 -C P6 model 0-8,10-12 -C P6 model 9 (Banias) -C P6 model 13 (Dothan) -C P4 model 0 (Willamette) -C P4 model 1 (?) -C P4 model 2 (Northwood) -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C Intel Atom 7 6 -C AMD K6 -C AMD K7 -C AMD K8 -C AMD K10 - -defframe(GPARAM_CORB, 20) -defframe(GPARAM_SIZE, 16) -defframe(GPARAM_SRC2, 12) - -dnl re-use parameter space -define(SAVE_EBP,`PARAM_SIZE') -define(SAVE_EBX,`PARAM_SRC') -define(SAVE_UP,`PARAM_DST') - -define(M, eval(m4_lshift(1,LSH))) -define(`rp', `%edi') -define(`up', `%esi') - -ASM_START() - TEXT - ALIGN(8) - -PROLOGUE(M4_ip_function_c) -deflit(`FRAME',0) - movl PARAM_CORB, %ecx - movl %ecx, %edx - shr $LSH, %edx - andl $1, %edx - M4_opp %edx, %ecx - jmp L(start_nc) -EPILOGUE() - -PROLOGUE(M4_ip_function) -deflit(`FRAME',0) - - xor %ecx, %ecx - xor %edx, %edx -L(start_nc): - push rp FRAME_pushl() - mov PARAM_DST, rp - mov up, SAVE_UP - mov PARAM_SRC, up - mov %ebx, SAVE_EBX - mov PARAM_SIZE, %ebx C size -L(inplace): - incl %ebx C size + 1 - shr %ebx C (size+1)\2 - mov %ebp, SAVE_EBP - jnc L(entry) C size odd - - add %edx, %edx C size even - mov %ecx, %ebp - mov (up), %ecx - lea -4(rp), rp - lea (%ebp,%ecx,M), %eax - lea 4(up), up - jmp L(enteven) - - ALIGN(16) -L(oop): - lea (%ecx,%eax,M), %ebp - shr $RSH, %eax - mov 4(up), %ecx - add %edx, %edx - lea 8(up), up - M4_inst %ebp, (rp) - lea (%eax,%ecx,M), %eax - -L(enteven): - M4_inst %eax, 4(rp) - lea 8(rp), rp - - sbb %edx, %edx - shr $RSH, %ecx - -L(entry): - mov (up), %eax - decl %ebx - jnz L(oop) - - lea (%ecx,%eax,M), %ebp - shr $RSH, %eax - shr %edx - M4_inst %ebp, (rp) - mov SAVE_UP, up - adc $0, %eax - mov SAVE_EBP, %ebp - mov SAVE_EBX, %ebx - pop rp FRAME_popl() - ret -EPILOGUE() - -PROLOGUE(M4_function_c) -deflit(`FRAME',0) - movl GPARAM_CORB, %ecx - movl %ecx, %edx - shr $LSH, %edx - andl $1, %edx - M4_opp %edx, %ecx - jmp L(generic_nc) -EPILOGUE() - -PROLOGUE(M4_function) -deflit(`FRAME',0) - - xor %ecx, %ecx - xor %edx, %edx -L(generic_nc): - push rp FRAME_pushl() - mov PARAM_DST, rp - mov up, SAVE_UP - mov PARAM_SRC, up - cmp rp, up - mov %ebx, SAVE_EBX - jne L(general) - mov GPARAM_SIZE, %ebx C size - mov GPARAM_SRC2, up - jmp L(inplace) - -L(general): - mov GPARAM_SIZE, %eax C size - mov %ebx, SAVE_EBX - incl %eax C size + 1 - mov up, %ebx C vp - mov GPARAM_SRC2, up C up - shr %eax C (size+1)\2 - mov %ebp, SAVE_EBP - mov %eax, GPARAM_SIZE - jnc L(entry2) C size odd - - add %edx, %edx C size even - mov %ecx, %ebp - mov (up), %ecx - lea -4(rp), rp - lea -4(%ebx), %ebx - lea (%ebp,%ecx,M), %eax - lea 4(up), up - jmp L(enteven2) - - ALIGN(16) -L(oop2): - lea (%ecx,%eax,M), %ebp - shr $RSH, %eax - mov 4(up), %ecx - add %edx, %edx - lea 8(up), up - mov (%ebx), %edx - M4_inst %ebp, %edx - lea (%eax,%ecx,M), %eax - mov %edx, (rp) -L(enteven2): - mov 4(%ebx), %edx - lea 8(%ebx), %ebx - M4_inst %eax, %edx - mov %edx, 4(rp) - sbb %edx, %edx - shr $RSH, %ecx - lea 8(rp), rp -L(entry2): - mov (up), %eax - decl GPARAM_SIZE - jnz L(oop2) - - lea (%ecx,%eax,M), %ebp - shr $RSH, %eax - shr %edx - mov (%ebx), %edx - M4_inst %ebp, %edx - mov %edx, (rp) - mov SAVE_UP, up - adc $0, %eax - mov SAVE_EBP, %ebp - mov SAVE_EBX, %ebx - pop rp FRAME_popl() - ret -EPILOGUE() - -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/bdiv_q_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/bdiv_q_1.asm deleted file mode 100644 index 31e908ec446d45a66f6346453b16ded1c33cdd35..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/bdiv_q_1.asm +++ /dev/null @@ -1,35 +0,0 @@ -dnl Intel Atom mpn_bdiv_q_1, mpn_pi1_bdiv_q_1 -- schoolbook Hensel -dnl division by 1-limb divisor, returning quotient only. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_bdiv_q_1 mpn_pi1_bdiv_q_1) -include_mpn(`x86/pentium/bdiv_q_1.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/cnd_add_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/cnd_add_n.asm deleted file mode 100644 index 50bf2ad64b8ae7d23ad2d6a44f7df324312050f6..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/cnd_add_n.asm +++ /dev/null @@ -1,113 +0,0 @@ -dnl X86 mpn_cnd_add_n optimised for Intel Atom. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C P5 ? -C P6 model 0-8,10-12 ? -C P6 model 9 (Banias) ? -C P6 model 13 (Dothan) ? -C P4 model 0-1 (Willamette) ? -C P4 model 2 (Northwood) ? -C P4 model 3-4 (Prescott) ? -C Intel atom 4.67 -C AMD K6 ? -C AMD K7 ? -C AMD K8 ? - - -define(`rp', `%edi') -define(`up', `%esi') -define(`vp', `%ebp') -define(`n', `%ecx') -define(`cnd', `20(%esp)') - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(mpn_cnd_add_n) - push %edi - push %esi - push %ebx - push %ebp - - mov cnd, %eax C make cnd into a mask (1) - mov 24(%esp), rp - neg %eax C make cnd into a mask (1) - mov 28(%esp), up - sbb %eax, %eax C make cnd into a mask (1) - mov 32(%esp), vp - mov %eax, cnd C make cnd into a mask (1) - mov 36(%esp), n - - xor %edx, %edx - - shr $1, n - jnc L(top) - - mov 0(vp), %eax - and cnd, %eax - lea 4(vp), vp - add 0(up), %eax - lea 4(rp), rp - lea 4(up), up - sbb %edx, %edx - mov %eax, -4(rp) - inc n - dec n - je L(end) - -L(top): sbb %edx, %edx - mov 0(vp), %eax - and cnd, %eax - lea 8(vp), vp - lea 8(rp), rp - mov -4(vp), %ebx - and cnd, %ebx - add %edx, %edx - adc 0(up), %eax - lea 8(up), up - mov %eax, -8(rp) - adc -4(up), %ebx - dec n - mov %ebx, -4(rp) - jne L(top) - -L(end): mov $0, %eax - adc %eax, %eax - - pop %ebp - pop %ebx - pop %esi - pop %edi - ret -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/cnd_sub_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/cnd_sub_n.asm deleted file mode 100644 index 221bedca37976502c7face8c093c8dc362f0d73a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/cnd_sub_n.asm +++ /dev/null @@ -1,124 +0,0 @@ -dnl X86 mpn_cnd_sub_n optimised for Intel Atom. - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C P5 ? -C P6 model 0-8,10-12 ? -C P6 model 9 (Banias) ? -C P6 model 13 (Dothan) ? -C P4 model 0-1 (Willamette) ? -C P4 model 2 (Northwood) ? -C P4 model 3-4 (Prescott) ? -C Intel atom 5.67 -C AMD K6 ? -C AMD K7 ? -C AMD K8 ? - - -define(`rp', `%edi') -define(`up', `%esi') -define(`vp', `%ebp') -define(`n', `%ecx') -define(`cnd', `20(%esp)') - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(mpn_cnd_sub_n) - push %edi - push %esi - push %ebx - push %ebp - - mov cnd, %eax C make cnd into a mask (1) - mov 24(%esp), rp - neg %eax C make cnd into a mask (1) - mov 28(%esp), up - sbb %eax, %eax C make cnd into a mask (1) - mov 32(%esp), vp - mov %eax, cnd C make cnd into a mask (1) - mov 36(%esp), n - - xor %edx, %edx - - inc n - shr n - jnc L(ent) - - mov 0(vp), %eax - and cnd, %eax - lea 4(vp), vp - mov 0(up), %edx - sub %eax, %edx - lea 4(rp), rp - lea 4(up), up - mov %edx, -4(rp) - sbb %edx, %edx C save cy - -L(ent): mov 0(vp), %ebx - and cnd, %ebx - add %edx, %edx C restore cy - mov 0(up), %edx - dec n - je L(end) - -L(top): sbb %ebx, %edx - mov 4(vp), %eax - mov %edx, 0(rp) - sbb %edx, %edx C save cy - mov 8(vp), %ebx - lea 8(up), up - and cnd, %ebx - and cnd, %eax - add %edx, %edx C restore cy - mov -4(up), %edx - lea 8(rp), rp - sbb %eax, %edx - mov %edx, -4(rp) - dec n - mov 0(up), %edx - lea 8(vp), vp - jne L(top) - -L(end): sbb %ebx, %edx - mov %edx, 0(rp) - - mov $0, %eax - adc %eax, %eax - - pop %ebp - pop %ebx - pop %esi - pop %edi - ret -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/dive_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/dive_1.asm deleted file mode 100644 index 71036a15a4d5e8f65b7378bcc6aebcc6d7b0177a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/dive_1.asm +++ /dev/null @@ -1,34 +0,0 @@ -dnl Intel Atom mpn_divexact_1 -- mpn by limb exact division. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_divexact_1) -include_mpn(`x86/pentium/dive_1.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/gmp-mparam.h deleted file mode 100644 index 7e6c4196816c3f63fcec5bcba7cee568954fb4e0..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/gmp-mparam.h +++ /dev/null @@ -1,207 +0,0 @@ -/* Intel Atom/32 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2011, 2014-2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 1600 MHz Diamondville (Atom 330) */ -/* FFT tuning limit = 50 M */ -/* Generated by tuneup.c, 2015-10-09, gcc 4.7 */ - -#define MOD_1_NORM_THRESHOLD 3 -#define MOD_1_UNNORM_THRESHOLD 5 -#define MOD_1N_TO_MOD_1_1_THRESHOLD 10 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 5 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 10 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 17 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 4 -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 31 - -#define MUL_TOOM22_THRESHOLD 20 -#define MUL_TOOM33_THRESHOLD 81 -#define MUL_TOOM44_THRESHOLD 178 -#define MUL_TOOM6H_THRESHOLD 270 -#define MUL_TOOM8H_THRESHOLD 381 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 120 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 126 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 115 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 127 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 106 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 32 -#define SQR_TOOM3_THRESHOLD 121 -#define SQR_TOOM4_THRESHOLD 184 -#define SQR_TOOM6_THRESHOLD 303 -#define SQR_TOOM8_THRESHOLD 527 - -#define MULMID_TOOM42_THRESHOLD 54 - -#define MULMOD_BNM1_THRESHOLD 16 -#define SQRMOD_BNM1_THRESHOLD 17 - -#define MUL_FFT_MODF_THRESHOLD 380 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 380, 5}, { 21, 6}, { 11, 5}, { 23, 6}, \ - { 12, 5}, { 25, 6}, { 21, 7}, { 11, 6}, \ - { 25, 7}, { 13, 6}, { 27, 7}, { 15, 6}, \ - { 31, 7}, { 21, 8}, { 11, 7}, { 27, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 39, 8}, \ - { 23, 7}, { 47, 8}, { 27, 9}, { 15, 8}, \ - { 39, 9}, { 23, 8}, { 51,10}, { 15, 9}, \ - { 31, 8}, { 67, 9}, { 39, 8}, { 79, 9}, \ - { 47, 8}, { 99, 9}, { 55,10}, { 31, 9}, \ - { 79,10}, { 47, 9}, { 95,11}, { 31,10}, \ - { 63, 9}, { 135,10}, { 79, 9}, { 159,10}, \ - { 95, 9}, { 191,10}, { 111,11}, { 63,10}, \ - { 127, 9}, { 255, 8}, { 511, 9}, { 271,10}, \ - { 143, 9}, { 287, 8}, { 575, 9}, { 303,10}, \ - { 159, 9}, { 319,11}, { 95,10}, { 191, 9}, \ - { 383,12}, { 63,11}, { 127,10}, { 255, 9}, \ - { 511,10}, { 271, 9}, { 543,10}, { 287, 9}, \ - { 575,10}, { 303,11}, { 159,10}, { 319, 9}, \ - { 639,10}, { 351,11}, { 191,10}, { 383, 9}, \ - { 767,10}, { 415,11}, { 223,10}, { 447,12}, \ - { 127,11}, { 255,10}, { 543,11}, { 287,10}, \ - { 607,11}, { 319,10}, { 639,11}, { 351,10}, \ - { 703,12}, { 191,11}, { 383,10}, { 767,11}, \ - { 415,10}, { 831,11}, { 447,13}, { 127,12}, \ - { 255,11}, { 543,10}, { 1087,11}, { 607,12}, \ - { 319,11}, { 735,12}, { 383,11}, { 831,12}, \ - { 447,11}, { 959,13}, { 255,12}, { 511,11}, \ - { 1087,12}, { 575,11}, { 1215,12}, { 639,11}, \ - { 1279,12}, { 703,11}, { 1407,13}, { 383,12}, \ - { 959,14}, { 255,13}, { 511,12}, { 1215,13}, \ - { 639,12}, { 1471,13}, { 767,12}, { 1599,13}, \ - { 895,12}, { 1791,14}, { 511,13}, { 1023,12}, \ - { 2111,13}, { 1151,12}, { 2431,13}, { 1407,14}, \ - { 767,13}, { 1663,12}, { 3455,13}, { 1791,15}, \ - { 511,14}, { 1023,13}, { 2431,14}, { 1279,13}, \ - { 2943,12}, { 5887,14}, { 1535,13}, { 3455,14}, \ - { 1791,13}, { 3839,15}, { 1023,14}, { 2047,13}, \ - { 4223,14}, { 2303,13}, { 4991,12}, { 9983,14}, \ - { 2815,13}, { 5887,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 155 -#define MUL_FFT_THRESHOLD 4544 - -#define SQR_FFT_MODF_THRESHOLD 340 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 340, 5}, { 21, 6}, { 11, 5}, { 23, 6}, \ - { 12, 5}, { 25, 6}, { 21, 7}, { 11, 6}, \ - { 25, 7}, { 13, 6}, { 28, 7}, { 15, 6}, \ - { 31, 7}, { 21, 8}, { 11, 7}, { 27, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 41, 8}, \ - { 23, 7}, { 47, 8}, { 27, 9}, { 15, 8}, \ - { 39, 9}, { 23, 8}, { 51,10}, { 15, 9}, \ - { 31, 8}, { 67, 9}, { 39, 8}, { 79, 9}, \ - { 47,10}, { 31, 9}, { 79,10}, { 47, 9}, \ - { 95,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255, 7}, { 511, 9}, { 135, 8}, { 271, 9}, \ - { 143,10}, { 79, 8}, { 319, 7}, { 639,10}, \ - { 95, 9}, { 191, 8}, { 383,10}, { 111,11}, \ - { 63,10}, { 127, 9}, { 255, 8}, { 511, 9}, \ - { 271, 8}, { 543,10}, { 143, 9}, { 287, 8}, \ - { 607, 9}, { 319,11}, { 95,10}, { 191,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 511,10}, \ - { 271, 9}, { 543,10}, { 287, 9}, { 575,10}, \ - { 303, 9}, { 607,10}, { 319, 9}, { 639,10}, \ - { 335, 9}, { 671,10}, { 351, 9}, { 703,11}, \ - { 191,10}, { 383, 9}, { 767,10}, { 415,11}, \ - { 223,10}, { 447,12}, { 127,11}, { 255,10}, \ - { 543,11}, { 287,10}, { 607,11}, { 319,10}, \ - { 671,11}, { 351,10}, { 703,12}, { 191,11}, \ - { 383,10}, { 767,11}, { 415,10}, { 831,11}, \ - { 479,13}, { 127,12}, { 255,11}, { 543,10}, \ - { 1087,11}, { 607,12}, { 319,11}, { 671,10}, \ - { 1343,11}, { 735,12}, { 383,11}, { 831,12}, \ - { 447,11}, { 959,13}, { 255,12}, { 511,11}, \ - { 1087,12}, { 575,11}, { 1215,12}, { 639,11}, \ - { 1343,12}, { 703,13}, { 383,12}, { 959,14}, \ - { 255,13}, { 511,12}, { 1215,13}, { 639,12}, \ - { 1471,13}, { 767,12}, { 1599,13}, { 895,14}, \ - { 511,13}, { 1023,12}, { 2111,13}, { 1151,12}, \ - { 2431,13}, { 1407,14}, { 767,13}, { 1663,12}, \ - { 3455,15}, { 511,14}, { 1023,13}, { 2431,14}, \ - { 1279,13}, { 2943,12}, { 5887,14}, { 1535,13}, \ - { 3455,14}, { 1791,13}, { 3839,15}, { 1023,14}, \ - { 2047,13}, { 4351,14}, { 2303,13}, { 4991,12}, \ - { 9983,14}, { 2815,13}, { 5887,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 160 -#define SQR_FFT_THRESHOLD 3712 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 56 -#define MULLO_MUL_N_THRESHOLD 8907 -#define SQRLO_BASECASE_THRESHOLD 0 /* always */ -#define SQRLO_DC_THRESHOLD 114 -#define SQRLO_SQR_THRESHOLD 6654 - -#define DC_DIV_QR_THRESHOLD 71 -#define DC_DIVAPPR_Q_THRESHOLD 250 -#define DC_BDIV_QR_THRESHOLD 68 -#define DC_BDIV_Q_THRESHOLD 172 - -#define INV_MULMOD_BNM1_THRESHOLD 38 -#define INV_NEWTON_THRESHOLD 250 -#define INV_APPR_THRESHOLD 250 - -#define BINV_NEWTON_THRESHOLD 264 -#define REDC_1_TO_REDC_N_THRESHOLD 71 - -#define MU_DIV_QR_THRESHOLD 1442 -#define MU_DIVAPPR_Q_THRESHOLD 1442 -#define MUPI_DIV_QR_THRESHOLD 114 -#define MU_BDIV_QR_THRESHOLD 1017 -#define MU_BDIV_Q_THRESHOLD 1210 - -#define POWM_SEC_TABLE 3,16,96,416,1985 - -#define GET_STR_DC_THRESHOLD 13 -#define GET_STR_PRECOMPUTE_THRESHOLD 25 -#define SET_STR_DC_THRESHOLD 396 -#define SET_STR_PRECOMPUTE_THRESHOLD 1105 - -#define FAC_DSC_THRESHOLD 224 -#define FAC_ODD_THRESHOLD 29 - -#define MATRIX22_STRASSEN_THRESHOLD 17 -#define HGCD_THRESHOLD 126 -#define HGCD_APPR_THRESHOLD 165 -#define HGCD_REDUCE_THRESHOLD 2479 -#define GCD_DC_THRESHOLD 511 -#define GCDEXT_DC_THRESHOLD 333 -#define JACOBI_BASE_METHOD 2 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/logops_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/logops_n.asm deleted file mode 100644 index 3cb6d7310c2ce496ad6491fd74bcd1e26d83a94c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/logops_n.asm +++ /dev/null @@ -1,151 +0,0 @@ -dnl Intel Atom mpn_and_n,...,mpn_xnor_n -- bitwise logical operations. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl Contributed to the GNU project by Marco Bodrato. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C op nop opn -C P5 -C P6 model 0-8,10-12 -C P6 model 9 (Banias) -C P6 model 13 (Dothan) -C P4 model 0 (Willamette) -C P4 model 1 (?) -C P4 model 2 (Northwood) -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C Intel Atom 3 3.5 3.5 -C AMD K6 -C AMD K7 -C AMD K8 -C AMD K10 - -define(M4_choose_op, -`ifdef(`OPERATION_$1',` -define(`M4_function', `mpn_$1') -define(`M4_want_pre', `$4') -define(`M4_inst', `$3') -define(`M4_want_post',`$2') -')') -define(M4pre, `ifelse(M4_want_pre, yes,`$1')') -define(M4post,`ifelse(M4_want_post,yes,`$1')') - -M4_choose_op( and_n, , andl, ) -M4_choose_op( andn_n, , andl, yes) -M4_choose_op( nand_n, yes, andl, ) -M4_choose_op( ior_n, , orl, ) -M4_choose_op( iorn_n, , orl, yes) -M4_choose_op( nior_n, yes, orl, ) -M4_choose_op( xor_n, , xorl, ) -M4_choose_op( xnor_n, yes, xorl, ) - -ifdef(`M4_function',, -`m4_error(`Unrecognised or undefined OPERATION symbol -')') - -MULFUNC_PROLOGUE(mpn_and_n mpn_andn_n mpn_nand_n mpn_ior_n mpn_iorn_n mpn_nior_n mpn_xor_n mpn_xnor_n) - -C void M4_function (mp_ptr dst, mp_srcptr src2, mp_srcptr src1, mp_size_t size); -C - -defframe(PARAM_SIZE, 16) -defframe(PARAM_SRC1, 12) -defframe(PARAM_SRC2, 8) -defframe(PARAM_DST, 4) - -dnl re-use parameter space -define(SAVE_RP,`PARAM_SIZE') -define(SAVE_VP,`PARAM_SRC1') -define(SAVE_UP,`PARAM_DST') - -define(`rp', `%edi') -define(`up', `%esi') -define(`vp', `%ebx') -define(`cnt', `%eax') -define(`r1', `%ecx') -define(`r2', `%edx') - -ASM_START() - TEXT - ALIGN(16) -deflit(`FRAME',0) - -PROLOGUE(M4_function) - mov PARAM_SIZE, cnt C size - mov rp, SAVE_RP - mov PARAM_DST, rp - mov up, SAVE_UP - mov PARAM_SRC1, up - shr cnt C size >> 1 - mov vp, SAVE_VP - mov PARAM_SRC2, vp - mov (up), r1 - jz L(end) C size == 1 - jnc L(even) C size % 2 == 0 - - ALIGN(16) -L(oop): -M4pre(` notl_or_xorl_GMP_NUMB_MASK(r1)') - M4_inst (vp), r1 - lea 8(up), up - mov -4(up), r2 -M4post(` notl_or_xorl_GMP_NUMB_MASK(r1)') - lea 8(vp), vp - mov r1, (rp) -L(entry): -M4pre(` notl_or_xorl_GMP_NUMB_MASK(r2)') - M4_inst -4(vp), r2 - lea 8(rp), rp -M4post(` notl_or_xorl_GMP_NUMB_MASK(r2)') - dec cnt - mov (up), r1 - mov r2, -4(rp) - jnz L(oop) - -L(end): -M4pre(` notl_or_xorl_GMP_NUMB_MASK(r1)') - mov SAVE_UP, up - M4_inst (vp), r1 -M4post(`notl_or_xorl_GMP_NUMB_MASK(r1)') - mov SAVE_VP, vp - mov r1, (rp) - mov SAVE_RP, rp - ret - -L(even): - mov r1, r2 - lea 4(up), up - lea 4(vp), vp - lea -4(rp), rp - jmp L(entry) -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/lshift.asm deleted file mode 100644 index f2c70dd3e85c24e293c026302ef2d542aaef9eff..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/lshift.asm +++ /dev/null @@ -1,218 +0,0 @@ -dnl Intel Atom mpn_lshift -- mpn left shift. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C mp_limb_t mpn_lshift (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned cnt); - -C cycles/limb -C cnt!=1 cnt==1 -C P5 -C P6 model 0-8,10-12 -C P6 model 9 (Banias) -C P6 model 13 (Dothan) -C P4 model 0 (Willamette) -C P4 model 1 (?) -C P4 model 2 (Northwood) -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C Intel Atom 5 2.5 -C AMD K6 -C AMD K7 -C AMD K8 -C AMD K10 - -defframe(PARAM_CNT, 16) -defframe(PARAM_SIZE,12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl re-use parameter space -define(SAVE_UP,`PARAM_CNT') -define(VAR_COUNT,`PARAM_SIZE') -define(SAVE_EBX,`PARAM_SRC') -define(SAVE_EBP,`PARAM_DST') - -define(`rp', `%edi') -define(`up', `%esi') -define(`cnt', `%ecx') - -ASM_START() - TEXT - ALIGN(8) -deflit(`FRAME',0) -PROLOGUE(mpn_lshift) - mov PARAM_CNT, cnt - mov PARAM_SIZE, %edx - mov up, SAVE_UP - mov PARAM_SRC, up - push rp FRAME_pushl() - mov PARAM_DST, rp - -C We can use faster code for shift-by-1 under certain conditions. - cmp $1,cnt - jne L(normal) - cmpl rp, up - jnc L(special) C jump if s_ptr + 1 >= res_ptr - leal (up,%edx,4),%eax - cmpl %eax,rp - jnc L(special) C jump if res_ptr >= s_ptr + size - -L(normal): - lea -4(up,%edx,4), up - mov %ebx, SAVE_EBX - lea -4(rp,%edx,4), rp - - shr %edx - mov (up), %eax - mov %edx, VAR_COUNT - jnc L(evn) - - mov %eax, %ebx - shl %cl, %ebx - neg cnt - shr %cl, %eax - test %edx, %edx - jnz L(gt1) - mov %ebx, (rp) - jmp L(quit) - -L(gt1): mov %ebp, SAVE_EBP - push %eax - mov -4(up), %eax - mov %eax, %ebp - shr %cl, %eax - jmp L(lo1) - -L(evn): mov %ebp, SAVE_EBP - neg cnt - mov %eax, %ebp - mov -4(up), %edx - shr %cl, %eax - mov %edx, %ebx - shr %cl, %edx - neg cnt - decl VAR_COUNT - lea 4(rp), rp - lea -4(up), up - jz L(end) - push %eax FRAME_pushl() - - ALIGN(8) -L(top): shl %cl, %ebp - or %ebp, %edx - shl %cl, %ebx - neg cnt - mov -4(up), %eax - mov %eax, %ebp - mov %edx, -4(rp) - shr %cl, %eax - lea -8(rp), rp -L(lo1): mov -8(up), %edx - or %ebx, %eax - mov %edx, %ebx - shr %cl, %edx - lea -8(up), up - neg cnt - mov %eax, (rp) - decl VAR_COUNT - jg L(top) - - pop %eax FRAME_popl() -L(end): - shl %cl, %ebp - shl %cl, %ebx - or %ebp, %edx - mov SAVE_EBP, %ebp - mov %edx, -4(rp) - mov %ebx, -8(rp) - -L(quit): - mov SAVE_UP, up - mov SAVE_EBX, %ebx - pop rp FRAME_popl() - ret - -L(special): -deflit(`FRAME',4) - lea 3(%edx), %eax C size + 3 - dec %edx C size - 1 - mov (up), %ecx - shr $2, %eax C (size + 3) / 4 - and $3, %edx C (size - 1) % 4 - jz L(goloop) C jmp if size == 1 (mod 4) - shr %edx - jnc L(odd) C jum if size == 3 (mod 4) - - add %ecx, %ecx - lea 4(up), up - mov %ecx, (rp) - mov (up), %ecx - lea 4(rp), rp - - dec %edx - jnz L(goloop) C jump if size == 0 (mod 4) -L(odd): lea -8(up), up - lea -8(rp), rp - jmp L(sentry) C reached if size == 2 or 3 (mod 4) - -L(sloop): - adc %ecx, %ecx - mov 4(up), %edx - mov %ecx, (rp) - adc %edx, %edx - mov 8(up), %ecx - mov %edx, 4(rp) -L(sentry): - adc %ecx, %ecx - mov 12(up), %edx - mov %ecx, 8(rp) - adc %edx, %edx - lea 16(up), up - mov %edx, 12(rp) - lea 16(rp), rp - mov (up), %ecx -L(goloop): - decl %eax - jnz L(sloop) - -L(squit): - adc %ecx, %ecx - mov %ecx, (rp) - adc %eax, %eax - - mov SAVE_UP, up - pop rp FRAME_popl() - ret -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/lshiftc.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/lshiftc.asm deleted file mode 100644 index 5be53ed19d483306a59978d0b6b7a322662834db..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/lshiftc.asm +++ /dev/null @@ -1,159 +0,0 @@ -dnl Intel Atom mpn_lshiftc -- mpn left shift with complement. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C mp_limb_t mpn_lshiftc (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned cnt); - -C cycles/limb -C P5 -C P6 model 0-8,10-12 -C P6 model 9 (Banias) -C P6 model 13 (Dothan) -C P4 model 0 (Willamette) -C P4 model 1 (?) -C P4 model 2 (Northwood) -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C Intel Atom 5.5 -C AMD K6 -C AMD K7 -C AMD K8 -C AMD K10 - -defframe(PARAM_CNT, 16) -defframe(PARAM_SIZE,12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl re-use parameter space -define(SAVE_UP,`PARAM_CNT') -define(VAR_COUNT,`PARAM_SIZE') -define(SAVE_EBX,`PARAM_SRC') -define(SAVE_EBP,`PARAM_DST') - -define(`rp', `%edi') -define(`up', `%esi') -define(`cnt', `%ecx') - -ASM_START() - TEXT - -PROLOGUE(mpn_lshiftc) -deflit(`FRAME',0) - mov PARAM_CNT, cnt - mov PARAM_SIZE, %edx - mov up, SAVE_UP - mov PARAM_SRC, up - push rp FRAME_pushl() - mov PARAM_DST, rp - - lea -4(up,%edx,4), up - mov %ebx, SAVE_EBX - lea -4(rp,%edx,4), rp - - shr %edx - mov (up), %eax - mov %edx, VAR_COUNT - jnc L(evn) - - mov %eax, %ebx - shl %cl, %ebx - neg cnt - shr %cl, %eax - test %edx, %edx - jnz L(gt1) - not %ebx - mov %ebx, (rp) - jmp L(quit) - -L(gt1): mov %ebp, SAVE_EBP - push %eax - mov -4(up), %eax - mov %eax, %ebp - shr %cl, %eax - jmp L(lo1) - -L(evn): mov %ebp, SAVE_EBP - neg cnt - mov %eax, %ebp - mov -4(up), %edx - shr %cl, %eax - mov %edx, %ebx - shr %cl, %edx - neg cnt - decl VAR_COUNT - lea 4(rp), rp - lea -4(up), up - jz L(end) - push %eax FRAME_pushl() - -L(top): shl %cl, %ebp - or %ebp, %edx - shl %cl, %ebx - neg cnt - not %edx - mov -4(up), %eax - mov %eax, %ebp - mov %edx, -4(rp) - shr %cl, %eax - lea -8(rp), rp -L(lo1): mov -8(up), %edx - or %ebx, %eax - mov %edx, %ebx - shr %cl, %edx - not %eax - lea -8(up), up - neg cnt - mov %eax, (rp) - decl VAR_COUNT - jg L(top) - - pop %eax FRAME_popl() -L(end): - shl %cl, %ebp - shl %cl, %ebx - or %ebp, %edx - mov SAVE_EBP, %ebp - not %edx - not %ebx - mov %edx, -4(rp) - mov %ebx, -8(rp) - -L(quit): - mov SAVE_UP, up - mov SAVE_EBX, %ebx - pop rp FRAME_popl() - ret -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mmx/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mmx/copyd.asm deleted file mode 100644 index b80fb033fecec37f81e47b815f5bab0e5b20cb44..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mmx/copyd.asm +++ /dev/null @@ -1,34 +0,0 @@ -dnl Intel Atom mpn_copyd -- copy limb vector, decrementing. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_copyd) -include_mpn(`x86/k7/mmx/copyd.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mmx/copyi.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mmx/copyi.asm deleted file mode 100644 index 49b6b8d662eeaa744854028fd65e225e16f18c21..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mmx/copyi.asm +++ /dev/null @@ -1,34 +0,0 @@ -dnl Intel Atom mpn_copyi -- copy limb vector, incrementing. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_copyi) -include_mpn(`x86/k7/mmx/copyi.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mmx/hamdist.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mmx/hamdist.asm deleted file mode 100644 index 3fe8253240411760483be3842e8c917a20446bea..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mmx/hamdist.asm +++ /dev/null @@ -1,34 +0,0 @@ -dnl Intel Atom mpn_hamdist -- hamming distance. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_hamdist) -include_mpn(`x86/k7/mmx/popham.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mod_34lsub1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mod_34lsub1.asm deleted file mode 100644 index 6d57ba385df30dcd5913b8ac47b088ff263c1698..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mod_34lsub1.asm +++ /dev/null @@ -1,34 +0,0 @@ -dnl Intel Atom mpn_mod_34lsub1 -- remainder modulo 2^24-1. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_mod_34lsub1) -include_mpn(`x86/p6/mod_34lsub1.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mode1o.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mode1o.asm deleted file mode 100644 index c9ee6bd2db3e4b0798b6cb3db7fcd68ee4e8a370..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/mode1o.asm +++ /dev/null @@ -1,34 +0,0 @@ -dnl Intel Atom mpn_modexact_1_odd -- exact division style remainder. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_modexact_1_odd mpn_modexact_1c_odd) -include_mpn(`x86/pentium/mode1o.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/rshift.asm deleted file mode 100644 index 1cb5dbefe9b9ee63e5fb4b41bff81113ca5f4d1b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/rshift.asm +++ /dev/null @@ -1,152 +0,0 @@ -dnl Intel Atom mpn_rshift -- mpn right shift. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl Converted from AMD64 by Marco Bodrato. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C mp_limb_t mpn_rshift (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned cnt); - -C cycles/limb -C P5 -C P6 model 0-8,10-12 -C P6 model 9 (Banias) -C P6 model 13 (Dothan) -C P4 model 0 (Willamette) -C P4 model 1 (?) -C P4 model 2 (Northwood) -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C Intel Atom 5 -C AMD K6 -C AMD K7 -C AMD K8 -C AMD K10 - -defframe(PARAM_CNT, 16) -defframe(PARAM_SIZE,12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl re-use parameter space -define(SAVE_UP,`PARAM_CNT') -define(VAR_COUNT,`PARAM_SIZE') -define(SAVE_EBX,`PARAM_SRC') -define(SAVE_EBP,`PARAM_DST') - -define(`rp', `%edi') -define(`up', `%esi') -define(`cnt', `%ecx') - -ASM_START() - TEXT - ALIGN(8) -deflit(`FRAME',0) -PROLOGUE(mpn_rshift) - mov PARAM_CNT, cnt - mov PARAM_SIZE, %edx - mov up, SAVE_UP - mov PARAM_SRC, up - push rp FRAME_pushl() - mov PARAM_DST, rp - mov %ebx, SAVE_EBX - - shr %edx - mov (up), %eax - mov %edx, VAR_COUNT - jnc L(evn) - - mov %eax, %ebx - shr %cl, %ebx - neg cnt - shl %cl, %eax - test %edx, %edx - jnz L(gt1) - mov %ebx, (rp) - jmp L(quit) - -L(gt1): mov %ebp, SAVE_EBP - push %eax - mov 4(up), %eax - mov %eax, %ebp - shl %cl, %eax - jmp L(lo1) - -L(evn): mov %ebp, SAVE_EBP - neg cnt - mov %eax, %ebp - mov 4(up), %edx - shl %cl, %eax - mov %edx, %ebx - shl %cl, %edx - neg cnt - decl VAR_COUNT - lea -4(rp), rp - lea 4(up), up - jz L(end) - push %eax FRAME_pushl() - - ALIGN(8) -L(top): shr %cl, %ebp - or %ebp, %edx - shr %cl, %ebx - neg cnt - mov 4(up), %eax - mov %eax, %ebp - mov %edx, 4(rp) - shl %cl, %eax - lea 8(rp), rp -L(lo1): mov 8(up), %edx - or %ebx, %eax - mov %edx, %ebx - shl %cl, %edx - lea 8(up), up - neg cnt - mov %eax, (rp) - decl VAR_COUNT - jg L(top) - - pop %eax FRAME_popl() -L(end): - shr %cl, %ebp - shr %cl, %ebx - or %ebp, %edx - mov SAVE_EBP, %ebp - mov %edx, 4(rp) - mov %ebx, 8(rp) - -L(quit): - mov SAVE_UP, up - mov SAVE_EBX, %ebx - pop rp FRAME_popl() - ret -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/aorsmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/aorsmul_1.asm deleted file mode 100644 index 969a14a9196380c6bb166c186df38877d216ce9a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/aorsmul_1.asm +++ /dev/null @@ -1,174 +0,0 @@ -dnl x86-32 mpn_addmul_1 and mpn_submul_1 optimised for Intel Atom. - -dnl Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C cycles/limb -C P5 - -C P6 model 0-8,10-12 - -C P6 model 9 (Banias) -C P6 model 13 (Dothan) -C P4 model 0 (Willamette) -C P4 model 1 (?) -C P4 model 2 (Northwood) -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C Intel Atom 8 -C AMD K6 -C AMD K7 - -C AMD K8 -C AMD K10 - -define(`rp', `%edi') -define(`up', `%esi') -define(`n', `%ecx') - -ifdef(`OPERATION_addmul_1',` - define(ADDSUB, add) - define(func_1, mpn_addmul_1) - define(func_1c, mpn_addmul_1c)') -ifdef(`OPERATION_submul_1',` - define(ADDSUB, sub) - define(func_1, mpn_submul_1) - define(func_1c, mpn_submul_1c)') - -MULFUNC_PROLOGUE(mpn_addmul_1 mpn_addmul_1c mpn_submul_1 mpn_submul_1c) - - TEXT - ALIGN(16) -PROLOGUE(func_1) - xor %edx, %edx -L(ent): push %edi - push %esi - push %ebx - mov 16(%esp), rp - mov 20(%esp), up - mov 24(%esp), n - movd 28(%esp), %mm7 - test $1, n - jz L(fi0or2) - movd (up), %mm0 - pmuludq %mm7, %mm0 - shr $2, n - jnc L(fi1) - -L(fi3): lea -8(up), up - lea -8(rp), rp - movd 12(up), %mm1 - movd %mm0, %ebx - pmuludq %mm7, %mm1 - add $1, n C increment and clear carry - jmp L(lo3) - -L(fi1): movd %mm0, %ebx - jz L(wd1) - movd 4(up), %mm1 - pmuludq %mm7, %mm1 - jmp L(lo1) - -L(fi0or2): - movd (up), %mm1 - pmuludq %mm7, %mm1 - shr $2, n - movd 4(up), %mm0 - jc L(fi2) - lea -4(up), up - lea -4(rp), rp - movd %mm1, %eax - pmuludq %mm7, %mm0 - jmp L(lo0) - -L(fi2): lea 4(up), up - add $1, n C increment and clear carry - movd %mm1, %eax - lea -12(rp), rp - jmp L(lo2) - -C ALIGN(16) C alignment seems irrelevant -L(top): movd 4(up), %mm1 - adc $0, %edx - ADDSUB %eax, 12(rp) - movd %mm0, %ebx - pmuludq %mm7, %mm1 - lea 16(rp), rp -L(lo1): psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %edx - movd %mm1, %eax - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - adc $0, %edx - ADDSUB %ebx, (rp) -L(lo0): psrlq $32, %mm1 - adc %edx, %eax - movd %mm1, %edx - movd %mm0, %ebx - movd 12(up), %mm1 - pmuludq %mm7, %mm1 - adc $0, %edx - ADDSUB %eax, 4(rp) -L(lo3): psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %edx - movd %mm1, %eax - lea 16(up), up - movd (up), %mm0 - adc $0, %edx - ADDSUB %ebx, 8(rp) -L(lo2): psrlq $32, %mm1 - adc %edx, %eax - movd %mm1, %edx - pmuludq %mm7, %mm0 - dec n - jnz L(top) - -L(end): adc n, %edx C n is zero here - ADDSUB %eax, 12(rp) - movd %mm0, %ebx - lea 16(rp), rp -L(wd1): psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %eax - adc n, %eax - ADDSUB %ebx, (rp) - emms - adc n, %eax - pop %ebx - pop %esi - pop %edi - ret -EPILOGUE() -PROLOGUE(func_1c) - mov 20(%esp), %edx C carry - jmp L(ent) -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/bdiv_dbm1c.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/bdiv_dbm1c.asm deleted file mode 100644 index 782e914019c2be234d1148ca93ca175023160453..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/bdiv_dbm1c.asm +++ /dev/null @@ -1,34 +0,0 @@ -dnl Intel Atom mpn_bdiv_dbm1. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_bdiv_dbm1c) -include_mpn(`x86/pentium4/sse2/bdiv_dbm1c.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/divrem_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/divrem_1.asm deleted file mode 100644 index f84709a22e42c5759023527da73fb6edf7553396..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/divrem_1.asm +++ /dev/null @@ -1,34 +0,0 @@ -dnl Intel Atom mpn_divrem_1 -- mpn by limb division. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_preinv_divrem_1 mpn_divrem_1c mpn_divrem_1) -include_mpn(`x86/pentium4/sse2/divrem_1.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/mod_1_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/mod_1_1.asm deleted file mode 100644 index ae6581d9b651d5c7ff3de1b6b576c1786f7c3a31..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/mod_1_1.asm +++ /dev/null @@ -1,34 +0,0 @@ -dnl Intel Atom/SSE2 mpn_mod_1_1. - -dnl Copyright 2009, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_mod_1_1p) -include_mpn(`x86/pentium4/sse2/mod_1_1.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/mod_1_4.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/mod_1_4.asm deleted file mode 100644 index 31faa3f0a3c9ad704ae446f363f9de350f6e57cc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/mod_1_4.asm +++ /dev/null @@ -1,34 +0,0 @@ -dnl Intel Atom/SSE2 mpn_mod_1_4. - -dnl Copyright 2009, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_mod_1s_4p) -include_mpn(`x86/pentium4/sse2/mod_1_4.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/mul_1.asm deleted file mode 100644 index aa3bb974bb5c3ac98b8c221af4915f39ce457119..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/mul_1.asm +++ /dev/null @@ -1,124 +0,0 @@ -dnl Intel Atom mpn_mul_1. - -dnl Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C cycles/limb -C P5 - -C P6 model 0-8,10-12 - -C P6 model 9 (Banias) -C P6 model 13 (Dothan) -C P4 model 0 (Willamette) -C P4 model 1 (?) -C P4 model 2 (Northwood) -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C Intel Atom 7.5 -C AMD K6 - -C AMD K7 - -C AMD K8 -C AMD K10 - -defframe(PARAM_CARRY,20) -defframe(PARAM_MUL, 16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -define(`rp', `%edx') -define(`up', `%esi') -define(`n', `%ecx') - -ASM_START() - TEXT - ALIGN(16) -deflit(`FRAME',0) - -PROLOGUE(mpn_mul_1c) - movd PARAM_CARRY, %mm6 C carry - jmp L(ent) -EPILOGUE() - - ALIGN(8) C for compact code -PROLOGUE(mpn_mul_1) - pxor %mm6, %mm6 -L(ent): push %esi FRAME_pushl() - mov PARAM_SRC, up - mov PARAM_SIZE, %eax C size - movd PARAM_MUL, %mm7 - movd (up), %mm0 - mov %eax, n - and $3, %eax - pmuludq %mm7, %mm0 - mov PARAM_DST, rp - jz L(lo0) - cmp $2, %eax - lea -16(up,%eax,4),up - lea -16(rp,%eax,4),rp - jc L(lo1) - jz L(lo2) - jmp L(lo3) - - ALIGN(16) -L(top): movd (up), %mm0 - pmuludq %mm7, %mm0 - psrlq $32, %mm6 - lea 16(rp), rp -L(lo0): paddq %mm0, %mm6 - movd 4(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, (rp) - psrlq $32, %mm6 -L(lo3): paddq %mm0, %mm6 - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, 4(rp) - psrlq $32, %mm6 -L(lo2): paddq %mm0, %mm6 - movd 12(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, 8(rp) - psrlq $32, %mm6 -L(lo1): paddq %mm0, %mm6 - sub $4, n - movd %mm6, 12(rp) - lea 16(up), up - ja L(top) - - psrlq $32, %mm6 - movd %mm6, %eax - emms - pop %esi FRAME_popl() - ret -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/mul_basecase.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/mul_basecase.asm deleted file mode 100644 index 97d3aeb5ad71571313a36f71d86550d45d5ba9ab..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/mul_basecase.asm +++ /dev/null @@ -1,501 +0,0 @@ -dnl x86 mpn_mul_basecase -- Multiply two limb vectors and store the result in -dnl a third limb vector. - -dnl Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C TODO -C * Check if 'jmp N(%esp)' is well-predicted enough to allow us to combine the -C 4 large loops into one; we could use it for the outer loop branch. -C * Optimise code outside of inner loops. -C * Write combined addmul_1 feed-in a wind-down code, and use when iterating -C outer each loop. ("Overlapping software pipelining") -C * Postpone push of ebx until we know vn > 1. Perhaps use caller-saves regs -C for inlined mul_1, allowing us to postpone all pushes. -C * Perhaps write special code for vn <= un < M, for some small M. - -C void mpn_mul_basecase (mp_ptr wp, -C mp_srcptr xp, mp_size_t xn, -C mp_srcptr yp, mp_size_t yn); -C - -define(`rp', `%edi') -define(`up', `%esi') -define(`un', `%ecx') -define(`vp', `%ebp') -define(`vn', `36(%esp)') - - TEXT - ALIGN(16) -PROLOGUE(mpn_mul_basecase) - push %edi - push %esi - push %ebx - push %ebp - mov 20(%esp), rp - mov 24(%esp), up - mov 28(%esp), un - mov 32(%esp), vp - - movd (up), %mm0 - movd (vp), %mm7 - pmuludq %mm7, %mm0 - pxor %mm6, %mm6 - - mov un, %eax - and $3, %eax - jz L(of0) - cmp $2, %eax - jc L(of1) - jz L(of2) - -C ================================================================ - jmp L(m3) - ALIGN(16) -L(lm3): movd -4(up), %mm0 - pmuludq %mm7, %mm0 - psrlq $32, %mm6 - lea 16(rp), rp - paddq %mm0, %mm6 - movd (up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, -4(rp) - psrlq $32, %mm6 -L(m3): paddq %mm0, %mm6 - movd 4(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, (rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, 4(rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - sub $4, un - movd %mm6, 8(rp) - lea 16(up), up - ja L(lm3) - - psrlq $32, %mm6 - movd %mm6, 12(rp) - - decl vn - jz L(done) - lea -8(rp), rp - -L(ol3): mov 28(%esp), un - neg un - lea 4(vp), vp - movd (vp), %mm7 C read next V limb - mov 24(%esp), up - lea 16(rp,un,4), rp - - movd (up), %mm0 - pmuludq %mm7, %mm0 - sar $2, un - movd 4(up), %mm1 - movd %mm0, %ebx - pmuludq %mm7, %mm1 - lea -8(up), up - xor %edx, %edx C zero edx and CF - jmp L(a3) - -L(la3): movd 4(up), %mm1 - adc $0, %edx - add %eax, 12(rp) - movd %mm0, %ebx - pmuludq %mm7, %mm1 - lea 16(rp), rp - psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %edx - movd %mm1, %eax - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - adc $0, %edx - add %ebx, (rp) - psrlq $32, %mm1 - adc %edx, %eax - movd %mm1, %edx - movd %mm0, %ebx - movd 12(up), %mm1 - pmuludq %mm7, %mm1 - adc $0, %edx - add %eax, 4(rp) -L(a3): psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %edx - movd %mm1, %eax - lea 16(up), up - movd (up), %mm0 - adc $0, %edx - add %ebx, 8(rp) - psrlq $32, %mm1 - adc %edx, %eax - movd %mm1, %edx - pmuludq %mm7, %mm0 - inc un - jnz L(la3) - - adc un, %edx C un is zero here - add %eax, 12(rp) - movd %mm0, %ebx - psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %eax - adc un, %eax - add %ebx, 16(rp) - adc un, %eax - mov %eax, 20(rp) - - decl vn - jnz L(ol3) - jmp L(done) - -C ================================================================ - ALIGN(16) -L(lm0): movd (up), %mm0 - pmuludq %mm7, %mm0 - psrlq $32, %mm6 - lea 16(rp), rp -L(of0): paddq %mm0, %mm6 - movd 4(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, (rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, 4(rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - movd 12(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, 8(rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - sub $4, un - movd %mm6, 12(rp) - lea 16(up), up - ja L(lm0) - - psrlq $32, %mm6 - movd %mm6, 16(rp) - - decl vn - jz L(done) - lea -4(rp), rp - -L(ol0): mov 28(%esp), un - neg un - lea 4(vp), vp - movd (vp), %mm7 C read next V limb - mov 24(%esp), up - lea 20(rp,un,4), rp - - movd (up), %mm1 - pmuludq %mm7, %mm1 - sar $2, un - movd 4(up), %mm0 - lea -4(up), up - movd %mm1, %eax - pmuludq %mm7, %mm0 - xor %edx, %edx C zero edx and CF - jmp L(a0) - -L(la0): movd 4(up), %mm1 - adc $0, %edx - add %eax, 12(rp) - movd %mm0, %ebx - pmuludq %mm7, %mm1 - lea 16(rp), rp - psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %edx - movd %mm1, %eax - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - adc $0, %edx - add %ebx, (rp) -L(a0): psrlq $32, %mm1 - adc %edx, %eax - movd %mm1, %edx - movd %mm0, %ebx - movd 12(up), %mm1 - pmuludq %mm7, %mm1 - adc $0, %edx - add %eax, 4(rp) - psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %edx - movd %mm1, %eax - lea 16(up), up - movd (up), %mm0 - adc $0, %edx - add %ebx, 8(rp) - psrlq $32, %mm1 - adc %edx, %eax - movd %mm1, %edx - pmuludq %mm7, %mm0 - inc un - jnz L(la0) - - adc un, %edx C un is zero here - add %eax, 12(rp) - movd %mm0, %ebx - psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %eax - adc un, %eax - add %ebx, 16(rp) - adc un, %eax - mov %eax, 20(rp) - - decl vn - jnz L(ol0) - jmp L(done) - -C ================================================================ - ALIGN(16) -L(lm1): movd -12(up), %mm0 - pmuludq %mm7, %mm0 - psrlq $32, %mm6 - lea 16(rp), rp - paddq %mm0, %mm6 - movd -8(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, -12(rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - movd -4(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, -8(rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - movd (up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, -4(rp) - psrlq $32, %mm6 -L(of1): paddq %mm0, %mm6 - sub $4, un - movd %mm6, (rp) - lea 16(up), up - ja L(lm1) - - psrlq $32, %mm6 - movd %mm6, 4(rp) - - decl vn - jz L(done) - lea -16(rp), rp - -L(ol1): mov 28(%esp), un - neg un - lea 4(vp), vp - movd (vp), %mm7 C read next V limb - mov 24(%esp), up - lea 24(rp,un,4), rp - - movd (up), %mm0 - pmuludq %mm7, %mm0 - sar $2, un - movd %mm0, %ebx - movd 4(up), %mm1 - pmuludq %mm7, %mm1 - xor %edx, %edx C zero edx and CF - inc un - jmp L(a1) - -L(la1): movd 4(up), %mm1 - adc $0, %edx - add %eax, 12(rp) - movd %mm0, %ebx - pmuludq %mm7, %mm1 - lea 16(rp), rp -L(a1): psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %edx - movd %mm1, %eax - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - adc $0, %edx - add %ebx, (rp) - psrlq $32, %mm1 - adc %edx, %eax - movd %mm1, %edx - movd %mm0, %ebx - movd 12(up), %mm1 - pmuludq %mm7, %mm1 - adc $0, %edx - add %eax, 4(rp) - psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %edx - movd %mm1, %eax - lea 16(up), up - movd (up), %mm0 - adc $0, %edx - add %ebx, 8(rp) - psrlq $32, %mm1 - adc %edx, %eax - movd %mm1, %edx - pmuludq %mm7, %mm0 - inc un - jnz L(la1) - - adc un, %edx C un is zero here - add %eax, 12(rp) - movd %mm0, %ebx - psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %eax - adc un, %eax - add %ebx, 16(rp) - adc un, %eax - mov %eax, 20(rp) - - decl vn - jnz L(ol1) - jmp L(done) - -C ================================================================ - ALIGN(16) -L(lm2): movd -8(up), %mm0 - pmuludq %mm7, %mm0 - psrlq $32, %mm6 - lea 16(rp), rp - paddq %mm0, %mm6 - movd -4(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, -8(rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - movd (up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, -4(rp) - psrlq $32, %mm6 -L(of2): paddq %mm0, %mm6 - movd 4(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, (rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - sub $4, un - movd %mm6, 4(rp) - lea 16(up), up - ja L(lm2) - - psrlq $32, %mm6 - movd %mm6, 8(rp) - - decl vn - jz L(done) - lea -12(rp), rp - -L(ol2): mov 28(%esp), un - neg un - lea 4(vp), vp - movd (vp), %mm7 C read next V limb - mov 24(%esp), up - lea 12(rp,un,4), rp - - movd (up), %mm1 - pmuludq %mm7, %mm1 - sar $2, un - movd 4(up), %mm0 - lea 4(up), up - movd %mm1, %eax - xor %edx, %edx C zero edx and CF - jmp L(lo2) - -L(la2): movd 4(up), %mm1 - adc $0, %edx - add %eax, 12(rp) - movd %mm0, %ebx - pmuludq %mm7, %mm1 - lea 16(rp), rp - psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %edx - movd %mm1, %eax - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - adc $0, %edx - add %ebx, (rp) - psrlq $32, %mm1 - adc %edx, %eax - movd %mm1, %edx - movd %mm0, %ebx - movd 12(up), %mm1 - pmuludq %mm7, %mm1 - adc $0, %edx - add %eax, 4(rp) - psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %edx - movd %mm1, %eax - lea 16(up), up - movd (up), %mm0 - adc $0, %edx - add %ebx, 8(rp) -L(lo2): psrlq $32, %mm1 - adc %edx, %eax - movd %mm1, %edx - pmuludq %mm7, %mm0 - inc un - jnz L(la2) - - adc un, %edx C un is zero here - add %eax, 12(rp) - movd %mm0, %ebx - psrlq $32, %mm0 - adc %edx, %ebx - movd %mm0, %eax - adc un, %eax - add %ebx, 16(rp) - adc un, %eax - mov %eax, 20(rp) - - decl vn - jnz L(ol2) -C jmp L(done) - -C ================================================================ -L(done): - emms - pop %ebp - pop %ebx - pop %esi - pop %edi - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/popcount.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/popcount.asm deleted file mode 100644 index 7847aec8e664b7f15ce5796b4af35350d8f2c3bf..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/popcount.asm +++ /dev/null @@ -1,35 +0,0 @@ -dnl Intel Atom mpn_popcount -- population count. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -MULFUNC_PROLOGUE(mpn_popcount) -include_mpn(`x86/pentium4/sse2/popcount.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/sqr_basecase.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/sqr_basecase.asm deleted file mode 100644 index af19ed854d98b4517eccfc57447da6133f6057af..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sse2/sqr_basecase.asm +++ /dev/null @@ -1,634 +0,0 @@ -dnl x86 mpn_sqr_basecase -- square an mpn number, optimised for atom. - -dnl Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C TODO -C * Check if 'jmp N(%esp)' is well-predicted enough to allow us to combine the -C 4 large loops into one; we could use it for the outer loop branch. -C * Optimise code outside of inner loops. -C * Write combined addmul_1 feed-in a wind-down code, and use when iterating -C outer each loop. ("Overlapping software pipelining") -C * Perhaps use caller-saves regs for inlined mul_1, allowing us to postpone -C all pushes. -C * Perhaps write special code for n < M, for some small M. -C * Replace inlined addmul_1 with smaller code from aorsmul_1.asm, or perhaps -C with even less pipelined code. -C * We run the outer loop until we have a 2-limb by 1-limb addmul_1 left. -C Consider breaking out earlier, saving high the cost of short loops. - -C void mpn_sqr_basecase (mp_ptr wp, -C mp_srcptr xp, mp_size_t xn); - -define(`rp', `%edi') -define(`up', `%esi') -define(`n', `%ecx') - -define(`un', `%ebp') - - TEXT - ALIGN(16) -PROLOGUE(mpn_sqr_basecase) - push %edi - push %esi - mov 12(%esp), rp - mov 16(%esp), up - mov 20(%esp), n - - lea 4(rp), rp C write triangular product starting at rp[1] - dec n - movd (up), %mm7 - - jz L(one) - lea 4(up), up - push %ebx - push %ebp - mov n, %eax - - movd (up), %mm0 - neg n - pmuludq %mm7, %mm0 - pxor %mm6, %mm6 - mov n, un - - and $3, %eax - jz L(of0) - cmp $2, %eax - jc L(of1) - jz L(of2) - -C ================================================================ - jmp L(m3) - ALIGN(16) -L(lm3): movd -4(up), %mm0 - pmuludq %mm7, %mm0 - psrlq $32, %mm6 - lea 16(rp), rp - paddq %mm0, %mm6 - movd (up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, -4(rp) - psrlq $32, %mm6 -L(m3): paddq %mm0, %mm6 - movd 4(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, (rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, 4(rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - add $4, un - movd %mm6, 8(rp) - lea 16(up), up - js L(lm3) - - psrlq $32, %mm6 - movd %mm6, 12(rp) - - inc n -C jz L(done) - lea -12(up), up - lea 4(rp), rp - jmp L(ol2) - -C ================================================================ - ALIGN(16) -L(lm0): movd (up), %mm0 - pmuludq %mm7, %mm0 - psrlq $32, %mm6 - lea 16(rp), rp -L(of0): paddq %mm0, %mm6 - movd 4(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, (rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, 4(rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - movd 12(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, 8(rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - add $4, un - movd %mm6, 12(rp) - lea 16(up), up - js L(lm0) - - psrlq $32, %mm6 - movd %mm6, 16(rp) - - inc n -C jz L(done) - lea -8(up), up - lea 8(rp), rp - jmp L(ol3) - -C ================================================================ - ALIGN(16) -L(lm1): movd -12(up), %mm0 - pmuludq %mm7, %mm0 - psrlq $32, %mm6 - lea 16(rp), rp - paddq %mm0, %mm6 - movd -8(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, -12(rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - movd -4(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, -8(rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - movd (up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, -4(rp) - psrlq $32, %mm6 -L(of1): paddq %mm0, %mm6 - add $4, un - movd %mm6, (rp) - lea 16(up), up - js L(lm1) - - psrlq $32, %mm6 - movd %mm6, 4(rp) - - inc n - jz L(done) C goes away when we add special n=2 code - lea -20(up), up - lea -4(rp), rp - jmp L(ol0) - -C ================================================================ - ALIGN(16) -L(lm2): movd -8(up), %mm0 - pmuludq %mm7, %mm0 - psrlq $32, %mm6 - lea 16(rp), rp - paddq %mm0, %mm6 - movd -4(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, -8(rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - movd (up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, -4(rp) - psrlq $32, %mm6 -L(of2): paddq %mm0, %mm6 - movd 4(up), %mm0 - pmuludq %mm7, %mm0 - movd %mm6, (rp) - psrlq $32, %mm6 - paddq %mm0, %mm6 - add $4, un - movd %mm6, 4(rp) - lea 16(up), up - js L(lm2) - - psrlq $32, %mm6 - movd %mm6, 8(rp) - - inc n -C jz L(done) - lea -16(up), up -C lea (rp), rp -C jmp L(ol1) - -C ================================================================ - -L(ol1): lea 4(up,n,4), up - movd (up), %mm7 C read next U invariant limb - lea 8(rp,n,4), rp - mov n, un - - movd 4(up), %mm1 - pmuludq %mm7, %mm1 - sar $2, un - movd %mm1, %ebx - inc un - jz L(re1) - - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - xor %edx, %edx C zero edx and CF - jmp L(a1) - -L(la1): adc $0, %edx - add %ebx, 12(rp) - movd %mm0, %eax - pmuludq %mm7, %mm1 - lea 16(rp), rp - psrlq $32, %mm0 - adc %edx, %eax - movd %mm0, %edx - movd %mm1, %ebx - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - adc $0, %edx - add %eax, (rp) -L(a1): psrlq $32, %mm1 - adc %edx, %ebx - movd %mm1, %edx - movd %mm0, %eax - movd 12(up), %mm1 - pmuludq %mm7, %mm1 - adc $0, %edx - add %ebx, 4(rp) - psrlq $32, %mm0 - adc %edx, %eax - movd %mm0, %edx - movd %mm1, %ebx - lea 16(up), up - movd (up), %mm0 - adc $0, %edx - add %eax, 8(rp) - psrlq $32, %mm1 - adc %edx, %ebx - movd %mm1, %edx - pmuludq %mm7, %mm0 - inc un - movd 4(up), %mm1 - jnz L(la1) - - adc un, %edx C un is zero here - add %ebx, 12(rp) - movd %mm0, %eax - pmuludq %mm7, %mm1 - lea 16(rp), rp - psrlq $32, %mm0 - adc %edx, %eax - movd %mm0, %edx - movd %mm1, %ebx - adc un, %edx - add %eax, (rp) - psrlq $32, %mm1 - adc %edx, %ebx - movd %mm1, %eax - adc un, %eax - add %ebx, 4(rp) - adc un, %eax - mov %eax, 8(rp) - - inc n - -C ================================================================ - -L(ol0): lea (up,n,4), up - movd 4(up), %mm7 C read next U invariant limb - lea 4(rp,n,4), rp - mov n, un - - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - sar $2, un - movd 12(up), %mm1 - movd %mm0, %eax - pmuludq %mm7, %mm1 - xor %edx, %edx C zero edx and CF - jmp L(a0) - -L(la0): adc $0, %edx - add %ebx, 12(rp) - movd %mm0, %eax - pmuludq %mm7, %mm1 - lea 16(rp), rp - psrlq $32, %mm0 - adc %edx, %eax - movd %mm0, %edx - movd %mm1, %ebx - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - adc $0, %edx - add %eax, (rp) - psrlq $32, %mm1 - adc %edx, %ebx - movd %mm1, %edx - movd %mm0, %eax - movd 12(up), %mm1 - pmuludq %mm7, %mm1 - adc $0, %edx - add %ebx, 4(rp) -L(a0): psrlq $32, %mm0 - adc %edx, %eax - movd %mm0, %edx - movd %mm1, %ebx - lea 16(up), up - movd (up), %mm0 - adc $0, %edx - add %eax, 8(rp) - psrlq $32, %mm1 - adc %edx, %ebx - movd %mm1, %edx - pmuludq %mm7, %mm0 - inc un - movd 4(up), %mm1 - jnz L(la0) - - adc un, %edx C un is zero here - add %ebx, 12(rp) - movd %mm0, %eax - pmuludq %mm7, %mm1 - lea 16(rp), rp - psrlq $32, %mm0 - adc %edx, %eax - movd %mm0, %edx - movd %mm1, %ebx - adc un, %edx - add %eax, (rp) - psrlq $32, %mm1 - adc %edx, %ebx - movd %mm1, %eax - adc un, %eax - add %ebx, 4(rp) - adc un, %eax - mov %eax, 8(rp) - - inc n - -C ================================================================ - -L(ol3): lea 12(up,n,4), up - movd -8(up), %mm7 C read next U invariant limb - lea (rp,n,4), rp C put rp back - mov n, un - - movd -4(up), %mm1 - pmuludq %mm7, %mm1 - sar $2, un - movd %mm1, %ebx - movd (up), %mm0 - xor %edx, %edx C zero edx and CF - jmp L(a3) - -L(la3): adc $0, %edx - add %ebx, 12(rp) - movd %mm0, %eax - pmuludq %mm7, %mm1 - lea 16(rp), rp - psrlq $32, %mm0 - adc %edx, %eax - movd %mm0, %edx - movd %mm1, %ebx - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - adc $0, %edx - add %eax, (rp) - psrlq $32, %mm1 - adc %edx, %ebx - movd %mm1, %edx - movd %mm0, %eax - movd 12(up), %mm1 - pmuludq %mm7, %mm1 - adc $0, %edx - add %ebx, 4(rp) - psrlq $32, %mm0 - adc %edx, %eax - movd %mm0, %edx - movd %mm1, %ebx - lea 16(up), up - movd (up), %mm0 - adc $0, %edx - add %eax, 8(rp) -L(a3): psrlq $32, %mm1 - adc %edx, %ebx - movd %mm1, %edx - pmuludq %mm7, %mm0 - inc un - movd 4(up), %mm1 - jnz L(la3) - - adc un, %edx C un is zero here - add %ebx, 12(rp) - movd %mm0, %eax - pmuludq %mm7, %mm1 - lea 16(rp), rp - psrlq $32, %mm0 - adc %edx, %eax - movd %mm0, %edx - movd %mm1, %ebx - adc un, %edx - add %eax, (rp) - psrlq $32, %mm1 - adc %edx, %ebx - movd %mm1, %eax - adc un, %eax - add %ebx, 4(rp) - adc un, %eax - mov %eax, 8(rp) - - inc n - -C ================================================================ - -L(ol2): lea 8(up,n,4), up - movd -4(up), %mm7 C read next U invariant limb - lea 12(rp,n,4), rp - mov n, un - - movd (up), %mm0 - pmuludq %mm7, %mm0 - xor %edx, %edx - sar $2, un - movd 4(up), %mm1 - test un, un C clear carry - movd %mm0, %eax - pmuludq %mm7, %mm1 - inc un - jnz L(a2) - jmp L(re2) - -L(la2): adc $0, %edx - add %ebx, 12(rp) - movd %mm0, %eax - pmuludq %mm7, %mm1 - lea 16(rp), rp -L(a2): psrlq $32, %mm0 - adc %edx, %eax - movd %mm0, %edx - movd %mm1, %ebx - movd 8(up), %mm0 - pmuludq %mm7, %mm0 - adc $0, %edx - add %eax, (rp) - psrlq $32, %mm1 - adc %edx, %ebx - movd %mm1, %edx - movd %mm0, %eax - movd 12(up), %mm1 - pmuludq %mm7, %mm1 - adc $0, %edx - add %ebx, 4(rp) - psrlq $32, %mm0 - adc %edx, %eax - movd %mm0, %edx - movd %mm1, %ebx - lea 16(up), up - movd (up), %mm0 - adc $0, %edx - add %eax, 8(rp) - psrlq $32, %mm1 - adc %edx, %ebx - movd %mm1, %edx - pmuludq %mm7, %mm0 - inc un - movd 4(up), %mm1 - jnz L(la2) - - adc un, %edx C un is zero here - add %ebx, 12(rp) - movd %mm0, %eax - pmuludq %mm7, %mm1 - lea 16(rp), rp - psrlq $32, %mm0 - adc %edx, %eax - movd %mm0, %edx - movd %mm1, %ebx - adc un, %edx - add %eax, (rp) - psrlq $32, %mm1 - adc %edx, %ebx - movd %mm1, %eax - adc un, %eax - add %ebx, 4(rp) - adc un, %eax - mov %eax, 8(rp) - - inc n - jmp L(ol1) - -C ================================================================ -L(re2): psrlq $32, %mm0 - movd (up), %mm7 C read next U invariant limb - adc %edx, %eax - movd %mm0, %edx - movd %mm1, %ebx - adc un, %edx - add %eax, (rp) - lea 4(rp), rp - psrlq $32, %mm1 - adc %edx, %ebx - movd %mm1, %eax - movd 4(up), %mm1 - adc un, %eax - add %ebx, (rp) - pmuludq %mm7, %mm1 - adc un, %eax - mov %eax, 4(rp) - movd %mm1, %ebx - -L(re1): psrlq $32, %mm1 - add %ebx, 4(rp) - movd %mm1, %eax - adc un, %eax - xor n, n C make n zeroness assumption below true - mov %eax, 8(rp) - -L(done): C n is zero here - mov 24(%esp), up - mov 28(%esp), %eax - - movd (up), %mm0 - inc %eax - pmuludq %mm0, %mm0 - lea 4(up), up - mov 20(%esp), rp - shr %eax - movd %mm0, (rp) - psrlq $32, %mm0 - lea -12(rp), rp - mov %eax, 28(%esp) - jnc L(odd) - - movd %mm0, %ebp - movd (up), %mm0 - lea 8(rp), rp - pmuludq %mm0, %mm0 - lea -4(up), up - add 8(rp), %ebp - movd %mm0, %edx - adc 12(rp), %edx - rcr n - jmp L(ent) - -C ALIGN(16) C alignment seems irrelevant -L(top): movd (up), %mm1 - adc n, n - movd %mm0, %eax - pmuludq %mm1, %mm1 - movd 4(up), %mm0 - adc (rp), %eax - movd %mm1, %ebx - pmuludq %mm0, %mm0 - psrlq $32, %mm1 - adc 4(rp), %ebx - movd %mm1, %ebp - movd %mm0, %edx - adc 8(rp), %ebp - adc 12(rp), %edx - rcr n C FIXME: isn't this awfully slow on atom??? - adc %eax, (rp) - adc %ebx, 4(rp) -L(ent): lea 8(up), up - adc %ebp, 8(rp) - psrlq $32, %mm0 - adc %edx, 12(rp) -L(odd): decl 28(%esp) - lea 16(rp), rp - jnz L(top) - -L(end): adc n, n - movd %mm0, %eax - adc n, %eax - mov %eax, (rp) - -L(rtn): emms - pop %ebp - pop %ebx - pop %esi - pop %edi - ret - -L(one): pmuludq %mm7, %mm7 - movq %mm7, -4(rp) - emms - pop %esi - pop %edi - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sublsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sublsh1_n.asm deleted file mode 100644 index d3e7e5b5cbd145aabfc7139a53107130ab2039ee..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sublsh1_n.asm +++ /dev/null @@ -1,34 +0,0 @@ -dnl Intel Atom mpn_sublsh1_n -- rp[] = up[] - (vp[] << 1) - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_sublsh1_n_ip1) -include_mpn(`x86/k7/sublsh1_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sublsh2_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sublsh2_n.asm deleted file mode 100644 index 79405cf9f4b0f80683ad4db8ea1e1cee50d011ba..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/atom/sublsh2_n.asm +++ /dev/null @@ -1,57 +0,0 @@ -dnl Intel Atom mpn_addlsh2_n/mpn_sublsh2_n -- rp[] = up[] +- (vp[] << 2). - -dnl Contributed to the GNU project by Marco Bodrato. - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -define(LSH, 2) -define(RSH, 30) - -ifdef(`OPERATION_addlsh2_n', ` - define(M4_inst, adcl) - define(M4_opp, subl) - define(M4_function, mpn_addlsh2_n) - define(M4_function_c, mpn_addlsh2_nc) - define(M4_ip_function_c, mpn_addlsh2_nc_ip1) - define(M4_ip_function, mpn_addlsh2_n_ip1) -',`ifdef(`OPERATION_sublsh2_n', ` - define(M4_inst, sbbl) - define(M4_opp, addl) - define(M4_function, mpn_sublsh2_n) - define(M4_function_c, mpn_sublsh2_nc) - define(M4_ip_function_c, mpn_sublsh2_nc_ip1) - define(M4_ip_function, mpn_sublsh2_n_ip1) -',`m4_error(`Need OPERATION_addlsh2_n or OPERATION_sublsh2_n -')')') - -MULFUNC_PROLOGUE(mpn_sublsh2_n mpn_sublsh2_nc mpn_sublsh2_n_ip1 mpn_sublsh2_nc_ip1) - -include_mpn(`x86/atom/aorslshC_n.asm') diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bd1/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bd1/gmp-mparam.h deleted file mode 100644 index 7d80a1cb4c0e5f50571be9d545e67d6d383a4123..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bd1/gmp-mparam.h +++ /dev/null @@ -1,208 +0,0 @@ -/* AMD bd2 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2005, 2008-2010, 2014 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 3600 MHz Bulldozer Zambezi */ -/* FFT tuning limit = 25000000 */ -/* Generated by tuneup.c, 2014-03-13, gcc 4.5 */ - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 3 -#define MOD_1N_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 4 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 16 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 11 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 3 -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 27 - -#define MUL_TOOM22_THRESHOLD 32 -#define MUL_TOOM33_THRESHOLD 65 -#define MUL_TOOM44_THRESHOLD 154 -#define MUL_TOOM6H_THRESHOLD 230 -#define MUL_TOOM8H_THRESHOLD 354 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 89 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 110 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 93 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 102 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 130 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 48 -#define SQR_TOOM3_THRESHOLD 87 -#define SQR_TOOM4_THRESHOLD 204 -#define SQR_TOOM6_THRESHOLD 315 -#define SQR_TOOM8_THRESHOLD 430 - -#define MULMID_TOOM42_THRESHOLD 48 - -#define MULMOD_BNM1_THRESHOLD 21 -#define SQRMOD_BNM1_THRESHOLD 23 - -#define MUL_FFT_MODF_THRESHOLD 840 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 840, 5}, { 28, 6}, { 15, 5}, { 33, 6}, \ - { 28, 7}, { 15, 6}, { 32, 7}, { 17, 6}, \ - { 35, 7}, { 19, 6}, { 39, 7}, { 23, 6}, \ - { 47, 7}, { 29, 8}, { 15, 7}, { 31, 6}, \ - { 63, 7}, { 35, 8}, { 19, 7}, { 41, 8}, \ - { 23, 7}, { 51, 8}, { 27, 7}, { 55, 8}, \ - { 31, 7}, { 63, 8}, { 39, 7}, { 79, 9}, \ - { 23, 8}, { 55, 9}, { 31, 8}, { 67, 9}, \ - { 39, 8}, { 79, 9}, { 47, 8}, { 95, 9}, \ - { 55,10}, { 31, 9}, { 63, 8}, { 127, 9}, \ - { 79,10}, { 47, 9}, { 103,11}, { 31,10}, \ - { 63, 9}, { 135,10}, { 79, 9}, { 159,10}, \ - { 95, 9}, { 191,10}, { 111,11}, { 63,10}, \ - { 127, 9}, { 255,10}, { 159,11}, { 95,10}, \ - { 191,12}, { 63,11}, { 127,10}, { 271,11}, \ - { 159,10}, { 319, 9}, { 639,11}, { 191,10}, \ - { 383, 9}, { 767,11}, { 223,12}, { 127,11}, \ - { 255,10}, { 511,11}, { 287,10}, { 607,11}, \ - { 319,10}, { 639,12}, { 191,11}, { 383,10}, \ - { 799,13}, { 127,12}, { 255,11}, { 543,10}, \ - { 1087,11}, { 607,12}, { 319,11}, { 671,10}, \ - { 1343,11}, { 735,10}, { 1471, 9}, { 2943,12}, \ - { 383,11}, { 799,10}, { 1599,11}, { 863,10}, \ - { 1727,12}, { 447,13}, { 255,12}, { 511,11}, \ - { 1087,12}, { 575,11}, { 1215,10}, { 2431,12}, \ - { 639,11}, { 1343,12}, { 703,11}, { 1471,10}, \ - { 2943,13}, { 383,12}, { 767,11}, { 1599,12}, \ - { 831,11}, { 1727,10}, { 3455,14}, { 255,13}, \ - { 511,12}, { 1087,11}, { 2239,12}, { 1215,11}, \ - { 2431,13}, { 639,12}, { 1471,11}, { 2943,13}, \ - { 767,12}, { 1727,11}, { 3455,13}, { 895,12}, \ - { 1919,11}, { 3839,12}, { 1983,11}, { 3967,10}, \ - { 7935,14}, { 511,13}, { 1023,12}, { 2239,13}, \ - { 1151,12}, { 2495,11}, { 4991,13}, { 1279,12}, \ - { 2623,13}, { 1407,12}, { 2943,14}, { 767,13}, \ - { 1535,12}, { 3071,13}, { 1663,12}, { 3455,13}, \ - { 1791,12}, { 3583,13}, { 1919,12}, { 3967,11}, \ - { 7935,15}, { 511,14}, { 1023,13}, { 2175,12}, \ - { 4479,13}, { 2431,12}, { 4991,14}, { 1279,13}, \ - { 2943,12}, { 6015,14}, { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 160 -#define MUL_FFT_THRESHOLD 7808 - -#define SQR_FFT_MODF_THRESHOLD 690 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 690, 5}, { 28, 6}, { 15, 5}, { 32, 6}, \ - { 29, 7}, { 15, 6}, { 33, 7}, { 17, 6}, \ - { 35, 7}, { 19, 6}, { 40, 7}, { 21, 6}, \ - { 43, 7}, { 23, 6}, { 47, 7}, { 35, 8}, \ - { 19, 7}, { 43, 8}, { 23, 7}, { 49, 8}, \ - { 27, 7}, { 55, 8}, { 31, 7}, { 63, 8}, \ - { 39, 7}, { 79, 8}, { 43, 9}, { 23, 8}, \ - { 55, 9}, { 31, 8}, { 67, 9}, { 39, 8}, \ - { 79, 9}, { 47, 8}, { 95, 9}, { 55,10}, \ - { 31, 9}, { 63, 8}, { 127, 9}, { 79,10}, \ - { 47, 9}, { 95,11}, { 31,10}, { 63, 9}, \ - { 127,10}, { 79, 9}, { 167,10}, { 95, 9}, \ - { 191,10}, { 111,11}, { 63,10}, { 159,11}, \ - { 95,10}, { 191,12}, { 63,11}, { 127,10}, \ - { 271,11}, { 159,10}, { 319, 9}, { 639,11}, \ - { 191,10}, { 383,11}, { 223,12}, { 127,11}, \ - { 255,10}, { 511, 9}, { 1023,10}, { 543,11}, \ - { 287,10}, { 607, 9}, { 1215,11}, { 319,10}, \ - { 639,12}, { 191,11}, { 383,10}, { 799,11}, \ - { 415,13}, { 127,12}, { 255,11}, { 511,10}, \ - { 1023,11}, { 543,10}, { 1087,11}, { 607,10}, \ - { 1215,12}, { 319,11}, { 671,10}, { 1343,11}, \ - { 735,10}, { 1471,12}, { 383,11}, { 799,10}, \ - { 1599,11}, { 863,12}, { 447,11}, { 927,13}, \ - { 255,12}, { 511,11}, { 1055,10}, { 2111,11}, \ - { 1087,12}, { 575,11}, { 1215,10}, { 2431,12}, \ - { 639,11}, { 1343,12}, { 703,11}, { 1471,13}, \ - { 383,12}, { 767,11}, { 1599,12}, { 831,11}, \ - { 1727,10}, { 3455,12}, { 895,14}, { 255,13}, \ - { 511,12}, { 1023,11}, { 2111,12}, { 1087,11}, \ - { 2239,10}, { 4479,12}, { 1215,11}, { 2431,13}, \ - { 639,12}, { 1471,11}, { 2943,13}, { 767,12}, \ - { 1727,11}, { 3455,13}, { 895,12}, { 1983,11}, \ - { 3967,14}, { 511,13}, { 1023,12}, { 2239,11}, \ - { 4479,13}, { 1151,12}, { 2495,11}, { 4991,10}, \ - { 9983,13}, { 1279,12}, { 2623,13}, { 1407,12}, \ - { 2943,14}, { 767,13}, { 1663,12}, { 3455,13}, \ - { 1791,12}, { 3583,13}, { 1919,12}, { 3967,15}, \ - { 511,14}, { 1023,13}, { 2175,12}, { 4479,13}, \ - { 2431,12}, { 4991,11}, { 9983,14}, { 1279,13}, \ - { 2687,12}, { 5375,13}, { 2943,12}, { 5887,14}, \ - { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 166 -#define SQR_FFT_THRESHOLD 6784 - -#define MULLO_BASECASE_THRESHOLD 5 -#define MULLO_DC_THRESHOLD 31 -#define MULLO_MUL_N_THRESHOLD 14709 - -#define DC_DIV_QR_THRESHOLD 53 -#define DC_DIVAPPR_Q_THRESHOLD 230 -#define DC_BDIV_QR_THRESHOLD 50 -#define DC_BDIV_Q_THRESHOLD 136 - -#define INV_MULMOD_BNM1_THRESHOLD 78 -#define INV_NEWTON_THRESHOLD 202 -#define INV_APPR_THRESHOLD 202 - -#define BINV_NEWTON_THRESHOLD 236 -#define REDC_1_TO_REDC_N_THRESHOLD 55 - -#define MU_DIV_QR_THRESHOLD 1442 -#define MU_DIVAPPR_Q_THRESHOLD 1652 -#define MUPI_DIV_QR_THRESHOLD 81 -#define MU_BDIV_QR_THRESHOLD 1787 -#define MU_BDIV_Q_THRESHOLD 1685 - -#define POWM_SEC_TABLE 1,22,194,376,692,2657 - -#define MATRIX22_STRASSEN_THRESHOLD 21 -#define HGCD_THRESHOLD 85 -#define HGCD_APPR_THRESHOLD 50 -#define HGCD_REDUCE_THRESHOLD 4455 -#define GCD_DC_THRESHOLD 456 -#define GCDEXT_DC_THRESHOLD 345 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 17 -#define GET_STR_PRECOMPUTE_THRESHOLD 27 -#define SET_STR_DC_THRESHOLD 100 -#define SET_STR_PRECOMPUTE_THRESHOLD 960 - -#define FAC_DSC_THRESHOLD 208 -#define FAC_ODD_THRESHOLD 26 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bd2/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bd2/gmp-mparam.h deleted file mode 100644 index 57223ea360f9c1f4dd0cc9287c18bbd0cab43f67..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bd2/gmp-mparam.h +++ /dev/null @@ -1,211 +0,0 @@ -/* AMD bd2 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2005, 2008-2010, 2014, 2015 Free -Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 4000 MHz Piledriver Vishera */ -/* FFT tuning limit = 40000000 */ - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 3 -#define MOD_1N_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 5 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 19 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 10 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 3 -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 24 - -#define MUL_TOOM22_THRESHOLD 30 -#define MUL_TOOM33_THRESHOLD 81 -#define MUL_TOOM44_THRESHOLD 153 -#define MUL_TOOM6H_THRESHOLD 222 -#define MUL_TOOM8H_THRESHOLD 357 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 89 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 114 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 99 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 96 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 130 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 38 -#define SQR_TOOM3_THRESHOLD 89 -#define SQR_TOOM4_THRESHOLD 196 -#define SQR_TOOM6_THRESHOLD 290 -#define SQR_TOOM8_THRESHOLD 454 - -#define MULMID_TOOM42_THRESHOLD 68 - -#define MULMOD_BNM1_THRESHOLD 19 -#define SQRMOD_BNM1_THRESHOLD 22 - -#define MUL_FFT_MODF_THRESHOLD 636 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 636, 5}, { 27, 6}, { 27, 7}, { 15, 6}, \ - { 33, 7}, { 17, 6}, { 35, 7}, { 19, 6}, \ - { 39, 7}, { 23, 6}, { 47, 7}, { 29, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 41, 8}, \ - { 23, 7}, { 49, 8}, { 27, 7}, { 55, 9}, \ - { 15, 8}, { 31, 7}, { 63, 8}, { 43, 9}, \ - { 23, 8}, { 55, 9}, { 31, 8}, { 67, 9}, \ - { 39, 8}, { 79, 9}, { 47, 8}, { 95, 9}, \ - { 55,10}, { 31, 9}, { 63, 8}, { 127, 9}, \ - { 79,10}, { 47, 9}, { 95,11}, { 31,10}, \ - { 63, 9}, { 135,10}, { 79, 9}, { 159,10}, \ - { 95, 9}, { 191,11}, { 63,10}, { 127, 6}, \ - { 2111, 5}, { 4351, 6}, { 2239, 7}, { 1215, 9}, \ - { 311, 8}, { 639,10}, { 175, 8}, { 703,10}, \ - { 191,12}, { 63,11}, { 127,10}, { 255, 9}, \ - { 511,10}, { 271, 9}, { 543,10}, { 287,11}, \ - { 159, 9}, { 671,11}, { 191,10}, { 383, 9}, \ - { 799,11}, { 223,12}, { 127,11}, { 255,10}, \ - { 543, 9}, { 1087,11}, { 287,10}, { 607,11}, \ - { 319,10}, { 671,12}, { 191,11}, { 383,10}, \ - { 799,11}, { 415,13}, { 127,12}, { 255,11}, \ - { 543,10}, { 1087,11}, { 607,10}, { 1215,12}, \ - { 319,11}, { 671,10}, { 1343,11}, { 735,10}, \ - { 1471,12}, { 383,11}, { 799,10}, { 1599,11}, \ - { 863,12}, { 447,11}, { 895,13}, { 255,12}, \ - { 511,11}, { 1087,12}, { 575,11}, { 1215,10}, \ - { 2431,12}, { 639,11}, { 1343,12}, { 703,11}, \ - { 1471,13}, { 383,12}, { 767,11}, { 1599,12}, \ - { 831,11}, { 1727,10}, { 3455,12}, { 895,14}, \ - { 255,13}, { 511,12}, { 1023,11}, { 2047,12}, \ - { 1087,11}, { 2239,10}, { 4479,12}, { 1215,11}, \ - { 2431,13}, { 639,12}, { 1471,11}, { 2943,13}, \ - { 767,12}, { 1727,11}, { 3455,13}, { 895,12}, \ - { 1919,14}, { 511,13}, { 1023,12}, { 2239,11}, \ - { 4479,13}, { 1151,12}, { 2495,11}, { 4991,13}, \ - { 1279,12}, { 2623,13}, { 1407,12}, { 2943,14}, \ - { 767,13}, { 1535,12}, { 3071,13}, { 1663,12}, \ - { 3455,13}, { 1919,15}, { 511,14}, { 1023,13}, \ - { 2175,12}, { 4479,13}, { 2431,12}, { 4991,14}, \ - { 1279,13}, { 2943,12}, { 5887,14}, { 1535,13}, \ - { 3455,14}, { 1791,13}, { 3967,12}, { 7935,11}, \ - { 15871,15}, { 1023,14}, { 2047,13}, { 4479,14}, \ - { 2303,13}, { 8192,14}, { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 172 -#define MUL_FFT_THRESHOLD 6784 - -#define SQR_FFT_MODF_THRESHOLD 606 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 606, 5}, { 28, 6}, { 15, 5}, { 31, 6}, \ - { 29, 7}, { 15, 6}, { 32, 7}, { 17, 6}, \ - { 35, 7}, { 19, 6}, { 39, 7}, { 23, 6}, \ - { 47, 7}, { 29, 8}, { 15, 7}, { 35, 8}, \ - { 19, 7}, { 41, 8}, { 23, 7}, { 49, 8}, \ - { 31, 7}, { 63, 8}, { 43, 9}, { 23, 8}, \ - { 51, 9}, { 31, 8}, { 67, 9}, { 39, 8}, \ - { 79, 9}, { 47, 8}, { 95,10}, { 31, 9}, \ - { 79,10}, { 47, 9}, { 95,11}, { 31,10}, \ - { 63, 9}, { 135,10}, { 79, 9}, { 159,10}, \ - { 95, 9}, { 191,11}, { 63,10}, { 159,11}, \ - { 95,10}, { 191, 6}, { 3135, 5}, { 6399, 6}, \ - { 3455, 8}, { 895, 9}, { 479, 8}, { 991,10}, \ - { 255, 9}, { 575,11}, { 159, 9}, { 639,10}, \ - { 335, 8}, { 1343,10}, { 351,11}, { 191, 9}, \ - { 799,11}, { 223,12}, { 127,11}, { 255,10}, \ - { 543,11}, { 287,10}, { 607, 9}, { 1215,10}, \ - { 671,12}, { 191,11}, { 383,10}, { 767, 9}, \ - { 1535,10}, { 799,11}, { 415,10}, { 863,13}, \ - { 127,12}, { 255,11}, { 511,10}, { 1023,11}, \ - { 543,10}, { 1087,11}, { 607,12}, { 319,11}, \ - { 671,10}, { 1343,11}, { 735,12}, { 383,11}, \ - { 799,10}, { 1599,11}, { 863,12}, { 447,11}, \ - { 927,13}, { 255,12}, { 511,11}, { 1087,12}, \ - { 575,11}, { 1215,12}, { 639,11}, { 1343,12}, \ - { 703,11}, { 1471,13}, { 383,12}, { 767,11}, \ - { 1599,12}, { 831,11}, { 1727,12}, { 895,11}, \ - { 1791,12}, { 959,14}, { 255,13}, { 511,12}, \ - { 1087,11}, { 2239,10}, { 4479,12}, { 1215,13}, \ - { 639,12}, { 1471,11}, { 2943,13}, { 767,12}, \ - { 1727,13}, { 895,12}, { 1919,14}, { 511,13}, \ - { 1023,12}, { 2239,11}, { 4479,13}, { 1151,12}, \ - { 2495,11}, { 4991,13}, { 1279,12}, { 2623,13}, \ - { 1407,12}, { 2943,14}, { 767,13}, { 1663,12}, \ - { 3455,13}, { 1791,12}, { 3583,13}, { 1919,15}, \ - { 511,14}, { 1023,13}, { 2175,12}, { 4479,13}, \ - { 2431,12}, { 4991,14}, { 1279,13}, { 2943,12}, \ - { 5887,14}, { 1535,13}, { 3455,14}, { 1791,13}, \ - { 3967,15}, { 1023,14}, { 2047,13}, { 4479,14}, \ - { 2303,13}, { 8192,14}, { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 160 -#define SQR_FFT_THRESHOLD 5760 - -#define MULLO_BASECASE_THRESHOLD 3 -#define MULLO_DC_THRESHOLD 34 -#define MULLO_MUL_N_THRESHOLD 13463 -#define SQRLO_BASECASE_THRESHOLD 7 -#define SQRLO_DC_THRESHOLD 43 -#define SQRLO_SQR_THRESHOLD 11278 - -#define DC_DIV_QR_THRESHOLD 67 -#define DC_DIVAPPR_Q_THRESHOLD 196 -#define DC_BDIV_QR_THRESHOLD 67 -#define DC_BDIV_Q_THRESHOLD 112 - -#define INV_MULMOD_BNM1_THRESHOLD 70 -#define INV_NEWTON_THRESHOLD 262 -#define INV_APPR_THRESHOLD 222 - -#define BINV_NEWTON_THRESHOLD 288 -#define REDC_1_TO_REDC_N_THRESHOLD 67 - -#define MU_DIV_QR_THRESHOLD 1718 -#define MU_DIVAPPR_Q_THRESHOLD 1652 -#define MUPI_DIV_QR_THRESHOLD 122 -#define MU_BDIV_QR_THRESHOLD 1387 -#define MU_BDIV_Q_THRESHOLD 1528 - -#define POWM_SEC_TABLE 1,16,69,508,1378,2657,2825 - -#define MATRIX22_STRASSEN_THRESHOLD 19 -#define HGCD_THRESHOLD 61 -#define HGCD_APPR_THRESHOLD 50 -#define HGCD_REDUCE_THRESHOLD 3389 -#define GCD_DC_THRESHOLD 492 -#define GCDEXT_DC_THRESHOLD 345 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 9 -#define GET_STR_PRECOMPUTE_THRESHOLD 21 -#define SET_STR_DC_THRESHOLD 189 -#define SET_STR_PRECOMPUTE_THRESHOLD 541 - -#define FAC_DSC_THRESHOLD 141 -#define FAC_ODD_THRESHOLD 29 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bdiv_dbm1c.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bdiv_dbm1c.asm deleted file mode 100644 index 0288c475cdc6073135e8d13d49813d7e5f84d15a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bdiv_dbm1c.asm +++ /dev/null @@ -1,129 +0,0 @@ -dnl x86 mpn_bdiv_dbm1. - -dnl Copyright 2008, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C P5 -C P6 model 0-8,10-12) -C P6 model 9 (Banias) -C P6 model 13 (Dothan) 5.1 -C P4 model 0 (Willamette) -C P4 model 1 (?) -C P4 model 2 (Northwood) 13.67 -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C Intel Atom -C AMD K6 -C AMD K7 3.5 -C AMD K8 -C AMD K10 - - -C TODO -C * Optimize for more x86 processors - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(mpn_bdiv_dbm1c) - mov 16(%esp), %ecx C d - push %esi - mov 12(%esp), %esi C ap - push %edi - mov 12(%esp), %edi C qp - push %ebp - mov 24(%esp), %ebp C n - push %ebx - - mov (%esi), %eax - mul %ecx - mov 36(%esp), %ebx - sub %eax, %ebx - mov %ebx, (%edi) - sbb %edx, %ebx - - mov %ebp, %eax - and $3, %eax - jz L(b0) - cmp $2, %eax - jc L(b1) - jz L(b2) - -L(b3): lea -8(%esi), %esi - lea 8(%edi), %edi - add $-3, %ebp - jmp L(3) - -L(b0): mov 4(%esi), %eax - lea -4(%esi), %esi - lea 12(%edi), %edi - add $-4, %ebp - jmp L(0) - -L(b2): mov 4(%esi), %eax - lea 4(%esi), %esi - lea 4(%edi), %edi - add $-2, %ebp - jmp L(2) - - ALIGN(8) -L(top): mov 4(%esi), %eax - mul %ecx - lea 16(%edi), %edi - sub %eax, %ebx - mov 8(%esi), %eax - mov %ebx, -12(%edi) - sbb %edx, %ebx -L(0): mul %ecx - sub %eax, %ebx - mov %ebx, -8(%edi) - sbb %edx, %ebx -L(3): mov 12(%esi), %eax - mul %ecx - sub %eax, %ebx - mov %ebx, -4(%edi) - mov 16(%esi), %eax - lea 16(%esi), %esi - sbb %edx, %ebx -L(2): mul %ecx - sub %eax, %ebx - mov %ebx, 0(%edi) - sbb %edx, %ebx -L(b1): add $-4, %ebp - jns L(top) - - mov %ebx, %eax - pop %ebx - pop %ebp - pop %edi - pop %esi - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bdiv_q_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bdiv_q_1.asm deleted file mode 100644 index 132de067dba2cb1d894933a28972b4f8dae6065b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bdiv_q_1.asm +++ /dev/null @@ -1,208 +0,0 @@ -dnl x86 mpn_bdiv_q_1 -- mpn by limb exact division. - -dnl Rearranged from mpn/x86/dive_1.asm by Marco Bodrato. - -dnl Copyright 2001, 2002, 2007, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C P54 30.0 -C P55 29.0 -C P6 13.0 odd divisor, 12.0 even (strangely) -C K6 14.0 -C K7 12.0 -C P4 42.0 - -MULFUNC_PROLOGUE(mpn_bdiv_q_1 mpn_pi1_bdiv_q_1) - -defframe(PARAM_SHIFT, 24) -defframe(PARAM_INVERSE,20) -defframe(PARAM_DIVISOR,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl re-use parameter space -define(VAR_INVERSE,`PARAM_SRC') - - TEXT - -C mp_limb_t -C mpn_pi1_bdiv_q_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, mp_limb_t divisor, -C mp_limb_t inverse, int shift) - - ALIGN(16) -PROLOGUE(mpn_pi1_bdiv_q_1) -deflit(`FRAME',0) - - movl PARAM_SHIFT, %ecx - pushl %ebp FRAME_pushl() - - movl PARAM_INVERSE, %eax - movl PARAM_SIZE, %ebp - pushl %ebx FRAME_pushl() -L(common): - pushl %edi FRAME_pushl() - pushl %esi FRAME_pushl() - - movl PARAM_SRC, %esi - movl PARAM_DST, %edi - - leal (%esi,%ebp,4), %esi C src end - leal (%edi,%ebp,4), %edi C dst end - negl %ebp C -size - - movl %eax, VAR_INVERSE - movl (%esi,%ebp,4), %eax C src[0] - - xorl %ebx, %ebx - xorl %edx, %edx - - incl %ebp - jz L(one) - - movl (%esi,%ebp,4), %edx C src[1] - - shrdl( %cl, %edx, %eax) - - movl VAR_INVERSE, %edx - jmp L(entry) - - - ALIGN(8) - nop C k6 code alignment - nop -L(top): - C eax q - C ebx carry bit, 0 or -1 - C ecx shift - C edx carry limb - C esi src end - C edi dst end - C ebp counter, limbs, negative - - movl -4(%esi,%ebp,4), %eax - subl %ebx, %edx C accumulate carry bit - - movl (%esi,%ebp,4), %ebx - - shrdl( %cl, %ebx, %eax) - - subl %edx, %eax C apply carry limb - movl VAR_INVERSE, %edx - - sbbl %ebx, %ebx - -L(entry): - imull %edx, %eax - - movl %eax, -4(%edi,%ebp,4) - movl PARAM_DIVISOR, %edx - - mull %edx - - incl %ebp - jnz L(top) - - - movl -4(%esi), %eax C src high limb -L(one): - shrl %cl, %eax - popl %esi FRAME_popl() - - addl %ebx, %eax C apply carry bit - - subl %edx, %eax C apply carry limb - - imull VAR_INVERSE, %eax - - movl %eax, -4(%edi) - - popl %edi - popl %ebx - popl %ebp - - ret - -EPILOGUE() - -C mp_limb_t mpn_bdiv_q_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t divisor); -C - - ALIGN(16) -PROLOGUE(mpn_bdiv_q_1) -deflit(`FRAME',0) - - movl PARAM_DIVISOR, %eax - pushl %ebp FRAME_pushl() - - movl $-1, %ecx C shift count - movl PARAM_SIZE, %ebp - - pushl %ebx FRAME_pushl() - -L(strip_twos): - incl %ecx - - shrl %eax - jnc L(strip_twos) - - leal 1(%eax,%eax), %ebx C d without twos - andl $127, %eax C d/2, 7 bits - -ifdef(`PIC',` - LEA( binvert_limb_table, %edx) - movzbl (%eax,%edx), %eax C inv 8 bits -',` - movzbl binvert_limb_table(%eax), %eax C inv 8 bits -') - - leal (%eax,%eax), %edx C 2*inv - movl %ebx, PARAM_DIVISOR C d without twos - imull %eax, %eax C inv*inv - imull %ebx, %eax C inv*inv*d - subl %eax, %edx C inv = 2*inv - inv*inv*d - - leal (%edx,%edx), %eax C 2*inv - imull %edx, %edx C inv*inv - imull %ebx, %edx C inv*inv*d - subl %edx, %eax C inv = 2*inv - inv*inv*d - - ASSERT(e,` C expect d*inv == 1 mod 2^GMP_LIMB_BITS - pushl %eax FRAME_pushl() - imull PARAM_DIVISOR, %eax - cmpl $1, %eax - popl %eax FRAME_popl()') - - jmp L(common) -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bobcat/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bobcat/gmp-mparam.h deleted file mode 100644 index 198081f9fd82360272b56fc073d55c793316bf54..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/bobcat/gmp-mparam.h +++ /dev/null @@ -1,197 +0,0 @@ -/* x86/bobcat gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2011, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 1600 MHz AMD Bobcat Zacate E-350 */ -/* FFT tuning limit = 25000000 */ -/* Generated by tuneup.c, 2014-03-12, gcc 4.5 */ - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 12 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 5 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 16 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 16 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 2 -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 40 - -#define MUL_TOOM22_THRESHOLD 28 -#define MUL_TOOM33_THRESHOLD 90 -#define MUL_TOOM44_THRESHOLD 154 -#define MUL_TOOM6H_THRESHOLD 270 -#define MUL_TOOM8H_THRESHOLD 490 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 89 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 107 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 95 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 110 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 130 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 38 -#define SQR_TOOM3_THRESHOLD 121 -#define SQR_TOOM4_THRESHOLD 212 -#define SQR_TOOM6_THRESHOLD 303 -#define SQR_TOOM8_THRESHOLD 454 - -#define MULMID_TOOM42_THRESHOLD 74 - -#define MULMOD_BNM1_THRESHOLD 18 -#define SQRMOD_BNM1_THRESHOLD 23 - -#define MUL_FFT_MODF_THRESHOLD 660 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 660, 5}, { 25, 6}, { 13, 5}, { 27, 6}, \ - { 27, 7}, { 15, 6}, { 33, 7}, { 17, 6}, \ - { 35, 7}, { 19, 6}, { 39, 7}, { 23, 6}, \ - { 47, 7}, { 27, 8}, { 15, 7}, { 35, 8}, \ - { 19, 7}, { 41, 8}, { 23, 7}, { 49, 8}, \ - { 31, 7}, { 63, 8}, { 39, 9}, { 23, 8}, \ - { 55, 9}, { 31, 8}, { 67, 9}, { 39, 8}, \ - { 79, 9}, { 47, 8}, { 95, 9}, { 55,10}, \ - { 31, 9}, { 63, 8}, { 127, 9}, { 79,10}, \ - { 47, 9}, { 103,11}, { 31,10}, { 63, 9}, \ - { 135,10}, { 79, 9}, { 159,10}, { 95, 9}, \ - { 191,10}, { 111,11}, { 63,10}, { 159,11}, \ - { 95,10}, { 191,12}, { 63,11}, { 127,10}, \ - { 255, 9}, { 511,10}, { 271, 9}, { 543,11}, \ - { 159, 9}, { 639,10}, { 335, 9}, { 671,11}, \ - { 191,10}, { 383, 9}, { 767,10}, { 399, 9}, \ - { 799,11}, { 223,12}, { 127,11}, { 255,10}, \ - { 543, 9}, { 1087,11}, { 287,10}, { 607, 9}, \ - { 1215,10}, { 671,12}, { 191,11}, { 383,10}, \ - { 799, 9}, { 1599,11}, { 415,13}, { 127,12}, \ - { 255,11}, { 543,10}, { 1087,11}, { 607,10}, \ - { 1215,11}, { 671,10}, { 1343,11}, { 735,10}, \ - { 1471,12}, { 383,11}, { 799,10}, { 1599,11}, \ - { 863,12}, { 447,11}, { 991,13}, { 255,12}, \ - { 511,11}, { 1087,12}, { 575,11}, { 1215,12}, \ - { 639,11}, { 1343,12}, { 703,11}, { 1471,13}, \ - { 383,12}, { 767,11}, { 1599,12}, { 831,11}, \ - { 1727,12}, { 959,14}, { 255,13}, { 511,12}, \ - { 1215,13}, { 639,12}, { 1471,13}, { 767,12}, \ - { 1727,13}, { 895,12}, { 1919,14}, { 511,13}, \ - { 1023,12}, { 2111,13}, { 1151,12}, { 2431,13}, \ - { 1407,14}, { 767,13}, { 1663,12}, { 3455,13}, \ - { 1919,15}, { 511,14}, { 1023,13}, { 2175,12}, \ - { 4479,13}, { 2431,14}, { 1279,13}, { 2943,12}, \ - { 5887,14}, { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 139 -#define MUL_FFT_THRESHOLD 7552 - -#define SQR_FFT_MODF_THRESHOLD 606 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 606, 5}, { 28, 6}, { 15, 5}, { 31, 6}, \ - { 28, 7}, { 15, 6}, { 33, 7}, { 17, 6}, \ - { 35, 7}, { 19, 6}, { 39, 7}, { 23, 6}, \ - { 47, 7}, { 29, 8}, { 15, 7}, { 35, 8}, \ - { 19, 7}, { 41, 8}, { 23, 7}, { 49, 8}, \ - { 31, 7}, { 63, 8}, { 43, 9}, { 23, 8}, \ - { 55, 9}, { 31, 8}, { 67, 9}, { 39, 8}, \ - { 79, 9}, { 47, 8}, { 95, 9}, { 55,10}, \ - { 31, 9}, { 79,10}, { 47, 9}, { 103,11}, \ - { 31,10}, { 63, 9}, { 135,10}, { 79, 9}, \ - { 159,10}, { 95, 9}, { 191,11}, { 63,10}, \ - { 159,11}, { 95,10}, { 191,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 511,10}, { 271, 9}, \ - { 543, 8}, { 1087,11}, { 159,10}, { 319, 9}, \ - { 639,10}, { 335, 9}, { 671, 8}, { 1343,10}, \ - { 351,11}, { 191,10}, { 383, 9}, { 767,10}, \ - { 399, 9}, { 799,10}, { 415, 9}, { 831,12}, \ - { 127,11}, { 255,10}, { 511, 9}, { 1023,10}, \ - { 543, 9}, { 1087,11}, { 287,10}, { 607, 9}, \ - { 1215,11}, { 319,10}, { 671, 9}, { 1343,12}, \ - { 191,11}, { 383,10}, { 799,11}, { 415,10}, \ - { 831,13}, { 127,12}, { 255,11}, { 511,10}, \ - { 1023,11}, { 543,10}, { 1087,11}, { 607,10}, \ - { 1215,12}, { 319,11}, { 671,10}, { 1343,11}, \ - { 735,10}, { 1471,12}, { 383,11}, { 799,10}, \ - { 1599,11}, { 863,12}, { 447,11}, { 991,13}, \ - { 255,12}, { 511,11}, { 1087,12}, { 575,11}, \ - { 1215,12}, { 639,11}, { 1343,12}, { 703,11}, \ - { 1471,13}, { 383,12}, { 767,11}, { 1599,12}, \ - { 831,11}, { 1727,12}, { 959,14}, { 255,13}, \ - { 511,12}, { 1215,13}, { 639,12}, { 1471,13}, \ - { 767,12}, { 1727,13}, { 895,12}, { 1983,14}, \ - { 511,13}, { 1023,12}, { 2111,13}, { 1151,12}, \ - { 2431,13}, { 1407,14}, { 767,13}, { 1663,12}, \ - { 3455,13}, { 1919,15}, { 511,14}, { 1023,13}, \ - { 2175,12}, { 4479,13}, { 2431,14}, { 1279,13}, \ - { 2943,14}, { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 147 -#define SQR_FFT_THRESHOLD 5760 - -#define MULLO_BASECASE_THRESHOLD 5 -#define MULLO_DC_THRESHOLD 45 -#define MULLO_MUL_N_THRESHOLD 14281 - -#define DC_DIV_QR_THRESHOLD 71 -#define DC_DIVAPPR_Q_THRESHOLD 238 -#define DC_BDIV_QR_THRESHOLD 67 -#define DC_BDIV_Q_THRESHOLD 151 - -#define INV_MULMOD_BNM1_THRESHOLD 66 -#define INV_NEWTON_THRESHOLD 228 -#define INV_APPR_THRESHOLD 222 - -#define BINV_NEWTON_THRESHOLD 270 -#define REDC_1_TO_REDC_N_THRESHOLD 71 - -#define MU_DIV_QR_THRESHOLD 1718 -#define MU_DIVAPPR_Q_THRESHOLD 1718 -#define MUPI_DIV_QR_THRESHOLD 91 -#define MU_BDIV_QR_THRESHOLD 1589 -#define MU_BDIV_Q_THRESHOLD 1718 - -#define POWM_SEC_TABLE 1,16,96,416,1185 - -#define MATRIX22_STRASSEN_THRESHOLD 17 -#define HGCD_THRESHOLD 88 -#define HGCD_APPR_THRESHOLD 137 -#define HGCD_REDUCE_THRESHOLD 3664 -#define GCD_DC_THRESHOLD 465 -#define GCDEXT_DC_THRESHOLD 345 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 18 -#define GET_STR_PRECOMPUTE_THRESHOLD 34 -#define SET_STR_DC_THRESHOLD 270 -#define SET_STR_PRECOMPUTE_THRESHOLD 828 - -#define FAC_DSC_THRESHOLD 256 -#define FAC_ODD_THRESHOLD 34 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/cnd_aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/cnd_aors_n.asm deleted file mode 100644 index 74f4917ecc41a4b2ec540ea46af240a9c04c5a0b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/cnd_aors_n.asm +++ /dev/null @@ -1,124 +0,0 @@ -dnl X86 mpn_cnd_add_n, mpn_cnd_sub_n - -dnl Copyright 2013 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C P5 ? -C P6 model 0-8,10-12 ? -C P6 model 9 (Banias) ? -C P6 model 13 (Dothan) 5.4 -C P4 model 0-1 (Willamette) ? -C P4 model 2 (Northwood) 14.5 -C P4 model 3-4 (Prescott) 21 -C Intel atom 11 -C AMD K6 ? -C AMD K7 3.4 -C AMD K8 ? - - -define(`rp', `%edi') -define(`up', `%esi') -define(`vp', `%ebp') -define(`n', `%ecx') -define(`cnd', `20(%esp)') -define(`cy', `%edx') - -ifdef(`OPERATION_cnd_add_n', ` - define(ADDSUB, add) - define(ADCSBB, adc) - define(func, mpn_cnd_add_n)') -ifdef(`OPERATION_cnd_sub_n', ` - define(ADDSUB, sub) - define(ADCSBB, sbb) - define(func, mpn_cnd_sub_n)') - -MULFUNC_PROLOGUE(mpn_cnd_add_n mpn_cnd_sub_n) - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(func) - add $-16, %esp - mov %ebp, (%esp) - mov %ebx, 4(%esp) - mov %esi, 8(%esp) - mov %edi, 12(%esp) - - C make cnd into a full mask - mov cnd, %eax - neg %eax - sbb %eax, %eax - mov %eax, cnd - - C load parameters into registers - mov 24(%esp), rp - mov 28(%esp), up - mov 32(%esp), vp - mov 36(%esp), n - - mov (vp), %eax - mov (up), %ebx - - C put operand pointers just beyond their last limb - lea (vp,n,4), vp - lea (up,n,4), up - lea -4(rp,n,4), rp - neg n - - and cnd, %eax - ADDSUB %eax, %ebx - sbb cy, cy - inc n - je L(end) - - ALIGN(16) -L(top): mov (vp,n,4), %eax - and cnd, %eax - mov %ebx, (rp,n,4) - mov (up,n,4), %ebx - add cy, cy - ADCSBB %eax, %ebx - sbb cy, cy - inc n - jne L(top) - -L(end): mov %ebx, (rp) - xor %eax, %eax - sub cy, %eax - - mov (%esp), %ebp - mov 4(%esp), %ebx - mov 8(%esp), %esi - mov 12(%esp), %edi - add $16, %esp - ret -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/copyd.asm deleted file mode 100644 index 51fa19568b0bb11fee59870fb1aef3fb3e2cfedd..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/copyd.asm +++ /dev/null @@ -1,91 +0,0 @@ -dnl x86 mpn_copyd -- copy limb vector, decrementing. - -dnl Copyright 1999-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb startup (approx) -C P5 1.0 40 -C P6 2.4 70 -C K6 1.0 55 -C K7 1.3 75 -C P4 2.6 175 -C -C (Startup time includes some function call overheads.) - - -C void mpn_copyd (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C Copy src,size to dst,size, working from high to low addresses. -C -C The code here is very generic and can be expected to be reasonable on all -C the x86 family. - -defframe(PARAM_SIZE,12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) -deflit(`FRAME',0) - - TEXT - ALIGN(32) - -PROLOGUE(mpn_copyd) - C eax saved esi - C ebx - C ecx counter - C edx saved edi - C esi src - C edi dst - C ebp - - movl PARAM_SIZE, %ecx - movl %esi, %eax - - movl PARAM_SRC, %esi - movl %edi, %edx - - movl PARAM_DST, %edi - leal -4(%esi,%ecx,4), %esi - - leal -4(%edi,%ecx,4), %edi - - std - - rep - movsl - - cld - - movl %eax, %esi - movl %edx, %edi - - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/copyi.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/copyi.asm deleted file mode 100644 index f6b0354b4fb52e042e3228e600f32b993ff867f9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/copyi.asm +++ /dev/null @@ -1,99 +0,0 @@ -dnl x86 mpn_copyi -- copy limb vector, incrementing. - -dnl Copyright 1999-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb startup (approx) -C P5 1.0 35 -C P6 0.75 45 -C K6 1.0 30 -C K7 1.3 65 -C P4 1.0 120 -C -C (Startup time includes some function call overheads.) - - -C void mpn_copyi (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C Copy src,size to dst,size, working from low to high addresses. -C -C The code here is very generic and can be expected to be reasonable on all -C the x86 family. -C -C P6 - An MMX based copy was tried, but was found to be slower than a rep -C movs in all cases. The fastest MMX found was 0.8 cycles/limb (when -C fully aligned). A rep movs seems to have a startup time of about 15 -C cycles, but doing something special for small sizes could lead to a -C branch misprediction that would destroy any saving. For now a plain -C rep movs seems ok. -C -C K62 - We used to have a big chunk of code doing an MMX copy at 0.56 c/l if -C aligned or a 1.0 rep movs if not. But that seemed excessive since -C it only got an advantage half the time, and even then only showed it -C above 50 limbs or so. - -defframe(PARAM_SIZE,12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) -deflit(`FRAME',0) - - TEXT - ALIGN(32) - - C eax saved esi - C ebx - C ecx counter - C edx saved edi - C esi src - C edi dst - C ebp - -PROLOGUE(mpn_copyi) - - movl PARAM_SIZE, %ecx - movl %esi, %eax - - movl PARAM_SRC, %esi - movl %edi, %edx - - movl PARAM_DST, %edi - - cld C better safe than sorry, see mpn/x86/README - - rep - movsl - - movl %eax, %esi - movl %edx, %edi - - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/core2/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/core2/gmp-mparam.h deleted file mode 100644 index b370eb58771d1de8834a244dd64273dcb901b2c8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/core2/gmp-mparam.h +++ /dev/null @@ -1,200 +0,0 @@ -/* x86/core2 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2011, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 2133 MHz Core 2 (65nm) */ -/* FFT tuning limit = 25000000 */ -/* Generated by tuneup.c, 2014-03-14, gcc 4.5 */ - -#define MOD_1_NORM_THRESHOLD 4 -#define MOD_1_UNNORM_THRESHOLD 4 -#define MOD_1N_TO_MOD_1_1_THRESHOLD 5 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 4 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 10 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 10 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 3 -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 19 - -#define MUL_TOOM22_THRESHOLD 26 -#define MUL_TOOM33_THRESHOLD 90 -#define MUL_TOOM44_THRESHOLD 144 -#define MUL_TOOM6H_THRESHOLD 286 -#define MUL_TOOM8H_THRESHOLD 430 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 93 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 140 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 89 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 102 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 136 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 34 -#define SQR_TOOM3_THRESHOLD 114 -#define SQR_TOOM4_THRESHOLD 178 -#define SQR_TOOM6_THRESHOLD 262 -#define SQR_TOOM8_THRESHOLD 357 - -#define MULMID_TOOM42_THRESHOLD 66 - -#define MULMOD_BNM1_THRESHOLD 15 -#define SQRMOD_BNM1_THRESHOLD 21 - -#define MUL_FFT_MODF_THRESHOLD 600 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 600, 5}, { 25, 6}, { 13, 5}, { 28, 6}, \ - { 25, 7}, { 13, 6}, { 29, 7}, { 15, 6}, \ - { 33, 7}, { 17, 6}, { 36, 7}, { 19, 6}, \ - { 39, 7}, { 29, 8}, { 15, 7}, { 35, 8}, \ - { 19, 7}, { 43, 8}, { 23, 7}, { 47, 8}, \ - { 27, 9}, { 15, 8}, { 31, 7}, { 63, 8}, \ - { 43, 9}, { 23, 8}, { 51,10}, { 15, 9}, \ - { 31, 8}, { 67, 9}, { 39, 8}, { 79, 9}, \ - { 47, 8}, { 95, 9}, { 55,10}, { 31, 9}, \ - { 79,10}, { 47, 9}, { 95,11}, { 31,10}, \ - { 63, 9}, { 135,10}, { 79, 9}, { 159,10}, \ - { 95, 9}, { 191,11}, { 63,10}, { 159,11}, \ - { 95,10}, { 191,12}, { 63,11}, { 127,10}, \ - { 271, 9}, { 543, 8}, { 1087,11}, { 159,10}, \ - { 319, 9}, { 639,10}, { 335, 9}, { 671,10}, \ - { 351,11}, { 191,10}, { 383, 9}, { 767,10}, \ - { 399, 9}, { 799,11}, { 223,12}, { 127,11}, \ - { 255,10}, { 543, 9}, { 1087,11}, { 287,10}, \ - { 607, 9}, { 1215,11}, { 319,10}, { 671,11}, \ - { 351,12}, { 191,11}, { 383,10}, { 799, 9}, \ - { 1599,13}, { 127,12}, { 255,11}, { 543,10}, \ - { 1087,11}, { 607,10}, { 1215,12}, { 319,11}, \ - { 671,10}, { 1343,11}, { 735,12}, { 383,11}, \ - { 799,10}, { 1599,11}, { 863,10}, { 1727,12}, \ - { 447,11}, { 959,13}, { 255,12}, { 511,11}, \ - { 1087,12}, { 575,11}, { 1215,12}, { 639,11}, \ - { 1343,12}, { 703,13}, { 383,12}, { 767,11}, \ - { 1599,12}, { 831,11}, { 1727,12}, { 959,14}, \ - { 255,13}, { 511,12}, { 1087,11}, { 2239,10}, \ - { 4479,12}, { 1215,13}, { 639,12}, { 1471,11}, \ - { 2943,13}, { 767,12}, { 1727,13}, { 895,12}, \ - { 1983,14}, { 511,13}, { 1023,12}, { 2239,11}, \ - { 4479,13}, { 1151,12}, { 2495,13}, { 1279,12}, \ - { 2623,13}, { 1407,12}, { 2815,14}, { 767,13}, \ - { 1663,12}, { 3455,13}, { 1919,15}, { 511,14}, \ - { 1023,13}, { 2175,12}, { 4479,13}, { 2431,14}, \ - { 1279,13}, { 2943,12}, { 5887,14}, { 16384,15}, \ - { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 149 -#define MUL_FFT_THRESHOLD 6784 - -#define SQR_FFT_MODF_THRESHOLD 500 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 500, 5}, { 28, 6}, { 15, 5}, { 31, 6}, \ - { 28, 7}, { 15, 6}, { 32, 7}, { 17, 6}, \ - { 35, 7}, { 19, 6}, { 39, 7}, { 29, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 41, 8}, \ - { 23, 7}, { 49, 8}, { 27, 9}, { 15, 8}, \ - { 31, 7}, { 63, 8}, { 39, 9}, { 23, 8}, \ - { 51,10}, { 15, 9}, { 31, 8}, { 67, 9}, \ - { 39, 8}, { 79, 9}, { 55,10}, { 31, 9}, \ - { 79,10}, { 47, 9}, { 95,11}, { 31,10}, \ - { 63, 9}, { 127,10}, { 79, 9}, { 159,10}, \ - { 95,11}, { 63,10}, { 143, 9}, { 287,10}, \ - { 159,11}, { 95,12}, { 63,11}, { 127,10}, \ - { 271, 9}, { 543,10}, { 287,11}, { 159,10}, \ - { 319, 9}, { 639,10}, { 335, 9}, { 671,10}, \ - { 351, 9}, { 703,11}, { 191,10}, { 383, 9}, \ - { 767,10}, { 399, 9}, { 799,10}, { 415, 9}, \ - { 831,10}, { 431,11}, { 223,12}, { 127,11}, \ - { 255,10}, { 543, 9}, { 1087,11}, { 287,10}, \ - { 607,11}, { 319,10}, { 671,11}, { 351,10}, \ - { 703,12}, { 191,11}, { 383,10}, { 799,11}, \ - { 415,10}, { 863,13}, { 127,12}, { 255,11}, \ - { 543,10}, { 1087,11}, { 607,10}, { 1215,12}, \ - { 319,11}, { 671,10}, { 1343,11}, { 735,10}, \ - { 1471,12}, { 383,11}, { 799,10}, { 1599,11}, \ - { 863,12}, { 447,11}, { 959,13}, { 255,12}, \ - { 511,11}, { 1087,12}, { 575,11}, { 1215,12}, \ - { 639,11}, { 1343,12}, { 703,11}, { 1471,13}, \ - { 383,12}, { 831,11}, { 1727,12}, { 959,14}, \ - { 255,13}, { 511,12}, { 1087,11}, { 2239,12}, \ - { 1215,13}, { 639,12}, { 1471,11}, { 2943,13}, \ - { 767,12}, { 1727,13}, { 895,12}, { 1983,14}, \ - { 511,13}, { 1023,12}, { 2239,13}, { 1151,12}, \ - { 2495,13}, { 1407,12}, { 2943,14}, { 767,13}, \ - { 1663,12}, { 3455,13}, { 1919,15}, { 511,14}, \ - { 1023,13}, { 2175,12}, { 4479,13}, { 2431,14}, \ - { 1279,13}, { 2943,12}, { 5887,14}, { 16384,15}, \ - { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 145 -#define SQR_FFT_THRESHOLD 5312 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 29 -#define MULLO_MUL_N_THRESHOLD 13463 - -#define DC_DIV_QR_THRESHOLD 21 -#define DC_DIVAPPR_Q_THRESHOLD 50 -#define DC_BDIV_QR_THRESHOLD 79 -#define DC_BDIV_Q_THRESHOLD 174 - -#define INV_MULMOD_BNM1_THRESHOLD 50 -#define INV_NEWTON_THRESHOLD 39 -#define INV_APPR_THRESHOLD 37 - -#define BINV_NEWTON_THRESHOLD 318 -#define REDC_1_TO_REDC_N_THRESHOLD 87 - -#define MU_DIV_QR_THRESHOLD 1099 -#define MU_DIVAPPR_Q_THRESHOLD 792 -#define MUPI_DIV_QR_THRESHOLD 0 /* always */ -#define MU_BDIV_QR_THRESHOLD 1442 -#define MU_BDIV_Q_THRESHOLD 1589 - -#define POWM_SEC_TABLE 3,32,95,480,597,2657 - -#define MATRIX22_STRASSEN_THRESHOLD 21 -#define HGCD_THRESHOLD 83 -#define HGCD_APPR_THRESHOLD 159 -#define HGCD_REDUCE_THRESHOLD 3389 -#define GCD_DC_THRESHOLD 379 -#define GCDEXT_DC_THRESHOLD 309 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 10 -#define GET_STR_PRECOMPUTE_THRESHOLD 25 -#define SET_STR_DC_THRESHOLD 442 -#define SET_STR_PRECOMPUTE_THRESHOLD 1104 - -#define FAC_DSC_THRESHOLD 155 -#define FAC_ODD_THRESHOLD 34 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/coreihwl/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/coreihwl/gmp-mparam.h deleted file mode 100644 index e2b289cc3cb014a0ac82d55a334b8c9590e084dd..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/coreihwl/gmp-mparam.h +++ /dev/null @@ -1,210 +0,0 @@ -/* x86/coreihwl gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2011, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 2900 MHz Core i5 Haswell */ -/* FFT tuning limit = 40000000 */ -/* Generated by tuneup.c, 2014-03-13, gcc 4.5 */ - -#define MOD_1_NORM_THRESHOLD 16 -#define MOD_1_UNNORM_THRESHOLD 13 -#define MOD_1N_TO_MOD_1_1_THRESHOLD 11 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 9 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 10 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 5 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 15 -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 19 - -#define MUL_TOOM22_THRESHOLD 27 -#define MUL_TOOM33_THRESHOLD 90 -#define MUL_TOOM44_THRESHOLD 218 -#define MUL_TOOM6H_THRESHOLD 318 -#define MUL_TOOM8H_THRESHOLD 490 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 89 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 153 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 105 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 101 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 130 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 44 -#define SQR_TOOM3_THRESHOLD 137 -#define SQR_TOOM4_THRESHOLD 242 -#define SQR_TOOM6_THRESHOLD 351 -#define SQR_TOOM8_THRESHOLD 597 - -#define MULMID_TOOM42_THRESHOLD 98 - -#define MULMOD_BNM1_THRESHOLD 17 -#define SQRMOD_BNM1_THRESHOLD 21 - -#define MUL_FFT_MODF_THRESHOLD 630 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 630, 5}, { 25, 6}, { 13, 5}, { 27, 6}, \ - { 15, 5}, { 31, 6}, { 28, 7}, { 15, 6}, \ - { 33, 7}, { 17, 6}, { 35, 7}, { 19, 6}, \ - { 39, 7}, { 23, 6}, { 47, 7}, { 27, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 41, 8}, \ - { 23, 7}, { 49, 8}, { 27, 9}, { 15, 8}, \ - { 31, 7}, { 63, 8}, { 39, 9}, { 23, 8}, \ - { 55,10}, { 15, 9}, { 31, 8}, { 67, 9}, \ - { 39, 8}, { 79, 9}, { 47, 8}, { 95, 9}, \ - { 55,10}, { 31, 9}, { 79,10}, { 47, 9}, \ - { 103,11}, { 31,10}, { 63, 9}, { 135,10}, \ - { 79, 9}, { 159,10}, { 95, 9}, { 191,10}, \ - { 111,11}, { 63,10}, { 159,11}, { 95,10}, \ - { 191,12}, { 63,11}, { 127,10}, { 255, 9}, \ - { 511,10}, { 271, 9}, { 543,11}, { 159,10}, \ - { 319, 9}, { 639,10}, { 335, 9}, { 671,11}, \ - { 191,10}, { 383, 9}, { 767,10}, { 399, 9}, \ - { 799,11}, { 223,12}, { 127,11}, { 255,10}, \ - { 543,11}, { 287,10}, { 607, 9}, { 1215,11}, \ - { 319,10}, { 671,12}, { 191,11}, { 383,10}, \ - { 799,11}, { 415,13}, { 127,12}, { 255,11}, \ - { 543,10}, { 1087,11}, { 607,10}, { 1215,12}, \ - { 319,11}, { 671,10}, { 1343,11}, { 735,10}, \ - { 1471,12}, { 383,11}, { 799,10}, { 1599,11}, \ - { 863,10}, { 1727,12}, { 447,11}, { 959,13}, \ - { 255,12}, { 511,11}, { 1087,12}, { 575,11}, \ - { 1215,10}, { 2431,12}, { 639,11}, { 1343,12}, \ - { 703,11}, { 1471,13}, { 383,12}, { 767,11}, \ - { 1599,12}, { 831,11}, { 1727,10}, { 3455,12}, \ - { 959,14}, { 255,13}, { 511,12}, { 1087,11}, \ - { 2239,12}, { 1215,11}, { 2431,13}, { 639,12}, \ - { 1471,11}, { 2943,10}, { 5887,13}, { 767,12}, \ - { 1727,11}, { 3455,13}, { 895,12}, { 1983,14}, \ - { 511,13}, { 1023,12}, { 2239,13}, { 1151,12}, \ - { 2495,13}, { 1279,12}, { 2559,13}, { 1407,12}, \ - { 2943,11}, { 5887,14}, { 767,13}, { 1535,12}, \ - { 3071,13}, { 1663,12}, { 3455,13}, { 1919,15}, \ - { 511,14}, { 1023,13}, { 2175,12}, { 4479,13}, \ - { 2431,14}, { 1279,13}, { 2943,12}, { 5887,14}, \ - { 1535,13}, { 3455,14}, { 1791,13}, { 3967,12}, \ - { 7935,15}, { 1023,14}, { 2047,13}, { 4479,14}, \ - { 2303,13}, { 8192,14}, { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 168 -#define MUL_FFT_THRESHOLD 7424 - -#define SQR_FFT_MODF_THRESHOLD 530 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 530, 5}, { 28, 6}, { 15, 5}, { 31, 6}, \ - { 28, 7}, { 15, 6}, { 33, 7}, { 17, 6}, \ - { 36, 7}, { 19, 6}, { 39, 7}, { 23, 6}, \ - { 47, 7}, { 29, 8}, { 15, 7}, { 35, 8}, \ - { 19, 7}, { 41, 8}, { 23, 7}, { 49, 8}, \ - { 27, 7}, { 55, 9}, { 15, 8}, { 31, 7}, \ - { 63, 8}, { 39, 9}, { 23, 8}, { 55,10}, \ - { 15, 9}, { 31, 8}, { 67, 9}, { 39, 8}, \ - { 79, 9}, { 47, 8}, { 95, 9}, { 55,10}, \ - { 31, 9}, { 79,10}, { 47, 9}, { 95,11}, \ - { 31,10}, { 63, 9}, { 135,10}, { 79, 9}, \ - { 159,10}, { 95, 9}, { 191,10}, { 111,11}, \ - { 63,10}, { 159,11}, { 95,10}, { 191,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 511,10}, \ - { 271, 9}, { 543,11}, { 159,10}, { 319, 9}, \ - { 639,10}, { 335, 9}, { 671,10}, { 351,11}, \ - { 191,10}, { 383, 9}, { 767,10}, { 399, 9}, \ - { 799,12}, { 127,11}, { 255,10}, { 511, 9}, \ - { 1023,10}, { 543,11}, { 287,10}, { 607,11}, \ - { 319,10}, { 671,11}, { 351,12}, { 191,11}, \ - { 383,10}, { 799,11}, { 415,10}, { 831,13}, \ - { 127,12}, { 255,11}, { 511,10}, { 1023,11}, \ - { 543,10}, { 1087,11}, { 607,12}, { 319,11}, \ - { 671,10}, { 1343,11}, { 735,10}, { 1471,12}, \ - { 383,11}, { 799,10}, { 1599,11}, { 863,10}, \ - { 1727,12}, { 447,11}, { 991,13}, { 255,12}, \ - { 511,11}, { 1087,12}, { 575,11}, { 1215,12}, \ - { 639,11}, { 1343,12}, { 703,11}, { 1471,13}, \ - { 383,12}, { 767,11}, { 1599,12}, { 831,11}, \ - { 1727,12}, { 959,11}, { 1983,14}, { 255,13}, \ - { 511,12}, { 1023,11}, { 2047,12}, { 1087,11}, \ - { 2239,12}, { 1215,11}, { 2431,13}, { 639,12}, \ - { 1471,11}, { 2943,13}, { 767,12}, { 1727,13}, \ - { 895,12}, { 1983,14}, { 511,13}, { 1023,12}, \ - { 2239,13}, { 1151,12}, { 2495,13}, { 1279,12}, \ - { 2623,13}, { 1407,12}, { 2943,14}, { 767,13}, \ - { 1535,12}, { 3071,13}, { 1663,12}, { 3455,13}, \ - { 1919,12}, { 3839,15}, { 511,14}, { 1023,13}, \ - { 2175,12}, { 4479,13}, { 2431,12}, { 4863,14}, \ - { 1279,13}, { 2943,12}, { 5887,14}, { 1535,13}, \ - { 3455,14}, { 1791,13}, { 3967,15}, { 1023,14}, \ - { 2047,13}, { 4479,14}, { 2303,13}, { 8192,14}, \ - { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 170 -#define SQR_FFT_THRESHOLD 5760 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 57 -#define MULLO_MUL_N_THRESHOLD 14281 - -#define DC_DIV_QR_THRESHOLD 23 -#define DC_DIVAPPR_Q_THRESHOLD 63 -#define DC_BDIV_QR_THRESHOLD 87 -#define DC_BDIV_Q_THRESHOLD 204 - -#define INV_MULMOD_BNM1_THRESHOLD 54 -#define INV_NEWTON_THRESHOLD 75 -#define INV_APPR_THRESHOLD 67 - -#define BINV_NEWTON_THRESHOLD 296 -#define REDC_1_TO_REDC_N_THRESHOLD 79 - -#define MU_DIV_QR_THRESHOLD 872 -#define MU_DIVAPPR_Q_THRESHOLD 654 -#define MUPI_DIV_QR_THRESHOLD 0 /* always */ -#define MU_BDIV_QR_THRESHOLD 1858 -#define MU_BDIV_Q_THRESHOLD 2089 - -#define POWM_SEC_TABLE 1,17,127,508,1603 - -#define MATRIX22_STRASSEN_THRESHOLD 19 -#define HGCD_THRESHOLD 61 -#define HGCD_APPR_THRESHOLD 60 -#define HGCD_REDUCE_THRESHOLD 3810 -#define GCD_DC_THRESHOLD 263 -#define GCDEXT_DC_THRESHOLD 278 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 11 -#define GET_STR_PRECOMPUTE_THRESHOLD 21 -#define SET_STR_DC_THRESHOLD 527 -#define SET_STR_PRECOMPUTE_THRESHOLD 1178 - -#define FAC_DSC_THRESHOLD 187 -#define FAC_ODD_THRESHOLD 34 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/coreinhm/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/coreinhm/gmp-mparam.h deleted file mode 100644 index 13289c0c2390239f020585b8a2e7ffb78f40eb95..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/coreinhm/gmp-mparam.h +++ /dev/null @@ -1,224 +0,0 @@ -/* x86/coreinhm gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2011, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 2667 MHz Core i7 Nehalem */ -/* FFT tuning limit = 100000000 */ -/* Generated by tuneup.c, 2014-03-19, gcc 4.5 */ - -#define MOD_1_NORM_THRESHOLD 25 -#define MOD_1_UNNORM_THRESHOLD 15 -#define MOD_1N_TO_MOD_1_1_THRESHOLD 8 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 11 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 3 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 18 -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 15 - -#define MUL_TOOM22_THRESHOLD 26 -#define MUL_TOOM33_THRESHOLD 89 -#define MUL_TOOM44_THRESHOLD 214 -#define MUL_TOOM6H_THRESHOLD 327 -#define MUL_TOOM8H_THRESHOLD 466 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 97 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 159 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 95 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 101 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 142 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 44 -#define SQR_TOOM3_THRESHOLD 145 -#define SQR_TOOM4_THRESHOLD 232 -#define SQR_TOOM6_THRESHOLD 342 -#define SQR_TOOM8_THRESHOLD 502 - -#define MULMID_TOOM42_THRESHOLD 78 - -#define MULMOD_BNM1_THRESHOLD 17 -#define SQRMOD_BNM1_THRESHOLD 21 - -#define MUL_FFT_MODF_THRESHOLD 606 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 606, 5}, { 25, 6}, { 13, 5}, { 28, 6}, \ - { 15, 5}, { 33, 6}, { 29, 7}, { 15, 6}, \ - { 33, 7}, { 17, 6}, { 36, 7}, { 19, 6}, \ - { 39, 7}, { 23, 6}, { 47, 7}, { 35, 8}, \ - { 19, 7}, { 43, 8}, { 23, 7}, { 49, 8}, \ - { 31, 7}, { 63, 8}, { 43, 9}, { 23, 8}, \ - { 51, 9}, { 31, 8}, { 67, 9}, { 39, 8}, \ - { 79, 9}, { 47, 8}, { 95, 9}, { 55,10}, \ - { 31, 9}, { 79,10}, { 47, 9}, { 95,11}, \ - { 31,10}, { 63, 9}, { 135,10}, { 79, 9}, \ - { 159,10}, { 95, 9}, { 191,10}, { 111,11}, \ - { 63,10}, { 159,11}, { 95,10}, { 191,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 511,10}, \ - { 271, 9}, { 543,11}, { 159,10}, { 319, 9}, \ - { 639,10}, { 335,11}, { 191,10}, { 383, 9}, \ - { 767,10}, { 399,12}, { 127,11}, { 255,10}, \ - { 511, 9}, { 1023,10}, { 543,11}, { 287,10}, \ - { 607,11}, { 319,10}, { 639,12}, { 191,11}, \ - { 383,10}, { 767,13}, { 127,12}, { 255,11}, \ - { 511,10}, { 1023,11}, { 543,10}, { 1087,11}, \ - { 607,12}, { 319,11}, { 671,10}, { 1343,11}, \ - { 735,12}, { 383,11}, { 799,10}, { 1599,11}, \ - { 863,10}, { 1727,12}, { 447,11}, { 927,10}, \ - { 1855,11}, { 991,13}, { 255,12}, { 511,11}, \ - { 1119,12}, { 575,11}, { 1215,10}, { 2431,12}, \ - { 639,11}, { 1343,12}, { 703,11}, { 1471,13}, \ - { 383,12}, { 767,11}, { 1599,12}, { 831,11}, \ - { 1727,12}, { 895,11}, { 1855,12}, { 959,14}, \ - { 255,13}, { 511,12}, { 1023,11}, { 2111,12}, \ - { 1087,11}, { 2239,10}, { 4479,12}, { 1215,11}, \ - { 2431,13}, { 639,12}, { 1471,13}, { 767,12}, \ - { 1727,11}, { 3455,13}, { 895,12}, { 1983,11}, \ - { 3967,14}, { 511,13}, { 1023,12}, { 2239,11}, \ - { 4479,13}, { 1151,12}, { 2495,11}, { 4991,13}, \ - { 1279,12}, { 2623,13}, { 1407,12}, { 2943,14}, \ - { 767,13}, { 1535,12}, { 3071,13}, { 1663,12}, \ - { 3455,13}, { 1919,12}, { 3967,15}, { 511,14}, \ - { 1023,13}, { 2175,12}, { 4479,13}, { 2431,12}, \ - { 4991,14}, { 1279,13}, { 2687,12}, { 5503,13}, \ - { 2943,12}, { 6015,14}, { 1535,13}, { 3455,14}, \ - { 1791,13}, { 3967,12}, { 7935,15}, { 1023,14}, \ - { 2047,13}, { 4479,14}, { 2303,13}, { 4991,12}, \ - { 9983,14}, { 2559,13}, { 5503,14}, { 2815,13}, \ - { 6015,15}, { 1535,14}, { 3839,13}, { 7935,16}, \ - { 1023,15}, { 2047,14}, { 4095,13}, { 8191,12}, \ - { 16383,11}, { 32767,10}, { 65535, 9}, { 131071, 8}, \ - { 256, 9}, { 512,10}, { 1024,11}, { 2048,12}, \ - { 4096,13}, { 8192,14}, { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 192 -#define MUL_FFT_THRESHOLD 6784 - -#define SQR_FFT_MODF_THRESHOLD 555 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 555, 5}, { 28, 6}, { 15, 5}, { 31, 6}, \ - { 16, 5}, { 33, 6}, { 29, 7}, { 15, 6}, \ - { 32, 7}, { 17, 6}, { 35, 7}, { 19, 6}, \ - { 39, 7}, { 29, 8}, { 15, 7}, { 35, 8}, \ - { 19, 7}, { 41, 8}, { 23, 7}, { 49, 8}, \ - { 27, 7}, { 55, 8}, { 31, 7}, { 63, 8}, \ - { 43, 9}, { 23, 8}, { 55, 9}, { 31, 8}, \ - { 67, 9}, { 39, 8}, { 79, 9}, { 47, 8}, \ - { 95, 9}, { 55,10}, { 31, 9}, { 79,10}, \ - { 47, 9}, { 95,11}, { 31,10}, { 63, 9}, \ - { 135,10}, { 79, 9}, { 159,10}, { 95,11}, \ - { 63,10}, { 143, 9}, { 287,10}, { 159,11}, \ - { 95,12}, { 63,11}, { 127,10}, { 255, 9}, \ - { 511, 8}, { 1023,10}, { 271, 9}, { 543,10}, \ - { 287,11}, { 159,10}, { 319, 9}, { 639,10}, \ - { 335, 9}, { 671,10}, { 351,11}, { 191,10}, \ - { 383, 9}, { 767,10}, { 399, 9}, { 799,10}, \ - { 415,12}, { 127,11}, { 255,10}, { 511, 9}, \ - { 1023,10}, { 543,11}, { 287,10}, { 607,11}, \ - { 319,10}, { 671,11}, { 351,12}, { 191,11}, \ - { 383,10}, { 799,11}, { 415,13}, { 127,12}, \ - { 255,11}, { 511,10}, { 1023,11}, { 543,10}, \ - { 1087,11}, { 607,12}, { 319,11}, { 671,10}, \ - { 1343,11}, { 735,10}, { 1471,12}, { 383,11}, \ - { 799,10}, { 1599,11}, { 863,10}, { 1727,12}, \ - { 447,11}, { 991,10}, { 1983,13}, { 255,12}, \ - { 511,11}, { 1023,10}, { 2047,11}, { 1087,12}, \ - { 575,11}, { 1215,10}, { 2431,12}, { 639,11}, \ - { 1343,12}, { 703,11}, { 1471,13}, { 383,12}, \ - { 767,11}, { 1599,12}, { 831,11}, { 1727,10}, \ - { 3455,12}, { 895,11}, { 1791,12}, { 959,11}, \ - { 1983,14}, { 255,13}, { 511,12}, { 1023,11}, \ - { 2111,12}, { 1087,11}, { 2239,10}, { 4479,12}, \ - { 1215,11}, { 2431,13}, { 639,12}, { 1471,11}, \ - { 2943,13}, { 767,12}, { 1727,11}, { 3455,13}, \ - { 895,12}, { 1983,11}, { 3967,14}, { 511,13}, \ - { 1023,12}, { 2239,11}, { 4479,13}, { 1151,12}, \ - { 2495,13}, { 1279,12}, { 2623,13}, { 1407,12}, \ - { 2943,14}, { 767,13}, { 1663,12}, { 3455,13}, \ - { 1919,12}, { 3967,15}, { 511,14}, { 1023,13}, \ - { 2175,12}, { 4479,13}, { 2431,12}, { 4863,14}, \ - { 1279,13}, { 2943,12}, { 5887,14}, { 1535,13}, \ - { 3455,14}, { 1791,13}, { 3967,12}, { 7935,15}, \ - { 1023,14}, { 2047,13}, { 4479,14}, { 2303,13}, \ - { 4991,12}, { 9983,14}, { 2815,13}, { 5887,15}, \ - { 1535,14}, { 3327,13}, { 6655,14}, { 3839,13}, \ - { 7935,16}, { 1023,15}, { 2047,14}, { 4095,13}, \ - { 8191,12}, { 16383,11}, { 32767,10}, { 65535, 9}, \ - { 131071, 8}, { 256, 9}, { 512,10}, { 1024,11}, \ - { 2048,12}, { 4096,13}, { 8192,14}, { 16384,15}, \ - { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 201 -#define SQR_FFT_THRESHOLD 5312 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 38 -#define MULLO_MUL_N_THRESHOLD 13463 - -#define DC_DIV_QR_THRESHOLD 22 -#define DC_DIVAPPR_Q_THRESHOLD 43 -#define DC_BDIV_QR_THRESHOLD 78 -#define DC_BDIV_Q_THRESHOLD 157 - -#define INV_MULMOD_BNM1_THRESHOLD 50 -#define INV_NEWTON_THRESHOLD 15 -#define INV_APPR_THRESHOLD 18 - -#define BINV_NEWTON_THRESHOLD 351 -#define REDC_1_TO_REDC_N_THRESHOLD 84 - -#define MU_DIV_QR_THRESHOLD 889 -#define MU_DIVAPPR_Q_THRESHOLD 483 -#define MUPI_DIV_QR_THRESHOLD 0 /* always */ -#define MU_BDIV_QR_THRESHOLD 1589 -#define MU_BDIV_Q_THRESHOLD 1787 - -#define POWM_SEC_TABLE 2,25,95,473,1357 - -#define MATRIX22_STRASSEN_THRESHOLD 20 -#define HGCD_THRESHOLD 52 -#define HGCD_APPR_THRESHOLD 51 -#define HGCD_REDUCE_THRESHOLD 3524 -#define GCD_DC_THRESHOLD 213 -#define GCDEXT_DC_THRESHOLD 249 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 13 -#define GET_STR_PRECOMPUTE_THRESHOLD 24 -#define SET_STR_DC_THRESHOLD 145 -#define SET_STR_PRECOMPUTE_THRESHOLD 545 - -#define FAC_DSC_THRESHOLD 91 -#define FAC_ODD_THRESHOLD 29 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/coreisbr/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/coreisbr/gmp-mparam.h deleted file mode 100644 index 9b227a71ba2fc284b3ae6f4a4040b570c0422b83..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/coreisbr/gmp-mparam.h +++ /dev/null @@ -1,203 +0,0 @@ -/* x86/coreisbr gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2011, 2014 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 3300 MHz Core i5 Sandy Bridge */ -/* FFT tuning limit = 40000000 */ -/* Generated by tuneup.c, 2014-03-13, gcc 4.5 */ - -#define MOD_1_NORM_THRESHOLD 18 -#define MOD_1_UNNORM_THRESHOLD 11 -#define MOD_1N_TO_MOD_1_1_THRESHOLD 9 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 11 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 9 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 16 -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 19 - -#define MUL_TOOM22_THRESHOLD 28 -#define MUL_TOOM33_THRESHOLD 99 -#define MUL_TOOM44_THRESHOLD 160 -#define MUL_TOOM6H_THRESHOLD 268 -#define MUL_TOOM8H_THRESHOLD 490 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 106 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 140 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 109 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 108 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 137 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 48 -#define SQR_TOOM3_THRESHOLD 105 -#define SQR_TOOM4_THRESHOLD 256 -#define SQR_TOOM6_THRESHOLD 366 -#define SQR_TOOM8_THRESHOLD 562 - -#define MULMID_TOOM42_THRESHOLD 98 - -#define MULMOD_BNM1_THRESHOLD 19 -#define SQRMOD_BNM1_THRESHOLD 23 - -#define MUL_FFT_MODF_THRESHOLD 636 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 636, 5}, { 27, 6}, { 28, 7}, { 15, 6}, \ - { 32, 7}, { 17, 6}, { 35, 7}, { 19, 6}, \ - { 39, 7}, { 23, 6}, { 47, 7}, { 27, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 41, 8}, \ - { 23, 7}, { 49, 8}, { 27, 9}, { 15, 8}, \ - { 31, 7}, { 63, 8}, { 39, 9}, { 23, 8}, \ - { 55,10}, { 15, 9}, { 31, 8}, { 67, 9}, \ - { 39, 8}, { 79, 9}, { 47, 8}, { 95, 9}, \ - { 55,10}, { 31, 9}, { 79,10}, { 47, 9}, \ - { 103,11}, { 31,10}, { 63, 9}, { 135,10}, \ - { 79, 9}, { 159,10}, { 95, 9}, { 191,11}, \ - { 63,10}, { 159,11}, { 95,10}, { 191,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 511,10}, \ - { 271, 9}, { 543,11}, { 159,10}, { 319, 9}, \ - { 639,10}, { 335, 9}, { 671,11}, { 191,10}, \ - { 383, 9}, { 767,10}, { 399, 9}, { 799,11}, \ - { 223,12}, { 127,11}, { 255,10}, { 543, 9}, \ - { 1087,11}, { 287,10}, { 607, 9}, { 1215,11}, \ - { 319,10}, { 671,12}, { 191,11}, { 383,10}, \ - { 799,11}, { 415,13}, { 127,12}, { 255,11}, \ - { 543,10}, { 1087,11}, { 607,10}, { 1215,12}, \ - { 319,11}, { 671,10}, { 1343,11}, { 735,10}, \ - { 1471,12}, { 383,11}, { 799,10}, { 1599,11}, \ - { 863,12}, { 447,11}, { 959,13}, { 255,12}, \ - { 511,11}, { 1087,12}, { 575,11}, { 1215,10}, \ - { 2431,12}, { 639,11}, { 1343,12}, { 703,11}, \ - { 1471,13}, { 383,12}, { 767,11}, { 1599,12}, \ - { 831,11}, { 1727,12}, { 959,14}, { 255,13}, \ - { 511,12}, { 1087,11}, { 2239,12}, { 1215,11}, \ - { 2431,13}, { 639,12}, { 1471,11}, { 2943,13}, \ - { 767,12}, { 1727,13}, { 895,12}, { 1983,14}, \ - { 511,13}, { 1023,12}, { 2239,13}, { 1151,12}, \ - { 2431,13}, { 1279,12}, { 2559,13}, { 1407,12}, \ - { 2943,14}, { 767,13}, { 1535,12}, { 3071,13}, \ - { 1663,12}, { 3455,13}, { 1919,15}, { 511,14}, \ - { 1023,13}, { 2175,12}, { 4479,13}, { 2431,14}, \ - { 1279,13}, { 2943,12}, { 5887,14}, { 16384,15}, \ - { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 149 -#define MUL_FFT_THRESHOLD 7424 - -#define SQR_FFT_MODF_THRESHOLD 555 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 555, 5}, { 28, 6}, { 15, 5}, { 31, 6}, \ - { 29, 7}, { 15, 6}, { 33, 7}, { 17, 6}, \ - { 36, 7}, { 19, 6}, { 39, 7}, { 23, 6}, \ - { 47, 7}, { 29, 8}, { 15, 7}, { 35, 8}, \ - { 19, 7}, { 43, 8}, { 23, 7}, { 47, 8}, \ - { 27, 9}, { 15, 8}, { 31, 7}, { 63, 8}, \ - { 43, 9}, { 23, 8}, { 51, 9}, { 31, 8}, \ - { 67, 9}, { 39, 8}, { 79, 9}, { 47, 8}, \ - { 95, 9}, { 55,10}, { 31, 9}, { 79,10}, \ - { 47, 9}, { 95,11}, { 31,10}, { 63, 9}, \ - { 135,10}, { 79, 9}, { 159,10}, { 95, 9}, \ - { 191,10}, { 111,11}, { 63,10}, { 159,11}, \ - { 95,10}, { 191,12}, { 63,11}, { 127,10}, \ - { 255, 9}, { 543,11}, { 159,10}, { 319, 9}, \ - { 639,10}, { 335, 9}, { 671,10}, { 351,11}, \ - { 191,10}, { 383, 9}, { 767,10}, { 399, 9}, \ - { 799,10}, { 415,12}, { 127,11}, { 255,10}, \ - { 511, 9}, { 1023,10}, { 543,11}, { 287,10}, \ - { 607,11}, { 319,10}, { 671,11}, { 351,12}, \ - { 191,11}, { 383,10}, { 799,11}, { 415,13}, \ - { 127,12}, { 255,11}, { 511,10}, { 1023,11}, \ - { 543,10}, { 1087,11}, { 607,10}, { 1215,12}, \ - { 319,11}, { 671,10}, { 1343,11}, { 735,10}, \ - { 1471,12}, { 383,11}, { 799,10}, { 1599,11}, \ - { 863,10}, { 1727,12}, { 447,11}, { 959,10}, \ - { 1919,11}, { 991,13}, { 255,12}, { 511,11}, \ - { 1087,12}, { 575,11}, { 1215,10}, { 2431,12}, \ - { 639,11}, { 1343,12}, { 703,11}, { 1471,13}, \ - { 383,12}, { 767,11}, { 1599,12}, { 831,11}, \ - { 1727,12}, { 959,11}, { 1919,14}, { 255,13}, \ - { 511,12}, { 1023,11}, { 2047,12}, { 1087,11}, \ - { 2239,12}, { 1215,11}, { 2431,13}, { 639,12}, \ - { 1471,11}, { 2943,13}, { 767,12}, { 1727,13}, \ - { 895,12}, { 1983,14}, { 511,13}, { 1023,12}, \ - { 2239,13}, { 1151,12}, { 2495,13}, { 1279,12}, \ - { 2623,13}, { 1407,12}, { 2943,14}, { 767,13}, \ - { 1663,12}, { 3455,13}, { 1919,12}, { 3839,15}, \ - { 511,14}, { 1023,13}, { 2175,12}, { 4479,13}, \ - { 2431,12}, { 4863,14}, { 1279,13}, { 2943,12}, \ - { 5887,14}, { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 159 -#define SQR_FFT_THRESHOLD 5760 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 62 -#define MULLO_MUL_N_THRESHOLD 14281 - -#define DC_DIV_QR_THRESHOLD 25 -#define DC_DIVAPPR_Q_THRESHOLD 43 -#define DC_BDIV_QR_THRESHOLD 99 -#define DC_BDIV_Q_THRESHOLD 240 - -#define INV_MULMOD_BNM1_THRESHOLD 54 -#define INV_NEWTON_THRESHOLD 14 -#define INV_APPR_THRESHOLD 13 - -#define BINV_NEWTON_THRESHOLD 363 -#define REDC_1_TO_REDC_N_THRESHOLD 90 - -#define MU_DIV_QR_THRESHOLD 998 -#define MU_DIVAPPR_Q_THRESHOLD 667 -#define MUPI_DIV_QR_THRESHOLD 0 /* always */ -#define MU_BDIV_QR_THRESHOLD 1787 -#define MU_BDIV_Q_THRESHOLD 2130 - -#define POWM_SEC_TABLE 1,16,126,480,1317 - -#define MATRIX22_STRASSEN_THRESHOLD 21 -#define HGCD_THRESHOLD 61 -#define HGCD_APPR_THRESHOLD 56 -#define HGCD_REDUCE_THRESHOLD 3810 -#define GCD_DC_THRESHOLD 283 -#define GCDEXT_DC_THRESHOLD 309 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 12 -#define GET_STR_PRECOMPUTE_THRESHOLD 21 -#define SET_STR_DC_THRESHOLD 399 -#define SET_STR_PRECOMPUTE_THRESHOLD 1183 - -#define FAC_DSC_THRESHOLD 194 -#define FAC_ODD_THRESHOLD 34 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/darwin.m4 b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/darwin.m4 deleted file mode 100644 index c449216d1c955f02b8e74c23a36e9a5e08586869..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/darwin.m4 +++ /dev/null @@ -1,102 +0,0 @@ -divert(-1) -dnl Copyright 2007, 2011, 2012, 2014 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -define(`DARWIN') - - -dnl Usage LEA(symbol,reg) -dnl Usage LEAL(symbol_local_to_file,reg) -dnl -dnl We maintain lists of stuff to append in load_eip and darwin_bd. The -dnl `index' stuff is needed to suppress repeated definitions. To avoid -dnl getting fooled by "var" and "var1", we add 'bol ' (the end of -dnl 'indirect_symbol') at the beginning and and a newline at the end. This -dnl might be a bit fragile. - -define(`LEA', -m4_assert_numargs(2) -`ifdef(`PIC',` -ifelse(index(defn(`load_eip'), `$2'),-1, -`m4append(`load_eip', -` TEXT - ALIGN(16) -L(movl_eip_`'substr($2,1)): - movl (%esp), $2 - ret_internal -')') -ifelse(index(defn(`darwin_bd'), `bol $1 -'),-1, -`m4append(`darwin_bd', -` .section __IMPORT,__pointers,non_lazy_symbol_pointers -L($1`'$non_lazy_ptr): - .indirect_symbol $1 - .long 0 -')') - call L(movl_eip_`'substr($2,1)) - movl L($1`'$non_lazy_ptr)-.($2), $2 -',` - movl `$'$1, $2 -')') - -define(`LEAL', -m4_assert_numargs(2) -`ifdef(`PIC',` -ifelse(index(defn(`load_eip'), `$2'),-1, -`m4append(`load_eip', -` TEXT - ALIGN(16) -L(movl_eip_`'substr($2,1)): - movl (%esp), $2 - ret_internal -')') - call L(movl_eip_`'substr($2,1)) - leal $1-.($2), $2 -',` - movl `$'$1, $2 -')') - - -dnl ASM_END - -define(`ASM_END',`load_eip`'darwin_bd') - -define(`load_eip', `') dnl updated in LEA -define(`darwin_bd', `') dnl updated in LEA - - -dnl Usage: CALL(funcname) -dnl - -define(`CALL', -m4_assert_numargs(1) -`call GSYM_PREFIX`'$1') - -undefine(`PIC_WITH_EBX') - -divert`'dnl diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/dive_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/dive_1.asm deleted file mode 100644 index 5bb0f45b1a96e13e17bf6c20a4959bc696908b04..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/dive_1.asm +++ /dev/null @@ -1,190 +0,0 @@ -dnl x86 mpn_divexact_1 -- mpn by limb exact division. - -dnl Copyright 2001, 2002, 2007 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C P54 30.0 -C P55 29.0 -C P6 13.0 odd divisor, 12.0 even (strangely) -C K6 14.0 -C K7 12.0 -C P4 42.0 - - -C mp_limb_t mpn_divexact_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t divisor); -C - -defframe(PARAM_DIVISOR,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl re-use parameter space -define(VAR_INVERSE,`PARAM_SRC') - - TEXT - - ALIGN(16) -PROLOGUE(mpn_divexact_1) -deflit(`FRAME',0) - - movl PARAM_DIVISOR, %eax - pushl %ebp FRAME_pushl() - - movl PARAM_SIZE, %ebp - pushl %edi FRAME_pushl() - - pushl %ebx FRAME_pushl() - movl $-1, %ecx C shift count - - pushl %esi FRAME_pushl() - -L(strip_twos): - incl %ecx - - shrl %eax - jnc L(strip_twos) - - leal 1(%eax,%eax), %ebx C d without twos - andl $127, %eax C d/2, 7 bits - -ifdef(`PIC',` - LEA( binvert_limb_table, %edx) - movzbl (%eax,%edx), %eax C inv 8 bits -',` - movzbl binvert_limb_table(%eax), %eax C inv 8 bits -') - - leal (%eax,%eax), %edx C 2*inv - movl %ebx, PARAM_DIVISOR C d without twos - - imull %eax, %eax C inv*inv - - movl PARAM_SRC, %esi - movl PARAM_DST, %edi - - imull %ebx, %eax C inv*inv*d - - subl %eax, %edx C inv = 2*inv - inv*inv*d - leal (%edx,%edx), %eax C 2*inv - - imull %edx, %edx C inv*inv - - leal (%esi,%ebp,4), %esi C src end - leal (%edi,%ebp,4), %edi C dst end - negl %ebp C -size - - imull %ebx, %edx C inv*inv*d - - subl %edx, %eax C inv = 2*inv - inv*inv*d - - ASSERT(e,` C expect d*inv == 1 mod 2^GMP_LIMB_BITS - pushl %eax FRAME_pushl() - imull PARAM_DIVISOR, %eax - cmpl $1, %eax - popl %eax FRAME_popl()') - - movl %eax, VAR_INVERSE - movl (%esi,%ebp,4), %eax C src[0] - - xorl %ebx, %ebx - xorl %edx, %edx - - incl %ebp - jz L(one) - - movl (%esi,%ebp,4), %edx C src[1] - - shrdl( %cl, %edx, %eax) - - movl VAR_INVERSE, %edx - jmp L(entry) - - - ALIGN(8) - nop C k6 code alignment - nop -L(top): - C eax q - C ebx carry bit, 0 or -1 - C ecx shift - C edx carry limb - C esi src end - C edi dst end - C ebp counter, limbs, negative - - movl -4(%esi,%ebp,4), %eax - subl %ebx, %edx C accumulate carry bit - - movl (%esi,%ebp,4), %ebx - - shrdl( %cl, %ebx, %eax) - - subl %edx, %eax C apply carry limb - movl VAR_INVERSE, %edx - - sbbl %ebx, %ebx - -L(entry): - imull %edx, %eax - - movl %eax, -4(%edi,%ebp,4) - movl PARAM_DIVISOR, %edx - - mull %edx - - incl %ebp - jnz L(top) - - - movl -4(%esi), %eax C src high limb -L(one): - shrl %cl, %eax - popl %esi FRAME_popl() - - addl %ebx, %eax C apply carry bit - popl %ebx FRAME_popl() - - subl %edx, %eax C apply carry limb - - imull VAR_INVERSE, %eax - - movl %eax, -4(%edi) - - popl %edi - popl %ebp - - ret - -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/divrem_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/divrem_1.asm deleted file mode 100644 index 255d4935c389f495a465a3cc8c47799ca03b55c3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/divrem_1.asm +++ /dev/null @@ -1,233 +0,0 @@ -dnl x86 mpn_divrem_1 -- mpn by limb division extending to fractional quotient. - -dnl Copyright 1999-2003, 2007 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C 486 approx 43 maybe -C P5 44 -C P6 39 -C P6MMX 39 -C K6 22 -C K7 42 -C P4 58 - - -C mp_limb_t mpn_divrem_1 (mp_ptr dst, mp_size_t xsize, -C mp_srcptr src, mp_size_t size, mp_limb_t divisor); -C mp_limb_t mpn_divrem_1c (mp_ptr dst, mp_size_t xsize, -C mp_srcptr src, mp_size_t size, mp_limb_t divisor, -C mp_limb_t carry); -C -C Divide src,size by divisor and store the quotient in dst+xsize,size. -C Extend the division to fractional quotient limbs in dst,xsize. Return the -C remainder. Either or both xsize and size can be 0. -C -C mpn_divrem_1c takes a carry parameter which is an initial high limb, -C effectively one extra limb at the top of src,size. Must have -C carry<divisor. -C -C -C Essentially the code is the same as the division based part of -C mpn/generic/divrem_1.c, but has the advantage that we get the desired divl -C instruction even when gcc is not being used (when longlong.h only has the -C rather slow generic C udiv_qrnnd(). -C -C A test is done to see if the high limb is less than the divisor, and if so -C one less div is done. A div is between 20 and 40 cycles on the various -C x86s, so assuming high<divisor about half the time, then this test saves -C half that amount. The branch misprediction penalty on each chip is less -C than half a div. -C -C -C Notes for P5: -C -C It might be thought that moving the load down to pair with the store would -C save 1 cycle, but that doesn't seem to happen in practice, and in any case -C would be a mere 2.2% saving, so it's hardly worth bothering about. -C -C A mul-by-inverse might be a possibility for P5, as done in -C mpn/x86/pentium/mod_1.asm. The number of auxiliary instructions required -C is a hinderance, but there could be a 10-15% speedup available. -C -C -C Notes for K6: -C -C K6 has its own version of this code, using loop and paying attention to -C cache line boundary crossings. The target 20 c/l can be had with the -C decl+jnz of the present code by pairing up the load and store in the -C loops. But it's considered easier not to introduce complexity just for -C that, but instead let k6 have its own code. -C - -defframe(PARAM_CARRY, 24) -defframe(PARAM_DIVISOR,20) -defframe(PARAM_SIZE, 16) -defframe(PARAM_SRC, 12) -defframe(PARAM_XSIZE, 8) -defframe(PARAM_DST, 4) - - TEXT - ALIGN(16) - -PROLOGUE(mpn_divrem_1c) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - pushl %edi FRAME_pushl() - - movl PARAM_SRC, %edi - pushl %esi FRAME_pushl() - - movl PARAM_DIVISOR, %esi - pushl %ebx FRAME_pushl() - - movl PARAM_DST, %ebx - pushl %ebp FRAME_pushl() - - movl PARAM_XSIZE, %ebp - orl %ecx, %ecx - - movl PARAM_CARRY, %edx - jz L(fraction) - - leal -4(%ebx,%ebp,4), %ebx C dst one limb below integer part - jmp L(integer_top) - -EPILOGUE() - - -PROLOGUE(mpn_divrem_1) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - pushl %edi FRAME_pushl() - - movl PARAM_SRC, %edi - pushl %esi FRAME_pushl() - - movl PARAM_DIVISOR, %esi - orl %ecx,%ecx - - jz L(size_zero) - pushl %ebx FRAME_pushl() - - movl -4(%edi,%ecx,4), %eax C src high limb - xorl %edx, %edx - - movl PARAM_DST, %ebx - pushl %ebp FRAME_pushl() - - movl PARAM_XSIZE, %ebp - cmpl %esi, %eax - - leal -4(%ebx,%ebp,4), %ebx C dst one limb below integer part - jae L(integer_entry) - - - C high<divisor, so high of dst is zero, and avoid one div - - movl %edx, (%ebx,%ecx,4) - decl %ecx - - movl %eax, %edx - jz L(fraction) - - -L(integer_top): - C eax scratch (quotient) - C ebx dst+4*xsize-4 - C ecx counter - C edx scratch (remainder) - C esi divisor - C edi src - C ebp xsize - - movl -4(%edi,%ecx,4), %eax -L(integer_entry): - - divl %esi - - movl %eax, (%ebx,%ecx,4) - decl %ecx - jnz L(integer_top) - - -L(fraction): - orl %ebp, %ecx - jz L(done) - - movl PARAM_DST, %ebx - - -L(fraction_top): - C eax scratch (quotient) - C ebx dst - C ecx counter - C edx scratch (remainder) - C esi divisor - C edi - C ebp - - xorl %eax, %eax - - divl %esi - - movl %eax, -4(%ebx,%ecx,4) - decl %ecx - jnz L(fraction_top) - - -L(done): - popl %ebp - movl %edx, %eax - popl %ebx - popl %esi - popl %edi - ret - - -L(size_zero): -deflit(`FRAME',8) - movl PARAM_XSIZE, %ecx - xorl %eax, %eax - - movl PARAM_DST, %edi - - cld C better safe than sorry, see mpn/x86/README - - rep - stosl - - popl %esi - popl %edi - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/divrem_2.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/divrem_2.asm deleted file mode 100644 index 4c38ad0acb92eeee7297f7ededc0286b23a25860..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/divrem_2.asm +++ /dev/null @@ -1,199 +0,0 @@ -dnl x86 mpn_divrem_2 -- Divide an mpn number by a normalized 2-limb number. - -dnl Copyright 2007, 2008 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C norm frac -C 486 -C P5 -C P6-13 29.2 -C P6-15 *26 -C K6 -C K7 22 -C K8 *19 -C P4-f1 -C P4-f2 *65 -C P4-f3 -C P4-f4 *72 - -C A star means numbers not updated for the latest version of the code. - - -C TODO -C * Perhaps keep ecx or esi in stack slot, freeing up a reg for q0. -C * The loop has not been carefully tuned. We should at the very least do -C some local insn swapping. -C * The code outside the main loop is what gcc generated. Clean up! -C * Clean up stack slot usage. - -C INPUT PARAMETERS -C qp -C fn -C up_param -C un_param -C dp - - -C eax ebx ecx edx esi edi ebp -C cnt qp - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(mpn_divrem_2) - push %ebp - push %edi - push %esi - push %ebx - sub $36, %esp - mov 68(%esp), %ecx C un - mov 72(%esp), %esi C dp - movl $0, 32(%esp) - lea 0(,%ecx,4), %edi - add 64(%esp), %edi C up - mov (%esi), %ebx - mov 4(%esi), %eax - mov %ebx, 20(%esp) - sub $12, %edi - mov %eax, 24(%esp) - mov %edi, 12(%esp) - mov 8(%edi), %ebx - mov 4(%edi), %ebp - cmp %eax, %ebx - jb L(8) - seta %dl - cmp 20(%esp), %ebp - setae %al - orb %dl, %al C "orb" form to placate Sun tools - jne L(35) -L(8): - mov 60(%esp), %esi C fn - lea -3(%esi,%ecx), %edi - test %edi, %edi - js L(9) - mov 24(%esp), %edx - mov $-1, %esi - mov %esi, %eax - mov %esi, %ecx - not %edx - divl 24(%esp) - mov %eax, %esi - imul 24(%esp), %eax - mov %eax, (%esp) - mov %esi, %eax - mull 20(%esp) - mov (%esp), %eax - add 20(%esp), %eax - adc $0, %ecx - add %eax, %edx - adc $0, %ecx - mov %ecx, %eax - js L(32) -L(36): dec %esi - sub 24(%esp), %edx - sbb $0, %eax - jns L(36) -L(32): - mov %esi, 16(%esp) C di - mov %edi, %ecx C un - mov 12(%esp), %esi C up - mov 24(%esp), %eax - neg %eax - mov %eax, 4(%esp) C -d1 - ALIGN(16) - nop - -C eax ebx ecx edx esi edi ebp 0 4 8 12 16 20 24 28 32 56 60 -C n2 un up n1 q0 -d1 di d0 d1 msl qp fn - -L(loop): - mov 16(%esp), %eax C di - mul %ebx - add %ebp, %eax - mov %eax, (%esp) C q0 - adc %ebx, %edx - mov %edx, %edi C q - imul 4(%esp), %edx - mov 20(%esp), %eax - lea (%edx, %ebp), %ebx C n1 -= ... - mul %edi - xor %ebp, %ebp - cmp 60(%esp), %ecx - jl L(19) - mov (%esi), %ebp - sub $4, %esi -L(19): sub 20(%esp), %ebp - sbb 24(%esp), %ebx - sub %eax, %ebp - sbb %edx, %ebx - mov 20(%esp), %eax C d1 - inc %edi - xor %edx, %edx - cmp (%esp), %ebx - adc $-1, %edx C mask - add %edx, %edi C q-- - and %edx, %eax C d0 or 0 - and 24(%esp), %edx C d1 or 0 - add %eax, %ebp - adc %edx, %ebx - cmp 24(%esp), %ebx - jae L(fix) -L(bck): mov 56(%esp), %edx - mov %edi, (%edx, %ecx, 4) - dec %ecx - jns L(loop) - -L(9): mov 64(%esp), %esi C up - mov %ebp, (%esi) - mov %ebx, 4(%esi) - mov 32(%esp), %eax - add $36, %esp - pop %ebx - pop %esi - pop %edi - pop %ebp - ret - -L(fix): seta %dl - cmp 20(%esp), %ebp - setae %al - orb %dl, %al C "orb" form to placate Sun tools - je L(bck) - inc %edi - sub 20(%esp), %ebp - sbb 24(%esp), %ebx - jmp L(bck) - -L(35): sub 20(%esp), %ebp - sbb 24(%esp), %ebx - movl $1, 32(%esp) - jmp L(8) -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/com.c b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/com.c deleted file mode 100644 index d359d4ce7305adaa074aae0a0117bbbc65feb427..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/com.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Fat binary fallback mpn_com. - -Copyright 2003, 2009, 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "mpn/generic/com.c" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/fat.c b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/fat.c deleted file mode 100644 index bd84219a9ef874b50b7840aa4d21edc161006cf5..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/fat.c +++ /dev/null @@ -1,487 +0,0 @@ -/* x86 fat binary initializers. - - THE FUNCTIONS AND VARIABLES IN THIS FILE ARE FOR INTERNAL USE ONLY. - THEY'RE ALMOST CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR - COMPLETELY IN FUTURE GNU MP RELEASES. - -Copyright 2003, 2004, 2011-2013, 2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#include <stdio.h> /* for printf */ -#include <stdlib.h> /* for getenv */ -#include <string.h> - -#include "gmp.h" -#include "gmp-impl.h" - -/* Change this to "#define TRACE(x) x" for some traces. */ -#define TRACE(x) - - -/* fat_entry.asm */ -long __gmpn_cpuid (char [12], int); -int __gmpn_cpuid_available (void); - - -#if WANT_FAKE_CPUID -/* The "name"s in the table are values for the GMP_CPU_TYPE environment - variable. Anything can be used, but for now it's the canonical cpu types - as per config.guess/config.sub. */ - -#define __gmpn_cpuid fake_cpuid -#define __gmpn_cpuid_available fake_cpuid_available - -#define MAKE_FMS(family, model) \ - ((((family) & 0xf) << 8) + (((family) & 0xff0) << 20) \ - + (((model) & 0xf) << 4) + (((model) & 0xf0) << 12)) - -static struct { - const char *name; - const char *vendor; - unsigned fms; -} fake_cpuid_table[] = { - { "i386", "" }, - { "i486", "GenuineIntel", MAKE_FMS (4, 0) }, - { "pentium", "GenuineIntel", MAKE_FMS (5, 0) }, - { "pentiummmx", "GenuineIntel", MAKE_FMS (5, 4) }, - { "pentiumpro", "GenuineIntel", MAKE_FMS (6, 0) }, - { "pentium2", "GenuineIntel", MAKE_FMS (6, 2) }, - { "pentium3", "GenuineIntel", MAKE_FMS (6, 7) }, - { "pentium4", "GenuineIntel", MAKE_FMS (15, 2) }, - { "prescott", "GenuineIntel", MAKE_FMS (15, 3) }, - { "nocona", "GenuineIntel", MAKE_FMS (15, 4) }, - { "core2", "GenuineIntel", MAKE_FMS (6, 0xf) }, - { "nehalem", "GenuineIntel", MAKE_FMS (6, 0x1a) }, - { "nhm", "GenuineIntel", MAKE_FMS (6, 0x1a) }, - { "atom", "GenuineIntel", MAKE_FMS (6, 0x1c) }, - { "westmere", "GenuineIntel", MAKE_FMS (6, 0x25) }, - { "wsm", "GenuineIntel", MAKE_FMS (6, 0x25) }, - { "sandybridge","GenuineIntel", MAKE_FMS (6, 0x2a) }, - { "sbr", "GenuineIntel", MAKE_FMS (6, 0x2a) }, - { "silvermont", "GenuineIntel", MAKE_FMS (6, 0x37) }, - { "slm", "GenuineIntel", MAKE_FMS (6, 0x37) }, - { "haswell", "GenuineIntel", MAKE_FMS (6, 0x3c) }, - { "hwl", "GenuineIntel", MAKE_FMS (6, 0x3c) }, - { "broadwell", "GenuineIntel", MAKE_FMS (6, 0x3d) }, - { "bwl", "GenuineIntel", MAKE_FMS (6, 0x3d) }, - { "skylake", "GenuineIntel", MAKE_FMS (6, 0x5e) }, - { "sky", "GenuineIntel", MAKE_FMS (6, 0x5e) }, - - { "k5", "AuthenticAMD", MAKE_FMS (5, 0) }, - { "k6", "AuthenticAMD", MAKE_FMS (5, 3) }, - { "k62", "AuthenticAMD", MAKE_FMS (5, 8) }, - { "k63", "AuthenticAMD", MAKE_FMS (5, 9) }, - { "athlon", "AuthenticAMD", MAKE_FMS (6, 0) }, - { "k8", "AuthenticAMD", MAKE_FMS (15, 0) }, - { "k10", "AuthenticAMD", MAKE_FMS (16, 0) }, - { "bobcat", "AuthenticAMD", MAKE_FMS (20, 1) }, - { "bulldozer", "AuthenticAMD", MAKE_FMS (21, 1) }, - { "piledriver", "AuthenticAMD", MAKE_FMS (21, 2) }, - { "steamroller","AuthenticAMD", MAKE_FMS (21, 0x30) }, - { "excavator", "AuthenticAMD", MAKE_FMS (21, 0x60) }, - { "jaguar", "AuthenticAMD", MAKE_FMS (22, 1) }, - - { "viac3", "CentaurHauls", MAKE_FMS (6, 0) }, - { "viac32", "CentaurHauls", MAKE_FMS (6, 9) }, - { "nano", "CentaurHauls", MAKE_FMS (6, 15) }, -}; - -static int -fake_cpuid_lookup (void) -{ - char *s; - int i; - - s = getenv ("GMP_CPU_TYPE"); - if (s == NULL) - { - printf ("Need GMP_CPU_TYPE environment variable for fake cpuid\n"); - abort (); - } - - for (i = 0; i < numberof (fake_cpuid_table); i++) - if (strcmp (s, fake_cpuid_table[i].name) == 0) - return i; - - printf ("GMP_CPU_TYPE=%s unknown\n", s); - abort (); -} - -static int -fake_cpuid_available (void) -{ - return fake_cpuid_table[fake_cpuid_lookup()].vendor[0] != '\0'; -} - -static long -fake_cpuid (char dst[12], int id) -{ - int i = fake_cpuid_lookup(); - - switch (id) { - case 0: - memcpy (dst, fake_cpuid_table[i].vendor, 12); - return 0; - case 1: - return fake_cpuid_table[i].fms; - default: - printf ("fake_cpuid(): oops, unknown id %d\n", id); - abort (); - } -} -#endif - - -typedef DECL_preinv_divrem_1 ((*preinv_divrem_1_t)); -typedef DECL_preinv_mod_1 ((*preinv_mod_1_t)); - -struct cpuvec_t __gmpn_cpuvec = { - __MPN(add_n_init), - 0, - 0, - __MPN(addmul_1_init), - 0, - __MPN(bdiv_dbm1c_init), - __MPN(cnd_add_n_init), - __MPN(cnd_sub_n_init), - __MPN(com_init), - __MPN(copyd_init), - __MPN(copyi_init), - __MPN(divexact_1_init), - __MPN(divrem_1_init), - __MPN(gcd_1_init), - __MPN(lshift_init), - __MPN(lshiftc_init), - __MPN(mod_1_init), - __MPN(mod_1_1p_init), - __MPN(mod_1_1p_cps_init), - __MPN(mod_1s_2p_init), - __MPN(mod_1s_2p_cps_init), - __MPN(mod_1s_4p_init), - __MPN(mod_1s_4p_cps_init), - __MPN(mod_34lsub1_init), - __MPN(modexact_1c_odd_init), - __MPN(mul_1_init), - __MPN(mul_basecase_init), - __MPN(mullo_basecase_init), - __MPN(preinv_divrem_1_init), - __MPN(preinv_mod_1_init), - __MPN(redc_1_init), - __MPN(redc_2_init), - __MPN(rshift_init), - __MPN(sqr_basecase_init), - __MPN(sub_n_init), - 0, - __MPN(submul_1_init), - 0 -}; - -int __gmpn_cpuvec_initialized = 0; - -/* The following setups start with generic x86, then overwrite with - specifics for a chip, and higher versions of that chip. - - The arrangement of the setups here will normally be the same as the $path - selections in configure.in for the respective chips. - - This code is reentrant and thread safe. We always calculate the same - decided_cpuvec, so if two copies of the code are running it doesn't - matter which completes first, both write the same to __gmpn_cpuvec. - - We need to go via decided_cpuvec because if one thread has completed - __gmpn_cpuvec then it may be making use of the threshold values in that - vector. If another thread is still running __gmpn_cpuvec_init then we - don't want it to write different values to those fields since some of the - asm routines only operate correctly up to their own defined threshold, - not an arbitrary value. */ - -void -__gmpn_cpuvec_init (void) -{ - struct cpuvec_t decided_cpuvec; - - TRACE (printf ("__gmpn_cpuvec_init:\n")); - - memset (&decided_cpuvec, '\0', sizeof (decided_cpuvec)); - - CPUVEC_SETUP_x86; - CPUVEC_SETUP_fat; - - if (! __gmpn_cpuid_available ()) - { - TRACE (printf (" 80386, or early 80486 without cpuid\n")); - } - else - { - char vendor_string[13]; - char dummy_string[12]; - long fms; - int family, model; - - __gmpn_cpuid (vendor_string, 0); - vendor_string[12] = 0; - - fms = __gmpn_cpuid (dummy_string, 1); - family = ((fms >> 8) & 0xf) + ((fms >> 20) & 0xff); - model = ((fms >> 4) & 0xf) + ((fms >> 12) & 0xf0); - - if (strcmp (vendor_string, "GenuineIntel") == 0) - { - switch (family) - { - case 4: - TRACE (printf (" 80486 with cpuid\n")); - break; - - case 5: - TRACE (printf (" pentium\n")); - CPUVEC_SETUP_pentium; - if (model >= 4) - { - TRACE (printf (" pentiummmx\n")); - CPUVEC_SETUP_pentium_mmx; - } - break; - - case 6: - TRACE (printf (" p6\n")); - CPUVEC_SETUP_p6; - switch (model) - { - case 0x00: - case 0x01: - TRACE (printf (" pentiumpro\n")); - break; - - case 0x02: - case 0x03: - case 0x04: - case 0x05: - case 0x06: - TRACE (printf (" pentium2\n")); - CPUVEC_SETUP_p6_mmx; - break; - - case 0x07: - case 0x08: - case 0x0a: - case 0x0b: - case 0x0c: - TRACE (printf (" pentium3\n")); - CPUVEC_SETUP_p6_mmx; - CPUVEC_SETUP_p6_p3mmx; - break; - - case 0x09: /* Banias */ - case 0x0d: /* Dothan */ - case 0x0e: /* Yonah */ - TRACE (printf (" Banias/Dothan/Yonah\n")); - CPUVEC_SETUP_p6_mmx; - CPUVEC_SETUP_p6_p3mmx; - CPUVEC_SETUP_p6_sse2; - break; - - case 0x0f: /* Conroe Merom Kentsfield Allendale */ - case 0x10: - case 0x11: - case 0x12: - case 0x13: - case 0x14: - case 0x15: - case 0x16: - case 0x17: /* PNR Wolfdale Yorkfield */ - case 0x18: - case 0x19: - case 0x1d: /* PNR Dunnington */ - TRACE (printf (" Conroe\n")); - CPUVEC_SETUP_p6_mmx; - CPUVEC_SETUP_p6_p3mmx; - CPUVEC_SETUP_p6_sse2; - CPUVEC_SETUP_core2; - break; - - case 0x1c: /* Atom Silverthorne */ - case 0x26: /* Atom Lincroft */ - case 0x27: /* Atom Saltwell */ - case 0x36: /* Atom Cedarview/Saltwell */ - TRACE (printf (" atom\n")); - CPUVEC_SETUP_atom; - CPUVEC_SETUP_atom_mmx; - CPUVEC_SETUP_atom_sse2; - break; - - case 0x1a: /* NHM Gainestown */ - case 0x1b: - case 0x1e: /* NHM Lynnfield/Jasper */ - case 0x1f: - case 0x20: - case 0x21: - case 0x22: - case 0x23: - case 0x24: - case 0x25: /* WSM Clarkdale/Arrandale */ - case 0x28: - case 0x29: - case 0x2b: - case 0x2c: /* WSM Gulftown */ - case 0x2e: /* NHM Beckton */ - case 0x2f: /* WSM Eagleton */ - TRACE (printf (" nehalem/westmere\n")); - CPUVEC_SETUP_p6_mmx; - CPUVEC_SETUP_p6_p3mmx; - CPUVEC_SETUP_p6_sse2; - CPUVEC_SETUP_core2; - CPUVEC_SETUP_coreinhm; - break; - - case 0x2a: /* SBR */ - case 0x2d: /* SBR-EP */ - case 0x3a: /* IBR */ - case 0x3c: /* Haswell */ - TRACE (printf (" sandybridge\n")); - CPUVEC_SETUP_p6_mmx; - CPUVEC_SETUP_p6_p3mmx; - CPUVEC_SETUP_p6_sse2; - CPUVEC_SETUP_core2; - CPUVEC_SETUP_coreinhm; - CPUVEC_SETUP_coreisbr; - break; - } - break; - - case 15: - TRACE (printf (" pentium4\n")); - CPUVEC_SETUP_pentium4; - CPUVEC_SETUP_pentium4_mmx; - CPUVEC_SETUP_pentium4_sse2; - break; - } - } - else if (strcmp (vendor_string, "AuthenticAMD") == 0) - { - switch (family) - { - case 5: - if (model <= 3) - { - TRACE (printf (" k5\n")); - } - else - { - TRACE (printf (" k6\n")); - CPUVEC_SETUP_k6; - CPUVEC_SETUP_k6_mmx; - if (model >= 8) - { - TRACE (printf (" k62\n")); - CPUVEC_SETUP_k6_k62mmx; - } - if (model >= 9) - { - TRACE (printf (" k63\n")); - } - } - break; - case 6: - TRACE (printf (" athlon\n")); - CPUVEC_SETUP_k7; - CPUVEC_SETUP_k7_mmx; - break; - - case 0x0f: /* k8 */ - case 0x11: /* "fam 11h", mix of k8 and k10 */ - case 0x13: /* unknown, conservatively assume k8 */ - case 0x16: /* unknown, conservatively assume k8 */ - case 0x17: /* unknown, conservatively assume k8 */ - TRACE (printf (" k8\n")); - CPUVEC_SETUP_k7; - CPUVEC_SETUP_k7_mmx; - CPUVEC_SETUP_k8; - break; - - case 0x10: /* k10 */ - case 0x12: /* k10 (llano) */ - TRACE (printf (" k10\n")); - CPUVEC_SETUP_k7; - CPUVEC_SETUP_k7_mmx; - break; - - case 0x14: /* bobcat */ - TRACE (printf (" bobcat\n")); - CPUVEC_SETUP_k7; - CPUVEC_SETUP_k7_mmx; - CPUVEC_SETUP_bobcat; - break; - - case 0x15: /* bulldozer */ - TRACE (printf (" bulldozer\n")); - CPUVEC_SETUP_k7; - CPUVEC_SETUP_k7_mmx; - break; - } - } - else if (strcmp (vendor_string, "CentaurHauls") == 0) - { - switch (family) - { - case 6: - TRACE (printf (" viac3\n")); - if (model >= 9) - { - TRACE (printf (" viac32\n")); - } - if (model >= 15) - { - TRACE (printf (" nano\n")); - CPUVEC_SETUP_nano; - } - break; - } - } - else if (strcmp (vendor_string, "CyrixInstead") == 0) - { - /* Should recognize Cyrix' processors too. */ - TRACE (printf (" cyrix something\n")); - } - } - - /* There's no x86 generic mpn_preinv_divrem_1 or mpn_preinv_mod_1. - Instead default to the plain versions from whichever CPU we detected. - The function arguments are compatible, no need for any glue code. */ - if (decided_cpuvec.preinv_divrem_1 == NULL) - decided_cpuvec.preinv_divrem_1 =(preinv_divrem_1_t)decided_cpuvec.divrem_1; - if (decided_cpuvec.preinv_mod_1 == NULL) - decided_cpuvec.preinv_mod_1 =(preinv_mod_1_t) decided_cpuvec.mod_1; - - ASSERT_CPUVEC (decided_cpuvec); - CPUVEC_INSTALL (decided_cpuvec); - - /* Set this once the threshold fields are ready. - Use volatile to prevent it getting moved. */ - *((volatile int *) &__gmpn_cpuvec_initialized) = 1; -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/fat_entry.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/fat_entry.asm deleted file mode 100644 index 25655cfbff9a8cc78d50747c96c682d7941c781a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/fat_entry.asm +++ /dev/null @@ -1,243 +0,0 @@ -dnl x86 fat binary entrypoints. - -dnl Copyright 2003, 2012, 2014 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -dnl Forcibly disable profiling. -dnl -dnl The entrypoints and inits are small enough not to worry about, the real -dnl routines arrived at will have any profiling. Also, the way the code -dnl here ends with a jump means we won't work properly with the -dnl "instrument" profiling scheme anyway. - -define(`WANT_PROFILING',no) - - - TEXT - - -dnl Usage: FAT_ENTRY(name, offset) -dnl -dnl Emit a fat binary entrypoint function of the given name. This is the -dnl normal entry for applications, eg. __gmpn_add_n. -dnl -dnl The code simply jumps through the function pointer in __gmpn_cpuvec at -dnl the given "offset" (in bytes). -dnl -dnl For non-PIC, the jumps are 5 bytes each, aligning them to 8 should be -dnl fine for all x86s. -dnl -dnl For PIC, the jumps are 20 bytes each, and are best aligned to 16 to -dnl ensure at least the first two instructions don't cross a cache line -dnl boundary. -dnl -dnl Note the extra `' ahead of PROLOGUE obscures it from the HAVE_NATIVE -dnl grepping in configure, stopping that code trying to eval something with -dnl $1 in it. - -define(FAT_ENTRY, -m4_assert_numargs(2) -` ALIGN(ifdef(`PIC',16,8)) -`'PROLOGUE($1)dnl -ifdef(`PIC',`dnl -ifdef(`DARWIN',` - call L(movl_eip_edx) - movl L(___gmpn_cpuvec)$non_lazy_ptr-.(%edx), %edx - jmp *m4_empty_if_zero($2)(%edx) -',`dnl - call L(movl_eip_edx) -L(entry_here$2): - addl $_GLOBAL_OFFSET_TABLE_+[.-L(entry_here$2)], %edx - movl GSYM_PREFIX`'__gmpn_cpuvec@GOT(%edx), %edx - jmp *m4_empty_if_zero($2)(%edx) -') -',`dnl non-PIC - jmp *GSYM_PREFIX`'__gmpn_cpuvec+$2 -') -EPILOGUE() -') - - -dnl FAT_ENTRY for each CPUVEC_FUNCS_LIST -dnl - -define(`CPUVEC_offset',0) -foreach(i, -`FAT_ENTRY(MPN(i),CPUVEC_offset) -define(`CPUVEC_offset',eval(CPUVEC_offset + 4))', -CPUVEC_FUNCS_LIST) - -ifdef(`PIC',` - ALIGN(8) -L(movl_eip_edx): - movl (%esp), %edx - ret_internal -ifdef(`DARWIN',` - .section __IMPORT,__pointers,non_lazy_symbol_pointers -L(___gmpn_cpuvec)$non_lazy_ptr: - .indirect_symbol ___gmpn_cpuvec - .long 0 - TEXT -') -') - - -dnl Usage: FAT_INIT(name, offset) -dnl -dnl Emit a fat binary initializer function of the given name. These -dnl functions are the initial values for the pointers in __gmpn_cpuvec. -dnl -dnl The code simply calls __gmpn_cpuvec_init, and then jumps back through -dnl the __gmpn_cpuvec pointer, at the given "offset" (in bytes). -dnl __gmpn_cpuvec_init will have stored the address of the selected -dnl implementation there. -dnl -dnl Only one of these routines will be executed, and only once, since after -dnl that all the __gmpn_cpuvec pointers go to real routines. So there's no -dnl need for anything special here, just something small and simple. To -dnl keep code size down, "fat_init" is a shared bit of code, arrived at -dnl with the offset in %al. %al is used since the movb instruction is 2 -dnl bytes where %eax would be 4. -dnl -dnl Note having `PROLOGUE in FAT_INIT obscures that PROLOGUE from the -dnl HAVE_NATIVE grepping in configure, preventing that code trying to eval -dnl something with $1 in it. - -define(FAT_INIT, -m4_assert_numargs(2) -`PROLOGUE($1)dnl - movb $`'$2, %al - jmp L(fat_init) -EPILOGUE() -') - -L(fat_init): - C al __gmpn_cpuvec byte offset - - movzbl %al, %eax - pushl %eax - -ifdef(`PIC',`dnl -ifdef(`DARWIN',` - sub $8, %esp - CALL( __gmpn_cpuvec_init) - add $8, %esp - call L(movl_eip_edx) - movl L(___gmpn_cpuvec)$non_lazy_ptr-.(%edx), %edx -',`dnl - pushl %ebx - call L(movl_eip_ebx) -L(init_here): - addl $_GLOBAL_OFFSET_TABLE_+[.-L(init_here)], %ebx - CALL( __gmpn_cpuvec_init) - movl GSYM_PREFIX`'__gmpn_cpuvec@GOT(%ebx), %edx - popl %ebx -') - popl %eax - jmp *(%edx,%eax) - -L(movl_eip_ebx): - movl (%esp), %ebx - ret_internal -',`dnl non-PIC - sub $8, %esp C needed on Darwin, harmless elsewhere - CALL( __gmpn_cpuvec_init) - add $8, %esp C needed on Darwin, harmless elsewhere - popl %eax - jmp *GSYM_PREFIX`'__gmpn_cpuvec(%eax) -') - -dnl FAT_INIT for each CPUVEC_FUNCS_LIST -dnl - -define(`CPUVEC_offset',0) -foreach(i, -`FAT_INIT(MPN(i`'_init),CPUVEC_offset) -define(`CPUVEC_offset',eval(CPUVEC_offset + 4))', -CPUVEC_FUNCS_LIST) - - - -C long __gmpn_cpuid (char dst[12], int id); -C -C This is called only once, so just something simple and compact is fine. - -defframe(PARAM_ID, 8) -defframe(PARAM_DST, 4) -deflit(`FRAME',0) - -PROLOGUE(__gmpn_cpuid) - pushl %esi FRAME_pushl() - pushl %ebx FRAME_pushl() - movl PARAM_ID, %eax - cpuid - movl PARAM_DST, %esi - movl %ebx, (%esi) - movl %edx, 4(%esi) - movl %ecx, 8(%esi) - popl %ebx - popl %esi - ret -EPILOGUE() - - -C int __gmpn_cpuid_available (void); -C -C Return non-zero if the cpuid instruction is available, which means late -C model 80486 and higher. 80386 and early 80486 don't have cpuid. -C -C The test follows Intel AP-485 application note, namely that if bit 21 is -C modifiable then cpuid is supported. This test is reentrant and thread -C safe, since of course any interrupt or context switch will preserve the -C flags while we're tinkering with them. -C -C This is called only once, so just something simple and compact is fine. - -PROLOGUE(__gmpn_cpuid_available) - pushf - popl %ecx C old flags - - movl %ecx, %edx - xorl $0x200000, %edx - pushl %edx - popf - pushf - popl %edx C tweaked flags - - movl $1, %eax - cmpl %ecx, %edx - jne L(available) - xorl %eax, %eax C not changed, so cpuid not available - -L(available): - ret -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/gcd_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/gcd_1.c deleted file mode 100644 index f809bd809288ad45c9a08760d1296c87519bf78a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/gcd_1.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Fat binary fallback mpn_gcd_1. - -Copyright 2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "mpn/generic/gcd_1.c" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/gmp-mparam.h deleted file mode 100644 index 3641a6bafadd53101555ca51fe36df5cf8a98d58..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/gmp-mparam.h +++ /dev/null @@ -1,71 +0,0 @@ -/* Fat binary x86 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2003, 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - - -/* mpn_divexact_1 is faster than mpn_divrem_1 at all sizes. The only time - this might not be true currently is for actual 80386 and 80486 chips, - where mpn/x86/dive_1.asm might be slower than mpn/x86/divrem_1.asm, but - that's not worth worrying about. */ -#define DIVEXACT_1_THRESHOLD 0 - -/* Only some of the x86s have an mpn_preinv_divrem_1, but we set - USE_PREINV_DIVREM_1 so that all callers use it, and then let the - __gmpn_cpuvec pointer go to plain mpn_divrem_1 if there's not an actual - preinv. */ -#define USE_PREINV_DIVREM_1 1 - -#define BMOD_1_TO_MOD_1_THRESHOLD 20 - -/* mpn_sqr_basecase is faster than mpn_mul_basecase at all sizes, no need - for mpn_sqr to call the latter. */ -#define SQR_BASECASE_THRESHOLD 0 - -/* Sensible fallbacks for these, when not taken from a cpu-specific - gmp-mparam.h. */ -#define MUL_TOOM22_THRESHOLD 20 -#define MUL_TOOM33_THRESHOLD 130 -#define SQR_TOOM2_THRESHOLD 30 -#define SQR_TOOM3_THRESHOLD 200 - -/* These are values more or less in the middle of what the typical x86 chips - come out as. For a fat binary it's necessary to have values for these, - since the defaults for MUL_FFT_TABLE and SQR_FFT_TABLE otherwise come out - as non-constant array initializers. FIXME: Perhaps these should be done - in the cpuvec structure like other thresholds. */ -#define MUL_FFT_TABLE { 464, 928, 1920, 3584, 10240, 40960, 0 } -#define MUL_FFT_MODF_THRESHOLD 400 -#define MUL_FFT_THRESHOLD 2000 - -#define SQR_FFT_TABLE { 528, 1184, 1920, 4608, 14336, 40960, 0 } -#define SQR_FFT_MODF_THRESHOLD 500 -#define SQR_FFT_THRESHOLD 3000 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/lshiftc.c b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/lshiftc.c deleted file mode 100644 index 9ecf48978f988294c350393a7aa4d0a82704d60a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/lshiftc.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Fat binary fallback mpn_lshiftc. - -Copyright 2003, 2009, 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "mpn/generic/lshiftc.c" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mod_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mod_1.c deleted file mode 100644 index 4f149cc353cc5e8386bce725495aa530cf5cce08..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mod_1.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Fat binary fallback mpn_mod_1. - -Copyright 2003, 2009 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "mpn/generic/mod_1.c" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mod_1_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mod_1_1.c deleted file mode 100644 index 92eaa7a87f6b302237040a0cb0f0ff938c22244c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mod_1_1.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Fat binary fallback mpn_mod_1_1p. - -Copyright 2003, 2009, 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* -PROLOGUE(mpn_mod_1_1p_cps) -*/ - -#define OPERATION_mod_1_1_cps 1 -#include "mpn/generic/mod_1_1.c" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mod_1_2.c b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mod_1_2.c deleted file mode 100644 index 9095a61c9387d0a2e78487dc22bb77ce29f60444..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mod_1_2.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Fat binary fallback mpn_mod_1s_2p. - -Copyright 2003, 2009, 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* -PROLOGUE(mpn_mod_1s_2p_cps) -*/ - -#define OPERATION_mod_1_2_cps 1 -#include "mpn/generic/mod_1_2.c" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mod_1_4.c b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mod_1_4.c deleted file mode 100644 index 51c0def4439e731d7f082207c5ef8bddc895c536..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mod_1_4.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Fat binary fallback mpn_mod_1s_4p. - -Copyright 2003, 2009, 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -/* -PROLOGUE(mpn_mod_1s_4p_cps) -*/ - -#define OPERATION_mod_1_4_cps 1 -#include "mpn/generic/mod_1_4.c" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mode1o.c b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mode1o.c deleted file mode 100644 index 870ddb899bdead54662b9673b94ee34e7e022782..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mode1o.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Fat binary fallback mpn_modexact_1c_odd. - -Copyright 2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "mpn/generic/mode1o.c" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mullo_basecase.c b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mullo_basecase.c deleted file mode 100644 index 7f86be64c52610a641b42bf5358447794077724f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/mullo_basecase.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Fat binary fallback mpn_mullo_basecase. - -Copyright 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "mpn/generic/mullo_basecase.c" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/redc_1.c b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/redc_1.c deleted file mode 100644 index 00254033538ed752231d7ac6586517a32f670f6f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/redc_1.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Fat binary fallback mpn_redc_1. - -Copyright 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "mpn/generic/redc_1.c" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/redc_2.c b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/redc_2.c deleted file mode 100644 index 1932d583231f5709916775276b7e207298538be9..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/fat/redc_2.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Fat binary fallback mpn_redc_2. - -Copyright 2012 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - - -#include "mpn/generic/redc_2.c" diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/geode/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/geode/gmp-mparam.h deleted file mode 100644 index cc9c9f17893db3e0cee2ea2e322833d19708fbcc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/geode/gmp-mparam.h +++ /dev/null @@ -1,141 +0,0 @@ -/* Generic x86 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2002, 2011 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* Generated by tuneup.c, 2011-01-30, gcc 3.4 */ - -#define MOD_1_NORM_THRESHOLD 6 -#define MOD_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 17 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 9 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 0 /* never mpn_mod_1_1p */ -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 14 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ -#define USE_PREINV_DIVREM_1 0 -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 42 - -#define MUL_TOOM22_THRESHOLD 18 -#define MUL_TOOM33_THRESHOLD 66 -#define MUL_TOOM44_THRESHOLD 105 -#define MUL_TOOM6H_THRESHOLD 141 -#define MUL_TOOM8H_THRESHOLD 212 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 62 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 69 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 65 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 67 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 33 -#define SQR_TOOM3_THRESHOLD 60 -#define SQR_TOOM4_THRESHOLD 136 -#define SQR_TOOM6_THRESHOLD 196 -#define SQR_TOOM8_THRESHOLD 292 - -#define MULMOD_BNM1_THRESHOLD 14 -#define SQRMOD_BNM1_THRESHOLD 16 - -#define MUL_FFT_MODF_THRESHOLD 468 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 468, 5}, { 17, 6}, { 9, 5}, { 19, 6}, \ - { 11, 5}, { 23, 6}, { 21, 7}, { 11, 6}, \ - { 25, 7}, { 13, 6}, { 27, 7}, { 15, 6}, \ - { 31, 7}, { 21, 8}, { 11, 7}, { 27, 8}, \ - { 15, 7}, { 33, 8}, { 19, 7}, { 39, 8}, \ - { 23, 7}, { 47, 8}, { 27, 9}, { 15, 8}, \ - { 39, 9}, { 23, 8}, { 47,10}, { 15, 9}, \ - { 31, 8}, { 67, 9}, { 39, 8}, { 79, 9}, \ - { 47, 8}, { 95, 9}, { 55,10}, { 31, 9}, \ - { 63, 8}, { 127, 9}, { 79,10}, { 47, 9}, \ - { 95,11}, { 31,10}, { 63, 9}, { 135,10}, \ - { 79, 9}, { 159,10}, { 95, 9}, { 191,11}, \ - { 63,10}, { 127, 9}, { 255,10}, { 143, 9}, \ - { 287,10}, { 159,11}, { 95,10}, { 191, 9}, \ - { 383,12}, { 4096,13}, { 8192,14}, { 16384,15}, \ - { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 61 -#define MUL_FFT_THRESHOLD 5504 - -#define SQR_FFT_MODF_THRESHOLD 396 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 396, 5}, { 21, 6}, { 11, 5}, { 23, 6}, \ - { 21, 7}, { 11, 6}, { 24, 7}, { 13, 6}, \ - { 27, 7}, { 15, 6}, { 31, 7}, { 21, 8}, \ - { 11, 7}, { 27, 8}, { 15, 7}, { 33, 8}, \ - { 19, 7}, { 39, 8}, { 23, 7}, { 47, 8}, \ - { 27, 9}, { 15, 8}, { 39, 9}, { 23, 8}, \ - { 51,10}, { 15, 9}, { 31, 8}, { 67, 9}, \ - { 39, 8}, { 79, 9}, { 47, 8}, { 95, 9}, \ - { 55,10}, { 31, 9}, { 79,10}, { 47, 9}, \ - { 95,11}, { 31,10}, { 63, 9}, { 127, 8}, \ - { 255, 9}, { 135,10}, { 79, 9}, { 159, 8}, \ - { 319,10}, { 95, 9}, { 191,11}, { 63,10}, \ - { 127, 9}, { 255, 8}, { 511,10}, { 143, 9}, \ - { 287, 8}, { 575,10}, { 159,11}, { 95,10}, \ - { 191,12}, { 4096,13}, { 8192,14}, { 16384,15}, \ - { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 61 -#define SQR_FFT_THRESHOLD 3712 - -#define MULLO_BASECASE_THRESHOLD 3 -#define MULLO_DC_THRESHOLD 37 -#define MULLO_MUL_N_THRESHOLD 10950 - -#define DC_DIV_QR_THRESHOLD 59 -#define DC_DIVAPPR_Q_THRESHOLD 189 -#define DC_BDIV_QR_THRESHOLD 55 -#define DC_BDIV_Q_THRESHOLD 136 - -#define INV_MULMOD_BNM1_THRESHOLD 50 -#define INV_NEWTON_THRESHOLD 183 -#define INV_APPR_THRESHOLD 181 - -#define BINV_NEWTON_THRESHOLD 204 -#define REDC_1_TO_REDC_N_THRESHOLD 54 - -#define MU_DIV_QR_THRESHOLD 1142 -#define MU_DIVAPPR_Q_THRESHOLD 1142 -#define MUPI_DIV_QR_THRESHOLD 81 -#define MU_BDIV_QR_THRESHOLD 889 -#define MU_BDIV_Q_THRESHOLD 998 - -#define MATRIX22_STRASSEN_THRESHOLD 13 -#define HGCD_THRESHOLD 133 -#define GCD_DC_THRESHOLD 451 -#define GCDEXT_DC_THRESHOLD 318 -#define JACOBI_BASE_METHOD 1 - -#define GET_STR_DC_THRESHOLD 15 -#define GET_STR_PRECOMPUTE_THRESHOLD 30 -#define SET_STR_DC_THRESHOLD 547 -#define SET_STR_PRECOMPUTE_THRESHOLD 1049 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/gmp-mparam.h deleted file mode 100644 index 2cb19848892d9165e8dcd2d9f9bdd40e8c2ab3dc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/gmp-mparam.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Generic x86 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2002 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - - -/* Generic x86 mpn_divexact_1 is faster than generic x86 mpn_divrem_1 on all - of p5, p6, k6 and k7, so use it always. It's probably slower on 386 and - 486, but that's too bad. */ -#define DIVEXACT_1_THRESHOLD 0 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/i486/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/i486/gmp-mparam.h deleted file mode 100644 index aa7dbad45ba62f5a15df280d8900a167ac88c362..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/i486/gmp-mparam.h +++ /dev/null @@ -1,69 +0,0 @@ -/* 80486 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 2001-2003 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - - -/* 100MHz DX4 */ - -/* Generated by tuneup.c, 2003-02-13, gcc 2.95 */ - -#define MUL_TOOM22_THRESHOLD 18 -#define MUL_TOOM33_THRESHOLD 228 - -#define SQR_BASECASE_THRESHOLD 13 -#define SQR_TOOM2_THRESHOLD 49 -#define SQR_TOOM3_THRESHOLD 238 - -#define DIV_SB_PREINV_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_DC_THRESHOLD 72 -#define POWM_THRESHOLD 38 - -#define GCD_ACCEL_THRESHOLD 3 -#define JACOBI_BASE_METHOD 2 - -#define USE_PREINV_DIVREM_1 0 -#define USE_PREINV_MOD_1 0 -#define DIVREM_2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define MODEXACT_1_ODD_THRESHOLD 17 - -#define GET_STR_DC_THRESHOLD 32 -#define GET_STR_PRECOMPUTE_THRESHOLD 82 -#define SET_STR_THRESHOLD 3524 - -#define MUL_FFT_TABLE { 464, 928, 1920, 4608, 10240, 40960, 0 } -#define MUL_FFT_MODF_THRESHOLD 392 -#define MUL_FFT_THRESHOLD 2816 - -#define SQR_FFT_TABLE { 432, 928, 1920, 4608, 14336, 40960, 0 } -#define SQR_FFT_MODF_THRESHOLD 392 -#define SQR_FFT_THRESHOLD 2816 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k10/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k10/gmp-mparam.h deleted file mode 100644 index 90cb96f911e803647cb648f338cfc68b144bcde1..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k10/gmp-mparam.h +++ /dev/null @@ -1,214 +0,0 @@ -/* x86/k10 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2011, 2014-2015 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 2400 MHz K10 Barcelona */ -/* FFT tuning limit = 25000000 */ -/* Generated by tuneup.c, 2014-03-13, gcc 4.5 */ - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 0 /* always */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 12 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 7 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 9 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 12 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 15 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 1 -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 32 - -#define MUL_TOOM22_THRESHOLD 24 -#define MUL_TOOM33_THRESHOLD 81 -#define MUL_TOOM44_THRESHOLD 130 -#define MUL_TOOM6H_THRESHOLD 189 -#define MUL_TOOM8H_THRESHOLD 430 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 81 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 91 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 82 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 90 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 112 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 38 -#define SQR_TOOM3_THRESHOLD 77 -#define SQR_TOOM4_THRESHOLD 184 -#define SQR_TOOM6_THRESHOLD 262 -#define SQR_TOOM8_THRESHOLD 369 - -#define MULMID_TOOM42_THRESHOLD 56 - -#define MULMOD_BNM1_THRESHOLD 17 -#define SQRMOD_BNM1_THRESHOLD 18 - -#define MUL_FFT_MODF_THRESHOLD 765 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 765, 5}, { 25, 6}, { 13, 5}, { 27, 6}, \ - { 25, 7}, { 13, 6}, { 27, 7}, { 15, 6}, \ - { 31, 7}, { 17, 6}, { 35, 7}, { 19, 6}, \ - { 39, 7}, { 23, 6}, { 47, 7}, { 27, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 41, 8}, \ - { 23, 7}, { 47, 8}, { 27, 9}, { 15, 8}, \ - { 31, 7}, { 63, 8}, { 39, 9}, { 23, 8}, \ - { 51, 9}, { 31, 8}, { 67, 9}, { 39, 8}, \ - { 79, 9}, { 47, 8}, { 95,10}, { 31, 9}, \ - { 63, 8}, { 127, 9}, { 79,10}, { 47, 9}, \ - { 103,11}, { 31,10}, { 63, 9}, { 135,10}, \ - { 79, 9}, { 159,10}, { 95, 9}, { 199,10}, \ - { 111,11}, { 63,10}, { 127, 9}, { 263,10}, \ - { 175,11}, { 95,10}, { 207,12}, { 63,11}, \ - { 127,10}, { 255, 9}, { 543, 8}, { 1087, 9}, \ - { 575,11}, { 159,10}, { 319, 9}, { 671, 8}, \ - { 1343, 9}, { 735,11}, { 191, 9}, { 799, 8}, \ - { 1599,10}, { 415, 9}, { 863,11}, { 223,12}, \ - { 127,11}, { 255,10}, { 543, 9}, { 1087,10}, \ - { 607, 9}, { 1215, 8}, { 2431,11}, { 319,10}, \ - { 671, 9}, { 1343,10}, { 735,12}, { 191,11}, \ - { 383,10}, { 799, 9}, { 1599,11}, { 415,10}, \ - { 863, 9}, { 1727,13}, { 127,12}, { 255,11}, \ - { 543,10}, { 1087,11}, { 607,10}, { 1215, 9}, \ - { 2431,12}, { 319,11}, { 671,10}, { 1343,11}, \ - { 735,10}, { 1471, 9}, { 2943, 8}, { 5887,12}, \ - { 383,11}, { 799,10}, { 1599,11}, { 863,10}, \ - { 1727,12}, { 447,11}, { 959,10}, { 1919,11}, \ - { 991,10}, { 1983,13}, { 255,12}, { 511,11}, \ - { 1087,12}, { 575,11}, { 1215,10}, { 2431,12}, \ - { 639,11}, { 1343,12}, { 703,11}, { 1471,10}, \ - { 2943, 9}, { 5887,13}, { 383,12}, { 767,11}, \ - { 1599,12}, { 831,11}, { 1727,10}, { 3455,12}, \ - { 959,11}, { 1983,14}, { 255,13}, { 511,12}, \ - { 1087,11}, { 2239,12}, { 1215,11}, { 2431,13}, \ - { 639,12}, { 1471,11}, { 2943,10}, { 5887,13}, \ - { 767,12}, { 1727,11}, { 3455,13}, { 895,12}, \ - { 1983,14}, { 511,13}, { 1023,12}, { 2239,13}, \ - { 1151,12}, { 2495,13}, { 1407,12}, { 2943,11}, \ - { 5887,14}, { 767,13}, { 1663,12}, { 3455,13}, \ - { 1919,12}, { 3839,15}, { 511,14}, { 1023,13}, \ - { 2175,12}, { 4351,13}, { 2431,14}, { 1279,13}, \ - { 2943,12}, { 5887,14}, { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 172 -#define MUL_FFT_THRESHOLD 6784 - -#define SQR_FFT_MODF_THRESHOLD 555 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 555, 5}, { 21, 6}, { 11, 5}, { 25, 6}, \ - { 13, 5}, { 27, 6}, { 27, 7}, { 15, 6}, \ - { 32, 7}, { 17, 6}, { 35, 7}, { 19, 6}, \ - { 39, 7}, { 27, 8}, { 15, 7}, { 35, 8}, \ - { 19, 7}, { 39, 8}, { 23, 7}, { 47, 8}, \ - { 27, 9}, { 15, 8}, { 31, 7}, { 63, 8}, \ - { 39, 9}, { 23, 8}, { 51,10}, { 15, 9}, \ - { 31, 8}, { 67, 9}, { 39, 8}, { 79, 9}, \ - { 47,10}, { 31, 9}, { 79,10}, { 47, 9}, \ - { 95,11}, { 31,10}, { 63, 9}, { 127,10}, \ - { 79, 9}, { 167,10}, { 95, 9}, { 191,10}, \ - { 111,11}, { 63,10}, { 143, 9}, { 287, 8}, \ - { 575,10}, { 159,11}, { 95,10}, { 191,12}, \ - { 63,11}, { 127,10}, { 255, 9}, { 543, 8}, \ - { 1087,10}, { 287, 9}, { 607,11}, { 159,10}, \ - { 319, 9}, { 671, 8}, { 1343,10}, { 351, 9}, \ - { 735, 8}, { 1471,11}, { 191,10}, { 383, 9}, \ - { 767,10}, { 399, 9}, { 799, 8}, { 1599,10}, \ - { 415, 9}, { 863,11}, { 223,10}, { 479,12}, \ - { 127,11}, { 255,10}, { 543, 9}, { 1087,11}, \ - { 287,10}, { 607, 9}, { 1215, 8}, { 2431,11}, \ - { 319,10}, { 671, 9}, { 1343,11}, { 351,10}, \ - { 735, 9}, { 1471,12}, { 191,11}, { 383,10}, \ - { 799, 9}, { 1599,11}, { 415,10}, { 863, 9}, \ - { 1727,11}, { 479,13}, { 127,12}, { 255,11}, \ - { 511,10}, { 1023,11}, { 543,10}, { 1087,11}, \ - { 607,10}, { 1215, 9}, { 2431,12}, { 319,11}, \ - { 671,10}, { 1343,11}, { 735,10}, { 1471, 9}, \ - { 2943,12}, { 383,11}, { 799,10}, { 1599,11}, \ - { 863,10}, { 1727,12}, { 447,11}, { 959,10}, \ - { 1919,11}, { 991,10}, { 1983,12}, { 511,11}, \ - { 1087,12}, { 575,11}, { 1215,10}, { 2431,12}, \ - { 639,11}, { 1343,12}, { 703,11}, { 1471,10}, \ - { 2943,13}, { 383,12}, { 767,11}, { 1599,12}, \ - { 831,11}, { 1727,10}, { 3455,12}, { 959,11}, \ - { 1983,13}, { 511,12}, { 1215,11}, { 2431,13}, \ - { 639,12}, { 1471,11}, { 2943,13}, { 767,12}, \ - { 1727,11}, { 3455,13}, { 895,12}, { 1983,14}, \ - { 511,13}, { 1023,12}, { 2111,13}, { 1151,12}, \ - { 2431,13}, { 1407,12}, { 2943,14}, { 767,13}, \ - { 1663,12}, { 3455,13}, { 1919,12}, { 3839,15}, \ - { 511,14}, { 1023,13}, { 2431,14}, { 1279,13}, \ - { 2943,12}, { 5887,14}, { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 172 -#define SQR_FFT_THRESHOLD 5504 - -#define MULLO_BASECASE_THRESHOLD 0 /* always */ -#define MULLO_DC_THRESHOLD 40 -#define MULLO_MUL_N_THRESHOLD 13463 -#define SQRLO_BASECASE_THRESHOLD 7 -#define SQRLO_DC_THRESHOLD 143 -#define SQRLO_SQR_THRESHOLD 11000 - -#define DC_DIV_QR_THRESHOLD 59 -#define DC_DIVAPPR_Q_THRESHOLD 270 -#define DC_BDIV_QR_THRESHOLD 55 -#define DC_BDIV_Q_THRESHOLD 206 - -#define INV_MULMOD_BNM1_THRESHOLD 62 -#define INV_NEWTON_THRESHOLD 254 -#define INV_APPR_THRESHOLD 252 - -#define BINV_NEWTON_THRESHOLD 274 -#define REDC_1_TO_REDC_N_THRESHOLD 74 - -#define MU_DIV_QR_THRESHOLD 1589 -#define MU_DIVAPPR_Q_THRESHOLD 1589 -#define MUPI_DIV_QR_THRESHOLD 106 -#define MU_BDIV_QR_THRESHOLD 1470 -#define MU_BDIV_Q_THRESHOLD 1558 - -#define POWM_SEC_TABLE 1,16,114,428,1240 - -#define MATRIX22_STRASSEN_THRESHOLD 19 -#define HGCD_THRESHOLD 136 -#define HGCD_APPR_THRESHOLD 175 -#define HGCD_REDUCE_THRESHOLD 3389 -#define GCD_DC_THRESHOLD 595 -#define GCDEXT_DC_THRESHOLD 424 -#define JACOBI_BASE_METHOD 4 - -#define GET_STR_DC_THRESHOLD 15 -#define GET_STR_PRECOMPUTE_THRESHOLD 28 -#define SET_STR_DC_THRESHOLD 100 -#define SET_STR_PRECOMPUTE_THRESHOLD 1360 - -#define FAC_DSC_THRESHOLD 224 -#define FAC_ODD_THRESHOLD 29 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/README b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/README deleted file mode 100644 index 1d65af3851fe35a5e801e467c3b2593c8ff88c4e..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/README +++ /dev/null @@ -1,251 +0,0 @@ -Copyright 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - AMD K6 MPN SUBROUTINES - - - -This directory contains code optimized for AMD K6 CPUs, meaning K6, K6-2 and -K6-3. - -The mmx subdirectory has MMX code suiting plain K6, the k62mmx subdirectory -has MMX code suiting K6-2 and K6-3. All chips in the K6 family have MMX, -the separate directories are just so that ./configure can omit them if the -assembler doesn't support MMX. - - - - -STATUS - -Times for the loops, with all code and data in L1 cache, are as follows. - - cycles/limb - - mpn_add_n/sub_n 3.25 normal, 2.75 in-place - - mpn_mul_1 6.25 - mpn_add/submul_1 7.65-8.4 (varying with data values) - - mpn_mul_basecase 9.25 cycles/crossproduct (approx) - mpn_sqr_basecase 4.7 cycles/crossproduct (approx) - or 9.2 cycles/triangleproduct (approx) - - mpn_l/rshift 3.0 - - mpn_divrem_1 20.0 - mpn_mod_1 20.0 - mpn_divexact_by3 11.0 - - mpn_copyi 1.0 - mpn_copyd 1.0 - - -K6-2 and K6-3 have dual-issue MMX and get the following improvements. - - mpn_l/rshift 1.75 - - -Prefetching of sources hasn't yet given any joy. With the 3DNow "prefetch" -instruction, code seems to run slower, and with just "mov" loads it doesn't -seem faster. Results so far are inconsistent. The K6 does a hardware -prefetch of the second cache line in a sector, so the penalty for not -prefetching in software is reduced. - - - - -NOTES - -All K6 family chips have MMX, but only K6-2 and K6-3 have 3DNow. - -Plain K6 executes MMX instructions only in the X pipe, but K6-2 and K6-3 can -execute them in both X and Y (and in both together). - -Branch misprediction penalty is 1 to 4 cycles (Optimization Manual -chapter 6 table 12). - -Write-allocate L1 data cache means prefetching of destinations is unnecessary. -Store queue is 7 entries of 64 bits each. - -Floating point multiplications can be done in parallel with integer -multiplications, but there doesn't seem to be any way to make use of this. - - - -OPTIMIZATIONS - -Unrolled loops are used to reduce looping overhead. The unrolling is -configurable up to 32 limbs/loop for most routines, up to 64 for some. - -Sometimes computed jumps into the unrolling are used to handle sizes not a -multiple of the unrolling. An attractive feature of this is that times -smoothly increase with operand size, but an indirect jump is about 6 cycles -and the setups about another 6, so it depends on how much the unrolled code -is faster than a simple loop as to whether a computed jump ought to be used. - -Position independent code is implemented using a call to get eip for -computed jumps and a ret is always done, rather than an addl $4,%esp or a -popl, so the CPU return address branch prediction stack stays synchronised -with the actual stack in memory. Such a call however still costs 4 to 7 -cycles. - -Branch prediction, in absence of any history, will guess forward jumps are -not taken and backward jumps are taken. Where possible it's arranged that -the less likely or less important case is under a taken forward jump. - - - -MMX - -Putting emms or femms as late as possible in a routine seems to be fastest. -Perhaps an emms or femms stalls until all outstanding MMX instructions have -completed, so putting it later gives them a chance to complete on their own, -in parallel with other operations (like register popping). - -The Optimization Manual chapter 5 recommends using a femms on K6-2 and K6-3 -at the start of a routine, in case it's been preceded by x87 floating point -operations. This isn't done because in gmp programs it's expected that x87 -floating point won't be much used and that chances are an mpn routine won't -have been preceded by any x87 code. - - - -CODING - -Instructions in general code are shown paired if they can decode and execute -together, meaning two short decode instructions with the second not -depending on the first, only the first using the shifter, no more than one -load, and no more than one store. - -K6 does some out of order execution so the pairings aren't essential, they -just show what slots might be available. When decoding is the limiting -factor things can be scheduled that might not execute until later. - - - -NOTES - -Code alignment - -- if an opcode/modrm or 0Fh/opcode/modrm crosses a cache line boundary, - short decode is inhibited. The cross.pl script detects this. - -- loops and branch targets should be aligned to 16 bytes, or ensure at least - 2 instructions before a 32 byte boundary. This makes use of the 16 byte - cache in the BTB. - -Addressing modes - -- (%esi) degrades decoding from short to vector. 0(%esi) doesn't have this - problem, and can be used as an equivalent, or easier is just to use a - different register, like %ebx. - -- K6 and pre-CXT core K6-2 have the following problem. (K6-2 CXT and K6-3 - have it fixed, these being cpuid function 1 signatures 0x588 to 0x58F). - - If more than 3 bytes are needed to determine instruction length then - decoding degrades from direct to long, or from long to vector. This - happens with forms like "0F opcode mod/rm" with mod/rm=00-xxx-100 since - with mod=00 the sib determines whether there's a displacement. - - This affects all MMX and 3DNow instructions, and others with an 0F prefix, - like movzbl. The modes affected are anything with an index and no - displacement, or an index but no base, and this includes (%esp) which is - really (,%esp,1). - - The cross.pl script detects problem cases. The workaround is to always - use a displacement, and to do this with Zdisp if it's zero so the - assembler doesn't discard it. - - See Optimization Manual rev D page 67 and 3DNow Porting Guide rev B pages - 13-14 and 36-37. - -Calls - -- indirect jumps and calls are not branch predicted, they measure about 6 - cycles. - -Various - -- adcl 2 cycles of decode, maybe 2 cycles executing in the X pipe -- bsf 12-27 cycles -- emms 5 cycles -- femms 3 cycles -- jecxz 2 cycles taken, 13 not taken (optimization manual says 7 not taken) -- divl 20 cycles back-to-back -- imull 2 decode, 3 execute -- mull 2 decode, 3 execute (optimization manual decoding sample) -- prefetch 2 cycles -- rcll/rcrl implicit by one bit: 2 cycles - immediate or %cl count: 11 + 2 per bit for dword - 13 + 4 per bit for byte -- setCC 2 cycles -- xchgl %eax,reg 1.5 cycles, back-to-back (strange) - reg,reg 2 cycles, back-to-back - - - - -REFERENCES - -"AMD-K6 Processor Code Optimization Application Note", AMD publication -number 21924, revision D amendment 0, January 2000. This describes K6-2 and -K6-3. Available on-line, - -http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/21924.pdf - -"AMD-K6 MMX Enhanced Processor x86 Code Optimization Application Note", AMD -publication number 21828, revision A amendment 0, August 1997. This is an -older edition of the above document, describing plain K6. Available -on-line, - -http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/21828.pdf - -"3DNow Technology Manual", AMD publication number 21928G/0-March 2000. -This describes the femms and prefetch instructions, but nothing else from -3DNow has been used. Available on-line, - -http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/21928.pdf - -"3DNow Instruction Porting Guide", AMD publication number 22621, revision B, -August 1999. This has some notes on general K6 optimizations as well as -3DNow. Available on-line, - -http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22621.pdf - - - ----------------- -Local variables: -mode: text -fill-column: 76 -End: diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/aors_n.asm deleted file mode 100644 index 168f9b4ae4a80967e5c9e45f9b9f045b3e17effd..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/aors_n.asm +++ /dev/null @@ -1,337 +0,0 @@ -dnl AMD K6 mpn_add/sub_n -- mpn addition or subtraction. - -dnl Copyright 1999-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K6: normal 3.25 cycles/limb, in-place 2.75 cycles/limb. - - -ifdef(`OPERATION_add_n', ` - define(M4_inst, adcl) - define(M4_function_n, mpn_add_n) - define(M4_function_nc, mpn_add_nc) - define(M4_description, add) -',`ifdef(`OPERATION_sub_n', ` - define(M4_inst, sbbl) - define(M4_function_n, mpn_sub_n) - define(M4_function_nc, mpn_sub_nc) - define(M4_description, subtract) -',`m4_error(`Need OPERATION_add_n or OPERATION_sub_n -')')') - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc) - - -C mp_limb_t M4_function_n (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size); -C mp_limb_t M4_function_nc (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size, mp_limb_t carry); -C -C Calculate src1,size M4_description src2,size, and store the result in -C dst,size. The return value is the carry bit from the top of the result -C (1 or 0). -C -C The _nc version accepts 1 or 0 for an initial carry into the low limb of -C the calculation. Note values other than 1 or 0 here will lead to garbage -C results. -C -C Instruction decoding limits a normal dst=src1+src2 operation to 3 c/l, and -C an in-place dst+=src to 2.5 c/l. The unrolled loops have 1 cycle/loop of -C loop control, which with 4 limbs/loop means an extra 0.25 c/l. - -define(PARAM_CARRY, `FRAME+20(%esp)') -define(PARAM_SIZE, `FRAME+16(%esp)') -define(PARAM_SRC2, `FRAME+12(%esp)') -define(PARAM_SRC1, `FRAME+8(%esp)') -define(PARAM_DST, `FRAME+4(%esp)') -deflit(`FRAME',0) - -dnl minimum 5 because the unrolled code can't handle less -deflit(UNROLL_THRESHOLD, 5) - - TEXT - ALIGN(32) - -PROLOGUE(M4_function_nc) - movl PARAM_CARRY, %eax - jmp L(start) -EPILOGUE() - - -PROLOGUE(M4_function_n) - xorl %eax, %eax -L(start): - movl PARAM_SIZE, %ecx - pushl %ebx -FRAME_pushl() - - movl PARAM_SRC1, %ebx - pushl %edi -FRAME_pushl() - - movl PARAM_SRC2, %edx - cmpl $UNROLL_THRESHOLD, %ecx - - movl PARAM_DST, %edi - jae L(unroll) - - - shrl %eax C initial carry flag - - C offset 0x21 here, close enough to aligned -L(simple): - C eax scratch - C ebx src1 - C ecx counter - C edx src2 - C esi - C edi dst - C ebp - C - C The store to (%edi) could be done with a stosl; it'd be smaller - C code, but there's no speed gain and a cld would have to be added - C (per mpn/x86/README). - - movl (%ebx), %eax - leal 4(%ebx), %ebx - - M4_inst (%edx), %eax - - movl %eax, (%edi) - leal 4(%edi), %edi - - leal 4(%edx), %edx - loop L(simple) - - - movl $0, %eax - popl %edi - - setc %al - - popl %ebx - ret - - -C ----------------------------------------------------------------------------- -L(unroll): - C eax carry - C ebx src1 - C ecx counter - C edx src2 - C esi - C edi dst - C ebp - - cmpl %edi, %ebx - pushl %esi - - je L(inplace) - -ifdef(`OPERATION_add_n',` - cmpl %edi, %edx - - je L(inplace_reverse) -') - - movl %ecx, %esi - - andl $-4, %ecx - andl $3, %esi - - leal (%ebx,%ecx,4), %ebx - leal (%edx,%ecx,4), %edx - leal (%edi,%ecx,4), %edi - - negl %ecx - shrl %eax - - ALIGN(32) -L(normal_top): - C eax counter, qwords, negative - C ebx src1 - C ecx scratch - C edx src2 - C esi - C edi dst - C ebp - - movl (%ebx,%ecx,4), %eax - leal 5(%ecx), %ecx - M4_inst -20(%edx,%ecx,4), %eax - movl %eax, -20(%edi,%ecx,4) - - movl 4-20(%ebx,%ecx,4), %eax - M4_inst 4-20(%edx,%ecx,4), %eax - movl %eax, 4-20(%edi,%ecx,4) - - movl 8-20(%ebx,%ecx,4), %eax - M4_inst 8-20(%edx,%ecx,4), %eax - movl %eax, 8-20(%edi,%ecx,4) - - movl 12-20(%ebx,%ecx,4), %eax - M4_inst 12-20(%edx,%ecx,4), %eax - movl %eax, 12-20(%edi,%ecx,4) - - loop L(normal_top) - - - decl %esi - jz L(normal_finish_one) - js L(normal_done) - - C two or three more limbs - - movl (%ebx), %eax - M4_inst (%edx), %eax - movl %eax, (%edi) - - movl 4(%ebx), %eax - M4_inst 4(%edx), %eax - decl %esi - movl %eax, 4(%edi) - - jz L(normal_done) - movl $2, %ecx - -L(normal_finish_one): - movl (%ebx,%ecx,4), %eax - M4_inst (%edx,%ecx,4), %eax - movl %eax, (%edi,%ecx,4) - -L(normal_done): - popl %esi - popl %edi - - movl $0, %eax - popl %ebx - - setc %al - - ret - - -C ----------------------------------------------------------------------------- - -ifdef(`OPERATION_add_n',` -L(inplace_reverse): - C dst==src2 - - movl %ebx, %edx -') - -L(inplace): - C eax initial carry - C ebx - C ecx size - C edx src - C esi - C edi dst - C ebp - - leal -1(%ecx), %esi - decl %ecx - - andl $-4, %ecx - andl $3, %esi - - movl (%edx), %ebx C src low limb - leal (%edx,%ecx,4), %edx - - leal (%edi,%ecx,4), %edi - negl %ecx - - shrl %eax - - - ALIGN(32) -L(inplace_top): - C eax - C ebx next src limb - C ecx size - C edx src - C esi - C edi dst - C ebp - - M4_inst %ebx, (%edi,%ecx,4) - - movl 4(%edx,%ecx,4), %eax - leal 5(%ecx), %ecx - - M4_inst %eax, 4-20(%edi,%ecx,4) - - movl 8-20(%edx,%ecx,4), %eax - movl 12-20(%edx,%ecx,4), %ebx - - M4_inst %eax, 8-20(%edi,%ecx,4) - M4_inst %ebx, 12-20(%edi,%ecx,4) - - movl 16-20(%edx,%ecx,4), %ebx - loop L(inplace_top) - - - C now %esi is 0 to 3 representing respectively 1 to 4 limbs more - - M4_inst %ebx, (%edi) - - decl %esi - jz L(inplace_finish_one) - js L(inplace_done) - - C two or three more limbs - - movl 4(%edx), %eax - movl 8(%edx), %ebx - M4_inst %eax, 4(%edi) - M4_inst %ebx, 8(%edi) - - decl %esi - movl $2, %ecx - - jz L(normal_done) - -L(inplace_finish_one): - movl 4(%edx,%ecx,4), %eax - M4_inst %eax, 4(%edi,%ecx,4) - -L(inplace_done): - popl %esi - popl %edi - - movl $0, %eax - popl %ebx - - setc %al - - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/aorsmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/aorsmul_1.asm deleted file mode 100644 index eaa92ebb24b69dae457b6d27a545c9726651c48b..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/aorsmul_1.asm +++ /dev/null @@ -1,391 +0,0 @@ -dnl AMD K6 mpn_addmul_1/mpn_submul_1 -- add or subtract mpn multiple. - -dnl Copyright 1999-2003, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C P5 -C P6 model 0-8,10-12 5.94 -C P6 model 9 (Banias) 5.51 -C P6 model 13 (Dothan) 5.57 -C P4 model 0 (Willamette) -C P4 model 1 (?) -C P4 model 2 (Northwood) -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C AMD K6 7.65-8.5 (data dependent) -C AMD K7 -C AMD K8 - - -dnl K6: large multipliers small multipliers -dnl UNROLL_COUNT cycles/limb cycles/limb -dnl 4 9.5 7.78 -dnl 8 9.0 7.78 -dnl 16 8.4 7.65 -dnl 32 8.4 8.2 -dnl -dnl Maximum possible unrolling with the current code is 32. -dnl -dnl Unrolling to 16 limbs/loop makes the unrolled loop fit exactly in a 256 -dnl byte block, which might explain the good speed at that unrolling. - -deflit(UNROLL_COUNT, 16) - - -ifdef(`OPERATION_addmul_1', ` - define(M4_inst, addl) - define(M4_function_1, mpn_addmul_1) - define(M4_function_1c, mpn_addmul_1c) -',`ifdef(`OPERATION_submul_1', ` - define(M4_inst, subl) - define(M4_function_1, mpn_submul_1) - define(M4_function_1c, mpn_submul_1c) -',`m4_error(`Need OPERATION_addmul_1 or OPERATION_submul_1 -')')') - -MULFUNC_PROLOGUE(mpn_addmul_1 mpn_addmul_1c mpn_submul_1 mpn_submul_1c) - - -C mp_limb_t mpn_addmul_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t mult); -C mp_limb_t mpn_addmul_1c (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t mult, mp_limb_t carry); -C mp_limb_t mpn_submul_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t mult); -C mp_limb_t mpn_submul_1c (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t mult, mp_limb_t carry); -C -C The jadcl0()s in the unrolled loop makes the speed data dependent. Small -C multipliers (most significant few bits clear) result in few carry bits and -C speeds up to 7.65 cycles/limb are attained. Large multipliers (most -C significant few bits set) make the carry bits 50/50 and lead to something -C more like 8.4 c/l. With adcl's both of these would be 9.3 c/l. -C -C It's important that the gains for jadcl0 on small multipliers don't come -C at the cost of slowing down other data. Tests on uniformly distributed -C random data, designed to confound branch prediction, show about a 7% -C speed-up using jadcl0 over adcl (8.93 versus 9.57 cycles/limb, with all -C overheads included). -C -C In the simple loop, jadcl0() measures slower than adcl (11.9-14.7 versus -C 11.0 cycles/limb), and hence isn't used. -C -C In the simple loop, note that running ecx from negative to zero and using -C it as an index in the two movs wouldn't help. It would save one -C instruction (2*addl+loop becoming incl+jnz), but there's nothing unpaired -C that would be collapsed by this. -C -C Attempts at a simpler main loop, with less unrolling, haven't yielded much -C success, generally running over 9 c/l. -C -C -C jadcl0 -C ------ -C -C jadcl0() being faster than adcl $0 seems to be an artifact of two things, -C firstly the instruction decoding and secondly the fact that there's a -C carry bit for the jadcl0 only on average about 1/4 of the time. -C -C The code in the unrolled loop decodes something like the following. -C -C decode cycles -C mull %ebp 2 -C M4_inst %esi, disp(%edi) 1 -C adcl %eax, %ecx 2 -C movl %edx, %esi \ 1 -C jnc 1f / -C incl %esi \ 1 -C 1: movl disp(%ebx), %eax / -C --- -C 7 -C -C In a back-to-back style test this measures 7 with the jnc not taken, or 8 -C with it taken (both when correctly predicted). This is opposite to the -C measurements showing small multipliers running faster than large ones. -C Don't really know why. -C -C It's not clear how much branch misprediction might be costing. The K6 -C doco says it will be 1 to 4 cycles, but presumably it's near the low end -C of that range to get the measured results. -C -C -C In the code the two carries are more or less the preceding mul product and -C the calculation is roughly -C -C x*y + u*b+v -C -C where b=2^32 is the size of a limb, x*y is the two carry limbs, and u and -C v are the two limbs it's added to (being the low of the next mul, and a -C limb from the destination). -C -C To get a carry requires x*y+u*b+v >= b^2, which is u*b+v >= b^2-x*y, and -C there are b^2-(b^2-x*y) = x*y many such values, giving a probability of -C x*y/b^2. If x, y, u and v are random and uniformly distributed between 0 -C and b-1, then the total probability can be summed over x and y, -C -C 1 b-1 b-1 x*y 1 b*(b-1) b*(b-1) -C --- * sum sum --- = --- * ------- * ------- = 1/4 -C b^2 x=0 y=1 b^2 b^4 2 2 -C -C Actually it's a very tiny bit less than 1/4 of course. If y is fixed, -C then the probability is 1/2*y/b thus varying linearly between 0 and 1/2. - - -ifdef(`PIC',` -deflit(UNROLL_THRESHOLD, 9) -',` -deflit(UNROLL_THRESHOLD, 6) -') - -defframe(PARAM_CARRY, 20) -defframe(PARAM_MULTIPLIER,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - - TEXT - ALIGN(32) - -PROLOGUE(M4_function_1c) - pushl %esi -deflit(`FRAME',4) - movl PARAM_CARRY, %esi - jmp L(start_nc) -EPILOGUE() - -PROLOGUE(M4_function_1) - push %esi -deflit(`FRAME',4) - xorl %esi, %esi C initial carry - -L(start_nc): - movl PARAM_SIZE, %ecx - pushl %ebx -deflit(`FRAME',8) - - movl PARAM_SRC, %ebx - pushl %edi -deflit(`FRAME',12) - - cmpl $UNROLL_THRESHOLD, %ecx - movl PARAM_DST, %edi - - pushl %ebp -deflit(`FRAME',16) - jae L(unroll) - - - C simple loop - - movl PARAM_MULTIPLIER, %ebp - -L(simple): - C eax scratch - C ebx src - C ecx counter - C edx scratch - C esi carry - C edi dst - C ebp multiplier - - movl (%ebx), %eax - addl $4, %ebx - - mull %ebp - - addl $4, %edi - addl %esi, %eax - - adcl $0, %edx - - M4_inst %eax, -4(%edi) - - adcl $0, %edx - - movl %edx, %esi - loop L(simple) - - - popl %ebp - popl %edi - - popl %ebx - movl %esi, %eax - - popl %esi - ret - - - -C ----------------------------------------------------------------------------- -C The unrolled loop uses a "two carry limbs" scheme. At the top of the loop -C the carries are ecx=lo, esi=hi, then they swap for each limb processed. -C For the computed jump an odd size means they start one way around, an even -C size the other. -C -C VAR_JUMP holds the computed jump temporarily because there's not enough -C registers at the point of doing the mul for the initial two carry limbs. -C -C The add/adc for the initial carry in %esi is necessary only for the -C mpn_addmul/submul_1c entry points. Duplicating the startup code to -C eliminate this for the plain mpn_add/submul_1 doesn't seem like a good -C idea. - -dnl overlapping with parameters already fetched -define(VAR_COUNTER, `PARAM_SIZE') -define(VAR_JUMP, `PARAM_DST') - -L(unroll): - C eax - C ebx src - C ecx size - C edx - C esi initial carry - C edi dst - C ebp - - movl %ecx, %edx - decl %ecx - - subl $2, %edx - negl %ecx - - shrl $UNROLL_LOG2, %edx - andl $UNROLL_MASK, %ecx - - movl %edx, VAR_COUNTER - movl %ecx, %edx - - shll $4, %edx - negl %ecx - - C 15 code bytes per limb -ifdef(`PIC',` - call L(pic_calc) -L(here): -',` - leal L(entry) (%edx,%ecx,1), %edx -') - movl (%ebx), %eax C src low limb - - movl PARAM_MULTIPLIER, %ebp - movl %edx, VAR_JUMP - - mull %ebp - - addl %esi, %eax C initial carry (from _1c) - jadcl0( %edx) - - - leal 4(%ebx,%ecx,4), %ebx - movl %edx, %esi C high carry - - movl VAR_JUMP, %edx - leal (%edi,%ecx,4), %edi - - testl $1, %ecx - movl %eax, %ecx C low carry - - jz L(noswap) - movl %esi, %ecx C high,low carry other way around - - movl %eax, %esi -L(noswap): - - jmp *%edx - - -ifdef(`PIC',` -L(pic_calc): - C See mpn/x86/README about old gas bugs - leal (%edx,%ecx,1), %edx - addl $L(entry)-L(here), %edx - addl (%esp), %edx - ret_internal -') - - -C ----------------------------------------------------------- - ALIGN(32) -L(top): -deflit(`FRAME',16) - C eax scratch - C ebx src - C ecx carry lo - C edx scratch - C esi carry hi - C edi dst - C ebp multiplier - C - C 15 code bytes per limb - - leal UNROLL_BYTES(%edi), %edi - -L(entry): -forloop(`i', 0, UNROLL_COUNT/2-1, ` - deflit(`disp0', eval(2*i*4)) - deflit(`disp1', eval(disp0 + 4)) - -Zdisp( movl, disp0,(%ebx), %eax) - mull %ebp -Zdisp( M4_inst,%ecx, disp0,(%edi)) - adcl %eax, %esi - movl %edx, %ecx - jadcl0( %ecx) - - movl disp1(%ebx), %eax - mull %ebp - M4_inst %esi, disp1(%edi) - adcl %eax, %ecx - movl %edx, %esi - jadcl0( %esi) -') - - decl VAR_COUNTER - - leal UNROLL_BYTES(%ebx), %ebx - jns L(top) - - - popl %ebp - M4_inst %ecx, UNROLL_BYTES(%edi) - - popl %edi - movl %esi, %eax - - popl %ebx - jadcl0( %eax) - - popl %esi - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/cross.pl b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/cross.pl deleted file mode 100755 index fc921a56b711d01b9927f877290d6dc7b7c63933..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/cross.pl +++ /dev/null @@ -1,182 +0,0 @@ -#! /usr/bin/perl - -# Copyright 2000, 2001 Free Software Foundation, Inc. -# -# This file is part of the GNU MP Library. -# -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# * the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 3 of the License, or (at your -# option) any later version. -# -# or -# -# * the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. -# -# or both in parallel, as here. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received copies of the GNU General Public License and the -# GNU Lesser General Public License along with the GNU MP Library. If not, -# see https://www.gnu.org/licenses/. - - -# Usage: cross.pl [filename.o]... -# -# Produce an annotated disassembly of the given object files, indicating -# certain code alignment and addressing mode problems afflicting K6 chips. -# "ZZ" is used on all annotations, so this can be searched for. -# -# With no arguments, all .o files corresponding to .asm files are processed. -# This is good in the mpn object directory of a k6*-*-* build. -# -# Code alignments of 8 bytes or more are handled. When 32 is used, cache -# line boundaries will fall in at offsets 0x20,0x40,etc and problems are -# flagged at those locations. When 16 is used, the line boundaries can also -# fall at offsets 0x10,0x30,0x50,etc, depending where the file is loaded, so -# problems are identified there too. Likewise when 8 byte alignment is used -# problems are flagged additionally at 0x08,0x18,0x28,etc. -# -# Usually 32 byte alignment is used for k6 routines, but less is certainly -# possible if through good luck, or a little tweaking, cache line crossing -# problems can be avoided at the extra locations. -# -# Bugs: -# -# Instructions without mod/rm bytes or which are already vector decoded are -# unaffected by cache line boundary crossing, but not all of these have yet -# been put in as exceptions. All that occur in practice in GMP are present -# though. -# -# There's no messages for using the vector decoded addressing mode (%esi), -# but that's easy to avoid when coding. -# -# Future: -# -# Warn about jump targets that are poorly aligned (less than 2 instructions -# before a cache line boundary). - -use strict; - -sub disassemble { - my ($file) = @_; - my ($addr,$b1,$b2,$b3, $prefix,$opcode,$modrm); - my $align; - - open (IN, "objdump -Srfh $file |") - || die "Cannot open pipe from objdump\n"; - while (<IN>) { - print; - - if (/^[ \t]*[0-9]+[ \t]+\.text[ \t]/ && /2\*\*([0-9]+)$/) { - $align = 1 << $1; - if ($align < 8) { - print "ZZ cross.pl cannot handle alignment < 2**3\n"; - $align = 8 - } - } - - if (/^[ \t]*([0-9a-f]*):[ \t]*([0-9a-f]+)[ \t]+([0-9a-f]+)[ \t]+([0-9a-f]+)/) { - ($addr,$b1,$b2,$b3) = ($1,$2,$3,$4); - - } elsif (/^[ \t]*([0-9a-f]*):[ \t]*([0-9a-f]+)[ \t]+([0-9a-f]+)/) { - ($addr,$b1,$b2,$b3) = ($1,$2,$3,''); - - } elsif (/^[ \t]*([0-9a-f]*):[ \t]*([0-9a-f]+)/) { - ($addr,$b1,$b2,$b3) = ($1,$2,'',''); - - } else { - next; - } - - if ($b1 =~ /0f/) { - $prefix = $b1; - $opcode = $b2; - $modrm = $b3; - } else { - $prefix = ''; - $opcode = $b1; - $modrm = $b2; - } - - # modrm of the form 00-xxx-100 with an 0F prefix is the problem case - # for K6 and pre-CXT K6-2 - if ($prefix =~ /0f/ - && $opcode !~ /^8/ # jcond disp32 - && $modrm =~ /^[0-3][4c]/) { - print "ZZ ($file) >3 bytes to determine instruction length [K6]\n"; - } - - # with just an opcode, starting 1f mod 20h - if (($align==32 && $addr =~ /[13579bdf]f$/ - || $align==16 && $addr =~ /f$/ - || $align==8 && $addr =~ /[7f]$/) - && $prefix !~ /0f/ - && $opcode !~ /1[012345]/ # adc - && $opcode !~ /1[89abcd]/ # sbb - && $opcode !~ /^4/ # inc/dec reg - && $opcode !~ /^5/ # push/pop reg - && $opcode !~ /68/ # push $imm32 - && $opcode !~ /^7/ # jcond disp8 - && $opcode !~ /a[89]/ # test+imm - && $opcode !~ /a[a-f]/ # stos/lods/scas - && $opcode !~ /b8/ # movl $imm32,%eax - && $opcode !~ /d[0123]/ # rcl - && $opcode !~ /e[0123]/ # loop/loopz/loopnz/jcxz - && $opcode !~ /e8/ # call disp32 - && $opcode !~ /e[9b]/ # jmp disp32/disp8 - && $opcode !~ /f[89abcd]/ # clc,stc,cli,sti,cld,std - && !($opcode =~ /f[67]/ # grp 1 - && $modrm =~ /^[2367abef]/) # mul, imul, div, idiv - && $modrm !~ /^$/) { - print "ZZ ($file) opcode/modrm cross 32-byte boundary\n"; - } - - # with an 0F prefix, anything starting at 1f mod 20h - if (($align==32 && $addr =~ /[13579bdf][f]$/ - || $align==16 && $addr =~ /f$/ - || $align==8 && $addr =~ /[7f]$/) - && $prefix =~ /0f/ - && $opcode !~ /af/ # imul - && $opcode !~ /a[45]/ # shldl - && $opcode !~ /a[cd]/ # shrdl - ) { - print "ZZ ($file) prefix/opcode cross 32-byte boundary\n"; - } - - # with an 0F prefix, anything with mod/rm starting at 1e mod 20h - if (($align==32 && $addr =~ /[13579bdf][e]$/ - || $align==16 && $addr =~ /[e]$/ - || $align==8 && $addr =~ /[6e]$/) - && $prefix =~ /0f/ - && $opcode !~ /^8/ # jcond disp32 - && $opcode !~ /af/ # imull reg,reg - && $opcode !~ /a[45]/ # shldl - && $opcode !~ /a[cd]/ # shrdl - && $modrm !~ /^$/) { - print "ZZ ($file) prefix/opcode/modrm cross 32-byte boundary\n"; - } - } - close IN || die "Error from objdump (or objdump not available)\n"; -} - - -my @files; -if ($#ARGV >= 0) { - @files = @ARGV; -} else { - @files = glob "*.asm"; - map {s/.asm/.o/} @files; -} - -foreach (@files) { - disassemble($_); -} diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/divrem_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/divrem_1.asm deleted file mode 100644 index b4cea4fa2a74053f95589f4a28821903075370e8..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/divrem_1.asm +++ /dev/null @@ -1,203 +0,0 @@ -dnl AMD K6 mpn_divrem_1 -- mpn by limb division. - -dnl Copyright 1999-2003, 2007 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K6: 20 cycles/limb - - -C mp_limb_t mpn_divrem_1 (mp_ptr dst, mp_size_t xsize, -C mp_srcptr src, mp_size_t size, mp_limb_t divisor); -C mp_limb_t mpn_divrem_1c (mp_ptr dst, mp_size_t xsize, -C mp_srcptr src, mp_size_t size, mp_limb_t divisor, -C mp_limb_t carry); -C -C The code here is basically the same as mpn/x86/divrem_1.asm, but uses loop -C instead of decl+jnz, since it comes out 2 cycles/limb faster. -C -C A test is done to see if the high limb is less than the divisor, and if so -C one less div is done. A div is 20 cycles, so assuming high<divisor about -C half the time, then this test saves half that amount. The branch -C misprediction penalty is less than that. -C -C Back-to-back div instructions run at 20 cycles, the same as the loop here, -C so it seems there's nothing to gain by rearranging the loop. Pairing the -C mov and loop instructions was found to gain nothing. -C -C Enhancements: -C -C The low-latency K6 multiply might be thought to suit a mul-by-inverse, but -C that algorithm has been found to suffer from the relatively poor carry -C handling on K6 and too many auxiliary instructions. The fractional part -C however could be done at about 13 c/l, if it mattered enough. - -defframe(PARAM_CARRY, 24) -defframe(PARAM_DIVISOR,20) -defframe(PARAM_SIZE, 16) -defframe(PARAM_SRC, 12) -defframe(PARAM_XSIZE, 8) -defframe(PARAM_DST, 4) - - TEXT - - ALIGN(32) -PROLOGUE(mpn_divrem_1c) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - pushl %edi FRAME_pushl() - - movl PARAM_SRC, %edi - pushl %esi FRAME_pushl() - - movl PARAM_DIVISOR, %esi - pushl %ebx FRAME_pushl() - - movl PARAM_DST, %ebx - pushl %ebp FRAME_pushl() - - movl PARAM_XSIZE, %ebp - orl %ecx, %ecx C size - - movl PARAM_CARRY, %edx - jz L(fraction) C if size==0 - - leal -4(%ebx,%ebp,4), %ebx C dst one limb below integer part - jmp L(integer_top) - -EPILOGUE() - - - ALIGN(16) -PROLOGUE(mpn_divrem_1) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - pushl %edi FRAME_pushl() - - movl PARAM_SRC, %edi - pushl %esi FRAME_pushl() - - movl PARAM_DIVISOR, %esi - orl %ecx,%ecx C size - - jz L(size_zero) - pushl %ebx FRAME_pushl() - - movl -4(%edi,%ecx,4), %eax C src high limb - xorl %edx, %edx - - movl PARAM_DST, %ebx - pushl %ebp FRAME_pushl() - - movl PARAM_XSIZE, %ebp - cmpl %esi, %eax - - leal -4(%ebx,%ebp,4), %ebx C dst one limb below integer part - jae L(integer_entry) - - - C high<divisor, so high of dst is zero, and avoid one div - - movl %edx, (%ebx,%ecx,4) - decl %ecx - - movl %eax, %edx - jz L(fraction) - - -L(integer_top): - C eax scratch (quotient) - C ebx dst+4*xsize-4 - C ecx counter - C edx scratch (remainder) - C esi divisor - C edi src - C ebp xsize - - movl -4(%edi,%ecx,4), %eax -L(integer_entry): - - divl %esi - - movl %eax, (%ebx,%ecx,4) - loop L(integer_top) - - -L(fraction): - orl %ebp, %ecx - jz L(done) - - movl PARAM_DST, %ebx - - -L(fraction_top): - C eax scratch (quotient) - C ebx dst - C ecx counter - C edx scratch (remainder) - C esi divisor - C edi - C ebp - - xorl %eax, %eax - - divl %esi - - movl %eax, -4(%ebx,%ecx,4) - loop L(fraction_top) - - -L(done): - popl %ebp - movl %edx, %eax - popl %ebx - popl %esi - popl %edi - ret - - -L(size_zero): -deflit(`FRAME',8) - movl PARAM_XSIZE, %ecx - xorl %eax, %eax - - movl PARAM_DST, %edi - - cld C better safe than sorry, see mpn/x86/README - - rep - stosl - - popl %esi - popl %edi - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/gcd_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/gcd_1.asm deleted file mode 100644 index a45774d37219c8db6cc3d207bc096236f4f99a46..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/gcd_1.asm +++ /dev/null @@ -1,359 +0,0 @@ -dnl AMD K6 mpn_gcd_1 -- mpn by 1 gcd. - -dnl Copyright 2000-2002, 2004, 2014 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K6: 9.5 cycles/bit (approx) 1x1 gcd -C 11.0 cycles/limb Nx1 reduction (modexact_1_odd) - - -C mp_limb_t mpn_gcd_1 (mp_srcptr src, mp_size_t size, mp_limb_t y); -C -C This code is nothing very special, but offers a speedup over what gcc 2.95 -C can do with mpn/generic/gcd_1.c. -C -C Future: -C -C Using a lookup table to count trailing zeros seems a touch quicker, but -C after a slightly longer startup. Might be worthwhile if an mpn_gcd_2 used -C it too. - - -dnl If size==1 and x (the larger operand) is more than DIV_THRESHOLD bits -dnl bigger than y, then a division x%y is done to reduce it. -dnl -dnl A divl is 20 cycles and the loop runs at about 9.5 cycles/bitpair so -dnl there should be an advantage in the divl at about 4 or 5 bits, which is -dnl what's found. - -deflit(DIV_THRESHOLD, 5) - - -defframe(PARAM_LIMB, 12) -defframe(PARAM_SIZE, 8) -defframe(PARAM_SRC, 4) - - TEXT - ALIGN(16) - -PROLOGUE(mpn_gcd_1) -deflit(`FRAME',0) - - ASSERT(ne, `cmpl $0, PARAM_LIMB') - ASSERT(ae, `cmpl $1, PARAM_SIZE') - - - movl PARAM_SRC, %eax - pushl %ebx FRAME_pushl() - - movl PARAM_LIMB, %edx - movl $-1, %ecx - - movl (%eax), %ebx C src low limb - - movl %ebx, %eax C src low limb - orl %edx, %ebx - -L(common_twos): - shrl %ebx - incl %ecx - - jnc L(common_twos) C 1/4 chance on random data - shrl %cl, %edx C y - - cmpl $1, PARAM_SIZE - ja L(size_two_or_more) - - - ASSERT(nz, `orl %eax, %eax') C should have src limb != 0 - - shrl %cl, %eax C x - - - C Swap if necessary to make x>=y. Measures a touch quicker as a - C jump than a branch free calculation. - C - C eax x - C ebx - C ecx common twos - C edx y - - movl %eax, %ebx - cmpl %eax, %edx - - jb L(noswap) - movl %edx, %eax - - movl %ebx, %edx - movl %eax, %ebx -L(noswap): - - - C See if it's worth reducing x with a divl. - C - C eax x - C ebx x - C ecx common twos - C edx y - - shrl $DIV_THRESHOLD, %ebx - - cmpl %ebx, %edx - ja L(nodiv) - - - C Reduce x to x%y. - C - C eax x - C ebx - C ecx common twos - C edx y - - movl %edx, %ebx - xorl %edx, %edx - - divl %ebx - - orl %edx, %edx C y - nop C code alignment - - movl %ebx, %eax C x - jz L(done_shll) -L(nodiv): - - - C eax x - C ebx - C ecx common twos - C edx y - C esi - C edi - C ebp - -L(strip_y): - shrl %edx - jnc L(strip_y) - - leal 1(%edx,%edx), %edx - movl %ecx, %ebx C common twos - - leal 1(%eax), %ecx - jmp L(strip_x_and) - - -C Calculating a %cl shift based on the low bit 0 or 1 avoids doing a branch -C on a 50/50 chance of 0 or 1. The chance of the next bit also being 0 is -C only 1/4. -C -C A second computed %cl shift was tried, but that measured a touch slower -C than branching back. -C -C A branch-free abs(x-y) and min(x,y) calculation was tried, but that -C measured about 1 cycle/bit slower. - - C eax x - C ebx common twos - C ecx scratch - C edx y - - ALIGN(4) -L(swap): - addl %eax, %edx C x-y+y = x - negl %eax C -(x-y) = y-x - -L(strip_x): - shrl %eax C odd-odd = even, so always one to strip - ASSERT(nz) - -L(strip_x_leal): - leal 1(%eax), %ecx - -L(strip_x_and): - andl $1, %ecx C (x^1)&1 - - shrl %cl, %eax C shift if x even - - testb $1, %al - jz L(strip_x) - - ASSERT(nz,`testl $1, %eax') C x, y odd - ASSERT(nz,`testl $1, %edx') - - subl %edx, %eax - jb L(swap) - ja L(strip_x) - - - movl %edx, %eax - movl %ebx, %ecx - -L(done_shll): - shll %cl, %eax - popl %ebx - - ret - - -C ----------------------------------------------------------------------------- -C Two or more limbs. -C -C x={src,size} is reduced modulo y using either a plain mod_1 style -C remainder, or a modexact_1 style exact division. - -deflit(MODEXACT_THRESHOLD, ifdef(`PIC', 4, 4)) - - ALIGN(8) -L(size_two_or_more): - C eax - C ebx - C ecx common twos - C edx y, without common twos - C esi - C edi - C ebp - -deflit(FRAME_TWO_OR_MORE, FRAME) - - pushl %edi defframe_pushl(SAVE_EDI) - movl PARAM_SRC, %ebx - -L(y_twos): - shrl %edx - jnc L(y_twos) - - movl %ecx, %edi C common twos - movl PARAM_SIZE, %ecx - - pushl %esi defframe_pushl(SAVE_ESI) - leal 1(%edx,%edx), %esi C y (odd) - - movl -4(%ebx,%ecx,4), %eax C src high limb - - cmpl %edx, %eax C carry if high<divisor - - sbbl %edx, %edx C -1 if high<divisor - - addl %edx, %ecx C skip one limb if high<divisor - andl %eax, %edx - - cmpl $MODEXACT_THRESHOLD, %ecx - jae L(modexact) - - -L(divide_top): - C eax scratch (quotient) - C ebx src - C ecx counter, size-1 to 1 - C edx carry (remainder) - C esi divisor (odd) - C edi - C ebp - - movl -4(%ebx,%ecx,4), %eax - divl %esi - loop L(divide_top) - - - movl %edx, %eax C x - movl %esi, %edx C y (odd) - - movl %edi, %ebx C common twos - popl %esi - - popl %edi - leal 1(%eax), %ecx - - orl %eax, %eax - jnz L(strip_x_and) - - - movl %ebx, %ecx - movl %edx, %eax - - shll %cl, %eax - popl %ebx - - ret - - - ALIGN(8) -L(modexact): - C eax - C ebx src ptr - C ecx size or size-1 - C edx - C esi y odd - C edi common twos - C ebp - - movl PARAM_SIZE, %eax - pushl %esi FRAME_pushl() - - pushl %eax FRAME_pushl() - - pushl %ebx FRAME_pushl() - -ifdef(`PIC_WITH_EBX',` - nop C code alignment - call L(movl_eip_ebx) - add $_GLOBAL_OFFSET_TABLE_, %ebx -') - CALL( mpn_modexact_1_odd) - - movl %esi, %edx C y odd - movl SAVE_ESI, %esi - - movl %edi, %ebx C common twos - movl SAVE_EDI, %edi - - addl $eval(FRAME - FRAME_TWO_OR_MORE), %esp - orl %eax, %eax - - leal 1(%eax), %ecx - jnz L(strip_x_and) - - - movl %ebx, %ecx - movl %edx, %eax - - shll %cl, %eax - popl %ebx - - ret - - -ifdef(`PIC_WITH_EBX',` -L(movl_eip_ebx): - movl (%esp), %ebx - ret_internal -') - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/gmp-mparam.h deleted file mode 100644 index f03f1b2d9188d12a738d1704e25ee695831f3711..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/gmp-mparam.h +++ /dev/null @@ -1,166 +0,0 @@ -/* AMD K6 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2004, 2009, 2010 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - - -/* 450MHz K6-2 */ - -#define MOD_1_NORM_THRESHOLD 12 -#define MOD_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define MOD_1N_TO_MOD_1_1_THRESHOLD 41 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 32 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 3 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 128 -#define USE_PREINV_DIVREM_1 0 -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */ - -#define MUL_TOOM22_THRESHOLD 20 -#define MUL_TOOM33_THRESHOLD 69 -#define MUL_TOOM44_THRESHOLD 106 -#define MUL_TOOM6H_THRESHOLD 157 -#define MUL_TOOM8H_THRESHOLD 199 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 73 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 69 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 65 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 64 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 32 -#define SQR_TOOM3_THRESHOLD 97 -#define SQR_TOOM4_THRESHOLD 143 -#define SQR_TOOM6_THRESHOLD 222 -#define SQR_TOOM8_THRESHOLD 272 - -#define MULMOD_BNM1_THRESHOLD 13 -#define SQRMOD_BNM1_THRESHOLD 17 - -#define MUL_FFT_MODF_THRESHOLD 476 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 476, 5}, { 17, 6}, { 9, 5}, { 19, 6}, \ - { 11, 5}, { 23, 6}, { 17, 7}, { 9, 6}, \ - { 19, 7}, { 11, 6}, { 23, 7}, { 13, 6}, \ - { 27, 7}, { 15, 6}, { 31, 7}, { 17, 6}, \ - { 35, 7}, { 21, 8}, { 11, 7}, { 27, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 39, 8}, \ - { 23, 7}, { 47, 8}, { 27, 9}, { 15, 8}, \ - { 31, 7}, { 63, 8}, { 39, 9}, { 23, 8}, \ - { 51,10}, { 15, 9}, { 31, 8}, { 67, 9}, \ - { 47,10}, { 31, 9}, { 79,10}, { 47, 9}, \ - { 95,11}, { 31,10}, { 63, 9}, { 135,10}, \ - { 79, 9}, { 167,10}, { 95, 9}, { 191,10}, \ - { 111,11}, { 63,10}, { 127, 9}, { 255,10}, \ - { 143, 9}, { 287,10}, { 159,11}, { 95,10}, \ - { 191, 9}, { 383,12}, { 63,11}, { 127,10}, \ - { 255, 9}, { 511,10}, { 271, 9}, { 543,10}, \ - { 287,11}, { 159,10}, { 351,11}, { 191,10}, \ - { 415, 9}, { 831,11}, { 223,12}, { 127,11}, \ - { 255,10}, { 543,11}, { 287,10}, { 575,11}, \ - { 351,10}, { 703,12}, { 191,11}, { 415,10}, \ - { 831,13}, { 127,12}, { 255,11}, { 543,10}, \ - { 1087,11}, { 575,12}, { 319,11}, { 703,12}, \ - { 383,11}, { 831,12}, { 447,11}, { 895,13}, \ - { 255,12}, { 511,11}, { 1087,12}, { 575,11}, \ - { 1151,12}, { 703,13}, { 383,12}, { 959,14}, \ - { 255,13}, { 511,12}, { 1215,13}, { 8192,14}, \ - { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 106 -#define MUL_FFT_THRESHOLD 7424 - -#define SQR_FFT_MODF_THRESHOLD 432 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 432, 5}, { 17, 6}, { 9, 5}, { 19, 6}, \ - { 11, 5}, { 23, 6}, { 21, 7}, { 11, 6}, \ - { 24, 7}, { 13, 6}, { 27, 7}, { 15, 6}, \ - { 31, 7}, { 21, 8}, { 11, 7}, { 29, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 39, 8}, \ - { 23, 7}, { 49, 8}, { 27, 9}, { 15, 8}, \ - { 39, 9}, { 23, 7}, { 93, 8}, { 47, 7}, \ - { 95, 8}, { 51,10}, { 15, 9}, { 31, 8}, \ - { 67, 9}, { 39, 8}, { 79, 9}, { 47, 8}, \ - { 95, 9}, { 55,10}, { 31, 9}, { 71, 8}, \ - { 143, 9}, { 79,10}, { 47, 9}, { 95,11}, \ - { 31,10}, { 63, 9}, { 135,10}, { 79, 9}, \ - { 167,10}, { 95, 9}, { 191,11}, { 63,10}, \ - { 127, 9}, { 255,10}, { 143, 9}, { 287, 8}, \ - { 575,10}, { 159, 9}, { 319,11}, { 95,10}, \ - { 191,12}, { 63,11}, { 127,10}, { 255, 9}, \ - { 511,10}, { 271, 9}, { 543,10}, { 287,11}, \ - { 159,10}, { 319, 9}, { 639,10}, { 351, 9}, \ - { 703,11}, { 191,10}, { 415,11}, { 223,12}, \ - { 127,11}, { 255,10}, { 543,11}, { 287,10}, \ - { 607,11}, { 319,10}, { 639,11}, { 351,10}, \ - { 703,12}, { 191,11}, { 415,10}, { 831,13}, \ - { 127,12}, { 255,11}, { 543,10}, { 1087,11}, \ - { 607,12}, { 319,11}, { 703,12}, { 383,11}, \ - { 831,12}, { 447,13}, { 255,12}, { 511,11}, \ - { 1087,12}, { 575,11}, { 1215,12}, { 703,13}, \ - { 383,12}, { 895,14}, { 255,13}, { 511,12}, \ - { 1215,13}, { 8192,14}, { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 112 -#define SQR_FFT_THRESHOLD 7040 - -#define MULLO_BASECASE_THRESHOLD 3 -#define MULLO_DC_THRESHOLD 60 -#define MULLO_MUL_N_THRESHOLD 13463 - -#define DC_DIV_QR_THRESHOLD 78 -#define DC_DIVAPPR_Q_THRESHOLD 252 -#define DC_BDIV_QR_THRESHOLD 84 -#define DC_BDIV_Q_THRESHOLD 171 - -#define INV_MULMOD_BNM1_THRESHOLD 55 -#define INV_NEWTON_THRESHOLD 234 -#define INV_APPR_THRESHOLD 236 - -#define BINV_NEWTON_THRESHOLD 268 -#define REDC_1_TO_REDC_N_THRESHOLD 67 - -#define MU_DIV_QR_THRESHOLD 1308 -#define MU_DIVAPPR_Q_THRESHOLD 1142 -#define MUPI_DIV_QR_THRESHOLD 134 -#define MU_BDIV_QR_THRESHOLD 1164 -#define MU_BDIV_Q_THRESHOLD 1164 - -#define MATRIX22_STRASSEN_THRESHOLD 15 -#define HGCD_THRESHOLD 182 -#define GCD_DC_THRESHOLD 591 -#define GCDEXT_DC_THRESHOLD 472 -#define JACOBI_BASE_METHOD 2 - -#define GET_STR_DC_THRESHOLD 24 -#define GET_STR_PRECOMPUTE_THRESHOLD 40 -#define SET_STR_DC_THRESHOLD 834 -#define SET_STR_PRECOMPUTE_THRESHOLD 2042 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/k62mmx/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/k62mmx/copyd.asm deleted file mode 100644 index f80a5a1cdb57e602e0074df8adef08d3d4c50bad..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/k62mmx/copyd.asm +++ /dev/null @@ -1,118 +0,0 @@ -dnl AMD K6-2 mpn_copyd -- copy limb vector, decrementing. - -dnl Copyright 2001, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K6-2: 1.0 cycles/limb - - -C void mpn_copyd (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C The loop here is no faster than a rep movsl at 1.0 c/l, but it avoids a 30 -C cycle startup time, which amounts for instance to a 2x speedup at 15 -C limbs. -C -C If dst is 4mod8 the loop would be 1.17 c/l, but that's avoided by -C processing one limb separately to make it aligned. This and a final odd -C limb are handled in a branch-free fashion, ending up re-copying if the -C special case isn't needed. -C -C Alternatives: -C -C There used to be a big unrolled version of this, running at 0.56 c/l if -C the destination was aligned, but that seemed rather excessive for the -C relative importance of copyd. -C -C If the destination alignment is ignored and just left to run at 1.17 c/l -C some code size and a fixed few cycles can be saved. Considering how few -C uses copyd finds perhaps that should be favoured. The current code has -C the attraction of being no slower than a basic rep movsl though. - -defframe(PARAM_SIZE,12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl re-using parameter space -define(SAVE_EBX,`PARAM_SIZE') - - TEXT - ALIGN(16) - -PROLOGUE(mpn_copyd) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - movl %ebx, SAVE_EBX - - movl PARAM_SRC, %eax - movl PARAM_DST, %edx - - subl $1, %ecx C better code alignment than decl - jb L(zero) - - jz L(one_more) - leal 4(%edx,%ecx,4), %ebx - -Zdisp( movd, 0,(%eax,%ecx,4), %mm0) C high limb -Zdisp( movd, %mm0, 0,(%edx,%ecx,4)) C Zdisp for good code alignment - - cmpl $1, %ecx - je L(one_more) - - shrl $2, %ebx - andl $1, %ebx C 1 if dst[size-2] unaligned - - subl %ebx, %ecx - nop C code alignment - -L(top): - C eax src - C ebx - C ecx counter - C edx dst - - movq -4(%eax,%ecx,4), %mm0 - subl $2, %ecx - - movq %mm0, 4(%edx,%ecx,4) - ja L(top) - - -L(one_more): - movd (%eax), %mm0 - movd %mm0, (%edx) - - movl SAVE_EBX, %ebx - emms_or_femms -L(zero): - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/k62mmx/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/k62mmx/lshift.asm deleted file mode 100644 index c86575feed9b7117fd170ae3550d58e1770c6353..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/k62mmx/lshift.asm +++ /dev/null @@ -1,294 +0,0 @@ -dnl AMD K6-2 mpn_lshift -- mpn left shift. - -dnl Copyright 1999, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K6-2: 1.75 cycles/limb - - -C mp_limb_t mpn_lshift (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned shift); -C - -defframe(PARAM_SHIFT,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) -deflit(`FRAME',0) - -dnl used after src has been fetched -define(VAR_RETVAL,`PARAM_SRC') - -dnl minimum 9, because unrolled loop can't handle less -deflit(UNROLL_THRESHOLD, 9) - - TEXT - ALIGN(32) - -PROLOGUE(mpn_lshift) -deflit(`FRAME',0) - - C The 1 limb case can be done without the push %ebx, but it's then - C still the same speed. The push is left as a free helping hand for - C the two_or_more code. - - movl PARAM_SIZE, %eax - pushl %ebx FRAME_pushl() - - movl PARAM_SRC, %ebx - decl %eax - - movl PARAM_SHIFT, %ecx - jnz L(two_or_more) - - movl (%ebx), %edx C src limb - movl PARAM_DST, %ebx - - shldl( %cl, %edx, %eax) C return value - - shll %cl, %edx - - movl %edx, (%ebx) C dst limb - popl %ebx - - ret - - -C ----------------------------------------------------------------------------- - ALIGN(16) C avoid offset 0x1f -L(two_or_more): - C eax size-1 - C ebx src - C ecx shift - C edx - - movl (%ebx,%eax,4), %edx C src high limb - negl %ecx - - movd PARAM_SHIFT, %mm6 - addl $32, %ecx C 32-shift - - shrl %cl, %edx - cmpl $UNROLL_THRESHOLD-1, %eax - - movl %edx, VAR_RETVAL - jae L(unroll) - - - movd %ecx, %mm7 - movl %eax, %ecx - - movl PARAM_DST, %eax - -L(simple): - C eax dst - C ebx src - C ecx counter, size-1 to 1 - C edx retval - C - C mm0 scratch - C mm6 shift - C mm7 32-shift - - movq -4(%ebx,%ecx,4), %mm0 - - psrlq %mm7, %mm0 - -Zdisp( movd, %mm0, 0,(%eax,%ecx,4)) - loop L(simple) - - - movd (%ebx), %mm0 - popl %ebx - - psllq %mm6, %mm0 - - movd %mm0, (%eax) - movl %edx, %eax - - femms - ret - - -C ----------------------------------------------------------------------------- - ALIGN(16) -L(unroll): - C eax size-1 - C ebx src - C ecx 32-shift - C edx retval (but instead VAR_RETVAL is used) - C - C mm6 shift - - addl $32, %ecx - movl PARAM_DST, %edx - - movd %ecx, %mm7 - subl $7, %eax C size-8 - - leal (%edx,%eax,4), %ecx C alignment of dst - - movq 32-8(%ebx,%eax,4), %mm2 C src high qword - testb $4, %cl - - jz L(dst_aligned) - psllq %mm6, %mm2 - - psrlq $32, %mm2 - decl %eax - - movd %mm2, 32(%edx,%eax,4) C dst high limb - movq 32-8(%ebx,%eax,4), %mm2 C new src high qword -L(dst_aligned): - - movq 32-16(%ebx,%eax,4), %mm0 C src second highest qword - - - C This loop is the important bit, the rest is just support for it. - C Four src limbs are held at the start, and four more will be read. - C Four dst limbs will be written. This schedule seems necessary for - C full speed. - C - C The use of size-8 lets the loop stop when %eax goes negative and - C leaves -4 to -1 which can be tested with test $1 and $2. - -L(top): - C eax counter, size-8 step by -4 until <0 - C ebx src - C ecx - C edx dst - C - C mm0 src next qword - C mm1 scratch - C mm2 src prev qword - C mm6 shift - C mm7 64-shift - - psllq %mm6, %mm2 - subl $4, %eax - - movq %mm0, %mm1 - psrlq %mm7, %mm0 - - por %mm0, %mm2 - movq 24(%ebx,%eax,4), %mm0 - - psllq %mm6, %mm1 - movq %mm2, 40(%edx,%eax,4) - - movq %mm0, %mm2 - psrlq %mm7, %mm0 - - por %mm0, %mm1 - movq 16(%ebx,%eax,4), %mm0 - - movq %mm1, 32(%edx,%eax,4) - jnc L(top) - - - C Now have four limbs in mm2 (prev) and mm0 (next), plus eax mod 4. - C - C 8(%ebx) is the next source, and 24(%edx) is the next destination. - C %eax is between -4 and -1, representing respectively 0 to 3 extra - C limbs that must be read. - - - testl $2, %eax C testl to avoid bad cache line crossing - jz L(finish_nottwo) - - C Two more limbs: lshift mm2, OR it with rshifted mm0, mm0 becomes - C new mm2 and a new mm0 is loaded. - - psllq %mm6, %mm2 - movq %mm0, %mm1 - - psrlq %mm7, %mm0 - subl $2, %eax - - por %mm0, %mm2 - movq 16(%ebx,%eax,4), %mm0 - - movq %mm2, 32(%edx,%eax,4) - movq %mm1, %mm2 -L(finish_nottwo): - - - C lshift mm2, OR with rshifted mm0, mm1 becomes lshifted mm0 - - testb $1, %al - psllq %mm6, %mm2 - - movq %mm0, %mm1 - psrlq %mm7, %mm0 - - por %mm0, %mm2 - psllq %mm6, %mm1 - - movq %mm2, 24(%edx,%eax,4) - jz L(finish_even) - - - C Size is odd, so mm1 and one extra limb to process. - - movd (%ebx), %mm0 C src[0] - popl %ebx -deflit(`FRAME',0) - - movq %mm0, %mm2 - psllq $32, %mm0 - - psrlq %mm7, %mm0 - - psllq %mm6, %mm2 - por %mm0, %mm1 - - movq %mm1, 4(%edx) C dst[1,2] - movd %mm2, (%edx) C dst[0] - - movl VAR_RETVAL, %eax - - femms - ret - - - nop C avoid bad cache line crossing -L(finish_even): -deflit(`FRAME',4) - C Size is even, so only mm1 left to process. - - movq %mm1, (%edx) C dst[0,1] - movl VAR_RETVAL, %eax - - popl %ebx - femms - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/k62mmx/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/k62mmx/rshift.asm deleted file mode 100644 index f604a7bd52910cc16c495fa1c2fbb7bc6ac21ffc..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/k62mmx/rshift.asm +++ /dev/null @@ -1,293 +0,0 @@ -dnl AMD K6-2 mpn_rshift -- mpn right shift. - -dnl Copyright 1999, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K6-2: 1.75 cycles/limb - - -C mp_limb_t mpn_rshift (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned shift); -C - -defframe(PARAM_SHIFT,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) -deflit(`FRAME',0) - -dnl Minimum 9, because the unrolled loop can't handle less. -dnl -deflit(UNROLL_THRESHOLD, 9) - - TEXT - ALIGN(32) - -PROLOGUE(mpn_rshift) -deflit(`FRAME',0) - - C The 1 limb case can be done without the push %ebx, but it's then - C still the same speed. The push is left as a free helping hand for - C the two_or_more code. - - movl PARAM_SIZE, %eax - pushl %ebx FRAME_pushl() - - movl PARAM_SRC, %ebx - decl %eax - - movl PARAM_SHIFT, %ecx - jnz L(two_or_more) - - movl (%ebx), %edx C src limb - movl PARAM_DST, %ebx - - shrdl( %cl, %edx, %eax) C return value - - shrl %cl, %edx - - movl %edx, (%ebx) C dst limb - popl %ebx - - ret - - -C ----------------------------------------------------------------------------- - ALIGN(16) C avoid offset 0x1f -L(two_or_more): - C eax size-1 - C ebx src - C ecx shift - C edx - - movl (%ebx), %edx C src low limb - negl %ecx - - addl $32, %ecx - movd PARAM_SHIFT, %mm6 - - shll %cl, %edx - cmpl $UNROLL_THRESHOLD-1, %eax - - jae L(unroll) - - - C eax size-1 - C ebx src - C ecx 32-shift - C edx retval - C - C mm6 shift - - movl PARAM_DST, %ecx - leal (%ebx,%eax,4), %ebx - - leal -4(%ecx,%eax,4), %ecx - negl %eax - - C This loop runs at about 3 cycles/limb, which is the amount of - C decoding, and this is despite every second access being unaligned. - -L(simple): - C eax counter, -(size-1) to -1 - C ebx &src[size-1] - C ecx &dst[size-1] - C edx retval - C - C mm0 scratch - C mm6 shift - -Zdisp( movq, 0,(%ebx,%eax,4), %mm0) - incl %eax - - psrlq %mm6, %mm0 - -Zdisp( movd, %mm0, 0,(%ecx,%eax,4)) - jnz L(simple) - - - movq %mm0, (%ecx) - movl %edx, %eax - - popl %ebx - - femms - ret - - -C ----------------------------------------------------------------------------- - ALIGN(16) -L(unroll): - C eax size-1 - C ebx src - C ecx 32-shift - C edx retval - C - C mm6 shift - - addl $32, %ecx - subl $7, %eax C size-8 - - movd %ecx, %mm7 - movl PARAM_DST, %ecx - - movq (%ebx), %mm2 C src low qword - leal (%ebx,%eax,4), %ebx C src end - 32 - - testb $4, %cl - leal (%ecx,%eax,4), %ecx C dst end - 32 - - notl %eax C -(size-7) - jz L(dst_aligned) - - psrlq %mm6, %mm2 - incl %eax - -Zdisp( movd, %mm2, 0,(%ecx,%eax,4)) C dst low limb - movq 4(%ebx,%eax,4), %mm2 C new src low qword -L(dst_aligned): - - movq 12(%ebx,%eax,4), %mm0 C src second lowest qword - nop C avoid bad cache line crossing - - - C This loop is the important bit, the rest is just support for it. - C Four src limbs are held at the start, and four more will be read. - C Four dst limbs will be written. This schedule seems necessary for - C full speed. - C - C The use of -(size-7) lets the loop stop when %eax becomes >= 0 and - C and leaves 0 to 3 which can be tested with test $1 and $2. - -L(top): - C eax counter, -(size-7) step by +4 until >=0 - C ebx src end - 32 - C ecx dst end - 32 - C edx retval - C - C mm0 src next qword - C mm1 scratch - C mm2 src prev qword - C mm6 shift - C mm7 64-shift - - psrlq %mm6, %mm2 - addl $4, %eax - - movq %mm0, %mm1 - psllq %mm7, %mm0 - - por %mm0, %mm2 - movq 4(%ebx,%eax,4), %mm0 - - psrlq %mm6, %mm1 - movq %mm2, -12(%ecx,%eax,4) - - movq %mm0, %mm2 - psllq %mm7, %mm0 - - por %mm0, %mm1 - movq 12(%ebx,%eax,4), %mm0 - - movq %mm1, -4(%ecx,%eax,4) - ja L(top) C jump if no carry and not zero - - - - C Now have the four limbs in mm2 (low) and mm0 (high), and %eax is 0 - C to 3 representing respectively 3 to 0 further limbs. - - testl $2, %eax C testl to avoid bad cache line crossings - jnz L(finish_nottwo) - - C Two or three extra limbs: rshift mm2, OR it with lshifted mm0, mm0 - C becomes new mm2 and a new mm0 is loaded. - - psrlq %mm6, %mm2 - movq %mm0, %mm1 - - psllq %mm7, %mm0 - addl $2, %eax - - por %mm0, %mm2 - movq 12(%ebx,%eax,4), %mm0 - - movq %mm2, -4(%ecx,%eax,4) - movq %mm1, %mm2 -L(finish_nottwo): - - - testb $1, %al - psrlq %mm6, %mm2 - - movq %mm0, %mm1 - psllq %mm7, %mm0 - - por %mm0, %mm2 - psrlq %mm6, %mm1 - - movq %mm2, 4(%ecx,%eax,4) - jnz L(finish_even) - - - C one further extra limb to process - - movd 32-4(%ebx), %mm0 C src[size-1], most significant limb - popl %ebx - - movq %mm0, %mm2 - psllq %mm7, %mm0 - - por %mm0, %mm1 - psrlq %mm6, %mm2 - - movq %mm1, 32-12(%ecx) C dst[size-3,size-2] - movd %mm2, 32-4(%ecx) C dst[size-1] - - movl %edx, %eax C retval - - femms - ret - - - nop C avoid bad cache line crossing -L(finish_even): - C no further extra limbs - - movq %mm1, 32-8(%ecx) C dst[size-2,size-1] - movl %edx, %eax C retval - - popl %ebx - - femms - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/com.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/com.asm deleted file mode 100644 index b747454627b9c6a1fc9472a152e76990ca96d307..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/com.asm +++ /dev/null @@ -1,103 +0,0 @@ -dnl AMD K6-2 mpn_com -- mpn bitwise one's complement. - -dnl Copyright 1999-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -NAILS_SUPPORT(0-31) - - -C alignment dst/src, A=0mod8 N=4mod8 -C A/A A/N N/A N/N -C K6-2 1.0 1.18 1.18 1.18 cycles/limb -C K6 1.5 1.85 1.75 1.85 - - -C void mpn_com (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C Take the bitwise ones-complement of src,size and write it to dst,size. - -defframe(PARAM_SIZE,12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - - TEXT - ALIGN(16) -PROLOGUE(mpn_com) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - movl PARAM_SRC, %eax - movl PARAM_DST, %edx - shrl %ecx - jnz L(two_or_more) - - movl (%eax), %eax - notl_or_xorl_GMP_NUMB_MASK( %eax) - movl %eax, (%edx) - ret - - -L(two_or_more): - pushl %ebx FRAME_pushl() - pcmpeqd %mm7, %mm7 C all ones - - movl %ecx, %ebx -ifelse(GMP_NAIL_BITS,0,, -` psrld $GMP_NAIL_BITS, %mm7') C clear nails - - - - ALIGN(8) -L(top): - C eax src - C ebx floor(size/2) - C ecx counter - C edx dst - C - C mm0 scratch - C mm7 mask - - movq -8(%eax,%ecx,8), %mm0 - pxor %mm7, %mm0 - movq %mm0, -8(%edx,%ecx,8) - loop L(top) - - - jnc L(no_extra) - movl (%eax,%ebx,8), %eax - notl_or_xorl_GMP_NUMB_MASK( %eax) - movl %eax, (%edx,%ebx,8) -L(no_extra): - - popl %ebx - emms_or_femms - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/dive_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/dive_1.asm deleted file mode 100644 index 1bbad3a3185ab8294f823fe4ca1f2d1289e955d3..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/dive_1.asm +++ /dev/null @@ -1,282 +0,0 @@ -dnl AMD K6 mpn_divexact_1 -- mpn by limb exact division. - -dnl Copyright 2000-2002, 2007 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C divisor -C odd even -C K6: 10.0 12.0 cycles/limb -C K6-2: 10.0 11.5 - - -C void mpn_divexact_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t divisor); -C -C A simple divl is used for size==1. This is about 10 cycles faster for an -C odd divisor or 20 cycles for an even divisor. -C -C The loops are quite sensitive to code alignment, speeds should be -C rechecked (odd and even divisor, pic and non-pic) if contemplating -C changing anything. - -defframe(PARAM_DIVISOR,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl re-use parameter space -define(VAR_INVERSE,`PARAM_DST') - - TEXT - - ALIGN(32) -PROLOGUE(mpn_divexact_1) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - - movl PARAM_SRC, %eax - xorl %edx, %edx - - cmpl $1, %ecx - jnz L(two_or_more) - - movl (%eax), %eax - - divl PARAM_DIVISOR - - movl PARAM_DST, %ecx - movl %eax, (%ecx) - - ret - - -L(two_or_more): - movl PARAM_DIVISOR, %eax - pushl %ebx FRAME_pushl() - - movl PARAM_SRC, %ebx - pushl %ebp FRAME_pushl() - -L(strip_twos): - shrl %eax - incl %edx C will get shift+1 - - jnc L(strip_twos) - pushl %esi FRAME_pushl() - - leal 1(%eax,%eax), %esi C d without twos - andl $127, %eax C d/2, 7 bits - -ifdef(`PIC',` - LEA( binvert_limb_table, %ebp) -Zdisp( movzbl, 0,(%eax,%ebp), %eax) -',` - movzbl binvert_limb_table(%eax), %eax C inv 8 bits -') - pushl %edi FRAME_pushl() - - leal (%eax,%eax), %ebp C 2*inv - - imull %eax, %eax C inv*inv - - movl PARAM_DST, %edi - - imull %esi, %eax C inv*inv*d - - subl %eax, %ebp C inv = 2*inv - inv*inv*d - leal (%ebp,%ebp), %eax C 2*inv - - imull %ebp, %ebp C inv*inv - - movl %esi, PARAM_DIVISOR C d without twos - leal (%ebx,%ecx,4), %ebx C src end - - imull %esi, %ebp C inv*inv*d - - leal (%edi,%ecx,4), %edi C dst end - negl %ecx C -size - - subl %ebp, %eax C inv = 2*inv - inv*inv*d - subl $1, %edx C shift amount, and clear carry - - ASSERT(e,` C expect d*inv == 1 mod 2^GMP_LIMB_BITS - pushl %eax FRAME_pushl() - imull PARAM_DIVISOR, %eax - cmpl $1, %eax - popl %eax FRAME_popl()') - - movl %eax, VAR_INVERSE - jnz L(even) - - movl (%ebx,%ecx,4), %esi C src low limb - jmp L(odd_entry) - - - ALIGN(16) - nop C code alignment -L(odd_top): - C eax scratch - C ebx src end - C ecx counter, limbs, negative - C edx inverse - C esi next limb, adjusted for carry - C edi dst end - C ebp carry bit, 0 or -1 - - imull %edx, %esi - - movl PARAM_DIVISOR, %eax - movl %esi, -4(%edi,%ecx,4) - - mull %esi C carry limb in edx - - subl %ebp, %edx C apply carry bit - movl (%ebx,%ecx,4), %esi - -L(odd_entry): - subl %edx, %esi C apply carry limb - movl VAR_INVERSE, %edx - - sbbl %ebp, %ebp C 0 or -1 - - incl %ecx - jnz L(odd_top) - - - imull %edx, %esi - - movl %esi, -4(%edi,%ecx,4) - - popl %edi - popl %esi - - popl %ebp - popl %ebx - - ret - - -L(even): - C eax - C ebx src end - C ecx -size - C edx twos - C esi - C edi dst end - C ebp - - xorl %ebp, %ebp -Zdisp( movq, 0,(%ebx,%ecx,4), %mm0) C src[0,1] - - movd %edx, %mm7 - movl VAR_INVERSE, %edx - - addl $2, %ecx - psrlq %mm7, %mm0 - - movd %mm0, %esi - jz L(even_two) C if only two limbs - - -C Out-of-order execution is good enough to hide the load/rshift/movd -C latency. Having imul at the top of the loop gives 11.5 c/l instead of 12, -C on K6-2. In fact there's only 11 of decode, but nothing running at 11 has -C been found. Maybe the fact every second movq is unaligned costs the extra -C 0.5. - -L(even_top): - C eax scratch - C ebx src end - C ecx counter, limbs, negative - C edx inverse - C esi next limb, adjusted for carry - C edi dst end - C ebp carry bit, 0 or -1 - C - C mm0 scratch, source limbs - C mm7 twos - - imull %edx, %esi - - movl %esi, -8(%edi,%ecx,4) - movl PARAM_DIVISOR, %eax - - mull %esi C carry limb in edx - - movq -4(%ebx,%ecx,4), %mm0 - psrlq %mm7, %mm0 - - movd %mm0, %esi - subl %ebp, %edx C apply carry bit - - subl %edx, %esi C apply carry limb - movl VAR_INVERSE, %edx - - sbbl %ebp, %ebp C 0 or -1 - - incl %ecx - jnz L(even_top) - - -L(even_two): - movd -4(%ebx), %mm0 C src high limb - psrlq %mm7, %mm0 - - imull %edx, %esi - - movl %esi, -8(%edi) - movl PARAM_DIVISOR, %eax - - mull %esi C carry limb in edx - - movd %mm0, %esi - subl %ebp, %edx C apply carry bit - - movl VAR_INVERSE, %eax - subl %edx, %esi C apply carry limb - - imull %eax, %esi - - movl %esi, -4(%edi) - - popl %edi - popl %esi - - popl %ebp - popl %ebx - - emms_or_femms - - ret - -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/logops_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/logops_n.asm deleted file mode 100644 index e17930bb2db4e1a01c58e4da8fb584285f442587..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/logops_n.asm +++ /dev/null @@ -1,226 +0,0 @@ -dnl AMD K6-2 mpn_and_n, mpn_andn_n, mpn_nand_n, mpn_ior_n, mpn_iorn_n, -dnl mpn_nior_n, mpn_xor_n, mpn_xnor_n -- mpn bitwise logical operations. - -dnl Copyright 1999-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -NAILS_SUPPORT(0-31) - - -C alignment dst/src1/src2, A=0mod8, N=4mod8 -C A/A/A A/A/N A/N/A A/N/N N/A/A N/A/N N/N/A N/N/N -C -C K6-2 1.2 1.5 1.5 1.2 1.2 1.5 1.5 1.2 and,andn,ior,xor -C K6-2 1.5 1.75 2.0 1.75 1.75 2.0 1.75 1.5 iorn,xnor -C K6-2 1.75 2.0 2.0 2.0 2.0 2.0 2.0 1.75 nand,nior -C -C K6 1.5 1.68 1.75 1.2 1.75 1.75 1.68 1.5 and,andn,ior,xor -C K6 2.0 2.0 2.25 2.25 2.25 2.25 2.0 2.0 iorn,xnor -C K6 2.0 2.25 2.25 2.25 2.25 2.25 2.25 2.0 nand,nior - - -dnl M4_p and M4_i are the MMX and integer instructions -dnl M4_*_neg_dst means whether to negate the final result before writing -dnl M4_*_neg_src2 means whether to negate the src2 values before using them - -define(M4_choose_op, -m4_assert_numargs(7) -`ifdef(`OPERATION_$1',` -define(`M4_function', `mpn_$1') -define(`M4_operation', `$1') -define(`M4_p', `$2') -define(`M4_p_neg_dst', `$3') -define(`M4_p_neg_src2',`$4') -define(`M4_i', `$5') -define(`M4_i_neg_dst', `$6') -define(`M4_i_neg_src2',`$7') -')') - -dnl xnor is done in "iorn" style because it's a touch faster than "nior" -dnl style (the two are equivalent for xor). -dnl -dnl pandn can't be used with nails. - -M4_choose_op( and_n, pand,0,0, andl,0,0) -ifelse(GMP_NAIL_BITS,0, -`M4_choose_op(andn_n, pandn,0,0, andl,0,1)', -`M4_choose_op(andn_n, pand,0,1, andl,0,1)') -M4_choose_op( nand_n, pand,1,0, andl,1,0) -M4_choose_op( ior_n, por,0,0, orl,0,0) -M4_choose_op( iorn_n, por,0,1, orl,0,1) -M4_choose_op( nior_n, por,1,0, orl,1,0) -M4_choose_op( xor_n, pxor,0,0, xorl,0,0) -M4_choose_op( xnor_n, pxor,0,1, xorl,0,1) - -ifdef(`M4_function',, -`m4_error(`Unrecognised or undefined OPERATION symbol -')') - -MULFUNC_PROLOGUE(mpn_and_n mpn_andn_n mpn_nand_n mpn_ior_n mpn_iorn_n mpn_nior_n mpn_xor_n mpn_xnor_n) - - -C void M4_function (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size); -C -C Do src1,size M4_operation src2,size, storing the result in dst,size. -C -C Unaligned movq loads and stores are a bit slower than aligned ones. The -C test at the start of the routine checks the alignment of src1 and if -C necessary processes one limb separately at the low end to make it aligned. -C -C The raw speeds without this alignment switch are as follows. -C -C alignment dst/src1/src2, A=0mod8, N=4mod8 -C A/A/A A/A/N A/N/A A/N/N N/A/A N/A/N N/N/A N/N/N -C -C K6 1.5 2.0 1.5 2.0 and,andn,ior,xor -C K6 1.75 2.2 2.0 2.28 iorn,xnor -C K6 2.0 2.25 2.35 2.28 nand,nior -C -C -C Future: -C -C K6 can do one 64-bit load per cycle so each of these routines should be -C able to approach 1.0 c/l, if aligned. The basic and/andn/ior/xor might be -C able to get 1.0 with just a 4 limb loop, being 3 instructions per 2 limbs. -C The others are 4 instructions per 2 limbs, and so can only approach 1.0 -C because there's nowhere to hide some loop control. - -defframe(PARAM_SIZE,16) -defframe(PARAM_SRC2,12) -defframe(PARAM_SRC1,8) -defframe(PARAM_DST, 4) -deflit(`FRAME',0) - - TEXT - ALIGN(32) -PROLOGUE(M4_function) - movl PARAM_SIZE, %ecx - pushl %ebx FRAME_pushl() - - movl PARAM_SRC1, %eax - - movl PARAM_SRC2, %ebx - cmpl $1, %ecx - - movl PARAM_DST, %edx - ja L(two_or_more) - - - movl (%ebx), %ecx - popl %ebx -ifelse(M4_i_neg_src2,1,`notl_or_xorl_GMP_NUMB_MASK( %ecx)') - M4_i (%eax), %ecx -ifelse(M4_i_neg_dst,1,` notl_or_xorl_GMP_NUMB_MASK( %ecx)') - movl %ecx, (%edx) - - ret - - -L(two_or_more): - C eax src1 - C ebx src2 - C ecx size - C edx dst - C esi - C edi - C ebp - - pushl %esi FRAME_pushl() - testl $4, %eax - jz L(alignment_ok) - - movl (%ebx), %esi - addl $4, %ebx -ifelse(M4_i_neg_src2,1,`notl_or_xorl_GMP_NUMB_MASK( %esi)') - M4_i (%eax), %esi - addl $4, %eax -ifelse(M4_i_neg_dst,1,` notl_or_xorl_GMP_NUMB_MASK( %esi)') - movl %esi, (%edx) - addl $4, %edx - decl %ecx - -L(alignment_ok): - movl %ecx, %esi - shrl %ecx - jnz L(still_two_or_more) - - movl (%ebx), %ecx - popl %esi -ifelse(M4_i_neg_src2,1,`notl_or_xorl_GMP_NUMB_MASK( %ecx)') - M4_i (%eax), %ecx -ifelse(M4_i_neg_dst,1,` notl_or_xorl_GMP_NUMB_MASK( %ecx)') - popl %ebx - movl %ecx, (%edx) - ret - - -L(still_two_or_more): -ifelse(eval(M4_p_neg_src2 || M4_p_neg_dst),1,` - pcmpeqd %mm7, %mm7 C all ones -ifelse(GMP_NAIL_BITS,0,,`psrld $GMP_NAIL_BITS, %mm7') C clear nails -') - - ALIGN(16) -L(top): - C eax src1 - C ebx src2 - C ecx counter - C edx dst - C esi - C edi - C ebp - C - C carry bit is low of size - - movq -8(%ebx,%ecx,8), %mm0 -ifelse(M4_p_neg_src2,1,`pxor %mm7, %mm0') - M4_p -8(%eax,%ecx,8), %mm0 -ifelse(M4_p_neg_dst,1,` pxor %mm7, %mm0') - movq %mm0, -8(%edx,%ecx,8) - - loop L(top) - - - jnc L(no_extra) - - movl -4(%ebx,%esi,4), %ebx -ifelse(M4_i_neg_src2,1,`notl_or_xorl_GMP_NUMB_MASK( %ebx)') - M4_i -4(%eax,%esi,4), %ebx -ifelse(M4_i_neg_dst,1,` notl_or_xorl_GMP_NUMB_MASK( %ebx)') - movl %ebx, -4(%edx,%esi,4) -L(no_extra): - - popl %esi - popl %ebx - emms_or_femms - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/lshift.asm deleted file mode 100644 index 45be58263378ab71a0e9e499f3428adc18b1cd30..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/lshift.asm +++ /dev/null @@ -1,130 +0,0 @@ -dnl AMD K6 mpn_lshift -- mpn left shift. - -dnl Copyright 1999, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K6: 3.0 cycles/limb - - -C mp_limb_t mpn_lshift (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned shift); -C -C The loop runs at 3 cycles/limb, limited by decoding and by having 3 mmx -C instructions. This is despite every second fetch being unaligned. - - -defframe(PARAM_SHIFT,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - - TEXT - ALIGN(32) - -PROLOGUE(mpn_lshift) -deflit(`FRAME',0) - - C The 1 limb case can be done without the push %ebx, but it's then - C still the same speed. The push is left as a free helping hand for - C the two_or_more code. - - movl PARAM_SIZE, %eax - pushl %ebx FRAME_pushl() - - movl PARAM_SRC, %ebx - decl %eax - - movl PARAM_SHIFT, %ecx - jnz L(two_or_more) - - movl (%ebx), %edx C src limb - movl PARAM_DST, %ebx - - shldl( %cl, %edx, %eax) C return value - - shll %cl, %edx - - movl %edx, (%ebx) C dst limb - popl %ebx - - ret - - - ALIGN(16) C avoid offset 0x1f - nop C avoid bad cache line crossing -L(two_or_more): - C eax size-1 - C ebx src - C ecx shift - C edx - - movl (%ebx,%eax,4), %edx C src high limb - negl %ecx - - movd PARAM_SHIFT, %mm6 - addl $32, %ecx C 32-shift - - shrl %cl, %edx - - movd %ecx, %mm7 - movl PARAM_DST, %ecx - -L(top): - C eax counter, size-1 to 1 - C ebx src - C ecx dst - C edx retval - C - C mm0 scratch - C mm6 shift - C mm7 32-shift - - movq -4(%ebx,%eax,4), %mm0 - decl %eax - - psrlq %mm7, %mm0 - - movd %mm0, 4(%ecx,%eax,4) - jnz L(top) - - - movd (%ebx), %mm0 - popl %ebx - - psllq %mm6, %mm0 - movl %edx, %eax - - movd %mm0, (%ecx) - - emms - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/popham.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/popham.asm deleted file mode 100644 index 2b19d0b5ee0a7796cb03a680158503d5597e0414..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/popham.asm +++ /dev/null @@ -1,236 +0,0 @@ -dnl AMD K6-2 mpn_popcount, mpn_hamdist -- mpn bit population count and -dnl hamming distance. - -dnl Copyright 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C popcount hamdist -C K6-2: 9.0 11.5 cycles/limb -C K6: 12.5 13.0 - - -C unsigned long mpn_popcount (mp_srcptr src, mp_size_t size); -C unsigned long mpn_hamdist (mp_srcptr src, mp_srcptr src2, mp_size_t size); -C -C The code here isn't optimal, but it's already a 2x speedup over the plain -C integer mpn/generic/popcount.c,hamdist.c. - - -ifdef(`OPERATION_popcount',, -`ifdef(`OPERATION_hamdist',, -`m4_error(`Need OPERATION_popcount or OPERATION_hamdist -')m4exit(1)')') - -define(HAM, -m4_assert_numargs(1) -`ifdef(`OPERATION_hamdist',`$1')') - -define(POP, -m4_assert_numargs(1) -`ifdef(`OPERATION_popcount',`$1')') - -HAM(` -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC2, 8) -defframe(PARAM_SRC, 4) -define(M4_function,mpn_hamdist) -') -POP(` -defframe(PARAM_SIZE, 8) -defframe(PARAM_SRC, 4) -define(M4_function,mpn_popcount) -') - -MULFUNC_PROLOGUE(mpn_popcount mpn_hamdist) - - -ifdef(`PIC',,` - dnl non-PIC - - RODATA - ALIGN(8) - -L(rodata_AAAAAAAAAAAAAAAA): - .long 0xAAAAAAAA - .long 0xAAAAAAAA - -L(rodata_3333333333333333): - .long 0x33333333 - .long 0x33333333 - -L(rodata_0F0F0F0F0F0F0F0F): - .long 0x0F0F0F0F - .long 0x0F0F0F0F - -L(rodata_000000FF000000FF): - .long 0x000000FF - .long 0x000000FF -') - - TEXT - ALIGN(32) - -POP(`ifdef(`PIC', ` - C avoid shrl crossing a 32-byte boundary - nop')') - -PROLOGUE(M4_function) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - -ifdef(`PIC',` - movl $0xAAAAAAAA, %eax - movl $0x33333333, %edx - - movd %eax, %mm7 - movd %edx, %mm6 - - movl $0x0F0F0F0F, %eax - movl $0x000000FF, %edx - - punpckldq %mm7, %mm7 - punpckldq %mm6, %mm6 - - movd %eax, %mm5 - movd %edx, %mm4 - - punpckldq %mm5, %mm5 - punpckldq %mm4, %mm4 -',` - - movq L(rodata_AAAAAAAAAAAAAAAA), %mm7 - movq L(rodata_3333333333333333), %mm6 - movq L(rodata_0F0F0F0F0F0F0F0F), %mm5 - movq L(rodata_000000FF000000FF), %mm4 -') - -define(REG_AAAAAAAAAAAAAAAA, %mm7) -define(REG_3333333333333333, %mm6) -define(REG_0F0F0F0F0F0F0F0F, %mm5) -define(REG_000000FF000000FF, %mm4) - - - movl PARAM_SRC, %eax -HAM(` movl PARAM_SRC2, %edx') - - pxor %mm2, %mm2 C total - - shrl %ecx - jnc L(top) - -Zdisp( movd, 0,(%eax,%ecx,8), %mm1) - -HAM(` -Zdisp( movd, 0,(%edx,%ecx,8), %mm0) - pxor %mm0, %mm1 -') - - incl %ecx - jmp L(loaded) - - - ALIGN(16) -POP(` nop C alignment to avoid crossing 32-byte boundaries') - -L(top): - C eax src - C ebx - C ecx counter, qwords, decrementing - C edx [hamdist] src2 - C - C mm0 (scratch) - C mm1 (scratch) - C mm2 total (low dword) - C mm3 - C mm4 \ - C mm5 | special constants - C mm6 | - C mm7 / - - movq -8(%eax,%ecx,8), %mm1 -HAM(` pxor -8(%edx,%ecx,8), %mm1') - -L(loaded): - movq %mm1, %mm0 - pand REG_AAAAAAAAAAAAAAAA, %mm1 - - psrlq $1, %mm1 -HAM(` nop C code alignment') - - psubd %mm1, %mm0 C bit pairs -HAM(` nop C code alignment') - - - movq %mm0, %mm1 - psrlq $2, %mm0 - - pand REG_3333333333333333, %mm0 - pand REG_3333333333333333, %mm1 - - paddd %mm1, %mm0 C nibbles - - - movq %mm0, %mm1 - psrlq $4, %mm0 - - pand REG_0F0F0F0F0F0F0F0F, %mm0 - pand REG_0F0F0F0F0F0F0F0F, %mm1 - - paddd %mm1, %mm0 C bytes - - movq %mm0, %mm1 - psrlq $8, %mm0 - - - paddb %mm1, %mm0 C words - - - movq %mm0, %mm1 - psrlq $16, %mm0 - - paddd %mm1, %mm0 C dwords - - pand REG_000000FF000000FF, %mm0 - - paddd %mm0, %mm2 C low to total - psrlq $32, %mm0 - - paddd %mm0, %mm2 C high to total - loop L(top) - - - - movd %mm2, %eax - emms_or_femms - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/rshift.asm deleted file mode 100644 index cd0382f322ca3416b25d3e25290467c1b9d593e7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mmx/rshift.asm +++ /dev/null @@ -1,130 +0,0 @@ -dnl AMD K6 mpn_rshift -- mpn right shift. - -dnl Copyright 1999, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K6: 3.0 cycles/limb - - -C mp_limb_t mpn_rshift (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned shift); -C -C The loop runs at 3 cycles/limb, limited by decoding and by having 3 mmx -C instructions. This is despite every second fetch being unaligned. - - -defframe(PARAM_SHIFT,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) -deflit(`FRAME',0) - - TEXT - ALIGN(32) - -PROLOGUE(mpn_rshift) -deflit(`FRAME',0) - - C The 1 limb case can be done without the push %ebx, but it's then - C still the same speed. The push is left as a free helping hand for - C the two_or_more code. - - movl PARAM_SIZE, %eax - pushl %ebx FRAME_pushl() - - movl PARAM_SRC, %ebx - decl %eax - - movl PARAM_SHIFT, %ecx - jnz L(two_or_more) - - movl (%ebx), %edx C src limb - movl PARAM_DST, %ebx - - shrdl( %cl, %edx, %eax) C return value - - shrl %cl, %edx - - movl %edx, (%ebx) C dst limb - popl %ebx - - ret - - - ALIGN(16) C avoid offset 0x1f -L(two_or_more): - C eax size-1 - C ebx src - C ecx shift - C edx - - movl (%ebx), %edx C src low limb - negl %ecx - - addl $32, %ecx C 32-shift - movd PARAM_SHIFT, %mm6 - - shll %cl, %edx C retval - movl PARAM_DST, %ecx - - leal (%ebx,%eax,4), %ebx - - leal -4(%ecx,%eax,4), %ecx - negl %eax - - -L(simple): - C eax counter (negative) - C ebx &src[size-1] - C ecx &dst[size-1] - C edx retval - C - C mm0 scratch - C mm6 shift - -Zdisp( movq, 0,(%ebx,%eax,4), %mm0) - incl %eax - - psrlq %mm6, %mm0 - -Zdisp( movd, %mm0, 0,(%ecx,%eax,4)) - jnz L(simple) - - - movq %mm0, (%ecx) - movl %edx, %eax - - popl %ebx - - emms - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mod_34lsub1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mod_34lsub1.asm deleted file mode 100644 index 7e30503e544b9392b9da75374f167d4fb3da1921..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mod_34lsub1.asm +++ /dev/null @@ -1,190 +0,0 @@ -dnl AMD K6 mpn_mod_34lsub1 -- mpn remainder modulo 2**24-1. - -dnl Copyright 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K6: 2.66 cycles/limb - - -C mp_limb_t mpn_mod_34lsub1 (mp_srcptr src, mp_size_t size) -C -C An attempt was made to use a loop like -C -C L(top): -C adcl (%edx), %eax -C adcl 4(%edx), %ebx -C adcl 8(%edx), %esi -C leal 12(%edx), %edx -C loop L(top) -C -C with %ecx starting from floor(size/3), but it still measured 2.66 c/l. -C The form used instead can save about 6 cycles by not dividing by 3. -C -C In the code used, putting the "leal"s at the top of the loop is necessary -C for the claimed speed, anywhere else costs an extra cycle per loop. -C Perhaps a tight loop like this needs short decode instructions at the -C branch target, which would explain the leal/loop form above taking 8 -C cycles instead of 7 too. - -defframe(PARAM_SIZE, 8) -defframe(PARAM_SRC, 4) - -dnl re-use parameter space -define(SAVE_EBX, `PARAM_SIZE') -define(SAVE_ESI, `PARAM_SRC') - - TEXT - ALIGN(16) -PROLOGUE(mpn_mod_34lsub1) -deflit(`FRAME',0) - - movl PARAM_SIZE, %eax - movl PARAM_SRC, %edx - - subl $2, %eax - ja L(three_or_more) - -Zdisp( movl, 0,(%edx), %eax) C avoid code cache line boundary - jne L(one) - - movl %eax, %ecx - movl 4(%edx), %edx - - shrl $24, %eax C src[0] high - andl $0x00FFFFFF, %ecx C src[0] low - - addl %ecx, %eax - movl %edx, %ecx - - shll $8, %edx - andl $0x00FFFF00, %edx C src[1] high - - shrl $16, %ecx C src[1] low - addl %ecx, %eax - - addl %edx, %eax - -L(one): - ret - - -L(three_or_more): - C eax size-2 - C ebx - C ecx - C edx src - - movl %ebx, SAVE_EBX - xorl %ebx, %ebx - - movl %esi, SAVE_ESI - pushl %edi FRAME_pushl() - - xorl %esi, %esi - xorl %edi, %edi C and clear carry flag - -L(top): - C eax counter, limbs - C ebx acc 0mod3 - C ecx - C edx src, incrementing - C esi acc 1mod3 - C edi acc 2mod3 - C ebp - - leal -2(%eax), %eax - leal 12(%edx), %edx - - adcl -12(%edx), %ebx - adcl -8(%edx), %esi - adcl -4(%edx), %edi - - decl %eax - jg L(top) - - - C ecx is -3, -2 or -1 representing 0, 1 or 2 more limbs, respectively - - movb $0, %cl - incl %eax - - js L(combine) C 0 more - -Zdisp( adcl, 0,(%edx), %ebx) C avoid code cache line crossings - - movb $8, %cl - decl %eax - - js L(combine) C 1 more - - adcl 4(%edx), %esi - - movb $16, %cl - - -L(combine): - sbbl %edx, %edx - - shll %cl, %edx C carry - movl %ebx, %eax C 0mod3 - - shrl $24, %eax C 0mod3 high - andl $0x00FFFFFF, %ebx C 0mod3 low - - subl %edx, %eax C apply carry - movl %esi, %ecx C 1mod3 - - shrl $16, %esi C 1mod3 high - addl %ebx, %eax C apply 0mod3 low - - andl $0x0000FFFF, %ecx - addl %esi, %eax C apply 1mod3 high - - shll $8, %ecx C 1mod3 low - movl %edi, %edx C 2mod3 - - shrl $8, %edx C 2mod3 high - addl %ecx, %eax C apply 1mod3 low - - addl %edx, %eax C apply 2mod3 high - andl $0x000000FF, %edi - - shll $16, %edi C 2mod3 low - movl SAVE_EBX, %ebx - - addl %edi, %eax C apply 2mod3 low - movl SAVE_ESI, %esi - - popl %edi - - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mode1o.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mode1o.asm deleted file mode 100644 index 4a338bd7bada42aa9052c14f406da8966fb7617f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mode1o.asm +++ /dev/null @@ -1,176 +0,0 @@ -dnl AMD K6 mpn_modexact_1_odd -- exact division style remainder. - -dnl Copyright 2000-2003, 2007 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K6: 10.0 cycles/limb - - -C mp_limb_t mpn_modexact_1_odd (mp_srcptr src, mp_size_t size, -C mp_limb_t divisor); -C mp_limb_t mpn_modexact_1c_odd (mp_srcptr src, mp_size_t size, -C mp_limb_t divisor, mp_limb_t carry); -C -C A special case for high<divisor at the end measured only about 4 cycles -C faster, and so isn't used. -C -C A special case for size==1 using a divl rather than the inverse measured -C only about 5 cycles faster, and so isn't used. When size==1 and -C high<divisor it can skip a division and be a full 24 cycles faster, but -C this isn't an important case. - -defframe(PARAM_CARRY, 16) -defframe(PARAM_DIVISOR,12) -defframe(PARAM_SIZE, 8) -defframe(PARAM_SRC, 4) - - TEXT - - ALIGN(32) -PROLOGUE(mpn_modexact_1c_odd) -deflit(`FRAME',0) - - movl PARAM_DIVISOR, %ecx - pushl %esi FRAME_pushl() - - movl PARAM_CARRY, %edx - jmp L(start_1c) - -EPILOGUE() - - - ALIGN(16) -PROLOGUE(mpn_modexact_1_odd) -deflit(`FRAME',0) - - movl PARAM_DIVISOR, %ecx - pushl %esi FRAME_pushl() - - xorl %edx, %edx -L(start_1c): - pushl %edi FRAME_pushl() - - shrl %ecx C d/2 - movl PARAM_DIVISOR, %esi - - andl $127, %ecx C d/2, 7 bits - pushl %ebp FRAME_pushl() - -ifdef(`PIC',` - LEA( binvert_limb_table, %edi) -Zdisp( movzbl, 0,(%ecx,%edi), %edi) C inv 8 bits -',` - movzbl binvert_limb_table(%ecx), %edi C inv 8 bits -') - leal (%edi,%edi), %ecx C 2*inv - - imull %edi, %edi C inv*inv - - movl PARAM_SRC, %eax - movl PARAM_SIZE, %ebp - - imull %esi, %edi C inv*inv*d - - pushl %ebx FRAME_pushl() - leal (%eax,%ebp,4), %ebx C src end - - subl %edi, %ecx C inv = 2*inv - inv*inv*d - leal (%ecx,%ecx), %edi C 2*inv - - imull %ecx, %ecx C inv*inv - - movl (%eax), %eax C src low limb - negl %ebp C -size - - imull %esi, %ecx C inv*inv*d - - subl %ecx, %edi C inv = 2*inv - inv*inv*d - - ASSERT(e,` C d*inv == 1 mod 2^GMP_LIMB_BITS - pushl %eax - movl %esi, %eax - imull %edi, %eax - cmpl $1, %eax - popl %eax') - - jmp L(entry) - - -C Rotating the mul to the top of the loop saves 1 cycle, presumably by -C hiding the loop control under the imul latency. -C -C The run time is 10 cycles, but decoding is only 9 (and the dependent chain -C only 8). It's not clear how to get down to 9 cycles. -C -C The xor and rcl to handle the carry bit could be an sbb instead, with the -C the carry bit add becoming a sub, but that doesn't save anything. - -L(top): - C eax (low product) - C ebx src end - C ecx carry bit, 0 or 1 - C edx (high product, being carry limb) - C esi divisor - C edi inverse - C ebp counter, limbs, negative - - mull %esi - - movl (%ebx,%ebp,4), %eax - addl %ecx, %edx C apply carry bit to carry limb - -L(entry): - xorl %ecx, %ecx - subl %edx, %eax C apply carry limb - - rcll %ecx - - imull %edi, %eax - - incl %ebp - jnz L(top) - - - - popl %ebx - popl %ebp - - mull %esi - - popl %edi - popl %esi - - leal (%ecx,%edx), %eax - - ret - -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mul_1.asm deleted file mode 100644 index 3ef7ec24fe70cf4f2a574041ecdf15c9cb74de79..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mul_1.asm +++ /dev/null @@ -1,292 +0,0 @@ -dnl AMD K6 mpn_mul_1 -- mpn by limb multiply. - -dnl Copyright 1999, 2000, 2002, 2005 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C P5 -C P6 model 0-8,10-12 5.5 -C P6 model 9 (Banias) -C P6 model 13 (Dothan) 4.87 -C P4 model 0 (Willamette) -C P4 model 1 (?) -C P4 model 2 (Northwood) -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C AMD K6 6.25 -C AMD K7 -C AMD K8 - - -C mp_limb_t mpn_mul_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t multiplier); -C mp_limb_t mpn_mul_1c (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t multiplier, mp_limb_t carry); -C -C Multiply src,size by mult and store the result in dst,size. -C Return the carry limb from the top of the result. -C -C mpn_mul_1c() accepts an initial carry for the calculation, it's added into -C the low limb of the result. - -defframe(PARAM_CARRY, 20) -defframe(PARAM_MULTIPLIER,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl minimum 5 because the unrolled code can't handle less -deflit(UNROLL_THRESHOLD, 5) - - TEXT - ALIGN(32) - -PROLOGUE(mpn_mul_1c) - pushl %esi -deflit(`FRAME',4) - movl PARAM_CARRY, %esi - jmp L(start_nc) -EPILOGUE() - - -PROLOGUE(mpn_mul_1) - push %esi -deflit(`FRAME',4) - xorl %esi, %esi C initial carry - -L(start_nc): - mov PARAM_SIZE, %ecx - push %ebx -FRAME_pushl() - - movl PARAM_SRC, %ebx - push %edi -FRAME_pushl() - - movl PARAM_DST, %edi - pushl %ebp -FRAME_pushl() - - cmpl $UNROLL_THRESHOLD, %ecx - movl PARAM_MULTIPLIER, %ebp - - jae L(unroll) - - - C code offset 0x22 here, close enough to aligned -L(simple): - C eax scratch - C ebx src - C ecx counter - C edx scratch - C esi carry - C edi dst - C ebp multiplier - C - C this loop 8 cycles/limb - - movl (%ebx), %eax - addl $4, %ebx - - mull %ebp - - addl %esi, %eax - movl $0, %esi - - adcl %edx, %esi - - movl %eax, (%edi) - addl $4, %edi - - loop L(simple) - - - popl %ebp - - popl %edi - popl %ebx - - movl %esi, %eax - popl %esi - - ret - - -C ----------------------------------------------------------------------------- -C The code for each limb is 6 cycles, with instruction decoding being the -C limiting factor. At 4 limbs/loop and 1 cycle/loop of overhead it's 6.25 -C cycles/limb in total. -C -C The secret ingredient to get 6.25 is to start the loop with the mul and -C have the load/store pair at the end. Rotating the load/store to the top -C is an 0.5 c/l slowdown. (Some address generation effect probably.) -C -C The whole unrolled loop fits nicely in exactly 80 bytes. - - - ALIGN(16) C already aligned to 16 here actually -L(unroll): - movl (%ebx), %eax - leal -16(%ebx,%ecx,4), %ebx - - leal -16(%edi,%ecx,4), %edi - subl $4, %ecx - - negl %ecx - - - ALIGN(16) C one byte nop for this alignment -L(top): - C eax scratch - C ebx &src[size-4] - C ecx counter - C edx scratch - C esi carry - C edi &dst[size-4] - C ebp multiplier - - mull %ebp - - addl %esi, %eax - movl $0, %esi - - adcl %edx, %esi - - movl %eax, (%edi,%ecx,4) - movl 4(%ebx,%ecx,4), %eax - - - mull %ebp - - addl %esi, %eax - movl $0, %esi - - adcl %edx, %esi - - movl %eax, 4(%edi,%ecx,4) - movl 8(%ebx,%ecx,4), %eax - - - mull %ebp - - addl %esi, %eax - movl $0, %esi - - adcl %edx, %esi - - movl %eax, 8(%edi,%ecx,4) - movl 12(%ebx,%ecx,4), %eax - - - mull %ebp - - addl %esi, %eax - movl $0, %esi - - adcl %edx, %esi - - movl %eax, 12(%edi,%ecx,4) - movl 16(%ebx,%ecx,4), %eax - - - addl $4, %ecx - js L(top) - - - - C eax next src limb - C ebx &src[size-4] - C ecx 0 to 3 representing respectively 4 to 1 further limbs - C edx - C esi carry - C edi &dst[size-4] - - testb $2, %cl - jnz L(finish_not_two) - - mull %ebp - - addl %esi, %eax - movl $0, %esi - - adcl %edx, %esi - - movl %eax, (%edi,%ecx,4) - movl 4(%ebx,%ecx,4), %eax - - - mull %ebp - - addl %esi, %eax - movl $0, %esi - - adcl %edx, %esi - - movl %eax, 4(%edi,%ecx,4) - movl 8(%ebx,%ecx,4), %eax - - addl $2, %ecx -L(finish_not_two): - - - testb $1, %cl - jnz L(finish_not_one) - - mull %ebp - - addl %esi, %eax - movl $0, %esi - - adcl %edx, %esi - - movl %eax, 8(%edi) - movl 12(%ebx), %eax -L(finish_not_one): - - - mull %ebp - - addl %esi, %eax - popl %ebp - - adcl $0, %edx - - movl %eax, 12(%edi) - popl %edi - - popl %ebx - movl %edx, %eax - - popl %esi - - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mul_basecase.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mul_basecase.asm deleted file mode 100644 index 7030001c3f21ec2d9a47dfd13d65e5e85de6f419..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/mul_basecase.asm +++ /dev/null @@ -1,612 +0,0 @@ -dnl AMD K6 mpn_mul_basecase -- multiply two mpn numbers. - -dnl Copyright 1999-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K6: approx 9.0 cycles per cross product on 30x30 limbs (with 16 limbs/loop -C unrolling). - - - -dnl K6: UNROLL_COUNT cycles/product (approx) -dnl 8 9.75 -dnl 16 9.3 -dnl 32 9.3 -dnl Maximum possible with the current code is 32. -dnl -dnl With 16 the inner unrolled loop fits exactly in a 256 byte block, which -dnl might explain it's good performance. - -deflit(UNROLL_COUNT, 16) - - -C void mpn_mul_basecase (mp_ptr wp, -C mp_srcptr xp, mp_size_t xsize, -C mp_srcptr yp, mp_size_t ysize); -C -C Calculate xp,xsize multiplied by yp,ysize, storing the result in -C wp,xsize+ysize. -C -C This routine is essentially the same as mpn/generic/mul_basecase.c, but -C it's faster because it does most of the mpn_addmul_1() entry code only -C once. The saving is about 10-20% on typical sizes coming from the -C Karatsuba multiply code. -C -C Enhancements: -C -C The mul_1 loop is about 8.5 c/l, which is slower than mpn_mul_1 at 6.25 -C c/l. Could call mpn_mul_1 when ysize is big enough to make it worthwhile. -C -C The main unrolled addmul loop could be shared by mpn_addmul_1, using some -C extra stack setups and maybe 2 or 3 wasted cycles at the end. Code saving -C would be 256 bytes. - -ifdef(`PIC',` -deflit(UNROLL_THRESHOLD, 8) -',` -deflit(UNROLL_THRESHOLD, 8) -') - -defframe(PARAM_YSIZE,20) -defframe(PARAM_YP, 16) -defframe(PARAM_XSIZE,12) -defframe(PARAM_XP, 8) -defframe(PARAM_WP, 4) - - TEXT - ALIGN(32) -PROLOGUE(mpn_mul_basecase) -deflit(`FRAME',0) - - movl PARAM_XSIZE, %ecx - movl PARAM_YP, %eax - - movl PARAM_XP, %edx - movl (%eax), %eax C yp low limb - - cmpl $2, %ecx - ja L(xsize_more_than_two_limbs) - je L(two_by_something) - - - C one limb by one limb - - movl (%edx), %edx C xp low limb - movl PARAM_WP, %ecx - - mull %edx - - movl %eax, (%ecx) - movl %edx, 4(%ecx) - ret - - -C ----------------------------------------------------------------------------- -L(two_by_something): - decl PARAM_YSIZE - pushl %ebx -deflit(`FRAME',4) - - movl PARAM_WP, %ebx - pushl %esi -deflit(`FRAME',8) - - movl %eax, %ecx C yp low limb - movl (%edx), %eax C xp low limb - - movl %edx, %esi C xp - jnz L(two_by_two) - - - C two limbs by one limb - - mull %ecx - - movl %eax, (%ebx) - movl 4(%esi), %eax - - movl %edx, %esi C carry - - mull %ecx - - addl %eax, %esi - movl %esi, 4(%ebx) - - adcl $0, %edx - - movl %edx, 8(%ebx) - popl %esi - - popl %ebx - ret - - - -C ----------------------------------------------------------------------------- - ALIGN(16) -L(two_by_two): - C eax xp low limb - C ebx wp - C ecx yp low limb - C edx - C esi xp - C edi - C ebp -deflit(`FRAME',8) - - mull %ecx C xp[0] * yp[0] - - push %edi -deflit(`FRAME',12) - movl %eax, (%ebx) - - movl 4(%esi), %eax - movl %edx, %edi C carry, for wp[1] - - mull %ecx C xp[1] * yp[0] - - addl %eax, %edi - movl PARAM_YP, %ecx - - adcl $0, %edx - - movl %edi, 4(%ebx) - movl 4(%ecx), %ecx C yp[1] - - movl 4(%esi), %eax C xp[1] - movl %edx, %edi C carry, for wp[2] - - mull %ecx C xp[1] * yp[1] - - addl %eax, %edi - - adcl $0, %edx - - movl (%esi), %eax C xp[0] - movl %edx, %esi C carry, for wp[3] - - mull %ecx C xp[0] * yp[1] - - addl %eax, 4(%ebx) - adcl %edx, %edi - adcl $0, %esi - - movl %edi, 8(%ebx) - popl %edi - - movl %esi, 12(%ebx) - popl %esi - - popl %ebx - ret - - -C ----------------------------------------------------------------------------- - ALIGN(16) -L(xsize_more_than_two_limbs): - -C The first limb of yp is processed with a simple mpn_mul_1 style loop -C inline. Unrolling this doesn't seem worthwhile since it's only run once -C (whereas the addmul below is run ysize-1 many times). A call to the -C actual mpn_mul_1 will be slowed down by the call and parameter pushing and -C popping, and doesn't seem likely to be worthwhile on the typical 10-20 -C limb operations the Karatsuba code calls here with. - - C eax yp[0] - C ebx - C ecx xsize - C edx xp - C esi - C edi - C ebp -deflit(`FRAME',0) - - pushl %edi defframe_pushl(SAVE_EDI) - pushl %ebp defframe_pushl(SAVE_EBP) - - movl PARAM_WP, %edi - pushl %esi defframe_pushl(SAVE_ESI) - - movl %eax, %ebp - pushl %ebx defframe_pushl(SAVE_EBX) - - leal (%edx,%ecx,4), %ebx C xp end - xorl %esi, %esi - - leal (%edi,%ecx,4), %edi C wp end of mul1 - negl %ecx - - -L(mul1): - C eax scratch - C ebx xp end - C ecx counter, negative - C edx scratch - C esi carry - C edi wp end of mul1 - C ebp multiplier - - movl (%ebx,%ecx,4), %eax - - mull %ebp - - addl %esi, %eax - movl $0, %esi - - adcl %edx, %esi - - movl %eax, (%edi,%ecx,4) - incl %ecx - - jnz L(mul1) - - - movl PARAM_YSIZE, %edx - movl %esi, (%edi) C final carry - - movl PARAM_XSIZE, %ecx - decl %edx - - jnz L(ysize_more_than_one_limb) - - popl %ebx - popl %esi - popl %ebp - popl %edi - ret - - -L(ysize_more_than_one_limb): - cmpl $UNROLL_THRESHOLD, %ecx - movl PARAM_YP, %eax - - jae L(unroll) - - -C ----------------------------------------------------------------------------- -C Simple addmul loop. -C -C Using ebx and edi pointing at the ends of their respective locations saves -C a couple of instructions in the outer loop. The inner loop is still 11 -C cycles, the same as the simple loop in aorsmul_1.asm. - - C eax yp - C ebx xp end - C ecx xsize - C edx ysize-1 - C esi - C edi wp end of mul1 - C ebp - - movl 4(%eax), %ebp C multiplier - negl %ecx - - movl %ecx, PARAM_XSIZE C -xsize - xorl %esi, %esi C initial carry - - leal 4(%eax,%edx,4), %eax C yp end - negl %edx - - movl %eax, PARAM_YP - movl %edx, PARAM_YSIZE - - jmp L(simple_outer_entry) - - - C aligning here saves a couple of cycles - ALIGN(16) -L(simple_outer_top): - C edx ysize counter, negative - - movl PARAM_YP, %eax C yp end - xorl %esi, %esi C carry - - movl PARAM_XSIZE, %ecx C -xsize - movl %edx, PARAM_YSIZE - - movl (%eax,%edx,4), %ebp C yp limb multiplier -L(simple_outer_entry): - addl $4, %edi - - -L(simple_inner): - C eax scratch - C ebx xp end - C ecx counter, negative - C edx scratch - C esi carry - C edi wp end of this addmul - C ebp multiplier - - movl (%ebx,%ecx,4), %eax - - mull %ebp - - addl %esi, %eax - movl $0, %esi - - adcl $0, %edx - addl %eax, (%edi,%ecx,4) - adcl %edx, %esi - - incl %ecx - jnz L(simple_inner) - - - movl PARAM_YSIZE, %edx - movl %esi, (%edi) - - incl %edx - jnz L(simple_outer_top) - - - popl %ebx - popl %esi - popl %ebp - popl %edi - ret - - -C ----------------------------------------------------------------------------- -C Unrolled loop. -C -C The unrolled inner loop is the same as in aorsmul_1.asm, see that code for -C some comments. -C -C VAR_COUNTER is for the inner loop, running from VAR_COUNTER_INIT down to -C 0, inclusive. -C -C VAR_JMP is the computed jump into the unrolled loop. -C -C PARAM_XP and PARAM_WP get offset appropriately for where the unrolled loop -C is entered. -C -C VAR_XP_LOW is the least significant limb of xp, which is needed at the -C start of the unrolled loop. This can't just be fetched through the xp -C pointer because of the offset applied to it. -C -C PARAM_YSIZE is the outer loop counter, going from -(ysize-1) up to -1, -C inclusive. -C -C PARAM_YP is offset appropriately so that the PARAM_YSIZE counter can be -C added to give the location of the next limb of yp, which is the multiplier -C in the unrolled loop. -C -C PARAM_WP is similarly offset so that the PARAM_YSIZE counter can be added -C to give the starting point in the destination for each unrolled loop (this -C point is one limb upwards for each limb of yp processed). -C -C Having PARAM_YSIZE count negative to zero means it's not necessary to -C store new values of PARAM_YP and PARAM_WP on each loop. Those values on -C the stack remain constant and on each loop an leal adjusts them with the -C PARAM_YSIZE counter value. - - -defframe(VAR_COUNTER, -20) -defframe(VAR_COUNTER_INIT, -24) -defframe(VAR_JMP, -28) -defframe(VAR_XP_LOW, -32) -deflit(VAR_STACK_SPACE, 16) - -dnl For some strange reason using (%esp) instead of 0(%esp) is a touch -dnl slower in this code, hence the defframe empty-if-zero feature is -dnl disabled. -dnl -dnl If VAR_COUNTER is at (%esp), the effect is worse. In this case the -dnl unrolled loop is 255 instead of 256 bytes, but quite how this affects -dnl anything isn't clear. -dnl -define(`defframe_empty_if_zero_disabled',1) - -L(unroll): - C eax yp (not used) - C ebx xp end (not used) - C ecx xsize - C edx ysize-1 - C esi - C edi wp end of mul1 (not used) - C ebp -deflit(`FRAME', 16) - - leal -2(%ecx), %ebp C one limb processed at start, - decl %ecx C and ebp is one less - - shrl $UNROLL_LOG2, %ebp - negl %ecx - - subl $VAR_STACK_SPACE, %esp -deflit(`FRAME', 16+VAR_STACK_SPACE) - andl $UNROLL_MASK, %ecx - - movl %ecx, %esi - shll $4, %ecx - - movl %ebp, VAR_COUNTER_INIT - negl %esi - - C 15 code bytes per limb -ifdef(`PIC',` - call L(pic_calc) -L(unroll_here): -',` - leal L(unroll_entry) (%ecx,%esi,1), %ecx -') - - movl PARAM_XP, %ebx - movl %ebp, VAR_COUNTER - - movl PARAM_WP, %edi - movl %ecx, VAR_JMP - - movl (%ebx), %eax - leal 4(%edi,%esi,4), %edi C wp adjust for unrolling and mul1 - - leal (%ebx,%esi,4), %ebx C xp adjust for unrolling - - movl %eax, VAR_XP_LOW - - movl %ebx, PARAM_XP - movl PARAM_YP, %ebx - - leal (%edi,%edx,4), %ecx C wp adjust for ysize indexing - movl 4(%ebx), %ebp C multiplier (yp second limb) - - leal 4(%ebx,%edx,4), %ebx C yp adjust for ysize indexing - - movl %ecx, PARAM_WP - - leal 1(%esi), %ecx C adjust parity for decl %ecx above - - movl %ebx, PARAM_YP - negl %edx - - movl %edx, PARAM_YSIZE - jmp L(unroll_outer_entry) - - -ifdef(`PIC',` -L(pic_calc): - C See mpn/x86/README about old gas bugs - leal (%ecx,%esi,1), %ecx - addl $L(unroll_entry)-L(unroll_here), %ecx - addl (%esp), %ecx - ret_internal -') - - -C ----------------------------------------------------------------------------- - C Aligning here saves a couple of cycles per loop. Using 32 doesn't - C cost any extra space, since the inner unrolled loop below is - C aligned to 32. - ALIGN(32) -L(unroll_outer_top): - C edx ysize - - movl PARAM_YP, %eax - movl %edx, PARAM_YSIZE C incremented ysize counter - - movl PARAM_WP, %edi - - movl VAR_COUNTER_INIT, %ebx - movl (%eax,%edx,4), %ebp C next multiplier - - movl PARAM_XSIZE, %ecx - leal (%edi,%edx,4), %edi C adjust wp for where we are in yp - - movl VAR_XP_LOW, %eax - movl %ebx, VAR_COUNTER - -L(unroll_outer_entry): - mull %ebp - - C using testb is a tiny bit faster than testl - testb $1, %cl - - movl %eax, %ecx C low carry - movl VAR_JMP, %eax - - movl %edx, %esi C high carry - movl PARAM_XP, %ebx - - jnz L(unroll_noswap) - movl %ecx, %esi C high,low carry other way around - - movl %edx, %ecx -L(unroll_noswap): - - jmp *%eax - - - -C ----------------------------------------------------------------------------- - ALIGN(32) -L(unroll_top): - C eax scratch - C ebx xp - C ecx carry low - C edx scratch - C esi carry high - C edi wp - C ebp multiplier - C VAR_COUNTER loop counter - C - C 15 code bytes each limb - - leal UNROLL_BYTES(%edi), %edi - -L(unroll_entry): -deflit(CHUNK_COUNT,2) -forloop(`i', 0, UNROLL_COUNT/CHUNK_COUNT-1, ` - deflit(`disp0', eval(i*CHUNK_COUNT*4)) - deflit(`disp1', eval(disp0 + 4)) - deflit(`disp2', eval(disp1 + 4)) - - movl disp1(%ebx), %eax - mull %ebp -Zdisp( addl, %ecx, disp0,(%edi)) - adcl %eax, %esi - movl %edx, %ecx - jadcl0( %ecx) - - movl disp2(%ebx), %eax - mull %ebp - addl %esi, disp1(%edi) - adcl %eax, %ecx - movl %edx, %esi - jadcl0( %esi) -') - - decl VAR_COUNTER - leal UNROLL_BYTES(%ebx), %ebx - - jns L(unroll_top) - - - movl PARAM_YSIZE, %edx - addl %ecx, UNROLL_BYTES(%edi) - - adcl $0, %esi - - incl %edx - movl %esi, UNROLL_BYTES+4(%edi) - - jnz L(unroll_outer_top) - - - movl SAVE_ESI, %esi - movl SAVE_EBP, %ebp - movl SAVE_EDI, %edi - movl SAVE_EBX, %ebx - - addl $FRAME, %esp - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/pre_mod_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/pre_mod_1.asm deleted file mode 100644 index 34db20d386673a11f3630e81c04696bb86f9a1f7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/pre_mod_1.asm +++ /dev/null @@ -1,146 +0,0 @@ -dnl AMD K6 mpn_preinv_mod_1 -- mpn by 1 remainder, with pre-inverted divisor. - -dnl Copyright 2000, 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K6: 18.0 cycles/limb - - -C mp_limb_t mpn_preinv_mod_1 (mp_srcptr src, mp_size_t size, mp_limb_t divisor, -C mp_limb_t inverse); -C -C This code is only 2 c/l faster than a simple divl, but that's 10% so it's -C considered worthwhile (just). - -defframe(PARAM_INVERSE,16) -defframe(PARAM_DIVISOR,12) -defframe(PARAM_SIZE, 8) -defframe(PARAM_SRC, 4) - - TEXT - ALIGN(32) -PROLOGUE(mpn_preinv_mod_1) -deflit(`FRAME',0) - - ASSERT(ae,`cmpl $1, PARAM_SIZE') - ASSERT(nz,`testl $0x80000000, PARAM_DIVISOR') - - movl PARAM_SIZE, %ecx - pushl %ebp FRAME_pushl() - - movl PARAM_SRC, %ebp - pushl %edi FRAME_pushl() - - movl PARAM_DIVISOR, %eax - pushl %esi FRAME_pushl() - - movl -4(%ebp,%ecx,4), %esi C src high limb - pushl %ebx FRAME_pushl() - - movl %edx, %edi C first n2 to cancel - subl %eax, %esi C first n1 = high-divisor - - decl %ecx - jz L(done_sbbl) - -L(top): - C eax scratch - C ebx n10, nadj, q1 - C ecx counter, size to 1 - C edx scratch - C esi n2 - C edi old high, for underflow test - C ebp src - - sbbl %edx, %edi C high n-(q1+1)*d, 0 or -1 - -L(entry): - andl PARAM_DIVISOR, %edi -L(q1_ff_top): - movl -4(%ebp,%ecx,4), %ebx - - addl %esi, %edi C possible addback - movl %ebx, %esi C n10 - - sarl $31, %ebx C -n1 = 0 or -1 - movl %edi, %eax C n2 - - movl PARAM_INVERSE, %edx - subl %ebx, %eax C n2+n1 - - mull %edx C m*(n2+n1) - - andl PARAM_DIVISOR, %ebx C -n1 & d - addl %esi, %ebx C nadj = n10 + (-n1&d), ignoring overflow - - addl %ebx, %eax C low m*(n2+n1) + nadj, giving carry flag - leal 1(%edi), %ebx C n2+1 - - adcl %ebx, %edx C 1+high(n2<<32+m*(n2+n1)+nadj) = q1+1 - - movl PARAM_DIVISOR, %eax C d - jz L(q1_ff) - - mull %edx C (q1+1)*d - - subl %eax, %esi C low n-(q1+1)*d - loop L(top) - - - -L(done_sbbl): - sbbl %edx, %edi C high n-(q1+1)*d, 0 or -1 - - andl PARAM_DIVISOR, %edi -L(done_esi_edi): - popl %ebx - - leal (%esi,%edi), %eax - popl %esi - - popl %edi - popl %ebp - - ret - - -C Special case for q1=0xFFFFFFFF, giving q=0xFFFFFFFF meaning the low dword -C of q*d is simply -d and the remainder n-q*d = n10+d. This is rarely -C reached. - -L(q1_ff): - movl PARAM_DIVISOR, %edi - loop L(q1_ff_top) - - jmp L(done_esi_edi) - - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/sqr_basecase.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/sqr_basecase.asm deleted file mode 100644 index b7ecb5cc8a1750e336ae2aa875145d26e5a28ecb..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k6/sqr_basecase.asm +++ /dev/null @@ -1,680 +0,0 @@ -dnl AMD K6 mpn_sqr_basecase -- square an mpn number. - -dnl Copyright 1999-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K6: approx 4.7 cycles per cross product, or 9.2 cycles per triangular -C product (measured on the speed difference between 17 and 33 limbs, -C which is roughly the Karatsuba recursing range). - - -dnl SQR_TOOM2_THRESHOLD_MAX is the maximum SQR_TOOM2_THRESHOLD this -dnl code supports. This value is used only by the tune program to know -dnl what it can go up to. (An attempt to compile with a bigger value will -dnl trigger some m4_assert()s in the code, making the build fail.) -dnl -dnl The value is determined by requiring the displacements in the unrolled -dnl addmul to fit in single bytes. This means a maximum UNROLL_COUNT of -dnl 63, giving a maximum SQR_TOOM2_THRESHOLD of 66. - -deflit(SQR_TOOM2_THRESHOLD_MAX, 66) - - -dnl Allow a value from the tune program to override config.m4. - -ifdef(`SQR_TOOM2_THRESHOLD_OVERRIDE', -`define(`SQR_TOOM2_THRESHOLD',SQR_TOOM2_THRESHOLD_OVERRIDE)') - - -dnl UNROLL_COUNT is the number of code chunks in the unrolled addmul. The -dnl number required is determined by SQR_TOOM2_THRESHOLD, since -dnl mpn_sqr_basecase only needs to handle sizes < SQR_TOOM2_THRESHOLD. -dnl -dnl The first addmul is the biggest, and this takes the second least -dnl significant limb and multiplies it by the third least significant and -dnl up. Hence for a maximum operand size of SQR_TOOM2_THRESHOLD-1 -dnl limbs, UNROLL_COUNT needs to be SQR_TOOM2_THRESHOLD-3. - -m4_config_gmp_mparam(`SQR_TOOM2_THRESHOLD') -deflit(UNROLL_COUNT, eval(SQR_TOOM2_THRESHOLD-3)) - - -C void mpn_sqr_basecase (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C The algorithm is essentially the same as mpn/generic/sqr_basecase.c, but a -C lot of function call overheads are avoided, especially when the given size -C is small. -C -C The code size might look a bit excessive, but not all of it is executed -C and so won't fill up the code cache. The 1x1, 2x2 and 3x3 special cases -C clearly apply only to those sizes; mid sizes like 10x10 only need part of -C the unrolled addmul; and big sizes like 35x35 that do need all of it will -C at least be getting value for money, because 35x35 spends something like -C 5780 cycles here. -C -C Different values of UNROLL_COUNT give slightly different speeds, between -C 9.0 and 9.2 c/tri-prod measured on the difference between 17 and 33 limbs. -C This isn't a big difference, but it's presumably some alignment effect -C which if understood could give a simple speedup. - -defframe(PARAM_SIZE,12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - - TEXT - ALIGN(32) -PROLOGUE(mpn_sqr_basecase) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - movl PARAM_SRC, %eax - - cmpl $2, %ecx - je L(two_limbs) - - movl PARAM_DST, %edx - ja L(three_or_more) - - -C ----------------------------------------------------------------------------- -C one limb only - C eax src - C ebx - C ecx size - C edx dst - - movl (%eax), %eax - movl %edx, %ecx - - mull %eax - - movl %eax, (%ecx) - movl %edx, 4(%ecx) - ret - - -C ----------------------------------------------------------------------------- - ALIGN(16) -L(two_limbs): - C eax src - C ebx - C ecx size - C edx dst - - pushl %ebx - movl %eax, %ebx C src -deflit(`FRAME',4) - - movl (%ebx), %eax - movl PARAM_DST, %ecx - - mull %eax C src[0]^2 - - movl %eax, (%ecx) - movl 4(%ebx), %eax - - movl %edx, 4(%ecx) - - mull %eax C src[1]^2 - - movl %eax, 8(%ecx) - movl (%ebx), %eax - - movl %edx, 12(%ecx) - movl 4(%ebx), %edx - - mull %edx C src[0]*src[1] - - addl %eax, 4(%ecx) - - adcl %edx, 8(%ecx) - adcl $0, 12(%ecx) - - popl %ebx - addl %eax, 4(%ecx) - - adcl %edx, 8(%ecx) - adcl $0, 12(%ecx) - - ret - - -C ----------------------------------------------------------------------------- -L(three_or_more): -deflit(`FRAME',0) - cmpl $4, %ecx - jae L(four_or_more) - - -C ----------------------------------------------------------------------------- -C three limbs - C eax src - C ecx size - C edx dst - - pushl %ebx - movl %eax, %ebx C src - - movl (%ebx), %eax - movl %edx, %ecx C dst - - mull %eax C src[0] ^ 2 - - movl %eax, (%ecx) - movl 4(%ebx), %eax - - movl %edx, 4(%ecx) - pushl %esi - - mull %eax C src[1] ^ 2 - - movl %eax, 8(%ecx) - movl 8(%ebx), %eax - - movl %edx, 12(%ecx) - pushl %edi - - mull %eax C src[2] ^ 2 - - movl %eax, 16(%ecx) - movl (%ebx), %eax - - movl %edx, 20(%ecx) - movl 4(%ebx), %edx - - mull %edx C src[0] * src[1] - - movl %eax, %esi - movl (%ebx), %eax - - movl %edx, %edi - movl 8(%ebx), %edx - - pushl %ebp - xorl %ebp, %ebp - - mull %edx C src[0] * src[2] - - addl %eax, %edi - movl 4(%ebx), %eax - - adcl %edx, %ebp - - movl 8(%ebx), %edx - - mull %edx C src[1] * src[2] - - addl %eax, %ebp - - adcl $0, %edx - - - C eax will be dst[5] - C ebx - C ecx dst - C edx dst[4] - C esi dst[1] - C edi dst[2] - C ebp dst[3] - - xorl %eax, %eax - addl %esi, %esi - adcl %edi, %edi - adcl %ebp, %ebp - adcl %edx, %edx - adcl $0, %eax - - addl %esi, 4(%ecx) - adcl %edi, 8(%ecx) - adcl %ebp, 12(%ecx) - - popl %ebp - popl %edi - - adcl %edx, 16(%ecx) - - popl %esi - popl %ebx - - adcl %eax, 20(%ecx) - ASSERT(nc) - - ret - - -C ----------------------------------------------------------------------------- - -defframe(SAVE_EBX, -4) -defframe(SAVE_ESI, -8) -defframe(SAVE_EDI, -12) -defframe(SAVE_EBP, -16) -defframe(VAR_COUNTER,-20) -defframe(VAR_JMP, -24) -deflit(STACK_SPACE, 24) - - ALIGN(16) -L(four_or_more): - - C eax src - C ebx - C ecx size - C edx dst - C esi - C edi - C ebp - -C First multiply src[0]*src[1..size-1] and store at dst[1..size]. -C -C A test was done calling mpn_mul_1 here to get the benefit of its unrolled -C loop, but this was only a tiny speedup; at 35 limbs it took 24 cycles off -C a 5780 cycle operation, which is not surprising since the loop here is 8 -C c/l and mpn_mul_1 is 6.25 c/l. - - subl $STACK_SPACE, %esp deflit(`FRAME',STACK_SPACE) - - movl %edi, SAVE_EDI - leal 4(%edx), %edi - - movl %ebx, SAVE_EBX - leal 4(%eax), %ebx - - movl %esi, SAVE_ESI - xorl %esi, %esi - - movl %ebp, SAVE_EBP - - C eax - C ebx src+4 - C ecx size - C edx - C esi - C edi dst+4 - C ebp - - movl (%eax), %ebp C multiplier - leal -1(%ecx), %ecx C size-1, and pad to a 16 byte boundary - - - ALIGN(16) -L(mul_1): - C eax scratch - C ebx src ptr - C ecx counter - C edx scratch - C esi carry - C edi dst ptr - C ebp multiplier - - movl (%ebx), %eax - addl $4, %ebx - - mull %ebp - - addl %esi, %eax - movl $0, %esi - - adcl %edx, %esi - - movl %eax, (%edi) - addl $4, %edi - - loop L(mul_1) - - -C Addmul src[n]*src[n+1..size-1] at dst[2*n-1...], for each n=1..size-2. -C -C The last two addmuls, which are the bottom right corner of the product -C triangle, are left to the end. These are src[size-3]*src[size-2,size-1] -C and src[size-2]*src[size-1]. If size is 4 then it's only these corner -C cases that need to be done. -C -C The unrolled code is the same as mpn_addmul_1(), see that routine for some -C comments. -C -C VAR_COUNTER is the outer loop, running from -(size-4) to -1, inclusive. -C -C VAR_JMP is the computed jump into the unrolled code, stepped by one code -C chunk each outer loop. -C -C K6 doesn't do any branch prediction on indirect jumps, which is good -C actually because it's a different target each time. The unrolled addmul -C is about 3 cycles/limb faster than a simple loop, so the 6 cycle cost of -C the indirect jump is quickly recovered. - - -dnl This value is also implicitly encoded in a shift and add. -dnl -deflit(CODE_BYTES_PER_LIMB, 15) - -dnl With the unmodified &src[size] and &dst[size] pointers, the -dnl displacements in the unrolled code fit in a byte for UNROLL_COUNT -dnl values up to 31. Above that an offset must be added to them. -dnl -deflit(OFFSET, -ifelse(eval(UNROLL_COUNT>31),1, -eval((UNROLL_COUNT-31)*4), -0)) - - C eax - C ebx &src[size] - C ecx - C edx - C esi carry - C edi &dst[size] - C ebp - - movl PARAM_SIZE, %ecx - movl %esi, (%edi) - - subl $4, %ecx - jz L(corner) - - movl %ecx, %edx -ifelse(OFFSET,0,, -` subl $OFFSET, %ebx') - - shll $4, %ecx -ifelse(OFFSET,0,, -` subl $OFFSET, %edi') - - negl %ecx - -ifdef(`PIC',` - call L(pic_calc) -L(here): -',` - leal L(unroll_inner_end)-eval(2*CODE_BYTES_PER_LIMB)(%ecx,%edx), %ecx -') - negl %edx - - - C The calculated jump mustn't be before the start of the available - C code. This is the limitation UNROLL_COUNT puts on the src operand - C size, but checked here using the jump address directly. - C - ASSERT(ae,` - movl_text_address( L(unroll_inner_start), %eax) - cmpl %eax, %ecx - ') - - -C ----------------------------------------------------------------------------- - ALIGN(16) -L(unroll_outer_top): - C eax - C ebx &src[size], constant - C ecx VAR_JMP - C edx VAR_COUNTER, limbs, negative - C esi high limb to store - C edi dst ptr, high of last addmul - C ebp - - movl -12+OFFSET(%ebx,%edx,4), %ebp C multiplier - movl %edx, VAR_COUNTER - - movl -8+OFFSET(%ebx,%edx,4), %eax C first limb of multiplicand - - mull %ebp - - testb $1, %cl - - movl %edx, %esi C high carry - movl %ecx, %edx C jump - - movl %eax, %ecx C low carry - leal CODE_BYTES_PER_LIMB(%edx), %edx - - movl %edx, VAR_JMP - leal 4(%edi), %edi - - C A branch-free version of this using some xors was found to be a - C touch slower than just a conditional jump, despite the jump - C switching between taken and not taken on every loop. - -ifelse(eval(UNROLL_COUNT%2),0, - jz,jnz) L(unroll_noswap) - movl %esi, %eax C high,low carry other way around - - movl %ecx, %esi - movl %eax, %ecx -L(unroll_noswap): - - jmp *%edx - - - C Must be on an even address here so the low bit of the jump address - C will indicate which way around ecx/esi should start. - C - C An attempt was made at padding here to get the end of the unrolled - C code to come out on a good alignment, to save padding before - C L(corner). This worked, but turned out to run slower than just an - C ALIGN(2). The reason for this is not clear, it might be related - C to the different speeds on different UNROLL_COUNTs noted above. - - ALIGN(2) - -L(unroll_inner_start): - C eax scratch - C ebx src - C ecx carry low - C edx scratch - C esi carry high - C edi dst - C ebp multiplier - C - C 15 code bytes each limb - C ecx/esi swapped on each chunk - -forloop(`i', UNROLL_COUNT, 1, ` - deflit(`disp_src', eval(-i*4 + OFFSET)) - deflit(`disp_dst', eval(disp_src - 4)) - - m4_assert(`disp_src>=-128 && disp_src<128') - m4_assert(`disp_dst>=-128 && disp_dst<128') - -ifelse(eval(i%2),0,` -Zdisp( movl, disp_src,(%ebx), %eax) - mull %ebp -Zdisp( addl, %esi, disp_dst,(%edi)) - adcl %eax, %ecx - movl %edx, %esi - jadcl0( %esi) -',` - dnl this one comes out last -Zdisp( movl, disp_src,(%ebx), %eax) - mull %ebp -Zdisp( addl, %ecx, disp_dst,(%edi)) - adcl %eax, %esi - movl %edx, %ecx - jadcl0( %ecx) -') -') -L(unroll_inner_end): - - addl %esi, -4+OFFSET(%edi) - - movl VAR_COUNTER, %edx - jadcl0( %ecx) - - movl %ecx, m4_empty_if_zero(OFFSET)(%edi) - movl VAR_JMP, %ecx - - incl %edx - jnz L(unroll_outer_top) - - -ifelse(OFFSET,0,,` - addl $OFFSET, %ebx - addl $OFFSET, %edi -') - - -C ----------------------------------------------------------------------------- - ALIGN(16) -L(corner): - C ebx &src[size] - C edi &dst[2*size-5] - - movl -12(%ebx), %ebp - - movl -8(%ebx), %eax - movl %eax, %ecx - - mull %ebp - - addl %eax, -4(%edi) - adcl $0, %edx - - movl -4(%ebx), %eax - movl %edx, %esi - movl %eax, %ebx - - mull %ebp - - addl %esi, %eax - adcl $0, %edx - - addl %eax, (%edi) - adcl $0, %edx - - movl %edx, %esi - movl %ebx, %eax - - mull %ecx - - addl %esi, %eax - movl %eax, 4(%edi) - - adcl $0, %edx - - movl %edx, 8(%edi) - - -C ----------------------------------------------------------------------------- -C Left shift of dst[1..2*size-2], the bit shifted out becomes dst[2*size-1]. -C The loop measures about 6 cycles/iteration, though it looks like it should -C decode in 5. - -L(lshift_start): - movl PARAM_SIZE, %ecx - - movl PARAM_DST, %edi - subl $1, %ecx C size-1 and clear carry - - movl PARAM_SRC, %ebx - movl %ecx, %edx - - xorl %eax, %eax C ready for adcl - - - ALIGN(16) -L(lshift): - C eax - C ebx src (for later use) - C ecx counter, decrementing - C edx size-1 (for later use) - C esi - C edi dst, incrementing - C ebp - - rcll 4(%edi) - rcll 8(%edi) - leal 8(%edi), %edi - loop L(lshift) - - - adcl %eax, %eax - - movl %eax, 4(%edi) C dst most significant limb - movl (%ebx), %eax C src[0] - - leal 4(%ebx,%edx,4), %ebx C &src[size] - subl %edx, %ecx C -(size-1) - - -C ----------------------------------------------------------------------------- -C Now add in the squares on the diagonal, src[0]^2, src[1]^2, ..., -C src[size-1]^2. dst[0] hasn't yet been set at all yet, and just gets the -C low limb of src[0]^2. - - - mull %eax - - movl %eax, (%edi,%ecx,8) C dst[0] - - - ALIGN(16) -L(diag): - C eax scratch - C ebx &src[size] - C ecx counter, negative - C edx carry - C esi scratch - C edi dst[2*size-2] - C ebp - - movl (%ebx,%ecx,4), %eax - movl %edx, %esi - - mull %eax - - addl %esi, 4(%edi,%ecx,8) - adcl %eax, 8(%edi,%ecx,8) - adcl $0, %edx - - incl %ecx - jnz L(diag) - - - movl SAVE_EBX, %ebx - movl SAVE_ESI, %esi - - addl %edx, 4(%edi) C dst most significant limb - - movl SAVE_EDI, %edi - movl SAVE_EBP, %ebp - addl $FRAME, %esp - ret - - - -C ----------------------------------------------------------------------------- -ifdef(`PIC',` -L(pic_calc): - C See mpn/x86/README about old gas bugs - addl (%esp), %ecx - addl $L(unroll_inner_end)-L(here)-eval(2*CODE_BYTES_PER_LIMB), %ecx - addl %edx, %ecx - ret_internal -') - - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/README b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/README deleted file mode 100644 index 5711b612c5c65430bfe55dcf90669bc005dc8daf..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/README +++ /dev/null @@ -1,174 +0,0 @@ -Copyright 2000, 2001 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. - - - - - AMD K7 MPN SUBROUTINES - - -This directory contains code optimized for the AMD Athlon CPU. - -The mmx subdirectory has routines using MMX instructions. All Athlons have -MMX, the separate directory is just so that configure can omit it if the -assembler doesn't support MMX. - - - -STATUS - -Times for the loops, with all code and data in L1 cache. - - cycles/limb - mpn_add/sub_n 1.6 - - mpn_copyi 0.75 or 1.0 \ varying with data alignment - mpn_copyd 0.75 or 1.0 / - - mpn_divrem_1 17.0 integer part, 15.0 fractional part - mpn_mod_1 17.0 - mpn_divexact_by3 8.0 - - mpn_l/rshift 1.2 - - mpn_mul_1 3.4 - mpn_addmul/submul_1 3.9 - - mpn_mul_basecase 4.42 cycles/crossproduct (approx) - mpn_sqr_basecase 2.3 cycles/crossproduct (approx) - or 4.55 cycles/triangleproduct (approx) - -Prefetching of sources hasn't yet been tried. - - - -NOTES - -cmov, MMX, 3DNow and some extensions to MMX and 3DNow are available. - -Write-allocate L1 data cache means prefetching of destinations is unnecessary. - -Floating point multiplications can be done in parallel with integer -multiplications, but there doesn't seem to be any way to make use of this. - -Unsigned "mul"s can be issued every 3 cycles. This suggests 3 is a limit on -the speed of the multiplication routines. The documentation shows mul -executing in IEU0 (or maybe in IEU0 and IEU1 together), so it might be that, -to get near 3 cycles code has to be arranged so that nothing else is issued -to IEU0. A busy IEU0 could explain why some code takes 4 cycles and other -apparently equivalent code takes 5. - - - -OPTIMIZATIONS - -Unrolled loops are used to reduce looping overhead. The unrolling is -configurable up to 32 limbs/loop for most routines and up to 64 for some. -The K7 has 64k L1 code cache so quite big unrolling is allowable. - -Computed jumps into the unrolling are used to handle sizes not a multiple of -the unrolling. An attractive feature of this is that times increase -smoothly with operand size, but it may be that some routines should just -have simple loops to finish up, especially when PIC adds between 2 and 16 -cycles to get %eip. - -Position independent code is implemented using a call to get %eip for the -computed jumps and a ret is always done, rather than an addl $4,%esp or a -popl, so the CPU return address branch prediction stack stays synchronised -with the actual stack in memory. - -Branch prediction, in absence of any history, will guess forward jumps are -not taken and backward jumps are taken. Where possible it's arranged that -the less likely or less important case is under a taken forward jump. - - - -CODING - -Instructions in general code have been shown grouped if they can execute -together, which means up to three direct-path instructions which have no -successive dependencies. K7 always decodes three and has out-of-order -execution, but the groupings show what slots might be available and what -dependency chains exist. - -When there's vector-path instructions an effort is made to get triplets of -direct-path instructions in between them, even if there's dependencies, -since this maximizes decoding throughput and might save a cycle or two if -decoding is the limiting factor. - - - -INSTRUCTIONS - -adcl direct -divl 39 cycles back-to-back -lodsl,etc vector -loop 1 cycle vector (decl/jnz opens up one decode slot) -movd reg vector -movd mem direct -mull issue every 3 cycles, latency 4 cycles low word, 6 cycles high word -popl vector (use movl for more than one pop) -pushl direct, will pair with a load -shrdl %cl vector, 3 cycles, seems to be 3 decode too -xorl r,r false read dependency recognised - - - -REFERENCES - -"AMD Athlon Processor X86 Code Optimization Guide", AMD publication number -22007, revision K, February 2002. Available on-line, - -http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22007.pdf - -"3DNow Technology Manual", AMD publication number 21928G/0-March 2000. -This describes the femms and prefetch instructions. Available on-line, - -http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/21928.pdf - -"AMD Extensions to the 3DNow and MMX Instruction Sets Manual", AMD -publication number 22466, revision D, March 2000. This describes -instructions added in the Athlon processor, such as pswapd and the extra -prefetch forms. Available on-line, - -http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22466.pdf - -"3DNow Instruction Porting Guide", AMD publication number 22621, revision B, -August 1999. This has some notes on general Athlon optimizations as well as -3DNow. Available on-line, - -http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22621.pdf - - - - ----------------- -Local variables: -mode: text -fill-column: 76 -End: diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/addlsh1_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/addlsh1_n.asm deleted file mode 100644 index a957b6f78e621557aec4a316bdbb283643793cbe..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/addlsh1_n.asm +++ /dev/null @@ -1,196 +0,0 @@ -dnl AMD K7 mpn_addlsh1_n -- rp[] = up[] + (vp[] << 1) - -dnl Copyright 2011 Free Software Foundation, Inc. - -dnl Contributed to the GNU project by Torbjorn Granlund and Marco Bodrato. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C This is an attempt at an addlsh1_n for x86-32, not relying on sse2 insns. -C The innerloop is 2*3-way unrolled, which is best we can do with the available -C registers. It seems tricky to use the same structure for rsblsh1_n, since we -C cannot feed carry between operations there. - -C cycles/limb -C P5 -C P6 model 0-8,10-12 -C P6 model 9 (Banias) -C P6 model 13 (Dothan) 5.4 (worse than add_n + lshift) -C P4 model 0 (Willamette) -C P4 model 1 (?) -C P4 model 2 (Northwood) -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C Intel Atom 6 -C AMD K6 ? -C AMD K7 2.5 -C AMD K8 - -C This is a basic addlsh1_n for k7, atom, and perhaps some other x86-32 -C processors. It uses 2*3-way unrolling, for good reasons. Unfortunately, -C that means we need an initial magic multiply. -C -C It is not clear how to do sublsh1_n or rsblsh1_n using the same pattern. We -C cannot do rsblsh1_n since we feed carry from the shift blocks to the -C add/subtract blocks, which is right for addition but reversed for -C subtraction. We could perhaps do sublsh1_n, with some extra move insns, -C without losing any time, since we're not issue limited but carry recurrency -C latency. -C -C Breaking carry recurrency might be a good idea. We would then need separate -C registers for the shift carry and add/subtract carry, which in turn would -C force is to 2*2-way unrolling. - -defframe(PARAM_SIZE, 16) -defframe(PARAM_DBLD, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl re-use parameter space -define(VAR_COUNT,`PARAM_DST') -define(VAR_TMP,`PARAM_DBLD') - -ASM_START() - TEXT - ALIGN(8) -PROLOGUE(mpn_addlsh1_n) -deflit(`FRAME',0) - -define(`rp', `%edi') -define(`up', `%esi') -define(`vp', `%ebp') - - mov $0x2aaaaaab, %eax - - push %ebx FRAME_pushl() - mov PARAM_SIZE, %ebx C size - - push rp FRAME_pushl() - mov PARAM_DST, rp - - mul %ebx - - push up FRAME_pushl() - mov PARAM_SRC, up - - not %edx C count = -(size\8)-1 - mov %edx, VAR_COUNT - - push vp FRAME_pushl() - mov PARAM_DBLD, vp - - lea 3(%edx,%edx,2), %ecx C count*3+3 = -(size\6)*3 - xor %edx, %edx - lea (%ebx,%ecx,2), %ebx C size + (count*3+3)*2 = size % 6 - or %ebx, %ebx - jz L(exact) - -L(oop): -ifdef(`CPU_P6',` - shr %edx ') C restore 2nd saved carry bit - mov (vp), %eax - adc %eax, %eax - rcr %edx C restore 1st saved carry bit - lea 4(vp), vp - adc (up), %eax - lea 4(up), up - adc %edx, %edx C save a carry bit in edx -ifdef(`CPU_P6',` - adc %edx, %edx ') C save another carry bit in edx - dec %ebx - mov %eax, (rp) - lea 4(rp), rp - jnz L(oop) - mov vp, VAR_TMP -L(exact): - incl VAR_COUNT - jz L(end) - - ALIGN(16) -L(top): -ifdef(`CPU_P6',` - shr %edx ') C restore 2nd saved carry bit - mov (vp), %eax - adc %eax, %eax - mov 4(vp), %ebx - adc %ebx, %ebx - mov 8(vp), %ecx - adc %ecx, %ecx - - rcr %edx C restore 1st saved carry bit - - adc (up), %eax - mov %eax, (rp) - adc 4(up), %ebx - mov %ebx, 4(rp) - adc 8(up), %ecx - mov %ecx, 8(rp) - - mov 12(vp), %eax - adc %eax, %eax - mov 16(vp), %ebx - adc %ebx, %ebx - mov 20(vp), %ecx - adc %ecx, %ecx - - lea 24(vp), vp - adc %edx, %edx C save a carry bit in edx - - adc 12(up), %eax - mov %eax, 12(rp) - adc 16(up), %ebx - mov %ebx, 16(rp) - adc 20(up), %ecx - - lea 24(up), up - -ifdef(`CPU_P6',` - adc %edx, %edx ') C save another carry bit in edx - mov %ecx, 20(rp) - incl VAR_COUNT - lea 24(rp), rp - jne L(top) - -L(end): - pop vp FRAME_popl() - pop up FRAME_popl() - -ifdef(`CPU_P6',` - xor %eax, %eax - shr $1, %edx - adc %edx, %eax -',` - adc $0, %edx - mov %edx, %eax -') - pop rp FRAME_popl() - pop %ebx FRAME_popl() - ret -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/aors_n.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/aors_n.asm deleted file mode 100644 index 1a08072029f0be551318ded718a7d53e2c482458..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/aors_n.asm +++ /dev/null @@ -1,258 +0,0 @@ -dnl AMD K7 mpn_add_n/mpn_sub_n -- mpn add or subtract. - -dnl Copyright 1999-2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K7: 1.64 cycles/limb (at 16 limbs/loop). - - - -dnl K7: UNROLL_COUNT cycles/limb -dnl 8 1.9 -dnl 16 1.64 -dnl 32 1.7 -dnl 64 2.0 -dnl Maximum possible with the current code is 64. - -deflit(UNROLL_COUNT, 16) - - -ifdef(`OPERATION_add_n', ` - define(M4_inst, adcl) - define(M4_function_n, mpn_add_n) - define(M4_function_nc, mpn_add_nc) - define(M4_description, add) -',`ifdef(`OPERATION_sub_n', ` - define(M4_inst, sbbl) - define(M4_function_n, mpn_sub_n) - define(M4_function_nc, mpn_sub_nc) - define(M4_description, subtract) -',`m4_error(`Need OPERATION_add_n or OPERATION_sub_n -')')') - -MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc) - - -C mp_limb_t M4_function_n (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size); -C mp_limb_t M4_function_nc (mp_ptr dst, mp_srcptr src1, mp_srcptr src2, -C mp_size_t size, mp_limb_t carry); -C -C Calculate src1,size M4_description src2,size, and store the result in -C dst,size. The return value is the carry bit from the top of the result (1 -C or 0). -C -C The _nc version accepts 1 or 0 for an initial carry into the low limb of -C the calculation. Note values other than 1 or 0 here will lead to garbage -C results. -C -C This code runs at 1.64 cycles/limb, which might be the best possible with -C plain integer operations. Each limb is 2 loads and 1 store, any 2 of -C which can be done each cycle, leading to 1.5 c/l. - -dnl Must have UNROLL_THRESHOLD >= 2, since the unrolled loop can't handle 1. -ifdef(`PIC',` -deflit(UNROLL_THRESHOLD, 8) -',` -deflit(UNROLL_THRESHOLD, 8) -') - -defframe(PARAM_CARRY,20) -defframe(PARAM_SIZE, 16) -defframe(PARAM_SRC2, 12) -defframe(PARAM_SRC1, 8) -defframe(PARAM_DST, 4) - -defframe(SAVE_EBP, -4) -defframe(SAVE_ESI, -8) -defframe(SAVE_EBX, -12) -defframe(SAVE_EDI, -16) -deflit(STACK_SPACE, 16) - - TEXT - ALIGN(32) -deflit(`FRAME',0) - -PROLOGUE(M4_function_nc) - movl PARAM_CARRY, %eax - jmp L(start) -EPILOGUE() - -PROLOGUE(M4_function_n) - - xorl %eax, %eax C carry -L(start): - movl PARAM_SIZE, %ecx - subl $STACK_SPACE, %esp -deflit(`FRAME',STACK_SPACE) - - movl %edi, SAVE_EDI - movl %ebx, SAVE_EBX - cmpl $UNROLL_THRESHOLD, %ecx - - movl PARAM_SRC2, %edx - movl PARAM_SRC1, %ebx - jae L(unroll) - - movl PARAM_DST, %edi - leal (%ebx,%ecx,4), %ebx - leal (%edx,%ecx,4), %edx - - leal (%edi,%ecx,4), %edi - negl %ecx - shrl %eax - - C This loop in in a single 16 byte code block already, so no - C alignment necessary. -L(simple): - C eax scratch - C ebx src1 - C ecx counter - C edx src2 - C esi - C edi dst - C ebp - - movl (%ebx,%ecx,4), %eax - M4_inst (%edx,%ecx,4), %eax - movl %eax, (%edi,%ecx,4) - incl %ecx - jnz L(simple) - - movl $0, %eax - movl SAVE_EDI, %edi - - movl SAVE_EBX, %ebx - setc %al - addl $STACK_SPACE, %esp - - ret - - -C ----------------------------------------------------------------------------- - C This is at 0x55, close enough to aligned. -L(unroll): -deflit(`FRAME',STACK_SPACE) - movl %ebp, SAVE_EBP - andl $-2, %ecx C size low bit masked out - andl $1, PARAM_SIZE C size low bit kept - - movl %ecx, %edi - decl %ecx - movl PARAM_DST, %ebp - - shrl $UNROLL_LOG2, %ecx - negl %edi - movl %esi, SAVE_ESI - - andl $UNROLL_MASK, %edi - -ifdef(`PIC',` - call L(pic_calc) -L(here): -',` - leal L(entry) (%edi,%edi,8), %esi C 9 bytes per -') - negl %edi - shrl %eax - - leal ifelse(UNROLL_BYTES,256,128) (%ebx,%edi,4), %ebx - leal ifelse(UNROLL_BYTES,256,128) (%edx,%edi,4), %edx - leal ifelse(UNROLL_BYTES,256,128) (%ebp,%edi,4), %edi - - jmp *%esi - - -ifdef(`PIC',` -L(pic_calc): - C See mpn/x86/README about old gas bugs - leal (%edi,%edi,8), %esi - addl $L(entry)-L(here), %esi - addl (%esp), %esi - ret_internal -') - - -C ----------------------------------------------------------------------------- - ALIGN(32) -L(top): - C eax zero - C ebx src1 - C ecx counter - C edx src2 - C esi scratch (was computed jump) - C edi dst - C ebp scratch - - leal UNROLL_BYTES(%edx), %edx - -L(entry): -deflit(CHUNK_COUNT, 2) -forloop(i, 0, UNROLL_COUNT/CHUNK_COUNT-1, ` - deflit(`disp0', eval(i*CHUNK_COUNT*4 ifelse(UNROLL_BYTES,256,-128))) - deflit(`disp1', eval(disp0 + 4)) - -Zdisp( movl, disp0,(%ebx), %esi) - movl disp1(%ebx), %ebp -Zdisp( M4_inst,disp0,(%edx), %esi) -Zdisp( movl, %esi, disp0,(%edi)) - M4_inst disp1(%edx), %ebp - movl %ebp, disp1(%edi) -') - - decl %ecx - leal UNROLL_BYTES(%ebx), %ebx - leal UNROLL_BYTES(%edi), %edi - jns L(top) - - - mov PARAM_SIZE, %esi - movl SAVE_EBP, %ebp - movl $0, %eax - - decl %esi - js L(even) - - movl (%ebx), %ecx - M4_inst UNROLL_BYTES(%edx), %ecx - movl %ecx, (%edi) -L(even): - - movl SAVE_EDI, %edi - movl SAVE_EBX, %ebx - setc %al - - movl SAVE_ESI, %esi - addl $STACK_SPACE, %esp - - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/aorsmul_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/aorsmul_1.asm deleted file mode 100644 index eec8df6de25cc991b3fbd599678c8feb455cb17f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/aorsmul_1.asm +++ /dev/null @@ -1,167 +0,0 @@ -dnl AMD K7 mpn_addmul_1/mpn_submul_1 -- add or subtract mpn multiple. - -dnl Copyright 1999-2002, 2005, 2008 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C P5 -C P6 model 0-8,10-12 -C P6 model 9 (Banias) 6.5 -C P6 model 13 (Dothan) -C P4 model 0 (Willamette) -C P4 model 1 (?) -C P4 model 2 (Northwood) -C P4 model 3 (Prescott) -C P4 model 4 (Nocona) -C AMD K6 -C AMD K7 3.75 -C AMD K8 - -C TODO -C * Improve feed-in and wind-down code. We beat the old code for all n != 1, -C but lose by 2x for n == 1. - -ifdef(`OPERATION_addmul_1',` - define(`ADDSUB', `add') - define(`func', `mpn_addmul_1') -') -ifdef(`OPERATION_submul_1',` - define(`ADDSUB', `sub') - define(`func', `mpn_submul_1') -') - -MULFUNC_PROLOGUE(mpn_addmul_1 mpn_submul_1) - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(func) - add $-16, %esp - mov %ebp, (%esp) - mov %ebx, 4(%esp) - mov %esi, 8(%esp) - mov %edi, 12(%esp) - - mov 20(%esp), %edi - mov 24(%esp), %esi - mov 28(%esp), %eax - mov 32(%esp), %ecx - mov %eax, %ebx - shr $2, %eax - mov %eax, 28(%esp) - mov (%esi), %eax - and $3, %ebx - jz L(b0) - cmp $2, %ebx - jz L(b2) - jg L(b3) - -L(b1): lea -4(%esi), %esi - lea -4(%edi), %edi - mul %ecx - mov %eax, %ebx - mov %edx, %ebp - cmpl $0, 28(%esp) - jz L(cj1) - mov 8(%esi), %eax - jmp L(1) - -L(b2): mul %ecx - mov %eax, %ebp - mov 4(%esi), %eax - mov %edx, %ebx - cmpl $0, 28(%esp) - jne L(2) - jmp L(cj2) - -L(b3): lea -12(%esi), %esi - lea -12(%edi), %edi - mul %ecx - mov %eax, %ebx - mov %edx, %ebp - mov 16(%esi), %eax - incl 28(%esp) - jmp L(3) - -L(b0): lea -8(%esi), %esi - lea -8(%edi), %edi - mul %ecx - mov %eax, %ebp - mov 12(%esi), %eax - mov %edx, %ebx - jmp L(0) - - ALIGN(16) -L(top): lea 16(%edi), %edi -L(2): mul %ecx - ADDSUB %ebp, 0(%edi) - mov $0, %ebp - adc %eax, %ebx - mov 8(%esi), %eax - adc %edx, %ebp -L(1): mul %ecx - ADDSUB %ebx, 4(%edi) - mov $0, %ebx - adc %eax, %ebp - mov 12(%esi), %eax - adc %edx, %ebx -L(0): mul %ecx - ADDSUB %ebp, 8(%edi) - mov $0, %ebp - adc %eax, %ebx - adc %edx, %ebp - mov 16(%esi), %eax -L(3): mul %ecx - ADDSUB %ebx, 12(%edi) - adc %eax, %ebp - mov 20(%esi), %eax - lea 16(%esi), %esi - mov $0, %ebx - adc %edx, %ebx - decl 28(%esp) - jnz L(top) - -L(end): lea 16(%edi), %edi -L(cj2): mul %ecx - ADDSUB %ebp, (%edi) - adc %eax, %ebx - adc $0, %edx -L(cj1): ADDSUB %ebx, 4(%edi) - adc $0, %edx - mov %edx, %eax - mov (%esp), %ebp - mov 4(%esp), %ebx - mov 8(%esp), %esi - mov 12(%esp), %edi - add $16, %esp - ret -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/bdiv_q_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/bdiv_q_1.asm deleted file mode 100644 index 2af7bb9eb303b9b655ecdebe8599dfc1db806ae7..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/bdiv_q_1.asm +++ /dev/null @@ -1,245 +0,0 @@ -dnl AMD K7 mpn_bdiv_q_1 -- mpn by limb exact division. - -dnl Rearranged from mpn/x86/k7/dive_1.asm by Marco Bodrato. - -dnl Copyright 2001, 2002, 2004, 2007, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C Athlon: 11.0 -C Hammer: 9.0 - - -C void mpn_divexact_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t divisor); -C -C The dependent chain is mul+imul+sub for 11 cycles and that speed is -C achieved with no special effort. The load and shrld latencies are hidden -C by out of order execution. -C -C It's a touch faster on size==1 to use the mul-by-inverse than divl. - -defframe(PARAM_SHIFT, 24) -defframe(PARAM_INVERSE,20) -defframe(PARAM_DIVISOR,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -defframe(SAVE_EBX, -4) -defframe(SAVE_ESI, -8) -defframe(SAVE_EDI, -12) -defframe(SAVE_EBP, -16) -defframe(VAR_INVERSE, -20) -defframe(VAR_DST_END, -24) - -deflit(STACK_SPACE, 24) - - TEXT - -C mp_limb_t -C mpn_pi1_bdiv_q_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, mp_limb_t divisor, -C mp_limb_t inverse, int shift) - ALIGN(16) -PROLOGUE(mpn_pi1_bdiv_q_1) -deflit(`FRAME',0) - - subl $STACK_SPACE, %esp deflit(`FRAME',STACK_SPACE) - movl PARAM_SHIFT, %ecx C shift count - - movl %ebp, SAVE_EBP - movl PARAM_SIZE, %ebp - - movl %esi, SAVE_ESI - movl PARAM_SRC, %esi - - movl %edi, SAVE_EDI - movl PARAM_DST, %edi - - movl %ebx, SAVE_EBX - - leal (%esi,%ebp,4), %esi C src end - leal (%edi,%ebp,4), %edi C dst end - negl %ebp C -size - - movl PARAM_INVERSE, %eax C inv - -L(common): - movl %eax, VAR_INVERSE - movl (%esi,%ebp,4), %eax C src[0] - - incl %ebp - jz L(one) - - movl (%esi,%ebp,4), %edx C src[1] - - shrdl( %cl, %edx, %eax) - - movl %edi, VAR_DST_END - xorl %ebx, %ebx - jmp L(entry) - - ALIGN(8) -L(top): - C eax q - C ebx carry bit, 0 or 1 - C ecx shift - C edx - C esi src end - C edi dst end - C ebp counter, limbs, negative - - mull PARAM_DIVISOR C carry limb in edx - - movl -4(%esi,%ebp,4), %eax - movl (%esi,%ebp,4), %edi - - shrdl( %cl, %edi, %eax) - - subl %ebx, %eax C apply carry bit - setc %bl - movl VAR_DST_END, %edi - - subl %edx, %eax C apply carry limb - adcl $0, %ebx - -L(entry): - imull VAR_INVERSE, %eax - - movl %eax, -4(%edi,%ebp,4) - incl %ebp - jnz L(top) - - - mull PARAM_DIVISOR C carry limb in edx - - movl -4(%esi), %eax C src high limb - shrl %cl, %eax - movl SAVE_ESI, %esi - - subl %ebx, %eax C apply carry bit - movl SAVE_EBX, %ebx - movl SAVE_EBP, %ebp - - subl %edx, %eax C apply carry limb - - imull VAR_INVERSE, %eax - - movl %eax, -4(%edi) - movl SAVE_EDI, %edi - addl $STACK_SPACE, %esp - - ret - -L(one): - shrl %cl, %eax - movl SAVE_ESI, %esi - movl SAVE_EBX, %ebx - - imull VAR_INVERSE, %eax - - movl SAVE_EBP, %ebp - - movl %eax, -4(%edi) - movl SAVE_EDI, %edi - addl $STACK_SPACE, %esp - - ret -EPILOGUE() - -C mp_limb_t mpn_bdiv_q_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t divisor); -C - - ALIGN(16) -PROLOGUE(mpn_bdiv_q_1) -deflit(`FRAME',0) - - movl PARAM_DIVISOR, %eax - subl $STACK_SPACE, %esp deflit(`FRAME',STACK_SPACE) - movl $-1, %ecx C shift count - - movl %ebp, SAVE_EBP - movl PARAM_SIZE, %ebp - - movl %esi, SAVE_ESI - movl %edi, SAVE_EDI - - C If there's usually only one or two trailing zero bits then this - C should be faster than bsfl. -L(strip_twos): - incl %ecx - shrl %eax - jnc L(strip_twos) - - movl %ebx, SAVE_EBX - leal 1(%eax,%eax), %ebx C d without twos - andl $127, %eax C d/2, 7 bits - -ifdef(`PIC',` - LEA( binvert_limb_table, %edx) - movzbl (%eax,%edx), %eax C inv 8 bits -',` - movzbl binvert_limb_table(%eax), %eax C inv 8 bits -') - - leal (%eax,%eax), %edx C 2*inv - movl %ebx, PARAM_DIVISOR C d without twos - - imull %eax, %eax C inv*inv - - movl PARAM_SRC, %esi - movl PARAM_DST, %edi - - imull %ebx, %eax C inv*inv*d - - subl %eax, %edx C inv = 2*inv - inv*inv*d - leal (%edx,%edx), %eax C 2*inv - - imull %edx, %edx C inv*inv - - leal (%esi,%ebp,4), %esi C src end - leal (%edi,%ebp,4), %edi C dst end - negl %ebp C -size - - imull %ebx, %edx C inv*inv*d - - subl %edx, %eax C inv = 2*inv - inv*inv*d - - ASSERT(e,` C expect d*inv == 1 mod 2^GMP_LIMB_BITS - pushl %eax FRAME_pushl() - imull PARAM_DIVISOR, %eax - cmpl $1, %eax - popl %eax FRAME_popl()') - - jmp L(common) -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/dive_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/dive_1.asm deleted file mode 100644 index 458bd02539554d0d1596b751382ba9c49e8a9548..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/dive_1.asm +++ /dev/null @@ -1,208 +0,0 @@ -dnl AMD K7 mpn_divexact_1 -- mpn by limb exact division. - -dnl Copyright 2001, 2002, 2004, 2007 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/limb -C Athlon: 11.0 -C Hammer: 9.0 - - -C void mpn_divexact_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t divisor); -C -C The dependent chain is mul+imul+sub for 11 cycles and that speed is -C achieved with no special effort. The load and shrld latencies are hidden -C by out of order execution. -C -C It's a touch faster on size==1 to use the mul-by-inverse than divl. - -defframe(PARAM_DIVISOR,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -defframe(SAVE_EBX, -4) -defframe(SAVE_ESI, -8) -defframe(SAVE_EDI, -12) -defframe(SAVE_EBP, -16) -defframe(VAR_INVERSE, -20) -defframe(VAR_DST_END, -24) - -deflit(STACK_SPACE, 24) - - TEXT - - ALIGN(16) -PROLOGUE(mpn_divexact_1) -deflit(`FRAME',0) - - movl PARAM_DIVISOR, %eax - subl $STACK_SPACE, %esp deflit(`FRAME',STACK_SPACE) - movl $-1, %ecx C shift count - - movl %ebp, SAVE_EBP - movl PARAM_SIZE, %ebp - - movl %esi, SAVE_ESI - movl %edi, SAVE_EDI - - C If there's usually only one or two trailing zero bits then this - C should be faster than bsfl. -L(strip_twos): - incl %ecx - shrl %eax - jnc L(strip_twos) - - movl %ebx, SAVE_EBX - leal 1(%eax,%eax), %ebx C d without twos - andl $127, %eax C d/2, 7 bits - -ifdef(`PIC',` - LEA( binvert_limb_table, %edx) - movzbl (%eax,%edx), %eax C inv 8 bits -',` - movzbl binvert_limb_table(%eax), %eax C inv 8 bits -') - - leal (%eax,%eax), %edx C 2*inv - movl %ebx, PARAM_DIVISOR C d without twos - - imull %eax, %eax C inv*inv - - movl PARAM_SRC, %esi - movl PARAM_DST, %edi - - imull %ebx, %eax C inv*inv*d - - subl %eax, %edx C inv = 2*inv - inv*inv*d - leal (%edx,%edx), %eax C 2*inv - - imull %edx, %edx C inv*inv - - leal (%esi,%ebp,4), %esi C src end - leal (%edi,%ebp,4), %edi C dst end - negl %ebp C -size - - imull %ebx, %edx C inv*inv*d - - subl %edx, %eax C inv = 2*inv - inv*inv*d - - ASSERT(e,` C expect d*inv == 1 mod 2^GMP_LIMB_BITS - pushl %eax FRAME_pushl() - imull PARAM_DIVISOR, %eax - cmpl $1, %eax - popl %eax FRAME_popl()') - - movl %eax, VAR_INVERSE - movl (%esi,%ebp,4), %eax C src[0] - - incl %ebp - jz L(one) - - movl (%esi,%ebp,4), %edx C src[1] - - shrdl( %cl, %edx, %eax) - - movl %edi, VAR_DST_END - xorl %ebx, %ebx - jmp L(entry) - - ALIGN(8) -L(top): - C eax q - C ebx carry bit, 0 or 1 - C ecx shift - C edx - C esi src end - C edi dst end - C ebp counter, limbs, negative - - mull PARAM_DIVISOR C carry limb in edx - - movl -4(%esi,%ebp,4), %eax - movl (%esi,%ebp,4), %edi - - shrdl( %cl, %edi, %eax) - - subl %ebx, %eax C apply carry bit - setc %bl - movl VAR_DST_END, %edi - - subl %edx, %eax C apply carry limb - adcl $0, %ebx - -L(entry): - imull VAR_INVERSE, %eax - - movl %eax, -4(%edi,%ebp,4) - incl %ebp - jnz L(top) - - - mull PARAM_DIVISOR C carry limb in edx - - movl -4(%esi), %eax C src high limb - shrl %cl, %eax - movl SAVE_ESI, %esi - - subl %ebx, %eax C apply carry bit - movl SAVE_EBX, %ebx - movl SAVE_EBP, %ebp - - subl %edx, %eax C apply carry limb - - imull VAR_INVERSE, %eax - - movl %eax, -4(%edi) - movl SAVE_EDI, %edi - addl $STACK_SPACE, %esp - - ret - - -L(one): - shrl %cl, %eax - movl SAVE_ESI, %esi - movl SAVE_EBX, %ebx - - imull VAR_INVERSE, %eax - - movl SAVE_EBP, %ebp - movl %eax, -4(%edi) - - movl SAVE_EDI, %edi - addl $STACK_SPACE, %esp - - ret - -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/gcd_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/gcd_1.asm deleted file mode 100644 index 833d05d934cba01cff2b71ede5ee8d79171209d2..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/gcd_1.asm +++ /dev/null @@ -1,193 +0,0 @@ -dnl x86 mpn_gcd_1 optimised for AMD K7. - -dnl Contributed to the GNU project by by Kevin Ryde. Rehacked by Torbjorn -dnl Granlund. - -dnl Copyright 2000-2002, 2005, 2009, 2011, 2012, 2014, 2015 Free Software -dnl Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C cycles/bit (approx) -C AMD K7 5.31 -C AMD K8,K9 5.33 -C AMD K10 5.30 -C AMD bd1 ? -C AMD bobcat 7.02 -C Intel P4-2 10.1 -C Intel P4-3/4 10.0 -C Intel P6/13 5.88 -C Intel core2 6.26 -C Intel NHM 6.83 -C Intel SBR 8.50 -C Intel atom 8.90 -C VIA nano ? -C Numbers measured with: speed -CD -s16-32 -t16 mpn_gcd_1 - -C TODO -C * Tune overhead, this takes 2-3 cycles more than old code when v0 is tiny. -C * Stream things better through registers, avoiding some copying. -C * For ELF, avoid putting GOT base in both ebx and esi. Needs special -C LEA/LEAL or else discrete code here. - -C ctz_table[n] is the number of trailing zeros on n, or MAXSHIFT if n==0. - -deflit(MAXSHIFT, 6) -deflit(MASK, eval((m4_lshift(1,MAXSHIFT))-1)) - -DEF_OBJECT(ctz_table,64) - .byte MAXSHIFT -forloop(i,1,MASK, -` .byte m4_count_trailing_zeros(i) -') -END_OBJECT(ctz_table) - -C Threshold of when to call bmod when U is one limb. Should be about -C (time_in_cycles(bmod_1,1) + call_overhead) / (cycles/bit). -define(`DIV_THRES_LOG2', 7) - - -define(`up', `%edi') -define(`n', `%esi') -define(`v0', `%edx') - - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(mpn_gcd_1) - push %edi - push %esi - - mov 12(%esp), up - mov 16(%esp), n - mov 20(%esp), v0 - - mov (up), %eax C U low limb - or v0, %eax C x | y - mov $-1, %ecx - -L(twos): - inc %ecx - shr %eax - jnc L(twos) - - shr %cl, v0 - mov %ecx, %eax C common twos - -L(divide_strip_y): - shr v0 - jnc L(divide_strip_y) - adc v0, v0 - - push %eax - push v0 - - cmp $1, n - jnz L(reduce_nby1) - -C Both U and V are single limbs, reduce with bmod if u0 >> v0. - mov (up), %ecx - mov %ecx, %eax - shr $DIV_THRES_LOG2, %ecx - cmp %ecx, v0 - ja L(reduced) - - mov v0, %esi - xor %edx, %edx - div %esi - mov %edx, %eax - jmp L(reduced) - -L(reduce_nby1): -ifdef(`PIC_WITH_EBX',`dnl - push %ebx - add $-4, %esp - call L(movl_eip_ebx) - add $_GLOBAL_OFFSET_TABLE_, %ebx -') - push v0 C param 3 - push n C param 2 - push up C param 1 - cmp $BMOD_1_TO_MOD_1_THRESHOLD, n - jl L(bmod) - CALL( mpn_mod_1) - jmp L(called) -L(bmod): - CALL( mpn_modexact_1_odd) - -L(called): -ifdef(`PIC_WITH_EBX',`dnl - add $16, %esp C deallocate params - pop %ebx -',` - add $12, %esp C deallocate params -') -L(reduced): - pop %edx - - LEAL( ctz_table, %esi) - test %eax, %eax - mov %eax, %ecx - jnz L(mid) - jmp L(end) - - ALIGN(16) C K8 BC P4 NHM SBR -L(top): cmovc( %ecx, %eax) C if x-y < 0 0 - cmovc( %edi, %edx) C use x,y-x 0 -L(mid): and $MASK, %ecx C 0 - movzbl (%esi,%ecx), %ecx C 1 - jz L(shift_alot) C 1 - shr %cl, %eax C 3 - mov %eax, %edi C 4 - mov %edx, %ecx C 3 - sub %eax, %ecx C 4 - sub %edx, %eax C 4 - jnz L(top) C 5 - -L(end): pop %ecx - mov %edx, %eax - shl %cl, %eax - pop %esi - pop %edi - ret - -L(shift_alot): - shr $MAXSHIFT, %eax - mov %eax, %ecx - jmp L(mid) - -ifdef(`PIC_WITH_EBX',`dnl -L(movl_eip_ebx): - mov (%esp), %ebx - ret -') -EPILOGUE() -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/gmp-mparam.h b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/gmp-mparam.h deleted file mode 100644 index 7a507472424f26fa042cb87214a4c337e12d1263..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/gmp-mparam.h +++ /dev/null @@ -1,253 +0,0 @@ -/* AMD K7 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright 1991, 1993, 1994, 2000-2005, 2008-2010, 2014, 2015 Free Software -Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. */ - -#define GMP_LIMB_BITS 32 -#define GMP_LIMB_BYTES 4 - -/* 2083 MHz K7 Barton */ -/* FFT tuning limit = 30 M */ -/* Generated by tuneup.c, 2015-10-11, gcc 4.5 */ - -#define MOD_1_NORM_THRESHOLD 0 /* always */ -#define MOD_1_UNNORM_THRESHOLD 3 -#define MOD_1N_TO_MOD_1_1_THRESHOLD 9 -#define MOD_1U_TO_MOD_1_1_THRESHOLD 5 -#define MOD_1_1_TO_MOD_1_2_THRESHOLD 24 -#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */ -#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 12 -#define USE_PREINV_DIVREM_1 1 /* native */ -#define DIV_QR_1N_PI1_METHOD 1 -#define DIV_QR_1_NORM_THRESHOLD 3 -#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ -#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ -#define BMOD_1_TO_MOD_1_THRESHOLD 24 - -#define MUL_TOOM22_THRESHOLD 28 -#define MUL_TOOM33_THRESHOLD 85 -#define MUL_TOOM44_THRESHOLD 145 -#define MUL_TOOM6H_THRESHOLD 206 -#define MUL_TOOM8H_THRESHOLD 454 - -#define MUL_TOOM32_TO_TOOM43_THRESHOLD 85 -#define MUL_TOOM32_TO_TOOM53_THRESHOLD 99 -#define MUL_TOOM42_TO_TOOM53_THRESHOLD 97 -#define MUL_TOOM42_TO_TOOM63_THRESHOLD 102 -#define MUL_TOOM43_TO_TOOM54_THRESHOLD 124 - -#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ -#define SQR_TOOM2_THRESHOLD 48 -#define SQR_TOOM3_THRESHOLD 83 -#define SQR_TOOM4_THRESHOLD 208 -#define SQR_TOOM6_THRESHOLD 294 -#define SQR_TOOM8_THRESHOLD 430 - -#define MULMID_TOOM42_THRESHOLD 56 - -#define MULMOD_BNM1_THRESHOLD 17 -#define SQRMOD_BNM1_THRESHOLD 18 - -#define MUL_FFT_MODF_THRESHOLD 666 /* k = 5 */ -#define MUL_FFT_TABLE3 \ - { { 666, 5}, { 25, 6}, { 13, 5}, { 27, 6}, \ - { 25, 7}, { 13, 6}, { 27, 7}, { 15, 6}, \ - { 32, 7}, { 17, 6}, { 35, 7}, { 19, 6}, \ - { 39, 7}, { 23, 6}, { 47, 7}, { 27, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 41, 8}, \ - { 23, 7}, { 47, 8}, { 31, 7}, { 63, 8}, \ - { 39, 9}, { 23, 8}, { 51, 9}, { 31, 8}, \ - { 67, 9}, { 39, 8}, { 79, 9}, { 47, 8}, \ - { 95, 9}, { 55,10}, { 31, 9}, { 63, 8}, \ - { 127, 9}, { 71, 8}, { 143, 9}, { 79,10}, \ - { 47, 9}, { 103,11}, { 31,10}, { 63, 9}, \ - { 143,10}, { 79, 9}, { 167,10}, { 95, 9}, \ - { 199,10}, { 111,11}, { 63,10}, { 143, 9}, \ - { 287, 8}, { 575,10}, { 159,11}, { 95,10}, \ - { 191, 9}, { 383, 8}, { 767,10}, { 207,12}, \ - { 63,11}, { 127,10}, { 271, 9}, { 543, 8}, \ - { 1087,10}, { 287, 9}, { 575,11}, { 159, 9}, \ - { 639, 8}, { 1279,10}, { 335, 9}, { 671, 8}, \ - { 1343, 9}, { 703,11}, { 191,10}, { 383, 9}, \ - { 767,10}, { 399, 9}, { 799, 8}, { 1599,10}, \ - { 415, 9}, { 831,11}, { 223,12}, { 127,11}, \ - { 255,10}, { 543, 9}, { 1087,11}, { 287,10}, \ - { 575, 9}, { 1151,10}, { 607, 9}, { 1215, 8}, \ - { 2431,11}, { 319,10}, { 671, 9}, { 1343,11}, \ - { 351,10}, { 703, 9}, { 1407,12}, { 191,11}, \ - { 383,10}, { 799, 9}, { 1599,11}, { 415,10}, \ - { 831, 9}, { 1663,10}, { 863, 9}, { 1727,11}, \ - { 447,13}, { 127,12}, { 255,11}, { 543,10}, \ - { 1087, 9}, { 2175,10}, { 1119,11}, { 575,10}, \ - { 1151,11}, { 607,10}, { 1215, 9}, { 2431,12}, \ - { 319,11}, { 671,10}, { 1343, 9}, { 2687,11}, \ - { 735,10}, { 1471, 9}, { 2943,12}, { 383,11}, \ - { 799,10}, { 1599,11}, { 863,10}, { 1727,12}, \ - { 447,11}, { 895,10}, { 1791, 9}, { 3583,11}, \ - { 959,10}, { 1919,11}, { 991,13}, { 255,12}, \ - { 511,11}, { 1023,10}, { 2111,11}, { 1119,12}, \ - { 575,11}, { 1151,10}, { 2303,11}, { 1215,10}, \ - { 2431,12}, { 639,11}, { 1343,10}, { 2687,12}, \ - { 703,11}, { 1407,10}, { 2815,11}, { 1471,10}, \ - { 2943,13}, { 383,12}, { 767,11}, { 1599,12}, \ - { 831,11}, { 1663,10}, { 3327,11}, { 1727,10}, \ - { 3455,12}, { 895,11}, { 1791,10}, { 3583,12}, \ - { 959,11}, { 1919,10}, { 3839,14}, { 255,13}, \ - { 511,12}, { 1023,11}, { 2047,12}, { 1087,11}, \ - { 2175,10}, { 4351,11}, { 2239,12}, { 1151,11}, \ - { 2303,12}, { 1215,11}, { 2431,13}, { 639,12}, \ - { 1343,11}, { 2687,12}, { 1407,11}, { 2815,12}, \ - { 1471,11}, { 2943,13}, { 767,12}, { 1663,11}, \ - { 3327,12}, { 1727,13}, { 895,12}, { 1791,11}, \ - { 3583,12}, { 1919,11}, { 3839,12}, { 1983,11}, \ - { 3967,14}, { 511,13}, { 1023,12}, { 2239,13}, \ - { 1151,12}, { 2495,13}, { 1279,12}, { 2623,13}, \ - { 1407,12}, { 2943,14}, { 767,13}, { 1535,12}, \ - { 3071,13}, { 1663,12}, { 3455,13}, { 1791,12}, \ - { 3583,13}, { 1919,12}, { 3967,15}, { 511,14}, \ - { 1023,13}, { 2047,12}, { 4095,13}, { 2175,12}, \ - { 4351,13}, { 2431,12}, { 4863,14}, { 1279,13}, \ - { 2559,12}, { 5119,13}, { 2943,12}, { 5887,14}, \ - { 1535,13}, { 3071,12}, { 6143,13}, { 3199,12}, \ - { 6399,13}, { 3327,12}, { 6655,11}, { 13311,12}, \ - { 6911,14}, { 1791,13}, { 3583,12}, { 7167,13}, \ - { 8192,14}, { 16384,15}, { 32768,16} } -#define MUL_FFT_TABLE3_SIZE 247 -#define MUL_FFT_THRESHOLD 7552 - -#define SQR_FFT_MODF_THRESHOLD 565 /* k = 5 */ -#define SQR_FFT_TABLE3 \ - { { 565, 5}, { 25, 6}, { 13, 5}, { 27, 6}, \ - { 25, 7}, { 13, 6}, { 27, 7}, { 15, 6}, \ - { 32, 7}, { 17, 6}, { 35, 7}, { 19, 6}, \ - { 39, 7}, { 23, 6}, { 47, 7}, { 27, 8}, \ - { 15, 7}, { 35, 8}, { 19, 7}, { 41, 8}, \ - { 23, 7}, { 47, 8}, { 27, 9}, { 15, 8}, \ - { 31, 7}, { 63, 8}, { 39, 9}, { 23, 8}, \ - { 51, 9}, { 31, 8}, { 67, 9}, { 39, 8}, \ - { 79, 9}, { 47, 8}, { 95,10}, { 31, 9}, \ - { 79,10}, { 47, 9}, { 95,11}, { 31,10}, \ - { 63, 9}, { 143,10}, { 79, 9}, { 167,10}, \ - { 95, 9}, { 191,10}, { 111,11}, { 63,10}, \ - { 143, 9}, { 287, 8}, { 575,10}, { 159, 9}, \ - { 319,11}, { 95,10}, { 191, 9}, { 383, 8}, \ - { 767,12}, { 63,11}, { 127,10}, { 255, 9}, \ - { 543, 8}, { 1087,10}, { 287, 9}, { 575, 8}, \ - { 1151,11}, { 159,10}, { 319, 9}, { 639, 8}, \ - { 1279,10}, { 335, 9}, { 671, 8}, { 1343,10}, \ - { 351, 9}, { 703, 8}, { 1407,11}, { 191,10}, \ - { 383, 9}, { 767,10}, { 399, 9}, { 799, 8}, \ - { 1599,10}, { 415, 9}, { 831, 8}, { 1663, 9}, \ - { 863,11}, { 223,10}, { 447, 9}, { 895,12}, \ - { 127,11}, { 255,10}, { 543, 9}, { 1087,11}, \ - { 287,10}, { 575, 9}, { 1151,10}, { 607, 9}, \ - { 1215, 8}, { 2431,11}, { 319,10}, { 671, 9}, \ - { 1343,11}, { 351,10}, { 703, 9}, { 1407,10}, \ - { 735,12}, { 191,11}, { 383,10}, { 799, 9}, \ - { 1599,11}, { 415,10}, { 831, 9}, { 1663,10}, \ - { 863, 9}, { 1727,11}, { 447,13}, { 127,12}, \ - { 255,11}, { 511,10}, { 1023,11}, { 543,10}, \ - { 1087, 9}, { 2175,10}, { 1119,11}, { 575,10}, \ - { 1151,11}, { 607,10}, { 1215, 9}, { 2431,12}, \ - { 319,11}, { 639,10}, { 1279,11}, { 671,10}, \ - { 1343, 9}, { 2687,11}, { 703,10}, { 1407,11}, \ - { 735,10}, { 1471, 9}, { 2943,12}, { 383,11}, \ - { 767,10}, { 1535,11}, { 799,10}, { 1599,11}, \ - { 831,10}, { 1663,11}, { 863,10}, { 1727,12}, \ - { 447,11}, { 895,10}, { 1791,11}, { 959,10}, \ - { 1919,11}, { 991,10}, { 1983,13}, { 255,12}, \ - { 511,11}, { 1023,10}, { 2111,11}, { 1087,12}, \ - { 575,11}, { 1151,10}, { 2303,11}, { 1215,10}, \ - { 2431,12}, { 639,11}, { 1343,10}, { 2687,12}, \ - { 703,11}, { 1407,10}, { 2815,11}, { 1471,10}, \ - { 2943,13}, { 383,12}, { 767,11}, { 1599,12}, \ - { 831,11}, { 1663,10}, { 3327,11}, { 1727,10}, \ - { 3455,12}, { 895,11}, { 1791,10}, { 3583,12}, \ - { 959,11}, { 1919,10}, { 3839,13}, { 511,12}, \ - { 1023,11}, { 2047,12}, { 1087,11}, { 2175,10}, \ - { 4351,11}, { 2239,12}, { 1151,11}, { 2303,12}, \ - { 1215,11}, { 2431,13}, { 639,12}, { 1343,11}, \ - { 2687,12}, { 1407,11}, { 2815,12}, { 1471,11}, \ - { 2943,13}, { 767,12}, { 1599,11}, { 3199,12}, \ - { 1663,11}, { 3327,12}, { 1727,11}, { 3455,13}, \ - { 895,12}, { 1791,11}, { 3583,12}, { 1919,11}, \ - { 3839,12}, { 1983,14}, { 511,13}, { 1023,12}, \ - { 2239,13}, { 1151,12}, { 2431,13}, { 1279,12}, \ - { 2687,13}, { 1407,12}, { 2943,14}, { 767,13}, \ - { 1535,12}, { 3071,13}, { 1663,12}, { 3455,13}, \ - { 1791,10}, { 14335,12}, { 3967,11}, { 7935,15}, \ - { 511,14}, { 1023,13}, { 2047,12}, { 4095,13}, \ - { 2175,12}, { 4351,13}, { 2431,14}, { 1279,13}, \ - { 2943,12}, { 5887,14}, { 16384,15}, { 32768,16} } -#define SQR_FFT_TABLE3_SIZE 248 -#define SQR_FFT_THRESHOLD 5760 - -#define MULLO_BASECASE_THRESHOLD 3 -#define MULLO_DC_THRESHOLD 34 -#define MULLO_MUL_N_THRESHOLD 13463 -#define SQRLO_BASECASE_THRESHOLD 6 -#define SQRLO_DC_THRESHOLD 134 -#define SQRLO_SQR_THRESHOLD 11278 - -#define DC_DIV_QR_THRESHOLD 47 -#define DC_DIVAPPR_Q_THRESHOLD 206 -#define DC_BDIV_QR_THRESHOLD 41 -#define DC_BDIV_Q_THRESHOLD 140 - -#define INV_MULMOD_BNM1_THRESHOLD 66 -#define INV_NEWTON_THRESHOLD 189 -#define INV_APPR_THRESHOLD 195 - -#define BINV_NEWTON_THRESHOLD 220 -#define REDC_1_TO_REDC_N_THRESHOLD 59 - -#define MU_DIV_QR_THRESHOLD 1528 -#define MU_DIVAPPR_Q_THRESHOLD 1442 -#define MUPI_DIV_QR_THRESHOLD 79 -#define MU_BDIV_QR_THRESHOLD 1258 -#define MU_BDIV_Q_THRESHOLD 1442 - -#define POWM_SEC_TABLE 1,16,114,452,1221,2577 - -#define GET_STR_DC_THRESHOLD 15 -#define GET_STR_PRECOMPUTE_THRESHOLD 31 -#define SET_STR_DC_THRESHOLD 274 -#define SET_STR_PRECOMPUTE_THRESHOLD 1100 - -#define FAC_DSC_THRESHOLD 360 -#define FAC_ODD_THRESHOLD 24 - -#define MATRIX22_STRASSEN_THRESHOLD 16 -#define HGCD_THRESHOLD 119 -#define HGCD_APPR_THRESHOLD 136 -#define HGCD_REDUCE_THRESHOLD 3389 -#define GCD_DC_THRESHOLD 443 -#define GCDEXT_DC_THRESHOLD 318 -#define JACOBI_BASE_METHOD 1 diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/invert_limb.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/invert_limb.asm deleted file mode 100644 index 31a867e68a48406fe3903921b898594a747b5d4a..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/invert_limb.asm +++ /dev/null @@ -1,194 +0,0 @@ -dnl x86 mpn_invert_limb - -dnl Contributed to the GNU project by Niels Möller - -dnl Copyright 2009, 2011, 2015 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles (approx) div -C P5 ? -C P6 model 0-8,10-12 ? -C P6 model 9 (Banias) ? -C P6 model 13 (Dothan) ? -C P4 model 0 (Willamette) ? -C P4 model 1 (?) ? -C P4 model 2 (Northwood) ? -C P4 model 3 (Prescott) ? -C P4 model 4 (Nocona) ? -C AMD K6 ? -C AMD K7 41 53 -C AMD K8 ? - -C TODO -C * These c/l numbers are for a non-PIC build. Consider falling back to using -C the 'div' instruction for PIC builds. -C * Perhaps use this file--or at least the algorithm--for more machines than k7. - -C Register usage: -C Input D in %edi -C Current approximation is in %eax and/or %ecx -C %ebx and %edx are temporaries -C %esi and %ebp are unused - -defframe(PARAM_DIVISOR,4) - -ASM_START() - -C Make approx_tab global to work around Apple relocation bug. -ifdef(`DARWIN',` - deflit(`approx_tab', MPN(invert_limb_tab)) - GLOBL approx_tab') - - TEXT - ALIGN(16) -PROLOGUE(mpn_invert_limb) -deflit(`FRAME', 0) - mov PARAM_DIVISOR, %eax - C Avoid push/pop on k7. - sub $8, %esp FRAME_subl_esp(8) - mov %ebx, (%esp) - mov %edi, 4(%esp) - - mov %eax, %edi - shr $22, %eax -ifdef(`PIC',` - LEAL( approx_tab, %ebx) - movzwl -1024(%ebx, %eax, 2), %eax -',` - movzwl -1024+approx_tab(%eax, %eax), %eax C %eax = v0 -') - - C v1 = (v0 << 4) - ((v0*v0*d_21) >> 32) - 1 - mov %eax, %ecx - imul %eax, %eax - mov %edi, %ebx - shr $11, %ebx - inc %ebx - mul %ebx - mov %edi, %ebx C Prepare - shr %ebx - sbb %eax, %eax - sub %eax, %ebx C %ebx = d_31, %eax = mask - shl $4, %ecx - dec %ecx - sub %edx, %ecx C %ecx = v1 - - C v_2 = (v1 << 15) + ((v1 *(2^48 - v1 * d31 + (v1 >> 1) & mask)) >> 33) - imul %ecx, %ebx - and %ecx, %eax - shr %eax - sub %ebx, %eax - mul %ecx - mov %edi, %eax C Prepare for next mul - shl $15, %ecx - shr %edx - add %edx, %ecx C %ecx = v2 - - mul %ecx - add %edi, %eax - mov %ecx, %eax - adc %edi, %edx - sub %edx, %eax C %eax = v3 - - mov (%esp), %ebx - mov 4(%esp), %edi - add $8, %esp - - ret - -EPILOGUE() - -DEF_OBJECT(approx_tab,2) - .value 0x7fe1,0x7fa1,0x7f61,0x7f22,0x7ee3,0x7ea4,0x7e65,0x7e27 - .value 0x7de9,0x7dab,0x7d6d,0x7d30,0x7cf3,0x7cb6,0x7c79,0x7c3d - .value 0x7c00,0x7bc4,0x7b89,0x7b4d,0x7b12,0x7ad7,0x7a9c,0x7a61 - .value 0x7a27,0x79ec,0x79b2,0x7979,0x793f,0x7906,0x78cc,0x7894 - .value 0x785b,0x7822,0x77ea,0x77b2,0x777a,0x7742,0x770b,0x76d3 - .value 0x769c,0x7665,0x762f,0x75f8,0x75c2,0x758c,0x7556,0x7520 - .value 0x74ea,0x74b5,0x7480,0x744b,0x7416,0x73e2,0x73ad,0x7379 - .value 0x7345,0x7311,0x72dd,0x72aa,0x7277,0x7243,0x7210,0x71de - .value 0x71ab,0x7179,0x7146,0x7114,0x70e2,0x70b1,0x707f,0x704e - .value 0x701c,0x6feb,0x6fba,0x6f8a,0x6f59,0x6f29,0x6ef9,0x6ec8 - .value 0x6e99,0x6e69,0x6e39,0x6e0a,0x6ddb,0x6dab,0x6d7d,0x6d4e - .value 0x6d1f,0x6cf1,0x6cc2,0x6c94,0x6c66,0x6c38,0x6c0a,0x6bdd - .value 0x6bb0,0x6b82,0x6b55,0x6b28,0x6afb,0x6acf,0x6aa2,0x6a76 - .value 0x6a49,0x6a1d,0x69f1,0x69c6,0x699a,0x696e,0x6943,0x6918 - .value 0x68ed,0x68c2,0x6897,0x686c,0x6842,0x6817,0x67ed,0x67c3 - .value 0x6799,0x676f,0x6745,0x671b,0x66f2,0x66c8,0x669f,0x6676 - .value 0x664d,0x6624,0x65fc,0x65d3,0x65aa,0x6582,0x655a,0x6532 - .value 0x650a,0x64e2,0x64ba,0x6493,0x646b,0x6444,0x641c,0x63f5 - .value 0x63ce,0x63a7,0x6381,0x635a,0x6333,0x630d,0x62e7,0x62c1 - .value 0x629a,0x6275,0x624f,0x6229,0x6203,0x61de,0x61b8,0x6193 - .value 0x616e,0x6149,0x6124,0x60ff,0x60da,0x60b6,0x6091,0x606d - .value 0x6049,0x6024,0x6000,0x5fdc,0x5fb8,0x5f95,0x5f71,0x5f4d - .value 0x5f2a,0x5f07,0x5ee3,0x5ec0,0x5e9d,0x5e7a,0x5e57,0x5e35 - .value 0x5e12,0x5def,0x5dcd,0x5dab,0x5d88,0x5d66,0x5d44,0x5d22 - .value 0x5d00,0x5cde,0x5cbd,0x5c9b,0x5c7a,0x5c58,0x5c37,0x5c16 - .value 0x5bf5,0x5bd4,0x5bb3,0x5b92,0x5b71,0x5b51,0x5b30,0x5b10 - .value 0x5aef,0x5acf,0x5aaf,0x5a8f,0x5a6f,0x5a4f,0x5a2f,0x5a0f - .value 0x59ef,0x59d0,0x59b0,0x5991,0x5972,0x5952,0x5933,0x5914 - .value 0x58f5,0x58d6,0x58b7,0x5899,0x587a,0x585b,0x583d,0x581f - .value 0x5800,0x57e2,0x57c4,0x57a6,0x5788,0x576a,0x574c,0x572e - .value 0x5711,0x56f3,0x56d5,0x56b8,0x569b,0x567d,0x5660,0x5643 - .value 0x5626,0x5609,0x55ec,0x55cf,0x55b2,0x5596,0x5579,0x555d - .value 0x5540,0x5524,0x5507,0x54eb,0x54cf,0x54b3,0x5497,0x547b - .value 0x545f,0x5443,0x5428,0x540c,0x53f0,0x53d5,0x53b9,0x539e - .value 0x5383,0x5368,0x534c,0x5331,0x5316,0x52fb,0x52e0,0x52c6 - .value 0x52ab,0x5290,0x5276,0x525b,0x5240,0x5226,0x520c,0x51f1 - .value 0x51d7,0x51bd,0x51a3,0x5189,0x516f,0x5155,0x513b,0x5121 - .value 0x5108,0x50ee,0x50d5,0x50bb,0x50a2,0x5088,0x506f,0x5056 - .value 0x503c,0x5023,0x500a,0x4ff1,0x4fd8,0x4fbf,0x4fa6,0x4f8e - .value 0x4f75,0x4f5c,0x4f44,0x4f2b,0x4f13,0x4efa,0x4ee2,0x4eca - .value 0x4eb1,0x4e99,0x4e81,0x4e69,0x4e51,0x4e39,0x4e21,0x4e09 - .value 0x4df1,0x4dda,0x4dc2,0x4daa,0x4d93,0x4d7b,0x4d64,0x4d4d - .value 0x4d35,0x4d1e,0x4d07,0x4cf0,0x4cd8,0x4cc1,0x4caa,0x4c93 - .value 0x4c7d,0x4c66,0x4c4f,0x4c38,0x4c21,0x4c0b,0x4bf4,0x4bde - .value 0x4bc7,0x4bb1,0x4b9a,0x4b84,0x4b6e,0x4b58,0x4b41,0x4b2b - .value 0x4b15,0x4aff,0x4ae9,0x4ad3,0x4abd,0x4aa8,0x4a92,0x4a7c - .value 0x4a66,0x4a51,0x4a3b,0x4a26,0x4a10,0x49fb,0x49e5,0x49d0 - .value 0x49bb,0x49a6,0x4990,0x497b,0x4966,0x4951,0x493c,0x4927 - .value 0x4912,0x48fe,0x48e9,0x48d4,0x48bf,0x48ab,0x4896,0x4881 - .value 0x486d,0x4858,0x4844,0x482f,0x481b,0x4807,0x47f3,0x47de - .value 0x47ca,0x47b6,0x47a2,0x478e,0x477a,0x4766,0x4752,0x473e - .value 0x472a,0x4717,0x4703,0x46ef,0x46db,0x46c8,0x46b4,0x46a1 - .value 0x468d,0x467a,0x4666,0x4653,0x4640,0x462c,0x4619,0x4606 - .value 0x45f3,0x45e0,0x45cd,0x45ba,0x45a7,0x4594,0x4581,0x456e - .value 0x455b,0x4548,0x4536,0x4523,0x4510,0x44fe,0x44eb,0x44d8 - .value 0x44c6,0x44b3,0x44a1,0x448f,0x447c,0x446a,0x4458,0x4445 - .value 0x4433,0x4421,0x440f,0x43fd,0x43eb,0x43d9,0x43c7,0x43b5 - .value 0x43a3,0x4391,0x437f,0x436d,0x435c,0x434a,0x4338,0x4327 - .value 0x4315,0x4303,0x42f2,0x42e0,0x42cf,0x42bd,0x42ac,0x429b - .value 0x4289,0x4278,0x4267,0x4256,0x4244,0x4233,0x4222,0x4211 - .value 0x4200,0x41ef,0x41de,0x41cd,0x41bc,0x41ab,0x419a,0x418a - .value 0x4179,0x4168,0x4157,0x4147,0x4136,0x4125,0x4115,0x4104 - .value 0x40f4,0x40e3,0x40d3,0x40c2,0x40b2,0x40a2,0x4091,0x4081 - .value 0x4071,0x4061,0x4050,0x4040,0x4030,0x4020,0x4010,0x4000 -END_OBJECT(approx_tab) -ASM_END() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/com.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/com.asm deleted file mode 100644 index a258c224f12829964794af652d3f1bcb4f089771..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/com.asm +++ /dev/null @@ -1,125 +0,0 @@ -dnl AMD Athlon mpn_com -- mpn bitwise one's complement. - -dnl Copyright 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K7: 1.0 cycles/limb - - -C void mpn_com (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C The loop form below is necessary for the claimed speed. It needs to be -C aligned to a 16 byte boundary and only 16 bytes long. Maybe that's so it -C fits in a BTB entry. The adjustments to %eax and %edx avoid offsets on -C the movq's and achieve the necessary size. -C -C If both src and dst are 4mod8, the loop runs at 1.5 c/l. So long as one -C of the two is 0mod8, it runs at 1.0 c/l. On that basis dst is checked -C (offset by the size, as per the loop addressing) and one high limb -C processed separately to get alignment. -C -C The padding for the nails case is unattractive, but shouldn't cost any -C cycles. Explicit .byte's guarantee the desired instructions, at a point -C where we're probably stalled waiting for loads anyway. -C -C Enhancements: -C -C The combination load/pxor/store might be able to be unrolled to approach -C 0.5 c/l if desired. - -defframe(PARAM_SIZE,12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - - TEXT - ALIGN(16) - -PROLOGUE(mpn_com) -deflit(`FRAME',0) - - movl PARAM_DST, %edx - movl PARAM_SIZE, %ecx - pcmpeqd %mm7, %mm7 - - leal (%edx,%ecx,4), %eax - andl $4, %eax -ifelse(GMP_NAIL_BITS,0,, -` psrld $GMP_NAIL_BITS, %mm7') C GMP_NUMB_MASK - - movl PARAM_SRC, %eax - movd -4(%eax,%ecx,4), %mm0 C src high limb - -ifelse(GMP_NAIL_BITS,0,, -` C padding for alignment below - .byte 0x8d, 0xb6, 0x00, 0x00, 0x00, 0x00 C lea 0(%esi),%esi - .byte 0x8d, 0xbf, 0x00, 0x00, 0x00, 0x00 C lea 0(%edi),%edi -') - - jz L(aligned) - - pxor %mm7, %mm0 - movd %mm0, -4(%edx,%ecx,4) C dst high limb - decl %ecx - jz L(done) -L(aligned): - - addl $4, %eax - addl $4, %edx - decl %ecx - jz L(one) - - C offset 0x30 for no nails, or 0x40 for nails - ALIGN(16) -L(top): - C eax src - C ebx - C ecx counter - C edx dst - - subl $2, %ecx - movq (%eax,%ecx,4), %mm0 - pxor %mm7, %mm0 - movq %mm0, (%edx,%ecx,4) - jg L(top) - - jnz L(done) C if size even - -L(one): - movd -4(%eax), %mm0 C src low limb - pxor %mm7, %mm0 - movd %mm0, -4(%edx) C dst low limb - -L(done): - emms - - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/copyd.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/copyd.asm deleted file mode 100644 index 59ece40920badac7b558b7f8a03c2eacbc5c5c3f..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/copyd.asm +++ /dev/null @@ -1,144 +0,0 @@ -dnl AMD K7 mpn_copyd -- copy limb vector, decrementing. - -dnl Copyright 1999, 2000, 2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C alignment dst/src, A=0mod8 N=4mod8 -C A/A A/N N/A N/N -C K7 0.75 1.0 1.0 0.75 - - -C void mpn_copyd (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C The various comments in mpn/x86/k7/copyi.asm apply here too. - -defframe(PARAM_SIZE,12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) -deflit(`FRAME',0) - -dnl parameter space reused -define(SAVE_EBX,`PARAM_SIZE') -define(SAVE_ESI,`PARAM_SRC') - -dnl minimum 5 since the unrolled code can't handle less than 5 -deflit(UNROLL_THRESHOLD, 5) - - TEXT - ALIGN(32) -PROLOGUE(mpn_copyd) - - movl PARAM_SIZE, %ecx - movl %ebx, SAVE_EBX - - movl PARAM_SRC, %eax - movl PARAM_DST, %edx - - cmpl $UNROLL_THRESHOLD, %ecx - jae L(unroll) - - orl %ecx, %ecx - jz L(simple_done) - -L(simple): - C eax src - C ebx scratch - C ecx counter - C edx dst - C - C this loop is 2 cycles/limb - - movl -4(%eax,%ecx,4), %ebx - movl %ebx, -4(%edx,%ecx,4) - decl %ecx - jnz L(simple) - -L(simple_done): - movl SAVE_EBX, %ebx - ret - - -L(unroll): - movl %esi, SAVE_ESI - leal (%eax,%ecx,4), %ebx - leal (%edx,%ecx,4), %esi - - andl %esi, %ebx - movl SAVE_ESI, %esi - subl $4, %ecx C size-4 - - testl $4, %ebx C testl to pad code closer to 16 bytes for L(top) - jz L(aligned) - - C both src and dst unaligned, process one limb to align them - movl 12(%eax,%ecx,4), %ebx - movl %ebx, 12(%edx,%ecx,4) - decl %ecx -L(aligned): - - - ALIGN(16) -L(top): - C eax src - C ebx - C ecx counter, limbs - C edx dst - - movq 8(%eax,%ecx,4), %mm0 - movq (%eax,%ecx,4), %mm1 - subl $4, %ecx - movq %mm0, 16+8(%edx,%ecx,4) - movq %mm1, 16(%edx,%ecx,4) - jns L(top) - - - C now %ecx is -4 to -1 representing respectively 0 to 3 limbs remaining - - testb $2, %cl - jz L(finish_not_two) - - movq 8(%eax,%ecx,4), %mm0 - movq %mm0, 8(%edx,%ecx,4) -L(finish_not_two): - - testb $1, %cl - jz L(done) - - movl (%eax), %ebx - movl %ebx, (%edx) - -L(done): - movl SAVE_EBX, %ebx - emms - ret - - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/copyi.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/copyi.asm deleted file mode 100644 index 9a28f927ec9fd036fc5f106a729d9c0cebef0b31..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/copyi.asm +++ /dev/null @@ -1,157 +0,0 @@ -dnl AMD K7 mpn_copyi -- copy limb vector, incrementing. - -dnl Copyright 1999, 2000, 2002, 2003 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C alignment dst/src, A=0mod8 N=4mod8 -C A/A A/N N/A N/N -C K7 0.75 1.0 1.0 0.75 - - -C void mpn_copyi (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C Copy src,size to dst,size. -C -C This code at 0.75 or 1.0 c/l is always faster than a plain rep movsl at -C 1.33 c/l. -C -C The K7 can do a 64-bit load and 64-bit store in one cycle (optimization -C guile 22007 appendix B), so 0.5 c/l should be possible, however nothing -C under 0.7 c/l is known. Apparently only two 32-bit stores can be done in -C one cycle, so perhaps some scheduling is needed to ensure it's a -C load+store in each cycle, not store+store. -C -C If both source and destination are unaligned then one limb is processed at -C the start to make them aligned and so get 0.75 c/l, whereas if they'd been -C used unaligned it would be 1.5 c/l. - -defframe(PARAM_SIZE,12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl parameter space reused -define(SAVE_EBX,`PARAM_SIZE') - -dnl minimum 5 since the unrolled code can't handle less than 5 -deflit(UNROLL_THRESHOLD, 5) - - TEXT - ALIGN(32) -PROLOGUE(mpn_copyi) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - movl %ebx, SAVE_EBX - - movl PARAM_SRC, %eax - movl PARAM_DST, %edx - - cmpl $UNROLL_THRESHOLD, %ecx - jae L(unroll) - - orl %ecx, %ecx - jz L(simple_done) - -L(simple): - C eax src, incrementing - C ebx scratch - C ecx counter - C edx dst, incrementing - C - C this loop is 2 cycles/limb - - movl (%eax), %ebx - movl %ebx, (%edx) - decl %ecx - leal 4(%eax), %eax - leal 4(%edx), %edx - jnz L(simple) - -L(simple_done): - movl SAVE_EBX, %ebx - ret - - -L(unroll): - movl %eax, %ebx - leal -12(%eax,%ecx,4), %eax C src end - 12 - subl $3, %ecx C size-3 - - andl %edx, %ebx - leal (%edx,%ecx,4), %edx C dst end - 12 - negl %ecx - - testl $4, %ebx C testl to pad code closer to 16 bytes for L(top) - jz L(aligned) - - C both src and dst unaligned, process one limb to align them - movl (%eax,%ecx,4), %ebx - movl %ebx, (%edx,%ecx,4) - incl %ecx -L(aligned): - - - ALIGN(16) -L(top): - C eax src end - 12 - C ebx - C ecx counter, negative, limbs - C edx dst end - 12 - - movq (%eax,%ecx,4), %mm0 - movq 8(%eax,%ecx,4), %mm1 - addl $4, %ecx - movq %mm0, -16(%edx,%ecx,4) - movq %mm1, -16+8(%edx,%ecx,4) - ja L(top) C jump no carry and not zero - - - C now %ecx is 0 to 3 representing respectively 3 to 0 limbs remaining - - testb $2, %cl - jnz L(finish_not_two) - - movq (%eax,%ecx,4), %mm0 - movq %mm0, (%edx,%ecx,4) -L(finish_not_two): - - testb $1, %cl - jnz L(done) - - movl 8(%eax), %ebx - movl %ebx, 8(%edx) - -L(done): - movl SAVE_EBX, %ebx - emms - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/divrem_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/divrem_1.asm deleted file mode 100644 index cf343280bbda65594c4dc7a69b5469d457b2b95d..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/divrem_1.asm +++ /dev/null @@ -1,832 +0,0 @@ -dnl AMD K7 mpn_divrem_1, mpn_divrem_1c, mpn_preinv_divrem_1 -- mpn by limb -dnl division. - -dnl Copyright 1999-2002, 2004 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K7: 17.0 cycles/limb integer part, 15.0 cycles/limb fraction part. - - -C mp_limb_t mpn_divrem_1 (mp_ptr dst, mp_size_t xsize, -C mp_srcptr src, mp_size_t size, -C mp_limb_t divisor); -C mp_limb_t mpn_divrem_1c (mp_ptr dst, mp_size_t xsize, -C mp_srcptr src, mp_size_t size, -C mp_limb_t divisor, mp_limb_t carry); -C mp_limb_t mpn_preinv_divrem_1 (mp_ptr dst, mp_size_t xsize, -C mp_srcptr src, mp_size_t size, -C mp_limb_t divisor, mp_limb_t inverse, -C unsigned shift); -C -C Algorithm: -C -C The method and nomenclature follow part 8 of "Division by Invariant -C Integers using Multiplication" by Granlund and Montgomery, reference in -C gmp.texi. -C -C The "and"s shown in the paper are done here with "cmov"s. "m" is written -C for m', and "d" for d_norm, which won't cause any confusion since it's -C only the normalized divisor that's of any use in the code. "b" is written -C for 2^N, the size of a limb, N being 32 here. -C -C The step "sdword dr = n - 2^N*d + (2^N-1-q1) * d" is instead done as -C "n-(q1+1)*d"; this rearrangement gives the same two-limb answer. If -C q1==0xFFFFFFFF, then q1+1 would overflow. We branch to a special case -C "q1_ff" if this occurs. Since the true quotient is either q1 or q1+1 then -C if q1==0xFFFFFFFF that must be the right value. -C -C For the last and second last steps q1==0xFFFFFFFF is instead handled by an -C sbbl to go back to 0xFFFFFFFF if an overflow occurs when adding 1. This -C then goes through as normal, and finding no addback required. sbbl costs -C an extra cycle over what the main loop code does, but it keeps code size -C and complexity down. -C -C Notes: -C -C mpn_divrem_1 and mpn_preinv_divrem_1 avoid one division if the src high -C limb is less than the divisor. mpn_divrem_1c doesn't check for a zero -C carry, since in normal circumstances that will be a very rare event. -C -C The test for skipping a division is branch free (once size>=1 is tested). -C The store to the destination high limb is 0 when a divide is skipped, or -C if it's not skipped then a copy of the src high limb is used. The latter -C is in case src==dst. -C -C There's a small bias towards expecting xsize==0, by having code for -C xsize==0 in a straight line and xsize!=0 under forward jumps. -C -C Alternatives: -C -C If the divisor is normalized (high bit set) then a division step can -C always be skipped, since the high destination limb is always 0 or 1 in -C that case. It doesn't seem worth checking for this though, since it -C probably occurs infrequently, in particular note that big_base for a -C decimal mpn_get_str is not normalized in a 32-bit limb. - - -dnl MUL_THRESHOLD is the value of xsize+size at which the multiply by -dnl inverse method is used, rather than plain "divl"s. Minimum value 1. -dnl -dnl The inverse takes about 50 cycles to calculate, but after that the -dnl multiply is 17 c/l versus division at 42 c/l. -dnl -dnl At 3 limbs the mul is a touch faster than div on the integer part, and -dnl even more so on the fractional part. - -deflit(MUL_THRESHOLD, 3) - - -defframe(PARAM_PREINV_SHIFT, 28) dnl mpn_preinv_divrem_1 -defframe(PARAM_PREINV_INVERSE, 24) dnl mpn_preinv_divrem_1 -defframe(PARAM_CARRY, 24) dnl mpn_divrem_1c -defframe(PARAM_DIVISOR,20) -defframe(PARAM_SIZE, 16) -defframe(PARAM_SRC, 12) -defframe(PARAM_XSIZE, 8) -defframe(PARAM_DST, 4) - -defframe(SAVE_EBX, -4) -defframe(SAVE_ESI, -8) -defframe(SAVE_EDI, -12) -defframe(SAVE_EBP, -16) - -defframe(VAR_NORM, -20) -defframe(VAR_INVERSE, -24) -defframe(VAR_SRC, -28) -defframe(VAR_DST, -32) -defframe(VAR_DST_STOP,-36) - -deflit(STACK_SPACE, 36) - - TEXT - ALIGN(32) - -PROLOGUE(mpn_preinv_divrem_1) -deflit(`FRAME',0) - movl PARAM_XSIZE, %ecx - movl PARAM_DST, %edx - subl $STACK_SPACE, %esp FRAME_subl_esp(STACK_SPACE) - - movl %esi, SAVE_ESI - movl PARAM_SRC, %esi - - movl %ebx, SAVE_EBX - movl PARAM_SIZE, %ebx - - leal 8(%edx,%ecx,4), %edx C &dst[xsize+2] - movl %ebp, SAVE_EBP - movl PARAM_DIVISOR, %ebp - - movl %edx, VAR_DST_STOP C &dst[xsize+2] - movl %edi, SAVE_EDI - xorl %edi, %edi C carry - - movl -4(%esi,%ebx,4), %eax C src high limb - xor %ecx, %ecx - - C - - C - - cmpl %ebp, %eax C high cmp divisor - - cmovc( %eax, %edi) C high is carry if high<divisor - cmovnc( %eax, %ecx) C 0 if skip div, src high if not - C (the latter in case src==dst) - - movl %ecx, -12(%edx,%ebx,4) C dst high limb - sbbl $0, %ebx C skip one division if high<divisor - movl PARAM_PREINV_SHIFT, %ecx - - leal -8(%edx,%ebx,4), %edx C &dst[xsize+size] - movl $32, %eax - - movl %edx, VAR_DST C &dst[xsize+size] - - shll %cl, %ebp C d normalized - subl %ecx, %eax - movl %ecx, VAR_NORM - - movd %eax, %mm7 C rshift - movl PARAM_PREINV_INVERSE, %eax - jmp L(start_preinv) - -EPILOGUE() - - - ALIGN(16) - -PROLOGUE(mpn_divrem_1c) -deflit(`FRAME',0) - movl PARAM_CARRY, %edx - movl PARAM_SIZE, %ecx - subl $STACK_SPACE, %esp -deflit(`FRAME',STACK_SPACE) - - movl %ebx, SAVE_EBX - movl PARAM_XSIZE, %ebx - - movl %edi, SAVE_EDI - movl PARAM_DST, %edi - - movl %ebp, SAVE_EBP - movl PARAM_DIVISOR, %ebp - - movl %esi, SAVE_ESI - movl PARAM_SRC, %esi - - leal -4(%edi,%ebx,4), %edi C &dst[xsize-1] - jmp L(start_1c) - -EPILOGUE() - - - C offset 0xa1, close enough to aligned -PROLOGUE(mpn_divrem_1) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - movl $0, %edx C initial carry (if can't skip a div) - subl $STACK_SPACE, %esp -deflit(`FRAME',STACK_SPACE) - - movl %esi, SAVE_ESI - movl PARAM_SRC, %esi - - movl %ebx, SAVE_EBX - movl PARAM_XSIZE, %ebx - - movl %ebp, SAVE_EBP - movl PARAM_DIVISOR, %ebp - orl %ecx, %ecx C size - - movl %edi, SAVE_EDI - movl PARAM_DST, %edi - leal -4(%edi,%ebx,4), %edi C &dst[xsize-1] - - jz L(no_skip_div) C if size==0 - movl -4(%esi,%ecx,4), %eax C src high limb - xorl %esi, %esi - - cmpl %ebp, %eax C high cmp divisor - - cmovc( %eax, %edx) C high is carry if high<divisor - cmovnc( %eax, %esi) C 0 if skip div, src high if not - - movl %esi, (%edi,%ecx,4) C dst high limb - sbbl $0, %ecx C size-1 if high<divisor - movl PARAM_SRC, %esi C reload -L(no_skip_div): - - -L(start_1c): - C eax - C ebx xsize - C ecx size - C edx carry - C esi src - C edi &dst[xsize-1] - C ebp divisor - - leal (%ebx,%ecx), %eax C size+xsize - cmpl $MUL_THRESHOLD, %eax - jae L(mul_by_inverse) - - -C With MUL_THRESHOLD set to 3, the simple loops here only do 0 to 2 limbs. -C It'd be possible to write them out without the looping, but no speedup -C would be expected. -C -C Using PARAM_DIVISOR instead of %ebp measures 1 cycle/loop faster on the -C integer part, but curiously not on the fractional part, where %ebp is a -C (fixed) couple of cycles faster. - - orl %ecx, %ecx - jz L(divide_no_integer) - -L(divide_integer): - C eax scratch (quotient) - C ebx xsize - C ecx counter - C edx scratch (remainder) - C esi src - C edi &dst[xsize-1] - C ebp divisor - - movl -4(%esi,%ecx,4), %eax - - divl PARAM_DIVISOR - - movl %eax, (%edi,%ecx,4) - decl %ecx - jnz L(divide_integer) - - -L(divide_no_integer): - movl PARAM_DST, %edi - orl %ebx, %ebx - jnz L(divide_fraction) - -L(divide_done): - movl SAVE_ESI, %esi - movl SAVE_EDI, %edi - movl %edx, %eax - - movl SAVE_EBX, %ebx - movl SAVE_EBP, %ebp - addl $STACK_SPACE, %esp - - ret - - -L(divide_fraction): - C eax scratch (quotient) - C ebx counter - C ecx - C edx scratch (remainder) - C esi - C edi dst - C ebp divisor - - movl $0, %eax - - divl %ebp - - movl %eax, -4(%edi,%ebx,4) - decl %ebx - jnz L(divide_fraction) - - jmp L(divide_done) - - - -C ----------------------------------------------------------------------------- - -L(mul_by_inverse): - C eax - C ebx xsize - C ecx size - C edx carry - C esi src - C edi &dst[xsize-1] - C ebp divisor - - bsrl %ebp, %eax C 31-l - - leal 12(%edi), %ebx C &dst[xsize+2], loop dst stop - leal 4(%edi,%ecx,4), %edi C &dst[xsize+size] - - movl %edi, VAR_DST - movl %ebx, VAR_DST_STOP - - movl %ecx, %ebx C size - movl $31, %ecx - - movl %edx, %edi C carry - movl $-1, %edx - - C - - xorl %eax, %ecx C l - incl %eax C 32-l - - shll %cl, %ebp C d normalized - movl %ecx, VAR_NORM - - movd %eax, %mm7 - - movl $-1, %eax - subl %ebp, %edx C (b-d)-1 giving edx:eax = b*(b-d)-1 - - divl %ebp C floor (b*(b-d)-1) / d - -L(start_preinv): - C eax inverse - C ebx size - C ecx shift - C edx - C esi src - C edi carry - C ebp divisor - C - C mm7 rshift - - orl %ebx, %ebx C size - movl %eax, VAR_INVERSE - leal -12(%esi,%ebx,4), %eax C &src[size-3] - - jz L(start_zero) - movl %eax, VAR_SRC - cmpl $1, %ebx - - movl 8(%eax), %esi C src high limb - jz L(start_one) - -L(start_two_or_more): - movl 4(%eax), %edx C src second highest limb - - shldl( %cl, %esi, %edi) C n2 = carry,high << l - - shldl( %cl, %edx, %esi) C n10 = high,second << l - - cmpl $2, %ebx - je L(integer_two_left) - jmp L(integer_top) - - -L(start_one): - shldl( %cl, %esi, %edi) C n2 = carry,high << l - - shll %cl, %esi C n10 = high << l - movl %eax, VAR_SRC - jmp L(integer_one_left) - - -L(start_zero): - C Can be here with xsize==0 if mpn_preinv_divrem_1 had size==1 and - C skipped a division. - - shll %cl, %edi C n2 = carry << l - movl %edi, %eax C return value for zero_done - cmpl $0, PARAM_XSIZE - - je L(zero_done) - jmp L(fraction_some) - - - -C ----------------------------------------------------------------------------- -C -C The multiply by inverse loop is 17 cycles, and relies on some out-of-order -C execution. The instruction scheduling is important, with various -C apparently equivalent forms running 1 to 5 cycles slower. -C -C A lower bound for the time would seem to be 16 cycles, based on the -C following successive dependencies. -C -C cycles -C n2+n1 1 -C mul 6 -C q1+1 1 -C mul 6 -C sub 1 -C addback 1 -C --- -C 16 -C -C This chain is what the loop has already, but 16 cycles isn't achieved. -C K7 has enough decode, and probably enough execute (depending maybe on what -C a mul actually consumes), but nothing running under 17 has been found. -C -C In theory n2+n1 could be done in the sub and addback stages (by -C calculating both n2 and n2+n1 there), but lack of registers makes this an -C unlikely proposition. -C -C The jz in the loop keeps the q1+1 stage to 1 cycle. Handling an overflow -C from q1+1 with an "sbbl $0, %ebx" would add a cycle to the dependent -C chain, and nothing better than 18 cycles has been found when using it. -C The jump is taken only when q1 is 0xFFFFFFFF, and on random data this will -C be an extremely rare event. -C -C Branch mispredictions will hit random occurrences of q1==0xFFFFFFFF, but -C if some special data is coming out with this always, the q1_ff special -C case actually runs at 15 c/l. 0x2FFF...FFFD divided by 3 is a good way to -C induce the q1_ff case, for speed measurements or testing. Note that -C 0xFFF...FFF divided by 1 or 2 doesn't induce it. -C -C The instruction groupings and empty comments show the cycles for a naive -C in-order view of the code (conveniently ignoring the load latency on -C VAR_INVERSE). This shows some of where the time is going, but is nonsense -C to the extent that out-of-order execution rearranges it. In this case -C there's 19 cycles shown, but it executes at 17. - - ALIGN(16) -L(integer_top): - C eax scratch - C ebx scratch (nadj, q1) - C ecx scratch (src, dst) - C edx scratch - C esi n10 - C edi n2 - C ebp divisor - C - C mm0 scratch (src qword) - C mm7 rshift for normalization - - cmpl $0x80000000, %esi C n1 as 0=c, 1=nc - movl %edi, %eax C n2 - movl VAR_SRC, %ecx - - leal (%ebp,%esi), %ebx - cmovc( %esi, %ebx) C nadj = n10 + (-n1 & d), ignoring overflow - sbbl $-1, %eax C n2+n1 - - mull VAR_INVERSE C m*(n2+n1) - - movq (%ecx), %mm0 C next limb and the one below it - subl $4, %ecx - - movl %ecx, VAR_SRC - - C - - addl %ebx, %eax C m*(n2+n1) + nadj, low giving carry flag - leal 1(%edi), %ebx C n2+1 - movl %ebp, %eax C d - - C - - adcl %edx, %ebx C 1 + high(n2<<32 + m*(n2+n1) + nadj) = q1+1 - jz L(q1_ff) - movl VAR_DST, %ecx - - mull %ebx C (q1+1)*d - - psrlq %mm7, %mm0 - - leal -4(%ecx), %ecx - - C - - subl %eax, %esi - movl VAR_DST_STOP, %eax - - C - - sbbl %edx, %edi C n - (q1+1)*d - movl %esi, %edi C remainder -> n2 - leal (%ebp,%esi), %edx - - movd %mm0, %esi - - cmovc( %edx, %edi) C n - q1*d if underflow from using q1+1 - sbbl $0, %ebx C q - cmpl %eax, %ecx - - movl %ebx, (%ecx) - movl %ecx, VAR_DST - jne L(integer_top) - - -L(integer_loop_done): - - -C ----------------------------------------------------------------------------- -C -C Here, and in integer_one_left below, an sbbl $0 is used rather than a jz -C q1_ff special case. This make the code a bit smaller and simpler, and -C costs only 1 cycle (each). - -L(integer_two_left): - C eax scratch - C ebx scratch (nadj, q1) - C ecx scratch (src, dst) - C edx scratch - C esi n10 - C edi n2 - C ebp divisor - C - C mm7 rshift - - cmpl $0x80000000, %esi C n1 as 0=c, 1=nc - movl %edi, %eax C n2 - movl PARAM_SRC, %ecx - - leal (%ebp,%esi), %ebx - cmovc( %esi, %ebx) C nadj = n10 + (-n1 & d), ignoring overflow - sbbl $-1, %eax C n2+n1 - - mull VAR_INVERSE C m*(n2+n1) - - movd (%ecx), %mm0 C src low limb - - movl VAR_DST_STOP, %ecx - - C - - addl %ebx, %eax C m*(n2+n1) + nadj, low giving carry flag - leal 1(%edi), %ebx C n2+1 - movl %ebp, %eax C d - - adcl %edx, %ebx C 1 + high(n2<<32 + m*(n2+n1) + nadj) = q1+1 - - sbbl $0, %ebx - - mull %ebx C (q1+1)*d - - psllq $32, %mm0 - - psrlq %mm7, %mm0 - - C - - subl %eax, %esi - - C - - sbbl %edx, %edi C n - (q1+1)*d - movl %esi, %edi C remainder -> n2 - leal (%ebp,%esi), %edx - - movd %mm0, %esi - - cmovc( %edx, %edi) C n - q1*d if underflow from using q1+1 - sbbl $0, %ebx C q - - movl %ebx, -4(%ecx) - - -C ----------------------------------------------------------------------------- -L(integer_one_left): - C eax scratch - C ebx scratch (nadj, q1) - C ecx dst - C edx scratch - C esi n10 - C edi n2 - C ebp divisor - C - C mm7 rshift - - movl VAR_DST_STOP, %ecx - cmpl $0x80000000, %esi C n1 as 0=c, 1=nc - movl %edi, %eax C n2 - - leal (%ebp,%esi), %ebx - cmovc( %esi, %ebx) C nadj = n10 + (-n1 & d), ignoring overflow - sbbl $-1, %eax C n2+n1 - - mull VAR_INVERSE C m*(n2+n1) - - C - - C - - C - - addl %ebx, %eax C m*(n2+n1) + nadj, low giving carry flag - leal 1(%edi), %ebx C n2+1 - movl %ebp, %eax C d - - C - - adcl %edx, %ebx C 1 + high(n2<<32 + m*(n2+n1) + nadj) = q1+1 - - sbbl $0, %ebx C q1 if q1+1 overflowed - - mull %ebx - - C - - C - - C - - subl %eax, %esi - - C - - sbbl %edx, %edi C n - (q1+1)*d - movl %esi, %edi C remainder -> n2 - leal (%ebp,%esi), %edx - - cmovc( %edx, %edi) C n - q1*d if underflow from using q1+1 - sbbl $0, %ebx C q - - movl %ebx, -8(%ecx) - subl $8, %ecx - - - -L(integer_none): - cmpl $0, PARAM_XSIZE - jne L(fraction_some) - - movl %edi, %eax -L(fraction_done): - movl VAR_NORM, %ecx -L(zero_done): - movl SAVE_EBP, %ebp - - movl SAVE_EDI, %edi - movl SAVE_ESI, %esi - - movl SAVE_EBX, %ebx - addl $STACK_SPACE, %esp - - shrl %cl, %eax - emms - - ret - - -C ----------------------------------------------------------------------------- -C -C Special case for q1=0xFFFFFFFF, giving q=0xFFFFFFFF meaning the low dword -C of q*d is simply -d and the remainder n-q*d = n10+d - -L(q1_ff): - C eax (divisor) - C ebx (q1+1 == 0) - C ecx - C edx - C esi n10 - C edi n2 - C ebp divisor - - movl VAR_DST, %ecx - movl VAR_DST_STOP, %edx - subl $4, %ecx - - psrlq %mm7, %mm0 - leal (%ebp,%esi), %edi C n-q*d remainder -> next n2 - movl %ecx, VAR_DST - - movd %mm0, %esi C next n10 - - movl $-1, (%ecx) - cmpl %ecx, %edx - jne L(integer_top) - - jmp L(integer_loop_done) - - - -C ----------------------------------------------------------------------------- -C -C Being the fractional part, the "source" limbs are all zero, meaning -C n10=0, n1=0, and hence nadj=0, leading to many instructions eliminated. -C -C The loop runs at 15 cycles. The dependent chain is the same as the -C general case above, but without the n2+n1 stage (due to n1==0), so 15 -C would seem to be the lower bound. -C -C A not entirely obvious simplification is that q1+1 never overflows a limb, -C and so there's no need for the sbbl $0 or jz q1_ff from the general case. -C q1 is the high word of m*n2+b*n2 and the following shows q1<=b-2 always. -C rnd() means rounding down to a multiple of d. -C -C m*n2 + b*n2 <= m*(d-1) + b*(d-1) -C = m*d + b*d - m - b -C = floor((b(b-d)-1)/d)*d + b*d - m - b -C = rnd(b(b-d)-1) + b*d - m - b -C = rnd(b(b-d)-1 + b*d) - m - b -C = rnd(b*b-1) - m - b -C <= (b-2)*b -C -C Unchanged from the general case is that the final quotient limb q can be -C either q1 or q1+1, and the q1+1 case occurs often. This can be seen from -C equation 8.4 of the paper which simplifies as follows when n1==0 and -C n0==0. -C -C n-q1*d = (n2*k+q0*d)/b <= d + (d*d-2d)/b -C -C As before, the instruction groupings and empty comments show a naive -C in-order view of the code, which is made a nonsense by out of order -C execution. There's 17 cycles shown, but it executes at 15. -C -C Rotating the store q and remainder->n2 instructions up to the top of the -C loop gets the run time down from 16 to 15. - - ALIGN(16) -L(fraction_some): - C eax - C ebx - C ecx - C edx - C esi - C edi carry - C ebp divisor - - movl PARAM_DST, %esi - movl VAR_DST_STOP, %ecx C &dst[xsize+2] - movl %edi, %eax - - subl $8, %ecx C &dst[xsize] - jmp L(fraction_entry) - - - ALIGN(16) -L(fraction_top): - C eax n2 carry, then scratch - C ebx scratch (nadj, q1) - C ecx dst, decrementing - C edx scratch - C esi dst stop point - C edi (will be n2) - C ebp divisor - - movl %ebx, (%ecx) C previous q - movl %eax, %edi C remainder->n2 - -L(fraction_entry): - mull VAR_INVERSE C m*n2 - - movl %ebp, %eax C d - subl $4, %ecx C dst - leal 1(%edi), %ebx - - C - - C - - C - - C - - addl %edx, %ebx C 1 + high(n2<<32 + m*n2) = q1+1 - - mull %ebx C (q1+1)*d - - C - - C - - C - - negl %eax C low of n - (q1+1)*d - - C - - sbbl %edx, %edi C high of n - (q1+1)*d, caring only about carry - leal (%ebp,%eax), %edx - - cmovc( %edx, %eax) C n - q1*d if underflow from using q1+1 - sbbl $0, %ebx C q - cmpl %esi, %ecx - - jne L(fraction_top) - - - movl %ebx, (%ecx) - jmp L(fraction_done) - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/lshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/lshift.asm deleted file mode 100644 index b3383cf2c30011548d0635f6ebe580d51c50099c..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/lshift.asm +++ /dev/null @@ -1,481 +0,0 @@ -dnl AMD K7 mpn_lshift -- mpn left shift. - -dnl Copyright 1999-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K7: 1.21 cycles/limb (at 16 limbs/loop). - - - -dnl K7: UNROLL_COUNT cycles/limb -dnl 4 1.51 -dnl 8 1.26 -dnl 16 1.21 -dnl 32 1.2 -dnl Maximum possible with the current code is 64. - -deflit(UNROLL_COUNT, 16) - - -C mp_limb_t mpn_lshift (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned shift); -C -C Shift src,size left by shift many bits and store the result in dst,size. -C Zeros are shifted in at the right. The bits shifted out at the left are -C the return value. -C -C The comments in mpn_rshift apply here too. - -ifdef(`PIC',` -deflit(UNROLL_THRESHOLD, 10) -',` -deflit(UNROLL_THRESHOLD, 10) -') - -defframe(PARAM_SHIFT,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -defframe(SAVE_EDI, -4) -defframe(SAVE_ESI, -8) -defframe(SAVE_EBX, -12) -deflit(SAVE_SIZE, 12) - - TEXT - ALIGN(32) - -PROLOGUE(mpn_lshift) -deflit(`FRAME',0) - - movl PARAM_SIZE, %eax - movl PARAM_SRC, %edx - subl $SAVE_SIZE, %esp -deflit(`FRAME',SAVE_SIZE) - - movl PARAM_SHIFT, %ecx - movl %edi, SAVE_EDI - - movl PARAM_DST, %edi - decl %eax - jnz L(more_than_one_limb) - - movl (%edx), %edx - - shldl( %cl, %edx, %eax) C eax was decremented to zero - - shll %cl, %edx - - movl %edx, (%edi) - movl SAVE_EDI, %edi - addl $SAVE_SIZE, %esp - - ret - - -C ----------------------------------------------------------------------------- -L(more_than_one_limb): - C eax size-1 - C ebx - C ecx shift - C edx src - C esi - C edi dst - C ebp - - movd PARAM_SHIFT, %mm6 - movd (%edx,%eax,4), %mm5 C src high limb - cmp $UNROLL_THRESHOLD-1, %eax - - jae L(unroll) - negl %ecx - movd (%edx), %mm4 C src low limb - - addl $32, %ecx - - movd %ecx, %mm7 - -L(simple_top): - C eax loop counter, limbs - C ebx - C ecx - C edx src - C esi - C edi dst - C ebp - C - C mm0 scratch - C mm4 src low limb - C mm5 src high limb - C mm6 shift - C mm7 32-shift - - movq -4(%edx,%eax,4), %mm0 - decl %eax - - psrlq %mm7, %mm0 - - movd %mm0, 4(%edi,%eax,4) - jnz L(simple_top) - - - psllq %mm6, %mm5 - psllq %mm6, %mm4 - - psrlq $32, %mm5 - movd %mm4, (%edi) C dst low limb - - movd %mm5, %eax C return value - - movl SAVE_EDI, %edi - addl $SAVE_SIZE, %esp - emms - - ret - - -C ----------------------------------------------------------------------------- - ALIGN(16) -L(unroll): - C eax size-1 - C ebx (saved) - C ecx shift - C edx src - C esi - C edi dst - C ebp - C - C mm5 src high limb, for return value - C mm6 lshift - - movl %esi, SAVE_ESI - movl %ebx, SAVE_EBX - leal -4(%edx,%eax,4), %edx C &src[size-2] - - testb $4, %dl - movq (%edx), %mm1 C src high qword - - jz L(start_src_aligned) - - - C src isn't aligned, process high limb (marked xxx) separately to - C make it so - C - C source -4(edx,%eax,4) - C | - C +-------+-------+-------+-- - C | xxx | - C +-------+-------+-------+-- - C 0mod8 4mod8 0mod8 - C - C dest -4(edi,%eax,4) - C | - C +-------+-------+-- - C | xxx | | - C +-------+-------+-- - - psllq %mm6, %mm1 - subl $4, %edx - movl %eax, PARAM_SIZE C size-1 - - psrlq $32, %mm1 - decl %eax C size-2 is new size-1 - - movd %mm1, 4(%edi,%eax,4) - movq (%edx), %mm1 C new src high qword -L(start_src_aligned): - - - leal -4(%edi,%eax,4), %edi C &dst[size-2] - psllq %mm6, %mm5 - - testl $4, %edi - psrlq $32, %mm5 C return value - - jz L(start_dst_aligned) - - - C dst isn't aligned, subtract 4 bytes to make it so, and pretend the - C shift is 32 bits extra. High limb of dst (marked xxx) handled - C here separately. - C - C source %edx - C +-------+-------+-- - C | mm1 | - C +-------+-------+-- - C 0mod8 4mod8 - C - C dest %edi - C +-------+-------+-------+-- - C | xxx | - C +-------+-------+-------+-- - C 0mod8 4mod8 0mod8 - - movq %mm1, %mm0 - psllq %mm6, %mm1 - addl $32, %ecx C shift+32 - - psrlq $32, %mm1 - - movd %mm1, 4(%edi) - movq %mm0, %mm1 - subl $4, %edi - - movd %ecx, %mm6 C new lshift -L(start_dst_aligned): - - decl %eax C size-2, two last limbs handled at end - movq %mm1, %mm2 C copy of src high qword - negl %ecx - - andl $-2, %eax C round size down to even - addl $64, %ecx - - movl %eax, %ebx - negl %eax - - andl $UNROLL_MASK, %eax - decl %ebx - - shll %eax - - movd %ecx, %mm7 C rshift = 64-lshift - -ifdef(`PIC',` - call L(pic_calc) -L(here): -',` - leal L(entry) (%eax,%eax,4), %esi -') - shrl $UNROLL_LOG2, %ebx C loop counter - - leal ifelse(UNROLL_BYTES,256,128) -8(%edx,%eax,2), %edx - leal ifelse(UNROLL_BYTES,256,128) (%edi,%eax,2), %edi - movl PARAM_SIZE, %eax C for use at end - jmp *%esi - - -ifdef(`PIC',` -L(pic_calc): - C See mpn/x86/README about old gas bugs - leal (%eax,%eax,4), %esi - addl $L(entry)-L(here), %esi - addl (%esp), %esi - - ret_internal -') - - -C ----------------------------------------------------------------------------- - ALIGN(32) -L(top): - C eax size (for use at end) - C ebx loop counter - C ecx rshift - C edx src - C esi computed jump - C edi dst - C ebp - C - C mm0 scratch - C mm1 \ carry (alternating, mm2 first) - C mm2 / - C mm6 lshift - C mm7 rshift - C - C 10 code bytes/limb - C - C The two chunks differ in whether mm1 or mm2 hold the carry. - C The computed jump puts the initial carry in both mm1 and mm2. - -L(entry): -deflit(CHUNK_COUNT, 4) -forloop(i, 0, UNROLL_COUNT/CHUNK_COUNT-1, ` - deflit(`disp0', eval(-i*CHUNK_COUNT*4 ifelse(UNROLL_BYTES,256,-128))) - deflit(`disp1', eval(disp0 - 8)) - -Zdisp( movq, disp0,(%edx), %mm0) - psllq %mm6, %mm2 - - movq %mm0, %mm1 - psrlq %mm7, %mm0 - - por %mm2, %mm0 -Zdisp( movq, %mm0, disp0,(%edi)) - - -Zdisp( movq, disp1,(%edx), %mm0) - psllq %mm6, %mm1 - - movq %mm0, %mm2 - psrlq %mm7, %mm0 - - por %mm1, %mm0 -Zdisp( movq, %mm0, disp1,(%edi)) -') - - subl $UNROLL_BYTES, %edx - subl $UNROLL_BYTES, %edi - decl %ebx - - jns L(top) - - - -define(`disp', `m4_empty_if_zero(eval($1 ifelse(UNROLL_BYTES,256,-128)))') - -L(end): - testb $1, %al - movl SAVE_EBX, %ebx - psllq %mm6, %mm2 C wanted left shifted in all cases below - - movd %mm5, %eax - - movl SAVE_ESI, %esi - jz L(end_even) - - -L(end_odd): - - C Size odd, destination was aligned. - C - C source edx+8 edx+4 - C --+---------------+-------+ - C | mm2 | | - C --+---------------+-------+ - C - C dest edi - C --+---------------+---------------+-------+ - C | written | | | - C --+---------------+---------------+-------+ - C - C mm6 = shift - C mm7 = ecx = 64-shift - - - C Size odd, destination was unaligned. - C - C source edx+8 edx+4 - C --+---------------+-------+ - C | mm2 | | - C --+---------------+-------+ - C - C dest edi - C --+---------------+---------------+ - C | written | | - C --+---------------+---------------+ - C - C mm6 = shift+32 - C mm7 = ecx = 64-(shift+32) - - - C In both cases there's one extra limb of src to fetch and combine - C with mm2 to make a qword at (%edi), and in the aligned case - C there's an extra limb of dst to be formed from that extra src limb - C left shifted. - - movd disp(4) (%edx), %mm0 - testb $32, %cl - - movq %mm0, %mm1 - psllq $32, %mm0 - - psrlq %mm7, %mm0 - psllq %mm6, %mm1 - - por %mm2, %mm0 - - movq %mm0, disp(0) (%edi) - jz L(end_odd_unaligned) - movd %mm1, disp(-4) (%edi) -L(end_odd_unaligned): - - movl SAVE_EDI, %edi - addl $SAVE_SIZE, %esp - emms - - ret - - -L(end_even): - - C Size even, destination was aligned. - C - C source edx+8 - C --+---------------+ - C | mm2 | - C --+---------------+ - C - C dest edi - C --+---------------+---------------+ - C | written | | - C --+---------------+---------------+ - C - C mm6 = shift - C mm7 = ecx = 64-shift - - - C Size even, destination was unaligned. - C - C source edx+8 - C --+---------------+ - C | mm2 | - C --+---------------+ - C - C dest edi+4 - C --+---------------+-------+ - C | written | | - C --+---------------+-------+ - C - C mm6 = shift+32 - C mm7 = ecx = 64-(shift+32) - - - C The movq for the aligned case overwrites the movd for the - C unaligned case. - - movq %mm2, %mm0 - psrlq $32, %mm2 - - testb $32, %cl - movd %mm2, disp(4) (%edi) - - jz L(end_even_unaligned) - movq %mm0, disp(0) (%edi) -L(end_even_unaligned): - - movl SAVE_EDI, %edi - addl $SAVE_SIZE, %esp - emms - - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/popham.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/popham.asm deleted file mode 100644 index 95965b74d40046ab3acd767d9dbcf9b54aebe6ff..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/popham.asm +++ /dev/null @@ -1,213 +0,0 @@ -dnl AMD K7 mpn_popcount, mpn_hamdist -- population count and hamming -dnl distance. - -dnl Copyright 2000-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C popcount hamdist -C P3 generic 6.5 7 -C P3 model 9 (Banias) 5.7 6.1 -C P3 model 13 (Dothan) 5.75 6 -C K7 5 6 - -C unsigned long mpn_popcount (mp_srcptr src, mp_size_t size); -C unsigned long mpn_hamdist (mp_srcptr src, mp_srcptr src2, mp_size_t size); -C -C The code here is almost certainly not optimal, but is already a 3x speedup -C over the generic C code. The main improvement would be to interleave -C processing of two qwords in the loop so as to fully exploit the available -C execution units, possibly leading to 3.25 c/l (13 cycles for 4 limbs). -C -C The loop is based on the example "Efficient 64-bit population count using -C MMX instructions" in the Athlon Optimization Guide, AMD document 22007, -C page 158 of rev E (reference in mpn/x86/k7/README). - -ifdef(`OPERATION_popcount',, -`ifdef(`OPERATION_hamdist',, -`m4_error(`Need OPERATION_popcount or OPERATION_hamdist defined -')')') - -define(HAM, -m4_assert_numargs(1) -`ifdef(`OPERATION_hamdist',`$1')') - -define(POP, -m4_assert_numargs(1) -`ifdef(`OPERATION_popcount',`$1')') - -HAM(` -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC2, 8) -defframe(PARAM_SRC, 4) -define(M4_function,mpn_hamdist) -') -POP(` -defframe(PARAM_SIZE, 8) -defframe(PARAM_SRC, 4) -define(M4_function,mpn_popcount) -') - -MULFUNC_PROLOGUE(mpn_popcount mpn_hamdist) - - -ifdef(`PIC',,` - dnl non-PIC - - RODATA - ALIGN(8) - -L(rodata_AAAAAAAAAAAAAAAA): - .long 0xAAAAAAAA - .long 0xAAAAAAAA - -L(rodata_3333333333333333): - .long 0x33333333 - .long 0x33333333 - -L(rodata_0F0F0F0F0F0F0F0F): - .long 0x0F0F0F0F - .long 0x0F0F0F0F -') - - TEXT - ALIGN(32) - -PROLOGUE(M4_function) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - -ifdef(`PIC',` - movl $0xAAAAAAAA, %eax - movl $0x33333333, %edx - - movd %eax, %mm7 - movd %edx, %mm6 - - movl $0x0F0F0F0F, %eax - - punpckldq %mm7, %mm7 - punpckldq %mm6, %mm6 - - movd %eax, %mm5 - movd %edx, %mm4 - - punpckldq %mm5, %mm5 - -',` - movq L(rodata_AAAAAAAAAAAAAAAA), %mm7 - movq L(rodata_3333333333333333), %mm6 - movq L(rodata_0F0F0F0F0F0F0F0F), %mm5 -') - pxor %mm4, %mm4 - -define(REG_AAAAAAAAAAAAAAAA,%mm7) -define(REG_3333333333333333,%mm6) -define(REG_0F0F0F0F0F0F0F0F,%mm5) -define(REG_0000000000000000,%mm4) - - - movl PARAM_SRC, %eax -HAM(` movl PARAM_SRC2, %edx') - - pxor %mm2, %mm2 C total - - shrl %ecx - jnc L(top) - - movd (%eax,%ecx,8), %mm1 - -HAM(` movd (%edx,%ecx,8), %mm0 - pxor %mm0, %mm1 -') - orl %ecx, %ecx - jmp L(loaded) - - - ALIGN(16) -L(top): - C eax src - C ebx - C ecx counter, qwords, decrementing - C edx [hamdist] src2 - C - C mm0 (scratch) - C mm1 (scratch) - C mm2 total (low dword) - C mm3 - C mm4 \ - C mm5 | special constants - C mm6 | - C mm7 / - - movq -8(%eax,%ecx,8), %mm1 - -HAM(` pxor -8(%edx,%ecx,8), %mm1') - decl %ecx - -L(loaded): - movq %mm1, %mm0 - pand REG_AAAAAAAAAAAAAAAA, %mm1 - - psrlq $1, %mm1 - - psubd %mm1, %mm0 C bit pairs - - - movq %mm0, %mm1 - psrlq $2, %mm0 - - pand REG_3333333333333333, %mm0 - pand REG_3333333333333333, %mm1 - - paddd %mm1, %mm0 C nibbles - - - movq %mm0, %mm1 - psrlq $4, %mm0 - - pand REG_0F0F0F0F0F0F0F0F, %mm0 - pand REG_0F0F0F0F0F0F0F0F, %mm1 - - paddd %mm1, %mm0 C bytes - - - psadbw( %mm4, %mm0) - - paddd %mm0, %mm2 C add to total - jnz L(top) - - - movd %mm2, %eax - emms - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/rshift.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/rshift.asm deleted file mode 100644 index 345d23a25e3881b643dcbc495794a9dfcdc5f884..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mmx/rshift.asm +++ /dev/null @@ -1,480 +0,0 @@ -dnl AMD K7 mpn_rshift -- mpn right shift. - -dnl Copyright 1999-2002 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - - -C K7: 1.21 cycles/limb (at 16 limbs/loop). - - - -dnl K7: UNROLL_COUNT cycles/limb -dnl 4 1.51 -dnl 8 1.26 -dnl 16 1.21 -dnl 32 1.2 -dnl Maximum possible with the current code is 64. - -deflit(UNROLL_COUNT, 16) - - -C mp_limb_t mpn_rshift (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned shift); -C -C Shift src,size right by shift many bits and store the result in dst,size. -C Zeros are shifted in at the left. The bits shifted out at the right are -C the return value. -C -C This code uses 64-bit MMX operations, which makes it possible to handle -C two limbs at a time, for a theoretical 1.0 cycles/limb. Plain integer -C code, on the other hand, suffers from shrd being a vector path decode and -C running at 3 cycles back-to-back. -C -C Full speed depends on source and destination being aligned, and some hairy -C setups and finish-ups are done to arrange this for the loop. - -ifdef(`PIC',` -deflit(UNROLL_THRESHOLD, 10) -',` -deflit(UNROLL_THRESHOLD, 10) -') - -defframe(PARAM_SHIFT,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -defframe(SAVE_EDI, -4) -defframe(SAVE_ESI, -8) -defframe(SAVE_EBX, -12) -deflit(SAVE_SIZE, 12) - - TEXT - ALIGN(32) - -PROLOGUE(mpn_rshift) -deflit(`FRAME',0) - - movl PARAM_SIZE, %eax - movl PARAM_SRC, %edx - subl $SAVE_SIZE, %esp -deflit(`FRAME',SAVE_SIZE) - - movl PARAM_SHIFT, %ecx - movl %edi, SAVE_EDI - - movl PARAM_DST, %edi - decl %eax - jnz L(more_than_one_limb) - - movl (%edx), %edx C src limb - - shrdl( %cl, %edx, %eax) C eax was decremented to zero - - shrl %cl, %edx - - movl %edx, (%edi) C dst limb - movl SAVE_EDI, %edi - addl $SAVE_SIZE, %esp - - ret - - -C ----------------------------------------------------------------------------- -L(more_than_one_limb): - C eax size-1 - C ebx - C ecx shift - C edx src - C esi - C edi dst - C ebp - - movd PARAM_SHIFT, %mm6 C rshift - movd (%edx), %mm5 C src low limb - cmp $UNROLL_THRESHOLD-1, %eax - - jae L(unroll) - leal (%edx,%eax,4), %edx C &src[size-1] - leal -4(%edi,%eax,4), %edi C &dst[size-2] - - movd (%edx), %mm4 C src high limb - negl %eax - - -L(simple_top): - C eax loop counter, limbs, negative - C ebx - C ecx shift - C edx carry - C edx &src[size-1] - C edi &dst[size-2] - C ebp - C - C mm0 scratch - C mm4 src high limb - C mm5 src low limb - C mm6 shift - - movq (%edx,%eax,4), %mm0 - incl %eax - - psrlq %mm6, %mm0 - - movd %mm0, (%edi,%eax,4) - jnz L(simple_top) - - - psllq $32, %mm5 - psrlq %mm6, %mm4 - - psrlq %mm6, %mm5 - movd %mm4, 4(%edi) C dst high limb - - movd %mm5, %eax C return value - - movl SAVE_EDI, %edi - addl $SAVE_SIZE, %esp - emms - - ret - - -C ----------------------------------------------------------------------------- - ALIGN(16) -L(unroll): - C eax size-1 - C ebx - C ecx shift - C edx src - C esi - C edi dst - C ebp - C - C mm5 src low limb - C mm6 rshift - - testb $4, %dl - movl %esi, SAVE_ESI - movl %ebx, SAVE_EBX - - psllq $32, %mm5 - jz L(start_src_aligned) - - - C src isn't aligned, process low limb separately (marked xxx) and - C step src and dst by one limb, making src aligned. - C - C source edx - C --+-------+-------+-------+ - C | xxx | - C --+-------+-------+-------+ - C 4mod8 0mod8 4mod8 - C - C dest edi - C --+-------+-------+ - C | | xxx | - C --+-------+-------+ - - movq (%edx), %mm0 C src low two limbs - addl $4, %edx - movl %eax, PARAM_SIZE C size-1 - - addl $4, %edi - decl %eax C size-2 is new size-1 - - psrlq %mm6, %mm0 - movl %edi, PARAM_DST C new dst - - movd %mm0, -4(%edi) -L(start_src_aligned): - - - movq (%edx), %mm1 C src low two limbs - decl %eax C size-2, two last limbs handled at end - testl $4, %edi - - psrlq %mm6, %mm5 - jz L(start_dst_aligned) - - - C dst isn't aligned, add 4 to make it so, and pretend the shift is - C 32 bits extra. Low limb of dst (marked xxx) handled here separately. - C - C source edx - C --+-------+-------+ - C | mm1 | - C --+-------+-------+ - C 4mod8 0mod8 - C - C dest edi - C --+-------+-------+-------+ - C | xxx | - C --+-------+-------+-------+ - C 4mod8 0mod8 4mod8 - - movq %mm1, %mm0 - psrlq %mm6, %mm1 - addl $32, %ecx C shift+32 - - movd %mm1, (%edi) - movq %mm0, %mm1 - addl $4, %edi C new dst - - movd %ecx, %mm6 -L(start_dst_aligned): - - - movq %mm1, %mm2 C copy of src low two limbs - negl %ecx - andl $-2, %eax C round size down to even - - movl %eax, %ebx - negl %eax - addl $64, %ecx - - andl $UNROLL_MASK, %eax - decl %ebx - - shll %eax - - movd %ecx, %mm7 C lshift = 64-rshift - -ifdef(`PIC',` - call L(pic_calc) -L(here): -',` - leal L(entry) (%eax,%eax,4), %esi - negl %eax -') - shrl $UNROLL_LOG2, %ebx C loop counter - - leal ifelse(UNROLL_BYTES,256,128+) 8(%edx,%eax,2), %edx - leal ifelse(UNROLL_BYTES,256,128) (%edi,%eax,2), %edi - movl PARAM_SIZE, %eax C for use at end - - jmp *%esi - - -ifdef(`PIC',` -L(pic_calc): - C See mpn/x86/README about old gas bugs - leal (%eax,%eax,4), %esi - addl $L(entry)-L(here), %esi - addl (%esp), %esi - negl %eax - - ret_internal -') - - -C ----------------------------------------------------------------------------- - ALIGN(64) -L(top): - C eax size, for use at end - C ebx loop counter - C ecx lshift - C edx src - C esi was computed jump - C edi dst - C ebp - C - C mm0 scratch - C mm1 \ carry (alternating) - C mm2 / - C mm6 rshift - C mm7 lshift - C - C 10 code bytes/limb - C - C The two chunks differ in whether mm1 or mm2 hold the carry. - C The computed jump puts the initial carry in both mm1 and mm2. - -L(entry): -deflit(CHUNK_COUNT, 4) -forloop(i, 0, UNROLL_COUNT/CHUNK_COUNT-1, ` - deflit(`disp0', eval(i*CHUNK_COUNT*4 ifelse(UNROLL_BYTES,256,-128))) - deflit(`disp1', eval(disp0 + 8)) - -Zdisp( movq, disp0,(%edx), %mm0) - psrlq %mm6, %mm2 - - movq %mm0, %mm1 - psllq %mm7, %mm0 - - por %mm2, %mm0 -Zdisp( movq, %mm0, disp0,(%edi)) - - -Zdisp( movq, disp1,(%edx), %mm0) - psrlq %mm6, %mm1 - - movq %mm0, %mm2 - psllq %mm7, %mm0 - - por %mm1, %mm0 -Zdisp( movq, %mm0, disp1,(%edi)) -') - - addl $UNROLL_BYTES, %edx - addl $UNROLL_BYTES, %edi - decl %ebx - - jns L(top) - - -deflit(`disp0', ifelse(UNROLL_BYTES,256,-128)) -deflit(`disp1', eval(disp0-0 + 8)) - - testb $1, %al - psrlq %mm6, %mm2 C wanted rshifted in all cases below - movl SAVE_ESI, %esi - - movd %mm5, %eax C return value - - movl SAVE_EBX, %ebx - jz L(end_even) - - - C Size odd, destination was aligned. - C - C source - C edx - C +-------+---------------+-- - C | | mm2 | - C +-------+---------------+-- - C - C dest edi - C +-------+---------------+---------------+-- - C | | | written | - C +-------+---------------+---------------+-- - C - C mm6 = shift - C mm7 = ecx = 64-shift - - - C Size odd, destination was unaligned. - C - C source - C edx - C +-------+---------------+-- - C | | mm2 | - C +-------+---------------+-- - C - C dest edi - C +---------------+---------------+-- - C | | written | - C +---------------+---------------+-- - C - C mm6 = shift+32 - C mm7 = ecx = 64-(shift+32) - - - C In both cases there's one extra limb of src to fetch and combine - C with mm2 to make a qword to store, and in the aligned case there's - C a further extra limb of dst to be formed. - - - movd disp0(%edx), %mm0 - movq %mm0, %mm1 - - psllq %mm7, %mm0 - testb $32, %cl - - por %mm2, %mm0 - psrlq %mm6, %mm1 - - movq %mm0, disp0(%edi) - jz L(finish_odd_unaligned) - - movd %mm1, disp1(%edi) -L(finish_odd_unaligned): - - movl SAVE_EDI, %edi - addl $SAVE_SIZE, %esp - emms - - ret - - -L(end_even): - - C Size even, destination was aligned. - C - C source - C +---------------+-- - C | mm2 | - C +---------------+-- - C - C dest edi - C +---------------+---------------+-- - C | | mm3 | - C +---------------+---------------+-- - C - C mm6 = shift - C mm7 = ecx = 64-shift - - - C Size even, destination was unaligned. - C - C source - C +---------------+-- - C | mm2 | - C +---------------+-- - C - C dest edi - C +-------+---------------+-- - C | | mm3 | - C +-------+---------------+-- - C - C mm6 = shift+32 - C mm7 = 64-(shift+32) - - - C The movd for the unaligned case is the same data as the movq for - C the aligned case, it's just a choice between whether one or two - C limbs should be written. - - - testb $32, %cl - movd %mm2, disp0(%edi) - - jz L(end_even_unaligned) - - movq %mm2, disp0(%edi) -L(end_even_unaligned): - - movl SAVE_EDI, %edi - addl $SAVE_SIZE, %esp - emms - - ret - -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mod_1_1.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mod_1_1.asm deleted file mode 100644 index 1bbe6f92d767690a9324fe59ae37454a5ed14107..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mod_1_1.asm +++ /dev/null @@ -1,221 +0,0 @@ -dnl x86-32 mpn_mod_1_1p, requiring cmov. - -dnl Contributed to the GNU project by Niels Möller and Torbjorn Granlund. - -dnl Copyright 2010, 2011 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C P5 ? -C P6 model 0-8,10-12 ? -C P6 model 9 (Banias) ? -C P6 model 13 (Dothan) ? -C P4 model 0 (Willamette) ? -C P4 model 1 (?) ? -C P4 model 2 (Northwood) ? -C P4 model 3 (Prescott) ? -C P4 model 4 (Nocona) ? -C AMD K6 ? -C AMD K7 7 -C AMD K8 ? - -define(`B2mb', `%ebx') -define(`r0', `%esi') -define(`r2', `%ebp') -define(`t0', `%edi') -define(`ap', `%ecx') C Also shift count - -C Stack frame -C pre 36(%esp) -C b 32(%esp) -C n 28(%esp) -C ap 24(%esp) -C return 20(%esp) -C %ebp 16(%esp) -C %edi 12(%esp) -C %esi 8(%esp) -C %ebx 4(%esp) -C B2mod (%esp) - -define(`B2modb', `(%esp)') -define(`n', `28(%esp)') -define(`b', `32(%esp)') -define(`pre', `36(%esp)') - -C mp_limb_t -C mpn_mod_1_1p (mp_srcptr ap, mp_size_t n, mp_limb_t b, mp_limb_t pre[4]) -C -C The pre array contains bi, cnt, B1modb, B2modb -C Note: This implementation needs B1modb only when cnt > 0 - -ASM_START() - TEXT - ALIGN(8) -PROLOGUE(mpn_mod_1_1p) - push %ebp - push %edi - push %esi - push %ebx - mov 32(%esp), %ebp C pre[] - - mov 12(%ebp), %eax C B2modb - push %eax C Put it on stack - - mov n, %edx - mov 24(%esp), ap - - lea (ap, %edx, 4), ap - mov -4(ap), %eax - cmp $3, %edx - jnc L(first) - mov -8(ap), r0 - jmp L(reduce_two) - -L(first): - C First iteration, no r2 - mull B2modb - mov -12(ap), r0 - add %eax, r0 - mov -8(ap), %eax - adc %edx, %eax - sbb r2, r2 - subl $3, n - lea -16(ap), ap - jz L(reduce_three) - - mov B2modb, B2mb - sub b, B2mb - lea (B2mb, r0), t0 - jmp L(mid) - - ALIGN(16) -L(top): C Loopmixed to 7 c/l on k7 - add %eax, r0 - lea (B2mb, r0), t0 - mov r2, %eax - adc %edx, %eax - sbb r2, r2 -L(mid): mull B2modb - and B2modb, r2 - add r0, r2 - decl n - mov (ap), r0 - cmovc( t0, r2) - lea -4(ap), ap - jnz L(top) - - add %eax, r0 - mov r2, %eax - adc %edx, %eax - sbb r2, r2 - -L(reduce_three): - C Eliminate r2 - and b, r2 - sub r2, %eax - -L(reduce_two): - mov pre, %ebp - movb 4(%ebp), %cl - test %cl, %cl - jz L(normalized) - - C Unnormalized, use B1modb to reduce to size < B b - mull 8(%ebp) - xor t0, t0 - add %eax, r0 - adc %edx, t0 - mov t0, %eax - - C Left-shift to normalize - shld %cl, r0, %eax C Always use shld? - - shl %cl, r0 - jmp L(udiv) - -L(normalized): - mov %eax, t0 - sub b, t0 - cmovnc( t0, %eax) - -L(udiv): - lea 1(%eax), t0 - mull (%ebp) - mov b, %ebx C Needed in register for lea - add r0, %eax - adc t0, %edx - imul %ebx, %edx - sub %edx, r0 - cmp r0, %eax - lea (%ebx, r0), %eax - cmovnc( r0, %eax) - cmp %ebx, %eax - jnc L(fix) -L(ok): shr %cl, %eax - - add $4, %esp - pop %ebx - pop %esi - pop %edi - pop %ebp - - ret -L(fix): sub %ebx, %eax - jmp L(ok) -EPILOGUE() - -PROLOGUE(mpn_mod_1_1p_cps) - push %ebp - mov 12(%esp), %ebp - push %esi - bsr %ebp, %ecx - push %ebx - xor $31, %ecx - mov 16(%esp), %esi - sal %cl, %ebp - mov %ebp, %edx - not %edx - mov $-1, %eax - div %ebp C On K7, invert_limb would be a few cycles faster. - mov %eax, (%esi) C store bi - mov %ecx, 4(%esi) C store cnt - neg %ebp - mov $1, %edx - shld %cl, %eax, %edx - imul %ebp, %edx - shr %cl, %edx - imul %ebp, %eax - mov %edx, 8(%esi) C store B1modb - mov %eax, 12(%esi) C store B2modb - pop %ebx - pop %esi - pop %ebp - ret -EPILOGUE() diff --git a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mod_1_4.asm b/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mod_1_4.asm deleted file mode 100644 index bb7597edd29180cd138a427efa6813a8ba770371..0000000000000000000000000000000000000000 --- a/src/plugins/e-acsl/contrib/libgmp/mpn/x86/k7/mod_1_4.asm +++ /dev/null @@ -1,260 +0,0 @@ -dnl x86-32 mpn_mod_1s_4p, requiring cmov. - -dnl Contributed to the GNU project by Torbjorn Granlund. - -dnl Copyright 2009, 2010 Free Software Foundation, Inc. - -dnl This file is part of the GNU MP Library. -dnl -dnl The GNU MP Library is free software; you can redistribute it and/or modify -dnl it under the terms of either: -dnl -dnl * the GNU Lesser General Public License as published by the Free -dnl Software Foundation; either version 3 of the License, or (at your -dnl option) any later version. -dnl -dnl or -dnl -dnl * the GNU General Public License as published by the Free Software -dnl Foundation; either version 2 of the License, or (at your option) any -dnl later version. -dnl -dnl or both in parallel, as here. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -dnl for more details. -dnl -dnl You should have received copies of the GNU General Public License and the -dnl GNU Lesser General Public License along with the GNU MP Library. If not, -dnl see https://www.gnu.org/licenses/. - -include(`../config.m4') - -C cycles/limb -C P5 ? -C P6 model 0-8,10-12 ? -C P6 model 9 (Banias) ? -C P6 model 13 (Dothan) 6 -C P4 model 0 (Willamette) ? -C P4 model 1 (?) ? -C P4 model 2 (Northwood) 15.5 -C P4 model 3 (Prescott) ? -C P4 model 4 (Nocona) ? -C AMD K6 ? -C AMD K7 4.75 -C AMD K8 ? - -ASM_START() - TEXT - ALIGN(16) -PROLOGUE(mpn_mod_1s_4p) - push %ebp - push %edi - push %esi - push %ebx - sub $28, %esp - mov 60(%esp), %edi C cps[] - mov 8(%edi), %eax - mov 12(%edi), %edx - mov 16(%edi), %ecx - mov 20(%edi), %esi - mov 24(%edi), %edi - mov %eax, 4(%esp) - mov %edx, 8(%esp) - mov %ecx, 12(%esp) - mov %esi, 16(%esp) - mov %edi, 20(%esp) - mov 52(%esp), %eax C n - xor %edi, %edi - mov 48(%esp), %esi C up - lea -12(%esi,%eax,4), %esi - and $3, %eax - je L(b0) - cmp $2, %eax - jc L(b1) - je L(b2) - -L(b3): mov 4(%esi), %eax - mull 4(%esp) - mov (%esi), %ebp - add %eax, %ebp - adc %edx, %edi - mov 8(%esi), %eax - mull 8(%esp) - lea -12(%esi), %esi - jmp L(m0) - -L(b0): mov (%esi), %eax - mull 4(%esp) - mov -4(%esi), %ebp - add %eax, %ebp - adc %edx, %edi - mov 4(%esi), %eax - mull 8(%esp) - add %eax, %ebp - adc %edx, %edi - mov 8(%esi), %eax - mull 12(%esp) - lea -16(%esi), %esi - jmp L(m0) - -L(b1): mov 8(%esi), %ebp - lea -4(%esi), %esi - jmp L(m1) - -L(b2): mov 8(%esi), %edi - mov 4(%esi), %ebp - lea -8(%esi), %esi - jmp L(m1) - - ALIGN(16) -L(top): mov (%esi), %eax - mull 4(%esp) - mov -4(%esi), %ebx - xor %ecx, %ecx - add %eax, %ebx - adc %edx, %ecx - mov 4(%esi), %eax - mull 8(%esp) - add %eax, %ebx - adc %edx, %ecx - mov 8(%esi), %eax - mull 12(%esp) - add %eax, %ebx - adc %edx, %ecx - lea -16(%esi), %esi - mov 16(%esp), %eax - mul %ebp - add %eax, %ebx - adc %edx, %ecx - mov 20(%esp), %eax - mul %edi - mov %ebx, %ebp - mov %ecx, %edi -L(m0): add %eax, %ebp - adc %edx, %edi -L(m1): subl $4, 52(%esp) - ja L(top) - -L(end): mov 4(%esp), %eax - mul %edi - mov 60(%esp), %edi - add %eax, %ebp - adc $0, %edx - mov 4(%edi), %ecx - mov %edx, %esi - mov %ebp, %eax - sal %cl, %esi - mov %ecx, %ebx - neg %ecx - shr %cl, %eax - or %esi, %eax - lea 1(%eax), %esi - mull (%edi) - mov %ebx, %ecx - mov %eax, %ebx - mov %ebp, %eax - mov 56(%esp), %ebp - sal %cl, %eax - add %eax, %ebx - adc %esi, %edx - imul %ebp, %edx - sub %edx, %eax - lea (%eax,%ebp), %edx - cmp %eax, %ebx - cmovc( %edx, %eax) - mov %eax, %edx - sub %ebp, %eax - cmovc( %edx, %eax) - add $28, %esp - pop %ebx - pop %esi - pop %edi - pop %ebp - shr %cl, %eax - ret -EPILOGUE() - - ALIGN(16) -PROLOGUE(mpn_mod_1s_4p_cps) -C CAUTION: This is the same code as in pentium4/sse2/mod_1_4.asm - push %ebp - push %edi - push %esi - push %ebx - mov 20(%esp), %ebp C FIXME: avoid bp for 0-idx - mov 24(%esp), %ebx - bsr %ebx, %ecx - xor $31, %ecx - sal %cl, %ebx C b << cnt - mov %ebx, %edx - not %edx - mov $-1, %eax - div %ebx - xor %edi, %edi - sub %ebx, %edi - mov $1, %esi - mov %eax, (%ebp) C store bi - mov %ecx, 4(%ebp) C store cnt - shld %cl, %eax, %esi - imul %edi, %esi - mov %eax, %edi - mul %esi - - add %esi, %edx - shr %cl, %esi - mov %esi, 8(%ebp) C store B1modb - - not %edx - imul %ebx, %edx - lea (%edx,%ebx), %esi - cmp %edx, %eax - cmovnc( %edx, %esi) - mov %edi, %eax - mul %esi - - add %esi, %edx - shr %cl, %esi - mov %esi, 12(%ebp) C store B2modb - - not %edx - imul %ebx, %edx - lea (%edx,%ebx), %esi - cmp %edx, %eax - cmovnc( %edx, %esi) - mov %edi, %eax - mul %esi - - add %esi, %edx - shr %cl, %esi - mov %esi, 16(%ebp) C store B3modb - - not %edx - imul %ebx, %edx - lea (%edx,%ebx), %esi - cmp %edx, %eax - cmovnc( %edx, %esi) - mov %edi, %eax - mul %esi - - add %esi, %edx - shr %cl, %esi - mov %esi, 20(%ebp) C store B4modb - - not %edx - imul %ebx, %edx - add %edx, %ebx - cmp %edx, %eax - cmovnc( %edx, %ebx) - - shr %cl, %ebx